<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">
  <channel>
    <title>Agilification</title>
    <description>&lt;strong&gt;a•gi•li•fi•ca•tion&lt;/strong&gt; (ə-ˈji-lə-fə-ˈkā-shən) &lt;em&gt;n.&lt;/em&gt;  the process of promoting and increasing agility</description>
    <link>http://www.agilification.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.5.0</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://www.agilification.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Agilification</dc:creator>
    <dc:title>Agilification</dc:title>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/agilification" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>How to (really) turn off Just-In-Time Debugging (JIT)</title>
      <description>&lt;p&gt;
I&amp;#39;m working on developing a server process that needs to execute nightly.&amp;nbsp; While working out some kinks, the process occasionally throws an exception.&amp;nbsp; The server in question has Sql Server Management Studio installed on it, which uses Visual Studio as its application shell.&amp;nbsp; This means that the server tries to invoke Just-In-Time debugging whenever an unhandled exception is thrown.&amp;nbsp; This is a problem for a few reasons.
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;No one is logged in to the server when the error occurs, so there is no one to actually debug the process&lt;/li&gt;
	&lt;li&gt;The attempt to start up JIT prevents the actual exception message from being added to the event log&lt;/li&gt;
	&lt;li&gt;The machine isn&amp;#39;t (and shouldn&amp;#39;t be) set up for debugging the application anyway (it&amp;#39;s a DB server, for Pete&amp;#39;s sake!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/ssc8234s%28VS.80%29.aspx" target="_blank" title="Just-In-Time, Debugging, Options Dialog Box"&gt;This MSDN article&lt;/a&gt; says to simply start up Visual Studio, go to Tools --&amp;gt; Options --&amp;gt; Debugging &lt;strong&gt;--&lt;/strong&gt;&amp;gt; Just-In-Time and then uncheck all the boxes.&amp;nbsp; This isn&amp;#39;t quite enough.&amp;nbsp; To complete the process, I had to follow the steps in another article (&lt;a href="http://msdn.microsoft.com/en-us/library/5hs4b7a6%28VS.80%29.aspx" target="_blank" title="Just-In-Time Debugging"&gt;Just-In-Time Debugging&lt;/a&gt;) and remove some registry keys.
&lt;/p&gt;
&lt;p&gt;
Of course there should not be any unhandled exceptions in an application!&amp;nbsp; However, in the early stages of testing a new server process, it&amp;#39;s nice to be able to get helpful error messages when you do experience an unhandled exception. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0-jRMgPwotgeQGj9bUG-pTlYNjM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0-jRMgPwotgeQGj9bUG-pTlYNjM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0-jRMgPwotgeQGj9bUG-pTlYNjM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0-jRMgPwotgeQGj9bUG-pTlYNjM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/How-to-(really)-turn-off-Just-In-Time-Debugging-(JIT).aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/How-to-(really)-turn-off-Just-In-Time-Debugging-(JIT).aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=c08b5442-f719-4380-925c-e7ba003ac56f</guid>
      <pubDate>Wed, 23 Sep 2009 03:28:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=c08b5442-f719-4380-925c-e7ba003ac56f</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=c08b5442-f719-4380-925c-e7ba003ac56f</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/How-to-(really)-turn-off-Just-In-Time-Debugging-(JIT).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=c08b5442-f719-4380-925c-e7ba003ac56f</wfw:commentRss>
    </item>
    <item>
      <title>Agile Is Not A Process</title>
      <description>&lt;p&gt;
Lately I&amp;#39;m hearing a lot about agile &amp;quot;processes&amp;quot; and teams that claim to be adopting an agile &amp;quot;methodology&amp;quot;.&amp;nbsp; This sort of language speaks as if certain structures and procedures can be adopted which will make a team agile. This thinking is misguided at best, damaging at worst. When Kent, Bob, Ward and the other 17 &amp;quot;Apostles of Agile&amp;quot; crafted the &lt;a href="http://agilemanifesto.org/" target="_blank"&gt;Agile Manifesto&lt;/a&gt;, they did not publish a list of &lt;em&gt;procedures or processes&lt;/em&gt;.&amp;nbsp; Instead they provided a set of &lt;em&gt;values and priorities&lt;/em&gt;. 
&lt;/p&gt;
&lt;p&gt;
Are you part of a team that is striving to be agile?&amp;nbsp; If so, ask yourself, what is the primary driving force behind your efforts? 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Structures&lt;/li&gt;
	&lt;li&gt;Procedures&lt;/li&gt;
	&lt;li&gt;Processes&lt;/li&gt;
	&lt;li&gt;Methodologies&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;em&gt;or&lt;/em&gt;
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Values&lt;/li&gt;
	&lt;li&gt;Priorities&lt;/li&gt;
	&lt;li&gt;Principles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Do we need structures and procedures?&amp;nbsp; Absolutely! They are the context in which we perform concrete actions in order to fulfill the values and priorities to which we are committed. However, it is &lt;em&gt;the ability to adapt&lt;/em&gt; these structures and procedures that makes an Agile team. When methods and structures are rigid and unchanging, agility has ceased.
&lt;/p&gt;
&lt;p&gt;
Agile is not a process, but it &lt;em&gt;is&lt;/em&gt; about how we create, shape and adjust our processes. The real question to ponder is this: &amp;quot;Do current structures, procedures and metholodogies enable us to maximally operate according to our values, priorities and core principles?&amp;quot; This is the question of &lt;em&gt;alignment&lt;/em&gt; (a concept I will explore further in future posts). If the answer is &amp;quot;no&amp;quot; then are you willing to do something about it?
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/goWX6ReTkJLzlhePQawI-ADN2r8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/goWX6ReTkJLzlhePQawI-ADN2r8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/goWX6ReTkJLzlhePQawI-ADN2r8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/goWX6ReTkJLzlhePQawI-ADN2r8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Agile-Is-Not-A-Process.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/Agile-Is-Not-A-Process.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=0b33f972-992f-4928-b899-5e57e80265d6</guid>
      <pubDate>Sat, 23 May 2009 07:07:00 -1400</pubDate>
      <category>Agile Project Management</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=0b33f972-992f-4928-b899-5e57e80265d6</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=0b33f972-992f-4928-b899-5e57e80265d6</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Agile-Is-Not-A-Process.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=0b33f972-992f-4928-b899-5e57e80265d6</wfw:commentRss>
    </item>
    <item>
      <title>Preparing for an Agile Retrospective</title>
      <description>&lt;p&gt;
One of the facets of the Agile methodology I appreciate is the emphasis on transparency.&amp;nbsp; Rather than ignoring the proverbial elephant-in-the-room, Agile helps us to quickly identify (and hopefully address!) the real issues that affect our teams.&amp;nbsp; This aids the continuous learning process as we must constantly face hard realities and find creative ways to address them.
&lt;/p&gt;
&lt;p&gt;
A vital part of the Agile process is the retrospective.&amp;nbsp; In this process, the team members identify the events which have occurred during a previous time-period.&amp;nbsp; They then seek to discover patterns in these events.&amp;nbsp; Finally, the culmination comes as the team identifies ways they can continue doing what is working, improve on what is working, and avoid doing what has not been working.
&lt;/p&gt;
&lt;p&gt;
It is important to enter the retrospective process with a dispassionate view as to the events which have occurred prior to the retrospective.&amp;nbsp; It is non-productive to place blame on individuals or circumstances.&amp;nbsp; Instead, we must work together to face reality in the form of hard facts. As we reflect on these factual events, we work collaboratively to identify possible solutions that enable the team to reach for ever more productive heights.
&lt;/p&gt;
&lt;p&gt;
This isn&amp;#39;t to say there is no room for feelings in a retrospective.&amp;nbsp; Certainly the team members may experience a range of emotions as they reflect on the events of the previous time-period.&amp;nbsp; But the idea is to avoid any form of us-them mentality, or to blame circumstances for the outcomes.
&lt;/p&gt;
&lt;p&gt;
Retrospectives can be an exhilarating and enlightening experience.&amp;nbsp; They are a great tool for improving the continuous learning of your teams. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SOzIrcTEgJVSigosWE0hJtaoJI8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SOzIrcTEgJVSigosWE0hJtaoJI8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SOzIrcTEgJVSigosWE0hJtaoJI8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SOzIrcTEgJVSigosWE0hJtaoJI8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Preparing-for-an-Agile-Retrospective.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/Preparing-for-an-Agile-Retrospective.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=4c02011f-7277-48b1-b3aa-b311f505aadc</guid>
      <pubDate>Thu, 19 Mar 2009 17:02:00 -1400</pubDate>
      <category>Agile Project Management</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=4c02011f-7277-48b1-b3aa-b311f505aadc</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=4c02011f-7277-48b1-b3aa-b311f505aadc</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Preparing-for-an-Agile-Retrospective.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=4c02011f-7277-48b1-b3aa-b311f505aadc</wfw:commentRss>
    </item>
    <item>
      <title>ASP.NET MVC Version 1 Has Shipped</title>
      <description>Version 1 of Microsoft&amp;#39;s ASP.NET MVC framework has shipped.&amp;nbsp; &lt;a href="http://www.asp.net/mvc/"&gt;Find out more&lt;/a&gt; about the framework or go &lt;a href="http://go.microsoft.com/fwlink/?LinkId=144444"&gt;download &lt;/a&gt;it.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/q0j64uFqSuCz4dpOdonZ6xbamL8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q0j64uFqSuCz4dpOdonZ6xbamL8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/q0j64uFqSuCz4dpOdonZ6xbamL8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q0j64uFqSuCz4dpOdonZ6xbamL8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/ASPNET-MVC-Version-1-Has-Shipped.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/ASPNET-MVC-Version-1-Has-Shipped.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=89ea36f2-fff1-4829-a674-4cfe0f9728ae</guid>
      <pubDate>Wed, 18 Mar 2009 07:12:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=89ea36f2-fff1-4829-a674-4cfe0f9728ae</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=89ea36f2-fff1-4829-a674-4cfe0f9728ae</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/ASPNET-MVC-Version-1-Has-Shipped.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=89ea36f2-fff1-4829-a674-4cfe0f9728ae</wfw:commentRss>
    </item>
    <item>
      <title>Patterns &amp; Practices - Part 2</title>
      <description>&lt;p&gt;
