Jump to content

Tomi Maila

Members
  • Posts

    849
  • Joined

  • Last visited

  • Days Won

    9

Posts posted by Tomi Maila

  1. In an ideal world, creating classes would be super lightweight and super fast. In an ideal world we would have all the abstraction tools of all most advanced programming languages together. In an ideal world, we could test all the functionality for all the parameter space of a class public API. We don't live in an ideal world.

    Somewhat limited abstraction capabilities and heavyweightness of creating classes for small tasks encourages sometimes to make design decisions where class private methods implement some functionality that would in an ideal world be better off as an external abstraction unit e.g. a class. In an ideal world, you would unit test these external abstraction units, so why would you not test the same functionality implemented inside your class private methods in our real world use cases.

    Sometimes (often) the parameter space of the class public API is rather wide and testing it thoroughly is impossible give the computing resources. As a result, often many uncommon parameter space combinations stay untested in real world. These untested cases pop up as bugs when someone ends up using the class in an uncommon environment. In these cases you could gain more confidence by testing the internal building blocks of the public API.

    Then there are some applications where the confidence requirements are just so high that you should also test the class private methods as well. Consider for example life support systems or multi billion dollar one-shot space projects. If the life support system malfunctions someone dies. If the space craft malfunctions, billions of dollars are wasted. So when life or billions of dollars are at the stake, it would be rather stupid not to test the class private methods as well, if it could save you from trouble.

    QUOTE (Aristos Queue @ Feb 3 2009, 12:54 AM)

    PS: Friend classes, should they ever come into being, won't do what you just said you expect them to do, ie, give free, uncontrolled access to the private parts of the class. An object doesn't mind if friends come inside the house, but following the object into the bathroom is going too far. That's one feature that I think is poorly implemented in C++ and JAVA, and if LV ever gets it on my watch, we're going to do something just a bit different...

    Can you please shed some light on your idea of implementing friend classes. I'm interested in the computer science theoretical point of view.

  2. QUOTE (robijn @ Jan 27 2009, 10:51 AM)

    I would think for real-time mixing etcetera there are much nicer applications available, also for much less money.

    Joris

    Hi Joris,

    The trick here was not to do only real-time mixing but smart mixing based on real-time visual pattern matching. LabVIEW Vision toolkit should have rather advanced visual pattern matching capabilities. That is not so easily available, at least not as far as I know...

  3. To really be able to visualize block diagrams online with Flash etc, the block diagram structure would need to be exported to something like XML and images for each object within the XML would then need to be exported individually. Then a flash application could construct an interactive preview of the block diagram, where user could browse case structures, event strctures etc and maybe even get context help. Is there an XML schema for VI structure used by NI internally?

    Tomi

  4. I've a friend who is into video production and video art. Lately we have been discussing of several ideas where LabVIEW & NI Vision could be used as a tool to create real-time (or near real-time) video production for artistic and promotional marketing purposes.

    So what would be needed for the projects is first to get a firewire compatible professional level video camera produced live video stream to be acquired into LabVIEW application. Then the LabVIEW application would need to do some visual pattern matching, masking and combining of video layers. The output of this process would need to be then displayed on a video screen and all this would need to happen in near real-time.

    There was a keynote demo on NIWeek 08 by Johann Scholtz where live video stream aquired of Tim Dehne on the stage was masked and combined with a background video layer in real-time. This keynote indicates what I would like to do is possible with LabVIEW. However, I'm not so familiar with NI Vision software and hardware that I could estimate what would be the best set-up for this purpose from hardware point of view and what would it take to actually produce the application to do the real-time video production.

    Can anyone more experienced in the NI Vision field comment, all comments are appreciated.

    Cheers,

    Tomi

  5. QUOTE (Eugen Graf @ Jan 23 2009, 12:24 AM)

    Sorry, if I'm wrong, but I think that scripting is not necessary for LabVIEW (I, personnaly don't use it).

    One real use-case for scripting is automatic code generation. It is common that complex protocols definitions are in a machine readable format such as XML. To implement the latest version of the protocol, you could generate automatically the required code from the XML specification. Or this is true for other programming languages, but for LabVIEW it is impossible without scripting. Hence LabVIEW developers need to manually write complete protocol libraries and manually update changes and bug fixes in protocol libraries whereas developers in other programming languages can simply execute the code generation script to generate the latest version of their protocol library. So maybe you would not use LabVIEW scripting so often in your actual production code, but you could use LabVIEW scripting to generate the production code.

  6. This topic is related to the following question, so I raise it up here. About a year ago I released a Active VI Toolkit prerelease version on ExpressionFlow. The toolkit was closed source as it was based on scripting, XNodes and instance VIs, all three NI "secret" technologies. I didn't want to get trouble with NI by releasing the rather advanced usage of scripting and XNodes to the public. However, I think that as an open source toolkit the Active VI Toolkit would be much more interesting. Does anyone know if releasing the source code under something like LGPL to the public would break NI license agreements?

  7. What if we have two versions of a VI both in autopopulating folder. Say I'm using version control on a autopopulating folder. The version control creates a copy of everything and places them by default into a hidden folder. However I decide to configure the version control to place the files under version control into a _xxx subfolder instead of hidden folder. LabVIEW project is opened and voila, both the _xxx version and the normal version of the whole project is within the project. How do you resolve the conflics if you cannot turn off the autopopulating folder when resolving conflicts? Not only every referenced VI has two versions but also every referring VI has two versions.

  8. I didn't get an answer from my Subversion hosting provider yet. Anyway, I searched for free subversion hosting provider and found xp-dev.com. Below are instructions on how the teams can set up a free subversion account on xp-dev.com.

    For each user who will participate the project, should do the following

    - Signup for an account at XP-Dev.com

    - Login to your account, a dashboard will open

    - Provide the username to the team member responsible for the repository management

    In addition, the repository manager should create the repository and set

    other team members as the repository users

    Create a team account

    - Signup for an account at XP-Dev.com with
    team username
    ,
    not your personal user name

    - Login to
    team
    account, a dashboard will open

    From dashboard, create repository

    - Click on "You have 0 Subversion Repositories" -link

    - Click "Create a new repository" -link

    - Give a name (FAST in this example) and click Save

    - Write down the repository address similar to one below and provide it to all team developers

    From dashboard, add new repository users

    - Add users by clicking Add Add new permissions

    - Click You have 1 Subversion Repositories link

    - Click View Repository Details on repository listing

    - At the bottom of the page, click Add new permissions link

    - Type in another user's Username and set permission type to Write for all developers

    - Click Save

    In addition the subversion client such as TortoiseSVN needs to be configured.

  9. QUOTE (Ben Zimmer @ Jan 4 2009, 01:50 PM)

    Tomi,

    Thanks for the suggestion....

    Ben, I asked my subversion hosting company if they would be able to provide the needed free subversion hosting services to the FIRST teams. They would be happy to, but they also would like to be listed as official sponsors of the competition on the competition web page. I've not been really involved in this FIRST robotic thing in the first place. Also the official website has not been accessible for me for the last two days. Do you Ben have any resources to figure out if the subversion provider can be an official sponsor for the competition or should we look for another solution?

    Tomi

  10. LabVIEW doesn't allow using recursive data types. I wrote an article on it a year ago on ExpressionFlow. What you can do is to make the notifier type to be of parent class or LabVIEW object. Then simply cast the notifier data to more specific when the notifier is received. Also note that you should use the new Wait on Notification (from Multiple) With Notifier History function in class method vis and other reusable code to avoid possible incorrect behaviour or in worst case application freeze conditions.

    Cheers

    Tomi

  11. One way to do this is to poll the webserver for new data points. LabVIEW webserver supports sessions, so you can only send datapoints changed since last poll. If you client is a web browser application, create a polling & refresh application with ajax or flash. Another way is to keep the stream open and from web server constantly write new datapoints to the HTTP stream, however I'm not sure if LV web server supports this kind of persistent HTTP connections.

    Tomi

  12. Thank you all for excellent comments

    QUOTE (crelf @ Dec 11 2008, 08:21 PM)

    Tomi: let us know which model you're interested in so we can target our responses more accurately.

    My company will be unlikely to work on "turn-key" projects directly. We provide consulting services for our customers. However, customers themselves can work on fixed price "turn-key" projects and our job will be to help them deliver the project successfully. I'm more likely to work as part of the customers team rather than develop software of my own. Therefore the customers process is the one that matters, not the process of my company. I want to help customers to choose the correct process for their needs. Therefore the question I asked was rather general, I didn't want to specify the process requirements too strictly as they tend to change from customer to customer. Anyway, I guess most of the projects of my customers will be of type fixed expenses, fixed time and somewhat flexible requirements. The important factor will be development speed and quality and ability to flexibly adapt to changing needs. I also tend to prefer agile and other iterative processes, where all the requirements are not known upfront.

  13. QUOTE (neB @ Dec 11 2008, 04:14 PM)

    What I strongly urge you to do is to take the time to educate your customer and the challenges you are takling in their behalf. Once a customer is "trained" they are much more receptive to your estimates and approaches.

    Can you be more specific what kind of "training" does your customers need? What actually you try to tell them before the first project?

    Tomi

  14. I copy my comment to Pierre Cottin from the blog post to this thread as it may be relevant to the forum readers as well.



    PierreCottin Said:

    Very interesting article!

    I have tried to extend this example to a class Circle inheriting from a

    class Ellipse. I did not manage to compile the circle plugin to acces

    both circle and ellipse object. If I do not include the Ellipse class

    in the projet, it appears as a dependency but the source distribution

    does not include it. If I include the Ellipse class in the projet, I

    have to exclude overridden methods and send it to the support directory

    (to hide it from the main). With two methods, it's not so bad but with

    a real class hierarchy with several parents, it will be quite

    complicated. Do you know an easier way to proceed?



    Thanks.



    Pierre


    Hi Pierre,



    Which version of LabVIEW are you using? I'm testing the scenario you

    suggested with LabVIEW 8.6 and I have no problems. For the Circle

    plugin, I set both Circle and Ellipse classes as Always Included and

    voilà, everything works as suggested. I think the the previous versions

    of the builder may have had problems with colliding classes, so if you

    are using LV earlier than 8.6, you should consider upgrading.



    The plugin search algorithm I suggested in the example is pretty

    plain simple and you should not use this simple version of the plugin

    search algorithm with your scenario as it will identify all classes

    used by the plugin class as plugins themselves. Some other indication

    such as a setting file is needed for identifying the main plugin class.

    I created a modified example for LabVIEW 8.6 that demonstrates the

    usage of plugin inheritance. It can be downloaded from the same download page as the basic example.

  15. Thanks for all for the suggestions so far.

    QUOTE (crelf @ Dec 5 2008, 10:30 PM)

    Learn and live by the IEEE 1288 standards for requirment verbiage - doing so has several benefits: it protects you from scope changes, it makes sure that the customer knows what they're going to get, and it's a standard that is common in military, aerospace, medical, etc industries, and if you're used to using it then you'll have a competitve advantage.

    Crelf, I was browsing the IEEE standards with IEEExplore and didn't find a standard number 1288. Are you confident about the standard number?

    Tomi

  16. Hi folks,

    I've been rather inactive lately here on the forums. The reason for this is I'm in a transition phase where I'm leaving my position at the University of Helsinki and moving forward to founding my own company.

    Related to setting up new business, I'd like to hear what is your preferred LabVIEW development process like? What are the best practices in LabVIEW development process and what are the worst pitfalls. Are you using an agile process, some other kind of iterative process or waterfall model? I'm interested in all the phases of the LabVIEW software development process starting from user requirements, trough software requirements management, the actual coding methods, unit testing, system level testing, hardware testing, integration testing, build process, release process and all the way to release deployment, application update processes and customer feedback collection.

    Please do not concentrate only on good things. Feel free to raise up also problems in your development process that you think may limit your code quality, consume your resources and slow down your development process. Also tell how you deal with communications trough out your process?

    I feel this may end up being a long lasting discussion, at least when all of us start to see the pitfalls of our own development processes.

    The worst mistake we have made so far is related to requirements. We didn't identify and clarify well enough the user requirements for a complicated software project. As a result the developers in the project were not working for a clear goal. The ambiguity in the user requirement lead to unclarity also in the application requirements. The unclarity of the goals not only steered the project to wrong direction but also made developers unmotivated as the goal was not clear enough. Needles to say, this project failed in many ways.

    Tomi

  17. Sounds like a bug to me. For a work-around, I don't have a mac to test but...

    We can assume that there is an OS primitive dialog that LabVIEW calls. So try to figure out what the dialog in question is. It may be tk_getSaveFile or something similar. Now check the manual page for the identified OS primitive, how you should pass it the file pattern list and try to mimic it in your LabVIEW file pattern input. I don't know if this helps at all but maybe gives you a little hope.

×
×
  • Create New...

Important Information

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