<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Andy Palmer &#187; Uncategorized</title>
	<atom:link href="http://andypalmer.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://andypalmer.com</link>
	<description>Views on software, technology, consulting and business process</description>
	<lastBuildDate>Sat, 14 Aug 2010 13:09:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>I&#8217;ll show you mine if you show me yours</title>
		<link>http://andypalmer.com/2010/08/ill-show-you-mine-if-you-show-me-yours/</link>
		<comments>http://andypalmer.com/2010/08/ill-show-you-mine-if-you-show-me-yours/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 13:09:20 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://andypalmer.com/?p=251</guid>
		<description><![CDATA[
Bob Marshall posted on Twitter:
I want to get rid of the habitual naming of methods, like #agile #kanban #lean
I replied with:
@flowchainsensei sounds like a revolutionary idea. I&#8217;m in. now all we need is a name  
and he replied:
@AndyPalmer I want &#8230; but seems sadly impractical or contrary to the way humans work
In 1956, George [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 1em;"><a href="http://www.flickr.com/photos/nicksherman/2256182660/" onclick="pageTracker._trackPageview('/outgoing/www.flickr.com/photos/nicksherman/2256182660/?referer=');"><img src="http://farm3.static.flickr.com/2216/2256182660_e66a82e5ec_d.jpg" title="Mystery Boxes by Nick Sherman"/></a></div>
<p><a href="http://twitter.com/flowchainsensei" onclick="pageTracker._trackPageview('/outgoing/twitter.com/flowchainsensei?referer=');">Bob Marshall</a> posted on Twitter:
<div class="tweet"><a href="http://twitter.com/flowchainsensei/status/21137679814" onclick="pageTracker._trackPageview('/outgoing/twitter.com/flowchainsensei/status/21137679814?referer=');">I want to get rid of the habitual naming of methods, like #agile #kanban #lean</a></div>
<p>I replied with:</p>
<div class="tweet"><a href="http://twitter.com/AndyPalmer/status/21137916324" onclick="pageTracker._trackPageview('/outgoing/twitter.com/AndyPalmer/status/21137916324?referer=');">@flowchainsensei sounds like a revolutionary idea. I&#8217;m in. now all we need is a name <img src='http://andypalmer.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </a></div>
<p>and he replied:
<div class="tweet"><a href="http://twitter.com/flowchainsensei/status/21138238380" onclick="pageTracker._trackPageview('/outgoing/twitter.com/flowchainsensei/status/21138238380?referer=');">@AndyPalmer I want &#8230; but seems sadly impractical or contrary to the way humans work</a></div>
<p>In 1956, George A. Miller wrote a paper arguing that the conscious mind, the part that contains our inner voice and that does the reasoning processes, can handle <a href="http://en.wikipedia.org/wiki/The_Magical_Number_Seven,_Plus_or_Minus_Two" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/The_Magical_Number_Seven_Plus_or_Minus_Two?referer=');">7 ± 2 items</a> at a time. My view is that, in order to be able to function within these constraints, we learn to group similar things together so that they take up less processing space.</p>
<p>For example, if I want to remember a six digit number, it might be easier for me to remember it as 3 two digit numbers than as 6 individual numbers. Very familiar numbers, such as the phone number of my parents only take up one space.</p>
<p>It&#8217;s like I&#8217;m carrying a fixed number of boxes, all of which are the same size, but in which I can store things that (in my own mind) are grouped together.</p>
<p>One thing I&#8217;ve noticed though, is that I begin to speak of the ideas inside in terms of the labels that I&#8217;ve added to the boxes. In terms of hard facts, like numbers or addresses, this doesn&#8217;t really make much difference, however, when the ideas and opinions in the boxes are much more subjective, this can lead to confusion and disagreements (or sometimes, vigourous agreement <img src='http://andypalmer.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<blockquote>
<p>For example, imagine that I am moving house and packing my belongings into boxes. In one box, I pack the contents of the fridge and because the fridge is in the kitchen, I label the box &#8220;Kitchen Stuff&#8221;.</p>
<p>I say to the removals people, &#8220;The box labelled &#8216;Kitchen Stuff&#8217; has to be moved quickly. It&#8217;s very important that this box is moved as fast as possible&#8221;. </p>
<p>The removals people reply &#8220;You&#8217;re insane. Boxes labelled &#8216;Kitchen Stuff&#8217; have to be moved carefully, and that means that we have to take it slow&#8221;</p>
<p>&#8220;No,&#8221; I say, &#8220;this box has to be moved quickly. If you move it slowly the contents will be ruined&#8221;</p>
<p>&#8220;No,&#8221; they say, &#8220;if we move it quickly, the contents will break. We must move it slowly and carefully&#8221;</p>
<p>I open the box and show them the contents and they understand. &#8220;Oh, it&#8217;s fridge stuff. Why didn&#8217;t you say so? When you said &#8216;Kitchen Stuff&#8217; we assumed that you meant plates and glasses&#8221;</p>
</blockquote>
<p>When we put labels on things in the boxes, it becomes much quicker for us to talk in terms of the labels. However, although we may have boxes labelled in a similar way, that does not mean that the contents are the same.</p>
<p>The box in my mind labelled &#8220;Scrum&#8221; may match a great deal of the contents of the box that you have labelled &#8220;XP&#8221; or that someone else has labelled &#8220;Lean&#8221;. The good thing about these boxes in my mind is that I can have an object appear in more than one of them. I might even place these three boxes into another box labelled &#8220;Common sense&#8221; (although I strongly suspect that the box with that particular label is guaranteed to be vastly different between every person)</p>
<p>As with my conversation with the removals men, I can get into a heated discussion with someone if we&#8217;re talking in terms of the labels on our boxes. </p>
<blockquote><p>&#8220;XP is this, this and this&#8221;.</p>
<p> &#8220;No, that&#8217;s Scrum!&#8221;</p>
</blockquote>
<p>The only way we can truly reach an understanding is if we recognise that we&#8217;re arguing over a label, and open our boxes to compare contents.</p>
<p>Sometimes, I even forget what I have stored in my boxes. I might only be talking about <em>my memory of the things</em> that <em>I think I stored</em> in the box. Opening the box and reviewing the contents, especially when someone else is doing the same, can help me to find new ways of categorising the ideas within. We might even find a common ground and start a revolution.</p>
<p>So, next time we don&#8217;t see eye to eye about the memories of the contents of our boxes, remind me &#8220;I&#8217;ll show you mine, if you show me yours&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://andypalmer.com/2010/08/ill-show-you-mine-if-you-show-me-yours/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>That&#8217;s just the way we do it here</title>
		<link>http://andypalmer.com/2010/03/thats-just-the-way-we-do-it-here/</link>
		<comments>http://andypalmer.com/2010/03/thats-just-the-way-we-do-it-here/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 17:18:23 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://andypalmer.com/?p=233</guid>
		<description><![CDATA[
There is a story about a cage of monkeys. In the middle of the cage is a ladder and at the top of the ladder is a banana.
One of the monkeys climbs the ladder to get the banana, but as he reaches for it, the entire cage becomes electrified and all the monkeys get a [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 1em;"><a href="http://www.flickr.com/photos/tadolo/3386035120/" onclick="pageTracker._trackPageview('/outgoing/www.flickr.com/photos/tadolo/3386035120/?referer=');"><img src="http://farm4.static.flickr.com/3540/3386035120_96b96efd47_m.jpg" title="When monkeys go bananas by tadolo"/></a></div>
<p>There is a story about a cage of monkeys. In the middle of the cage is a ladder and at the top of the ladder is a banana.<br />
One of the monkeys climbs the ladder to get the banana, but as he reaches for it, the entire cage becomes electrified and all the monkeys get a sharp shock.<br />
Another monkey climbs the ladder, with the same result.<br />
After a few attempts, the monkeys learn that climbing the ladder means everyone gets a shock, and they don&#8217;t try it again.</p>
<p>After a few days, one of the monkeys is replaced with a new monkey. This new monkey sees the banana and moves towards the ladder. The other monkeys, not wanting to be shocked, leap on him and beat him up. The new monkey attempts to go for the banana a few more times, before learning that going for the ladder means that the other monkeys will beat him up.</p>
<p>Over time, each of the original monkeys are replaced with new monkeys. Each new monkey learns the lesson that going for the ladder means getting beaten. Eventually, there are no monkeys who ever experienced the shocks. The electric shock equipment is then switched off. Still, no monkey ever climbs the ladder, for fear of being beaten up.</p>
<p>Unfortunately, monkeys are unable to ask &#8220;Why do you beat me up when I go for the banana?&#8221;, but if they could, the other monkeys would probably say &#8220;That&#8217;s just the way we do it here&#8221;.</p>
<p>Sometimes, our processes are based on a situation that no longer exists (like the inactive shock equipment). Sometimes, people we ask &#8220;Why do we do it this way?&#8221; won&#8217;t be able to provide an answer. Sometimes, we&#8217;ll try doing something different and we&#8217;ll get the banana and sometimes we&#8217;ll get a shock. Either way, we learn something.</p>
<p>I&#8217;m going to do something different today. Are you?</p>
<p><em>The monkey story is not mine, I think I came across it in an NLP book. There are <a href="http://google.com/search?q=monkey+bananas+electric+shock" onclick="pageTracker._trackPageview('/outgoing/google.com/search?q=monkey+bananas+electric+shock&amp;referer=');">plenty of examples on the web</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://andypalmer.com/2010/03/thats-just-the-way-we-do-it-here/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What do you keep in your Shu Box?</title>
		<link>http://andypalmer.com/2010/01/what-do-you-keep-in-your-shu-box/</link>
		<comments>http://andypalmer.com/2010/01/what-do-you-keep-in-your-shu-box/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 12:20:04 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://andypalmer.com/?p=217</guid>
		<description><![CDATA[Alistair Cockburn uses the term Shu-Ha-Ri regularly to explain different levels of learning.
The literal translation is approximately Learn/Follow(Shu), Detach(Ha), Transcend(Ri). A number of people I&#8217;ve discussed this with equate these levels to the Dreyfus model of skill acquisition. In fact, the Wikipedia article on Dreyfus links back to Shu-Ha-Ri.
In my opinion, this is doing an [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://alistair.cockburn.us" onclick="pageTracker._trackPageview('/outgoing/alistair.cockburn.us?referer=');">Alistair Cockburn</a> uses the term <a href="http://alistair.cockburn.us/Shu+Ha+Ri" onclick="pageTracker._trackPageview('/outgoing/alistair.cockburn.us/Shu+Ha+Ri?referer=');">Shu-Ha-Ri</a> regularly to explain different levels of learning.<br />
The literal translation is approximately Learn/Follow(Shu), Detach(Ha), Transcend(Ri). A number of people I&#8217;ve discussed this with equate these levels to the <a href="http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition?referer=');">Dreyfus model of skill acquisition</a>. In fact, the Wikipedia article on Dreyfus links back to Shu-Ha-Ri.<br />
In my opinion, this is doing an injustice to both models, and my slightly different interpretation follows.</p>
<h2>Driving an example</h2>
<p>Take, for example, learning to drive. As I learn to drive, I progress through the Dreyfus model, becoming a novice, then competent, then with a lot of practice, an expert. However, having only learned one way to drive, I would still consider myself to be in the Shu box.</p>
<h2>Riding my way to the top</h2>
<p>When I learn to ride a motorbike, I can take a number of similar practices from my car experience and apply them to the similar practices in the motorbike world, but I still need to be taught new practices (particularly around observation and hazard avoidance). After a suitable period of tuition, I am now competent in riding a motorbike. I would still consider myself to be a Shu level rider though.</p>
<h2>Mixing it up</h2>
<p>Now, while driving my car, I suddenly realise that the heightened observation and hazard avoidance techniques, essential while riding, are actually pretty useful while driving. I begin to blend the two skills together. I&#8217;m still doing it as taught, but I can pick the practices that are most useful from each and blend them to create something new. This is where I start to become Ha level, taking the most useful practices from a number of techniques and blending them to create something useful in a given context.</p>
<h2>Taking it to new heights</h2>
<p>Next, I learn to fly a plane, bringing with it new observational practices and new disciplines (e.g. pre-flight checks). Becoming competent here, I can blend some of the practices from flying back into my driving and riding and vice-versa.<br />
Soon I begin to notice a strange feeling. I&#8217;m doing all the right things in my practices, but there&#8217;s something that seems not quite right, something that could be made better. After some thinking, I identify the missing piece of context and synthesise an appropriate set of techniques for that situation. I have gone beyond the known contexts and identified a new situation, picked or synthesised the appropriate practices for that situation and resolved it. This is Ri level. Having identified this new context, I can teach it to my Shu level students.</p>
<h2>But mum, I don&#8217;t want to ride a bike</h2>
<p>Each of the situations described above are very relevant to me, but that is not to say that you have to ride a bike to progress to Ha or Ri in a car.<br />
Other practices and contexts can be learned on the race track, taking a 4&#215;4 course, rally driving or on a skid pan. Indeed, the beauty of Ha and Ri is that I may bring skills from a completely unrelated area (First Person Shooter, Knitting) and use them to improve my driving techniques.</p>
<h2>Softening it up a bit</h2>
<p>So, how can we apply this to software? There are a number of practices, techniques and methodologies (e.g. Kanban, Scrum, XP, Lean, Real Options). By the definition explained above, becoming in all of these makes me a Shu level practitioner in each of them.<br />
If I identify a practice from, say, Kanban, that is useful in a context in a Scrum environment, then blending two or more Shu practices takes me to Ha.<br />
When I come across a situation or context where there is no guidance (all of my Shu boxes are empty), then I need to create a new practice or technique. I use my knowledge of similar techniques from a number of methodologies and come up with something that fits the situation.</p>
<h2>In Shu-mmary (sorry, summary)</h2>
<p>In my interpretation of Shu-Ha-Ri, we have:</p>
<ul>
<li>Shu (Learn) &#8211; Practice driven. We learn the practices by rote and apply them without understanding of the context.<br />
<em>Shu practices are our tools, along with an instruction manual on how to use them in the situation they were created for. We can progress through Dreyfus model with each of our tools</em></li>
<li>Ha (Blend) &#8211; Context driven. Having learned a number of practices, and a number of contexts in which they are appropriate, we can pick or blend a number of different practices for any known context.<br />
<em>Ha practices are using our Shu tools in situations that weren&#8217;t described in their manuals</em></li>
<li>Ri (Transcend) &#8211; Dealing with unknown context / identifying new practices. Coming across a brand new situation, we are able to identify an appropriate way of handling the situation.<br />
<em>Ri practices are about creating new tools, either to handle a unique situation, or to handle an existing situation in a better way</em></li>
</ul>
<p>I find that separating the Dreyfus model from the Shu-Ha-Ri model allows me to become an expert with each of my Shu tools without feeling that I should be able to apply them to unusual situations.<br />
This is a useful way of thinking (to me at least). Rather than map Shu-Ha-Ri to the Dreyfus model, I choose to think of Shu-Ha-Ri as a skill in identifying contexts and tools.<br />
You might want to discuss this with me some more in the comments <img src='http://andypalmer.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://andypalmer.com/2010/01/what-do-you-keep-in-your-shu-box/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The Curious Case of the Missing Present</title>
		<link>http://andypalmer.com/2010/01/the-curious-case-of-the-missing-present/</link>
		<comments>http://andypalmer.com/2010/01/the-curious-case-of-the-missing-present/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 11:34:10 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://andypalmer.com/?p=212</guid>
		<description><![CDATA[Imagine, if you will, a Santa&#8217;s grotto in a magical department store. Fresh faced children, still glowing from the snowfall outside, line up to greet the jolly man.
Joy and laughter can be heard throughout the crowd. Parents breathe a sigh of relief that their children are behaving well.
The amazing thing about this particular grotto is [...]]]></description>
			<content:encoded><![CDATA[<p>Imagine, if you will, a Santa&#8217;s grotto in a magical department store. Fresh faced children, still glowing from the snowfall outside, line up to greet the jolly man.<br />
Joy and laughter can be heard throughout the crowd. Parents breathe a sigh of relief that their children are behaving well.<br />
The amazing thing about this particular grotto is that whatever you ask Santa for, you receive as you leave. That&#8217;s one of the wonderful things about magic.</p>
<p>The first boy runs up to Santa, jumps on his knee, looks into his big jolly eyes, and asks for a train set. As he jumps down to leave, the elves hand him a big box, and inside is a train set that is just perfect.</p>
<p>The next child, a young girl, runs up to Santa, jumps on his knee, looks up and asks in a sweet voice for an iPod. As she jumps down to leave, the elves hand her a small box, and inside is the latest and greatest iPod.</p>
<p>The next child, another young boy, walks slowly up to Santa, climbs onto his knee, looks up and says in a thoughtful voice &#8220;I&#8217;m really not sure what I want for Christmas&#8221;. Santa smiles at him, the boy gets down and the elves hand him a box.<br />
As the boy returns to his parents, they look inside the box&#8230; <strong>it&#8217;s empty</strong>.<br />
The parents go absolutely crazy and start yelling. &#8220;<strong>WHY DID OUR BOY RECEIVE NOTHING? WE PAID THE SAME AMOUNT AS EVERYONE ELSE HERE!</strong>&#8221;<br />
The elves look shocked and say &#8220;Your boy did not know what he wanted, so we just gave him something that looked like a present but was actually nothing&#8221;<br />
The parents reply &#8220;Surely there is a better solution than this! You could have sent him to the back of the line to think about what he wanted, or given him a gift voucher so that he could choose at his leisure later&#8221;<br />
The elves answer, &#8220;Well, we <em>could</em> have done that, but this is easier, and it&#8217;s what all the other elves do. Maybe <em>you</em> should check to make sure that your boy knows what he wants and that he actually gets it in return&#8221;</p>
<p>I wonder if you will remember that poor disappointed boy next time you <code>return null;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://andypalmer.com/2010/01/the-curious-case-of-the-missing-present/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>2009 Retrospective</title>
		<link>http://andypalmer.com/2010/01/2009-retrospective/</link>
		<comments>http://andypalmer.com/2010/01/2009-retrospective/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 16:00:48 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://andypalmer.com/?p=201</guid>
		<description><![CDATA[Last year, I chose 5 goals. How did I manage with these?
Write more (this includes blogging and code)
I definitely wrote more code this year, especially early on in the year when Antony and I started Pair With Us. I feel that my blogging is probably around the same amount as previous years. Ideally I&#8217;d like [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://andypalmer.com/2009/01/happy-new-year/">Last year, I chose 5 goals</a>. How did I manage with these?</p>
<h2>Write more (this includes blogging and code)</h2>
<p>I definitely wrote more code this year, especially early on in the year when <a href="http://antonymarcano.com" onclick="pageTracker._trackPageview('/outgoing/antonymarcano.com?referer=');">Antony</a> and I started <a href="http://pairwith.us" onclick="pageTracker._trackPageview('/outgoing/pairwith.us?referer=');">Pair With Us</a>. I feel that my blogging is probably around the same amount as previous years. Ideally I&#8217;d like to set a target of at least one blog post a week.</p>
<h2>Present at one or more conferences</h2>
<p>I presented at (what feels like) hundreds of conferences this year <img src='http://andypalmer.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://antonymarcano.com" onclick="pageTracker._trackPageview('/outgoing/antonymarcano.com?referer=');">Antony</a> and I co-presented at <a href="http://agile2009.com" onclick="pageTracker._trackPageview('/outgoing/agile2009.com?referer=');">Agile 2009</a> (Chicago), <a href="http://citconf.com" onclick="pageTracker._trackPageview('/outgoing/citconf.com?referer=');">CITCON</a> (Paris), <a href="http://www.sqe.com/Agiledevpractices" onclick="pageTracker._trackPageview('/outgoing/www.sqe.com/Agiledevpractices?referer=');">Agile Development Practices</a> (Orlando) and the <a href="http://skillsmatter.com/event/agile-testing/agile-specifications-bdd-and-testing-exchange/wd-157" onclick="pageTracker._trackPageview('/outgoing/skillsmatter.com/event/agile-testing/agile-specifications-bdd-and-testing-exchange/wd-157?referer=');">SkillsMatter BDD Exchange</a> (London)</p>
<p>We co-presented our tutorial at <a href="http://www.ox.ac.uk" onclick="pageTracker._trackPageview('/outgoing/www.ox.ac.uk?referer=');">Oxford University</a> as part of their <a href="http://www.softeng.ox.ac.uk/subjects/AGM.html" onclick="pageTracker._trackPageview('/outgoing/www.softeng.ox.ac.uk/subjects/AGM.html?referer=');">Agile Methods</a> Masters course</p>
<p>I also presented a keynote session at the <a href="http://www.saq.ch/de/events/detail/334/pictures/" onclick="pageTracker._trackPageview('/outgoing/www.saq.ch/de/events/detail/334/pictures/?referer=');">Software Tester Forum</a> (Zurich)</p>
<h2>Help out with the jNarrate open source project</h2>
<p>As part of <a href="http://pairwith.us" onclick="pageTracker._trackPageview('/outgoing/pairwith.us?referer=');">Pair With Us</a>, <a href="http://antonymarcano.com" onclick="pageTracker._trackPageview('/outgoing/antonymarcano.com?referer=');">Antony</a> and I did a little bit of additional work on <a href="http://jnarrate.org" onclick="pageTracker._trackPageview('/outgoing/jnarrate.org?referer=');">JNarrate</a>, although the majority of our work was on <a href="http://bitbucket.org/testingreflections/narrativefixture/" onclick="pageTracker._trackPageview('/outgoing/bitbucket.org/testingreflections/narrativefixture/?referer=');">Narrative Fixture</a>, which is an extension of <a href="http://jnarrate.org" onclick="pageTracker._trackPageview('/outgoing/jnarrate.org?referer=');">JNarrate</a> that wires it into <a href="http://fitnesse.org" onclick="pageTracker._trackPageview('/outgoing/fitnesse.org?referer=');">FitNesse</a>.</p>
<h2>Further my understanding around NLP</h2>
<p>I read a lot of books around NLP and hypnosis in 2009. I also enrolled on a <a href="http://www.adam-eason.com/seminars/hypnotherapy-training-diploma/" onclick="pageTracker._trackPageview('/outgoing/www.adam-eason.com/seminars/hypnotherapy-training-diploma/?referer=');">Hypnotherapy and NLP Practitioner diploma</a>. I am still learning loads on this and I am really enjoying it</p>
<h2>Have a look at learning LISP</h2>
<p>Well, as Meatloaf once said, &#8220;Two out of three ain&#8217;t bad&#8221;. I didn&#8217;t have time to work through the SICP course. This will stay on the backlog as I am still quite interested to do this</p>
<h1>What else happened?</h1>
<p>2009 brought some changes outside of the list.</p>
<ul>
<li>
<p>In March, <a href="http://antonymarcano.com" onclick="pageTracker._trackPageview('/outgoing/antonymarcano.com?referer=');">Antony</a> and I started <a href="http://pairwith.us" onclick="pageTracker._trackPageview('/outgoing/pairwith.us?referer=');">Pair With Us</a>, a series of unedited screencasts showing us working on the <a href="http://bitbucket.org/testingreflections/narrativefixture/" onclick="pageTracker._trackPageview('/outgoing/bitbucket.org/testingreflections/narrativefixture/?referer=');">Narrative Fixture</a> project, including all of the discussions, arguments, back tracking (and lots and lots of fun)</p>
<p>A number of people have shown an interest in the both our programming style, and our willingness to show all online, including a number of prominent software craftsmen, such as Uncle Bob Martin, Corey Haines and Jason Gorman</p>
</li>
<li>
<p>In July, I left ThoughtWorks to start up a new company, <a href="http://riverglide.com" onclick="pageTracker._trackPageview('/outgoing/riverglide.com?referer=');">RiverGlide</a>, with <a href="http://antonymarcano.com" onclick="pageTracker._trackPageview('/outgoing/antonymarcano.com?referer=');">Antony Marcano</a>. This has been very successful so far and I look forward to telling you more about the exciting developments (as well as some more of the history) in future posts</p>
</li>
]]></content:encoded>
			<wfw:commentRss>http://andypalmer.com/2010/01/2009-retrospective/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pomodoro, AppleScript and Adium</title>
		<link>http://andypalmer.com/2009/07/pomodoro-applescript-and-adium/</link>
		<comments>http://andypalmer.com/2009/07/pomodoro-applescript-and-adium/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 15:21:56 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Adium]]></category>
		<category><![CDATA[AppleScript]]></category>
		<category><![CDATA[Pomodoro Technique]]></category>

		<guid isPermaLink="false">http://andypalmer.com/?p=189</guid>
		<description><![CDATA[I downloaded this Pomodoro Timer from the Apple website.
It has support for AppleScript events, so I created a script that automatically sets my Adium status to away (with an auto-reply) while I am working on a Pomodoro and automatically sets it to Available when I have finished.
After much messing around, trying to work out just [...]]]></description>
			<content:encoded><![CDATA[<p>I downloaded <a href="http://www.apple.com/downloads/macosx/development_tools/pomodoro.html" onclick="pageTracker._trackPageview('/outgoing/www.apple.com/downloads/macosx/development_tools/pomodoro.html?referer=');">this Pomodoro Timer</a> from the Apple website.<br />
It has support for AppleScript events, so I created a script that automatically sets my Adium status to away (with an auto-reply) while I am working on a Pomodoro and automatically sets it to Available when I have finished.</p>
<p>After much messing around, trying to work out just how the AppleScript pseudo-natural-language works, I ended up with this to set the away status:</p>
<pre class="prettyprint">
-- This goes on one line in Pomodoro Setup -> AppleScript -> Start
tell application "Adium"
  to set the status of every account whose status type is available
  to the first status whose title is "Pomodoro In Progress"
</pre>
<p>and this to set it back to available:</p>
<pre class="prettyprint">
-- This goes on one line in Pomodoro Setup -> AppleScript -> Reset and End
tell application "Adium"
  to set the status of every account whose status type is away
  to the first status whose title is "Available"
</pre>
]]></content:encoded>
			<wfw:commentRss>http://andypalmer.com/2009/07/pomodoro-applescript-and-adium/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Tiny Types</title>
		<link>http://andypalmer.com/2009/07/tiny-types/</link>
		<comments>http://andypalmer.com/2009/07/tiny-types/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 12:29:32 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[essence]]></category>
		<category><![CDATA[FitNesse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JNarrate]]></category>
		<category><![CDATA[NarrativeFixture]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://andypalmer.com/?p=171</guid>
		<description><![CDATA[Mark Needham&#8217;s post on micro types sparked an idea in my head that recently came to fruition.
I was pondering on the Narrative Fixture code, and the fact that, although most of the internals are sensibly typed objects, at the FitNesse layer, we do a lot of passing of strings.
The idea (at least, my interpretation) with [...]]]></description>
			<content:encoded><![CDATA[<p>Mark Needham&#8217;s post on <a href="http://www.markhneedham.com/blog/2009/03/10/oo-micro-types/" onclick="pageTracker._trackPageview('/outgoing/www.markhneedham.com/blog/2009/03/10/oo-micro-types/?referer=');">micro types</a> sparked an idea in my head that recently came to fruition.<br />
I was pondering on the <a href="http://bitbucket.org/testingreflections/narrativefixture/" onclick="pageTracker._trackPageview('/outgoing/bitbucket.org/testingreflections/narrativefixture/?referer=');">Narrative Fixture</a> code, and the fact that, although most of the internals are sensibly typed objects, at the <a href="http://fitnesse.org" onclick="pageTracker._trackPageview('/outgoing/fitnesse.org?referer=');">FitNesse</a> layer, we do a lot of passing of strings.<br />
The idea (at least, my interpretation) with Tiny Types is that the string obviously means something, and that we can probably classify what that meaning is (we have a sensibly named variable for it, after all) , and so why not convert it to that meaningful thing as soon as possible.<br />
This has the nice effect of making some vague things (such as typing on collections) much more explicit.</p>
<p>As an example, in the <a href="http://bitbucket.org/testingreflections/narrativefixture/src/tip/src/org/jnarrate/fit/fixture/expertise/CastingDirector.java" onclick="pageTracker._trackPageview('/outgoing/bitbucket.org/testingreflections/narrativefixture/src/tip/src/org/jnarrate/fit/fixture/expertise/CastingDirector.java?referer=');">Casting Director</a> we have:</p>
<pre class="prettyprint">
Map&lt;String, ActorPlayingThe&lt;?&gt;&gt; dressingRoom = new HashMap&lt;String, ActorPlayingThe&lt;?&gt;&gt;();
</pre>
<p>and, after a little bit of refactoring, we end up with:</p>
<pre class="prettyprint">
Map&lt;CharacterName, ActorPlayingThe&lt;?&gt;&gt; dressingRoom = new HashMap&lt;CharacterName, ActorPlayingThe&lt;?&gt;&gt;();
</pre>
<p>Personally, I&#8217;m a fan of <a href="http://blog.thinkrelevance.com/2008/4/23/refactoring-from-ceremony-to-essence" onclick="pageTracker._trackPageview('/outgoing/blog.thinkrelevance.com/2008/4/23/refactoring-from-ceremony-to-essence?referer=');">low ceremony, high essence languages</a>, but while working in a high ceremony environment, we can leverage that ceremony to provide us with a nice summary of our thinking, ready for the next time we return to the code.</p>
]]></content:encoded>
			<wfw:commentRss>http://andypalmer.com/2009/07/tiny-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lazynchronous</title>
		<link>http://andypalmer.com/2009/06/lazynchronous/</link>
		<comments>http://andypalmer.com/2009/06/lazynchronous/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 10:36:20 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[definition]]></category>

		<guid isPermaLink="false">http://andypalmer.com/?p=126</guid>
		<description><![CDATA[

la⋅zyn⋅chro⋅nous /ˈleɪzɪŋkrənəs/
–adjective

having delegated a task with a desired output to a person or group of persons


Related forms:

la⋅zyn⋅chro⋅nous⋅ly, adverb
la⋅zync, abbreviation



Examples:

Asking your colleague / friend / network a question, where you could find the answer by using a popular search engine, would be a lazynchronous search.
Getting Mechanical Turk to transcribe your screencasts allows you to work lazynchronously.



Origins:
Compound, [...]]]></description>
			<content:encoded><![CDATA[<link rel="stylesheet" type="text/css" href="http://andypalmer.com/wp-content/uploads/dictionary.css" />
<div class="definition">
<span class="syllables">la⋅zyn⋅chro⋅nous</span> <span class="pronounciation">/ˈleɪzɪŋkrənəs/</span></p>
<p><span class="type">–adjective</span></p>
<ol class="definition">
<li>having delegated a task with a desired output to a person or group of persons</li>
</ol>
<div class="related-forms">
<span class="title">Related forms:</span></p>
<ul>
<li>la⋅zyn⋅chro⋅nous⋅ly, adverb</li>
<li>la⋅zync, abbreviation</li>
</ul>
</div>
<div class="examples">
<span class="title">Examples:</span></p>
<ul>
<li>Asking your colleague / friend / network a question, where you <em>could</em> find the answer by using a popular search engine, would be a lazynchronous search.</li>
<li>Getting Mechanical Turk to transcribe your screencasts allows you to work lazynchronously.</li>
</ul>
</div>
<div class="origins">
<span class="title">Origins:</span><br />
Compound, from <a href="http://c2.com/cgi/wiki?LazinessImpatienceHubris" onclick="pageTracker._trackPageview('/outgoing/c2.com/cgi/wiki?LazinessImpatienceHubris&amp;referer=');">virtue of laziness</a> and <a href="http://dictionary.reference.com/browse/asynchronous" onclick="pageTracker._trackPageview('/outgoing/dictionary.reference.com/browse/asynchronous?referer=');">asynchronous</a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://andypalmer.com/2009/06/lazynchronous/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making Feedback More Effective</title>
		<link>http://andypalmer.com/2009/05/making-feedback-more-effective/</link>
		<comments>http://andypalmer.com/2009/05/making-feedback-more-effective/#comments</comments>
		<pubDate>Fri, 22 May 2009 12:12:24 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coaching]]></category>
		<category><![CDATA[feedback]]></category>

		<guid isPermaLink="false">http://andypalmer.com/?p=89</guid>
		<description><![CDATA[Patrick Kua recently wrote a Guide for Receiving Feedback. He mentions that one way to understand how to receive feedback is to understand how to give it.
Here are some suggestions for giving feedback that will help to anchor desirable behaviours and enable change in less desirable behaviours.
Give feedback in the second person
One purpose of feedback [...]]]></description>
			<content:encoded><![CDATA[<p>Patrick Kua recently wrote a <a href="http://www.thekua.com/atwork/2009/04/a-guide-for-receiving-feedback/" onclick="pageTracker._trackPageview('/outgoing/www.thekua.com/atwork/2009/04/a-guide-for-receiving-feedback/?referer=');">Guide for Receiving Feedback</a>. He mentions that one way to understand how to receive feedback is to understand how to give it.</p>
<p>Here are some suggestions for giving feedback that will help to anchor desirable behaviours and enable change in less desirable behaviours.</p>
<h2>Give feedback in the second person</h2>
<p>One purpose of feedback is to keep desirable behaviours and to change less desirable behaviours in the person you are feeding back on. Who is the correct audience for this information? Is it the manager of that person?<br />
Using the third person isolates you from the person, and can encourage the use of generalisations.</p>
<p>Consider:</p>
<blockquote><p>Gina worked very hard on this project. She always seemed to be at her desk long after everyone else had gone home.</p></blockquote>
<p>versus:</p>
<blockquote><p>Gina, you are very dedicated. I remember, one Friday, I got home and realised that I had left my keys on my desk. When I came back to the office to get them, you were still there. It must have been half past eight.</p></blockquote>
<p>Which feedback would have the most effect on you? Why?</p>
<h2>Anchor desirable behaviours in the present</h2>
<p>When you are giving feedback on desirable behaviours, use the present tense. Specific examples can be given in the past tense.<br />
For example: </p>
<blockquote><p>David gave a great presentation to the board. The audience loved it and gave him a round of applause</p></blockquote>
<p>David <i>gave</i> a great presentation? Was it a fluke? Can he do it again?</p>
<p>Consider this alternative:</p>
<blockquote><p>David is a great communicator. His presentation to the board captivated the audience for the entire hour, and received a spontaneous round of applause.</p></blockquote>
<p>David <b>is</b> a great communicator. The <i>fact</i> that he <b>is</b> <i>implies</i> that he will <b>continue to be</b> a great communicator.</p>
<p>Address it to David:</p>
<blockquote><p>David, you are a great communicator. The presentation you gave to the board was amazing, the audience was captivated. You really deserved that round of applause.</p></blockquote>
<p>Which feedback would have the most effect on you? Why?</p>
<h2>Anchor less desirable behaviours in the past, suggest alternative behaviours</h2>
<p>Giving feedback about undesirable behaviours is difficult. We want to get the message across without appearing to be overly cruel or negative.</p>
<blockquote><p>Geoff thinks that he&#8217;s the only one who knows what&#8217;s going on. He always tells people how to do their jobs</p></blockquote>
<p>How does the person giving the feedback know what Geoff thinks? Does Geoff <b>always</b> tell people how to do their jobs? How do you think that Geoff will respond to this feedback?</p>
<p>Give specific, <i>past</i> examples of the behaviour, suggest a way forward:</p>
<blockquote><p>Last week, Geoff asked me to do the monthly report, and then told me how to do it. I felt as though he was questioning my competence. If Geoff wants me to do the report, he only needs to ask me. </p></blockquote>
<p>How will Geoff react to this one?</p>
<p>Address it to Geoff:</p>
<blockquote><p>Geoff, last week you asked me to do the monthly report, and then you told me how to do it. This upset me, as it felt like you were questioning my competence. I&#8217;m happy to do the report, you only need to ask me.</p></blockquote>
<p>Which feedback do you think would have the most effect on the way Geoff interacts with the person giving the feedback?</p>
<p>Feedback on this post is valued and <i>encouraged</i></p>
<hr />
My current understanding of feedback was gained from my interactions with other great coaches, including <a href="http://lizkeogh.com" onclick="pageTracker._trackPageview('/outgoing/lizkeogh.com?referer=');">Liz Keogh</a>, <a href="http://antonymarcano.com" onclick="pageTracker._trackPageview('/outgoing/antonymarcano.com?referer=');">Antony Marcano</a>, <a href="http://www.agilexp.com/rachel.php" onclick="pageTracker._trackPageview('/outgoing/www.agilexp.com/rachel.php?referer=');">Rachel Davies</a> and more.<br />
A special mention goes to Chris Pollard for <i>really</i> opening my eyes to the value of language and <a href="http://www.purenlp.com/glossry2.htm#WFC" onclick="pageTracker._trackPageview('/outgoing/www.purenlp.com/glossry2.htm_WFC?referer=');">well-formedness</a> when giving feedback to elicit change.</p>
]]></content:encoded>
			<wfw:commentRss>http://andypalmer.com/2009/05/making-feedback-more-effective/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Showing FitNesse Test Results in Hudson</title>
		<link>http://andypalmer.com/2009/04/showing-fitnesse-test-results-in-hudson/</link>
		<comments>http://andypalmer.com/2009/04/showing-fitnesse-test-results-in-hudson/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 14:01:47 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[FitNesse]]></category>
		<category><![CDATA[Hudson]]></category>
		<category><![CDATA[xsl]]></category>

		<guid isPermaLink="false">http://andypalmer.com/?p=71</guid>
		<description><![CDATA[Have you tried to get your FitNesse reports into Hudson?
Although it&#8217;s simple to get an Ant task to run the tests, and fail the build, it would be nice to see the results in Hudson&#8217;s junit report.
Unfortunately FitNesse outputs it&#8217;s results in a format that Hudson doesn&#8217;t understand. But that&#8217;s OK, because it&#8217;s all XML.
I [...]]]></description>
			<content:encoded><![CDATA[<p>Have you tried to get your <a href="http://fitnesse.org" onclick="pageTracker._trackPageview('/outgoing/fitnesse.org?referer=');">FitNesse</a> reports into <a href="http://hudson.gotdns.com" onclick="pageTracker._trackPageview('/outgoing/hudson.gotdns.com?referer=');">Hudson</a>?</p>
<p>Although it&#8217;s simple to get an Ant task to run the tests, and fail the build, it would be nice to see the results in Hudson&#8217;s junit report.<br />
Unfortunately FitNesse outputs it&#8217;s results in a format that Hudson doesn&#8217;t understand. But that&#8217;s OK, because it&#8217;s all XML.</p>
<p>I knocked together a really quick Proof of Concept <abbr title="xml stylesheet">xsl</abbr> and ant script that allow you to run the FitNesse tests and convert the output to the Ant junit format that Hudson understands.</p>
<p>It&#8217;s a work in progress, but it should be enough to get you going. Watch this space.<br />
I ran it against one suite and Hudson picked up the tests (and failure) ok.</p>
<p>This is the build.xml that I found on Naresh Jain&#8217;s blog about <a href="http://www.jroller.com/njain/entry/integrating_fitnesse_with_cruisecontrol" onclick="pageTracker._trackPageview('/outgoing/www.jroller.com/njain/entry/integrating_fitnesse_with_cruisecontrol?referer=');">integrating FitNesse with CruiseControl</a>, with the convert target added</p>
<pre class="prettyprint">
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project name="Acceptance_Tests-Common" default="test"&gt;
  &lt;target name="smoke" description="Run fitnesse acceptance tests."&gt;
    &lt;property name="fitnesse.output.dir" value="build" /&gt;
    &lt;property name="fitnesse.output.file" value="${fitnesse.output.dir}/fitnesse-test-results" /&gt;
    &lt;property name="fitnesse.port" value="8765" /&gt;
    &lt;path id="fitpath"&gt;
      &lt;fileset dir="."&gt;
        &lt;include name="fit*.jar" /&gt;
        &lt;include name="lib/fitnesse-20070619/fitnesse-20070619.jar" /&gt;
      &lt;/fileset&gt;
    &lt;/path&gt;
    &lt;echo message="About to run fitnesse server" level="info" /&gt;
    &lt;parallel&gt;
      &lt;daemons&gt;
        &lt;java classname="fitnesse.FitNesse" classpath="${toString:fitpath};${ant.home}/lib/xercesImpl.jar"&gt;
          &lt;arg value="-p" /&gt;
          &lt;arg value="${fitnesse.port}" /&gt;
          &lt;arg value="-e" /&gt;
          &lt;arg value="0" /&gt;
          &lt;arg value="-d" /&gt;
          &lt;arg value="content" /&gt;
          &lt;arg value="-r" /&gt;
          &lt;arg value="FitnesseRoot" /&gt;
        &lt;/java&gt;
      &lt;/daemons&gt;
      &lt;sequential&gt;
        &lt;echo message="sleeping for 10 seconds to let FitNesse server start" level="info" /&gt;
        &lt;sleep seconds="10" /&gt;
        &lt;java classpathref="fitpath" classname="fitnesse.runner.TestRunner" fork="true" resultproperty="fit.test.failures"&gt;
          &lt;arg value="-debug" /&gt;
          &lt;arg value="-xml" /&gt;
          &lt;arg value="${fitnesse.output.file}.xml" /&gt;
          &lt;arg value="-html" /&gt;
          &lt;arg value="${fitnesse.output.file}.html" /&gt;
          &lt;arg value="localhost" /&gt;
          &lt;arg value="${fitnesse.port}" /&gt;
          &lt;arg value="UserStories.FooterStory" /&gt;
        &lt;/java&gt;
        &lt;replace file="${fitnesse.output.file}.html" token="&lt;base href=&quot;http://localhost:${fitnesse.port}/&quot;/&gt;" /&gt;
        &lt;echo message="Finished FIT tests: ${fit.test.failures} failures/exceptions" level="info" /&gt;
        &lt;!--
	  &lt;fail message="FIT test failures/exceptions: ${fit.test.failures}"&gt;
	    &lt;condition&gt;
	      &lt;not&gt;
	        &lt;equals arg1="${fit.test.failures}" arg2="0" /&gt;
	      &lt;/not&gt;
            &lt;/condition&gt;
	  &lt;/fail&gt;
	  --&gt;
      &lt;/sequential&gt;
    &lt;/parallel&gt;
  &lt;/target&gt;

  &lt;target name="convert-fitnesse-results-to-junit"&gt;
    &lt;xslt style="fitnesse2junit.xsl" in="build/fitnesse-test-results.xml" out="build/TEST-fitnesse.xml" /&gt;
  &lt;/target&gt;

  &lt;target name="test" depends="smoke, convert-fitnesse-results-to-junit" /&gt;
&lt;/project&gt;
</pre>
<p>A slight update on the XSL. This one creates the correct nodes for exceptions and errors (although it appears to make no difference to Hudson)</p>
<pre class="prettyprint">
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;
&lt;xsl:template match="/"&gt;
  &lt;xsl:element name="testsuite"&gt;
    &lt;xsl:attribute name="tests"&gt;
      &lt;xsl:value-of select="sum(testResults/finalCounts/*)" /&gt;
    &lt;/xsl:attribute&gt;
    &lt;xsl:attribute name="failures"&gt;
      &lt;xsl:value-of select="testResults/finalCounts/wrong" /&gt;
    &lt;/xsl:attribute&gt;
    &lt;xsl:attribute name="disabled"&gt;
      &lt;xsl:value-of select="testResults/finalCounts/ignores" /&gt;
    &lt;/xsl:attribute&gt;
    &lt;xsl:attribute name="errors"&gt;
      &lt;xsl:value-of select="testResults/finalCounts/exceptions" /&gt;
    &lt;/xsl:attribute&gt;
    &lt;xsl:attribute name="name"&gt;AcceptanceTests&lt;/xsl:attribute&gt;
  &lt;xsl:for-each select="testResults/result"&gt;
    &lt;xsl:element name="testcase"&gt;
      &lt;xsl:attribute name="classname"&gt;
        &lt;xsl:value-of select="/testResults/rootPath" /&gt;
      &lt;/xsl:attribute&gt;
      &lt;xsl:attribute name="name"&gt;
        &lt;xsl:value-of select="relativePageName" /&gt;
      &lt;/xsl:attribute&gt;
      &lt;xsl:choose&gt;
        &lt;xsl:when test="counts/exceptions &gt; 0"&gt;
          &lt;xsl:element name="error"&gt;
            &lt;xsl:attribute name="message"&gt;
              &lt;xsl:value-of select="counts/exceptions" /&gt;
              &lt;xsl:text&gt; exceptions thrown&lt;/xsl:text&gt;
              &lt;xsl:if test="counts/wrong &gt; 0"&gt;
                &lt;xsl:text&gt; and &lt;/xsl:text&gt;
                &lt;xsl:value-of select="counts/wrong" /&gt;
                &lt;xsl:text&gt; assertions failed&lt;/xsl:text&gt;
              &lt;/xsl:if&gt;
            &lt;/xsl:attribute&gt;
          &lt;/xsl:element&gt;
        &lt;/xsl:when&gt;
        &lt;xsl:when test="counts/wrong &gt; 0"&gt;
          &lt;xsl:element name="failure"&gt;
            &lt;xsl:attribute name="message"&gt;
              &lt;xsl:value-of select="counts/wrong" /&gt;
              &lt;xsl:text&gt; assertions failed&lt;/xsl:text&gt;
            &lt;/xsl:attribute&gt;
          &lt;/xsl:element&gt;
        &lt;/xsl:when&gt;
      &lt;/xsl:choose&gt;
    &lt;/xsl:element&gt;
  &lt;/xsl:for-each&gt;
  &lt;/xsl:element&gt;
&lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://andypalmer.com/2009/04/showing-fitnesse-test-results-in-hudson/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
