<?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; Software Engineering</title>
	<atom:link href="http://thinkinging.com/category/software-engineering/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>When to commit changed VIs caused by type definition changes</title>
		<link>http://thinkinging.com/2008/11/10/when-to-commit-changed-vis-caused-by-type-definition-changes/</link>
		<comments>http://thinkinging.com/2008/11/10/when-to-commit-changed-vis-caused-by-type-definition-changes/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 08:03:40 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Source Code Control]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://thinkinging.com/?p=696</guid>
		<description><![CDATA[In LabVIEW, whenever you change a TypeDef (type definition) any VIs that use the TypeDef will require recompiling and need to be saved.  This presents a problem for developers working on a large project with other developers who might be working on code that &#8220;feels&#8221; the effects of the changed TypeDef.
So, how do you deal [...]]]></description>
			<content:encoded><![CDATA[<p>In LabVIEW, <strong>whenever you change a TypeDef (type definition) any VIs that use the TypeDef will require recompiling and need to be saved</strong>.  This presents a problem for developers working on a large project with other developers who might be working on code that &#8220;feels&#8221; the effects of the changed TypeDef.</p>
<p>So, <strong>how do you deal with all the unsaved VIs in your project</strong> that are not in an area that you &#8220;own&#8221;?  If you don&#8217;t save them, then LabVIEW will keep bugging you to save the VIs.  And, sometimes your LabVIEW code will even run slower until you save all your VIs.  But, if you do save these VIs, then it&#8217;s hard to tell which VIs that you&#8217;ve saved have &#8220;real&#8221; changes and not just recompile changes.  And, if you commit all the changed VIs, then you might increase the likelihood of creating a conflict with other developers.</p>
<p>Here&#8217;s a good process you can follow to deal with this issue:</p>
<ol>
<li>First, <strong>commit your real changes</strong>, separate from the recompile changes.  This will give you a specific svn revision (changeset) associated with your real changes.</li>
<li>Then, <strong>save all the recompiled VIs and commit them</strong>.  For your commit log message, use &#8220;Recompiled due to typedef changes&#8221; (or similar).  This will indicate to other developers that the changes can be ignored, in the event that this revision conflicts with their own changes.</li>
<li>Finally, <strong>Alert your team</strong> that you have committed a recompile of code (with no real changes).  They can then easily resolve any conflicts, because they know that the commit contains no real changes.</li>
</ol>
<p>Now, if you know that other team members are actively working on the code and you don&#8217;t want to inconvenience them with having to deal with conflicts, you can defer the recompile until a later time or schedule a time for the recompile with your team.</p>
<p>Note: Even if you use a locking system (such as svn locks or a check-in/check-out SCC model) where files for which you don&#8217;t have the lock are read-only, you will still have the slow-down issue and will periodically want to do save all to recompile.</p>
<p>Have you had this issue?  What solution or process do you use?</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/11/10/when-to-commit-changed-vis-caused-by-type-definition-changes/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>Monolithic vs. Modular Software Reuse Libraries (Part II)</title>
		<link>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/</link>
		<comments>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 04:15:59 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[Code Reuse]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[VIPM]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/</guid>
		<description><![CDATA[ 

 

In part
I of this series, we discussed
the benefits of the monolithic
reuse library.  These benefits make it a very attractive
solution in the early
stages of a reuse library's evolution. 
Most of these
benefits are a result of the fact that there is a single unit, which is
easy to distribute, version control, and manage.
 
 

However, a monolithic reuse library can quickly become [...]]]></description>
			<content:encoded><![CDATA[ 

 

In <a href="http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/">part
I</a> of this series, we discussed
the benefits of the monolithic
reuse library.  These benefits make it a very attractive
solution in the <span style="font-style: italic;">early</span>
stages of a reuse library's evolution. 
Most of these
benefits are a result of the fact that there is a single unit, which is
easy to distribute, version control, and manage.
<div style="text-align: center;"><img style="width: 400px; height: 118px;" src="http://thinkinging.com/wp-content/uploads/2008/06/iStock_000005356096XSmall.jpg" alt="Monoliths" /> </div>
 

However, a monolithic reuse library can quickly become a victim of its
own success -- the more you use it (on various projects) and improve it
(by adding new components and fixing bugs), the more effort that is
consumed in maintaining and improving it.  Let me explain:
<h3 style="font-weight: bold;">The slow death of the
monolithic reuse library</h3>
A <strong>
monolithic reuse
library
</strong>is one where <em>
all components of the library are released at the
same time as a single unit</em>. 

There are two main problems with monolithic reuse libraries:
<ul>
	<li><span style="font-weight: bold;">As
the monolithic library grows large in size, it
becomes hard to distribute</span> -- it consumes large amounts of
disk space and network bandwidth</li>
	<li><span style="font-weight: bold;">Users must
choose a single version of the entire monolithic library for use in
their projects</span> -- it's all or nothing </li>
</ul>
These two issues inevitably drive users of the reuse library to do the
following:
<ul>
	<li><span style="font-weight: bold;">Users fork
the reuse library</span> -- Users make a copy of the library
locally in their project and modify it.  They possibly only
copy subsets of the reuse library, breaking the monolith.</li>
	<li><span style="font-weight: bold;">Users stop
upgrading to newer versions of the reuse library</span> -- Users
forever stick with an out-of-date, stagnant version of the reuse
library, even though they might be able to take advantage of
improvements made to some parts of the library.  The cost of
upgrading, due to the possibility of breaking code is not worth the
possible benefits of the new features and fixes.</li>
</ul>
The end result is that the reuse library suffers from one of two fates:
<ul>
	<li><span style="font-weight: bold;">Improvements
to the library stop</span>, because nobody ever upgrades to newer
versions of the library.</li>
	<li><span style="font-weight: bold;">Improvements
to the library happen in project forks</span>.  Either
these changes never make their way into the main reuse library
or are copied between projects adding tremendous uncertainty and
ambiguity as to which versions of library components are being used.</li>
</ul>
Either way, once these fates have been realized, the effectiveness of
the reuse library has plateaued.  The effort to use and
contribute to the library begins to outweigh the benefit, and this is
when the monolithic reuse library dies from neglect, frozen in time.
<h3><span style="font-weight: bold;">Enter the
modular reuse library</span></h3>
The <strong>
modular reuse
library
</strong>is one where <em>
several
individual libraries are released at different times, independently as
separate
and distinct units</em>.

One of the primary benefits of a modular reuse library is that <span style="font-style: italic;">users can choose which versions
of each component they want, independently</span>.  This
provides the following benefits:
<ul>
	<li> 
<ul>
	<li>downloads are faster and less project disk space is
consumed</li>
	<li>upgrades can be done on a per-component basis, minimizing
the risk of upgrades and the amount of testing required to re-validate
code</li>
</ul>
</li>
</ul>
However, there are some challenges to having a modular reuse
library that stem from the fact that there are several individual
components:
<ul>
	<li><span style="font-weight: bold;">there are
more software products for library developers to manage</span>
-- each has its own life-cycle</li>
	<li><span style="font-weight: bold;">there are
more components for users to obtain</span> -- these have to be
found and downloaded, and if one component depends other components,
these have to be identified and obtained, too </li>
</ul>
The good news is that these challenges can be automated using software
development tools.
<h3><span style="font-weight: bold;">VIPM 2.0, a
modular reuse library development tool for LabVIEW</span></h3>
As you might know <a href="http://jkisoft.com/vipm/">VI
Package Manager</a> is a tool for installing the <a href="http://openg.org">OpenG</a> (modular) reuse
libraries.  I'm happy to tell you that JKI has just <a href="http://forums.jkisoft.com/index.php?showtopic=673">announced
the alpha program for VI Package Manager 2.0</a> and, in
doing so, we have taken on the challenge of delivering <span style="font-weight: bold;">the ultimate developer tool for
software reuse in LabVIEW</span>.  We want to help
LabVIEW developers everywhere realize the true potential of reusing
their existing software by hiding the complexity of managing
multiple independent components.

Granted, these are bold ambitions.  In some upcoming articles,
I'll discuss more about the challenges of developing a modular reuse
library in LabVIEW and how VIPM 2.0 is going to help solve them.
 Oh, and if you're facing challenges with software reuse in
LabVIEW, please consider <a href="http://jkisoft.com/beta/vipm/">applying to our alpha
program</a> -- we could certainly user your feedback.]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>A Challenge to NI: Use your Application Builder</title>
		<link>http://thinkinging.com/2008/05/27/a-dogfooding-challenge-to-ni-use-your-application-builder/</link>
		<comments>http://thinkinging.com/2008/05/27/a-dogfooding-challenge-to-ni-use-your-application-builder/#comments</comments>
		<pubDate>Tue, 27 May 2008 07:00:51 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[National Instruments]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2008/05/27/a-dogfooding-challenge-to-ni-use-your-application-builder/</guid>
		<description><![CDATA[




I'd like to challenge developers at NI to find more ways to incorporate
stand-alone (built) LabVIEW applications into their internal systems
and processes.

One
of the major pain points in my day-to-day use of LabVIEW (which I love)
is building stand-alone applications. I suspect that the reason this is
so painful for me is that (in addition to my use cases [...]]]></description>
			<content:encoded><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
I'd like to challenge developers at NI to find more ways to incorporate
stand-alone (built) LabVIEW applications into their internal systems
and processes.<br />
<br />
One
of the major pain points in my day-to-day use of LabVIEW (which I love)
is building stand-alone applications. I suspect that the reason this is
so painful for me is that (in addition to my use cases being fairly
advanced) most of the developers at NI who are on the LabVIEW
development team probably don't build applications using LabVIEW --
they are not <a
 href="http://en.wikipedia.org/wiki/Eat_one%27s_own_dog_food">eating
their own dog food</a>.<br />
<br />
For
example,&nbsp;<a href="http://wiki.lavag.org/LVOOP">LVOOP</a>
(native LabVIEW Object Oriented Programming) dynamic method overriding
requires VIs of the same name,
but it is impossible to store two VIs of the same name inside an EXE?
How could this&nbsp;feature conflict possibly happen? &nbsp;I
suspect
that nobody actually tried to build an application that used LVOOP
until well after the feature was implemented. &nbsp;What's even
crazier
is that NI was working on this feature for many years, before it was
released.<br />
<br />
As time goes by, more people within NI are developing
code in LabVIEW on a daily basis. However, I'll bet that most of them
never actually use the application builder to build stand-alone
applications, since most LabVIEW code is shipped in source form and
never gets "built" -- it's just one big, <a
 href="/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/">monolithic
reuse library</a>.<br />
<br />
So,
I'd like to challenge developers at NI to find ways to incorporate
stand-alone (built) LabVIEW applications into their internal systems
and processes. It will make a huge difference to your customers.<br />
<br />
I'll
have you know that I'm committed to eating my own dog food, too.
&nbsp;At <a href="http://jkisoft.com">JKI</a>,
we work
very hard to use our own products in a variety of ways:<br />
<ul>
  <li><a href="http://jkisoft.com/easyxml">EasyXML</a>
is being used inside VI Package Manager<a
 href="http://jkisoft.com/vipm"></a>
(and other JKI products and projects), for reading and writing XML
files.</li>
</ul>
<ul>
  <li><a href="http://jkisoft.com/vipm">VI Package
Manager</a> (VIPM) is used to install EasyXML, as well as manage
the LabVIEW
configuration needed to develop and build EasyXML (and every other JKI
product and project).</li>
</ul>
I'm only telling you this, because I'm
committed to practicing what I preach. &nbsp;And, we're working on
a new version of VIPM that is going to take this concept to a whole new
level -- more on that, later.<br />
<br />
I should close by saying that I know some
of the people who work on the LabVIEW application builder and LVOOP and
they are all very nice/smart people who are very competent LabVIEW
developers and software designers. &nbsp;The only problem is that
they
are probably not eating their own dog food. &nbsp;NI has stated
that they are committed to this, so I want to make sure that this is
one area they do not neglect <img src='http://thinkinging.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> 
</body>
</html>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/05/27/a-dogfooding-challenge-to-ni-use-your-application-builder/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Monolithic vs. Modular Software Reuse Libraries (Part I)</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/</link>
		<comments>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 17:50:15 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[Code Reuse]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/</guid>
		<description><![CDATA[
If you’ve gotten
past the horrendously boring title of this article, you probably know a
little bit about
software reuse libraries.
 
You probably
even contribute to a software reuse library (a personal reuse library
or one belonging to your organization).
 
So, I
won’t go into the benefits of code reuse and the pitfalls of
reinventing the
wheel -- I’ll jump right in and get to [...]]]></description>
			<content:encoded><![CDATA[<span>
If you’ve gotten
past the horrendously boring title of this article, you probably know a
little bit about
software reuse libraries.
<span> 
</span>You probably
even contribute to a software reuse library (a personal reuse library
or one belonging to your organization).
<span> 
</span>So, I
won’t go into the benefits of code reuse and the pitfalls of
reinventing the
wheel -- I’ll jump right in and get to the meat of the
matter.
<span> 
</span>Let’s consider two strategies for managing a
software reuse library.
</span>
<h3 style="font-weight: bold;"><span>Monolithic
vs. Modular Reuse
Libraries</span></h3>
A <strong>
monolithic reuse
library
</strong>is one where <em>
all components of the library are released at the
same time as a single unit</em>. 

A <strong>
modular reuse
library
</strong>is one where <em>
several
individual libraries are released at different times, independently as
separate
and distinct units</em>.

For example,
LabVIEW ships with a monolithic reuse library
called <strong>
vi.lib
</strong>, the built-in library
of
VIs
found beneath the <span>
&lt;LabVIEW&gt;\vi.lib
</span>folder.
<span> 
</span>These
VIs
are
all kept under the same revision and release cycle as LabVIEW, itself.
You'll only get new versions of these
w:st="on"&gt;
VIs
when
LabVIEW itself is released -- it's monolithic, all or nothing.

National
Instruments (the makers of LabVIEW) also sells
modular libraries, such as the LabVIEW add-on toolkits.
<span> 
</span>These libraries each have their own version,
different from LabVIEW’s, and are installed separately.
<span> 
</span>These add-on libraries have dependencies on
vi.lib
VIs
, but rarely have dependencies on
other add-ons.<strong>

zid="101"&gt;
</strong>
<h3><span><img alt="" />
src="http://thinkinging.com/wp-content/uploads/2008/02/el_cap.png"
style="padding-top: 10px;" align="right" border="0"
hspace="4" vspace="0"&gt;</span>
zid="34"&gt;<span style="font-weight: bold;">
Monolithic wins the short
race</span><strong>
</strong></h3>
<span>
zid="84"&gt;
</span>Most LabVIEW developers and teams
find that <em>
the overhead of the modular reuse library is
a show-stopper
</em>, right out of the gate.
<span> 
</span>It’s too much work compared to the much-simpler
monolithic reuse
library, which can be developed and deployed as a single unit.<span>
zid="43"&gt; </span>

zid="105"&gt;

The monolithic reuse library is alluring, because it’s:
zid="48"&gt; 
<ul style="margin-top: 0in;" type="disc">
	<li>easy
to distribute – it might be delivered as a single ZIP file,
or a checkout
from source code control.</li>
	<li>easy
to keep track of which version you have – there is a single
version number
for the entire reuse library (perhaps a date stamp)</li>
	<li>easy
to manage, since there are no external dependencies – every
VI that you
need is kept within the reuse library, so users will never have missing
VIs.
zid="55"&gt;</li>
</ul>
<h3><span style="font-weight: bold;">
But, there are scalability
concerns</span><strong></strong></h3>
After the monolithic reuse system is up and
running, several
problems loom on the horizon that will slow down progress.
<span> 
</span>Soon, the reuse system might become a victim
of its own success and get harder and harder to maintain as the
code-base grows.
<h3><span style="font-weight: bold;">The solution is
a modular system</span><strong></strong></h3>
The solution to the
scalability issues (number of
developers, number of project, number of reuse
w:st="on"&gt;
VIs
)
is to make the reuse library modular.
<span> 
</span>The only other option is to stop improving the reuse
library – but, we
can’t do that, of course. 

In <a>
href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/"&gt;part
II</a> of this series, I talk about the specific
<a>
href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/"&gt;shortcomings
of the monolithic reuse library</a> and how the modular
approach can
solve them. Of
course, this introduces some new problems that will have to be
addressed.
<h3 style="font-weight: bold;">What is your experience?</h3>
Please share your experience with
LabVIEW software reuse.  I'm curious to know the following:
<ul>
	<li>Do you have an effective LabVIEW reuse system?</li>
	<li>What does your system look like?
<ul>
	<li>Is your system monolithic or modular?</li>
</ul>
<ul>
	<li>How big is the
library?</li>
	<li>How many developers contribute the the library?</li>
	<li>How do you manage your installation?</li>
</ul>
</li>
	<li>Are you feeling
any pain points?</li>
	<li>How do you plan to
solve them?</li>
</ul>
<hr style="width: 100%; height: 2px;" /><small><span>
style="font-style: italic;"&gt;El Capitan </span><a>
style="font-style: italic;"
href="http://en.wikipedia.org/wiki/Image:Yosemite_El_Capitan.jpg"&gt;photo</a><span>
style="font-style: italic;"&gt; courtesy of Mike Murphy.</span></small>]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Did National Instruments forget about Virtual Instruments?</title>
		<link>http://thinkinging.com/2008/01/22/did-national-instruments-forget-about-virtual-instruments/</link>
		<comments>http://thinkinging.com/2008/01/22/did-national-instruments-forget-about-virtual-instruments/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 03:00:53 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[National Instruments]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2008/01/29/did-national-instruments-forget-about-virtual-instruments/</guid>
		<description><![CDATA[It&#8217;s been over 20 years now that National Instruments has been refining LabVIEW as a powerful test, measurement, and automation platform, as well as a general purpose graphical data flow programming language.  For many years, LabVIEW&#8217;s slogan was &#34;

   the software is the instrument

&#34;.  NI even named the basic building block [...]]]></description>
			<content:encoded><![CDATA[It&#8217;s been over 20 years now that National Instruments has been refining LabVIEW as a powerful test, measurement, and automation platform, as well as a general purpose graphical data flow programming language.  For many years, LabVIEW&#8217;s slogan was &quot;
<em zid="2">
   the software is the instrument
</em>
&quot;.  NI even named the basic building block of LabVIEW programs the &quot;virtual instrument&quot; (or &quot;VI&quot; for short).  But, after using LabVIEW now for well over a decade, I have to wonder&#8230;
<br zid="17" />
<br zid="18" />
<strong zid="3">
   Why is it so hard to create virtual instruments in LabVIEW?
</strong>
<br zid="19" />
<br zid="20" />
Just to be clear, when I say it&#8217;s difficult to create virtual instruments, I&#8217;m not taking about VIs (the basic building blocks of LabVIEW programs) with their Front Panels and Block Diagrams.  I am talking about 
<strong zid="4">
   software that 
   <em zid="5">
      behaves
   </em>
   like a instrument
</strong>
. Let&#8217;s take a step back and look at what I mean by this.
<br zid="21" />
<br zid="22" />
A traditional instrument is a physical device that sits on the lab bench or in a rack. The traditional instrument:
<br zid="29" />
<br zid="30" />
<ul zid="31">
   <li zid="32">
      has 
      <strong zid="6">
         statefulness
      </strong>
      &#8212; it remembers whether it&#8217;s turned ON or OFF, it knows its active configuration settings, etc.
   </li>
</ul>
<ul zid="33">
   <li zid="34">
      can do 
      <strong zid="7">
         work asynchronously 
      </strong>
      &#8212; you can ask it to reset, acquire some data, perform analysis, etc. You can ask it when it is finished with the asynchronous work and then ask it to send you the data.
   </li>
</ul>
<ul zid="35">
   <li zid="36">
      can have 
      <strong zid="8">
         multiple instances 
      </strong>
      &#8212; just order another one from the catalog and set it on the lab bench, right next to the first. You can give each physical instrument a name, such as &quot;multimeter 1&quot; and &quot;multimeter 2&quot; &#8212; you might even choose to use a label maker to print the name and stick it onto the front of each instrument, so that you never forget which one is which.
   </li>
</ul>
<ul zid="37">
   <li zid="38">
      can 
      <span zid="41" style="font-weight: bold;">
         communicate with other software and instruments 
      </span>
      &#8212; TCP-IP, RS-232, GPIB, etc. via SCPI, LXI, or other protocols.
      <br zid="39" />
   </li>
</ul>
OK, you get the point &#8212; you know all about traditional instruments.
<br zid="23" />
<br zid="24" />
Now, let&#8217;s say that you want to create a 
<span zid="42" style="font-style: italic;">
   virtual
</span>
instrument &#8212; meaning, you want to create software that uses modular hardware that can do everything that a bench-top instrument does. You want to use a data acquisition (DAQ) device as modular I/O and then write some software that uses the DAQ device to implement the functionality and behavior of a traditional multimeter.  Where do you get started?  First, let&#8217;s take inventory of the requirements:
<ul zid="9">
   <li zid="10">
      Statefulness
   </li>
   <li zid="11">
      Asynchronous processing of tasks
   </li>
   <li zid="12">
      Multiple named instances
   </li>
   <li zid="13">
      Ability to communicate with client software using industry standard protocols such as SCPI, LXI, etc.
   </li>
</ul>
Hmmm, it&#8217;s starting to sound like we need some kind of by-reference object-oriented framework&#8230;
<br zid="25" />
<br zid="26" />
Now, I&#8217;m not going to get into the whole 
<em zid="14">
   by value
</em>
vs 
<em zid="15">
   by reference
</em>
OOP debate.  All I&#8217;m saying is that almost every LabVIEW developer who creates a non-trivial automation or control system application will want to create a virtual instrument with all of the features that I&#8217;ve identified above and that these features sound a whole lot like by reference objects.
<br zid="27" />
<br zid="28" />
<span zid="45" style="font-weight: bold;">
   Where did NI drop the ball with virtual instrumentation?
</span>
<br zid="46" style="font-weight: bold;" />
<br zid="47" />
Did the concept of a VI as a Front Panel and Block Diagram distract them (and us) from what we really need from a virtual instrument?  Does NI&#8217;s marketing mantra shift away from &quot;the software is the instrument&quot; to &quot;design, develop, deploy&quot; imply that they aren&#8217;t really concerned with the developers ability to emulate pysical hardware using software (after all, NI does want you to buy 
<em zid="16">
   their
</em>
hardware)?  Is NI simply out of touch with the types of large systems that software developers create using LabVIEW? Or, is NI working on a by-reference framework that will allow us to create our own, stateful, asynchronous, multi-instance, by reference virtual instruments that can communicate using a variety of protocols and physical transport layers?
<br zid="49" />
<br zid="50" />
In a future article, I&#8217;ll describe more about the features that I&#8217;m looking for in a virtual instrumentation framework and how NI could stand to benefit from implementing something like it.
<br zid="48" />
<br zid="51" />
PS &#8211; After writing this, I did happen to find somebody at NI talking about the 
<a href="http://automatedtestblog.com/2008/01/22/trend2-growth-of-software-defined-instrumentation/" zid="52">
   Growth of Software-Defined Instrumentation
</a>
.  Hopefully that&#8217;s a good sign. <img src='http://thinkinging.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> 
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/01/22/did-national-instruments-forget-about-virtual-instruments/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>LabVIEW and the Multicore Crisis</title>
		<link>http://thinkinging.com/2007/09/19/labview-and-the-multicore-crisis/</link>
		<comments>http://thinkinging.com/2007/09/19/labview-and-the-multicore-crisis/#comments</comments>
		<pubDate>Wed, 19 Sep 2007 07:01:44 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[multicore]]></category>
		<category><![CDATA[parallel programming]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2007/09/19/labview-and-the-multicore-crisis/</guid>
		<description><![CDATA[
  


Software developers and technologists everywhere are beginning to discuss the
looming "multicore crisis".&#160; In a nutshell, this crisis stems from the
fact that
processors
are no longer getting faster due to heat issues; they are just getting
cheaper, so, we're putting more of them in a single computer.&#160; Today's
multicore processors look like a single chip, but actually have [...]]]></description>
			<content:encoded><![CDATA[<div style="TEXT-ALIGN:center">
  <img alt="multicore.jpg" id="image267" src="http://thinkinging.com/wp-content/uploads/2007/09/multicore_scaled.png"/><br/>
</div>
<br/>
Software developers and technologists everywhere are beginning to discuss <b>the
looming "multicore crisis"</b>.&nbsp; In a nutshell, this crisis stems from the
fact that
<a href="http://smoothspan.wordpress.com/2007/09/06/a-picture-of-the-multicore-crisis/" id="skzi" title='"A Picture of the Multicore Crisis" on the SmoothSpan Blog'>processors
are no longer getting faster</a> due to heat issues; they are just getting
cheaper, so, we're putting more of them in a single computer.&nbsp; Today's
multicore processors look like a single chip, but actually have several
processors that run in parallel.&nbsp; Unfortunately, most software was written
in such a way that it cannot take advantage of multicore processors.&nbsp; That
means, <b>most software programs that exist today will not run any faster on the
latest and greatest computers 10 years from now</b>, assuming that clock speed
continues to remain constant.&nbsp; They are frozen in time like dinosaurs,
doomed to extinction -- and, that's the crisis.<br/>
<br/>
Now, why can't most software run on more than one processor core?&nbsp; The
answer is that <b>most traditional, text-based programming languages do not have
easy ways to program applications that can execute different parts in parallel
on multiple processor cores</b> -- they are written as one big loop of
sequentially executing code that can only run on a single processor.&nbsp; And,
many text-based programmers do not map problems
<span style="BACKGROUND-COLOR:#ffffff">into a parallel solution space --
parallelism isn't part of their programming toolbox.</span><br/>
<br/>
Now, if you're like me, you're probably thinking, "<b>I'm sure glad that I
program in LabVIEW, which is inherently parallel.</b>"&nbsp; The LabVIEW
programming language is parallel at it's heart, with software written on a
two-dimensional, graphical canvas of parallel data flow.&nbsp; At
<a href="http://ni.com/niweek" id="csfx" title="NIWeek 2007">NIWeek 2007</a>, NI
<a href="http://thinkinging.com/2007/09/24/labview-multicore-benchmark-demo/" id="iu5k" title="LabVIEW Multicore Benchmark Demo">demonstrated
a simple application</a> written in LabVIEW, which had three While Loops
communicating with each other: acquiring, processing, and presenting data.&nbsp;
They demonstrated how the application executed 3.8x faster when running on 4
cores as it did when running on 1 core -- that's a nearly linear increase in
performance.&nbsp; While more complicated applications will, of course, have a
hard time scaling linearly, this achievement by NI is remarkable.<br/>
<br/>
To learn more about how LabVIEW's parallelism allows code to take advantage of
multicore processors, you should definitely read NI's white paper,
<a href="http://zone.ni.com/devzone/cda/tut/p/id/6421" id="jy:k" title="Programming Strategies for Multicore Processing: Data Parallelism">Programming
Strategies for Multicore Processing: Data Parallelism</a>.<br/>
<br/>
Concurrent, parallel, and distributed software applications are rapidly moving
to the forefront of the software engineering word.&nbsp; The community of
text-based programming experts are struggling to find ways to deal with this
problem with their tools of choice and some are predicting that it will take a
decade before their tools are ready.&nbsp; Aren't you glad that LabVIEW, which
has been parallel since 1986, is 30 years ahead of them?<br/>
<br/>
<b>External Links:</b>
<ul>
  <li>
    <a href="http://zone.ni.com/devzone/cda/tut/p/id/6421" id="jy:k" title="Programming Strategies for Multicore Processing: Data Parallelism">Programming
    Strategies for Multicore Processing: Data Parallelism</a>
  </li>
  <li>
    <a href="http://outsideinnovation.blogs.com/pseybold/2007/08/the-future-of-p.html" id="pd3g" title="The Future of Programming and Innovation">The
    Future of Programming and Innovation</a>
  </li>
  <li>
    <a href="http://smoothspan.wordpress.com/2007/09/06/a-picture-of-the-multicore-crisis/" rel="bookmark" title=" A Picture of the Multicore Crisis">A
    Picture of the Multicore Crisis</a>
  </li>
  <li>
    <a href="http://smoothspan.wordpress.com/2007/08/30/youve-already-had-a-multicore-crisis-and-just-didnt-realize-it/" rel="bookmark" title=" You’ve Already Had a Multicore Crisis and Just Didn’t Realize It!">You’ve
    Already Had a Multicore Crisis and Just Didn’t Realize It!</a>
  </li>
  <li>
    <a href="http://ni.com/niweek" id="csfx" title="NIWeek 2007">NIWeek 2007</a>
  </li>
</ul>
<br/>
<br/>]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2007/09/19/labview-and-the-multicore-crisis/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>My NIWeek 2007 Presentations</title>
		<link>http://thinkinging.com/2007/08/30/my-niweek-2007-presentations/</link>
		<comments>http://thinkinging.com/2007/08/30/my-niweek-2007-presentations/#comments</comments>
		<pubDate>Thu, 30 Aug 2007 23:17:44 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[JKI]]></category>
		<category><![CDATA[NI Week]]></category>
		<category><![CDATA[OpenG]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2007/08/30/my-niweek-2007-presentations/</guid>
		<description><![CDATA[
One the reasons that NIWeek 2007 was the Best NIWeek Ever was that I got to present four times!  I gave the following two presentations (I presented the latter at three different times):

Using Free and Open Source LabVIEW Software
Developing Commercial Software Applications in LabVIEW

The first presentation, &#8220;Using Free and Open Source LabVIEW Software&#8220;, was [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: center"><img id="image252" alt="Presentation Photo" src="http://thinkinging.com/wp-content/uploads/2007/08/IMG_2434.JPG" /></div>
<p>One the reasons that NIWeek 2007 was the <a href="http://thinkinging.com/2007/08/16/best-niweek-ever/">Best NIWeek Ever</a> was that I got to present four times!  I gave the following two presentations (I presented the latter at three different times):</p>
<ul>
<li><a title="Using Free and Open Source LabVIEW Software" href="http://jameskring.com/downloads/niweek2007/Using_Free_and_Open_Source_LabVIEW_Software.pdf">Using Free and Open Source LabVIEW Software</a></li>
<li><a title="Developing Commercial Software Applications in LabVIEW" href="http://jameskring.com/downloads/niweek2007/Developing_Commercial_Software_Applications_in_LabVIEW.pdf">Developing Commercial Software Applications in LabVIEW</a></li>
</ul>
<p>The first presentation, &#8220;<a title="Using Free and Open Source LabVIEW Software" href="http://jameskring.com/downloads/niweek2007/Using_Free_and_Open_Source_LabVIEW_Software.pdf">Using Free and Open Source LabVIEW Software</a>&#8220;, was given on Alliance Day (Monday, Aug. 6th, 2007) and was not open to the general public.  However, the material is not confidential and I&#8217;m happy to make available everyone.  This presentation discussed the different flavors of open source software licensing, why open source is an important part of our lives, and how LabVIEW developers can leverage open source software.</p>
<p>The second presentation, &#8220;<a title="Developing Commercial Software Applications in LabVIEW" href="http://jameskring.com/downloads/niweek2007/Developing_Commercial_Software_Applications_in_LabVIEW.pdf">Developing Commercial Software Applications in LabVIEW</a>&#8220;, outlines some key issues that LabVIEW software developers should consider if they are thinking about selling their software.  These are things that <a title="JKI" href="http://jameskring.com">JKI</a> had to learn about from our experiences working on our own commercial software product, <a title="VI Package Manager" href="http://jkisoft.com/vipm/">VI Package Manager</a>.  Certainly, this presentation doesn&#8217;t cover every aspect of commercial software development, but I only had 45 minutes &#8212; and this topic could easily fill a whole book.</p>
<p>Soon, JKI will be making Michael Aivaliotis&#8217; presentation on XControls available as a <strong>video</strong> &#8212; that&#8217;ll be very exciting.  Michael&#8217;s presentation was really good &#8212; I heard that someone comment to him that it was <strong>the best NIWeek presentation given by a non-NI presenter in the 10 years they have been coming to NIWeek</strong>.  Hopefully I didn&#8217;t set your expectations too high (I&#8217;m really excited, too, because I didn&#8217;t get to see Michael&#8217;s presentation) <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/08/30/my-niweek-2007-presentations/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Should your Commercial LabVIEW Application be Cross-Platform?</title>
		<link>http://thinkinging.com/2007/08/29/should-your-commercial-labview-application-be-cross-platform/</link>
		<comments>http://thinkinging.com/2007/08/29/should-your-commercial-labview-application-be-cross-platform/#comments</comments>
		<pubDate>Wed, 29 Aug 2007 07:10:00 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2007/08/27/should-your-commercial-labview-application-be-cross-platform/</guid>
		<description><![CDATA[One of the great things about LabVIEW is that it supports several platforms.  However, being cross-platform is not always trivial, especially if your application is a stand-alone executable (as opposed to a reuse library distributed in source code form).

In order to decide whether you should be cross-platform compatible, first consider whether you need to. [...]]]></description>
			<content:encoded><![CDATA[<p>One of the great things about LabVIEW is that it supports several platforms.  However, being cross-platform is not always trivial, especially if your application is a stand-alone executable (as opposed to a reuse library distributed in source code form).</p>
<p align="center"><img id="image243" alt="apple.png" src="http://thinkinging.com/wp-content/uploads/2007/08/apple.png" /><img id="image244" alt="tux.png" src="http://thinkinging.com/wp-content/uploads/2007/08/tux.png" /><img id="image245" alt="vista.jpg" src="http://thinkinging.com/wp-content/uploads/2007/08/vista.jpg" /></p>
<p align="left">In order to decide whether you should be cross-platform compatible, first consider whether you need to.  For example:</p>
<ul>
<li>Does your application depend heavily on platform specific components that cannot be found on other platforms or implemented in pure G (LabVIEW)?</li>
<li>Is it targeted at functions that only exist on a single platform (for example, a tool for creating Excel reports)?</li>
<li>Is there a market (paying customers) for your application on each of the platforms?</li>
</ul>
<p>I&#8217;d like to throw in some useful data.  <a title="JKI" href="http://jameskring.com">JKI</a>&#8217;s market research for <a title="VI Package Manager" href="http://jkisoft.com/vipm">VI Package Manager</a> (VIPM) indicates that:</p>
<ul>
<li><strong>Windows has 98%</strong> of the market share of LabVIEW installations,</li>
<li><strong>Mac has 1.1%</strong>, and</li>
<li><strong>Linux has 1.0%</strong>.</li>
</ul>
<p>With numbers like that, it might not make direct business sense to support those platforms.  However, there is a lot to be said for having cross-platform support.  For example:</p>
<ul>
<li>It makes it <strong>easier to migrate to new platforms</strong> that might show up in the future (including new versions of Windows, such as Vista).</li>
<li>It is a <strong>good exercise</strong> and you learn more about cross-platform considerations.</li>
<li>It may uncover bugs by exposing your application to new operating environments.</li>
</ul>
<p>Another reason that that we&#8217;ve chosen to support Mac and Linux on VIPM is that it is a tool for obtaining and installing the <a title="OpenG.org" href="http://openg.org">OpenG</a> (open source) VI reuse libraries.  JKI is very passionate about the LabVIEW community and we want Mac and Linux users to be able to use OpenG, too.  Some of the most passionate LabVIEW users are using LabVIEW on platforms other than Windows.</p>
<p>In order to make this decision for your commercial software product, you&#8217;ll have to weigh all the factors and decide whether it makes sense for you.  In my opinion, the benefits of being cross-platform may not be immediately tangible, but it does pay off in the long run.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2007/08/29/should-your-commercial-labview-application-be-cross-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Password Protecting VIs is Security Through Obscurity</title>
		<link>http://thinkinging.com/2007/08/19/password-protecting-vis-is-security-through-obscurity/</link>
		<comments>http://thinkinging.com/2007/08/19/password-protecting-vis-is-security-through-obscurity/#comments</comments>
		<pubDate>Sun, 19 Aug 2007 20:01:41 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2007/08/19/password-protecting-vis-is-security-through-obscurity/</guid>
		<description><![CDATA[I have a huge problem with password protected VIs.  It gives people false assurance that nobody will be able to see the intellectual property contained in a VI&#8217;s block diagram (the source code).
The basis of my argument is that, behind the scenes, LabVIEW accesses a VI&#8217;s block diagram to recompile it for other platforms [...]]]></description>
			<content:encoded><![CDATA[<p><img align="right" alt="lock_reduced.png" id="image241" title="lock_reduced.png" style="padding: 1px 1px 1px 6px" src="http://thinkinging.com/wp-content/uploads/2007/08/lock_reduced.png" /><strong>I have a huge problem with password protected VIs</strong>.  It gives people <strong>false assurance</strong> that nobody will be able to see the <strong>intellectual property</strong> contained in a VI&#8217;s block diagram (the source code).</p>
<p>The basis of my argument is that, <strong>behind the scenes, LabVIEW accesses a VI&#8217;s block diagram to recompile it for other platforms</strong> (operating systems and processors) and newer LabVIEW versions. This means that:</p>
<ol>
<li><em>Some people within NI can access your block diagrams.</em></li>
<li>Someone outside NI, if they were sufficiently clever (and there are many clever people in this world), might be able to <em>fool LabVIEW into unlocking your VI&#8217;s block diagram</em>.</li>
</ol>
<p><strong>Password protecting VIs is a scheme that relies on &#8220;security through obscurity&#8221;, which is, IMO, a very bad idea.</strong>  (But, don&#8217;t just take my word for it &#8212; google &#8220;<a href="http://www.google.com/search?q=security+through+obscurity"><em>security through obscurity</em></a>&#8221; and read some of the articles.)</p>
<p>So, why do I bring this up?  LabVIEW is becoming more and more of a general purpose programming language and many people are building commercial products using LabVIEW, including reuse libraries and components.  <strong>Customers of LabVIEW reuse libraries and components expect to be able to use them in future versions of LabVIEW</strong> as well as use them on any platform or execution target supported by LabVIEW (such as LabVIEW RT and FPGA targets).  <strong>The only practical way for vendors to achieve this is to ship the reuse libraries with password protected block diagrams</strong>.</p>
<p>What would happen if, some day, a hack were to be discovered that could unlock the block diagram of any VI?  What would be the implications for NI?  What would be the implications for LabVIEW users? What would be the implications for LabVIEW tools vendors?  I&#8217;ll bet you that many people would be VERY pissed off and there might even be legal actions taken.</p>
<p><strong>The longer we rely on the fallacy of password protected VIs, the more catastrophic the consequences to all of us, once the scheme is cracked.</strong></p>
<p>So, what now?</p>
<ol>
<li>First, do not rely on password protection for any VI with intellectual property that must not be made public.</li>
<li>Second, demand (from NI) a better scheme for cross-platform execution of VIs.</li>
</ol>
<p>So, what can NI do to devise a better scheme to lessen the need for distributing password protected VIs?</p>
<ol>
<li>Give VIs the ability to store the executable code for <strong>multiple</strong> platforms and execution targets</li>
<li>Use <strong>platform-independent byte code</strong> that runs on a LabVIEW virtual machine</li>
<li>Support old versions of VI executable code (for example, a VI saved in LabVIEW 6.1 on Windows without a block diagram should be callable by LabVIEW 8.5 on Windows).  This can almost be done right now by building your reuse library into a DLL and providing VIs (with source code) that wrap the DLL.  However, this technique still requires one version of the DLL for each platform (Mac, Linux, and Windows) and would not work well for targeting LabVIEW RT or FPGA.</li>
</ol>
<p>Is the world coming to an end?  No, not really.  But, <strong>things are getting worse as time goes by</strong>.  The longer people rely on password protected VIs and the more popular LabVIEW becomes, the larger the consequences when the scheme is eventually cracked.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2007/08/19/password-protecting-vis-is-security-through-obscurity/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
	</channel>
</rss>
