<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://devlicio.us/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Christopher Bennage : Opinion</title><link>http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx</link><description>Tags: Opinion</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Blocks and Playsets</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2011/10/17/blocks-and-playsets.aspx</link><pubDate>Mon, 17 Oct 2011 17:52:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:68293</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I&amp;#8217;ve recently discovered that I favor blocks over playsets. I&amp;#8217;m talking about toys, and of course the canonical example of blocks is Legos. You can build nearly anything with them. They are useful, versatile, and inviting.&lt;/p&gt; &lt;p&gt;Now, the term &amp;#8216;playset&amp;#8217; warrants a bit more explanation. I don&amp;#8217;t mean the large outdoor sets with swings and sandboxes and spring-loaded ponies. No, I&amp;#8217;m a child of the 80s and I &lt;em&gt;loved me some&lt;/em&gt; Star Wars playsets.&lt;/p&gt; &lt;p&gt;&lt;img class="right" src="http://dev.bennage.com/images/posts/hoth-playset.jpg" style="float:right;" alt="" /&gt;&lt;/p&gt; &lt;p&gt;So my definition of &amp;#8216;playset&amp;#8217; is colored by my childhood. I think think of &amp;#8216;playset&amp;#8217; as a themed toy representing an environment. Like the Hoth playset pictured here. If you want to pretend you are the Imperials raining destruction upon a ragtag Rebel Alliance, the &lt;a href="http://www.ebay.com/csc/i.html?_nkw=Hoth+imperial+attack+playset&amp;amp;LH_Complete=1&amp;amp;_odkw=Hoth+attack+playset" title="Yes, I had this as a kid."&gt;Hoth Imperial Attack playset&lt;/a&gt; can&amp;#8217;t be beat.&lt;/p&gt; &lt;p&gt;The problem is &lt;em&gt;that&amp;#8217;s all you can do with it&lt;/em&gt;. I mean, you can&amp;#8217;t use the Hoth playset to stage an epic Cybertronian showdown between Optimus and Megatron. (Well you can, but you&amp;#8217;ll have admit it&amp;#8217;s just a bit awkward.)&lt;/p&gt; &lt;p&gt;Let&amp;#8217;s get back to the blocks. Those puppies can be used to reconstruct a carbonite freezing chamber &lt;em&gt;as well as&lt;/em&gt; hosting a dramatic cliff-side battle between Snake Eyes and Storm Shadow. Better yet, you can construct worlds of your own invention instead of merely mirroring those of others.&lt;/p&gt; &lt;p&gt;In reality, it&amp;#8217;s not so cut and dry. (Nothing is, is it?) No, in reality, there&amp;#8217;s a spectrum. In reality, there is Lego® Star Wars®. The line between blocks and playsets is blurred.&lt;/p&gt; &lt;h2&gt;Software&lt;/h2&gt; &lt;p&gt;I believe these categories apply to software as well, though we call them &lt;em&gt;libraries&lt;/em&gt; and &lt;em&gt;frameworks&lt;/em&gt;. &lt;a href="http://wekeroad.com/"&gt;Rob Conery&lt;/a&gt; asked a &lt;a href="https://plus.google.com/u/0/100497775264295816553/posts/DoWuYVrDzqX%20%22Is%20Backbone.js%20is%20a%20’Framework’%20or%20a%20’Library’?"&gt;question about this&lt;/a&gt; on Google+ recently. &lt;a href="http://lostechies.com/derickbailey/"&gt;Derick Bailey&lt;/a&gt; provides a definition attributed to Chris Eppstein:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;&amp;#8220;Frameworks call your code, you call library code.&amp;#8221;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I began thinking about this from a different angle. I think that &lt;em&gt;frameworks impose an opinion&lt;/em&gt;. &lt;a href="http://rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; has a &lt;a href="http://gettingreal.37signals.com/ch04_Make_Opinionated_Software.php"&gt;strong opinion&lt;/a&gt; about how to create web apps. I think that make it a framework. Or at least, closer to the framework end of the spectrum than to the library end.&lt;/p&gt; &lt;p&gt;&lt;img class="right" src="http://dev.bennage.com/images/posts/crossover-comic.jpg" style="float:right;" alt="" /&gt;&lt;/p&gt; &lt;p&gt;Now, to be clear, I am &lt;em&gt;not&lt;/em&gt; saying that opinionated software or that frameworks are bad. In fact, they can be brilliant. I think Rail&amp;#8217;s strong opinion has been a significant contribution to its success. What&amp;#8217;s important to understand though is the limitations. When you are using a framework, the boundaries are harder to cross. The results can be strained and unnatural. The problem for me begins when our fanboy favor for a framework leads us to force its use it where it doesn&amp;#8217;t fit.&lt;/p&gt; &lt;h2&gt;Fun&lt;/h2&gt; &lt;p&gt;Playing with both blocks and playsets is &lt;em&gt;fun&lt;/em&gt;. So let&amp;#8217;s stretch the analogy even further. What does that mean to software development? My takeaway is this:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Understand the tools you are using.&lt;/li&gt; &lt;li&gt;If it hurts, ask why. (I always liked Ayende&amp;#8217;s &lt;a href="http://ayende.com/blog/3320/zero-friction-maintainability"&gt;Zero Friction thoughts&lt;/a&gt;.)&lt;/li&gt; &lt;li&gt;Finally, &lt;a href="http://hanselminutes.com/260/net-api-design-that-optimizes-for-programmer-joy-with-jonathan-carter"&gt;optimize your development experience for joy&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;
&lt;p&gt;Comment on this post at &lt;a href="http://dev.bennage.com/blog/2011/10/17/blocks-and-playsets/"&gt;dev.bennage.com&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=68293" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Software/default.aspx">Software</category></item><item><title>The Last Six Months</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2011/10/07/the-last-six-months.aspx</link><pubDate>Fri, 07 Oct 2011 22:46:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:68257</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I’m two weeks shy of six months at Microsoft. When I arrived here I was immediately thrown into the fray on &lt;a href="http://silk.codeplex.com/"&gt;Project Silk&lt;/a&gt;. The primary developer on the project was heading into paternity leave. Fortunately, I had read &lt;a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742"&gt;JavaScript: The Good Parts&lt;/a&gt; on my flight out to Redmond. (I had no idea that I’d be diving deep into JavaScript.)&lt;/p&gt;  &lt;p&gt;After Silk, I um, got to work on some other &lt;a title="a sample app using a lot of HTML5 goodies" href="http://code.msdn.microsoft.com/windowsapps/CanvasPaint-6ebde109"&gt;cool&lt;/a&gt; &lt;a title="a primer for async programming patterns in JavaScript" href="http://msdn.microsoft.com/en-us/library/windows/apps/hh464930"&gt;stuff&lt;/a&gt; that propelled me even deeper in the HTML5/JavaScript world.&lt;/p&gt;  &lt;p&gt;After hours, I started playing with NodeJS. Specifically, spiking out some play-by-post dorky goodness inspired by the efforts of my buddy &lt;a title="Anglo-Catholic Christian, RPG dork, and software craftsman" href="http://anglicangeek.com/"&gt;Drew Miller&lt;/a&gt; using &lt;a title="sort of like Sinatra on Node" href="http://expressjs.com/"&gt;Express&lt;/a&gt;, &lt;a title="but I still like RavenDB" href="http://www.mongodb.org/"&gt;Mongo&lt;/a&gt;, and &lt;a title="a unit testing framework for Node" href="http://visionmedia.github.com/expresso/"&gt;Expresso&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I’ve really enjoyed jumping back deep into JavaScript. This is a return for me in many ways. Back in the late 90s I was doing classic ASP development and I had settled on JScript over VBScript. (I had even begun writing an &lt;a title="object-relational mapper" href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;ORM&lt;/a&gt; in JScript, though I had no idea what an ORM was or just how deep the water can get. I just knew that I was tired of writing the same thing over and over.) I was also spending a lot of time with Flash and ActionScript back then. In fact, the Flash community was were I first encountered the MVC pattern. It was also the place where I first began learning about object-oriented programming.&lt;/p&gt;  &lt;p&gt;Working at Microsoft has been a wonderful experience so far and I’m especially fond of my team here at &lt;a title="patterns &amp;amp; practices" href="http://msdn.microsoft.com/en-us/practices/default.aspx"&gt;p&amp;amp;p&lt;/a&gt;. It is a different perspective being on the inside. I’m excited about the opportunities to produce quality guidance. I’m also glad to help encourage trends here that I believe are helpful both to the company and the community.&lt;/p&gt;  &lt;p&gt;As a bonus, these first six months here in Redmond have been beautiful weather.&lt;/p&gt;  &lt;p&gt;My next project is exploring the mobile web. This is a crazy, active, and vibrant area at the moment. There’s a lot for me to learn. Fortunately, we value transparency here in p&amp;amp;p and I intend to post frequently about my projects.&lt;/p&gt;  &lt;p&gt;N.B.&lt;/p&gt;  &lt;p&gt;I’ve relocated my &lt;em&gt;official blog&lt;/em&gt; to &lt;a title="Christopher&amp;#39;s new home on the intrewebz" href="http://dev.bennage.com" rel="me"&gt;dev.bennage.com&lt;/a&gt;. I plan to continue to cross post here on devlicious, but if you want to comment you’ll need to head to the official site.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=68257" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/personal/default.aspx">personal</category></item><item><title>A Punctuated Life</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2011/04/06/a-punctuated-life.aspx</link><pubDate>Wed, 06 Apr 2011 21:23:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:66820</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>9</slash:comments><description>&lt;p&gt;Chapter XXXVI&lt;/p&gt;  &lt;p&gt;My time with &lt;a href="http://www.bluespire.com/" target="_blank"&gt;Blue Spire&lt;/a&gt; has officially ended. I have accepted a position with Microsoft on the &lt;a href="http://msdn.microsoft.com/en-us/practices/default.aspx" target="_blank"&gt;Patterns &amp;amp; Practices&lt;/a&gt; team. My start date is April 18th.&lt;/p&gt;  &lt;p&gt;Even though I’ve been professionally restless for a while, leaving Blue Spire turned out to be rather emotional for me. Untangling myself from a business I spent almost five years building up depressed me. Nevertheless, it’s done and Blue Spire lives on. Keep an eye on &lt;a href="http://devlicio.us/blogs/rob_eisenberg/" target="_blank"&gt;Rob’s blog&lt;/a&gt; for details about the company and his future plans.&lt;/p&gt;  &lt;p&gt;Why?&lt;/p&gt;  &lt;p&gt;Several friends have asked me why I would make this choice. Why would I leave running my own business? Why would I go to Microsoft of all places? Why would I uproot my family from a &lt;a href="http://en.wikipedia.org/wiki/Tallahassee,_Florida" target="_blank"&gt;city we love&lt;/a&gt;, from dear and close friends, and move so far a way?&lt;/p&gt;  &lt;p&gt;I needed a reboot. I wasn’t achieving the personal professional goals I had set for myself and I needed to reevaluate. I wanted a job and a city that would expose me to lots of different influences and perspectives. &lt;/p&gt;  &lt;p&gt;So why Microsoft? There were several really exciting positions out there and it was hard to choose. In the end, the Microsoft position had the best balance for what I wanted in my next professional role. I’m genuinely excited about joining P&amp;amp;P. I asked around and I heard nothing but good things about the P&amp;amp;P team. Even from folks who are critical of Microsoft in general. In addition,the values and culture of the team align with my own. They have a vision I can buy into.&lt;/p&gt;  &lt;p&gt;Still, at the end of the day, my wife and I made the choice to have the experience. We want to spend some time living on the West Coast. I want to see what it’s like to work for a giant like Microsoft. We wanted to live near a major city, and mountains, and ocean. Of course, I had other goals as well; certain financial criteria I needed to meet, opportunities to learn and grow, chances to exercise my pedagogical nature, and so on. They all flowed together. In the end though, I want my life to be punctuated, full of chapters, experiences, and stories.&lt;/p&gt;  &lt;p&gt;I’m excited.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=66820" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category></item><item><title>What I Learned Playing StarCraft</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2011/01/30/what-i-learned-playing-starcraft.aspx</link><pubDate>Mon, 31 Jan 2011 02:13:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:64869</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;On March 31, 1998, around 10am, my then-manager Alex and I left the office we shared together and headed over to Electronics Boutique. Alex and I were both developers working for the IT department of an up and coming software company called PC DOCS. In those days, we didn’t have a corporate firewall. My desktop was a node on the internet. In fact, I was running a web server on it. A bunch of us would stay late after work, barricaded in other peoples’ cubicles, all phones on speaker, playing WarCraft II and Quake. Those were halcyon days. I was just about to turn 23. I was just about to get married.&lt;/p&gt;  &lt;p&gt;Alex and I had headed to EB because it was Release Day for StarCraft. I don’t think that I had ever been so excited about a video game. Well, maybe once but that’s another story…&lt;/p&gt;  &lt;p&gt;A few months ago, StarCraft 2 was released. While there wasn’t as personal ceremony this time, I still purchased it on Release Day.&lt;/p&gt;  &lt;p&gt;This time around I decided to &lt;em&gt;really&lt;/em&gt; learn how to play the game. In case you are unaware, StarCraft is huge. There are &lt;a href="http://en.wikipedia.org/wiki/StarCraft_professional_competition" target="_blank"&gt;televised tournaments, professional players, and so on&lt;/a&gt;. In many ways, it’s analogous to chess. As I began to learn more about it, I found that there are certain tenets of gameplay and, as I mused on these, I found that they extend to life in general (though I’ll limit them here to a professional context).&lt;/p&gt;  &lt;h3&gt;The First Lesson&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://devlicious.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/christopher_5F00_bennage/ss107_2D00_hires_5F00_06905021.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 0px 0px 4px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ss107-hires" border="0" alt="ss107-hires" align="right" src="http://devlicious.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/christopher_5F00_bennage/ss107_2D00_hires_5F00_thumb_5F00_2566C3FF.jpg" width="300" height="162" /&gt;&lt;/a&gt;In the game, there are a dizziness amount of options. Your opponent can overwhelm you with astounding ease if you are unprepared for their particular tactic. So you might be inclined to try and prepare for all contingencies. But guess what? You can’t. You will end up spending all of your resources ‘preparing’. You think that this aligns with your overarching goal, but in reality it is a distraction.&lt;/p&gt;  &lt;p&gt;Professionally, we are given a goal: build software that will do &lt;strong&gt;X&lt;/strong&gt;. As developers we typically and immediately begin thinking about all the ‘what ifs’. Usually because we’ve been burned by them in the past. &lt;strong&gt;X&lt;/strong&gt; is still in sight, but there is a long road to get to there, because we have to deal with Y and Z and so many other things. We have to be prepared.&lt;/p&gt;  &lt;p&gt;The truth is that you &lt;em&gt;cannot&lt;/em&gt; be prepared for everything. It is actually a waste of energy and a distraction from your real goal. In the game of StarCraft, if you try to prepare for everything, you &lt;em&gt;will&lt;/em&gt; lose. Instead, you must choose your battles. &lt;/p&gt;  &lt;h3&gt;The Second Lesson&lt;/h3&gt;  &lt;p&gt;How do you know which battles to choose? Surely a battle is coming. There are always problems in every project. You can’t simply be &lt;em&gt;unprepared&lt;/em&gt;. That’s suicide.&lt;/p&gt;  &lt;p&gt;In StarCraft, the answer is scouting. That is, you gather intelligence about what the enemy is doing. Once you know, then you can prepare properly and efficiently.&lt;/p&gt;  &lt;p&gt;Recently, I was asked about some performance concerns at the start of a project. Now, I have been seriously burned by performance issues. In fact, one of the worst software disasters I was a part of was a performance issue. Nevertheless, the concerns raised with granular and premature. As Donald Knuth said “&lt;a href="http://c2.com/cgi/wiki?PrematureOptimization" target="_blank"&gt;premature optimization is the root of all evil&lt;/a&gt;”. Now, I am most emphatically &lt;em&gt;not&lt;/em&gt; saying to avoid optimization. What I am saying is to scout, gathering intelligence and responding accordingly.&lt;/p&gt;  &lt;h3&gt;A Summary&lt;/h3&gt;  &lt;p&gt;I’ll sum up these two thoughts:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Don’t waste time on things you don’t need.&lt;/li&gt;    &lt;li&gt;Find out what you need through active analysis.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;None of this is new. In fact, you see pretty much the same things preached all over. I hear it in &lt;a title="Never Add Functionality Early." href="http://www.extremeprogramming.org/rules/early.html" target="_blank"&gt;XP&lt;/a&gt;, I hear it in Agile, I hear it in StarCraft.&lt;/p&gt;  &lt;h3&gt;Epilogue&lt;/h3&gt;  &lt;p&gt;I’m reminded of a passage from &lt;a href="http://www.gutenberg.org/cache/epub/1718/pg1718.html" target="_blank"&gt;G. K. Chesterton’s Manalive&lt;/a&gt; (chapter 3):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;Well,&amp;quot; said the girl solidly, &amp;quot;what is there to wake up to?&amp;quot;&lt;/p&gt;    &lt;p&gt;&amp;quot;There must be!&amp;quot; cried Inglewood, turning round in a singular excitement—&amp;quot;there must be something to wake up to! All we do is preparations—your cleanliness, and my healthiness, and Warner&amp;#39;s scientific appliances. We&amp;#39;re always preparing for something—something that never comes off. I ventilate the house, and you sweep the house; but what is going to HAPPEN in the house?&amp;quot;&lt;/p&gt;&lt;/blockquote&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=64869" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/humor/default.aspx">humor</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Musings/default.aspx">Musings</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/PointlessStory/default.aspx">PointlessStory</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/gaming/default.aspx">gaming</category></item><item><title>My Kinect Review</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2010/11/09/my-kinect-review.aspx</link><pubDate>Tue, 09 Nov 2010 20:49:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:63331</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I didn’t intend to purchase a Kinect for some time. However, there I was, walking reluctantly through Stuffmart, picking up a few random items for my home office. My four year old son, Ranen, had accompanied me. I was digging through various audio connectors when Ranen stopped and said “Daddy! It’s that game!” He was referring to &lt;a href="http://www.amazon.com/gp/product/B002I0J8RQ?ie=UTF8&amp;amp;tag=bluspiconinc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B002I0J8RQ"&gt;Kinectimals&lt;/a&gt;&lt;img style="margin:0px;" border="0" alt="" src="http://www.assoc-amazon.com/e/ir?t=bluspiconinc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B002I0J8RQ" width="1" height="1" /&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/christopher_5F00_bennage/kinect_5F00_3F478A95.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 0px 8px 8px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="kinect" border="0" alt="kinect" align="right" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/christopher_5F00_bennage/kinect_5F00_thumb_5F00_0F3D3914.jpg" width="240" height="180" /&gt;&lt;/a&gt;I was stunned. He was standing in front of a shelf &lt;em&gt;full&lt;/em&gt; of Kinects. I had been under the impression they were sold out nearly everywhere. I stood there, staring destiny in the face. The purchase was inevitable, so I embraced it.&lt;/p&gt;  &lt;h4&gt;The Setup&lt;/h4&gt;  &lt;p&gt;There was very little to setting up the device. I don’t have the newer Xbox, so the Kinect just plugged into the wifi port on the back. Once the device was detected, an application called Kinect Hub was installed. It’s like a minimal version of the main Xbox menus built specifically to utilize Kinect’s features.&lt;/p&gt;  &lt;p&gt;There was also a built-in tutorial that both explained how Kinect works and did some initial calibration. It lasted 5 to 10 minutes at most.&lt;/p&gt;  &lt;p&gt;I moved our coffee table out of the way, giving us about 12 square fee to work with. That was all the space we needed.&lt;/p&gt;  &lt;h4&gt;Kinect Adventures&lt;/h4&gt;  &lt;p&gt;Kinect Adventures is the game that comes with the device. It consists of 5 mini-games and reminded me a lot of the initial offering for Wii. The game takes longer than most games to start up. There is a period of calibration for the device as the game starts. After letting it run through this the first three or four times we started the game, I began to skip the calibration with no noticeable impact.&lt;/p&gt;  &lt;p&gt;Ranen and I were able to join in a start playing immediately. Picking up the game for him was much easier than it had been using controllers. (His favorite Xbox game is Lego Star Wars, but he still fumbles with the controls every now and then.)&lt;/p&gt;  &lt;p&gt;My&amp;#160; 8 year old and 2 year old showed up about this time. We discovered that you can simply swap places with an active player to jump in. So two of us would play, while the rest sat on the sofa (which happened to be just out of range).&lt;/p&gt;  &lt;p&gt;The facial recognition struggled somewhat with us switching places. I also wonder if poor lighting affected it as well. There is very little light on our faces when we are facing the TV. &lt;/p&gt;  &lt;p&gt;I was impressed with Kinect’s ability to keep track of active players with my children constantly running around. It would temporarily lose a player if someone walked in front of the device (and thus completely occluding a player). However, it would pick them back up almost immediately.&lt;/p&gt;  &lt;p&gt;It also struggled just a bit with Ranen’s size. Remember, he’s four. Every now and then, it interpreted him as squatting when he was really standing. It didn’t really affect the gameplay, but it bothered him. My two year old didn’t really play, but the Kinect would occasionally get confused when he would wander into the play area.&lt;/p&gt;  &lt;p&gt;The game itself was a hit with the kids and I had a lot of fun as well. I’m sure the game will get old after the novelty wears off, but it is definitely a fun entry title.&lt;/p&gt;  &lt;h4&gt;Demo Games&lt;/h4&gt;  &lt;p&gt;Saturday night we had a few friends over sans children. In addition to Kinect Adventures, we played through some of the included demos. The dance game was a hoot and it is definitely on the “to buy” list. We also had fun with the racing game, but I don’t anticipate it having enough variety for the long term. I was impressed how friends who don’t play video games at all were able to pick it up and navigate the games.&lt;/p&gt;  &lt;p&gt;The fitness game demo was short, but very impressive. That’s on the “to buy” list as well.&lt;/p&gt;  &lt;h4&gt;Voice&lt;/h4&gt;  &lt;p&gt;The voice recognition works, but isn’t really that useful. You can navigate Kinect Hub, but that’s about it. Funny enough, it doesn’t recognize my daughter. That really frustrated her.&lt;/p&gt;  &lt;h4&gt;Interface&lt;/h4&gt;  &lt;p&gt;The default interface is a little clunky. This is a UI design issue though and not a problem with the hardware. For example, the dance game has a great navigation interface for Kinect.&lt;/p&gt;  &lt;p&gt;I’m hoping this will improve in future updates.&lt;/p&gt;  &lt;h4&gt;Summary&lt;/h4&gt;  &lt;p&gt;Overall, I was impressed with Kinect’s ability to cope with the chaos of active kids. It really delivers on what it promised with respect to “you being the controller”.&amp;#160; The games I tried felt natural, were lots of fun, and contained many creative surprising uses of the hardware.&lt;/p&gt;  &lt;p&gt;I do think Kinect is best suited to family and party games, but there’s an increasing amount of that in my life.&lt;/p&gt;  &lt;p&gt;Recommendation: purchase.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=63331" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/fun/default.aspx">fun</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Kinect/default.aspx">Kinect</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/gaming/default.aspx">gaming</category></item><item><title>Visions of Software Development or Can’t We Just All Get Along?</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2010/01/12/visions-of-software-development.aspx</link><pubDate>Tue, 12 Jan 2010 11:38:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:54958</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>7</slash:comments><description>&lt;p&gt;I’m currently reading Thomas Sowell’s &lt;a href="http://www.amazon.com/gp/product/0465002056?ie=UTF8&amp;amp;tag=bluspiconinc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0465002056"&gt;A Conflict of Visions: Ideological Origins of Political Struggles&lt;/a&gt;&lt;img style="margin:0px;" border="0" alt="" src="http://www.assoc-amazon.com/e/ir?t=bluspiconinc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0465002056" width="1" height="1" /&gt;. As the title suggests, it deals with certain fundamental differences in the way we see the world and how that affects our political views. Don’t worry, I’m not going to delve into politics in the post. However, I was struck by how applicable the ‘visions’ in the book are to the competing (and conflicting) views about how we should write software.&lt;/p&gt;  &lt;p&gt;Here’s a simplified sketch of the two fundamental visions in the book. (Note that I’m not attempting to make a judgment call here on which vision is correct or better. Though admittedly, I have my bias. Likewise, I’m necessarily keeping it simplified.).&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Complex problems are best addressed by:      &lt;br /&gt;[a] systemic evolution or [b] clear and articulated reason &lt;/li&gt;    &lt;li&gt;When a complex problem is addressed the result will most likely be:      &lt;br /&gt;[a] a set of prudent trade-offs or [b] a solution &lt;/li&gt;    &lt;li&gt;Better results are produced when governance is provided by      &lt;br /&gt;[a] role and ritual or [b] well-educated individuals &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is just a few characteristics indentified in the book. We have a tendency to favor either the &lt;strong&gt;A&lt;/strong&gt; answers or the &lt;strong&gt;B&lt;/strong&gt; ones.&lt;/p&gt;  &lt;p&gt;Let me unpack this now in terms of software development. I think that the philosophy of agile/software craftsmanship/etc has generally preferred the A answers. While more traditional software development has generally preferred the B answers.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Many agile practices (such as TDD) build up software through systemic evolution. (Tim Barcz touched upon &lt;a title="Irreducible Complexity and Evolutionary Design in Software" href="http://www.timbarcz.com/blog/IrreducibleComplexityAndEvolutionaryDesign.aspx"&gt;this idea&lt;/a&gt; some time ago). Evolution is at the heart of iterative design. In opposition to this is a heavy initial design phase (or Big Design Up Front). In BDUF, the problem is analyzed and a clear, detailed path is laid out.&lt;/li&gt;    &lt;li&gt;I think the second point follows implicitly from the first point. BDUF is a ‘solution’, whereas iterative development is inherently about trade-offs. By the term ‘solution’ I am implying that on such-and-such a date, the software will be delivered and the problem will be solved. The value is delayed, but it is complete. In an iterative project the goal is to deliver immediate, but only partial value. It acknowledges that some value is always omitted and that the software might never be complete.&lt;/li&gt;    &lt;li&gt;The third point is one of the more divisive ones. I believe that agile practices focus a lot on ritual. TDD is a ritual. (I believe there was a Hanselman interview with Robert Martin that discussed this point). Kaban, Scrum, and other similar practices are ritualistic. These rituals are the soil where the systemic evolution grows. On the opposing side, development teams are led by architects. That is, by well-educated and intelligent individuals who have a greater understanding of what needs to be done.&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;My Bias&lt;/h3&gt;  &lt;p&gt;It is always important to admit your bias. I tend to favor the &lt;strong&gt;A&lt;/strong&gt; answers above, though not always. I have been in circumstances where that approach broke down.&lt;/p&gt;  &lt;p&gt;Regardless, I highly recommend the book as it has given me a lot of insight into my own views and those of others.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=54958" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Reflection/default.aspx">Reflection</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/ALT.NET/default.aspx">ALT.NET</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category></item><item><title>Lacking Confidence</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2009/08/25/lacking-confidence.aspx</link><pubDate>Tue, 25 Aug 2009 11:47:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:50665</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>16</slash:comments><description>&lt;p&gt;One of my biggest professional hindrances is a lack of confidence. I don’t have a CS degree. In fact, I have almost zero technical academic training. (My degree is in Religious Studies). In addition, I hang out with a lot of very smart and motivated programming gurus. I tend to judge myself by what they are capable of, and hence I often fail at my own standard. Add this to the fact that we men have fragile egos and it’s not hard to see how I arrive at this lack of confidence.&lt;/p&gt;  &lt;p&gt;Last week Rob and I presented at the Orlando .NET User Group.&amp;#160; Walking back to the car afterwards, I was chatting with &lt;a href="http://scottdensmore.typepad.com/"&gt;Scott Densmore&lt;/a&gt;. He mentioned that he doesn’t blog as much as he would like because he’s not convinced that he has anything of value to say. At first this surprised me. If you know Scott, then you know that he has a lot of interesting things to say. In addition, he’s very good at saying them. However, after a moment’s reflection, I recognized that I think the same thing all the time.&lt;/p&gt;  &lt;h3&gt;What Others Think&lt;/h3&gt;  &lt;p&gt;Despite the fact that I don’t &lt;em&gt;officially&lt;/em&gt; care what others think, I frequently base my actions on the anticipated responses of others. :-P&lt;/p&gt;  &lt;p&gt;I am afraid of failing in front of my peers. This has become evident to me as I have worked on &lt;a href="http://www.nhprof.com/"&gt;NHProfiler&lt;/a&gt;. Ayende is something of a Rock Star in the .NET world (though he may not believe it). I was timid to commit code. He might look it. It would suck and then he would know I was an idiot. I mean, I know that I do dumb things all the time but I didn’t want to let that out.&lt;/p&gt;  &lt;p&gt;That is the wrong attitude. Instead, I need to open and transparent. What’s the worse that can happen? I write some bad code. We have to revert a commit and then I learn how to write better code. (Yeah, this did happen and I lived.)&lt;/p&gt;  &lt;h3&gt;Bias Towards Actions&lt;/h3&gt;  &lt;p&gt;Where am I going with all of this?&lt;/p&gt;  &lt;p&gt;We often talk about the value of &lt;a href="http://en.wikipedia.org/wiki/Fail-fast"&gt;Failing Fast&lt;/a&gt;. We want to surface problems as quickly as possible, so that we are able to address them sooner. We apply this to development tasks, to project management, and even to the way we structure code.&lt;/p&gt;  &lt;p&gt;Too often I have not acted, because I was afraid that I would seem stupid, irrelevant, or inadequate. My advice: don’t be afraid to act. Sure, you might fail but that’s okay. Actually, it’s more than okay. True failure is not in falling down, but in refusing to get back up. If you aren’t failing, then you probably aren’t accomplishing anything.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=50665" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Musings/default.aspx">Musings</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category></item><item><title>Refactoring Relationships</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2009/08/08/refactoring-relationships.aspx</link><pubDate>Sun, 09 Aug 2009 01:45:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:49911</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Working with people is a lot like working with code. New relationships are green fields. Over time they become brown fields and (just like code) they require maintenance. I’m sure that everyone reading this can identify some legacy relationships that they would describer as, well, complicated. Just like some legacy code.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="working together" border="0" alt="working together" align="right" src="http://devlicious.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/christopher_5F00_bennage/iStock_5F00_000000810058XSmall_5F00_15B7B6E6.jpg" width="191" height="240" /&gt;I mean a lot with the word ‘relationship’. I have in mind everything from co-workers to friends to significant others. These variations all require maintenance and I think we should deliberately structure our relationships so that maintenance is easier.&lt;/p&gt;  &lt;h3&gt;Interaction Smells&lt;/h3&gt;  &lt;p&gt;So what &lt;em&gt;is&lt;/em&gt; the social equivalent of a switch\case statement?&lt;/p&gt;  &lt;p&gt;We talk about &lt;a href="http://en.wikipedia.org/wiki/Code_smell" target="_blank"&gt;code smells&lt;/a&gt; in software development as suggestive indicators that something is wrong. In our relationships, it is &lt;em&gt;interaction smells&lt;/em&gt;. I would consider these common emotional responses to be smells:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;avoidance &lt;/li&gt;    &lt;li&gt;irritation &lt;/li&gt;    &lt;li&gt;suspicion &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Personally, I have been guilty of avoiding someone because I thought I would irritate them and I didn’t want the hassle. This was in a work environment and it a negative effect on the overall efficacy of the group. My impulse to avoid was a smell and it led to a problem that needed to be addressed.&lt;/p&gt;  &lt;h3&gt;Amicability Debt&lt;/h3&gt;  &lt;p&gt;Bad code gets worse over time. We call this &lt;a href="http://martinfowler.com/bliki/TechnicalDebt.html" target="_blank"&gt;technical debt&lt;/a&gt;. Relationships that have soured do not get better by themselves. Little fractures grow over time. If we don’t address them when we smell them, the stink only gets worse. In addition, the stinky relationship can be begin affecting other parts of design, uh I mean, other social interactions (e.g., the team you are working with).&lt;/p&gt;  &lt;h3&gt;Refactoring the Relationship&lt;/h3&gt;  &lt;p&gt;Relationships are more difficult to work with than code for one primary reason:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;You cannot revert back to the last revision if your changes fail.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Nevertheless, we often need to make changes. Refactoring code doesn’t change the exposed functionality, but we make internal changes to improve it. If you are beginning to have problems with your boss, that doesn’t necessarily mean it’s time to quit (change the function) rather you might just need some relational refactoring.&lt;/p&gt;  &lt;p&gt;But what do I mean by refactoring a relationship? Well, there’s a lot to be said there and you can find a lot of practical advice on dealing with conflict and more over on &lt;a href="http://www.stevenlist.com/blog/" target="_blank"&gt;“Doc” List’s blog&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;In brief though, I mean this: &lt;/p&gt;  &lt;p&gt;Be honest and humble. “Hey, Joe, I feel like you’ve been a bit on edge with me. Did I do something to frustrate you? I’d like to clear the air.” Then talk it over. Again, refer to Doc’s blog for lots of details.&lt;/p&gt;  &lt;p&gt;I would like to qualify this further. Since you cannot revert what you say and do, you must be deliberate and thoughtful about your refactoring.&lt;/p&gt;  &lt;h3&gt;Afterword&lt;/h3&gt;  &lt;p&gt;You can see where my brain has been lately. It’s the cross-pollination of ideas from software development into all other human interests. Next week: multithreading and Italian cooking, followed up by ALT.NET and comparative religion.&lt;/p&gt;  &lt;p&gt;If any of this resonates with you, you might be interested in &lt;span title="it&amp;#39;s a Christian perspective on marriage, but I do have Justice Gray&amp;#39;s support."&gt;(a possibly controversial)&lt;/span&gt; post regarding the &lt;a href="http://blog.bennage.com/2008/07/de-matrimonium.html" target="_blank"&gt;maintenance of marriage&lt;/a&gt; on my personal blog.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=49911" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category></item><item><title>Agile Living</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2009/08/04/agile-living.aspx</link><pubDate>Wed, 05 Aug 2009 03:14:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:49842</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;I yearn to be consistent. I want my professional values to be the same as my personal ones. This is why I was quick to sign the &lt;a href="http://agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt;; it aligned with my personal values.&lt;/p&gt;  &lt;p&gt;&lt;img style="display:inline;margin-left:0px;margin-right:0px;" title="The 4-Hour Workweek" alt="The 4-Hour Workweek" align="right" src="http://ecx.images-amazon.com/images/I/51FSaZaVA3L._SS500_.jpg" width="240" height="240" /&gt;I have been overcommitted for the last couple of months and the stress has forced me to do some professional reevaluation. I had&amp;#160; a number of entrepreneurial and professional books on my back log. One of the book was &lt;a href="http://www.amazon.com/4-Hour-Workweek-Escape-Live-Anywhere/dp/0307353133"&gt;The 4-Hour Workweek&lt;/a&gt; by Timothy Ferriss.&lt;/p&gt;  &lt;p&gt;I really like this book.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;That’s nice, Christopher. Thanks for sharing. What does this have to do with software development?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Not a&amp;#160; lot. Perhaps. But I think it has a lot to do with the philosophy of Agile.&lt;/p&gt;  &lt;h3&gt;Eschew BDUF&lt;/h3&gt;  &lt;p&gt;One of the first ideas in the book is that the notion that retirement is a bit silly. We spend forty something odd years saving up money to retire and for what? How do we really know what to save up for? Do we honestly know what our requirements for old age will be? The standard cultural approach to professional life is Waterfall. We spend so much time building our product, and we have one big rollout.&lt;/p&gt;  &lt;h3&gt;Iterative Design&lt;/h3&gt;  &lt;p&gt;I recently watched the film &lt;a href="http://en.wikipedia.org/wiki/Holiday_(1938_film)"&gt;Holiday&lt;/a&gt; with Cary Grant and Katharine Hepburn. In the movie, a young and savvy Johnny Case (Grant) struggles between Doing Business (because that’s sensible) and taking time off to figure out what he &lt;em&gt;wants&lt;/em&gt; out of life. Ferris makes a similar proposition in the book. He suggests planning mini-retirements. It’s a release often, release early approach to life. Discover what you want you by trying things out. It’s Life in Sprints.&lt;/p&gt;  &lt;h3&gt;Illusion of Slackness&lt;/h3&gt;  &lt;p&gt;Agile has had a bad rep for being unstructured and lacking in discipline. Of course, practitioners of Agile know the&lt;em&gt; exact opposite&lt;/em&gt; is the case (and let that be a life lesson in itself). One of the things I love about Agile is the focus on delivering value. Likewise, my initial perception of the book was that it was a guide for the lazy; just another Get Rich Quick scheme. No, it’s about being deliberate with your life. It’s not a book that most people can use, because it requires disciple.&lt;/p&gt;  &lt;h3&gt;Eliminate Waste&lt;/h3&gt;  &lt;p&gt;If I’m being technical, I guess I would say that this is a Lean principle. However, Lean and Agile are complimentary ingredients in the tossed salad that is my head. Ferris applies this principle to all of life. It’s a beautiful thing. There’s a lot of waste in our lives, hidden under the veil of busyness. Find it and eliminate it. Repeat. &lt;/p&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;Okay, so I guess this turned out to be a book review of a non-technical book. If any of this stirs your brain, then I recommend that you read the book. If you are compelled by the ideas of Agile or Continuous Improvement, read the book.&lt;/p&gt;  &lt;p&gt;My Advice: be deliberate with your life, your professional, and your time.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p align="right"&gt;“… the unexamined life is not worth living…”      &lt;br /&gt;Socrates, &lt;a href="http://www.gutenberg.org/etext/1656"&gt;Plato’s Apology&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p align="right"&gt;“Whatever your hand finds to do, do it with all your might, for in the grave, where you are going, there is neither working nor planning nor knowledge nor wisdom.”&lt;/p&gt;    &lt;p align="right"&gt;&lt;a title="That&amp;#39;s another name for Ecclesiates. I&amp;#39;m just trying to make you curious." href="http://www.biblegateway.com/passage/?search=Ecclesiastes%209:10;&amp;amp;version=31;"&gt;Kohelet 9:10&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=49842" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category></item><item><title>Idealistic vs. Practical</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2009/03/24/idealistic-vs-practical.aspx</link><pubDate>Tue, 24 Mar 2009 14:05:09 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:45121</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;I often identify myself as an Agilist. When I first began to use the term, I was met with a great deal of trepidation. I remember the first few times I attended the local user group. “Oh, you’re one of those guys”. This hesitation has diminished considerably, but I still find that there are some interesting misconceptions about agile.&lt;/p&gt;  &lt;p&gt;For example, people frequently contrast &lt;em&gt;Agile&lt;/em&gt; with &lt;em&gt;Pragmatic&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Oh, I’ve heard about SOLID principles (or whatever), but I’m really more pragmatic.”&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;This has actually made me laugh out loud. You see, it was pragmatism that drove me towards the agile philosophy.&lt;/p&gt;  &lt;p&gt;According to Meriam-Webster, &lt;a href="http://www.merriam-webster.com/dictionary/pragmatic" target="_blank"&gt;pragmatic&lt;/a&gt; means:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;relating to matters of fact or practical affairs often to the exclusion of intellectual or artistic matters &lt;strong&gt;:&lt;/strong&gt; practical as opposed to idealistic&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So here is the relevant contrast: &lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;Idealistic vs. Practical&lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;Is Agile idealistic or practical? Agile does embraces a set of principles (ideals) and I’ve seen many of its adherents become drunk with the beauty of it. I’ve been there a few times myself. So yes, it is idealistic in that respect. However, I think a better question is this:&lt;/p&gt;  &lt;p align="left"&gt;Is Agile &lt;em&gt;merely&lt;/em&gt; idealistic?&lt;/p&gt;  &lt;p align="left"&gt;There is a strong idealistic streak in Agile, we will not deny it, however the ideal is actually “get work done”. In other words, Agile is the art of pragmatism.&lt;/p&gt;  &lt;p align="left"&gt;I am motivated by success. I am motivated by accomplishing things. The quickest route to depressing me (or frustrating me) is to prevent me from getting work done. Because of this, when I first encountered the agile idea that change is expensive and therefore we should reduce the cost of change, I was listening. When I discovered that agile methodology offers a set of tools for reducing the cost of change, I was ecstatic.&lt;/p&gt;  &lt;p align="left"&gt;In the interest of being brief, I’ll jump to my conclusion:&lt;/p&gt;  &lt;p align="left"&gt;The application of the &lt;a href="http://agilemanifesto.org/principles.html" target="_blank"&gt;agile principles&lt;/a&gt; is about being successful in software development projects. It is not ars gratia artis. While some enthusiasts may forget that, it doesn’t change the nature of the underlying principles. &lt;/p&gt;  &lt;p align="left"&gt;Agile is the art of being pragmatic.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=45121" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category></item><item><title>MSDN DevCon Reflections</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2008/12/12/msdn-devcon-reflections.aspx</link><pubDate>Fri, 12 Dec 2008 17:17:52 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:43390</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;I had a great time at the conference yesterday. I really appreciate everyone who attended our sessions as well as all the positive feedback. For those of you in other cities,Orlando was just the 2nd conference. The rest are &lt;a href="http://www.msdndevcon.com"&gt;still to come&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For anyone interested in the materials from our sessions:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.mapdotnet.com/"&gt;MapDotNet&lt;/a&gt; (from the keynote) Don&amp;#39;t forget this is free.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC31/"&gt;jQuery&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC45/"&gt;WPF ToolKit&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Why You Should Go&lt;/h3&gt;  &lt;p&gt;Yes, there are lots of presentations and great speakers, but in retrospect I really think these are secondary reasons. The highlight of the event is the under-advertised &lt;em&gt;Community Courtyard&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;Community Courtyard is an Open Spaces&lt;em&gt;-ish&lt;/em&gt; gathering facilitated by &lt;a href="http://twitter.com/athought"&gt;&amp;quot;Doc&amp;quot; List&lt;/a&gt;. No one seemed to know about this portion of the conference, but&amp;#160; thankfully &lt;a href="http://devfish.net/"&gt;Joe Healy&lt;/a&gt; herded some of us into the courtyard for a tweetup. (I think the tweetup was just an excuse to get us into the courtyard.)&lt;/p&gt;  &lt;p&gt;The result was great conversation. We talked about many things ranging from dealing with conflict to functional programming. These sorts of environments are where I have had the biggest gains in my craft. I can&amp;#39;t encourage you enough to check this aspect of the conference.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;post scriptum&lt;/strong&gt;      &lt;br /&gt;For those of you&amp;#160; twitterati who have asked me to get Rob Eisenberg on Twitter, his name was apparently revealed at this &lt;/em&gt;&lt;a href="http://www.twitpic.com/s6rx"&gt;&lt;em&gt;tweetup&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=43390" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Presentations/default.aspx">Presentations</category></item><item><title>An Early Start</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2008/12/09/an-early-start.aspx</link><pubDate>Wed, 10 Dec 2008 01:42:17 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:43363</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>8</slash:comments><description>&lt;p&gt;My daughter is about 6 ½ years old. Her reading skills have blossomed in these last 6 months. It&amp;#39;s been an amazing experience as a parent both contributing and merely witnessing her discovery of literacy.&lt;/p&gt;  &lt;p&gt;Programming is one of my passions, and I like to share my passions. Like watching a sunset, it&amp;#39;s better when you are not alone. I&amp;#39;ve been kicking around ideas for teaching her how to program for a couple of years actually. I had a few concepts that I never got around too, but I abandoned them all when I heard about &lt;a href="http://research.microsoft.com/projects/boku/"&gt;Boku&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Boku is an iconic programming game for the Xbox. Microsoft announced it at PDC. It looks &lt;em&gt;really&lt;/em&gt; cool, though I do have a slight hesitation about the iconic part. (I do so like words.)&lt;/p&gt;  &lt;p&gt;Tonight, just before dinner I stumbled onto &lt;a href="http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx"&gt;Small Basic&lt;/a&gt; via &lt;a href="http://blogs.msdn.com/brianjo/"&gt;Brian Johnson&amp;#39;s blog&lt;/a&gt;.&amp;#160; It&amp;#39;s essentially a simple IDE with very pretty IntelliSense (that includes keywords). There&amp;#39;s a simplified API for accessing things like the system clock and the desktop&amp;#39;s wallpaper. Most of it well over my daughter&amp;#39;s head. However, I noticed a class called Turtle that allows you do draw in a &lt;a href="http://en.wikipedia.org/wiki/Logo_programming_language"&gt;Logo-esque&lt;/a&gt; manner. I decided to see if she was interested. She was. &lt;/p&gt;  &lt;p&gt;Here is her first program. I left the IntelliSense popup for you to see.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" border="0" alt="12-9-2008 8-31-59 PM" src="http://devlicious.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/christopher_5F00_bennage/129200883159PM_5F00_20127CBE.png" width="550" height="391" /&gt; &lt;/p&gt;  &lt;p&gt;The output is animated, but here is the final state:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" border="0" alt="Where the Turtle stopped..." src="http://devlicious.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/christopher_5F00_bennage/129200883412PM_5F00_7F1F0A16.png" width="267" height="199" /&gt; &lt;/p&gt;  &lt;p&gt;I spent about 15 to 20 minutes explaining the concept, and demonstrating it to her. I recommended that she try to draw an A, but she choose a square. I tried to let her reason it out as much as possible, and only provided guidance when I feared she might get frustrated. (The biggest problem was the parentheses, I had to keep reminding her. I had her execute it to see if it was doing what she expected. I even had her pretend to be a turtle while I gave her commands to move around the room. The funniest moment was when she asked why I kept saying to &amp;quot;run&amp;quot; it.&lt;/p&gt;  &lt;p&gt;Tomorrow she wants to draw a triangle!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=43363" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/fun/default.aspx">fun</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/daddy/default.aspx">daddy</category></item><item><title>Tampa Code Camp/WPF Presentation</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2008/12/08/tampa-code-camp-wpf-presentation.aspx</link><pubDate>Mon, 08 Dec 2008 15:17:41 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:43335</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;I had a couple of requests for my slide deck. It&amp;#39;s short and mostly pictures, but &lt;a href="http://www.slideshare.net/bennage/an-introduction-to-wpf-presentation/"&gt;here it is&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Additionally, the xaml-only font viewer is &lt;a href="http://bluespire.com/wpf/FontViewer.xaml"&gt;here&lt;/a&gt;. (You might want to do a right-click, save as). The binding example (old way vs. wpf way) is &lt;a href="http://cid-ec3deb862284b83b.skydrive.live.com/self.aspx/Public/Presentations/BindingExample.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I want to thank everyone that came to my presentation. You were responsive and interactive, and I was energized by the session. I also want to thank the &lt;a href="http://www.devfish.net/"&gt;DevFish&lt;/a&gt; for pushing me to get more involved in these events.&lt;/p&gt;  &lt;p&gt;Some additional personal highlights from the event:&lt;/p&gt;  &lt;p&gt;Bill Reiss of &lt;a href="http://www.bluerosegames.com/brg/"&gt;Blue Rose Games&lt;/a&gt; did a session on developing games with XNA. Specifically, he demonstrated publishing the game to his Zune. Very cool. His &lt;a href="http://www.bluerosegames.com/brg/free-web-games/bubble-breaker.aspx"&gt;Dr. Popper&lt;/a&gt; game will be among the community games on Xbox Live soon. It should be pretty cheap as well. (Support indie game developers!)&lt;/p&gt;  &lt;p&gt;Meeting passionate people who are excited about their craft is always the best part of these events. I&amp;#39;m always looking for the cross pollination of good ideas. It&amp;#39;s also great to discover what&amp;#39;s going on in neighboring communities.&lt;/p&gt;  &lt;p&gt;I got chat to Los Techie ninja &lt;a href="http://www.lostechies.com/blogs/sean_chambers/default.aspx"&gt;Sean Chambers&lt;/a&gt;, a fellow agilist and BDD/TDD practioner . We&amp;#39;re doing a TDD firestarter in Tampa next month. I&amp;#39;m really excited about the event.&lt;/p&gt;  &lt;p&gt;I also meet &lt;a href="http://theruntime.com/blogs/jaykimble/"&gt;Jay Kimble&lt;/a&gt; and had some good conversation about the controversies of ALT.NET and related practices. Jay&amp;#39;s also one of the forces behind the &lt;a href="http://www.tampaux.org/"&gt;Tampa UX group&lt;/a&gt;; a user group for developers focused on usability, UX, and general UI issues. I&amp;#39;m fascinated by this as those topics are increasingly my focus.&lt;/p&gt;  &lt;p&gt;If you are in Florida, don&amp;#39;t forget to come the the &lt;a href="http://www.msdndevcon.com/Pages/about.aspx"&gt;MSDN Developer Conference&lt;/a&gt; in Orlando this week. Rob and I will be there showing off some of our recent work for the Tallahassee-based &lt;a href="http://www.mapdotnet.com"&gt;MapDotNet&lt;/a&gt;. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=43335" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Presentations/default.aspx">Presentations</category></item><item><title>Dubious Honors</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2008/11/18/dubious-honors.aspx</link><pubDate>Tue, 18 Nov 2008 22:59:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:43122</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; With striking proof that I&amp;#39;m dense and a Developer of Little Brain, Andrew points out that the results are sorted by &lt;strong&gt;date added.&lt;/strong&gt; :- P&lt;/p&gt;

