<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.net</title>
        <link>http://geekswithblogs.net/alternativedotnet/category/8530.aspx</link>
        <description>.net</description>
        <language>en-US</language>
        <copyright>Michel Grootjans</copyright>
        <managingEditor>michel.grootjans@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>ReSharper 5.0 auto update</title>
            <link>http://geekswithblogs.net/alternativedotnet/archive/2009/10/21/135640.aspx</link>
            <description>&lt;p&gt;JetBrains is releasing nightly builds of ReSharper since Monday. R# looks very promising so I installed it.&lt;/p&gt;  &lt;p&gt;But my favorite tool just got easier to update. &lt;a href="http://sleepoverrated.com/" target="_blank"&gt;Scott Cowan&lt;/a&gt; just published a &lt;a href="http://sleepoverrated.com/archive/2009/10/resharper-updater-for-5-0-eap/" target="_blank"&gt;tool to upgrade ReSharper 5.0 EAP&lt;/a&gt; automatically. Just like the previous version of the ReSharper Updater, &lt;em&gt;it just works&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Thanks Scott.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135640"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135640" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/alternativedotnet/aggbug/135640.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Michel Grootjans</dc:creator>
            <guid>http://geekswithblogs.net/alternativedotnet/archive/2009/10/21/135640.aspx</guid>
            <pubDate>Wed, 21 Oct 2009 18:56:24 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/alternativedotnet/comments/135640.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/alternativedotnet/archive/2009/10/21/135640.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/alternativedotnet/comments/commentRss/135640.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/alternativedotnet/services/trackbacks/135640.aspx</trackback:ping>
        </item>
        <item>
            <title>One year ago...</title>
            <link>http://geekswithblogs.net/alternativedotnet/archive/2009/09/24/135080.aspx</link>
            <description>I was in awe before &lt;a href="http://blog.jpboodhoo.com/"&gt;the master himself&lt;/a&gt;. A week of absolute code bliss with Jean-Paul Boodhoo. It has really been a life changing experience. I know it has changed me and the way I look at code. My focus has changed radically. I now find myself being a nag with team members. Make it work first, then make it as humanly readable as possible. Or maybe it shoul dbe "Make it as readable as humanly possible"...&lt;br /&gt;&lt;br /&gt;I just read the &lt;a href="http://geekswithblogs.net/alternativedotnet/archive/2008/09/25/125439.aspx"&gt;five blog entries I wrote back then&lt;/a&gt;, and I'm amazed at the endurance that was required during the course. This was intended: "You only learn when you step outside of your comfort zone". I remember feeling tired on the second day, sleepy on the third, and a real zombie before the end of the week. More than 80 intense work hours squeezed into five exhilarating days.&lt;br /&gt;&lt;br /&gt;I remember meeting a bunch of great like-minded people. I can't really say we keep in touch, but I regularly hear about some of them that are active members of the community. I read their blogs, and I hope they sometimes glance my way.&lt;br /&gt;&lt;br /&gt;If you ever get a chance of following a &lt;a href="http://www.jpboodhoo.com/training.oo"&gt;nothin' but .net bootcamp&lt;/a&gt;, DO IT! No excuses, no lame explanations, just do it.&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=47a0147a-c323-8c2e-be78-c24b181ba109" /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135080"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135080" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/alternativedotnet/aggbug/135080.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Michel Grootjans</dc:creator>
            <guid>http://geekswithblogs.net/alternativedotnet/archive/2009/09/24/135080.aspx</guid>
            <pubDate>Thu, 24 Sep 2009 21:11:24 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/alternativedotnet/comments/135080.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/alternativedotnet/archive/2009/09/24/135080.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/alternativedotnet/comments/commentRss/135080.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/alternativedotnet/services/trackbacks/135080.aspx</trackback:ping>
        </item>
        <item>
            <title>java vs .net: the community</title>
            <link>http://geekswithblogs.net/alternativedotnet/archive/2009/08/31/134405.aspx</link>
            <description>Since the beginning of July, I've been working on a java project. The language is very close to C#, although it has some minor irritating differences, like the lack good generic support, extension methods and closures. The big difference however is not in the language, the tools, the libraries or the utilities. One of the big differences I've seen is the &lt;em&gt;community&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
