Jump to content

Francois Normandin

  • Posts

  • Joined

  • Last visited

  • Days Won


Everything posted by Francois Normandin

  1. 0-BSD is the only OSI-certified license that gives the same level of restrictions as Public Domain, while still, as you well know from those other presentations you referred to, being recognized in (almost) all countries. Public domain and The Unlicense are not recognized universally. Like Shaun points out, the biggest worry is that someone can claim my work as theirs because the license is open enough that you can copy any part, or the whole, without attribution. Honestly, I don't think the prospect of someone claiming I cheated would meet any level of credibility, since all the development is done in a 3rd-party public repository and I never squash my commits. Easy to prove I went through the development process and I couldn't temper with the commit hashes/timestamps of those commits. You can see all the mistakes, dead-ends, reworks, fixes... Anyway, whether or not you use a more restrictive license would not prevent someone from falsely claiming their work predates yours. If that were to happen, I trust the LabVIEW Community will hold the reputation of the original developer. If the work you want to release is owned by a company, I would recommend to not use 0-BSD. Make sure there is at least an attribution clause.
  2. I think this NI library is a good start: https://www.vipm.io/package/ni_lib_rt_management/ Other options are NI-RAD (image replication), WebDAV, FTP (not recommended) and NI System Configuration. Some more generic info for you to read: https://www.ni.com/en-us/innovations/white-papers/12/simplify-the-deployment-and-replication-of-distributed-systems.html
  3. Hi @Marko Hakkarainen, your "Test Labels" example is broken. Accessors (Write Label) is not public. Perhaps wrapping it into a generic Collection constructor method?
  4. No you cannot. Your simplified example, if the interface is truly abstract, is equivalent to trying to prevent someone from dropping a "empty string constant" on the block diagram. Fundamentally though, it would prevent you from using the direct cast to exercise the override, as shown in the bottom example. The only restriction is that one cannot create a DVR of the interface from outside the interface itself. I have to admit that I have not investigated the consequence of such a pattern in the context of interfaces...
  5. This is not strictly the answer to your question, but if you only use this for elapsed time, I suggest you switch to UTC time instead... There is no daylight savings time in UTC frame of reference, so you are certain it won't hit you. Also, here's a library (shameless plug) you might find useful: https://www.vipm.io/package/labview_open_source_lib_epoch_datetime/ It serves Unix, GPS and ISO time, including support for leap years (and even leap seconds... all 37 of them)
  6. It makes sense if one thinks of it as "6 letters added to the decimal notation".
  7. I typically use a second lvproj file, not for installers, but for the unit testing. The benefit is that I can segregate the dependency on the unit test framework (i.e. Caraya) from the source file that runs the build specs. Although, I don't know if that's super useful if you use a CI server to run both UTs and perform your builds...
  8. Networks Streams implement (and abstract) the concept of Quality of Service without the developer needing to add code for managing intermittent connections. A handshake ensures that all the data transmitted has reached the other endpoint in the order they were sent. Yes, it is probably just a buffer on the sender's side and some ACK replies from the receiver (and incoming buffer), bundled into a seemingly unidirectional stream. For sure there's an overhead compared to straight TCP, but I'm not sure the overhead is that large if you take into account the handshaking that you would need to reproduce the same QoS feature. TCP is more flexible and interoperable. If you need to add QoS to your app, and your app is all LabVIEW on both sides, then Network Streams make sense for reliable 1-to-1 high speed data transfers. If you send lots of small messages, an IoT protocol over TCP is probably more suited for the task (MQTT, etc.).
  9. Right-Click on the "Read From Text File" method and unselect "Convert EOL". The number "13" (0xD or Carriage Return) gives it away. If you look at the HEX representation of what you save and what you read from file, you'll notice the 0xD gets converted to 0xA unless you uncheck that box. Tip: If you deal exclusively with HEX/binary data, you might want to save it using byte arrays instead. The result will be the same in your file, but you won't get bitten by hidden config parameters in your node...
  10. Gave me a good laugh as well... but apparently this image is fake. Once you know it, you wonder why the medals on the sleeves are all pinned towards the down direction with the ribbon stying straight even though one general has his arms bent and the other one not...
  11. We've been calling 3.9 with LabVIEW 2019 without a glitch. Not exactly sure what "support" means in this context. _ _ _ Different topic... If the statement below were a regular expression, wouldn't a "?" be more appropriate? It would stand a better chance of matching at least one element 😉
  12. I'm pretty sure I reported something along those lines during beta testing of LV2020, but it was, if memory serves well, when using malleable with interfaces.
  13. I've seen a similar error dialog accompanied with a crash report. From those logs, I gathered it might also mean that there is not enough contiguous memory available. Perhaps "Largest Available Memory Block" can be of interest as well.
  14. By all means! And may I suggest you look at the events page on LabVIEW Wiki. You can check out many presentations on a wide variety of topics, including scripting and design patterns. https://labviewwiki.org/wiki/Events
  15. The other account you are referring to (previous NI Weeks)... might that be the presenter account? I too remember having had to use a different account to submit abstract and upload presentation material.
  16. Hi Makrem, my guess is that your top-most VI is set to be "modal". https://labviewwiki.org/wiki/VI_class/Front_Panel_Window.Behavior_property To change the behavior, go to the VI's properties and chose "Windows Appearance". Then select the "default" behavior.
  17. I'm a bit perplexed by this one: source: https://www.ni.com/fr-ca/events/niweek/faq.html
  18. It's not listed on the repo, but it is under the MIT license. (It's now been added to the repo)
  19. I assumed Messenger did this too, although I don't use it. 🙂 In SMO, it's a settable parameter by the user based on their needs. The SMO process itself actually should abort in a few milliseconds, so it is heavily dependent on the process overrides. (edit for clarity) The STOP call is a last resort in case the "autoshutdown" message does not work. Even if enqueued at the front, when the actor loop is locked because a "do" is performing a blocking action, stop will kill the thread. Also, Stop will effectively handle a parallel loop that is running concurrently to the actor message handling loop and does not implement correctly the shutdown messages. I daresay it should never happen in production code. The onProcessKill override is provided to have a way to log this event when it occurs. If the developer killed the caller in development mode, that's fine and can be ignored. If it happens in production code, it should be a concern.
  20. You might want to inspect JKI SMO's way to handle this. The SMO Process has a "passive watchdog" that monitors a single-element queue and gracefully exits if the asynch process completes normally... but it will stop the whole asynch thread if the queue reference goes idle. Note that you should use such a mechanism only if you always want your asynch process to get killed in case of a caller going out of memory. (This should be an ultimate way to exit, not a normal way...) SMO process still tries to abort before it ultimately kills the thread. (This is a screenshot from SMO:Process.vi)
  21. 1. Nowadays, Git 100%. 2. Love it. 3. I forced it on my team, but even for my hobby coding, I use SCC. Those closer to retirement are having a hard time. For the younger folks fresh out of school, they'd be surprised if we didn't use Git. I wouldn't bet that all of them know what SVN means. 4. Pros: Large support community online. When stuck, I just spell it out in the search engine and I find a post on stackoverflow that solves my problem It allows enforcement of a workflow that achieves modularity by design, through submodules. Easy to deploy a repo through a usb stick for offline instruments, and to merge offline changes back to server No one can reserve a file and accidentally prevent others to work Cons: No LV integration for visualizing changes 5. SCC never screws up, the developer or the client app does. The app client I use (SourceTree) has a tendency to show "detached heads" that magically disappear when I close the app and open it back again. Detached heads are very confusing and every time I see one, I'm extra careful not to lose any work done. They never occur in a simple repos: only when dealing with submodules. That's a buggy behavior of the app, not a failure of SCC itself.
  22. Whenever it's been used in a project that I knew would persist more than for a simple demo, I've always wrapped the IMAQ API into an image class that handles the name generation with GUIDs to avoid collisions. Sometimes I'll add a singleton registry to keep track of references, but my IMAQ-flavored apps have generally been of low complexity, so I typically maintain a list of objects in the process' private data. When I need to leak the images across multiple processes, it is generally a delegation pattern, and the caller is still responsible for the reference's lifetime.
  • Create New...

Important Information

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