<?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>SciTools Blog</title>
	<atom:link href="http://scitools.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://scitools.com/blog</link>
	<description>Maintain your Software</description>
	<lastBuildDate>Thu, 11 Mar 2010 00:43:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Awesome New Graph</title>
		<link>http://scitools.com/blog/2010/03/awesome-new-graph.html</link>
		<comments>http://scitools.com/blog/2010/03/awesome-new-graph.html#comments</comments>
		<pubDate>Thu, 11 Mar 2010 00:43:18 +0000</pubDate>
		<dc:creator>KevinG</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Understand 2.5]]></category>
		<category><![CDATA[dependencies]]></category>
		<category><![CDATA[features]]></category>
		<category><![CDATA[graphs]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/2010/03/awesome-new-graph.html</guid>
		<description><![CDATA[We’ve added a new dependency graph with some great interactive capabilities. If you’ve been looking for a way to visualize your high level code layout and intra-project dependencies, this is it. Watch this short video to get a taste of how useful these graphs are.

]]></description>
			<content:encoded><![CDATA[<p>We’ve added a new dependency graph with some great interactive capabilities. If you’ve been looking for a way to visualize your high level code layout and intra-project dependencies, this is it. Watch this short video to get a taste of how useful these graphs are.</p>
<p><object id="csSWF" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="498" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0"><param name="src" value="http://www.scitools.com/videos/DependencyGraphs/DependencyGraphs_controller.swf" /><param name="bgcolor" value="#1a1a1a" /><param name="quality" value="best" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="scale" value="showall" /><param name="flashVars" value="autostart=false" /><embed name="csSWF" src="http://www.scitools.com/videos/DependencyGraphs/DependencyGraphs_controller.swf" width="640" height="498" bgcolor="#1a1a1a" quality="best" allowScriptAccess="always" allowFullScreen="true" scale="showall" flashVars="autostart=false&#038;thumb=FirstFrame.png&#038;thumbscale=45&#038;color=0x000000,0x000000" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2010/03/awesome-new-graph.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understand powers metrics in recent IEEE Software article</title>
		<link>http://scitools.com/blog/2010/03/understand-powers-metrics-in-recent-ieee-software-article.html</link>
		<comments>http://scitools.com/blog/2010/03/understand-powers-metrics-in-recent-ieee-software-article.html#comments</comments>
		<pubDate>Wed, 10 Mar 2010 14:39:00 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Scitools Announcements]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/2010/03/understand-powers-metrics-in-recent-ieee-software-article.html</guid>
		<description><![CDATA[Dr. A. Gunes Koru and Dr. Khaled El Emam’s latest paper in IEEE Software, titled “The Theory of Relative Dependency: Higher Coupling Concentration in Smaller Modules”, turns conventional thoughts on where to test upside down by showing that smaller modules, not larger or more complex modules, can provide more effective testing payback in terms of [...]]]></description>
			<content:encoded><![CDATA[<p>Dr. A. Gunes Koru and Dr. Khaled El Emam’s <a href="http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2009.118" target="_blank">latest paper in IEEE Software</a>, titled “The Theory of Relative Dependency: Higher Coupling Concentration in Smaller Modules”, turns conventional thoughts on where to test upside down by showing that smaller modules, not larger or more complex modules, can provide more effective testing payback in terms of defects eliminated:</p>
<p>Abstract:</p>
<blockquote><p><em>Recent studies have repeatedly found that smaller modules are proportionally more defect-prone. In this article, the authors formulate and test a hypothesis stating that smaller modules are proportionally more coupled, given that dependencies caused by coupling have been consistently associated with defect-proneness. Strong evidence supports this hypothesis. Furthermore, refactoring exacerbates this effect. On the basis of this study&#8217;s highly consistent results, the authors state the empirically based theory of relative dependency. That is, in large-scale software systems, smaller modules will be proportionally more dependent compared to larger ones. These findings have two implications for practice. First, we now have an empirically supported mechanism explaining the observations that defect concentration is higher in smaller modules. Practitioners can use this mechanism as evidence while seeking resources and support to revise or amend their organizations&#8217; quality assurance and quality control practices. Second, particularly for the projects that refactor extensively, such as those using agile methods, focusing defect detection activities on smaller modules will increase their efficiency and effectiveness even more.</em></p>
</blockquote>
<p>They used <em>Understand</em> to generate the C++ measurements of many large open source projects.&#160; We donate licenses of <em>Understand</em> to worthy research projects frequently. We’ve e-mailed many times with Dr. Koru to support his efforts and are pleased his work was accepted by IEEE. </p>
<p>The team extensively used the DIT (Depth Inheritance Tree) and CBO (Coupling Between Objects) that <em>Understand</em> provides.</p>
<p>We’ve noted a few ideas for product enhancements from reading their article.</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2010/03/understand-powers-metrics-in-recent-ieee-software-article.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Support Forum temporarily disabled</title>
		<link>http://scitools.com/blog/2010/03/support-forum-temporarily-disabled.html</link>
		<comments>http://scitools.com/blog/2010/03/support-forum-temporarily-disabled.html#comments</comments>
		<pubDate>Tue, 09 Mar 2010 23:14:29 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[Announcements]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/2010/03/support-forum-temporarily-disabled.html</guid>
		<description><![CDATA[We changed our website concurrent to introducing Understand 2.5.&#160; We hope you like it. We’ve tried to keep it stylish and focused on information, not fluff. 
You will notice, however, that the Support Forum hasn’t been moved.&#160; We’ve had trouble with it and our searching for a replacement.
It will come back on line, but not [...]]]></description>
			<content:encoded><![CDATA[<p>We changed our website concurrent to introducing Understand 2.5.&#160; We hope you like it. We’ve tried to keep it stylish and focused on information, not fluff. </p>
<p>You will notice, however, that the Support Forum hasn’t been moved.&#160; We’ve had trouble with it and our searching for a replacement.</p>
<p>It will come back on line, but not until we have a replacement we think we can stick with long term.</p>
<p>For now, use <a href="mailto:support@scitools.com">support@scitools.com</a> or the Chat available on the website for support.</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2010/03/support-forum-temporarily-disabled.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understand 2.5</title>
		<link>http://scitools.com/blog/2010/03/understand-2-5.html</link>
		<comments>http://scitools.com/blog/2010/03/understand-2-5.html#comments</comments>
		<pubDate>Tue, 09 Mar 2010 22:29:19 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Scitools Announcements]]></category>
		<category><![CDATA[Understand 2.5]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/2010/03/understand-2-5.html</guid>
		<description><![CDATA[
This weekend we released Understand 2.5 (build 507).  Its main changes include:

Instant Search – a new feature which permits instant searching in even the largest bodies of code. Indexing starts after parsing ends. It operates in the background without holding up any other activities. When complete the search box in the upper right instantly answers [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://scitools.com/blog/wp-content/uploads/2010/03/image.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://scitools.com/blog/wp-content/uploads/2010/03/image_thumb.png" border="0" alt="image" width="244" height="194" /></a></p>
<p>This weekend we released <em>Understand 2.5 (build 507)</em>.  Its main changes include:</p>
<ul>
<li><strong>Instant Search</strong> – a new feature which permits instant searching in even the largest bodies of code. Indexing starts after parsing ends. It operates in the background without holding up any other activities. When complete the search box in the upper right instantly answers your queries.</li>
<li><strong>Dependency Graphs</strong> -  these replace our old dependency graphs with new layout, saving, and cool clustering, save, undo, and redo options. They use a much updated layout engine, which we will roll into our other graphs and use to create new ones in the coming months.</li>
<li><strong>Simplified Licensing</strong> – <em>Understand 2.5</em> includes all languages and all features. The only licensing difference, in terms of price, is the use of floating or specific developer licenses.  Understand 2.5 does use a new license – your old one will not run it permanently. Instead, it will operate for 30 days, giving you time to request a replacement license if you are under maintenance. This is done directly from <em>Understand</em> or via our website.</li>
<li><strong>Pricing</strong> -  we’ve removed all levels and language variants. <em>Understand 2.5</em> has it all. This will be our path going forward with new features as well.  The new price is <a href="http://scitools.com/store">a little higher</a> and the only differentiation is if you need a Single Developer or Floating License.   If you are under maintenance you can update to <em>Understand 2.5</em> without any cost. Nor will the higher price affect your maintenance going forward. It will remain 18% of your purchase price annually.</li>
<li><strong>TrackBack Removed &#8211; </strong>this will be missed by many users, but we needed to focus on core analysis capabilities.<br />
Take heart, the engineer who wrote much of it will be taking it open source very soon. Look for an announcement here. To be notified by e-mail send a request to <a href="mailto:support@scitools.com">support@scitools.com</a>.</li>
<li><strong>Menu Revamping</strong> &#8211; menus were moved about and standardized to be more in common with most applications. Additionally, edit menu items are now contextual with editor and graph operations. As an application ages, menus become complex and suffer from bloat. We wanted to simplify and reduce clutter.</li>
<li><strong>License Manager GUI</strong> <strong>with Improved Diagnostics</strong> – our old license manager does not need to be updated. If it is updated, or for new installations, a new License Manager GUI simplifies operation. Additionally, the server and clients have many more diagnostics embedded to diagnose any licensing manager problems.</li>
<li>And many hundreds of bug fixes and minor improvements.</li>
</ul>
<p>We know change can make winners and losers. We’ve tried to make every user a winner with <em>Understand 2.5.</em> If we failed for you, let us know how, and we will try to sort it out and make you as happy as we can.</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2010/03/understand-2-5.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understand on Facebook &#8211; Become a fan</title>
		<link>http://scitools.com/blog/2009/09/understand-on-facebook-become-a-fan.html</link>
		<comments>http://scitools.com/blog/2009/09/understand-on-facebook-become-a-fan.html#comments</comments>
		<pubDate>Wed, 02 Sep 2009 16:32:26 +0000</pubDate>
		<dc:creator>KevinG</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/?p=508</guid>
		<description><![CDATA[Help us prove that not all programmers are anti-social, join our Facebook Fan page!
FB.init("d90ac7cbd9833459e2052632ed05a5f7");
Understand on Facebook
]]></description>
			<content:encoded><![CDATA[<p>Help us prove that not all programmers are anti-social, join our Facebook Fan page!<br />
<script type="text/javascript" src="http://static.ak.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/en_US"></script><script type="text/javascript">FB.init("d90ac7cbd9833459e2052632ed05a5f7");</script><fb:fan profile_id="120970514908" stream="" connections="" width="300"></fb:fan>
<div style="font-size:8px; padding-left:10px"><a href="http://www.facebook.com/pages/Understand/120970514908">Understand</a> on Facebook</div>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2009/09/understand-on-facebook-become-a-fan.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>.NET API for Understand</title>
		<link>http://scitools.com/blog/2009/09/net-api-for-understand.html</link>
		<comments>http://scitools.com/blog/2009/09/net-api-for-understand.html#comments</comments>
		<pubDate>Wed, 02 Sep 2009 00:26:11 +0000</pubDate>
		<dc:creator>KevinG</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/2009/09/net-api-for-understand.html</guid>
		<description><![CDATA[One of our users, Chris Johnson, has developed a .NET sdk wrapper for the Understand API.
I have written a .NET sdk wrapper around the understand API during the early spring and last fall. I wrote it because I didn&#8217;t want to use Perl anymore, and I wanted the strong type safety of .NET along with [...]]]></description>
			<content:encoded><![CDATA[<p>One of our users, Chris Johnson, has developed a .NET sdk wrapper for the Understand API.</p>
<blockquote><p>I have written a .NET sdk wrapper around the understand API during the early spring and last fall. I wrote it because I didn&#8217;t want to use Perl anymore, and I wanted the strong type safety of .NET along with it&#8217;s wonderful debugging tools.      <br />The API is written in managed C++ (i.e. C++/CLI), and once compiled, can be accessed by any programming language that targets the .NET framework.</p>
</blockquote>
<p>More details at <a title="http://www.scitools.com/support/forum/viewtopic.php?p=5550" href="http://www.scitools.com/support/forum/viewtopic.php?p=5550">http://www.scitools.com/support/forum/viewtopic.php?p=5550</a></p>
<p>Thanks, Chris!</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2009/09/net-api-for-understand.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CVS commands in Understand</title>
		<link>http://scitools.com/blog/2009/06/cvs-commands-in-understand.html</link>
		<comments>http://scitools.com/blog/2009/06/cvs-commands-in-understand.html#comments</comments>
		<pubDate>Fri, 12 Jun 2009 04:05:00 +0000</pubDate>
		<dc:creator>KevinG</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/?p=443</guid>
		<description><![CDATA[Several users have asked for a CVS user tool similar to the one Ken created for SVN
This is easy to do, and you can create your own User Tools to do many different things.
I went and bundled some CVS commands into a User Tool. Just import it via the Tools &#124; Configure User Tools &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>Several users have asked for a CVS user tool similar to the<a href="http://scitools.com/blog/2008/06/tip-setting-up-user-tools-for-svn.html"> one Ken created for SVN</a></p>
<p>This is easy to do, and you can <a href="http://scitools.com/blog/2008/07/tip-making-a-custom-user-tool.html">create your own User Tools</a> to do many different things.</p>
<p>I went and bundled some CVS commands into a User Tool. Just import it via the Tools | Configure User Tools | Import button.</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/2009/06/cvstools.ini">Download CVS User Tool</a></p>
<p>I haven&#8217;t used CVS in years, so let me know if I got anything wrong <img src='http://scitools.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2009/06/cvs-commands-in-understand.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Tools enhancements (input/output)</title>
		<link>http://scitools.com/blog/2009/04/user-tools-enhancements-inputoutput.html</link>
		<comments>http://scitools.com/blog/2009/04/user-tools-enhancements-inputoutput.html#comments</comments>
		<pubDate>Fri, 10 Apr 2009 23:39:20 +0000</pubDate>
		<dc:creator>KevinG</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Understand 2.0]]></category>
		<category><![CDATA[user tools]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/?p=405</guid>
		<description><![CDATA[With build 476 we are adding an exciting new capability to User Tools. The ability to perform operations directly in the editor. In the the User Tool configuration menu (Tools &#124; Configure User Tools), there are two new fields, Input and Output. As you might expect, the Input field lets you select what text you [...]]]></description>
			<content:encoded><![CDATA[<p>With build 476 we are adding an exciting new capability to User Tools. The ability to perform operations directly in the editor. In the the User Tool configuration menu (Tools | Configure User Tools), there are two new fields, Input and Output. As you might expect, the Input field lets you select what text you want to feed into your tool, and the output field lets you choose where you want the output redirected.<span id="more-405"></span><img class="size-full wp-image-406 aligncenter" title="screenshot_15" src="http://scitools.com/blog/wp-content/uploads/2009/04/screenshot_15.jpeg" alt="screenshot_15" width="382" height="396" /></p>
<p>For Input you can chose to use the selected text, the text of the entire current file, or not to use any input. You can output your results into the command output window like previous versions allowed, discard it, copy it to the clipboard, or overwrite the current selected text or file.</p>
<p>For example, the following would replace the word int with float in the currently highlighted text:</p>
<p style="text-align: center;"><img class="size-full wp-image-407 aligncenter" title="screenshot_16" src="http://scitools.com/blog/wp-content/uploads/2009/04/screenshot_16.jpeg" alt="screenshot_16" width="302" height="170" /></p>
<p>Yes, Find &amp; Replace would do the same thing, it&#8217;s just an example <img src='http://scitools.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>An example of replacing an entire file would be when <a href="http://scitools.com/blog/2008/11/tip-beautify-your-code.html" target="_blank">using astyle to format your code</a>. In that blog posting we had to overwrite the current file, and then reload it. Now we can feed the file text straight into the command and then the editor contents get automatically overwritten. No need to confirm the file reload every time:</p>
<p style="text-align: center;"><img class="size-full wp-image-408 aligncenter" title="screenshot_17" src="http://scitools.com/blog/wp-content/uploads/2009/04/screenshot_17.jpeg" alt="screenshot_17" width="308" height="169" /></p>
<p>As with many new Understand features, this was requested by a cutomer, we thought it was a good idea and that other people would use it, so we implemented it. If you have a good idea don&#8217;t hesitate to let us know. Just drop us an email at <a href="mailto://support@scitools.com">support@scitools.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2009/04/user-tools-enhancements-inputoutput.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changes to the Perl API</title>
		<link>http://scitools.com/blog/2009/04/changes-to-the-perl-api.html</link>
		<comments>http://scitools.com/blog/2009/04/changes-to-the-perl-api.html#comments</comments>
		<pubDate>Thu, 09 Apr 2009 14:16:15 +0000</pubDate>
		<dc:creator>KevinG</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Scitools Labs]]></category>
		<category><![CDATA[Understand 2.0]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2009/04/changes-to-the-perl-api.html</guid>
		<description><![CDATA[We&#8217;ve made several changes to the Understand Perl API recently. The largest change was upgrading from Perl 5.6.0 to 5.10.0 in build 473.
In addition to several cool new features like the smart match operators and switch statements, Perl 5.10 runs faster and has a smaller memory footprint. For more details on what the changes are [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve made several changes to the <em>Understand</em> <a href="http://www.scitools.com/products/understand/perl.php">Perl API</a> recently. The largest change was upgrading from Perl 5.6.0 to 5.10.0 in build <a href="http://scitools.com/blog/2009/03/understand-20-build-notes-b473.html" target="_blank">473</a>.<br />
In addition to several cool new features like the smart match operators and switch statements, Perl 5.10 runs faster and has a smaller memory footprint. For more details on what the changes are and how to use<br />
them, see the <a href="http://dev.perl.org/perl5/news/2007/perl-5.10.0.html" target="_blank">Perl 5.10 Release Announcement</a>.</p>
<p>We are also in the process of adding Snapshot support for the Perl API for build 476. Now you can access historical versions of the code through your scripts as well. For example you can compare versions of files or write a script to compare metrics between versions. <span id="more-395"></span><strong> </strong></p>
<p><strong>What does this mean to you as an <em>Understand</em> script user?</strong><br />
In addition to the new features, the main side effect might be that some scripts might no longer work.</p>
<p>If any of your scripts stop working, review this list of incompatabilites in the <a href="http://search.cpan.org/dist/perl-5.10.0/pod/perl5100delta.pod#Incompatible_Changes/">Perl delta document</a>. You can also make sure the scripts are still valid syntax by running <strong>maintain_uperl -c myscipt.pl</strong>.</p>
<p>The new snapshot changes modify the API in a few different ways:</p>
<ul>
<li> Db::snapshots() to get a list of snapshots for the db.</li>
<li>$snapshot-&gt;name() to get the name of a snapshot and</li>
<li>$snapshot-&gt;open() to open the snapshot and return a $db variable that represents the snapshot.</li>
<li>The $db object is now &#8220;live&#8221;. It never used to be and it was never important that a script pass around and use the correct object. It is now critical.</li>
<li>Entity objects carry with them knowledge of the database/snapshot they belong to. Multiple databases/snapshots can be open and you can have entities from them all at once.</li>
<li>Any <strong>scripts which used entity ids <em>$ent-&gt;id() </em>as keys in hashes must be updated</strong> &#8211; the $ent-&gt;id is no longer unique across snapshots and multiple databases
<ul>
<li><span style="text-decoration: line-through;">At the beginning of the script add:   <em>use Tie::RefHash;</em></span></li>
<li><span style="text-decoration: line-through;">declare the hash with:  <em>tie my %my_hash, &#8216;Tie::RefHash&#8217;;</em></span></li>
<li><span style="text-decoration: line-through;">use the actual entity object as the key <em>$my_hash{$ent}</em>, not the dereference of the entity <em>$my_hash{$ent-&gt;id}</em>.</span></li>
<li><span style="text-decoration: line-through;">Don&#8217;t use Understand::ent-&gt;new($id) to reconstruct an Ent object from the id.</span></li>
</ul>
</li>
</ul>
<p>If you run into any problems that you need help with, feel free to post a question on the <a href="http://www.scitools.com/support/forum/viewforum.php?f=5" target="_blank">scripting forum</a>, or shoot us an email at support@scitools.com</p>
<p>UPDATE- We found some issues with the above approach to $ent-&gt;id and changed it with build 477. Using a Tie::RefHash for entities does not work as intended and is no longer recommended. We added a new call $db-&gt;<strong>ent_from_id</strong>($id), to reconstruct entity objects from ids.  To use entities as hash keys without later retrieving the entities from keys, it is sufficient to simply use $ent for the key. To later retrieve an entity from a key, instead, use the entity id as the key ($ent-&gt;id()), and retrieve the entity from the key with $db-&gt;ent_from_id($key). Note, it is not possible to safely store entities from different db&#8217;s into the same hash using this technique, since id&#8217;s are not unique across multiple open db&#8217;s.</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2009/04/changes-to-the-perl-api.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scitools Labs: Dependency Analysis</title>
		<link>http://scitools.com/blog/2009/02/scitools-labs-dependency-analysis.html</link>
		<comments>http://scitools.com/blog/2009/02/scitools-labs-dependency-analysis.html#comments</comments>
		<pubDate>Fri, 13 Feb 2009 14:58:19 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[Scitools Labs]]></category>
		<category><![CDATA[Understand 2.0]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2009/02/scitools-labs-dependency-analysis.html</guid>
		<description><![CDATA[

We&#8217;ve had dependency analysis in Understand for many years.&#160; With B471 of Understand 2.0 we have consolidated it into a functional area of the tool, improved what it does and also added a few new dependency views.
The Dependency Analysis capability provides these features:

rapid browsing of dependencies for files and Understand architectures
Dependents, Depends On, and Butterfly [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><a href="http://scitools.com/blog/wp-content/uploads/mt-old/Butterfly_2DDependency_2Dadler32_2Dc.png"><img alt="Butterfly-Dependency-adler32-c" src="http://scitools.com/blog/wp-content/uploads/mt-old/Butterfly_2DDependency_2Dadler32_2Dc_thumb1.jpg" border="0" /><font color="#800080"></a></p>
<p></font></p>
<p>We&rsquo;ve had dependency analysis in <em>Understand</em> for many years.&nbsp; With B471 of <em>Understand 2.0 </em>we have consolidated it into a functional area of the tool, improved what it does and also added a few new dependency views.</p>
<p>The Dependency Analysis capability provides these features:</p>
<ul>
<li>rapid browsing of dependencies for files and <em>Understand</em> architectures</li>
<li>Dependents, Depends On, and Butterfly graphs for files and architectures</li>
<li>Spreadsheet export of dependency relationships</li>
<li>A new Dependency Browsing dock that shows all depedency information </li>
</ul>
<p>Read on to learn more about the Dependency Analysis capability and what we plan for it. </p>
<p>Or watch the video <a href="http://www.screencast.com/users/Scitools/folders/Jing/media/b3cd613b-ebab-429b-8458-30d4505eab21" target="_blank">here</a>.</p>
<p><span id="more-388"></span></p>
<p><strong>Lots of Data</strong></p>
<p>To calculate dependency we have to examine every refererence in an <em>Understand</em> project. We then build up dependency data structures for every file and architecture. This includes the nature of the dependency and the references that caused the depedency. </p>
<p>Because this can be a lot of data, we don&rsquo;t calculate this as you ask for a given dependency relationship. Instead, we calculate all dependency information, cache it, and this makes subsquent exploration and browsing quick.</p>
<p>So the first step is to tell <em>Understand</em> you want to explore dependency information, by choosing:</p>
<p><img alt="10 2009-02-13 10.37" src="http://scitools.com/blog/wp-content/uploads/mt-old/10_202009_2D02_2D13_2010.37.jpg" border="0" /></p>
<p>Note the <em>Scitools Labs</em> icon next to the menu. This means this is an early feature, so don&rsquo;t depend on it and also send feedback if you have ideas about it.</p>
<p>Depending on the size of the project building this cache can take a while. On 2 million lines of code, it will take about 15 seconds, but the time will depend on the reference density of the code.</p>
<p>After reparsing the cache will still be used, you currently have to remember to update it, although in a build or two we will ask if you want to update it.</p>
<p><strong>Exploring Dependencies</strong></p>
<p>Once the cache is created, you can now explore dependencies using the Dependency Browser. To get it, right click on a file or an architecture and choose &ldquo;View Dependencies&rdquo;</p>
<p><img alt="2009-02-13 10.41" src="http://scitools.com/blog/wp-content/uploads/mt-old/2009_2D02_2D13_2010.41.jpg" border="0" /></p>
<p>The Dependency Browser then pops up, by default docked to the right side of the interface.</p>
<p><img alt="2009-02-13 10.42" src="http://scitools.com/blog/wp-content/uploads/mt-old/2009_2D02_2D13_2010.42.jpg" border="0" /></p>
<p>The browser shows that &ldquo;adler32.c&rdquo; depends on two other files (zconf.h and zlib.h).&nbsp; Clicking on zconf.h shows the references that caused the dependence.&nbsp;&nbsp; It also shows that adler.c is depended on by 3 files, to see them click on the tab.&nbsp; Note that these references are hot, click on them to visit the source location.</p>
<p>The [x] Sync button at the top tells <em>Understand</em> to show dependency information for whatever entity you click on elsewhere in the interface.</p>
<p><strong>Dependence Graphs</strong></p>
<p>We provide, currently, three graphs for files and architectures:</p>
<ul>
<li>Dependency Graph &ndash; edges show that node a depends on node b</li>
<li>Reverse Dependency Graph &ndash; edges show that node a is depended on by node b</li>
<li>ButterFly&nbsp; &ndash; shows dependence and dependency </li>
</ul>
<p>&nbsp;</p>
<p>To get a graph, just right click on the file or node in question, or choose the graph icon in the Dependency Browser:</p>
<p><img alt="2009-02-13 10.47" src="http://scitools.com/blog/wp-content/uploads/mt-old/2009_2D02_2D13_2010.47.jpg" border="0" /></p>
<p>Choosing the Dependency Graph for adler.c we get:</p>
<p><img alt="DependencyGraph-adler32-c" src="http://scitools.com/blog/wp-content/uploads/mt-old/DependencyGraph_2Dadler32_2Dc.png" border="0" /></p>
<p>Adler.c depends on zlib.h twice in the code, and 4 times on zconf.h, and so on.</p>
<p><strong>Data Export</strong></p>
<p>You can export relationship information for a file or architecture to CSV format by clicking on the <img alt="2009-02-13 10.50" src="http://scitools.com/blog/wp-content/uploads/mt-old/2009_2D02_2D13_2010.50.jpg" border="0" />&nbsp;icon. This will do output dependency relationships in matrix form for that entity.&nbsp; </p>
<p>You can also get the matrix for all files or architectures by choosing the CSV export options from the main Dependency menu:</p>
<p><img alt="2009-02-13 10.53" src="http://scitools.com/blog/wp-content/uploads/mt-old/2009_2D02_2D13_2010.53.jpg" border="0" /></p>
<p>&nbsp;</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/2009_2D02_2D13_2010.55.jpg"><img alt="2009-02-13 10.55" src="http://scitools.com/blog/wp-content/uploads/mt-old/2009_2D02_2D13_2010.55_thumb.jpg" border="0" /></a></p>
<p><strong>Our Intentions</strong></p>
<p>We want your feedback on these features &ndash; both in how we implement them and also what else we should do.</p>
<p>Our plans currently include:</p>
<ul>
<li>Dependency information for Java, C#, C++ Classes&nbsp; &amp; Ada Packages</li>
<li>Dependency Rules &ndash; a specification system indicating permited and non-permitted dependencies</li>
<li>Dependency Corrections &ndash; system for correcting false positives dependencies</li>
<li>Access to Dependency Information from the C++ and PERL APIs</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2009/02/scitools-labs-dependency-analysis.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Scitools Labs</title>
		<link>http://scitools.com/blog/2009/02/introducing-scitools-labs.html</link>
		<comments>http://scitools.com/blog/2009/02/introducing-scitools-labs.html#comments</comments>
		<pubDate>Wed, 11 Feb 2009 19:45:34 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Scitools Announcements]]></category>
		<category><![CDATA[Scitools Labs]]></category>
		<category><![CDATA[Understand 2.0]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2009/02/introducing-scitools-labs.html</guid>
		<description><![CDATA[
Customers tell us frequently that they appreciate our weekly builds. They provide a constant stream of new features and bug fixes to Understand users. We like weekly builds because it means we don&#8217;t have to provide patch binaries to customers in dire need of an update and also because we hate the idea of a [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://understandyourcode.com/images/ScitoolsLabsGlow.png" border="0" /></p>
<p>Customers tell us frequently that they appreciate our weekly builds. They provide a constant stream of new features and bug fixes to <em>Understand</em> users. We like weekly builds because it means we don&rsquo;t have to provide patch binaries to customers in dire need of an update and also because we hate the idea of a crash or bug existing in the wild longer than necessary.</p>
<p>But what do we do with new capabilities that we want feedback on, but aren&rsquo;t quite &ldquo;production ready&rdquo;?&nbsp;We faced this with <em>Understand 2.0,</em> which had lots of new features/capabilities.&nbsp; Frankly, I think we took too long getting feedback and had to redo more than we would have liked once we did get user experiences.</p>
<p>Going foward we have big plans for <em>Understand </em>and the core technology it is based on. And so that we can get rapid feedback, we will be exposing features much earlier than we have in the past using a vehicle called &ldquo;<em>Scitools Labs</em>&rdquo;.</p>
<p><em>Scitools Labs</em> isn&rsquo;t some effort to make us look bigger than we are. We are still the 20 something person company we&rsquo;ve always been.&nbsp; Instead, it is our way of asking&hellip; &ldquo;this is where we are heading, what do you think?&rdquo;.</p>
<p>Build 471, which will be released tomorrow, includes three <em>Scitools Labs</em> features:</p>
<ul>
<li>Dependence Analysis, Graphing and metrics&nbsp;for files and architectures</li>
<li>Stack Analysis specific to Microchip Corporation&rsquo;s compiler/micro-controllers</li>
<li><a href="http://www.understandyourcode.com/" target="_blank">UnderstandYourCode.Com</a>&nbsp;&ndash; a website hosting free tools, online analysis and new web oriented features we are putting into <em>Understand</em>.</li>
</ul>
<p>I&rsquo;ll write more specifically about&nbsp;each new&nbsp;<em>Scitools Labs</em> technology in blog postings prefixed with &ldquo;Scitools Labs:&ldquo;. </p>
<p>And remember, your input is the whole idea, so don&rsquo;t be shy &ndash; let us know what you think.</p>
<p><img src="http://scitools.com/blog/smile5.gif" /></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2009/02/introducing-scitools-labs.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VHDL support avilable in B470</title>
		<link>http://scitools.com/blog/2009/02/vhdl-support-avilable-in-b470.html</link>
		<comments>http://scitools.com/blog/2009/02/vhdl-support-avilable-in-b470.html#comments</comments>
		<pubDate>Mon, 02 Feb 2009 22:19:03 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Scitools Announcements]]></category>
		<category><![CDATA[Understand 2.0]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2009/02/vhdl-support-avilable-in-b470.html</guid>
		<description><![CDATA[
Build 470, released today, introduces beta support for VHDL.&#160; E-mail support@scitools.com for instructions on how to enabble that support.
&#160;
]]></description>
			<content:encoded><![CDATA[<p><img src="http://scitools.com/blog/smile1.gif" /></p>
<p>Build 470, released today, introduces beta support for VHDL.&nbsp; E-mail <a href="mailto:support@scitools.com">support@scitools.com</a> for instructions on how to enabble that support.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2009/02/vhdl-support-avilable-in-b470.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GDB and Understand</title>
		<link>http://scitools.com/blog/2008/12/gdb-and-understand.html</link>
		<comments>http://scitools.com/blog/2008/12/gdb-and-understand.html#comments</comments>
		<pubDate>Tue, 30 Dec 2008 18:11:10 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Understand 2.0]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2008/12/gdb-and-understand.html</guid>
		<description><![CDATA[About 1/2 our engineers program on Linux. A couple use the Mac. And the rest use Windows. 
On Linux and the Mac it is quite common to have command line GDB session in use for debugging and to need to&#160;inspect or walk&#160;a call stack from the &#8220;where&#8221; command.&#160; It is a bit of a pain [...]]]></description>
			<content:encoded><![CDATA[<p>About 1/2 our engineers program on Linux. A couple use the Mac. And the rest use Windows. </p>
<p>On Linux and the Mac it is quite common to have command line GDB session in use for debugging and to need to&nbsp;inspect or walk&nbsp;a call stack from the &ldquo;where&rdquo; command.&nbsp; It is a bit of a pain to have these separated from <em>Understand</em>. And we may (if we can figure out the Windows side) add debugging support directly into <em>Understand</em>, but until here is a tip that makes working with GDB a bit easier.</p>
<p>With B465 you paste any text into a command result window (get one&nbsp;by choosing &ldquo;Options-&gt;Run a command&rdquo;).&nbsp; Once pasted, we analyze it for file, line and entity names and it becomes clickable for <em>Understand</em> events and menus. </p>
<p>Here is a GDB call stack pasted in:</p>
<p><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><?xml:namespace prefix ="" v ns ="" "urn:schemas-microsoft-com:vml" /><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">&nbsp;<a href="http://scitools.com/blog/wp-content/uploads/mt-old/gdb_.png"><img alt="Gdb_" src="http://scitools.com/blog/wp-content/uploads/mt-old/gdb__thumb.jpg" border="0" /></a><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix ="" o ns ="" "urn:schemas-microsoft-com:office:office" /><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></span></p>
<p>Files and lines are identified so I can visit them in <em>Understand</em>, or right click and get information and graphs.</p>
<p>Also, with B465 we have made file detection much smarter. It will recognize short, relative and full path names and associate line numbers with them in any fashion a compiler or other tool can think to spit them out.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2008/12/gdb-and-understand.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Yes! Searching in Graphs</title>
		<link>http://scitools.com/blog/2008/12/yes-searching-in-graphs.html</link>
		<comments>http://scitools.com/blog/2008/12/yes-searching-in-graphs.html#comments</comments>
		<pubDate>Tue, 30 Dec 2008 17:58:27 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Understand 2.0]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2008/12/yes-searching-in-graphs.html</guid>
		<description><![CDATA[Searching in graphs has been on my Understand wish list since we first added graphs &#8211; 10 years ago!
So I&#8217;m quite happy to report that Understand 2.0 Build 466 has searching in graphs. To search in a graph just hit the binocular button and enter in the search text. It is incremental. As you type, [...]]]></description>
			<content:encoded><![CDATA[<p>Searching in graphs has been on my <em>Understand</em> wish list since we first added graphs &ndash; 10 years ago!</p>
<p>So I&rsquo;m quite happy to report that <em>Understand 2.0 Build 466</em> has searching in graphs. To search in a graph just hit the binocular button and enter in the search text. It is incremental. As you type, it matches. Hit return to move to the next, or use the green arrows. The graph will center to the next match. Searches will find on node labels and edge labels (if the graph has them).</p>
<p>Here I search a large call tree for &ldquo;inflate&rdquo;:</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/31_202008_2D12_2D30_2013.51.jpg"><img alt="31 2008-12-30 13.51" src="http://scitools.com/blog/wp-content/uploads/mt-old/31_202008_2D12_2D30_2013.51_thumb.jpg" border="0" /></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2008/12/yes-searching-in-graphs.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip &#8211; Beautify your code</title>
		<link>http://scitools.com/blog/2008/11/tip-beautify-your-code.html</link>
		<comments>http://scitools.com/blog/2008/11/tip-beautify-your-code.html#comments</comments>
		<pubDate>Thu, 06 Nov 2008 20:49:32 +0000</pubDate>
		<dc:creator>KevinG</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Understand 2.0]]></category>
		<category><![CDATA[astyle]]></category>
		<category><![CDATA[beautify]]></category>
		<category><![CDATA[user tools]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2008/11/tip-beautify-your-code.html</guid>
		<description><![CDATA[Your code is beautiful, formatted to your liking and spaced just how you want it, but sometimes you have to work with other people’s code – yuck! If only there was something that would make it look like your code, instead of spaghetti. Artistic Style, or astyle as it is also known, is a great [...]]]></description>
			<content:encoded><![CDATA[<p>Your code is beautiful, formatted to your liking and spaced just how you want it, but sometimes you have to work with other people’s code – yuck! If only there was something that would make it look like your code, instead of spaghetti. <a href="http://astyle.sourceforge.net/" target="_blank">Artistic Style</a>, or astyle as it is also known, is a great open source application that does exactly that. </p>
<p>So you can quickly turn this:</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_26.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="84" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_thumb_12.png" width="748" border="0" /></a> </p>
<p>Into this:</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_28.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="212" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_thumb_13.png" width="604" border="0" /></a> </p>
<p>We plan on implementing astyle into the editor at some point in the future, but I’m not so patient, and I decided to use our plugin mechanism to do it now, and will show you how.</p>
<p><span id="more-376"></span></p>
<p>There are two ways to run astyle from inside Understand, as an Interactive Report plugin, or as a custom user tool. Either way, first you’ll need to install or build astyle you can <a href="http://sourceforge.net/project/showfiles.php?group_id=2319l" target="_blank">download it from here</a>.</p>
<h3>Interactive Report</h3>
<p>The Interactive report integrates directly with the file context menu in Understand. Download the plugin <a href="http://www.scitools.com/products/understand/perl_scripts/uperl/astyle.upl" target="_blank">from here</a>(right click and save as). To install it, just drag the file into Understand, it should install automatically.    <br />To run the plugin, right click on a File, select Interactive Reports and Beautify</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_2.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="83" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_thumb.png" width="260" border="0" /></a> </p>
<p>At which point you’ll be presented with the options window:</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_4.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="211" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_thumb_1.png" width="288" border="0" /></a> </p>
<p>The first field is pretty straight forward, just navigate to where the astyle executable is installed.</p>
<p>The rest of the dialog may seem overwhelming, but the tricky part is figuring out what your “style” is. Astyle has 5 predefined styles, and chances are that one of them will be pretty close to what you like. </p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_6.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="51" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_thumb_2.png" width="323" border="0" /></a> </p>
<p>Astyle’s <a href="http://astyle.sourceforge.net/astyle.html" target="_blank">documentation</a> goes into more detail about each of these styles, but here is a rough overview:</p>
<table cellspacing="0" cellpadding="0" width="699" border="1">
<tbody>
<tr>
<td valign="top" align="center" width="233"><strong>ANSI</strong></td>
<td valign="top" align="center" width="233"><strong>GNU</strong></td>
<td valign="top" align="center" width="233"><strong>KR</strong></td>
</tr>
<tr>
<td valign="top" width="233">ANSI style formatting and indenting. Brackets are broken, indentation is 4 spaces. Namespaces, classes, and switches are NOT indented.</td>
<td valign="top" width="233">GNU style formatting and indenting. Brackets are broken, blocks are indented, and indentation is 2 spaces. Namespaces, classes, and switches are NOT indented.</td>
<td valign="top" width="233">Kernighan &amp; Ritchie style formatting and indenting. Brackets are attached, indentation is 4 spaces. Namespaces, classes, and switches are NOT indented.</td>
</tr>
<tr>
<td valign="top" width="233">
<pre>namespace foospace
{
int Foo()
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
}</pre>
</td>
<td valign="top" width="233">
<pre>namespace foospace
{
int Foo()
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
}</pre>
</td>
<td valign="top" width="233">
<pre>namespace foospace {
int Foo() {
if (isBar) {
bar();
return 1;
} else
return 0;
}
}</pre>
</td>
</tr>
</tbody>
</table>
<table cellspacing="0" cellpadding="0" width="466" border="1">
<tbody>
<tr>
<td valign="top" align="center" width="233"><strong>Linux</strong></td>
<td valign="top" align="center" width="233"><strong>Java</strong></td>
</tr>
<tr>
<td valign="top" width="233">Linux style formatting and indenting. All brackets are Linux style, indentation is 8 spaces. Namespaces, classes, and switches are NOT indented.</td>
<td valign="top" width="233">Java style formatting and indenting. Brackets are attached, indentation is 4 spaces. Switches are NOT indented.</td>
</tr>
<tr>
<td valign="top" width="233">
<pre>namespace foospace
{
int Foo()
{
if (isBar) {
bar();
return 1;
} else
return 0;
}
}</pre>
</td>
<td valign="top" width="233">
<pre>class foospace {
int Foo() {
if (isBar) {
bar();
return 1;
} else
return 0;
}
}</pre>
</td>
</tr>
</tbody>
</table>
<p>If one of these appeals to you as is, just select it from the “Predefined Style” section. If you want to modify one, select it and the other options in the dialog will allow you to override the default settings for a style. For more details about what the command does, select “Display the help text” in the Action section:</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_8.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="103" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_thumb_3.png" width="162" border="0" /></a> </p>
<p>When you are ready to run it, you can either preview the changes in a separate window, or apply them directly to the source code. Of course I would suggest previewing the changes until you figure out exactly what your style is. Note that if your project uses relative paths or named roots, only the preview will work right now since the file naming is different, but you can still copy and paste <img src='http://scitools.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>User Tool</h3>
<p>If you already know what astyle command line options you want to use, you can setup a user tool&#160; to quickly transform a file. Again, this only works for projects with absolute paths.</p>
<p>So here are the command line options I want to use with astyle:</p>
<p>astyle &#8211;style=ansi -t -B -w -n &quot;C:\temp\foo.cpp&quot;&quot;</p>
<p>To implement these as a user tool, I select Tools | Configure User Tools</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_10.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="98" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_thumb_4.png" width="244" border="0" /></a> </p>
<p>Then I create a new tool. I name it and provide the path to the astyle executable. Then I provide the parameters, replacing the file name with the $CurFile macro. The lipstick icon is optional <img src='http://scitools.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  For now I decided to show the output in case there are any errors, but you can uncheck that box if you like.</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_14.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="210" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_thumb_6.png" width="340" border="0" /></a> </p>
<p>I also decided to bind this to a keyboard shortcut (Ctrl Shift B). You can set the keyboard shortcuts in Tool | Options | Key Bindings.</p>
</p>
</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_18.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="97" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_thumb_8.png" width="535" border="0" /></a> </p>
<p>Now if I run into an ugly file, I can just hit Ctrl Shift B, it will prompt me to reload the modified file..</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_20.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="77" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipBeautifyyourcode_D95D/image_thumb_9.png" width="244" border="0" /></a> </p>
<p>And bam, pretty code!</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2008/11/tip-beautify-your-code.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Site Licenses are available</title>
		<link>http://scitools.com/blog/2008/11/site-licenses-are-available.html</link>
		<comments>http://scitools.com/blog/2008/11/site-licenses-are-available.html#comments</comments>
		<pubDate>Wed, 05 Nov 2008 14:49:57 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[Scitools Announcements]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2008/11/site-licenses-are-available.html</guid>
		<description><![CDATA[I was just doing technical support for one of our site license customers. It occurred to me that many folks don&#8217;t know that is an option. Doing a site license has these benefits:

quite low unit pricing
easy availability of Understand to when engineers move in and out of projects
much easier licensing (no license manager, it just [...]]]></description>
			<content:encoded><![CDATA[<p>I was just doing technical support for one of our site license customers. It occurred to me that many folks don&rsquo;t know that is an option. Doing a site license has these benefits:</p>
<ul>
<li>quite low unit pricing
<li>easy availability of <em>Understand</em> to when engineers move in and out of projects
<li>much easier licensing (no license manager, it just works on your IP ranges or domains) </li>
</ul>
<p>If your site&nbsp;might be&nbsp;interested just contact Sue or Kevin at <a href="mailto:sales@scitools.com"><font color="#669966">sales@scitools.com</font></a> to learn cost and technical options.</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2008/11/site-licenses-are-available.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Word Clouds?</title>
		<link>http://scitools.com/blog/2008/10/word-clouds.html</link>
		<comments>http://scitools.com/blog/2008/10/word-clouds.html#comments</comments>
		<pubDate>Fri, 24 Oct 2008 12:35:02 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Understand 2.0]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2008/10/word-clouds.html</guid>
		<description><![CDATA[We are always on the lookout for new ways to represent source code. Word Clouds caught my fancy.
Here is one of our own source code showing the top 50 most complex functions in source tree.
 
We thought doing Classes by lines of code, Classes by Sum Complexity and Architectures by the same might also be [...]]]></description>
			<content:encoded><![CDATA[<p>We are always on the lookout for new ways to represent source code. Word Clouds caught my fancy.</p>
<p>Here is one of our own source code showing the top 50 most complex functions in source tree.</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/clip_image002[5].jpg"></a> <a href="http://scitools.com/blog/wp-content/uploads/mt-old/clip_image002[9].jpg"><img style="border-width: 0px; display: inline;" title="clip_image002" src="http://scitools.com/blog/wp-content/uploads/mt-old/clip_image002_thumb[6].jpg" border="0" alt="clip_image002" width="313" height="496" /></a></p>
<p>We thought doing Classes by lines of code, Classes by Sum Complexity and Architectures by the same might also be interesting.</p>
<p>Q: Worth adding to Understand?</p>
<p>BTW: The Cloud was generated by Wordle.net.  We wrote a script that generates output that can be pasted into its text box.   I’ve attached it in case you want to try it on your own code.<br />
<a href="http://scitools.com/blog/wp-content/uploads/2008/10/wordartpl.zip">File Attachment: wordart.pl.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2008/10/word-clouds.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tip &#8211; Understand the CountPath Metric</title>
		<link>http://scitools.com/blog/2008/10/tip-understand-the-countpath-metric.html</link>
		<comments>http://scitools.com/blog/2008/10/tip-understand-the-countpath-metric.html#comments</comments>
		<pubDate>Tue, 21 Oct 2008 17:43:28 +0000</pubDate>
		<dc:creator>KevinG</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Understand 2.0]]></category>
		<category><![CDATA[metrics countpath]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2008/10/tip-understand-the-countpath-metric.html</guid>
		<description><![CDATA[The CountPath metric counts the number of unique paths though a body of code.
]]></description>
			<content:encoded><![CDATA[<p>So imagine you’re reviewing metrics for a small function:</p>
<blockquote><p>&#160; 61 lines of code, pretty small, keeping functionality nice and modular. Good.</p>
<p>&#160; Cyclomatic complexity of 30. Highly complex, but within the acceptable range. Good.</p>
<p>&#160; CountPath metric 536,870,912. What is this? 536 Million paths in 61 lines of code, that can’t be right, can it?!?</p>
</blockquote>
<p><span id="more-373"></span></p>
<p>The CountPath metric counts the number of unique paths though a body of code. It’s pretty common to have a huge count path metric, even in a small body of code. </p>
<p>In this example, I pull up the code and it looks like this:</p>
<blockquote><p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipUnderstandtheCountPathMetric_C0FB/image_6.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="139" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipUnderstandtheCountPathMetric_C0FB/image_thumb_2.png" width="465" border="0" /></a> </p>
</blockquote>
<p>29 IF statements in a row. That’s all, logically quite simple code:</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipUnderstandtheCountPathMetric_C0FB/image_8.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="236" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipUnderstandtheCountPathMetric_C0FB/image_thumb_3.png" width="244" border="0" /></a> </p>
<p>But the fun thing about IF statements, is every one doubles the number of potential paths in your code(2<sup>n</sup>) – and as we all remember from our algebra days, exponential growth happens very fast. </p>
<p>So 2 IF statements makes 4 paths. 2<sup>3</sup> is 8 paths. let me demonstrate:</p>
</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipUnderstandtheCountPathMetric_C0FB/image_10.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="236" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/TipUnderstandtheCountPathMetric_C0FB/image_thumb_4.png" width="244" border="0" /></a> </p>
<p>So for the 3 IF statements here, n=3 and 2<sup>n</sup>= 8 possible paths:</p>
<p>ACE    <br />ACF     <br />ADE     <br />ADF     <br />BCE     <br />BCF     <br />BDE     <br />BDF</p>
</tbody>
</table>
<p>And any guesses what 2<sup>29</sup> is? Yep, 29 IF statements make 536,870,912 paths. Because this metric can grow so large, we do truncate it at 1 Trillion, actually 999,999,999. If we see that many paths, we give up and stop counting. I don’t envy the QA team if they have to test every possible permutation of this, but at least you can believe <em>Understand</em> when it tells you that there are that many paths <img src='http://scitools.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2008/10/tip-understand-the-countpath-metric.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip &#8211; Automated Metrics</title>
		<link>http://scitools.com/blog/2008/10/tip-automated-metrics.html</link>
		<comments>http://scitools.com/blog/2008/10/tip-automated-metrics.html#comments</comments>
		<pubDate>Mon, 13 Oct 2008 15:22:00 +0000</pubDate>
		<dc:creator>KevinG</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Understand 2.0]]></category>
		<category><![CDATA[metrics scheduler task]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2008/10/tip-automated-metrics.html</guid>
		<description><![CDATA[There are two quick ways to automate metric reports in Understand 2.0, as a scheduled activity and via the command line.
]]></description>
			<content:encoded><![CDATA[<p>Several people have asked me lately about automating metrics with Understand 2.0. There are two quick ways to automate metrics, as a scheduled activity and via the command line:</p>
<p><span id="more-372"></span></p>
<h3>Scheduled Activity</h3>
<p>The quickest way to automatically get metrics is as a scheduled activity. For example I could setup Understand so that every Friday night it reparses my project and generates the current metrics. I can set it up to save the metrics as a comma delimited file and/or as an html report. This is all configured from Tools | Scheduled Activities.</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/AutomaticMetrics_990B/image_2.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="215" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/AutomaticMetrics_990B/image_thumb.png" width="244" border="0" /></a> </p>
<h3>Command Line</h3>
<p>Another way to automate the metrics is using the command line tool <font color="#0000ff">und</font>. For a list of the commands available from <strong><font color="#0000ff">und</font></strong>, simply run <strong>und –help</strong>. For more advanced help on a specific command, run <strong>und –help command.</strong> For example <strong>run –help rescan</strong> will show the advanced help for the rescan command.</p>
<p>It most cases the first thing you’ll want to do is update your project by rescanning and analyzing. This can be done with:</p>
<p><strong>und –db c:\project\pixie.udb –rescan &#8211; analyzeAll</strong></p>
<p><font color="#0000ff">Und</font> lets you dynamically specify the parameters for the metrics exports. Simply look at the commands that start –metrics_* for additional options.</p>
<p>For example <font color="#0000ff">metrics_sel</font> lets you specify which metrics you want to report on, so if you just wanted the cyclomatic complexity and the lines of code, first you would need to clear the current metrics and then you would set the option as:</p>
<p><strong>und –db c:\project\pixie.udb –metrics_sel none AvgCyclomatic CountLineCode</strong></p>
<p>Then to actually generate the metrics file, use the –<font color="#0000ff">metrics</font> command, you can specify the filename for the csv export, or if none is specified it will default to the last used filed location. You can see the available metrics at <a title="http://scitools.com/documents/metrics.php" href="http://scitools.com/documents/metrics.php">http://scitools.com/documents/metrics.php</a></p>
<p><strong>und –db c:\project\pixie.udb –metrics “c:\temp\Pixie Metrics\metrics.csv”</strong></p>
<p>You can set the parameters and generate the metrics with the same command, so:</p>
<p><strong>und –db c:\project\pixie.udb –metrics_sel none AvgCyclomatic CountLineCode –metrics &quot;c:\temp\Pixie Metrics\metrics 10-13-2008.csv&quot;</strong></p>
<p>You now have a comma delimited text file that you can open in your favorite spreadsheet editor, or parse however you want:</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/AutomaticMetrics_990B/image_6.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="82" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/AutomaticMetrics_990B/image_thumb_2.png" width="338" border="0" /></a> </p>
<p><strong></strong></p>
<p>If you would rather see your metrics as an html report, use the <font color="#0000ff">–metrics_htmlReport</font> command instead of the <font color="#0000ff">–metrics</font> command:</p>
<p><strong>und –db c:\project\pixie.udb –metrics_htmlReport current –dir &quot;c:\temp\Pixie Metrics\html metrics 10-13-2008&quot;</strong></p>
<p>The html reports let you browse by architecture, so you can look at the metrics by filesystem, staff, or whatever architectures you have setup:</p>
<p><a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/AutomaticMetrics_990B/image_8.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="151" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/AutomaticMetrics_990B/image_thumb_3.png" width="244" border="0" /></a> <a href="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/AutomaticMetrics_990B/image_10.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="144" alt="image" src="http://scitools.com/blog/wp-content/uploads/mt-old/WindowsLiveWriter/AutomaticMetrics_990B/image_thumb_4.png" width="271" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2008/10/tip-automated-metrics.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip &#8211; Finding unused functions in a specific class</title>
		<link>http://scitools.com/blog/2008/09/tip-finding-unused-functions-in-a-specific-class.html</link>
		<comments>http://scitools.com/blog/2008/09/tip-finding-unused-functions-in-a-specific-class.html#comments</comments>
		<pubDate>Tue, 30 Sep 2008 20:42:11 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Understand 2.0]]></category>

		<guid isPermaLink="false">http://scitools.com/blog/http:/scitools.com/blog/archives/2008/09/tip-finding-unused-functions-in-a-specific-class.html</guid>
		<description><![CDATA[I was walking down to the kitchen to get my afternoon cookie and I met another of our engineers. He asked &#8220;hey, how would I use Understand to clean up a class of functions that are no longer used?&#8221;. I thought for a bit and said &#8220;piece of cake&#8221;. 
In&#160;short&#8230;. use the entity filter window [...]]]></description>
			<content:encoded><![CDATA[<p>I was walking down to the kitchen to get my afternoon cookie and I met another of our engineers. He asked &ldquo;hey, how would I use Understand to clean up a class of functions that are no longer used?&rdquo;. I thought for a bit and said &ldquo;piece of cake&rdquo;. </p>
<p>In&nbsp;short&hellip;. use the entity filter window to filter on &ldquo;unused functions&rdquo;, turn&nbsp;entity-&gt;long names on, then&nbsp;type in the name of the class. Done.&nbsp; </p>
<p>Here are the steps&hellip;.&nbsp; First select the &ldquo;Unused Functions&rdquo; filter in the Entity Filter window:</p>
<p><img alt="2008-09-30 16.36" src="http://scitools.com/blog/wp-content/uploads/mt-old/2008_2D09_2D30_2016.36.jpg" border="0" /></p>
<p><span id="more-371"></span><br />
<br />Now, turn on Full Entity Names by clicking on the dimple <img alt="07 2008-09-30 16.37" src="http://scitools.com/blog/wp-content/uploads/mt-old/07_202008_2D09_2D30_2016.37.jpg" border="0" />to the right of the Show: field:</p>
<p><img alt="10 2008-09-30 16.38" src="http://scitools.com/blog/wp-content/uploads/mt-old/10_202008_2D09_2D30_2016.38.jpg" border="0" /></p>
<p>The names now have :: in their full name if they are from a class:</p>
<p><img alt="2008-09-30 16.39" src="http://scitools.com/blog/wp-content/uploads/mt-old/2008_2D09_2D30_2016.39.jpg" border="0" /></p>
<p>I&rsquo;m looking to see if class GameBoard has any unused functions, I type &ldquo;GameBoar&rdquo; into the Filter: and find the methods of GameBoard that are not called anywhere in this project:</p>
<p><img alt="2008-09-30 16.40" src="http://scitools.com/blog/wp-content/uploads/mt-old/2008_2D09_2D30_2016.40.jpg" border="0" /></p>
<p>&nbsp;</p>
<p><img src="http://scitools.com/blog/smile5.gif" />&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://scitools.com/blog/2008/09/tip-finding-unused-functions-in-a-specific-class.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