I've been on many projects that have worked exclusively with Microsoft tools, libraries and (god forbid) examples. When the subject is raised of alternatives like an open source ORM or IoC container the response is predictable. It's a raised eyebrow stating clearly that non-MS solutions couldn't possibly be better than libraries like the EF, EntLib and such. Oh, and were you suggesting using anything else than stored procedures for data access?&lt;br /&gt;
&lt;br /&gt;
Your idea won't scale...&lt;br /&gt;
Your idea won't perform...&lt;br /&gt;
Your idea won't be secure...&lt;br /&gt;
Your idea will be buggy...&lt;br /&gt;
Have you thought about the maintenance ...&lt;br /&gt;
&lt;br /&gt;
Let's look over the wall now, shall we? If you announce proudly that you're going to work on a java project with hibernate and spring, you get a blank look from your fellow devs. "Duh! Of course! What else?". This best of breed approach took some years to mature but is way ahead of the default .net crowd.&lt;br /&gt;
&lt;br /&gt;
The alt.net movement, the NHibernate mafia and all those alternative folks who don't adhere to the true MSDN way of doing software development are actually very close to this. The difference is that we are there by choice and by experience. The java guys are there, almost by default. This means that the mainstream java dev knows and understands things like IoC, AoP, ORM. He might have forgotten (or doesn't know) why these practices were introduced, but he's been using them daily for some years. Just like we forgot about writing our own compilers and practicing bit shifts to divide by 2.&lt;br /&gt;
&lt;br /&gt;
I think it is our responsibility to enlighten our colleagues, one at a time, for the rest of our professional lives. To try and bridge that gap between alt.net and the mainstream .net development. And ultimately, as a community, help Microsoft on the course it is taking to embrace open source.&lt;br /&gt;
&lt;br /&gt;
Quoting a fellow alt.net colleague I value greatly: &lt;a href="http://davybrion.com/blog/2008/08/altnet-what-does-it-mean/"&gt;How on earth did it ever get this far in our industry for this mindset to be considered alternative?&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="zemanta-pixie"&gt;&lt;img src="http://img.zemanta.com/pixy.gif?x-id=63884d63-970f-889a-b1ff-46157c37c63b" alt="" class="zemanta-pixie-img" /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134405"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134405" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/alternativedotnet/aggbug/134405.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Michel Grootjans</dc:creator>
            <guid>http://geekswithblogs.net/alternativedotnet/archive/2009/08/31/134405.aspx</guid>
            <pubDate>Mon, 31 Aug 2009 16:32:07 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/alternativedotnet/comments/134405.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/alternativedotnet/archive/2009/08/31/134405.aspx#feedback</comments>
            <slash:comments>11</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/alternativedotnet/comments/commentRss/134405.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/alternativedotnet/services/trackbacks/134405.aspx</trackback:ping>
        </item>
        <item>
            <title>java vs .net: the language</title>
            <link>http://geekswithblogs.net/alternativedotnet/archive/2009/08/09/133998.aspx</link>
            <description>I'd like to compare the java language to .net as I'm experiencing it. First of all, I'd like to point out that the differences are less than the similarities. Purely seen from a syntax point there really are no differences. Except of course if you're used to .net 3.5. This is irritating at first, but after a while you're just resigned to it. Take the simple properties we're so used to in .net&lt;br /&gt;
