<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUQHSH8yfSp7ImA9WhRTGEQ.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596</id><updated>2011-11-09T22:55:39.195-05:00</updated><category term="C#" /><category term="SpecFlow" /><category term="StructureMap" /><category term="LINQ" /><category term="Visual Studio" /><category term="MVC" /><category term="NuGet" /><category term="IoC" /><category term="Refactoring" /><category term="Mercurial" /><category term="ASP.NET" /><category term="Testing" /><title>Coffee Driven Developer</title><subtitle type="html">Discoveries during software development</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://coffeedrivendev.blogspot.com/" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/CoffeeDrivenDeveloper" /><feedburner:info uri="coffeedrivendeveloper" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkYFSHozfyp7ImA9WhdbGUs.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-3103885860309596106</id><published>2011-10-18T13:48:00.000-04:00</published><updated>2011-10-18T13:48:39.487-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-18T13:48:39.487-04:00</app:edited><title>Re-Starting a Blog for the Very Third Time</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-sFrmRmqVfew/To3gB5ZwI-I/AAAAAAAACOU/dgqC-fm9RoI/s1600/font-selection-chart.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="224" src="http://3.bp.blogspot.com/-sFrmRmqVfew/To3gB5ZwI-I/AAAAAAAACOU/dgqC-fm9RoI/s320/font-selection-chart.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://www.behance.net/Gallery/So-you-need-a-typeface/486723"&gt;How to pick the right font&lt;/a&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
The better part of year has passed since I bothered to blog. Shameful. Writing is important for so many reasons; the most important to me is that you don't really know something until you've tried to explain or teach it to someone else. In the case of my blog, that might be a conversation to myself, but that is beside the point. I need a fresh start.&lt;br /&gt;
&lt;br /&gt;
Starting a new blog requires a lot of decisions to be made. First, I'm a coder, a programmer, a writer of software. Do I roll my own blog engine? It's easy. The first &lt;a href="http://www.youtube.com/watch?v=Gzj723LkRJY"&gt;Rails&lt;/a&gt; cast I ever saw shows &lt;a href="http://david.heinemeierhansson.com/"&gt;DHH&lt;/a&gt; spitting out one in 15 minutes. It'd be easy and relatively fun. I could use Rails. I could use &lt;a href="http://www.nancyfx.org/"&gt;Nancy&lt;/a&gt;. I could use &lt;cod&gt;Microsoft ASP.NET MVC. The options are limitless, when you have the source code.&lt;br /&gt;
&lt;br /&gt;
The downside to that is that Blogger is a really nice platform. I also have a small number of posts tied to the Blogspot url. Some of them don't completely suck. I was even mentioned by &lt;a href="http://haacked.com/archive/2010/12/07/nuget-roundup-december-2010-edition.aspx"&gt;Phil Haack&lt;/a&gt; once. It'd be sort of lame losing the Blogspot address. So I decided to stick with Blogger. I might revisit that decision. However, I did determine that a redesign was essential.&lt;br /&gt;
&lt;br /&gt;
I'm not a good designer &lt;i&gt;(yet!)&lt;/i&gt;. So I decided I'd do the next best thing, which is to keep the design simple. It isn't as good &lt;a href="http://www.hanselman.com/blog/HireAndPayADesignerAndBeHappy.aspx"&gt;Hanselman's&lt;/a&gt; redesign, but I'm happy with it. One day, I'll either hire a designer or gain enough skill to pull a beautiful design like this off. There are some tweaks I still need to make with column layout, background images, and general layout. Baby steps.&lt;br /&gt;
&lt;br /&gt;
One element I did spend some time on was the typeface. I had recently listened to &lt;a href="http://thisdeveloperslife.com/post/2-0-5-typo"&gt;This Developer's Life: Typo&lt;/a&gt; that reminded me how important layout and typeface can be to a design. The pod cast features a great interview, as always, with &lt;a href="http://billhillsblog.blogspot.com/"&gt;Bill Hill&lt;/a&gt;. He's always inspirational to listen to. I chose the serif-font Palatino, as a variant of Georgia. Mainly because I wanted to be a little different from all the sans-serif/Arial blogs out there. Check out &lt;a href="http://cssfontstack.com/"&gt;CSS Font Stacks&lt;/a&gt; to assist you in picking the right font stack. It's appealing, to me, but then again I may have &lt;span style="font-family: 'Comic Sans MS';"&gt;Comic Sans'd&lt;/span&gt; it.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-3103885860309596106?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/UwCfUAQco2g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/3103885860309596106/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2011/10/re-starting-blog-for-very-third-time.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/3103885860309596106?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/3103885860309596106?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/UwCfUAQco2g/re-starting-blog-for-very-third-time.html" title="Re-Starting a Blog for the Very Third Time" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-sFrmRmqVfew/To3gB5ZwI-I/AAAAAAAACOU/dgqC-fm9RoI/s72-c/font-selection-chart.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2011/10/re-starting-blog-for-very-third-time.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MASHgzeSp7ImA9Wx9SF08.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-457340425333327892</id><published>2010-12-07T06:27:00.003-05:00</published><updated>2010-12-07T06:30:49.681-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-07T06:30:49.681-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NuGet" /><title>Creating a NuGet Package</title><content type="html">&lt;p&gt;&lt;a href="http://nuget.codeplex.com" target="_blank"&gt;NuGet&lt;/a&gt; is a package manager for .NET that was recently released by Microsoft as a CTP. This library is similar to &lt;em&gt;gems&lt;/em&gt; or &lt;em&gt;cpan&lt;/em&gt; or similar libraries in other languages. I decided to try my hand at creating a &lt;em&gt;HelloWorld&lt;/em&gt; package.&lt;/p&gt;&lt;p&gt;First I needed a package. My original idea was to create something useful enough to &lt;a href="http://nupackpackages.codeplex.com/" target="_blank"&gt;contribute to the public feed of NuGet packages&lt;/a&gt;. I started by creating the &lt;a href="http://shelf.codeplex.com" target="_blank"&gt;Shelf&lt;/a&gt; library, which is a small set of extension methods. Notably, I created the &lt;code&gt;Each&amp;lt;T&amp;gt;&lt;/code&gt; method that extends &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt;. It takes an &lt;code&gt;Action&amp;lt;T&amp;gt;&lt;/code&gt;, invoking the action for every item in the sequence. It's a trivial and small library at the moment, but imagine it is something useful and complicated. The library itself isn’t the point here.&lt;/p&gt;&lt;p&gt;Create the package “manifest” (my term).&lt;/p&gt;&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:c1d77ec8-8da1-4fea-af36-33c6ecce16f8" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: xml;"&gt;&amp;lt;package&amp;gt;
  &amp;lt;metadata&amp;gt;
    &amp;lt;id&amp;gt;shelf&amp;lt;/id&amp;gt;
    &amp;lt;version&amp;gt;2010.1203.2330.42313&amp;lt;/version&amp;gt;
    &amp;lt;authors&amp;gt;Kwak&amp;lt;/authors&amp;gt;
    &amp;lt;description&amp;gt;Shelf is a library of common extension methods&amp;lt;/description&amp;gt;
    &amp;lt;language&amp;gt;en-US&amp;lt;/language&amp;gt;
  &amp;lt;/metadata&amp;gt;
  &amp;lt;files&amp;gt;
    &amp;lt;file src="Shelf\bin\Release\*.dll" target="lib" /&amp;gt;
    &amp;lt;file src="Shelf\bin\Release\*.pdb" target="lib" /&amp;gt;
  &amp;lt;/files&amp;gt;
