Jump to content

drjdpowell

Members
  • Posts

    1,969
  • Joined

  • Last visited

  • Days Won

    172

Posts posted by drjdpowell

  1. 7 hours ago, smithd said:

    It may be challenging to make, but I think these web elements are nice:

    http://getbootstrap.com/components/#btn-groups

    You can label each item so you get the benefits of a radio group (in fact you could argue this looks more like a radio button than most radio buttons). Plus its actually a button, so you get the feeling that it takes immediate effect.

    I include a radio group with buttons in the package (calling it "Selection Buttons”).  It also works well if you use icon decals instead of text.  Can’t do the nice borders like in that package, unfortunately. 

    7 hours ago, smithd said:

    "Notify me of replies"

    That’s an example of something that (to me) should be a checkbox, since it is part of a form that must be submitted.  

    5 hours ago, JKSH said:

    because, from prior experience, clicking 'X' closes windows

    Part of the reason I chose not to add the ‘X' is that it makes it more like a checkbox: check for true and nothing for false.  

    5 hours ago, JKSH said:

    To take another page from Google's Material Design, their switches convey state by using colours without "ON"/"OFF" labels at all:

    But that requires the User to learn what the funny circles are, and what “white circle to the left” means.

    • Like 1
  2. I think is makes a difference if one has one, two, or many switches in view.  Many switches both true and false lets one tell the two states apart, especially with radio buttons where only one is true.  With a two-state radio button there can still be User confusion.  And then there is having a lone switch.  The more elaborate design I made is for a lone switch, while the simpler one is for groups.  

    I also have relied on checkboxes in place of true switches.  Though I read somewhere that a checkbox implies an option that don’t immediately take effect (such a as configuration or a form that has to be applied/submitted), while a switch suggests immediate control of something.

  3. I’ve been trying to come up with my own consistent set of custom controls that has a more modern “flat” or “near-flat” style.  Largely this was inspired by reading Google Material Design, and I’ve just added the results as a package in the CR: Flatline Controls.  The latest thing I’ve been toying with are slider switches (here the Material Design guide on switches).  But I’m having a hard time coming up with something that is flat and non-skeumorphic, but also clearly a switch.  Attached is a VI (2011) with multiple switch types.  The most 3D, old-school, looks like a real-world switch (on the left) seems best in terms of being obviously a switch.  My most Google-like switch, on the right, is flat and simple, but not immediately obvious.

    Switches.png

    My question is: what of the multiple LabVIEW switches do people actually use? 

    Trouble with Switches.vi

     

    • Like 2
  4. Sorry, James, I missed your post till today.  

    The primary concern I have is whether error code has a performance cost on all the cases where their is no error.  I haven’t looked, but I don’t think this is the case.  I modified the parsing code a while back to never break up the JSON string, but rather just index along it.  This was for performance reasons, but it should mean that you have full access to the whole string at point of error.   So I’d recommend reporting back more than just 10 characters, possibly including part of the string before the actual section that failed to parse.

  5. Sorry guys, I was on holiday when Stobber asked his question.  Rolf has answered better than I could.   I have only used polling to identify changes.   I tend to have timestamped data with the timestamp as primary key, and getting MAX() of the primary key is very fast.   One could also use triggers to increment some field whenever something of interest changes, and then poll that field.

  6. On 13/03/2016 at 9:56 AM, drjdpowell said:

    See this new video on youtube.  I modified the demo so that 'Instrument' is running on a separate project behind a TCP server, with 'Top Level' connecting as a client via a Remote TCP Messenger.

    ...

    Please note that I have yet to do a Real-Time project with Messenger Library.  I do have a current project using modified TCP actors to communicate with a non-LabVIEW client from another developer (using JSON messages), but that isn't the same.  So please don’t be afraid to ask for help or to make suggestions.  Please see if you can run this example with ‘Instrument' on the Real Time system.

    I've just got the evaluation kit for an sbRIO with RT Linux.  I ran the example with 'Instrument' on the sbRIO; I found that the OpenG zlib compression library did not deploy to RT Linux.  So I had to disable zlib with the following Project Conditional Disable: ZLIB_Compression == OFF

    ZLIB_Compression OFF.png

    Otherwise I didn't make any modifications.  But I (so far) have not been able to get my custom probes working on RT, so I'm investigating other RT-usable tools.

    -- James

  7. 26 minutes ago, Stobber said:

    If I create a DVR in a dynamically launched VI, the DVR ref goes stale when it's passed back to the caller. Anybody know why?

    References are “owned” by the "VI hierarchy" that created them, and are automatically destroyed if that hierarchy goes idle.  Asynchronously-called VIs run in their own independent hierarchy (even if you use the Run method instead of ACBR).  In your example, the DVR was destroyed when the launched VI finished.  

  8. 6 minutes ago, ShaunR said:

    Well. Messages are ephemeral and config info is persistent so at some point it needs to go in a file. This means that messages are great for when the user changes something but a pain for bulk settings. Depending on the storage, your framework and your personal preferences, the emphasis will vary between the extremes of messaging every parameter and just messaging a change has occurred.

    I use messages containing JSON for configuration, combined with a subVI for handling "Set Config” or "Get Config" messages that accepts config info as either a variant cluster or an array of control references.  Once set up, adding new configuration info is trivial.

  9. 1 hour ago, Neil Pate said:

    I currently have no mechanism in my framework  for informing a process that a configuration value has changed. This works fine, but I wonder if others have gone the extra step and implemented configuration data using User Events and removing the global data store?

    You could extend your Action Engine to have a “Register” action, which takes a User Event and saves it in an array internally, then posts to the Event whenever the config value changes.  Then processes loops can register if they need to be informed when something has changed.  Then you have a hybrid AE/messaging system.

  10. 1 hour ago, monzue said:

     Will you include a vi in the queue messenger library that is simply queue status?   I've made this vi a time or two, to see if a actor gets behind,  the problem is that when I switch to a different computer, or update the Messenger library from the repository, this QueueStatus vi is lost......

    Sure, Ben.  I haven’t needed such thing (yet) so I hadn’t put it in.   Is it just the number of elements in the queue that you need?

  11. Does this imply that, in general, "This VI" references do not need to be closed? So I am guessing that memory leaks typically arise from other references (e.g., control refnums, indicators, files, etc.)?

     

    Some refs are static; they always exist and you are neither creating or destroying them.  â€œThis VI†and control refs are of this type.   “Closing†these refs is a no-op.  Other refs are both dynamically created and involve holding resources open of some kind (like an open file, or a Queue or something).  Here is where one worries about ‘memory leaks’.  

×
×
  • Create New...

Important Information

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