<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Thinking in G &#187; LabVIEW Tips</title>
	<atom:link href="http://thinkinging.com/category/labview-tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://thinkinging.com</link>
	<description>an unfiltered stream of data flow consciousness</description>
	<lastBuildDate>Fri, 02 Oct 2009 23:51:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The JKI State Machine makes its public debut</title>
		<link>http://thinkinging.com/2008/10/13/the-jki-state-machine-makes-its-public-debut/</link>
		<comments>http://thinkinging.com/2008/10/13/the-jki-state-machine-makes-its-public-debut/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 06:50:31 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[Code Reuse]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>

		<guid isPermaLink="false">http://thinkinging.com/?p=624</guid>
		<description><![CDATA[I&#8217;m very happy to announce that JKI has released the JKI State Machine™ to the public as a free download.  This is the very same template that is used by the JKI team, nearly every day, in our products and various projects.

This tool is the direct result of putting some of the best LabVIEW minds [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m very happy to announce that JKI has released the <a href="http://jkisoft.com/state-machine/">JKI State Machine</a>™ to the public as a free download.  This is the very <span style="font-weight: bold;">same template that is used by the JKI team</span>, nearly every day, in our products and various projects.</p>
<p><img class="aligncenter" title="JKI State Machine palette" src="http://jkisoft.com/state-machine/docs/JKI_State-Machine_Palette.png" alt="" width="174" height="114" /></p>
<p>This tool is the direct result of putting some of the best LabVIEW minds together for several years, tasked with the challenge of creating a LabVIEW architectural design pattern that would allow easy coding, readability, and maintenance.  As you might imagine the JKI team has created something truly special that we hope will have a significant impact on LabVIEW users everywhere.</p>
<p>This has been in the works for quite some time and we&#8217;re excited that the time has finally come to share this tool with you, now.</p>
<p>Please take this challenge:</p>
<ol>
<li><a href="http://jkisoft.com/state-machine/download/">Download and install</a> the JKI State Machine.</li>
<li>Watch this great <a href="http://forums.jkisoft.com/index.php?showforum=49">video tutorial</a>.</li>
<li>Take a look at how we <a href="http://forums.jkisoft.com/index.php?showtopic=892">refactored the 3-button dialog</a> (VI that ships with LabVIEW) using the JKI State Machine.</li>
<li><a href="http://forums.jkisoft.com/index.php?showforum=46">Tell us what you think</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/10/13/the-jki-state-machine-makes-its-public-debut/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Planning for software reuse is easy &#8212; mining is hard</title>
		<link>http://thinkinging.com/2008/09/17/planning-for-software-reuse-is-easy-mining-is-hard/</link>
		<comments>http://thinkinging.com/2008/09/17/planning-for-software-reuse-is-easy-mining-is-hard/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 17:17:23 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[Code Reuse]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://thinkinging.com/?p=574</guid>
		<description><![CDATA[One of the best places to find reusable code is in your old projects.  However, &#8220;mining&#8221; your old projects for &#8220;reuse gems&#8221; (sorting through every VI, looking for sparkly little gems of general-purpose code that have immense value) is simply not an effective use of time or energy.

For example, if you were a miner looking [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">One of the best places to find reusable code is in your old projects.  However, <strong>&#8220;mining&#8221; your old projects for &#8220;reuse gems&#8221;</strong> (sorting through every VI, looking for sparkly little gems of general-purpose code that have immense value) <strong>is simply not an effective use of time or energy</strong>.</p>
<p class="MsoNormal" style="text-align: center;"><img class="aligncenter size-full wp-image-576" title="diamonds" src="http://thinkinging.com/wp-content/uploads/2008/09/diamonds.jpg" alt="" width="400" height="211" /></p>
<p class="MsoNormal">For example, if you were a miner looking for precious minerals, you would wouldn’t roam the countryside digging random holes in the ground.  Rather, you would work smart &#8212; you would <strong>try to identify a geographic location with a very high natural concentration of precious minerals</strong> (based on a variety of clues).  Guess what?  This is exactly how you should mine for reusable code in your past projects.  But, where do you start looking and what are the clues that will lead you to those reuse gems?</p>
<p class="MsoNormal"><strong>Here&#8217;s the secret</strong>:</p>
<blockquote>
<p class="MsoNormal"><em>While writing code, when you identify that you are writing a VI that is generic and has the potential to be reused, save it inside a sub-folder of your project folder called &#8220;Reusable VIs&#8221;.</em></p>
</blockquote>
<p class="MsoNormal">If you adhere to this strategy, it will be very easy for you to come back later and find your reuse gems.  And, before you know it, you will have what resembles a reuse library.  Best of all, you didn&#8217;t even have to get your hands too dirty.</p>
<p class="MsoNormal"><em>Note: As your reuse library grows (which it will if you use the planning techniques described above), you&#8217;ll need to start thinking about how to utilize your reuse library on multiple projects and share these VIs with other developers.  Make sure you don&#8217;t get stuck in the <a href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/">pitfalls of a monolithic reuse library</a> caused by copying your reuse library from project to project or by using the same version of your reuse library on each project.  Create a <a href="http://jkisoft.com/vipm/guide/">VI Package</a> and install your reuse library in your palettes using <a href="http://jkisoft.com/vipm/">VIPM</a> &#8212; it&#8217;s easy and simple. </em></p>
<p class="MsoNormal">I&#8217;d love to hear your feedback, so please feel free to leave a comment.  For example:</p>
<ul>
<li>Do you have a folder in your project where you put new, reusable VIs?</li>
<li>Do you think that this is a good idea, or do you have a better strategy?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/09/17/planning-for-software-reuse-is-easy-mining-is-hard/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>What&#8217;s that .lvlps file next to my LabVIEW 8.6 project?</title>
		<link>http://thinkinging.com/2008/09/09/whats-that-lvlps-file-next-to-my-labview-86-project/</link>
		<comments>http://thinkinging.com/2008/09/09/whats-that-lvlps-file-next-to-my-labview-86-project/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 08:00:39 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>
		<category><![CDATA[Source Code Control]]></category>

		<guid isPermaLink="false">http://thinkinging.com/?p=380</guid>
		<description><![CDATA[I&#8217;m lucky enough to have a new project that will be developed in LabVIEW 8.6, so I get to use various new features (like Darren&#8217;s awesome Quick Drop tool).
When jumping head first into a new LabVIEW version there are bound to be some unknowns.  In my case, I noticed that, after saving my project (.lvproj) [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m lucky enough to have a new project that will be developed in LabVIEW 8.6, so I get to use various new features (like Darren&#8217;s awesome <a href="http://thinkinging.com/2008/08/26/labview-86-quick-drop-is-awesome-and-an-unfair-advantage/">Quick Drop</a> tool).</p>
<p>When jumping head first into a new LabVIEW version there are bound to be some unknowns.  In my case, I noticed that, after saving my project (.lvproj) file, an .lvlps file showed up in my project folder (right next to the .lvproj file).</p>
<p><div id="attachment_423" class="wp-caption aligncenter" style="width: 113px"><img class="size-medium wp-image-423" title="myproject" src="http://thinkinging.com/wp-content/uploads/2008/08/myproject.png" alt="" width="103" height="38" /><p class="wp-caption-text">What&#39;s that new .lvlps file?</p></div></p>
<p>So, I opened up the .lvlps file in a text editor and saw that it contained the following:</p>
<blockquote><p>[ProjectWindow_Data]<br />
ProjectExplorer.ClassicPosition[String] = &#8220;59,221,459,571&#8243;</p></blockquote>
<p>It appeared to store some window settings for my project.</p>
<p>Figuring there&#8217;s probably something in the LabVIEW help about this file, I search the LabVIEW help for &#8220;lvlps&#8221; and found the <a href="http://zone.ni.com/reference/en-XX/help/371361E-01/lvhowto/lv_file_extensions/">&#8220;LabVIEW File Extensions&#8221; help page</a>.</p>
<blockquote><p><strong>.lvlps</strong></p>
<p>File that stores project settings that are specific to the local machine. You should not check .lvlps files into source control because .lvlps files contain settings specific to the computer you are using; for example, .lvlps files contain the local source code control configuration. LabVIEW saves .lvlps files when you save a project, and correctly renames the file when you rename a project. You can remove or delete .lvlps files without affecting the performance or behavior of a project because .lvlps files only contain project settings specific to the local machine. If you build an application, LabVIEW does not copy the .lvlps file into the built application.</p></blockquote>
<p><strong>Conclusion:</strong> OK, the .lvlps file contains my <strong>L</strong>abVIEW <strong>L</strong>ocal <strong>P</strong>roject <strong>S</strong>ettings.  So, I don&#8217;t want to check it into Source Code Control, because each developer working on the project will probably have different settings and they aren&#8217;t really important enough to do change control.</p>
<p><em>Note: I kind of like how Apple Xcode project files (actually they are &#8220;package&#8221; folders &#8212; they just look like files, in the Finder) work.  Your local Xcode project settings (like window positions) are stored in files that include the user&#8217;s name, so that you can, if you want, save them in source code control without developers overwriting each others&#8217; settings.  But, since Windows doesn&#8217;t really have a feature like &#8220;packages&#8221; (and LabVIEW needs to be multi-platform), I guess we&#8217;ll have to keep doing things the hard way.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/09/09/whats-that-lvlps-file-next-to-my-labview-86-project/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>LabVIEW 8.6 Quick Drop is awesome (and an unfair advantage)!</title>
		<link>http://thinkinging.com/2008/08/26/labview-86-quick-drop-is-awesome-and-an-unfair-advantage/</link>
		<comments>http://thinkinging.com/2008/08/26/labview-86-quick-drop-is-awesome-and-an-unfair-advantage/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 08:00:42 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>
		<category><![CDATA[NI Week]]></category>
		<category><![CDATA[OpenG]]></category>

		<guid isPermaLink="false">http://thinkinging.com/?p=394</guid>
		<description><![CDATA[I&#8217;m lucky enough to have a new project that will be developed in LabVIEW 8.6 (which was just released at NIWeek 2008), so I get to start using various new features like Darren&#8217;s totaly awesome Quick Drop tool.  I&#8217;m really excited to start using Quick Drop, because I saw Darren (the LabVIEW R&#38;D team member [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m lucky enough to have a new project that will be developed in LabVIEW 8.6 (which was just released at NIWeek 2008), so I get to start using various new features like <strong>Darren&#8217;s totaly awesome <a href="http://zone.ni.com/devzone/cda/tut/p/id/7423">Quick Drop</a> tool</strong>.  I&#8217;m <strong>really</strong> excited to start using Quick Drop, because I saw Darren (the LabVIEW R&amp;D team member who created it) use it during the NIWeek 2008 coding challenge and he was able to <strong>code ridiculously fast</strong>.  Seriously, you&#8217;ve got to see it to believe it.  He&#8217;s <strong>even faster than me!</strong></p>
<p style="text-align: center;"><img class="size-medium wp-image-409" title="quick-drop-openg" src="http://thinkinging.com/wp-content/uploads/2008/08/quick-drop-openg.png" alt="" width="351" height="212" /><br />
Quick Drop even works with OpenG VIs!<br />
Now, that&#8217;s an unfair advantage.</p>
<p>In fact, I didn&#8217;t even bother to enter the coding speed challenge at NIWeek this year (which I won at NIWeek 2005), because I saw how fast Darren was coding during the NIWeek keynote (<a href="http://www.ni.com/niweek/2008/keynote/labview_86.htm">here is a video of it</a>), and my LabVIEW skills were more than a little bit rusty at NIWeek 2008, as I hadn&#8217;t touched LabVIEW for 3 weeks (I was traveling for a wedding, and also visiting some of my European LabVIEW buddies, in France).  Ya, excuses, excuses&#8230;</p>
<p>So, instead of competing, I hid in the JKI booth and pretended to be too busy to enter the contest.  Of course, I didn&#8217;t want to loose my unofficial &#8220;fasted LabVIEW coder on the planet (or at least, NIWeek)&#8221; title in a head-to-head match up against Darren &#8212; the dude is fast!  I wanted to at least have some time to practice using the Quick Drop tool and try to level the playing field.  Then, I&#8217;d come back and challenge Darren to a fair match &#8212; pretty sneaky huh?</p>
<p>Speaking of fair competition, they weren&#8217;t even letting contestants use <a href="http://openg.org">OpenG</a> VIs in the coding speed contest, this year (I guess <a rel="bookmark" href="../2007/06/04/openg-is-an-unfair-advantage/">OpenG is an unfair advantage</a>).  Like Darren didn&#8217;t have an unfair advantage <img src='http://thinkinging.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>All joking aside, the Quick Drop tool is amazing.  It&#8217;s basically like auto-completion for text-based languages (so, it gives text-based programmers one less reason not to go graphical).  Just press Ctrl+Space and then type the name of the VI or function you want to place on the Block Diagram.  As the list of possible items appears, press Enter to select the top item in the list, or click on any other item, to place it on the Block Diagram.  It really lives up to it&#8217;s name by allowing you to quickly drop nodes onto the block diagram.  There&#8217;s no doubt it will become one of <em>your</em> favorite tools in LabVIEW, once you give it a try.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/08/26/labview-86-quick-drop-is-awesome-and-an-unfair-advantage/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>LabVIEW 8.5 Feature &#8211; For Loop Conditional Terminal</title>
		<link>http://thinkinging.com/2008/07/07/labview-85-feature-for-loop-conditional-terminal/</link>
		<comments>http://thinkinging.com/2008/07/07/labview-85-feature-for-loop-conditional-terminal/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 07:00:20 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2008/07/07/labview-85-feature-for-loop-conditional-terminal/</guid>
		<description><![CDATA[




One of the great new features in LabVIEW 8.5 is the addition of an
optional Conditional
Terminal on the For
Loop structure. &#160;This allows you to easily
"break" out of the For
Loop, when an exit condition occurs. (In fact, text based
programming languages often let you use the "break" command
to exit a For Loop.)

In the screenshot below, you can see [...]]]></description>
			<content:encoded><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
One of the great new features in LabVIEW 8.5 is the addition of an
optional <span style="font-weight: bold;">Conditional
Terminal</span> on the <span style="font-weight: bold;">For
Loop</span> structure. &nbsp;This allows you to easily
"break" out of the <span style="font-weight: bold;">For
Loop</span>, when an exit condition occurs. (In fact, text based
programming languages often let you use the "<span
 style="font-family: monospace;">break</span>" command
to exit a For Loop.)<br />
<br />
In the screenshot below, you can see the difference between the classic <span
 style="font-weight: bold;">For Loop</span> and one
with a <span style="font-weight: bold;">Conditional
Terminal</span>.<br />
<br />
<div style="text-align: center;"><img
 style="width: 472px; height: 199px;" alt=""
 src="http://thinkinging.com/wp-content/uploads/2008/06/For%20Loop%20Comparison.png"><br />
</div>
<br />
Show the <span style="font-weight: bold;">Conditional
Terminal</span> by right-clicking on the frame of the <span
 style="font-weight: bold;">For Loop</span> structure
and selecting <span style="font-style: italic;">Conditional
Terminal</span> from the context menu.<br />
<br />
<div style="text-align: center;"><img
 style="width: 265px; height: 246px;" alt=""
 src="http://thinkinging.com/wp-content/uploads/2008/06/Show%20Conditional%20Terminal.png"><br />
</div>
<br />
<p style="font-weight: bold;">When would you want to use
the Conditional Terminal?</p>
A&nbsp;<span style="font-weight: bold;">For Loop</span>
are commonly used to iterate over an array of items, either operating
on the items or checking for some condition within the items is
satisfied (for example searching for an element with a certain value).<br />
<br />
Sometimes, you might want to stop iterating&nbsp;over the items (<span
 style="font-style: italic;">i.e.</span>, break out of
the <span style="font-weight: bold;">For Loop</span>)
if:
<ul>
  <li>your objective was satisfied -- <span
 style="font-style: italic;">e.g.</span>, you found the
element (s) you were looking for), or</li>
  <li>an error occurred during an iteration and&nbsp;it
doesn't make sense to iterate over the remaining items.</li>
</ul>
<p><span style="font-weight: bold;">Example 1 -
Doing work in a For Loop that can generate errors</span></p>
In LabVIEW versions &lt;= 8.2, you might have implemented some code
that looks like this:<br />
<br />
<div style="text-align: center;"><img
 style="width: 569px; height: 216px;" alt=""
 src="http://thinkinging.com/wp-content/uploads/2008/06/Delete%20Large%20Files%20-%20Old.png"><br />
</div>
<br />
This example, takes an array of file paths and deletes any files that
are larger than some maximum file size. (Warning: you might want to be
careful with such a VI, since it deletes files.)<br />
<br />
You can see that, in the event an error occurs, the VI will not do any
more work. &nbsp;It will just finish iterating over the array,
passing the error through, before it exists.<br />
<br />
<div style="text-align: center;"><img
 style="width: 563px; height: 210px;" alt=""
 src="http://thinkinging.com/wp-content/uploads/2008/06/Delete%20Large%20Files%20-%20Old%20-%20Error.png"><br />
</div>
<br />
Now, in LabVIEW 8.5, we might want to rewrite this example, by wiring
the error cluster to the <span style="font-weight: bold;">Conditional
Terminal</span> of the <span style="font-weight: bold;">For
Loop</span> in order to stop it, in the event of an error.<br />
<br />
<div style="text-align: center;"><img
 style="width: 565px; height: 217px;" alt=""
 src="http://thinkinging.com/wp-content/uploads/2008/06/Delete%20Large%20Files%20-%20New.png"><br />
</div>
<br />
The above code that uses the <span style="font-weight: bold;">Conditional
Terminal</span> will finish sooner, in the event of an error, and
is also much more readable.<br />
<br />
<p style="font-weight: bold;">Example 2 - Searching an
array in a For Loop</p>
Now, let's look at different example where we want to search an array
for an element. &nbsp;Here is what our code might look like in
LabVIEW &lt;= 8.2.<br />
<br />
<div style="text-align: center;"><img
 style="width: 430px; height: 152px;" alt=""
 src="http://thinkinging.com/wp-content/uploads/2008/06/Search%20Array%20-%20Old.png"><br />
</div>
<br />
And, here's how we could improve the performance in LabVIEW 8.5, using
the <span style="font-weight: bold;">Conditional Terminal</span>.<br />
<br />
<div style="text-align: center;"><img
 style="width: 429px; height: 142px;" alt=""
 src="http://thinkinging.com/wp-content/uploads/2008/06/Search%20Array%20-%20New.png"><br />
</div>
<br />
By using a <span style="font-weight: bold;">Conditional
Terminal</span> to stop the search once we've found the element
we're looking for, we can exit the loop early and save CPU cycles.<br />
<br />
<p><span style="font-weight: bold;">What do you
think about this new feature?</span></p>
These are just a couple simple examples of how using the <span
 style="font-weight: bold;">Conditional Terminal</span>
of the <span style="font-weight: bold;">For Loop</span>
in LabVIEW 8.5 can improve the readability and performance of your code.<br />
<br />
What other patterns of use have you identified? &nbsp;Are there any
benefits or drawbacks that you can think of? &nbsp;I'm interested
to know whether you've tried using this new feature and if you've had
success with it, in improving your code.<br />
</body>
</html>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/07/07/labview-85-feature-for-loop-conditional-terminal/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Customizing the LabVIEW Palettes is (Ridiculously) Hard</title>
		<link>http://thinkinging.com/2008/06/16/customizing-the-labview-palettes-is-ridiculously-hard/</link>
		<comments>http://thinkinging.com/2008/06/16/customizing-the-labview-palettes-is-ridiculously-hard/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 00:21:42 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[JKI]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[VIPM]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2008/06/16/customizing-the-labview-palettes-is-ridiculously-hard/</guid>
		<description><![CDATA[







Have you ever tried editing the LabVIEW palettes in order to integrate
your reusable VIs into LabVIEW? &#160;If you have then you've
undoubtedly experienced the frustration of finding your VIs missing
from your custom palettes, at some point.









Maybe you didn't realize one of the following facts about&#160;*.mnu files:



Tip: you can skip over this list, because it's probably completely [...]]]></description>
			<content:encoded><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>


<body>

Have you ever tried editing the LabVIEW palettes in order to integrate
your reusable VIs into LabVIEW? &nbsp;If you have then you've
undoubtedly experienced the frustration of finding your VIs missing
from your custom palettes, at some point.<br />

<br />

<div style="text-align: center;"><img style="width: 218px; height: 188px;" alt="Where is my reuse library?" title="Where is my reuse library?" src="http://thinkinging.com/wp-content/uploads/2008/06/Where%20is%20my%20reuse%20library.png"><br />

</div>

<br />

Maybe you didn't realize one of the following facts about&nbsp;*.mnu files:<br />

<br style="font-weight: bold;">

<span style="font-weight: bold;">Tip: you can skip over this list, because it's probably completely irrelevant to you.</span>
<ul>

  <li>*.mnu files uses <a href="http://wiki.lavag.org/Symbolic_Path">Symbolic Paths</a> for linking to files some times</li>

  <li>*.mnu (palette menu) files can be set to <span style="font-style: italic;">Synchronize with Directory</span></li>

  <li>*.mnu files have both a Functions palette and Controls palette inside them</li>

  <li>an LLB file contains a built-in palette menu</li>

  <li>your palette was being stored in an LLB file that you overwrote</li>

  <li>your palette was being stored in your My Documents LabVIEW data folder and didn't propagate with your reuse library folder</li>

  <li>*.mnu files store deleted/hidden items</li>

  <li>LabVIEW automatically creates dir.mnu files in folders found inside user.lib</li>

  
  <ul>

    <li>except for folders that begin with an underscore ("_")</li>

  
  </ul>

  <li>The "merge VI" setting is used to place a VI's contents when dropped, rather than placing a subVI</li>

</ul>

OK, you get the point. &nbsp;There's a lot you don't know (or more likely that you <span style="font-style: italic;">don't care to know</span>)
about *.mnu files. &nbsp;Whatever the reason, getting your reuse
library into the palettes is way too hard. &nbsp;Only an unlucky few
people in this world understand the idiosyncrasies of editing the
LabVIEW palettes. &nbsp;Fortunately, a few of these people are at JKI
working hard on a solution to this problem. &nbsp;And, <a href="http://forums.jkisoft.com/index.php?showtopic=680">the next version of VI Package Manager</a> is going to make understanding how the LabVIEW palettes work completely irrelevant (unless of course, you work at JKI). <img src='http://thinkinging.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <br />

<br />

Imagine being able to get your reuse libraries into the LabVIEW
palettes with the press of a button. &nbsp;And, that's just the
beginning...<br />

<br />

Have you tried editing the LabVIEW palettes? &nbsp;Were you successful?
&nbsp;Do you feel that you understand how the palettes work? &nbsp;Are
you looking for a better solution?
</body>
</html>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/06/16/customizing-the-labview-palettes-is-ridiculously-hard/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>The Diagram Disable Structure causes bugs</title>
		<link>http://thinkinging.com/2008/05/11/the-diagram-disable-structure-causes-bugs/</link>
		<comments>http://thinkinging.com/2008/05/11/the-diagram-disable-structure-causes-bugs/#comments</comments>
		<pubDate>Sun, 11 May 2008 07:00:21 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2008/05/20/the-diagram-disabled-structure-causes-bugs/</guid>
		<description><![CDATA[




One LabVIEW features that I both love and hate is the Diagram Disable Structure.
&#160;I love the fact that you can comment out code, especially
broken or stub (unfinished) code. &#160;However, I hate the fact that output
tunnels of the&#160;Diagram Disable Structure are set to "Use
Default if Unwired", because it causes buggy code.
&#160;Here's an example...

Let's say that we [...]]]></description>
			<content:encoded><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
One LabVIEW features that I both love and hate is the <span
 style="font-weight: bold;">Diagram Disable Structure</span>.
&nbsp;I love the fact that you can comment out code, especially
broken or stub (unfinished) code. &nbsp;However, <span
 style="font-style: italic;">I hate the fact that output
tunnels of the&nbsp;Diagram Disable Structure are set to "Use
Default if Unwired"</span>, because it causes buggy code.
&nbsp;Here's an example...<br />
<br />
Let's say that we have the block of code and want to comment out a VI.<br />
<br />
<img style="width: 515px; height: 111px;"
 alt="before commenting out code"
 title="before commenting out code"
 src="http://thinkinging.com/wp-content/uploads/2008/05/Pre%20DDS.png"><br />
<br />
<br />
So, we wrap the VI in a&nbsp;Diagram Disable Structure.<br />
<br />
<img style="width: 515px; height: 133px;"
 alt="after commenting out code"
 title="after commenting out code"
 src="http://thinkinging.com/wp-content/uploads/2008/05/Post%20DDS.png"><br />
<br />
<br />
Everything is good, now, right? &nbsp;The VI's "Run Arrow" (<img
 style="width: 22px; height: 21px;" alt="Run Arrow"
 title="Run Arrow"
 src="http://thinkinging.com/wp-content/uploads/2008/05/Run%20Arrow.png">)
button is not broken, so surely everything must be OK.<br />
<br />
WRONG!!!<br />
<br />
If we show the "Enabled" frame of the Diagram Disable Structure, we can
see that we're not passing though the DAQmx task reference and the
error cluster. &nbsp;Our code won't work.<br />
<br />
<img style="width: 511px; height: 186px;"
 alt="I broke the dataflow" title="I broke the dataflow"
 src="http://thinkinging.com/wp-content/uploads/2008/05/Post%20DDS%20Warning.png"><br />
<br />
<br />
To fix this problem we have to manually wire the&nbsp;DAQmx task
reference and the error cluster.<br />
<br />
<img style="width: 512px; height: 185px;"
 alt="I fixed the dataflow" title="I fixed the dataflow"
 src="http://thinkinging.com/wp-content/uploads/2008/05/Post%20DDS%20Fixed.png"><br />
<br />
Now, we're good. &nbsp;But, we could have avoided this whole
problem if
the&nbsp;Diagram Disable Structure didn't set all the output
tunnels to
"Use Default if Unwired".<br />
<br />
Presumably, this "feature" (although I like to think of it as a bug)
was chosen because users's code doesn't break (at least not at edit
time) when they wrap a block of code in a Diagram Disable Structure.
Personally, <a
 href="http://thinkinging.com/2007/06/19/write-your-labview-code-so-that-it-breaks/">I'd
happily accept&nbsp;broken code at edit time&nbsp;to avoid code
with bugs</a> -- the choice is obvious to me.<br />
<br />
A good solution would be for the LabVIEW designers to make the Diagram
Disable Structure&nbsp;intelligent enough to automatically wire any
output tunnels to input tunnels that are of the same data type and
vertical position. &nbsp;Now, that would be cool! <img src='http://thinkinging.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <br />
<br />
</body>
</html>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/05/11/the-diagram-disable-structure-causes-bugs/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>In Place Element Strucure &#8211; Saves Time and Prevents Bugs</title>
		<link>http://thinkinging.com/2008/01/29/in-place-element-strucure-saves-time-and-prevents-bugs/</link>
		<comments>http://thinkinging.com/2008/01/29/in-place-element-strucure-saves-time-and-prevents-bugs/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 07:01:40 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2008/01/29/in-place-element-strucure-saves-time-and-prevents-bugs/</guid>
		<description><![CDATA[The designers of LabVIEW added a new function to LabVIEW 8.5 called the 

   In Place Element Structure

.  The idea behind this structure is that 

   it allows memory efficient operations on sub-elements of compound data structures

like Clusters, Arrays, Variants, and Waveforms.  However, 

   it also 
 [...]]]></description>
			<content:encoded><![CDATA[The designers of LabVIEW added a new function to LabVIEW 8.5 called the 
<span style="font-weight: bold;" zid="1">
   In Place Element Structure
</span>
.  The idea behind this structure is that 
<span style="font-style: italic;" zid="10">
   it allows memory efficient operations on sub-elements of compound data structures
</span>
like Clusters, Arrays, Variants, and Waveforms.  However, 
<span style="font-style: italic;" zid="11">
   it also 
   <span style="font-weight: bold;" zid="38">
      has a the unintended benefits of saving developers time and helping them prevent bugs
   </span>
</span>
.  Let me explain...
<br zid="48" />
<br zid="57" />
<span style="font-weight: bold;" zid="58">
   Example 1 - Modifying an Element of a Cluster
</span>
<br style="font-weight: bold;" zid="59" />
<br zid="13" />
Traditionally, if you wanted to perform an in-place operation on an element of a cluster, you would unbundle it, operate on it, and bundle it back into the cluster, like this:
<br zid="3" />
<br zid="4" />
<img vspace="0" hspace="0" border="0" align="bottom" src="http://thinkinging.com/wp-content/uploads/2008/02/Unbundle%20and%20Bundle%20Cluster%20-%20Old%20Fashioned.png" zid="5" />
<br zid="6" />
<br zid="14" />
And, here is how you would do it with an 
<span style="font-weight: bold;" zid="15">
   In Place Element Structure
</span>
: 
<br zid="7" />
<br zid="8" />
<img vspace="0" hspace="0" border="0" align="bottom" src="http://thinkinging.com/wp-content/uploads/2008/02/Unbundle%20and%20Bundle%20Cluster%20-%20In%20Place.png" zid="9" />
<br zid="2" />
<br zid="60" />
<span style="font-weight: bold;" zid="61">
   Example 2 - Modifying an Element of an Array
</span>
<br zid="53" />
<br zid="54" />
Traditionally, this is how you would convert one element of a string array to lowercase:
<br zid="46" />
<br zid="47" />
<img vspace="0" hspace="0" border="0" align="bottom" src="http://thinkinging.com/wp-content/uploads/2008/02/Index%20and%20Replace%20Array%20-%20Old%20Fashioned.png" />" zid="49" />
<br zid="40" />
<br zid="55" />
And, here's how we would do it using an 
<span style="font-weight: bold;" zid="56">
   In Place Element Structure
</span>
:
<br zid="50" />
<br zid="51" />
<img vspace="0" hspace="0" border="0" align="bottom" src="http://thinkinging.com/wp-content/uploads/2008/02/Index%20and%20Replace%20Array%20-%20In%20Place.png" zid="52" />
<br zid="41" />
<br zid="63" />
<span style="font-weight: bold;" zid="64">
   Conclusion
</span>
<br zid="65" />
<br zid="66" />
While the difference between the traditional way of performing an in place operation doesn't look remarkably different from how you would do it with an 
<span style="font-weight: bold;" zid="67">
   In Place Element Structure
</span>
, there are some real advantages to using this new structure:
<br zid="27" />
<ul zid="68">
   <li zid="69">
      <span style="font-weight: bold;" zid="28">
         Saves time
      </span>
      :
      <span style="font-weight: bold;" zid="79">
         &nbsp;
      </span>
      fewer nodes, fewer wires, fewer mouse-clicks
   </li>
   <li zid="70">
      <span style="font-weight: bold;" zid="32">
         Code is cleaner
      </span>
      : fewer wires
   </li>
   <li zid="71">
      <span style="font-weight: bold;" zid="36">
         More maintainable
      </span>
      : The unbundle and bundle nodes of the 
      <span style="font-weight: bold;" zid="26">
         In Place Element Structure
      </span>
      stay synchronized (you change one and the other changes to match it).
   </li>
</ul>
These may not be the reasons that LabVIEW's designers added the 
<span style="font-weight: bold;" zid="72">
   In Place Element Structure
</span>
to LabVIEW 8.5, but these are the reasons that I use it.  I'm constantly trying to find ways to code faster, cleaner, and with fewer bugs.  In fact, I'm surprised that the only place to find this structure is buried down in the 
<span style="font-style: italic;" zid="73">
   Programming&gt;&gt;Application Control&gt;&gt;Memory Control
</span>
Functions palette.  I always expect to find it in the 
<span style="font-style: italic;" zid="75">
   Programming&gt;&gt;Structures
</span>
palette and I'm disappointed each time <img src='http://thinkinging.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> 
<br zid="78" />
<br zid="77" />
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/01/29/in-place-element-strucure-saves-time-and-prevents-bugs/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Functional Globals in LabVIEW 8.5 &#8211; No Loop, No Joke</title>
		<link>http://thinkinging.com/2007/09/07/functional-globals-in-labview-85-no-loop-no-joke/</link>
		<comments>http://thinkinging.com/2007/09/07/functional-globals-in-labview-85-no-loop-no-joke/#comments</comments>
		<pubDate>Fri, 07 Sep 2007 15:20:39 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LAVA]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2007/09/07/functional-globals-in-labview-85-no-loop-no-joke/</guid>
		<description><![CDATA[As an April fools day joke this year, I posted a VI on LAVA that shows an implementation of a Functional Global that appears to not have any While Loop or For Loop around the Feedback Node. This trick was accomplished by making the While Loop very large (extending beyond the visible region of the [...]]]></description>
			<content:encoded><![CDATA[<p>As an April fools day joke this year, I <a href="http://forums.lavag.org/LV2-style-globals-Ever-wondered-whether-to-use-While-Loops-or-For-Loops-t7175.html#entry27343">posted a VI on LAVA</a> that shows an implementation of a <a href="http://wiki.lavag.org/Functional_global_variable">Functional Global</a> that appears to not have any While Loop or For Loop around the Feedback Node. This trick was accomplished by making the While Loop very large (extending beyond the visible region of the Block Diagram) and coloring the loop&#8217;s border white <img src='http://thinkinging.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>But, now in LabVIEW 8.5 you really <em>can</em> create a Feedback Node that is not owned by any loop!  The screenshot below, shows an example of this.</p>
<div style="text-align: center"><img id="image261" alt="Feedback Node Functional Global.png" src="http://thinkinging.com/wp-content/uploads/2007/09/Feedback%20Node%20Functional%20Global.png" /></div>
<p>It&#8217;s so beautifully simple <img src='http://thinkinging.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2007/09/07/functional-globals-in-labview-85-no-loop-no-joke/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>LabVIEW tip: easy unit conversion</title>
		<link>http://thinkinging.com/2007/06/25/labview-tip-easy-unit-conversion/</link>
		<comments>http://thinkinging.com/2007/06/25/labview-tip-easy-unit-conversion/#comments</comments>
		<pubDate>Mon, 25 Jun 2007 09:00:34 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2007/06/25/labview-tip-easy-unit-conversion/</guid>
		<description><![CDATA[Recently, I wrote a short article on easy relative timestamp calculations, showing how to use LabVIEW&#8217;s built in units feature to easily add relative times to timestamps.  Now, I want to show you another very useful technique that every LabVIEW developer should know &#8212; how to harness the built-in unit conversion capabilities of LabVIEW [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I wrote a short article on <a rel="bookmark" href="http://thinkinging.com/2007/06/08/labview-tip-easy-relative-timestamp-calculations/">easy relative timestamp calculations</a>, showing how to use LabVIEW&#8217;s built in <span style="font-style: italic">units</span> feature to easily add relative times to timestamps.  Now, I want to show you another very useful technique that every LabVIEW developer should know &#8212; how to harness the built-in unit conversion capabilities of LabVIEW for converting units of numerics.  Here&#8217;s how:</p>
<p>Simply cascade two <strong>Convert Unit</strong> functions where the first has the <em>from</em> units and the second has the <em>to</em> units (see the screenshot, below).  Yep, that&#8217;s all there is to is <img src='http://thinkinging.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<img alt="convert_units.png" id="image222" src="http://thinkinging.com/wp-content/uploads/2007/06/convert_units.png" /></p>
<p><em>Note: in order for the above example to work, the original numeric must be a pure number (therefore having no units associated with it, already) which is usually the case.<br />
</em></p>
<p>If you liked this tip then you should check out, <a title="LabVIEW for Everyone" href="http://labviewforeveryone.com">LabVIEW for Everyone</a>.  It&#8217;s chalk full of great LabVIEW tips and tricks that I&#8217;ve learned over the years.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2007/06/25/labview-tip-easy-unit-conversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
