<?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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
   <channel>
      <title>Google-Delicious Mashup</title>
      <description>Pipes Output</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=TAbxuMKj3BGJ7mo_E5PZnA</link>
      <pubDate>Sat, 21 Nov 2009 20:10:20 -0800</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/sharedlinks" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
         <title>Noda Time is born</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/bPMScC-NKYk/noda-time-is-born.aspx</link>
         <author>skeet</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/8594bc2a9865c8fc</guid>
         <pubDate>Fri, 06 Nov 2009 10:02:31 -0800</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/bPMScC-NKYk" height="1" width="1"/&gt;</description><feedburner:origLink>http://feedproxy.google.com/~r/JonSkeetCodingBlog/~3/LTH3ixYfiZQ/noda-time-is-born.aspx</feedburner:origLink></item>
      <item>
         <title>Reading Code: Unity</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/BIWnqOyH1nI/</link>
         <description>&lt;p&gt;I spent a bit of time reading some of the &lt;a rel="nofollow" target="_blank" href="http://www.codeplex.com/unity/"&gt;Unity&lt;/a&gt; code base recently and I decided to try out a variation of Michael Feathers 'Effect Sketching' which my colleague &lt;a rel="nofollow" target="_blank" href="http://intwoplacesatonce.com/"&gt;Dave Cameron&lt;/a&gt; showed me.&lt;/p&gt;
