Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by drjdpowell

  1. Since I have just painfully converted many years of Hg repos to Git, I thought I'd make a quick note here. I used the procedure described here: https://helgeklein.com/blog/2015/06/converting-mercurial-repositories-to-git-on-windows/ Here is a screenshot of the Windows cmd window: After this one needs to push to the new git repo on Bitbucket (though you could use another service). I could not do this from the command line, but I could push after opening the repo in SourceTree (which I had previously set up to use the right private key to talk to Bitbucket). Personally,
  2. Does NXG have shortcut menus on controls yet? Can't really tell from Google because NXG seems to follow a "let's rename everything" obscuration strategy. I see it seems to have subpanels now (renamed "panel containers" to prevent new users googling the past expert knowledge on how to best leverage subpanels). And are those menus modern ones with, say, icons and tip strips? That was something I was looking forward to with NXG: modern menus.
  3. Hi, thanks. Crashes when running only one instance, and on multiple computers. I only ran 5 at once to increase the chance of the crash happening, as it is random and can not happen for many days. Was surprised that they all failed together (the "Application Error" messages in the Windows Event Log were within seconds of each other). This kind of rules out something in the simulated data like an NaN triggering a bug, as they are all independent. Thanks for they idea of running instances compiled under different LabVIEW versions, I may try that. I will also ask the DLL maker a
  4. Hello, I have a complex application which calls a proprietary dll from another company. Recently, we have been having repeated crashes (silent, no error dialog except "Application Errors" in the Windows Event Log). As a test, I ran 5 copies of the application (using AllowMultipleInstances=True in the EXE's ini file). All four copies calling the dll crashed within a couple of seconds of each other (crashes happen only on hours/days timescale) while a fifth, not calling that dll, did not. I am confused as to how all the 4 copies failed at the same time. The dll just does a ca
  5. Go get VIPM from JKI directly. I have not tested the library on Linux (other than Linux RT), but it should be able to work, if one has a copy of the sqlite3.so shared library installed in the right place. Does anyone else use this library on Linux?
  6. First thing is SQLite has no timestamp data type. You are responsible for deciding what to use as a time representation. SQLite includes some functions that help you convert to a few possibilities, including Julian day, but I, in this library, choose to use the standard LabVIEW dbl-timestamp. The "get column as timestamp" function will attempt to convert to a time based on the actual datatype: Text: iso8601 Integer: Unix time seconds Float: LabVIEW dbl-timestamp Binary: LabVIEW full timestamp The first two match possibly forms supported by the time functions in SQLi
  7. Standard JSON specification for JSON objects is that they are a collection of named elements with order unimportant, so any JSON library should ignore order and match on names. Missing elements is a design choice, though, and I've gone with "use supplied default" rather than "throw error", for a number of reasons. But as LogMAN shows, there are ways to do checking yourself.
  8. I have a project where Absorption Spectra are saved in an SQLite database. Data is stored in a custom format so as to take up a minimum of space. I have a child class of "Connection" that adds a lot of application-spec code, and a matching child of "SQL Statement. Here is the VI that does a Prepare: Here, multiple bits of information are passes into the child class, about the Timezone of the data and the offset time (times are stored as ms relative to an offset, to save space). The "SQL Statement with Scaled Data" child class has several additional Bind and Get Column vis,
  9. That input is to allow one to (optionally) make a LVOOP child class of SQL Statement. Normally one doesn't use this, but you can use a child class to add functionality. For example, I have used it to define new Bind and Get Column methods that store data in a more compressed format. But you probably can ignore it.
  10. It depends on your architecture. If all your indicators are updated in a single place then you can easily defer updates, but if indicators are updated from many different places then update-on-change is more natural.
  11. I also use materialdesignicons, with a standard of either 54% opaque black, or 100% white, which is the google material design recommended values. The semi-transparant black looks grey, but blends slightly with any background colour, which looks nice. Sometimes I use blue to highlight a key control.
  12. I have always done the second method, and just accepted the extra overhead of one extra message pass. Beware of premature optimization. It is generally rare for me to want to just forward a message like this without the forwarding actor needing to change or react to the message in some way. An alternate design is to accept that you don't have an actor-subactor relationship, but that your subactor should really be a helper loop of the actor. A dedicated helper loop can share references no problem. Your "actors sharing references" is a potentially suboptimal mix of "actors are highly ind
  13. I have never noticed any memory issue, and I wouldn't expect memory as a potential issue with customized controls (the issue that can affect controls is an excessive redraw rate that shows up as a higher CPU load, not memory).
  14. I don't think you can match the raw pull-from-file performance of something like TDMS (unfragmented, of course). SQLite advantages is its high capability, and if you aren't using those advantages then then it will not compare well.
  15. First question is what is your table's Primary Key? I would assume it would be your Timestamp, but if not, the lookup of a small time range will require a full table scan, rather than a much quicker search. Have you put a probe on your prepared statement? The included custom probe runs "explain query plan" on the statement and displays the analysis. What does this probe show?
  16. My app failed due to Queues created but not being closed under a specific condition. Memory use was trivial, and logged app memory did not increase, but at 55 days the app hit the hard limit of a million open Queues and stopped creating new Queues.
  17. I have an app that uses a watchdog built into the motherboard. Failure to tickle the watchdog will trigger a full reboot, with the app automatically restarting and continuing without human intervention. In addition, failure to get data will also trigger restart as a recovery strategy. Still failed at 55 days due to an issue that prevented a Modbus Client to connect and actual get the data from the app. That issue would have been cleared up with an automatic reboot, but detection of that was not considered.
  18. Even that way is hard, as you have to detect the problem to trigger a restart, and it is hard to come up with a foolproof detection method of all potential failure modes.
  19. No, unfortunately, as it uses VIMs that are only availablee in 2017+
  20. Are you using matching bitness? You have to use the same bitness, 32 versus 64, for all DLLs and LabVIEW.
  21. I don't tend to use them unless they have meaning beyond the message itself (ie. they are a natural grouping of data, rather than something that just exists for the message). Most of my messages contain only one piece of data, so no typedef needed (unless that data is naturally a typedef). Also, it is possible to go more than just a typedef: have an API of subVIs to send and receive the messages in a common library. This can be a lot more powerful than just a typedef. An example would be having any message starting with "Config:..." being passed to a Config subVI, with multiple possible me
  22. Plan? Yes, but not a priority. Note, though, that JSONtext returns substrings, meaning you can implement filtering in LabVIEW without making data copies, so the following code implements your example: More effort, of course, but it should be fast, and using LabVIEW is very flexible, and more debug-able.
  23. Unfortunately this contrasts with the current behaviour that null-->NaN for a floating-point number, rather than being the default number input. In standard JSON, the float values NaN, Infinity and -Infinity have to become null, and to convert them back to a default value doesn't make sense. We could add an option to "ignore null items" which would treat nulls as equivalent to that item not existing.
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.