Jump to content

jzoller

Members
  • Posts

    285
  • Joined

  • Last visited

  • Days Won

    5

Everything posted by jzoller

  1. You might consider using a notifier instead. http://zone.ni.com/reference/en-XX/help/371361J-01/glang/notification_vis/ JZ
  2. Because it's fun and related, here's Alex P's related "Pounding a Nail: Old Shoe or Glass Bottle?" post... http://weblogs.asp.n.../25/408925.aspx Does the user know enough to understand a sophisticated explanation? Are they interested in learning, or do they just care about their deadline in two hours? How much time do I have to explain? Is it the type of solution that I can explain without digressing into compiler/parser/memory structure/boring stuff/things I'm marginal on? Has the user actually thought about the problem yet? Answering either short or long form is fine, but it just depends. Personally, I often find that problems I have time to solve are too trivial to be interesting, and problems that are interesting I don't have the time to really dig in to solve them. Joe Z.
  3. I have always like rolfk's explanation at http://lavag.org/top...post__p__25413. LGPL potentially requires segmenting your code into libraries that may not be natural to the architecture. BSD is much more permissive, in that it simply requires notices on the affected code, but doesn't really require an architecture change. I thought http://www.smashingmagazine.com/2010/03/24/a-short-guide-to-open-source-and-similar-licenses/ was a pretty good summary, too. Joe Z.
  4. Just wanted to say I'm loving the thread, thanks for everything! I'm afraid I've been sidetracked lately by swapping employers... I'll get back into it one day soon. Joe Z.
  5. Thanks Shaun, I should be able to take a look at it this weekend.
  6. Hi all, I've put together a small library to convert JSON formatted messages into something more useful in LabVIEW: variant attributes. It's still in progress (more scripting to go...), but you can see it at: http://code.google.com/p/jsonlv/downloads/list. Grab and unzip the .zip, open the json_example.vi, and work from there. Because JSON is a pretty variable format, I'm looking for JSON (valid or not) that breaks the parser. If anyone wants to give it a try, please feel free to contact me here, or at joe@underflowsoftware.com. (Side note: LV crashes if you try to create a very, very deeply nested cluster using scripting. So... don't do that!) Thanks, Joe Z.
  7. http://forums.ni.com/t5/Multifunction-DAQ/NI-DAQmx-Base-3-5-Mac-OSX/td-p/1980101 James-D's answer was pretty reasonable, I thought.
  8. Ton, There are potential licensing issues on this version. I'll be re-implementing (without globals) for an open source version... or anyone else is welcome to, if they wish. Joe Z.
  9. It looks useful. My work currently doesn't allow me to get to the mirrors that carry the OpenG tools, so I'll check it out later tonight.
  10. Thanks Ton! I'll scrub the code for other possible race conditions as well. Joe Z.
  11. Maybe someone can find what I'm doing incorrectly... I'm doing a fairly literal port of json_parse.js from Douglas Crockford. It's an indirect recursive descent parser that uses a global to track where it's at in the JSON string that it's parsing. Essentially, value() calls object(). object() may then call value(), and so on. Works great... as long as my value.vi has a breakpoint inserted at the beginning. Take the breakpoint out, and the vi doesn't... really seem to execute. Or it does, but unpredictably. Does anyone have any insight into what might be going on here? The code was crashing with an access violation. I spoke with an AE, and he said my top level VI was corrupted. Replacing the LV native globals with an LV2 global fixed the crash, but hasn't fixed the execution issue. Code's attached, if anyone has any insight. Parse.vi is the top level. (Sorry, haven't had a chance to implement array() yet...) Thanks, Joe Z. json indirect recursion.zip
  12. I recently went through a training with Requirements Gateway. It struck me as a vastly powerful and versatile engine (really amazing!)... hidden behind an incredibly clunky and dated VB6 style interface. Screen switching to set up the model in one place and view the effects in another. Very strange mouse behavior: click a button to enter some mode (like there was no mouseover event...?), and the mouse teleports to a different part of the screen. Entry fields were also... odd: some things you could click on, some you couldn't (but it seemed like you should). And clicking on entry fields tended to make the screen flash as it redrew everything so I could type. Nothing came up in the training about web integration, either. That's something I more or less expect a modern, expensive tool to have boldly stamped on the front. Honestly, RG had the overall feel of a tool that had been abandoned except for the document interface engine. Sorry NI folks, I really wanted to like it. Joe Z.
  13. I'm late to this, but I wanted to make a recommendation for a project you should do someday: Build a compiler for a programming language. Just a small one. Sounds complicated, right? Really, it's not that bad. At its core, a compiler just translates information from one form to another. I guarantee, though, that you will learn more about how CS is applied than in just about any other project. And, it turns out, a huge number of day to day, real world problems can be solved with the exact same ideas that compilers implement. There are tons of resources on Google for compiler building. Good luck! Joe Z.
  14. Congrats Paul! Nothing is exciting as astronomy... I hope we get to see many images in the coming years.
  15. I'm very much not an expert, but I've tinkered with this a bit. My experience is that it is functionally impossible to tell my code from internal LV code in the assembly. Perhaps if there were more NI internal knowledge available on how things are structured, this would be more reasonable. It's possible that such structural information is available in the LLVM decomposition... it doesn't appear to be available in DFIR. JZ
  16. In a similar fashion to grabbing the actual queue, you might consider creating a fourth component that just sends out messages to the other three. Then, "spike" the messages with a heavy bias towards suspect states, and see which cause the largest memory increase. You could also mock or fake existing components to isolate the one of the others... 2 cents Joe Z.
  17. I'm a bit confused on AQ's second "Good usage"... why throw away the error, rather than just handling it downstream?
  18. For smaller, relatively unstructured systems (especially when the requirements are still largely unknown), I tend to drop the config file contents into a variant as a set of name/value variant attributes. This maps pretty well to the native ini format. I can pass the top level variant around, and pull out the values as if from a dictionary. There's still the downside of needing to typecast things as they're pulled out of the variant attributes, but overall, it's a very flexible method. I'm not sure how this would work for object initialization. I suppose that each object could contain a single top level variant dictionary, corresponding to it's own section(s) from the ini file. Like most flexible methods, this can be taken too far. Keep in mind that variant attributes hide information, and can make debugging a nightmare. Joe Z.
  19. Never knew this... thanks! Joe Z.
  20. Most major public sites have a license applied to uploaded code through their terms of use. See stackoverflow (section 3) and NI (under User Contributions) for examples. I am not a lawyer, but my understanding from talking to lawyers in the US: If you use code that does not have an explicit license attached to it, you may end up owing the creators licensing fees, and/or they could restrict you from using it. This includes use in non-commercial and non-profit applications. Overall, it's not a good area for misunderstandings, and a real legal opinion is probably needed. Especially if the admins decide to apply a license in the future... do they have to strip all attachments from the past? Do they have to track down all the authors and get permission for the new license to be applied? Does everyone need to create new accounts to agree with the new licensing? JZ
  21. I've used LuaVIEW for this as well. From the manual: I had a (mostly) binary decision tree that had an arbitrary set of rules that users could input to reach a manufacturing rework/binning decision. I used Lua for the original tests, but ended up building my own parser and evaluator directly in LabVIEW. Sadly, the company I did that for is now gone, and the code with it... but such code is possible, and not even that hard, if you don't mind getting all computer-science-like. I adapted my implementation from an elementary textbook, but the basic subjects for googling are evaluating postfix expressions, and converting infix to postfix expressions. Joe Z.
  22. Thanks, this is interesting. What's the recommended action when the consumer reaches the point of needing the information, but the producer hasn't gotten around to filling the future yet? Do you end up having to detect stale data? Joe Z.
×
×
  • Create New...

Important Information

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