&amp;lt;/package&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The documentation says the files element is optional. It seems I didn’t discover the “convention” they were speaking about in the documentation. I needed it.&lt;/p&gt;&lt;p&gt;I ran the command-line tool &lt;em&gt;nuget.exe&lt;/em&gt; passing it the &lt;em&gt;pack&lt;/em&gt; command and the package manifest. It spat out the packaged file (BTW, you can use just about any zip tool to browse the contents of the package).&lt;/p&gt;&lt;p&gt;There are couple of different ways to deploy the package. Submitting your package for inclusion in the public feed is one option. You can put the file on any accessible URL. The NuGet source includes a “Server” utility. Until my library grows to a point where it’s not laughably trivial, I opted for just putting it in my file system and pointing the package manager to folder. Phil Haack has a &lt;a href="http://haacked.com/archive/2010/10/21/hosting-your-own-local-and-remote-nupack-feeds.aspx" target="_blank"&gt;great post&lt;/a&gt; explaining the deployment options.&lt;/p&gt;&lt;p&gt;So with my package (&lt;em&gt;shelf.2010.1203.2330.42313.nupkg&lt;/em&gt;) located in my local packages folder, anytime I want to make use of the shelf library, I simply go to the package manager console and type &lt;/p&gt;&lt;pre&gt;Install-Package shelf&lt;/pre&gt;NuGet goes off, makes sure it has the latest package, adds the package folder to my source if it doesn't already exist, downloads (copies) the assembly, and adds the reference to the project.    &lt;p&gt;Here are some of the references, I’ve found useful:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.hanselman.com/blog/IntroducingNuPackPackageManagementForNETAnotherPieceOfTheWebStack.aspx" target="_blank"&gt;Scott Hanselman’s walkthrough&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://haacked.com/archive/2010/10/21/hosting-your-own-local-and-remote-nupack-feeds.aspx" target="_blank"&gt;Phil Haack’s aforementioned post on deployment options.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.codeplex.com/documentation" target="_blank"&gt;The NuGet Documentation and CodePlex site.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Conclusion:&lt;/b&gt; Piece of cake and terribly useful for consumers of your library.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-457340425333327892?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/qm-RRJADswU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/457340425333327892/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2010/12/creating-nuget-package.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/457340425333327892?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/457340425333327892?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/qm-RRJADswU/creating-nuget-package.html" title="Creating a NuGet Package" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2010/12/creating-nuget-package.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYAQncycCp7ImA9Wx5SE0s.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-3513976596172927866</id><published>2010-08-09T11:35:00.001-04:00</published><updated>2010-08-09T11:35:43.998-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-09T11:35:43.998-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mercurial" /><title>Mercurial .hgignore File for .NET Projects</title><content type="html">&lt;p&gt;I’m currently using Mercurial, and find myself starting out with this as a base .hgignore file.&lt;/p&gt;  &lt;pre class="brush: plain;"&gt;glob:bin/*
glob:TestResults/*
glob:obj/*
glob:*.suo
glob:*.user&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-3513976596172927866?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/9Wc5_EvOfCY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/3513976596172927866/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2010/08/mercurial-hgignore-file-for-net.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/3513976596172927866?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/3513976596172927866?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/9Wc5_EvOfCY/mercurial-hgignore-file-for-net.html" title="Mercurial .hgignore File for .NET Projects" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2010/08/mercurial-hgignore-file-for-net.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YESXwyfyp7ImA9WxFQEkQ.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-5957451159949092219</id><published>2010-05-07T23:58:00.001-04:00</published><updated>2010-05-07T23:58:28.297-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-07T23:58:28.297-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Testing" /><category scheme="http://www.blogger.com/atom/ns#" term="SpecFlow" /><title>Configuring SpecFlow to Work with MSTest</title><content type="html">&lt;p&gt;Add a reference to TechTalk.SpecFlow and then put this in an App.config file of the MSTest project:&lt;/p&gt;  &lt;pre class="brush: xml;"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;
&amp;lt;configuration&amp;gt;
  &amp;lt;configSections&amp;gt;
    &amp;lt;section name=&amp;quot;specFlow&amp;quot; type=&amp;quot;TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow&amp;quot;/&amp;gt;
  &amp;lt;/configSections&amp;gt;

  &amp;lt;specFlow&amp;gt;
    &amp;lt;unitTestProvider name=&amp;quot;MsTest&amp;quot; /&amp;gt;
  &amp;lt;/specFlow&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-5957451159949092219?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/3uMoF4sdbJc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/5957451159949092219/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2010/05/configuring-specflow-to-work-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/5957451159949092219?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/5957451159949092219?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/3uMoF4sdbJc/configuring-specflow-to-work-with.html" title="Configuring SpecFlow to Work with MSTest" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2010/05/configuring-specflow-to-work-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMFQ3o7fSp7ImA9WxFRGUg.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-3164740867122132399</id><published>2010-05-04T01:08:00.003-04:00</published><updated>2010-05-04T01:20:12.405-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-04T01:20:12.405-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>Visual Studio 2010 Styles</title><content type="html">&lt;p&gt;If you haven’t checked out &lt;a href="http://studiostyles.info/" target="_blank"&gt;Studio Styles&lt;/a&gt; yet, please go do so. An improved version of the old &lt;a href="http://www.codinghorror.com/blog/2006/09/is-your-ide-hot-or-not.html" target="_blank"&gt;Is Your IDE Hot or Not&lt;/a&gt; (the old site seems to have fallen into disrepair). Studio Styles is one of those well-executed, brilliant ideas, that has you saying, “Why didn’t I think of that?”&lt;/p&gt;&lt;p&gt;I spent some time creating a version of my favorite color scheme. It’s called &lt;a href="http://studiostyles.info/schemes/distant-stormy-shore" target="_blank"&gt;Distant Stormy Shore&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://studiostyles.info/schemes/distant-stormy-shore" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="CropperCapture[1]" border="0" alt="CropperCapture[1]" src="http://lh6.ggpht.com/_yJRO8Ay9w74/S9-rwfVZFaI/AAAAAAAAB90/v_yFFJYg6PE/CropperCapture%5B1%5D%5B11%5D.png?imgmax=800" width="640" height="415" /&gt;&lt;/a&gt; It’s based on the work by Thomas Restrepo on the &lt;a href="http://winterdom.com/2008/03/distantshoresavisualstudiocolorscheme" target="_blank"&gt;Distant Shores&lt;/a&gt; color scheme.&lt;/p&gt;&lt;p&gt;Please download and give me a “Hot” rating if you like it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-3164740867122132399?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/ITBK3uAAi7k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/3164740867122132399/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2010/05/visual-studio-2010-styles.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/3164740867122132399?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/3164740867122132399?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/ITBK3uAAi7k/visual-studio-2010-styles.html" title="Visual Studio 2010 Styles" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_yJRO8Ay9w74/S9-rwfVZFaI/AAAAAAAAB90/v_yFFJYg6PE/s72-c/CropperCapture%5B1%5D%5B11%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2010/05/visual-studio-2010-styles.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUBQH87eCp7ImA9WxFRFko.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-664063904019267208</id><published>2010-04-30T21:26:00.002-04:00</published><updated>2010-04-30T21:27:31.100-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-30T21:27:31.100-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Yet Another FizzBuzz</title><content type="html">&lt;p&gt;As interesting as I could make it.&lt;/p&gt;&lt;pre class="brush: csharp"&gt;private static string FizzBuzz()
    {
      var fizzBuzzMap = 
        Enumerable
          .Range(1, 100)
          .Select(num =&amp;gt; MapToFizzBuzz(num));

      return String.Join(&amp;quot;\n&amp;quot;, fizzBuzzMap.ToArray());
    }

    private static string MapToFizzBuzz(int num)
    {
      if (num % 15 == 0)
        return &amp;quot;FizzBuzz&amp;quot;;
      if (num % 5 == 0)
        return &amp;quot;Buzz&amp;quot;;
      if (num % 3 == 0)
        return &amp;quot;Fizz&amp;quot;;
      return num.ToString();
    }&lt;/pre&gt;&lt;p&gt;Before, I lost interest.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-664063904019267208?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/aUJDus4V2n8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/664063904019267208/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2010/04/yet-another-fizzbuzz.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/664063904019267208?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/664063904019267208?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/aUJDus4V2n8/yet-another-fizzbuzz.html" title="Yet Another FizzBuzz" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2010/04/yet-another-fizzbuzz.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYMQHgyeSp7ImA9WxFTEE0.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-6835682063750278548</id><published>2010-03-25T00:33:00.001-04:00</published><updated>2010-03-30T23:29:41.691-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-30T23:29:41.691-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="IoC" /><category scheme="http://www.blogger.com/atom/ns#" term="StructureMap" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>Dependency Injection and the Controller Factory in ASP.NET MVC</title><content type="html">&lt;p&gt;&lt;strong&gt;This is a re-post from the older blog. I’m retiring that blog address and this is one of those posts that I refer to when setting up a new project.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Using an IoC is one of those things that can take a time or two to understand where it fits in and how it’s useful. Once you cross the energy barrier, it’s a color in your palette you can’t imagine missing. &lt;/p&gt;  &lt;p&gt;Imagine having a QuestionController that takes an interface called DomainRepository. The job of any concrete implementation of the DomainRepository will be to fetch various domain entities from a backing store.&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;public class QuestionController : Controller
{

  private DomainRepository _repository;

  public QuestionController(
	DomainRepository repository)
  {
    _repository = repository;
  }

  public ActionResult Index()
  {
    ViewData.Model = _repository.AllQuestions;
    return View();
  }

}&lt;/pre&gt;

&lt;p&gt;This is a perfect place to use an IoC container to provide build a concrete implementation and all of it's dependencies&lt;/p&gt;

&lt;p&gt;The gotcha is that ASP.NET MVC, by default, requires its controllers to have default constructors. Luckily, ASP.NET MVC uses a &lt;code&gt;ControllerBuilder&lt;/code&gt; to instantiate the controllers using a ControllerFactory. This is an extension point where we can provider our own factory, one that uses the IoC of choice to resolve the controller.&lt;/p&gt;

&lt;p&gt;You'll need a class for the new controller factory. This is a minimal implementation that doesn't make use of the MVC 2 &lt;code&gt;requestContext&lt;/code&gt; parameter&lt;/code&gt; &lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;public class StructureMapControllerFactory : DefaultControllerFactory
{
  protected override IController GetControllerInstance(
	RequestContext requestContext, 
        Type controllerType)
  {
    return 
	ObjectFactory
	.GetInstance(controllerType) as IController;
  }

}&lt;/pre&gt;

&lt;p&gt;In your bootstrapper, or in the Global.asax.cs, make the ControllerBuilder use the new controller factory&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;ControllerBuilder.Current
	.SetControllerFactory(
          new StructureMapControllerFactory());&lt;/pre&gt;

&lt;p&gt;Also, in the bootstrapper, or in the Global.asax, setup your container. This is using StructureMap's 2.6.1 syntax&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;ObjectFactory.Initialize(factory =&amp;gt;
{
  factory
    .For&amp;lt;DomainRepository&amp;gt;()
    .Use&amp;lt;NoSqlDomainRepository&amp;gt;();
});&lt;/pre&gt;

&lt;p&gt;These are the minimal steps required to get the ASP.NET MVC web application ready for use with an IoC (e.g., StructureMap).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-6835682063750278548?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/uYxLRLXpjJ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/6835682063750278548/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2010/03/dependency-injection-and-controller.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/6835682063750278548?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/6835682063750278548?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/uYxLRLXpjJ4/dependency-injection-and-controller.html" title="Dependency Injection and the Controller Factory in ASP.NET MVC" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2010/03/dependency-injection-and-controller.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08EQng5eCp7ImA9WxBbF0w.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-3248588933951724518</id><published>2010-03-16T01:03:00.001-04:00</published><updated>2010-03-16T01:03:23.620-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-16T01:03:23.620-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Testing" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Declarative Style is My Golden Hammer</title><content type="html">&lt;p&gt;I was working on a little pet project recently, and I really was tickled when I wrote my unit tests like this:&lt;/p&gt;&lt;pre class="brush: csharp;"&gt;  public class Given_a_HomeController
  {

    private static HomeController controller;

    [TestClass]
    public class when_asked_for_the_index
    {

      private ActionResult the_result;

      [TestInitialize]
      public void because()
      {
        using_a_new_home_controller();
        after_performing_the_index_action();
      }
      
      public void using_a_new_home_controller()
      {
        controller = new HomeController();
      }

      public void after_performing_the_index_action()
      {
        the_result = controller.Index();
        Assert.IsNotNull(the_result);
      }

      [TestMethod]
      public void it_should_return_a_ViewResult_for_the_Index_view()
      {
        the_result.is_a_ViewResult().for_a_view_named("Index");
      }

    }&lt;/pre&gt;

&lt;p&gt;If you can read through the test attribute decorators and the public void C# noise, the setup and the tests read like this:&lt;/p&gt;&lt;pre class="brush: plain;"&gt;Given a HomeController:
    When asked for the index:
        because:
            using a new HomeController
            after executing the Index action

        it should return a ViewResult for the Index View
&lt;/pre&gt;
&lt;p&gt;It made me smile.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-3248588933951724518?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/a9E0wq8uEhQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/3248588933951724518/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2010/03/declarative-style-is-my-golden-hammer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/3248588933951724518?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/3248588933951724518?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/a9E0wq8uEhQ/declarative-style-is-my-golden-hammer.html" title="Declarative Style is My Golden Hammer" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2010/03/declarative-style-is-my-golden-hammer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMASXs7eCp7ImA9WxBWFE4.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-773719282117452026</id><published>2010-02-06T00:15:00.001-05:00</published><updated>2010-02-06T00:17:28.500-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-06T00:17:28.500-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Testing" /><title>Fitnesse Test Styling</title><content type="html">&lt;p&gt;In my previous post, I concentrated on setting up Fitnesse. Unfortunately, I did a lot of hand-waving when it came to the test used in the example. I got called out on it, and rightfully so.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Gregor said…&lt;/p&gt;    &lt;p&gt;Are you really hard coding the prices and the name of the product into the method names? Do you also have methods named &amp;quot;The_sub_total_shows_3_49&amp;quot; and The_sub_total_shows_8_17&amp;quot;? This means that you cannot change your acceptance test without renaming or adding methods in the fixture. This surely is not the purpose of FitNesse.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The test wasn’t the purpose of the post, and I should probably have &lt;em&gt;Lorem ipsum’d&lt;/em&gt; it. Alternatively, I could have explained myself a little better, and improved the test.&lt;/p&gt;  &lt;p&gt;My response to the comment is, “Sincerely, thank you for your comments, and yes, yes, true, and sure it is.” The real problem to my point of view is that the product owner, subject-matter expert, customer, stakeholder, or whatever you have probably explained to the programmer (me) something like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The customer purchases items. Those items are scanned. The price of the item is put on the bill along with it's description. See figure 1. The subtotal is calculated as the sum of the price of all items on the bill and displayed at the bottom.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I immediately translated this in real time into an implementation. That of a bill, of descriptions showing up on receipts, and prices being displayed and tallied. I broke up the statement into easily re-useable and parameterized chunks. In traditional Fit/Fitnesse tests this probably could have been efficiently captured in a traditional &lt;em&gt;ColumnFixture&lt;/em&gt; and look something like:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_yJRO8Ay9w74/S2z62cKOoPI/AAAAAAAABAQ/WmmDxd7ChpU/s1600-h/colfixturetotalitems3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="col-fixture-total-items" border="0" alt="col-fixture-total-items" src="http://lh3.ggpht.com/_yJRO8Ay9w74/S2z63X5FEhI/AAAAAAAABAU/EHceJeXTCyA/colfixturetotalitems_thumb1.png?imgmax=800" width="444" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The corresponding fixture implementation could then be given as&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;  public class TotalItemsPurchased : fit.ColumnFixture
  {

    private Bill _bill;

    public TotalItemsPurchased ()
      {
        _bill = new Bill();
      }

    public string Sku
    {
      get
      {
        return _bill.LastItem.Sku;
      }
      set 
      {
        _bill.Scan(value);
      }
    }

    public string Subtotal()
    {
      return _bill.SubTotal.ToString(&amp;quot;C&amp;quot;);
    }

    public string Description()
    {
      return _bill.LastItem.Description;
    }

    public string Price()
    {
      return _bill.LastItem.Price.ToString(&amp;quot;C&amp;quot;);
    }
  }&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Where &lt;em&gt;Bill&lt;/em&gt; is the system under test (or it is for this example anyway). There is nothing wrong with this. It’s a very clean, clear, and concise way to implement these requirements, and to Gregor’s point the implementation code isn’t so weird anymore.&lt;/p&gt;

&lt;p&gt;For me though, writing acceptance tests like this becomes too much like programming. I’m moving towards making my acceptance tests read more like end-user documentation. I’d rather the acceptance tests be in the words of the customer. I’m even willing to threaten to publish the acceptance tests as the end-user documentation. &lt;/p&gt;

&lt;p&gt;A better example of flow mode using plain-text tables would have been to take the actual words of the customer and make them directly executable.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_yJRO8Ay9w74/S2z64CiThZI/AAAAAAAABAY/rQFpu7yRNk8/s1600-h/totalitemsenduser3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="total-items-end-user" border="0" alt="total-items-end-user" src="http://lh5.ggpht.com/_yJRO8Ay9w74/S2z65Oo4ewI/AAAAAAAABAc/nuMKtHLGLbo/totalitemsenduser_thumb1.png?imgmax=800" width="431" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Fitnesse&lt;/em&gt; code for this test looks like:&lt;/p&gt;

&lt;pre class="brush: plain;"&gt;![ TotalItemsPurchased
The customer purchases items. 
Those items are scanned. 
The price of the item is put on the bill along with it's description. See figure 1. 
The subtotal is calculated as the sum of the price of all items on the bill 
and displayed at the bottom.
]!&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;However, the underlying fixture looks weird again (e.g., &lt;code&gt;The_price_of_the_item_is_put_on_the_bill_along_with_it_s_description_See_figure_1.&lt;/code&gt; Honestly I'm ok with that. I can accept the role of the fixture as the bridge between the wiki and the test automation if it means the author of the test can freely communicate the intent of the feature in his/her own words. The automation code itself is free to be separate from the fixture code in this regard.&lt;/p&gt;

&lt;p&gt;As far as parameterizing the tests, for the purpose of making the fixture code more re-useable and programmer friendly, that’s ok, if that’s what you’re into, and as my commenter points out Fitnesse gives you more than a few choices (e.g., &lt;em&gt;ScenarioTable, ScriptTable, ActionFixture, DoFixture,&lt;/em&gt; et. al.). &lt;/p&gt;

&lt;p&gt;In fact, you can parameterize a statement like, “The description of the item is “Bubbly Yummy” and costs “$0.79” in flow-mode and a plain-text table like this:&lt;/p&gt;

&lt;pre class="brush: plain;"&gt;![&amp;quot; TotalItemsPurchased
  The description of the item is &amp;quot;Bubbly Yummy&amp;quot; and costs &amp;quot;$0.79&amp;quot;
]!&lt;/pre&gt;

&lt;p&gt;This can be implemented in a fixture like this:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;  public class TotalItemsPurchased
  {
    public bool The_description_of_the_item_is_and_costs(string description, string cost)
    {
      // Fire up the API and do some testing
    }
  }&lt;/pre&gt;

&lt;p&gt;It still looks a little weird, but it avoids hard-coding the values in the function names.&lt;/p&gt;

&lt;p&gt;My personal goal with acceptance tests is to get the acceptance tests to feed a TDD cycle. In the standard red-green-refactor cycle is where I’ll worry about the code structure of the test infrastructure and the the application. I want to follow the cycle as depicted in &lt;a title="Growing Object-Oriented Software" href="http://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1265432005&amp;amp;sr=8-1" target="_blank"&gt;Growing Object-Oriented Software, Guided by Tests&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_yJRO8Ay9w74/S2z65gvjO0I/AAAAAAAABAo/AwR9jigLUrA/s1600-h/test-cycle%5B6%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="test-cycle" border="0" alt="test-cycle" src="http://lh4.ggpht.com/_yJRO8Ay9w74/S2z66Jsn4iI/AAAAAAAABAs/pL-T4Qr1Iz4/test-cycle_thumb%5B4%5D.png?imgmax=800" width="433" height="257" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I don’t want to pressure the writing of the acceptance criteria with implementation concerns. As a result, having fixtures that are mere connectors between the implementation and acceptance criteria is palatable in my book. I’m digging flow-mode style Fitnesse tests because there is a lot of freedom afforded the author of the acceptance test.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-773719282117452026?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/A-n67yW7XDY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/773719282117452026/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2010/02/fitnesse-test-styling.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/773719282117452026?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/773719282117452026?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/A-n67yW7XDY/fitnesse-test-styling.html" title="Fitnesse Test Styling" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_yJRO8Ay9w74/S2z63X5FEhI/AAAAAAAABAU/EHceJeXTCyA/s72-c/colfixturetotalitems_thumb1.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2010/02/fitnesse-test-styling.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcCSXg9eyp7ImA9WxBVEkg.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-8506956068380831631</id><published>2010-01-29T00:18:00.003-05:00</published><updated>2010-02-15T11:41:08.663-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-15T11:41:08.663-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Testing" /><title>Setting Up Fitnesse for .net</title><content type="html">&lt;p&gt;I promised (myself) that this blog would be more of a notebook; a stream of consciousness&amp;#160; describing my own discoveries. I’m not sure if what I’m going over is old hat for the Fitnesse veteran, or if organizing acceptance tests and unit tests in this way is anything of value to anyone other than myself. Although there are tutorials of setting up Fitnesse for .net already out there, I’m putting down my own personal take on the matter as what I found wasn’t exactly what I was looking for all in one place. It’s what I’m involved with at the moment.&lt;/p&gt;&lt;p&gt;This was all sparked when I attended &lt;a href="http://msuarz.blogspot.com/2010/01/fitnesse-in-flow-mode.html"&gt;Maykel Suarez’s presentation on Fitnesse in flow mode&lt;/a&gt;. I’ve learned a lot from Mike on testing and software in general since I’ve had the privilege of working with him. I was put off from Fitnesse because of some of the misuse and abuse I’ve seen in the wild. My main beef was that folk were using it as a scripting platform. This became a tangled mess of imperative goo, and the textarea provides a poor IDE in my opinion. After attending Mike’s presentation I realized I could use the wiki to document the intention of the test, and that there was already support from like minded people to make this happen.&lt;/p&gt;&lt;p&gt;Checkout the acceptance test I wrote for a hypothetical POS system. Notice, there’s nothing techie in there. In fact, it even looks like user documentation. A sign, that perhaps this is a good acceptance test.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_yJRO8Ay9w74/S2JvAU86MkI/AAAAAAAAA78/_LAqKWTkOkg/s1600-h/totalitemspurchased7.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Test Results for Total Items Purchased" border="0" alt="Test Results for Total Items Purchased" src="http://lh5.ggpht.com/_yJRO8Ay9w74/S2JvBquUHTI/AAAAAAAAA8A/JZBME8F_ZHI/totalitemspurchased_thumb3.png?imgmax=800" width="509" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;For the Fitnesse guru’s; this particular example could probably have been written more efficiently using a good ol’ fashion ColumnFixture, but I wanted to illustrate the use of plain-text tables and how they can provide a very flexible test structure. You’ll see what the underlying Fitnesse code looks like in a second. I also could have taken the introduction text and put that inside the table to use as the driver for the test.&lt;/p&gt;&lt;h4&gt;Getting All the Pieces in Place&lt;/h4&gt;&lt;h4&gt;&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;Go get the latest build of &lt;a href="http://fitnesse.org/FrontPage.FitNesseDevelopment.DownLoad"&gt;Fitnesse&lt;/a&gt;. Just download the jar file like it says (and if you don’t have Java installed you’ll need that as well). &lt;/li&gt;
&lt;li&gt;Go get the latest &lt;a href="http://www.syterra.com/FitSharp.html"&gt;fitsharp&lt;/a&gt; library. This provides the runner and the hooks for &lt;em&gt;Fitnesse&lt;/em&gt; to execute .net code. &lt;/li&gt;
&lt;li&gt;Create a test project. I use &lt;em&gt;MSTest&lt;/em&gt;, but whatever you’re into is cool. I like to name my test project something like &lt;em&gt;GoGoGrocer.Specifications&lt;/em&gt;, where &lt;em&gt;GoGoGrocer&lt;/em&gt; is the name of the system/application. &lt;/li&gt;
&lt;li&gt;Create a folder to hold your acceptance tests. I name mine &lt;em&gt;AcceptanceTests&lt;/em&gt;. Go figure. &lt;/li&gt;
&lt;li&gt;Dump the fitnesse.jar file you downloaded directly into the &lt;em&gt;AcceptanceTests&lt;/em&gt; folder. &lt;/li&gt;
&lt;li&gt;Create a little batch file to handle starting up Fitnesse and put these options in it:      &lt;pre class="brush: plain"&gt;java -jar fitnesse.jar -p 8080 -e 0&lt;/pre&gt;There are a lot of options to start Fitnesse, and a big help was to realize how useful the &lt;a href="http://fitnesse.org/FitNesse.UserGuide.QuickReferenceGuide"&gt;Quick Reference&lt;/a&gt; section was in the User Guide. The options above start the Fitnesse server on port 8080 (-p) and the turn off version history – you know the wiki thing (-e 0). &lt;/li&gt;
&lt;li&gt;Create a &lt;em&gt;bin&lt;/em&gt; folder under &lt;em&gt;AcceptanceTests&lt;/em&gt; and put all the fitsharp files in there. Also change the project’s build settings to output into that folder as well. &lt;/li&gt;
&lt;li&gt;Create additional folders under the project for &lt;em&gt;UnitTests&lt;/em&gt; and &lt;em&gt;Fixtures.&lt;/em&gt; I’ll explain the &lt;em&gt;Fixtures&lt;/em&gt; in a second. &lt;/li&gt;
&lt;li&gt;Create a file called &lt;em&gt;fitness.config&lt;/em&gt; and put that in the &lt;em&gt;bin&lt;/em&gt; folder. The contents of the file should be:       &lt;pre class="brush: xml;"&gt;&amp;lt;suiteConfig&amp;gt;
  &amp;lt;ApplicationUnderTest&amp;gt;
    &amp;lt;AddAssembly&amp;gt;
      bin\GoGoGrocer.Specifications.dll
    &amp;lt;/AddAssembly&amp;gt;
    &amp;lt;AddNamespace&amp;gt;fitlibrary&amp;lt;/AddNamespace&amp;gt;
    &amp;lt;AddNamespace&amp;gt;system&amp;lt;/AddNamespace&amp;gt;
    &amp;lt;AddNamespace&amp;gt;
      GoGoGrocer.Specifications.Fixtures
    &amp;lt;/AddNamespace&amp;gt;
  &amp;lt;/ApplicationUnderTest&amp;gt;
  &amp;lt;fitSharp.Fit.Application.FileExclusions&amp;gt;
    &amp;lt;Add&amp;gt;^\.svn$&amp;lt;/Add&amp;gt;
  &amp;lt;/fitSharp.Fit.Application.FileExclusions&amp;gt;
&amp;lt;/suiteConfig&amp;gt;&lt;/pre&gt;This adds the test assembly into the runner, and also provides a place to reference the namespaces of your fixtures. This makes it easy for you to reference them in your &lt;em&gt;Fitnesse&lt;/em&gt; code. &lt;strong&gt;UPDATE: If your tests hang, make sure this file is encoded as UTF-8 (XML...sigh)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;One more file to go. Open up the command prompt and run the &lt;em&gt;startFitnesse.bat&lt;/em&gt; file. Among other things, this will install your &lt;em&gt;FitnesseRoot&lt;/em&gt; and build the initial structure. Edit the &lt;em&gt;content.txt&lt;/em&gt; file directly under the newly created &lt;em&gt;FitnesseRoot&lt;/em&gt; folder.       &lt;pre class="brush: plain;"&gt;!*&amp;gt; using fitsharp
!define COMMAND_PATTERN {%m -c bin\fitnesse.config -r fitnesse.fitserver.FitServer,bin\fit.dll %p}
!define TEST_RUNNER {bin\Runner.exe}

*!

!*&amp;gt; defines
!define COLLAPSE_SETUP {true}
!define COLLAPSE_TEARDOWN {true}

*!&lt;/pre&gt;Hint: use the “Show All Files” feature in the Solution Explorer and add all the relevant folders to your project. &lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Now you’re ready to start using &lt;em&gt;Fitnesse&lt;/em&gt;. When you’re all done with setup your project structure should look something like this:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_yJRO8Ay9w74/S2JvCN0HFVI/AAAAAAAAA8E/YXw_0XxEUlA/s1600-h/solution-explorer-acctests%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="solution-explorer-acctests" border="0" alt="solution-explorer-acctests" src="http://lh6.ggpht.com/_yJRO8Ay9w74/S2JvDISvy-I/AAAAAAAAA8I/RUq8OZqIEL4/solution-explorer-acctests_thumb%5B2%5D.png?imgmax=800" width="403" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;h4&gt;Writing a Test in Flow Mode&lt;/h4&gt;&lt;p&gt;The following content file defines the “Total Items” test shown above:&lt;/p&gt;&lt;pre class="brush: plain;"&gt;!2 Total Items Purchased

The customer purchases items. Those items are scanned. The price of the item is put on the 
bill along with it's description. See figure 1. The subtotal is calculated as the sum of
the price of all items on the bill and displayed at the bottom.

!img-l http://sites.google.com/site/futureturnip/home/images/sub-total-receipt.png

![ TotalItemsPurchased
The cashier scans &amp;quot;Wonder Bread&amp;quot; costing $3.49
The description &amp;quot;Wonder Bread&amp;quot; is displayed on the bill
The bill shows that the &amp;quot;Wonder Bread&amp;quot; costs $3.49
The sub total shows $3.49
The cashier scans &amp;quot;Gallon Milk 2%&amp;quot; costing $3.89
The description &amp;quot;Gallon Milk 2%&amp;quot; is displayed on the bill
The bill shows the cost of &amp;quot;Gallon Milk 2%&amp;quot; is $3.89
The sub total shows $7.38
The cashier scans &amp;quot;Bubbly Yummy&amp;quot; costing $0.79
The description &amp;quot;Bubbly Yummy&amp;quot; is displayed on the bill
The bill shows the cost of &amp;quot;Bubbly Yummy&amp;quot; is $0.79
The sub total shows $8.17
]!&lt;/pre&gt;&lt;p&gt;The test is human-readable text, even in it’s wiki markup form. The trick is of course tying it to a &lt;em&gt;Fixture. &lt;/em&gt;The fixture is a bridge between the &lt;em&gt;Fitnesse&lt;/em&gt; runner and your code. The plain-text table ties itself to the &lt;em&gt;TotalItemsPurchased&lt;/em&gt; class on it’s opening declaration. In that class a method is defined for every line in the text; replacing spaces with underscores and generally ignoring special characters like quotes or the percent sign (it did take a little experimentation to find that out). Here’s what fixture code might look like:&lt;/p&gt;&lt;pre class="brush: csharp;"&gt;namespace GoGoGrocer.Specifications.Fixtures
{
  public class TotalItemsPurchased
  {
    public bool The_cashier_scans_Wonder_Bread_costing_3_49()
    {
      // This method is just the hook.
      // Fire up your API and test the SUT.
    }

    public bool The_description_Wonder_Bread_is_displayed_on_the_bill()
    {
      return true;
    }&lt;/pre&gt;&lt;p&gt;The methods return &lt;em&gt;true&lt;/em&gt; for a passing test. That’s a little quirky, and there are opportunities to improve the reporting, but that’s the bridge into your test code.&lt;/p&gt;&lt;h4&gt;Summary&lt;/h4&gt;&lt;p&gt;I still have some little issues with &lt;em&gt;Fitnesse, &lt;/em&gt;and I still think the Ruby folk have us beat with Cucumber, but for .net &lt;em&gt;Fitnesse&lt;/em&gt; offers a pretty-good solution for acceptance tests.&lt;/p&gt;&lt;p&gt;I also tried to “Export Template…” this, but the resulting template doesn’t install itself into Visual Studio. Haven’t figured that out yet, but I’ll share if I ever do.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-8506956068380831631?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/i3w_HCUtbAU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/8506956068380831631/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2010/01/setting-up-fitnesse-for-net.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/8506956068380831631?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/8506956068380831631?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/i3w_HCUtbAU/setting-up-fitnesse-for-net.html" title="Setting Up Fitnesse for .net" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_yJRO8Ay9w74/S2JvBquUHTI/AAAAAAAAA8A/JZBME8F_ZHI/s72-c/totalitemspurchased_thumb3.png?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2010/01/setting-up-fitnesse-for-net.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4NSHk_eSp7ImA9WxBXEEg.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-6460671418838477586</id><published>2010-01-21T00:38:00.005-05:00</published><updated>2010-01-21T00:49:59.741-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-21T00:49:59.741-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Refactoring" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="LINQ" /><title>Functional Patterns for Refactoring in C#</title><content type="html">&lt;p&gt;Trying to work on a little filler presentation for my brown-bag sessions at work on a couple of new code smells that can be solved thanks to the small dose of functional programming afforded us by LINQ and C# 3.5 and greater.&lt;/p&gt;&lt;p&gt;I’m working from the refactoring example given in &lt;a href="http://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/0131857258/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1264049788&amp;amp;sr=8-1"&gt;Agile Principles, Patterns, and Practices in C#&lt;/a&gt; for the &lt;a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes"&gt;Sieve of Eratosthenes&lt;/a&gt;. When this book was published LINQ wasn’t around, and in a 1.x world this is Uncle Bob’s final listing for the problem:&lt;/p&gt;&lt;pre class="brush: csharp"&gt;public static int[] GeneratePrimeNumbers(int maxValue)
  {
      if(maxValue &amp;lt; 2)
          return new int[0];
      else
      {
          UncrossIntegersUpTo(maxValue);
          CrossOutMultiples();
          PutUncrossedIntegersIntoResult();
          return result;
      }
  }
&lt;/pre&gt;&lt;p&gt;This is fine. It reads well. I’ll get into the implementation of some of the methods in a second, but here’s my final implementation of the same method:&lt;/p&gt;&lt;pre class="brush: csharp"&gt;public static int[] GeneratePrimeNumbers(int maxValue)
  {
    return 
      Primes
        .TakeWhile(prime =&amp;gt; prime &amp;lt;= maxValue)
        .ToArray();
  }
&lt;/pre&gt;&lt;br /&gt;
&lt;h4&gt;When Generating a Sequence Return &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/h4&gt;&lt;p&gt;I would like to drop the call to &lt;code&gt;ToArray&lt;/code&gt;, but then I would break the interface from the original problem. However, whenever you see a sequence being generated, use &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt; unless you need the indexing, and use an iterator if you can get away with it. Take my implementation of &lt;code&gt;Primes&lt;/code&gt; for example:&lt;/p&gt;&lt;pre class="brush: csharp"&gt;public static IEnumerable&amp;lt;int&amp;gt; Primes
  {
    get
    {
      var remaining = Integers.Where(i =&amp;gt; i &amp;gt;= 2);
      while (true)
      {
        int prime = remaining.First();
        yield return prime;
        remaining = remaining.Where(num =&amp;gt; num % prime != 0);
      }
    }
  }
&lt;/pre&gt;&lt;p&gt;There’s no need for any result arrays or other collectors. Just generate the sequence and let the caller tell stop pulling values when they’re ready. This is all about deferred execution and lazy evaluation.&lt;/p&gt;&lt;p&gt;Likewise, my implementation of Integers is:&lt;/p&gt;&lt;pre class="brush: csharp"&gt;public static IEnumerable&amp;lt;int&amp;gt; Integers
  {
    get
    {
      int count = 0;
      do
      {
        yield return count++;
      } while (true);
    }
  }
&lt;/pre&gt;&lt;h4&gt;Replace Loops with Filters, and Use Aggregates&lt;/h4&gt;&lt;p&gt;Something you ended up doing a lot in 1.x code was writing a function like this (again from Uncle Bob’s original example):&lt;/p&gt;&lt;pre class="brush: csharp"&gt;private static int NumberOfUncrossedIntegers()
  {
      int count = 0;
      for (int i = 2; i &amp;lt; crossedOut.Length; i++)
      {
          if (NotCrossed(i))
              count++; // bump count
      }
      return count;
  }
  &lt;/pre&gt;&lt;p&gt;Basically, this counts the number of elements in the boolean array crossedOut that are false. In the case of this algorithm, we have to skip the first two. In LINQ this becomes:&lt;/p&gt;&lt;pre class="brush: csharp"&gt;private static int NumberOfUncrossedIntegers()
  {
    return crossedOut.Skip(2).Where(x =&amp;gt; x == false).Count();
  }&lt;/pre&gt;The where statement provides a filter and the count provides the counting. I in-lined the NotCrossed function in the lambda.   &lt;h4&gt;Summary&lt;/h4&gt;&lt;p&gt;I’m not knocking Uncle Bob’s original implementation. I think it’s groovy. I’m just saying that now that LINQ is around it can let us leverage some pretty powerful syntax to refactor our loops and generators.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-6460671418838477586?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/0RGquvHP36A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/6460671418838477586/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2010/01/functional-patterns-for-refactoring-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/6460671418838477586?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/6460671418838477586?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/0RGquvHP36A/functional-patterns-for-refactoring-in.html" title="Functional Patterns for Refactoring in C#" /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2010/01/functional-patterns-for-refactoring-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYHQ3c4eyp7ImA9WxBQE0s.&quot;"><id>tag:blogger.com,1999:blog-927504443739918596.post-4533520460105542387</id><published>2010-01-13T00:55:00.001-05:00</published><updated>2010-01-13T00:55:32.933-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-13T00:55:32.933-05:00</app:edited><title>Oh no! It’s you Again.</title><content type="html">&lt;p&gt;So it’s January, and my New Year’s resolution was to suck less than I did the year before. My blogging, and my desire to blog have waned over the last year or couple of years. So, new blog; fresh start; time to rekindle the love of programming and creation of software in general. So in the spirit of my resolution, I’m committing to blogging again.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;The old blog had to die. I was paying a nominal fee to keep it alive and entertain the 17 readers I had collected. The content attempted too much at times. I was put off from posting frequently because most of the posts were articles and not log entries. Some of the content was useful (to me at least), but it’s best to make a clean break.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;The new blog is a place to store my eclectic bits of techie-software related nuggets. It will be more of a journal. Things I’m working on, as I’m working on them. I’ll try to post the whitepapers somewhere else (but probably not at all).&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;code&gt;//TODO: Insert Blog Post Here&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/927504443739918596-4533520460105542387?l=coffeedrivendev.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CoffeeDrivenDeveloper/~4/dQkyFhDDkss" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://coffeedrivendev.blogspot.com/feeds/4533520460105542387/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://coffeedrivendev.blogspot.com/2010/01/oh-no-its-you-again.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/4533520460105542387?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/927504443739918596/posts/default/4533520460105542387?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CoffeeDrivenDeveloper/~3/dQkyFhDDkss/oh-no-its-you-again.html" title="Oh no! It’s you Again." /><author><name>Jeff Kwak</name><uri>http://www.blogger.com/profile/07550255824949903087</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_yJRO8Ay9w74/S0gTZJf9SXI/AAAAAAAAAT0/jzB7oot7VBE/S220/me.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://coffeedrivendev.blogspot.com/2010/01/oh-no-its-you-again.html</feedburner:origLink></entry></feed>

