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

<channel>
	<title>Elegant Code</title>
	<atom:link href="http://elegantcode.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com</link>
	<description></description>
	<pubDate>Tue, 08 Jul 2008 03:45:35 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Summer of NHibernate Screencast Series</title>
		<link>http://elegantcode.com/2008/07/07/summer-of-nhibernate-screencast-series/</link>
		<comments>http://elegantcode.com/2008/07/07/summer-of-nhibernate-screencast-series/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 03:45:35 +0000</pubDate>
		<dc:creator>Chris Brandsma</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/07/07/summer-of-nhibernate-screencast-series/</guid>
		<description><![CDATA[You have to give credit where credit is do.&#160; Stephen Bohlen is creating a screen cast series called Summer of NHibernate.
So, if you have been wondering what NHibernate is all about and looking for a good place to get started, this could be it for you.
Share This
]]></description>
			<content:encoded><![CDATA[<p>You have to give credit where credit is do.&nbsp; <a href="http://unhandled-exceptions.com/blog/">Stephen Bohlen</a> is creating a screen cast series called <a href="http://www.summerofnhibernate.com/">Summer of NHibernate</a>.</p>
<p>So, if you have been wondering what NHibernate is all about and looking for a good place to get started, this could be it for you.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1273&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1273" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/07/07/summer-of-nhibernate-screencast-series/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Visual Studio Test Results Window Behavior Fix</title>
		<link>http://elegantcode.com/2008/07/06/visual-studio-test-results-window-behavior-fix/</link>
		<comments>http://elegantcode.com/2008/07/06/visual-studio-test-results-window-behavior-fix/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 05:08:26 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/07/06/visual-studio-test-results-window-behavior-fix/</guid>
		<description><![CDATA[Want to stop hating the Test Results window in Visual Studio when you are working in TDD mode? If you double click a failed test, what does it do? By default Visual Studio brings up the failed test report.
What we want it to do is bring up the test that filed, where it failed. Here’s [...]]]></description>
			<content:encoded><![CDATA[<p>Want to stop hating the Test Results window in Visual Studio when you are working in TDD mode? If you double click a failed test, what does it do? By default Visual Studio brings up the failed test report.</p>
<p>What we want it to do is bring up the test that filed, where it failed. Here’s how:</p>
<p>Tools &gt; Options &gt; Test Tools &gt; Test Execution</p>
<p>and then click the box.</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/07/image.png"><img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="44" alt="image" src="http://elegantcode.com/wp-content/uploads/2008/07/image-thumb.png" width="436" border="0" /></a></p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1272&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1272" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/07/06/visual-studio-test-results-window-behavior-fix/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Disabling ReSharper</title>
		<link>http://elegantcode.com/2008/07/05/disabling-resharper/</link>
		<comments>http://elegantcode.com/2008/07/05/disabling-resharper/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 18:43:40 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<category><![CDATA[ReSharper]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/07/05/disabling-resharper/</guid>
		<description><![CDATA[What? Why would anyone want to do that? In my case, I am building a class (as in teach a class) for TDD that uses only Visual Studio native tools.
So, how do I disable resharper to make sure I don’t get any pesky resharper files into my directory structure? By using Visual Studio’s Add-In manager.

In [...]]]></description>
			<content:encoded><![CDATA[<p>What? Why would anyone want to do that? In my case, I am building a class (as in teach a class) for TDD that uses only Visual Studio native tools.</p>
<p>So, how do I disable resharper to make sure I don’t get any pesky resharper files into my directory structure? By using Visual Studio’s Add-In manager.</p>
<ol>
<li>In Visual Studio go to Tools &gt; Add-in Manager. </li>
<li>Uncheck the ReSharper 4 Add-in and then unselect the Startup box so that when you start up VS the next time, the Add-in won’t load. </li>
</ol>
<p>Not so fast, Gerome! Turns out that when ReSharper installed, it installed in such a way as to make this impossible. The fix is easy.</p>
<p>In your ReSharper Program Files directory, JetBrains\ReSharper\v4.0\Bin, find the Product.VisualStudio.90.AddIn file. Visual Studio needs to be able to modify this file and the installer laid in down read only. Make the file write-able and go back to VS and go through the process again. This time you will be able to turn off startup.</p>
<p>Even after doing this, the ReSharper menu remains in my IDE, which bugs me. All of the functionality is disabled and the context features in the code files are gone, but still…</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1269&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1269" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/07/05/disabling-resharper/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dutch ALT.NET User Group</title>
		<link>http://elegantcode.com/2008/07/04/dutch-altnet-user-group/</link>
		<comments>http://elegantcode.com/2008/07/04/dutch-altnet-user-group/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 20:07:52 +0000</pubDate>
		<dc:creator>Jan Van Ryswyck</dc:creator>
		
		<category><![CDATA[ALT.NET]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/07/04/dutch-altnet-user-group/</guid>
		<description><![CDATA[Yesterday, me, myself and Peter went to the first Dutch ALT.NET gathering. Besides being stuck in traffic for more than an hour, I had a great time. There were some great conversations going on and it was really empowering already. Make sure to read Yves&#8217;s summary of the whole thing (only in Dutch). We talked [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, me, myself and <a href="http://peter.worksontheweb.net/post/Brazilian-waxing2c-choosing-a-JavaScript-framework-and-why-I-dont-like-ASPNET-AJAX.aspx" target="_blank">Peter</a> went to the first <a href="http://groups.google.be/group/dutchaltdotnet?hl=nl" target="_blank">Dutch ALT.NET</a> gathering. Besides being stuck in traffic for more than an hour, I had a great time. There were some great conversations going on and it was really empowering already. Make sure to read <a href="http://groups.google.be/group/dutchaltdotnet/msg/2e8a3d80ed718fbe?hl=nl&amp;" target="_blank">Yves&#8217;s summary</a> of the whole thing (only in Dutch). We talked about doing some small to medium-sized events in the near future, so stay tuned. Let the learning and&#160; knowledge sharing begin!</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1268&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1268" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/07/04/dutch-altnet-user-group/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MotoQ Upgrade?</title>
		<link>http://elegantcode.com/2008/07/02/motoq-upgrade/</link>
		<comments>http://elegantcode.com/2008/07/02/motoq-upgrade/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 04:22:59 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<category><![CDATA[Hardware]]></category>

		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/07/02/motoq-upgrade/</guid>
		<description><![CDATA[I just finished my first week with my new MotoQ, with Windows Mobile 6. I was using a Treo with Windows Mobile 5.5, but when we upgraded to Exchange 2007 server the Treo was no longer compatible. That’s right. Exchange 2007 and the Treo 700w no worky. And the best part is that I can’t [...]]]></description>
			<content:encoded><![CDATA[<p><img height="271" src="http://developer.motorola.com/products/handsets/motoq9c/images/large/" width="200" align="right" />I just finished my first week with my new MotoQ, with Windows Mobile 6. I was using a Treo with Windows Mobile 5.5, but when we upgraded to Exchange 2007 server the Treo was no longer compatible. That’s right. Exchange 2007 and the Treo 700w no worky. And the best part is that I can’t get Mobile 6 on the Treo.</p>
<p>So, what’s the verdict? Basically, “Where’s my Treo?”</p>
<p>The wheel navigation on the right has always been hard for me to navigate. That’s why I didn’t like my previous BlackBerry. Therefore, I use the touch pad on the front, but I really miss my Treo’s touch screen. A lot.</p>
<p>It is harder in Mobile 6 to customize my front screen and easy-access applications, but at least I can run <a href="http://www.tinytwitter.com/" target="_blank">TinyTwitter</a> with the new CLR.</p>
<p>And get this: You have to hack the registry to change the home page on the browser. That’s right. You have to HACK THE REGISTRY to change the home page. Microsoft, you are already under a microscope. Do you have to make yourself a standing target? This is just bad.</p>
<p>Lastly, where is the mechanical mute switch? Oh, that’s right. There isn’t one. That means I get to fumble this thing like a hot potato in a meeting where I forgot to set vibrate mode. Jeez.</p>
<p>At least it makes phone calls.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1267&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1267" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/07/02/motoq-upgrade/feed/</wfw:commentRss>
		</item>
		<item>
		<title>I am Joining PluralSight and Other News</title>
		<link>http://elegantcode.com/2008/07/02/i-am-joining-pluralsight-and-other-news/</link>
		<comments>http://elegantcode.com/2008/07/02/i-am-joining-pluralsight-and-other-news/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 03:25:54 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/07/02/i-am-joining-pluralsight-and-other-news/</guid>
		<description><![CDATA[This is my first post on PluralSight’s blog. As of this week, I count myself fortunate enough to have been invited to contribute to PluralSight’s team of instructors. What does this mean for me and for Elegant Code?

Healthwise (my full-time employer) has been good enough to offer me the opportunity to pursue this passion in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pluralsight.com/community/blogs/starr/archive/2008/07/02/a_2D00_note_2D00_from_2D00_the_2D00_new_2D00_guy.aspx" target="_blank">This is my first post</a> on PluralSight’s blog. As of this week, I count myself fortunate enough to have been invited to contribute to PluralSight’s team of instructors. What does this mean for me and for Elegant Code?</p>
<ul>
<li><a href="http://healthwise.org" target="_blank">Healthwise</a> (my full-time employer) has been good enough to offer me the opportunity to pursue this passion in addition to my current duties as Chief Software Architect. Frankly, teaching and learning with the other folks of <a href="http://pluralsight.com" target="_blank">PluralSight</a> simply makes me better for Healthwise. Thank you, Neal. </li>
<li>Elegant Code is a community site near and dear to my heart. I will continue to contribute to the Elegant Code community and at times may cross post in both places. </li>
<li>The Elegant Code Cast will carry on and get even better. I just recorded a great session tonight, as a matter of fact <img src='http://elegantcode.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>With PluralSight, I will have a particular focus on Team System, SharePoint, and we’ll see if I can rub a little of the Agile love on these guys. Need some Team System training? Ask for me <img src='http://elegantcode.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>So, sorry if I have been a little quiet lately. As you can imagine, I have been having a couple of VERY busy weeks. Things were beginning to settle back into a manageable rhythm, then I got a call that prompted me to make some hurried family decisions. I will be taking 2 of my boys and heading to Texas (from Idaho) for the next 3 weeks. Real life meatspace issues are way tougher than developer problems, as it turns out. Getting older is for the birds, isn’t it?</p>
<p>This means that my coverage will be spotty for the next few weeks, but on the upside I get to take <a href="http://www.michaelazocar.com/blog/" target="_blank">Mike Azocar</a> out to dinner. Turns out he and I went to rival high schools (we always won the football games).</p>
<p>So, I will be resurfacing at the Agile 2008 conference in Toronto to do some TDD sessions and talks. I hope to bring home some great Code Cast interviews from that one!</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1266&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1266" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/07/02/i-am-joining-pluralsight-and-other-news/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Active Conventions with NDepend - Part Deux</title>
		<link>http://elegantcode.com/2008/07/02/active-conventions-with-ndepend-part-deux/</link>
		<comments>http://elegantcode.com/2008/07/02/active-conventions-with-ndepend-part-deux/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 18:55:26 +0000</pubDate>
		<dc:creator>Jan Van Ryswyck</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/07/02/active-conventions-with-ndepend-part-deux/</guid>
		<description><![CDATA[I want to put out a short sequel to my previous post on Active Conventions with NDepend. Also make sure to read Patrick Smacchia&#8217;s follow-up if your interested.
As you may or may not know, I&#8217;m a huge fan of using Test Data Builders for setting up the context for the domain objects in my BDD [...]]]></description>
			<content:encoded><![CDATA[<p>I want to put out a short sequel to my previous post on <a href="http://elegantcode.com/2008/06/28/active-conventions-with-ndepend/" target="_blank">Active Conventions with NDepend</a>. Also make sure to read <a href="http://codebetter.com/blogs/patricksmacchia/archive/2008/06/30/simple-core-domain-types-and-plain-old-net-objects.aspx" target="_blank">Patrick Smacchia&#8217;s follow-up</a> if your interested.</p>
<p>As you may or may not know, I&#8217;m a huge fan of using <a href="http://vanryswyckjan.blogspot.com/2007/09/test-data-builder-versus-object-mother.html" target="_blank">Test</a> <a href="http://vanryswyckjan.blogspot.com/2007/12/test-data-builder.html" target="_blank">Data</a> <a href="http://vanryswyckjan.blogspot.com/2008/04/test-data-builders-refined.html" target="_blank">Builders</a> for setting up the context for the domain objects in my BDD specifications.</p>
<p>
<div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:55f31ade-c78e-4bae-a848-842459461f48" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="background-color:White;;overflow: auto;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><span style="color: #000000; ">[TestFixture]
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> When_performing_something_action_with_an_order
{
    [SetUp]
    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> Establish_context()
    {
        _order </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> OrderBuilder()
            .WithCustomer(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> CustomerBuilder()
                .WithFirstName(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">Homer</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">)
                .WithLastName(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">Simpson</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">))
            .ForProduct(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> ProductBuilder()
                .WithName(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">Saxomofoon</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">))
    }

    &#8230;
}</span></div>
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
</p>
<p>The biggest benefit of using the <a href="http://www.dofactory.com/Patterns/PatternBuilder.aspx#_self2" target="_blank">Builder pattern</a> this way, is the fact that the creation of domain objects gets decoupled from the specifications itself. The constructor of a domain object gets called only at a single place in the code. If I wanted to add a new parameter to the constructor, I only have to change it in one place.</p>
<p>The following CQL statement ensures that the Test Data Builders are used instead of directly calling the constructors of the domain objects:</p>
<p><div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:d6998337-8535-4a28-804e-4242ed539ecc" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="background-color:White;;overflow: none;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><span style="color: #008000; ">//</span><span style="color: #008000; "> &lt;Name&gt;Test data builders are not used by SetUp methods.&lt;/Name&gt;</span><span style="color: #008000; ">
</span><span style="color: #000000; ">WARN IF Count  </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; "> IN
SELECT METHODS
WHERE (HasAttribute </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">NUnit.Framework.SetUpAttribute</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">
 OR NameIs </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">Before_each_specification</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">)
AND
((IsDirectlyUsing </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">NAMESPACE:MyProject.Domain.Model</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">
 OR IsDirectlyUsing </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">NAMESPACE:MyProject.Domain.DTO</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">)
AND </span><span style="color: #000000; ">!</span><span style="color: #000000; ">IsDirectlyUsing </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">NAMESPACE:MyProject.Domain.UnitTests.Builders</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">) </span></div>
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
</p>
<p>Although its probably not 100% foul proof, this CQL constraint detects the most blatant violations.</p>
<p>Till next time,</p>
<p>Jan, the NDepend addict.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1264&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1264" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/07/02/active-conventions-with-ndepend-part-deux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Collective Agile Discussion</title>
		<link>http://elegantcode.com/2008/06/30/the-collective-agile-discussion/</link>
		<comments>http://elegantcode.com/2008/06/30/the-collective-agile-discussion/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 03:50:58 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/30/the-collective-agile-discussion/</guid>
		<description><![CDATA[I am both encouraged and disheartened by what I am hearing on the the subject of Agile these days. I got a large dose of the discussion in conversations and lectures at Tech Ed this year, and the blogsphere resonates with it every time you turn around.
The Encouraging
Dialog is beginning to focus on Lean and [...]]]></description>
			<content:encoded><![CDATA[<p>I am both encouraged and disheartened by what I am hearing on the the subject of Agile these days. I got a large dose of the discussion in conversations and lectures at Tech Ed this year, and the blogsphere resonates with it every time you turn around.</p>
<h3>The Encouraging</h3>
<p>Dialog is beginning to focus on Lean and iterative delivery practices. These basic values supported by the Agile manifesto are beginning to receive more attention, much to my pleasure. We are finally getting around to talking about value flow rather than our available hodgepodge of Agile coding techniques. Excellent!</p>
<p>Scrum has finally been recognized as an excellent team management model that supports Agility. It is also prone to fracturing at large scale and must be held together with more pressure at large size. It takes more than Scrum to deliver on the whole promise.</p>
<p>Test Driven Development is a wonderfully Lean practice that has genuinely matured to a standard engineering practice. Who can argue with, “Constant attention to quality?” Now that we can agree this is how to do business, we are simply evolving the technique rather than arguing about whether it has value. Good stuff.</p>
<h3>The Exciting</h3>
<p>Agile practices and Lean techniques are finding home in even the stodgiest organizations. Few developers would dare admit they aren’t “Agile”. Sometimes it is even true.</p>
<p>The Microsoft team building Rosario is executing their work in a genuinely Agile way. That is, iterative with high visibility and close client involvement. The ASP.Net MVC team is behaving similarly with frequent releases and high bandwidth feedback from the community.</p>
<h3>The Discouraging</h3>
<p>Many people describing their Agile practices center around the common denominator of, “No requirements and we work on the highest priority item.” That’s firefighting. Agile requires the discipline of focus, if only for a single iteration.</p>
<p>Implementing only a few practices that seem easy to accomplish does not make an organization Agile. Yes, iterations are important, but they are not the end game. Steady delivery of genuine value is the end game.</p>
<p>I cannot count the number of times people have represented their practices as “Scrum-like”. I commonly ask, “Did you start with Scrum and modify it to fit your shop?” </p>
<p>“No,” is the common answer. “We read the books and picked the parts that seemed to make sense for us.”</p>
<p>That really bothers me because if there is one thing I have learned in the last 5 years of implementing Agile practices, it is this: <em>Practice the prescriptive Guidance for 3 months before you change anything</em>.</p>
<p>We all think we’re different, but we struggle with the same issues. There are very real recipes for these techniques. Agile is a lot of things, but it isn’t just what you want it to be.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1263&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1263" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/30/the-collective-agile-discussion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Working with ASP.NET MVC and MvcContrib</title>
		<link>http://elegantcode.com/2008/06/30/working-with-aspnet-mvc-and-mvccontrib/</link>
		<comments>http://elegantcode.com/2008/06/30/working-with-aspnet-mvc-and-mvccontrib/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 22:17:01 +0000</pubDate>
		<dc:creator>Alex Mueller</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/30/working-with-aspnet-mvc-and-mvccontrib/</guid>
		<description><![CDATA[I have spent the past couple weeks holed up in a cave building a web site using the latest ASP.NET MVC framework. I am behind on blogging, responding to emails, and keeping up with my RSS feeds. I am making good progress with ASP.NET&#8217;s MVC framework and enjoying the development experience, despite the occasional beta [...]]]></description>
			<content:encoded><![CDATA[<p>I have spent the past couple weeks holed up in a cave building a web site using the latest ASP.NET MVC framework. I am behind on blogging, responding to emails, and keeping up with my RSS feeds. I am making good progress with ASP.NET&#8217;s MVC framework and enjoying the development experience, despite the occasional beta blip. </p>
<p>I started developing a site using the MVC Preview 2 source. Two weeks in, I pulled the latest <a title="MvcContrib" href="http://www.codeplex.com/MVCContrib" target="_blank">MvcContrib</a> project, and a few days ago I upgraded again to the MVC Preview 3 source. Like anyone using beta software, I have spent some time swearing at my screen, but overall, I am pleased with the MVC framework. After returning from vacation, I now find that I am one more release behind on my MvcContrib binaries.</p>
<p>As I began developing with the MVC framework, the similarities I was seeing with <a href="http://www.castleproject.org/monorail/index.html" target="_blank">Castle&#8217;s MonoRail</a> MVC were numerous and reassuring. I felt like I could hit the ground running with previous MVC knowledge. The sample MVC application right out of the box is functional and a helpful place to start familiarizing and education oneself with the new framework. For those tools and features that are not built into the framework at this point, I found the MvcContrib project to be helpful in my development. </p>
<p>It seemed like with each day of development I would discover something new, cool, or exciting, and I wanted to share it on this blog. As I started down the path of writing a blog entry, I procrastinated each time thinking, &#8220;let me just get through this one issue first and then I will blog.&#8221; That approach snowballed tremendously. With each hurdle I had to surpass, there was another release I had to install. Of course, I did not have to install any of these updates, but I did thinking they would be trivial. In some cases they were, and in some they were not. My point - there is a great deal of change and development constantly occurring on the MVC framework and other tools supporting it. Expect this rate of change while the framework is maturing. Sometimes it is frustrating, but there is great support on the <a title="ASP.NET/MVC" href="http://www.asp.net/mvc/" target="_blank">ASP.NET/MVC</a> forums as well as <a title="MvcContrib" href="http://groups.google.com/group/mvccontrib-discuss" target="_blank">MvcContrib</a>.</p>
<p><strong></strong>&nbsp;</p>
<p><strong>Why do I like it?</strong></p>
<p>MVC promotes a cleaner separation of concerns. Since I am used to developing in ASP.NET and trying to adhere to a loosely defined MVP pattern, this MVC framework mitigates some of the frustrations of having to enforce the pattern as well as SoC. </p>
<p>Testability is build into the framework. When creating a new project, there is an option to create a test project to accompany it. </p>
<p>I can create a web site quickly and cleanly. As I add a new page (view), I have a distinct controller and view for it. Unlike MVP implemented in ASP.NET, I do not have to enforce my controller-view separation, it is done for me. </p>
<p>I am able to use use more than one view engine easily. I am tired of using the ASP.NET view engine. While one can roll their own view engine flavor, MvcContrib provides support for a few out of the box. I can free myself of having to use ASPX pages, ASCX user controls, and their code-behind files. </p>
<p>I prefer using the <a href="http://nvelocity.sourceforge.net/" target="_blank">NVelocity</a> view engine. I prefer the more simple HTML view of NVelocity. My customers enjoy it as well, and they do not have to concern themselves with ASP syntax. They will have to learn a few tricks with NVelocity, but nothing that is not intuitive as it is.</p>
<p>Extensible source. I have been able to add custom support to provide overrides and additional functionality to the framework as I need it.</p>
<p>Community support. The MvcContrib project helps make development with MVC easier. Use their view engines and IoC container support. Know of some functionality that is not available, add it. </p>
<p><strong></strong>&nbsp;</p>
<p><strong>Pitfalls</strong></p>
<p>IIS 6 and URL rewriting. While it is possible to get the nice URL rewriting to work with IIS 6, ISAPI filters, and extension mappings. It is a PITA. I am in the process of upgrading my customer&#8217;s environment to use IIS 7. Today, their URL contains the &#8220;.mvc&#8221; string, such as, &lt;domainName&gt;/home.mvc, or &lt;domainName&gt;/account.mvc/login. I suggest having IIS 7 available.</p>
<p>Ajax framework. I am still waiting on a good Ajax framework to be included. The one MonoRail includes is nice. As for now, I am using jQuery and developing my own. Hmmm, maybe this functionality could be added to the MvcContrib project, and maybe instead of limiting it to jQuery, I could abstract it to enable other Ajax providers. We&#8217;ll see what time permits.</p>
<p>Third party controls like Telerik, Infragistics, et alia. Rich datagrids, tree controls, and other controls that rely on view state and postbacks. I expect support will come around for these.</p>
<p>I tried the <a href="http://andrewpeters.net/2007/12/19/introducing-nhaml-an-aspnet-mvc-view-engine/" target="_blank">NHaml</a> view engine, a .NET implementation of the Rails Haml view engine. My NHaml default layout (master page) was generating runtime errors because I was not use the proper spacing of two characters. Seriously? Two spaces? Who cares. I moved on to try Brail.</p>
<p>&nbsp;</p>
<p>I have been pleased thus far. Thank you to the ASP.NET MVC team and the contributors to the MvcContrib project. Keep up the great work. </p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1262&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1262" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/30/working-with-aspnet-mvc-and-mvccontrib/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Looking at Rhino Mocks 3.5 (RC1)</title>
		<link>http://elegantcode.com/2008/06/29/looking-at-rhino-mocks-35-rc1/</link>
		<comments>http://elegantcode.com/2008/06/29/looking-at-rhino-mocks-35-rc1/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 02:36:50 +0000</pubDate>
		<dc:creator>Chris Brandsma</dc:creator>
		
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/29/looking-at-rhino-mocks-35-rc1/</guid>
		<description><![CDATA[I finally got some time to look into Rhino Mocks 3.5 to see what is new.&#160; Lets say there are some interesting extensions to the library.&#160; OK, that was a bad pun that you probably didn&#8217;t get.&#160; A series of new extension methods were added.&#160; Lets take a look.
Here is the list of some of [...]]]></description>
			<content:encoded><![CDATA[<p>I finally got some time to look into Rhino Mocks 3.5 to see what is new.&nbsp; Lets say there are some interesting extensions to the library.&nbsp; OK, that was a bad pun that you probably didn&#8217;t get.&nbsp; A series of new extension methods were added.&nbsp; Lets take a look.</p>
<p>Here is the list of some of the extension methods:</p>
<ul>
<li>void <b>AssertWasCalled</b>&lt;<b>T</b>&gt;(this T mock, Action&lt;T&gt; action)
<li>void <b>AssertWasNotCalled</b>&lt;<b>T</b>&gt;(this T mock, Action&lt;T&gt; action)
<li>void <b>BackToRecord</b>&lt;<b>T</b>&gt;(this T mock)
<li>IMethodOptions&lt;VoidType&gt; <b>Expect</b>&lt;<b>T</b>&gt;(this T mock, Action&lt;T&gt; action)
<li>IList&lt;object[]&gt; <b>GetArgumentsForCallsMadeOn</b>&lt;<b>T</b>&gt;(this T mock, Action&lt;T&gt; action)
<li>void <b>Raise</b>&lt;<b>TEventSource</b>&gt;(this TEventSource mockObject, Action&lt;TEventSource&gt; eventSubscription, params object[] args)
<li>IMethodOptions&lt;object&gt; <b>Stub</b>&lt;<b>T</b>&gt;(this T mock, Action&lt;T&gt; action)</li>
</ul>
<p>This is not a complete list, btw.&nbsp; But these are the methods that I find interesting right now.&nbsp; Plus, if you start looking at <a href="http://www.ayende.com/Blog/archive/2008/05/16/Rhino-Mocks--Arrange-Act-Assert-Syntax.aspx">Ayende&#8217;s</a> new samples, you will need to keep these in mind.&nbsp; Speaking of Ayende&#8217;s samples, lets look at one.</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> [Test]</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> WhenUserForgetPasswordWillSendNotification_WithArgumentMatching()</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   3:</span> {</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   4:</span>     <span style="color: #0000ff">var</span> userRepository = MockRepository.GenerateStub&lt;IUserRepository&gt;();</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   5:</span>     <span style="color: #0000ff">var</span> notificationSender = MockRepository.GenerateStub&lt;INotificationSender&gt;();</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   6:</span>&nbsp; </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   7:</span>     userRepository.Stub(x =&gt; x.GetUserById(5)).Return(<span style="color: #0000ff">new</span> User { Id = 5, Name = <span style="color: #006080">&#8220;ayende&#8221;</span> });</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   8:</span>&nbsp; </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   9:</span>     <span style="color: #0000ff">new</span> LoginController(userRepository, notificationSender).ForgotMyPassword(5);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  10:</span>&nbsp; </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  11:</span>     notificationSender.AssertWasCalled(x =&gt; x.Send(<span style="color: #006080">&#8220;Changed password for ayende&#8221;</span>));</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  12:</span> }</pre>
</div>
</div>
<p>OK, first draw your attention to lines 4 and 5.&nbsp; Note, there is nothing really new here.&nbsp; We are creating a set of stub objects.&nbsp; A stub object is a fake object that doesn&#8217;t care if you call it or not.&nbsp; Now, I&#8217;m trying to draw your attention to these lines, because it makes lines 7 and 11 more interesting.</p>
<p>On to line 7.&nbsp; userRepository.Stub.&nbsp; userRepository is a stubbed object (see line 4), that I am betting does not have a method called Stub.&nbsp; It is an extension method from Rhino Mocks.&nbsp; Here is what the online documentation says the Sub method does:</p>
<p><em><font color="#808080">Tell the mock object to perform a certain action when a matching method is called. Does not create an expectation for this method.</font></em></p>
<p>OK, so line 7 is telling userRepository that IF AND WHEN the userRepository method GetUserById is called for User 5, return a new User with an ID =5 and Name = &#8220;ayende&#8221;.&nbsp;&nbsp; Before, this would have looked like this:</p>
<p>MockRepository.Stub(userRepository.GetUserById(5)).Return(&#8230;.)</p>
<p>Now it is </p>
<p>userRepository.Stub( x =&gt; x.GetUserById(5).Return(&#8230;.)</p>
<p>There is a similar Expect extension method that does create an expectation.</p>
<p>There is still room for misunderstanding with this new syntax, but it could be a step in the right direction.&nbsp; One of the problems I&#8217;ve had with Rhino Mocks, and other Mocking frameworks is explaining the syntax to new users.&nbsp; Namely, you don&#8217;t see the mock object you are testing against first, but the method Expect or Stub.&nbsp; Now the object is out front.&nbsp; This will still cause a few issues &#8212; especially for people who are not expecting extension methods, but I think that is just a small training issue.</p>
<p>Now on to line 11.</p>
<p>I&#8217;m looking at AssertWasCalled.&nbsp; Note, this is called after the method ForgotMyPassword was called.&nbsp; ForgotMyPassword is the method we are actually testing (also called the SUT, or system under test in unit testing lingo).</p>
<p>So, AssertWasCalled checks to see if the notification sender&#8217;s Send method was called, and fail the test if it wasn&#8217;t.&nbsp; B-E-A-U-tiful.&nbsp; This fixes one of the other major problems I&#8217;ve had explaining mocking, and it also made the tests harder to follow.&nbsp; Here is why.</p>
<p>Typically in your test code you have two types of expectations.&nbsp; Methods that you expect to call to get valuable information from so the SUT can continue, and methods that you expect to be called with that information.&nbsp; Historically I&#8217;ve had to group both of those method calls together before the SUT is called.&nbsp; That made things messy to me.&nbsp; Plus things were all out of order.</p>
<p>The beauty of AssertWasCalled (and AssertWasNotCalled) is that they can be called AFTER the SUT is run.&nbsp; Thus keeping everything in order and the coded easier to follow.</p>
<p>The big recap:</p>
<p>So here are the positive changes, as I see them:</p>
<ol>
<li>Mock/Stub objects come first when setting expectations
<li>You can check for values after the fact with AssertWasCalled and AssertWasNotCalled.</li>
</ol>
<p>Thumbs up from me.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1261&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1261" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/29/looking-at-rhino-mocks-35-rc1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Steve and Bill On-Stage</title>
		<link>http://elegantcode.com/2008/06/28/steve-and-bill-on-stage/</link>
		<comments>http://elegantcode.com/2008/06/28/steve-and-bill-on-stage/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 05:58:02 +0000</pubDate>
		<dc:creator>dcarver</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/28/steve-and-bill-on-stage/</guid>
		<description><![CDATA[In case you have not seen any of these videos of Bill Gates and Steve Jobs on Stage talking about our industry past, present and future.&#160; A fascinating discussion.
Paraphrasing a classic comment from Gates.&#160; We want a computer in every home.&#160; We never thought about the fact that we would have to be a BIG [...]]]></description>
			<content:encoded><![CDATA[<p>In case you have not seen any of these videos of <a href="http://blog.wired.com/cultofmac/2007/05/video_steve_and.html">Bill Gates and Steve Jobs on Stage</a> talking about our industry past, present and future.&nbsp; A fascinating discussion.</p>
<p>Paraphrasing a classic comment from Gates.&nbsp; We want a computer in every home.&nbsp; We never thought about the fact that we would have to be a BIG company to do that&#8230;</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1260&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1260" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/28/steve-and-bill-on-stage/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Active Conventions with NDepend</title>
		<link>http://elegantcode.com/2008/06/28/active-conventions-with-ndepend/</link>
		<comments>http://elegantcode.com/2008/06/28/active-conventions-with-ndepend/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 21:48:10 +0000</pubDate>
		<dc:creator>Jan Van Ryswyck</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/28/active-conventions-with-ndepend/</guid>
		<description><![CDATA[Some time ago Patrick Smacchia wrote a nice article on his blog about active conventions on your code base. I thought I tried this for myself and made up some interesting CQL queries.
Suppose we want to enforce a BDD naming convention for every SetUp method. Such methods should be named Establish_context. The following CQL constraint [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago <a href="http://codebetter.com/blogs/patricksmacchia/default.aspx" target="_blank">Patrick Smacchia</a> wrote a nice article on his blog about <a href="http://codebetter.com/blogs/patricksmacchia/archive/2008/05/11/write-active-conventions-on-your-code-base.aspx" target="_blank">active conventions on your code base</a>. I thought I tried this for myself and made up some interesting CQL queries.</p>
<p>Suppose we want to enforce a BDD naming convention for every <a href="http://www.nunit.org/index.php?p=setup&amp;r=2.4.7" target="_blank"><em>SetUp</em></a> method. Such methods should be named <em>Establish_context</em>. The following CQL constraint reports those methods that are not named consistently:</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:d8c0b239-55eb-45db-b1c9-673831644caa" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 476px; padding-top: 0px">
<pre style="background-color:White;;overflow: none;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><span style="color: #008000;">//</span><span style="color: #008000;"> &lt;Name&gt;NUnit SetUp methods that are not named consistently.&lt;/Name&gt;</span><span style="color: #008000;">
</span><span style="color: #000000;">WARN IF Count </span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;"> IN
SELECT METHODS FROM ASSEMBLIES </span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">MyProject.Domain.UnitTests</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">,
</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">MyProject.Infrastructure.UnitTests</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">
WHERE HasAttribute </span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">NUnit.Framework.SetUpAttribute</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">
AND </span><span style="color: #000000;">!</span><span style="color: #000000;">NameIs </span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">Establish_context()</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;"> </span></div>
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></p>
</div>
<p>Lets have another one. A while ago, I wrote <a href="http://elegantcode.com/2008/05/13/wcf-friction/" target="_blank">this post</a> about how WCF gave me this weird exception after I forgot to put a <em>DataContract</em> attribute on one of my DTO classes. Lets write another active convention for that:</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:960bc484-8987-4b52-9c7c-3cff136134a6" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="background-color:White;;overflow: none;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><span style="color: #008000;">//</span><span style="color: #008000;"> &lt;Name&gt;Data contracts without a DataContract attribute.&lt;/Name&gt;</span><span style="color: #008000;">
</span><span style="color: #000000;">WARN IF Count </span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;"> IN
SELECT TYPES FROM NAMESPACES </span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">MyProject.MyServiceContracts.DataContracts</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">
WHERE </span><span style="color: #000000;">!</span><span style="color: #000000;">HasAttribute </span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">System.Runtime.Serialization.DataContractAttribute</span><span style="color: #000000;">&#8220;</span></div>
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></p>
</div>
<p>Now here comes my personal favorite. Being the huge DDD adept that I am, I want to enforce that the domain is the core, the centerpiece, the kernel as you may of my application. I don&#8217;t want it to have any dependencies to other assemblies in my application, especially not the infrastructure assembly.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:065f2a32-b606-43af-946c-b0ea60fcd169" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="background-color:White;;overflow: none;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><span style="color: #008000;">//</span><span style="color: #008000;"> &lt;Name&gt;Domain is directly using the infrastructure&lt;/Name&gt;</span><span style="color: #008000;">
</span><span style="color: #000000;">WARN IF Count </span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;"> IN SELECT METHODS FROM ASSEMBLIES </span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">MyProject.Domain</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">
WHERE IsDirectlyUsing </span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">ASSEMBLY:MyProject.Infrastructure</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;"> </span></div>
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></p>
</div>
<p>It can&#8217;t get any easier than this, now doesn&#8217;t it? This is actively enforcing <a href="http://en.wikipedia.org/wiki/Separation_of_concerns" target="_blank">Separation of Concerns</a>. Another way to have a convention about this is the following:</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:c411f2a4-f622-4c85-b215-a309d051ad38" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="background-color:White;;overflow: auto;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><span style="color: #008000;">//</span><span style="color: #008000;"> &lt;Name&gt;Domain-Driven Design convention&lt;/Name&gt;</span><span style="color: #008000;">
</span><span style="color: #000000;">WARN IF Count </span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;"> IN SELECT ASSEMBLIES WHERE AssemblyLevel </span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">
AND NameIs </span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">MyProject.Domain</span><span style="color: #000000;">&#8220;</span></div>
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></p>
</div>
<p>This means that my domain assembly can only have a reference to the .NET framework assemblies and nothing else. This gets my geek heart pounding.</p>
<p>Imagine the possibilities if you incorporate this with your daily and continuous integration builds. Pure software quality assurance if you ask me.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1259&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1259" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/28/active-conventions-with-ndepend/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Entity Framework Team are Real Professionals</title>
		<link>http://elegantcode.com/2008/06/27/the-entity-framework-team-are-real-professionals/</link>
		<comments>http://elegantcode.com/2008/06/27/the-entity-framework-team-are-real-professionals/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 19:53:06 +0000</pubDate>
		<dc:creator>Jan Van Ryswyck</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/27/the-entity-framework-team-are-real-professionals/</guid>
		<description><![CDATA[You have to hand it to these people: they sure have to put up with a lot of crap. I&#8217;m also guilty as charged for this. I already wrote about a lack of real-world usability and best practices in the past. 
You probably heard about the ADO.NET Entity Framework Vote of No Confidence. The moment [...]]]></description>
			<content:encoded><![CDATA[<p>You have to hand it to these people: they sure have to put up with a lot of crap. I&#8217;m also guilty as charged for this. I already wrote about a <a href="http://vanryswyckjan.blogspot.com/2007/04/net-domain-driven-design-with-c-problem.html" target="_blank">lack of real-world usability</a> and <a href="http://vanryswyckjan.blogspot.com/2007/03/persistence-ignorance.html" target="_blank">best practices</a> in the past. </p>
<p>You probably heard about the <a href="http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/" target="_blank">ADO.NET Entity Framework Vote of No Confidence</a>. The moment this went online, I signed it without any hesitation. I still believe that version 1.0 of the EF stinks badly compared to NHibernate. NHibernate allows me to write maintainable applications without sacrificing OO programming, and it will be far more superior for a long time to come. I agree that a first version of anything isn&#8217;t feature complete, but it should support at least a couple of basic OO principles.</p>
<p>At first, I didn&#8217;t want to blog about this until I read <a href="http://www.lostechies.com/blogs/chad_myers/archive/2008/06/26/i-m-not-a-real-world-developer.aspx" target="_blank">Chad&#8217;s post</a>. He mentions this blog post by <a href="http://msmvps.com/blogs/kathleen/archive/2008/06/24/entity-framework-petition.aspx" target="_blank">Kathleen Dollard</a> that made me scratch my head for a while. It&#8217;s not the general insulting tone of the entire post that sets me off, but rather the following sentence somewhere in the middle of her post:</p>
<p>&#160;<em>EF is not a failure because it has a poor strategy for merging into source control</em></p>
<p>How on earth can you put something like this on your blog and still call yourself a professional developer? Source control is not negotiable.Period! If a tool doesn&#8217;t allow me to use source control, then it&#8217;s bye, bye baby! I thought we were past this by now? I guess not, so I will repeat this for the last time: <strong>you can&#8217;t deliver maintainable software without proper source control in place!</strong>.</p>
<p>Regarding the data-driven approach vs the OO approach: <strong>those VB6 days are over</strong>! Wake up and smell the roses. I never witnessed an OO approach to fail in my eight years as a developer. Maybe I&#8217;m lucky. I don&#8217;t know. What I do know is that a data-driven approach fails miserably every single time it&#8217;s used in a software project of any size larger than an ant. <a href="http://www.martinfowler.com/eaaCatalog/transactionScript.html" target="_blank">Transaction scripts</a> don&#8217;t handle code duplication well, they violate separation of concerns and are a major disabler for loosely coupled (aka maintainable) applications.</p>
<p>Anyhow, back to the title of this post. The EF team has been very open about all this. Daniel Simmons announced the <a href="http://blogs.msdn.com/dsimmons/archive/2008/06/03/dp-advisory-council.aspx" target="_blank">EF Advisory Council</a> and the team responded in a real constructive way to the &quot;Vote of No Confidence&quot; by setting up <a href="http://blogs.msdn.com/efdesign/default.aspx" target="_blank">this blog</a> about the future design of the Entity Framework. These are some of the first positive signs that they are setting themselves up for success.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1258&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1258" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/27/the-entity-framework-team-are-real-professionals/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Introducing the Boise APLN</title>
		<link>http://elegantcode.com/2008/06/25/introducing-the-boise-apln/</link>
		<comments>http://elegantcode.com/2008/06/25/introducing-the-boise-apln/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 23:24:27 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/25/introducing-the-boise-apln/</guid>
		<description><![CDATA[Some of us here in the Treasure Valley have decided to start a Boise chapter of the Agile Project Leadership Network. This is a group of people passionate about Agile and sharing experiences and best practices with each other.
From the APLN website:
APLN was founded in 2004 by a group of people who are active in [...]]]></description>
			<content:encoded><![CDATA[<p>Some of us here in the Treasure Valley have decided to start a Boise chapter of the Agile Project Leadership Network. This is a group of people passionate about Agile and sharing experiences and best practices with each other.</p>
<p>From the APLN website:</p>
<blockquote><p>APLN was founded in 2004 by a group of people who are active in writing about, practicing, and evangelizing the movement towards fast, flexible, customer value driven approaches to leading projects of many types. Although this organization is separate from the Agile Alliance, our intention is to work closely with that group within the software community, but also work with people and companies outside of software and IT to help them become better Project Leaders. </p>
</blockquote>
<p>I have been party to the APLN discussion at the annual Agile conferences and have found great value in the stories presented there. If you are interested in becoming part of the discussion, jump in to the <a href="http://groups.google.com/group/apln-boise" target="_blank">Google Group</a>.</p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d9226a14-77b8-4f51-b6c7-567e822238b2" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/Agile" rel="tag">Agile</a>,<a href="http://technorati.com/tags/Boise" rel="tag">Boise</a></div>
<p class="akst_link"><a href="http://elegantcode.com/?p=1257&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1257" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/25/introducing-the-boise-apln/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Gates is the Rockefeller of our times</title>
		<link>http://elegantcode.com/2008/06/23/gates-is-the-rockefeller-of-our-times-2/</link>
		<comments>http://elegantcode.com/2008/06/23/gates-is-the-rockefeller-of-our-times-2/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 05:57:38 +0000</pubDate>
		<dc:creator>dcarver</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/23/gates-is-the-rockefeller-of-our-times-2/</guid>
		<description><![CDATA[Interesting article on MSN on Bill Gates and how his foundation is changing philanthropy today.&#160; He will give away more money then Rockefeller did at the beginning of the century.&#160; How will this change education and medicine in the next few years?&#160; For example the Gates foundation is:
&#8220;..a foundation whose combined assets will one day [...]]]></description>
			<content:encoded><![CDATA[<p>Interesting article on MSN on <a href="http://www.msnbc.msn.com/id/25332025/">Bill Gates</a> and how his foundation is changing philanthropy today.&nbsp; He will give away more money then Rockefeller did at the beginning of the century.&nbsp; How will this change education and medicine in the next few years?&nbsp; For example the Gates foundation is:</p>
<blockquote><p>&#8220;..a foundation whose combined assets will one day exceed the budgets of all but 30 percent of the countries in the world&#8221;</p>
</blockquote>
<p>Talk about having to learn how to scale :-).&nbsp; I it will be interesting to see how he takes on this challenge.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1256&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1256" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/23/gates-is-the-rockefeller-of-our-times-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sprint Review. Cheater, cheater, cheater!</title>
		<link>http://elegantcode.com/2008/06/23/sprint-review-cheater-cheater-cheater/</link>
		<comments>http://elegantcode.com/2008/06/23/sprint-review-cheater-cheater-cheater/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 00:11:17 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Camtasia]]></category>

		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/23/sprint-review-cheater-cheater-cheater/</guid>
		<description><![CDATA[I have just been accused of cheating at last week’s sprint review. Let’s see what you think.
The way our sprint reviews work, everyone in the company gets to rotate between teams who show their work in 15 minute segments. Picture a science fair with parents moving between booths and spending 15 minutes at each one. [...]]]></description>
			<content:encoded><![CDATA[<p>I have just been accused of cheating at last week’s sprint review. Let’s see what you think.</p>
<p>The way our sprint reviews work, everyone in the company gets to rotate between teams who show their work in 15 minute segments. Picture a science fair with parents moving between booths and spending 15 minutes at each one. This has been a hugely successful format because teams get to have more intimate conversations with people seeing their work. Discussions are more interactive because there is a smaller group watching the demo and folks are more likely to speak up.</p>
<p>From the presenter’s point of view, this is showing the same thing 4 times in a row. This is okay, but gets a bit tedious. Worse, because each group brings up individual issues there may be things about the feature that get skipped in a given 15 minute segment.</p>
<h2>What I Did</h2>
<p>I recorded a feature walk through on <a href="http://www.google.com/aclk?sa=L&amp;ai=B-Eo0hjtgSK_fNZKciAGWv9zxDqn3w1-v3N3tA7_73RDQuxsIABABGAEg2pTQBjgAUNTqpoj5_____wFgye7xh-yj2BfIAQHZA3NECy5hXxO7&amp;sig=AGiWqtwvZ4FCPk4N93H5i9uuvR4D8QNpsQ&amp;q=http://www.techsmith.com/camtasia.asp%3FCMP%3DKgoogleCStmhome" target="_blank">Camtasia</a> and played it during sprint review. Four times. This left 3 minutes for discussion, but with the transition times, it pretty much took up the entire 15 minutes. </p>
<p>The most common feedback was, “Cool idea. It was too long.”</p>
<p>Noted. And, I think the idea of doing a complete walk through as a recording has merit because it sort of forces that all areas I want to show will get shown.</p>
<p>It is important to realize that I made the recording a mere hour before Sprint Review. Thus, the software was real and did do what I showed.</p>
<h2>What I Will Do Next Time</h2>
<ul>
<li>Limit the Camtasia video to 5 minutes and leave plenty of time for discussion.</li>
<li>Be more animated. No monotone voice.</li>
</ul>
<p>Your Thoughts? Am I a big, fat cheater?</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1254&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1254" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/23/sprint-review-cheater-cheater-cheater/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Last night&#8217;s NetDug meeting</title>
		<link>http://elegantcode.com/2008/06/20/last-nights-netdug-meeting/</link>
		<comments>http://elegantcode.com/2008/06/20/last-nights-netdug-meeting/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 15:23:13 +0000</pubDate>
		<dc:creator>Chris Brandsma</dc:creator>
		
		<category><![CDATA[User Group]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/20/last-nights-netdug-meeting/</guid>
		<description><![CDATA[So we had a bit of a mix up last night.&#160; We thought we had a speaker arranged, but the speaker was arranged for next month.&#160; Opps.&#160; So we improvised and had the first ever NetDug Open Spaces meeting with about 30 people.&#160; We had pizza and when for about 2 hours.
I think it went [...]]]></description>
			<content:encoded><![CDATA[<p>So we had a bit of a mix up last night.&nbsp; We thought we had a speaker arranged, but the speaker was arranged for next month.&nbsp; Opps.&nbsp; So we improvised and had the first ever NetDug Open Spaces meeting with about 30 people.&nbsp; We had pizza and when for about 2 hours.</p>
<p>I think it went reasonably well.&nbsp; I saw a lot fewer blank stares than usual, that is good, and quite a few people got involved.&nbsp; After a few rounds with the attendees, here is the list of topics we settled on:</p>
<ul>
<li>Inversion of Control (selling it to upper management, and what is it)</li>
<li>ORMs (NHibernate, SubSonic, Linq to SQL, oh my!)</li>
<li>Behavior Driven Design</li>
<li>Web Service Security</li>
</ul>
<p>Obviously you cannot cover all of those topics in depth, but sometimes you don&#8217;t need to.&nbsp; In the course of the discussion we also talked about Test Driven Development, Architecture, when to use singletons and when NOT to, and Active Record Pattern vs Repository Pattern.</p>
<p>Take away&#8217;s from the meeting:</p>
<ul>
<li>There is a lot of interest in IoC libraries out there, but not much practical experience.</li>
<li>We also need to have a session on how to get started with NHibernate.</li>
</ul>
<p>Actually, it was amazing to me how much interest there was in &#8220;advanced&#8221; topics and best practices.&nbsp; Hopefully that will continue.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1252&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1252" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/20/last-nights-netdug-meeting/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Indi Young on Mental Models</title>
		<link>http://elegantcode.com/2008/06/17/indi-young-on-mental-models/</link>
		<comments>http://elegantcode.com/2008/06/17/indi-young-on-mental-models/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 01:19:10 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<category><![CDATA[Agile]]></category>

		<category><![CDATA[BDD]]></category>

		<category><![CDATA[DDD]]></category>

		<category><![CDATA[Modeling]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/17/indi-young-on-mental-models/</guid>
		<description><![CDATA[I was fortunate to sit in a lecture today by Indi Young, co-founder of Adaptive Path and author of the recently published Mental Models, Aligning Design Strategy with Human Behavior. Ms. Young described her framework for constructing Mental Models, which are models representing a user’s thought process as they interact with a system. A Mental [...]]]></description>
			<content:encoded><![CDATA[<p>I was fortunate to sit in a lecture today by <a href="http://www.adaptivepath.com/aboutus/indi.php" target="_blank">Indi Young</a>, co-founder of <a href="http://www.adaptivepath.com/" target="_blank">Adaptive Path</a> and author of the recently published <em><a href="http://www.rosenfeldmedia.com/books/mental-models/" target="_blank">Mental Models, Aligning Design Strategy with Human Behavior</a></em>. Ms. Young described her framework for constructing Mental Models, which are models representing a user’s thought process as they interact with a system. A Mental Model endeavors to give designers and application developers a usable way to see the system under development through the eyes of a user.</p>
<p>It is an interesting idea and an obvious compliment <a href="http://en.wikipedia.org/wiki/Domain_driven_design" target="_blank">Domain Driven Design</a> and <a href="http://en.wikipedia.org/wiki/Behavior_driven_development" target="_blank">Behavior Driven Design</a>. The intent of the Mental Model is to allow designers to envision a user’s thought process and although it isn’t out-of-the-box simple, it is inherently useful.</p>
<p>She had some great feedback for our teams on creating more effective <a href="http://en.wikipedia.org/wiki/Personas" target="_blank">personas</a> and <a href="http://en.wikipedia.org/wiki/Behavior_driven_development#Scenarios.2C_or_Application_Examples" target="_blank">user scenarios</a>. Specifically, keep the personas behavior focused. For instance, I don’t need to know that Harold is a 38 year old fat guy, but I do need to know that he struggles to find content he is after on the web. Make sense?</p>
<p>At any rate, I have every good intention of reading her book and look forward to augmenting my toolbox with Mental Modeling.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1251&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1251" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/17/indi-young-on-mental-models/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Agile Lightening Talk at IIBA</title>
		<link>http://elegantcode.com/2008/06/17/agile-lightening-talk-at-iiba/</link>
		<comments>http://elegantcode.com/2008/06/17/agile-lightening-talk-at-iiba/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 19:24:18 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/17/agile-lightening-talk-at-iiba/</guid>
		<description><![CDATA[I just did a 45 minute talk on Agile at the IIBA (International Institute of Business Analysts) monthly meeting. That was rather tough. No projector, but there was a whiteboard.
I hit on iterative practices, embracing change, adaptive product definition, value flow, and risk mitigation.
What points would you make to a group of Business Analysts in [...]]]></description>
			<content:encoded><![CDATA[<p>I just did a 45 minute talk on Agile at the <a href="http://www.theiiba.org//AM/Template.cfm?Section=Home" target="_blank">IIBA (International Institute of Business Analysts)</a> monthly meeting. That was rather tough. No projector, but there was a whiteboard.</p>
<p>I hit on iterative practices, embracing change, adaptive product definition, value flow, and risk mitigation.</p>
<p>What points would you make to a group of Business Analysts in a 45 minute opportunity?</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1250&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1250" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/17/agile-lightening-talk-at-iiba/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Vista64 SP1 on My MacBook Pro</title>
		<link>http://elegantcode.com/2008/06/16/vista64-sp1-on-my-macbook-pro/</link>
		<comments>http://elegantcode.com/2008/06/16/vista64-sp1-on-my-macbook-pro/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 03:11:25 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/16/vista64-sp1-on-my-macbook-pro/</guid>
		<description><![CDATA[Wow, am I ever glad this is almost over. I thought with the release of Boot Camp 2.1 I wouldn’t have any problems installing Vista 64 on my 2007 MacBook. Think again. It was time to get past the 3G barrier of 32 bit Vista because I really need the VM capacity.
If it weren’t for [...]]]></description>
			<content:encoded><![CDATA[<p>Wow, am I ever glad this is almost over. I thought with the release of Boot Camp 2.1 I wouldn’t have any problems installing Vista 64 on my 2007 MacBook. Think again. It was time to get past the 3G barrier of 32 bit Vista because I really need the VM capacity.</p>
<p>If it weren’t for <a href="http://andersonshatch.wordpress.com/2008/04/13/macbook-pro-and-vista-64-bit/" target="_blank">this guy</a>, I never would have gotten it to work. Thank you, Josh Anderson! Follow his instructions to the letter, but be prepared to shell out some money (just a few Euros) to RapidShare to download the 2.1 drivers in anything less than 24 hours. Unless you pay, you must wait 92 minutes between each download.</p>
<p>When you get to the video drivers, here is a little simpler explanation of how to do this.</p>
<ol>
<li>Go to <a href="http://www.laptopvideo2go.com">www.laptopvideo2go.com</a> </li>
<li>Download the latest driver for Vista 64. The site is a little confusing to me, but the bottom line is to just pull the latest Vista 64 driver. Don’t bother searching around for anything like “MacBook” or “NVidia”. That’s not how the site works. </li>
<li>Download the Modded INF (nv_disp.inf)&#160; file on the same page as your driver. After extracting the driver, place the INF file in the driver directory. </li>
<li>Now do the install. </li>
</ol>
<p>OK, now to the inane answer of what software I put on my virgin system, because that’s what everyone really wants to know, right? OK, in order:</p>
<ol>
<li>Vista 64 Ultimate + Service packs and drivers </li>
<li><a href="http://www.olofsson.info/index.html?inputremapper.html" target="_blank">Input Remapper</a> (to control fan speed under Vista. The Mac runs hot otherwise.) </li>
<li>Launchy </li>
<li>MS Office 2007 Ultimate </li>
<li>Virtual PC 2007 SP1 </li>
<li><a href="http://windowslivewriter.spaces.live.com/blog/cns!D85741BB5E0BE8AA!1508.entry" target="_blank">Live Writer CTP</a> </li>
<li>Visual Studio 2008 Team Suite </li>
<li>ReSharper (but I’d really like to try <a href="http://www.devexpress.com/Products/Net/IDETools/CodeRush/" target="_blank">CodeRush</a>, hint, hint, <a href="http://community.devexpress.com/members/Mark-Miller-_2800_Developer-Express_2900_.aspx" target="_blank">Mark</a>) </li>
<li>SQL Server Developer + SSMS </li>
<li>TortoiseSVN + <a href="http://www.codeplex.com/SvnBridge" target="_blank">SvnBridge for Team Foundation Server</a> </li>
</ol>
<p class="akst_link"><a href="http://elegantcode.com/?p=1249&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1249" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/16/vista64-sp1-on-my-macbook-pro/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Boise APLN Chapter Anyone?</title>
		<link>http://elegantcode.com/2008/06/16/boise-apln-chapter-anyone/</link>
		<comments>http://elegantcode.com/2008/06/16/boise-apln-chapter-anyone/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 20:31:31 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/16/boise-apln-chapter-anyone/</guid>
		<description><![CDATA[I have had several discussions lately with people in the Boise area who are working in Agile software development environments and are looking for similarly situated to discuss things. These aren&#8217;t the kind of discussions that one finds amongst developers, but issues more typically suited to PMs, Managers, and Executives within the organization. Common questions [...]]]></description>
			<content:encoded><![CDATA[<p>I have had several discussions lately with people in the Boise area who are working in Agile software development environments and are looking for similarly situated to discuss things. These aren&#8217;t the kind of discussions that one finds amongst developers, but issues more typically suited to PMs, Managers, and Executives within the organization. Common questions include:</p>
<ul>
<li>&#8220;How do I expand the envelope of done across the organization?&#8221;
<li>&#8220;How do we run sales in an iterative delivery environment?&#8221;
<li>&#8220;How can Agile fit within our PMI phased model?&#8221;
<li>&#8220;How can I plan for the long haul in this model?&#8221;</li>
</ul>
<p>These kinds of topics represent the maturity that Agile practices are reaching in organizations and their applicability beyond software development teams. What a great thing!</p>
<p>The <a href="http://apln.org/" target="_blank">Agile Project Leadership Network</a> (APLN) is an international association of people interested in these very topics. The organization is formed by local chapters of which there are <a href="http://apln.org/localchapters.html" target="_blank">approximately 40</a> today. Membership in the APLN affords opportunities to participate in other events, like the <a href="http://apln.org/summits.html" target="_blank">APLN Leadership Summit in Seattle in July</a>.</p>
<p>This email is a feeler to the community. Are you interested in a Boise Chapter of the APLN? Contact me if this sounds interesting to you.</p>
<p>david (at) elegantcode (dot) com</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1247&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1247" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/16/boise-apln-chapter-anyone/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Code Cast #9, Ward Bell</title>
		<link>http://elegantcode.com/2008/06/16/code-cast-9-ward-bell/</link>
		<comments>http://elegantcode.com/2008/06/16/code-cast-9-ward-bell/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 12:51:52 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Code Cast]]></category>

		<guid isPermaLink="false">http://elegantcode.com/?p=1246</guid>
		<description><![CDATA[Ward Bell, VP of Product Management for IdeaBlade, talked to me at TechEd about DevForce, his company&#8217;s ORM product for .Net developers. It didn&#8217;t stop there. Ward dropped knowledge on  several other things including:

Entity Framework
Silverlight
Designing for Testability
Data access for RIAs

and of course, qualities of Elegant Code.
Get the podcast here.
Share This
]]></description>
			<content:encoded><![CDATA[<p>Ward Bell, VP of Product Management for <a href="http://ideablade.com/">IdeaBlade</a>, talked to me at TechEd about DevForce, his company&#8217;s ORM product for .Net developers. It didn&#8217;t stop there. Ward dropped knowledge on  several other things including:</p>
<ul>
<li>Entity Framework</li>
<li>Silverlight</li>
<li>Designing for Testability</li>
<li>Data access for RIAs</li>
</ul>
<p>and of course, qualities of Elegant Code.</p>
<p><a href="http://elegantcode.com/cast/archives/12">Get the podcast here</a>.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1246&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1246" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/16/code-cast-9-ward-bell/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Blogging From WordPress Dash Apple Widget</title>
		<link>http://elegantcode.com/2008/06/14/blogging-from-wordpress-dash-apple-widget/</link>
		<comments>http://elegantcode.com/2008/06/14/blogging-from-wordpress-dash-apple-widget/#comments</comments>
		<pubDate>Sun, 15 Jun 2008 04:24:31 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Motorcycles]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/14/blogging-from-wordpress-dash-apple-widget/</guid>
		<description><![CDATA[This is a post I am writing on the Apple dashboard WordPress Dash widget for the OSX dashboard.
It lets me use categories, but nothing terribly sophisticated, which is what the name implies. It is simply here to dash something off.
Thing is, I simply cannot find a decent and FREE blog client for the Mac. Frankly, [...]]]></description>
			<content:encoded><![CDATA[<p>This is a post I am writing on the Apple dashboard WordPress Dash widget for the OSX dashboard.</p>
<p>It lets me use categories, but nothing terribly sophisticated, which is what the name implies. It is simply here to dash something off.</p>
<p>Thing is, I simply cannot find a decent and FREE blog client for the Mac. Frankly, nothing I have used stands up to LiveWriter on any platform.</p>
<p>Think MS will port that? <img src='http://elegantcode.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1245&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1245" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/14/blogging-from-wordpress-dash-apple-widget/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Book review: NHibernate in Action</title>
		<link>http://elegantcode.com/2008/06/14/book-review-nhibernate-in-action/</link>
		<comments>http://elegantcode.com/2008/06/14/book-review-nhibernate-in-action/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 20:42:15 +0000</pubDate>
		<dc:creator>Jan Van Ryswyck</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<category><![CDATA[Books]]></category>

		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/14/book-review-nhibernate-in-action/</guid>
		<description><![CDATA[ Writing this book review feels kind of weird&#160; because it hasn&#8217;t actually hit the shelves yet. It is accessible however through the Manning Early Access Program. This book provides a clear insight of using NHibernate as the data access layer of your applications and beyond. 
The excessive amount of NHibernate features&#160; isn&#8217;t the only [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/kuate-cover150.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="235" alt="kuate_cover150" src="http://elegantcode.com/wp-content/uploads/2008/06/kuate-cover150-thumb.jpg" width="195" align="left" border="0"></a> Writing this book review feels kind of weird&nbsp; because it hasn&#8217;t actually hit the shelves yet. It is accessible however through the <a href="http://www.manning.com/kuate/" target="_blank">Manning Early Access Program</a>. This book provides a clear insight of using NHibernate as the data access layer of your applications and beyond. </p>
<p>The excessive amount of NHibernate features&nbsp; isn&#8217;t the only thing that is written down. There is also a good coverage of OO principles and <a href="http://en.wikipedia.org/wiki/Domain-driven_design" target="_blank">Domain-Driven Design</a>, although it isn&#8217;t the primary objective of the book of course. This is especially true for the first and the last three chapters. If you&#8217;ve already read the nominal books <a href="http://en.wikipedia.org/wiki/Domain-driven_design" target="_blank">DDD</a> and you are familiar with Persistence Ignorance, then you can safely skim through these chapters unless you want to see the interpretation of the authors when it comes to these principles. If you are new to these concepts, then these chapters are of great value to wet your appetite.</p>
<p>Although this book covers a lot of ground, I would certainly recommend it when you&#8217;re rather new to NHibernate and ORM&#8217;s in general. I guess this still includes me, although I&#8217;ve been using NHibernate for quite some time now. If you already have some experience with NHibernate, then this book probably doesn&#8217;t teach you that much. Still, it can quickly get you up to speed when you want to use a particular feature that you haven&#8217;t used before. </p>
<p>The only minor thing about this book is that I&#8217;m afraid that it will soon be out-of-date. The book only covers NHibernate 1.2.x and no features from the upcoming 2.0 release, which adds <a href="http://www.ayende.com/Blog/archive/2008/03/31/NHibernate-2.0-Alpha-is-out.aspx" target="_blank">a lot of new and interesting features</a>. It would be nice if the book already covered some of these features as most of them are ported from Hibernate itself, which is the original Java version.</p>
<p>On the other hand, this book provides an in-depth view of the basic features of NHibernate, which aren&#8217;t necessarily going to change that much over time anyway.</p>
<p>Let me round off this post by saying that I&#8217;m really impressed by the list of books that <a href="http://www.manning.com/" target="_blank">Manning</a> is going to release the next couple of months. These are the ones that I&#8217;m particularly interested in:</p>
<ul>
<li><a href="http://www.manning.com/rahien/" target="_blank">Building Domain Specific Languages in Boo</a></li>
<li><a href="http://www.manning.com/palermo/" target="_blank">ASP.NET MVC in Action</a></li>
<li><a href="http://www.manning.com/baley/" target="_blank">Brownfield Application Development in .NET</a></li>
<li><a href="http://www.manning.com/carrero/" target="_blank">IronRuby in Action</a></li>
</ul>
<p>I already bought <a href="http://www.manning.com/marguerie/" target="_blank">LINQ in Action</a> and also read a lot of good things about <a href="http://www.manning.com/skeet/" target="_blank">C# in Depth</a>, which I&#8217;m going to pick up soon.</p>
<p>Take care.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1244&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1244" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/14/book-review-nhibernate-in-action/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft&#8217;s ALM Story</title>
		<link>http://elegantcode.com/2008/06/12/microsofts-alm-story/</link>
		<comments>http://elegantcode.com/2008/06/12/microsofts-alm-story/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 04:31:31 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Architecture and Design]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[Team System]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/12/microsofts-alm-story/</guid>
		<description><![CDATA[Microsoft has embraced the idea of Application Lifecycle Management as a framework upon their software development tools can be positioned. This is a great notion, and one that will take several years of investment even from a company with as many resources as Microsoft. 
ALM is the enterprise software development holy grail that IBM sought [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft has embraced the idea of <a href="http://en.wikipedia.org/wiki/Application_Lifecycle_Management" target="_blank">Application Lifecycle Management</a> as a framework upon their software development tools can be positioned. This is a great notion, and one that will take several years of investment even from a company with as many resources as Microsoft. </p>
<p>ALM is the enterprise software development holy grail that IBM sought for years and invested in with the <a href="http://www-306.ibm.com/software/rational/" target="_blank">Rational tools</a>. And although there is a tremendous value in prescriptive guidance in enterprise development models, there is a natural tension between the ALM crowd and <em>Development as a Craft</em> advocates. ALM, after all, is all about quantifying, measuring, predicting, planning, and economies of scale. Ironically, the kind of transparency and predictability called for by the minimalist Agile community is the same goal of ALM tooling offered by Big Blue and now by the new blue in Redmond.</p>
<p>How are Microsoft products staged to lay across the ALM model? The story today is mixed.</p>
<table cellspacing="0" cellpadding="2" width="366" border="1">
<tbody>
<tr>
<td valign="top" width="160"><strong>ALM Principle</strong></td>
<td valign="top" width="204"><strong>MS Product Answer</strong></td>
</tr>
<tr>
<td valign="top" width="176">Project Management</td>
<td valign="top" width="213">Portfolio Server, Project Server, MS Project</td>
</tr>
<tr>
<td valign="top" width="181">Project Tacking</td>
<td valign="top" width="214">TFS, MS Project</td>
</tr>
<tr>
<td valign="top" width="184">Requirements Planning</td>
<td valign="top" width="213">3rd Party Solutions</td>
</tr>
<tr>
<td valign="top" width="185">Design and Development</td>
<td valign="top" width="212">Visio, Visual Studio</td>
</tr>
<tr>
<td valign="top" width="186">Quality Assurance</td>
<td valign="top" width="211">Visual Studio</td>
</tr>
<tr>
<td valign="top" width="187">Release Management</td>
<td valign="top" width="211">System Center, Team Build</td>
</tr>
<tr>
<td valign="top" width="187">Helpdesk</td>
<td valign="top" width="211">SharePoint?</td>
</tr>
</tbody>
</table>
<p>Your familiarity with these products may lead you to the same conclusion that many have already reached. The products in the stack currently fail to integrate cleanly and many provide only a starting taste of the functionality needed to realize the ALM vision. The story is obviously a little muddy today. But what&#8217;s next?</p>
<p>Team System Rosario promises much improvement in the areas of tracking, design, quality assurance, and development. Significant bridges are also being started toward improving the release management story.</p>
<p>That won&#8217;t do it all, of course. There are other pieces needed in the stack that will need to be freshened up including operational support tools. Microsoft is in hot pursuit of filling this gap with a host of products under the <a href="http://www.microsoft.com/systemcenter/en/us/products.aspx" target="_blank">System Center umbrella of products</a>. An actual helpdesk management system to displace the TechExcels and Remedys of the world is essential here.</p>
<p>The point is, MS has its sights set on a complete ALM story and are focusing on the midsize market, as Microsoft is so good at doing. </p>
<h2>The Good</h2>
<p>A focus on ALM in the Microsoft stack will have a tremendous impact on software development and delivery as we know it. Interoperable components in the pipeline will help bridge those gaps in midsize organizations that are typically only filled in large enterprises. Transparency will be ubiquitous.</p>
<p>Given the open nature of products being developed at MS these days, I have high hopes that these systems will truly be pluggable, so that if you want to bridge TFS to Remedy (for example) doing so is not rocket surgery. Web services are great, aren&#8217;t they?</p>
<h2>Concerns</h2>
<p>There is a fine line between managing for predictability and &#8216;command and control&#8217;. Tools like those in this stack are like guns. They can be used for good, but misuse is more common than not. </p>
<p>Tooling like this gives every non-tool Agilist out there genuine pause, and with good reason. The history of stewardship in complex models like this is less than stellar. That is to say, this tooling can provide huge value, and the basis for crushing souls. Let&#8217;s be careful how we wield them.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1241&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1241" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/12/microsofts-alm-story/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Version Control with 2008 SP1</title>
		<link>http://elegantcode.com/2008/06/12/version-control-with-2008-sp1/</link>
		<comments>http://elegantcode.com/2008/06/12/version-control-with-2008-sp1/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 14:44:46 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Team System]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/12/version-control-with-2008-sp1/</guid>
		<description><![CDATA[I am a simple man. All I ever wanted was drag and drop for source control. That folder chooser dialog was a bear. Now we will get it with Visual Studio 2008 SP1. Thank goodness. From the web site:

Simplified the user experience through cleaner &#8220;Add to Source Control&#8221; dialogs, drag and drop support to the [...]]]></description>
			<content:encoded><![CDATA[<p>I am a simple man. All I ever wanted was drag and drop for source control. That folder chooser dialog was a bear. Now we will get it with <a href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx" target="_blank">Visual Studio 2008 SP1</a>. Thank goodness. From the web site:</p>
<ul>
<li>Simplified the user experience through cleaner &#8220;Add to Source Control&#8221; dialogs, drag and drop support to the Source Control Explorer and a much easier to use &#8220;Workspace&#8221; dialog for working folder mappings.
<li>Version control now automatically supports non-solution controlled files.
<li>Various changes to the Source Control Explorer such as a new checkin date/time display column, local path hyperlink support and en editable source location field.</li>
</ul>
<p>I am not a big fan of installing a beta SP on may dev laptop, but I gotta tell ya, I did it for that feature alone.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1240&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1240" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/12/version-control-with-2008-sp1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Get Latest on Checkout is Satan</title>
		<link>http://elegantcode.com/2008/06/11/get-latest-on-checkout-is-satan/</link>
		<comments>http://elegantcode.com/2008/06/11/get-latest-on-checkout-is-satan/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 22:28:17 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Team Foundation Server]]></category>

		<category><![CDATA[Team System]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/11/get-latest-on-checkout-is-satan/</guid>
		<description><![CDATA[If you are running Team System, there is feature in the source control option in your project level settings that you should be aware of. Right click your team project in the Project Explorer window of Visual Studio.
Go here:
 
And get this screen.
 
Why? Because if you have made some changes to a file while [...]]]></description>
			<content:encoded><![CDATA[<p>If you are running Team System, there is feature in the source control option in your project level settings that you should be aware of. Right click your team project in the Project Explorer window of Visual Studio.</p>
<p>Go here:</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/image.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="219" alt="image" src="http://elegantcode.com/wp-content/uploads/2008/06/image-thumb.png" width="404" border="0"></a> </p>
<p>And get this screen.</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/image1.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="369" alt="image" src="http://elegantcode.com/wp-content/uploads/2008/06/image-thumb1.png" width="404" border="0"></a> </p>
<p>Why? Because if you have made some changes to a file while it wasn&#8217;t checked out, you will not have the option to merge to your local machine. This option will simply overwrite your local code file.</p>
<p>Why does this feature exist? Because oodles of people asked for it because they were used to it in Source Safe, and the team relented.</p>
<p>Repeat: This is a bad idea!</p>
<p>If, however, you are a person who simply must have this turned on in order to feel snug, there is a way to do it without making your entire team experience the hell that will be yours.</p>
<p>In Visual Studio, go to Tools &gt; Options &gt; Source Control &gt; Environment and do this:</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/image2.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="211" alt="image" src="http://elegantcode.com/wp-content/uploads/2008/06/image-thumb2.png" width="404" border="0"></a> </p>
<p>I warned you.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1239&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1239" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/11/get-latest-on-checkout-is-satan/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Code and Sunday School</title>
		<link>http://elegantcode.com/2008/06/11/code-and-sunday-school/</link>
		<comments>http://elegantcode.com/2008/06/11/code-and-sunday-school/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 17:41:52 +0000</pubDate>
		<dc:creator>floyd</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/11/code-and-sunday-school/</guid>
		<description><![CDATA[As a youngster in church, my friends and I would survive boring sermons by making a search game out of the hymn book, writing (for example) &#8220;go to page 433&#8221; on a randomly-selected page. On page 433 was inscribed &#8220;go to page 22&#8221;, and so on, thus creating links ad nauseam.
I had the unpleasant task [...]]]></description>
			<content:encoded><![CDATA[<p>As a youngster in church, my friends and I would survive boring sermons by making a search game out of the hymn book, writing (for example) &#8220;go to page 433&#8221; on a randomly-selected page. On page 433 was inscribed &#8220;go to page 22&#8221;, and so on, thus creating links ad nauseam.</p>
<p>I had the unpleasant task a few years ago of maintaining a series of dBase programs that embraced this concept, and, in fact, were probably written in church. Everything in the code had a value and a meaning, both of which were subject to change as the execution transferred from module to module. A field called field25 in a record may be the business phone number, unless it contained the literal &#8220;VEN&#8221;, which meant that the business phone number could be found in the vendor profile record. Later, field25 became FirstName. Meanwhile, if the vendor profile record&#8217;s b_phone contained &#8220;Line33&#8221;, then control would pass to the 33<sup>rd</sup> line in the code. I called this application the &#8220;coat hanger&#8221; app, as it reminded me of a huge pile of coat hangers, with the objective being to keep everything straight. This app was not one to screw with, as it screwed back, sort of like playing whack-a-mole with a nest of hornets.</p>
<p>When I first saw the phrase &#8220;Elegant code&#8221;, I thought &#8220;<em>Someone finally gets it</em>.&#8221;</p>
<p>So, why take pride in what we do? Let me use the house I live in now, and the work that the previous owner did as an example of what not to do.</p>
<p>Take the laundry room. Recently, I had to remove some of the sheetrock from the wall to repair a leaking main water valve, whose duct tape finally gave out. The center studs were supported by the sheetrock. Perhaps it was to hard to find 16-penny nails, or maybe the sheetrock nails were too short to do the framing. I had never thought of hanging 2&#215;4&#8217;s onto sheetrock, but I have seen code that was done in a similar manner. Not elegant.</p>
<p>Then there are the doorknobs throughout the house. Some have a rectangular flange around the latch, and some are simply a round barrel. Why not put the rectangle ones in the doors with simply round holes? After all, the hole is already there, and nobody will notice if the edge of the door doesn&#8217;t get routed out to accommodate the rectangle flange. It would be very hard to carve out with a sheetrock nail anyway. Besides, someone else will have to maintain this, not me.</p>
<p>Consider the outside paint job. If nobody can see the top of the window casing, why waste paint on it? Sure, there are parts of the old paint job that need to be scraped off, but new paint will work just like glue, holding the old paint in place. This must have helped to create the shortest direct route from the ladder to the hammock and lemonade.</p>
<p>The plumbing was cool, too. The hot and cold faucets were reversed in the two upstairs bathrooms. Perhaps the people living upstairs were left-handed, or did everything behind their backs.</p>
<p>It must have been out of boredom to place the light switches for the bathrooms to the right of the towel rack, three feet from the doorway. Pretty amusing for first-time visitors: &#8220;Does your bathroom have lighting?&#8221;</p>
<p>All in all, it seems that this guy&#8217;s cranial-rectal inversion was a manifestation of apathy and love of duct tape.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; By Contrast &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>The finish carpenter on the last house that we had built took a great deal of pride in his work. When he was finished with his work on the doors, cabinets, railing, and trim, he videotaped his work. I was impressed.</p>
<p>I suppose that this could be considered elegant woodwork. It was done with a lot of focused energy, from selecting materials to puttying the smallest of nail holes. This guy cared about his work, and believed that what he did would make a difference. To him, it was simply the way he was; he took pride in what he did, and his work was a mirror image of his thoughts and actions.</p>
<p>If, as analysts and developers, we concentrate on the video tape at the end of the project, we can influence the community and make analysis and programming a better place to live.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1232&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1232" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/11/code-and-sunday-school/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Boise Code Camp 2009 Date Set</title>
		<link>http://elegantcode.com/2008/06/10/boise-code-camp-2009-date-set/</link>
		<comments>http://elegantcode.com/2008/06/10/boise-code-camp-2009-date-set/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 20:38:56 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
		
		<category><![CDATA[Code Camp]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/10/boise-code-camp-2009-date-set/</guid>
		<description><![CDATA[Code Camp 2008 was such a fun event we just couldn&#8217;t wait to get started planning for next year!
We have already worked with BSU to confirm the date of March 28th, 2009. Things will look a little different next year as we try to broaden both our focus of subject matter and our impact on [...]]]></description>
			<content:encoded><![CDATA[<p>Code Camp 2008 was such a fun event we just couldn&#8217;t wait to get started planning for next year!</p>
<p>We have already worked with BSU to confirm the date of March 28th, 2009. Things will look a little different next year as we try to broaden both our focus of subject matter and our impact on the community.</p>
<p>Next year&#8217;s Code Camp will fully embrace the &quot;Business of Technology&quot; discussions that were so popular in 2008 while still focusing on the hard core coder topics that make Code Camp what it is. Watch for updates as we work out further details, but rest assured that 2009 will be a great camp.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1230&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1230" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/10/boise-code-camp-2009-date-set/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Profiling with dotTrace</title>
		<link>http://elegantcode.com/2008/06/09/profiling-with-dottrace/</link>
		<comments>http://elegantcode.com/2008/06/09/profiling-with-dottrace/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 04:42:16 +0000</pubDate>
		<dc:creator>Chris Brandsma</dc:creator>
		
		<category><![CDATA[Tools and Utilities]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/09/profiling-with-dottrace/</guid>
		<description><![CDATA[Here is a product that I&#8217;ve been meaning to do a review of for a while, dotTrace 3.1.&#160; A .net code profiling tool from JetBrains.&#160; In other words, dotTrace helps you figure out where your code is slow.&#160; How is that not handy.&#160; As an added bonus, it will tell you what your application&#8217;s memory [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a product that I&#8217;ve been meaning to do a review of for a while, <a href="http://www.jetbrains.com/profiler/index.html">dotTrace</a> 3.1.&nbsp; A .net code profiling tool from <a href="http://www.jetbrains.com">JetBrains</a>.&nbsp; In other words, dotTrace helps you figure out where your code is slow.&nbsp; How is that not handy.&nbsp; As an added bonus, it will tell you what your application&#8217;s memory usage is doing as well.</p>
<p>I&#8217;ve been playing around with it for a month or so now and it is wonderful to have.&nbsp; This isn&#8217;t the sort of tool that you whip out all the time, but when you need it, you need it.&nbsp; No doubt there.</p>
<p>But lets throw out some software development methodologies first.&nbsp; </p>
<p><strong>Rule #1: Premature optimization is the root of all evil.</strong> (Donald Knuth said that back in 1974 if you have any issues with it).&nbsp; Again, this isn&#8217;t a tool that you should be using all the time.</p>
<p><strong>Rule #2: If you don&#8217;t measure, you don&#8217;t know.&nbsp; </strong>The is the heart of the engineering part of software development.&nbsp; At my last Boise Code Camp (March 8, 2008) I had two separate people complain to me about how slow .net was for WinForms.&nbsp; OK, so what part was so slow?&nbsp; What were you trying to do?&nbsp; Was the database properly indexed?&nbsp; Did you have measurements about what is slow?&nbsp; Nope.&nbsp; Nothing.&nbsp; I can&#8217;t comment on their code, I didn&#8217;t see it.&nbsp; But for all they know the problem could have been anywhere in their code.&nbsp; It could have been the database was improperly tuned, it could be they were running on really slow hard-drives.&nbsp; They simply did not know.&nbsp; To me that is not acceptable.</p>
<p><strong>Rule #3: Where-ever you thing the problem is &#8212; is wrong.</strong>&nbsp; This really is just a continuation of Rule #2.&nbsp; But it is directly related to how many people I&#8217;ve talk to that get disgusted with me when I talk about ORMs.&nbsp; &#8220;They are too slow&#8221; is the answer I get.&nbsp; Accordingly, I&#8217;ve talked to two developers for whom that was true, for the particular application they were writing.&nbsp; For the rest, their app was slow, so they were assuming it mush be the fault of the ORM &#8212; and telling everyone else as much as well.&nbsp; Also not acceptable.&nbsp; They did not know where their problems actually were.</p>
<p>I&#8217;ve made this mistake too many times to count myself.&nbsp; Spending countless hours optimizing and tuning code that had no net effect in the end.&nbsp; I hadn&#8217;t tested, and it proved to be wrong.&nbsp; And how many of you checked that code in anyway, because you didn&#8217;t want to see all that time go to waist?</p>
<p><strong>Rule #4: This isn&#8217;t the only tool you should be using.</strong>&nbsp; A properly written application should be testable with unit tests.&nbsp; It should also have unit tests.&nbsp; If you find the problem with your code, you should be able to reproduce it with your unit tests, measure it from there, and then possibly fix it.&nbsp; That is the heart of the Red-Green-Refactor motto of TDD.&nbsp; A code profiler will help you FIND the problem.&nbsp; Unit Tests should help you FIX the problem and know it is fixed.</p>
<h2>Enough already, on to the review</h2>
<p>First of, on Rule #4: DotTrace paired with ReSharper actually make a wonderful paring.&nbsp; The two integrate in together so you can launch DotTrace from your test cases in the ReSharper unit test runner.&nbsp; That is just plain beautiful. </p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/dottrace-003.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="125" alt="DotTrace-003" src="http://elegantcode.com/wp-content/uploads/2008/06/dottrace-003-thumb.png" width="241" border="0"></a> </p>
<p>On Rule #3: DotTrace&#8217;s UI is a tree structure that really does allow you to follow the bread crumbs to find where the performance problems are.&nbsp; Here is a look at SubSonic SubStage (a nice little application that helps generate your SubSonic files for you, as well as show results of the tables).</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/dottrace-002.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="192" alt="DotTrace-002" src="http://elegantcode.com/wp-content/uploads/2008/06/dottrace-002-thumb.png" width="244" border="0"></a> </p>
<p>I was looking at the boot up time of the application.&nbsp; Using the tree and the small iconography I was quickly able to figure out that a good chuck of time was being spent in the NavigateFileBrowser method.&nbsp; Below the tree view a listing of the code is displayed as well.</p>
<p>Another quick note about the display, the grayed out text is system code.&nbsp; DotTrace doesn&#8217;t detect a pdb, so it can&#8217;t show you the code that is being executed.</p>
<p>On Rule #2: You can store snapshots &#8212; and compare them.&nbsp; Actually there are three ways to compare snapshots.&nbsp; Through the call tree (showing the call stack), plain view (showing slowest functions first), and Hot Spots (top 100 problem methods).&nbsp; </p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/dottrace-004.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="154" alt="DotTrace-004" src="http://elegantcode.com/wp-content/uploads/2008/06/dottrace-004-thumb.png" width="244" border="0"></a> </p>
<p>It is amazing how often some seemingly benign code will have significant performance impact.&nbsp; Best part, now you can find out where the problem is&#8230;and where it is getting worse.</p>
<p>As for Rule #1, it might take a while to figure out, but it is true. But the key to the rule, and all software development, is to have good tools to help you along.&nbsp; This is a good tool, and this is just the beginning of its features.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1229&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1229" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/09/profiling-with-dottrace/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Psychology and Software Development</title>
		<link>http://elegantcode.com/2008/06/09/psychology-and-software-development/</link>
		<comments>http://elegantcode.com/2008/06/09/psychology-and-software-development/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 01:45:59 +0000</pubDate>
		<dc:creator>Jim Hoffman</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/09/psychology-and-software-development/</guid>
		<description><![CDATA[I have recently started a new job and needed to go through my stack of software books looking for ones that might be helpful. I ran across a book I read many years ago that has probably helped me more that any other book with project management. This book is not a software book though. [...]]]></description>
			<content:encoded><![CDATA[<p>I have recently started a new job and needed to go through my stack of software books looking for ones that might be helpful. I ran across a book I read many years ago that has probably helped me more that any other book with project management. This book is not a software book though. It is <a href="http://www.amazon.com/Influence-Psychology-Persuasion-Business-Essentials/dp/006124189X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1213062063&amp;sr=1-1">Influence, The Psychology of Persuasion by Robert B. Cialdini, PH.D</a>. This book helped me realize that developing software has more to do with people than computers.</p>
<p>I found one chapter in the book particularly helpful, Chapter 2, Commitment and Consistency: Hobgoblins of the Mind. The main gist of the chapter is that people try to be consistent with their actions; therefore by getting commitment from a person you can guide them to a desired action. One example of this is the free <a href="http://www.urbandictionary.com/define.php?term=swag">SWAG</a> many companies give away. If Apple can get you wear their new cool shirt they are giving away, you will start seeing yourself as an apple person. When it comes time to by a digital music player you will be more likely to buy an ipod as an automatic response to being consistent. Generally speaking the more public the commitment the stronger the consistency response will be. That is why they say if you want to lose weight or quit smoking you will have a better chance by making your intentions public.</p>
<p>At the time I read the book I just started as a Project Lead. One of the first things I ran across in my new position was the issue of poor requirements. These came in several variants. One was the vague requirement that could fit almost any problem. Another was the software solution disguised as a requirement. All this was mixed with requirements that where just plain wrong. Considering myself a pragmatic person I decided that we would revisit each requirement just before we where ready to implement it. To my surprise this approach did not work. As far as the project manager was concerned, the requirements where done and did not need further discussion, no matter how small the change would be.</p>
<p>I later realized that commitment and consistency was the source of the problem we where having. The project manager spent a great deal of time writing the requirements document. It was a mark of the project managers work and who she was. Asking her to break her idea of consistency went against human behavior, and was bound to fail. The problem was not the project manager or the requirements but the process that required a great deal of commitment to information that stood a good chance of being wrong. The trick is to match the level of commitment to the task.</p>
<p>Extreme Programming offered a nice solution to this particular issue, the stories on a note card. This solution is nice as it offered a nice balance between commitment and change. The requirements document from my previous project interjected too much commitment. The note cards do not require as much work and is not as permanent or public as to cause over commitment to a requirement.</p>
<p>On the other hand, some things need a larger degree of commitment. For example time lines usually need to be kept. This is a good place for some kind of public formal agreement. I have worked on many projects where the management team sets the time lines and gives them on the team. This is a sub-optimal situation at best. A much better approach is to create a high level of commitment to the time line with the team.</p>
<p>Scrum has very good solution to this. The time line for a sprint is fixed and public knowledge. The contents of the sprint is decided by the team doing the work and made public. This gives the team the firm commitment that is needed to make the time line work.</p>
<p>I now find that I consider the level of commitment for any team task I am about to oversee. If I am having a problem getting the team to change course, I know I need to tone down the commitment on that part of the project. Conversely, if the team is having an issue keeping on course, I need to increase the level of commitment.</p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1222&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1222" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/09/psychology-and-software-development/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ReSharper 4.0 Released</title>
		<link>http://elegantcode.com/2008/06/09/resharper-40-released/</link>
		<comments>http://elegantcode.com/2008/06/09/resharper-40-released/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 21:51:19 +0000</pubDate>
		<dc:creator>Chris Brandsma</dc:creator>
		
		<category><![CDATA[Esoterica]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/09/resharper-40-released/</guid>
		<description><![CDATA[No more living life dangerously with beta versions and release candidates.&#160; You can now get the real thing.http://www.jetbrains.com/resharper/
Share This
]]></description>
			<content:encoded><![CDATA[<p>No more living life dangerously with beta versions and release candidates.&nbsp; You can now get the real thing.<br /><a href="http://www.jetbrains.com/resharper/">http://www.jetbrains.com/resharper/</a></p>
<p class="akst_link"><a href="http://elegantcode.com/?p=1221&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_1221" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/09/resharper-40-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Where to start a new program</title>
		<link>http://elegantcode.com/2008/06/08/where-to-start-a-new-program/</link>
		<comments>http://elegantcode.com/2008/06/08/where-to-start-a-new-program/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 19:50:39 +0000</pubDate>
		<dc:creator>Chris Brandsma</dc:creator>
		
		<category><![CDATA[Architecture and Design]]></category>

		<category><![CDATA[Design Patterns]]></category>