&lt;br /&gt;
Compare these two identical pieces of code:&lt;br /&gt;
&lt;em&gt;java:&lt;br /&gt;
&lt;/em&gt;&lt;blockquote&gt;&lt;font face="monospace"&gt;private int counter;&lt;br /&gt;
&lt;br /&gt;
public int getCounter(){&lt;br /&gt;
    return counter;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void setCounter(int value){&lt;br /&gt;
    counter = value;&lt;br /&gt;
}&lt;/font&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;em&gt;.net:&lt;br /&gt;
&lt;/em&gt;&lt;blockquote&gt;&lt;font face="monospace"&gt;public Counter{get; set;}&lt;/font&gt;&lt;br /&gt;
&lt;/blockquote&gt;I know we didn't have them before .net 3.5, and I realize the dangers of overexposing members, but I love the conciseness of automatic properties. For 7 properties I have 7 lines of code in .net and 70 lines of code in java.&lt;br /&gt;
&lt;br /&gt;
Other things you don't get in java are anonymous methods, so that's no lambdas or LINQ either. No extension methods, so bye bye to simple readability like &lt;font face="monospace"&gt;1.February(2005)&lt;/font&gt;. Access modifiers are slightly different but that's just something you accept and move in. All in all it's like having to go back to .net 2.0, which a lot of us have to do from time to time.&lt;br /&gt;
&lt;br /&gt;
However, the thing that the .net platform really nailed, compared to java, is generics. I'm going to illustrate this with an example.&lt;br /&gt;
&lt;em&gt;.net:&lt;br /&gt;
&lt;/em&gt;&lt;blockquote&gt;&lt;font face="monospace"&gt;public T Get&amp;lt;T&amp;gt;(int id)&lt;/font&gt;&lt;br /&gt;
&lt;font face="monospace"&gt;{&lt;br /&gt;
&lt;/font&gt;&lt;font face="monospace"&gt;    return session.Get&amp;lt;T&amp;gt;(id);&lt;/font&gt;&lt;br /&gt;
&lt;font face="monospace"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;/blockquote&gt;This is just not possible in java. For example, you cannot ask the type of T at runtime like this &lt;font face="monospace"&gt;typeof(T))&lt;/font&gt;. Generics are just a little syntactical sugar at design time and as a compiler check.&lt;br /&gt;
In java, your code will look like this:&lt;br /&gt;
&lt;blockquote&gt;&lt;font face="monospace"&gt;&amp;lt;T&amp;gt; public T get(Class&amp;lt;T&amp;gt; clazz, int id){&lt;/font&gt;&lt;br /&gt;
&lt;font face="monospace"&gt;    return (T) session.get(clazz, id);&lt;/font&gt;&lt;br /&gt;
&lt;font face="monospace"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;/blockquote&gt;Which makes every caller look like this:&lt;br /&gt;
&lt;blockquote&gt;&lt;font face="monospace"&gt;repository.get(Person.class, id);&lt;/font&gt;&lt;br /&gt;
&lt;/blockquote&gt;The cast to T might even fail at runtime if the type returned by &lt;em&gt;session&lt;/em&gt; is not of T.&lt;br /&gt;
&lt;br /&gt;
Primitive types are also something to get used to. In .net, you can easily do &lt;span style="font-family: Courier New;"&gt;1.ToString()&lt;/span&gt;. No such luck in java. &lt;span style="font-family: Courier New;"&gt;new Integer(1).toString()&lt;/span&gt; is the way to go, since &lt;span style="font-family: Courier New;"&gt;1&lt;/span&gt; is not an object. To me, java seems a more technical language where it is harder to express &lt;span style="font-style: italic;"&gt;intent&lt;/span&gt; without giving in too much into technical implementation.&lt;br /&gt;
&lt;br /&gt;
I might sound a little whiny in this post, but all things taken into account, I enjoy this journey into a new, albeit a similar language. I can't wait to get an offer to try Ruby on Rails ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;div class="zemanta-pixie"&gt;&lt;img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=cd33a01a-9493-843f-b7b0-9d4fdfbab1c0" /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133998"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133998" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/alternativedotnet/aggbug/133998.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Michel Grootjans</dc:creator>
            <guid>http://geekswithblogs.net/alternativedotnet/archive/2009/08/09/133998.aspx</guid>
            <pubDate>Sun, 09 Aug 2009 15:43:53 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/alternativedotnet/comments/133998.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/alternativedotnet/archive/2009/08/09/133998.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/alternativedotnet/comments/commentRss/133998.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/alternativedotnet/services/trackbacks/133998.aspx</trackback:ping>
        </item>
        <item>
            <title>Polyglot programming</title>
            <link>http://geekswithblogs.net/alternativedotnet/archive/2009/08/06/133934.aspx</link>
            <description>&lt;blockquote&gt;
&lt;p&gt;For many developers, the one-language notion is a sign of lack of professionalism. This is best exemplified by the &lt;a href="http://www.pragmaticprogrammer.com/ppbook/index.shtml"&gt;Pragmatic Programmers'&lt;/a&gt; advice to learn a new language every year. The point here is that programming languages do affect the way you think about programming, and learning new languages can do a lot to help you think about solving problems in different ways.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From Martin Fowler’s at &lt;a href="http://martinfowler.com/bliki/OneLanguage.html" title="http://martinfowler.com/bliki/OneLanguage.html"&gt;http://martinfowler.com/bliki/OneLanguage.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I got the opportunity to participate in a java project since July. I’m going to share the pleasure and pain this brings to a .net developer. There are interesting differences in language, conventions, tools, application servers, IDE, … Since all I’m doing in the next weeks and maybe months will be java, you’ll hear that from me.&lt;/p&gt;
&lt;p&gt;Too bad Martin fowler ended his paragraph with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It's important to learn languages that are quite different in order to get the benefit of this. Java and C# are too similar to count.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133934"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133934" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/alternativedotnet/aggbug/133934.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Michel Grootjans</dc:creator>
            <guid>http://geekswithblogs.net/alternativedotnet/archive/2009/08/06/133934.aspx</guid>
            <pubDate>Thu, 06 Aug 2009 06:11:59 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/alternativedotnet/comments/133934.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/alternativedotnet/archive/2009/08/06/133934.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/alternativedotnet/comments/commentRss/133934.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/alternativedotnet/services/trackbacks/133934.aspx</trackback:ping>
        </item>
        <item>
            <title>It&amp;rsquo;s all about readability</title>
            <link>http://geekswithblogs.net/alternativedotnet/archive/2009/05/19/132268.aspx</link>
            <description>&lt;p&gt;This is a topic that is near and dear to me. Readability is about being able to understand the code. Maybe the word should be “Understandability”, but that word suffers of the exact same thing it describes ;-)&lt;/p&gt;  &lt;p&gt;Anyway, compare these two lines, and tell me what line you understand fastest:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;startDate = &lt;span class="kwrd"&gt;new&lt;/span&gt; DateTime(2008, 5, 15);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;startDate = 15.May(2008);&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;This might not seem much, but to me line 2 clearly states the intent of the code, whereas line 1 makes me think. I don’t want to think about &lt;em&gt;how&lt;/em&gt; the code is implemented, I want the code to explain &lt;em&gt;what&lt;/em&gt; it does, even &lt;em&gt;why&lt;/em&gt; it does it.&lt;/p&gt;

&lt;p&gt;Another one of these causes of confusion is the lambda extension from RhinoMocks &lt;font face="Arial"&gt;x.Stub(x =&amp;gt; x.DoStuff())&lt;/font&gt;… Every time I introduce mocking to a new team, I have a lot of explaining to do around the ‘&lt;font face="Arial"&gt;Stub&lt;/font&gt;’ Extension. I recently introduced a change to the team for this one particular call. Compare these two:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;userMapper.Stub(m =&amp;gt; m.Map(user)).Return(viewUserDto);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;When(userMapper).IsToldTo(m =&amp;gt; m.Map(user)).Return(viewUserDto);&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Again, this exercise might seem unnecessary, as experienced developers will instantly understand this. In my experience however, all developers tend to understand this kind of code without much effort.&lt;/p&gt;

&lt;p&gt;Just my €0.02&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132268"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132268" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/alternativedotnet/aggbug/132268.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Michel Grootjans</dc:creator>
            <guid>http://geekswithblogs.net/alternativedotnet/archive/2009/05/19/132268.aspx</guid>
            <pubDate>Tue, 19 May 2009 13:17:15 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/alternativedotnet/comments/132268.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/alternativedotnet/archive/2009/05/19/132268.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/alternativedotnet/comments/commentRss/132268.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/alternativedotnet/services/trackbacks/132268.aspx</trackback:ping>
        </item>
        <item>
            <title>An alternative way to do a retrospective</title>
            <link>http://geekswithblogs.net/alternativedotnet/archive/2009/03/16/130129.aspx</link>
            <description>&lt;p&gt;We did the retrospective on our first sprint today. Usually, our retrospectives are divided into three parts:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;what went well &lt;/li&gt;
    &lt;li&gt;what went ... &lt;em&gt;less&lt;/em&gt; well &lt;/li&gt;
    &lt;li&gt;what can we improve &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This  was usually rendered on the wall like this:&lt;/p&gt;
&lt;table border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;Good&lt;/td&gt;
            &lt;td valign="top"&gt;To improve&lt;/td&gt;
            &lt;td valign="top"&gt;Action points&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Today we tried something new. The three columns were now called:&lt;/p&gt;
&lt;table border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;Keep doing&lt;/td&gt;
            &lt;td valign="top"&gt;Stop doing&lt;/td&gt;
            &lt;td valign="top"&gt;Start doing&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
            &lt;td valign="top"&gt;...&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;You might say this is just a question of &lt;em&gt;labels&lt;/em&gt;, but to me it felt completely different.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130129"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130129" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/alternativedotnet/aggbug/130129.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Michel Grootjans</dc:creator>
            <guid>http://geekswithblogs.net/alternativedotnet/archive/2009/03/16/130129.aspx</guid>
            <pubDate>Mon, 16 Mar 2009 20:55:32 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/alternativedotnet/comments/130129.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/alternativedotnet/archive/2009/03/16/130129.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/alternativedotnet/comments/commentRss/130129.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/alternativedotnet/services/trackbacks/130129.aspx</trackback:ping>
        </item>
        <item>
            <title>My geeky Christmas present</title>
            <link>http://geekswithblogs.net/alternativedotnet/archive/2008/12/28/128194.aspx</link>
            <description>&lt;p&gt;My wife gave me a &lt;a href="http://butunclebob.com/ArticleS.UncleBob.GreenWristBand" target="_blank"&gt;green wristband&lt;/a&gt; for Christmas. It arrived by mail a few days ago. Now I have a physical reminder of the holy grail I'm pursuing.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/alternativedotnet/WindowsLiveWriter/ThegeekiestChristmaspresent_11C3A/Clean_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="177" alt="SONY DSC                     " src="http://geekswithblogs.net/images/geekswithblogs_net/alternativedotnet/WindowsLiveWriter/ThegeekiestChristmaspresent_11C3A/Clean_thumb.jpg" width="260" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128194"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128194" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/alternativedotnet/aggbug/128194.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Michel Grootjans</dc:creator>
            <guid>http://geekswithblogs.net/alternativedotnet/archive/2008/12/28/128194.aspx</guid>
            <pubDate>Sun, 28 Dec 2008 10:10:55 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/alternativedotnet/comments/128194.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/alternativedotnet/archive/2008/12/28/128194.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/alternativedotnet/comments/commentRss/128194.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/alternativedotnet/services/trackbacks/128194.aspx</trackback:ping>
        </item>
        <item>
            <title>My first FitNesse test</title>
            <link>http://geekswithblogs.net/alternativedotnet/archive/2008/11/25/127388.aspx</link>
            <description>&lt;p&gt;After my &lt;a href="http://geekswithblogs.net/alternativedotnet/archive/2008/11/24/127350.aspx" target="_blank"&gt;previous post&lt;/a&gt;, I've got a FitNesse server running and configured. It's now time to write some tests. Of course, since this is a demo, this will be a simple, self-explanatory test. I'll implement a simple calculator, capable of adding two integers.&lt;/p&gt;
&lt;p&gt;Let's write that in FitNesse. First, I'll create a test suite called "DemoSuite". So I go to &lt;a title="http://localhost:8888/DemoSuite" href="http://localhost:8888/DemoSuite"&gt;http://localhost:8888/DemoSuite&lt;/a&gt;. Since that page doesn't exist yet, FitNesse proposes a new page. I just accept it.&lt;/p&gt;
&lt;p&gt;Then I go to a subpage, that I call &lt;a title="http://localhost:8888/DemoSuite.CalculatorTest" href="http://localhost:8888/DemoSuite.CalculatorTest"&gt;http://localhost:8888/DemoSuite.CalculatorTest&lt;/a&gt;. Again, FitNesse doesn't recognize this page and proposes a new one. I now replace the content with this:&lt;/p&gt;
&lt;div&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;!1 Let's run a simple calculator&lt;br /&gt;!|CalculatorRunner|&lt;br /&gt;|Arg1|Arg2|Sum?|&lt;br /&gt;|0|0|0|&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This gets rendered like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/alternativedotnet/WindowsLiveWriter/MyfirstFitNessetest_11100/image_2.png"&gt;&lt;img height="119" width="289" border="0" style="border: 0px none ;" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/alternativedotnet/WindowsLiveWriter/MyfirstFitNessetest_11100/image_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Notice what is expressed here: The test is a CalculatorRunner, that's what the top of the column says. Then I provide two arguments: Arg1=0 and Arg2=0. The Sum of both arguments should be 0. How do I tell FitNesse that the Sum should be checked? Simple: I've appended a "?" after Sum. That's enough to tell FitNesse that this is an assertion.&lt;/p&gt;
&lt;p&gt;This test won't run of course. We now need to create a test fixture to accept the test. These are the steps to follow:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;create a new project&lt;/li&gt;
    &lt;li&gt;add a reference to "fit.dll", located in the dotnet2 directory in the fit directory&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There we create a new class that has to match exactly the name of our test. That will be "CalculatorRunner"&lt;/p&gt;
&lt;div&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; fit;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;namespace&lt;/span&gt; MyBlogPosts.FitNesse&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; CalculatorRunner : ColumnFixture&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; Arg1 { get; set; }&lt;br /&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; Arg2 { get; set; }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; Sum()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; Arg1 + Arg2;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Get it? Each column in the FitNesse test above matches a property or a method in my testclass.&lt;/p&gt;
&lt;p&gt;Ok, if I now run the test, it will still fail! Why? Because it can't find the assembly it's in. Lets fix that, shall we. Hit "edit" on the testpage (or navigate to &lt;a title="http://localhost:8888/DemoSuite.CalculatorTest?edit" href="http://localhost:8888/DemoSuite.CalculatorTest?edit"&gt;http://localhost:8888/DemoSuite.CalculatorTest?edit&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Add the following on top of the page:&lt;/p&gt;
&lt;p style="font-family: Courier New;"&gt;!path C:\...\bin\Debug\*.dll&lt;/p&gt;
&lt;p&gt;This will tell FitNesse to scan that directory for assemblies too. It's kinda like having a reference in a project.&lt;/p&gt;
&lt;p&gt;On last thing before you hit "Save" (you hit it already, didn't you?). Add the following too:&lt;/p&gt;
&lt;p style="font-family: Courier New;"&gt;!|import|   &lt;br /&gt;
|MyBlogPosts.FitNesse|&lt;/p&gt;
&lt;p&gt;This is the namespace to import during this test. Kind of a "using" declaration in C#. Now run the test. Did it work? For me, this is the result:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/alternativedotnet/WindowsLiveWriter/MyfirstFitNessetest_11100/image_4.png"&gt;&lt;img height="131" width="324" border="0" style="border: 0px none ;" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/alternativedotnet/WindowsLiveWriter/MyfirstFitNessetest_11100/image_thumb_1.png" /&gt;&lt;/a&gt; Looks OK to me. Lets expand the tests a little, shall we?&lt;/p&gt;
&lt;p&gt;I'm editing the page like this:&lt;/p&gt;
&lt;p style="font-family: Courier New;"&gt;!|CalculatorRunner|   &lt;br /&gt;
|Arg1|Arg2|Sum?|    &lt;br /&gt;
|0|0|0|    &lt;br /&gt;
|1|1|3|    &lt;br /&gt;
|-1|1|0|    &lt;br /&gt;
|-100|1|-99|&lt;/p&gt;
&lt;p&gt;Lets run it again:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/alternativedotnet/WindowsLiveWriter/MyfirstFitNessetest_11100/image_6.png"&gt;&lt;img height="220" width="171" border="0" style="border: 0px none ;" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/alternativedotnet/WindowsLiveWriter/MyfirstFitNessetest_11100/image_thumb_2.png" /&gt;&lt;/a&gt; Oops, looks like I missed one... but hey. That's exactly what tests are for, no?&lt;/p&gt;
&lt;p&gt;By the way, this is what a ColumnFixture in FitNesse is. Three more testtypes coming up, plus a little refactoring.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127388"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127388" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/alternativedotnet/aggbug/127388.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Michel Grootjans</dc:creator>
            <guid>http://geekswithblogs.net/alternativedotnet/archive/2008/11/25/127388.aspx</guid>
            <pubDate>Tue, 25 Nov 2008 21:39:16 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/alternativedotnet/comments/127388.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/alternativedotnet/archive/2008/11/25/127388.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/alternativedotnet/comments/commentRss/127388.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/alternativedotnet/services/trackbacks/127388.aspx</trackback:ping>
        </item>
        <item>
            <title>How to set up a FitNesse server</title>
            <link>http://geekswithblogs.net/alternativedotnet/archive/2008/11/24/127350.aspx</link>
            <description>&lt;h2&gt;What is FitNesse?&lt;/h2&gt;
&lt;p&gt;Fitnesse is a tool that, if used wisely (&lt;strong&gt;big &lt;/strong&gt;assumption), can turn requirements into functional tests.&lt;/p&gt;
&lt;p&gt;Examples can elaborate requirements. Examples can become tests. Tests can verify requirements.&lt;/p&gt;
&lt;p&gt;I'm not going to elaborate on the pro's and contra's of FitNesse. &lt;a target="_blank" href="http://gojko.net/"&gt;Others&lt;/a&gt; have done that before me.&lt;/p&gt;
&lt;h2&gt;Installing the server&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/alternativedotnet/WindowsLiveWriter/HowtosetupaFitNesseserver_C159/image_6.png"&gt;&lt;img height="210" border="0" align="right" width="244" src="http://geekswithblogs.net/images/geekswithblogs_net/alternativedotnet/WindowsLiveWriter/HowtosetupaFitNesseserver_C159/image_thumb_2.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt;Setting up FitNesse is a piece of cake. You just need to know the steps.&lt;/p&gt;
&lt;p&gt;First of all, go download &lt;a target="_blank" href="http://fitnesse.org/FitNesse.DownLoad"&gt;fitnesse&lt;/a&gt;. Extract the downloaded content to a directory of your choosing. We'll call this the "fit directory" from now on.&lt;/p&gt;
&lt;p&gt;Go and download the .net 2.0 &lt;a target="_blank" href="http://sourceforge.net/projects/fitnessedotnet/"&gt;testrunner&lt;/a&gt;. Extract this content to a new subdirectory called "dotnet2" under the fit directory. The fit directory should now look like the image to the right.&lt;/p&gt;
&lt;h2&gt;Preparing the server&lt;/h2&gt;
&lt;p&gt;Since all of us are running IIS on port 80, FitNesse wont run on it. You will have to edit run.bat, and add the port number to it.&lt;/p&gt;
&lt;p&gt;We run on port 8888. To do this, you need to edit "run.bat" like this&lt;/p&gt;
&lt;p&gt;&lt;font face="Consolas"&gt;java -cp fitnesse.jar fitnesse.FitNesse %1 %2 %3 %4 %5 &lt;strong&gt;–p 8888&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;When you run 'run.bat', you have your server up and running. Just go to &lt;a href="http://localhost:8888"&gt;http://localhost:8888&lt;/a&gt; and go "Ooooh...".&lt;/p&gt;
&lt;p&gt;Next step is editing the base markup variables. Go to &lt;a href="http://localhost:8888/?edit"&gt;http://localhost:8888/?edit&lt;/a&gt; and add the following lines to the page.&lt;/p&gt;
&lt;p&gt;!path dotnet2\*.dll &lt;/p&gt;
&lt;p&gt;!define COMMAND_PATTERN {%m %p}    &lt;br /&gt;
!define TEST_RUNNER {dotnet2\FitServer.exe}     &lt;br /&gt;
!define PATH_SEPARATOR {;}&lt;/p&gt;
&lt;p&gt;This declares some specifics for running .net tests, as well as pointing to the .net 2.0 test runner we downloaded separately.&lt;/p&gt;
&lt;p&gt;That's it for the moment. Next will be the tests.&lt;/p&gt;
&lt;h3&gt;External links:&lt;/h3&gt;
&lt;table cellspacing="0" cellpadding="2" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;FitNesse &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;a href="http://fitnesse.org/FitNesse.DownLoad" title="http://fitnesse.org/FitNesse.DownLoad"&gt;http://fitnesse.org/FitNesse.DownLoad&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;.net 2.0 runner&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;a href="http://sourceforge.net/projects/fitnessedotnet/" title="http://sourceforge.net/projects/fitnessedotnet/"&gt;http://sourceforge.net/projects/fitnessedotnet/&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;Gojko's web site&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;a href="http://gojko.net/" title="http://gojko.net/"&gt;http://gojko.net/&lt;/a&gt;           &lt;br /&gt;
            &lt;a href="http://gojko.net/tag/fitnesse/" title="http://gojko.net/tag/fitnesse/"&gt;http://gojko.net/tag/fitnesse/&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127350"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127350" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/alternativedotnet/aggbug/127350.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Michel Grootjans</dc:creator>
            <guid>http://geekswithblogs.net/alternativedotnet/archive/2008/11/24/127350.aspx</guid>
            <pubDate>Mon, 24 Nov 2008 18:30:41 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/alternativedotnet/comments/127350.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/alternativedotnet/archive/2008/11/24/127350.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/alternativedotnet/comments/commentRss/127350.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/alternativedotnet/services/trackbacks/127350.aspx</trackback:ping>
        </item>
    </channel>
</rss>