<?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>Journeyman to Master&#187; Programmer</title>
	<atom:link href="http://programmer.brettveenstra.com/category/programmer/feed/" rel="self" type="application/rss+xml" />
	<link>http://programmer.brettveenstra.com</link>
	<description>One Programmer, on the Journey</description>
	<lastBuildDate>Wed, 28 Jul 2010 20:46:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Monkey Patching: Find all files in a folder with Ruby</title>
		<link>http://programmer.brettveenstra.com/2010/07/28/monkey-patching-find-all-files-in-a-folder-with-ruby/</link>
		<comments>http://programmer.brettveenstra.com/2010/07/28/monkey-patching-find-all-files-in-a-folder-with-ruby/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 20:43:48 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[monkeypatch]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=335</guid>
		<description><![CDATA[Find files in a directory via Ruby]]></description>
			<content:encoded><![CDATA[<p>Here is an extension to Ruby&#8217;s File class to allow you to search for all files below a specific folder.</p>

<pre><code>  class File 
    begin
      def self.find(dir, filename="*.*", subdirs=true) 
        Dir[ subdirs ? File.join(dir.split(/\\/), "**", filename) : File.join(dir.split(/\\/), filename)  ].select { |x| File.file?(x) } 
      end
    end
  end
</code></pre>

<p>Ruby is amazing that you can Monkey Patch code.  Having just started with Ruby <abbr class="datetime" title="2010-07-27">yesterday</abbr>, and I&#8217;m sure I&#8217;ll find a better to do this in the future, but for now, this is the best I have.  This started from <a href="http://snippets.dzone.com/posts/show/5457">a simple script</a>.  Notice the little juice at the end that only returns &#8220;real files&#8221; according to the <a href="http://ruby-doc.org/core/classes/File.html">File API</a>, now it behaves nicely.</p>

<p><code>sqlfiles = File.find(Dir.pwd, "*.sql")</code></p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2010/07/28/monkey-patching-find-all-files-in-a-folder-with-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bootstrapping Goodness</title>
		<link>http://programmer.brettveenstra.com/2010/07/19/bootstrapping-goodness/</link>
		<comments>http://programmer.brettveenstra.com/2010/07/19/bootstrapping-goodness/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 13:06:50 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=336</guid>
		<description><![CDATA[Here&#8217;s some code from the BootStrapper that I&#8217;ve been rather happy with building WinForms apps lately: public ApplicationContext Initialize() { this.container.Configure(c =&#62; c.AddRegistry&#60;SomeStructureMapRegistry&#62;()); this.container.Inject(this.container); ApplicationSettings settings = new AppSettingsParser().Parse(this.appSettings); this.container.Inject(settings); this.attachErrorHandling(); var context = this.container.GetInstance&#60;AppContext&#62;(); return context; } Of course, you use it something like this: private static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new BootStrapper(ConfigurationManager.AppSettings, [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s some code from the <code>BootStrapper</code> that I&#8217;ve been rather happy with building WinForms apps lately:</p>

<p><code>
        public ApplicationContext Initialize()
        {</p>

<pre><code>        this.container.Configure(c =&gt; c.AddRegistry&lt;SomeStructureMapRegistry&gt;());
        this.container.Inject(this.container);

        ApplicationSettings settings = new AppSettingsParser().Parse(this.appSettings);
        this.container.Inject(settings);

        this.attachErrorHandling();

        var context = this.container.GetInstance&lt;AppContext&gt;();
        return context;
    }
</code></pre>

<p></code></p>

<p>Of course, you use it something like this:</p>

<p><code>
        private static void Main()
        {</p>

<pre><code>        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Application.Run(new BootStrapper(ConfigurationManager.AppSettings, new Container()).Initialize());
    }
</code></pre>

<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2010/07/19/bootstrapping-goodness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running KeePass 2.x on OSX using macpack</title>
		<link>http://programmer.brettveenstra.com/2010/03/20/running-keepass-2-x-on-osx-using-macpack/</link>
		<comments>http://programmer.brettveenstra.com/2010/03/20/running-keepass-2-x-on-osx-using-macpack/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 11:01:33 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[keepass]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=320</guid>
		<description><![CDATA[Last year, I finally declared password bankruptcy and found a password manager that: would integrate with FireFox, or at least import existing passwords is open source (security programs that cannot demonstrate how they are safeguarding your info should not be trusted) is cross-platform capable (WinXP, Win7, OSX, Linux) Fortunately, I found KeePass. It can run [...]]]></description>
			<content:encoded><![CDATA[<p>Last year, I finally declared password bankruptcy and found a password manager that:</p>

<ul>
<li>would integrate with FireFox, or at least import existing passwords</li>
<li>is open source (security programs that cannot demonstrate how they are safeguarding your info should not be trusted)</li>
<li>is cross-platform capable (WinXP, Win7, OSX, Linux)</li>
</ul>

<p>Fortunately, I found <a href="http://www.keepass.info">KeePass</a>.  It can run using Mono under OSX, but it can be a hassle to run.  The default way of doing that is:</p>

<ul>
<li>Open Terminal and navigate to KeePass directory</li>
<li>Typing: <code>mono KeePass.exe</code></li>
</ul>

<p>We can do this:</p>

<ul>
<li>Install <a href="http://www.go-mono.com/mono-downloads/download.html">Mono Framework</a></li>
<li>Download latest version of KeePass 2.x and unpack it</li>
<li>Open Terminal and navigate to unpacked KeePass folder</li>
<li><p>Run the following command:</p>

<p><code>macpack -o:. -m:winforms -r:/Library/Frameworks/Mono.framework/Versions/Current/lib/ libCocoaSharpGlue.dylib -r:KeePass.chm -r:KeePass.XmlSerializers.dll -r:KeePassLibC32.dll -r:KeePassLibC64.dll -r:License.txt -r:ShinstUtil.exe -r:./XSL -n:KeePass -a:KeePass.exe</code></p></li>
</ul>

<p>This will create a KeePass.app file that you can drag into your <code>\Applications</code> folder, and you should be all set.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2010/03/20/running-keepass-2-x-on-osx-using-macpack/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Mercurial on Windows Tip: Global Ignore File</title>
		<link>http://programmer.brettveenstra.com/2010/02/27/mercurial-on-windows-tip-global-ignore-file/</link>
		<comments>http://programmer.brettveenstra.com/2010/02/27/mercurial-on-windows-tip-global-ignore-file/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 16:54:43 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=314</guid>
		<description><![CDATA[If you&#8217;re using TortoiseHg, (if you&#8217;re not, you should stop reading now to go install it), your default installation should put your Mercurial.ini file in your %userprofile% folder. Make your [ui] section edits to point to a file (name is up to you): [ui] ... ignore = %userprofile%\.hgignore ... Finally, make sure you have an [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re using <a href="http://tortoisehg.bitbucket.org/">TortoiseHg</a>, (if you&#8217;re not, you should stop reading now to go install it), your default installation should put your <code>Mercurial.ini</code> file in your <code>%userprofile%</code> folder.</p>

<p>Make your <code>[ui]</code> section edits to point to a file (name is up to you):</p>

<pre><code>[ui]
...
ignore = %userprofile%\.hgignore
...
</code></pre>

<p>Finally, make sure you have an <code>.hgignore</code> compatible file.  This is what I&#8217;m using right now:</p>

<pre><code>syntax: glob
*.o
*.lo
*.la
#*#
.*.rej
*.rej
.*~
*~
.#*
.DS_Store
*.suo
*.user
*.webinfo
[Bb]in
*/[Bb]in
[Oo]bj
*/[Oo]bj
*.[Bb][Aa][Kk]
*.~??
*[Tt][Mm][Pp]
_vti_txt
*/_vti_txt
_vti_script
*/_vti_script
_vti_pvt
*/_vti_pvt
_vti_cnf
*/_vti_cnf
_private
*/_private
.~*
*.~*
[Rr]elease
*/[Rr]elease
[Dd]ebug
*/[Dd]ebug
[Aa]nkh.[Ll]oad
*/_ReSharper*
_ReSharper*
*resharper*
*.Cache
*.StyleCop
*.ReSharper
obj/
bin/
*.ncb
*.suo
_ReSharper.*
*.resharper.user
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2010/02/27/mercurial-on-windows-tip-global-ignore-file/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>NDepend Use Case &#8211; Find Childless Interfaces (TDD Helper)</title>
		<link>http://programmer.brettveenstra.com/2010/01/21/ndepend-use-case-find-childless-interfaces-tdd-helper/</link>
		<comments>http://programmer.brettveenstra.com/2010/01/21/ndepend-use-case-find-childless-interfaces-tdd-helper/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 15:03:54 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[NDepend]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=303</guid>
		<description><![CDATA[When using TDD, especially with utilities such as StuctureMap&#8217;s RhinoAutoMocker I tend to end up with some &#8220;childless&#8221; interfaces. Granted, this could just mean I&#8217;m a crappy OO designer, but I like to think it&#8217;s more from hammering out the design as I&#8217;m working on the problem! So, I might have a code base that [...]]]></description>
			<content:encoded><![CDATA[<p>When using <a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a>, especially with utilities such as <a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/02/09/automocker-in-structuremap-2-5.aspx">StuctureMap&#8217;s RhinoAutoMocker</a> I tend to end up with some &#8220;childless&#8221; interfaces.</p>

<p>Granted, this could just mean I&#8217;m a crappy OO designer, but I like to think it&#8217;s more from hammering out the design as I&#8217;m working on the problem!</p>

<p>So, I might have a code base that has unused interfaces lying around, and I just want to clean those up.</p>

<p>With <a href="http://www.ndepend.com">NDepend</a>, you can use <a href="http://www.ndepend.com/CQL.htm">Code Query Language (CQL)</a> to search for items of interest in your code base.  Very cool.</p>

<p>Here&#8217;s the CQL for finding Interfaces that have no implementations.</p>

<p>[csharp]
// &lt;Name&gt;Find interfaces without Derivatives&lt;/Name&gt;
SELECT TYPES WHERE IsInterface AND NbChildren == 0
[/csharp]</p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2010/01/21/ndepend-use-case-find-childless-interfaces-tdd-helper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NDepend &#8211; First Impressions</title>
		<link>http://programmer.brettveenstra.com/2010/01/20/ndepend-first-impressions/</link>
		<comments>http://programmer.brettveenstra.com/2010/01/20/ndepend-first-impressions/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 00:23:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[NDepend]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=293</guid>
		<description><![CDATA[Sitting down to check out a copy of NDepend is very intimidating. You see, I&#8217;ve been intrigued by the product ever since reading Hanselman&#8217;s description of its capabilities. Scott also put up a cheat sheet of sorts to the metrics used in NDepend&#8217;s analysis. Rather than a rehash, go check the article, another bang-up job [...]]]></description>
			<content:encoded><![CDATA[<p>Sitting down to check out a copy of <a href="http://www.ndepend.com/">NDepend</a> is very intimidating.  You see, I&#8217;ve been intrigued by the product ever since reading  <a href="http://www.hanselman.com/blog/ExitingTheZoneOfPainStaticAnalysisWithNDepend.aspx">Hanselman&#8217;s description of its capabilities</a>.  Scott also put up a <a href="http://www.hanselman.com/blog/content/binary/NDepend%20metrics%20placemats%201.1.pdf">cheat sheet</a> of sorts to the metrics used in NDepend&#8217;s analysis.</p>

<p>Rather than a rehash, go check the article, another bang-up job by Scott.  What is intimidating is all the analysis you can do with this tool, it makes you feel like you <strong>should be doing something smart with it</strong>.</p>

<p>For that problem, I can&#8217;t say I have a good solution for you.  Perhaps if I was in charge of more than a handful of developers as a architect, and coded less frequently, this tool would feel more comforting to me.  In my current capacity as a dev lead, working daily in .NET with a team of other senior dev&#8217;s, I haven&#8217;t quite entered that &#8220;Zone of Pain&#8221;.</p>

<p>One thing I give kudo&#8217;s to the NDepend team for is their <a href="http://www.ndepend.com/GettingStarted.aspx">Videos and Tutorials</a> and comprehensive help.  Clearly I&#8217;m not the only one some confusion on how to make the most of this tool and it&#8217;s great to know that the product team has put serious work into making the tool discoverable and useful.</p>

<p>Check out this Welcome Screen:</p>

<p><a href="http://programmer.brettveenstra.com/wp-content/uploads/2010/01/Visual_NDepend-2010-01-20_18.53.54.png"><img src="http://programmer.brettveenstra.com/wp-content/uploads/2010/01/Visual_NDepend-2010-01-20_18.53.54-300x235.png" alt="" title="Visual_NDepend-2010-01-20_18.53.54" width="400" height="313" class="aligncenter size-medium wp-image-296" /></a></p>

<p>Notice the real estate devoted to &#8220;Getting Started&#8221;, a very nice touch.</p>

<p>Another nice feature, is an ability to call out NDepend from Visual Studio and Reflector, which is my normal code exploratory/analysis tool.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2010/01/20/ndepend-first-impressions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to determine table data sizes via T-SQL</title>
		<link>http://programmer.brettveenstra.com/2010/01/07/how-to-determine-table-sizes-via-t-sql/</link>
		<comments>http://programmer.brettveenstra.com/2010/01/07/how-to-determine-table-sizes-via-t-sql/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 21:00:05 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[sqlserver]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=259</guid>
		<description><![CDATA[I needed a quick and dirty way to find out how much data tables were consuming in a SQL Server database. Ripping off what sp_spaceused does, I came up with this: [sql] SELECT t.name, LTRIM (STR ( SUM ( CASE WHEN (index_id &#60; 2) THEN (in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count) ELSE lob_used_page_count + row_overflow_used_page_count END [...]]]></description>
			<content:encoded><![CDATA[<p>I needed a quick and dirty way to find out how much data tables were consuming in a SQL Server database.  Ripping off what <a href="http://msdn.microsoft.com/en-us/library/ms188776.aspx"><code>sp_spaceused</code></a> does, I came up with this:</p>

<p>[sql]
SELECT 
    t.name,
    LTRIM (STR (
        SUM (
        CASE
        WHEN (index_id &lt; 2) THEN (in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count)
        ELSE lob_used_page_count + row_overflow_used_page_count
        END
    )  * 8, 15, 0) + &#8216; KB&#8217;) AS DataSize
FROM sys.dm_db_partition_stats s
INNER JOIN sys.tables t ON t.object_id = s.object_id
GROUP BY t.name
[/sql]</p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2010/01/07/how-to-determine-table-sizes-via-t-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inconsistent line ending style upon Subversion Import / Commit</title>
		<link>http://programmer.brettveenstra.com/2009/08/13/inconsistent-line-ending-style-upon-subversion-import-commit/</link>
		<comments>http://programmer.brettveenstra.com/2009/08/13/inconsistent-line-ending-style-upon-subversion-import-commit/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 01:33:22 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[gotcha]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=211</guid>
		<description><![CDATA["Inconsistent line ending style" messages from Subversion can be annoying and hinder a productive programming session.  In this article, I try to give a solution to this troublesome occurrence.]]></description>
			<content:encoded><![CDATA[<p><em>For posterity and my future sanity (and hopefully this helps the rest of us SVN-crazy developers).</em></p>

<p>When doing IMPORT or COMMIT operations using Subversion, we can receive a message like &#8220;Inconsistent line ending style&#8221;.</p>

<p>Particularly when IMPORTING, this can be a frustrating occurrence, with a host of hints provided online, but I couldn&#8217;t find anything but &#8220;brute force&#8221; approaches of converting EOL symbols by touching each file.</p>

<p>I use [auto-props] in my svn config file, and this is both part of the problem and the ultimate solution.</p>

<p>The latest occurrence happened when IMPORTING several XML files into a Repository.  The confusing part is many of the XML files reported success, and then SVN hit an XML file with a different EOL style than <em>all the others</em>.</p>

<p>My auto-props entry used to be:
[plain] *.xml = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Date Revision[/plain]</p>

<p>Here&#8217;s my solution (svn config file):
[plain]
[auto-props]
*.xml = svn:mime-type=text/xml;svn:eol-style=CRLF;svn:keywords=Date Revision
[/plain]</p>

<p>[plain]
[miscellany]
enable-auto-props = yes
[/plain]</p>

<p>Hopefully this helps you out as well.</p>

<a href="http://www.dotnetkicks.com/kick/?url=http://programmer.brettveenstra.com/2009/08/13/inconsistent-line-ending-style-upon-subversion-import-commit/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://programmer.brettveenstra.com/2009/08/13/inconsistent-line-ending-style-upon-subversion-import-commit/" border="0" alt="kick it on DotNetKicks.com" /></a>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2009/08/13/inconsistent-line-ending-style-upon-subversion-import-commit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resharper Tip : To-do Explorer</title>
		<link>http://programmer.brettveenstra.com/2009/07/17/resharper-tip-to-do-explorer/</link>
		<comments>http://programmer.brettveenstra.com/2009/07/17/resharper-tip-to-do-explorer/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 18:00:46 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Resharper]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://programmer.brettveenstra.com/?p=195</guid>
		<description><![CDATA[Do you find your code riddled with throw new NotImplementedException(); or // TODO: Did you know that Resharper provides support to find those elements quickly? When using the Visual Studio keyboard mappings, you can bring up the To-do Explorer with [Ctrl+Alt+D] or click on the Resharper > Windows > To-do Explorer. For futher tweaking, check [...]]]></description>
			<content:encoded><![CDATA[<p>Do you find your code riddled with</p>

<pre><code>throw new NotImplementedException();
</code></pre>

<p>or</p>

<pre><code>// TODO:
</code></pre>

<p>Did you know that <a href="http://jetbrains.com/resharper">Resharper</a> provides support to find those elements quickly?<br />
<br /></p>

<p>When using the Visual Studio keyboard mappings, you can bring up the To-do Explorer with [Ctrl+Alt+D] or click on the Resharper > Windows > To-do Explorer.
<br /> 
<br /> 
For futher tweaking, check out the &#8220;To-do Items&#8221; in the Resharper Options window.  It provides full RegEx capability for creating your own patterns!</p>

<p><br />
<br />
<a href="http://www.dotnetkicks.com/kick/?url=http://programmer.brettveenstra.com/2009/07/17/resharper-tip-to-do-explorer/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://programmer.brettveenstra.com/2009/07/17/resharper-tip-to-do-explorer/" border="0" alt="kick it on DotNetKicks.com" /></a>
<br /></p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2009/07/17/resharper-tip-to-do-explorer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Certification Roadmap</title>
		<link>http://programmer.brettveenstra.com/2009/03/11/certification-roadmap/</link>
		<comments>http://programmer.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>
		<category><![CDATA[Certification]]></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>
]]></content:encoded>
			<wfw:commentRss>http://programmer.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://programmer.brettveenstra.com/2008/10/31/continuous-integration-gotcha-nant-empty-elements/</link>
		<comments>http://programmer.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>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[gotcha]]></category>
		<category><![CDATA[Nant]]></category>
		<category><![CDATA[teamcity]]></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;
  <!-- <include name="${build.mxl.dml.dir}\foo.mxl" asis="true"/> -->
&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>[xml]
&lt;fileset id=&quot;cube.load.files&quot; /&gt;
[/xml]</p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.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://programmer.brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery/</link>
		<comments>http://programmer.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>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[gotcha]]></category>
		<category><![CDATA[inline javascript]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[javascript code]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[safari]]></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: [xml] &#60;script type=&#34;text/javascript&#34;&#62; $(document).ready(function(){ $(&#8216;#deliciouslogin&#8217;).submit(function(){ alert(&#34;This to authenticate with Delicious [...]]]></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 <code>&lt;head\&gt;</code> element:
[xml]
&lt;script type=&quot;text/javascript&quot;&gt;
    $(document).ready(function(){
        $(&#8216;#deliciouslogin&#8217;).submit(function(){
            alert(&quot;This to authenticate with Delicious and start retrieving Bookmarks into Google Gears  database&quot;);
        })
    });
&lt;/script&gt;
[/xml]</p>

<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 <code>&lt;head\&gt;</code> section with the shorthand closetag <code>/&gt;</code>.</p>

<p>This doesn&#8217;t work:
[xml]
&lt;script type=&quot;text/javascript&quot; src=&quot;lib/jquery/jquery.js&quot; /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
    $(document).ready(function(){
        // blah
        })
    });
&lt;/script&gt;
[/xml]</p>

<p>This does work:
[xml]
&lt;script type=&quot;text/javascript&quot; src=&quot;lib/jquery/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
    $(document).ready(function(){
        // blah
        })
    });
&lt;/script&gt;
[/xml]</p>

<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>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2008/09/13/gotcha-of-inline-document-ready-function-for-jquery/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Response to Readability</title>
		<link>http://programmer.brettveenstra.com/2008/08/28/response-to-readability/</link>
		<comments>http://programmer.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>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[fluent]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[style]]></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: [csharp] Run.the&#60;wire_up_global_error_handling&#62;() .then&#60;initialize_the_container_for_the_user_interface&#62;() .then&#60;initialize_the_user_interface_registry&#62;() .then&#60;initialize_the_ui_images_registry&#62;() .then&#60;initialize_the_main_menus&#62;() .execute(); [/csharp] Here are my humble comments: &#8220;Run&#8221; &#38; &#8220;execute&#8221; seems redundant [...]]]></description>
			<content:encoded><![CDATA[<p>JP put out another post <a href="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:
[csharp]
Run.the&lt;wire_up_global_error_handling&gt;()
.then&lt;initialize_the_container_for_the_user_interface&gt;()
.then&lt;initialize_the_user_interface_registry&gt;()
.then&lt;initialize_the_ui_images_registry&gt;()
.then&lt;initialize_the_main_menus&gt;()
.execute();
[/csharp]</p>

<p>Here are my humble comments:</p>

<ul>
<li>&#8220;Run&#8221; &amp; &#8220;execute&#8221; seems redundant</li>
<li>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">AutoHotKey ninja tricks like JP does</a>, this would be minimum overhead.</li>
</ul>

<p>So, for the full comparison in code:</p>

<p>[csharp]
Start.by&lt;wireUpGlobalErrorHandling&gt;()
.and&lt;initializeTheContainerForTheUserInterface&gt;()
.and&lt;initializeTheUserInterfaceRegistry&gt;()
.and&lt;initializeTheUiImagesRegistry&gt;()
.finally&lt;initializeTheMainMenus&gt;();
[/csharp]</p>

<p>Hopefully JP gets this via a trackback.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.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://programmer.brettveenstra.com/2008/06/05/resharper-40-release-candidate-available/</link>
		<comments>http://programmer.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://programmer.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://programmer.brettveenstra.com/2008/02/19/multiple-views-redux/</link>
		<comments>http://programmer.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 AnimalsList() 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="href=&quot;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>?</p>

<pre><code>public IEnumerable AnimalsList() where AnimalType:class
{
  foreach (IAnimal animal in _animals)
  {
    AnimalType testAnimal = animal as AnimalType;
    if (testAnimal != null)
      yield return testAnimal;
  }
}
</code></pre>

<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>

<pre><code>public delegate bool FilterAnimalPredicate(System.Type type);

/// snip

public IEnumerable AnimalList(FilterAnimalPredicate filter)
{
  foreach (IAnimal animal in _animals)
  {
    if (filter(animal.GetType()))
    {
      yield return animal;
    }
  }
}
</code></pre>

<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>

<pre><code>using System;
using System.Collections;
using System.Collections.Generic;
using MbUnit.Framework;

namespace MultipleIterators.Test
{
    [TestFixture]
    public class ZooTest
    {

        private static bool IsElephant(System.Type type)
        {
            return (type is Elephant);
        }

        private static bool IsZebra(System.Type type)
        {
            return (type is Zebra);
        }

        [Test]
        public void Can_add_elephants_to_the_zoo()
        {
            Zoo zoo = new Zoo();
            zoo.AddAnimal(new Elephant());
            int animalCounter = 0;

            foreach (IAnimal animal in zoo.Animals){
                animalCounter++;
            }
            Assert.AreEqual(1, animalCounter);
        }

        [Test]
        public void Can_add_zebras_to_the_zoo()
        {
            Zoo zoo = new Zoo();
            zoo.AddAnimal(new Zebra());
            int animalCounter = 0;

            foreach (IAnimal animal in zoo.Animals){
                animalCounter++;
            }
            Assert.AreEqual(1, animalCounter);
        }

        [Test]
        public void Can_get_just_the_zebras_out_of_the_zoo()
        {
            Zoo zoo = new Zoo();
            zoo.AddAnimal(new Zebra());
            zoo.AddAnimal(new Elephant());

            foreach (Zebra zebra in zoo.AnimalsList&lt;Zebra&gt;()){
                Assert.IsTrue(zebra is Zebra);
            }
        }

        [Test]
        public void Can_get_just_the_elephants_out_of_the_zoo()
        {
            Zoo zoo = new Zoo();
            zoo.AddAnimal(new Zebra());
            zoo.AddAnimal(new Elephant());

            foreach (Elephant elephant in zoo.AnimalsList&lt;Elephant&gt;()){
                Assert.IsTrue(elephant is Elephant);
            }
        }

        [Test]
        public void Can_get_just_the_elephants_out_of_the_zoo_using_predicate()
        {
            Zoo zoo = new Zoo();
            zoo.AddAnimal(new Zebra());
            zoo.AddAnimal(new Elephant());

            foreach (Elephant elephant in zoo.AnimalList(IsElephant)){
                Assert.IsTrue(elephant is Elephant);
            }
        }
    }
}
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://programmer.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://programmer.brettveenstra.com/2007/12/04/vista-sp1-seeking-users/</link>
		<comments>http://programmer.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-26"></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://programmer.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://programmer.brettveenstra.com/2007/11/09/storage-in-the-cloud-junglediskcom/</link>
		<comments>http://programmer.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-25"></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://programmer.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://programmer.brettveenstra.com/2007/10/31/unit-testing-in-sql-server-overview/</link>
		<comments>http://programmer.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-24"></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://programmer.brettveenstra.com/2007/10/31/unit-testing-in-sql-server-overview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TDD &#8211; A Workout Promise</title>
		<link>http://programmer.brettveenstra.com/2007/10/30/tdd-a-workout-promise/</link>
		<comments>http://programmer.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-23"></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><abbr class="datetime" title="2007-10-31">Tomorrow</abbr> I&#8217;ll post the results after Day 1.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2007/10/30/tdd-a-workout-promise/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows 2000 &amp; iTunes 7.x &#8211; Can&#8217;t we all just get along?</title>
		<link>http://programmer.brettveenstra.com/2007/10/30/windows-2000-itunes-7x-cant-we-all-just-get-along/</link>
		<comments>http://programmer.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://programmer.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://programmer.brettveenstra.com/2007/10/26/5-ways-to-fail-dilbert/</link>
		<comments>http://programmer.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><abbr class="datetime" title="2007-10-25">yesterday</abbr>.  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-21"></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 <abbr class="datetime" title="2007-10-26">today</abbr>&#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://programmer.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://programmer.brettveenstra.com/2007/10/22/play-nice-coderush-sql-prompt/</link>
		<comments>http://programmer.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-20"></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://programmer.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://programmer.brettveenstra.com/2007/10/12/agile-dont-build-for-tomorrow/</link>
		<comments>http://programmer.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-19"></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 <abbr class="datetime" title="2007-10-12">today</abbr> something that isn&#8217;t needed <strong><abbr class="datetime" title="2007-10-12">today</abbr></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.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://programmer.brettveenstra.com/2007/10/12/venn-diagrams-explain-sql-joins-perfectly/</link>
		<comments>http://programmer.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-18"></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://programmer.brettveenstra.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.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://programmer.brettveenstra.com/2007/10/09/nant-really/</link>
		<comments>http://programmer.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-17"></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://programmer.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://programmer.brettveenstra.com/2007/09/25/a-better-developer-open-source-project/</link>
		<comments>http://programmer.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-16"></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://programmer.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://programmer.brettveenstra.com/2006/08/23/virtualization-101/</link>
		<comments>http://programmer.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://programmer.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://programmer.brettveenstra.com/2006/08/11/strict-types-good-thing/</link>
		<comments>http://programmer.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 lang="csharp">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://programmer.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://programmer.brettveenstra.com/2006/05/18/ntlm-in-firefox/</link>
		<comments>http://programmer.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://programmer.brettveenstra.com/2006/05/18/ntlm-in-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET Page event basics</title>
		<link>http://programmer.brettveenstra.com/2006/05/17/aspnet-page-event-basics/</link>
		<comments>http://programmer.brettveenstra.com/2006/05/17/aspnet-page-event-basics/#comments</comments>
		<pubDate>Wed, 17 May 2006 18:26:00 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2006/05/17/aspnet-page-event-basics/</guid>
		<description><![CDATA[In ASP.NET 1.1 there are four major events that fire for the Page class (System.Web.UI.Page). Here&#8217;s a hack of an explanation: Init &#8211; page class is instantiated in ASP.NET worker process. Advisable to instantiate private members of your class here but hold off on much else as the web UI controls can get modified in [...]]]></description>
			<content:encoded><![CDATA[<p>In ASP.NET 1.1 there are four major events that fire for the Page class (System.Web.UI.Page).  Here&#8217;s a hack of an explanation:</p>

<ol>
    <li>Init &#8211; page class is instantiated in ASP.NET worker process.  Advisable to instantiate private members of your class here but hold off on much else as the web UI controls can get modified in later events</li>
    <li>Load &#8211; ControlTree is created, all PostBack data has already been posted to the controls, all ViewState has been processed, this is the place to rearrange controls, visibility and dynamically create controls</li>
    <li>PreRender &#8211; last chance to alter web controls &#8211; <strong>you cannot </strong>OVERRIDE this event</li>
    <li>Unload &#8211; output has been written, and you&#8217;re just doing cleanup now</li>
</ol>

<p>For a detailed discussion into all ten, check out <a href="http://www.15seconds.com/issue/020102.htm">4GuysFromRolla.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2006/05/17/aspnet-page-event-basics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Browser War?</title>
		<link>http://programmer.brettveenstra.com/2006/05/13/browser-war/</link>
		<comments>http://programmer.brettveenstra.com/2006/05/13/browser-war/#comments</comments>
		<pubDate>Sat, 13 May 2006 06:10:00 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2006/05/13/browser-war/</guid>
		<description><![CDATA[It&#8217;s over dude&#8230; Yeah, I&#8217;m a techno-elistist type&#8230; but when Firefox rips through pages without crashing, flickers and other IE &#8220;normalities&#8221;, it is SO OVER. I hope I can write software someday that flies like this thing!]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s over dude&#8230;</p>

<p>Yeah, I&#8217;m a techno-elistist type&#8230; but when Firefox rips through pages without crashing, flickers and other IE &#8220;normalities&#8221;, it is SO OVER.  I hope I can write software someday that flies like this thing!</p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2006/05/13/browser-war/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Further up, further in</title>
		<link>http://programmer.brettveenstra.com/2006/05/12/further-up-further-in/</link>
		<comments>http://programmer.brettveenstra.com/2006/05/12/further-up-further-in/#comments</comments>
		<pubDate>Fri, 12 May 2006 16:22: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/05/12/further-up-further-in/</guid>
		<description><![CDATA[So, having had worked at a great product development company for the past 4 1/2 years in VB6 and only getting to dabble in .NET when I could talk them into it, I&#8217;ve finally been blessed with a job that is aligned with my desires in .NET! While I&#8217;ve built a handful of solutions, both [...]]]></description>
			<content:encoded><![CDATA[<p>So, having had worked at a great product development company for the past 4 1/2 years in VB6 and only getting to dabble in .NET when I could talk them into it, I&#8217;ve finally been blessed with a job that is aligned with my desires in .NET!</p>

<p>While I&#8217;ve built a handful of solutions, both webform and winform since 2001, they have all been in VB.NET. I&#8217;m going to try and push cold turkey and just switch to C#. Why?</p>

<p>Here&#8217;s what I can come up with:</p>

<ol>
    <li>C# is &#8220;closer&#8221; to the .NET Framework &#8211; much of .NET framework was in C# and the whole experience is cleaner. I&#8217;m a control freak is the bottom line.</li>
    <li>C# is closer to Javascript &#8211; I&#8217;m planning on web programming, and jumping in and out of brackets and the like is just something I&#8217;m feeling too lazy for</li>
    <li>C# has huge momentum in the Software Engineering community &#8211; having MORE resources by industry experts, not just in the Microsoft camp is how I&#8217;d like to build software. Also, it seems that more open source projects run in the C# space than VB.NET (purely subjective).</li>
    <li>C# in Visual Studio 2k3 has better architect tools (i.e. code comments). Yes I know about the VB.NET add-in.</li>
    <li>Easier to share, debate &#8211; VB.NET still has a hobbyist aura. I&#8217;m anything but a hobbyist, but I grow tired of spending time on qualifications when discussing ideas.</li>
    <li>C# to VB.NET conversion is actually easier to me. Sure, I could read C# and convert to VB.NET. VB.NET does some things during compile time anyway that is more declarative (see #1) and I just don&#8217;t want any more tools that hide that stuff.</li>
    <li>Intellisense wins every time. Since I&#8217;m in Visual Studio .NET, it&#8217;s not like I&#8217;ll have &#8220;extra&#8221; typing to do.</li>
</ol>

<p>Here we go!</p>

<p>I promise not to become a <strong>C# biggot</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2006/05/12/further-up-further-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET Reading List</title>
		<link>http://programmer.brettveenstra.com/2006/01/01/net-reading-list/</link>
		<comments>http://programmer.brettveenstra.com/2006/01/01/net-reading-list/#comments</comments>
		<pubDate>Sun, 01 Jan 2006 05:00:00 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2006/01/01/net-reading-list/</guid>
		<description><![CDATA[On the nightstand Essential ASP.NET with Examples in C# (Onion) Framework Design Guidelines (Cwalina, Abrams) .NET Gotchas (Subramaniam) Programming .NET Components (Lowy) On the bookshelf Must Read Short-lived Kindling On the Wish List Business Objects in C# Business Objects in C# 2005]]></description>
			<content:encoded><![CDATA[<p>On the nightstand</p>

<ul>
    <li>Essential ASP.NET with Examples in C# (Onion)</li>
    <li>Framework Design Guidelines (Cwalina, Abrams)</li>
    <li>.NET Gotchas (Subramaniam)</li>
    <li>Programming .NET Components (Lowy)</li>
</ul>

<p>On the bookshelf</p>

<ul>
    <li>Must Read</li>
    <li>Short-lived</li>
    <li>Kindling</li>
</ul>

<p>On the Wish List</p>

<ul>
    <li>Business Objects in C#</li>
    <li>Business Objects in C# 2005</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2006/01/01/net-reading-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tools for Internet Explorer / HTML</title>
		<link>http://programmer.brettveenstra.com/2006/01/01/tools-for-internet-explorer-html/</link>
		<comments>http://programmer.brettveenstra.com/2006/01/01/tools-for-internet-explorer-html/#comments</comments>
		<pubDate>Sun, 01 Jan 2006 05:00:00 +0000</pubDate>
		<dc:creator>Brett Veenstra</dc:creator>
				<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://journeymantomaster.wordpress.com/2006/01/01/tools-for-internet-explorer-html/</guid>
		<description><![CDATA[Here&#8217;s a list of crazy helpful tools for HTML development on the major pain (er, leading browser). Get &#8216;em now: Web Development Helper &#8211; Parse ViewState, TraceViewer, nice&#8230; this was built by one of the guys on the ASP.NET / ATLAS team at Microsoft [get] ieHTTPHeaders - view HTTP Headers within the browser [get] Internet [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a list of crazy helpful tools for HTML development on the major pain (er, leading browser).</p>

<p>Get &#8216;em now:</p>

<ul>
    <li><a href="http://www.nikhilk.net/ASPNETDevHelperTool.aspx">Web Development Helper</a> &#8211; Parse ViewState, TraceViewer, nice&#8230; this was built by one of the guys on the ASP.NET / ATLAS team at Microsoft [<a href="http://projects.nikhilk.net/WebDevHelper/WebDevHelper.zip">get</a>]</li>
    <li><a href="http://www.blunck.info/iehttpheaders.html">ieHTTPHeaders </a>- view HTTP Headers within the browser [<a href="http://www.blunck.info/ieHTTPHeadersSetup.exe">get</a>]</li>
    <li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E59C3964-672D-4511-BB3E-2D5E1DB91038&amp;displaylang=en">Internet Explorer Developer Toolbar</a> &#8211; official un-supported tool from the big guys themselves</li>
</ul>

<p>Watch for these:</p>

<ul>
    <li><a href="http://www.nikhilk.net/Project.JSUtils.aspx">JavaScript Utilities Project </a>- this is probably the initial cut of ATLAS work</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://programmer.brettveenstra.com/2006/01/01/tools-for-internet-explorer-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
