<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3607298864599224213</id><updated>2026-01-15T18:48:22.836-06:00</updated><title type='text'>LabVIEW Artisan</title><subtitle type='html'>My experiences coding with National Instruments&#39; LabVIEW programming language</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-2613546424642181865</id><published>2015-02-05T15:17:00.000-06:00</published><updated>2015-02-05T15:17:04.314-06:00</updated><title type='text'>Announcing My Retirement as the World&#39;s Fastest LabVIEW Programmer</title><content type='html'>After winning the title of the World&#39;s Fastest LabVIEW Programmer at NI Week 2008 through 2014, and being challenged at additional venues along the way (I&#39;m looking at you, Copenhagen!), I have decided to retire from the competition and allow someone new to claim the title at NI Week 2015. It feels right to go out on top with an undefeated record.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve really enjoyed defending the title all these years, particularly because of how much it has allowed me to advance the use of Quick Drop to increase LabVIEW developer efficiency. I&#39;m confident that whoever wins the NI Week 2015 competition will be a Quick Drop user.&lt;br /&gt;
&lt;br /&gt;
Thanks to all of my opponents over the years for being such good sports, and good luck to whoever ends up competing for the title this year.</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/2613546424642181865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2015/02/announcing-my-retirement-as-worlds.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/2613546424642181865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/2613546424642181865'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2015/02/announcing-my-retirement-as-worlds.html' title='Announcing My Retirement as the World&#39;s Fastest LabVIEW Programmer'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-7862573784825714463</id><published>2014-10-08T11:01:00.001-05:00</published><updated>2014-10-08T11:01:11.630-05:00</updated><title type='text'>Three Use Cases for LabVIEW Bookmarks</title><content type='html'>When LabVIEW 2013 released, I was really excited about&amp;nbsp;&lt;a href=&quot;https://decibel.ni.com/content/blogs/labview-news-english/2013/10/18/5-things-you-need-to-know-about-labview-bookmarks&quot;&gt;LabVIEW Bookmarks&lt;/a&gt;. I&#39;ve been using them for a year now, and I feel they are one of the most productivity-enhancing features in the whole product.&lt;br /&gt;
&lt;br /&gt;
What are bookmarks? Any word preceded by a &quot;#&quot; symbol within a free label, object label, wire label, or subdiagram label on the block diagram. So they&#39;re super-easy to create (you just type!), and also very easy to manage with the &lt;i&gt;View &amp;gt; Bookmark Manager&lt;/i&gt;&amp;nbsp;window. And my favorite (often-overlooked) aspect of the Bookmark Manager is that it will parse all of the VIs in your project for bookmarks, &lt;b&gt;even VIs that are not in memory!&lt;/b&gt;&amp;nbsp;In my opinion, that&#39;s the primary benefit that the Bookmark Manager provides over the standard Find window.&lt;br /&gt;
&lt;br /&gt;
After using bookmarks regularly over the past year, I have discovered three distinct use cases where they come in handy:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;To-Dos&lt;/b&gt;&amp;nbsp;- This one is probably pretty obvious, but whenever there is a section of code that you know you&#39;ll need to revisit, stick a #todo bookmark there and use the Bookmark Manager to come back to it later.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Benchmarking&lt;/b&gt;&amp;nbsp;- When I&#39;m investigating a large app for performance improvements, I&#39;ll often make tweaks in several places to try to speed things up...turning on inlining, setting reentrancy, parallelizing For Loops, etc. I leave bookmarks (#inlined, #reentrant, etc.) where I make these changes to make it easy to come back to them later if necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Code Review&lt;/b&gt;&amp;nbsp;- I have a colleague with whom I&#39;ve been doing frequent code reviews, and he&#39;s a Bookmark Believer too. It is so nice to arrive at his desk for a code review, and to see the Bookmark Manager already open on his screen, with #review bookmarks ready to go through, outlining all the changes he made.&lt;br /&gt;
&lt;br /&gt;
So if you have LabVIEW 2013 or later, you should really start using this great feature! One final note...if you are using the Bookmark Manager to navigate through code that ships with LabVIEW, you might want to add these INI tokens to your LabVIEW INI file:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;BookmarkManager.ShowVILIB&lt;/b&gt;=TRUE (LabVIEW 2013 and later)&lt;br /&gt;
&lt;b&gt;BookmarkManager.ShowRESOURCE&lt;/b&gt;=TRUE (LabVIEW 2014 and later)&lt;br /&gt;
&lt;br /&gt;
Without these INI tokens, the Bookmark Manager will not show bookmarks in VIs that live in the &lt;i&gt;[LabVIEW 20xx]\vi.lib&lt;/i&gt; or &lt;i&gt;[LabVIEW 20xx]\resource&lt;/i&gt; folders. Obviously I need these tokens for my work in LabVIEW R&amp;amp;D, but I can think of use cases where other LabVIEW developers might need to navigate bookmarks in shipping LabVIEW VIs as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/7862573784825714463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2014/10/three-use-cases-for-labview-bookmarks.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/7862573784825714463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/7862573784825714463'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2014/10/three-use-cases-for-labview-bookmarks.html' title='Three Use Cases for LabVIEW Bookmarks'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-1062721029084882795</id><published>2014-08-14T16:20:00.001-05:00</published><updated>2014-08-14T16:20:17.210-05:00</updated><title type='text'>SubVI Panels as Modal Dialogs - A How-To Guide</title><content type='html'>It&#39;s fairly common in LabVIEW applications to display the front panel of a subVI in order to retrieve inputs from the user, or to just display information. Unfortunately, there are several &quot;gotchas&quot; associated with this seemingly simple use-case. Follow these steps to ensure your modal subVI panel functions properly.&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Handle the opening and closing of the subVI panel programmatically&lt;/b&gt;. You may be tempted to use the&amp;nbsp;&lt;i&gt;SubVI Node Setup&lt;/i&gt;&amp;nbsp;right-click option on the subVI to easily display the subVI panel when it executes:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2s789HQBUZyR6M45sBM61qRYYEvkAxpDbCFNJn_EuijqxibT7Hdive3hEkxhMuH8maKnMu5LDLZpw7KP-HZix3Yo7O5eL-xq7aL00WLwIN9nzKAUNQYXEpKDbU15oqqgEVCSYj5qVqZE/s1600/subvinodesetup.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2s789HQBUZyR6M45sBM61qRYYEvkAxpDbCFNJn_EuijqxibT7Hdive3hEkxhMuH8maKnMu5LDLZpw7KP-HZix3Yo7O5eL-xq7aL00WLwIN9nzKAUNQYXEpKDbU15oqqgEVCSYj5qVqZE/s1600/subvinodesetup.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The biggest problem with using this option is that your subVI is not allowed to run any initialization code before displaying its panel. If your subVI needs to move/disable/hide controls and indicators, you have no control over when it is &quot;safe&quot; to display the subVI panel when using this option. So instead, use the &lt;b&gt;FP.Open&lt;/b&gt;&amp;nbsp;method to display the subVI panel once you have initialized it, and use the &lt;b&gt;FP.Close&lt;/b&gt;&amp;nbsp;method to close it once the user dismisses the subVI dialog:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYTJb5MhwwnE67pDebBeN9aR4RLLBWjfCstwgHPC8no7QuP8SWGF779MZWIqcS-qjXu_WTJC_BmiX4yLL8ILZhRL3yoiXNiafRiIGuTMhwp13cJwq1JGABa0BAnz4hhKWBtoAHOy3cJg0/s1600/flatseq.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYTJb5MhwwnE67pDebBeN9aR4RLLBWjfCstwgHPC8no7QuP8SWGF779MZWIqcS-qjXu_WTJC_BmiX4yLL8ILZhRL3yoiXNiafRiIGuTMhwp13cJwq1JGABa0BAnz4hhKWBtoAHOy3cJg0/s1600/flatseq.png&quot; height=&quot;116&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Configure the VI Properties of the subVI properly&lt;/b&gt;. You&#39;ll want the &lt;b&gt;Window Appearance&lt;/b&gt;&amp;nbsp;in VI Properties to be set to &quot;Custom&quot;, with custom settings like this:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC9FQ9GsY9gqKa1CqKYWGGdluv8Mz_e6ZyKxMmR6aVI79ikTirELWSPmUuSSHkmCnvsG4gUZN5NrIUr8NTE7UNVHZOm428qjcJfHgBCOfZ9oxOtRIn30wVI9eecq-ezJpXYBQQ2-J1F5M/s1600/viprops.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC9FQ9GsY9gqKa1CqKYWGGdluv8Mz_e6ZyKxMmR6aVI79ikTirELWSPmUuSSHkmCnvsG4gUZN5NrIUr8NTE7UNVHZOm428qjcJfHgBCOfZ9oxOtRIn30wVI9eecq-ezJpXYBQQ2-J1F5M/s1600/viprops.png&quot; height=&quot;225&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note that the menu bar, title bar, and scrollbars have all been hidden. Also note that the &lt;b&gt;Show Abort Button&lt;/b&gt;&amp;nbsp;option is disabled...this is so a user can&#39;t abort your entire application by pressing Ctrl-. while your subVI dialog is active. The Window Behavior is set as &lt;b&gt;Modal&lt;/b&gt;, and note that the &lt;b&gt;Show front panel when called&lt;/b&gt;&amp;nbsp;option is disabled, to avoid the same issues described in point #1 above.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Call your modal dialog subVI dynamically&lt;/b&gt;. Whenever you run a VI, all of its statically-called subVIs (i.e. normal subVIs sitting on its diagram) are &lt;i&gt;reserved for running&lt;/i&gt;. This means that none of the subVIs are in edit mode, since they may be executed by the top-level VI at some point. An unfortunate side effect of this behavior is that any reserved subVI that also has a &lt;b&gt;modal&lt;/b&gt;&amp;nbsp;window appearance will be immediately displayed if its front panel is already open. And since it is a modal window, you cannot dismiss it (since it&#39;s not running, it&#39;s just reserved for running). The best way to avoid this problem (other than always making sure your modal subVI panels are closed before running) is to call the modal dialog subVI dynamically:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmm1s8lhE5pNymTDfHuP9cdlaYLTJ5V2qO_n5IbvHezbR_TCI8JoKcSzQrN3e9SYMaZudGLr1-hlYe2ouYa4IcT96GWvbjqkcXrvWmW9g-yjdGHoOF7Ij94oNTeqJGFUWVfZWVNEdNVIo/s1600/callsetup.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmm1s8lhE5pNymTDfHuP9cdlaYLTJ5V2qO_n5IbvHezbR_TCI8JoKcSzQrN3e9SYMaZudGLr1-hlYe2ouYa4IcT96GWvbjqkcXrvWmW9g-yjdGHoOF7Ij94oNTeqJGFUWVfZWVNEdNVIo/s1600/callsetup.png&quot; height=&quot;259&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By changing the subVI to &lt;b&gt;Load and retain on first call&lt;/b&gt;, it will no longer be reserved for running when you run the top-level VI, and as a result, will not ever hang your app if you accidentally leave it open before running.&lt;/li&gt;
&lt;/ol&gt;
Follow these steps for dialog subVIs (show/hide the panel programmatically, configure properties correctly, and call dynamically) to make sure your LabVIEW applications with user-visible subVI panels are robust and easy to develop and debug.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/1062721029084882795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2014/08/subvi-panels-as-modal-dialogs-how-to.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/1062721029084882795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/1062721029084882795'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2014/08/subvi-panels-as-modal-dialogs-how-to.html' title='SubVI Panels as Modal Dialogs - A How-To Guide'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2s789HQBUZyR6M45sBM61qRYYEvkAxpDbCFNJn_EuijqxibT7Hdive3hEkxhMuH8maKnMu5LDLZpw7KP-HZix3Yo7O5eL-xq7aL00WLwIN9nzKAUNQYXEpKDbU15oqqgEVCSYj5qVqZE/s72-c/subvinodesetup.png" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-6226355985979100639</id><published>2012-11-03T14:05:00.001-05:00</published><updated>2012-11-03T14:05:39.421-05:00</updated><title type='text'>Getting Started with Custom Quick Drop Keyboard Shortcuts</title><content type='html'>Back when I first introduced Quick Drop Keyboard Shortcuts (QDKS) in LabVIEW 2009, I wrote &lt;a href=&quot;http://labviewartisan.blogspot.com/2009/08/write-your-own-quick-drop-keyboard.html&quot;&gt;this blog post&lt;/a&gt; that discussed how to write your own shortcuts. That information is still valid (for LabVIEW 2009, anyway), but it&#39;s a bit dated, and doesn&#39;t quite discuss all the details and functionality available today. Plus, I&#39;ve been asked several times recently about how to &quot;get started&quot; writing custom QDKS. So this blog post will be a a refresher, along with up-to-date information about what&#39;s currently available in LabVIEW 2012 that pertains to QDKS.&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;Template&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
There is a plugin template that ships with LabVIEW that you can use to get started writing your shortcut:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;[LabVIEW 2012]\resource\dialog\QuickDrop\QuickDrop Plugin Template.vi&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
Yes, I know it should be a .vit file, and it will be in LabVIEW 2013...but for now, you have to save your own copy somewhere. Anyway, this VI is full of commentary describing how you go about adding the necessary scripting code for your plugin. The template already includes the bookend code necessary to set up an Undo transaction for whatever operation your plugin performs.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;File Locations&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
You can place your plugin VI in one of the following two locations to make it available as a QDKS:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;[LabVIEW 20xx]\resource\dialog\QuickDrop\plugins&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;[LabVIEW Data]\Quick Drop Plugins&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
If you put your plugin in the &lt;i&gt;LabVIEW 20xx&lt;/i&gt; folder, it will only be available in that version of LabVIEW. If you put it in the &lt;i&gt;LabVIEW Data&lt;/i&gt; folder, it will be available in any LabVIEW version (2010 and later), as long as you saved it in the earliest LabVIEW version you want to support.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;Getting Started&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Not sure how to get started actually writing the scripting code for your plugin? The shipping plugins are all fully documented, so you can browse their code for reference:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;[LabVIEW 2012]\resource\dialog\QuickDrop\plugins&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
The &lt;i&gt;Wire All Terminals&lt;/i&gt;&amp;nbsp;and &lt;i&gt;VI Server Rename&lt;/i&gt;&amp;nbsp;plugins are password-protected because they use private scripting functionality, but the other plugins are available for your perusal.&amp;nbsp;If you need any help writing your plugin, the &lt;a href=&quot;https://decibel.ni.com/content/groups/quick-drop-enthusiasts&quot;&gt;Quick Drop Enthusiasts&lt;/a&gt; group on the NI Community has lots of experience writing shortcuts, and there are dozens of community shortcuts that you can use for reference as well.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;Sharing your Shortcut&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Once your plugin is ready for prime time, share it with the world! Post it to the Quick Drop Enthusiasts community, and include a link to it on the &lt;a href=&quot;https://decibel.ni.com/content/docs/DOC-9573&quot;&gt;List of Community Quick Drop Keyboard Shortcuts&lt;/a&gt; page.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/6226355985979100639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2012/11/getting-started-with-custom-quick-drop.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/6226355985979100639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/6226355985979100639'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2012/11/getting-started-with-custom-quick-drop.html' title='Getting Started with Custom Quick Drop Keyboard Shortcuts'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-2351634328709288899</id><published>2012-08-24T14:55:00.000-05:00</published><updated>2012-08-29T18:58:02.014-05:00</updated><title type='text'>What&#39;s the Deal with Coercion Dots?</title><content type='html'>Let&#39;s talk about those &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/371361J-01/lvconcepts/using_wires/#Coercion_Dots&quot;&gt;little red dots&lt;/a&gt; on your diagram:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTTaAQkOjKt0WpPL_FC5sdHGNPXLUbuHDcYSL4sbl8jbodYRCUlPixoEu7qG50rQm4Nbxhd-MwF6aTi5hJAYaIz0vfCzJgq-Yoy0yb1gNTE895tN14vEdZrWSstQbKSrmazFPtwuWa69w/s1600/dot1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTTaAQkOjKt0WpPL_FC5sdHGNPXLUbuHDcYSL4sbl8jbodYRCUlPixoEu7qG50rQm4Nbxhd-MwF6aTi5hJAYaIz0vfCzJgq-Yoy0yb1gNTE895tN14vEdZrWSstQbKSrmazFPtwuWa69w/s1600/dot1.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Background&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
They used to be gray, but we changed the default color of &lt;b&gt;coercion dots&lt;/b&gt; to &lt;span style=&quot;background-color: white; color: red;&quot;&gt;red&lt;/span&gt; in LabVIEW 8.2, presumably to make them easier to see (and so their appearance wouldn&#39;t be confused with the &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/371361J-01/lvdialog/show_buffer_alloc/&quot;&gt;Show Buffer Allocations&lt;/a&gt; feature).&amp;nbsp; Note that you can change the color of coercion dots in &lt;i&gt;Tools &amp;gt; Options &amp;gt; Environment &amp;gt; Colors &amp;gt; Coercion Dots&lt;/i&gt;, but most people keep them red.&lt;br /&gt;
&lt;br /&gt;
So what is a coercion dot, anyway?&amp;nbsp; It is LabVIEW&#39;s way of telling you that you have mismatched data types wired together, but they&#39;re close enough that your VI will still compile.&amp;nbsp; Contrast the image above with this one:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgudyKLJwbEyUSlNCKt4AFYxHma5sbgJcOAXiWpbKbbf6kTmqFVR38udqLjN07pLSYORhydDaIcHWeJDPr-FUSCGnS8OwUcbVRH_7imk8H3VzqarewgB7vRaMyFbBbtOUwNxmRw72WXRy8/s1600/dot2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;171&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgudyKLJwbEyUSlNCKt4AFYxHma5sbgJcOAXiWpbKbbf6kTmqFVR38udqLjN07pLSYORhydDaIcHWeJDPr-FUSCGnS8OwUcbVRH_7imk8H3VzqarewgB7vRaMyFbBbtOUwNxmRw72WXRy8/s320/dot2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
In the first image, you have two (different) numeric types wired to the &lt;b&gt;Add&lt;/b&gt; function. Since both types are numeric, the &lt;b&gt;Add&lt;/b&gt; will work, after it &lt;b&gt;coerces&lt;/b&gt; one of the inputs (the I32) to match the other (the DBL).&amp;nbsp; In the second image, you&#39;re trying to add a numeric and a path.&amp;nbsp; Those types are incompatible...no coercion can be performed, so you get a broken wire.&lt;br /&gt;
&lt;br /&gt;
The purpose of the coercion dot is to inform you, the programmer, when LabVIEW is performing a conversion behind the scenes.&amp;nbsp; You could explicitly perform this conversion yourself, thereby removing the coercion dot entirely:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQo6PejaHtiocu6GEfArJdy9Rb0Z3LPGlfQmQO5IpJ-8qjTbmquabqb85DI4lISnhJBKDkqxAqTwXrX7BfoOAUdjKxIRc8IGD0gEiF0bqlYk5t-Ng-_1Vzy8ImNIklGfS6ILjzgfuSZlU/s1600/dot3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;81&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQo6PejaHtiocu6GEfArJdy9Rb0Z3LPGlfQmQO5IpJ-8qjTbmquabqb85DI4lISnhJBKDkqxAqTwXrX7BfoOAUdjKxIRc8IGD0gEiF0bqlYk5t-Ng-_1Vzy8ImNIklGfS6ILjzgfuSZlU/s400/dot3.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTKCj8T6uaGKG5bIFgEYS85CxKRtRv0ZCO-723PFsG27OQAWcHPa_JdBVqczvE7gUp-LfOzN71gmJNJ3W_PuS2jTRTuI_YQA1JDm8lIK9AV8IEUc3kx-3KOhY8lJTnOzssTqw2gnpbPTM/s1600/dot3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Scalar Numeric Coercions&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
So how does LabVIEW decide which type will be coerced?&amp;nbsp; In the case of DBL vs. I32, it&#39;s rather straightforward...the I32 will be coerced, because coercing the DBL would lose fractional data.&amp;nbsp; Depending on which value is coerced, 1.7 (DBL) + 3 (I32) would either equal 4.7 (DBL) or 5 (I32)...I think we all agree that 4.7 is the better answer. :) &lt;br /&gt;
&lt;br /&gt;
So for coercions like I32 -&amp;gt; DBL, you don&#39;t really need to worry about the coercion dot.&amp;nbsp; You could add the &lt;b&gt;To Double Precision Float&lt;/b&gt; conversion function (these are often called conversion &quot;bullets&quot;) to your diagram like the previous screenshot, but it&#39;s just going to do exactly what the coercion dot is already doing.&lt;br /&gt;
But what about trickier numeric coercions?&amp;nbsp; Check out this diagram:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh97dqLEc98NdWOhD4l-Klc-5mA3clcx_GZDfwq8Lr_O49v9oXSceDHNZLTxfMh1ZvGtglsqNFpj58i9RYTJWiObKHwQp5t8wySGFlS3IhzyJk72USidtYEk3lULc5bfyynAMAjo8Qmk5E/s1600/dot4.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;156&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh97dqLEc98NdWOhD4l-Klc-5mA3clcx_GZDfwq8Lr_O49v9oXSceDHNZLTxfMh1ZvGtglsqNFpj58i9RYTJWiObKHwQp5t8wySGFlS3IhzyJk72USidtYEk3lULc5bfyynAMAjo8Qmk5E/s320/dot4.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I have indicated the data types of the constants in their labels.&amp;nbsp; In this diagram, the I16 has been coerced to a U16 value.&amp;nbsp; But since the result of this operation is a negative number, the U16 rolls under, and this diagram generates a value of &#39;65531&#39;, even though you probably wanted it to generate &#39;-5&#39;.&amp;nbsp; So this would be a case where an explicit conversion on your part (specifically, of the U16 to an I16) would have been preferable.&amp;nbsp; When dealing with integer data types in particular, you&#39;ll always want to keep an eye out for places where roll unders or roll overs might occur.&lt;br /&gt;
&lt;br /&gt;
One nifty feature to mention here is the &lt;b&gt;Adapt to Source&lt;/b&gt; right-click menu option on numeric indicator terminals:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEeDmlNIwqUxtc6i7QmrmVS_CNL4eMqeoW4dng-M3zcD4UCE7CwbYKGRCO0e-P5ZQeMIGh_alOq7d3dqspLZgR5HC9YjfJdV13lnBU9-NZ_T_XpZYEqnKrCrS9qNhyphenhyphen_Ie5Kr3Kgos5I8E/s1600/dot5.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEeDmlNIwqUxtc6i7QmrmVS_CNL4eMqeoW4dng-M3zcD4UCE7CwbYKGRCO0e-P5ZQeMIGh_alOq7d3dqspLZgR5HC9YjfJdV13lnBU9-NZ_T_XpZYEqnKrCrS9qNhyphenhyphen_Ie5Kr3Kgos5I8E/s400/dot5.png&quot; width=&quot;346&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
If you do convert the U16 input to an I16, and you have &lt;b&gt;Adapt to Source&lt;/b&gt; enabled on the indicator, then its data type will automatically change to an I16 once the types match.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Array Coercions&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
A lot of the paranoia surrounding coercion dots is the concern that they &quot;affect memory usage&quot;.&amp;nbsp; In practice, this often turns out not to be true.&amp;nbsp; Check out this diagram:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMpyVKIjyEgjzGRxQyhhvjgCOKi8mW_OkdMsrBoW7GeO0_euKrn1inw0Mp3fKODcmxu9UBRtIdJhsB08bygHKEuU_Ow93NNIIjf1GXbJbFkRgl25LUK6N9IYfrAP7MYK8i9EYEGJ_VCGE/s1600/dot6.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;196&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMpyVKIjyEgjzGRxQyhhvjgCOKi8mW_OkdMsrBoW7GeO0_euKrn1inw0Mp3fKODcmxu9UBRtIdJhsB08bygHKEuU_Ow93NNIIjf1GXbJbFkRgl25LUK6N9IYfrAP7MYK8i9EYEGJ_VCGE/s320/dot6.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Now, the &quot;coercion dots are bad!&quot; crowd would tell you that, in order to avoid additional memory usage because of the different data types, you need to do something about that coercion dot, particularly if this loop is running a whole bunch of times (since the arrays might be very large).&amp;nbsp; Well, it turns out that, no matter how I try to &quot;optimize&quot; this diagram to remove the coercion dot (a few things I tried included using a conversion bullet on the iteration count, a conversion bullet on the I32 array, and maintaining my own DBL iteration count in a shift register), all other approaches used more memory during execution than the simple coercion dot approach illustrated here.&amp;nbsp; So before you go trying to get rid of every coercion dot on your diagrams because you&#39;re afraid they affect performance and memory, I&#39;d recommend actually using the &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/371361J-01/lvdialog/profile/&quot;&gt;Profile Performance and Memory Window&lt;/a&gt; to see if any of the alternative approaches really are better.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Typedef Coercions&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
Another thing to look out for is coercion on typedef terminals. In these cases, the data types contained in the wire might be the same, but if one end of the wire is typedefed, and the other is not, you&#39;ll get a coercion dot.&amp;nbsp; In general, you&#39;re going to want to make sure this does not happen, and the easiest way to do so is to ensure that the source and the sink of the wire are both linked to the same typedef.&amp;nbsp; If you do not do this, and you see a coercion dot on a typedef terminal, then you may have problems when you change the data type of the typedef...the typedefed terminal will change, but the other terminal will not.&amp;nbsp; In the case of types like clusters and enums, you&#39;ll get a broken wire when the typedef changes. If you have many non-typedefs wired to typedefs throughout your VIs, these broken wires can become tedious to correct.&amp;nbsp; The easiest way to avoid these kinds of problems is to &lt;i&gt;make sure the terminals wired together are linked to the same typedef&lt;/i&gt;.&amp;nbsp; For more information about typedefs, check out &lt;a href=&quot;http://www.eyesonvis.com/blog/2009/03/there-are-no-strict-type-definition.html&quot;&gt;this Eyes on VIs post&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Variant Coercion&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
Another time when you&#39;ll frequently see coercion dots is when you&#39;re dealing with variant data types.&amp;nbsp; Since a variant can contain any LabVIEW data type, you&#39;ll often see APIs where you will wire a specific type into a variant terminal, and you&#39;ll see a coercion dot.&amp;nbsp; Again, this is perfectly fine, and it&#39;s usually a waste of diagram space to use the &lt;b&gt;To Variant&lt;/b&gt; function to eliminate the coercion dot.&amp;nbsp; The only time I can recall using &lt;b&gt;To Variant&lt;/b&gt; was when I had a case structure generating a variety of types in different cases, all of which went to the same (variant) output tunnel.&amp;nbsp; In this case, I had to use &lt;b&gt;To Variant&lt;/b&gt; to avoid assigning a specific, non-variant type to the tunnel:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb3Af4alJp2pfIXNwWYkGKmdI0VzVvFIpefFWhPf9fJO3HehviDGEvox4Ut3yvik6ofUqejh7qPFpckLgUY5DxkQpUu96ngy1xiOZH9ly7HecuQbGu9waXziW1EdkkTKBqFkytVF3s4pQ/s1600/dot9.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;178&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb3Af4alJp2pfIXNwWYkGKmdI0VzVvFIpefFWhPf9fJO3HehviDGEvox4Ut3yvik6ofUqejh7qPFpckLgUY5DxkQpUu96ngy1xiOZH9ly7HecuQbGu9waXziW1EdkkTKBqFkytVF3s4pQ/s400/dot9.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;Identifying Coerced Types&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
If you want some more details about the specific types that are 
causing a coercion dot, there&#39;s a great new feature in LabVIEW 2012 that 
will display (in the Context Help window) the wired type, and the 
expected type, of a coerced terminal:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsr1Z0ScVG2EY6a5_qXCO307ekKbyth1f9gw_x_WV7h_3-R0X4dXVk7rvkCzrjUJeIyv2JX2VXmyXgmgMAgTLYf5GMKpIBny5l9UTKNBvo9Wkb_sZ5Y9Gil7qJG5cOC_uiTGXgC3Rp5mY/s1600/dot8.png&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;372&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsr1Z0ScVG2EY6a5_qXCO307ekKbyth1f9gw_x_WV7h_3-R0X4dXVk7rvkCzrjUJeIyv2JX2VXmyXgmgMAgTLYf5GMKpIBny5l9UTKNBvo9Wkb_sZ5Y9Gil7qJG5cOC_uiTGXgC3Rp5mY/s400/dot8.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;u&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Summary&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
There are some other interesting scenarios involving coercion dots, like &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/371361J-01/lvconcepts/dynamic_data_type/&quot;&gt;Dynamic Data&lt;/a&gt;, &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/371361J-01/lvconcepts/using_classes/&quot;&gt;LabVIEW class wires&lt;/a&gt;, strict VI Server reference types, and more.&amp;nbsp; But for now, I&#39;m hoping this blog post gives a good introduction to some more general issues regarding coercion dots.&amp;nbsp; I have described several scenarios that you need to watch out for...but these tend to be corner cases.&amp;nbsp; Usually, LabVIEW is doing the right thing behind the scenes when it has to coerce data types, and you won&#39;t need to worry much about memory usage, performance, etc., as long as you pay attention to the types you&#39;re using in the first place.</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/2351634328709288899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2012/08/whats-deal-with-coercion-dots.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/2351634328709288899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/2351634328709288899'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2012/08/whats-deal-with-coercion-dots.html' title='What&#39;s the Deal with Coercion Dots?'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTTaAQkOjKt0WpPL_FC5sdHGNPXLUbuHDcYSL4sbl8jbodYRCUlPixoEu7qG50rQm4Nbxhd-MwF6aTi5hJAYaIz0vfCzJgq-Yoy0yb1gNTE895tN14vEdZrWSstQbKSrmazFPtwuWa69w/s72-c/dot1.png" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-3282935315804773293</id><published>2012-05-11T14:24:00.002-05:00</published><updated>2012-08-24T10:54:45.893-05:00</updated><title type='text'>Spell Checking in LabVIEW</title><content type='html'>Did you know that LabVIEW has a spell checker?&amp;nbsp; Well, sort of.&amp;nbsp; It&#39;s the &#39;Spell Check&#39; test of the &lt;a href=&quot;http://www.ni.com/white-paper/3588/en&quot;&gt;VI Analyzer Toolkit&lt;/a&gt;.&amp;nbsp; The VI Analyzer Toolkit is a LabVIEW toolkit that you can either purchase separately, or is included as part of the &lt;a href=&quot;http://www.ni.com/suite/&quot;&gt;NI Developer Suite&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The Spell Check test will check the spelling of words it finds in your VI against three different dictionaries:&amp;nbsp; (1) standard English words, (2) engineering and scientific technical terms, and (3) custom words added by the user.&amp;nbsp; The following configuration options can be used to customize which parts of your VI are checked, and what kind of words are checked (the screenshot shows the default selected options for the test):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVzAa1cPdniwKoGC5QrWM7jeLotCxXm37jY1hqZfY62f2zK43dHmwekL6a4I1aWSMHycC477zPZ696U8sIxJRRhD7i1-f6k4-mPiZ9WEWaJFUxNxUKLe02Dm9NdyIz_iO1ybEVwqiNK14/s1600/vianspellcheckoptions.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVzAa1cPdniwKoGC5QrWM7jeLotCxXm37jY1hqZfY62f2zK43dHmwekL6a4I1aWSMHycC477zPZ696U8sIxJRRhD7i1-f6k4-mPiZ9WEWaJFUxNxUKLe02Dm9NdyIz_iO1ybEVwqiNK14/s1600/vianspellcheckoptions.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
But enough of the sales pitch (we&#39;ve got &lt;a href=&quot;https://decibel.ni.com/content/people/ElijahK&quot;&gt;other people&lt;/a&gt; around here for that)...here are some of the reasons our current spell checking solution is less than ideal:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Lack of integration&lt;/b&gt; - If you want to spell check your code, currently you have to run a separate tool (VI Analyzer) in order to see the results of the misspellings, as opposed to the standard way of just getting a red wavy underline of misspelled words as you type.&amp;nbsp; Also, to add a word to the custom dictionary, you have to do that through the VI Analyzer as well, as opposed to simply being able to right-click a word and add it to the custom dictionary.&amp;nbsp; Although I suppose it wouldn&#39;t be too tough to write a &lt;a href=&quot;http://labviewartisan.blogspot.com/2010/08/improvements-to-quick-drop-keyboard.html&quot;&gt;Quick Drop Keyboard Shortcut&lt;/a&gt; or a &lt;a href=&quot;https://decibel.ni.com/content/groups/jki-right-click-framework-for-labview&quot;&gt;JKIRCF&lt;/a&gt; plugin to enable a UI gesture to do this as you sift through your VI Analyzer results.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;English only&lt;/b&gt; - The VI Analyzer Toolkit is not localized, so we only provide English dictionaries.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Maintenance difficulty&lt;/b&gt; - Ok, this one is kind of selfish, but it&#39;s up to me, as the VI Analyzer Toolkit owner, to keep track of LabVIEW features that add different text fields to a VI so I can add the scripting code to the Spell Check test to get the text out of those fields.&amp;nbsp; In fact, I discovered recently a feature that was added two releases ago that I have yet to add Spell Check support for... :\&lt;/li&gt;
&lt;/ul&gt;
Despite these deficiencies, I&#39;ve spoken to multiple developers who use the Spell Check test regularly because it&#39;s the best tool they have for identifying and fixing spelling mistakes in their VIs.&amp;nbsp; So with this blog post, I have a few questions to ask:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Do you use the VI Analyzer Spell Check test?&amp;nbsp; If so, how has the experience been?&lt;/li&gt;
&lt;li&gt;Do you think it&#39;s a feature that would be worth significant investment for LabVIEW R&amp;amp;D to integrate better into the LabVIEW editor?&lt;/li&gt;
&lt;li&gt;Are there any words you&#39;ve found flagged by the Spell Check test that you think should be added to our standard dictionary or our technical dictionary?&lt;/li&gt;
&lt;/ol&gt;
Even if you&#39;ve never used the Spell Check test, or even thought about spell checking in LabVIEW before, your feedback is welcome!</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/3282935315804773293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2012/05/spell-checking-in-labview.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/3282935315804773293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/3282935315804773293'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2012/05/spell-checking-in-labview.html' title='Spell Checking in LabVIEW'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVzAa1cPdniwKoGC5QrWM7jeLotCxXm37jY1hqZfY62f2zK43dHmwekL6a4I1aWSMHycC477zPZ696U8sIxJRRhD7i1-f6k4-mPiZ9WEWaJFUxNxUKLe02Dm9NdyIz_iO1ybEVwqiNK14/s72-c/vianspellcheckoptions.png" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-2151165683245629003</id><published>2012-02-09T15:10:00.003-06:00</published><updated>2012-02-10T13:39:49.744-06:00</updated><title type='text'>Captions: More than You Ever Wanted to Know</title><content type='html'>Every once in a while, the subject of control/indicator &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/371361H-01/lvhowto/creating_captions/&quot;&gt;captions&lt;/a&gt; comes up around here, and every time, confusion arises.&amp;nbsp; So here we go...everything I know about captions.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The Basics&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
Enabling a caption on a control or indicator is straightforward enough:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3fAgEONnaO9-4ALdI-ly3z88XUPFVvFZ1MQsmTZ3Kz4udQuPqVtfo2gwbns4XSReNzmP4j6pRrNA1dWbyiGWdxWHUK-pAUu02Sc_6qqP9DOmO9hkfPvUuZHGAn4Ijjj_ozgSRMM82qeI/s1600/caption1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;129&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3fAgEONnaO9-4ALdI-ly3z88XUPFVvFZ1MQsmTZ3Kz4udQuPqVtfo2gwbns4XSReNzmP4j6pRrNA1dWbyiGWdxWHUK-pAUu02Sc_6qqP9DOmO9hkfPvUuZHGAn4Ijjj_ozgSRMM82qeI/s320/caption1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you select this option, your control doesn&#39;t appear to change if you leave the caption as its default value: &lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyOzd2LOZvHe9XOAbv1OuoOAy2aCB23S2M98VWz3BZgzyPIEjuM0x1QHSKhfUK-y_a_Wo3OuyeXvw6ZKDdrYIO24fSwz3-j-src1W_3TamIz6sXOc4U4Cpbd3GTVq9884LFW9HTU70LmE/s1600/caption2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyOzd2LOZvHe9XOAbv1OuoOAy2aCB23S2M98VWz3BZgzyPIEjuM0x1QHSKhfUK-y_a_Wo3OuyeXvw6ZKDdrYIO24fSwz3-j-src1W_3TamIz6sXOc4U4Cpbd3GTVq9884LFW9HTU70LmE/s1600/caption2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
But trust me, it has.&amp;nbsp; We have hidden the label of the control.&amp;nbsp; You are now viewing its caption (in the same location as the label).&amp;nbsp; If you give the caption a different value than the label, you will see both in the Context Help window: &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilT0fX-rF54tEiFJ5IAWmfOpz8q4SLMftgTOCQRFl88-GfnIE3_fiTkvdrPZy7vka8hZ8AQJyFndTgCCOP3tPlszzhhxZvOcIBY0qdGThVIIQuuNixjPF1yPa_oy1pIEZL_o5Pw-hDW24/s1600/caption3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;116&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilT0fX-rF54tEiFJ5IAWmfOpz8q4SLMftgTOCQRFl88-GfnIE3_fiTkvdrPZy7vka8hZ8AQJyFndTgCCOP3tPlszzhhxZvOcIBY0qdGThVIIQuuNixjPF1yPa_oy1pIEZL_o5Pw-hDW24/s320/caption3.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Any control with its caption showing (assuming the caption is different than the label) will display the caption at the top, and the label in brackets underneath.&amp;nbsp; When hovering over the terminal of a subVI, you&#39;ll see the caption of the control/indicator in the tip strip instead of the label.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Use Cases&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
Now why would you ever want to show the caption in the first place?&amp;nbsp; I know of two possible reasons:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;Long caption, short label&lt;/b&gt; - If you want your control/indicator to  have a long, meaningful description on the panel, but you don&#39;t want  that long string getting in the way on the diagram, you could show its  caption. Personally, I eschew this approach...instead of using a  caption, I would opt for a free label on the panel positioned  appropriately near the control with appropriately-justified text.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Localization&lt;/b&gt; - This is the primary reason we use captions in  LabVIEW R&amp;amp;D.&amp;nbsp; When we localize LabVIEW into other languages, we  don&#39;t want to change the labels of controls and indicators...that could  potentially break code that programmatically refers to controls and  indicators by name.&amp;nbsp; So instead, we show localized captions (and hide  the labels) for the controls and indicators in all user-facing VIs that  ship with LabVIEW.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Deleting a Caption&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
In older LabVIEW versions, there was no easy way to delete the caption of a control/indicator.&amp;nbsp; Thankfully, in LabVIEW 8.2 and later, it is very easy.&amp;nbsp; All you need to do is select the caption with your selection tool and press the &#39;Delete&#39; key on your keyboard.&amp;nbsp; Note that this is not the same as highlighting the text in the caption and pressing the &#39;Delete&#39; key...if you do that, the control will still have a caption, but it will be an empty string.&lt;u&gt;&lt;b&gt; &lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Working with Captions Programmatically&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
This is where it gets a little tricky.&amp;nbsp; By default, controls and indicators do not have captions.&amp;nbsp; Let&#39;s say you try to read the Caption.Text property of a control like this:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBcy3NqKOnmYPmFbVku7bgJCOCmv2jjPq6LI3seouN8AhyphenhyphenSmO4PYnAg3eJDRPTSo3txTQK3LzgooEVUGxuqnljdN2e3yUu8zrLyzNufYGyJdJWOR5p8LRXbSJx7QYHJ0xny2oYA4-KxiM/s1600/captions5.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBcy3NqKOnmYPmFbVku7bgJCOCmv2jjPq6LI3seouN8AhyphenhyphenSmO4PYnAg3eJDRPTSo3txTQK3LzgooEVUGxuqnljdN2e3yUu8zrLyzNufYGyJdJWOR5p8LRXbSJx7QYHJ0xny2oYA4-KxiM/s1600/captions5.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Believe it or not, one of &lt;i&gt;three &lt;/i&gt;different things can happen with this code:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;If the control already has a caption, you&#39;ll get the caption text.&lt;/li&gt;
&lt;li&gt;If the control doesn&#39;t already have a caption, and the VI that owns the control is in edit mode, then a caption will be created for you, with the same string as the label, and you&#39;ll get that text.&lt;/li&gt;
&lt;li&gt;If the control doesn&#39;t already have a caption, and the VI that owns the control is in run mode, then you&#39;ll get error 1320, which tells you that you can&#39;t read properties of control parts that haven&#39;t been created yet when the VI is in run mode.&lt;/li&gt;
&lt;/ol&gt;Because of all this craziness, there is another helpful VI Server property that you can use:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8S_6xVQXs5KTTuiOEjBSulPF0zTbiYtuH6IBLJZuVu0Vta6F4FoRKCzTgLwZHmpqqW4McgRJjXLJg9RbN8r0tyf3mrFQpkP8h0spRC5lWMDV8zjYovPa0YjYjcGfG0lsuX5dZPo-jAxE/s1600/captions6.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8S_6xVQXs5KTTuiOEjBSulPF0zTbiYtuH6IBLJZuVu0Vta6F4FoRKCzTgLwZHmpqqW4McgRJjXLJg9RbN8r0tyf3mrFQpkP8h0spRC5lWMDV8zjYovPa0YjYjcGfG0lsuX5dZPo-jAxE/s1600/captions6.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &quot;HasCaption&quot; property will tell you if a control even has a caption to begin with, before you start trying to do other caption-related stuff.&lt;br /&gt;
&lt;br /&gt;
One other nifty tip for dealing with captions programmatically...if you want to delete a caption programmatically, this is the way to do it: &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw43SfCSE8Bi819eTNFntPlzylCrCwUXxBDto9tdFZguLFtfMtcZtudpzt7xCZX27osfp4Wc4ZrjSRgY3pAj55_Nl9PpkeFYMlCSMosAzEcXVeWhJk11D3BqOE6Wsy8s2ZxHqvUYHihyI/s1600/caption7.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw43SfCSE8Bi819eTNFntPlzylCrCwUXxBDto9tdFZguLFtfMtcZtudpzt7xCZX27osfp4Wc4ZrjSRgY3pAj55_Nl9PpkeFYMlCSMosAzEcXVeWhJk11D3BqOE6Wsy8s2ZxHqvUYHihyI/s1600/caption7.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
So there you have it...way more information than you ever wanted to know about a LabVIEW feature that you probably weren&#39;t even using in the first place. :P&amp;nbsp; But in the event that someone ever does need this information, here&#39;s hoping this blog post eventually bubbles up to the top of a &quot;LabVIEW captions&quot; google search.&amp;nbsp; ;)&lt;u&gt;&lt;b&gt; &lt;/b&gt;&lt;/u&gt;</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/2151165683245629003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2012/02/captions-more-than-you-ever-wanted-to.html#comment-form' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/2151165683245629003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/2151165683245629003'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2012/02/captions-more-than-you-ever-wanted-to.html' title='Captions: More than You Ever Wanted to Know'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3fAgEONnaO9-4ALdI-ly3z88XUPFVvFZ1MQsmTZ3Kz4udQuPqVtfo2gwbns4XSReNzmP4j6pRrNA1dWbyiGWdxWHUK-pAUu02Sc_6qqP9DOmO9hkfPvUuZHGAn4Ijjj_ozgSRMM82qeI/s72-c/caption1.png" height="72" width="72"/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-5975056733942998818</id><published>2011-08-02T15:03:00.001-05:00</published><updated>2011-08-02T15:05:35.737-05:00</updated><title type='text'>How to Customize Edit &gt; Create SubVI in LabVIEW 2011</title><content type='html'>&lt;a href=&quot;http://www.ni.com/labview/&quot;&gt;LabVIEW 2011&lt;/a&gt; was announced at the NI Week keynote today, and there are &lt;a href=&quot;http://www.ni.com/labview/whatsnew/features/&quot;&gt;plenty&lt;/a&gt; &lt;a href=&quot;http://vishots.com/whats-new-in-labview-2011/&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;http://lavag.org/topic/14644-whats-new-in-labview-2011-accelerate-your-productivity/&quot;&gt;places&lt;/a&gt; you can learn about all the great new features. In this blog post, I&#39;ll describe how to customize one of the best new features...the improvements to the &lt;i&gt;Edit &amp;gt; Create SubVI&lt;/i&gt; gesture in the LabVIEW IDE.&lt;br /&gt;
&lt;br /&gt;
You may recall that last year, Stephen and I solicited the LabVIEW Community to vote up (or &#39;kudo&#39; up, I guess) the &lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Create-a-proper-connector-pane-when-doing-Edit-gt-Create-subVI/idi-p/919959&quot;&gt;Create a proper connector pane when doing Edit -&amp;gt; Create subVI&lt;/a&gt; idea posted by Yair on the Idea Exchange. You all responded in an impressive way, and we were able to add the feature in LabVIEW 2011.&amp;nbsp; Specifically, we now create a subVI with the proper connector pane, properly-named error terminals in the bottom corners, properly-named refnum/class terminals in the top corners, and an organized front panel.&lt;br /&gt;
&lt;br /&gt;
But that&#39;s not all!&amp;nbsp; Thanks to Stephen, the code that modifies the created subVI is all VI-based.&amp;nbsp; So if you want to customize the created subVI in some way with your own scripting VIs, there are two ways to do it. Here&#39;s how:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Providing Additional Create SubVI Functionality&lt;/b&gt;&lt;br /&gt;
Do you like the way we create the subVI, but you want to perform additional actions on it?&amp;nbsp; If so, then follow these steps:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Open this VI: &lt;i&gt;[LabVIEW]\resource\plugins\CreateSubVI\Additional Actions Template.vi&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Save a copy of the VI here: &lt;i&gt;[LabVIEW]\resource\plugins\CreateSubVI\CreateSubVI_AdditionalActions.vi&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Add scripting code to this copy of the VI to do whatever you want to the created subVI.&amp;nbsp; Some ideas I&#39;ve had are:&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Perform a Diagram Cleanup on the created subVI&#39;s diagram&lt;/li&gt;
&lt;li&gt;Wrap the created subVI&#39;s diagram in an error case structure&lt;/li&gt;
&lt;li&gt;Programmatically launch the Icon Editor on the created subVI&lt;/li&gt;
&lt;/ul&gt;&lt;/ol&gt;&lt;b&gt;Completely Replacing Our Create SubVI Functionality&lt;/b&gt;&lt;br /&gt;
Would you rather define your own behavior for how the subVI is created?&amp;nbsp; If so, then follow these steps.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Make a copy of&amp;nbsp; &lt;i&gt;[LabVIEW]\resource\plugins\lv_modifyNewSubVI.vi&lt;/i&gt; and name it &lt;i&gt;lv_modifyNewSubVI.bak&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;In the original &lt;i&gt;lv_modifyNewSubVI.vi&lt;/i&gt;, you can remove the code on its diagram, and write your own scripting code to modify the new subVI.&amp;nbsp; Here is a description of the inputs/outputs of the VI:&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;VI Refnum&lt;/b&gt; - A VI reference to the newly created subVI.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Fail?&lt;/b&gt; - If true, LabVIEW assumes an error occurred during your scripting, does not commit any of your scripting changes, and instead creates the subVI in the same way it did in LabVIEW 2010 and previous...full conpane, weirdly-named controls, etc.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Caller Connections in/out&lt;/b&gt; - This is the most complicated part.&amp;nbsp; The input Caller Connections array defines numeric indices for the controls/indicators on the (full) subVI conpane as it is originally created.&amp;nbsp; For example, if you create a subVI with one input and one output, then the array might have the values [0,1].&amp;nbsp; You can then programmatically inspect the conpane to see which items are connected to which indices...let&#39;s say for this example, the control is index 0 and the indicator is index 1.&amp;nbsp; For the output Caller Connections array, you must specify which indices on the new conpane those same objects are now wired to.&amp;nbsp; So for example, if you change to a 4x2x2x4 conpane, and you place the indicator at index 0 and the control at index 11 (those are the top corners of 4x2x2x4), you would output [11,0] as the output Caller Connections.&amp;nbsp; If you want to learn more about how this works, check out &lt;i&gt;[LabVIEW]\resource\plugins\CreateSubVI\Calculate New Conpane Array.vi&lt;/i&gt;, which is the VI that figures this out for the current shipping Create SubVI technique.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;If you ever want to revert to the shipping functionality, restore the .bak copy of the VI. &lt;/li&gt;
&lt;/ol&gt;I should also point out that these VIs are not kept in memory after a Create SubVI operation...so it&#39;s very easy to debug (via breakpoints, etc.) any plugins you write, as you can easily modify your plugin code and test it by performing the &lt;i&gt;Edit &amp;gt; Create SubVI&amp;nbsp; &lt;/i&gt;gesture again. &lt;br /&gt;
&lt;br /&gt;
I would like to eventually post some plugins of both types to the NI Community.&amp;nbsp; In the meantime, please let me know if you&#39;ve written some plugins to augment (or replace) the Create SubVI functionality...I&#39;d love to see what y&#39;all can come up with!</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/5975056733942998818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2011/08/how-to-customize-edit-create-subvi-in.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/5975056733942998818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/5975056733942998818'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2011/08/how-to-customize-edit-create-subvi-in.html' title='How to Customize Edit &gt; Create SubVI in LabVIEW 2011'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-4809615859855735396</id><published>2011-03-16T15:53:00.000-05:00</published><updated>2011-03-16T15:53:44.723-05:00</updated><title type='text'>My Interview on VI Shots</title><content type='html'>Last week, Michael posted his first interview with me on &lt;a href=&quot;http://www.vishots.com/&quot;&gt;VI Shots&lt;/a&gt;. So far, I&#39;ve been impressed with the content on this blog. Additionally, with the twitter account &lt;a href=&quot;http://twitter.com/#%21/vishots&quot;&gt;@vishots&lt;/a&gt;, he retweets relevant LabVIEW-related topics posted by other twitter users.&lt;br /&gt;
&lt;br /&gt;
In our interview, we talk a bit about my background in LabVIEW, along with some of my tips for programming in LabVIEW at breakneck speed.&amp;nbsp; Check out our interview &lt;a href=&quot;http://vishots.com/002-labview-podcast-interview-with-darren-nattinger/&quot;&gt;here&lt;/a&gt;.&amp;nbsp; And from what I understand, Michael has lots more great LabVIEW content in the works for future podcasts and articles.</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/4809615859855735396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2011/03/my-interview-on-vi-shots.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/4809615859855735396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/4809615859855735396'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2011/03/my-interview-on-vi-shots.html' title='My Interview on VI Shots'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-6486674120875567551</id><published>2011-02-16T14:20:00.000-06:00</published><updated>2011-02-16T14:20:20.679-06:00</updated><title type='text'>Code Madness: The LabVIEW Example Program Challenge 2011</title><content type='html'>(What a funny coincidence that my last two LabVIEW blog posts had a college basketball-themed title. And I&#39;m not even into college basketball. Although I guess as good as the Longhorns are doing this season, I probably should be...)&lt;br /&gt;
&lt;br /&gt;
The latest LabVIEW coding contest on the NI Community has begun. Enter the&lt;a href=&quot;http://decibel.ni.com/content/groups/labview-example-challenge-march-madness-2011&quot;&gt; LabVIEW Example Program Challenge 2011&lt;/a&gt; today for your chance to win an XBox, Amazon gift cards, and other prizes. In this contest, example submissions will initially compete with one another in a qualifying round (taking place now until March 6th), with downloads, &quot;likes&quot;, and ratings all contributing to each submissions&#39;s ranking. The top 16 submissions will then move on to a tournament-style coding competition (taking place from March 8th to April 4th), with a bracket system being used to match up winners for the rounds of 16, 8, 4, and 2, until the winner is decided in the final round.&lt;br /&gt;
&lt;br /&gt;
To learn more about the Code Madness Program Challenge, visit &lt;a href=&quot;http://www.ni.com/codechallenge&quot;&gt;http://www.ni.com/codechallenge&lt;/a&gt;. Begin submitting code today!</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/6486674120875567551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2011/02/code-madness-labview-example-program.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/6486674120875567551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/6486674120875567551'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2011/02/code-madness-labview-example-program.html' title='Code Madness: The LabVIEW Example Program Challenge 2011'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-8872234742169161000</id><published>2010-10-07T12:04:00.000-05:00</published><updated>2010-10-07T12:04:08.807-05:00</updated><title type='text'>The Sweet 16:  Idea Exchange Entries That Need More Support</title><content type='html'>I&#39;ve really been enjoying all the fantastic LabVIEW 2010 features that originated in the &lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/idb-p/labviewideas&quot;&gt;Idea Exchange&lt;/a&gt;, and I&#39;m also excited about the ones we have planned for LabVIEW 2011.&amp;nbsp; Last night, I went through the Idea Exchange and read through all the ideas that have more than 10, but less than 100 kudos.&amp;nbsp; I found 16 that I think would really benefit the LabVIEW environment and increase my productivity, but aren&#39;t currently on our roadmap of features because they haven&#39;t bubbled up high enough in the rankings.&amp;nbsp; So if you haven&#39;t already, please consider kudoing some or all of the following ideas, so we can push to get them included in LabVIEW 2012: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Make-Case-Selector/idi-p/956075&quot;&gt;Make Case Selector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Create-Space-in-One-Direction-Only/idi-p/1028081&quot;&gt;Create Space in One Direction Only&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/A-text-toolbar/idi-p/953534&quot;&gt;A text toolbar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Easier-way-to-insert-and-delete-element-in-array/idi-p/925650&quot;&gt;Easier way to insert and delete element in array&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Shift-Enter-should-define-word-wrap-bounds-on-Free-Labels/idi-p/1089954&quot;&gt;Shift-Enter should define word wrap bounds on Free Labels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Shrink-Wrap-Structures/idi-p/1190275&quot;&gt;Shrink-Wrap Structures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Sort-arrow-in-column-headers-of-tables-and-listboxes/idi-p/929177&quot;&gt;Sort arrow in column headers of tables and listboxes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Make-mouse-wheel-scroll-the-string-control-indicator-and-add/idi-p/917795&quot;&gt;Make mouse wheel scroll the string control/indicator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Make-Type-Def-the-default-choice-in-the-control-editor/idi-p/918359&quot;&gt;Make &#39;Type Def.&#39; the default choice in the control editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Create-smaller-banner-for-libraries/idi-p/959345&quot;&gt;Create smaller banner for libraries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/quot-Shift-Enter-quot-next-row-in-array-for-data-entry/idi-p/1005031&quot;&gt;&quot;Shift+Enter&quot; next row in array for data entry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Use-standard-Windows-keyboard-shortcuts-to-change-font-styles/idi-p/941973&quot;&gt;Use standard Windows keyboard shortcuts to change font styles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Key-Focus-Surrounding-Border-Let-s-Get-Rid-of-It/idi-p/1032514&quot;&gt;Key Focus Surrounding Border - Let&#39;s Get Rid of It!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/String-case-structures-should-default-to-being-case-insensitive/idi-p/1114727&quot;&gt;String case structures should default to being case insensitive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Improve-Tree-Control-Performance/idi-p/1067286&quot;&gt;Improve Tree Control Performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/A-Better-quot-Find-Missing-Items-quot-and-quot-Find-Items-with/idi-p/972857&quot;&gt;A Better &quot;Find Missing Items&quot; and &quot;Find Items with No Callers&quot; in Projects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;By the way, I got the idea for this blog post from Aristos Queue, who has already posted &lt;a href=&quot;http://forums.ni.com/t5/LabVIEW/24-Great-Ideas-from-Idea-Exchange-for-you-to-Kudos/m-p/1154123&quot;&gt;his own list of Idea Exchange entries&lt;/a&gt; that he&#39;d like to see implemented in a future LabVIEW version.</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/8872234742169161000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2010/10/sweet-16-idea-exchange-entries-that.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8872234742169161000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8872234742169161000'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2010/10/sweet-16-idea-exchange-entries-that.html' title='The Sweet 16:  Idea Exchange Entries That Need More Support'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-5028519808878379469</id><published>2010-07-20T23:53:00.003-05:00</published><updated>2010-07-21T10:11:12.916-05:00</updated><title type='text'>Changes to the CLA Exam</title><content type='html'>The &lt;a href=&quot;http://labviewartisan.blogspot.com/2009/02/labview-certification-preparing-for-cla.html&quot;&gt;Preparing for the CLA&lt;/a&gt; post is one of the most highly visited links on my blog, so I figured I should post some updates that I just learned about (thanks to &lt;a href=&quot;http://lavag.org/topic/12757-cla-exam-format-change/&quot;&gt;JG&#39;s post on LAVA&lt;/a&gt;) to the way the CLA exam is now done.  Much of the advice I gave in the aforementioned post is no longer valid, so I&#39;d like to highlight some of the new features of the CLA Exam as described on the &lt;a href=&quot;http://zone.ni.com/devzone/cda/tut/p/id/5892&quot;&gt;NI CLA prep website&lt;/a&gt;:&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;No more written portion&lt;/b&gt; - When I took the CLA exam, it contained a written portion that was 40% of my score.  This part of the exam has been removed, which now makes the CLA a 100% practical exam.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Customize LabVIEW settings prior to exam start&lt;/b&gt; - When I took the exam, I had to spend the first few minutes after the clock started customizing LabVIEW (adding Quick Drop shortcuts, turning off auto wire routing, etc. etc.) before I even read the first question.  But now, it seems you can ask your proctor to allow you to customize LabVIEW *before* starting the exam.  The following is a direct quote from the new &lt;a href=&quot;ftp://ftp.ni.com/evaluation/certification/cla_exam_prep_guide.pdf&quot;&gt;CLA Exam Preparation Guide&lt;/a&gt; (page 2) on ni.com:  &quot;Please note that you will not receive extra exam time to compensate for non-familiarity with the LabVIEW environment. If you need time to customize the environment, please make arrangements with your proctor to hold off on giving you the exam packet until you are ready to start the exam.&quot;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Sample Exam Available&lt;/b&gt; - There is now a &lt;a href=&quot;ftp://ftp.ni.com/evaluation/certification/cla_sample_exam_atm_machine.pdf&quot;&gt;CLA Practice Exam&lt;/a&gt; available...this is a great asset in CLA preparation that I highly recommend taking very seriously.  There is also an &lt;a href=&quot;ftp://ftp.ni.com/evaluation/certification/cla_sample_atm_solution.zip&quot;&gt;exam solution&lt;/a&gt; available.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Requirements tracking&lt;/b&gt; - 30% of your CLA score is now determined by requirements tracking, the details of which are described in the practice exam and prep guide documents linked above. The exam graders will be using NI Requirements Gateway to verify requirement tracking in your VIs, so make sure you adhere to the &lt;i&gt;[Covers: ] &lt;/i&gt;syntax described in the prep guide and sample exam.  &lt;span style=&quot;font-style: italic;&quot;&gt;Note that knowledge of NI Requirements Gateway is *not* a requirement for the CLA.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Looking at the changes, I think they&#39;re probably for the best.  I personally found the written portion of the CLA when I took it to be relatively easy and straightforward.  But I know that written exams are notoriously hard to grade, and there might potentially be language barriers for some test takers.  It looks like the test writers are expecting the additional requirements tracking to take roughly the same amount of time as the written portion of the exam, since the sample exam is very similar to the actual exam I took for my CLA, with the addition of the requirements tracking information.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/5028519808878379469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2010/07/changes-to-cla-exam.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/5028519808878379469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/5028519808878379469'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2010/07/changes-to-cla-exam.html' title='Changes to the CLA Exam'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-7484004029197356983</id><published>2010-07-16T14:53:00.002-05:00</published><updated>2013-02-27T10:05:59.474-06:00</updated><title type='text'>Conclusions - The Diagram Cleanup Experiment</title><content type='html'>It&#39;s been just about a year since I embarked on &lt;a href=&quot;http://labviewartisan.blogspot.com/2009/07/diagram-cleanup-experiment.html&quot;&gt;The Diagram Cleanup Experiment&lt;/a&gt;.  I attempted to use block diagram cleanup on just about every VI I wrote in LabVIEW 2009 this year.  With such heavy use of the feature, I have come to the following conclusions:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Use it on moderately-sized diagrams&lt;/span&gt; - The majority of the VIs I write fit on one screen, and have relatively low levels of nesting.  For these kinds of VIs, it is *way* faster to quickly write the VI, then press &lt;span style=&quot;font-style: italic;&quot;&gt;Ctrl-U&lt;/span&gt; to clean it up.  The cleanup results in these cases, although not perfect, are acceptable.  The diagrams are readable enough to avoid maintenance headaches down the road.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Don&#39;t use it on large diagrams&lt;/span&gt; - Diagram cleanup still has trouble with large diagrams.  For top-level state machines, or similar architecture-level VIs, cleanup does not respect the arrangement of the diagram, which, for these VIs, is crucial to the understanding of the VI.  I have decided that it is still best for me to arrange these diagrams myself.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Don&#39;t use it on heavily-nested diagrams&lt;/span&gt; - As I mentioned in my &lt;a href=&quot;http://labviewartisan.blogspot.com/2009/10/progress-report-1-block-diagram-cleanup.html&quot;&gt;progress report&lt;/a&gt;, diagram cleanup completely explodes the diagram if there is heavy structure nesting.  It simply can&#39;t figure out how to condense space in multiple frames simultaneously.  Until it does, I will continue to arrange heavily-nested diagrams myself.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Mixed results with Tools &amp;gt; Options settings&lt;/span&gt; - I tried several times to tweak the settings in &lt;span style=&quot;font-style: italic;&quot;&gt;Tools &amp;gt; Options &amp;gt; Block Diagram &amp;gt; Block Diagram Cleanup&lt;/span&gt; to see if that would improve the cleanup arrangement, but I couldn&#39;t figure out a definitive collection of settings that always worked better.  If anyone has any specific suggestions for settings that seem to improve the cleanup layout, let me know.&lt;/li&gt;
&lt;/ul&gt;
So what&#39;s next? I just posted the following idea on the LabVIEW Idea Exchange:&lt;br /&gt;
&lt;br /&gt;&lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Tell-Block-Diagram-Cleanup-What-quot-Clean-quot-VIs-Look-Like/idi-p/1185355&quot;&gt;Tell Block Diagram Cleanup what &quot;Clean&quot; Looks Like&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think the easiest way to get diagram cleanup to arrange VIs to my liking is to show it VIs that I like.  :)  Please kudo the idea if you agree.&lt;div&gt;
&lt;br /&gt;So that&#39;s pretty much it.  In short--I like the feature, I will continue to use it because it helps me program faster, but it definitely has room for improvement.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/7484004029197356983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2010/07/conclusions-diagram-cleanup-experiment.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/7484004029197356983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/7484004029197356983'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2010/07/conclusions-diagram-cleanup-experiment.html' title='Conclusions - The Diagram Cleanup Experiment'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-69206126201098204</id><published>2010-06-08T22:34:00.005-05:00</published><updated>2010-06-08T23:42:03.322-05:00</updated><title type='text'>I Like Global Variables</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZgrxxvUyn3SrAsBD9jqMFln_u9PqyLy5JS3nDovd86pJ0jfoakGgYsFrOLOccdD7mEu1bPXuBYIetjWmCtUjg7B-k-cIAcGxTuDmlr8PlO5fEzkOYzevHLmXgaXntHnJeE-m6pHAN1ss/s1600/scared.PNG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 174px; height: 203px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZgrxxvUyn3SrAsBD9jqMFln_u9PqyLy5JS3nDovd86pJ0jfoakGgYsFrOLOccdD7mEu1bPXuBYIetjWmCtUjg7B-k-cIAcGxTuDmlr8PlO5fEzkOYzevHLmXgaXntHnJeE-m6pHAN1ss/s320/scared.PNG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5480629557192133218&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;I think the title of this post alone will probably lose me some followers on this blog.   :)  Nevertheless, let&#39;s proceed...&lt;br /&gt;&lt;br /&gt;Here&#39;s the deal...global variables are not evil.  There are perfectly valid use cases in which a global variable is the best tool for the job, and doing something more complicated just to say, &quot;I didn&#39;t use globals!&quot; doesn&#39;t make sense.  Now sure, globals can be abused, and there are certainly scenarios where they are contraindicated.  But if you&#39;re aware of those situations, and you avoid them, you should feel free to use globals where needed.  So let&#39;s look at some use cases where, in my opinion, globals can come in handy:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Static Data&lt;/span&gt; - Whenever I create a UI in LabVIEW in which user-visible strings are programmatically changed, I always store those user-visible strings in a global variable.  Let&#39;s call this kind of global a &lt;span style=&quot;font-style: italic;&quot;&gt;Write Never, Read Many&lt;/span&gt; (WNRM) global.  I am never writing new values into this global...I&#39;m only reading from it in my code whenever I need to update a user-visible string.  Another use case for WNRM globals is in scripting apps.  When I&#39;m doing code generation involving templates, I always store the identifying labels of panel/diagram objects within a global, and I always read those identifiers from a global in my scripting code.  That way, if I need to change the identifiers in the templates, I know that I&#39;ll only need to change the identifier in one place (my global) in my scripting code. (&lt;span style=&quot;font-style: italic;&quot;&gt;Note: &lt;/span&gt;I believe Yair&#39;s &lt;a href=&quot;http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Adding-CONSTs-to-LabVIEW/idi-p/942213&quot;&gt;Adding CONSTs to LabVIEW&lt;/a&gt; idea on the Idea Exchange is intended to facilitate a cleaner implementation of this use case.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Debug Flags&lt;/span&gt; - If I&#39;ve got parts of my code that I want to run differently when I&#39;m debugging, I use a WNRM global.  I&#39;ll open the global and change the debug flags before I run my code.  Someone once suggested that I should instead use Conditional Disable Structures with conditional symbols in my project, but after I looked into it, I decided that the added complexity and configuration associated with conditional symbols didn&#39;t add enough value over the simple global solution.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Configuration Data&lt;/span&gt; - In this scenario, we are initializing configuration data (from an INI file, for instance) at some point in our code, and reading that data at later points.  So here we have a &lt;span style=&quot;font-style: italic;&quot;&gt;Write Once, Read Many&lt;/span&gt; (WORM) global.  (&lt;span style=&quot;font-style: italic;&quot;&gt;Note&lt;/span&gt;:  The term &lt;a href=&quot;http://forums.ni.com/ni/board/message?board.id=BreakPoint&amp;amp;view=by_date_ascending&amp;amp;message.id=12215#M12215&quot;&gt;WORM global&lt;/a&gt; was first coined by &lt;a href=&quot;http://forums.ni.com/ni/profile?user.id=28196&quot;&gt;tbob&lt;/a&gt; on the &lt;a href=&quot;http://forums.ni.com/&quot;&gt;NI Forums&lt;/a&gt; a few months back.)  As long as there is one, single place where the global is written, it is perfectly fine to have many other places in your code that read that global.&lt;/li&gt;&lt;/ul&gt;Now one of the biggest reasons given as to why globals should be avoided is that new users could easily find themselves in race conditions if they&#39;re not careful.  But with the use cases above, there should never be any worry about race conditions, as long as developers adhere to the WNRM/WORM constraints.  I don&#39;t think we should hamstring ourselves with a blanket refusal to use a feature when it really can be a performant time-saver when utilized correctly.</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/69206126201098204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2010/06/i-like-global-variables.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/69206126201098204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/69206126201098204'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2010/06/i-like-global-variables.html' title='I Like Global Variables'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZgrxxvUyn3SrAsBD9jqMFln_u9PqyLy5JS3nDovd86pJ0jfoakGgYsFrOLOccdD7mEu1bPXuBYIetjWmCtUjg7B-k-cIAcGxTuDmlr8PlO5fEzkOYzevHLmXgaXntHnJeE-m6pHAN1ss/s72-c/scared.PNG" height="72" width="72"/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-8946868844902851150</id><published>2010-01-11T11:51:00.003-06:00</published><updated>2010-01-11T12:06:57.065-06:00</updated><title type='text'>Ain&#39;t No Party Like a CLA Party...</title><content type='html'>If you are a Certified LabVIEW Architect, make sure you are in Austin on March 8-9 for the first-ever CLA Summit.  In case you didn&#39;t get the memo, &lt;a href=&quot;http://app.en25.com/e/es.aspx?s=639&amp;amp;e=2614630&amp;amp;elq=9f17af676b844351aea6fbb38d09929b&quot;&gt;here it is&lt;/a&gt;.  We also have an &lt;a href=&quot;http://decibel.ni.com/content/groups/certified-labview-architect-summit-2010&quot;&gt;NI Community Group&lt;/a&gt; with more information and discussions about the event.  There will be presentations (one of which I&#39;ll be giving), coding challenges, hang time with LabVIEW R&amp;amp;D, and much more.  And even if your CLA certification is expired, you can still show up and recertify with the new one hour recertification exam.&lt;br /&gt;&lt;br /&gt;So if you are (or were) a CLA, come on down to Austin in March, and make sure to bring some warm weather with you!</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/8946868844902851150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2010/01/aint-no-party-like-cla-party.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8946868844902851150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8946868844902851150'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2010/01/aint-no-party-like-cla-party.html' title='Ain&#39;t No Party Like a CLA Party...'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-4002525974558658518</id><published>2009-11-02T15:54:00.005-06:00</published><updated>2009-11-02T16:03:08.344-06:00</updated><title type='text'>LabVIEW Performance Tips and Tricks Webcast - Wednesday, November 4th at 11 AM</title><content type='html'>This week I am giving the following LabVIEW Virtual User Group presentation:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://sine.ni.com/nievents/app/overview/p/eventId/40562/site/nic/country/us/lang/en&quot;&gt;NI LabVIEW Virtual User Groups: Tips and Tricks to Increase LabVIEW Performance and Speed&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My co-host will be Todd Sierer (of &lt;a href=&quot;http://www.anengineeringmind.com/&quot;&gt;An Engineering Mind&lt;/a&gt; fame), and I will be giving the same Performance Tips and Tricks presentation that I gave at &lt;a href=&quot;http://www.ni.com/niweek&quot;&gt;NI Week&lt;/a&gt; 2009.  Hope to (virtually) see you there!</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/4002525974558658518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2009/11/labview-performance-tips-and-tricks.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/4002525974558658518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/4002525974558658518'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2009/11/labview-performance-tips-and-tricks.html' title='LabVIEW Performance Tips and Tricks Webcast - Wednesday, November 4th at 11 AM'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-286674986478655244</id><published>2009-10-27T00:11:00.002-05:00</published><updated>2009-10-27T00:36:29.926-05:00</updated><title type='text'>Progress Report #1 - The Block Diagram Cleanup Experiment</title><content type='html'>As I mentioned &lt;a href=&quot;http://labviewartisan.blogspot.com/2009/07/diagram-cleanup-experiment.html&quot;&gt;a few months ago&lt;/a&gt;, I am attempting to use Block Diagram Cleanup for 100% of my diagram arrangement needs in LabVIEW 2009.  I figured I might post updates every once in a while detailing my progress.  So here, in no particular order, are some of my observations and impressions after heavy use of block diagram cleanup for a few months:&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;It Creates Big Diagrams&lt;/b&gt; - When left to my own devices, I create tight diagrams with very little whitespace.  I have very quickly discovered that diagram cleanup is rather liberal with its allocation of whitespace.  :)  Typically this is because I&#39;ve got a moderately nested diagram, and diagram cleanup doesn&#39;t quite know how to allocate space in each frame of a multiframe structure such that whitespace is minimized.  I imagine this would be a rather difficult problem to solve, since it would require the repositioning algorithm to simultaneously keep track of the spacing in each frame of a multiframe structure.&lt;/li&gt;&lt;li&gt;&lt;b&gt;It Doesn&#39;t Respect My Window Size&lt;/b&gt; - Along similar lines, the diagram gets resized and often goes past the height and/or width of the diagram window.  Sometimes I have diagram windows set to a particular size for a reason, and if I were arranging the diagram myself, I would fit the diagram within those window bounds.  I wish we could constrain diagram cleanup to the current diagram&#39;s window bounds.&lt;/li&gt;&lt;li&gt;&lt;b&gt;It Creates Bendy Wires&lt;/b&gt; - I&#39;ve always been very careful to minimize the number of bends in my wires, maybe because my boss was always very picky about it.  In fact, he&#39;s the one who insisted &quot;Wire Bends&quot; be a test that shipped with &lt;a href=&quot;http://zone.ni.com/devzone/cda/tut/p/id/3588&quot;&gt;VI Analyzer&lt;/a&gt; 1.0!  Anyway, diagram cleanup doesn&#39;t seem to be so concerned about wire bends.  From what little I know about the cleanup algorithm, this makes sense because the algorithm is very much concerned with node placement, and not so much wire placement (except for its strict insistence on keeping error wires straight, which I like).  But if you&#39;ve got nodes that you&#39;ve arranged just to keep non-error wires straight, diagram cleanup will not take this into account when rearranging.  Also, if you&#39;ve got constants wired to things, and you&#39;ve got the constants positioned to minimize wire bends, I frequently see the constant moved, and wires bent as a result.&lt;/li&gt;&lt;li&gt;&lt;b&gt;It Moves My Control Terminal Labels&lt;/b&gt; - I like my control terminals on the sides (left for controls, right for indicators)...in fact, I added the &lt;a href=&quot;http://labviewartisan.blogspot.com/2009/08/write-your-own-quick-drop-keyboard.html&quot;&gt;Ctrl-Space-Ctrl-T&lt;/a&gt; shortcut in LabVIEW 2009 to make it easier to perform this operation in bulk for all top-level terminals on the diagram.  But I&#39;ve noticed my terminal labels get moved by cleanup, and it doesn&#39;t look like something that&#39;s configurable.&lt;/li&gt;&lt;li&gt;&lt;b&gt;But...I Code Faster&lt;/b&gt; - Despite its shortcomings, block diagram cleanup allows me to code *much* faster than I do when arranging the diagram myself.  I don&#39;t have any specifics, but I&#39;d estimate that I write VIs about twice as fast as normal when I spend zero time arranging diagram objects myself.&lt;/li&gt;&lt;/ul&gt;These are my first impressions of block diagram cleanup, with just a few months of LabVIEW 2009 development (on a mishmash of small projects).  But right now, I&#39;m in the beginning stages of writing a LabVIEW Class-based prototype for a &lt;a href=&quot;http://decibel.ni.com/content/docs/DOC-4973&quot;&gt;LabVIEW Scripting&lt;/a&gt; architecture for my current project.  I hope to post more detailed observations as I become more involved in this adventure.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/286674986478655244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2009/10/progress-report-1-block-diagram-cleanup.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/286674986478655244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/286674986478655244'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2009/10/progress-report-1-block-diagram-cleanup.html' title='Progress Report #1 - The Block Diagram Cleanup Experiment'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-8275461558986155962</id><published>2009-10-16T11:36:00.002-05:00</published><updated>2009-10-16T11:45:20.415-05:00</updated><title type='text'>Quick Drop Keyboard Shortcut - Commands for &quot;Create&quot; Menu Options</title><content type='html'>My third post-release Quick Drop keyboard shortcut is now available on the &lt;a href=&quot;http://www.ni.com/community&quot;&gt;NI Community&lt;/a&gt; website.  This shortcut allows you to perform all the options in the &lt;span style=&quot;font-style: italic;&quot;&gt;right-click &gt; Create...&lt;/span&gt; menu with your keyboard.  You can perform these operations with one or more objects selected.  For example, you could select several control terminals on the diagram, press &lt;span style=&quot;font-style: italic;&quot;&gt;Ctrl-Space&lt;/span&gt;, type &lt;span style=&quot;font-weight: bold;&quot;&gt;reference&lt;/span&gt;, and press &lt;span style=&quot;font-style: italic;&quot;&gt;Ctrl-A&lt;/span&gt;, and a control reference will be created for each one, just as if you had right-clicked them individually and selected &lt;span style=&quot;font-style: italic;&quot;&gt;Create &gt; Reference&lt;/span&gt; on each one.  Check it out and let me know what you think:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://decibel.ni.com/content/docs/DOC-7445&quot;&gt;Quick Drop Keyboard Shortcut - Commands for &quot;Create&quot; Menu Options&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/8275461558986155962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2009/10/quick-drop-keyboard-shortcut-commands.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8275461558986155962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8275461558986155962'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2009/10/quick-drop-keyboard-shortcut-commands.html' title='Quick Drop Keyboard Shortcut - Commands for &quot;Create&quot; Menu Options'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-4641958717188135419</id><published>2009-08-20T16:36:00.002-05:00</published><updated>2009-08-20T16:39:46.627-05:00</updated><title type='text'>Quick Drop Keyboard Shortcut - VI Server Rename</title><content type='html'>I just posted my first post-release Quick Drop keyboard shortcut on the &lt;a href=&quot;http://www.ni.com/community&quot;&gt;NI Community&lt;/a&gt; website.  This shortcut allows you to avoid the maze of right-click submenus you must navigate whenever you want to specify the VI Server class of a Class Specifier Constant, Property Node, or Invoke Node.  It also allows you to specify the name of a property or method for a Property Node or Invoke Node if you don&#39;t feel like navigating those right-click menus either.  Check it out and let me know what you think:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://decibel.ni.com/content/docs/DOC-6377&quot;&gt;Quick Drop Keyboard Shortcut - VI Server Rename&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And look for more shortcuts coming soon!</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/4641958717188135419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2009/08/quick-drop-keyboard-shortcut-vi-server.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/4641958717188135419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/4641958717188135419'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2009/08/quick-drop-keyboard-shortcut-vi-server.html' title='Quick Drop Keyboard Shortcut - VI Server Rename'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-42343078557598941</id><published>2009-08-05T13:32:00.006-05:00</published><updated>2009-08-05T13:56:20.449-05:00</updated><title type='text'>Write Your Own Quick Drop Keyboard Shortcuts in LabVIEW 2009</title><content type='html'>I&#39;ve always thought it would be great to define my own editor operations that occur when a certain key combination is pressed.  Unfortunately, every single key combination, from Ctrl-A to Ctrl-Z, is currently taken by some operation in the LabVIEW editor.  During LabVIEW 2009 development, I spoke to some of my colleagues in LabVIEW R&amp;amp;D to see how hard it would be to allow users to override default key combinations in LabVIEW with their own G-based features.  Turns out it would be pretty tough to modify the LabVIEW editor in this manner, and nobody seemed to think it could be done anytime soon.&lt;br /&gt;&lt;br /&gt;So I took matters into my own hands and did the next best thing I could think of, which was to define some key combinations that would perform certain editor operations &lt;span style=&quot;font-style: italic;&quot;&gt;while Quick Drop was visible&lt;/span&gt;.  Once you&#39;ve pressed Ctrl-Space, you&#39;re in my world now.  :)  So in LabVIEW 2009, there are three key combinations that I&#39;ve defined:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl-[shift]-D&lt;/span&gt; - If you select some diagram objects, then press Ctrl-Space-Ctrl-D, controls and indicators will be automatically created and wired for all inputs and outputs of the selected objects.  If you press Ctrl-Space-Ctrl-Shift-D, constants will be created and wired for all inputs.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl-R&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;- If you select some diagram objects, then press Ctrl-Space-Ctrl-R, those objects will be removed from the diagram, but all wires that had pass-through inputs and outputs on those objects (like refnum or error wires) will be retained.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl-T&lt;/span&gt; - If you press Ctrl-Space-Ctrl-T while a diagram is open, the labels of all control/indicator terminals on the top-level diagram are moved  the left/right of the terminal, respectively.&lt;/li&gt;&lt;/ul&gt;But wait, there&#39;s more!  I designed this feature with everybody in mind, knowing that you might want to create your own Quick Drop shortcuts, or maybe you want to replace mine with something better.  So yes, Quick Drop keyboard shortcuts are a &lt;span style=&quot;font-style: italic;&quot;&gt;plugin&lt;/span&gt; architecture, and you are free to use &lt;a href=&quot;http://decibel.ni.com/content/docs/DOC-4973&quot;&gt;LabVIEW Scripting&lt;/a&gt; to write your own shortcuts!  You&#39;ll notice that the following folder now exists in LabVIEW 2009:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;[LabVIEW 2009]\resource\dialog\QuickDrop\plugins&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Inside this folder are &lt;span style=&quot;font-weight: bold;&quot;&gt;d.vi&lt;/span&gt;, &lt;span style=&quot;font-weight: bold;&quot;&gt;r.vi&lt;/span&gt;, and &lt;span style=&quot;font-weight: bold;&quot;&gt;t.vi&lt;/span&gt;.  Those are the VIs that define the Ctrl-[shift]-D, Ctrl-R, and Ctrl-T shortcuts in Quick Drop.  If you want to write your own shortcut (let&#39;s say it&#39;s Ctrl-E), start with &lt;span style=&quot;font-style: italic;&quot;&gt;resource\dialog\QuickDrop\QuickDrop Plugin Template.vi&lt;/span&gt;, save it as &lt;span style=&quot;font-weight: bold;&quot;&gt;e.vi &lt;/span&gt;in the &lt;span style=&quot;font-style: italic;&quot;&gt;plugins&lt;/span&gt; folder, and now you have a Ctrl-Space-Ctrl-E shortcut!&lt;br /&gt;&lt;br /&gt;As I get time in the coming months, I plan on posting new shortcuts to the &lt;a href=&quot;http://www.ni.com/community&quot;&gt;NI Community&lt;/a&gt; that I didn&#39;t quite have time to squeeze into the LabVIEW 2009 release.</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/42343078557598941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2009/08/write-your-own-quick-drop-keyboard.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/42343078557598941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/42343078557598941'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2009/08/write-your-own-quick-drop-keyboard.html' title='Write Your Own Quick Drop Keyboard Shortcuts in LabVIEW 2009'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-8896503341691321650</id><published>2009-07-21T17:27:00.003-05:00</published><updated>2009-07-21T18:22:49.055-05:00</updated><title type='text'>My NI Week 2009 Plans</title><content type='html'>I was inspired by &lt;a href=&quot;http://eyesonvis.blogspot.com/2009/07/niweek-2009.html&quot;&gt;Christina&#39;s NI Week post&lt;/a&gt; on her blog to post my tentative NI Week 2009 schedule, in case anybody is wondering where I&#39;ll be during NI Week.  After each morning&#39;s keynote, I&#39;m planning on helping out in the What&#39;s New With LabVIEW hands-on sessions at 10:30 in Room 18C each morning.  After that, here are my plans (which are subject to change based on hunger, long conversations about LabVIEW, impromptu VI-writing contests, challenges from Guitar Hero robots, and many other possible NI Week-sanctioned distractions):&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: underline;&quot;&gt;Tuesday&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;LabVIEW Experts Panel&lt;/b&gt;:  12:00, Technology Theater.  Maybe a LabVIEW Artisan will be allowed to hang out with LabVIEW Experts?&lt;/li&gt;&lt;li&gt;&lt;b&gt;Hack Your Car with NI-CAN&lt;/b&gt;:  1:00, Room 15.  I&#39;ve driven my car for months with the Check Engine light on, with no (visible) ill effects.  I sure would like to be able to figure out why that light is *really* on.&lt;/li&gt;&lt;li&gt;&lt;b&gt;LabVIEW Scripting&lt;/b&gt;:  2:15, Room 16B.  I&#39;ll be there mainly to help answer any specific scripting questions that might come up.&lt;/li&gt;&lt;li&gt;&lt;b&gt;New Software Engineering Tools in LabVIEW&lt;/b&gt;:  3:30, Room 16B.  I honestly don&#39;t know what we&#39;re presenting on here, and I&#39;m curious to find out.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Challenge the Champions:&lt;/b&gt;  5:00, Technology Theater.  I wrote some of the questions for this year&#39;s event (and not a single one of them has to do with Express VIs!).&lt;/li&gt;&lt;li&gt;&lt;b&gt;LAVA BBQ&lt;/b&gt;:  8:00, Stubb&#39;s.  I *think* I can make it this year, but I&#39;m not sure yet.  &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: underline;&quot;&gt;Wednesday&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Past, Present, and Future of Robots&lt;/b&gt;: 1:00, Room 17B. The dude that runs the Roomba company is presenting this one.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Tools and APIs to Build on the LabVIEW Platform Hands-On&lt;/b&gt;:  2:15, Room 18C.  I helped write a lot of the initial content for this, so I&#39;m interested to see how it turned out.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Memory Management in LabVIEW&lt;/b&gt;:  3:30, Room 16B.  Dan H. is one of the foremost experts on the guts of LabVIEW.  I&#39;ve seen some of the content for this presentation and it should be great.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Tips and Tricks to Speed LabVIEW Development&lt;/b&gt;:  4:45, Room 16A.  I&#39;m presenting this one, so I should probably show up.  For those of you who came to my performance tips and tricks presentation at NI Week 2008, I&#39;ve got a &lt;i&gt;brand new&lt;/i&gt; set of tips and tricks up my sleeve this year.  Don&#39;t miss it!&lt;/li&gt;&lt;/ul&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: underline;&quot;&gt;Thursday&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;LabVIEW Coding Challenge&lt;/b&gt;:  High Noon, Technology Theater.  Who dares challenge me after my resounding victory at NI Week 2008?  You have all had a year to practice with Quick Drop, so no more excuses!  I&#39;m looking at you, &lt;a href=&quot;http://thinkinging.com/2008/08/26/labview-86-quick-drop-is-awesome-and-an-unfair-advantage/&quot;&gt;Jim&lt;/a&gt;.   :)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Web Services in LabVIEW&lt;/b&gt;:  1:00, Room 16B.  I must admit, I know a lot less about web services than I should.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Improving the LabVIEW Upgrade Experience&lt;/b&gt;:  2:15, Room 16A.  I&#39;m always telling people about great new LabVIEW features, so I should probably be familiar with issues people have when trying to upgrade so they can use those new features.&lt;/li&gt;&lt;/ul&gt;So if you made it this far, I have a couple of other things to mention about NI Week 2009:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;I plan on twittering frequently (with my new iPhone!) about what I&#39;m doing and cool stuff I&#39;m seeing at NI Week 2009.  Follow me at &lt;a href=&quot;http://www.twitter.com/dnatt&quot;&gt;http://www.twitter.com/dnatt&lt;/a&gt; if you don&#39;t already.&lt;/li&gt;&lt;li&gt;The NI Week program incorrectly lists me as the presenter for &lt;i&gt;Beyond the Basics: &lt;/i&gt;&lt;i&gt;LabVIEW Debugging Techniques&lt;/i&gt; on Tuesday at 2:15.  Actually, Tycho C., the author of the Desktop Execution Trace Toolkit, is giving that presentation.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/8896503341691321650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2009/07/my-ni-week-2009-plans.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8896503341691321650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8896503341691321650'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2009/07/my-ni-week-2009-plans.html' title='My NI Week 2009 Plans'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-9184726875914366223</id><published>2009-07-17T00:59:00.003-05:00</published><updated>2009-07-17T01:30:47.527-05:00</updated><title type='text'>The Diagram Cleanup Experiment</title><content type='html'>For many years now, I&#39;ve taken pride in the appearance of my LabVIEW diagrams.  One of my first tasks when I joined LabVIEW R&amp;amp;D  several years ago was to rewrite the &lt;a href=&quot;http://www.ni.com/pdf/manuals/321393d.pdf#labview_style_guide&quot;&gt;LabVIEW Style Guide&lt;/a&gt;, and more recently, I was very much involved in the reviews of Peter Blume&#39;s &lt;span style=&quot;font-style: italic;&quot;&gt;&lt;a href=&quot;http://www.amazon.com/LabVIEW-National-Instruments-Virtual-Instrumentation/dp/0131458353/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1247810652&amp;amp;sr=8-1&quot;&gt;The LabVIEW Style Book&lt;/a&gt;.&lt;/span&gt;  I cannot claim style perfection, but I can say that you would have to search pretty hard in all the code I&#39;ve written over the years to find backwards wires, overlapping objects, uncommented code, or any other style transgressions.&lt;br /&gt;&lt;br /&gt;However, that clean code doesn&#39;t come without a cost...a cost of &lt;span style=&quot;font-style: italic;&quot;&gt;time&lt;/span&gt;.  It takes time to perfectly align objects, to minimize space to achieve optimal compactness, to align control terminals on the left and indicator terminals on the right.  My kindred spirits in LabVIEW style know what I&#39;m talking about here.&lt;br /&gt;&lt;br /&gt;Speaking of time...for the past year, I&#39;ve been enjoying how much time I&#39;ve been saving with &lt;a href=&quot;http://zone.ni.com/devzone/cda/tut/p/id/7423&quot;&gt;Quick Drop&lt;/a&gt;.  I can safely say that the most constrictive bottleneck on my LabVIEW programming speed--palette navigation--is no longer an issue.  But seeing as I&#39;m always looking for ways to write more code in less time (which translates into more features for you!), I very quickly became aware of the next biggest bottleneck--clean diagram arrangement.&lt;br /&gt;&lt;br /&gt;So I&#39;m going to embark on a journey with LabVIEW 2009...one which is undoubtedly fraught with peril, but should ultimately benefit all LabVIEW users.  I am going to throw my current method of incremental diagram arrangement out the window, and rely 100% on Diagram Cleanup to do the job for me.  The way I see it, we&#39;ve got a feature here that is supposed to give us clean diagrams.  It&#39;s also going to have some pretty nice improvements in LabVIEW 2009.  So instead of ignoring this great feature that has tons of potential, I&#39;m going to use it, recognize its shortcomings, experiment with its customizable settings, and file CARs to make it better.  I envision a day, hopefully not too far off in the future, where we can spend our programming time focusing entirely on programming, and not being distracted by aesthetics.</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/9184726875914366223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2009/07/diagram-cleanup-experiment.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/9184726875914366223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/9184726875914366223'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2009/07/diagram-cleanup-experiment.html' title='The Diagram Cleanup Experiment'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-8119519507461392492</id><published>2009-06-12T15:48:00.006-05:00</published><updated>2012-08-10T23:39:09.058-05:00</updated><title type='text'>LabVIEW Scripting Tip #3: How to Handle References</title><content type='html'>Once you get past the really simple scripting apps, you&#39;ll quickly discover that your scripting VIs can become unwieldy at a moment&#39;s notice, and this is primarily due to how many VI Server references you have to deal with in a complex scripting app.  Here now is a list of things to keep in mind when dealing with a plethora of scripting references all over your diagram.&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;When to Close References&lt;/span&gt; - For every single VI Server reference type *except* VI and Application, it&#39;s fine to close the reference as soon as you&#39;re done with it.  I&#39;ve seen people write scripting VIs before where they thought they needed to keep each &quot;parent&quot; reference open as long as they were using a child reference.  This is not the case.  Check out this sample diagram, which is getting the first tunnel it finds on a Case Structure and determining if it is an output or an input tunnel:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEBRlRI1YcfuC3CBjWqZ43GsyKCzWtOn-8jQpLim0H9Fy2HJwe8dCBJLxU0N81UxBc_2CY91CqEwvkNeJ1S2vxG-Fs88cuAE67oBzaAW69_cCRR320rp9McgR9wf2B_yjVNPte5NBWyjA/s1600-h/close_later.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5346550560570740626&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEBRlRI1YcfuC3CBjWqZ43GsyKCzWtOn-8jQpLim0H9Fy2HJwe8dCBJLxU0N81UxBc_2CY91CqEwvkNeJ1S2vxG-Fs88cuAE67oBzaAW69_cCRR320rp9McgR9wf2B_yjVNPte5NBWyjA/s400/close_later.png&quot; style=&quot;cursor: pointer; float: left; height: 76px; margin: 0pt 10px 10px 0pt; width: 350px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This code will work, but those wires don&#39;t need to span the entire diagram just to be closed later.  You can imagine these wires could get very long as the complexity of your scripting code increases.  Instead, take an approach like this:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7XWcPZBBWCz3WfB0rGQOEj5QFETr52QljbmzU2CTrc1CPblvAT5vCz-CyPf4iNy9ozwHSFoYaUUKS0CupEhhzLHfCvqKTn_At-fNYvvOty0EKD9COH2WTvM_Zw1GXQwgvHduLg91YxCw/s1600-h/close_now.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5346550892030793634&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7XWcPZBBWCz3WfB0rGQOEj5QFETr52QljbmzU2CTrc1CPblvAT5vCz-CyPf4iNy9ozwHSFoYaUUKS0CupEhhzLHfCvqKTn_At-fNYvvOty0EKD9COH2WTvM_Zw1GXQwgvHduLg91YxCw/s400/close_now.png&quot; style=&quot;cursor: pointer; float: left; height: 80px; margin: 0pt 10px 10px 0pt; width: 350px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here, we are closing the references as soon as we&#39;re done with them.  The diagram looks cleaner, and we don&#39;t have to worry about passing really long wires around.  Also, note the trick I&#39;m doing with the array of Tunnel references.  Often in VI Scripting, you&#39;ll have an array of references, but you&#39;re only interested in one of those references.  In these cases, you can use the &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/371361E-01/glang/delete_from_array/&quot;&gt;Delete From Array&lt;/a&gt; function to pull out the one you&#39;re interested in, and close all the rest.&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Comparing References&lt;/span&gt; - If you are trying to compare two references to see if they refer to the same object, you can simply use the &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/371361E-01/glang/equal/&quot;&gt;Equal?&lt;/a&gt; function.  Similarly, if you have an array of references, and you want to search that array to find the index of a particular reference, you can use the &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/371361E-01/glang/search_1d_array/&quot;&gt;Search 1D Array&lt;/a&gt; function.  Even though two references to the same object may have different flattened U32 refnum values (as can pretty easily be seen with the &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/371361E-01/glang/type_cast/&quot;&gt;Type Cast&lt;/a&gt; function), using the comparison functions in LabVIEW will compare the actual objects those references refer to, and not the numeric refnum values, when performing the comparison.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Checking Reference Type&lt;/span&gt; - Many times you&#39;ll have a reference to an object, and you&#39;ll want to figure out what type of object it is.  You may be inclined to read the Class Name property of that object, but this approach can cause problems.  For example, let&#39;s say you have a reference to a Node, and you want to see if it that Node is a member of the Structure class (Case Structure, While Loop, For Loop, etc.).  So you read the Class Name property of the reference and see if it equals &quot;Structure&quot;.  Well, this approach will never work, because the Class Name property always returns the most specific class name of the object...so it would return CaseStructure, WhileLoop, ForLoop, etc.  Instead of using the Class Name approach, you can use the &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/371361E-01/glang/to_more_specific_class/&quot;&gt;To More Specific Class&lt;/a&gt; function and check the error output:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht-bzGIv8Insy0Pl0LaQOFwNJdcbKaXFKhGrHpm9oZbNkoFsJr8U9ZUeybMJrbhUEeqemR686sDYSkfcs1hBrCysPUBVHgUFa0i_Ilchm063Ksm5nEiml14GrrsnE6w8MlEPSj4QBowgo/s1600-h/check_struct.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5346555523991400146&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht-bzGIv8Insy0Pl0LaQOFwNJdcbKaXFKhGrHpm9oZbNkoFsJr8U9ZUeybMJrbhUEeqemR686sDYSkfcs1hBrCysPUBVHgUFa0i_Ilchm063Ksm5nEiml14GrrsnE6w8MlEPSj4QBowgo/s400/check_struct.png&quot; style=&quot;cursor: pointer; float: left; height: 55px; margin: 0pt 10px 10px 0pt; width: 330px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In this case, as long as the Node is any type of Structure, the class conversion will succeed.&lt;/li&gt;
&lt;/ol&gt;
Does anybody have any additional tips for dealing with references when programming VI Scripting applications?  Let&#39;s hear them!</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/8119519507461392492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2009/06/labview-scripting-tip-3-how-to-handle.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8119519507461392492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8119519507461392492'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2009/06/labview-scripting-tip-3-how-to-handle.html' title='LabVIEW Scripting Tip #3: How to Handle References'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEBRlRI1YcfuC3CBjWqZ43GsyKCzWtOn-8jQpLim0H9Fy2HJwe8dCBJLxU0N81UxBc_2CY91CqEwvkNeJ1S2vxG-Fs88cuAE67oBzaAW69_cCRR320rp9McgR9wf2B_yjVNPte5NBWyjA/s72-c/close_later.png" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-8009948702259168325</id><published>2009-06-05T11:00:00.009-05:00</published><updated>2009-06-05T11:39:30.047-05:00</updated><title type='text'>LabVIEW Scripting Tip #2:  Supporting Undo</title><content type='html'>One of the great things about &lt;a href=&quot;http://decibel.ni.com/content/docs/DOC-4973&quot;&gt;LabVIEW Scripting&lt;/a&gt; is that we can implement tools that perform actions in the LabVIEW editor.  There are already several utilities posted on &lt;a href=&quot;http://www.lavag.org/&quot;&gt;LAVA&lt;/a&gt; along these lines, along with the hopefully-soon-to-be-released &lt;a href=&quot;http://decibel.ni.com/content/docs/DOC-4678&quot;&gt;JKI Right-Click Framework&lt;/a&gt;.  Not to mention current and future shipping LabVIEW features.&lt;br /&gt;&lt;br /&gt;In order to give your scripting-based utility equal footing with built-in LabVIEW features, though, you need to make sure anything you do with scripting can be undone or redone by the user.  Thankfully, there is support in scripting for setting up Undo/Redo transactions, as illustrated by this screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVer_ZRZPvFqUKSG7dKXHR7Sxl7hLzA9d3a0SSwfWjlzRdG1rrXAvXS24-LwNZWTOJeLmSnB_a8TvF5gLAIyjoc_dJs0C-7ZsDlAyRkkL1-5pxUBdlpVf7Ojex8xY7VMAJgHfH_1ecMSw/s1600-h/undo.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 199px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVer_ZRZPvFqUKSG7dKXHR7Sxl7hLzA9d3a0SSwfWjlzRdG1rrXAvXS24-LwNZWTOJeLmSnB_a8TvF5gLAIyjoc_dJs0C-7ZsDlAyRkkL1-5pxUBdlpVf7Ojex8xY7VMAJgHfH_1ecMSw/s400/undo.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5343878193269656578&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are some details on each of the methods shown in the screenshot:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Transaction.Begin Undo&lt;/span&gt; - Call this method before you start your scripting operation.  The &quot;Name&quot; input is the text that you want users to see next to the Undo/Redo options in the Edit menu:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPgF3h4tb7kr6R_pklfNtCJecBcgTAe4GbHvUDiiYfoqSTFRLWGeFRaPqx6KFT7rlutNsnkhqDA1X8H_hyBTLAYkp-qe4eGRhnS62727N2DMUFC4O-YASxf-3CeWPCf2KD-6X-w8p6t_A/s1600-h/undo_redo_menu.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 313px; height: 179px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPgF3h4tb7kr6R_pklfNtCJecBcgTAe4GbHvUDiiYfoqSTFRLWGeFRaPqx6KFT7rlutNsnkhqDA1X8H_hyBTLAYkp-qe4eGRhnS62727N2DMUFC4O-YASxf-3CeWPCf2KD-6X-w8p6t_A/s400/undo_redo_menu.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5343879251697659506&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After calling &lt;span style=&quot;font-weight: bold;&quot;&gt;Begin Undo&lt;/span&gt;, you will do all the scripting code you need to do for whatever editor operation you are performing.  While doing your scripting, you need to keep track of a boolean, or some sort of flag, indicating whether or not you actually want to complete the Undo transaction, so you can make a decision between the following two methods.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Transaction.End Undo&lt;/span&gt; - Did everything script ok?  Assuming you didn&#39;t get any errors, and that your scripting code actually did change something on the target VI, you need to end your Undo transaction.  This actually commits the scripting action to the target VI, and creates the &lt;span style=&quot;font-style: italic;&quot;&gt;Edit &gt; Undo&lt;/span&gt; option in the menu with the Name you specified on &lt;span style=&quot;font-weight: bold;&quot;&gt;Begin Undo&lt;/span&gt;.  &lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Transaction.Fail&lt;/span&gt; - Did an error occur during your scripting?  Or did your scripting code not actually change anything?  If either of these is the case, you probably want to &lt;span style=&quot;font-weight: bold;&quot;&gt;Fail&lt;/span&gt; the transaction.  This means that the transaction is not committed to the target VI, and that no new &lt;span style=&quot;font-style: italic;&quot;&gt;Undo&lt;/span&gt; option is added to the &lt;span style=&quot;font-style: italic;&quot;&gt;Edit&lt;/span&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;span style=&quot;font-style: italic;&quot;&gt; &lt;/span&gt;&lt;/span&gt;menu.  Notice that in my screenshot, I do not wire the error up to the &lt;span style=&quot;font-weight: bold;&quot;&gt;Transaction.Fail&lt;/span&gt; method.  This is because, if an error occurred in my scripting, I still want the &lt;span style=&quot;font-weight: bold;&quot;&gt;Fail&lt;/span&gt; method to execute so it cancels the transaction.&lt;/li&gt;&lt;/ul&gt;If you decide not to wrap your scripting operations with these transaction methods, there are two significant consequences.  First, and most obvious, is that users will not be able to undo whatever scripting operation you have performed.  Second, and more severe, is the fact that a scripting operation that is not wrapped with these transaction methods can clear the existing Undo stack of a VI.  So if you are developing a first-class scripting utility with any sort of integration into the LabVIEW editor, make sure to take these simple steps to make your operations undoable/redoable.&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/8009948702259168325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2009/06/labview-scripting-tip-2-supporting-undo.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8009948702259168325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/8009948702259168325'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2009/06/labview-scripting-tip-2-supporting-undo.html' title='LabVIEW Scripting Tip #2:  Supporting Undo'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVer_ZRZPvFqUKSG7dKXHR7Sxl7hLzA9d3a0SSwfWjlzRdG1rrXAvXS24-LwNZWTOJeLmSnB_a8TvF5gLAIyjoc_dJs0C-7ZsDlAyRkkL1-5pxUBdlpVf7Ojex8xY7VMAJgHfH_1ecMSw/s72-c/undo.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3607298864599224213.post-6315247871245157040</id><published>2009-06-03T16:38:00.006-05:00</published><updated>2013-12-12T11:36:28.138-06:00</updated><title type='text'>LabVIEW Scripting Tip #1:  The Power of Traverse</title><content type='html'>This blog post is the first in an as yet unknown number of posts detailing some useful tips I have on &lt;a aiotarget=&quot;false&quot; aiotitle=&quot;LabVIEW Scripting&quot; href=&quot;http://decibel.ni.com/content/docs/DOC-4973&quot;&gt;LabVIEW Scripting&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you&#39;re ever examining VIs to find objects of a particular type, then you definitely want to check out the following utility VI:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-style: italic;&quot;&gt;[LabVIEW]\vi.lib\utility\traverseref.llb\TRef Traverse for References.vi&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This VI will return references to all the objects of a given class that reside within the panel, diagram, or a user-defined object in a VI.  The traversal is recursive, so it will find objects nested within other objects.  Here&#39;s a simple example that finds all the Case Structures on a diagram:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2UIZ00m2PyJJElMe6p07G2MM0zAxWpZ_TLzcek5q81qW4h1C4dJbGUwvsViGFyMEX9qLYEzjf1Io8Z5y1opak89Ggh2cQJEyKAZ4Tj1zOuV9O-hWK8ab2o_JkeV4mVmtCR8wibcL5Dho/s1600-h/traverse.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5343221753048275282&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2UIZ00m2PyJJElMe6p07G2MM0zAxWpZ_TLzcek5q81qW4h1C4dJbGUwvsViGFyMEX9qLYEzjf1Io8Z5y1opak89Ggh2cQJEyKAZ4Tj1zOuV9O-hWK8ab2o_JkeV4mVmtCR8wibcL5Dho/s400/traverse.png&quot; style=&quot;cursor: pointer; float: left; height: 106px; margin: 0pt 10px 10px 0pt; width: 400px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We specify a target of &quot;BD&quot; (for Block Diagram) and a class name of &quot;CaseStructure&quot;, and we&#39;re good to go.  Note that you can also traverse the front panel for objects by specifying a target of &quot;FP&quot;.  And if you want to traverse a specific object (i.e. find all the clusters that reside within a particular Tab Control on the front panel), then specify a target of &quot;Other&quot; and pass in a reference to the Tab Control to the &quot;Other Refnum&quot; input.&lt;br /&gt;
&lt;br /&gt;
You may wonder why I recommend using this VI, when there is already a scripting property called &lt;span style=&quot;font-style: italic;&quot;&gt;AllObjects[]&lt;/span&gt; for the Diagram class (and a similar property for the panel).  Well, that &lt;span style=&quot;font-style: italic;&quot;&gt;AllObjects[]&lt;/span&gt; property does not recurse into container objects.  So to completely search a diagram for objects, you would need to get the &lt;span style=&quot;font-style: italic;&quot;&gt;AllObjects[]&lt;/span&gt; property, figure out which objects are containers, separate those objects out, get the container diagrams, do an &lt;span style=&quot;font-style: italic;&quot;&gt;AllObjects[]&lt;/span&gt; on them, etc. etc.  This is certainly doable, and I&#39;m guessing people have already written VIs that do this...but in my experience, using the Traverse VI is much, much faster than trying to recurse the entire diagram w&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;/span&gt;ith &lt;span style=&quot;font-style: italic;&quot;&gt;AllObjects[]&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
This traverse VI is used extensively in the &lt;a href=&quot;http://zone.ni.com/devzone/cda/tut/p/id/3588&quot;&gt;VI Analyzer Toolkit&lt;/a&gt;, since we are often looking for specific objects on the diagram that we need to examine.  And if you know the label of a specific object you are looking for, then you can use the &lt;span style=&quot;font-style: italic;&quot;&gt;TRef Find Object By Label.vi&lt;/span&gt; in that same LLB, which is basically a wrapper for &lt;span style=&quot;font-style: italic;&quot;&gt;TRef Traverse for References.vi&lt;/span&gt;, but it goes an extra step and reads the labels of each found object until it finds the one you were looking for.&lt;br /&gt;
&lt;br /&gt;
Just to give you an idea how useful this VI can be, &lt;span style=&quot;font-style: italic;&quot;&gt;TRef Traverse for References.vi&lt;/span&gt; originally shipped only with the VI Analyzer Toolkit 1.0 when LabVIEW 7.0 released.  However, once it got to the point that about a dozen internal groups at NI had asked me for a copy of the Traverse VI so they could ship it with their products, I decided it would be best for all of us if a single copy of the VI shipped with core LabVIEW, which it has since LabVIEW 8.0.</content><link rel='replies' type='application/atom+xml' href='http://labviewartisan.blogspot.com/feeds/6315247871245157040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://labviewartisan.blogspot.com/2009/06/labview-scripting-tip-1-power-of.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/6315247871245157040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3607298864599224213/posts/default/6315247871245157040'/><link rel='alternate' type='text/html' href='http://labviewartisan.blogspot.com/2009/06/labview-scripting-tip-1-power-of.html' title='LabVIEW Scripting Tip #1:  The Power of Traverse'/><author><name>Darren Nattinger</name><uri>http://www.blogger.com/profile/02086721848867401467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivY1NyVUqruK0UL50oHKiI3_-iUwkLj-tjO8tH-DEmvnS5IVVWqhlTk0wc4hL2A8p20VXYrhQ3kRSwR5rWNYlnt2nN9vC2wCbSwLPLQAZewyXKanFzQa-d_LzPPurXgQ/s220/burger.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2UIZ00m2PyJJElMe6p07G2MM0zAxWpZ_TLzcek5q81qW4h1C4dJbGUwvsViGFyMEX9qLYEzjf1Io8Z5y1opak89Ggh2cQJEyKAZ4Tj1zOuV9O-hWK8ab2o_JkeV4mVmtCR8wibcL5Dho/s72-c/traverse.png" height="72" width="72"/><thr:total>14</thr:total></entry></feed>