Jump to content

Black Pearl

Members
  • Posts

    410
  • Joined

  • Last visited

  • Days Won

    13

Posts posted by Black Pearl

  1. I joined the crowd rushing after this strange element Hq. Seems like easy to learn/use.

    When I was reading some introductions, I found that they warn to use it for large sets of binary data. Anyone yet experienced to say how it will work on real LV projects?

    The other issue that still keeps me away from using it, is the merging process. As far as I understand Hq yet, merging is the very elemental interaction you would do. I'm stuck with a FDS, so no merging for me (except I write my own LV merge...). Will this be a show-stopper? Should I stay with SVN?

    As a side-note, reading the manuals I discovered that it was my uncle who programmed the second SCC (and the first free one) called Revision Control System (RCS). I'm not sure if he is still into that...

    Felix

  2. Thank you all for the feedback. It'll be next week that I'll have the time to look deeper into this.

    Concerning GUID, I already have xmi:id and I think it's unique for each element=object (and not each type of element=class). So the element manager might be a good idea.

    The main issue I ran into was that I tried to use the eclipse/java implementation to avoid architecting it all on my own. This was obvious the wrong way...

    So I was browsing through an abstract factory (so everything was multi-inheritance of interfaces, and no references of the actual implementation) and trying to find the Set-Accesor method for the owners. Well, the 'trick' is that the GetOwnedStuff returns a object inherited from the list class, which does implement an add method. So I'm going to try to rearchitect it towards native by-val.

    Felix

  3. For this weekend I decided not to play around with VI Scripting but do learn some LVOOP.

    What I would like to do is to get the following design into LVOOP, taken from the UML specs:

    --

    7.3.14 Element (from Kernel)

    [..]

    Associations

    • ownedComment: Comment[*]

    The Comments owned by this element. Subsets Element::ownedElement.

    • / ownedElement: Element[*]

    The Elements owned by this element. This is a derived union.

    • / owner: Element [0..1]

    The Element that owns this element. This is a derived union.

    7.3.33 NamedElement (from Kernel, Dependencies)

    [..]

    Generalizations

    • “Element (from Kernel)” on page 64

    [..]

    Attributes

    • name: String [0..1]

    The name of the NamedElement.

    • / qualifiedName: String [0..1]

    A name that allows the NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed

    from the names of the containing namespaces starting

    [..]

    [2] When there is a name, and all of the containing namespaces have a name, the qualified name is constructed from the

    names of the containing namespaces.

    (self.name->notEmpty() and self.allNamespaces()->select(ns | ns.name->isEmpty())->isEmpty()) implies

    self.qualifiedName = self.allNamespaces()->iterate( ns : Namespace; result: String = self.name |

    ns.name->union(self.separator())->union(result))

    --

    So in everyday-geek-speak:

    * The element class needs a reference to an object of type element (the owner). I'm not really sure how to solve this (DVR's?). I can get this not breaking the arrow by using a parent class of element (ElementParent.lvclass) and using this as part of the private data.

    * If I now try to make the qualified name, I need

    a) to cast the Owner to the Element child class (ok)

    b) to recurse through the GetQualifiedName method. (Here I get errors thrown).

    How would you code up a design like this?

    Felix

    • Like 1
  4. The only recource I found so far is an 6 year old thread in LAVA1.0, so:

    Anyone sucessful in using eclipse together with LabVIEW?

    I actually was just looking to get a nicer uml modelling tool (dia is not advanced enough, I dislike the look of StarUML). So I installed eclipse -> WOW! That's a big supermarket full of developement tools without an cashier. So I hope to upgrade my 'FDS' to the 'über-geek Eclipse Managed More Than Professional Developers Suit'. Or is this just a dream and I only will waste nights trying to get some Java Code running instead of ordinary-but-loved wirework?

    Being new to eclipse at all, it will take some time to understand the concepts and explore the possibilities (any good readings?). So I don't expect to be ready next month. As a start, I'd like to call some LV code from eclipse to get some uml model from eclipse into LV code...

    Felix

  5. Hope your company has a production hall where that monitor fits in!

    But honest: they people that write this kind of code, they certainly always tell the management that they work on a very big project. And we stupid guys won't ever show them such impressive things...

    Wait, there is this inline subVi scripting tool. I just need to make it work fully recursive and get it launched via QD. Every day I will aks for pay-rise and a larger monitor....

    Felix

  6. The temperature rise of the last 3 days is not due to global warming but due to spring. We just had a nice cold winter.

    Global warming on the other hand would cool us down due to the gulf stream going somewhere else or nowhere at all.

    But if weather is the issue, the 'famous' weather-forecaster in germany was accused for rape the last days and is in jail at the moment. Maybe chinese hackers are trying to free him. But due to translation problems they missed the jail administrative network and randomly crashed some wikipedia servers. And tomorrow when they will find out what went wrong (don't forget they live in a different time zone!), they will manipulate world news channels with all that 'google' stories.

    Cat, my brain gets fuzzy when I read your posts. Are you sure your infection isn't transmittable on the digital level?

    ;)

    Felix

  7. I'm still experimenting with the folder structure. This is how it might look using SVN on a local machine:

    ProjectRoot:

    |Repository

    |Build

    |Working Directory

    And the Repo get's checked out to the Working Directory (Build contains the exe that is not under SCC)

    And the Working Directory (in sync with the repo):

    |Code

    |External Documentation

    |Internal Documentation

    |Recources

    Code documentation such as State Machine Diagrams go in the same location as the code.

    As said, I don't have this set as a fixed pattern yet, and it is neither consistent among my projects.

    Felix

  8. I exclude the exe's from my repository, but I consider it a valid practice to do so. (disc space is cheaper than the time lost just in case I had to get that old exe!).

    All the documents go into SCC. External documents won't get changed, so that isn't important to have them under SCC. But design documents (they might not only relate to code but also to electronics, mechanics), roadmaps, user manuals, screenshots are all subject to change, hence they should be SCC'ed.

    Felix

  9. It's a very good text. There are many on that topic that show good and bad examples, but few like this one that discuss the concepts behind. A clear message: how much abstraction from reality should we aim for...

    Felix

  10. If you have a fixed number of channels, you could use the decimate array function.

    For dynamic size of channels, you would need to use a 2D array (clusters are also static).

    If you have 1D data, you could try with the reshape array function if you get a 2D array with the right order. Otherwise you will need to do it by coding on your own... (for-loop or nested for-loops)

    Felix

  11. I got a chance to look over your framework. As I said earlier, I'm not familiar with 7.1 so I can't fairly comment on the implementation. I suspect that it is a very good solution given the tools that are available in that version. Personally, I don't like the idea of a message bus at the application level. It encourages direct communication between application components, which doesn't scale well at all. Direct communication creates a lot of communication paths to monitor. If I have an application with 5 components, I already have 10 communication paths to keep track of. Adding a 6th module to satisfy some new requirement leaves me 15 paths to keep in my head. Pretty soon it just gets too complicated and impossible to figure out what's happening when. Direct communication also leads to dependencies between those components, which limits reusability.

    I was debugging an app recently that used direct communication and one module was receiving a message that was causing it to go into an unexpected state. It was very difficult not only to figure out where the message was coming from, but what state the application as a whole was in that caused this bug. These days if I'm going to have (or event think I might end up with) more than 3 modules I use a mediator to centralize the communication. It's much easier to control what's going on in the app.

    I guess it's a matter of taste.

    I havn't run into issues of scaling, as I connect modules over the bus that have very little communication (like a temperature monitor that publishes the latest reading over the bus and some GUIs are displaying it and in some situations the GUI VIs themself send a new setpoint.

    Because of the loose coupling due to the string-type commands, the modules are pretty reusable (I've done it).

    An older app was using queues to communicate between 3 GUIs with a central 'handler'. That made 3 queues to send commands to the modules and 1 shared queue for the modules to call the handler (this in turn sends commands to the other modules). I feel that this architecture is on the limit with 3 modules, as one more queue would ask for one to many terminals on the ConPane of the central handler.

    Using a huge ComCluster to keep all kinds of queues, notifiers, events and event refnums resulted in spaghetti with a lot of stupid manual updating when I changed some of the Com Types.

    But from your posts I could read that you prefer several wires and not a bus as I do.

    Maybe LVOOP makes a big difference (I have just seen one OOP app using this bus so far).

    Felix

  12. To unregister an user event dynamically, use the event registration refnum and wire the not a refnum constant to the appropiate event terminal. I havn't used that, so I can't detail the issues this might lead to. But there is an example either coming with the installation or online on ni.com, which uses several of the Mouse Events to draw lines on a picture control with unregistering/registering inside each of the event frames.

    Felix

×
×
  • Create New...

Important Information

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