&lt;p&gt;On at least one torrent search site, our book is the #2 item when you search for WPF. Not searching for &amp;quot;WPF book&amp;quot;, just &amp;quot;WPF&amp;quot;. Rock on.&lt;img style="border-right:0px;border-top:0px;margin:8px 8px 0px;border-left:0px;border-bottom:0px;" height="255" alt="piratedbook" src="http://devlicious.com/blogs/christopher_bennage/WindowsLiveWriter/DubiousHonors_FC35/piratedbook_3.png" width="470" border="0" /&gt;&lt;/p&gt; &lt;p&gt;I have an alert setup that notifies me every time the book title is indexed on Google. There&amp;#39;s an new pirating (free books!) link about once a week. &lt;/p&gt; &lt;p&gt;If only I had a positive review for each site! :-)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=43122" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/humor/default.aspx">humor</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category></item><item><title>Solving Problems with TDD</title><link>http://devlicio.us/blogs/christopher_bennage/archive/2008/11/06/solving-problems-with-tdd.aspx</link><pubDate>Thu, 06 Nov 2008 20:03:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:42921</guid><dc:creator>Christopher Bennage</dc:creator><slash:comments>7</slash:comments><description>&lt;p&gt;I&amp;#39;m giving a talk on TDD at our local UG tonight, and under the influence of some recent posts here on devlicio.us, I just finished reworking my presentation. This post is an outline for the first half of my presentation.&lt;/p&gt; &lt;h3&gt;The Problems&lt;/h3&gt; &lt;p&gt;Code has entropy. That is over time it deteriorates. At least, that&amp;#39;s the metaphor we developers like to use. What is really means is that the code becomes harder to maintain and extend as it is maintained and extended over time. Did you follow that? Our typical approach to maintaining and extending code causes the code to become fragile and rigid and thus harder to maintain and extend in the future.&lt;/p&gt; &lt;p&gt;There are three common difficulties that arise, maybe more, but I&amp;#39;m focusing on three:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Unchangeable Code&lt;/li&gt; &lt;li&gt;Unintelligible Code&lt;/li&gt; &lt;li&gt;Unnecessary Code&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;A portion of code becomes unchangeable when its deeply entwined and entangled with other portions of code that have different responsibilities. You can&amp;#39;t change method X because we really don&amp;#39;t know what that will do to Y and Z.&lt;/p&gt; &lt;p&gt;Code can become unintelligible for lots of reasons: abbreviated names, circuitous logic, enormous methods, confusion of responsibilities, use of php☺, etc.&lt;/p&gt; &lt;p&gt;Finally, unnecessary code is code that is not used by the system. It can be vestigial, or as often happens, it can be the result of feature anticipation. &lt;em&gt;We thought this was going to be needed in the app, so...&lt;/em&gt;&lt;/p&gt; &lt;h3&gt;The Solutions&lt;/h3&gt; &lt;p&gt;There are some generally accepted solutions to these three problems.&lt;/p&gt; &lt;p&gt;In the case of unchangeable code, we can apply such patterns as &lt;a href="http://en.wikipedia.org/wiki/Separation_of_concerns" target="_blank"&gt;Separation of Concerns&lt;/a&gt; (SoC) and the &lt;a href="http://en.wikipedia.org/wiki/Single_responsibility_principle" target="_blank"&gt;Single Responsibility Principle&lt;/a&gt; (SRP). For addressing unintelligible code, we have a number of techniques such as &lt;em&gt;thoughtful&lt;/em&gt; comments, explicit naming, SRP again, etc. Finally, for unnecessary code we have the old axiom of &lt;a href="http://en.wikipedia.org/wiki/YAGNI" target="_blank"&gt;You Ain&amp;#39;t Gonna Need It.&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Okay, so we know how to solve the problems. Or least, we know how to mediate them. So what? What does that have to do with TDD?&lt;/p&gt; &lt;p&gt;My proposition is this:&lt;strong&gt; solutions are without value unless they are applied&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Additionally, when a problem occurs over time, the solution must be applied over time.&lt;/p&gt; &lt;h3&gt;The Analogy&lt;/h3&gt; &lt;p&gt;I just started going to the gym. It&amp;#39;s been about a decade since I did that, but I&amp;#39;m back. For the past several years however, I have been preaching to certain family members the value of exercise and healthy diet. I knew the benefits: stress reduction, longevity, improved sleeping, and just plain feeling better. However, I wasn&amp;#39;t really doing either.&lt;/p&gt; &lt;p&gt;I had the problem and I believed in the solution and, in fact, I made attempts to employ the solution. Ultimately, I was unsuccessful. That is, until I committed to go to the gym three days week at a set time and with a workout buddy.&lt;/p&gt; &lt;p&gt;My point is this, we are human beings and despite being smart we frequently revert to doing &amp;quot;the easiest thing&amp;quot;. Therefore, we ought to set up some sort of framework of methodology or discipline where the easiest thing is actually what we &lt;em&gt;want&lt;/em&gt; to do.&lt;/p&gt; &lt;p&gt;Additionally, I have to &lt;em&gt;keep on going&lt;/em&gt; to gym. For as long as I want to be fit, I will need to exercise. In the same way, for as long as I want my code to fit I will need to apply good principles.&lt;/p&gt; &lt;h3&gt;TDD as a Discipline&lt;/h3&gt; &lt;p&gt;I will argue that TDD is a discipline that enables the application of the solutions outlined above. Perhaps you apply those solution naturally. Perhaps you can benchmark 200lbs because of your genetic disposition. Bully for you. Go ahead and skip the rest.&lt;/p&gt; &lt;p&gt;Let&amp;#39;s examine a few essentials of TDD and see if they really address the problems we outlined.&lt;/p&gt; &lt;h4&gt;Test First&lt;/h4&gt; &lt;p&gt;I&amp;#39;m an advocate of automated testing in general. However, I do think that writing your tests first yields additional value. Primarily, it helps you &lt;em&gt;discover your ideal API&lt;/em&gt;. In other words, you can design your API up front such that it is more intuitive. More intuitive means easier to understand. &lt;/p&gt; &lt;p&gt;Secondly, testing first helps you identify dependencies early. You quickly discover that class X will need a Y and so you are forced to create seams in the application at the onset. This encourages SoC and SRP.&lt;/p&gt; &lt;h4&gt;Testing Units&lt;/h4&gt; &lt;p&gt;It took me a long time to understand the &amp;quot;unit&amp;quot; part of unit testing. The idea is that you decompose your problem into units, and deal with the problem one unit at a time. You could call this &amp;quot;test just one thing&amp;quot;. Okay, well what is &amp;quot;one thing&amp;quot;? That is hard to tell and comes with experience. Nevertheless, &lt;em&gt;the practice&lt;/em&gt; of trying to decompose a problem and identifying units leads you back to SoC and SRP again.&lt;/p&gt; &lt;h4&gt;Just Enough Code&lt;/h4&gt; &lt;p&gt;Another tenet of TDD is to &lt;em&gt;write only enough code to pass the test&lt;/em&gt;. Our natural instinct is to anticipate. It is part of what we are as developer, and it is not a bad thing. However, like many strengths, it can become a weakness. By constraining ourselves to a single problem at a time we will end up with less code. It also forces us to be conscious about our anticipation and to ask if a given scenario is &lt;em&gt;really&lt;/em&gt; necessary.&lt;/p&gt; &lt;h3&gt;Conclusion&lt;/h3&gt; &lt;p&gt;I know that there is much contention over the actual value of TDD as a practice, and I am not going to force it on anyone (unless I hire you and now you are warned). However, I have found it to be a useful discipline for helping me to overcome common problems and because of that I encourage it&amp;#39;s use.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=42921" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Design+Patterns/default.aspx">Design Patterns</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Software+Architecture/default.aspx">Software Architecture</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/TDD/default.aspx">TDD</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/ALT.NET/default.aspx">ALT.NET</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://devlicio.us/blogs/christopher_bennage/archive/tags/Opinion/default.aspx">Opinion</category></item></channel></rss>