Jump to content

Aristos Queue

Members
  • Posts

    3,183
  • Joined

  • Last visited

  • Days Won

    202

Posts posted by Aristos Queue

  1. QUOTE(Clicker @ Aug 9 2007, 06:51 PM)

    Your .lvclass file is corrupt; more specifically, the .ctl file inside the .lvclass file is corrupt, but it amounts to the same thing. I don't know how it got to be corrupt (that blahblahblah.cpp message would be useful in ascertaining that).

    QUOTE(Clicker @ Aug 10 2007, 12:25 AM)

    So LabVIEW 8.5 will use my class in the original 8.2.1 format but after re-saving and then opening it again everything breaks. Perhaps something is wrong in the new file format which I find very discouraging.
    :(

    Far far more likely is that something is wrong with the original 8.2 file format and the now corrected 8.5 file format is having trouble interpreting it. There is one known issue along those lines (I put in special code to recognize the corrupt 8.2 files and fix them, but you may have found another form of the corruption). Or it could be as you say, a corruption of 8.5 itself.

    I'm playing with the files a bit to see if I can get some more info.

  2. Here's one that was specifically requested by LAVA users:

    In Tools>>Options>>Front Panel, you'll now find an option for "Connector pane terminals default to Required." This makes it so that any new input connections (except the error code cluster) that you put on the conpane -- either by explicit use of the front panel wiring tool or using Create SubVI -- will default to Required instead of Recommended. The default is FALSE so as to maintain consistency with past LVs; I expect that most of you experienced users will decide to enable it.

  3. At the LAVA BBQ on Tuesday night, I offered as one of the door prizes a copy of my deck of cards:

    http://forums.lavag.org/index.php?act=attach&type=post&id=6583

    For those unfamiliar with tarot cards, read here. In short, a tarot deck is a deck of 88 cards that first appeared in the middle ages in Europe used in fortune telling. Each of the cards is symbolic of some aspect of life, and by random pulling of cards from the deck, so the story goes, one may intuit answers to questions.

    The PMTDftGP brings the power of card reading to the everyday software release manager.

    • Not sure whether a given feature will be well received by customers? Consult the deck!
    • Need to know when the release party should be scheduled? Consult the deck!
    • Deciding which programmer to fire during cutbacks? Consult the deck!

    The deck is designed with a graphical, dataflow interface that G programmers will find immediately intuitive. The 22 cards of the Major Arcana have been redesigned to depict the phases of a programmer's enlightenment. The Minor Arcana come in four suits of 14 cards each -- Wires (R&D), Nodes (Sales&Marketing), Structures (IT&Manufacturing), and Controls (Users). Included in the deck is a nifty instruction card for doing a basic reading from the deck, though the deck is fully compatible with all known ANSI standard tarot layouts.

    The images for the individual cards may be downloaded here.

    If you would like to print your own deck, then follow these instructions:

    1. Visit www.plaincards.com and purchase 1 set of their blank tarot card pages.
    2. Download the card images formatted for printing on 8.5x11 pages from here. The cards are layed out to be printed on the cardstock purchased from plaincards.com.
    3. Print the cards using your favorite color printer, or visit Kinko's. Be aware that Kinko's will only print from .pdf formats, so you'll have to convert the .png files over (Mac computers can do this easily by opening the .png files in Preview and then saving as .pdf). Also, make sure you remind the Kinko's staff that the images are 8.5x11 and DO NOT scale the images to fit the printer margins. Failure to do this will waste the very valuable cardstock and make you want to kick a Kinko's employee in the shins.
    4. Optionally, spray the plaincards after printing with the spray laminate also available from plaincards.com to make the cards easier to handle and harder to stain.

    Here are three cards as a sample of the deck:

    http://forums.lavag.org/index.php?act=attach&type=post&id=6584http://forums.lavag.org/index.php?act=attach&type=post&id=6587http://forums.lavag.org/index.php?act=attach&type=post&id=6585

  4. QUOTE(Ben @ Aug 7 2007, 01:51 PM)

    Concidering who asked that question, I had to stop and double check myself.

    Ah. Now I see. I focused on the logic of the "not and" because that was completely different than the gate sequence I would've chosen, so I thought the bug you were seeing was there. I didn't even check the "off by one" problem.

  5. QUOTE(Val Brown @ Aug 7 2007, 10:25 AM)

    Absolutely -- it's a really cool, intuitive and easy to use feature.

    Caveat: It works great for pure VI projects. It has issues when libraries (.lvlib, .xctl, .lvclass or .lvsc) get involved. It can identify the conflicts, but the untangling is much more manual. The tools will become more robust as time goes by.

    PS: .lvsc is the new file extension for the LV State Charts, introduced in this morning's keynotes. Some folks would also include .xnode in the list, but I don't include imaginary files in my list. :-)

  6. Strict timing always requires the real-time operating system. You simply cannot guarantee timing using MS Windows or any of the desktop operating systems. You can get very close by turning off screen savers, virus checking, file caching, and a host of other aspects of the system, but you'll never get to the point of zero interrupts in your time-critical thread.

    You should talk to your area NI sales person to get a good handle on exactly which LV version is the one for your needs. They're the most qualified to differentiate the different tools.

  7. QUOTE(Val Brown @ Aug 7 2007, 03:12 AM)
    already transitioned my 8.2.1 project to LV 8.5. It was an interesting process -- which gave me a great introduction to the "Resolve Conflicts" feature of the new Project interface deployed in 8.5.
    Just to be clear to everyone... if you haven't used LV8.5, you might get the impression from this post that there's some sort of great Migration Phase to transition from 8.2 to 8.5. There isn't. But LV8.5 has strengthened the ability of the project to make sure that you're loading the VIs you intend to be loading -- an attempt to fix the ancient curse of Cross Linked VIs. It works pretty well, but when you first load your project in 8.5, if you've got lots of VIs on your disk that are the same file name and multiple of them are referenced from within your project, the project now has a series of tools, including "Resolve Conflicts dialog", to give you tight control over exactly which ones should be part of the project and associated with what caller VIs.
  8. QUOTE(Tomi Maila @ Aug 6 2007, 03:03 PM)

    Is it always the rookie that files all the bug reports?

    This is like Supreme Court Justice Stephen Bryer... in an interview, he said he had been the newest justice for 12 years, and the newest justice is the one who has to answer the door if anyone knocks while the judges are debating. 12 years of answering the door!

  9. QUOTE(eaolson @ Aug 3 2007, 05:06 PM)

    See, answers like this are why I bother to ask questions. I had been thinking of the refactor reason myself, but using it for range checking makes it go from "handy" to "damn useful." To be honest, I'm surprised that subVIs don't enforce the Data Range criteria for front panel controls for this very reason.
    There's a good reason for this but I can't remember it right now. It made sense when it was explained to me long long ago.

    QUOTE

    So just how many working branches of LabVIEW are there at NI at any one time? Or do you just occasionally spin off the "cool stuff that's working" into a new version?

    Spin off, fork, merge... you name it, we've probably had a reason to do it. The Mindstorms NXT was a fork of the entire source base at one point, for example. It does make versioning and VI mutation rather interesting sometimes. I honestly don't know how many forks/revisions are in development at the moment.

  10. QUOTE(Omar Mussa @ Aug 3 2007, 04:00 PM)

    This is the age of information ;)

    So did you 'fix the glitch' (ie remove it completely) or decide to make it work despite your arguments for accessors (which btw, will ultimately need to unbundle and bundle data from a class wire)?

    I fixed the bug that made insert of a Bundle node not find the right terminal for the LVClass. In a future LV version, Bundle will insert correctly when you are on a member VI of the LV class. We're not ever going to have public or protected data on my watch.

  11. QUOTE(eaolson @ Aug 3 2007, 03:33 PM)

    Advantages of a write accessor:

    1) Suppose that you have a cluster that has a wrong value in it. Where did that wrong value get set? You search your entire LV hierarchy for all the bundle/bundle by name nodes, set a conditional custom probe on each one, and run until you find which one is the problem. Compare that with you open the only VI that is ever used to bundle new values into the cluster, set a single conditional probe, and run until you find the problem.

    2) A given field of a cluster is supposed to always have a value in some range. Everytime a VI bundles a new value into the cluster, you have to remember to put the range checking code down. Compare that with only a single VI able to bundle new data in, it becomes easy to enforce range checking on values.

    Advantages of a read accessor:

    1) Suppose you have a cluster of data about a person. One of the fields is "age". Your program works great. But the next year you realize that you have to update your entire database to add one to everyone's age. You realize that you were silly to store "age" as a numeric. You change to store a Timestamp and whenever someone asks for age, you subtract from the current date. If you have a raw cluster, you now have to visit every point in the code where they were directly unbundling "age" and change it to call a subVI that unbundles Timestamp and does the subtraction. Had you had an accessor in the first place, you wouldn't have to revise any of the code except the accessor VI.

    These are the big three: debug, range check, and refactoring. There are other smaller advantages. The debug advantage is so pervasive as to warrant using accessors for all data that will be accessed outside the class itself (and sometimes it pays to use the accesssor method even on VIs that are inside the class).

    QUOTE

    Yessssssss.... who wants to be Igor? Submit resumes at NI Week!

    QUOTE(Omar Mussa @ Aug 3 2007, 03:41 PM)

    And then, it hit me, or rather I hit it ... on accident I right clicked a tad further to the left of a vertical class wire ... let's call it on the left side of the vertical class wire... insert bundle by name and *presto* it actually had the bundler wired correctly. Soooo close to usable. It won't work at all on a horizontal wire as far as I can tell.

    LV 8.5 hasn't been out for a full day yet, but I already get to post this:

    This is known and already fixed in a future version of LabVIEW. *sigh*

  12. Users: Recursion? In LV8.5? Did he really say that?

    Me: Yep.

    Users: This isn't some VI Server hocus pocus is it?

    Me: Nope.

    Users: This is honest-to-goodness-subVI-on-its-own-block-diagram recursion, right?

    Me: Yep.

    Users: What's the catch?

    Me: Well, you've got to use LVclasses to get it. Mwuhahaha!

    Details? Check out LV8.5, and look at

    examples\lvoop\Recursion\Demo Recursion.vi

    Ah. I feel better. I've been wanting to announce that for many months now.

    Eventually someone will ask why non-LVClass VIs can't have recursion. The answer is, they can, and someday they will. But LVClasses were already positioned to take advantage of some of the early refactoring work needed to make recursion possible. For now, I like to think of recursion as bait, to draw users into trying LVClasses who wouldn't otherwise. :-)

  13. QUOTE(Omar Mussa @ Aug 3 2007, 03:06 PM)

    I just installed LV 8.5 evaluation and it looks like you can now 'find' dynamic dispatched VIs as expected now -- both from the traditional 'Find All Instances' and the new project 'Find Callers'.

    Oh. Hey! Look at that! 8.5 is available.

    (I never know when that's going to happen... R&D hands over the final CD to a figure in shadowy darkness who disappears into the night, and sometime after that everything goes live.)

    In that case...

    Perhaps you should check out the new "Cluster, Class & Variant" palette on the block diagram. ;-)

  14. QUOTE(Omar Mussa @ Aug 2 2007, 08:01 PM)

    1) If you right click on a class wire and select insert, the context menu you see shows '[class name] Pallete' (grayed out) and 'All VIs ...' --

    I expect to see the cluster pallette so I can insert a bundle or unbundle by name (assuming I'm in a class method). If I navigate to the bundle/unbundle by name function, LabVIEW miswires the inputs and I have to manually reconnect them. This is really a bad behavior from a class developer perspective.

    We created classes to be able to generate new LV datatypes. One of those requirements is that the new datatype be able to look like a new type and not specifically a LabVIEW class. So the popup palette for a LV class is completely definable through its Properties page. We didn't add a default palette. This is a decision that has been both praised and damned and may be revisited in the future. One of the issues is "Should you show the App Control palette (with the To More Specific prim) or the Cluster palette (with the bundle/unbundle)?" We'll talk about this topic more when we get to your point #5.

    QUOTE

    2) Class inheritance data is not exposed properly to child classes -- there is no protected data. I want to unbundle protected class data -- I should be able to unbundle/bundle (i.e. access) protected properties of a parent class from a child class.

    Sorry... this is correct behavior and is not subject to review. Create a protected accessor VI to give children access to parent data. All the arguments for why there is no public data apply to why there is no protected data. There are so many programming benefits to channeling access to data through accessors that any weakening of that wall is going to take a pretty compelling use case, which no one has yet proposed. We will be making it substantially easier to create such accessor VIs in upcoming LV versions.

    QUOTE

    3) You can't 'find' dynamic dispatched VIs using a standard LabVIEW search. This means you also can't 'Find All Instances' of your dynamic dispatch VIs. This makes debugging applications a real pain and means you have to be very selective of which VIs you want to make dynamically dispatched.

    A definite weakness. Something that is on the "must be fixed soon" list.

    QUOTE

    4) (This issue was raised earlier by Jim Kring but I reiterate its usability issue for me) -- you can't drag a class onto a Filepath control. This annoys me a lot -- I really hate having to do this from Windows Explorer.

    CAR'd for bug fixing.

    QUOTE

    5) The object primatives are not easy to find... there should be a LVOOP pallette. Its really annoying to have to navigate to the 'App Control' pallette to access functions like 'To More Specific Class' and even worse 'Call Parent Method' -- LabVIEW treats objects as second class citizens -- which then translates to the development community treating them as such as well.

    Yes. There should. (*yells over shoulder* Hey, rest of LV R&D, you see, at least one user agrees with me!! ).

    Let me highlight part of your quote again:

    QUOTE

    LabVIEW treats objects as second class citizens

    I *sooooo* agree. :-) I have been told that to be a first class citizen, a feature has to have users first. There's a chicken/egg problem here, but I have been slowly assembling a chicken from spare parts. Continuing this odd analogy, perhaps I should start giving out certificates to early adopters. "Congratulations, you're part of the LabVOOP Chicken!"

    QUOTE

    These issues seem painfully obvious to me as someone who uses LabVIEW a lot. I think as these issues are handled better, adoption will increase. I look forward to the next round of fixes.

    Congratulations, you've just identified some, but not nearly all, of the major usability issues with LV classes. I will now dance happily since none of these are *functionality* issues. Functionality for the 8.2 release. Usability comes next. There's only so many hours in the day to work classes into all of LV's nooks and crannies. :-)

  15. QUOTE(bbean @ Aug 3 2007, 10:06 AM)

    http://forums.lavag.org/index.php?act=attach&type=post&id=6526''>http://forums.lavag.org/index.php?act=attach&type=post&id=6526'>http://forums.lavag.org/index.php?act=attach&type=post&id=6526

    I keep getting this error and even if I delete the file it mentions. It doesn't get fixed. Also I don't even think I have a "controls" pallete in the user.lib directory. :headbang:

    Just a guess, but I would try launching the paletted editor, going to the controls palette, and deleteing the subpalette that references this file.

  16. QUOTE(zoogies @ Jun 25 2007, 04:05 PM)

    But I just wanted to gather you guys' insight; maybe there's some awe-inspiring new feature in LV8.2 that should jump out at me?

    I didn't spend six years developing LabVIEW classes so that you guys could stay at LV7.1. :)

    Yes, LV classes should jump out at you as awe inspiring. Unfortunately, it's hard to sell them as awe inspiring (an ongoing problem I'm working on).

    If you're doing any substantial desktop development (classes don't yet go to the various target platforms) then classes:

    1) ... help write more organized VIs

    2) ... help make VIs that are easier to debug

    3) ... help write VIs that are easer to extend with new features

    4) ... help write VIs that are easier to hand off to the next developer

    5) ... help write VIs that are easier to reuse

    The folks who've heard my sales pitch in person know that I mean every one of those claims. Not everyone believes me, but the number of converts is growing.

    Stability? Yes, there were seven ugly bugs in LV8.2 that are fixed with the 8.2.1 patch. There are still some glitches in LV8.2.1, but it just keeps getting better. I can't promise that LabVIEW classes are the way of the future for LabVIEW development, but they will be if I can convince enough people to try them and to realize the power and potential.

  17. QUOTE(dsaunders @ Aug 2 2007, 10:52 AM)

    The popup is 'part' of the control that is on that VI front panel. No matter how it is implemented it should not state that you left the VI's front panel. This is new behavior with LV 8.2 as well.

    The drop box can actually over hang the edge and/or bottom of the window (and it can over hang the top of the window in the case of a very large drop menu). That's why it is implemented as a separate window -- it is actually a different window. You have left the front panel any time you are over these components. You get a VI Window Leave because the operating system has a VI Window Leave.

    I am very surprised to hear that this is new in 8.2. Very surprised because the implementation of the rings/enums has been this (again, to the best of my knowledge) for as long as there have been rings and enums. I would expect this behavior to go back to 6.1 (the introduction of the event structure). The fact that it doesn't replicate says to me that someone fixed a bug. Probably we weren't detecting other cases where we had left the window, leading to various bugs in other VI use cases (such as someone implementing custom popup menus or somesuch by creating temporary windows).

  18. QUOTE(Ben @ Aug 2 2007, 10:22 AM)

    No. What it should support is a theory that drop boxes are implemented as hovering windows -- just as they are in every other app environment that I know of. The VI Mouse Leave event is correct in that respect ... the mouse is now over a different window. I believe you'll get the same thing with popup menus.

    QUOTE(Ben @ Aug 2 2007, 10:22 AM)

    Wouldn't it be just grand if NI opened up the library of all of their XControls?

    I think we have. When XControls were new in 8.0, there were zero in the palettes and (to the best of my knowledge) that was because none of NIs controls were XControls. I think that remains true for all the core LabVIEW controls. XControls have started showing up in some of the modules and toolkits, but all the ones I've seen are wide open (no password protection).

  19. QUOTE(PaulG. @ Jul 31 2007, 03:48 PM)

    The most common reason to make sure a VI is NEVER reentrant is in a functional global where you store data in uninitialized shift registers.

    At the risk of confusing everyone, I do have many functional globals that are reentrant. That's how I can create separate databases -- the core VI is reentrant and contains the uninitalized shift registers. Then I create a series of wrapper VIs that are not reentrant that will be my entry points. Each wrapper VI is thus a single shift register database.

×
×
  • Create New...

Important Information

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