<?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>BrettVeenstra.com&#187; Programmer</title>
	<atom:link href="http://brettveenstra.com/category/programmer/feed/" rel="self" type="application/rss+xml" />
	<link>http://brettveenstra.com</link>
	<description>Rants, Dreams, Recollections... on the Walk</description>
	<lastBuildDate>Wed, 11 Mar 2009 17:08:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Certification Roadmap</title>
		<link>http://brettveenstra.com/2009/03/11/certification-roadmap/</link>
		<comments>http://brettveenstra.com/2009/03/11/certification-roadmap/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 17:08:31 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=179</guid>
		<description><![CDATA[Guilty of not keeping my certifications up to date, and in an attempt to clear some junk from my cube, I map my journey from MCSD to MCPD: Enterprise Developer.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m finally sick of a few too many things:</p>

<ul>
<li>Having certificates that are older than most of my children</li>
<li>Seeing the following Roadmap on my cube wall</li>
<li>Not moving forward on any of this</li>
</ul>

<p>You may ask why of course, but I&#8217;ll leave that justification for another post.</p>

<p>So, the ultimate goal is <a href="http://www.microsoft.com/learning/mcp/mcpd/entapp/">MCPD: Enterprise Developer</a> and <a href="http://www.microsoft.com/learning/mcp/mcitp/sql/2008/default.mspx">MCITP: Database Developer 2008</a>.</p>

<p>First, I must attain <a href="http://www.microsoft.com/learning/mcp/mcad/">MCAD.NET</a> status by passing:</p>

<ul>
<li><a href="http://www.microsoft.com/learning/en/us/exams/70-316.mspx">Exam 70-316: Developing and Implementing Windows-Based Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET</a></li>
<li><a href="http://www.microsoft.com/learning/en/us/exams/70-320.mspx">Exam 70-320: Developing XML Web Services and Server Components with Microsoft Visual C# .NET and the Microsoft .NET Framework</a></li>
</ul>

<p>Then, a &#8220;simple&#8221; All-In-One upgrade exam to attain MCPD: Enterprise Developer:</p>

<ul>
<li><a href="http://www.microsoft.com/learning/en/us/exams/70-552.mspx">Exam 70-552: MCAD Skills to MCPD Windows Developer by Using the Microsoft .NET Framework</a></li>
</ul>

<p>Then, I need two more exams:</p>

<ul>
<li><a href="http://www.microsoft.com/learning/en/us/exams/70-433.mspx">Exam 70-433: Microsoft SQL Server 2008, Database Development</a></li>
<li><a href="http://www.microsoft.com/learning/en/us/exams/70-451.mspx">Exam 70-451: Designing Database Solutions and Data Access Using Microsoft SQL Server 2008</a></li>
</ul>

<p>If I have any energy left in the year, I&#8217;ll try to get my MCPD up to v2008 level by taking:</p>

<ul>
<li><a href="http://www.microsoft.com/learning/en/us/Exams/70-568.aspx">Exam 70-568: Upgrade: Transition your MCPD Enterprise Application Developer Skills to MCPD Enterprise Applications Developer 3.5, Part 1</a></li>
<li><a href="http://www.microsoft.com/learning/en/us/Exams/70-569.aspx">Exam 70-569: Upgrade: Transition your MCPD Enterprise Application Developer Skills to MCPD Enterprise Applications Developer 3.5, Part 2</a></li>
</ul>

<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://programmer.brettveenstra.com/2009/03/11/certification-roadmap/&amp;title=Certification%20Roadmap' title='Save to del.icio.us' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://programmer.brettveenstra.com/2009/03/11/certification-roadmap/&amp;title=Certification%20Roadmap' title='Digg It!' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://www.dzone.com/links/add.html?description=Certification%20Roadmap&amp;url=http://programmer.brettveenstra.com/2009/03/11/certification-roadmap/&amp;title=Certification%20Roadmap' title='Save to dzone' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/dzone.png' style='width:16px; height:16px;' alt='[dzone] ' /></a> <a href='http://technorati.com/faves?add=http://programmer.brettveenstra.com/2009/03/11/certification-roadmap/' title='Add to my Technorati Favorites' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/technorati.png' style='width:16px; height:16px;' alt='[Technorati] ' /></a> <a href='http://twitter.com/home/?status=Certification%20Roadmap+http://programmer.brettveenstra.com/2009/03/11/certification-roadmap/' title='Save to Twitter' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a>  <a title='See more bookmark and sharing options...' href='http://programmer.brettveenstra.com/2009/03/11/certification-roadmap/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=raJ1-vRfAWU:bz1dNW-1nUk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?i=raJ1-vRfAWU:bz1dNW-1nUk:D7DqB2pKExk" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=raJ1-vRfAWU:bz1dNW-1nUk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?d=yIl2AUoC8zA" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=raJ1-vRfAWU:bz1dNW-1nUk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?i=raJ1-vRfAWU:bz1dNW-1nUk:F7zBnMyn0Lo" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=raJ1-vRfAWU:bz1dNW-1nUk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?i=raJ1-vRfAWU:bz1dNW-1nUk:gIN9vFwOqvQ" border="0"/></a>
</div>

<p><img src="http://feeds.feedburner.com/~r/JourneymanToMaster/~4/raJ1-vRfAWU" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2009/03/11/certification-roadmap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuous Integration Gotcha: NAnt empty elements</title>
		<link>http://brettveenstra.com/2008/10/31/continuous-integration-gotcha-nant-empty-elements/</link>
		<comments>http://brettveenstra.com/2008/10/31/continuous-integration-gotcha-nant-empty-elements/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 13:43:05 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=168</guid>
		<description><![CDATA[For those of us using the TeamCity continuous integration tool, I ran across a gotcha this morning that I will forget very soon.

The problem

When running NAnt script on my local machine &#8220;in developer mode&#8221;, everything runs fine.  However, once it goes to TeamCity, it puts up a general error:

Could not include build [...]]]></description>
			<content:encoded><![CDATA[<p>For those of us using the <a href="http://jetbrains.com/teamcity">TeamCity</a> continuous integration tool, I ran across a gotcha this morning that I <strong>will</strong> forget very soon.</p>

<h2>The problem</h2>

<p>When running NAnt script on my local machine &#8220;in developer mode&#8221;, everything runs fine.  However, once it goes to TeamCity, it puts up a general error:</p>

<blockquote>
  <p>Could not include build file &#8216;X:\teamcity-BuildAgent\work\684ab6ff82f1a29a\build\foo.core.build&#8217;. 
  Object reference not set to an instance of an object.</p>
</blockquote>

<p>In the end, my offending entry was:</p>

<pre><code>&lt;fileset id="cube.load.files"&gt;
  &lt;!-- &lt;include name="${build.mxl.dml.dir}\foo.mxl" asis="true"/&gt; --&gt;
&lt;/fileset&gt;
</code></pre>

<p>Here&#8217;s my NAnt file pattern.  I use a set of local.properties.xml for a development machine.  I also create a buildserver.properties.xml for the TeamCity run.  Then I create a &#8220;wrapper&#8221; NAnt file that includes both the CORE build script as well as the *.properties.xml file for the given environment.</p>

<p>This has worked very smoothly in the past so this morning it was rather frustrating to receive the error.  The inspiration for this methodology was inspired by <a href="http://blog.jpboodhoo.com/NAntStarterSeries.aspx">Jean-Paul&#8217;s excellent NAnt series</a>.  I highly encourage you to check it out.</p>

<p>Back to the problem&#8230; When running under TeamCity, I get a failure to include a build file, but everything works when running on a development machine.</p>

<h2>The Solution</h2>

<p>Remove EMPTY elements from the XML-formatted NAnt file (or close them using shorthand).  For some reason, it looks as if TeamCity&#8217;s NAnt runner is parsing those files before sending them over to NAnt (guessing here).</p>

<p>And once I cleaned up this empty element, it worked!  Interesting how this <a href="http://programmer.brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery">yet another reason</a> why <a href="http://http://www.codinghorror.com/blog/archives/001114.html">XML is the bane of developers</a>.</p>

<p><pre class="brush: xml;">
&lt;fileset id=&quot;cube.load.files&quot; /&gt;
</pre></p>

<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://programmer.brettveenstra.com/2008/10/31/continuous-integration-gotcha-nant-empty-elements/&amp;title=Continuous%20Integration%20Gotcha:%20NAnt%20empty%20elements' title='Save to del.icio.us' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://programmer.brettveenstra.com/2008/10/31/continuous-integration-gotcha-nant-empty-elements/&amp;title=Continuous%20Integration%20Gotcha:%20NAnt%20empty%20elements' title='Digg It!' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://www.dzone.com/links/add.html?description=Continuous%20Integration%20Gotcha:%20NAnt%20empty%20elements&amp;url=http://programmer.brettveenstra.com/2008/10/31/continuous-integration-gotcha-nant-empty-elements/&amp;title=Continuous%20Integration%20Gotcha:%20NAnt%20empty%20elements' title='Save to dzone' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/dzone.png' style='width:16px; height:16px;' alt='[dzone] ' /></a> <a href='http://technorati.com/faves?add=http://programmer.brettveenstra.com/2008/10/31/continuous-integration-gotcha-nant-empty-elements/' title='Add to my Technorati Favorites' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/technorati.png' style='width:16px; height:16px;' alt='[Technorati] ' /></a> <a href='http://twitter.com/home/?status=Continuous%20Integration%20Gotcha:%20NAnt%20empty%20elements+http://programmer.brettveenstra.com/2008/10/31/continuous-integration-gotcha-nant-empty-elements/' title='Save to Twitter' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a>  <a title='See more bookmark and sharing options...' href='http://programmer.brettveenstra.com/2008/10/31/continuous-integration-gotcha-nant-empty-elements/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=Df7tH_fAvVg:z0-F0VpDzEY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?i=Df7tH_fAvVg:z0-F0VpDzEY:D7DqB2pKExk" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=Df7tH_fAvVg:z0-F0VpDzEY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?d=yIl2AUoC8zA" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=Df7tH_fAvVg:z0-F0VpDzEY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?i=Df7tH_fAvVg:z0-F0VpDzEY:F7zBnMyn0Lo" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=Df7tH_fAvVg:z0-F0VpDzEY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?i=Df7tH_fAvVg:z0-F0VpDzEY:gIN9vFwOqvQ" border="0"/></a>
</div>

<p><img src="http://feeds.feedburner.com/~r/JourneymanToMaster/~4/Df7tH_fAvVg" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2008/10/31/continuous-integration-gotcha-nant-empty-elements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gotcha of inline Document Ready function for JQuery</title>
		<link>http://brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery/</link>
		<comments>http://brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 06:56:34 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=136</guid>
		<description><![CDATA[I&#8217;ve had some reasons to use JQuery this week, and you should believe whatever good rumors and hype you&#8217;ve heard about this library.  It&#8217;s amazing.

There are many benefits to a Javascript framework, particularly JQuery.  Take this example that I put inside my &#60;head&#62; element:

&#60;script type="text/javascript"&#62;
    $(document).ready(function(){

<pre><code> [...]
</code></pre>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had some reasons to use JQuery this week, and you should believe whatever good rumors and hype you&#8217;ve heard about this library.  It&#8217;s amazing.</p>

<p>There are <a href="http://roshanbh.com.np/2008/03/jquery-benefits-examples-free-ebook.html">many benefits to a Javascript framework</a>, particularly <a href="http://jquery.com">JQuery</a>.  Take this example that I put inside my &lt;head&#62; element:</p>

<pre><code>&lt;script type="text/javascript"&gt;
    $(document).ready(function(){

        $('#deliciouslogin').submit(function(){
            alert("This to authenticate with Delicious and start retrieving Bookmarks into Google Gears  database");
        })

    });
&lt;/script&gt;
</code></pre>

<p>This is the <a href="http://docs.jquery.com/How_jQuery_Works#.24.28document.29.ready.28function.28.29.7B.7D.29.3B">&#8220;Document Ready&#8221;</a> function.  This solves the problem of running your Javascript code before your page is done rendering on the browser.  Also note how easy it is to hookup an &#8220;onsubmit&#8221; event handler.  You use CSS-selectors to identify what HTML element(s) to apply to, and JQuery does the rest, figuring out the best way to accomplish that <strong>regardless of your browser</strong>.  Great fun.</p>

<p>My elation quickly disappeared when I fired this sample up in FireFox 3, nothing happened when my &lt;form&#62;&#8217;s submit button was triggered.  Frustrated, I quickly tried it in Safari (Mac), it worked fine.  I switched to the PC and grumpy IE6, and again, no luck.  So what&#8217;s going on?</p>

<p>It turns out that the inline JavaScript will be ignored if you close the element just prior in your &lt;head&#62; section with the shorthand closetag &#8220;/>&#8221;.</p>

<p>This doesn&#8217;t work:</p>

<pre><code>&lt;script type="text/javascript" src="lib/jquery/jquery.js" /&gt;
&lt;script type="text/javascript"&gt;
    $(document).ready(function(){
        // blah
        })
    });
&lt;/script&gt;    
</code></pre>

<p>This does work:</p>

<pre><code>&lt;script type="text/javascript" src="lib/jquery/jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
    $(document).ready(function(){
        // blah
        })
    });
&lt;/script&gt;    
</code></pre>

<p>Hopefully I will remember this in the future, as this is now the <strong>second time</strong> in two days I&#8217;ve wasted an hour <em>or more</em> wondering why my Javascript wasn&#8217;t activated.</p>

<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://programmer.brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery/&amp;title=Gotcha%20of%20inline%20Document%20Ready%20function%20for%20JQuery' title='Save to del.icio.us' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://programmer.brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery/&amp;title=Gotcha%20of%20inline%20Document%20Ready%20function%20for%20JQuery' title='Digg It!' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://www.dzone.com/links/add.html?description=Gotcha%20of%20inline%20Document%20Ready%20function%20for%20JQuery&amp;url=http://programmer.brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery/&amp;title=Gotcha%20of%20inline%20Document%20Ready%20function%20for%20JQuery' title='Save to dzone' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/dzone.png' style='width:16px; height:16px;' alt='[dzone] ' /></a> <a href='http://technorati.com/faves?add=http://programmer.brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery/' title='Add to my Technorati Favorites' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/technorati.png' style='width:16px; height:16px;' alt='[Technorati] ' /></a> <a href='http://twitter.com/home/?status=Gotcha%20of%20inline%20Document%20Ready%20function%20for%20JQuery+http://programmer.brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery/' title='Save to Twitter' onclick=';' rel='nofollow'><img src='http://programmer.brettveenstra.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a>  <a title='See more bookmark and sharing options...' href='http://programmer.brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=pz9G3x2hZjE:ZDahIUcvf5o:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?i=pz9G3x2hZjE:ZDahIUcvf5o:D7DqB2pKExk" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=pz9G3x2hZjE:ZDahIUcvf5o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?d=yIl2AUoC8zA" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=pz9G3x2hZjE:ZDahIUcvf5o:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?i=pz9G3x2hZjE:ZDahIUcvf5o:F7zBnMyn0Lo" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/JourneymanToMaster?a=pz9G3x2hZjE:ZDahIUcvf5o:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JourneymanToMaster?i=pz9G3x2hZjE:ZDahIUcvf5o:gIN9vFwOqvQ" border="0"/></a>
</div>

<p><img src="http://feeds.feedburner.com/~r/JourneymanToMaster/~4/pz9G3x2hZjE" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Response to Readability</title>
		<link>http://brettveenstra.com/2008/08/28/response-to-readability/</link>
		<comments>http://brettveenstra.com/2008/08/28/response-to-readability/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 03:48:04 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=95</guid>
		<description><![CDATA[JP put out another post requesting comments on a Readable (Fluent) approach he&#8217;s currently using.
I tried to leave a comment, but the system wouldn&#8217;t accept anything I used for the captcha&#8230; so here goes:

JP writes:

Run.the&#60;wire_up_global_error_handling>()
   .then&#60;initialize_the_container_for_the_user_interface>()
   .then&#60;initialize_the_user_interface_registry>()
   .then&#60;initialize_the_ui_images_registry>()
   .then&#60;initialize_the_main_menus>()
   .execute();

Here are my humble [...]]]></description>
			<content:encoded><![CDATA[<p>JP put out another post <a href="http://blog.jpboodhoo.com/ThoughtsOnReadability.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://blog.jpboodhoo.com/ThoughtsOnReadability.aspx');">requesting comments on a Readable (Fluent) approach he&#8217;s currently using</a>.
I tried to leave a comment, but the system wouldn&#8217;t accept anything I used for the captcha&#8230; so here goes:</p>

<p>JP writes:</p>

<p><pre>
<code class="cpp">
  Run.the&lt;wire_up_global_error_handling>()
   .then&lt;initialize_the_container_for_the_user_interface>()
   .then&lt;initialize_the_user_interface_registry>()
   .then&lt;initialize_the_ui_images_registry>()
   .then&lt;initialize_the_main_menus>()
   .execute();
</code>
</pre></p>

<p>Here are my humble comments:
 + &#8220;Run&#8221; &amp; &#8220;execute&#8221; seems redundant
 + The underscores are nice to look at but CamelCasing is also easy to read (for me), and easier to type &#8230; I suppose if you&#8217;re using your <a href="http://blog.jpboodhoo.com/BDDAutoHotKeyScriptUpdateTake2.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://blog.jpboodhoo.com/BDDAutoHotKeyScriptUpdateTake2.aspx');">AutoHotKey ninja tricks like JP does</a>, this would be minimum overhead.</p>

<p>So, for the full comparison in code:
<pre>
<code class="cpp">
  Start.by&lt;wireUpGlobalErrorHandling&#62;()
   .and&lt;initializeTheContainerForTheUserInterface&#62;()
   .and&lt;initializeTheUserInterfaceRegistry&#62;()
   .and&lt;initializeTheUiImagesRegistry&#62;()
   .finally&lt;initializeTheMainMenus&#62;();
</code>
</pre></p>

<p>Hopefully JP gets this via a trackback.</p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2008/08/28/response-to-readability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resharper 4.0 Release Candidate Available</title>
		<link>http://brettveenstra.com/2008/06/05/resharper-40-release-candidate-available/</link>
		<comments>http://brettveenstra.com/2008/06/05/resharper-40-release-candidate-available/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 18:47:13 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Resharper]]></category>

		<guid isPermaLink="false">http://brettveenstra.com/?p=88</guid>
		<description><![CDATA[JetBrains has just posted their Release Candidate for Resharper 4.0. I&#8217;m excited to see this and already have my C# tax ($99) lined up for it&#8217;s official release! I&#8217;m officially a convert from the CodeRush/Refactor Pro camp&#8230; I just found Resharper more discoverable than CodeRush.  CodeRush definitely has a slicker UI, but Resharper lets me [...]]]></description>
			<content:encoded><![CDATA[<p>JetBrains has just <a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.0+Nightly+Builds">posted their Release Candidate for Resharper 4.0</a>.</p>

<p><img src="http://farm4.static.flickr.com/3025/2554410086_a085eaff68.jpg?v=0" alt="" width="500" height="492" /></p>

<p>I&#8217;m excited to see this and already have my C# tax ($99) lined up for it&#8217;s official release!</p>

<p>I&#8217;m officially a convert from the CodeRush/Refactor Pro camp&#8230; I just found Resharper more discoverable than CodeRush.  CodeRush definitely has a slicker UI, but Resharper lets me work more like myself (renames/namespaces/interface-based architecture) in Visual Studio.</p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2008/06/05/resharper-40-release-candidate-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multiple Views (redux)</title>
		<link>http://brettveenstra.com/2008/02/19/multiple-views-redux/</link>
		<comments>http://brettveenstra.com/2008/02/19/multiple-views-redux/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 21:01:51 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Functional]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/?p=102</guid>
		<description><![CDATA[Jeremy posted an article on retrieving filtered results on collections, using the perennial Animal kingdom example. Great post. As I was looking at this again, it just started looking &#8220;smelly&#8221;. First thought, can we do this cleaner with Generics? public IEnumerable&#60;AnimalType&#62; AnimalsList&#60;AnimalType&#62;() where AnimalType:class { foreach (IAnimal animal in _animals) { AnimalType testAnimal = animal [...]]]></description>
			<content:encoded><![CDATA[<p>Jeremy posted an <a href="http://jeremyjarrell.com/archive/2008/02/19/82.aspx">article on retrieving filtered results on collections</a>, using the perennial Animal kingdom example.  Great post.</p>

<p>As I was looking at this again, it just started looking &#8220;smelly&#8221;.  First thought, can we do this cleaner with <a href="http://www.google.com/url?sa=t&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fmsdn2.microsoft.com%2Fen-us%2Flibrary%2Fms379564(VS.80).aspx&amp;ei=U0K7R8fwDpOwiAHSj6z5CA&amp;usg=AFQjCNGp2vS4kpeLcGjXWtnM-3-rc8UZ1A&amp;sig2=EqElobu2fgGrPArnFHFUVg">Generics</a>?<span id="more-172"></span> <!-- {\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red248\green248\blue248;\red0\green0\blue128;\red166\green83\blue0;\red128\green0\blue0;}??\fs20 \cb2\highlight2         \cf3 public\cf0  \cf4 IEnumerable\cf0 &amp;lt;\cf5 AnimalType\cf0 &amp;gt; \cf5 AnimalsList\cf0 &amp;lt;\cf5 AnimalType\cf0 &amp;gt;() \cf3 where\cf0  \cf5 AnimalType\cf0 :\cf3 class\par ??\cf0         \{\par ??                \cf3 foreach\cf0  (\cf4 IAnimal\cf0  \cf5 animal\cf0  \cf3 in\cf0  \cf5 _animals\cf0 )\par ??                \{\par ??                    \cf5 AnimalType\cf0  \cf5 testAnimal\cf0  = \cf5 animal\cf0  \cf3 as\cf0  \cf5 AnimalType\cf0 ;\par ??                    \cf3 if\cf0  (\cf5 testAnimal\cf0  != \cf3 null\cf0 )\par ??                        \cf3 yield\cf0  \cf3 return\cf0  \cf5 testAnimal\cf0 ;\par ??                \}\par ??        \}} --></p>

<!-- {\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red248\green248\blue248;\red0\green0\blue128;\red166\green83\blue0;\red128\green0\blue0;}??\fs20 \cb2\highlight2         \cf3 public\cf0  \cf4 IEnumerable\cf0 &amp;lt;\cf5 AnimalType\cf0 &amp;gt; \cf5 AnimalsList\cf0 &amp;lt;\cf5 AnimalType\cf0 &amp;gt;() \cf3 where\cf0  \cf5 AnimalType\cf0 :\cf3 class\par ??\cf0         \{\par ??                \cf3 foreach\cf0  (\cf4 IAnimal\cf0  \cf5 animal\cf0  \cf3 in\cf0  \cf5 _animals\cf0 )\par ??                \{\par ??                    \cf5 AnimalType\cf0  \cf5 testAnimal\cf0  = \cf5 animal\cf0  \cf3 as\cf0  \cf5 AnimalType\cf0 ;\par ??                    \cf3 if\cf0  (\cf5 testAnimal\cf0  != \cf3 null\cf0 )\par ??                        \cf3 yield\cf0  \cf3 return\cf0  \cf5 testAnimal\cf0 ;\par ??                \}\par ??        \}} -->

<div style="background:#f8f8f8 none repeat scroll 0 50%;font-family:Consolas;font-size:10pt;color:black;">
<p style="margin:0;"><span style="color: navy;">public</span> <span style="color: #a65300;">IEnumerable</span>&lt;<span style="color: maroon;">AnimalType</span>&gt; <span style="color: maroon;">AnimalsList</span>&lt;<span style="color: maroon;">AnimalType</span>&gt;() <span style="color: navy;">where</span> <span style="color: maroon;">AnimalType</span>:<span style="color: navy;">class</span></p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: navy;">foreach</span> (<span style="color: #a65300;">IAnimal</span> <span style="color: maroon;">animal</span> <span style="color: navy;">in</span> <span style="color: maroon;">_animals</span>)</p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: maroon;">AnimalType</span> <span style="color: maroon;">testAnimal</span> = <span style="color: maroon;">animal</span> <span style="color: navy;">as</span> <span style="color: maroon;">AnimalType</span>;</p>
<p style="margin:0;"><span style="color: navy;">if</span> (<span style="color: maroon;">testAnimal</span> != <span style="color: navy;">null</span>)</p>
<p style="margin:0;"><span style="color: navy;">yield</span> <span style="color: navy;">return</span> <span style="color: maroon;">testAnimal</span>;</p>
<p style="margin:0;">}</p>
<p style="margin:0;">}</p>

</div>

<p>Oh yeah&#8230; generics are just the coolest thing.</p>

<p>But, this still smelled to me (I didn&#8217;t like all the filter code inside the function).  Sprinkling some functional programming goodness (<a href="http://diditwith.net/PermaLink,guid,a1a76478-03d2-428f-9db6-9cf4e300ea0f.aspx">thank you Dustin</a>), it turned into this.</p>

<!-- {\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red248\green248\blue248;\red0\green0\blue128;\red166\green83\blue0;\red128\green0\blue0;}??\fs20 \cb2\highlight2         \cf3 public\cf0  \cf4 IEnumerable\cf0  \cf5 AnimalList\cf0 (\cf4 FilterAnimalPredicate\cf0  \cf5 filter\cf0 )\par ??        \{\par ??            \cf3 foreach\cf0  (\cf4 IAnimal\cf0  \cf5 animal\cf0  \cf3 in\cf0  \cf5 _animals\cf0 )\par ??            \{\par ??                \cf3 if\cf0  (\cf5 filter\cf0 (\cf5 animal\cf0 .\cf5 GetType\cf0 ()))\par ??                \{\par ??                    \cf3 yield\cf0  \cf3 return\cf0  \cf5 animal\cf0 ;\par ??                \}\par ??            \}\par ??        \}} -->

<div style="background:#f8f8f8 none repeat scroll 0 50%;font-family:Consolas;font-size:10pt;color:black;">
<p style="margin:0;"><!-- {\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red248\green248\blue248;\red0\green0\blue128;\red166\green83\blue0;\red128\green0\blue0;}??\fs20 \cb2\highlight2         \cf3 public\cf0  \cf3 delegate\cf0  \cf3 bool\cf0  \cf4 FilterAnimalPredicate\cf0 (\cf5 System\cf0 .\cf4 Type\cf0  \cf5 type\cf0 );\par ??\par ??        \cf3 private\cf0  \cf3 readonly\cf0  \cf4 IList\cf0 &amp;lt;\cf4 IAnimal\cf0 &amp;gt; \cf5 _animals\cf0  = \cf3 new\cf0  \cf4 List\cf0 &amp;lt;\cf4 IAnimal\cf0 &amp;gt;();\par ??\par ??} --></p>

<div style="background:#f8f8f8 none repeat scroll 0 50%;font-family:Consolas;font-size:10pt;color:black;">
<p style="margin:0;"><span style="color: navy;">public</span> <span style="color: navy;">delegate</span> <span style="color: navy;">bool</span> <span style="color: #a65300;">FilterAnimalPredicate</span>(<span style="color: maroon;">System</span>.<span style="color: #a65300;">Type</span> <span style="color: maroon;">type</span>);</p>
<p style="margin:0;"></p>

<!-- {\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red248\green248\blue248;\red0\green128\blue0;}??\fs20 \cb2\highlight2         \cf3 //public IEnumerable Zebras\par ??} -->
<div style="background:#f8f8f8 none repeat scroll 0 50%;font-family:Consolas;font-size:10pt;color:black;">
<p style="margin:0;"><span style="color: green;">/// snip</span></p>

</div>
<p style="margin:0;"></p>

</div>
<p style="margin:0;"><span style="color: navy;">public</span> <span style="color: #a65300;">IEnumerable</span> <span style="color: maroon;">AnimalList</span>(<span style="color: #a65300;">FilterAnimalPredicate</span> <span style="color: maroon;">filter</span>)</p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: navy;">foreach</span> (<span style="color: #a65300;">IAnimal</span> <span style="color: maroon;">animal</span> <span style="color: navy;">in</span> <span style="color: maroon;">_animals</span>)</p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: navy;">if</span> (<span style="color: maroon;">filter</span>(<span style="color: maroon;">animal</span>.<span style="color: maroon;">GetType</span>()))</p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: navy;">yield</span> <span style="color: navy;">return</span> <span style="color: maroon;">animal</span>;</p>
<p style="margin:0;">}</p>
<p style="margin:0;">}</p>
<p style="margin:0;">}</p>

</div>

<p>Admittedly, I have cheated &#8230; we are no longer using a Property, and hence the unit tests had to change.  But I&#8217;d take this approach as it feels much cleaner.</p>

<p>Thanks again to Jeremy for sparking this post.</p>

<p>Here&#8217;s the final Test Code:</p>

<!-- {\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue128;\red248\green248\blue248;\red0\green0\blue0;\red128\green0\blue0;\red166\green83\blue0;\red230\green255\blue255;}??\fs20 \cf1\cb2\highlight2 using\cf0  \cf4 System\cf0 ;\par ??\cf1 using\cf0  \cf4 System\cf0 .\cf4 Collections\cf0 ;\par ??\cf1 using\cf0  \cf4 System\cf0 .\cf4 Collections\cf0 .\cf4 Generic\cf0 ;\par ??\cf1 using\cf0  \cf4 MbUnit\cf0 .\cf4 Framework\cf0 ;\par ??\par ??\cf1 namespace\cf0  \cf4 MultipleIterators\cf0 .\cf4 Test\par ??\cf0 \{\par ??    [\cf5 TestFixture\cf0 ]\par ??    \cf1 public\cf0  \cf1 class\cf0  \cf5 ZooTest\par ??\cf0     \{\par ??\par ??        \cf1 private\cf0  \cf1 static\cf0  \cf1 bool\cf0  \cf4 IsElephant\cf0 (\cf4 System\cf0 .\cf5 Type\cf0  \cf4 type\cf0 )\par ??        \{\par ??            \cf1 return\cf0  (\cf4 type\cf0  \cf1 is\cf0  \cf5 Elephant\cf0 );\par ??        \}\par ??\par ??        \cf1 private\cf0  \cf1 static\cf0  \cf1 bool\cf0  \cf4 IsZebra\cf0 (\cf4 System\cf0 .\cf5 Type\cf0  \cf4 type\cf0 )\par ??        \{\par ??            \cf1 return\cf0  (\cf4 type\cf0  \cf1 is\cf0  \cf5 Zebra\cf0 );\par ??        \}\par ??        \par ??        [\cf4 Test\cf0 ]\par ??        \cf1 public\cf0  \cf1 void\cf0  \cf4 Can_add_elephants_to_the_zoo\cf0 ()\par ??        \{\par ??            \cf5 Zoo\cf0  \cf4 zoo\cf0  = \cf1 new\cf0  \cf5 Zoo\cf0 ();\par ??            \cf4 zoo\cf0 .\cf4 AddAnimal\cf0 (\cf1 new\cf0  \cf5 Elephant\cf0 ());\par ??\par ??            \cf1 int\cf0  \cf4 animalCounter\cf0  = \cb6\highlight6 0\cb2\highlight2 ;\par ??            \cf1 foreach\cf0  (\cf5 IAnimal\cf0  \cf4 animal\cf0  \cf1 in\cf0  \cf4 zoo\cf0 .\cf4 Animals\cf0 )\par ??                \cf4 animalCounter\cf0 ++;\par ??\par ??            \cf5 Assert\cf0 .\cf4 AreEqual\cf0 (\cb6\highlight6 1\cb2\highlight2 , \cf4 animalCounter\cf0 );\par ??        \}\par ??\par ??        [\cf4 Test\cf0 ]\par ??        \cf1 public\cf0  \cf1 void\cf0  \cf4 Can_add_zebras_to_the_zoo\cf0 ()\par ??        \{\par ??            \cf5 Zoo\cf0  \cf4 zoo\cf0  = \cf1 new\cf0  \cf5 Zoo\cf0 ();\par ??            \cf4 zoo\cf0 .\cf4 AddAnimal\cf0 (\cf1 new\cf0  \cf5 Zebra\cf0 ());\par ??\par ??            \cf1 int\cf0  \cf4 animalCounter\cf0  = \cb6\highlight6 0\cb2\highlight2 ;\par ??            \cf1 foreach\cf0  (\cf5 IAnimal\cf0  \cf4 animal\cf0  \cf1 in\cf0  \cf4 zoo\cf0 .\cf4 Animals\cf0 )\par ??                \cf4 animalCounter\cf0 ++;\par ??\par ??            \cf5 Assert\cf0 .\cf4 AreEqual\cf0 (\cb6\highlight6 1\cb2\highlight2 , \cf4 animalCounter\cf0 );\par ??        \}\par ??\par ??        [\cf4 Test\cf0 ]\par ??        \cf1 public\cf0  \cf1 void\cf0  \cf4 Can_get_just_the_zebras_out_of_the_zoo\cf0 ()\par ??        \{\par ??            \cf5 Zoo\cf0  \cf4 zoo\cf0  = \cf1 new\cf0  \cf5 Zoo\cf0 ();\par ??            \cf4 zoo\cf0 .\cf4 AddAnimal\cf0 (\cf1 new\cf0  \cf5 Zebra\cf0 ());\par ??            \cf4 zoo\cf0 .\cf4 AddAnimal\cf0 (\cf1 new\cf0  \cf5 Elephant\cf0 ());\par ??\par ??            \cf1 foreach\cf0  (\cf5 Zebra\cf0  \cf4 zebra\cf0  \cf1 in\cf0  \cf4 zoo\cf0 .\cf4 AnimalsList\cf0 &amp;lt;\cf5 Zebra\cf0 &amp;gt;())\par ??                \cf5 Assert\cf0 .\cf4 IsTrue\cf0 (\cf4 zebra\cf0  \cf1 is\cf0  \cf5 Zebra\cf0 );\par ??        \}\par ??\par ??        [\cf4 Test\cf0 ]\par ??        \cf1 public\cf0  \cf1 void\cf0  \cf4 Can_get_just_the_elephants_out_of_the_zoo\cf0 ()\par ??        \{\par ??            \cf5 Zoo\cf0  \cf4 zoo\cf0  = \cf1 new\cf0  \cf5 Zoo\cf0 ();\par ??            \cf4 zoo\cf0 .\cf4 AddAnimal\cf0 (\cf1 new\cf0  \cf5 Zebra\cf0 ());\par ??            \cf4 zoo\cf0 .\cf4 AddAnimal\cf0 (\cf1 new\cf0  \cf5 Elephant\cf0 ());\par ??\par ??            \cf1 foreach\cf0  (\cf5 Elephant\cf0  \cf4 elephant\cf0  \cf1 in\cf0  \cf4 zoo\cf0 .\cf4 AnimalsList\cf0 &amp;lt;\cf5 Elephant\cf0 &amp;gt;())\par ??                \cf5 Assert\cf0 .\cf4 IsTrue\cf0 (\cf4 elephant\cf0  \cf1 is\cf0  \cf5 Elephant\cf0 );\par ??        \}\par ??\par ??        [\cf4 Test\cf0 ]\par ??        \cf1 public\cf0  \cf1 void\cf0  \cf4 Can_get_just_the_elephants_out_of_the_zoo_using_predicate\cf0 ()\par ??        \{\par ??            \cf5 Zoo\cf0  \cf4 zoo\cf0  = \cf1 new\cf0  \cf5 Zoo\cf0 ();\par ??            \cf4 zoo\cf0 .\cf4 AddAnimal\cf0 (\cf1 new\cf0  \cf5 Zebra\cf0 ());\par ??            \cf4 zoo\cf0 .\cf4 AddAnimal\cf0 (\cf1 new\cf0  \cf5 Elephant\cf0 ());\par ??\par ??            \cf1 foreach\cf0  (\cf5 Elephant\cf0  \cf4 elephant\cf0  \cf1 in\cf0  \cf4 zoo\cf0 .\cf4 AnimalList\cf0 (\cf4 IsElephant\cf0 ))\par ??                \cf5 Assert\cf0 .\cf4 IsTrue\cf0 (\cf4 elephant\cf0  \cf1 is\cf0  \cf5 Elephant\cf0 );\par ??        \}\par ??\par ??    \}\par ??\}} -->

<div style="background:#f8f8f8 none repeat scroll 0 50%;font-family:Consolas;font-size:10pt;color:black;">
<p style="margin:0;"><span style="color: navy;">using</span> <span style="color: maroon;">System</span>;</p>
<p style="margin:0;"><span style="color: navy;">using</span> <span style="color: maroon;">System</span>.<span style="color: maroon;">Collections</span>;</p>
<p style="margin:0;"><span style="color: navy;">using</span> <span style="color: maroon;">System</span>.<span style="color: maroon;">Collections</span>.<span style="color: maroon;">Generic</span>;</p>
<p style="margin:0;"><span style="color: navy;">using</span> <span style="color: maroon;">MbUnit</span>.<span style="color: maroon;">Framework</span>;</p>
<p style="margin:0;"></p>
<p style="margin:0;"><span style="color: navy;">namespace</span> <span style="color: maroon;">MultipleIterators</span>.<span style="color: maroon;">Test</span></p>
<p style="margin:0;">{</p>
<p style="margin:0;">[<span style="color: #a65300;">TestFixture</span>]</p>
<p style="margin:0;"><span style="color: navy;">public</span> <span style="color: navy;">class</span> <span style="color: #a65300;">ZooTest</span></p>
<p style="margin:0;">{</p>
<p style="margin:0;"></p>
<p style="margin:0;"><span style="color: navy;">private</span> <span style="color: navy;">static</span> <span style="color: navy;">bool</span> <span style="color: maroon;">IsElephant</span>(<span style="color: maroon;">System</span>.<span style="color: #a65300;">Type</span> <span style="color: maroon;">type</span>)</p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: navy;">return</span> (<span style="color: maroon;">type</span> <span style="color: navy;">is</span> <span style="color: #a65300;">Elephant</span>);</p>
<p style="margin:0;">}</p>
<p style="margin:0;"></p>
<p style="margin:0;"><span style="color: navy;">private</span> <span style="color: navy;">static</span> <span style="color: navy;">bool</span> <span style="color: maroon;">IsZebra</span>(<span style="color: maroon;">System</span>.<span style="color: #a65300;">Type</span> <span style="color: maroon;">type</span>)</p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: navy;">return</span> (<span style="color: maroon;">type</span> <span style="color: navy;">is</span> <span style="color: #a65300;">Zebra</span>);</p>
<p style="margin:0;">}</p>
<p style="margin:0;"></p>
<p style="margin:0;">[<span style="color: maroon;">Test</span>]</p>
<p style="margin:0;"><span style="color: navy;">public</span> <span style="color: navy;">void</span> <span style="color: maroon;">Can_add_elephants_to_the_zoo</span>()</p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: #a65300;">Zoo</span> <span style="color: maroon;">zoo</span> = <span style="color: navy;">new</span> <span style="color: #a65300;">Zoo</span>();</p>
<p style="margin:0;"><span style="color: maroon;">zoo</span>.<span style="color: maroon;">AddAnimal</span>(<span style="color: navy;">new</span> <span style="color: #a65300;">Elephant</span>());</p>
<p style="margin:0;"></p>
<p style="margin:0;"><span style="color: navy;">int</span> <span style="color: maroon;">animalCounter</span> = <span style="background:#e6ffff none repeat scroll 0 50%;">0</span>;</p>
<p style="margin:0;"><span style="color: navy;">foreach</span> (<span style="color: #a65300;">IAnimal</span> <span style="color: maroon;">animal</span> <span style="color: navy;">in</span> <span style="color: maroon;">zoo</span>.<span style="color: maroon;">Animals</span>)</p>
<p style="margin:0;"><span style="color: maroon;">animalCounter</span>++;</p>
<p style="margin:0;"></p>
<p style="margin:0;"><span style="color: #a65300;">Assert</span>.<span style="color: maroon;">AreEqual</span>(<span style="background:#e6ffff none repeat scroll 0 50%;">1</span>, <span style="color: maroon;">animalCounter</span>);</p>
<p style="margin:0;">}</p>
<p style="margin:0;"></p>
<p style="margin:0;">[<span style="color: maroon;">Test</span>]</p>
<p style="margin:0;"><span style="color: navy;">public</span> <span style="color: navy;">void</span> <span style="color: maroon;">Can_add_zebras_to_the_zoo</span>()</p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: #a65300;">Zoo</span> <span style="color: maroon;">zoo</span> = <span style="color: navy;">new</span> <span style="color: #a65300;">Zoo</span>();</p>
<p style="margin:0;"><span style="color: maroon;">zoo</span>.<span style="color: maroon;">AddAnimal</span>(<span style="color: navy;">new</span> <span style="color: #a65300;">Zebra</span>());</p>
<p style="margin:0;"></p>
<p style="margin:0;"><span style="color: navy;">int</span> <span style="color: maroon;">animalCounter</span> = <span style="background:#e6ffff none repeat scroll 0 50%;">0</span>;</p>
<p style="margin:0;"><span style="color: navy;">foreach</span> (<span style="color: #a65300;">IAnimal</span> <span style="color: maroon;">animal</span> <span style="color: navy;">in</span> <span style="color: maroon;">zoo</span>.<span style="color: maroon;">Animals</span>)</p>
<p style="margin:0;"><span style="color: maroon;">animalCounter</span>++;</p>
<p style="margin:0;"></p>
<p style="margin:0;"><span style="color: #a65300;">Assert</span>.<span style="color: maroon;">AreEqual</span>(<span style="background:#e6ffff none repeat scroll 0 50%;">1</span>, <span style="color: maroon;">animalCounter</span>);</p>
<p style="margin:0;">}</p>
<p style="margin:0;"></p>
<p style="margin:0;">[<span style="color: maroon;">Test</span>]</p>
<p style="margin:0;"><span style="color: navy;">public</span> <span style="color: navy;">void</span> <span style="color: maroon;">Can_get_just_the_zebras_out_of_the_zoo</span>()</p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: #a65300;">Zoo</span> <span style="color: maroon;">zoo</span> = <span style="color: navy;">new</span> <span style="color: #a65300;">Zoo</span>();</p>
<p style="margin:0;"><span style="color: maroon;">zoo</span>.<span style="color: maroon;">AddAnimal</span>(<span style="color: navy;">new</span> <span style="color: #a65300;">Zebra</span>());</p>
<p style="margin:0;"><span style="color: maroon;">zoo</span>.<span style="color: maroon;">AddAnimal</span>(<span style="color: navy;">new</span> <span style="color: #a65300;">Elephant</span>());</p>
<p style="margin:0;"></p>
<p style="margin:0;"><span style="color: navy;">foreach</span> (<span style="color: #a65300;">Zebra</span> <span style="color: maroon;">zebra</span> <span style="color: navy;">in</span> <span style="color: maroon;">zoo</span>.<span style="color: maroon;">AnimalsList</span>&lt;<span style="color: #a65300;">Zebra</span>&gt;())</p>
<p style="margin:0;"><span style="color: #a65300;">Assert</span>.<span style="color: maroon;">IsTrue</span>(<span style="color: maroon;">zebra</span> <span style="color: navy;">is</span> <span style="color: #a65300;">Zebra</span>);</p>
<p style="margin:0;">}</p>
<p style="margin:0;"></p>
<p style="margin:0;">[<span style="color: maroon;">Test</span>]</p>
<p style="margin:0;"><span style="color: navy;">public</span> <span style="color: navy;">void</span> <span style="color: maroon;">Can_get_just_the_elephants_out_of_the_zoo</span>()</p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: #a65300;">Zoo</span> <span style="color: maroon;">zoo</span> = <span style="color: navy;">new</span> <span style="color: #a65300;">Zoo</span>();</p>
<p style="margin:0;"><span style="color: maroon;">zoo</span>.<span style="color: maroon;">AddAnimal</span>(<span style="color: navy;">new</span> <span style="color: #a65300;">Zebra</span>());</p>
<p style="margin:0;"><span style="color: maroon;">zoo</span>.<span style="color: maroon;">AddAnimal</span>(<span style="color: navy;">new</span> <span style="color: #a65300;">Elephant</span>());</p>
<p style="margin:0;"></p>
<p style="margin:0;"><span style="color: navy;">foreach</span> (<span style="color: #a65300;">Elephant</span> <span style="color: maroon;">elephant</span> <span style="color: navy;">in</span> <span style="color: maroon;">zoo</span>.<span style="color: maroon;">AnimalsList</span>&lt;<span style="color: #a65300;">Elephant</span>&gt;())</p>
<p style="margin:0;"><span style="color: #a65300;">Assert</span>.<span style="color: maroon;">IsTrue</span>(<span style="color: maroon;">elephant</span> <span style="color: navy;">is</span> <span style="color: #a65300;">Elephant</span>);</p>
<p style="margin:0;">}</p>
<p style="margin:0;"></p>
<p style="margin:0;">[<span style="color: maroon;">Test</span>]</p>
<p style="margin:0;"><span style="color: navy;">public</span> <span style="color: navy;">void</span> <span style="color: maroon;">Can_get_just_the_elephants_out_of_the_zoo_using_predicate</span>()</p>
<p style="margin:0;">{</p>
<p style="margin:0;"><span style="color: #a65300;">Zoo</span> <span style="color: maroon;">zoo</span> = <span style="color: navy;">new</span> <span style="color: #a65300;">Zoo</span>();</p>
<p style="margin:0;"><span style="color: maroon;">zoo</span>.<span style="color: maroon;">AddAnimal</span>(<span style="color: navy;">new</span> <span style="color: #a65300;">Zebra</span>());</p>
<p style="margin:0;"><span style="color: maroon;">zoo</span>.<span style="color: maroon;">AddAnimal</span>(<span style="color: navy;">new</span> <span style="color: #a65300;">Elephant</span>());</p>
<p style="margin:0;"></p>
<p style="margin:0;"><span style="color: navy;">foreach</span> (<span style="color: #a65300;">Elephant</span> <span style="color: maroon;">elephant</span> <span style="color: navy;">in</span> <span style="color: maroon;">zoo</span>.<span style="color: maroon;">AnimalList</span>(<span style="color: maroon;">IsElephant</span>))</p>
<p style="margin:0;"><span style="color: #a65300;">Assert</span>.<span style="color: maroon;">IsTrue</span>(<span style="color: maroon;">elephant</span> <span style="color: navy;">is</span> <span style="color: #a65300;">Elephant</span>);</p>
<p style="margin:0;">}</p>
<p style="margin:0;"></p>
<p style="margin:0;">}</p>
<p style="margin:0;">}</p>