In my &lt;a href="http://www.agilification.com/post/Patterns-Practices-Part-1.aspx"&gt;previous post on Patterns &amp;amp; Practices&lt;/a&gt;, I discussed the fact that in order to learn P&amp;amp;P, you have to be willing to make mistakes.&amp;nbsp; In the early stages, it is beneficial to look for opportunities to apply patterns to your development so that you can begin to see how they take shape.&amp;nbsp; You may not understand their benefit in the early stages, but this is a vital step, akin to the experience of the &amp;quot;Karate Kid&amp;quot; as he was told to &amp;quot;wax on / wax off&amp;quot;.&amp;nbsp; He spent weeks practicing the same moves over and over again, not really understanding the purpose of such repetitive tasks.&amp;nbsp; What he failed to realize was that he was developing muscle memory and creating well worn neural pathways that would prove vital in his development process.&amp;nbsp; This holds true for us as software developers as well. [For this early development stage, a key resource is a book such as &lt;a href="http://oreilly.com/catalog/9780596007126/"&gt;Head First Design Patterns&lt;/a&gt;].
&lt;/p&gt;
&lt;p&gt;
Eventually you gain some proficiency with the repetitive tasks.&amp;nbsp; You begin to realize that certain patterns work better than others in certain circumstances.&amp;nbsp; You might discover that some patterns can paint you into a difficult corner (Singleton is of course the prime example, though Static Gateway has its pitfalls as well). At this stage you are beginning to deconstruct the value and utility of particular patterns for certain situations and contexts.&amp;nbsp; You awaken to the realization that code can have a &amp;quot;smell&amp;quot; that communicates whether a design is fitting or not.&amp;nbsp; While you cannot necessarily name the &amp;quot;smell&amp;quot; it is clearly there.&amp;nbsp; [At this stage, you&amp;#39;re ready to tackle &lt;a href="http://www.industriallogic.com/xp/refactoring/"&gt;Refactoring to Patterns&lt;/a&gt;].
&lt;/p&gt;
&lt;p&gt;
Take time to identify patterns that fit well for addressing particular smells.&amp;nbsp; Look for examples in code written by others (you are taking time to read code written by others, right?).&amp;nbsp; And start looking for ways that improper use of patterns can introduce smells of their own. 
&lt;/p&gt;
&lt;p&gt;
In my next post in this series, I will switch gears and discuss the relationship between Patterns and Practices and why you ultimately want to emphasize the Practices over the Patterns.&amp;nbsp; Stay tuned! 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p2TpJece95gCAeQ72jbuIe5Qtk0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p2TpJece95gCAeQ72jbuIe5Qtk0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p2TpJece95gCAeQ72jbuIe5Qtk0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p2TpJece95gCAeQ72jbuIe5Qtk0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Patterns-Practices-Part-2.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/Patterns-Practices-Part-2.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=337489d2-a56f-425f-ae79-d9d58dcaf0b8</guid>
      <pubDate>Tue, 17 Mar 2009 15:37:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=337489d2-a56f-425f-ae79-d9d58dcaf0b8</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=337489d2-a56f-425f-ae79-d9d58dcaf0b8</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Patterns-Practices-Part-2.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=337489d2-a56f-425f-ae79-d9d58dcaf0b8</wfw:commentRss>
    </item>
    <item>
      <title>Visual Studio Project Sorting Fix</title>
      <description>&lt;p&gt;
When you first create a solution using Visual Studio 2008, your projects sort nicely in alphabetical order.&amp;nbsp; But then as your project grows, you begin using solution folders to organize your projects.&amp;nbsp; It is at this point that your projects no longer sort alphabetically within their solution folders.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Of course I&amp;#39;ve heard of the trick where you just choose one of the projects in a folder, press &amp;quot;F2&amp;quot; (rename) and then leave the project name as it was previously.&amp;nbsp; But this is 1) a pain, and 2) only sorts projects in that one solution folder.
&lt;/p&gt;
&lt;p&gt;
So I created a tool that will modify your Visual Studio solution file (.sln) and make the projects sort properly within the solution folders.&amp;nbsp; Check it out at CodePlex:&amp;nbsp; &lt;a href="http://solutionsorter.codeplex.com/" title="SolutionSorter"&gt;Visual Studio Solution Sorter&lt;/a&gt; (&lt;a href="http://solutionsorter.codeplex.com/" title="SolutionSorter"&gt;http://solutionsorter.codeplex.com/&lt;/a&gt;). 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iCE5Y90qQHrbOSyXoCq1SGBTtbg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iCE5Y90qQHrbOSyXoCq1SGBTtbg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iCE5Y90qQHrbOSyXoCq1SGBTtbg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iCE5Y90qQHrbOSyXoCq1SGBTtbg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Visual-Studio-Project-Sorting-Fix.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/Visual-Studio-Project-Sorting-Fix.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=1cb993fa-9c6a-4c7a-9b47-6501d5e44c05</guid>
      <pubDate>Wed, 04 Mar 2009 04:40:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=1cb993fa-9c6a-4c7a-9b47-6501d5e44c05</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=1cb993fa-9c6a-4c7a-9b47-6501d5e44c05</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Visual-Studio-Project-Sorting-Fix.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=1cb993fa-9c6a-4c7a-9b47-6501d5e44c05</wfw:commentRss>
    </item>
    <item>
      <title>Patterns &amp; Practices - Part 1</title>
      <description>This is the first post in a series on Patterns and Practices.&amp;nbsp; The series will explore the learning process of a developer who desires to learn and apply good patterns and practices.&lt;br /&gt;
&lt;br /&gt;
Emilio and I had an interesting discussion a few days ago regarding Patterns &amp;amp; Practices.&amp;nbsp; We observed that when a developer first adopts P&amp;amp;P, he behaves like it&amp;#39;s all about the patterns.&amp;nbsp; The developer begins to read books and blogs that describe the various patterns and how these can be useful.&amp;nbsp; He begins to discover patterns in existing libraries and frameworks.&amp;nbsp; He starts looking for opportunities to implement patterns in his own development.&amp;nbsp; And he almost inevitably ends up suffering from some form of patternitis (often concentrated around an overuse of Singleton!).&lt;br /&gt;
&lt;br /&gt;
I believe this phase of development is necessary for a developer.&amp;nbsp; To comprehend patterns you have to actually try developing with them.&amp;nbsp; You can learn a lot about patterns from a book, or by reading code from someone else&amp;#39;s project.&amp;nbsp; But ultimately the only way to truly understand patterns is to actually put them to use in a project of your own.&amp;nbsp; In this regard, learning patterns is like learning to ice skate - you can watch others skate, you can read books on skating, but ultimately you&amp;#39;re going to have to throw on some skates and hit the ice.&amp;nbsp; And when you do, you&amp;#39;re going to fall.&amp;nbsp; When I learned to skate as a kid I remember that I was always afraid to fall.&amp;nbsp; This fear prevented me from learning.&amp;nbsp; But eventually someone told me that the only way to learn to skate was to push myself, and that meant I was going to fall sometimes.&lt;br /&gt;
&lt;br /&gt;
So dig in, read about patterns, study them, learn to discover them in your code and in the code of others.&amp;nbsp; And go ahead and try using some of them in your own projects.&amp;nbsp; Yes, you will make mistakes, but this is a vital part of the learning process.&lt;br /&gt;
&lt;br /&gt;
This post has focused on the initial process of learning patterns.&amp;nbsp; In my next post on this topic, I will explore how the developer can begin to experience success applying patterns in his or her own projects.&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HhyhIVf9hFEhcxfadQMDCCEE9Wo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HhyhIVf9hFEhcxfadQMDCCEE9Wo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HhyhIVf9hFEhcxfadQMDCCEE9Wo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HhyhIVf9hFEhcxfadQMDCCEE9Wo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Patterns-Practices-Part-1.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/Patterns-Practices-Part-1.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=d5752f65-35e5-425c-b0d3-a3c7f14568bf</guid>
      <pubDate>Sat, 03 Jan 2009 02:20:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=d5752f65-35e5-425c-b0d3-a3c7f14568bf</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=d5752f65-35e5-425c-b0d3-a3c7f14568bf</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Patterns-Practices-Part-1.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=d5752f65-35e5-425c-b0d3-a3c7f14568bf</wfw:commentRss>
    </item>
    <item>
      <title>Signature Converter</title>
      <description>&lt;p&gt;
For a mobile application I&amp;#39;m working on, I needed a simple signature capture control.  I found just such a control at the Code Project (&lt;a href="http://www.codeproject.com/KB/mobile/SignatureCapture_PocketPC.aspx"&gt;http://www.codeproject.com/KB/mobile/SignatureCapture_PocketPC.aspx&lt;/a&gt;).  The code will capture a signature and actually convert it into bitmap coordinates.  This will allow me to store much less data rather than full images.  But at some point I&amp;#39;m going to want to convert these bitmap coordinates back into an image.  And unfortunately, the signature capture project only provides Java code for performing this process.
&lt;/p&gt;
&lt;p&gt;
Well, if anyone else is interested, here is the Java code ported to C#.  My next step will be to extend this class so that it isn&amp;#39;t directly dependent on File System IO.  But this should be enough to get anyone started who&amp;#39;d like to use the Signature Capture control from CodeProject, but wants to use .NET and C# to convert the bitmap coordinates back into an image.
&lt;/p&gt;
&lt;code class="csharp"&gt;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

namespace Agilification {
    public class SignatureConverter {

        const int baseX = 25;
        const int baseY = 25;
        
        public static void Convert(String inputTxtFile, String outputGraphicsFile) {
            List&amp;lt;String[]&amp;gt; v = readFile(inputTxtFile);
            Hashtable ht = getMinMax(v);
            int minX = (Int32)ht["minX"];
            int maxX = (Int32)ht["maxX"];
            int minY = (Int32)ht["minY"];
            int maxY = (Int32)ht["maxY"];
            int width = maxX - minX + baseX;
            int height = maxY - minY + baseY;
            Image image = new Bitmap(width, height);
            Graphics g2d = Graphics.FromImage(image);
            var b = new SolidBrush(Color.White);
            g2d.FillRectangle(b, 0, 0, width, height);
            drawImage(g2d, v, minX, minY);
            g2d.Dispose();
            image.Save(outputGraphicsFile, ImageFormat.Jpeg);
        }
        
        private static void drawImage(Graphics g2d, List&amp;lt;String[]&amp;gt; v, int minX, int minY) {
            for (int j = 0; j &amp;lt; v.Count; j++) {
                String[] points = (String[])v[j];
                int x1 = 0;
                int y1 = 0;
                int x2 = 0;
                int y2 = 0;
                for (int i = 0; i &amp;lt; 4; i++) {
                    x1 = Int32.Parse(points[0]) - minX + (baseX / 2);
                    x2 = Int32.Parse(points[2]) - minX + (baseX / 2);
                    y1 = Int32.Parse(points[1]) - minY + (baseY / 2);
                    y2 = Int32.Parse(points[3]) - minY + (baseY / 2);
                }
                var p = new Pen(Color.Black);
                g2d.DrawLine(p, x1, y1, x2, y2);
            }
        }
       
        private static Hashtable getMinMax(List&amp;lt;String[]&amp;gt; v) {
            Hashtable ht = new Hashtable();
            int minX = 9999;
            int maxX = 0;
            int minY = 9999;
            int maxY = 0;
            for (int j = 0; j &amp;lt; v.Count; j++) {
                String[] points = (String[])v[j];
                for (int i = 0; i &amp;lt; 4; i++) {
                    minX = (Int32.Parse(points[0]) &amp;lt; minX) ? Int32.Parse(points[0]) : minX;
                    minX = (Int32.Parse(points[2]) &amp;lt; minX) ? Int32.Parse(points[2]) : minX;
                    maxX = (Int32.Parse(points[0]) &amp;gt; maxX) ? Int32.Parse(points[0]) : maxX;
                    maxX = (Int32.Parse(points[2]) &amp;gt; maxX) ? Int32.Parse(points[2]) : maxX;
                    minY = (Int32.Parse(points[1]) &amp;lt; minY) ? Int32.Parse(points[1]) : minY;
                    minY = (Int32.Parse(points[3]) &amp;lt; minY) ? Int32.Parse(points[3]) : minY;
                    maxY = (Int32.Parse(points[1]) &amp;gt; maxY) ? Int32.Parse(points[1]) : maxY;
                    maxY = (Int32.Parse(points[3]) &amp;gt; maxY) ? Int32.Parse(points[3]) : maxY;
                }
            }
            ht.Add("minX", minX);
            ht.Add("maxX", maxX);
            ht.Add("minY", minY);
            ht.Add("maxY", maxY);
            return ht;
        }
        
        private static List&amp;lt;String[]&amp;gt; readFile(String fileName) {
            List&amp;lt;String[]&amp;gt; v = new List&amp;lt;String[]&amp;gt;();
            var reader = new StreamReader(fileName);
            String record = null;
            while ((record = reader.ReadLine()).Trim().Length &amp;gt; 0) {
                String[] points = new String[4];
                points = record.Split(' ');
                v.Add(points);
            }
            return v;
        }
        
        [MTAThread]
        static void Main(String[] args) {
            try {
                String inputTextFile = ".\\Sign.txt";
                String outputImageFile = ".\\Sign.jpg";
                Convert(inputTextFile, outputImageFile);
            } catch (Exception ex) {
                Console.WriteLine(" exception: " + ex.ToString());
            }
        }

    }
}
&lt;/code&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EVpkSGMfUF8W-C8X02jDof-wNhk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EVpkSGMfUF8W-C8X02jDof-wNhk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EVpkSGMfUF8W-C8X02jDof-wNhk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EVpkSGMfUF8W-C8X02jDof-wNhk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Signature-Converter.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/Signature-Converter.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=3f9b97aa-f6f7-4bee-852c-7389831ef93e</guid>
      <pubDate>Tue, 23 Dec 2008 16:27:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=3f9b97aa-f6f7-4bee-852c-7389831ef93e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=3f9b97aa-f6f7-4bee-852c-7389831ef93e</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Signature-Converter.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=3f9b97aa-f6f7-4bee-852c-7389831ef93e</wfw:commentRss>
    </item>
    <item>
      <title>My Visual Studio Color Settings</title>
      <description>&lt;p&gt;
I am really surprised that there isn&amp;#39;t a community site for sharing
Visual Studio settings.&amp;nbsp; If there is one, let me know because I&amp;#39;ve
looked and couldn&amp;#39;t find anything.&amp;nbsp; I thought it would be nice to share
my font and color settings for the people interested.&amp;nbsp; It&amp;#39;s a version of
&lt;a href="http://www.winterdom.com/weblog/content/binary/2008-Ragnarok_Grey.vssettings.zip"&gt;Ragnarok Grey&lt;/a&gt;
that I tweaked a little to fit my personal taste.&amp;nbsp; I uploaded some
screen shots below to give you a preview. &amp;nbsp; The download only contains font and color
settings so it will not change any of your other VS settings.&amp;nbsp; You
should still back up your current settings just to be on the safe
side.&amp;nbsp; &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.agilification.com/file.axd?file=2008%2f12%2fDark-Colors.zip"&gt;Dark-Colors.zip (1.97 kb)&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
You can find more color settings by Tomas Restrepo &lt;a id="axd5" href="http://winterdom.com/weblog/2007/11/22/VS2008ColorSchemes.aspx" target="_blank" title="here"&gt;here&lt;/a&gt; including the original. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;C#&lt;/strong&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.agilification.com/image.axd?picture=2008%2f12%2fss_cs.jpg" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;HTML&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.agilification.com/image.axd?picture=2008%2f12%2fss_html.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;JavaScript &lt;/strong&gt;
&lt;/p&gt;
&lt;img src="http://www.agilification.com/image.axd?picture=2008%2f12%2fss_js.jpg" alt="" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0JixWUluAXD57uUZwi1tPFCbqII/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0JixWUluAXD57uUZwi1tPFCbqII/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0JixWUluAXD57uUZwi1tPFCbqII/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0JixWUluAXD57uUZwi1tPFCbqII/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/My-Visual-Studio-Color-Settings.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (emilioc)</author>
      <comments>http://www.agilification.com/post/My-Visual-Studio-Color-Settings.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=580c2ad2-6621-44b6-8cb6-7402c6c28f22</guid>
      <pubDate>Mon, 08 Dec 2008 02:59:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>emilioc</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=580c2ad2-6621-44b6-8cb6-7402c6c28f22</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=580c2ad2-6621-44b6-8cb6-7402c6c28f22</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/My-Visual-Studio-Color-Settings.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=580c2ad2-6621-44b6-8cb6-7402c6c28f22</wfw:commentRss>
    </item>
    <item>
      <title>ToFormattedList Extension Method</title>
      <description>&lt;p&gt;
Forgive me if this incorrect, but I believe the ToFormattedList() IEnumerable extension method was part of the early ASP.NET MVC previews.&amp;nbsp; If you&amp;rsquo;ve used the method then you are aware of its usefulness.&amp;nbsp; You pass in a format string (ex. &amp;ldquo;&amp;lt;li&amp;gt;{0}&amp;lt;/li&amp;gt;&amp;rdquo;) and you get back a string of all the objects that were in your IEnumerable individually formatted (&amp;quot;very nice&amp;quot; -Borat).&amp;nbsp; This is perfect if all the objects in your IEnumerable have an acceptable ToString() method. What if you are working with POCOs or business objects and you would like to use a property instead of an objects ToString() value?&amp;nbsp; This is exactly the scenario that prompted me to create a ToFormattedList() extension method for IEnumerable&amp;lt;T&amp;gt;. &amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
To satisfy this new requirement I needed to add a new parameter.&amp;nbsp; My version of ToFormattedList() takes a Func&amp;lt;T, string&amp;gt; parameter to access the appropriate property (we need the func, we gotta have that func).&amp;nbsp; Below is the simple code that makes this work and example of its use. 
&lt;/p&gt;
&lt;h3&gt;Code &lt;br /&gt;
&lt;/h3&gt;
&lt;p&gt;
&lt;code class="csharp"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public static string ToFormattedList&amp;lt;T&amp;gt;(this IEnumerable&amp;lt;T&amp;gt; list, string format, Func&amp;lt;T, string&amp;gt; func) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var s = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (T item in list) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s += string.Format(format, func.Invoke(item));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;/code&gt;
&lt;/p&gt;
&lt;h3&gt;Usage &lt;/h3&gt;
&lt;code class="csharp"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var output = companies.ToFormattedList(&amp;quot;&amp;lt;li&amp;gt;{0}&amp;lt;/li&amp;gt;&amp;quot;, c =&amp;gt; c.Name); 
&lt;/code&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bvhZy879IV1j-43wEcNdHGr7cv0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bvhZy879IV1j-43wEcNdHGr7cv0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bvhZy879IV1j-43wEcNdHGr7cv0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bvhZy879IV1j-43wEcNdHGr7cv0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/ToFormattedList-Extension-Method.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (emilioc)</author>
      <comments>http://www.agilification.com/post/ToFormattedList-Extension-Method.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=cde5b0fa-adac-4525-ae14-83b786192b64</guid>
      <pubDate>Mon, 01 Dec 2008 14:54:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>emilioc</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=cde5b0fa-adac-4525-ae14-83b786192b64</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=cde5b0fa-adac-4525-ae14-83b786192b64</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/ToFormattedList-Extension-Method.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=cde5b0fa-adac-4525-ae14-83b786192b64</wfw:commentRss>
    </item>
    <item>
      <title>Lazy Init VS Constructor Init</title>
      <description>&lt;p&gt;
One of my favorite things about programming is also one of the most
frustrating things about programming. There&amp;#39;s always more than one way
to solve a problem.&amp;nbsp; Software developers are faced with many choices.&amp;nbsp;
There is much to consider at every phase in the process.&amp;nbsp; Efficiency,
deadlines, performance, maintainability and scalability are all
important topics to consider.&amp;nbsp; So what criteria should you use to
choose the correct convention or pattern?&amp;nbsp; I&amp;#39;m here to let you know,
there is no definitive answer (surprise).&amp;nbsp; Also, this versus article is
not meant to declare a victor.&amp;nbsp; I wanted to use this example to
illustrate my point on the choices developers have to make and the
criteria that affect those choices.&lt;br /&gt;
&lt;br /&gt;
Let&amp;#39;s take on lazy &lt;span class="misspell"&gt;init&lt;/span&gt; first.&amp;nbsp; Below is a simple class with a &lt;strong&gt;Names &lt;/strong&gt;property.&amp;nbsp;
Instead of initializing the list when the object is created,
initialization is delayed until the property is needed.&amp;nbsp; The &lt;strong&gt;if &lt;/strong&gt;block is there to protect against the creation of a new list every time you retrieve the &lt;strong&gt;Names&lt;/strong&gt; property.&amp;nbsp; Performance is the most common argument I hear for using lazy &lt;span class="misspell"&gt;init&lt;/span&gt;.&amp;nbsp; Performance is a very good reason to use lazy &lt;span class="misspell"&gt;init&lt;/span&gt;.&amp;nbsp;
As you can see, there is quite a bit going on for a simple object
initialization.&amp;nbsp; At minimum, you need a field and a property, not to
mention the null object precaution.&amp;nbsp; If you&amp;#39;ve been developing for a
while, it is easy to get in the habit of starting with optimized code.&amp;nbsp;
Shouldn&amp;#39;t the goal be to start simple and refactor as required?&amp;nbsp; Is
this common convention needless complexity?
&lt;/p&gt;
&lt;p&gt;
&lt;code class="csharp"&gt;
&amp;nbsp;public class SimpleClass {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private IList&amp;lt;string&amp;gt; _names;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public IList&amp;lt;string&amp;gt; Names {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_names == null) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _names = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _names;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public SimpleClass() {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
And in this corner we have the challenger, constructor &lt;span class="misspell"&gt;init&lt;/span&gt;.&amp;nbsp; Using this approach, the &lt;strong&gt;Names &lt;/strong&gt;property will be initialized when &lt;strong&gt;&lt;span class="misspell"&gt;SimpleClass&lt;/span&gt; &lt;/strong&gt;is initialized.&amp;nbsp; One benefit of constructor &lt;span class="misspell"&gt;init&lt;/span&gt;, as seen in the example below, is simplicity.&amp;nbsp; There is no need for a field or an &lt;strong&gt;if&lt;/strong&gt;
statement.&amp;nbsp; What about performance?&amp;nbsp; Performance is a valid concern but
it should be weighed against code efficiency.&amp;nbsp; Simply put, a developer
has a lot less code to write when using constructor &lt;span class="misspell"&gt;init&lt;/span&gt;.&amp;nbsp; The need to optimize for performance may never arise.&amp;nbsp; In fact, if lazy &lt;span class="misspell"&gt;init&lt;/span&gt; improves your code&amp;#39;s performance, you might have a problem with &lt;span class="misspell"&gt;SRP&lt;/span&gt; (&lt;em&gt;zing&lt;/em&gt;).
&lt;/p&gt;
&lt;p&gt;
&lt;code class="csharp"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public class SimpleClass {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public IList&amp;lt;string&amp;gt; Names { get; private set; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public SimpleClass() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Names = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
It&amp;#39;s probably obvious that I prefer simplicity over complexity.&amp;nbsp; I
acknowledge that complexity has its place in development and is
appropriate at times.&amp;nbsp; I believe the priorities and factors that lead
to code complexity are an important and overlooked part of software
development.&amp;nbsp; If you&amp;#39;re not sure why you need it, maybe you don&amp;#39;t.&amp;nbsp; The
complex solution should answer the why.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Note&lt;/strong&gt;: a similar comparison can be made for Service &lt;span class="misspell"&gt;Locator&lt;/span&gt; and Constructor Injection but I will save that for another post. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ueFwAfPyC0a5AzbxXWkDosAsnoY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ueFwAfPyC0a5AzbxXWkDosAsnoY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ueFwAfPyC0a5AzbxXWkDosAsnoY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ueFwAfPyC0a5AzbxXWkDosAsnoY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Lazy-Init-VS-Constructor-Init.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (emilioc)</author>
      <comments>http://www.agilification.com/post/Lazy-Init-VS-Constructor-Init.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=d7248bd7-99f1-4cd8-b3a7-ed671c29111c</guid>
      <pubDate>Wed, 26 Nov 2008 10:18:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>emilioc</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=d7248bd7-99f1-4cd8-b3a7-ed671c29111c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=d7248bd7-99f1-4cd8-b3a7-ed671c29111c</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Lazy-Init-VS-Constructor-Init.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=d7248bd7-99f1-4cd8-b3a7-ed671c29111c</wfw:commentRss>
    </item>
    <item>
      <title>Dependency Injection for the Compact Framework, Part 2</title>
      <description>&lt;p&gt;
Last week I wrote about my need for &lt;a href="http://www.agilification.com/post/Dependency-Injection-for-the-Compact-Framework.aspx"&gt;Dependency Injection for the Compact Framework&lt;/a&gt;.&amp;nbsp; Many DI frameworks do not support the Compact Framework, so I identified four options:
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Don&amp;#39;t use IoC and dependency injection&lt;/li&gt;
	&lt;li&gt;Continue to &amp;quot;roll-my-own&amp;quot; dependency injection tool&lt;/li&gt;
	&lt;li&gt;Pray that &lt;a href="http://codebetter.com/blogs/jeremy.miller/" title="Jeremy Miller"&gt;Jeremy Miller&lt;/a&gt; ports StructureMap to the Compact Framework&lt;/li&gt;
	&lt;li&gt;Use Ninject&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Well, there is a fifth option that I hadn&amp;#39;t considered: finding an open source project that does what I need.&amp;nbsp; &lt;a href="http://gschuager.blogspot.com/" class="url fn"&gt;Germ&amp;aacute;n Schuager&lt;/a&gt; pointed me to a project he created on Google Code called &lt;a href="http://code.google.com/p/compactcontainer/"&gt;Compact Container&lt;/a&gt;. It is lightweight, clean and simple.&amp;nbsp; After reviewing Germ&amp;aacute;n&amp;#39;s code, I found that it would support most of my needs, short of a couple of nice-to-have features.
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Marking the injectable constructor with an attribute&lt;/li&gt;
	&lt;li&gt;Setting a default object life cycle for a container (rather than having to pass in the life cycle every time a type is registered with the container)&lt;/li&gt;
	&lt;li&gt;Ability to resolve concrete types that have not yet been registered with the container &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
In the spirit of open-source, I created the necessary code and sent it back to Germ&amp;aacute;n for inclusion in the project.&amp;nbsp; As of this posting, he&amp;#39;s included the constructor attribution feature in the source repository, and hopefully he&amp;#39;ll also add the other features as well.
&lt;/p&gt;
&lt;p&gt;
My struggle with Ninject came down to the fact that it operates in a fashion quite distinct from other DI frameworks. I must admit that the Ninject DSL is quite appealing, but certain things that I&amp;#39;m comfortable doing with StructureMap are difficult if not impossible to attain using Ninject without creating a bunch of direct dependencies on the Ninject assemblies.&amp;nbsp; So it looks like &lt;a href="http://code.google.com/p/compactcontainer/"&gt;Compact Container&lt;/a&gt; is the winner at this point.&amp;nbsp; We&amp;#39;ll see if it sticks.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/B_sKQMDnhAkewQdPVfZ7WnrWjnw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B_sKQMDnhAkewQdPVfZ7WnrWjnw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/B_sKQMDnhAkewQdPVfZ7WnrWjnw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B_sKQMDnhAkewQdPVfZ7WnrWjnw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Dependency-Injection-for-the-Compact-Framework-Part-2.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/Dependency-Injection-for-the-Compact-Framework-Part-2.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=19f38083-419c-408e-9676-2c99d83df3c2</guid>
      <pubDate>Fri, 21 Nov 2008 09:18:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=19f38083-419c-408e-9676-2c99d83df3c2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=19f38083-419c-408e-9676-2c99d83df3c2</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Dependency-Injection-for-the-Compact-Framework-Part-2.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=19f38083-419c-408e-9676-2c99d83df3c2</wfw:commentRss>
    </item>
    <item>
      <title>T4 Templates For The .NET Compact Framework</title>
      <description>&lt;p&gt;
I first learned about the Text Template Transformation Toolkit (T4) about a month ago when reading some blog posts from &lt;a href="http://blog.wekeroad.com/blog/make-visual-studio-generate-your-repository/" title="Rob Conery"&gt;Rob Conery&lt;/a&gt; and &lt;a href="http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx" title="Scott Hanselman"&gt;Scott Hanselman&lt;/a&gt;. T4 is a code generation tool that comes with Visual Studio 2008 (there&amp;#39;s also an add-in for VS 2005).&amp;nbsp; Rob likes T4 so much, that he&amp;#39;s rewriting his &lt;a href="http://subsonicproject.com/" title="SubSonic"&gt;SubSonic&lt;/a&gt; data access layer builder to use T4 template generation (&lt;a href="http://blog.wekeroad.com/blog/subsonic-3-0-preview-2/" title="SubSonic 3.0 Preview 2"&gt;check out his second preview of SubSonic 3.0&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
As I wrote about a few days ago (&lt;a href="http://www.agilification.com/post/Dependency-Injection-for-the-Compact-Framework.aspx" title="Dependency Injection for the Compact Framework"&gt;Dependency Injection for the Compact Framework&lt;/a&gt;), I&amp;#39;ve recently returned to the world of building Smart Device applications using the .NET Compact Framework.&amp;nbsp; I&amp;#39;ve been working on building the basic foundations of the domain model and I started running into some situations where code generation could make my team more productive.&amp;nbsp; So, I tried adding a T4 template to my Compact Framework project (a file with a &amp;quot;.tt&amp;quot; file extension) and *boom*!&amp;nbsp; Three errors crop up:
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Compiling transformation: The type or namespace name &amp;#39;CompilerError&amp;#39; does not exist in the namespace &amp;#39;System.CodeDom.Compiler&amp;#39; (are you missing an assembly reference?)&lt;/li&gt;
	&lt;li&gt;Compiling transformation: The type &amp;#39;System.CodeDom.Compiler.CompilerErrorCollection&amp;#39; is defined in an assembly that is not referenced. You must add a reference to assembly &amp;#39;System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;#39;.&lt;/li&gt;
	&lt;li&gt;Compiling transformation: &amp;#39;System.CodeDom.Compiler.CompilerErrorCollection&amp;#39; does not contain a definition for &amp;#39;Add&amp;#39;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Why doesn&amp;#39;t this work?&amp;nbsp; Because Visual Studio is attempting to use the Compact Framework assemblies in order to process the T4 template file.&amp;nbsp; But the Compact Framework assemblies don&amp;#39;t include the System.CodeDom namespace.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
I don&amp;#39;t think Microsoft is ever going to add the CodeDom namespace to the Compact Framework.&amp;nbsp; But there is a way to get T4 templates working in a Compact Framework project.&amp;nbsp; You basically start off by creating two separate projects, one targeting the full .NET Framework, and another targeting the Compact Framework.&amp;nbsp; Then, combine these projects into the same folder so they can share files between them.&amp;nbsp; Finally, you can add .tt files to the full .NET Framework project and include the generated .cs files in your Compact Framework project.&amp;nbsp; Voila!&amp;nbsp; Templates for the Compact Framework.
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;ve created a quick-start document to walk you through the process: &lt;a href="http://www.agilification.com/file.axd?file=2008%2f11%2fT4_Templates_For_NetCF.pdf" title="T4 Templates for the .NET Compact Framework"&gt;T4 Templates for the .NET Compact Framework&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Happy code generating!
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cdNGAliUoM6VfCl0nygFBekB7tc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cdNGAliUoM6VfCl0nygFBekB7tc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cdNGAliUoM6VfCl0nygFBekB7tc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cdNGAliUoM6VfCl0nygFBekB7tc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/T4-Templates-For-The-NET-Compact-Framework.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/T4-Templates-For-The-NET-Compact-Framework.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=82d92570-9cde-4716-a25c-38614089168c</guid>
      <pubDate>Fri, 14 Nov 2008 07:48:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=82d92570-9cde-4716-a25c-38614089168c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=82d92570-9cde-4716-a25c-38614089168c</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/T4-Templates-For-The-NET-Compact-Framework.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=82d92570-9cde-4716-a25c-38614089168c</wfw:commentRss>
    </item>
    <item>
      <title>Strongly Typed Model Object Without Code-Behind (Sort of)</title>
      <description>&lt;p&gt;
Are you using ASP.NET MVC?&amp;nbsp; Do you want a strongly typed
ViewData.Model object without a code-behind file?&amp;nbsp; Tough, who said life
was fair?&amp;nbsp; I am just kidding ;p.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
After reading &lt;a id="k3kc" href="http://www.lostechies.com/blogs/chad_myers/archive/2008/11/08/look-ma-no-code-behind.aspx" target="_blank" title="Look Ma, No Code-Behind!"&gt;Look Ma, No Code-Behind!&lt;/a&gt;
by Chad Myers, I was inspired to share my approach.&amp;nbsp; In my approach, I
swap a code-behind file for an ordinary class file.&amp;nbsp; I create a file
per view folder named _ViewDataModelType.cs.&amp;nbsp; The file name is optional
and can be changed per view folder.&amp;nbsp; I like to use the same name over
and over because I am lazy. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.agilification.com/image.axd?picture=2008%2f11%2ffigure1.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;h3&gt;Setup&lt;/h3&gt;
&lt;p&gt;
In this file I declare all the ViewPage and
ViewUserControl subclasses needed for this particular view folder.&amp;nbsp; Use
your namespaces wisely because if you&amp;#39;re not careful you can run into
naming collisions.&amp;nbsp; Below is an example of what one these classes might
look like.
&lt;/p&gt;
&lt;code class="csharp"&gt;
namespace NoCodeBehind.Views.Employee {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public class EmployeeIndex : ViewPage&amp;lt;IEnumerable&amp;lt;Employee&amp;gt;&amp;gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public class EmployeeShow : ViewPage&amp;lt;EmployeeViewModel&amp;gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public class EmployeePartial : ViewUserControl&amp;lt;EmployeePartialViewModel&amp;gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;
&lt;h3&gt;Usage&lt;/h3&gt;
&lt;p&gt;
All you need now is to wire up your .aspx page.&amp;nbsp; The &lt;strong&gt;Inherits&lt;/strong&gt; attribute is the important piece.&amp;nbsp; Below is an example.
&lt;/p&gt;
&lt;code class="csharp"&gt;
&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; Inherits=&amp;quot;NoCodeBehind.Views.Employee.EmployeeIndex&amp;quot; %&amp;gt;
&lt;/code&gt;
&lt;p&gt;
After that, you are done.&amp;nbsp; You now have a strongly typed model object at your finger tips.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.agilification.com/image.axd?picture=2008%2f11%2ffigure2.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;
Using a code-behind file for every view page
is a non-option for me.&amp;nbsp; This is a simple work around and helps keep my
project slim around the waistline.&amp;nbsp; I am definitely open to other
solutions to this issue.&amp;nbsp; I hope this helps if you are wrestling with
the same issue. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DHyzal0ubkITyN-Bq_YenrmP2No/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DHyzal0ubkITyN-Bq_YenrmP2No/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DHyzal0ubkITyN-Bq_YenrmP2No/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DHyzal0ubkITyN-Bq_YenrmP2No/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Strongly-Typed-Model-Object-Without-Code-Behind-(Sort-of).aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (emilioc)</author>
      <comments>http://www.agilification.com/post/Strongly-Typed-Model-Object-Without-Code-Behind-(Sort-of).aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=319a9eb0-9018-495e-b4e2-7214f11bda7f</guid>
      <pubDate>Thu, 13 Nov 2008 05:21:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>emilioc</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=319a9eb0-9018-495e-b4e2-7214f11bda7f</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=319a9eb0-9018-495e-b4e2-7214f11bda7f</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Strongly-Typed-Model-Object-Without-Code-Behind-(Sort-of).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=319a9eb0-9018-495e-b4e2-7214f11bda7f</wfw:commentRss>
    </item>
    <item>
      <title>jQuery and The Amazing Selectors Part 1</title>
      <description>&lt;p&gt;
If you are looking around for a JavaScript library or looking to switch libraries, you should give &lt;a href="http://jquery.com/" title="jQuery"&gt;jQuery&lt;/a&gt; a sample.&amp;nbsp; If you have been doing web
development for any period of time, then I am sure you&amp;#39;ve heard of it.&amp;nbsp; From my experience, jQuery is an incredibly easy library to learn.&amp;nbsp;&amp;nbsp; I made the decision to
learn jQuery several months ago and it has been a godsend.&amp;nbsp; It has
dramatically improved my relationship with JavaScript; a strained
relationship, at best, no thanks to IE.&amp;nbsp; But those days are history
along with the days of getElementById.&amp;nbsp; This brings me to the topic of
this post.&amp;nbsp; I wanted to take a little time to talk about jQuery
selectors and showcase a few of my favs.&amp;nbsp; When using jQuery, IDs are
optional.&amp;nbsp; You can select elements using class name, DOM position,
attribute value and IDs (if you feel like being all precise and stuff).
&lt;br /&gt;
&lt;br /&gt;
Keep in my mind this is not an exhaustive list of every possible
selector.&amp;nbsp; It is, however, a list of my most used (read favorite)
selectors.
&lt;/p&gt;
&lt;h3&gt;1.&amp;nbsp; var value = $(&amp;#39;.fields:first input:hidden&amp;#39;).val();&lt;/h3&gt;
&lt;p&gt;
Selector number 1 will find the first instance of the &lt;strong&gt;fields&lt;/strong&gt; class (&lt;em&gt;.fields:first&lt;/em&gt;) and then select all hidden inputs (&lt;em&gt;input:hidden&lt;/em&gt;)
found within the containing tag.&amp;nbsp; Since there is only one hidden input
that matches the selection, only one will be returned.&amp;nbsp; Making the
retrieval of the hidden inputs value a snap.
&lt;/p&gt;
&lt;p&gt;
&lt;code class="html"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div class=&amp;quot;fields&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;textBox1&amp;quot; name=&amp;quot;textBox1&amp;quot;&amp;nbsp; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;textBox2&amp;quot; name=&amp;quot;textBox2&amp;quot;&amp;nbsp; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;hidden&amp;quot; id=&amp;quot;Hidden1&amp;quot; name=&amp;quot;Hidden1&amp;quot;&amp;nbsp; value=&amp;quot;Hello&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div class=&amp;quot;fields&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;textBox3&amp;quot; name=&amp;quot;textBox3&amp;quot;&amp;nbsp; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;textBox4&amp;quot; name=&amp;quot;textBox4&amp;quot;&amp;nbsp; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;hidden&amp;quot; id=&amp;quot;Hidden2&amp;quot; name=&amp;quot;Hidden2&amp;quot;&amp;nbsp; value=&amp;quot;Goodbye&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt; 
&lt;/code&gt;
&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;2. $(&amp;#39;.fields input, .fields select, .fields .someClass&amp;#39;).click(function() { alert(&amp;#39;hello&amp;#39;) });&lt;/h3&gt;
&lt;p&gt;
Numero dos on the list is the multi-selector.&amp;nbsp; I am not sure if that is
the official name but that&amp;#39;s what I like to call it.&amp;nbsp; Using this
selector, you combine multiple selectors into one separating each
selector with a comma.&amp;nbsp; This will allow you to manipulate the matches
of three selections as one.&amp;nbsp; It can be very useful if you need to
assign an event to multiple elements of different types.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;code class="html"&gt;
&amp;lt;div class=&amp;quot;fields&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;textBox1&amp;quot; name=&amp;quot;textBox1&amp;quot;&amp;nbsp; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;select&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;option&amp;gt;opt 1&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;option&amp;gt;opt 2&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;option&amp;gt;opt 3&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;textBox2&amp;quot; name=&amp;quot;textBox2&amp;quot; class=&amp;quot;someClass&amp;quot;&amp;nbsp; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;
&lt;/p&gt;
&lt;h3&gt;3. $(this).nextAll(&amp;#39;ul&amp;#39;).toggle();&lt;/h3&gt;
&lt;p&gt;
This selector is kind of a stretch.&amp;nbsp; Inside an event you can pass in the &lt;strong&gt;this &lt;/strong&gt;keyword
as a selector and get instance access to the element that fired the
event.&amp;nbsp; If you need to find some related DOM elements you need a change
in strategy.&amp;nbsp; The &lt;strong&gt;this &lt;/strong&gt;keyword can&amp;#39;t be concatenated with
string selectors.&amp;nbsp; One possibility, is to grab the ID attribute of the
element that fired the event (&lt;em&gt;$(this).attr(&amp;#39;id&amp;#39;)&lt;/em&gt;).&amp;nbsp; But what if
your element doesn&amp;#39;t have an ID?&amp;nbsp; That&amp;#39;s where jQuery&amp;#39;s traversing
methods make an entrance.&amp;nbsp; The &lt;strong&gt;nextAll()&lt;/strong&gt; method will get all sibling
objects that appear after the currently selected object.&amp;nbsp; You can
optionally pass selectors in to the the &lt;strong&gt;nextAll()&lt;/strong&gt; method ...
&lt;/p&gt;
&lt;p&gt;
&lt;code class="html"&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h3 class=&amp;quot;toggleButton&amp;quot;&amp;gt;Text&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;text&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;text&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;text&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;text&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; 
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;code class="js"&gt;
&amp;nbsp;$(&amp;#39;.toggleButton&amp;#39;).click(function(event) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(this).nextAll(&amp;#39;ul&amp;#39;).toggle();&lt;br /&gt;
}); 
&lt;/code&gt;
&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;br /&gt;
&lt;/h3&gt;
&lt;p&gt;
&lt;strong&gt;
&lt;/strong&gt;With three short examples I am only scratching the surface of
jQuery&amp;#39;s amazing selectors.&amp;nbsp; I hope this post makes you hungry for more
and at the very least, gets the uninterested interested in jQuery.&amp;nbsp; I
will be back with more soon!
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1uQJf7ereyDSgE7vnKkpDT35JT4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1uQJf7ereyDSgE7vnKkpDT35JT4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1uQJf7ereyDSgE7vnKkpDT35JT4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1uQJf7ereyDSgE7vnKkpDT35JT4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/jQuery-and-The-Amazing-Selectors.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (emilioc)</author>
      <comments>http://www.agilification.com/post/jQuery-and-The-Amazing-Selectors.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=c5003604-bbfa-4295-bd46-7720f4df734c</guid>
      <pubDate>Wed, 12 Nov 2008 06:54:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>emilioc</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=c5003604-bbfa-4295-bd46-7720f4df734c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=c5003604-bbfa-4295-bd46-7720f4df734c</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/jQuery-and-The-Amazing-Selectors.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=c5003604-bbfa-4295-bd46-7720f4df734c</wfw:commentRss>
    </item>
    <item>
      <title>Dependency Injection for the Compact Framework</title>
      <description>&lt;p&gt;
I&amp;#39;ve spent the last 2 years developing WinForms and &lt;a href="http://www.asp.net/mvc/" title="ASP.NET MVC"&gt;ASP.Net MVC&lt;/a&gt; applications, so it&amp;#39;s been a while since I&amp;#39;ve worked on a &lt;a href="http://en.wikipedia.org/wiki/.NET_Compact_Framework" title=".NET Compact Framework"&gt;.NET Compact Framework&lt;/a&gt; project.&amp;nbsp; In case you haven&amp;#39;t heard of it, the .NET Compact Framework is a compact sub-set of the .NET framework that can run on devices with limited resources (like phones, blackberries, barcode scanners, etc.).&amp;nbsp; As I began working on the project, I decided up front that I would use the same SOLID principles I use on any other application.&amp;nbsp; I almost hit a roadblock, however, when it came to choosing a Dependency Injection framework.
&lt;/p&gt;
&lt;p&gt;
I began with just a simple roll-your-own dependency resolver.&amp;nbsp; But this solution doesn&amp;#39;t work well once you need to inject multiple layers of dependencies and build up your object hierarchies in a more complex fashion.&amp;nbsp; So I did some research into which (if any) DI frameworks support the Compact Framework.&amp;nbsp; It turns out that only one DI framework supports the Compact Framework: &lt;a href="http://ninject.org" title="Ninject"&gt;Ninject&lt;/a&gt;.&amp;nbsp; Typically &lt;a href="http://structuremap.sourceforge.net/Default.htm" title="StructureMap"&gt;StructureMap &lt;/a&gt;has been my DI container of choice, and recently I&amp;#39;ve spent some time evaluating the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=6A9E363C-8E0A-48D3-BBE4-C2F36423E2DF&amp;amp;displaylang=en" title="Unity"&gt;Unity container from Microsoft&lt;/a&gt;, but neither of these support the Compact Framework.&amp;nbsp; So I guess I&amp;#39;ve got a limited number of choices:
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Don&amp;#39;t use IoC and dependency injection&lt;/li&gt;
	&lt;li&gt;Continue to &amp;quot;roll-my-own&amp;quot; dependency injection tool&lt;/li&gt;
	&lt;li&gt;Pray that &lt;a href="http://codebetter.com/blogs/jeremy.miller/" title="Jeremy Miller"&gt;Jeremy Miller&lt;/a&gt; ports StructureMap to the Compact Framework&lt;/li&gt;
	&lt;li&gt;Use Ninject&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;p&gt;
Option 1 is not even a real option.&amp;nbsp; There are too many benefits to be gained from loose coupling and depending on abstractions rather than details.&amp;nbsp; Option 2 seemed feasible at first, until I needed more complicated object hierarchies.&amp;nbsp; I can&amp;#39;t hold my breath and wait on something that may never happen, so Option 3 isn&amp;#39;t a real option either.&amp;nbsp; So, it looks like I&amp;#39;m going to be heading to Ninja school!&amp;nbsp; I&amp;#39;ll let you know how it goes and what I discover along the way.
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tPkuYzoVYnzFy9CoujF7sEdej_o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tPkuYzoVYnzFy9CoujF7sEdej_o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tPkuYzoVYnzFy9CoujF7sEdej_o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tPkuYzoVYnzFy9CoujF7sEdej_o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Dependency-Injection-for-the-Compact-Framework.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/Dependency-Injection-for-the-Compact-Framework.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=0ae6a9fe-1dae-4f70-9bd2-8a35ee03d613</guid>
      <pubDate>Tue, 11 Nov 2008 17:03:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=0ae6a9fe-1dae-4f70-9bd2-8a35ee03d613</pingback:target>
      <slash:comments>7</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=0ae6a9fe-1dae-4f70-9bd2-8a35ee03d613</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Dependency-Injection-for-the-Compact-Framework.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=0ae6a9fe-1dae-4f70-9bd2-8a35ee03d613</wfw:commentRss>
    </item>
    <item>
      <title>Stay Curious</title>
      <description>&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;Curiosity killed the cat&lt;/em&gt; - Eugene O&amp;#39;Neill
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
What is true for the cat is completely untrue for the agile team member.&amp;nbsp; The best agile teams place a high value on learning.&amp;nbsp; Curiosity is the catalyst for knowledge acquisition and creativity.&amp;nbsp; It helps us remain dispassionate about personal preferences and can unlock our potential for divergent thinking. Often it seems that curiosity is reserved for R&amp;amp;D or design processes, but the best way to maximize its potential is to stay curious throughout the entire product development lifecycle. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Curiosity when &lt;em&gt;planning&lt;/em&gt;&lt;/strong&gt;.&amp;nbsp; This is a vital element in a design process.&amp;nbsp; We need to stay curious about potential features and requirements.&amp;nbsp; We need to stay curious about resource allocation possibilities.&amp;nbsp; We need to stay curious about platforms, tools and technologies. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Curiosity about &lt;em&gt;processes&lt;/em&gt;&lt;/strong&gt;.&amp;nbsp; There is no perfect process, but there are processes that fit better for a particular context or situation. We should not simply assume that what worked before will work now.&amp;nbsp; We should not simply assume that what is new is better.&amp;nbsp; We should continually mold and shape our processes for maximum effectiveness.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Curiosity about &lt;em&gt;personalities&lt;/em&gt;&lt;/strong&gt;.&amp;nbsp; Our curiosity can be applied beyond the particular task at hand by extending it to the consideration of organizational culture, people, relationships, interactions and influence.&amp;nbsp; This can enable us to work better together and to maximize the potential of our teams.&amp;nbsp; This can also help us diffuse conflict by minimizing presumptuousness and assumption, and instead choosing to remain curious about why other team members are acting in a particular way. &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Curiosity when &lt;em&gt;pondering&lt;/em&gt;&lt;/strong&gt;.&amp;nbsp; Retrospection is reflecting on what worked, what didn&amp;#39;t work and what could work better in the future.&amp;nbsp; Curiosity helps us to look deeply into our processes, our planning efforts, and our personalities to learn the lessons that will help us hone our skills and achieve better results as we move forward. 
&lt;/p&gt;
&lt;p&gt;
So if your goal is to effectively function as an agile team, reflect often, ask a lot of questions, and seek to learn from every possible facet of every possible situation.&amp;nbsp; Place a high value on staying curious. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QJbVEfux1UVWBCf7dQ6mNKMG7DA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QJbVEfux1UVWBCf7dQ6mNKMG7DA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QJbVEfux1UVWBCf7dQ6mNKMG7DA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QJbVEfux1UVWBCf7dQ6mNKMG7DA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Stay-Curious.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/Stay-Curious.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=f128b5ad-0077-4c61-aa6b-a1d663fbeb25</guid>
      <pubDate>Mon, 03 Nov 2008 02:05:00 -1400</pubDate>
      <category>Agile Project Management</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=f128b5ad-0077-4c61-aa6b-a1d663fbeb25</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=f128b5ad-0077-4c61-aa6b-a1d663fbeb25</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Stay-Curious.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=f128b5ad-0077-4c61-aa6b-a1d663fbeb25</wfw:commentRss>
    </item>
    <item>
      <title>Are You Agile?</title>
      <description>How do you know if you are an agile software developer?&amp;nbsp; How do you know if your team is agile?&amp;nbsp; It is easy to say you are.&amp;nbsp; It is easy to intend to be.&amp;nbsp; It is easy to lose agility if not continually maintained.&amp;nbsp; On long projects focus shifts often.&amp;nbsp; Success is a moving target.&amp;nbsp; Agile practices have to be retuned and reapplied periodically.&amp;nbsp; That&amp;rsquo;s how it was intended to work.&amp;nbsp; That&amp;rsquo;s what makes it beautiful.&amp;nbsp; It&amp;rsquo;s a solution to be implemented later. &amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://agilemanifesto.org/" target="_blank" title="Agile Manifesto"&gt;Agile Manifesto&lt;/a&gt; is a guideline for writing better software.&amp;nbsp; You could say it is a loosely coupled collection of best practices.&amp;nbsp; The Agile Manifesto does not contain a significant amount of detail and I believe that&amp;rsquo;s intentional.&amp;nbsp; It&amp;rsquo;s composed of a dozen flexible recommendations.&amp;nbsp; It&amp;rsquo;s not a script or a rigid doctrine of rules.&amp;nbsp; There is room for interpretation.&amp;nbsp; This freedom allows for easy adoption.&amp;nbsp;&amp;nbsp; It also allows for radical variations.&amp;nbsp; Care should be taken not to let freedom become an evil mutation of agile practices.&amp;nbsp; If in doubt or debate, remember, &lt;em&gt;&amp;ldquo;Working software is the primary measure of progress.&amp;rdquo; &lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
It&amp;rsquo;s easy for teams to allow existing bad habits to remain when moving towards a more agile environment.&amp;nbsp; Understandably, old habits die hard.&amp;nbsp; Agile teams should actively identify their bad habits and discuss ways to eliminate them.&amp;nbsp; Allowing bad habits to evolve and masquerade as an agile practice is an evil mutation.&amp;nbsp; To avoid this, &lt;strong&gt;a team should continually improve their process&lt;/strong&gt;.&amp;nbsp; Review the&lt;a href="http://agilemanifesto.org/principles.html" target="_blank" title="Twelve Principles of Agile Software"&gt; Twelve Principles of Agile Software&lt;/a&gt; as a team.&amp;nbsp; Eliminate rigid and strict processes.&amp;nbsp; Remove unnecessary steps in processes.&amp;nbsp; &lt;strong&gt;Find new ways to improve efficiency&lt;/strong&gt;.&amp;nbsp; In short, tailor your process to best serve the team and your users.&amp;nbsp; Determining how best to implement the Agile Manifesto is up to you.&lt;br /&gt;
&lt;br /&gt;
The Agile Manifesto has a lot to offer software developers.&amp;nbsp; Being agile in your profession is not limited to the software industry.&amp;nbsp; Many teams can learn lessons from the guidelines put forth.&amp;nbsp; Just as the software industry gained inspiration from a &lt;a href="http://www.amazon.com/Pattern-Language-Buildings-Construction-Environmental/dp/0195019199/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1225165736&amp;amp;sr=8-1" target="_blank" title="A Pattern Language"&gt;patterns book&lt;/a&gt; written on architecture.&amp;nbsp; The Agile Manifesto makes good sense in the work place.&amp;nbsp; So, if you strive to be agile, you should ask yourself often; self, are you agile?&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NAb61BZc6t6CSo9srSe2Kyisevo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NAb61BZc6t6CSo9srSe2Kyisevo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NAb61BZc6t6CSo9srSe2Kyisevo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NAb61BZc6t6CSo9srSe2Kyisevo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Are-You-Agile.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (emilioc)</author>
      <comments>http://www.agilification.com/post/Are-You-Agile.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=125e3ba4-d6d2-4bba-af32-a091f0178811</guid>
      <pubDate>Mon, 27 Oct 2008 14:35:00 -1400</pubDate>
      <category>Agile Project Management</category>
      <dc:publisher>emilioc</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=125e3ba4-d6d2-4bba-af32-a091f0178811</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=125e3ba4-d6d2-4bba-af32-a091f0178811</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Are-You-Agile.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=125e3ba4-d6d2-4bba-af32-a091f0178811</wfw:commentRss>
    </item>
    <item>
      <title>Do the Quickest Thing That Works</title>
      <description>&lt;p&gt;
The title of this entry is a standard mantra for agile programming efforts.&amp;nbsp; And sometimes agile principles apply in other arenas besides software development.&amp;nbsp; For example, my wife and I came up with a great idea for carving pumpkins this Halloween.&amp;nbsp; In years past, I carved pumpkins like just about everyone else: with a large, foreboding knife that awakens fearful images of horrific scenes when wielded.&amp;nbsp; Well no more, because sometimes the quickest thing that works is also the safest thing.
&lt;/p&gt;
&lt;p&gt;
First, set the butcher&amp;#39;s machete aside.&amp;nbsp; Now trace a face on the pumpkin with a pencil.&amp;nbsp; Next, grab a drill (cordless is handy, though any drill will do).&amp;nbsp; Yes, I said a drill.&amp;nbsp; Now make holes in the pumpkin using the drill, following the outline you drew with the pencil.&amp;nbsp; The end result looks really cool and was much easier than using a knife.
&lt;/p&gt;
&lt;p&gt;
So, I guess the lesson is that sometimes an unconventional approach pays off.&amp;nbsp; If you try drilling your pumpkins this year, let me know how it goes. 
&lt;/p&gt;
&lt;img src="http://www.agilification.com/image.axd?picture=2008%2f10%2fPA250065.JPG" alt="" /&gt;
&lt;img src="http://www.agilification.com/image.axd?picture=2008%2f10%2fPA250067.JPG" alt="" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QDKBi53fvPphw9LNR7qKDiJ5l38/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QDKBi53fvPphw9LNR7qKDiJ5l38/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QDKBi53fvPphw9LNR7qKDiJ5l38/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QDKBi53fvPphw9LNR7qKDiJ5l38/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Do-the-Quickest-Thing-That-Works.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/Do-the-Quickest-Thing-That-Works.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=8f863ef0-b995-46c6-985c-c1d22074dc82</guid>
      <pubDate>Sun, 26 Oct 2008 15:42:00 -1400</pubDate>
      <category>Agile Project Management</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=8f863ef0-b995-46c6-985c-c1d22074dc82</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=8f863ef0-b995-46c6-985c-c1d22074dc82</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Do-the-Quickest-Thing-That-Works.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=8f863ef0-b995-46c6-985c-c1d22074dc82</wfw:commentRss>
    </item>
    <item>
      <title>Common Service Locator</title>
      <description>&lt;p&gt;
Debates around inversion of control containers (IoC) have a tendency to turn for the worst very quickly.&amp;nbsp; While there are common goals of loose coupling, improved testability and greater cohesion, often it seems that a lot of effort is spent debating about choices regarding which IoC container to use.&amp;nbsp; The debates grow especially intense when a framework is created with a dependency on a particular container.
&lt;/p&gt;
&lt;p&gt;
A couple of months ago, &lt;a href="http://codebetter.com/blogs/jeremy.miller/"&gt;Jeremy Miller&lt;/a&gt; suggested the creation of a common library so that developers could allow consumers of their frameworks to plug in the IoC container of their choice (&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/08/16/it-s-time-for-ioc-container-detente.aspx"&gt;It&amp;#39;s time for IoC Container Detente&lt;/a&gt;). 
&lt;/p&gt;
&lt;p&gt;
After a few short weeks, the &lt;a href="http://www.codeplex.com/CommonServiceLocator"&gt;Common Service Locator&lt;/a&gt; project was born.&amp;nbsp; This project provides a simple adapter and static gateway for registering the IoC container of your choice into a framework that leverages the Common Service Locator.&amp;nbsp; I created a &lt;a href="http://www.codeplex.com/CommonServiceLocator/Wiki/View.aspx?title=StructureMap%20Adapter&amp;amp;referringTitle=Home "&gt;StructureMap Adapter&lt;/a&gt; for this project that you can &lt;a href="http://www.codeplex.com/CommonServiceLocator/Wiki/View.aspx?title=StructureMap%20Adapter&amp;amp;referringTitle=Home "&gt;download on CodePlex&lt;/a&gt;.&amp;nbsp; For simple, in-house applications over which you have complete control, there may not be a need for such an adaptation.&amp;nbsp; But there are times when swapping out different container implementations is useful, so it&amp;#39;s nice to know that it&amp;#39;s there when you need it. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uhAG9NBA6SikkNvD432WftewADE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uhAG9NBA6SikkNvD432WftewADE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uhAG9NBA6SikkNvD432WftewADE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uhAG9NBA6SikkNvD432WftewADE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.agilification.com/post/Common-Service-Locator.aspx</link>
      <author>agilification.nospam@nospam.sjvtech.com (jeffd)</author>
      <comments>http://www.agilification.com/post/Common-Service-Locator.aspx#comment</comments>
      <guid>http://www.agilification.com/post.aspx?id=e8142c15-9352-4553-b9cb-47671edb0f63</guid>
      <pubDate>Wed, 22 Oct 2008 15:26:00 -1400</pubDate>
      <category>Software Development</category>
      <dc:publisher>jeffd</dc:publisher>
      <pingback:server>http://www.agilification.com/pingback.axd</pingback:server>
      <pingback:target>http://www.agilification.com/post.aspx?id=e8142c15-9352-4553-b9cb-47671edb0f63</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.agilification.com/trackback.axd?id=e8142c15-9352-4553-b9cb-47671edb0f63</trackback:ping>
      <wfw:comment>http://www.agilification.com/post/Common-Service-Locator.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.agilification.com/syndication.axd?post=e8142c15-9352-4553-b9cb-47671edb0f63</wfw:commentRss>
    </item>
  </channel>
</rss>
