<?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"
	>

<channel>
	<title>Nick Carroll</title>
	<atom:link href="http://ca.rroll.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://ca.rroll.net</link>
	<description>on Software, Agile, and Wii-vangelism</description>
	<pubDate>Tue, 15 Jul 2008 04:15:13 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Sydney Groovy Group</title>
		<link>http://ca.rroll.net/2008/07/15/sydney-groovy-group/</link>
		<comments>http://ca.rroll.net/2008/07/15/sydney-groovy-group/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 04:15:13 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[ThoughtWorks]]></category>

		<category><![CDATA[groovy]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=143</guid>
		<description><![CDATA[Today I decided to start up a special interest group for Groovy and Grails developers in Sydney.  If you are interested in Groovy or would like to be a presenter then please join up at Groovy Sydney.  You can register your Groovy talk on the Presentation Topics page, and I will organise for [...]]]></description>
			<content:encoded><![CDATA[<p>Today I decided to start up a special interest group for Groovy and Grails developers in Sydney.  If you are interested in Groovy or would like to be a presenter then please join up at <a href="http://groups.google.com.au/group/groovy-sydney">Groovy Sydney</a>.  You can register your Groovy talk on the <a href="http://groups.google.com.au/group/groovy-sydney/web/presentation-topics">Presentation Topics</a> page, and I will organise for you to present at the next meeting.  The Groovy Sydney group will meet on a monthly basis at the ThoughtWorks office, followed by drinks at a nearby pub.</p>
<p><a href="http://groovy.codehaus.org/">Groovy</a> is a dynamic language that I have been ignoring until now for no particular reason.  I first heard about it when I was doing consulting work in Brisbane last year.  One of the client developers of a large bankasurance company gave a pretty good presentation on Groovy.  But back then I was ignorant and caught up in the Ruby on Rails hype.</p>
<p>The thing about Groovy that won me over was that you can start off by writing your code in Java, and then refactor to make your code groovier.  It reduces the learning curve required to be productive in a new programming language, which I believe to be quite novel.</p>
<p>Groovy makes sense in the enterprise as it allows you to leverage your existing Java based systems.  You can deploy a Groovy application in your expensive J2EE application servers, therefore maximising your return on investment in infrastructure costs.  For example, <a href="http://grails.org/">Grails</a> &#8212; a Rails-esque web application framework for Groovy &#8212; can be deployed as part of a Spring application.  Essentially you can implement a lot of your integration business logic in Java, and use Grails to quickly create frontend CRUD functionality, which is tedious to do in Spring alone.  Groovy is a tool worth having for any Java developer looking for productivity gains.</p>
]]></content:encoded>
			<wfw:commentRss>http://ca.rroll.net/2008/07/15/sydney-groovy-group/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pair Programming in the Old Days</title>
		<link>http://ca.rroll.net/2008/06/17/pair-programming-in-the-old-days/</link>
		<comments>http://ca.rroll.net/2008/06/17/pair-programming-in-the-old-days/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 03:36:08 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[Humour]]></category>

		<category><![CDATA[ThoughtWorks]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=142</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><img src="http://neatorama.cachefly.net/images/2008-01/harvard-mark-1-action.jpg" alt="Pair Programming in the Old Days" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ca.rroll.net/2008/06/17/pair-programming-in-the-old-days/feed/</wfw:commentRss>
		</item>
		<item>
		<title>If software development were a car&#8230;</title>
		<link>http://ca.rroll.net/2008/06/11/if-software-development-were-a-car/</link>
		<comments>http://ca.rroll.net/2008/06/11/if-software-development-were-a-car/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 12:13:40 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[Humour]]></category>

		<category><![CDATA[ThoughtWorks]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=141</guid>
		<description><![CDATA[If Waterfall software development were a car then it would be a Yugo.
If Lean software development were a car then it would be a Toyota.
If Agile software development were a car then it would be a BMW Gina.

]]></description>
			<content:encoded><![CDATA[<p>If Waterfall software development were a car then it would be a <a href="http://www.time.com/time/specials/2007/article/0,28804,1658545_1658533_1658529,00.html">Yugo</a>.</p>
<p>If Lean software development were a car then it would be a Toyota.</p>
<p>If Agile software development were a car then it would be a BMW Gina.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/kTYiEkQYhWY&#038;hl=en"></param><embed src="http://www.youtube.com/v/kTYiEkQYhWY&#038;hl=en" type="application/x-shockwave-flash" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ca.rroll.net/2008/06/11/if-software-development-were-a-car/feed/</wfw:commentRss>
		</item>
		<item>
		<title>IR Pen version 2</title>
		<link>http://ca.rroll.net/2008/05/29/ir-pen-version-2/</link>
		<comments>http://ca.rroll.net/2008/05/29/ir-pen-version-2/#comments</comments>
		<pubDate>Thu, 29 May 2008 12:13:20 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[Diversions]]></category>

		<category><![CDATA[ThoughtWorks]]></category>

		<category><![CDATA[Wiimote]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=140</guid>
		<description><![CDATA[My previous attempt at building a simple IR pen did not work as expected.  The power source was too weak for the IR LED, and consequently the Wiimote had difficulty detecting the IR light.
For my second attempt I purchased an IR LED, some wire, a momentary switch, a 10 Ohm resistor, and a battery [...]]]></description>
			<content:encoded><![CDATA[<p>My previous attempt at building a <a href="http://ca.rroll.net/2008/05/26/simple-ir-pen-for-wiimote-whiteboard/">simple IR pen</a> did not work as expected.  The power source was too weak for the IR LED, and consequently the Wiimote had difficulty detecting the IR light.</p>
<p>For my second attempt I purchased an IR LED, some wire, a momentary switch, a 10 Ohm resistor, and a battery holder for two AA batteries.  I also had a whiteboard marker lying around, which I used to create the casing for the IR pen.</p>
<p><a href="http://www.flickr.com/photos/ncarroll/2533032055/" title="IR Pen by ncarroll, on Flickr"><img src="http://farm4.static.flickr.com/3088/2533032055_ffcea83164.jpg" width="500" height="375" alt="IR Pen" /></a></p>
<p>I wired up the circuit so that the IR LED was in serial with the switch, resistor and battery holder.  I then cut off the nozzle from the whiteboard marker casing.  I needed space to fit the switch, so I cut the cylinder shaped casing in half, and drilled a hole to push the switch through.  I then popped the LED through the nozzle, and wrapped the casing around the circuit.  Everything was then held in place using electrical tape.  It was a prototype, so I didn&#8217;t bother with aesthetics, which the rubber band holding the pen and battery holder together clearly shows.</p>
<p>I am glad to report that this particular IR pen works perfectly with my laptop screen and the Wiimote.  However, I will need to test it out on a projected image from a data projector before officially giving the thumbs up.</p>
]]></content:encoded>
			<wfw:commentRss>http://ca.rroll.net/2008/05/29/ir-pen-version-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Simple IR Pen for Wiimote Whiteboard</title>
		<link>http://ca.rroll.net/2008/05/26/simple-ir-pen-for-wiimote-whiteboard/</link>
		<comments>http://ca.rroll.net/2008/05/26/simple-ir-pen-for-wiimote-whiteboard/#comments</comments>
		<pubDate>Mon, 26 May 2008 13:54:57 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[Diversions]]></category>

		<category><![CDATA[ThoughtWorks]]></category>

		<category><![CDATA[Wiimote]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=139</guid>
		<description><![CDATA[My previous foray into using a Wiimote with my laptop led me down the path of building a USB sensor bar so that I can use the Wiimote to control the pointer movements.  This approach worked better than expected, but it doesn&#8217;t work so well if you want finer control of your mouse pointer. [...]]]></description>
			<content:encoded><![CDATA[<p>My previous foray into using a <a href="http://ca.rroll.net/tag/wiimote/">Wiimote with my laptop</a> led me down the path of building a USB sensor bar so that I can use the Wiimote to control the pointer movements.  This approach worked better than expected, but it doesn&#8217;t work so well if you want finer control of your mouse pointer.  For example, when I was demonstrating the Wiimote integration with my laptop I was quite nervous about the demo not working, and this was made apparent by the shaky lines that I was drawing with the Mouse Gestures.  As a result some of the Mouse Gestures did not register.</p>
<p>A better approach would be to do what <a href="http://www.cs.cmu.edu/~johnny/">Johnny Lee</a> did with the Wiimote to create the <a href="http://www.cs.cmu.edu/~johnny/projects/wii/">Wiimote Whiteboard</a>.  Johnny Lee used the Wiimote as an IR camera pointed at a projector screen, and created a pen with an LED which the Wiimote can track.  This approach provides for more accuracy and smoother movements of the pointer.</p>
<p>The barrier of entry to the Wiimote Whiteboard is creating the IR pen.  Johnny Lee suggests wiring up a circuit containing an IR LED, momentary switch, resistor, and power supply, then shoving it into a pen.  If you google &#8220;IR pen&#8221; you will also come up with some complicated solutions.  One guy even tried to cram the circuit into a highlighter casing.</p>
<p><a href="http://www.flickr.com/photos/ncarroll/2523710705/" title="Simple IR Penlight for Wiimote Whiteboard by ncarroll, on Flickr"><img src="http://farm3.static.flickr.com/2135/2523710705_17bc0f33a3.jpg" width="500" height="375" alt="Simple IR Penlight for Wiimote Whiteboard" /></a></p>
<p>My solution is really quite straightforward.  In fact you only need to go to your local electronics store and pick up two items: an LED keyring torch; and an IR LED.  When purchasing an LED keyring torch, make sure that you can easily replace the LED.  I used this <a href="http://jaycar.com.au/productView.asp?ID=ST3048&#038;CATID=&#038;keywords=led+torch&#038;SPECIAL=&#038;form=KEYWORD&#038;ProdCodeOnly=&#038;Keyword1=&#038;Keyword2=&#038;pageNumber=&#038;priceMin=&#038;priceMax=&#038;SUBCATID=">LED keyring torch</a> from Jaycar Electronics.  I then pulled the torch apart, pulled out the LED, and replaced it with an <a href="http://jaycar.com.au/productView.asp?ID=ZD1945&#038;CATID=&#038;keywords=infrared+LED&#038;SPECIAL=&#038;form=KEYWORD&#038;ProdCodeOnly=&#038;Keyword1=&#038;Keyword2=&#038;pageNumber=&#038;priceMin=&#038;priceMax=&#038;SUBCATID=">IR LED</a>.  This solution meant I didn&#8217;t have to do any soldering or fiddling around.  It all fit together into a nice compact form factor that cost me less than $10, and took no longer than 10 minutes to switch the LED.</p>
]]></content:encoded>
			<wfw:commentRss>http://ca.rroll.net/2008/05/26/simple-ir-pen-for-wiimote-whiteboard/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Old School Editors for Python Development</title>
		<link>http://ca.rroll.net/2008/05/12/old-school-editors-for-python-development/</link>
		<comments>http://ca.rroll.net/2008/05/12/old-school-editors-for-python-development/#comments</comments>
		<pubDate>Mon, 12 May 2008 11:47:21 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[ThoughtWorks]]></category>

		<category><![CDATA[emacs]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=138</guid>
		<description><![CDATA[Here are a couple of good resources for configuring Vim and Emacs for Python development.  I know more key-bindings with Emacs than Vim, so my preference is for Emacs, but I am certainly intrigued about trying Vim again after reading how to set it up for Python coding.
]]></description>
			<content:encoded><![CDATA[<p>Here are a couple of good resources for configuring <a href="http://blog.sontek.net/2008/05/11/python-with-a-modular-ide-vim/">Vim</a> and <a href="http://www.enigmacurry.com/2008/05/09/emacs-as-a-powerful-python-ide/">Emacs</a> for Python development.  I know more key-bindings with Emacs than Vim, so my preference is for Emacs, but I am certainly intrigued about trying Vim again after reading how to set it up for Python coding.</p>
]]></content:encoded>
			<wfw:commentRss>http://ca.rroll.net/2008/05/12/old-school-editors-for-python-development/feed/</wfw:commentRss>
		</item>
		<item>
		<title>iBurst Driver doesn&#8217;t compile in Ubuntu Hardy Heron</title>
		<link>http://ca.rroll.net/2008/04/28/iburst-driver-doesnt-compile-in-ubuntu-hardy-heron/</link>
		<comments>http://ca.rroll.net/2008/04/28/iburst-driver-doesnt-compile-in-ubuntu-hardy-heron/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 13:39:55 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[ThoughtWorks]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/?p=137</guid>
		<description><![CDATA[Bah, just found out that the iBurst driver 1.3.2 doesn&#8217;t compile in Ubuntu Hardy Heron.  Turns out a macro in the kernel called SET_MODULE_OWNER was deprecated in 2.6.23, and removed in 2.6.24.  The iBurst driver currently depends on that macro, so I will have to look at patching it so that it can [...]]]></description>
			<content:encoded><![CDATA[<p>Bah, just found out that the iBurst driver 1.3.2 doesn&#8217;t compile in Ubuntu Hardy Heron.  Turns out a macro in the kernel called SET_MODULE_OWNER was deprecated in 2.6.23, and removed in 2.6.24.  The iBurst driver currently depends on that macro, so I will have to look at patching it so that it can work for Hardy Heron, which uses the 2.6.24 kernel.</p>
<p><strong>Update</strong><br />
The fix is quite simple.  Just remove SET_MODULE_OWNER from ib-net.c, recompile and install.</p>
]]></content:encoded>
			<wfw:commentRss>http://ca.rroll.net/2008/04/28/iburst-driver-doesnt-compile-in-ubuntu-hardy-heron/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ubuntu 8.04 Hardy Heron</title>
		<link>http://ca.rroll.net/2008/04/25/ubuntu-804-hardy-heron/</link>
		<comments>http://ca.rroll.net/2008/04/25/ubuntu-804-hardy-heron/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 02:53:55 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[ThoughtWorks]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/2008/04/25/ubuntu-804-hardy-heron/</guid>
		<description><![CDATA[Sweet, the latest release of Ubuntu dubbed Hardy Heron is out!

There are a lot of new changes under the hood.  Most notable are:

Installation is a breeze.
Wubi: one-click installer for Windows.
Xorg 7.3 with better defaults and auto-configuration of external screens.
Mozilla Firefox 3 Beta 5 in preparation for the official release of Firefox 3 in June.
PulseAudio: [...]]]></description>
			<content:encoded><![CDATA[<p>Sweet, the latest release of <a href="http://www.ubuntu.com/">Ubuntu</a> dubbed Hardy Heron is out!</p>
<p><a href="http://www.flickr.com/photos/ncarroll/2439412001/" title="Ubuntu Hardy Heron CD Cover by ncarroll, on Flickr"><img src="http://farm4.static.flickr.com/3016/2439412001_829db93e54.jpg" width="500" height="339" alt="Ubuntu Hardy Heron CD Cover" /></a></p>
<p>There are a lot of new changes under the hood.  Most notable are:</p>
<ul>
<li>Installation is a breeze.</li>
<li>Wubi: one-click installer for Windows.</li>
<li>Xorg 7.3 with better defaults and auto-configuration of external screens.</li>
<li>Mozilla Firefox 3 Beta 5 in preparation for the official release of Firefox 3 in June.</li>
<li>PulseAudio: new audio driver.</li>
<li>Brasero: a new CD/DVD burning utility.</li>
<li>Transmission: the new default BitTorrent client.</li>
<li>New theme.</li>
<li>Compiz: Enabled by default for eye-candy.</li>
<li>Vinagre: New VNC client.  Also uses Avahi to discover VNC enabled clients on the network.</li>
<li>PolicyKit: enhanced security.</li>
</ul>
<p>I am currently in the process of <a href="http://ubuntu.wordpress.com/2006/01/29/move-home-to-its-own-partition/">migrating /home to its own partition</a> so that I can go ahead and upgrade to Hardy Heron as soon as possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://ca.rroll.net/2008/04/25/ubuntu-804-hardy-heron/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Python Decorators</title>
		<link>http://ca.rroll.net/2008/04/20/python-decorators/</link>
		<comments>http://ca.rroll.net/2008/04/20/python-decorators/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 10:26:06 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[ThoughtWorks]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/2008/04/20/python-decorators/</guid>
		<description><![CDATA[I found this great post on Python Decorators.  Decorators were introduced into the python language since 2.4.  The post shows the benefits of using a python decorator to improve the efficiency of a function&#8217;s runtime using memoization.
Python decorators are also extensively used in Django for authentication.  For example, you can use them [...]]]></description>
			<content:encoded><![CDATA[<p>I found this great post on <a href="http://avinashv.net/2008/04/python-decorators-syntactic-sugar/">Python Decorators</a>.  Decorators were introduced into the python language since 2.4.  The post shows the benefits of using a python decorator to improve the efficiency of a function&#8217;s runtime using memoization.</p>
<p>Python decorators are also extensively used in Django for authentication.  For example, you can use them to decorate a view function so that only logged in users can view certain parts of your site.</p>
<pre name="code" class="python">
from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    # ...
</pre>
<p>The example code above shows that you only need to add the @login_required decorator above your view function to determine whether or not the current user needs to be authenticated before the view can be displayed.</p>
]]></content:encoded>
			<wfw:commentRss>http://ca.rroll.net/2008/04/20/python-decorators/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lean Software Development as a bunch of Chinese Proverbs</title>
		<link>http://ca.rroll.net/2008/04/20/lean-software-development-as-a-bunch-of-chinese-proverbs/</link>
		<comments>http://ca.rroll.net/2008/04/20/lean-software-development-as-a-bunch-of-chinese-proverbs/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 04:32:11 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[ThoughtWorks]]></category>

		<guid isPermaLink="false">http://ca.rroll.net/2008/04/20/lean-software-development-as-a-bunch-of-chinese-proverbs/</guid>
		<description><![CDATA[Lean Principle 1: Eliminate Waste
Chinese Proverb: If the roots are not removed during weeding, the weeds will grow again when the winds of Spring blows.
Interpretation: In other words, to solve any problems the source of the problem must also be dealt with.  Therefore it is essential to finish a task thoroughly or the effort [...]]]></description>
			<content:encoded><![CDATA[<p>Lean Principle 1: Eliminate Waste<br />
Chinese Proverb: If the roots are not removed during weeding, the weeds will grow again when the winds of Spring blows.<br />
Interpretation: In other words, to solve any problems the source of the problem must also be dealt with.  Therefore it is essential to finish a task thoroughly or the effort would be wasted.  </p>
<p>Lean Principle 2: Create Knowledge<br />
Chinese Proverb: I hear and I forget; I see and I remember; I do and I understand.<br />
Interpretation: When you create knowledge share it, but share it effectively through experiential learning and involving people collaboratively.</p>
<p>Lean Principle 3: Build Quality In<br />
Chinese Proverb: Better a diamond with a flaw than a pebble without.<br />
Interpretation: Use Test Driven Development and automated testing to ensure quality.  Tests help to quickly identify any side effects or defects when you change the code base, which gives you more confidence in the ongoing quality of the product.</p>
<p>Lean Principle 4: Defer Commitment<br />
Chinese Proverb: A journey of a thousand miles begins with a single step.<br />
Interpretation: Abolish the idea that it is a good idea to start development with a complete specification.  Like a journey of a thousand miles you gain more confidence in the direction you are heading with each step that you take.</p>
<p>Lean Principle 5: Deliver Fast<br />
Chinese Proverb: One who rides a tiger must continue to go fast.<br />
Interpretation: Companies that focus on speed of delivery and superior quality have a competitive advantage.</p>
<p>Lean Principle 6: Respect People<br />
Chinese Proverb: Like the Eight Immortals crossing the sea, each one displaying his/her special feats.<br />
Interpretation: A diverse team of talented people that can work together can achieve any goal that they are mutually committed to.</p>
<p>Lean Principle 7: Improve the System<br />
Chinese Proverb: A spark can start a fire that burns the entire prairie.<br />
Interpretation: Understand the entire value stream, and don&#8217;t ignore seemingly minor problems as they can spread.</p>
]]></content:encoded>
			<wfw:commentRss>http://ca.rroll.net/2008/04/20/lean-software-development-as-a-bunch-of-chinese-proverbs/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