</div>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2008/02/19/multiple-views-redux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vista SP1 &#8211; seeking users</title>
		<link>http://brettveenstra.com/2007/12/04/vista-sp1-seeking-users/</link>
		<comments>http://brettveenstra.com/2007/12/04/vista-sp1-seeking-users/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 15:22:34 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2007/12/04/vista-sp1-seeking-users/</guid>
		<description><![CDATA[I&#8217;m not sure if I&#8217;ll ever run VISTA in this decade&#8230; I haven&#8217;t even played with the beta&#8217;s&#8230; I recommend to friends and family to keep their Windows XP disk around. Why?  There are so many reasons, but maybe one of the biggies might be coming to an end&#8230; Ed Bott of ZD Net is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not sure if I&#8217;ll ever run VISTA in this decade&#8230; I haven&#8217;t even played with the beta&#8217;s&#8230; I recommend to friends and family to keep their Windows XP disk around.</p>

<p>Why?  <a href="http://www.google.com/search?q=reasons+not+to+upgrade+to+Windows+VISTA&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:en-US:official&amp;client=firefox-a">There are so many reasons</a>, but maybe one of the biggies might be coming to an end&#8230;<span id="more-171"></span></p>

<p><a href="http://blogs.zdnet.com/Bott/wp-trackback.php?p=334">Ed Bott of ZD Net is reporting that Service Pack 1 (SP1) of VISTA next year will not include the &#8220;kill switch&#8221;.</a> You knew this one right?  If you do not activate VISTA in time, some functionality stops working&#8230; this gets more interesting if you&#8217;re not connected to the &#8216;net or experience a <a href="http://blogs.zdnet.com/Bott/wp-trackback.php?p=221">glitch</a>.<a href="http://blogs.zdnet.com/Bott/wp-trackback.php?p=334">
</a></p>

<p>I don&#8217;t know how much more evidence one might need to conclude that Microsoft&#8217;s latest operating system is not really hitting it&#8217;s mark, <a href="http://seventhheavens.wordpress.com/2006/11/30/analyst-vista-shipments-to-top-90-million-worldwide-in-2007/">regardless of the hype otherwise</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2007/12/04/vista-sp1-seeking-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Storage in the cloud &#8211; JungleDisk.com</title>
		<link>http://brettveenstra.com/2007/11/09/storage-in-the-cloud-junglediskcom/</link>
		<comments>http://brettveenstra.com/2007/11/09/storage-in-the-cloud-junglediskcom/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 05:16:30 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2007/11/09/storage-in-the-cloud-junglediskcom/</guid>
		<description><![CDATA[These are exciting times and another idea turned gold is Jungle Disk. A cross-platform Amazon S3 interface for remote storage. They setup a WebDAV service on your machine that runs their bits to encrypt and transmit your files up to Amazon&#8217;s S3 service. Never heard of S3? Neither had I until visiting the Day of [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Photo Sharing" href="http://www.flickr.com/photos/brettveenstra/1394465957/"><img src="http://farm2.static.flickr.com/1014/1394465957_e30d421a75_m.jpg" alt="20070901-IMG_0598.jpg" width="240" height="160" align="left" /></a>These are exciting times and another idea turned gold is <a href="http://jungledisk.com">Jungle Disk</a>.  A cross-platform Amazon S3 interface for remote storage. They setup a WebDAV service on your machine that runs their bits to encrypt and transmit your files up to Amazon&#8217;s S3 service.</p>

<p>Never heard of S3?  Neither had I<span id="more-170"></span> until visiting the <a href="http://www.dayofdotnet.org/AnnArbor/Fall2007/Sessions.aspx">Day of .NET in Arbor</a> this past October.  I happened to catch the tail end of Joe Klunk&#8217;s &#8220;<a class="sessionname" title="8" name="8"></a>Storage (and more) in the Cloud&#8221; session.  He built a quick .NET application to push files up to <a href="http://www.amazon.com/gp/browse.html?node=16427261">Amazon&#8217;s Simple Storage Service</a> (S3).  Now that wasn&#8217;t mind blowing as I had done WebDAV operations back in the heady days of ASP, &#8220;classic&#8221;.  What <strong>was</strong> mind blowing was the price for storage: $0.15 USD, per month, per <strong>GIG-</strong><strong>a-byte</strong>.</p>

<p>Now the folks at JungleDisk has just made a program that even our mother&#8217;s can use to properly backup their systems.  It&#8217;s a great connected world!</p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2007/11/09/storage-in-the-cloud-junglediskcom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit Testing in SQL Server &#8211; Overview</title>
		<link>http://brettveenstra.com/2007/10/31/unit-testing-in-sql-server-overview/</link>
		<comments>http://brettveenstra.com/2007/10/31/unit-testing-in-sql-server-overview/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 22:47:10 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2007/10/31/unit-testing-in-sql-server-overview/</guid>
		<description><![CDATA[Ok, so here&#8217;s the first in a series of a home grown implementation of Unit Testing SQL server code. I&#8217;m not talking about using Visual Studio Team Edition for Professionals, like Jeff recommends&#8230; but I&#8217;ll try to provide a general approach to testing your SQL code, particularly stored procedures (sprocs). In SQL processing, we have [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so here&#8217;s the first in a series of a home grown implementation of Unit Testing SQL server code.</p>

<p>I&#8217;m not talking about using <a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718807.aspx">Visual Studio Team Edition for Professionals</a>, like <a href="http://www.codinghorror.com/blog/archives/000743.html">Jeff recommends</a>&#8230; but I&#8217;ll try to provide a general approach to testing your SQL code, particularly stored procedures (sprocs).<span id="more-169"></span></p>

<p>In SQL processing, we have our classic <a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete">CRUD operations</a>, and those operations are impacted by combinations of <strong>existing data</strong> elsewhere in other columns, tables, databases, or servers.  This is the single biggest challenge in the test as I see it.</p>

<p>Admittedly, I&#8217;m making the most of my current database architecture in this solution, and yet, I am having trouble imaging this not being a universal approach.</p>

<p>In my application to test, we are essentially a high-calculation, low-user interface SQL business engine.  The calculations are all done in sprocs and they have been broken down into &#8220;blocks&#8221; of results.  That is, Calculation B, will possibly take data results of Calculation A.</p>

<p>So here&#8217;s a basic diagram of this setup:</p>

<p style="text-align:center;"><a title="Photo Sharing" href="http://www.flickr.com/photos/brettveenstra/1814789859/">
<img src="http://farm3.static.flickr.com/2232/1814789859_8026282ac0.jpg" alt="Testing SQL DBs" width="500" height="257" /></a>

This approach allows a myriad of unit testing possibilities, but here&#8217;s my general approach.

Using <a href="http://nunit.org/">NUnit</a>, each Calculation would have it&#8217;s own <code>TestFixture </code> and the <code>TestFixtureSetup</code> would execute the sproc.  The <code>TestFixtureSetup</code> would also retrieve any external data that the calculation would need into member variables for the fixture.

Then, each of the Test&#8217;s would look into any external data, WIP table(s) and final Calc table(s) to determine if it passed or not.

This is my first toe in the TDD pond for SQL applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2007/10/31/unit-testing-in-sql-server-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TDD &#8211; A Workout Promise</title>
		<link>http://brettveenstra.com/2007/10/30/tdd-a-workout-promise/</link>
		<comments>http://brettveenstra.com/2007/10/30/tdd-a-workout-promise/#comments</comments>
		<pubDate>Tue, 30 Oct 2007 20:22:39 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2007/10/30/tdd-a-workout-promise/</guid>
		<description><![CDATA[Ok&#8230; I&#8217;ve had enough. Uncle Bob nailed it: Why don’t we clean our code? When we see an ugly mass of code that we know is going to cause of problems, our first reaction is “This needs to be cleaned up.” Our second reaction is: “If I touch this code I’ll be spending the next [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/artofthestate/1053360023/"><img src="http://farm2.static.flickr.com/1039/1053360023_4f568787e4_m.jpg" alt="" width="240" height="109" align="left" /></a>Ok&#8230; I&#8217;ve had enough.  <a href="http://blog.objectmentor.com/articles/2007/10/20/architecture-is-a-second-order-effect">Uncle Bob nailed it</a>:
<cite>Why don’t we clean our code? When we see an ugly mass of code that we know is going to cause of problems, our first reaction is “This needs to be cleaned up.” Our second reaction is: “If I touch this code I’ll be spending the next two weeks trying to get it to work again.” We don’t clean code because we are afraid we’ll break it.</cite></p>

<p>I promise to<span id="more-168"></span> figure out how to do TDD against my main T-SQL based application.  It is getting too scary to consider changes and that needs to change, <strong>now</strong>.</p>

<p>Tomorrow I&#8217;ll post the results after Day 1.</p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2007/10/30/tdd-a-workout-promise/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 2000 &amp; iTunes 7.x &#8211; Can&#8217;t we all just get along?</title>
		<link>http://brettveenstra.com/2007/10/30/windows-2000-itunes-7x-cant-we-all-just-get-along/</link>
		<comments>http://brettveenstra.com/2007/10/30/windows-2000-itunes-7x-cant-we-all-just-get-along/#comments</comments>
		<pubDate>Tue, 30 Oct 2007 12:59:22 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[iTunes]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2007/10/30/windows-2000-itunes-7x-cant-we-all-just-get-along/</guid>
		<description><![CDATA[From the self-serving, bad memory department&#8230; next time you&#8217;re running Windows 2000 and iTunes 7.x (or later) starts up with a BLACK canvas and outlined text, you need to go get the GDIPLUS redistributable from Microsoft. Now, if I can only convince somebody in corporate that DirectX 9 is required for Excel 2003&#8230; but, until [...]]]></description>
			<content:encoded><![CDATA[<p>From the self-serving, bad memory department&#8230; next time you&#8217;re running Windows 2000 and iTunes 7.x (or later) starts up with a BLACK canvas and outlined text, you need to go get the <a title="GDI+" href="http://www.microsoft.com/downloads/details.aspx?familyid=6A63AB9C-DF12-4D41-933C-BE590FEAA05A&amp;displaylang=en">GDIPLUS redistributable from Microsoft</a>.</p>

<p>Now, if I can only convince somebody in corporate that DirectX 9 is required for Excel 2003&#8230; but, until then, no <a href="http://www.apple.com/itunes/jukebox/coverflow.html">Cover Flow</a>.</p>

<p>Cheers.</p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2007/10/30/windows-2000-itunes-7x-cant-we-all-just-get-along/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 Ways to Fail &amp; Dilbert</title>
		<link>http://brettveenstra.com/2007/10/26/5-ways-to-fail-dilbert/</link>
		<comments>http://brettveenstra.com/2007/10/26/5-ways-to-fail-dilbert/#comments</comments>
		<pubDate>Fri, 26 Oct 2007 13:18:27 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2007/10/26/5-ways-to-fail-dilbert/</guid>
		<description><![CDATA[Joel Spolksy, of Joel On Software fame, published an interesting Inc Magazine article yesterday. The artcile, titled &#8220;How Hard Could It Be?: Five Easy Ways to Fail&#8221;, covers a number of issues that we developers see from our side of a software project. As I was reading this, I started remembering how intimidating Joel&#8217;s words [...]]]></description>
			<content:encoded><![CDATA[<p><a title="PropellerHead" href="http://brettveenstra.com/wp-content/uploads/2007/10/geekpropeller-300.jpg"><img src="http://journeymantomaster.files.wordpress.com/2007/10/geekpropeller-300.thumbnail.jpg" alt="PropellerHead" align="left" /></a>Joel Spolksy, of <a href="http://joelonsoftware.com">Joel On Software</a> fame, published an interesting <a href="http://joelonsoftware.com/items/2007/10/25.html">Inc Magazine article </a>yesterday.  The artcile, titled &#8220;How Hard Could It Be?: Five Easy Ways to Fail&#8221;, covers a number of issues that we developers see from our side of a software project.</p>

<p>As I was reading this, I started remembering how intimidating Joel&#8217;s words can be:</p>

<p><cite>You&#8217;ll never hear anyone say &#8220;the team was just not smart enough or talented enough to pull this off.&#8221; Why hurt their feelings? The simple fact is that if the people on a given project team aren&#8217;t very good at what they do, they&#8217;re going to come into work every day and yet&#8211;behold!&#8211;the software won&#8217;t get created.</cite></p>

<p>I&#8217;m certainly NOT a Master (hence this blog), but just because you don&#8217;t have <a href="http://www.joelonsoftware.com/articles/Unicode.html">unicode decyphering</a>, <a href="http://www.joelonsoftware.com/articles/fog0000000319.html">PDP-7 microprocessor-based</a> C running through your veins does not <span id="more-166"></span>make you a crappy dev.  Nor, can a single person be both an expert in C, OOP, RDBMS, HTTP, Ruby, and .NET.</p>

<p>I <strong>did like the article </strong>though and here&#8217;s why: Joel&#8217;s message was really to business owners and managers, not us technical folks.  He laid out very clearly that having good people do the work they are qualified to do, following a plan, with reasonable deliver-ables, and focused on quality can give you a successful project.  He throws a few punches at Agile methodologies as well, but I would disagree with <a href="http://typicalprogrammer.com/programming/five-mistakes-plus-two/">Greg that Joel doesn&#8217;t actually like Agile</a>, in fact the new <a href="http://www.fogcreek.com/FogBugz/LearnMore.html?section=PredictShipDates">scheduling features of FogBugz 6.0</a> should allow any Agile team to easily maintain their own burndown chart.</p>

<p>And just another example of Scott Adams&#8217; timeliness, <span style="text-decoration: line-through;">here is today&#8217;s Dilbert:</span><a href="http://www.dilbert.com/comics/dilbert/archive/dilbert-20071026.html">check out the Dilbert of the day</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2007/10/26/5-ways-to-fail-dilbert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Play Nice: CodeRush &amp; SQL Prompt</title>
		<link>http://brettveenstra.com/2007/10/22/play-nice-coderush-sql-prompt/</link>
		<comments>http://brettveenstra.com/2007/10/22/play-nice-coderush-sql-prompt/#comments</comments>
		<pubDate>Mon, 22 Oct 2007 15:05:30 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[CodeRush]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[SQLPrompt]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2007/10/22/play-nice-coderush-sql-prompt/</guid>
		<description><![CDATA[It truly is amazing the tools we can get our hands on these days. The two that I have a very bad addiction forcannot code without are CodeRush and SQL Prompt. The only trouble is that when I use SQL Prompt inside Visual Studio to manage my SQL code, CodeRush tries to hijack the &#8220;ESC&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>It truly is amazing the tools we can get our hands on these days.   The two that I <span style="text-decoration: line-through;">have a very bad addiction for</span>cannot code without are <a href="http://www.devexpress.com/Products/NET/IDETools/CodeRush/Index.xml">CodeRush </a>and <a href="https://www.red-gate.com/products/SQL_Prompt/index.htm">SQL Prompt</a>.</p>

<p>The only trouble is<span id="more-163"></span> that when I use SQL Prompt inside Visual Studio to manage my SQL code, CodeRush tries to hijack the &#8220;ESC&#8221; key that SQL Prompt uses to cancel it&#8217;s own &#8220;intellisense&#8221; lists.</p>

<p>While attending the <a href="http://www.dayofdotnet.org/AnnArbor/Fall2007/default.aspx">Day of .Net Fall 2007</a> event on Saturday, I had a chance to bug lead developer on CodeRush <a href="http://diditwith.net/2007/08/01/ItsAllAboutMe.aspx">Dustin Campbell</a> in the middle of his presentation.  Dustin handled me graciously, especially since it was just another &#8220;tech support&#8221; question&#8230; but he didn&#8217;t &#8220;fix me&#8221;.</p>

<p>With Dustin&#8217;s suggestion, I was able to get to the correct place though, thanks Dustin!</p>

<p>Here&#8217;s the solution.</p>

<ol>
    <li>Choose DevExpress &gt; Options</li>
    <li>IDE \ Shortcuts</li>
    <li>DXCore \ Support</li>
    <li>Esc (MarkerCollect command)</li>
    <li>Choose only the Languages that ESC should collect the markers on (my case: C#, VB, XML/HTML, C++)</li>
</ol>

<p>Here&#8217;s what it looks like when you&#8217;re done.
<a title="Photo Sharing" href="http://www.flickr.com/photos/brettveenstra/1692075362/"><img src="http://farm3.static.flickr.com/2400/1692075362_d17c0ef298.jpg" alt="CodeRushSQLPromptPlayNice" width="500" height="354" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2007/10/22/play-nice-coderush-sql-prompt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile &#8211; Don&#8217;t build for tomorrow&#8230;</title>
		<link>http://brettveenstra.com/2007/10/12/agile-dont-build-for-tomorrow/</link>
		<comments>http://brettveenstra.com/2007/10/12/agile-dont-build-for-tomorrow/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 20:02:41 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2007/10/12/agile-dont-build-for-tomorrow/</guid>
		<description><![CDATA[I&#8217;m late to the Agile party, I know&#8230; but I cannot help but keep seeing many failures and shortcomings of the past being accepted, welcomed, and then addressed in the Agile space. How many times have you busted your head open trying to estimate a requirement of something completely unknown? How about spending that extra [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m late to the Agile party, I know&#8230; but I cannot help but keep seeing many failures and shortcomings of the past being accepted, welcomed, and then addressed in the Agile space.</p>

<p>How many times have you busted your head open trying to estimate a requirement of something completely unknown?   How about spending that extra time (late night/weekend) building in some &#8220;cushion&#8221; on a function that you could imagine being requested in the next month? How many times have you seen the same good estimate track perfectly until it meets the reality of dependencies inside the product or is the next episode of &#8220;The Customer Tweak of the Week&#8221;?!</p>

<p>Well, wake up, you&#8217;re in waterfall land and hardly anyone actually works by that discipline.  <span id="more-162"></span>We may <strong>say</strong> we do waterfall, but have you ever told your customer <strong>NO</strong> for each and every request once the project was underway?  Probably not&#8230;</p>

<p>If you were merciful like the rest of us, you were being adaptive.</p>

<p>James Short <a href="http://www.jamesshore.com/Presentations/Beyond%20Story%20Cards.html">wrote up an article on some of his mentoring of XP</a>, but the part I really enjoyed was the realistic approach Agile takes: put off a decision until the &#8220;last responsible moment&#8221; so that you have as much of the information and as little assumption going into your decision.  The decision in this case means to write up a specification.</p>

<p>In the same vein, you need to also remember to only spec for the present, instead of trying to build up a super infrastructure for all possible scenarios of the feature you&#8217;re implementing at the moment.  We need to trust, no rely, on a metholody (TDD + Refactoring) that will flush out design inefficiencies and let us go back and put those in when they are finally needed.  Again, do not built today something that isn&#8217;t needed <strong>today</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2007/10/12/agile-dont-build-for-tomorrow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Venn Diagrams explain SQL Joins Perfectly</title>
		<link>http://brettveenstra.com/2007/10/12/venn-diagrams-explain-sql-joins-perfectly/</link>
		<comments>http://brettveenstra.com/2007/10/12/venn-diagrams-explain-sql-joins-perfectly/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 13:53:35 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2007/10/12/venn-diagrams-explain-sql-joins-perfectly/</guid>
		<description><![CDATA[In a series of posts on both Coding Horror and the linked Me Talking Out Loud, comments have arisen that suggest Venn diagrams are insufficient to properly represent SQL Joins. I totally disagree, Venn diagrams fit perfectly. The biggest problem is that people creating the diagram assume that the Table is one of the sets. [...]]]></description>
			<content:encoded><![CDATA[<p>In a series of posts on both <a href="http://www.codinghorror.com/blog/archives/000976.html">Coding Horror</a> and the linked <a href="http://www.khankennels.com/blog/index.php/archives/2007/04/20/getting-joins">Me Talking Out Loud</a>, comments have arisen that suggest Venn diagrams are insufficient to properly represent SQL Joins.</p>

<p>I totally disagree, Venn diagrams fit perfectly.  The biggest problem is <span id="more-161"></span>that people creating the diagram assume that the Table is one of the sets.  This is apparently the problem again with Jeff&#8217;s and Ligaya&#8217;s diagrams.</p>

<p>Here&#8217;s one of Jeff&#8217;s awesome images:</p>

<p style="text-align:center;"><img src="http://www.codinghorror.com/blog/images/join-inner.png" alt="" height="120" /></p>

<p>We’ve seen this as the classical starting point to explain joins in relational databases.  Once you get over the mechanics of what the JOIN operations do, you need to abandon this thinking quickly and focus on just what are those sets, otherwise you keep thinking about tables, not conditions.</p>

<p>For instance, how are these SQL statements different?</p>

<pre><span style="color: #008000;">SELECT *
FROM customer
INNER JOIN order ON order.id = customer.id
WHERE
    order.total &gt; 100</span></pre>

<pre><span style="color: #008000;">SELECT *
FROM customer
INNER JOIN order ON order.id = customer.id
    AND order.total &gt; 100</span></pre>

<p>They aren&#8217;t.  In a Venn Diagram, this could be represented as:</p>

<p style="text-align:center;" align="center"><!--[if gte vml 1]&amp;gt;   &amp;lt;![endif]--><!--[if !vml]--><img src="http://farm3.static.flickr.com/2087/1551734559_69b3fe3f2c.jpg?v=0" alt="" width="500" height="296" /><!--[endif]--></p>

<h3>Next time you’re working up some SQL code, start first with what you are trying to get, and then focus on how to they relate with a JOIN.</h3>

<p>What about the CROSS JOIN you say?  Instead of this (from Ligaya):</p>

<p style="text-align:center;" align="center"><!--[if gte vml 1]&amp;gt;   &amp;lt;![endif]--><!--[if !vml]--><img src="http://www.khankennels.com/blog/wp-content/uploads/2007/04/thetavenn.png" alt="" width="300" height="188" align="middle" /><!--[endif]--></p>

<p>Draw a <strong>large </strong>circle with the product of the areas of your original sets…  <img src='http://brettveenstra.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2007/10/12/venn-diagrams-explain-sql-joins-perfectly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NAnt &#8211; really?</title>
		<link>http://brettveenstra.com/2007/10/09/nant-really/</link>
		<comments>http://brettveenstra.com/2007/10/09/nant-really/#comments</comments>
		<pubDate>Tue, 09 Oct 2007 20:37:01 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Nant]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2007/10/09/nant-really/</guid>
		<description><![CDATA[So I&#8217;m looking at taking JPB&#8217;s advice on a Visual Studio project setup and his reference to using NAnt for his normal builds &#8211; even small projects. I&#8217;ve seen reference to NAnt for years now and am still having trouble thinking this is just overkill for a &#8220;small&#8221; standard project. I&#8217;m running a VS2005 project [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;m looking at taking <a title="CodeBetter.Com - Directory Structure for Projects" href="http://codebetter.com/blogs/jean-paul_boodhoo/archive/2007/10/01/directory-structure-for-projects.aspx">JPB&#8217;s advice on a Visual Studio project setup</a> and his reference to using NAnt for his normal builds<span style="text-decoration: line-through;"> &#8211; even small projects</span>.  I&#8217;ve seen reference to NAnt for years now and am still having trouble thinking this is just overkill for a &#8220;small&#8221; standard project.<span id="more-160"></span></p>

<p><!-- more -->I&#8217;m running a VS2005 project with 8 projects and my compile only takes 3 minutes.  I know people have claimed <a title="Gray's Matter - How Did I Ever Live Without NANT" href="http://graysmatter.codivation.com/HowDidIEverLiveWithoutNANT.aspx"><strong>orders of magnitude</strong></a> of build time improvement, but it still seems strange to go through the hassle of creating and maintaining XML when I decide I need to breakout the project into another assembly&#8230;  if this were going the way of Continuous Integration, I could see the benefits there, but would the .build file have to be different on the CI server (e.g.  SVN Update, clean, test targets).</p>

<p>What am I missing for the small development project?</p>

<p><strong>Update: My apologies to JPB on the assumption he suggested all projects run NAnt.  I&#8217;m still curious, is it overkill to use NAnt, Rake, etc for compiling a solution with less than 20 projects / 10,000 lines of code?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2007/10/09/nant-really/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Better Developer  &#8211; Open Source Project</title>
		<link>http://brettveenstra.com/2007/09/25/a-better-developer-open-source-project/</link>
		<comments>http://brettveenstra.com/2007/09/25/a-better-developer-open-source-project/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 13:34:15 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2007/09/25/a-better-developer-open-source-project/</guid>
		<description><![CDATA[Forgive the total stream of consciousness&#8230; In the continuum of craftsmanship (and to keep fully immersed in &#8220;pure&#8221; product development skills), I need to create a new software project. Ideas so far: Worship Software &#8211; cool graphics, rock-solid stability, simplified use, connected, multiple outputs, multiple inputs, cross-platform (QuickTime?/SilverLight?) Web-Based Church Management Software &#8211; centered around [...]]]></description>
			<content:encoded><![CDATA[<p>Forgive the total stream of consciousness&#8230;</p>

<p>In the continuum of craftsmanship (and to keep fully immersed in &#8220;pure&#8221; product development skills), I need to create a new software project.<span id="more-159"></span></p>

<p>Ideas so far:</p>

<ul>
    <li>Worship Software &#8211; cool graphics, rock-solid stability, simplified use, connected, multiple outputs, multiple inputs, cross-platform (QuickTime?/SilverLight?)</li>
    <li>Web-Based Church Management Software &#8211; centered around connectedness</li>
    <li>&#8220;Zero Config&#8221; Grid Rendering</li>
    <li>Web-Based File Manager &#8211; organizer, ratings, tags, duplicate checker, compression/de-compression built in</li>
</ul>

<p>Methodologies:</p>

<ul>
    <li>Test Driven Development</li>
    <li>Objects drive the data layer (if exists)</li>
    <li>Continuous Integration</li>
</ul>

<p>Preferences:</p>

<ul>
    <li>Web over WinForms</li>
    <li>.NET over Ruby/PHP</li>
    <li>Quality over Timeliness</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2007/09/25/a-better-developer-open-source-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtualization 101</title>
		<link>http://brettveenstra.com/2006/08/23/virtualization-101/</link>
		<comments>http://brettveenstra.com/2006/08/23/virtualization-101/#comments</comments>
		<pubDate>Wed, 23 Aug 2006 02:15:00 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[Virtualization]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2006/08/23/virtualization-101/</guid>
		<description><![CDATA[Ok, this is for all you programmers out there that don&#8217;t always get to rub elbows with the Ops guys&#8230; VMWare offers free Virtualization. You may have used VMWare Workstation in the past, but what is special is VMWare Server. This blew my mind over the weekend: Install VMWare Server running on Windows 2000 Server [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, this is for all you programmers out there that don&#8217;t always get to rub elbows with the Ops guys&#8230;</p>

<p><a href="http://www.vmware.com/products/free_virtualization.html">VMWare offers free Virtualization</a>.  You may have used VMWare Workstation in the past, but what is special is VMWare Server.</p>

<p>This blew my mind over the weekend:</p>

<ol>
    <li>Install VMWare Server running on Windows 2000 Server (a Linux version also is free).</li>
    <li>Download one of the many pre-made VMWare Images (<a href="http://www.vmware.com/vmtn/appliances/">Virtual Appliances</a>) and save it on the on the local drive (I choose <a href="http://www.vmware.com/vmtn/appliances/directory/189">UltimateLAMP</a> to have something up and running easy)</li>
    <li>Install VMWare Client Tools on any PC on my network.</li>
    <li>CONNECT and/or START the VMWare Image over the network.</li>
</ol>

<p>Did you catch the difference?  VMWare Workstation starts the Virtual machine, VMWare Server lets you control Virtual machines <span style="font-weight:bold;">over the wire</span>!</p>

<p>Yeah, this has been around awhile, but that&#8217;s both the fun and fear of technology &#8211; you just can&#8217;t get exposure to it all!</p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2006/08/23/virtualization-101/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Strict Types, good thing</title>
		<link>http://brettveenstra.com/2006/08/11/strict-types-good-thing/</link>
		<comments>http://brettveenstra.com/2006/08/11/strict-types-good-thing/#comments</comments>
		<pubDate>Fri, 11 Aug 2006 11:52:00 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2006/08/11/strict-types-good-thing/</guid>
		<description><![CDATA[Ok, so C# transformation of an existing VB.NET project isn&#8217;t quite as &#8220;smooth&#8221; as I would like, but it brings benefits of drilling in the whole &#8220;;&#8221; syntax. Also what comes to a screaming head is the fact that in VB.NET you can get away with a lot under &#8220;normal&#8221; circumstances. You know, the one [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so C# transformation of an existing VB.NET project isn&#8217;t quite as &#8220;smooth&#8221; as I would like, but it brings benefits of drilling in the whole &#8220;;&#8221; syntax.</p>

<p>Also what comes to a screaming head is the fact that in VB.NET you can get away with a lot under &#8220;normal&#8221; circumstances.  You know, the one where you don&#8217;t declare &#8220;Option Strict On&#8221;.  So porting to C#, the compiler conditionally complains of things like:
Cannot implicitly convert type &#8216;int&#8217; to &#8216;string&#8217;</p>

<p>Currently, I&#8217;m telling it what to do:</p>

<pre>foo.ToString();</pre>

<p>Specifically telling computers what to do is an inherently good thing for programmers.  Especially if you&#8217;re a control freak like me.  Another &#8220;good thing&#8221; &#8211; touch-typing.</p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2006/08/11/strict-types-good-thing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>NTLM in Firefox</title>
		<link>http://brettveenstra.com/2006/05/18/ntlm-in-firefox/</link>
		<comments>http://brettveenstra.com/2006/05/18/ntlm-in-firefox/#comments</comments>
		<pubDate>Thu, 18 May 2006 17:53:00 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2006/05/18/ntlm-in-firefox/</guid>
		<description><![CDATA[I mean I loved Firefox before this, but as is the case in the technology field, you sometimes miss great stuff! Have a windows box that you want to do NTLM against in Firefox? Try this out! Type &#8220;about:config&#8221; in your FireFox Address Bar Edit the value for &#8220;network.automatic-ntlm-auth.trusted-uris&#8221; Add a comma separated list of [...]]]></description>
			<content:encoded><![CDATA[<p>I mean I loved Firefox before this, but as is the case in the technology field, you sometimes miss great stuff!</p>

<p>Have a windows box that you want to do NTLM against in Firefox?  Try this out!</p>

<ol>
    <li>Type &#8220;about:config&#8221; in your FireFox Address Bar</li>
    <li>Edit the value for &#8220;network.automatic-ntlm-auth.trusted-uris&#8221;</li>
    <li>Add a comma separated list of values for the servers you want to NTLM against.  For example (&#8220;localhost, us.mycompany.com&#8221;)</li>
</ol>

<p>Just plain nuts.  <strong>My last reason for using IE just vanished.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://brettveenstra.com/2006/05/18/ntlm-in-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
