-
Posts
4,883 -
Joined
-
Days Won
296
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by ShaunR
-
Find orphan VIs in project hierarchy (on disk)
ShaunR replied to LogMAN's topic in Source Code Control
Commented Out Diagrams? No Specifies whether LabVIEW returns dependencies that LabVIEW does not invoke, such as those in the Disable case of a Diagram Disable structure. Also, if you wire a constant to the selector terminal of a Case structure, LabVIEW considers dependencies in non-executing cases to be commented out and does not invoke them. -
Oooh. This is fun. http://www.indeed.com/jobtrends/q-labview-q-programming.html?relative=1 Python is far superior to PHP and IMO is why it is enjoying the attention. http://www.indeed.com/jobtrends/q-php-q-python.html?relative=
-
I have access to all versions from 7 through to 2015 (32 and 64 bit as well as other platforms). Let there be no mistake. I am not calling into question LabVIEWs performance and stability - which has always been exemplary. My jocularity is that people still believe this is a valid excuse for shipping commercial software and proffering it as a feature. We have "software as a service" (SAAS) so I will coin the phrase "excuse as a feature" (EAAF) Also, to an extent, it's a case of "you have to laugh or else you would cry" to my disappointment that this myth is allowed to perpetuate when it was a single version (2011) that was supposed to be the "Stability and performance" release after the pain of 2010. I laughed then when they came out with it and I'm still laughing 5 years later (You can find it on LavaG.org) Try charging your customers for a "performance and reliability" version of your software and see how far you get
-
-
Register for shared variable data value change notifications
ShaunR replied to george seifert's topic in LabVIEW General
It did. It was called "BridgeVIEW". They didn't sell many so decided to make it a toolkit instead . -
Register for shared variable data value change notifications
ShaunR replied to george seifert's topic in LabVIEW General
The same way you do from any DLL - PostLVUserEvent. Generating events for LabVIEW is trivial. Maintaining a DLL (especially multi-platform) is a right royal pain in the proverbial,however. -
Find orphan VIs in project hierarchy (on disk)
ShaunR replied to LogMAN's topic in Source Code Control
I do this slightly differently (in Project Probe). Yours might be faster if you only look at link info from the file rather than loading the hierarchy but I have to look at lots of other VI stuff that require opening the VI anyway too (like re-entrancy, debugging enabled, icon, description etc). I also use it to sort VI refnums when force compiling hierarchies. I create the file list similarly to you then I open each VI and check if it has dependencies (Get VI Dependencies Method Node). The VI opened and its dependencies are added to a [found] list. If a VI in the file list is already in the list or in memory then it doesn't need to be opened and could be considered already processed (it has a parent that was previously opened). If a VI has no parent and has no dependencies then it is an orphan. It can also find VIs in conditional disables. So I deduce if it is an orphan from the dependencies of all the VIs -
Centos5 by any chance? This issue is (or at least TLS unable to support greater than 1.0 in Centos5) is the reason I have not moved to TLS on lvs-tools.co.uk yet even though I have the certificate. The problem is that it trains users to ignore privacy and security warnings.. When they are compromised for real, they just carry on without questioning instead of not visiting the suspect site and certainly not putting in user names and passwords..I'm sure there is a proper name for this conditioning but it is the same (but with possibly greater consequences) than T&C dialogues.
-
It's not the certificate. It is because LavaG only supports TLS 1.0 ciphers and they have been deprecated in the latest Chromium (51?) based browsers.
-
Multiple Client, Single Server Configuration
ShaunR replied to stefanusandika's topic in LabVIEW General
OK. So you have a number of processes that handle different IO devices/hardware/things that sit in the "Analog" directory. Most of these (I only looked at a couple) seem to be self contained applications in their own right with things like TDMS logging of data and in-line analysis. By "Applications" I don't mean executables, by the way, just that they can exist standalone. These applications share their data via some Functional Global Variables (FGV_Sensors, FGV_Can et. al.) which are used to collate and store the data for reporting and stuff. These are effectively the" Internal Process" you show in your images that your were talking about creating. Well. You already have them - sort of There were also some global variables in the "Globals" directory but these seemed to be concerned with UI state and list management so I didn't look too closely.. So the question is. Are you looking to bolt on a TCPIP interface on the existing software; changing as little as possible then walk away to do more interesting stuff. Or are you looking to refactor completely for reasons like future-proofing, identifying reuse, enlightenment, and other noble sacrifices of your time - and while you are at it, put a TCPIP interface on it? Or,put another way How bad do you think the current (working) code is and whats wrong with it? -
It's a classic symptom of upgrading to Windows 10
- 6 replies
-
- 1
-
- front panel
- clone
-
(and 2 more)
Tagged with:
-
Yes. But........ 3rd party APIs never create their functions with that in mind and may need more than one parameter or the pointer is passed back as a result rather than a parameter. You can't guarantee what order the multiple CFLN callbacks will be executed in so the "Close" may be before others (can only destroy it once there is no possibility it will be used). Can only populate it from within the DLL requiring special functions and handling in the DLL rather than LabVIEW. Cannot test to see if the pointer is valid (ok, so thats a hard one regardless but you can do stuff to mitigate it) Some of those aren't an issue for you since you use a wrapper DLL so you can write special functions to fit squares into round holes. You probably don't need it at all because you can make your DLL arbiter and guardian of the pointers.As you know,I choose not to write wrapper DLLs and the InstanceDataPtr doesn't quite cover it.
-
Multiple Client, Single Server Configuration
ShaunR replied to stefanusandika's topic in LabVIEW General
For an internal server (since they are all under one process) I would suggest Events or queues depending whether you are pulling or pushing the data. This will be the fastest and most efficient TCPIP I would suggest Network Streams. UDP anything but multicast. -
I'm hoping he'll hijack all those and replace them with ones we can send arguments to 10 years ago I complained about this to NI We'll need to talk about how we configure such a hack (per project, per VI, per node, per IDE, any or all of the above? )
-
This has other positive implications for developers that interface to external code. One issue I (we?) have is that we cannot pass opaque pointers to the "abort", "reserved" and "unreserved callbacks" in CLFNs which are direct hooks to the LabVIEW IDE. Many 3rd party API libraries have an Init and Deinit procedure which is global. You only want to de-init if An init succeeded and allocated resources(no error, say) No residual inits are floating around from the last run. However, the callbacks for the CLFN are on each node so you only know that you can cater for 1&2 if the last node is executed and other nodes didn't error. Aborting in the IDE LabVIEW stops it dead before the last node and therefore you leak the callback. Any other strategy results in a crash of LabVIEW because you don't know whether the callback actually exists. If we had an abort hook (and a reserve and unreserve) that could take arguments then we can easily cater for this type of API. As an example. In order for the the OpenSSL library to be thread safe you must attach a callback to the library. This is a global callback, across all instances and invocations of the library and can only exist once as it is basically a mutex function. So when the library is initialised, a thread callback is created and passed to the API . You are supposed to then free the pointer and "de-init" the callback when you shut down but - and this is a "but" with a capital "CRASH" - only if you created the callback rather than another application.....bummer! Regardless of that GOTCHA; when you abort the IDE, however, you cannot execute your shutdown function which is in the close or De Init VI. Similarly, There is no way to track the callback instance from the LabVIEW dev environment since the pointer allocation exists outside of LabVIEW so you don;lt know how many de-inits to call to clean up. So when you press abort, you leak that callback until LabVIEW exits and the OS cleans it up for you. Ideally, we would use the abort, reserved and unreserved callback function of the CFLN to clean up. (Note that this is not a problem in an application as a Close or De-Init can always be called and is no worse than forgetting to close a queue refnum) Now. NI will argue that you can create these functions in you DLL and call them so it's not a problem. Except that, of course that would only work if you run all nodes in the root loop which defeats the whole point of multi-threaded callback -DOH! (as well as a huge performance hit).Additionally and probably even worse for me is that I use unmolested (or I should say "untampered with" so that hashes can be checked) 3rd party code so that users can update binaries without my intervention and, of course I don't run the risk of introducing nasty, hard to trace bugs into an already extensively tested API I'm not intimate with. So your abort could also enable a global cleanup of a 3rd party API when in the IDE. We could detect the run-time engine or IDE and snatch whatever arguments the clean-up requires then, using your abort hook, pass that directly to the APIs clean up function.
-
There also used to be a "Rusty Nails" section on LavaG.org for stuff that was cool but might blow up LabVIEW. I wonder what happened to that?
-
@Michael Aivaliotis Do you have stats for sign-ups over time like you have shown for posts?
-
Not really. It's a case I can't log into ni.com without jumping through obnoxious "fill all this info out" pages. Because I control what sites can and can't put on my computer, I always have to prove who I am with lots and lots of info which I can't usually remember (first in/out, don't forget ). You obviously missed the attempted humour about my colon that explained that . It's also one of the reasons I never sign up for the beta - unless I really, really have to because the sky will fall in. It's the same as with any cloudflare site. I always (and by that I mean every time, not sometimes) get a captcha -which I can't see because it gets blocked - so I don't go to any sites behind cloudflare. It has nothing to do with a closed attitude. I'm also not sure that me posting over there would alleviate any inferiority complexes they have. It's a corporate support site and doesn't require our input to function. LavaG does so I'd rather post here where I can just log in unmolested! So. Having outlined one possible reason, what are your proposals?
-
@shoneill Ni.com has always been known as "The Dark Side" - a veiled reference to ni.com being a corporate support forum as opposed to an altruistic community run forum. You aren't talking about that, though. (Are you?) You'd have to give me a link. I have a first in, first out memory so that info is long gone.
-
Multiple Client, Single Server Configuration
ShaunR replied to stefanusandika's topic in LabVIEW General
I wouldn't think too hard about how to set it up as a service. It's not an imperative to your design so you can decide later. Think long and hard about how you want the actual software to be constructed then, once it is working, decide how best to start it. Your hands are tied here and very few of us have ever created a LabVIEW service so don't get hung up on it. Yup. That sound familiar. -
@Shoneill I hear what you are saying but it is "LabVIEW Advanced Virtual Architects" so it is pretty much a given there is a certain level of discussion expected in here.just as there is an expectation with the CLA or CLD certification. I wouldn't call that elitism since non experienced programmers do get answers and are, I think, handled gently and patiently when they do appear. It's not like they are ignored because they are considered "newbies". If there is a perceived elitism then can that not also be argued for the CLA seminars and events where you are not welcome unless you are one? I think it is the same premise but on LavaG.org we refuse noone.. That's just bizarre I'm not sure what you are trying to say here.
-
Switch some forums to question & answer format.
ShaunR replied to Michael Aivaliotis's topic in Site News
I think many people look at certain questions to see if it is their area of expertise. If it's not something they are confident in, they leave it for someone else that has better knowledge. If no-one thinks they can offer a good answer after a couple of days then people come back and offer as much as they can. Unfortunately. As most people used the recent view, the already read question drops down a page or two so never gots noticed again especially if there have been a lot of automated posts. A sort or filter by number of posts would enable us to create a Pokemon stream specifically for zero reply posts.. -
Switch some forums to question & answer format.
ShaunR replied to Michael Aivaliotis's topic in Site News
Where is the poll option for "We'll write a plugin so users can choose how they view it" ? Am I in the wrong forums to chat with programmers? -
Switch some forums to question & answer format.
ShaunR replied to Michael Aivaliotis's topic in Site News
I wouldn't worry too much about losing it. From what I can tell. People only marked their own replies anyway Usually, these sorts of language driven feature diktats end up with someone producing a plugin so it can be used regardless of developers' OCD. -
If you answer why you haven't visited in 2 years then that will probably be the answer you seek. Not sure what you mean by "cool" discussions. If you mean things like LVOOP then, personally, I don't think it has anything to do with LavaG being past it. LabVIEW stagnated over 5 years ago and all the subjects have been talked to death and everyone has written and debugged their frameworks (as they were in other languages 10 years before that). There were really only a handful of contributors (AQ, Daklu, Shoneill .... and now I'm struggling) and the only one that still visits to contribute is Shoneill, I think. Generally, though the lack of LabVIEW innovation is the main reason there are less "cool" discussions generally. The thing that made this apparent to me was when a 15 year old technology (Vi Macros) was suddenly re-discovered and piqued everyones interest. There was then a flurry of contribution and excitement (especially me) that brought me out of answering implementation questions and sparked my need to investigate and explore - something that probably hadn't happened for a couple of years on LavaG. So new "cool stuff" isn't being discussed because LabVIEW isn't developing new "cool stuff". VI macros ended with the development of "Named Events" and that is "Cool" with a capital "ICE" If Lavag.org goes then I will not be going over to ni.com. I never post on ni.com and probably only visit it 2-3 times a year if Google gives me a result in the top 5.I got tired of it demanding to know the inside circumference of my colon just to log in and the quality of answers is nowhere near as adroit or concise as on here. You know how after 10 years of programming when you have a problem that would be a 10 minute fix if only you knew x, y or z? So you phone up NI and manage to get through to an application engineer then spend the next 4 hours explaining your problem and them passing it on to someone that actually knows, waiting for their response then replying back. Three days later of this back and forth and they finally escalate your query and you get to talk with the actual person that knows and they tell you "Oh thats what you wanted? x=2, y=4 and z=8". Thats ni.com! In this analogy, LavaG is where ni.com escalates the query to. So don't think of ni.com it as a competitor. Think of it as a filter for studenty and mundane questions