<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>silk and spinach</title>
	
	<link>http://silkandspinach.net</link>
	<description>development, by example</description>
	<lastBuildDate>Tue, 30 Jun 2009 16:34:06 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
		<url>http://www.gravatar.com/blavatar/3cce8f767b2351ad81c632bba4846f34?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>silk and spinach</title>
		<link>http://silkandspinach.net</link>
	</image>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/SilkAndSpinach" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>“refactoring in ruby” is available to buy!</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/8W2mp_E2M14/</link>
		<comments>http://silkandspinach.net/2009/06/18/refactoring-in-ruby-is-available-to-buy/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 20:01:39 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=987</guid>
		<description><![CDATA[The book I&#8217;ve been writing with Bill Wake for almost 2 years is now available on Safari Rough Cuts: Refactoring in Ruby!  This is a draft we completed a couple of months ago; we&#8217;ve since completed another round of edits, and we&#8217;re beginning to prepare for production now.  Woot!
(Our original working title was [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=987&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The book I&#8217;ve been writing with Bill Wake for almost 2 years is now available on Safari Rough Cuts: <a href="http://www.informit.com/store/product.aspx?isbn=0321647920" target="blank">Refactoring in Ruby</a>!  This is a draft we completed a couple of months ago; we&#8217;ve since completed another round of edits, and we&#8217;re beginning to prepare for production now.  Woot!</p>
<p>(Our original working title was <em>Ruby Refactoring Workbook</em>, but apparently that kind of title was likely to limit sales.)</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/987/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/987/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/987/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/987/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/987/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/987/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/987/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/987/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/987/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/987/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=987&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=8W2mp_E2M14:kc44FQU367Q:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=8W2mp_E2M14:kc44FQU367Q:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=8W2mp_E2M14:kc44FQU367Q:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=8W2mp_E2M14:kc44FQU367Q:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=8W2mp_E2M14:kc44FQU367Q:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/8W2mp_E2M14" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/06/18/refactoring-in-ruby-is-available-to-buy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/06/18/refactoring-in-ruby-is-available-to-buy/</feedburner:origLink></item>
		<item>
		<title>reek mailing list</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/r47F5PB3WVU/</link>
		<comments>http://silkandspinach.net/2009/06/16/reek-mailing-list/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 19:56:35 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[reek]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=984</guid>
		<description><![CDATA[Discussion about Reek seems to be popping up all over the place at the moment, so I&#8217;ve created a Google group where problems, ideas and suggestions can be shared in one place. I&#8217;ll be making release announcements there and seeking feedback from you on my ideas for Reek&#8217;s future.
So if you&#8217;re using Reek, hop over [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=984&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Discussion about <a href="http://wiki.github.com/kevinrutherford/reek" target="blank">Reek</a> seems to be popping up all over the place at the moment, so I&#8217;ve created a Google group where problems, ideas and suggestions can be shared in one place. I&#8217;ll be making release announcements there and seeking feedback from you on my ideas for Reek&#8217;s future.</p>
<p>So if you&#8217;re using Reek, hop over to <a href="http://groups.google.com/group/ruby-reek" target="blank">http://groups.google.com/group/ruby-reek</a> and let&#8217;s get the ball rolling.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/984/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/984/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/984/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/984/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/984/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/984/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/984/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/984/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/984/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/984/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=984&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=r47F5PB3WVU:oyOUDnuNmx0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=r47F5PB3WVU:oyOUDnuNmx0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=r47F5PB3WVU:oyOUDnuNmx0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=r47F5PB3WVU:oyOUDnuNmx0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=r47F5PB3WVU:oyOUDnuNmx0:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/r47F5PB3WVU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/06/16/reek-mailing-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/06/16/reek-mailing-list/</feedburner:origLink></item>
		<item>
		<title>initial observations on kanban introduction</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/do_c9EJhN7Y/</link>
		<comments>http://silkandspinach.net/2009/06/05/initial-observations-on-kanban-introduction/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 14:40:54 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[value streams]]></category>
		<category><![CDATA[kanban]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=978</guid>
		<description><![CDATA[One of the teams I coach decided this week to adopt kanban-style limits on the WIP at each part of their value stream. It&#8217;s much too early to tell how beneficial this will prove; the transition, though, showed up a few points of interest:

 In order to set WIP limits we had to map the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=978&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>One of the teams I coach decided this week to adopt kanban-style limits on the WIP at each part of their value stream. It&#8217;s much too early to tell how beneficial this will prove; the transition, though, showed up a few points of interest:</p>
<ul>
<li> In order to set WIP limits we had to map the company&#8217;s value stream more completely. In retrospect, the previous fuzzy understanding of the value stream had been one cause of the bottlenecks towards the customer end of the process. Kanban was the catalyst to fixing this, but otherwise unrelated.
<li> Re-mapping the value stream temporarily focussed everyone on clearing some inventory, because a couple of WIP piles were initially bigger than the WIP limits we had all agreed.
<li> We quickly discovered that some of the existing inventory was caused by cards only having customer value in batches. Cards had been held up in huge piles at the &#8220;Beta&#8221; and &#8220;UAT&#8221; stages, because they didn&#8217;t represent stand-alone demonstratable user value.
<li> The introduction of WIP limits helped everyone to realise that the cards had been representing engineering tasks rather than customer value. So either the WIP limits had to be multiplied by the number of engineering tasks per user story, or future cards had to change and <em>become</em> user stories.
<li> The introduction of WIP limits also served to focus everyone&#8217;s attention on the whole value stream. Previously the developers had been throwing cards &#8220;over the wall&#8221; into &#8220;Beta&#8221; and &#8220;UAT&#8221; and then forgetting about them. WIP limits quickly encouraged the developers to address bottlenecks in all areas.
<li> Some of the existing value stream stages turned out to be buffers for others; and at least two of these buffers were &#8220;discovered&#8221; during the mapping exercise. We set low WIP limits on these buffers, to help squash the &#8220;over the wall&#8221; mentality.
</ul>
<p>No doubt WIP limits will throw up other subtle side-effects as the next month or so unfolds. Interesting times ahead&#8230;</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/978/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/978/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/978/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/978/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/978/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/978/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/978/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/978/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/978/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/978/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=978&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=do_c9EJhN7Y:tOC1rOJ33Pk:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=do_c9EJhN7Y:tOC1rOJ33Pk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=do_c9EJhN7Y:tOC1rOJ33Pk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=do_c9EJhN7Y:tOC1rOJ33Pk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=do_c9EJhN7Y:tOC1rOJ33Pk:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/do_c9EJhN7Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/06/05/initial-observations-on-kanban-introduction/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/06/05/initial-observations-on-kanban-introduction/</feedburner:origLink></item>
		<item>
		<title>discussion on TDD and code analysis tools</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/B860P3ZQ41g/</link>
		<comments>http://silkandspinach.net/2009/06/01/discussion-on-tdd-and-code-analysis-tools/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 08:08:15 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[quality]]></category>
		<category><![CDATA[reek]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=975</guid>
		<description><![CDATA[During the last few weeks I&#8217;ve been participating in an email discussion about the relationship between static analysis tools (such as Reek) and TDD. The discussion was instigated by Pat Eyler, and he has now organised and posted the results on his On-Ruby blog.
To help me get an initial handle on the topic, I found [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=975&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>During the last few weeks I&#8217;ve been participating in an email discussion about the relationship between static analysis tools (such as <a href="http://wiki.github.com/kevinrutherford/reek" target="blank">Reek</a>) and TDD. The discussion was instigated by Pat Eyler, and he has now organised and <a href="http://on-ruby.blogspot.com/2009/05/questions-five-ways-static-code.html" target="blank">posted the results on his On-Ruby blog</a>.</p>
<p>To help me get an initial handle on the topic, I found it extremely useful to list the main areas of discomfort I feel when using Reek in my own work. Then for each of these (there were two) I constructed conflict clouds to get a balanced view of the problem. I don&#8217;t have the clouds to hand now, but you can read the results in Pat&#8217;s article. I&#8217;ll definitely be using that technique again, because it very quickly helped me to organise my thoughts.  (Note to self: throw <strong>nothing</strong> away.)</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/975/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/975/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/975/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/975/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/975/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=975&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=B860P3ZQ41g:sFXRHD_HTCU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=B860P3ZQ41g:sFXRHD_HTCU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=B860P3ZQ41g:sFXRHD_HTCU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=B860P3ZQ41g:sFXRHD_HTCU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=B860P3ZQ41g:sFXRHD_HTCU:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/B860P3ZQ41g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/06/01/discussion-on-tdd-and-code-analysis-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/06/01/discussion-on-tdd-and-code-analysis-tools/</feedburner:origLink></item>
		<item>
		<title>crap4r</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/t9-70r84yLg/</link>
		<comments>http://silkandspinach.net/2009/05/22/crap4r/#comments</comments>
		<pubDate>Fri, 22 May 2009 13:38:34 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[quality]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[metrics]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=971</guid>
		<description><![CDATA[Inspired by Uncle Bob&#8217;s use of crap4j, and egged on somewhat by various members of the Twitterverse, Marty Andrews and I have spiked crap4r on Github. This version looks for Rspec examples in all files called spec/**/*_spec.rb; then it runs them using Rcov and calculates the CRAP metric using code from Roodi. Very neat.
It&#8217;s all [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=971&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Inspired by Uncle Bob&#8217;s <a href="http://blog.objectmentor.com/articles/2009/05/20/clean-code-and-battle-scarred-architecture" target="blank">use</a> of <a href="http://www.crap4j.org/" target="blank">crap4j</a>, and egged on somewhat by various members of the Twitterverse, <a href="http://blog.martyandrews.net/" target="blank">Marty Andrews</a> and I have spiked crap4r on Github. This version looks for Rspec examples in all files called <code>spec/**/*_spec.rb</code>; then it runs them using Rcov and calculates the CRAP metric using code from Roodi. Very neat.</p>
<p>It&#8217;s all a bit scrappy and difficult to use right now, but we&#8217;ve proved the concept, and over the next few weeks we&#8217;ll get it licked into shape and (hopefully) published as a gem.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/971/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=971&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=t9-70r84yLg:PVT3Y2ti5-g:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=t9-70r84yLg:PVT3Y2ti5-g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=t9-70r84yLg:PVT3Y2ti5-g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=t9-70r84yLg:PVT3Y2ti5-g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=t9-70r84yLg:PVT3Y2ti5-g:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/t9-70r84yLg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/05/22/crap4r/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/05/22/crap4r/</feedburner:origLink></item>
		<item>
		<title>i’ve moved my code</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/s66xz9qWbCI/</link>
		<comments>http://silkandspinach.net/2009/05/21/ive-moved-my-code/#comments</comments>
		<pubDate>Thu, 21 May 2009 13:53:54 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=966</guid>
		<description><![CDATA[My website, kevinrutherford.co.uk used to be implemented using the Drupal CMS. I did that because I wanted to host various code samples and suchlike, but in the end it was rubbish. So this week I killed it and replaced it with the much simpler 1-page site you can see there now. As a consequence I&#8217;ve [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=966&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>My website, <a href="http://www.kevinrutherford.co.uk" target="blank">kevinrutherford.co.uk</a> used to be implemented using the Drupal CMS. I did that because I wanted to host various code samples and suchlike, but in the end it was rubbish. So this week I killed it and replaced it with the much simpler 1-page site you can see there now. As a consequence I&#8217;ve moved all of my old code samples to repositories on <a href="http://github.com/kevinrutherford" target="blank">github</a>. All much easier for me to maintain.</p>
<p>The one downside to all this is that I no longer have somewhere to host my <a href="http://silkandspinach.net/2007/07/25/a-ruby-sparkline-showing-variation/" target="blank">simulation of coin tossing</a>. Well, that&#8217;s a shame, but not the end of the world. If you want to try it you can clone the <a href="http://github.com/kevinrutherford/coin-tossing/tree" target="blank">github repository</a>; or you can simply look at the three sample outputs I&#8217;ve posted <a href="http://www.kevinrutherford.co.uk/images/spark1.svg" target="blank">here</a>, <a href="http://www.kevinrutherford.co.uk/images/spark2.svg" target="blank">here</a> and <a href="http://www.kevinrutherford.co.uk/images/spark3.svg" target="blank">here</a>. Not a live simulation, I know, but possibly the next best thing for now.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/966/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/966/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/966/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/966/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/966/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/966/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/966/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/966/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/966/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/966/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=966&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=s66xz9qWbCI:r05Kk_uUQhQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=s66xz9qWbCI:r05Kk_uUQhQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=s66xz9qWbCI:r05Kk_uUQhQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=s66xz9qWbCI:r05Kk_uUQhQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=s66xz9qWbCI:r05Kk_uUQhQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/s66xz9qWbCI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/05/21/ive-moved-my-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/05/21/ive-moved-my-code/</feedburner:origLink></item>
		<item>
		<title>“Lean, Constraints, Action!” write-up</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/Wjg4K3Y78r0/</link>
		<comments>http://silkandspinach.net/2009/05/18/lean-constraints-action-write-up/#comments</comments>
		<pubDate>Mon, 18 May 2009 09:03:50 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[lean]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=956</guid>
		<description><![CDATA[Earlier this year Allan Kelly and I ran a workshop on agile/lean at Kingston University for the local BCS SPA group. Immo Hüneke, who invited us down there, has published an insightful write-up of the session, complete with photos (I&#8217;m the fat one in mid song).
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=956&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Earlier this year Allan Kelly and I ran a workshop on agile/lean at Kingston University for the local BCS SPA group. Immo Hüneke, who invited us down there, has published <a href="http://aspsp.blogspot.com/2009/05/24th-march-2009-theory-of-constraints.html" target="blank">an insightful write-up</a> of the session, complete with photos (I&#8217;m the fat one in mid song).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/956/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/956/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/956/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/956/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/956/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/956/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/956/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/956/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/956/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/956/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=956&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=Wjg4K3Y78r0:iJpCgtpXD7c:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=Wjg4K3Y78r0:iJpCgtpXD7c:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=Wjg4K3Y78r0:iJpCgtpXD7c:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=Wjg4K3Y78r0:iJpCgtpXD7c:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=Wjg4K3Y78r0:iJpCgtpXD7c:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/Wjg4K3Y78r0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/05/18/lean-constraints-action-write-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/05/18/lean-constraints-action-write-up/</feedburner:origLink></item>
		<item>
		<title>callbacks break hexagonal architectures</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/rd43m70kF4I/</link>
		<comments>http://silkandspinach.net/2009/03/16/callbacks-break-hexagonal-architectures/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 21:33:06 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[hexagonalarchitecture]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=953</guid>
		<description><![CDATA[I just figured out why callback style APIs are harder to test (and harder to deal with in general). It&#8217;s because they break one of the essential ingredients of a hexagonal architecture: the middle hexagon should be independent of the adapters. Here&#8217;s why&#8230;
In order to use a callback API, one or more of our application [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=953&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I just figured out why callback style APIs are harder to test (and harder to deal with in general). It&#8217;s because they break one of the essential ingredients of a hexagonal architecture: <a href="http://silkandspinach.net/2005/03/22/the-middle-hexagon-should-be-independent-of-the-adapters/">the middle hexagon should be independent of the adapters</a>. Here&#8217;s why&#8230;</p>
<p>In order to use a callback API, one or more of our application classes must implement the callback method(s), and must therefore conform to some abstraction defined by the API&#8217;s provider. So our classes must depend on the API. Which means that the API can&#8217;t be easily mocked or stubbed. We have to treat our callback objects as being part of the adapter for that API, and test the rest of the application by mocking or stubbing them.</p>
<p>In fact, now I&#8217;ve written it down it&#8217;s trivially obvious, and hardly worth saying.</p>
<p>As you were. </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/953/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/953/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/953/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/953/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/953/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/953/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/953/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/953/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/953/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/953/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=953&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=rd43m70kF4I:kjK1TpErXxI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=rd43m70kF4I:kjK1TpErXxI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=rd43m70kF4I:kjK1TpErXxI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=rd43m70kF4I:kjK1TpErXxI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=rd43m70kF4I:kjK1TpErXxI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/rd43m70kF4I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/03/16/callbacks-break-hexagonal-architectures/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/03/16/callbacks-break-hexagonal-architectures/</feedburner:origLink></item>
		<item>
		<title>reek included in metric_fu</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/Hh2H5PrRluQ/</link>
		<comments>http://silkandspinach.net/2009/02/08/reek-included-in-metric_fu/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 13:34:54 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[quality]]></category>
		<category><![CDATA[reek]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=950</guid>
		<description><![CDATA[I&#8217;ve just noticed that Reek is now one of the tools whose code quality reports are bundled in metric_fu &#8212; cool!
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=950&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve just noticed that <a href="http://wiki.github.com/kevinrutherford/reek">Reek</a> is now one of the tools whose code quality reports are bundled in <a href="http://jakescruggs.blogspot.com/2009/01/metric-fu-now-includes-flay-roodi-and.html" target="blank">metric_fu</a> &#8212; cool!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/950/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/950/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/950/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/950/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/950/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=950&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=Hh2H5PrRluQ:E7sIXrtCl_4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=Hh2H5PrRluQ:E7sIXrtCl_4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=Hh2H5PrRluQ:E7sIXrtCl_4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=Hh2H5PrRluQ:E7sIXrtCl_4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=Hh2H5PrRluQ:E7sIXrtCl_4:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/Hh2H5PrRluQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/02/08/reek-included-in-metric_fu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/02/08/reek-included-in-metric_fu/</feedburner:origLink></item>
		<item>
		<title>reek wiki</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/yd9pq0q069A/</link>
		<comments>http://silkandspinach.net/2009/02/01/reek-wiki/#comments</comments>
		<pubDate>Sun, 01 Feb 2009 22:04:11 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[reek]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=944</guid>
		<description><![CDATA[As I prepare to release version 1.0.0 of reek, I&#8217;ve begun gradually re-organizing all of reek&#8217;s online presence. So here&#8217;s where to look for anything reek-related in future:

 Gem download: Rubyforge
 User documentation: Github
 API rdoc: Rubyforge
 To clone the latest source code: Github
 Defect reports and feature requests: Lighthouse

For anything else, send me an [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=944&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As I prepare to release version 1.0.0 of reek, I&#8217;ve begun gradually re-organizing all of reek&#8217;s online presence. So here&#8217;s where to look for anything reek-related in future:</p>
<ul>
<li> Gem download: <a href="http://rubyforge.org/projects/reek">Rubyforge</a>
<li> User documentation: <a href="http://wiki.github.com/kevinrutherford/reek">Github</a>
<li> API rdoc: <a href="http://reek.rubyforge.org/rdoc/">Rubyforge</a>
<li> To clone the latest source code: <a href="//github.com/kevinrutherford/reek.git">Github</a>
<li> Defect reports and feature requests: <a href="http://kevinrutherford.lighthouseapp.com/projects/24596-reek/overview">Lighthouse</a>
</ul>
<p>For anything else, send me an email :)</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/944/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/944/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/944/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/944/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/944/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=944&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=yd9pq0q069A:YPxXlSEHQgk:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=yd9pq0q069A:YPxXlSEHQgk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=yd9pq0q069A:YPxXlSEHQgk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=yd9pq0q069A:YPxXlSEHQgk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=yd9pq0q069A:YPxXlSEHQgk:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/yd9pq0q069A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/02/01/reek-wiki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/02/01/reek-wiki/</feedburner:origLink></item>
		<item>
		<title>the “anchor adapter”</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/tpAKA3QwUx0/</link>
		<comments>http://silkandspinach.net/2009/01/22/the-anchor-adapter/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 21:59:01 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[hexagonalarchitecture]]></category>
		<category><![CDATA[reek]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=935</guid>
		<description><![CDATA[Warning: academic theorizing and hypothesizing follow. Oh, and half-baked pontification.
I just finished refactoring reek to drive in a major new chunk of functionality (configuration files) which I&#8217;ll release soon, when I&#8217;ve had time for some thorough testing.
The refactoring needed to accommodate the change was huge, occupying much of my free time over the course of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=935&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>Warning:</strong> academic theorizing and hypothesizing follow. Oh, and half-baked pontification.</p>
<p>I just finished refactoring <a href="http://reek.rubyforge.org">reek</a> to drive in a major new chunk of functionality (configuration files) which I&#8217;ll release soon, when I&#8217;ve had time for some thorough testing.</p>
<p>The refactoring needed to accommodate the change was huge, occupying much of my free time over the course of two months. Pretty much the whole of the tool&#8217;s original architecture has been revised. Why so big and so complex? Because the original code relied heavily on constants and class methods; they helped me get the early versions written quickly, but they represented a significant barrier to long-term flexibility. I&#8217;ve been wondering why that should be; why do constants and class methods stand in the way of adaptable test-driven code?</p>
<p>I think the answer lies in viewing the application through the lens of <a href="http://silkandspinach.net/2005/11/28/gravity-and-software-adaptability/">Hexagonal Architecture</a>. Let me explain&#8230;</p>
<p>It seems to me that constants, global variables, classes, class methods, etc all live in a space that&#8217;s &#8220;anchored&#8221; to the runtime environment, which is itself a singleton. Anything anchored to that singleton is going to hinder the independence and isolatedness of unit tests, and also reduce the application&#8217;s flexibility in well-known ways. So far so standard. Now, suppose we model the singleton as a notional point that is external to the application. Hexagonal Architecture tells us we must access the singleton via an <em>Adapter</em> &#8212; in this case, an Adapter provided by the programming language and/or runtime. I&#8217;ll refer to the singleton as the application&#8217;s Anchor, and therefore claim that it is accessed through language features in an Anchor Adapter.</p>
<p>Now, I believe that <a href="http://silkandspinach.net/2005/03/22/the-middle-hexagon-should-be-independent-of-the-adapters/">the Domain Middle should not depend directly on Adapters</a>. So any code that makes direct use of the Anchor Adapter must therefore be considered outside of the Domain Middle, and hence part of an Adapter &#8212; and hence also inherently outside the space where unit tests live comfortably.</p>
<p>Which is why constants and class methods add friction to unit testing.</p>
<p>Or rather: This model fits nicely with my penchant for Hexagonal Architecture, and lets me justify my unease at testing in and around class methods. And probably adds nothing to our understanding of software development. </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/935/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/935/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/935/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/935/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/935/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/935/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/935/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/935/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/935/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/935/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=935&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=tpAKA3QwUx0:G6d49QWe0w4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=tpAKA3QwUx0:G6d49QWe0w4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=tpAKA3QwUx0:G6d49QWe0w4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=tpAKA3QwUx0:G6d49QWe0w4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=tpAKA3QwUx0:G6d49QWe0w4:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/tpAKA3QwUx0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/01/22/the-anchor-adapter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/01/22/the-anchor-adapter/</feedburner:origLink></item>
		<item>
		<title>a different use for CruiseControl</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/_83c5dy2wUU/</link>
		<comments>http://silkandspinach.net/2009/01/18/a-different-use-for-cruisecontrol/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 20:01:21 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[reek]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=922</guid>
		<description><![CDATA[Until recently I had always thought of CruiseControl as a backstop, something that would check for silly mistakes during commit, or certain classes of environmental dependency in build, tests or deployment. And then, during December, two things happened to change that view; and now I use CruiseControl quite differently.
As you know, I&#8217;ve been developing this [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=922&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Until recently I had always thought of <a href="http://cruisecontrolrb.thoughtworks.com/" target="blank">CruiseControl</a> as a backstop, something that would check for silly mistakes during commit, or certain classes of environmental dependency in build, tests or deployment. And then, during December, two things happened to change that view; and now I use CruiseControl quite differently.</p>
<p>As you know, I&#8217;ve been developing this tool called <a href="http://wiki.github.com/kevinrutherford/reek" target="blank">reek</a>, which looks for code smells in Ruby source files and prints warnings about what it finds. reek has been developed largely test-first, and now has a couple of hundred tests. The first thing that happened was that I began to be irritated by the huge runtime of the full test suite &#8212; 15 seconds is a long time when you&#8217;re sitting waiting for feedback, and I noticed I would sometimes dip off into the browser while waiting for green (or red). I needed the coverage, but without the waiting around.</p>
<p>The second thing that happened was that during one of those interminable 15-second waits I read about the <a href="http://silkandspinach.net/2008/11/27/the-saff-squeeze/">Saff squeeze</a>. Then I tried it, enjoyed it, and found that the tests it produced were significantly different from those I wrote &#8220;myself&#8221;.</p>
<p>So now I use CruiseControl differently. I began by splitting the tests into two suites: <em>fast</em> and <em>slow</em>. The fast tests comprise over 90% of the total, and yet run in under 1 second; I use them as normal during my development cycle &#8212; no more waiting around! The slow tests consist of runs of the whole tool on known source code; there are only a dozen of them, but they take 14 seconds to run. (You might call them &#8220;unit tests&#8221; and &#8220;integration tests&#8221;, and indeed that&#8217;s what the two suites comprise right now. But the key attribute is their speed, not their scope.)</p>
<p>So now the slow tests only get run by CruiseControl, not by me (it does run the fast tests too, btw). I&#8217;ve delegated the 14 seconds of waiting, and now my development state of flow is much easier to maintain. And if the slow tests fail, it means I have one or more missing fast tests &#8212; so I whip out the Saff squeeze to go from one to the other. I&#8217;m using CruiseControl as a batch test runner, and the Saff squeeze as a mechanical tool to help generate a missing fast test from a failing slow test. (The process of squeezing also tends to tell me something quite interesting about my code. More on that another time.)</p>
<p>I&#8217;m sure this use of CruiseControl isn&#8217;t new or original, but I&#8217;m pleased with how well it works. Let me know if you try something similar?</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/922/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/922/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/922/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/922/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/922/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/922/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/922/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/922/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/922/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/922/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=922&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=_83c5dy2wUU:2isIuIMhhn8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=_83c5dy2wUU:2isIuIMhhn8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=_83c5dy2wUU:2isIuIMhhn8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=_83c5dy2wUU:2isIuIMhhn8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=_83c5dy2wUU:2isIuIMhhn8:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/_83c5dy2wUU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/01/18/a-different-use-for-cruisecontrol/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/01/18/a-different-use-for-cruisecontrol/</feedburner:origLink></item>
		<item>
		<title>rocks into gold</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/rE_LkWyuPTI/</link>
		<comments>http://silkandspinach.net/2009/01/18/rocks-into-gold/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 19:07:46 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[toc]]></category>
		<category><![CDATA[theory of constraints]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=923</guid>
		<description><![CDATA[My very talented friend Clarke Ching has self-published his second novel Rocks into Gold (his first, Rolling Rocks Downhill, is due out later this year).
Rocks into Gold is a &#8220;parable for software developers who want to survive &#8212; and then thrive &#8212; through the Credit Crunch&#8221;. If you&#8217;re a subscriber to this blog you&#8217;ll probably [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=923&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>My very talented friend Clarke Ching has self-published his second novel <a href="http://www.rocksintogold.com/" target="blank">Rocks into Gold</a> (his first, <em>Rolling Rocks Downhill</em>, is due out later this year).</p>
<p><em>Rocks into Gold</em> is a &#8220;parable for software developers who want to survive &#8212; and then thrive &#8212; through the Credit Crunch&#8221;. If you&#8217;re a subscriber to this blog you&#8217;ll probably know the book&#8217;s main message already; but read it anyway, because you probably also know someone who&#8217;s project, or job, or organisation, might just benefit from Clarke&#8217;s excellent re-telling &#8212; buy them a copy.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/923/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/923/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/923/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/923/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/923/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/923/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/923/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/923/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/923/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/923/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=923&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=rE_LkWyuPTI:TRUuF8T0W-g:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=rE_LkWyuPTI:TRUuF8T0W-g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=rE_LkWyuPTI:TRUuF8T0W-g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=rE_LkWyuPTI:TRUuF8T0W-g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=rE_LkWyuPTI:TRUuF8T0W-g:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/rE_LkWyuPTI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/01/18/rocks-into-gold/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/01/18/rocks-into-gold/</feedburner:origLink></item>
		<item>
		<title>value-added activity (ten things)</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/r8VDJAs9waY/</link>
		<comments>http://silkandspinach.net/2009/01/06/value-added-activity-ten-things/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 14:02:11 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[theory of constraints]]></category>
		<category><![CDATA[toc]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=918</guid>
		<description><![CDATA[In your current job, can you identify:

 Five regular activities that contribute value towards your organisation&#8217;s goal?
 Five regular activities that do not contribute value towards the goal?

       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=918&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>In your current job, can you identify:</p>
<ol>
<li> Five regular activities that contribute value towards your organisation&#8217;s goal?
<li> Five regular activities that <strong>do not</strong> contribute value towards the goal?
</ol>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/918/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/918/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/918/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/918/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/918/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/918/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/918/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/918/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/918/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/918/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=918&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=r8VDJAs9waY:5YdBCz2_qIk:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=r8VDJAs9waY:5YdBCz2_qIk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=r8VDJAs9waY:5YdBCz2_qIk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=r8VDJAs9waY:5YdBCz2_qIk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=r8VDJAs9waY:5YdBCz2_qIk:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/r8VDJAs9waY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/01/06/value-added-activity-ten-things/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/01/06/value-added-activity-ten-things/</feedburner:origLink></item>
		<item>
		<title>too much TemplateMethod</title>
		<link>http://feedproxy.google.com/~r/SilkAndSpinach/~3/Cc4mGlo7aP4/</link>
		<comments>http://silkandspinach.net/2009/01/04/too-much-templatemethod/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 11:20:15 +0000</pubDate>
		<dc:creator>Kevin Rutherford</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[reek]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://silkandspinach.net/?p=915</guid>
		<description><![CDATA[I&#8217;ve been refactoring a lot during the festive break, and I&#8217;ve noticed that in many cases it was more difficult than I would have liked. Today I think I figured out the reason for that: I use the TemplateMethod pattern too much.
When I see a duplicated algorithm, it seems that my natural tendency is to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=915&subd=silkandspinach&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve been refactoring a lot during the festive break, and I&#8217;ve noticed that in many cases it was more difficult than I would have liked. Today I think I figured out the reason for that: I use the TemplateMethod pattern too much.</p>
<p>When I see a duplicated algorithm, it seems that my natural tendency is to push up the skeleton into a superclass. This creates an inheritance relationship within the algorithm, which in turn makes it harder to change. Later, when I do need to change the algorithm, I have to change the superclass and all of the subclasses at the same time. For example, one particular superclass in <a href="http://reek.rubyforge.org/" target="blank">reek</a> contained three or four template methods, which made the subclasses look quite odd; and each little complex of template-plus-overrides significantly hampered design change in each of the others.</p>
<p>Looking back over my programming career I see that I&#8217;ve always had this tendency &#8212; I can see it in my old C++, Java and Ruby code. I wonder why? Is it the cost of extra classes, or my mathematical background, or coding habits ingrained before the rise of object-oriented languages? Who knows (and who cares).</p>
<p>So, note to self: Break out State/Strategy objects (and in Ruby this includes Procs) instead of always relying on TemplateMethod.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/silkandspinach.wordpress.com/915/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/silkandspinach.wordpress.com/915/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/silkandspinach.wordpress.com/915/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/silkandspinach.wordpress.com/915/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/silkandspinach.wordpress.com/915/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/silkandspinach.wordpress.com/915/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/silkandspinach.wordpress.com/915/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/silkandspinach.wordpress.com/915/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/silkandspinach.wordpress.com/915/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/silkandspinach.wordpress.com/915/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=silkandspinach.net&blog=1064186&post=915&subd=silkandspinach&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=Cc4mGlo7aP4:S2Eh9hOnK_s:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=Cc4mGlo7aP4:S2Eh9hOnK_s:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=Cc4mGlo7aP4:S2Eh9hOnK_s:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SilkAndSpinach?a=Cc4mGlo7aP4:S2Eh9hOnK_s:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SilkAndSpinach?i=Cc4mGlo7aP4:S2Eh9hOnK_s:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SilkAndSpinach/~4/Cc4mGlo7aP4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://silkandspinach.net/2009/01/04/too-much-templatemethod/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9c39ead2d025bde14f3f39b20ff7d113?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">kevinrutherford</media:title>
		</media:content>
	<feedburner:origLink>http://silkandspinach.net/2009/01/04/too-much-templatemethod/</feedburner:origLink></item>
	</channel>
</rss>
