Jump to content

hooovahh

Moderators
  • Posts

    3,364
  • Joined

  • Last visited

  • Days Won

    268

Everything posted by hooovahh

  1. I'm not sure how close you looked at my resize code, but it is essentially a lossy queue. If you resize a windows by dragging you get lets say 100 events to resize, but I don't have the resize take place, all I do in those 100 events is set a boolean to TRUE, which is handled in the timeout case. So the resize only takes place if another resize hasn't been fired in the last 0ms. This isn't perfect but much better than performing 100 resizes on the UI.
  2. Very nice, but I didn't like how panel resize wasn't handled, so I modified the .Net version to basically perform a refresh after a resize. I also wanted to see the disable function in action, so I added code to disable items randomly when a refresh takes place. One side effect is I see flickering of the images when resizing slowly. I added a defer front panel at one point but that didn't seem to fix it. Regarding the "Click" noise, I'm wondering if you can query Windows and ask what the volume settings are (muted or not and volume level) then mute the speaker, then set the speaker back to the previous settings that it was before a refresh. There are examples on how to mute speakers using Windows DLL calls, but I don't know how to query the current settings. Thumbnail Grid .NET Browser.vi
  3. That is odd, I'd assume it was from some NI tool that had been compiled for both 32 and 64 bit because of some increase in performance. Looking at MAX I also have 64-bit 2009, and 64-bit 2010.
  4. I have a suggestion (back on topic to the original post). For the 1D to 2D VI you have a control for how many columns to make. Would it also be useful to have a control for the number of rows to make? I guess at that point there still is the choice of the order they are put into. So for instance I have an array. [1, 2, 3, 4, 5, 6] If I choose 2 rows how should the output look? [1, 2 3, 4 5, 6] Or [1, 4 2, 5 3, 6] My gut says it would be more useful to have the first but I could see uses for the second output.
  5. Yes, yes, and more yes. Some VIs shouldn't be reentrant (things like functional globals and uninitialized shift registers), but any other subVI in a reentrant VI should be made reentrant. I found an NI article that talks about it more a while ago but can't find it right now. I've been burned more than once, where I had a reentrant VI spin off, but one of the subVIs were not reentrant. Under almost all circumstances the program would run like normal, but once in a while there would be a dead lock, where one VI was running this subVI that was waiting on another VI, which blocked all the other reentrant VIs from running. Attached is a VI if you're interested, which can take a folder of VIs and turn them all into reentrant. Save VIs as Reentrant.vi
  6. This is a great idea, and I've thought of it before but never did anything about it. One issue with LabVIEW when no runtime engine is installed, is there is no way to do any thing (kinda obvious but still frustrating). Having an AutoIt EXE that just checks for the existence of the LabVIEW runtime engine seems like a great idea. Not sure what JKI does at the moment, but I assume they could use something similar when distributing VIPM to a machine that may or may not have the right runtime engine installed. Out of curiosity how do you do the automated install of the runtime engine? I understand there is silent switches that can be used, but do you have it automatically download the runtime engine? Or do you include it with the AutoIt EXE?
  7. On a project once I needed to take a large sample of data, then break it up into chucks and analyze each chunk. I figured I'd use the waveform data type, because the analyzing I was doing was using a few NI VIs that used the waveform datatype. So I read, then used the split waveform VI then analyzed. I found that my VI was running really slowly and the slowness was from the split, and concatenate waveform VIs. I found it was much faster to read as an array of doubles, split or concatenate the array, then turn it into a waveform for the analysis. I wanted to tell this story because in my case it (for some reason) was much for efficient to split and merge arrays then convert to a waveform, then it was to work with the waveform from the start.
  8. If you are using cDAQ is there a reason you haven't tried the ethernet chassis? I swear there was an 8 slot option, and I also thought they were the same price as USB. I've had good luck with replacing a USB solution with an ethernet one which would be more suited for long routes.
  9. I have used AutoIt with LabVIEW. If you choose to install AutoIt (which is optional) it will install some ActiveX components. I can't remember why, but when I did this I found the features to be lacking when compared to just writing AutoIt code and compiling. I also looked into getting DDE to work between an AutoIt EXE program I wrote, and LabVIEW. I could get LabVIEW to talk to the AutoIt EXE but couldn't figure out the other way for some reason. In either case I highly recommend downloading it and at least looking at the shipped examples. They do a pretty decent job of showing you how to do the basics. There's a relatively large community out there to support more complicated programs and functions. It's very liberating, being able to download a single zip that contains source, and a method to build an EXE that will run on any Windows machine, without needing a development environment, or run-time engine.
  10. MonkeyLives=True? But seriously I've never used AutoIt to test an application, just to automate button and key presses.
  11. I'm sure someone else can chime in if I'm wrong about any of this, but from what I've seen the VIP and OGP file format is very similar. They both are essentially a zip archive, with file groups, and a spec file, and I believe an icon file. You can unzip both programatically, and read the spec file if you want to read information about the package. The spec file is in an INI file format and you should have no problem reading. The main difference I know of, is the VIP files cannot be created or edited manually. You cannot take an existing VIP, extract it, add files, then rezip it and use it. This is because there is added checksum information telling VIPM that the package has no corruptions. I don't believe the mechanism to recreate this checksum is documented so editing the package after it is built is prohibited. There is no such restriction on OGP. Extract, replace, and zip works just fine. Both can be installed using VIPM.
  12. Couple things. I have used Gimp in the past for icon file editing which supports transparencies and multiple icons (as layers) but does have limitations as far as usability to I may try IcoFX. Another thing, which may be better in a new post, is what is the restrictions on using icons from sites like the one you posted? It has a "Commercial Icons" section which is where you need to pay to use the icons in a commercial application or website. I don't intend on using it for a commercial application, but a work related one. Does that mean I don't need to pay to legally use these icons? I'm sure most people would just grab images from a Google search and use them without thinking about it, and maybe I should too, but I am just curious about what is legal.
  13. Sounds like you already have an idea of what to do. I've used Orca before to modify MSI installers. I used it to allow an installer to run under a unsupported operating system (Windows 7 at the time). I would give it a shot but adding an option sounds more difficult than just forcing the installer to run like I did. I would be surprises if it wasn't possible, but I would also be surprised if it was easy.
  14. The first thing I did (after understanding what this is) was look at the example program to see how easy it is to interface with. Obviously being the one who would have to integrate with it, this is one of my major concerns. I think an alternative to this could be using a serial port to talk to an Arduino. NI's toolkit has a set of VIs for manipulating a 16 X 2 LCD. I'm also a little surprised something like this didn't exist already. Some kind of quick feed back to an operator would be nice to get the current state of a system without needing communication to a host.
  15. Very slick, surprised you have no comments on it in the last 6 years. I personally use the WireFlow Progress, available through VIPM. I wrap it in a functional global, so it is easier to use, and has my more commonly used functions exposed. I then wrap that into three sub VIs, Create, Update, and Close that behave as expected with only the needed terminals showing. It does have a delay before being shown as well so it isn't seen for quick loading. It also has the ability to cancel, which I think is nice, especially because I can just turn on termination for my for loop, and wire the cancel into that.
  16. Okay this bugs me a little (but I do use this feature). What I normally see is the control name shown, and then in parenthesis I see the default value, if the value is not the default for that data type. So I may have a VI that will show or hide a VI, and I would want it to show by default. So I would have the control named "Show UI?" and the default would be made TRUE, which is what I would put in parenthesis. So my help would show "Show UI? (TRUE)". But this logic does not stand up with this VI, because I see "index 0 (last element)" is the control named "index 0"? No, it is index and the default is "last element" so I would want to see "index (last element)". I don't believe this is any real standard it is just what I've seen. But now that I've thought about it I believe this is probably a lesser known feature, because it is not consistent with the other Array functions. If I leave an Index Array unwired it grabs the first element, not the last. I understand a VI can differ with functionality from one to another, I just think this is one reason why someone would not think that this VI works in this way. Also add to the fact that not many VIs (only primitives I believe) behave differently if nothing is wired, verses the constant made from that terminal. I cannot make a sub VI that has a default of a blank string as a terminal input, but have the VI behave differently if I wire a blank string to it, versus wiring nothing to it. Again it goes to the inconsistency seen between this primitive, and other VIs that developers are familiar with.
  17. The method I always used to get the last element in an array is the "Delete Element From Array". If you don't wire anything to the index, or length, you get a scalar of the last element in the array as the "Deleted Portion". This is actually mentioned in the help so I wouldn't expect this functionality to change.
  18. See this confuses me a bit. I haven't been using LabVIEW for 15 years so I don't know how it worked back then, but how could they restrict that? Wasn't 15 years ago version 5.x or so? Didn't 5.x EXE's build in the RTE into the EXE so no installer was needed on Windows machines, you just run the EXE on any PC? I started using LabVIEW around version 6 and early 7 and I don't ever remember having to buy any RTE licenses. So for as long as I can remember LabVIEW has always had a free way to run EXEs.
  19. I also gave up on Mad Men because it seemed slow the first few episodes. I'm glad I stuck with Breaking Bad past the first few episodes. I understand shows don't always work well for some reason or another early on, and may get better over time, but I just can't invest 12 hours in a first season of a show if I'm just going to not enjoy it after the first season. Maybe the Brits have a better formula with only 6 episodes a season, but then you have the other problem of only 6 episodes a year of some awesome show. The Guild is 45 minutes for a season, so I don't have much of an excuse.
  20. I agree. NI has some of the best product support I've seen. But getting to talk to the right people, or convincing the right people you know what you're doing, can make the support you get very different. I had a memory leak issue when using user events on real time. The issue turned out to be my fault, but I called NI looking for assistance before I knew that. After I explained what I was doing to the first guy I talked to, he told me user events were not allowed on real time. It was at that point I knew I was not talking to the right person. One more (not from me but a co-worker). We were ordering some parts from NI, I forget the actual part but it was a common enough part that we thought lead time would be a week or so. When we ordered them they said it would be 8 weeks. We called NI to see if there was anything that could be done to speed it up. After talking to the right person at NI we found out that there was some mounting bracket that was on back order from another supplier in another country which wouldn't be available for 8 weeks. We told NI that we didn't need the mounting brackets and would take them off anyway, so they took an part from the assembly line without the mounting hardware and sent us one. Note that I was told this story and parts of I may have remembered incorrectly, and your results may vary when needing help to get your hardware sooner.
  21. It seems very "meh" for me. I tried watching it when it was first featured on Xbox Live. I didn't make it through the first season. Not because I hated it, it just isn't for me. I see now that it's on Netflix with a few more seasons so I feel like I should give it another try.
  22. Reincarnate me after I die using recorded information about my self? Sounds like a good mini series...or at least a show worthy of a season, then get canceled after teasing a season 2 premiere at the end of season 1.
  23. I agree so I'll just post what I'm thinking. I want this functionality for my own code so I can use (and likely abuse) it.
  24. So I understand the abuse side of things for sure, but anything can be abused right? If there is proper documentation, and training (which it sounds like there isn't) then I don't see anything wrong with this feature. Should every polymorphic VI not have the "Automatic" option when choosing the type based on the inputs? Should we have to be explicit about that as well? What about Data To Variant, should I have to tell it, hey this is a string and you should convert from string to Variant. I understand this example is weak given that it is a primitive and accepts all data types.
×
×
  • Create New...

Important Information

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