Jump to content

Francois Normandin

  • Posts

  • Joined

  • Last visited

  • Days Won


Everything posted by Francois Normandin

  1. 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.
  2. @pajaramillo1 You can open VIs from previous years at any time. LabVIEW is going to compile it for your version and once you save them, you will not be able to open them in a previous version unless you back save them. Download the file you need from this thread and it will work in LV2015.
  3. As a publisher of packages myself, I really like the interface and how easy it is to have a package of mine find its way to the Community repository. It was always nice to have the LAVAG code repository (same info, direct ungated access), but having the packages accessible to anyone just by virtue of refreshing the VIPM package list is really a nice feature. @Antoine Chalons, sure I'll move the Controls Addon to VIPM Community... Already put in the request!
  4. This control seems to have been set as a private member of the library, which means you cannot use it outside of the library itself. If this controlID is available on a public method, it should also be made public. Two things can happen: 1- The library is repackaged with this control set to be public 2- Disconnect the type definition. (Right-click on Controller ID and choose "Disconnect from type definition". Solution 2 is your best choice right now, unless someone ants to repackage the library and expose the control publicly
  5. fixed and pre-released as 1.0.2 build. pushed to default branch https://github.com/LabVIEW-Open-Source/LV-MQTT-Broker/releases/tag/1.0.2
  6. @Neil Pate I thought I had fixed this bug. It dates from my NIWeek 2019 demo when I made a last minute change from "Destroy" public method to "onDestroy" protected method. You see what happens when you do a TDD project and you skip the tests "JUST ONCE" because you're in a hurry and the boss wants this code deployed ASAP??? Hahaha! I'll do a fix this weekend... Edit: Was fixed in the Develop branch... I'll test, bring to master branch, build and release a new package.
  7. I had not realized either it was so simple to add TLS. I didn't plan to upgrade my broker to 2020, but multiplatform TLS is tempting. (shameless plug for my project: https://github.com/LabVIEW-Open-Source/LV-MQTT-Broker)
  8. If it's a commercial project and you're on a deadline, you can check Wireflow's MQTT client. It ain't free, but supports TLS. http://sine.ni.com/nips/cds/view/p/lang/fr/nid/213501
  9. Just a thought. Have you verified which version of MQTT is supported on Azure? MQTT 5 is most recent, and although MQTT 3.1 is normally supported by brokers, Azure IoT hub is not a fully-compatible MQTT broker. There might be restrictions on QoS, will messages or even TCP vs Web Sockets...
  10. As someone that sometimes publishes open source code, I generally choose the most permissive license I can because I basically only want the code to be shared and I don't mind the rest. I had started using the Unlicense for all my work but realized that it's not OSI-approved (and apparently some countries don't recognize Public Domain as a thing), so I fell back on Zero-clause BSD. https://opensource.org/licenses/0BSD You know, if someone wants to use my name to advertise their stuff, I am not sure I would mind. I guess if they misuse my name in some way, I could sue them for that anyhow. But it's not like they'd build a rocket launcher and say that my code powers it, therefore it's bound to work correctly, right? As for the copyright notice on every front panel, block diagram or VI descriptions: please don't do that. 🙂 It just multiplies by 2 the time it takes to compile your packages. Useless, unproductive, annoying and of no legal value. (IMO anyway)
  11. I, too, have been uneasy about this for a long time, but the convenience of the mechanism is such that I generally hope that the user is going to use it properly. There are two alternatives that I know of: - Use the mediator pattern and make sure the user event is unique for your event consumer (if the consumer closes the reference, the mediator can just assume it doesn't want to be notified again and can destroy the thread) - Use Actor Framework or another message-based framework that does not expose the queue/event/notifier publicly.
  12. How about this for "Array to Cluster"? It works for any array size. I have not tested whether it is faster or slower than the "array to fixed-size cluster" method, but it is cleaner than having 256 cases to handle all possible clustersaurus configurations. The "TD_Create Cluster" type descriptor method is a gem you can find at <vi.lib>\Utility\GetType.llb\TD_Create Cluster.vi // Note: you can ignore the error on the unflatten node, an empty array input will return "void" as an output. Oh, and it's faster than OpenG...
  13. https://www.ni.com/en-ca/events/niweek.html?cid=Twitter-a243q000004k8RqAAI-Awareness-sf120637664&sf120637664=1 https://www.linkedin.com/posts/national-instruments_niweek-activity-6656176258671525888-78H6
  14. I recently did a code review with @Jim Kring about upcoming Caraya 1.0 (yeah, I know, I'm using the opportunity to plug Caraya... shame on me), and when I showed him this block diagram, his eyes immediately caught the top comment I placed on the block diagram. It took him less than two seconds to say something like: "You have to put that on the Idea Exchange." (Jim, let me know if I'm misquoting you) Indeed, the Block Diagram... erm... the Mother of All Diagrams... does not have a Subdiagram label property. I say this is a grave injustice. So anyhow, I wanted to share the paternity of this idea because without his enthusiasm, it would not be there: https://forums.ni.com/t5/LabVIEW-Idea-Exchange/Subdiagram-label-for-Block-Diagrams-too/idi-p/4033465 If you like it, please vote!
  15. I don't think it differs from a traditional event-based architecture if one overwrites the Actor Core and adds a parallel loop, which is the equivalent of Gregory's problem statement. The child's Actor Core parallel loop will still need to interact with the parent, through a subscription (user event or message-based). I agree that Actor model solves this problem (AF or event-based): the way to avoid this registration duplication in each child is to refactor the application's architecture where the child does not provide a second parallel loop, but only implements a set of messages that extends the parent. I daresay that a child class that extends its parent, both by adding a parallel loop and by extending its API, is in conflict of the Single Responsibility Principle in that it has two reasons to change. If a second loop is needed, it could probably be handled through composition instead of inheritance.
  16. When I write the file manually in a text editor and I open it, I get "Démarrer", but if I specifically change the encoding of the file to be "ISO 8859-15", I can read it correctly in LabVIEW. Alternatively, any file saved by LabVIEW'S Write to File method can be read correctly as well. I don't know if it works for other languages. My OS is french, so at least that's working for me.
  17. There are graph properties which you can use. Here's an example: (Attached VI saved in LV 2013) LImitCursorRange.vi
  18. I don't know which debugging technique you are employing, but if it's at edit time, you could temporarily change the scope of that method to be public. It's not a silver bullet, but works in a crunch, Now, if it's at runtime, I don't think there is any way apart from writing extra code into your class.
  19. First thing, you need to add an INI token to LabVIEW.ini file, so you can display Unicode in LabVIEW. https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000kJRNSA2&l=en-CA That allows to at least display the characters when copied on the front panel or block diagram (instead of showing up as a "?"). However it does not work with the caption text unless your OS environment supports the language pack. As you can see below, my OS has French and English installed, but not Chinese or Cyrillic characters. I can display the unicodes when I paste directly from a source, so you can try it on a virtual machine with the proper regional settings, and that should work. ** Edit: there is probably another step missing, because I can't get it to show up on my VM with a Russian keyboard installed... ** Edit #2: OK, it works. Turns out that the cyrillic character I had copied from google was not part of the Russian keyboard. I have no way to tell :-). But now it works with another character generated from the russian keyboard itself: "ф".
  20. It is not a bug. It should break for any unsigned integers because that's how the "negate" method works.
  21. @The Q My library is not complete by any means, but what works really works... I've followed a TDD approach. So far I've covered only 79 requirements out of 141, and I haven't started any branches to support MQTT 5.0 yet... So it covers the basic needs such as shown in the presentation you're referring to, but nothing fancy like QoS 1 and 2 and the likes. (or TLS for that matter). If you want something more complete, I'd check Wireflow's implementation first. Now, I'd really like to get other folks to contribute to my Open Source Project. It would give me a moral boost to continue pushing it further. In the meantime, thanks for the advertisement!!!
  22. Do you mean that you want to output the file directly to a PC, from the cRIO? You would have to write your own Test Report class and inject it using the "Define Test Suite" method. If you're up to it, here's a tutorial about doing just that. (the part you need starts around 7min20) The demo shows how to create a JSON report from the provided template, but the steps are the same for writing to a database or sending your file via FTP or WebDAV. You'll need to figure out what you need to effectively point to your PC from the cRIO (including firewall and all...), and inject those parameters in the report constructor. Let me know if anything isn't clear from the demo. Maybe this thread (on the dark side) is also relevant to your question: https://forums.ni.com/t5/NI-Linux-Real-Time-Discussions/Send-file-from-cRIO-to-Pc-using-webDAV/td-p/3463863
  23. Last LabVIEW version in the list (profile) are LabVIEW 2018 and NXG 2.0. The list should be updated.
  24. Hello Dániel, yes you can run Caraya headless starting from version 0.6 and on. You will first need to setup a Test Suite and ensure the "Interactive" flag is set to False. This should instruct the Test Manager to run in Silent Mode (no front panel). On a Real-time target, you can get a text report setup as part of the Test Suite constructor. There is a wiki page on github about this topic: https://github.com/JKISoftware/Caraya/wiki/Defining-a-Test-Suite Choose the Polymorphic instance that makes the most sense for your use case (plain text or JUnit-style XML report) Let me know if this does not work or you need more assistance. If you think there is a bug, you can also report it directly on the issue tracking for the project: https://github.com/JKISoftware/Caraya/issues
  • Create New...

Important Information

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