&lt;p&gt;'Effect Sketching' is a technique Feathers describes in '&lt;a rel="nofollow" target="_blank" href="http://www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1256852443&amp;amp;sr=8-1"&gt;Working Effectively With Legacy Code&lt;/a&gt;' and the idea is that we sketch a diagram showing the interactions between the fields and methods in a specific class while browsing through the code.&lt;/p&gt;
&lt;p&gt;Dave suggested doing a similar thing but with methods and classes instead while stepping through the code with the debugger.&lt;/p&gt;
&lt;p&gt;I set up this code to step my way through:&lt;/p&gt; &lt;div&gt;&lt;div&gt;&lt;pre&gt;var container &lt;span style="color:#008000;"&gt;=&lt;/span&gt; &lt;span style="color:#008000;"&gt;new&lt;/span&gt; UnityContainer&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt; container.&lt;span style="color:#0000FF;"&gt;AddNewExtension&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;&lt;/span&gt;Interception&lt;span style="color:#008000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt;
container.&lt;span style="color:#0000FF;"&gt;RegisterType&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;typeof&lt;/span&gt; &lt;span style="color:#000000;"&gt;(&lt;/span&gt;IIDProvider&lt;span style="color:#000000;"&gt;)&lt;/span&gt;, &lt;span style="color:#008000;"&gt;typeof&lt;/span&gt; &lt;span style="color:#000000;"&gt;(&lt;/span&gt;HttpContextIDProvider&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt;
container.&lt;span style="color:#0000FF;"&gt;Configure&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;&lt;/span&gt;Interception&lt;span style="color:#008000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;.&lt;span style="color:#0000FF;"&gt;SetDefaultInterceptorFor&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;typeof&lt;/span&gt; &lt;span style="color:#000000;"&gt;(&lt;/span&gt;GetPaymentBreakdownsService&lt;span style="color:#000000;"&gt;)&lt;/span&gt;, &lt;span style="color:#008000;"&gt;new&lt;/span&gt; VirtualMethodInterceptor&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;object&lt;/span&gt; resolve &lt;span style="color:#008000;"&gt;=&lt;/span&gt; container.&lt;span style="color:#0000FF;"&gt;Resolve&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;typeof&lt;/span&gt; &lt;span style="color:#000000;"&gt;(&lt;/span&gt;GetPaymentBreakdownsService&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;These are some of my observations from this exercise:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I found it was &lt;strong&gt;much easier for me to remember where I was in the call stack&lt;/strong&gt; then normal.
&lt;p&gt;I often get quite engrossed in the individual method calls on objects that I forget where the code actually started before it ended up in the current location. Whenever this happened I was able to refer to my sketch to remind myself of where the code had started from. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Despite having the drawing I still got a bit lost when the &lt;a rel="nofollow" target="_blank" href="http://unity.codeplex.com/sourcecontrol/changeset/view/38085?projectName=unity#616462"&gt;PolicyInjectionBehaviourDescriptor&lt;/a&gt; made a call back to the container's Resolve method which meant that the code went through the same path that I'd just followed: &lt;div&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;32
33
34
35
36
37
38
&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; IInterceptionBehavior GetInterceptionBehavior&lt;span style="color:#000000;"&gt;(&lt;/span&gt; IInterceptor interceptor, Type interceptedType, Type implementationType, IUnityContainer container&lt;span style="color:#000000;"&gt;)&lt;/span&gt; &lt;span style="color:#000000;"&gt;{&lt;/span&gt; InjectionPolicy&lt;span style="color:#000000;"&gt;[&lt;/span&gt;&lt;span style="color:#000000;"&gt;]&lt;/span&gt; policies &lt;span style="color:#008000;"&gt;=&lt;/span&gt; container.&lt;span style="color:#0000FF;"&gt;Resolve&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;&lt;/span&gt;InjectionPolicy&lt;span style="color:#000000;"&gt;[&lt;/span&gt;&lt;span style="color:#000000;"&gt;]&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt; &lt;p&gt;I was getting really confused watching various different injection policies being resolved instead of the type I was trying to resolve!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;I've previously tried drawing diagrams which just contained the classes in a code base but I've found that including the methods that connect them makes it easier for me to understand what's going on.
&lt;p&gt;I've been drawing these diagrams out by hand but I thought I'd translate some of it into dot notation so that I could create a version using &lt;a rel="nofollow" target="_blank" href="http://www.graphviz.org/"&gt;graphviz&lt;/a&gt; to show on here.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.markhneedham.com/blog/wp-content/uploads/2009/11/unity.png" alt="unity.png" border="0" width="653" height="613"&gt;&lt;/p&gt;
&lt;p&gt;The nodes in orange represent classes and the dotted line represents where an event was fired.
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;I realised that I still need to spend more time reading code so that I know &lt;strong&gt;when to dive into an object and when the details are probably not important&lt;/strong&gt;. At the moment I'm too prone to getting distracted by wanting to see how a specific method works instead of looking at those details later on when I actually need to know. &lt;/li&gt;
&lt;li&gt;I felt as I was reading the code that in a lot of places the &lt;a rel="nofollow" target="_blank" href="http://www.markhneedham.com/blog/2009/01/02/f-option-types/"&gt;option type&lt;/a&gt; from functional programming would have come in quite useful. There is often code similar to this bit from LifeTimeStrategy: &lt;div&gt;&lt;div&gt;&lt;pre&gt;object existing = lifetimePolicy.GetValue()
if (existing != null)
{ context.Existing = existing context.BuildComplete = true
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Instead of existing returning a null it could return 'None' to indicate it hasn't been resolved yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;I've read about the '&lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx"&gt;yield&lt;/a&gt;' construct before but I've never seen a need to use it yet in any code I've written so it was interesting to see it being used quite frequently inside &lt;a rel="nofollow" target="_blank" href="http://unity.codeplex.com/sourcecontrol/changeset/view/38085?projectName=unity#616459"&gt;PolicySet&lt;/a&gt;: &lt;div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; IEnumerable&lt;span style="color:#008000;"&gt;&amp;lt;&lt;/span&gt;InjectionPolicy&lt;span style="color:#008000;"&gt;&amp;gt;&lt;/span&gt; GetPoliciesFor&lt;span style="color:#000000;"&gt;(&lt;/span&gt;MethodImplementationInfo member&lt;span style="color:#000000;"&gt;)&lt;/span&gt;
&lt;span style="color:#000000;"&gt;{&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;foreach&lt;/span&gt; &lt;span style="color:#000000;"&gt;(&lt;/span&gt;InjectionPolicy policy &lt;span style="color:#0600FF;"&gt;in&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt; &lt;span style="color:#000000;"&gt;{&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;if&lt;/span&gt; &lt;span style="color:#000000;"&gt;(&lt;/span&gt;policy.&lt;span style="color:#0000FF;"&gt;Matches&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;member&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt; &lt;span style="color:#000000;"&gt;{&lt;/span&gt; yield &lt;span style="color:#0600FF;"&gt;return&lt;/span&gt; policy&lt;span style="color:#008000;"&gt;;&lt;/span&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt;
&lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;From my understanding of this construct it seems like it acts in a similar way to a stream i.e. it's only evaluated when it's actually needed. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;In the '&lt;a rel="nofollow" target="_blank" href="http://www.amazon.co.uk/Fundamentals-Object-oriented-Design-Object-Technology/dp/020169946X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1257261364&amp;amp;sr=8-1"&gt;Fundamentals of Object Oriented Design in Uml&lt;/a&gt;' Meilir Page Jones suggests that we might want to avoid replicated behaviour in our public APIs since it leads to greater complexity.
&lt;p&gt;This would therefore seem to suggest that having overloads of methods on an object is something to be avoided. Interestingly in this code base the overloads for 'UnityContainer' are actually defined as extension methods which then delegate back to 'UnityContainer' and pass in default values for unspecified parameters. &lt;/p&gt;
&lt;p&gt;This seems like quite a neat way of getting around the problem since we keep the API clean while also providing users of the code an easy way to do so.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the subject of reading code I recently came across an &lt;a rel="nofollow" target="_blank" href="http://designbygravity.wordpress.com/2009/10/23/how-to-read-other-peoples-code-and-why/"&gt;interesting post by designbygravity which describes some approaches for reading code more effectively&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In particular I really liked the section about not hating the code :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
You can get sucked into hating the code, merely because it is not yours. Software people tend to be equipped with ample egos, and other people’s code can offend. But realize, their working code is better than your imagined code, because their working code exists right now. So put your ego aside and learn the code in front of you.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;It's so easy to drift into this mindset but it's rarely helpful so if we can stop ourselves it's almost certainly beneficial.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/MarkNeedham/~4/WjKvBuuIisw" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/BIWnqOyH1nI" height="1" width="1"/&gt;</description>
         <author>Mark Needham</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/ed50af0911cdadde</guid>
         <pubDate>Tue, 03 Nov 2009 07:22:56 -0800</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/MarkNeedham/~3/WjKvBuuIisw/</feedburner:origLink></item>
      <item>
         <title>MVP Again</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/6NT5-WQHHNY/mvp-again.aspx</link>
         <author>skeet</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/35e28b12011d213e</guid>
         <pubDate>Fri, 30 Oct 2009 14:14:09 -0700</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/6NT5-WQHHNY" height="1" width="1"/&gt;</description><feedburner:origLink>http://feedproxy.google.com/~r/JonSkeetCodingBlog/~3/CuSc5VzO9QM/mvp-again.aspx</feedburner:origLink></item>
      <item>
         <title>Today's Top N</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/mxAHVPrvuNA/todays-top-n.html</link>
         <description>I don't drive very often - I live and work within the city, and I tend to take the &lt;a rel="nofollow" target="_blank" href="http://www.mbta.com"&gt;T&lt;/a&gt; to work and pretty much everywhere else, too. Consequently, I don't listen to the radio very often. But this weekend I was on a road trip and I had the radio going. I kept hearing the same theme over and over as I flipped around the stations:&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;"Today's Top 10"&lt;/div&gt;&lt;div&gt;"the Weekly Top 20"&lt;/div&gt;&lt;div&gt;"Top 5 Countdown"&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;And I remember thinking, "What a good idea!"&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;After all, the top 10 songs, or top 20 albums, or whatever, are in some ways like the parts of our test plans:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;some of them are the same over and over again&lt;/i&gt;: how many weeks is one song at the top of the charts, or at position two or five? Same thing with areas of code.&lt;/li&gt;&lt;li&gt;&lt;i&gt;some of them change each time&lt;/i&gt;: eventually a song falls off the list, and eventually we're comfortable enough with an area of our test plan that we move on.&lt;/li&gt;&lt;li&gt;&lt;i&gt;they sound a little different every time&lt;/i&gt;: maybe this week it's the dance mix and next week it's the acoustic version - same underlying thing, just a bit different.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So why not? Let's embrace the theme!&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;We happen to be really close to a release. So for this week, we're having the &lt;span&gt;QA&lt;/span&gt; Top 4 (there are four of us, so this makes it easy). Every morning, we come in and pick the four areas we're currently least comfortable with, as a group. We all throw ideas around until we agree on the four. Then we go work mostly on those four items - they're the top of our list for the day. The next day, we repeat the procedure. Maybe it's four different items, maybe some of them are the same and some new - doesn't matter, really. But that's the new &lt;span&gt;QA&lt;/span&gt; Top 4. So we work those new four for the day.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The idea here is that we get a chance, every day, to re-identify the scariest areas of the code. And then we work on them. If they're still scary, we'll work on them again the next day. If not, we'll work on the new scariest areas.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;There are a lot of ways to prioritize things, but having new ways to think about it sparks new ideas. This is just a new (to me, anyway) way to present that old risk evaluation, and hey, it's kind of fun.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;(And by the way, you should see the jokes.... "Replication, by the Again &lt;span&gt;Agains&lt;/span&gt;" at #1, and "Defect Verification" off the "Oh Boy It Worked!" album at #2. We're pretty easily amused!)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/8341729382206275662-4187694385504551816?l=blog.abakas.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Abakas/~4/FYkQ5dV6E7M" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/mxAHVPrvuNA" height="1" width="1"/&gt;</description>
         <author>Catherine Powell</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/b6464c16b8538722</guid>
         <pubDate>Wed, 21 Oct 2009 13:51:00 -0700</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/Abakas/~3/FYkQ5dV6E7M/todays-top-n.html</feedburner:origLink></item>
      <item>
         <title>Adding Variability in Test Case Design</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/PHbvwC-CdZY/adding-variability-in-test-case-design.aspx</link>
         <author>I.M.Testy</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/02ceeae89d6ee9b3</guid>
         <pubDate>Mon, 19 Oct 2009 19:03:00 -0700</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/PHbvwC-CdZY" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.msdn.com/imtesty/archive/2009/10/20/adding-variability-in-test-case-design.aspx</feedburner:origLink></item>
      <item>
         <title>Worst Practices for Domain-Specific Modeling</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/gdMC7WW75Hg/blogView</link>
         <author>(author unknown)</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/ca95f57030290677</guid>
         <pubDate>Mon, 12 Oct 2009 06:52:41 -0700</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/gdMC7WW75Hg" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.metacase.com/blogs/stevek/blogView?showComments=true&amp;entry=3432819161</feedburner:origLink></item>
      <item>
         <title>Using UML takes 15% longer than just coding</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/SVL_nVnS2Ww/blogView</link>
         <author>(author unknown)</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/818a89f3d1b832c6</guid>
         <pubDate>Wed, 07 Oct 2009 06:20:51 -0700</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/SVL_nVnS2Ww" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.metacase.com/blogs/stevek/blogView?showComments=true&amp;entry=3432385251</feedburner:origLink></item>
      <item>
         <title>Book Club: Integration tests are a scam (J.B. Rainsberger)</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/xB_b-1LAcXc/</link>
         <description>&lt;p&gt;In our latest book club we discussed J.B. Rainsberger's presentation from Agile 2009 titled '&lt;a rel="nofollow" target="_blank" href="http://www.infoq.com/presentations/integration-tests-scam"&gt;Integration tests are a scam&lt;/a&gt;'.&lt;/p&gt;
&lt;p&gt;These are some of my thoughts and our discussion of the video:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;While talking about how to write interaction tests he suggests that &lt;strong&gt;we should only be looking to create interfaces for Domain Driven Design services&lt;/strong&gt;. If we find ourselves wanting to create interfaces for entities or value objects then we probably have a service wanting to get out. We should try to extract that responsibility out into a service.
&lt;p&gt;I'm intrigued as to how repositories and factories would fit into this picture as I'm not sure whether they count as services, entities or value types. I've worked on code bases where we've created interfaces for them but I don't know if that means they would be services or that we did something wrong.&lt;/p&gt;
&lt;p&gt;There also seem to be varying schools of thought on whether or not we should tests these types of things directly or whether we should just make use of them in our code and judge their correctness that way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Rainsberger's main gripe seems to be with&lt;strong&gt; tests which cover more than one interesting behaviour&lt;/strong&gt; and he identifies the slow feedback and complexity of test setup as being undesired consequences of this approach.
&lt;p&gt;My feeling is that he was mainly referring to tests written directly from the UI although several colleagues suggested that tests where we call the code directly while using several real objects had the characteristics of the integration tests that Rainsberger dislikes. Ayende is having some success with what he coins '&lt;a rel="nofollow" target="_blank" href="http://ayende.com/Blog/archive/2009/09/28/even-tests-has-got-to-justify-themselves.aspx"&gt;system oriented tests&lt;/a&gt;' which sound similar to the latter so there might be something in this approach.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Rainsberger's solution for testing our systems thoroughly is to make use of &lt;strong&gt;contract and interaction tests&lt;/strong&gt; – the former testing the real implementation of services and the latter the way that our objects work together with each other. Essentially making use of &lt;a rel="nofollow" target="_blank" href="http://martinfowler.com/articles/mocksArentStubs.html"&gt;mocking&lt;/a&gt; as far as I understand.
&lt;p&gt;He also suggests the need for a tool which would be able to indicate that every interaction test we write has a corresponding contract test which sounds quite similar to the &lt;a rel="nofollow" target="_blank" href="http://code.google.com/p/nsynthesis/"&gt;NSynthesis&lt;/a&gt; tool that a couple of my colleagues have worked on. This tool only tests that we do have a contract test for each mock rather than testing with the exact parameters used in our interaction tests as Rainsberger describes. If I understand this correctly then that would seem to result in a lot of tests!&lt;/p&gt;
&lt;p&gt;I think we still need some integration tests that go through the user interface particularly if we are writing javascript heavy front ends – from my experience only using unit tests doesn't take us the whole way to having confidence that this type of code works. &lt;/p&gt;
&lt;p&gt;It is perhaps useful as a rule of thumb to test the happy path of pieces of functionality through integration tests and try and test the edge cases from tests that sit further down.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;I like the idea that &lt;strong&gt;acceptance tests are supposed to be clarifying requirements and not testing correctness&lt;/strong&gt; although it seems to be really easy to cross the line where they do end up verifying the correctness of our application. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rainsberger has an interesting post on his blog where he &lt;a rel="nofollow" target="_blank" href="http://www.jbrains.ca/permalink/284"&gt;goes through the feedback he received&lt;/a&gt; from the talk.&lt;/p&gt;
&lt;p&gt;I'm not sure if I totally understand contract tests at the moment – there is &lt;a rel="nofollow" target="_blank" href="http://jbrains.ca/permalink/281"&gt;a post on Rainsberger's blog&lt;/a&gt; which explains it a bit more and my colleague Danilo Sato wrote &lt;a rel="nofollow" target="_blank" href="http://www.markhneedham.com/blog/2009/09/18/tdd-testing-with-generic-abstract-classes/#comment-22678"&gt;a comment on a post I wrote&lt;/a&gt; about using generic abstract classes for testing suggesting that this approach is similar to the one Rainsberger is advocating.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/MarkNeedham/~4/0kEwmIy_aMU" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/xB_b-1LAcXc" height="1" width="1"/&gt;</description>
         <author>Mark Needham</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/841d3308f3c2da1f</guid>
         <pubDate>Tue, 06 Oct 2009 06:37:52 -0700</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/MarkNeedham/~3/0kEwmIy_aMU/</feedburner:origLink></item>
      <item>
         <title>[Other] Research Stimulus</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/NolV0oXZGvk/2009996557_science04m.html</link>
         <author>(author unknown)</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/37a2cdcfc55554e9</guid>
         <pubDate>Sun, 04 Oct 2009 00:00:00 -0700</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/NolV0oXZGvk" height="1" width="1"/&gt;</description><feedburner:origLink>http://feedproxy.google.com/~r/CarnetsDeBord/~3/GEemtST1pJY/2009996557_science04m.html</feedburner:origLink></item>
      <item>
         <title>[SOA] The Case for Reuse: if only developers would spend less time at their keyboards or play station</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/KRQnyrd8yK8/</link>
         <description>&lt;blockquote&gt;Shared by turker &lt;br&gt;
Reuse is not about reusing what has been written, reuse is about being able to modify what has been written without impacting whoever is currently using that code. Once you'll understand that, everything will be different.&lt;/blockquote&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://setandbma.wordpress.com/2009/03/26/when-is-reuse-feasible/"&gt;A reader on InfoQ, Udayan Banerjee, commented about reuse&lt;/a&gt;.&lt;/p&gt; &lt;blockquote&gt; &lt;ul&gt; &lt;li&gt;Opportunity to use code without making any modification is very rare. There is always some architectural variation between different product line / project.&lt;/li&gt;
&lt;li&gt;Effort required to modify an existing piece of code is much higher. &lt;/li&gt;
&lt;li&gt;If the change required is more than 20% then it may be easier to rewrite the code.&lt;/li&gt;
&lt;li&gt;To write a piece of code which can readily be reused requires significantly more effort – factor of 3 is a reasonable estimate.&lt;/li&gt;
&lt;li&gt;Therefore, to derive benefit the code needs to get used at least 4 to 5 times – so large number of product lines with identical technology is basic necessity for reuse.&lt;/li&gt; &lt;/ul&gt; &lt;/blockquote&gt; &lt;p&gt;I would just say two things:&lt;/p&gt; &lt;p&gt;1) If you don't understand how versioning is intimately related to reuse, just look at the services you consume in your everyday life. How often are you notified that a service changed? how offen are you impacted when a service changed? If you don't understand anything about Forward versioning, &lt;a rel="nofollow" target="_blank" href="http://www.infoq.com/articles/contract-versioning-comp2"&gt;start here&lt;/a&gt;. Reuse is not about reusing what has been written, reuse is about being able to modify what has been written without impacting whoever is currently using that code. Once you'll understand that, everything will be different.&lt;/p&gt; &lt;p&gt;2) Reuse IS-NOT an option. Look around in the enterprise, every single business object, in every single industry: PO, Invoice, Payment, Customer, Account, Product..., &lt;a rel="nofollow" target="_blank" href="http://www.infoq.com/articles/seven-fallacies-of-bpm"&gt;every single BO in every single industry has a lifecycle, this lifecycle is independent of the processes in which the BO, a.k.a resource, participates&lt;/a&gt;. Not reusing a BO lifecycle is the absolute black hole for IT. This is why duplicated business logic ends up in different places and everything is hard to change and integrate. Not reusing BO lifecycles has vast implications in terms of cost, compliance, security...&lt;/p&gt; &lt;p&gt;At the end of the day there are technologies and a programming model that help with reuse. This is not true of any technology or any programming model. The technologies and programming models that Computer "Scientists" have pushed down the throat of IT for decades are all MVC based (even the way RESTafarians use REST is MVC based), that is the problem, not the solution.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/KRQnyrd8yK8" height="1" width="1"/&gt;</description>
         <author>(author unknown)</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/50be3e4436b38db4</guid>
         <pubDate>Fri, 02 Oct 2009 11:33:54 -0700</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/CarnetsDeBord/~3/FbJ1eHmiOPk/</feedburner:origLink></item>
      <item>
         <title>Calculating Velocity</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/q_1IkarMuLU/calculating-velocity.html</link>
         <description>&lt;div style="text-align:left;"&gt;When we're doing estimations, one of the tools I use is what I call a breadbox sizer. Basically, this is a tool to help us figure out how much work we should be committing to in an iteration - it's a measure of our velocity. Here's how it works:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Categorize the things you've done.&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The idea here is to create a list of the things you work on. Usually this is features or product areas. You can also put performance testing or other categories on there. This is basically how you categorize your testing effort. For example, my categories include:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;GUI management&lt;/li&gt;&lt;li&gt;CLI&lt;/li&gt;&lt;li&gt;Test Infrastructure&lt;/li&gt;&lt;li&gt;HA&lt;/li&gt;&lt;li&gt;Replication and snapshots&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Try to keep this between 10 and 20 categories. Fewer than that and you'll be putting too much in each category. More than that and it gets unwieldy to work with.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Put your past stories in the categories.&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Go back over the last three or four (or more if you can) iterations and put the stories/features/tasks you worked on into the categories you've created. For example, we just did a story "add separate timeouts to setup, test run, and teardown". That would go in the "Test Infrastructure" category.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Layer in the estimate sizes for each item.&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This part is important. Take the size of the story &lt;i&gt;as you estimated it&lt;/i&gt;, and add that to the category for that iteration. I don't care how long it actually took you. I care about how much time you thought it was going to take up front. (We're going to use this for estimates, so I care about how much of your estimated time you actually got done. We don't need another layer in the middle to translate "estimated time" to "actual time" worked.)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;For each story, decide if it was "small" (1-3 units), "medium" (3-5 units), "large" (5-10 units), or "extra large" (bigger). If one category had multiple stories, add them up and put the overall time spent in that category. You'll wind up with something that looks like this:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;a rel="nofollow" target="_blank" href="http://3.bp.blogspot.com/_hrCjqEFBjyE/SsVrPtBNGQI/AAAAAAAAAKc/1fDR6dkx7Kc/s1600-h/screen-capture.png"&gt;&lt;img src="http://3.bp.blogspot.com/_hrCjqEFBjyE/SsVrPtBNGQI/AAAAAAAAAKc/1fDR6dkx7Kc/s400/screen-capture.png" border="0" alt="" style="display:block;margin-top:0px;margin-right:auto;margin-bottom:10px;margin-left:auto;text-align:center;width:400px;height:114px;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Translate that into work done.&lt;/b&gt;&lt;/div&gt;&lt;div&gt;On the spreadsheet we're going to total the work done. Basically, we add 3 for every small, 5 for every medium, etc. This gives us the total amount of estimated work that we actually wound up doing in each iteration. Our example now looks like this:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;a rel="nofollow" target="_blank" href="http://1.bp.blogspot.com/_hrCjqEFBjyE/SsVyp6tS-hI/AAAAAAAAAKk/xLimOBiOwVk/s1600-h/screen-capture-4.png"&gt;&lt;img src="http://1.bp.blogspot.com/_hrCjqEFBjyE/SsVyp6tS-hI/AAAAAAAAAKk/xLimOBiOwVk/s400/screen-capture-4.png" border="0" alt="" style="display:block;margin-top:0px;margin-right:auto;margin-bottom:10px;margin-left:auto;text-align:center;width:400px;height:139px;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;In our first iteration, we managed 8 units of work, total. In our second, we got 15 units of work. In our third iteration, we did 16 units of work.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Get to a common denominator&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Now we start dividing by the things that change. For example, during iteration 1, one of our QA engineers was on vacation, so we had two engineers. During iterations 2 and 3, we were at full strength. So we're going to divide this up to define how much work per engineer per iteration we can do. In addition, our iteration 3 was three weeks long (doesn't matter why for this example), but the first two iterations were two weeks long each. So we divide that up, as well. This gives us a number per person per week.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;a rel="nofollow" target="_blank" href="http://3.bp.blogspot.com/_hrCjqEFBjyE/SsV0Cwc0HzI/AAAAAAAAAKs/TbFKrLkzQR8/s1600-h/screen-capture-5.png"&gt;&lt;img src="http://3.bp.blogspot.com/_hrCjqEFBjyE/SsV0Cwc0HzI/AAAAAAAAAKs/TbFKrLkzQR8/s400/screen-capture-5.png" border="0" alt="" style="display:block;margin-top:0px;margin-right:auto;margin-bottom:10px;margin-left:auto;text-align:center;width:400px;height:176px;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Make Conclusions&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;So now we know that each QA engineer can do about 2.5 units of estimated work each week. When we go into the next estimation session, that's where we'll draw the line for test work. We estimate just like we always do, and we then will walk down the list committing to 2.5 units of work per week. When we run out of allotted time, we'll stop. (By the way, our 2.5 is days, so we're getting about 50% effectiveness; my general experience says that's about right, and the rest of the work day is spent on email, meetings, escalations, sales assistance, and other tasks.)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;There are a number of ways to calculate velocity. Many of those methods involve calculating how much time you actually spent, getting a velocity of actual time, and then working to get your estimates to match up how much time you spent. You can choose to go this way; it's perfectly legitimate. However, I prefer the way I've outlined here simply because it avoids the fuzziness factor you get when trying to figure out how much time you actually spent (which I find really hard to do).&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;So see what you find when you calculate your velocity. Good luck!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/8341729382206275662-3310142763630036616?l=blog.abakas.com"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Abakas/~4/BdO5vAeO8OQ" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/q_1IkarMuLU" height="1" width="1"/&gt;</description>
         <author>Catherine Powell</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/434a8fef878d159a</guid>
         <pubDate>Fri, 02 Oct 2009 06:39:00 -0700</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/Abakas/~3/BdO5vAeO8OQ/calculating-velocity.html</feedburner:origLink></item>
      <item>
         <title>Agile Leadership: Methodology Ain't Enough</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/VBsRPd9AONk/agile-leadership-methodology-ain-enough.html</link>
         <description>&lt;p&gt;A lot of people say you can’t be a good software manager without really understanding software development.&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="What behaviors do we want in our agile leaders?" border="0" alt="What behaviors do we want in our agile leaders?" align="right" src="http://lh4.ggpht.com/_dkYqgGG4VVU/SsIK6jzrB_I/AAAAAAAAAoM/F7dAIVPU9BA/TechievsManager31.jpg?imgmax=800" width="260" height="233"&gt; But, let's face it, people who understand software development are a dime a dozen in our industry. What we really need are people who understand &lt;strong&gt;&lt;em&gt;leadership&lt;/em&gt;&lt;/strong&gt; &amp;amp; &lt;strong&gt;&lt;em&gt;management&lt;/em&gt;&lt;/strong&gt;. I mean... you know the drill – when was the last time a software project failed for &lt;em&gt;technical &lt;/em&gt;reasons?&lt;/p&gt; &lt;p&gt;And so, it was very cool to hear &lt;a rel="nofollow" title="Cutter Consortium: David Spann" target="_blank" href="http://www.cutter.com/meet-our-experts/spannd.html"&gt;David Spann&lt;/a&gt; share his research on &lt;strong&gt;Finding and Developing Agile Leader’s&lt;/strong&gt; at last week’s &lt;a rel="nofollow" title="Nashua ScrumClub" target="_blank" href="http://nashua.scrumclub.org/"&gt;ScrumClub&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;It’s simply not enough to know the latest agile practices. In order for agile projects to succeed, they need leaders who exhibit agile &lt;em&gt;behaviors&lt;/em&gt; and, here’s a hint – &lt;font color="#ff0000"&gt;being a technical guru ain’t one of them&lt;/font&gt;.&lt;/p&gt; &lt;p&gt;Now, I don’t want to mislead – David isn’t saying agile leaders don’t have to know anything about software development. What he &lt;strong&gt;is&lt;/strong&gt; saying is that the success criteria for leading agile teams is dependent on the leader’s beliefs and behaviors. That is, how they think and act is just as - if not more - important than what they know.&lt;/p&gt;&lt;a rel="nofollow" name="more"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#008080"&gt;&lt;font size="3"&gt;Beliefs&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="Check" border="0" alt="Check" align="left" src="http://lh5.ggpht.com/_dkYqgGG4VVU/SsIK7V-FvFI/AAAAAAAAAoU/IHaMyZ5xz0I/Checkbox_thumb13.gif?imgmax=800" width="55" height="48"&gt;&lt;/p&gt; &lt;p&gt;David identified 5 underlying beliefs that a successful agile leader should hold. &lt;br&gt;&lt;strong&gt;&lt;font color="#6633ff"&gt;How many of these do &lt;em&gt;you&lt;/em&gt; hold? How many does your manager?&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;1. A group of well intentioned, skilled people will make a better decision through consensus then I can on my own. &lt;/p&gt; &lt;p&gt;2. Five or more people with a single, clear purpose can (and often do!) change the world.&lt;/p&gt; &lt;p&gt;3. Asking the right &lt;em&gt;questions&lt;/em&gt; will always create better outcomes then making a series of well-crafted &lt;em&gt;statements&lt;/em&gt;. &lt;/p&gt; &lt;p&gt;4. The leadership role is about creating a great &lt;em&gt;environment&lt;/em&gt; in which others can succeed. &lt;/p&gt; &lt;p&gt;5. &lt;strong&gt;Trust&lt;/strong&gt; is the foundational component of any relationship and it must be tended to with care, integrity and humility.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#008080" size="3"&gt;Behaviors&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;David identified the &lt;em&gt;behaviors&lt;/em&gt; that make agile leaders successful and from that came two very interesting observations:&lt;/p&gt; &lt;p align="center"&gt;&lt;em&gt;&lt;font color="#008080"&gt;The behaviors that make agile leaders successful are, largely, the same behaviors that make Facilitators successful.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;em&gt;&lt;font color="#800000"&gt;The behaviors that cause agile leaders to fail are, largely, the same behaviors we seek when hiring Project Managers.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="In the Fight Between Good and Evil..." border="0" alt="In the Fight Between Good and Evil..." src="http://lh6.ggpht.com/_dkYqgGG4VVU/SsIK7tE5vvI/AAAAAAAAAoY/ZZckIMjbjIU/AgileLeadersGoodBadBehaviors5.gif?imgmax=800" width="278" height="203"&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#008080" size="3"&gt;Behaviors We Want in our Agile Leaders&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Strategic&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. Agile is very pragmatic, with a strong emphasis on the here &amp;amp; now. &lt;a rel="nofollow" title="You Aren't Gonna Need It" target="_blank" href="http://c2.com/xp/YouArentGonnaNeedIt.html"&gt;YAGNI&lt;/a&gt;, &lt;a rel="nofollow" title="The Last Responsible Moment" target="_blank" href="http://www.codinghorror.com/blog/archives/000705.html"&gt;defer decisions&lt;/a&gt;, no Big Up Front anything. And so, it's interesting to see &lt;em&gt;strategic&lt;/em&gt;, "taking a long range approach," as a key success criteria for agile leaders. I think this underscores the importance of having a clear vision for the team to rally around, and the need for our leaders to be thinking ahead to make sure that we're not just moving forward - but moving in the &lt;em&gt;right direction&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#000000"&gt;Tactical&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;. At the same time, agile &lt;strong&gt;is&lt;/strong&gt; very pragmatic, delivery focused. So our leaders need to emphasize the importance of continuously delivering value by focusing on "short-range, hands-on, practical strategies." &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#000000"&gt;Innovative&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;. We are out there, every day, responding to change, creating things no one has before. Our leaders should be open to new ideas, willing to take risks, and comfortable with agile's level of change.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#000000"&gt;Excitement&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;. We want our leaders to be passionate! To have excitement and energy and enthusiasm, and to pass that passion on to the team and make it felt by all who come in contact with it.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#000000"&gt;Communication&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;. Agile is about bringing people together to produce more than they could individually. Those 5 people with a clear purpose out there changing the world. This requires &lt;em&gt;communication,&lt;/em&gt; "stating clearly what you want and expect... clearly expressing your thoughts and ideas; maintaining a precise and constant flow of information."&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Consensual&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. Agile teams are about respect. Leaders value their team's ideas and opinions and demonstrate this by using their position to help the team gain consensus on how to proceed rather than just telling them what to do.&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Delegation&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. Agile teams are about trust. Leaders encourage this by enlisting team member's strengths to achieve results and giving the team autonomy to make their own judgments about the best way to meet objectives.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#000000"&gt;Empathy&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;. Agile leaders empathize with and support their team members.&lt;/p&gt; &lt;p&gt;&lt;font color="#008080" size="3"&gt;&lt;strong&gt;Behaviors that Hurt Agile Teams&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Authority&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. Leaders who are - and believe others should be - deferential to authority, tend to be liabilities on agile teams. Agile teams need to be continuously on the look out for new and better ways to do things and a great way to kill that that is by saying "nope, we don't allow new ideas unless they come from/are approved by the guy at the top."&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Structuring&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. The Plan-Driven Manager who spends weeks devising the "perfect plan" and the rest of the project aligning everything back to that is in direct opposition to the team's agility. Per the &lt;a rel="nofollow" title="Manifesto for Agile Software Development" target="_blank" href="http://agilemanifesto.org/"&gt;manifesto&lt;/a&gt;, agile teams value responding to change over following a plan.&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Conservative&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. If it ain't broke don't fix it, says the conservative leader, while agile says, "what can we do better?"&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Technical&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. While some technical understanding is good, being an expert is not only unnecessary but, as we've all seen, can be detrimental. We need our leaders helping us with communication and vision and supporting us to get the work done, not busy doing it all - or coming up with all the answers - themselves. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#6633ff"&gt;When we look for managers in our organizations, what kinds of traits do we look for?&lt;/font&gt;&lt;/strong&gt; Managers should have Authority, right? And, just look at the PMP - you know, the thing that tells us how to manage projects - about 90% of it's Body of Knowledge is around planning, so Structuring must be important too. Conservative? Sure, old white guys in suits, right? ;-) And technical... well, we all know what role the techies get promoted to when they do a good job.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;What about YOU: Which beliefs and behaviors do you see in your own agile leaders? What about in yourself?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;-- &lt;br&gt;Learn more in &lt;a rel="nofollow" title="Agile Adaptive Management Reports" target="_blank" href="http://www.aamngt.com/"&gt;David Spann's articles&lt;/a&gt; on his research into Agile Management Behaviors: &lt;a rel="nofollow" title="Nashua ScrumClub" target="_blank" href="http://nashua.scrumclub.org/"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="ScrumClub" border="0" alt="ScrumClub" align="right" src="http://lh6.ggpht.com/_dkYqgGG4VVU/SsIK79-sYNI/AAAAAAAAAoc/yRJXngaeQz4/ScrumClub4.jpg?imgmax=800" width="64" height="34"&gt;&lt;/a&gt; &lt;br&gt;» &lt;a rel="nofollow" target="_blank" href="http://www.aamngt.com/files/agilemngt.pdf"&gt;Agile Management Behaviors: What to Look For and Develop&lt;/a&gt; &lt;br&gt;» &lt;a rel="nofollow" target="_blank" href="http://www.aamngt.com/files/thefacilitativemindofagile.pdf"&gt;The Facilitative Mind of Agile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#6633ff"&gt;&lt;b&gt;New!&lt;/b&gt;&lt;/font&gt; See Patrick Wilson Welsh's response: &lt;a rel="nofollow" target="_blank" href="http://patrickwilsonwelsh.com/?p=170"&gt;Agile Team Lead : Useful New Role?&lt;/a&gt;&lt;br&gt;which takes this idea to the next level, and join in the conversation!&lt;/p&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/7501180114730436648-8696730797330851255?l=www.thehackerchickblog.com" alt=""&gt;&lt;/div&gt;&lt;div&gt;
&lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=RlDEzAzgbn8:sofMCqRzaSQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=RlDEzAzgbn8:sofMCqRzaSQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=RlDEzAzgbn8:sofMCqRzaSQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=RlDEzAzgbn8:sofMCqRzaSQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=RlDEzAzgbn8:sofMCqRzaSQ:4cEx4HpKnUU" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=RlDEzAzgbn8:sofMCqRzaSQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/RlDEzAzgbn8" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/VBsRPd9AONk" height="1" width="1"/&gt;</description>
         <author>abby</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/a17ea0a572298a06</guid>
         <pubDate>Tue, 29 Sep 2009 06:26:00 -0700</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/TheHackerChickBlog/~3/RlDEzAzgbn8/agile-leadership-methodology-ain-enough.html</feedburner:origLink></item>
      <item>
         <title>‘Exploratory Software Testing’ – a cheat of a book</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/0-L2iPZZ2u0/</link>
         <description>&lt;p&gt;Much like in software, when you release a book into the hands of the masses it is largely out of your control. Part of the lack-of-control with a book is the review process where you send out free copies to people who have a platform in hopes they give it a nice review (thus garnering more interest and sales). I’ve been doing this the last week for Beautiful Testing and I get books sent to me periodically. James Whittaker’s &lt;a rel="nofollow" target="_blank" href="http://www.amazon.com/exec/obidos/ASIN/0321636414/adamgoucher-20/"&gt;Exploratory Software Testing&lt;/a&gt; is one such book that landed in my mailbox, but the review is not going to be positive.&lt;br&gt;
&lt;br&gt;
Lack of control sucks.&lt;br&gt;
&lt;br&gt;
I &lt;i&gt;really&lt;/i&gt; wanted to like this book. Exploratory testing is an extremely powerful technique which is largely passed from person-to-person rather than through books. This lack of textbook presence keeps it out of University curriculums. But when reading it, the only word I kept thinking of was &lt;i&gt;cheat&lt;/i&gt;.&lt;br&gt;
&lt;br&gt;
At its core, Exploratory Software Testing is about the useful metaphor of a tester as a tourist and the software their destination. An application, like a city, can be broken down into a number of districts (business, historical, tourist, entertainment, hotel and seedy) and for each district a number of ‘tours’ can be had (guidebook, money, landmark, intellectual, fedex, after-hours and garbage collectors for the business district for example). This metaphor is fantastically developed and is quite useful in developing a testing strategy.&lt;br&gt;
&lt;br&gt;
But is that metaphor enough to justify a book? No. Not really. I wouldn’t dream of pitching &lt;a rel="nofollow" target="_blank" href="http://adam.goucher.ca/?p=200"&gt;SLIME&lt;/a&gt; as an entire book though I think it is just as useful to keep in mind as being a tourist. More on that in a second.&lt;br&gt;
&lt;br&gt;
But first…&lt;br&gt;
&lt;br&gt;
I took James Bach’s Rapid Software Testing August of 2005 (during hurricane Katrina) and during it there was a discussion of ‘tours’ you can take through an application. Specifically Mike Kelly’s &lt;a rel="nofollow" target="_blank" href="http://www.michaeldkelly.com/blog/archives/50"&gt;FCC CUTS VIDS&lt;/a&gt; was mentioned. Mr. Whittaker joined Microsoft in 2006 and started to develop the idea of tours of there (on the soccer pitch according to Alan Page who did the Foreword) which ultimately culminated in this book. Now, there is nothing wrong with taking an idea and evolving it. We’ve all done it. But when you do that, you are obligated to say that is what you did and to cite the sources. The lack of background material in Exploratory Testing is a concern. Not only is there no mention of people who did work on the Testing-as-Touring idea, but there is no mention of people who are known thought leaders in exploratory testing. You mean to say you can write a book on exploratory testing without mentioning James or Jon Bach, Cem Kaner or Michael Bolton? Really? What does that do to your credibility on the subject?&lt;br&gt;
&lt;br&gt;
The lack of citation is actually not my biggest criticism of Exploratory Testing. Like I said, I think the metaphor is wonderful and a useful addition of testing lore. My biggest complaint is that the book even got published.&lt;br&gt;
&lt;br&gt;
Exploratory Software Testing is 224 pages in length and if we operate on the premise that the tour metaphor is the main focus of the book then it should be the majority of the content. Right? Well, James’ work on it lasts for 39 pages (chapters 4 and 5). Total. In fact, the original work ends on page 143 at which point he reprints a bunch of StickyMinds articles and his MSDN blog for the remainder. Even that content before the reprints isn’t all his. The chapter after the tour metaphor is finished is mini-essays (34 pages) by people inside Microsoft who have used tours successfully on their project.&lt;br&gt;
&lt;br&gt;
In short, there isn’t enough content to warrant publishing a book that retails for $39.99 USD ($47.99 CDN). Take the tour metaphor one more step and bind it as a pocket tourist guide that sells for $15 and you have a winner. But for this price and packaging, unless you have an unlimited book budget, I can’t recommend that you pick it up. Eventually someone will post a description of each district and its tour and a few minutes of google-fu will give you the same value and still have enough money in your pocket for a week’s work the lunches.&lt;br&gt;
&lt;br&gt;
Having been through the book process once this feels a lot like the publisher saw that they could sell a bunch of books based on the author having had successful books in the past and a title that is somewhat misleading but popular in their target audience’s lexicon rather than producing something of lasting value.&lt;br&gt;
&lt;br&gt;
Here is another thing from the publishing world; they really don’t like publishing a book with the same(-ish) title as an existing one. Especially in the same subject matter space. It is a shame that this book is what will forever carry the mantle for exploratory testing.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/5PexMlKggJM" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/0-L2iPZZ2u0" height="1" width="1"/&gt;</description>
         <author>adam</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/66c72a9b610689c7</guid>
         <pubDate>Mon, 21 Sep 2009 06:15:56 -0700</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/AdamGoucher/~3/5PexMlKggJM/</feedburner:origLink></item>
      <item>
         <title>Who Owns Quality?</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/yD3NSLz0pTE/who-owns-quality.aspx</link>
         <author>alanpa</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/e564fc44412b55aa</guid>
         <pubDate>Fri, 18 Sep 2009 02:29:19 -0700</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/yD3NSLz0pTE" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.msdn.com/alanpa/archive/2009/09/17/who-owns-quality.aspx</feedburner:origLink></item>
      <item>
         <title>TDD: Testing with generic abstract classes</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/T13soqKSyrI/</link>
         <description>&lt;p&gt;In a post I wrote earlier in the week I described &lt;a rel="nofollow" target="_blank" href="http://www.markhneedham.com/blog/2009/09/13/tdd-testing-sub-classes/"&gt;a dilemma we were having testing some code which made use of abstract classes&lt;/a&gt; and Perryn Fowler, Liz Keogh and Pat Maddox pointed out that a useful approach for this problem would be to make use of an &lt;a rel="nofollow" target="_blank" href="http://c2.com/cgi-bin/wiki?AbstractTestCases"&gt;abstract test class&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;The idea here is that we create an equivalent hierarchy to our production code for our tests which in the example that I provided would mean that we have roughly the following setup:&lt;/p&gt; &lt;div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; abstract &lt;span style="color:#FF0000;"&gt;class&lt;/span&gt; ParentModelTest
&lt;span style="color:#000000;"&gt;{&lt;/span&gt;
&lt;span style="color:#000000;"&gt;}&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;class&lt;/span&gt; BusinessProcess1ModelTest &lt;span style="color:#008000;"&gt;:&lt;/span&gt; ParentModelTest &lt;span style="color:#000000;"&gt;{&lt;/span&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt;
&lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;class&lt;/span&gt; BusinessProcess2ModelTest &lt;span style="color:#008000;"&gt;:&lt;/span&gt; ParentModelTest &lt;span style="color:#000000;"&gt;{&lt;/span&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt;
&lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;class&lt;/span&gt; BusinessProcess3ModelTest &lt;span style="color:#008000;"&gt;:&lt;/span&gt; ParentModelTest &lt;span style="color:#000000;"&gt;{&lt;/span&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;We then want to create an abstract method on the 'ParentModelTest' class to create the object under test and we'll implement this method in the sub classes.&lt;/p&gt;
&lt;p&gt;We can then put the common tests into the abstract class and they will be run when we run the tests for each of the sub class tests.&lt;/p&gt;
&lt;p&gt;My colleague Matt Dunn and I were looking at how you would implement this and he pointed out that it provided quite a nice opportunity to use generics to achieve our goal. &lt;/p&gt;
&lt;p&gt;If we make the abstract test class take in generic parameters then it allows us to create our specific type in the 'create' method rather than having to create 'ParentModel' and then casting that for our specific sub class tests.&lt;/p&gt; &lt;div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; abstract &lt;span style="color:#FF0000;"&gt;class&lt;/span&gt; ParentModelTest&lt;span style="color:#008000;"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#008000;"&gt;&amp;gt;&lt;/span&gt; where T &lt;span style="color:#008000;"&gt;:&lt;/span&gt; ParentModel
&lt;span style="color:#000000;"&gt;{&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;protected&lt;/span&gt; abstract T CreateModel&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt; &lt;span style="color:#000000;"&gt;[&lt;/span&gt;Test&lt;span style="color:#000000;"&gt;]&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;void&lt;/span&gt; ShouldTestThoseCommonDependencies&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt; &lt;span style="color:#000000;"&gt;{&lt;/span&gt; var model &lt;span style="color:#008000;"&gt;=&lt;/span&gt; CreateModel&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt; &lt;span style="color:#008080;font-style:italic;"&gt;// Do some awesome testing that's common across all 3 sub classes here&lt;/span&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt;
&lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:#000000;"&gt;[&lt;/span&gt;TestFixture&lt;span style="color:#000000;"&gt;]&lt;/span&gt;
&lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;class&lt;/span&gt; BusinessProcessModel1Test &lt;span style="color:#008000;"&gt;:&lt;/span&gt; ParentModelTest&lt;span style="color:#008000;"&gt;&amp;lt;&lt;/span&gt;BusinessProcessModel1&lt;span style="color:#008000;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#000000;"&gt;{&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;protected&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;override&lt;/span&gt; BusinessProcessModel1 CreateModel&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt; &lt;span style="color:#000000;"&gt;{&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;return&lt;/span&gt; &lt;span style="color:#008000;"&gt;new&lt;/span&gt; BusinessProcessModel1&lt;span style="color:#000000;"&gt;(&lt;/span&gt;...&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt; &lt;span style="color:#000000;"&gt;[&lt;/span&gt;Test&lt;span style="color:#000000;"&gt;]&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;void&lt;/span&gt; ShouldDoSomeEquallyOutstandingStuff&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt; &lt;span style="color:#000000;"&gt;{&lt;/span&gt; var model &lt;span style="color:#008000;"&gt;=&lt;/span&gt; CreateModel&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt; &lt;span style="color:#008080;font-style:italic;"&gt;// and test away&lt;/span&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt;
&lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;It seems to work quite well and we realised that it's actually a pattern that we had also used to test that our controllers would actually be injected with all their dependencies from our DI container or whether we have forgotten to register some of them.&lt;/p&gt;
&lt;p&gt;We have an abstract class similar to this which all our controller tests extend:&lt;/p&gt; &lt;div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; abstract &lt;span style="color:#FF0000;"&gt;class&lt;/span&gt; ContainerTest&lt;span style="color:#008000;"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#008000;"&gt;&amp;gt;&lt;/span&gt; where T &lt;span style="color:#008000;"&gt;:&lt;/span&gt; Controller
&lt;span style="color:#000000;"&gt;{&lt;/span&gt; &lt;span style="color:#000000;"&gt;[&lt;/span&gt;Test&lt;span style="color:#000000;"&gt;]&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0600FF;"&gt;void&lt;/span&gt; ShouldHookUpAllDependencies&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt; &lt;span style="color:#000000;"&gt;{&lt;/span&gt; var container &lt;span style="color:#008000;"&gt;=&lt;/span&gt; CreateTheContainer&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt; var controller &lt;span style="color:#008000;"&gt;=&lt;/span&gt; container.&lt;span style="color:#0000FF;"&gt;Resolve&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#008000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt; Assert.&lt;span style="color:#0000FF;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;controller&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;;&lt;/span&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt;
&lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:#0600FF;"&gt;public&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;class&lt;/span&gt; AwesomeControllerTest &lt;span style="color:#008000;"&gt;:&lt;/span&gt; ContainerTest&lt;span style="color:#008000;"&gt;&amp;lt;&lt;/span&gt;AwesomeController&lt;span style="color:#008000;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#000000;"&gt;{&lt;/span&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;When we haven't got all the dependencies injected correctly the code will actually blow up on the resolve step so the last line is not strictly necessary but the test seems like it's not testing anything at first glance without it.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/MarkNeedham/~4/a-Eqs_soiGE" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/T13soqKSyrI" height="1" width="1"/&gt;</description>
         <author>Mark Needham</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/c3e9de92d8d36798</guid>
         <pubDate>Thu, 17 Sep 2009 07:40:09 -0700</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/MarkNeedham/~3/a-Eqs_soiGE/</feedburner:origLink></item>
      <item>
         <title>My Get-Back-To-Work Hack</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/CRcW8FTDcIE/my-get-back-to-work-hack.html</link>
         <description>&lt;h1&gt;My Get-Back-To-Work Hack&lt;/h1&gt;
&lt;p&gt;I’ve been looking for a way to fight distractions on the web. I’ve tried &lt;a rel="nofollow" target="_blank" href="http://visitsteve.com/work/selfcontrol/"&gt;SelfControl&lt;/a&gt;, but just getting a “server not found” error in the browser when I visit a temptingly unproductive site isn’t particularly motivational.&lt;/p&gt;
&lt;p&gt;The hack for this I came up with today is cheap and dumb, but it works. If you want to be sure it’s worth your time, watch this 46 second long &lt;a rel="nofollow" target="_blank" href="http://screenr.com/Ix7"&gt;screencast&lt;/a&gt;, then read on if you like what you see.&lt;/p&gt;
&lt;p&gt;If you’re an experienced web developer, this will probably take you all of ten minutes to set up. If not, I’ve tried to explain it in pretty friendly terminology, but you might want to grab the nearest techie to help you out.&lt;/p&gt;
&lt;h2&gt;Step One: Block Distracting Domains&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;/etc/hosts&lt;/code&gt; file tells your computer where other computers are. Normally, this file is almost empty; it just points your computer at itself, reminding it that its local address is &lt;code&gt;127.0.0.1&lt;/code&gt;. Your computer doesn’t need to know much more than that because it uses &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Domain_Name_System"&gt;&lt;span&gt;DNS&lt;/span&gt;&lt;/a&gt; and similar protocols to find other computers over the network. Still, every time your computer tries to talk to another computer, it checks &lt;code&gt;/etc/hosts&lt;/code&gt; to see if we’ve specified the other computer’s address.&lt;/p&gt;
&lt;p&gt;We can make use of the &lt;code&gt;/etc/hosts&lt;/code&gt; file to block specific domains that we shouldn’t be spending time on. We just associate those domains with a bad address – in this case, the address of our local machine.&lt;/p&gt;
&lt;p&gt;My &lt;code&gt;/etc/hosts&lt;/code&gt; looks like &lt;a rel="nofollow" target="_blank" href="http://gist.github.com/187138"&gt;this&lt;/a&gt;. It’s the lines below the commented-out line about “distractions” that matter. Those lines say that the specified domains are served by my own computer. They aren’t, of course, so when I visit those sites, my browser gives me an error page.&lt;/p&gt;
&lt;p&gt;Go ahead and put your own time-wasting sites in there; be sure to add the “www.” variant, if the site has one. If you like, you can collapse all the domains onto one line after the “127.0.0.1”, but I find it easier to read over multiple lines.&lt;/p&gt;
&lt;p&gt;To an extent, this solves the problem: if you visit one of the domains you added to the file, you don’t get there. But as with SelfControl’s solution, an error page in your browser isn’t very motivational. Let’s go further.&lt;/p&gt;
&lt;h2&gt;Step Two: Serving Content for Blocked Domains&lt;/h2&gt;
&lt;p&gt;Since we’re directing requests for distracting domains to our own system, why not do something with those requests? Fire up a web server on the usual port (80). On a Mac, this is as simple as going to Sharing in System Preferences and ticking the box for Web Sharing. The text there may say that your computer’s website is available at some fancy address, but it’s also available on &lt;a rel="nofollow" target="_blank" href="http://127.0.0.1/"&gt;http://127.0.0.1/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now, visit one of those sites you put in your &lt;code&gt;/etc/hosts&lt;/code&gt;. You get a real webpage this time, right? Most likely, it’s whatever default page came with your web server software; it might say “It worked!” or something equally inane. The name of this file is probably &lt;code&gt;index.html.en&lt;/code&gt; (or maybe without the “.en” part). On a Mac, it lives at &lt;code&gt;/Library/WebServer/Documents/index.html.en&lt;/code&gt;. You should modify that file. Make it pretty, but not too pretty. Put a message in there that’s motivational to you. Visit one of your blocked sites, and you should see your custom message instead. Pretty good.&lt;/p&gt;
&lt;p&gt;There’s a problem, though. Say you blocked dumbsite.com. If you visit &lt;code&gt;http://dumbsite.com/foo/bar/baz.html&lt;/code&gt;, you’ll get a &lt;code&gt;404 File Not Found&lt;/code&gt; error from your local web server. That’s because you don’t have the files and directories the server is looking for inside the default folder your web server stores web pages in. You don’t want to have to provide these, either; you just want to serve the same page for every domain you’ve blocked.&lt;/p&gt;
&lt;p&gt;If you’re using Apache, you can use a couple of lines like &lt;a rel="nofollow" target="_blank" href="http://gist.github.com/187146"&gt;this&lt;/a&gt; inside your &lt;code&gt;httpd.conf&lt;/code&gt; to rewrite any &lt;span&gt;URL&lt;/span&gt; to point to a file in your document root (in this case, &lt;code&gt;index.php&lt;/code&gt;, but change that to whatever you want). That will get you back to seeing your custom page when you visit a blocked domain, regardless of the &lt;span&gt;URL&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;If you want to keep it simple, get all that working and stop here. You’ve got a nice custom reminder to get back to work, and few moving parts to maintain. If you’re comfortable setting up &lt;span&gt;PHP&lt;/span&gt;, though, venture on for a little gravy.&lt;/p&gt;
&lt;h2&gt;Step Three: Doing Something Useful with Blocked Domains&lt;/h2&gt;
&lt;p&gt;I didn’t just want a motivational message. I wanted a reminder of exactly what I should be doing.&lt;/p&gt;
&lt;p&gt;Once I got the above working, I flipped on &lt;span&gt;PHP&lt;/span&gt; in my &lt;code&gt;httpd.conf&lt;/code&gt; and set Apache to run as my user. Then, I changed my &lt;code&gt;index.php&lt;/code&gt; to &lt;a rel="nofollow" target="_blank" href="http://gist.github.com/187147"&gt;this&lt;/a&gt;. The key lines are at the bottom. They tell &lt;span&gt;PHP&lt;/span&gt; to fire off a command, just as if I issued it from a terminal. In my setup, the command will fire up &lt;a rel="nofollow" target="_blank" href="http://culturedcode.com/things/"&gt;Things&lt;/a&gt; if it isn’t running, or move it to the front of my windows if it is.&lt;/p&gt;
&lt;h2&gt;Variations&lt;/h2&gt;
&lt;p&gt;There’s a bunch of ways you could do this differently. Rather than modifying &lt;code&gt;/etc/hosts&lt;/code&gt;, you could firewall off any distracting domains. You could run your own &lt;span&gt;HTTP&lt;/span&gt; proxy and do the filtering there. Or, rather than popping up an application, you could have that &lt;span&gt;PHP&lt;/span&gt; script (or however you decide to implement it) pull your to-do list right into the admonishing web page. Or, you could, y’know, just use plain old real actual self control. But that’s easier said than done, I’ve found.&lt;/p&gt;
&lt;p&gt;What you do with the block page is really up to you. All I know is, popping up my to-do list works for me as motivation to get something done. I took a couple extra steps and ensured that only my local machine could get to that page, so folks on my local network couldn’t be popping up Things all day long by hitting the right IP in their browser. Other than that, I haven’t wanted to do anything fancier. That’s not really the point, after all.&lt;/p&gt;
&lt;p&gt;Incidentally, I’ve found that limiting my consumption of distracting domains to the iPhone is a good way of regulating my time. If I have my iPhone in hand for more than a minute or two, I’m probably waiting around for something, in which case it wouldn’t hurt to see what’s up on &lt;a rel="nofollow" target="_blank" href="http://news.ycombinator.com/"&gt;Hacker News&lt;/a&gt;. Because reading on the iPhone isn’t optimal, I’m not likely to get lost in a sea of interesting links for an hour or two.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/al3x/~4/CRcW8FTDcIE" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/CRcW8FTDcIE" height="1" width="1"/&gt;</description>
         <author>Alex Payne</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/47dd8591aedd8c6e</guid>
         <pubDate>Mon, 14 Sep 2009 00:00:00 -0700</pubDate>
      <feedburner:origLink>http://al3x.net/2009/09/14/my-get-back-to-work-hack.html</feedburner:origLink></item>
      <item>
         <title>Six Hopes for This Year's Microsoft Company Meeting</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/iV79PPCP1M4/six-hopes-for-this-years-microsoft.html</link>
         <author>noreply@blogger.com (Who da'Punk)</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/05c87df68f882e6b</guid>
         <pubDate>Wed, 02 Sep 2009 22:50:00 -0700</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/iV79PPCP1M4" height="1" width="1"/&gt;</description><feedburner:origLink>http://minimsft.blogspot.com/2009/09/six-hopes-for-this-years-microsoft.html</feedburner:origLink></item>
      <item>
         <title>And the Winner is…</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/OWE1AEMpPGQ/</link>
         <description>&lt;p&gt;My last semester of school ever has begun. For the past few months I’ve been going back and forth about what I would study. I wrote &lt;a rel="nofollow" target="_blank" href="http://marlenacompton.com/?p=245"&gt;a previous post about some of my options.&lt;/a&gt; The school I attend is very application based. There’s not a lot of research going on and most people just want the piece of paper. No one here expects a fancy internship at Microsoft or Google. Those recruiters have yet to show up on our campus. Students at Southern Poly just want their resume to look good. This means that the majority of people here focus on acronyms. &lt;/p&gt;
&lt;p&gt;In looking around for a topic, I initially looked at holes in my skillset and the acronyms involved. I’m not that great with xml, css or xslt. I haven’t worked with SOAP, REST or LAMP. Although my thesis is about data visualization for software quality, I was telling myself that my thesis work should be enough “fun stuff” for me to be satisfied. Then I remembered how my parents relentlessly convinced me that a career should not be fun.&lt;/p&gt;
&lt;p&gt;As a high school student, I was obsessed with a career in technical theater. I loved the design and build of sets. To me it was the creation of a new world within the limited space of a stage. There are just as many theater classes on my high school transcript as math classes, and I was committed to finding a great theater program for college. &lt;/p&gt;
&lt;p&gt;To say that my parents were not encouraging is an understatement. They were so pissed off! Oh, the screams! For them, the only real jobs were the ones listed in the classified section of the Sunday paper. “Show us a ‘want ad’ for set designer,” was their common refrain. I heard this over and over for months in the living room, in the car on my way to freshman year in college, on the phone when I was at school. Eventually, they repeated this often enough that I became discouraged and dropped out of the theater program at Appalachian State. &lt;/p&gt;
&lt;p&gt;Last week, it was finally time to put my intentions for this final semester into the system. As the acronyms were cycling through my head, I reflected on this whole show-me-the-want-ad mentality, and realized that I was in a similar situation with my last semester. I’ve got all the practical, resume-enhancing choices behind Door #1 and the topic with no want-ad attached, data and software visualization, behind Door #2. I can just see the indignation on my parent’s faces. &lt;/p&gt;
&lt;p&gt;This is how I know, absolutely, that Data Visualization is the RIGHT choice. My thesis advisor (bless him!) helped me put a curriculum together for a survey of data visualization with a focus on software. I feel like I’ve gone back in time and re-traced my own steps. It’s like I’ve gotten a big, fat do-over as my SPSU swan song. The new Stephen Few book, &lt;a rel="nofollow" target="_blank" href="http://www.amazon.com/gp/product/0970601980?ie=UTF8&amp;amp;tag=marsblo04-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0970601980"&gt;Now You See It: Simple Visualization Techniques for Quantitative Analysis&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=marsblo04-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0970601980" alt="" style="border:medium none important;margin:0px;" border="0" width="1" height="1"&gt;is my textbook along with &lt;a rel="nofollow" target="_blank" href="http://www.amazon.com/gp/product/3540465049?ie=UTF8&amp;amp;tag=marsblo04-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=3540465049"&gt;Software Visualization: Visualizing the Structure, Behaviour, and Evolution of Software.&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=marsblo04-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=3540465049" alt="" style="border:medium none important;margin:0px;" border="0" width="1" height="1"&gt;.&lt;/p&gt;
&lt;p&gt;Even if I never have another job where I use this, even if I have to keep it as a hobby forever, it’s priceless to me that I will have the time and faculty support to broaden my expertise in this area. I have the rest of my life to learn “REST.” The important acronyms seem to change after 3-5 years anyway. At this point, I know that Data Visualization is not going anywhere. That might actually make it the most practical even though there’s no want-ad for data visualization specialist in the paper. &lt;/p&gt;
&lt;p&gt;BTW, my parents eventually realized the damage they had done when I ended up an overqualified (and miserable) secretary. It took a few wayward years and another college degree, but I finally realized that sometimes it is necessary to ignore your parents. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/OWE1AEMpPGQ" height="1" width="1"/&gt;</description>
         <author>marlena</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/4e05549da4e477b2</guid>
         <pubDate>Mon, 31 Aug 2009 19:11:35 -0700</pubDate>
      <feedburner:origLink>http://marlenacompton.com/?p=385</feedburner:origLink></item>
      <item>
         <title>Sample: Parsing Content in C# Using IFilter</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/Ywg7XOrHS7g/sample-parsing-content-in-c-using-ifilter.aspx</link>
         <author>Jasonz</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/96c717a7a267d3a7</guid>
         <pubDate>Mon, 31 Aug 2009 00:09:06 -0700</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/Ywg7XOrHS7g" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.msdn.com/jasonz/archive/2009/08/31/sample-parsing-content-in-c-using-ifilter.aspx</feedburner:origLink></item>
      <item>
         <title>Motley says: "What's wrong with mixing Scrum and Waterfall? You get a nice 'Scrummerfall'!"</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/GScA5mJwtsE/what-s-wrong-with-mixing-scrum-and-waterfall-you-get-a-nice-scrummerfall.aspx</link>
         <author>James Waletzky</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/0c46e45b099b0145</guid>
         <pubDate>Tue, 25 Aug 2009 10:45:00 -0700</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/GScA5mJwtsE" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.msdn.com/progressive_development/archive/2009/08/25/what-s-wrong-with-mixing-scrum-and-waterfall-you-get-a-nice-scrummerfall.aspx</feedburner:origLink></item>
      <item>
         <title>Windows 7 Party: Sent from mobile phone</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/UJoEQn41Q4s/158413622</link>
         <description>&lt;img src="http://8.media.tumblr.com/BVjMsgDnOqvhtx9keIHNXDryo1_250.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Windows 7 Party:&lt;/b&gt; &lt;p&gt;Sent from mobile phone&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/UJoEQn41Q4s" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/158413622</guid>
         <pubDate>Fri, 07 Aug 2009 23:12:23 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/158413622</feedburner:origLink></item>
      <item>
         <title>Lego Store: Sent from mobile phone</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/aVAJHuw6F1M/136461900</link>
         <description>&lt;img src="http://4.media.tumblr.com/BVjMsgDnOpkvmpq7R8249K50o1_250.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Lego Store:&lt;/b&gt; &lt;p&gt;Sent from mobile phone&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/aVAJHuw6F1M" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/136461900</guid>
         <pubDate>Mon, 06 Jul 2009 08:13:30 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/136461900</feedburner:origLink></item>
      <item>
         <title>Application Generation: Domain Specific Modeling: Choosing a Meta-metamodel</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/ckXVxeFMEMI/134162588</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://www.pbell.com/index.cfm/2009/6/25/Domain-Specific-Modeling-Choosing-a-Metametamodel"&gt;Application Generation: Domain Specific Modeling: Choosing a Meta-metamodel&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/ckXVxeFMEMI" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/134162588</guid>
         <pubDate>Thu, 02 Jul 2009 07:18:50 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/134162588</feedburner:origLink></item>
      <item>
         <title>Arda at the park with momy: Sent from mobile phone</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/-47eq9NQr1Y/134156538</link>
         <description>&lt;img src="http://7.media.tumblr.com/BVjMsgDnOpf3eonvZhg7J5Igo1_250.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Arda at the park with momy:&lt;/b&gt; &lt;p&gt;Sent from mobile phone&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/-47eq9NQr1Y" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/134156538</guid>
         <pubDate>Thu, 02 Jul 2009 07:04:36 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/134156538</feedburner:origLink></item>
      <item>
         <title>Arda at the park with dady: Sent from mobile phone</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/hBCp3P3lJT0/134156524</link>
         <description>&lt;img src="http://16.media.tumblr.com/BVjMsgDnOpf3en10QxqffZrNo1_250.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Arda at the park with dady:&lt;/b&gt; &lt;p&gt;Sent from mobile phone&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/hBCp3P3lJT0" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/134156524</guid>
         <pubDate>Thu, 02 Jul 2009 07:04:34 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/134156524</feedburner:origLink></item>
      <item>
         <title>Michael Nielsen » Is scientific publishing about to be disrupted?</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/gT-QCdpBdn0/133532817</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://michaelnielsen.org/blog/?p=629"&gt;Michael Nielsen » Is scientific publishing about to be disrupted?&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/gT-QCdpBdn0" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/133532817</guid>
         <pubDate>Wed, 01 Jul 2009 07:03:36 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/133532817</feedburner:origLink></item>
      <item>
         <title>The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/AHrWwHeIYkw/132236839</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://www.morganclaypool.com/doi/abs/10.2200/S00193ED1V01Y200905CAC006"&gt;The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/AHrWwHeIYkw" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/132236839</guid>
         <pubDate>Mon, 29 Jun 2009 05:08:06 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/132236839</feedburner:origLink></item>
      <item>
         <title>stuart kent's blog : So what is a DSL anyway?</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/i9Qz20cMZyU/132236835</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/stuart_kent/archive/2009/06/23/so-what-is-a-dsl-anyway.aspx"&gt;stuart kent's blog : So what is a DSL anyway?&lt;/a&gt;: &lt;p&gt;“I prefer to think of a language having different dimensions, and to categorize a language we need to place it on each of the dimensions relative to other languages. This leads to a much more fluid…&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/i9Qz20cMZyU" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/132236835</guid>
         <pubDate>Mon, 29 Jun 2009 05:08:06 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/132236835</feedburner:origLink></item>
      <item>
         <title>IUpdateable from Eric Nelson : Three Men and a Whiteboard: Windows Azure</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/i2TtMqAAxKg/129282832</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/ericnel/archive/2009/06/23/three-men-and-a-whiteboard-windows-azure.aspx"&gt;IUpdateable from Eric Nelson : Three Men and a Whiteboard: Windows Azure&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/i2TtMqAAxKg" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/129282832</guid>
         <pubDate>Wed, 24 Jun 2009 03:05:06 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/129282832</feedburner:origLink></item>
      <item>
         <title>Welcome to IEEE Xplore 2.0: What Types of Defects Are Really Discovered in Code Reviews?</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/XqFCdCPNCh0/128650653</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?isnumber=5061637&amp;arnumber=4604671"&gt;Welcome to IEEE Xplore 2.0: What Types of Defects Are Really Discovered in Code Reviews?&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/XqFCdCPNCh0" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/128650653</guid>
         <pubDate>Tue, 23 Jun 2009 02:48:47 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/128650653</feedburner:origLink></item>
      <item>
         <title>ProjectPlan - unladen-swallow - Plans for optimizing Python - Google Code</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/6OmI65i7nDU/124492841</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://code.google.com/p/unladen-swallow/wiki/ProjectPlan"&gt;ProjectPlan - unladen-swallow - Plans for optimizing Python - Google Code&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/6OmI65i7nDU" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/124492841</guid>
         <pubDate>Tue, 16 Jun 2009 02:25:47 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/124492841</feedburner:origLink></item>
      <item>
         <title>Effective Windows PowerShell: The Free eBook - Windows Live</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/KOObsOqISfk/123324153</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!6930.entry?wa=wsignin1.0&amp;sa=757349997"&gt;Effective Windows PowerShell: The Free eBook - Windows Live&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/KOObsOqISfk" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/123324153</guid>
         <pubDate>Sun, 14 Jun 2009 02:25:29 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/123324153</feedburner:origLink></item>
      <item>
         <title>Moserware: The First Few Milliseconds of an HTTPS Connection</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/duZ7HxSJjp8/123324151</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://www.moserware.com/2009/06/first-few-milliseconds-of-https.html"&gt;Moserware: The First Few Milliseconds of an HTTPS Connection&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/duZ7HxSJjp8" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/123324151</guid>
         <pubDate>Sun, 14 Jun 2009 02:25:29 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/123324151</feedburner:origLink></item>
      <item>
         <title>Memory Usage Auditing for .NET Applications</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/f5UOQKh64kI/119857063</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/magazine/dd882521.aspx"&gt;Memory Usage Auditing for .NET Applications&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/f5UOQKh64kI" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/119857063</guid>
         <pubDate>Mon, 08 Jun 2009 01:56:53 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/119857063</feedburner:origLink></item>
      <item>
         <title>InfoQ: Metamodel Oriented Programming</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/0U-bAc6ioP8/118358958</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://www.infoq.com/articles/mop"&gt;InfoQ: Metamodel Oriented Programming&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/0U-bAc6ioP8" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/118358958</guid>
         <pubDate>Fri, 05 Jun 2009 01:24:17 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/118358958</feedburner:origLink></item>
      <item>
         <title>YouTube - homeproject's Channel</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/p5vOyiJ3Nk8/115478689</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://www.youtube.com/homeproject"&gt;YouTube - homeproject's Channel&lt;/a&gt;: &lt;p&gt;We are living in exceptional times. Scientists tell us that we have 10 years to change the way we live, avert the depletion of natural resources and the catastrophic evolution of the Earth’s climate.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/p5vOyiJ3Nk8" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/115478689</guid>
         <pubDate>Sat, 30 May 2009 15:47:31 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/115478689</feedburner:origLink></item>
      <item>
         <title>Rebecca Norlander - Challenge and Success | Behind The Code | Channel 9</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/PZ0QPWvZrsg/112687321</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://channel9.msdn.com/shows/Behind+The+Code/Rebecca-Norlander-Challenge-and-Success/"&gt;Rebecca Norlander - Challenge and Success | Behind The Code | Channel 9&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/PZ0QPWvZrsg" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/112687321</guid>
         <pubDate>Mon, 25 May 2009 02:56:34 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/112687321</feedburner:origLink></item>
      <item>
         <title>tortoisegit - Google Code</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/JwEKKqR7LRo/112659821</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://code.google.com/p/tortoisegit/"&gt;tortoisegit - Google Code&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/JwEKKqR7LRo" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/112659821</guid>
         <pubDate>Mon, 25 May 2009 00:56:26 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/112659821</feedburner:origLink></item>
      <item>
         <title>Stevey's Blog Rants: Dynamic Languages Strike Back</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/z8pzrEsDO5E/112624801</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html"&gt;Stevey's Blog Rants: Dynamic Languages Strike Back&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/z8pzrEsDO5E" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/112624801</guid>
         <pubDate>Sun, 24 May 2009 22:56:21 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/112624801</feedburner:origLink></item>
      <item>
         <title>InfoQ: Developing Expertise: Herding Racehorses, Racing Sheep</title>
         <link>http://feedproxy.google.com/~r/sharedlinks/~3/pjiYegrPKDU/112138628</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://www.infoq.com/presentations/Developing-Expertise-Dave-Thomas"&gt;InfoQ: Developing Expertise: Herding Racehorses, Racing Sheep&lt;/a&gt;: &lt;p&gt;In this presentation made during QCon 2007, Dave Thomas talks about expanding people’s expertise in their domains of interest by not treating them uniformly as they had the same amount of knowledge…&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/sharedlinks/~4/pjiYegrPKDU" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://turker.tumblr.com/post/112138628</guid>
         <pubDate>Sat, 23 May 2009 19:55:33 -0700</pubDate>
      <feedburner:origLink>http://turker.tumblr.com/post/112138628</feedburner:origLink></item>
   </channel>
</rss><!-- fe5.pipes.re3.yahoo.com uncompressed/chunked Sat Nov 21 20:10:19 PST 2009 -->
