<?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>Ivan's agile thinkings</title>
	<atom:link href="http://ivansthunks.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://ivansthunks.com/blog</link>
	<description>My thoughts and opinions on all things agile</description>
	<lastBuildDate>Sun, 11 Jul 2010 18:29:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Big Visible Build Monitor!!</title>
		<link>http://ivansthunks.com/blog/2010/07/05/big-visible-build-monitor/</link>
		<comments>http://ivansthunks.com/blog/2010/07/05/big-visible-build-monitor/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 14:51:29 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2010/07/05/big-visible-build-monitor/</guid>
		<description><![CDATA[Just a quick post to let everyone see the latest incarnation of the big, visible build monitors that I have been building.  The current version connects directly to the network and scrapes Hudson&#8217;s json api for a specific view of the builds we have. Here&#8217;s a list of the component parts: an Arduino ATMEGA328 an [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left">Just a quick post to let everyone see the latest incarnation of the big, visible build monitors that I have been building.  The current version connects directly to the network and scrapes Hudson&#8217;s json api for a specific view of the builds we have.</p>
<p style="text-align: left">Here&#8217;s a list of the component parts:</p>
<ul>
<li style="text-align: left">an Arduino ATMEGA328</li>
<li style="text-align: left">an Internet Shield</li>
<li style="text-align: left">code to parse the json api output of Hudson and drive the LEDs based on the status (colour) of the builds</li>
<li style="text-align: left">a few high-power LEDs to glow as brightly a possible (might whack some more in there one day to really make it glow)</li>
<li style="text-align: left">a dome (with previous lamp removed) from IKEA</li>
</ul>
<p style="text-align: left">This version is much prettier than the tupperware version I produced previously.  However, I did have to up the LED brightness so they can actually show through the pearlised lamp dome.</p>
<p style="text-align: left">The next version will trigger a sound when the build status changes so the team knows that something&#8217;s gone wrong sooner (and that normality has been resumed when the build is fixed).</p>
<p style="text-align: left">NOTE: The &#8216;bling bling piggy&#8217; is always nearby to help lighten the pockets of those who break the build.<img src="http://ivansthunks.com/blog/wp-content/uploads/2010/07/img_0217.JPG" align="center" height="400" width="300" vspace="20" hspace="20" alt="build monitor and piggy" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2010/07/05/big-visible-build-monitor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EAI and Clojure</title>
		<link>http://ivansthunks.com/blog/2010/07/04/eai-and-clojure/</link>
		<comments>http://ivansthunks.com/blog/2010/07/04/eai-and-clojure/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 04:04:26 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Constant Learning]]></category>
		<category><![CDATA[EAI]]></category>
		<category><![CDATA[Polyglot]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[vancouver]]></category>
		<category><![CDATA[vandev]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2010/07/04/eai-and-clojure/</guid>
		<description><![CDATA[I had the good fortune to attend the latest VanDev meetup on EAI tools versus custom build solutions.  David Dossot gave a high-level overview of Enterprise Application Integration tools and how they compare to the ad-hoc chunks of scripting and home-grown glue that are used to integrate systems.  David covered several aspects that might affect whether you pick on [...]]]></description>
			<content:encoded><![CDATA[<p>I had the good fortune to attend the latest <a href="http://www.meetup.com/VanDev/"><font class="Apple-style-span" color="#000000">VanDev</font></a> meetup on <font class="Apple-style-span" color="#000000"><a href="http://www.meetup.com/VanDev/calendar/13621090/i/gh_event_rating_tl" class="actor" style="cursor: pointer">EAI tools versus custom build solutions</a>.  <a href="http://www.dossot.net/">David Dossot</a> gave a high-level overview of Enterprise Application Integration tools and how they compare to the ad-hoc chunks of scripting and home-grown glue that are used to integrate systems.  David covered several aspects that might affect whether you pick on or the other.  His presentation is <a href="http://prezi.com/2em9y3f2yilc/eai-when-tools-can-help/">online at Prezi</a> (which I think is a very fancy presentation system).</font><font class="Apple-style-span" color="#993300"></p>
<p>Update:</font>  David actually blogged on this too: <a href="http://blogs.mulesoft.org/presentation-eai-when-tools-can-help/">http://blogs.mulesoft.org/presentation-eai-when-tools-can-help/</a></p>
<p><font class="Apple-style-span" color="#000000">The big thing for me about this presentation was that it finally tripped a switch in my brain: <a href="http://www.eaipatterns.com/">Enterprise Application Integration patterns</a> don&#8217;t have to be about asynchronous queues and such, it&#8217;s about all the different ways systems integrate.  That includes simply copying files around, for example.  I honestly wish I&#8217;d realised this a few months ago, it would have given me the insight to stop a strange project using rails and leverage an existing EAI engine/framework.  Despite the learning curve we would now have a less custom, and more tested, system.  Better late than never?</font></p>
<p><font class="Apple-style-span" color="#000000"> </font>I&#8217;m also currently on a mild clojure kick.  Having done the <a href="http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata">Bowling Game Kata</a> in Groovy and then followed it up with a clojure version (<a href="http://blog.8thlight.com/articles/2009/7/20/bowling-in-clojure">thanks to this link for some hints</a>) I thought I&#8217;d try to get a simple Apache Camel example up and going in clojure.  The<a href="http://codeabout.blogspot.com/2010/06/using-apache-camel-from-clojure.html"> first hit on Google</a> proved very useful for guidance.</p>
<p>Simply trying to get that (and the bowling) example up and running made me have to dig into so many different things:
<ul>
<li><a href="http://github.com/technomancy/leiningen">leiningen</a> - a clojure wrapper for maven</li>
<li><a href="http://polyglot.sonatype.org/">Polyglot Maven</a> - a wrapper for maven in several different languages so XML can be shunned</li>
<li>test-is &#8211; a simple unit testing library in clojure-contrib</li>
<li>AOT &#8211; ahead-of-time class creation, amongst other things this allows clojure to run in a binary form (no need for source in production).</li>
<li><a href="http://code.google.com/p/counterclockwise/">Counterclockwise</a> - an Eclipse plugin that adds support for clojure editing and running (with very pretty, and effective, rainbow bracketing)</li>
<li><a href="http://clojars.org/">Clojars.org</a> - a maven repo for clojure jar files</li>
<li><a href="http://nakkaya.com/clodiuno.markdown">Cloduino</a> can be used to allow clojure to interact with Arduino boards <img src='http://ivansthunks.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li><a href="http://www.assembla.com/wiki/show/clojure/Getting_Started">Getting started with clojure</a> - this link has a bunch of detail on getting started with clojure.</li>
<li><a href="http://github.com/relevance/labrepl">labrepl</a> - a learning environment for clojure</li>
<li>I fired up Idea for the first time in ages and install La Clojure just to try it out.</li>
</ul>
<p>Obviously, I have only scratched the surface of these things, but at least I know about them now and have a better overall handle on clojure and EAI.</p>
<p>I really do love learning new things and the VanDev meetup triggered more of this than normal.  So I encourage you all to come to VanDev or find a similar meetup near you which covers things that you really enjoy (I&#8217;ve got my eye on the <a href="http://www.meetup.com/erlang-vancouver/">local Erlang group</a> next).<font class="Apple-style-span" color="#000000">  </font></p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2010/07/04/eai-and-clojure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>InfoQ: Nobody Needs Reliable Messaging</title>
		<link>http://ivansthunks.com/blog/2010/06/19/infoq-nobody-needs-reliable-messaging/</link>
		<comments>http://ivansthunks.com/blog/2010/06/19/infoq-nobody-needs-reliable-messaging/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 20:32:23 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Constant Learning]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2010/06/19/infoq-nobody-needs-reliable-messaging/</guid>
		<description><![CDATA[InfoQ is one of my favourite techy sites on the interweb.  It&#8217;s full of really great presentations, interviews and articles about many different aspects of software development.Here&#8217;s an example where Marc de Graauw writes about not needing reliable messaging.  If the business operation needs to be once-and-once-only or the operations need to be in-order then the mechanics [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.infoq.com/">InfoQ</a> is one of my favourite techy sites on the interweb.  It&#8217;s full of really great presentations, interviews and articles about many different aspects of software development.Here&#8217;s <a href="http://www.infoq.com/articles/no-reliable-messaging">an example where Marc de Graauw writes about not needing reliable messaging</a>.  If the business operation needs to be once-and-once-only or the operations need to be in-order then the mechanics should be pushed down into the business message/processing.  Don&#8217;t leave this to the transport layer, create appropriate idempotent operations and most of the problems go away.If you don&#8217;t already have InfoQ on your feed list then I can&#8217;t recommend adding it in enough</p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2010/06/19/infoq-nobody-needs-reliable-messaging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Failing with Acceptance Testing</title>
		<link>http://ivansthunks.com/blog/2010/01/08/failing-with-acceptance-testing/</link>
		<comments>http://ivansthunks.com/blog/2010/01/08/failing-with-acceptance-testing/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 16:11:54 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2010/01/08/failing-with-acceptance-testing/</guid>
		<description><![CDATA[I&#8217;ve had this one sat in my FireFox tabs for months and only just got around to reading it.  Gojko Adzic lists the outcome of an openspace session at CITCON Eurpose:  http://gojko.net/2009/09/24/top-10-reasons-why-teams-fail-with-acceptance-testing/ Most of the reasons rung true with me too, especially at the start.  It&#8217;s been two years now since we adopted FIT as [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had this one sat in my FireFox tabs for months and only just got around to reading it.  Gojko Adzic lists the outcome of an openspace session at CITCON Eurpose:  <a href="http://gojko.net/2009/09/24/top-10-reasons-why-teams-fail-with-acceptance-testing/">http://gojko.net/2009/09/24/top-10-reasons-why-teams-fail-with-acceptance-testing/</a></p>
<p>Most of the reasons rung true with me too, especially at the start.  It&#8217;s been two years now since we adopted FIT as our acceptance test tool.  We&#8217;ve improved greatly since then, but we still have challenges.</p>
<ol>
<li><strong>No Collaboration<br />
</strong>Initially we had developers writing tests and proving the usefulness of the approach.  Unfortunately, the same developers were then tasks with writing a battery of tests against the existing buggy code.  It was a between-project slack period and there wasn&#8217;t anything better for them to do.  Unfortunately #2 and #10 came in to play with junior and intermediate devs mirroring the existing system in tests, rather than describing the business requirements.</li>
<li><strong>Focusing on how, not on what<br />
</strong>We definitely had a lot of this going on.  We have far more procedural &#8216;this then this then this&#8217; tests that have a huge amount of setup actions than I like to admit.  We have definitely turned this around somewhat more recently with more abstract &#8216;business requirement&#8217; tests rather than &#8216;technical requirements&#8217;: the tests don&#8217;t change just because the implementation does.</li>
<li><strong>Tests unusable as live documentation<br />
</strong>This is my biggest chagrin with the tests, lack of prose around the FIT test tables explaining WHY.  When there are comments they describe what we&#8217;re doing with the &#8216;this then this then this&#8217; style.  Again, we have turned the corner recently but it&#8217;s a bugger to retro-fit that kind of knowledge into the tests.</li>
<li><strong>Expecting acceptance tests to be a full regression suite<br />
</strong>I think I can own the blame on this one.  I pushed for this to be the case.  In my defense I did push for quick, localized acceptance tests that could run quickly and give the required feedback.  As you may guess, that&#8217;s not what we ended up with.  Rather, we got a whole slew of System tests.  They are still very useful tests, they just take longer to run that I want.  In a way it&#8217;s a reflection of the system we&#8217;re testing: very coupled system begets very coupled tests (maybe).</li>
<li><strong>Focusing on tools<br />
</strong>Not really something we struggled with too much.  If anything it was the opposite &#8211; few tools in our price range.  We settled on FIT and went forward.  We also use the FitPro Eclipse plugin though it&#8217;s limited Mac and Linux capabilities are still a bit of a challenge.  We did look at FitNesse for a while and knowing what I know now I would probably have chosen that as it is more actively developed.  Our biggest perceived challenge was one of integrating with Subversion, in the end it was a non-issue.</li>
<li><strong>Not considering acceptance testing as value added activity<br />
</strong>We are doing so much better than before with QA/BA developing the first example FIT tests but we&#8217;ve still got a ways to go.</li>
<li><strong>“Test code” not maintained with love<br />
</strong>Another sore point for me.  Developers treat our test code as an afterthought and seem to think that good design principles and refactoring don&#8217;t apply to test code.  I couldn&#8217;t disagree strongly enough.  I am always looking for ways of making my tests simple, robust and expressive.  I often spend a lot longer on my (unit) tests than my production code.  I have hear developers whinge and complain about the test code and how &#8220;it&#8217;s hard to do such and such&#8221;.  I swear that in the time they&#8217;ve spent complaining they could have improved the test code ten-fold &#8211; but they don&#8217;t treat it the same as production code!</li>
<li><strong>Objectives of team members not aligned<br />
</strong>We&#8217;re actually doing pretty well at this one, we&#8217;re a million miles from where we once were.  Our QA guys now sit with the developers and BA&#8217;s and there is a true collaborative spirit at times.  I was utterly stunned (shocked, awed, caught-out) recently when a developer said to me &#8220;I&#8217;ll just commit it and QA can find the bugs&#8221;.  I hadn&#8217;t realized that that attitude still lived on within our teams.  I guess old habits die hard!</li>
<li><strong>No management buy-in<br />
</strong>This one isn&#8217;t a problem &#8211; I&#8217;ve seen too many bugs and mis-understood/implemented features and also seen the benefits of automated acceptance tests to ever go back (so&#8217;s my boss).</li>
<li><strong>Underestimating the skill required to do this well<br />
</strong>As mentioned above, we definitely struggled with this one initially.  Things are improving as we get better and better with this.  I think the biggest drag was the large amount of tests and fixtures that were written without too much thought that were then copy/pasted or at least aped.</li>
</ol>
<p>Despite our challenges I think one reason we didn&#8217;t fail was that there were several people who held the opinion that &#8216;failure wasn&#8217;t an option&#8217;.  We needed to a rigor to our development process: Automated Acceptance Driven Development was a large part of the added rigor.  Yes it takes longer to develop initially, but it pays for itself over and over once you get over the hump.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2010/01/08/failing-with-acceptance-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Patterns and the Dovetail Joint</title>
		<link>http://ivansthunks.com/blog/2009/08/13/software-patterns-and-the-dovetail-joint/</link>
		<comments>http://ivansthunks.com/blog/2009/08/13/software-patterns-and-the-dovetail-joint/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 06:29:36 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2009/08/13/software-patterns-and-the-dovetail-joint/</guid>
		<description><![CDATA[I picked up my long-unread copy of Emergent Design by Scott L Brain.  I&#8217;m not too far in yet, but something he wrote about software patterns struck me in a way that hadn&#8217;t before.  He mentions that other professions all have their own patterns. Doctors, Lawyers and Carpenters, for example.  That made me think of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/File:Gersa18.jpg" target="_blank"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Gersa18.jpg/800px-Gersa18.jpg" align="left" height="150" hspace="10" vspace="10" width="200" /></a>I picked up my long-unread copy of <a href="http://www.amazon.ca/Emergent-Design-Evolutionary-Professional-Development/dp/0321509366" target="_blank">Emergent Design by Scott L Brain</a>.  I&#8217;m not too far in yet, but something he wrote about software patterns struck me in a way that hadn&#8217;t before.  He mentions that other professions all have their own patterns. Doctors, Lawyers and Carpenters, for example.  That made me think of the joints used by carpenters, like the dovetail example on the left[1].</p>
<p>Disclaimer: I&#8217;m no carpenter</p>
<p>Just like software patterns, carpentry joints aren&#8217;t a drop in solution.  Joints are a well understood carpentry pattern but they still must be used in context.  The type of wood being joined constrains the joint you can use, the desired appearance constrains which joints can be used, the use of the jointed pieces further constrains the choice of joint.  Further, the thickness of the wood will determine the size of the dovetails for example.  The constraints go on an on.</p>
<p>The difference between carpentry and software development is that the understanding of which joint to choose has been developed and refined by master craftsmen for thousands of years!  You can now buy laminate flooring that just clicks together &#8211; but it took the legacy of many, many craftsman hours to make that a possibility.</p>
<p>The take away for me is the re-enforcement of the truth: we&#8217;re still the software pioneers.  We&#8217;re still lashing bits of code together with rope, we can&#8217;t quite get a catalog of time-tested, tried and true joints.  We know enough to know there must be better ways of doing things, we just don&#8217;t have a clue of what they are yet.</p>
<p>Software development might just be about pioneer spirit, and anyone who tells you they&#8217;ve got it sorted is probably trying to sell snake oil to the prospectors.</p>
<p>[1] Image used under the terms of the Creative Commons Attribution 2.5 Licence &#8211; Author: Dumitru Rotari</p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2009/08/13/software-patterns-and-the-dovetail-joint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mmmmmm, coding&#8230;&#8230;.</title>
		<link>http://ivansthunks.com/blog/2009/08/09/mmmmmm-coding/</link>
		<comments>http://ivansthunks.com/blog/2009/08/09/mmmmmm-coding/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 07:50:28 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[TDD]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2009/08/09/mmmmmm-coding/</guid>
		<description><![CDATA[It&#8217;s not often that I get to do much coding these days.  Normally I wander around the office offering advice and guidance to others: aka, generally interfering (aaka, managing by walking around).  But today was a pleasant change, being a Saturday.  I remained cooped up and happy hacking away at a Circuit Breaker implementation inspired [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s not often that I get to do much coding these days.  Normally I wander around the office offering advice and guidance to others: aka, generally interfering (aaka, managing by walking around).  But today was a pleasant change, being a Saturday.  I remained cooped up and happy hacking away at a Circuit Breaker implementation inspired by Michael Nygard&#8217;s book Release It!  That book has enabled me to look deeper into the lives of Ops guys: the poor suckers who have to run the software that developers write, for years on end!  Release It! is a truly fabulous book and I recommend every single professional software developer to give it a good hard read (perhaps you could use the SQR3 technique).</p>
<p>Anywho, I got to code and I really enjoyed it.  I had written some of this code a while back, but without any tests.  I was allowed to do this because it was just a spike &#8211; it wasn&#8217;t intended to be production code.  But today I was to turn it into proper code.  Here&#8217;s what happened:</p>
<ol>
<li> Removed extraneuous code I had added as an experiment into component transparency &#8211; exposing this as an JMX MBean.</li>
<li>Removed other code that wasn&#8217;t going to be used in the first cut of this component.</li>
<li>Create a JUnit 4 test case.</li>
<li>Unit test #1: test that the delegate call works as expected &#8211; just what should happen when the circuit breaker is in the Closed state.</li>
<li>Unit test #2: test that the circuit breaker trips when a single failure occurs (with the failure threshold set to 1).</li>
<li>Refactor the test to make them more concise.</li>
<li>Unit test #3 and #4.</li>
<li>Refactor the tests, refactor, refactor.</li>
<li> #5, refactor, #6, refactor, #7&#8230;.. continue testing various aspects of the circuit breaker.</li>
<li> Refactor the test cases and again and again.</li>
</ol>
<p>I had previously written the code as a spike and tested informally using a browser within the webapp.  But now I wrote the unit tests to prove that I hadn&#8217;t coded any amusing bugs.  I wrote each of them so they would fail first, but I was testing existing code &#8211; not quite following the word of TDD but living the spirit.</p>
<p>But the thing I brought away from this was the amount of refactoring of the test case I did &#8211; I barely changed the existing code which was pair programmed originally.  The amount of test code refactoring reminded me of some work I had done previously about how a specific featureworked.  During my investigation I wrote a set of unit (missing) tests that got refactored and refactored and refactored until it made sense to someone who might care: not just a developer.  This took a good chunk of time to develop, but in the end I was able to publish a literal test as a Javadoc example that would make sense to your Grand Mother!</p>
<p>I did a similar job on the circuit breaker testing &#8211; pushing down on the test until it was concise and expressed my intent.  I squished and squashed until I had some really neat assert* statements that made sense for this component:</p>
<ul>
<li>assertDelegateExceptionThrown</li>
<li>assertCircuitBreakerFailsFast</li>
<li>assertDelegateCallSucceeds</li>
</ul>
<p>I had previously spent a chunk of time thinking about how this component should function and I reveled in the time I was forced to take in making the tests expressive.</p>
<p>I hope to add the ability to monitor the circuit breaker through JMX tomorrow.  This time it&#8217;s going to be TTD.</p>
<p>Mmmmmmm, coding&#8230;&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2009/08/09/mmmmmm-coding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quicksilver: jump to Jira issues</title>
		<link>http://ivansthunks.com/blog/2009/08/08/quicksilver-jump-to-jira-issues/</link>
		<comments>http://ivansthunks.com/blog/2009/08/08/quicksilver-jump-to-jira-issues/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 18:05:55 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2009/08/08/quicksilver-jump-to-jira-issues/</guid>
		<description><![CDATA[Currently I use that &#8220;Keyword&#8221; property of Firefox&#8217;s bookmarks to get me into the Jira projects I use at work quickly: Bookmark an issue in Jira: http://jira.company.com/browse/PROJ1-53 Edit the new bookmark Give it a sensible name &#8211; &#8220;browse jira&#8221; Replace the Jira identifier with &#8220;%s&#8221;: http://jira.company.com/browse/%s Give it a short keyword.  I normally use &#8220;j&#8221;. [...]]]></description>
			<content:encoded><![CDATA[<p>Currently I use that &#8220;Keyword&#8221; property of Firefox&#8217;s bookmarks to get me into the Jira projects I use at work quickly:</p>
<ul>
<li> Bookmark an issue in Jira: http://jira.company.com/browse/PROJ1-53</li>
<li>Edit the new bookmark</li>
<li>Give it a sensible name &#8211; &#8220;browse jira&#8221;</li>
<li>Replace the Jira identifier with &#8220;%s&#8221;: http://jira.company.com/browse/%s</li>
<li>Give it a short keyword.  I normally use &#8220;j&#8221;.</li>
</ul>
<p>Now you can simply type the following into Firefox&#8217;s location bar and jump straight to an issue: &#8220;j PROJ2-26&#8243;.</p>
<p>You still have to find Firefox and pop open a new tab and such.  I was wondering if I could side-step this and use Quicksilver to jump directly into an issue.  Note that this approach should work just fine with any other browser too.</p>
<p>Following the instructions over at coelomi&#8217;s blog I can now jump straight to a Jira issue with very little fuss.  <a href="http://coelomic.wordpress.com/2006/01/02/quicksilver-tips/">http://coelomic.wordpress.com/2006/01/02/quicksilver-tips/</a></p>
<ul>
<li>Enable the Web Search Quicksilver plugin.</li>
<li>Copy the Jira url.</li>
<li>Prepend the url with &#8220;qss-&#8221;.</li>
<li>Replace the issue id with three stars &#8220;***&#8221;.</li>
<li>Create a new trigger copying the url into the top box.</li>
<li>Ensure the next box says &#8220;Search For&#8221; and the next box is empty.</li>
<li>Assign a hot key for the trigger.</li>
</ul>
<p>I now have the following triggers:</p>
<ul>
<li>Ctrl-Command-j: access any Jira issue &#8211; I provide Quicksilver with the full issue id.</li>
<li>Ctrl-Command-r: access any Jira issue within a specific project &#8211; I provide Quicksilver only with the numeric part of the issue id &#8211; the project and the hyphen are hardcoded in the url.</li>
<li>Ctrl-Command-b: same as the one above but for a different project.</li>
<li>Ctrl-Command-g: A general google search.</li>
<li>I&#8217;ll be adding another to perform a search on our wiki too.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2009/08/08/quicksilver-jump-to-jira-issues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning to learn</title>
		<link>http://ivansthunks.com/blog/2009/08/08/learning-to-learn/</link>
		<comments>http://ivansthunks.com/blog/2009/08/08/learning-to-learn/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 17:44:34 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Constant Learning]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[mindmaps]]></category>
		<category><![CDATA[sqr3]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2009/08/08/learning-to-learn/</guid>
		<description><![CDATA[I like to think that one of my strengths is my willingness to pro-actively learn new things.  Recently I have been trying to learn about learning by reading the excellent Pragmatic Thinking and Learning by Andy Hunt of The Pragmatic Programmer fame (which remains one of my favourite books of all time). A lot of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pragprog.com/titles/ahptl/"><img src="http://assets0.pragprog.com/images/covers/190x228/ahptl.jpg?1236205199" align="left" border="2" height="228" hspace="10" vspace="10" width="190" /></a>I like to think that one of my strengths is my willingness to pro-actively learn new things.  Recently I have been trying to learn about learning by reading the excellent <a href="http://pragprog.com/titles/ahptl/">Pragmatic Thinking and Learning</a> by Andy Hunt of <a href="http://pragprog.com/titles/tpp/">The Pragmatic Programmer</a> fame (which remains one of my favourite books of all time).</p>
<p>A lot of the content in PTL wasn&#8217;t that new to me, as I have previously read several of the books that Andy has read and references from the text.  That said, I definitely learned new things and deepened my understanding about certain areas.</p>
<p>Constant learning is definitely a incredibly valuable thing, I look for it in every potential new hire I interview.  But continually learning in the same habitual way may not be the optimal strategy.  If you apply the agile development approaches to how we learn it suggests that you should retrospect at what works, what doesn&#8217;t and that we should be prepared to try different things to see if they work better (rinse and repeat).</p>
<p>Though I&#8217;m not a novice at learning, I am a novice at learning using new tools and techniques: when was the last time you learned how to learn in a new way?  So how do I move froward from here?  According to the book, what I need is some novice/advanced beginner handrails to hold whilst I improve.  Different to the other books that I have read around this subject, PTL brings a consolidated set of next-steps in the context of the life of a software developer.</p>
<p>This is the initial list of things I am going to start:</p>
<ul>
<li>Read more deliberately using the <a href="http://en.wikipedia.org/wiki/Sqr3">SQR3 technique</a>, then blog about what I have learned.
<ul>
<li>Read PTL again, this time, read it deliberately.</li>
<li>Re-read Domain-Driven Design deliberately.</li>
</ul>
</li>
<li>Increase my blogging frequency &#8211; hopefully doing more often will make me quicker.</li>
<li>Review my blog posts once in a while &#8211; do I still agree? what have I learned since?</li>
<li>Try mindmaps again having deepened my understanding about how they might help me learn/understand.
<ul>
<li>Redraw mindmaps every now and then &#8211; let some mental mushing happen &#8211; see what my brain has subconsciously come up with.</li>
</ul>
</li>
</ul>
<p>Ever more things will come up as I continually learn and continually learn to learn.  I&#8217;m still on that journey that started the best part of 33 years ago and one that I hope doesn&#8217;t stop for a very long time yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2009/08/08/learning-to-learn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C having read a pocket reference</title>
		<link>http://ivansthunks.com/blog/2009/08/08/objective-c-having-read-a-pocket-reference/</link>
		<comments>http://ivansthunks.com/blog/2009/08/08/objective-c-having-read-a-pocket-reference/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 16:31:18 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Constant Learning]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2009/08/08/objective-c-having-read-a-pocket-reference/</guid>
		<description><![CDATA[On the way back from a long-weekend on Vancouver Island we had a little time to kill whilst waiting for our ferry home.  There was a Chapters store nearby, so that was an easy mascre of half and hour.  After browsing for a while and noting possible future purchases I purchased Objective-C Pocket Reference.  At 122 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://amzn.com/0596004230" target="_blank"><img src="http://img.amazon.ca/images/I/51FBKoZAzoL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU15_.jpg" align="left" border="0" height="240" vspace="15" width="240" /></a>On the way back from a long-weekend on Vancouver Island we had a little time to kill whilst waiting for our ferry home.  There was a Chapters store nearby, so that was an easy mascre of half and hour.  After browsing for a while and noting possible future purchases I purchased <a href="http://amzn.com/0596004230">Objective-C Pocket Reference</a>.  At 122 small pages it was a quick read and covered he basics of Objective-C&#8217;s syntax and detailed various fundamental aspects of the <a href="http://developer.apple.com/cocoa/">Cocoa</a> and <a href="http://www.gnustep.org/">GNUStep</a> and the various differences betwen them.</p>
<p>I got from it pretty much what I was hoping: an easily digestible introduction into Objective-C.  I had previously read a bunch on the web, but I always find reading books, rather than reading a screen, to be far more effective for myself.  I had many different questions answered from an attempted iPhone coding session a few months ago.</p>
<p>I have been nudging some of the guys at work to start an Objective-C/iPhone/Mac programming study group. This book will be very useful for the novices in the group (myself included) to quickly look up the fundamentals and work through the syntax impedance as they try and push a new language into their Java brains &#8211; this was definitely a sticking point with the Erlang study group we had for a while.</p>
<p>In summary, a great, concise reference &#8211; just like the title suggests.  It appears that the reviewers on Amazon also agree.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2009/08/08/objective-c-having-read-a-pocket-reference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vi learnings</title>
		<link>http://ivansthunks.com/blog/2009/05/17/vi-learnings/</link>
		<comments>http://ivansthunks.com/blog/2009/05/17/vi-learnings/#comments</comments>
		<pubDate>Mon, 18 May 2009 00:41:19 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2009/05/17/vi-learnings/</guid>
		<description><![CDATA[Here are a few useful vi keystrokes I learned the other day (from colleagues and from the help system): Searching without case-sensitivity &#8211; global switch: :set ignorecase Searching without case-sensitivity  &#8211; for a single pattern: prefix the pattern with \c Searching backwards: ? (rather than /) Search again in the opposite direction: N (rather than [...]]]></description>
			<content:encoded><![CDATA[<p>Here are a few useful vi keystrokes I learned the other day (from colleagues and from the help system):</p>
<p>Searching without case-sensitivity &#8211; global switch:</p>
<pre>:set ignorecase</pre>
<p>Searching without case-sensitivity  &#8211; for a single pattern:</p>
<pre>prefix the pattern with \c</pre>
<p>Searching backwards:</p>
<pre>? (rather than /)</pre>
<p>Search again in the opposite direction:</p>
<pre>N (rather than n)</pre>
<p>Nothing too thrilling, but it makes using vi that little easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2009/05/17/vi-learnings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
