Jump to content

Jon Kokott

Members
  • Posts

    186
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by Jon Kokott

  1. This is specific to AEs: the "typical" usage of an action engine is to use it as a SINGLETON and that the AE itself IS the API used (have fun scoping that without another abstraction layer.) Using it as a CBR node call destroys any ease of maintainability associated with AEs (typdefing the connector pane, re assigning etc.) the only alternative at this point is to make the input/output a variant to get around the octopus connector that results, performing to/from variant. I think if you are good enough to do that, you might as well just step up to classes and type-protect your inputs/outputs, and reap all the run time performance benefit of dispatching instead of case-to-variant steps. I think singletons are inherently not extensible and lead to "god functions." Using a by-ref pattern using SEQs or DVRs is a better way to go. If you really want to go completely nuts with software engineering and maintainability, use the actor framework or some other messaging system. FGs: I don't even consider them useful. Once again, they are a singleton; The only time I'd be happy with them is as a top level application object for immutable objects (config data?) Maybe this is because I'm always making something work with one unit, then down the road I end up testing 6 at a time, and all the FGs are completely useless.
  2. its not that AEs are the only ones that suffer from god syndrome, its that they always end up that way. (its a global singleton for god's sake!)
  3. I'd prefer that functional globals (actually any USR) died a slow death. It is probably because I see people abuse them so easily (access scope, callers are more difficult to track than other by ref mechanisms.) As far as AEs, if I have to look at another octo-deca-pus I might just lose it.
  4. So the connection is actually being established now (it was using the incorrect hash), but I get an error code 62 on the first write to the connection...
  5. I'm assuming that this information is correct for chrome: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17#page-7 section 1.3 This says that the protocal uses a SHA-1 hash, whereas the example is using a MD5. I'll start with that is suppose.
  6. chorme "16.0.912.63 m" is immediately closing the connection, anyone got it to work?
  7. I've done it, it worked. I was using identical binaries on different machines, all of which ran lv2010 sp1. In the future I would probably try to load the class directly from one disc location for both instances using either the load class from path primitive or copying the actual file (probably in a packed library or .llb) and running it that way.
  8. My experience with network shared variables is that they are ridiculously slow. We've always used a tcp connection to share data instead, and found several orders of magnitude of performance achievable.
  9. multiple subpanels "off to the side" or hidden is a reasonable approach. The alternative is to dynamically launch new front panels (they wont be in the same window then) Which ever one you like the look/feel of can dictate what you do. ~Jon
  10. One more thing, moving of subpanels/customization is very difficult. you CAN do what you want to do, but it'll be a pretty massive effort. the best example of how to do this was done by jack Dunway during a coding challenge from a few years back. It was called the "Cogniscent UI" or something similar. It allows the run time user to re-size the subpanels and re-position them at runtime in a very elegant way. At any rate, you should check it out because it is just awesome labview.
  11. Take a look at the actor framework. It is very well suited to what you want to do, and is probably an ideal solution. ~Jon
  12. I'd love to dump 2010 upgrade to 2011, just gotta get the right people on board...
  13. I don't separate compiled code. Additionally I've forced recompile many, many times. That doesn't sound right...
  14. I have inline subvi calls inside a reentrant Dynamic dispatch. It worked for a while, then it started crashing labview. I believe this started happening when I modified the contents of the class being dispatched. Once I removed the re-entrancy it seems to be solved. Anyone encountered anything like this? ~Jon
  15. I've given up on trying to do this. It is an incredibly difficult task to manage mutation history alone and have things work. I've resolved to never support old objects (even though it sometimes works.) and always store as binary. If someone needs to edit the file I create an editor program which is released alongside the actual test software, and use windows to dispatch it on a special file extension. Probably not what you want to hear, but I've had waay too many headaches from people manipulating .ini, xml, or any other type of human readable file. ~Jon
  16. Because its terrible. Check to make sure you have the "unreleased" fix for endpoint, they may have allready pushed out an update since the version from a few weeks ago bled memory so badly (it was literally 10MB/min for me.) I think it straight up crashes around 250 MB of memory. Anyway, you'll have to talk to your IT department about your individual settings, but my advice is to disable the firewall on all the ports you are using on the test setups. It is TERRIBLE with UDP (as in it will kill your connections, make you timeout, and restart.) We couldn't do TFTP updates on any machine running endpoint because it would close our connections after like 1 min of transferring. I would just start fighting the war that is computer security with your IT department, and hopefully get it straight up taken off the machine. It causes nothing but problems for any kind of network activity not called web surfing. ~Jon
  17. Need type definitions for DWORD, LPTRSTR, LPCTSTR. your return type is definitely not double. but convention would say that your function prototype should look like: int32_t GetLongPathName(const char* lpszshortpath, const char* lpszlongpath, int32_t ccBuffer) Check this out: http://www.codeproject.com/Tips/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc I think that lpszshortpath is expecting a Unicode string, so you may have to convert the actual string you put in from ANSI to Unicode. ~Jon
  18. The idea is you don't do the same processing in each slave. In the navigation system you may have several unrelated processes that act on the same command "get directions home." One loop might search for the most direct route, another loop might try to find a route that results in the highest average speed. The results are then collected and based on the desired parameters (most direct route, least amount of time in car, avoiding hiways, etc it uses the correct route) Would the actual implementation actually use this kind of a transport layer? That I'm not so sure of. The actual implementation is more complex than that, so who knows if what you'd end up with would look anything like the original description of how the system is "supposed" to work. ~Jon
  19. You can replicate notifier behavior using the dequeue/SEQ if you only need one "slave" loop. The difference is that that pattern doesn't scale to multiple "slave" loops, you are scaling it by creating multiple queue references, vrs with a notifier you only need one reference. There is one other subtle difference between notifiers and an SEQ implementation: With a notifier you can always retrieve the last notification using the "get notifier status." It will immediately return the last notification value. If you were using an SEQ you would have to store the last notification somewhere else as once the dequeue is performed, its pretty much gone. The idea with notifier "slave" loops is that they all respond to the same command, but the execution time of each loop is independent, and only the latest command is important. ~Jon
  20. Trap the error on a released notifier? I don't follow. What other error conditions would be presented from a notifier? Unless you are shifting the link to the outside world (i.e. notifier/queue) and somehow use another reference to get a new "com link" I'm not sure that would be practical. Since all of your objects are "byval" you couldn't even do this. I'm not following you on this. ~Jon
  21. Not really the modern NI template for M/S, but completely reasonable. I don't go back to LV5 so I'll presume that releasing the queue did not interrupt the dequeue/preview in those days with an error. I've done this, and I hate dislike it. It effectively takes an event based processing node and turns it into a polling mechanism. Why have two asynchronous operators in one loop? One of them is necessarily polled to keep the loop going (either by the master to notify "run" or timed out to indicate "don't stop.) This is debatable, but I've taken to releasing the queue to destroy loops. I feel like it offers a more efficient operation. I usually toss a comment in the loop that the error is the exit condition.
  22. I'm not sure an xnode will be suitable for a collection. You have to know everything about the type in the wire and you'll be stuck with the type after you create the collection. I think you can do what would be useful just using standard class programming, you'll just get a ton of coercion dots.
  23. I don't think there is a licence. You gotta know the tricks to hack them together. You can learn alot just in these forums.
  24. I'm justing trying to make a distinction between the NI template (which I've said before is terrible) and the code you are actually writing (which is actually a good example for people.) I don't wanna get hung up on the vocab, it is just irritating to me that there is this template out there in the wild called "master/slave" which noone uses and is continually talked about. At any rate, here is some xnode magic I've been working on. I have no idea when I'll finish it, but it is in working order as of today. It fits fairly well in with this discussion anyway. It needs to be optimized for recompiles and more thoroughly tested. Disclaimer: Don't use this for anything, its terrible. It will crash labview (not really, but maybe, its not been tested enough to know for sure.) If you still want to look at this, look at the .lvproj in the example folder. It will get you started. The "catch.xnode" is worth your time i think. Observer Pattern.zip
×
×
  • Create New...

Important Information

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