<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12616776</id><updated>2011-08-22T00:08:01.083+10:00</updated><title type='text'>nosewheelie</title><subtitle type='html'>Technology, mountain biking, Mac stuff, politics and music.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>91</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12616776.post-115192417356800118</id><published>2006-07-03T20:46:00.000+10:00</published><updated>2006-07-03T20:56:13.580+10:00</updated><title type='text'>nosewheelie is moving</title><content type='html'>&lt;p&gt;After lots of contemplating, I've decided to move my blog over to my &lt;a href="http://adams.id.au/"&gt;main site&lt;/a&gt;. I'll be keeping this blog around for posterity (also the Blogger import on Wordpress seems to be broken), but all future posts will be made at the &lt;a href="http://adams.id.au/blog/"&gt;all new nosewheelie&lt;/a&gt;, a new &lt;a href="http://feeds.feedburner.com/nosewheelie"&gt;feed&lt;/a&gt; is also available.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-115192417356800118?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/115192417356800118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=115192417356800118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/115192417356800118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/115192417356800118'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/07/nosewheelie-is-moving.html' title='nosewheelie is moving'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-115012551890213697</id><published>2006-06-13T01:14:00.000+10:00</published><updated>2006-06-13T01:18:38.916+10:00</updated><title type='text'>The 7 (f)laws of the Semantic Web</title><content type='html'>&lt;blockquote&gt;When it comes to the Semantic Web, you might call me a disillusioned advocate. I’ve been dipping in and out of the technologies for the last 5 years or so, but am increasingly frustrated by the lack of any visible progress.&lt;/blockquote&gt;

Source: &lt;a href="http://www.oreillynet.com/xml/blog/2006/06/the_7_flaws_of_the_semantic_we.html"&gt;The 7 (f)laws of the Semantic Web&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-115012551890213697?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/115012551890213697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=115012551890213697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/115012551890213697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/115012551890213697'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/06/7-flaws-of-semantic-web_13.html' title='The 7 (f)laws of the Semantic Web'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114982558344484486</id><published>2006-06-09T13:53:00.000+10:00</published><updated>2006-06-09T13:59:43.456+10:00</updated><title type='text'>Not on my watch!</title><content type='html'>&lt;p&gt;Our resident IntelliJ plugin guru Rob has been at it again. For a while we've been dreaming up ways to automate a build breakage notification, so that it's really in your face. Rob's solution?&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6952/1077/1600/notonmywatch.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6952/1077/400/notonmywatch.jpg" border="0" alt="" /&gt;&lt;/a&gt;

&lt;p&gt;Will wonders never cease?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114982558344484486?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114982558344484486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114982558344484486' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114982558344484486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114982558344484486'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/06/not-on-my-watch.html' title='Not on my watch!'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114967925534564488</id><published>2006-06-07T21:17:00.000+10:00</published><updated>2006-06-07T21:20:55.416+10:00</updated><title type='text'>Why do they hate us?</title><content type='html'>&lt;p&gt;The hypocrisy of the US administration astounds me constantly (and they're not alone unfortunately).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For a textbook example of why we are hated, consider Gaza and the West Bank. There, a brutal Israeli/U.S.-led cutoff in aid has been imposed on the Palestinians for voting the wrong way in a free election.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;Query: who, besides al-Qaeda and recruiters of suicide bombers, can conceivably benefit from persecuting the Palestinian people like this? Does President Bush or Condi Rice think the Palestinians will respect an America that did this to their children, after we urged this election, called for Hamas to participate, and preached our devotion to democracy?&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;The White House says we don’t negotiate with terrorists. But when we had to, we did. FDR and Truman summited with Stalin at Yalta and Potsdam. Nixon met with Mao in Beijing. Kissinger negotiated with the Viet Cong and North Vietnamese at Paris. Bush I allied with Assad in the Gulf War. Clinton had Arafat to the White House too many times to count.&lt;/p&gt;
&lt;/blockquote&gt;

Source: &lt;a href="http://www.amconmag.com/2006/2006_06_05/buchanan.html"&gt;The Persecution of the Palestinians&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114967925534564488?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114967925534564488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114967925534564488' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114967925534564488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114967925534564488'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/06/why-do-they-hate-us.html' title='Why do they hate us?'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114947778315329094</id><published>2006-06-05T13:17:00.000+10:00</published><updated>2006-06-05T21:03:10.483+10:00</updated><title type='text'>Ruby early return considered harmful (for idiots like me)</title><content type='html'>&lt;p&gt;I've been playing with some Rails code at home to support some of the work we do at the day job. I'm building a search tool that detects the kind of input and performs searches based on this type. I've been working with Ruby's regular expression support, and test driving a class to find UUIDs. Here's what I started with (please don't comment that it could be simpler, I was starting simple... :).&lt;/p&gt;

&lt;pre&gt;
class Uuid
  REGEX = /[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/

  def Uuid.isUuid(fragment)
    if fragment =~ REGEX
      return true
    end
    return false
  end
end
&lt;/pre&gt;

&lt;p&gt;Thinking that this could be simplified be removing the &lt;code&gt;return&lt;/code&gt; keyword, I removed it!&lt;/p&gt;

&lt;pre&gt;
class Uuid
  REGEX = /[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/

  def Uuid.isUuid(fragment)
    if fragment =~ REGEX
      true
    end
    false
  end
end
&lt;/pre&gt;

&lt;p&gt;This caused all sorts of funny problems, which in hindsight are painfully obvious, but at the time are just a pain. Removing the return causes the &lt;code&gt;if&lt;/code&gt; to essentially fall-through, &lt;strong&gt;always&lt;/strong&gt; 
returning &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Discussing this at work, perhaps I've hit up against a potential maintenance issue with Ruby. I'm hoping this isn't the case (you can do similar stupid things in most languages), but some of the things you can do with Ruby make me a little nervous. I'm holding my tongue for a while (I did the same thing with XP and am hooked) to see where things go, I'm sure it'll all be fine...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114947778315329094?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114947778315329094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114947778315329094' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114947778315329094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114947778315329094'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/06/ruby-early-return-considered-harmful.html' title='Ruby early return considered harmful (for idiots like me)'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114904354511122182</id><published>2006-05-31T12:42:00.000+10:00</published><updated>2006-05-31T12:45:45.126+10:00</updated><title type='text'>Managing Software Developers</title><content type='html'>&lt;blockquote&gt;If you're an engineer at a company where becoming a manager is considered a promotion, then you only have three choices: become a manager yourself, or leave, or resign yourself to being a second-class employee. It should be obvious — you can work through the math using three sock puppets — that this is an arrangement that pushes a company inexorably towards mediocrity. The best engineers either leave the company or try their hand at management, often with doubly disastrous consequences: they simultaneously lose the company a great engineer and gain them an awful manager.&lt;/blockquote&gt;

Source: &lt;a href="http://steve-yegge.blogspot.com/2006/05/not-managing-software-developers.html"&gt; (Not) Managing Software Developers&lt;/a&gt; (&lt;a href="http://anarchaia.org/"&gt;Via Anarchaia&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114904354511122182?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114904354511122182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114904354511122182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114904354511122182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114904354511122182'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/05/managing-software-developers.html' title='Managing Software Developers'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114729940813398648</id><published>2006-05-11T08:04:00.000+10:00</published><updated>2006-05-11T08:16:48.206+10:00</updated><title type='text'>On project estimation</title><content type='html'>&lt;p&gt;&lt;a href="http://conversationswithandrew.blogspot.com/"&gt;Tom&lt;/a&gt; writes about &lt;a href="http://conversationswithandrew.blogspot.com/2006/05/how-long-is-piece-of-string.html"&gt; How Long is a Piece of String?&lt;/a&gt;, which addresses one of my main frustrations with software development; estimates and how project managers' and stakeholders deal with them.&lt;/p&gt;

&lt;blockquote&gt;So, how long is a piece of string? ... It's a pretty silly question, isn't it? But would you believe that questions like that are asked all the time regarding IT projects? And what is even more amazing is that people actually give answers to such vague questions and then they make important business decisions based on them.&lt;/blockquote&gt;

&lt;p&gt;Far too often I see people wondering around in disillusionment as estimates are not hit. This can sometimes be exaggerated on agile projects as management get &lt;strong&gt;more&lt;/strong&gt; feedback than they're used to, and some panic.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114729940813398648?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114729940813398648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114729940813398648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114729940813398648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114729940813398648'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/05/on-project-estimation.html' title='On project estimation'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114725656260454722</id><published>2006-05-10T20:16:00.000+10:00</published><updated>2006-05-10T20:22:42.606+10:00</updated><title type='text'>Immediate feedback is a key element to exceptional performance</title><content type='html'>&lt;p&gt;&lt;a href="http://37signals.com/svn/archives2/the_importance_of_instant_feedback.php"&gt;Matt&lt;/a&gt; tells us of the importance of instant feedback, and hightlights &lt;a href="http://www.nytimes.com/2006/05/07/magazine/07wwln_freak.html?ex=1147233600&amp;en=6a3168396c98d5e8&amp;ei=5087%0A"&gt;A Star Is Made&lt;/a&gt;. Very timely considering the time our build takes...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114725656260454722?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114725656260454722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114725656260454722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114725656260454722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114725656260454722'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/05/immediate-feedback-is-key-element-to.html' title='Immediate feedback is a key element to exceptional performance'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114688843260678226</id><published>2006-05-06T13:56:00.000+10:00</published><updated>2006-05-10T20:14:47.296+10:00</updated><title type='text'>How to make programming hard for yourself</title><content type='html'>&lt;p&gt;Reg Braithwaite post about &lt;a href="http://weblog.raganwald.com/2006/05/how-to-make-programming-hard-for.html"&gt;How to make programming hard for yourself&lt;/a&gt;. He makes several interesting comments that ring true with me. I've worked with several people who meet the "people that consider my hard problems to be recreational diversions" comment, and though they are phenomenally smart and can indeed tackle the hardest of the hard problems, (I feel that) they find it hard to produce code that is of a high quality consistently. Then, there are those people, who are naturally smart enough to tackle the hard problems yet are &lt;strong&gt;also&lt;/strong&gt; able to produce good quality code on a day-to-day basis. There would only be about 5-10% of developers who fall into this bucket, and getting the chance to work with them is mind blowing. There is nothing better for your career development than to be thrown in the deep end with a bunch of people that know more about everything than you do. Indeed Dave Hoover's &lt;a href="http://www.redsquirrel.com/dave/work/a2j/patterns/BeTheWorst.html"&gt;Be The Worst&lt;/a&gt; apprenticeship pattern embodies this idea. I'm currently working on a project with several people that fall into this category. There's nothing like a dose of reality to keep an ego in check!&lt;/p&gt;

&lt;p&gt;On a similar note, Damien Katz shows us the &lt;a href="http://damienkatz.net/2006/05/signs_youre_a_c.html"&gt;Signs You're a Crappy Programmer (and don't know it)&lt;/a&gt;. I don't agree with all of these, the 20 lines of code one especially. We spoke about this at work today, and while they're all "magic" numbers, they really force you to think hard about your design. I heard a podcast by David Heinemeier Hansson once that talked about how being under constraints you may not like forces you to be creative (he was referring to Rails). I think length is one of those occasions.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114688843260678226?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114688843260678226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114688843260678226' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114688843260678226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114688843260678226'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/05/how-to-make-programming-hard-for.html' title='How to make programming hard for yourself'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114626082687383380</id><published>2006-04-29T07:46:00.000+10:00</published><updated>2006-05-01T14:36:52.420+10:00</updated><title type='text'>Mac Backup Software Harmful</title><content type='html'>&lt;blockquote&gt;Paradoxically, copying a file and being sure that all information has been copied is not easy under Mac OS X.
I analyzed a variety of file copying engines, most of them command-line tools, and demonstrated how they fare in preserving file metadata.&lt;/blockquote&gt;

&lt;p&gt;Source: &lt;a href="http://blog.plasticsfuture.org/2006/04/23/mac-backup-software-harmful/"&gt;Mac Backup Software Harmful&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is quite interesting as I've never felt the need to move from Carbon Copy Cloner to something else, as I've successfully managed upgrades using it from Jaguar to Panther &amp; Panther to Tiger.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114626082687383380?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114626082687383380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114626082687383380' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114626082687383380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114626082687383380'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/04/mac-backup-software-harmful.html' title='Mac Backup Software Harmful'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114587792283523793</id><published>2006-04-24T21:05:00.000+10:00</published><updated>2006-04-24T21:33:06.056+10:00</updated><title type='text'>Subversion</title><content type='html'>&lt;p&gt;&lt;a href="http://morenews.blogspot.com/"&gt;Andrew&lt;/a&gt; asked me to take a look at some &lt;a href="http://www.jrdf.org/"&gt;JRDF&lt;/a&gt; work he's been working on. As I've been slack lately, I needed to check out the code to take a look, and he's recently moved it over to Subversion. I've dealt with svn before from within IntelliJ, but I usually like to check out my projects from the command line, to get a feel for what's going on. So my running commentary for all today is information on getting svn going for CVS wannabes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://svnbook.red-bean.com/en/1.1/svn-book.html"&gt;The book&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.onlamp.com/pub/a/onlamp/2004/08/19/subversiontips.html"&gt;The Top Ten Subversion Tips for CVS Users&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://hivelogic.com/articles/2006/04/19/svn_on_os_x"&gt;Building Subversion (SVN) on Mac OS X&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.rubyonrails.org/rails/pages/HowtoUseRailsWithSubversion"&gt;How to Use Rails with Subversion&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gotta love the &lt;code&gt;blame/praise&lt;/code&gt; command!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114587792283523793?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114587792283523793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114587792283523793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114587792283523793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114587792283523793'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/04/subversion_24.html' title='Subversion'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114472184165276770</id><published>2006-04-11T12:14:00.000+10:00</published><updated>2006-04-11T12:17:21.666+10:00</updated><title type='text'>Samurai</title><content type='html'>&lt;p&gt;If anyone ever needs to analyse Java thread dumps, &lt;a href="http://yusuke.homeip.net/samurai/?english"&gt;Samurai&lt;/a&gt; is the &lt;a href="http://www.matildabay.com.au/ourbeers/beezneez.html"&gt;Beez Neez&lt;/a&gt;. No more squinting at less.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114472184165276770?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114472184165276770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114472184165276770' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114472184165276770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114472184165276770'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/04/samurai.html' title='Samurai'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114463971742174457</id><published>2006-04-10T13:22:00.000+10:00</published><updated>2006-04-10T13:28:37.470+10:00</updated><title type='text'>Cannot Delete</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6952/1077/1600/cantdelete.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6952/1077/400/cantdelete.jpg" border="0" alt="" /&gt;&lt;/a&gt; The ever helpful error message, from a colleague's interactions with a remote server.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114463971742174457?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114463971742174457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114463971742174457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114463971742174457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114463971742174457'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/04/cannot-delete.html' title='Cannot Delete'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114436131642507103</id><published>2006-04-07T08:03:00.000+10:00</published><updated>2006-04-07T08:12:40.046+10:00</updated><title type='text'>SPARQL-a-go-go</title><content type='html'>&lt;p&gt;Via &lt;a href="http://prototypo.blogspot.com/2006/04/sparql-specifications-are-now-w3c.html"&gt;Dave&lt;/a&gt;: The &lt;a href="http://www.w3.org/2001/sw/DataAccess/"&gt;DAWG&lt;/a&gt; (the WG I &lt;a href="http://lists.w3.org/Archives/Public/public-rdf-dawg/2005JanMar/0087.html"&gt;once&lt;/a&gt; sat on) has &lt;a href="http://www.w3.org/News/2006#item60"&gt;just released&lt;/a&gt; three SPARQL specifications as W3C Candidate Recommendations! This is great news for the semweb community, even if some of the decisions made are not ones I agree with. The potential upside of semweb is huge, hopefully it can be another one of those overnight success stories, 10 years in the making.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114436131642507103?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114436131642507103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114436131642507103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114436131642507103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114436131642507103'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/04/sparql-go-go.html' title='SPARQL-a-go-go'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114358452413602690</id><published>2006-03-29T08:20:00.000+10:00</published><updated>2006-03-29T08:22:04.176+10:00</updated><title type='text'>Firing squad</title><content type='html'>&lt;blockquote&gt;I think we should take the “Web Services” label into the jailyard, strap on a blindfold, give it a last cigarette, and shoot it. It doesn’t mean much any more, and to the extent that it does, it’s misleading: WS-* doesn’t have much of the Web about it. I don’t have a proposal for a new name for the WS-* style; sorry, but I just don’t care.&lt;/blockquote&gt;

From Tim Bray, &lt;a href="http://www.tbray.org/ongoing/When/200x/2006/03/26/On-REST"&gt;Styles: Beyond WS and REST&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114358452413602690?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114358452413602690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114358452413602690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114358452413602690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114358452413602690'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/03/firing-squad.html' title='Firing squad'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114319831149352746</id><published>2006-03-24T20:54:00.000+10:00</published><updated>2006-03-24T21:10:04.346+10:00</updated><title type='text'>The Wrong Questions</title><content type='html'>&lt;p&gt;Walking around the office this last week, I've begun to notice some things I've forgotten about large bureaucracies built around IT projects. Everyone has great answers, but they're answering the wrong questions.&lt;/p&gt;

&lt;p&gt;A couple of examples. We're collocated within a division who manage the development and deployment of large projects within the company. Walking through the office last week I saw a large poster of the "Rational Unified Process - Process Made Practical". Now I've never developed under any Rational process (or tools for that matter), but the idea of something that calls itself the "Unified Process" (complete with caps) struck fear in my heart.&lt;/p&gt;

&lt;p&gt;In a previous role, we had the experience of receiving several functional requirements specifications that were not suitable to develop from. They missed several key requirements, did not accurately describe the current system and contained lots of diagrams that were nothing more that pretty pictures. One of these specs was a 30-odd page Word file that when distilled contained a page and a half of requirements in bullet point form.&lt;/p&gt;

&lt;p&gt;Now, from a business point of view I'm sure these specs were of value, but for their intended purpose they were of little. The problem was, the documents were produced within a process that did not take into account their value to development, only on their adherence to documentation standards. In one case, the requirements had not been gathered from the customers, and the touch points with the function and capabilities of the current system had not been checked with those who knew it best. The document was derived in complete isolation, from a higher level document alone.&lt;/p&gt;

&lt;p&gt;Now I don't think that anyone truly believes that we know how to develop software. Those of us who practice XP would like to think that agile is &lt;em&gt;the way and the light&lt;/em&gt;. I believe it's a great step forward - and a step that practices self review and the infamous continuous improvement - but it may not be the best way to develop all software.&lt;/p&gt;

&lt;p&gt;All in all I have the sinking feeling that there are lots of people are all busy doing a wonderful job that contributes little to the effective delivery of a software project. There are lots of great answers, but the questions being asked are not the ones that should be.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114319831149352746?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114319831149352746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114319831149352746' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114319831149352746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114319831149352746'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/03/wrong-questions.html' title='The Wrong Questions'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114233509100750534</id><published>2006-03-14T21:17:00.000+10:00</published><updated>2006-03-15T21:09:25.406+10:00</updated><title type='text'>You know you have problems when...</title><content type='html'>&lt;ul&gt;
&lt;li&gt;Your classes are over 5000 lines long.&lt;/li&gt;
&lt;li&gt;You compare your class to three JDK classes.&lt;/li&gt;
&lt;li&gt;You incorporate transaction management, path management, file management, connection &amp;amp; URL semantics in a single class.&lt;/li&gt;
&lt;li&gt;Your class-level javadoc is 100 lines long.&lt;/li&gt;
&lt;li&gt;You use a version of commons httpclient that has bugs parsing URLs with ports &amp;amp; is incompatible with the latest release.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also known as &lt;a href="http://svn.apache.org/viewcvs.cgi/jakarta/slide/trunk/webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResource.java?view=markup"&gt;WebdavResource&lt;/a&gt;. Why this sort of code continues to be written is bizarre.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update. As James has pointed out in the comments, editing your blog over a modem when you cannot spell is not good. I've never had a good experience with slide, and none of my recent experiences is any better.&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114233509100750534?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114233509100750534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114233509100750534' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114233509100750534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114233509100750534'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/03/you-know-you-have-problems-when.html' title='You know you have problems when...'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-114065649985357298</id><published>2006-02-23T10:17:00.000+10:00</published><updated>2006-02-23T16:34:10.083+10:00</updated><title type='text'>The C guru</title><content type='html'>&lt;p&gt;We have the pleasure of inheriting an application written in C that wraps a GDS API.  I've been in the process of upgrading the API to the latest version and ran into a few stumbling blocks. In typical fasion, I'm posting the resolutions them here so I can find them again.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ldd - Lists shared library dependencies&lt;/li&gt;
&lt;li&gt;nm - Lists symbols from object files&lt;/li&gt;
&lt;li&gt;objdump - Displays information from object files. This is like nm on steroids, and apparently also lists symbols for file that have had their symbols stripped.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BTW, the title of this post does not alude to me, but rather a label I've been throwing around at work for kicks, only it hasn't stuck to someone yet!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-114065649985357298?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/114065649985357298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=114065649985357298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114065649985357298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/114065649985357298'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/02/c-guru.html' title='The C guru'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-113886084347122839</id><published>2006-02-02T14:54:00.000+10:00</published><updated>2006-02-03T14:55:03.363+10:00</updated><title type='text'>Continuous Integration</title><content type='html'>&lt;p&gt;Was having lunch today with a &lt;a href="http://www.thenewsbeforethenews.com/"&gt;friend&lt;/a&gt; of mine and one of his &lt;a href="http://gregluck.com/blog/"&gt;colleagues&lt;/a&gt; when the topic of my current work came up. I told him that I was working on a new feature of our product and had spent the last chunk of time integrating it with the existing codebase. Greg commented that if I was performing continuous integration I wouldn't have run into this problem. My reply was that we were and I went on to explain why I was having problems.&lt;/p&gt;

&lt;p&gt;On the walk back to the office however, I thought some more about the question and it struck me that I'd misinterpreted it. On reflection I think that perhaps there are two ways that we could have completed this work and continuous integration means more than just good tests running in a continuous build environment.&lt;/p&gt;

&lt;h4&gt;Separate Implementation Method&lt;/h4&gt;

&lt;p&gt;This is the approach we took. Basically, we came up with a high-level approach, decided where we were going to hook it in, then built up the code to match the existing functionality (using a bottom-up TDD approach). We then (this is the situation I'm in now) tried to hook it into the exising code base, where I discovered we did not currently have access to required details.&lt;/p&gt;

&lt;h4&gt;Integrate Always Method&lt;/h4&gt;

&lt;p&gt;Using this approach we would break the system up front by integrating our new code directly into the existing code base. The more code we had written, the closer the system would be to completion. We wouldn't need to perform after the fact integration and we'd more easily know when we where finished.&lt;/p&gt;

&lt;h4&gt;Summary&lt;/h4&gt;

&lt;p&gt;In hindsight, we could have taken option 2 and saved ourselves the hassle. One problem with it is as we are working on a production system, we cannot break current functionality as maintenance releases are frequent and business often changes priority by pulling us off and on "sub-projects" according to their need. For us, this approach requires access to a separate source branch (which we have) in order not to break the system. To me this highlights some lessons I've obviously forgotten...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-113886084347122839?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/113886084347122839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=113886084347122839' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113886084347122839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113886084347122839'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/02/continuous-integration.html' title='Continuous Integration'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-113806591771969478</id><published>2006-01-24T11:17:00.000+10:00</published><updated>2006-01-25T07:58:01.126+10:00</updated><title type='text'>jMock ordering</title><content type='html'>&lt;p&gt;In case anyone (i.e. me next week) needs to specify explicit method ordering in jMock, here it is. This code specifies the order of a chain of method calls (it came from testing a wire protocol implementation - don't ask...), rather than just expecting &lt;a href="http://www.jmock.org/dynamock-comparison.html"&gt;all calls to come after a single call&lt;/a&gt;. In particular note the ordering of the &lt;code&gt;id()&lt;/code&gt; and &lt;code&gt;after()&lt;/code&gt; calls, once again IntelliJ saves the day.&lt;/p&gt;

&lt;pre&gt;
Mock mock = mock(RedstripeSocketTransport.class);
mock.expects(once()).method(METHOD_OPEN).id("CallOpen");
mock.expects(once()).method(METHOD_WRITE).with(eq(seededRequest))
    .after("CallOpen").will(returnValue("foo")).id("CallWrite");  
mock.expects(once()).method(METHOD_READ).after("CallWrite")
    .will(returnValue(seededResponse)).id("CallRead");
mock.expects(once()).method(METHOD_CLOSE).after("CallRead");
return (RedstripeSocketTransport) mock.proxy();
&lt;/pre&gt;

&lt;p&gt;Note that that &lt;code&gt;write()&lt;/code&gt; does not actually return a value in the production code, it's in the post to help me remember ;) Apologies to Andrew if he's posted this already, I thought he had, but google does not know about it...&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Vlad has made a good suggestion in the comments, that statements have the method name given to them as ID by default. I'd seen this as an error message but wasn't sure what it meant.&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-113806591771969478?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/113806591771969478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=113806591771969478' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113806591771969478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113806591771969478'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/01/jmock-ordering.html' title='jMock ordering'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-113798458526591161</id><published>2006-01-23T12:36:00.000+10:00</published><updated>2006-01-23T12:49:45.283+10:00</updated><title type='text'>Closures for Java</title><content type='html'>&lt;p&gt;Danny's been talking about &lt;a href="http://www.blog.dannynet.net/archives/39"&gt;Closures in Java&lt;/a&gt;. We did a &lt;a href="http://cvs.sourceforge.net/viewcvs.py/jrdf/jrdf/test/java/org/jrdf/util/test/AssertThrows.java?view=markup"&gt;similar thing&lt;/a&gt; in JRDF for testing.&lt;/p&gt;

&lt;pre&gt;
AssertThrows.assertThrows(RuntimeException.class, new AssertThrows.Block() {
    public void execute() throws Throwable {
      somethingThatIExpectWillThrowAnException();
    }
});
&lt;/pre&gt;

&lt;p&gt;All in all the syntax is ugly and nowhere near as neat as Ruby's, however such constructs can significantly cut back on duplication.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-113798458526591161?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/113798458526591161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=113798458526591161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113798458526591161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113798458526591161'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/01/closures-for-java.html' title='Closures for Java'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-113762450177713832</id><published>2006-01-19T08:44:00.000+10:00</published><updated>2006-01-19T08:48:21.800+10:00</updated><title type='text'>Up yours</title><content type='html'>&lt;p&gt;Now this is priceless: Mac OSX. &lt;a href="http://www.cashncarrion.co.uk/products/16103/685/"&gt; Mac OSX Up Yours T-Shirt&lt;/a&gt;. &lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.cashncarrion.co.uk/shopimages/products/normal/TechnoDepot_Mac_OSX_TShirt.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://www.cashncarrion.co.uk/shopimages/products/normal/TechnoDepot_Mac_OSX_TShirt.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-113762450177713832?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/113762450177713832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=113762450177713832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113762450177713832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113762450177713832'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2006/01/up-yours.html' title='Up yours'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-113512562042113952</id><published>2005-12-21T09:49:00.000+10:00</published><updated>2005-12-21T10:40:20.463+10:00</updated><title type='text'>Exception messages</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6952/1077/1600/tssexception.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6952/1077/400/tssexception.jpg" border="0" alt="" /&gt;&lt;/a&gt; I've been spending a lot of time working on legacy code lately and apart from everything else, the thing that sticks out is good exception handling. Doing this has firmed my belief in handling exceptions as close to the source as possible (or alternatively where you have the most context) and wrapping them in RuntimeExceptions (or subclasses of). It also highlights the importance of placing decent messages into exceptions. The usual "Cannot do X" is next to useless. In our bookings engine you have all sorts of good context, booking numbers, flight details, site codes, etc. that allow you to track down problems in code that a stack trace doesn't always allow.&lt;/p&gt;

&lt;p&gt;What prompted this post was the above image from &lt;a href="http://www.theserverside.com/tss"&gt;TheServerSide.com&lt;/a&gt; with a wonderful message.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-113512562042113952?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/113512562042113952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=113512562042113952' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113512562042113952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113512562042113952'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/12/exception-messages.html' title='Exception messages'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-113461996512664305</id><published>2005-12-15T14:00:00.000+10:00</published><updated>2005-12-15T14:12:45.140+10:00</updated><title type='text'>Software Quality</title><content type='html'>&lt;p&gt;I've been meaning to write about the cost of writing software for a while (unfortunately it's sitting as a draft), but the recent &lt;a href="http://www.latimes.com/business/la-fi-nikkei14dec14,1,2885825.story?ctrack=1&amp;cset=true"&gt;Tokyo Stock Exchange&lt;/a&gt; fiasco highlights the true cost of not making the effort to write software correctly. When will people (i.e. the management with the money bags) learn that the cost of maintenance and also mistakes are orders of magnitude higher than the costs of doing it properly the first time (and doing it once). Creating quality software is not rocket science, there are &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;well known methods&lt;/a&gt; for doing this. What I find amazing is how many organisations baulk at paying slightly more initially, but will happily pay bucket loads down the track.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-113461996512664305?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/113461996512664305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=113461996512664305' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113461996512664305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113461996512664305'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/12/software-quality.html' title='Software Quality'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-113330869107106000</id><published>2005-11-30T08:30:00.000+10:00</published><updated>2005-11-30T11:47:14.320+10:00</updated><title type='text'>IntelliJ and Eclipse</title><content type='html'>&lt;p&gt;Well I thought I'd never stoop so low as to enter into this flame war on my blog, but &lt;a href="http://www.thekua.com/rant/?p=260"&gt;Patrick's&lt;/a&gt; Eclipse Live Templates post is worth keeping, so I may as well document my feelings also...&lt;/p&gt;

&lt;p&gt;As everyone knows, Eclipse is the best IDE out there, it's the only choice right? Very wrong. Sure, Eclipse has the market share, has more plugins, and widepsread industry support, but is it really a better IDE? My take on it is no. Yes I can use it, but it feels like the difference between riding a hardtail vs a dually. Sure they both get you from A to B, but one is much nicer to ride and doesn't hurt your ass as much. Another analogy I like to quote is that Eclipse feels like using Word, it tries hard, but in the end you end up fighting the editor just to get work done.&lt;/p&gt;

&lt;p&gt;I've been using Eclipse a lot lately (by a lot I mean a couple of days solid) as we're merging between branches and IntelliJ does not support this (as far as I can tell anyway). I've also had a lot of people ask me for my opinion on IntelliJ as we've got some spare licences floating around and most of the guys are using Eclipse.&lt;/p&gt;

&lt;p&gt;Eclipse does have some good things going for it.
&lt;ul&gt;
&lt;li&gt;Better CVS support. Eclipse seems to have re-thought the entire revision control experience, making it easy to work with. This does have it's downsides, like Eclipse only developers who don't understand CVS or Subversion fundamentals (and cannot operate outside of Eclipse) or with CVS gurus who cannot understand Eclipse's naming of operations and its workflow.&lt;/li&gt;
&lt;li&gt;Better use of screen real estate. The tree in the Package Explorer is a good example of this. Eclipse seems to use much less horizontal and vertical space in the tree view, allowing more classes to fit in a given screen size.&lt;/li&gt;
&lt;li&gt;Eclipse looks nicer (by default) to me, perhaps owing to its SWT heritage vs IntelliJ's Swing. Its window management is a bit more advanced also.&lt;/li&gt;
&lt;li&gt;Eclipse's debugger is apparently better, I say apparently as I haven't noticed it myself. It supports threaded apps in a more logical way, by sticking to a single thread and not jumping threads when breakpoints are hit in these threads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So what are the bad things?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eclipse requires you to save &lt;strong&gt;all the time&lt;/strong&gt;. This gets &lt;strong&gt;very annoying&lt;/strong&gt; when you're used to IntelliJ. Say for example you make a change to a test and you want to run it, why wouldn't I want to save the test file. This stuff should just happen without the need to prompt the user. File management should be taken care of. IntelliJ does a good job of this and allows it to be configurable (the save timing that is), to the point where you forget about it altogether. If you want an older version, it's in CVS (cause you're doing tight spinning when writing new code) or in the local history.&lt;/li&gt;
&lt;li&gt;When comparing files (select two projects, right click, Compare With -&gt; Each Other), copying all changes from one file to another (called "Copy All Non-Conflicting Changes From Right to Left"), Eclipse does not warn you that you need to save the file (I'd been using a different form of merging/diff - the Compare With -&gt; Another Branch or Version... - where this change is automatically saved). So I'd been happily chugging along all morning, when Eclipse crashed, losing a few hours of work. On the plus side, when you do hit save, it quickly shows you the "file has changed" symbols, saves the file, then removes them. Very helpful.&lt;/li&gt;
&lt;li&gt;Eclipse has serious usability issues in graphical diff (Java Source Compare) screen. 1) When merging differences, Eclipse continues to highlight changes, even though they've been applied. Whereas IntelliJ will remove the coloured background and border from changes that you've already applied. This provides an easy visual clue that you've complete a merge. Also, the little buttons for merging are too small, have icons that look the same (probably a result of them being too small, you can see the differences if you look closely) and are in the wrong position. IntelliJ gets this right, by placing the the icons (a cross for delete or directional arrow for merge) at the point of difference, allowing you to clearly see the affect clicking will have.&lt;/li&gt;
&lt;li&gt;Like Word, Eclipse wants to own your files and wants you to make all your changes through it (I assume so it can keep its caches up to date). So if I change a file on the file system (say to back out a change because Eclipse won't undo), Eclipse continuously reports that the file is out of sync with the filesystem. Why on earth it doesn't just sync it and be done with it is beyond me. Now I have to a) remember where I am in my merging, then b) get out of the view, c) re-sync the project and d) re-compare the projects and e) go back to where I was. Again, a little thing that really gets in the way of productivity.&lt;/li&gt;
&lt;li&gt;Eclipse's two ways of comparing do not give the same result. CVS differences (select a project, right click -&gt; Compare With -&gt; Another Branch or Version...) show less files than a straight file system difference (select two projects - representing different branches - right click, Compare With -&gt; Each Other).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By now I think everyone knows my view on the matter, but my short summary is that while Eclipse is fully featured, everything is done in such a half-arsed way that I really don't know how people can use it on a day-to-day basis. I think I'd prefer to go back to using a straight text editor than be forced to work around its inadequacies. And why is IntelliJ better? It just feels right. That's the best way I can put it. Like any tool it takes a while to get used to it, its keyboard shortcuts, etc., but once you learn these you'll never willingly go back. It seems to know what you want to do and will suggest things to improve the way you work all the time. Everyday I find a new thing to like about it. Its smarts are not the Word breed of smarts however. You always have control and it does not bend you into its way of working. It's a tool that works with you rather than against you.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-113330869107106000?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/113330869107106000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=113330869107106000' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113330869107106000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113330869107106000'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/11/intellij-and-eclipse.html' title='IntelliJ and Eclipse'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-113279711422706913</id><published>2005-11-24T08:34:00.000+10:00</published><updated>2005-11-24T13:04:14.636+10:00</updated><title type='text'>Thursday Links, Part II</title><content type='html'>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://rewrite.rickbradley.com/pages/moving_to_rails"&gt;Evaluation: moving from Java to Ruby on Rails for the CenterNet rewrite&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;Greg Luck's &lt;a href="http://gregluck.com/blog/archives/2005/11/architectural_p.html"&gt;Architectural Priniciples&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;The always timely &lt;a href="http://www-inst.eecs.berkeley.edu/~maratb/readings/NoSilverBullet.html"&gt;No Silver Bullet: Essence and Accidents of Software Engineering&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://eaiblueprint.com/3.0/?p=27"&gt;Application Integration and Agility (1): Understanding Agility&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-113279711422706913?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/113279711422706913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=113279711422706913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113279711422706913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113279711422706913'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/11/thursday-links-part-ii.html' title='Thursday Links, Part II'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-113220204140356503</id><published>2005-11-17T14:29:00.000+10:00</published><updated>2005-11-24T13:03:33.666+10:00</updated><title type='text'>Thursday Links</title><content type='html'>&lt;p&gt;Some quick links for Thursday&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.xprogramming.com/xpmag/jatMakingTheDate.htm"&gt;Making the Date&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dilbert.com/comics/dilbert/archive/images/dilbert2002220051116.gif"&gt;Dilbert on Agile Development&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sustainablesoftwaredevelopment.com/"&gt;Sustainable Software Development&lt;/a&gt;,being worked on to help organisations improve the way they build software, using Agile methods;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sustainablesoftwaredevelopment.com/"&gt;vim Regular Expressions&lt;/a&gt; (via &lt;a href="http://prototypo.blogspot.com/"&gt;Dave&lt;/a&gt;);&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.andrewescobar.com/archive/2005/11/11/how-to-safe-sleep-your-mac/"&gt;How to Safe Sleep (Hibernate) Your Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;FindBugs &lt;a href="http://www-128.ibm.com/developerworks/java/library/j-findbug1/"&gt;Part 1&lt;/a&gt; &amp; &lt;a href="http://www-128.ibm.com/developerworks/java/library/j-findbug2/"&gt;Part 2&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-113220204140356503?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/113220204140356503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=113220204140356503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113220204140356503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113220204140356503'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/11/thursday-links.html' title='Thursday Links'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-113165946050134997</id><published>2005-11-11T07:46:00.000+10:00</published><updated>2005-11-11T07:51:10.916+10:00</updated><title type='text'>Another reason not to install Windows</title><content type='html'>&lt;p&gt;As if the world needed more reasons... Here is a blog entry about &lt;a href="http://www.sysinternals.com/blog/2005/10/sony-rootkits-and-digital-rights.html"&gt;Sony's latest DRM tactics&lt;/a&gt;, which has been followed up by the &lt;a href="http://news.bbc.co.uk/2/hi/technology/4400148.stm"&gt;BBC&lt;/a&gt; and &lt;a href="http://www.usatoday.com/tech/news/computersecurity/2005-11-02-sony-patch_x.htm"&gt;USA Today&lt;/a&gt;. There are followup posts &lt;a href="http://www.sysinternals.com/blog/2005/11/sony-you-dont-reeeeaaaally-want-to_09.html"&gt;here&lt;/a&gt; and &lt;a href="http://www.sysinternals.com/blog/2005/11/sonys-rootkit-first-4-internet.html"&gt;here&lt;/a&gt;. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-113165946050134997?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/113165946050134997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=113165946050134997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113165946050134997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113165946050134997'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/11/another-reason-not-to-install-windows.html' title='Another reason not to install Windows'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-113159854291579780</id><published>2005-11-10T14:19:00.000+10:00</published><updated>2005-11-10T15:29:23.553+10:00</updated><title type='text'>Free Smalltalk books</title><content type='html'>&lt;p&gt;In case anyone (like me) wants to get an idea of what smalltalk is about: &lt;a href="http://www.iam.unibe.ch/~ducasse/FreeBooks.html"&gt;Stef's Free Online Smalltalk Books&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-113159854291579780?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/113159854291579780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=113159854291579780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113159854291579780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/113159854291579780'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/11/free-smalltalk-books.html' title='Free Smalltalk books'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112666891448319942</id><published>2005-09-14T12:47:00.000+10:00</published><updated>2005-09-14T16:20:09.733+10:00</updated><title type='text'>SPARQL support</title><content type='html'>&lt;p&gt;I thought that I'd write a bit more about the initial end-to-end support of SPARQL in JRDF. While it's no where near complete, it does parse simple queries and apply them to a graph, giving real results. It's taken a while to get it to this point as I've been concentrating on test-driving the functionality, partly as an exercise in test-driving (can it be done with a SableCC parser) and partly to ensure better quality code that's well structured and loosely coupled. This has drawn out a very nice architecture for the connection layer (connection, parser, executor) that means that it's easy to test and easy to swap out implementations when we come to supporting new languages, which is probably never, but the testability makes it all worthwhile even without this feature. So here's a rough sketch of the current architecture in HTML glory.&lt;p&gt;

&lt;ul style="margin-left:0;padding-left:0;"&gt;
&lt;li&gt;&lt;code&gt;org.jrdf.connection.JrdfConnection&lt;/code&gt; - Top level way to send textual queries to a JRDF graph.
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;org.jrdf.query.QueryBuilder&lt;/code&gt; - Turns textual queries into &lt;code&gt;org.jrdf.query.Query&lt;/code&gt; objects.
    &lt;ul&gt;
      &lt;li&gt;&lt;code&gt;org.jrdf.sparql.parser.QueryParser&lt;/code&gt; - Adapter to compiler (i.e. SableCC) specific class.
        &lt;ul&gt;
          &lt;li&gt;&lt;code&gt;org.jrdf.sparql.analysis.SparqlAnalyser&lt;/code&gt; - Parses the queries into domain objects (e.g. Triple, Query, etc.).
          &lt;ul&gt;
            &lt;li&gt;&lt;code&gt;org.jrdf.sparql.builder.TripleBuilder&lt;/code&gt; - Part of a set of builders that take SableCC &lt;code&gt;org.jrdf.sparql.parser.node.Node&lt;/code&gt;s and turn them into corresponding domain objects, such as ObjectNodes, Triple, etc. As more of SPARQL is implemented, these will be fleshed out more, and probably governed by a higher level class (perhaps called a herder ;).&lt;/li&gt;
          &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;code&gt;org.jrdf.query.JrdfQueryExecutor&lt;/code&gt; - Takes &lt;code&gt;org.jrdf.query.Query&lt;/code&gt; objects and executes then against a graph. This is the class that hooks into a query layer, a very bad one at present!
      &lt;ul&gt;
        &lt;li&gt;Query layer - currently does a select all and filters using an iterator based on the constraints in the query.&lt;/li&gt;
        &lt;li&gt;&lt;code&gt;org.jrdf.graph.Graph&lt;/code&gt; - The JRDF implementation of an RDF graph.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So why didn't I just implement it in Kowari? Well, initially I did, however it proved to be too difficult for a number of reasons. Not all of these were my initial drivers, but it's proved to be a good decision in hindsight.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kowari has a convoluted build system, which while fine for managing a large team of developers, was not agile enough to enable me to develop on the train on my small PowerBook. Kowari's build is broken into components, which is great for pluging, not not so great when you need to build everything from scratch and the dependencies are not always checked. This is one of those issues about being &lt;a href="http://www.livejournal.com/users/sirenian/25061.html"&gt;"owned" by the build&lt;/a&gt; rather than the other way around. Large Ant-based build fines need constant maintenance and refactoring. On a project as large as Kowari, this could almost a full time job. The same issue also manifested itself in it being quite hard to build Kowari in IntelliJ. It was doable, but required a round-a-bout solution that wasn't optimal.&lt;/li&gt;
&lt;li&gt;Slow turn-around on tests. The full test suite (excluding load/performance) in Kowari takes a long time to run (much longer than the full test suite in JRDF) which meant that I'd be spending my entire train ride (and battery) waiting for  tests to complete. Most of this was based on the build system, which because of its componentised nature, has lots of dependancies between components, which aren't always checked properly, resulting in recompilations and rebuilding of JARs when they've just been done. I could have taken the time to fix it (I believe Mark was working on this before Tucana ceased operations), however my PowerBook just isn't grunty enough to handle that kind of workload.&lt;/li&gt;
&lt;li&gt;The unit tests are not unit tests. Most of the tests in Kowari are integration tests, that is, while they may test only a single class, they test that class with the roles of its dependent class filled by real concrete instances, rather than mocks. So the tests not only test the class, but also every other class hanging off the class under test. Consequently, the tests take a long time to run.&lt;/li&gt;
&lt;li&gt;The Kowari code is not test-driven. Even though at Tucana we did our best to ensure we had tests to cover everything (and we did a pretty decent job), these tests are not unit tests and we were not test driving the code, we were &lt;a href="http://nosewheelie.blogspot.com/2005/05/test-before-vs-test-driven.html"&gt;testing before&lt;/a&gt; at best. I wanted to test-drive the code for this, and unfortunately this was harder to do with Kowari than with a fresh(er) codebase.&lt;/li&gt;
&lt;li&gt;The code is tightly coupled. This was the main reason I stopped work in the Kowari codebase and moved to JRDF. It's all over the codebase (see for example &lt;a href="http://sourceforge.net/mailarchive/message.php?msg_id=12931191"&gt;recent&lt;/a&gt; &lt;a href="http://sourceforge.net/mailarchive/message.php?msg_id=12892796"&gt;comments&lt;/a&gt; on the Kowari Developers list about this), but the kicker for me was that the code to execute a query was embedded in the parser - &lt;code&gt;ItqlInterpreter&lt;/code&gt; (Paul also commented on this a while back). Seeing as I wrote a lot of this, I only have myself to blame, but the job of pulling the query execution code out of the parser was too big a job. I wanted to do this, so that I could pull out the common code between SPARQL and iTQL into a set of shared classes and have the language specific bits being the parsers only. All the parsers should need to do is generate Query objects for sending to the query layer, something else should take care of the execution.&lt;/li&gt;
&lt;li&gt;Andrew and I have been bitten by the agile, quality, TDD and refactoring bug, and having our own small project to play with makes this much easier. It also allows us to enforce higher standards on the codebase as there's only two of us that need to agree at the moment.&lt;/li&gt;
&lt;li&gt;Andrew had some ideas about building a query layer, learning from what was done in Kowari&lt;/li&gt;
&lt;li&gt;We're interested in seeing if we can use some of the DI principles in the code, now that we've decoupled the classes and have clear responsibilities. I don't think you'll see a Spring requirement just yet, but you'll see a lot of comments saying things like &lt;code&gt;// FIXME TJA: Set builder using IoC&lt;/code&gt;, which will make the job of plugging in different implementations of things like &lt;code&gt;org.jrdf.query.JrdfQueryExecutor&lt;/code&gt; really easy. It should also make JRDF a lot more embedable than it currently is.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So what's next?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Completion of the SPARQL grammar as it stands in the candidate recommendation (this may be dependent on the next point).&lt;/li&gt;
&lt;li&gt;Implementation of a better query layer. The current iterator-based approach will not scale as it reads the entire graph into memory and then filters out results that match the constraints. &lt;a href="http://morenews.blogspot.com/"&gt;Andrew&lt;/a&gt; has already &lt;a href="http://cvs.sourceforge.net/viewcvs.py/jrdf/jrdf/src/java/org/jrdf/query/relation/"&gt;started work&lt;/a&gt; on this, and I think that it'll be a lot simpler than the model used in Kowari. Kowari has more features also, such as resolvers, that JRDF does not need (nor perhaps want), so we can afford to make it simpler, and learn from what was done in Kowari.&lt;/li&gt;
&lt;li&gt;More long term, and perhaps beyond the scope of JRDF, we could Learn from what guys like &lt;a href="http://enterpriseagile.blogspot.com/"&gt;Obbie Fernandez&lt;/a&gt; are doing in the Ruby arena, especially some of the thought about a Rails-like framework. I'm not convinced as yet, but semweb still needs a killer app (yes, we all know it's WonderGui).&lt;/li&gt;
&lt;li&gt;Andrew wants to release a 0.4 release soon, so perhaps we'll have a SPARQL parser and a stable API in that release. At the moment we've been a bit eager with the refactoring, which is fine up to a point, but we'll need to decide on a stable API as the release nears.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My plan for Kowari is to complete the SPARQL implementation in JRDF and hopefully just update the JRDF version in Kowari, thus getting SPARQL support for free. Of course this assumes there will be none of the normal problems such an upgrade entails. The downside of this is that Kowari is heavily optimised for speed, something that I haven't spent any time on in the work I've been doing. I'm not overly worried by this as the architecture lends itself to plugging in different implementations and really all I've done is create a parser that turns query strings into &lt;code&gt;Query&lt;/code&gt; objects. This parsing does not constitute a significant amount of time in overall query execution. We're lucky in this regard as I fully expect that &lt;a href="http://gearon.blogspot.com/"&gt;someone with more skill&lt;/a&gt; in this area will be able to implement an efficient query executor that plugs directly into Kowari's session or some other mid-level API. In fact, because of the de-coupling of the components in JRDF, this is very easy to do. Some easy options are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a translator that translates &lt;code&gt;org.jrdf.query.Query&lt;/code&gt; instances into &lt;code&gt;org.kowari.query.Query&lt;/code&gt; instances. These &lt;code&gt;Query&lt;/code&gt;s can then be sent directly a &lt;code&gt;org.kowari.server.Session&lt;/code&gt; for execution.&lt;/li&gt;
&lt;li&gt;Create an instance of &lt;code&gt;org.jrdf.query.JrdfQueryExecutor&lt;/code&gt; that takes &lt;code&gt;org.jrdf.query.Query&lt;/code&gt;s and executes them directly against a Kowari API.
&lt;/li&gt;
&lt;li&gt;Then there's the other option of plugging in the JRDF query layer into Kowari's layer. I'm not sure that this is either the right way to go or the most efficient, it smells like a hack to me.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope none of this comes off as criticism for Kowari as this wasn't my intention. It's certainly the best triplestore there is, and the project is moving ahead at great guns now. It's basically a reflection that Kowari is too heavyweight to do what we want to do and that both projects have  different goals. Kowari is effectively a scalable fully transactional database, while JRDF is a Java RDF API. The two can (and should) happily coexist, learning off the work each of us do. Fortunately, this is easy, as we all used to work together (bar the NG guys) and know each other well. Oh, it helps that Paul is a committer on JRDF and Andrew and I are on Kowari...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112666891448319942?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112666891448319942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112666891448319942' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112666891448319942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112666891448319942'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/09/sparql-support.html' title='SPARQL support'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112648678763829213</id><published>2005-09-12T08:28:00.000+10:00</published><updated>2005-09-12T12:30:18.886+10:00</updated><title type='text'>SPARQL support in JRDF</title><content type='html'>&lt;p&gt;The SPARQL support in &lt;a href="http://jrdf.sf.net/"&gt;JRDF&lt;/a&gt; is now working end-to-end. It's very incomplete, but basic &lt;code&gt;SELECT * WHERE { ?s ?p ?o }&lt;/code&gt; type queries are working and being applied to the underlying graph. This means that we now have the full stack that allows you to grab a connection, throw a query at it and then expect a result (Answer) back. Here is the goods running in IntelliJ.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6952/1077/1600/SPARQL%20in%20JRDF.jpg"&gt;&lt;img style="float:left; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6952/1077/200/SPARQL%20in%20JRDF.jpg" border="0" alt=""/&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112648678763829213?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112648678763829213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112648678763829213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112648678763829213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112648678763829213'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/09/sparql-support-in-jrdf.html' title='SPARQL support in JRDF'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112613935047863860</id><published>2005-09-08T08:49:00.000+10:00</published><updated>2005-09-08T13:20:05.530+10:00</updated><title type='text'>SableCC, SPARQL and AST/CSTs</title><content type='html'>&lt;p&gt;In my spare time (i.e. the train ride to work) I've been working on &lt;a href="http://jrdf.sf.net/"&gt;JRDF&lt;/a&gt;, specifically implementing SPARQL support. As I was one of the people who did the original iTQL support in &lt;a href="http://www.kowari.org/"&gt;Kowari&lt;/a&gt;, I pulled most of the inspiration for this  from the &lt;a href="http://www.sablecc.org/"&gt;SableCC&lt;/a&gt; implementation Simon and I did in Kowari. Hence SableCC was a natural choice. However, after talking with Andy S about his &lt;a href="http://jena.hpl.hp.com/ARQ/"&gt;ARQ&lt;/a&gt; work and being generally lazy about keeping up to date with the SPARQL spec, I almost decided to switch to using JavaCC.&lt;/p&gt;

&lt;p&gt;Thankfully Andrew talked me out of it, and JRDF now has simple SPARQL support (&lt;code&gt;SELECT * WHERE { ?s ?p ?o }&lt;/code&gt;) and a rudimentary query layer. And just when I thought that I was the only person in the world who uses SableCC, along comes Nat Pryce with a nice little tutorial on the latest version, &lt;a href="http://nat.truemesh.com/archives/000531.html"&gt;Concrete to Abstract Syntax Transformations with SableCC&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112613935047863860?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112613935047863860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112613935047863860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112613935047863860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112613935047863860'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/09/sablecc-sparql-and-astcsts.html' title='SableCC, SPARQL and AST/CSTs'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112605621456547467</id><published>2005-09-07T11:21:00.000+10:00</published><updated>2005-09-08T08:49:15.336+10:00</updated><title type='text'>Mountain biking and semweb</title><content type='html'>&lt;p&gt;Now this is cool! &lt;a href="http://b4mad.net/datenbrei/archives/2005/09/02/mountain-biking-and-semantic-web/"&gt;Mountain biking and Semantic Web&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;blockquote&gt;In the past two weeks I hacked a little Google Maps application called #B4maps which shows some tracks driven lately. Tracks and the Images used to annotate some waypoints are stored in some semi-good XML file… ... So what we got? An application to show and edit tracks on a map: #B4maps, a webservice to represent this tracks using RDF, a nice query to figure out the waypoints...&lt;/blockquote&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112605621456547467?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112605621456547467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112605621456547467' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112605621456547467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112605621456547467'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/09/mountain-biking-and-semweb.html' title='Mountain biking and semweb'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112565612745380079</id><published>2005-09-02T20:14:00.000+10:00</published><updated>2005-09-02T20:15:27.466+10:00</updated><title type='text'>On unit testing and "rm -rf src/java"</title><content type='html'>&lt;p&gt;I've just gone through the task of recovering the source files I've been working on for &lt;a href="http://www.jrdf.org/"&gt;JRDF&lt;/a&gt; after an inadvertent &lt;code&gt;rm -rf src/java&lt;/code&gt;. As you would expect this is not a pleasant experience... Two things however, made my life easier.&lt;/p&gt;

&lt;p&gt;Firstly, using IntelliJ I was able reverse the change as easily as going back in my local history. So this kept me going for a few days, until I needed to commit my changes back to CVS. Here's where the trouble started. CVS gave me the always helpful "XXX is in the way, move it aside" warning and promptly gave me big fat Cs down the screen. Figuring the easiest way to deal with it was to in fact move the files aside, I did so and began a manual merge. Into the ring comes IntelliJ again with its very clean manual comparison tool.&lt;/p&gt;

&lt;p&gt;Secondly, the high quality of the unit tests &lt;a href="http://morenews.blogspot.com/"&gt;Andrew&lt;/a&gt; and I been writing lately (more on that later) ensured that once I'd completed the merge, I could be sure that I'd not lost any functionality. Lucky for me, I've lately taken to storing my test source in a separate source tree (test/java) from my production source (src/java), so my fat fingered delete left the tests intact.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112565612745380079?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112565612745380079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112565612745380079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112565612745380079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112565612745380079'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/09/on-unit-testing-and-rm-rf-srcjava.html' title='On unit testing and &quot;rm -rf src/java&quot;'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112375598112346996</id><published>2005-08-11T20:07:00.000+10:00</published><updated>2005-08-11T20:26:21.126+10:00</updated><title type='text'>Brisbane MTB Links</title><content type='html'>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://mtbfreak.com/default.php"&gt;Mountain Bike Web Magazine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mtbdirt.com.au/"&gt;MTB Dirt&lt;/a&gt;, has good &lt;a href="http://www.mtbdirt.com.au/modules.php?name=Sections"&gt;riding maps&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112375598112346996?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112375598112346996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112375598112346996' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112375598112346996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112375598112346996'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/08/brisbane-mtb-links.html' title='Brisbane MTB Links'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112364207564821987</id><published>2005-08-10T12:46:00.000+10:00</published><updated>2005-08-10T12:48:41.713+10:00</updated><title type='text'>Ruby Links</title><content type='html'>&lt;p&gt;So I don't forget them... &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.onestepback.org/articles/10things/index.html"&gt;10 Things Every Java Programmer Should Know About Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.onestepback.org/articles/usingruby/index.html"&gt;Using Ruby&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112364207564821987?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112364207564821987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112364207564821987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112364207564821987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112364207564821987'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/08/ruby-links.html' title='Ruby Links'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112364190567960852</id><published>2005-08-10T12:40:00.000+10:00</published><updated>2005-08-10T12:45:05.683+10:00</updated><title type='text'>BUFD</title><content type='html'>&lt;p&gt;Big Up Front Design, been seeing too much of this recently. Naresh Jain &lt;a href="http://jroller.com/page/njain?entry=while_the_debate_on_upfront"&gt;has some comments&lt;/a&gt; that are quite interesting.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112364190567960852?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112364190567960852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112364190567960852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112364190567960852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112364190567960852'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/08/bufd.html' title='BUFD'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112356455301815936</id><published>2005-08-09T15:12:00.000+10:00</published><updated>2005-08-09T15:15:53.026+10:00</updated><title type='text'>Dependency Injection</title><content type='html'>&lt;p&gt;Further to &lt;a href="http://nosewheelie.blogspot.com/2005/07/what-does-simplest-thing-mean.html"&gt;my post about doing the simplest thing&lt;/a&gt; (which turned into an Ioc/DI rant), Jim Weirich has a nice post about &lt;a href=""&gt;DI in dynamically typed languages&lt;/a&gt;, i.e. Ruby. The post starts off with a nice little intro to inversion, and moves onto examples in Ruby.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112356455301815936?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112356455301815936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112356455301815936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112356455301815936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112356455301815936'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/08/dependency-injection.html' title='Dependency Injection'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112355413343031400</id><published>2005-08-09T12:11:00.000+10:00</published><updated>2005-08-09T12:22:13.436+10:00</updated><title type='text'>Quick links for today</title><content type='html'>&lt;ul&gt;
&lt;li&gt;This is neat, Google Maps can work off lat/long, so once you find your coords, you can plug them in: &lt;a href="http://maps.google.com/maps?q=brisbane,australia&amp;ll=-27.70000,153.15000&amp;spn=0.017671,0.029762&amp;t=h&amp;hl=en"&gt;my house&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A couple of useful tools for doing conversions between different representations of the same thing, e.g. going from web service generated objects to domain. &lt;a href="http://morph.sourceforge.net/"&gt;Morph&lt;/a&gt; and &lt;a href="http://gleamynode.net/dev/lorentz/docs/"&gt;Lorentz&lt;/a&gt; (from &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=35700"&gt;TSS&lt;/a&gt;). I've been exploring a similar idea in JRDF, where I map between SableCC generated parser objects into my local representation of the same thing. I think generics will make my life easier here, but I'm yet to find the right syntax to allow me to do this.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2005/06/29/spring-ejb3.html?page=1"&gt;POJO Application Frameworks: Spring Vs. EJB 3.0&lt;/a&gt;, enough said.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.williamcaputo.com/archives/000224.html"&gt;Sticky tests&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112355413343031400?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112355413343031400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112355413343031400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112355413343031400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112355413343031400'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/08/quick-links-for-today.html' title='Quick links for today'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112224842843489253</id><published>2005-07-25T09:30:00.000+10:00</published><updated>2005-07-25T09:40:59.093+10:00</updated><title type='text'>The Middle East for Geeks</title><content type='html'>&lt;p&gt;From &lt;a href="http://tbray.org/ongoing/When/200x/2005/07/23/Geeks-Middle-East"&gt;Tim&lt;/a&gt; comes &lt;a href="http://blogs.sun.com/roller/page/ThinGuy?entry=the_war_on_terror_as"&gt;The War on Terror&lt;/a&gt;. This one is probably for those with a sense of humour and a left leaning.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112224842843489253?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112224842843489253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112224842843489253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112224842843489253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112224842843489253'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/07/middle-east-for-geeks.html' title='The Middle East for Geeks'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112200666784644728</id><published>2005-07-22T09:52:00.000+10:00</published><updated>2005-07-22T14:31:07.866+10:00</updated><title type='text'>XINS</title><content type='html'>&lt;p&gt;&lt;a href="http://xins.sourceforge.net/"&gt;XINS&lt;/a&gt; looks like an interesting technology for simplifying web services, well, if its marketing lives up to the hype. They've just released a &lt;a href="http://xins.sourceforge.net/primer.html"&gt;XINS Primer&lt;/a&gt; that takes you through building a web service using XINS. And for once, someone built a tutorial on a Unix platform ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112200666784644728?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112200666784644728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112200666784644728' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112200666784644728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112200666784644728'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/07/xins.html' title='XINS'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112198987992164050</id><published>2005-07-22T09:51:00.000+10:00</published><updated>2005-07-22T09:51:19.926+10:00</updated><title type='text'>Generalizing Specialists: Improving Your IT Career Skills</title><content type='html'>&lt;p&gt;&lt;blockquote&gt;I believe that to become an agile software developer that you need to move away from being a narrowly focused specialist to become more along the lines of what I like to call a generalizing specialist.  A generalizing specialist is someone with one or more technical specialties who actively seeks to gain new skills in both their existing specialties as well as in other areas, including both technical and domain areas. When you get your first job as an IT professional it is often in the role of a junior programmer or junior DBA.  You will initially focus on becoming good at that role, and if you’re lucky your organization will send you on training courses to pick up advanced skills in your specialty.  Once you’re adept at that specialty, or even when you’ve just reached the point of being comfortable at it, it is time to expand your horizons and learn new skills in different aspects of the software lifecycle and in your relevant business domain.  When you do this you evolve from being a specialist to being a generalizing specialist.  Generalizing specialists are often referred to as craftspeople or even "renaissance developers".&lt;/blockquote&gt;&lt;/p&gt;

Source: &lt;a href="http://www.agilemodeling.com/essays/generalizingSpecialists.htm"&gt;Generalizing Specialists: Improving Your IT Career Skills&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112198987992164050?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112198987992164050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112198987992164050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112198987992164050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112198987992164050'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/07/generalizing-specialists-improving.html' title='Generalizing Specialists: Improving Your IT Career Skills'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112192425615136904</id><published>2005-07-21T15:29:00.000+10:00</published><updated>2005-07-21T15:37:36.156+10:00</updated><title type='text'>40 Things That Only Happen In Movies</title><content type='html'>&lt;p&gt;This is golden! &lt;a href="http://www.nostalgiacentral.com/features/20moviethings.htm"&gt;40 Things That Only Happen In Movies&lt;/a&gt;. My favourites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should you wish to pass yourself off as a German officer, it will not be necessary to learn to speak German. Simply speaking English with a German accent will do.&lt;/li&gt;
&lt;li&gt;If you are heavily outnumbered in a fight involving martial arts, your opponents will wait patiently to attack you one by one by dancing around you in a threatening manner until you have defeated their predecessor.&lt;/li&gt;
&lt;li&gt;Rather than wasting bullets, megalomaniacs prefer to kill their enemies with complicated devices incorporating fuses, pulleys, deadly gases, lasers and man-eating sharks.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112192425615136904?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112192425615136904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112192425615136904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112192425615136904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112192425615136904'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/07/40-things-that-only-happen-in-movies.html' title='40 Things That Only Happen In Movies'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112182738215922239</id><published>2005-07-20T12:37:00.000+10:00</published><updated>2005-07-20T12:43:02.163+10:00</updated><title type='text'>Tripletest Report</title><content type='html'>&lt;p&gt;&lt;a href="http://prototypo.blogspot.com/"&gt;Dave Wood reports&lt;/a&gt; on the results of the &lt;a href="http://tripletest.sourceforge.net/2005-06-08/index.html"&gt;Tripletest Report&lt;/a&gt;, a report comparing Kowari and Sesame. This confirms Tucana's former internal performance testing. An interesting note is that they only tested up to 20 million triples, back in the day we were regularly testing up to 500 million during load and performance tests. Plans for the new backing store will increase this even further, if it's ever implemented...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112182738215922239?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112182738215922239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112182738215922239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112182738215922239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112182738215922239'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/07/tripletest-report.html' title='Tripletest Report'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112174682701246313</id><published>2005-07-19T14:18:00.000+10:00</published><updated>2005-07-20T12:45:24.576+10:00</updated><title type='text'>What does "the simplest thing" mean?</title><content type='html'>&lt;p&gt;Agile advocates often tout the adage do "the simplest thing". Indeed I've heard this phrase used as both justification for and criticism of agile methodologies (XP in particular). However, many agilers and non-agilers alike often have trouble knowing just what is the simplest thing. I often use the phrase within a given context, meaning the simplest thing given a number of healthy practices. Generally these include test driving, loose coupling, &lt;a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29"&gt;use of patterns&lt;/a&gt;) and other sometimes nebulous practices. Which practices are important comes mostly from experience, and I often find it hard to articulate just what practices are important.&lt;/p&gt;

&lt;p&gt;To help, let's look at doing the simplest thing for a simple example, linking to an external API, in this case an XPath processor. The example comes from a recent project, actually, a lot of my recent rants come from this project. This project linked to an XPath API directly in over 300 places and when we needed to replace the implementation with a faster and less memory intensive processor, we were forced to change all of these lines of code, increasing the chances of new problems and regression.&lt;/p&gt;

&lt;h4&gt;Simplest Simplest&lt;/h4&gt;

&lt;p&gt;In order to hook into this API, I simply embed a call to the API directly in my code.&lt;/p&gt;

&lt;pre&gt;
class ElementFinder {
    void findElement() {
        Element element = XPathAPI.findSingleElement("...");
    }
}
&lt;/pre&gt;

&lt;p&gt;I'd say that this is the absolute simplest thing that you can do to link to this API. It's quick and does what is desired, but what are the downsides?
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Tightly coupled to implementation - If I was to use the same code in 300 classes, and then find I needed to change APIs (say as a result of performance testing), I'm stuck with changing 300 lines of code.&lt;/li&gt;
  &lt;li&gt;Untestable - I can't test that my code does the right thing as I'm calling directly into the API I want to use. For example I cannot drop a mock in during unit testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Uncoupled Simplest&lt;/h4&gt;

&lt;p&gt;The next step in de-coupling our example is to remove the direct call, and hide it behind an API of our own.&lt;/p&gt;

&lt;pre&gt;
class BetterXPathApi {
    Element findSingleNode(String xpath) {
        return XPathAPI.findSingleNode(xpath);
    }
}

class ElementFinder {
    void findElement() {
        Element element = BetterXPathApi.findSingleElement("...");
    }
}
&lt;/pre&gt;

&lt;p&gt;The beauty of this is that whenever we want to call the external API we call through our own version, so if we want to changed the backing implementation, we just need to change one line. But what are the downsides?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Tightly coupled to implementation - Even though we've pulled out the call to the external API we cannot change the call without changing code and I can't swap out implementations easily.&lt;/li&gt;
  &lt;li&gt;Untestable - We still cannot test that our code does the right thing as we can't (easily) set a mock in place of our &lt;code&gt;BetterXPath&lt;/code&gt; code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Interface Simplest&lt;/h4&gt;

&lt;p&gt;To make this more adaptable, we can hide our implementation class behind an interface.&lt;/p&gt;

&lt;pre&gt;
interface BetterXPathApi {
    Element findSingleNode(String xpath);
}

class XercesXPathApi implements BetterXPathApi {
    Element findSingleNode(String xpath) {
        return XPathAPI.findSingleNode(xpath);
    }
}

class ElementFinder {
    void findElement() {
        BetterXPathApi xpathApi = new XercesXPathApi();
        Element element = xpathApi.findSingleElement("...");
    }
}
&lt;/pre&gt;

&lt;p&gt;This version is a lot better than the last, the implementation is abstracted behind an interface allowing us to swap implementations easily. But what are the downsides?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Untestable - We still can't drop in a mock in place of our implementation to test that we're doing the right thing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;IoC/Dependancy Injection Simplest&lt;/h4&gt;

&lt;p&gt;To make this even more adaptable and easily testable, we can allow implementations to be dropped in using IoC or dependancy injection (we'll use the constructor form to make it easier).&lt;/p&gt;

&lt;pre&gt;
interface BetterXPathApi {
    Element findSingleNode(String xpath);
}

class XercesXPathApi implements BetterXPathApi {
    Element findSingleNode(String xpath) {
        return XPathAPI.findSingleNode(xpath);
    }
}

class ElementFinder {
    BetterXPathApi xpathApi;
    ElementFinder(BetterXPathApi xpathApi) {
        this.xpathApi = xpathApi;
    }
    void findElement() {
        Element element = xpathApi.findSingleElement("...");
    }
}
&lt;/pre&gt;

&lt;p&gt;What we've done is decouple our construction of the implementation with its use, delegating the construction to some other entity. So while this may seem more complex, it allows us to drop in implementations to suit our needs for example during unit testing or at runtime using an IoC container.&lt;/p&gt;

&lt;p&gt;So now we've gone from one class to three and increased the lines of code from five to seventeen. But we've loosened the coupling between our code and the external API we're linking against, improved its testability and clarified its intent. So while this may not be the simplest simplest code, it's worthwhile taking a little extra time to build in some things which increase the health of the code.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112174682701246313?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112174682701246313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112174682701246313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112174682701246313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112174682701246313'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/07/what-does-simplest-thing-mean.html' title='What does &quot;the simplest thing&quot; mean?'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112174667614768482</id><published>2005-07-19T14:16:00.000+10:00</published><updated>2005-07-19T14:17:56.153+10:00</updated><title type='text'>JavaDoc Problems</title><content type='html'>&lt;p&gt;Seems like the 1.5 version of JavaDoc won't generate documentation for classes that have package local (default) scope and are not referenced by source included in the JavaDoc command (i.e. they're only referenced in test code). Bug or feature?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112174667614768482?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112174667614768482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112174667614768482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112174667614768482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112174667614768482'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/07/javadoc-problems.html' title='JavaDoc Problems'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112138518136734040</id><published>2005-07-15T09:42:00.000+10:00</published><updated>2005-07-15T09:53:01.373+10:00</updated><title type='text'>Ping Pong Development</title><content type='html'>&lt;p&gt;Back in my Suncorp days (sounds like the far past doesn't it ;), we did "XP with the notches turned up to 11." One of the really good practices we used was when pairing, we'd have one developer writing the test, and the other implementing the production code. This works well if the code writer tries to be as painful as possible by writing the absolute simplest code, thus forcing the test writer to improve the tests. And the cycle goes on...&lt;/p&gt;

&lt;p&gt;So it seems that this technique actually has a name, it's called "ping-pong development". Mike Spille discusses it in &lt;a href="http://www.pyrasun.com/mike/mt/archives/2005/07/13/21.45.29/index.html"&gt;Action Hippo Rangers!&lt;/a&gt; as well as some other things I've noticed with 180 degree turns. While I don't see the sense in going to the extreme he cites, the ping-pong nature of paired development works really really well. As for the 180 degree turns... well, I've seen both some good and some harm come from it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112138518136734040?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112138518136734040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112138518136734040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112138518136734040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112138518136734040'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/07/ping-pong-development.html' title='Ping Pong Development'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112121936520551333</id><published>2005-07-13T10:49:00.000+10:00</published><updated>2005-07-13T13:39:23.923+10:00</updated><title type='text'>JRDF 0.3.4 Released</title><content type='html'>&lt;p&gt;&lt;a href="http://morenews.blogspot.com/2005/07/jrdf-034.html"&gt;Andrew has released&lt;/a&gt; &lt;a href="http://jrdf.sf.net/"&gt;JRDF 0.3.4&lt;/a&gt;. This release includes the updates I've been working on to integrate an SPARQL parser (and also some cleaning up of the build process). The current plan is to create a parser based on a dummy query layer in JRDF. Someone will obviously have to write a real layer, or, I've been thinking of plugging into something like ARQ (the new Jena-derived query engine). This should also enable easy integration into Kowari, where I'd originally planned to write the SPARQL parser.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112121936520551333?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112121936520551333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112121936520551333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112121936520551333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112121936520551333'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/07/jrdf-034-released.html' title='JRDF 0.3.4 Released'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112105021231391246</id><published>2005-07-11T12:46:00.000+10:00</published><updated>2005-07-11T12:50:12.316+10:00</updated><title type='text'>There is no best practices...</title><content type='html'>&lt;p&gt;James Blach writes about there being &lt;a href="http://blackbox.cs.fit.edu/blog/james/archives/000187.html"&gt;no best practice&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;
  &lt;blockquote&gt;Dear Reader, I would like you to give up, henceforth, the idea of &amp;quot;best practice.&amp;quot; Thank you. I want to stamp out "best practice" for several reasons...&lt;/blockquote&gt;
&lt;/p&gt;

&lt;p&gt;I think in general when people say best practice they mean a practice that has been known to work within a given context, well I know I do. So it's technically true that there is no canonical &amp;quot;best&amp;quot; practices.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112105021231391246?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112105021231391246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112105021231391246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112105021231391246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112105021231391246'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/07/there-is-no-best-practices.html' title='There is no best practices...'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-112055830096623966</id><published>2005-07-05T20:07:00.000+10:00</published><updated>2005-07-05T20:11:40.970+10:00</updated><title type='text'>Patterns of Software Craftsmanship</title><content type='html'>&lt;p&gt;&lt;a href="http://redsquirrel.com/dave/work/a2j/"&gt;Patterns of Software Craftsmanship&lt;/a&gt; looks like a promising site for those interested in staying in coding, something I'm not having that much luck with lately. I've worked with a few people like this recently, and in general they seem to be very comfortable staying in a coding role, some actively refusing roles and promotions.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-112055830096623966?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/112055830096623966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=112055830096623966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112055830096623966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/112055830096623966'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/07/patterns-of-software-craftsmanship.html' title='Patterns of Software Craftsmanship'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111995407797785324</id><published>2005-06-28T20:19:00.000+10:00</published><updated>2005-06-28T20:21:17.980+10:00</updated><title type='text'>[httpRange-14] Resolved</title><content type='html'>&lt;p&gt;Well this clears it up: &lt;a href="http://lists.w3.org/Archives/Public/www-tag/2005Jun/0039.html"&gt;[httpRange-14] Resolved&lt;/a&gt;! Seriously, this is common sense, let's hope it sticks.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111995407797785324?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111995407797785324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111995407797785324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111995407797785324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111995407797785324'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/06/httprange-14-resolved.html' title='[httpRange-14] Resolved'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111995435265213509</id><published>2005-06-28T20:14:00.000+10:00</published><updated>2005-06-28T20:31:26.980+10:00</updated><title type='text'>Kowari: A Platform for Semantic Web Storage and Analysis</title><content type='html'>&lt;p&gt;&lt;a href="http://gearon.blogspot.com/"&gt;Paul&lt;/a&gt;, &lt;a href="http://prototypo.blogspot.com/"&gt;Dave&lt;/a&gt; and my &lt;a href="http://prototypo.blogspot.com/"&gt;Kowari&lt;/a&gt; paper has finally been published (officially that is).&lt;/p&gt;

&lt;p&gt;&lt;blockquote&gt;Large-scale Semantic Web applications require large-scale storage of Resource Description Framework (RDF) information and a means to analyze that information via the Web Ontology Language (OWL) in near real time. The Kowari Metastore was designed as a purpose-built RDF database to fulfill this requirement. Kowari provides a scalable, transaction-safe storage infrastructure for RDF statements and an expressive query language for their analysis, with or without the use of a subset of the RDF Schema and/or OWL languages. OWL Lite plus the full cardinality constraints from OWL Full are currently supported via the interactive Tucana Query Language (iTQL) or the Simple Ontology Framework API (SOFA). The native quad-store indexing scheme used in Kowari has been shown to scale to hundreds of millions of RDF statements on a single machine. Kowari is an Open Source project licensed under the Mozilla Public License, version 1.1.&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;This is an overview paper, intended to give a good overview of the workings of Kowari without going into too much detail. This is good timing, as &lt;a href="http://morenews.blogspot.com/"&gt;Andrew&lt;/a&gt; and I have been working on &lt;a href="http://jrdf.sourceforge.net/"&gt;JRDF&lt;/a&gt; updates recently, including adding SPARQL support.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://wiki.usefulinc.com//Kowari:_A_Platform_for_Semantic_Web_Storage_and_Analysis"&gt;Flame on&lt;/a&gt;!!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111995435265213509?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111995435265213509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111995435265213509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111995435265213509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111995435265213509'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/06/kowari-platform-for-semantic-web.html' title='Kowari: A Platform for Semantic Web Storage and Analysis'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111995509890463423</id><published>2005-06-28T20:09:00.000+10:00</published><updated>2005-06-28T20:38:18.906+10:00</updated><title type='text'>Keith's Law of System Updates</title><content type='html'>&lt;p&gt;Well, wouldn't you know it, our performance report was almost finished and I decided to run a system update: &lt;kbd&gt;$ sudo yum update&lt;/kbd&gt;. Of course, I should have listened to Keith's advice on the matter.&lt;/p&gt;

&lt;p&gt;&lt;blockquote&gt;&lt;strong&gt;Keith's Law of System Updates&lt;/strong&gt;: Don't be the first to update your system when new software becomes available.&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;So I ended up hosing my system 3 hours before we were due in a meeting with the business. Luckily, there's a few spare machines at work, so all was not lost. I'm now thinking that the move to a more supported (by our sysadmins as well as RedHat) distribution of Linux won't be that bad after all.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111995509890463423?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111995509890463423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111995509890463423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111995509890463423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111995509890463423'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/06/keiths-law-of-system-updates.html' title='Keith&apos;s Law of System Updates'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111881282246994921</id><published>2005-06-15T11:48:00.000+10:00</published><updated>2005-06-18T21:41:55.810+10:00</updated><title type='text'>The old way of building software</title><content type='html'>&lt;p&gt;In the not so distant past, developers built software without tests, without refactoring and consequently without hope. The company I currently work for has inherited one such piece of software, which we're now tasked with developing a plan of attack to fix it. I can't begin to explain the number of bad decisions that were made in developing this software, they range from architectural, to code, to build and deployment. From where I sit, most of the problems stem from a lack of process.&lt;/p&gt;

&lt;p&gt;The last project I worked on used the notion of &amp;quot;going dark&amp;quot;. This is where you spent a considerable length of time going off on your own, without using the test, code, refactor cycle (with regular commits). I've seen this (and used it myself) for most of the time that I've been developing software, and had previously thought it the norm. This style of development lends itself to isolated development, lack of knowledge transfer, integration hassles, non-testability and poor code. As this is the norm in the software industry, it's not surprising that it isn't questioned and other methods are not considered. I certainly wasn't aware of another way until very recently.
&lt;/p&gt;

&lt;p&gt;However an alternative does exist, and it's not that hard to achieve. This alternative involves short development cycles, doing a small amount of tested fully refactored work, and regular commits. There's no magic involved, and it lends itself to fully tested code, constant integration, knowledge transfer and robust code that is easy to update as requirements change (which they always do). Of course if you throw pairing in on top, you get even more of the benefits, however judging by recent experiences this is something that managers and most developers are not ready for, even if it produces excellent results.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111881282246994921?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111881282246994921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111881282246994921' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111881282246994921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111881282246994921'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/06/old-way-of-building-software.html' title='The old way of building software'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111837009574147898</id><published>2005-06-10T10:50:00.000+10:00</published><updated>2005-06-10T12:21:35.760+10:00</updated><title type='text'>Apple Intel Summary Posts</title><content type='html'>Once again, &lt;a href="http://arstechnica.com/"&gt;Ars Technica&lt;/a&gt; provides a great summary of the Apple to Intel news.

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://arstechnica.com/columns/mac/mac-20050607.ars"&gt;Picking up the pieces: John Siracusa mourns the Power PC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://arstechnica.com/columns/mac/mac-20050608.ars"&gt;Hell freezes over; it must've been the liquid cooling: Hannibal on the Apple-to-Intel transition&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111837009574147898?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111837009574147898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111837009574147898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111837009574147898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111837009574147898'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/06/apple-intel-summary-posts.html' title='Apple Intel Summary Posts'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111836253825951097</id><published>2005-06-10T10:15:00.000+10:00</published><updated>2005-06-10T10:19:10.820+10:00</updated><title type='text'>A Guide For The Un-Initated To Buying Guinness In An Irish Pub</title><content type='html'>&lt;blockquote&gt;
&lt;p&gt;Choose your pub carefully. A pint of Guinness does not appreciate loud music, loud people or bright flashing lights.&lt;/p&gt;&lt;p&gt;Ask politely for a pint of Guinness. Depending on the pub, it is possible to catch the barmans eye and mouth the word "pint", he will translate this accurately.&lt;/p&gt;

&lt;p&gt;The barman will fill the glass between 70% and 80% capacity. It will then be put to the side for a few moments to allow it "to settle". Once the brownish liquid has almost turned to a solid black the barman will then fill the rest of the glass. NB: do not under any circumstances take the glass before it is filled. Some virgins seem to think that the settling stage is the final stage and walk away with an unfinished pint. At this point we Irish DO understand the predicament, but I assure you it causes endless mirth as well.&lt;/p&gt;

&lt;p&gt;Once you have received your pint, find a comfortable stool or seat, gaze with awe into the deep blackness, raise the pint to your mouth and take a large mouthful. Be firm.&lt;/p&gt;

&lt;p&gt;A good pint can distinguished by a number of methods. A smooth, slightly off- white head is one, another is the residue left on the inside of the glass. These, surpise surprise, are known as rings. As long as they are there you know your're okay. A science of rings is developing - the instance that comes to mind is determining a persons nationality by the number of rings (a ring is dependent on a swig of Guinness each swig leaving it's own ring). An Irishman will have in the region of 5-6 rings (we pace ourselves), an Englishman will have 8-10 rings, an American will have 17-20 (they sip) and an Australian won't have any at all as they tend to knock it back in one go!&lt;/p&gt;
&lt;p&gt;As you near the end of your pint, it is the custom to order another one. It is a well known fact that a bird does not fly on one wing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Link: &lt;a href="http://www.ivo.se/guinness/beginner.html"&gt;http://www.ivo.se/guinness/beginner.html&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111836253825951097?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111836253825951097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111836253825951097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111836253825951097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111836253825951097'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/06/guide-for-un-initated-to-buying.html' title='A Guide For The Un-Initated To Buying Guinness In An Irish Pub'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111777020472352779</id><published>2005-06-03T13:41:00.000+10:00</published><updated>2005-06-03T13:43:24.726+10:00</updated><title type='text'>Monty Python Semweb Jokes</title><content type='html'>&lt;p&gt;I'm always up for some Monty Python take offs, &lt;a href="http://prototypo.blogspot.com/2005/06/too-close-to-home.html"&gt;Dave Wood&lt;/a&gt; mentions a couple. &lt;a href="http://lists.xml.org/archives/xml-dev/200504/msg00260.html"&gt;Semantic Knight&lt;/a&gt; and &lt;a href="http://lists.xml.org/archives/xml-dev/200504/msg00245.html"&gt;The Dead Spec Sketch&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111777020472352779?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111777020472352779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111777020472352779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111777020472352779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111777020472352779'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/06/monty-python-semweb-jokes.html' title='Monty Python Semweb Jokes'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111775090612147267</id><published>2005-06-03T08:17:00.000+10:00</published><updated>2005-06-03T08:21:46.126+10:00</updated><title type='text'>Quick links</title><content type='html'>&lt;dl&gt;
&lt;dt&gt;&lt;a href="http://www.informit.com/articles/article.asp?p=390393&amp;rl=1"&gt;Publish and Subscribe Using C++ and the Observer Pattern&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Separation of concerns is increasingly on the programmer's radar. Given the growing range of data access products and platforms, it is now essential to separate data producers from data consumers. The observer pattern provides a simple but powerful model for achievin&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://hookom.blogspot.com/2004/12/corporate-developer.html"&gt; The Corporate Developer&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Been seeing a lot of this lately where I currently work...&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://ws.apache.org/wsif/overview.html"&gt;Web Services Invocation Framework (WSIF)&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Looks like an interesting way to expose services.&lt;/dd&gt;
&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111775090612147267?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111775090612147267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111775090612147267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111775090612147267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111775090612147267'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/06/quick-links.html' title='Quick links'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111751025674680223</id><published>2005-05-31T13:29:00.000+10:00</published><updated>2005-05-31T13:30:56.750+10:00</updated><title type='text'>Small tidbits</title><content type='html'>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://damagecontrol.codehaus.org/Continuous+Integration+Server+Feature+Matrix"&gt; Continuous Integration Server Feature Matrix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.zugakousaku.com/index.cgi?quartz&amp;samples&amp;en&amp;"&gt;Quartz Composer Samples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://hinchcliffe.org/archive/2005/05/26/250.aspx"&gt;Taking Stock of Web Service Description&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111751025674680223?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111751025674680223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111751025674680223' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111751025674680223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111751025674680223'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/small-tidbits.html' title='Small tidbits'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111744412409010090</id><published>2005-05-30T18:59:00.000+10:00</published><updated>2005-05-30T19:56:04.646+10:00</updated><title type='text'>Trolltech Secures $6.7 Million in Series B Investment Led by Index Ventures</title><content type='html'>&lt;p&gt;This is great news: &lt;a href="http://www.trolltech.com/newsroom/announcements/00000206.html"&gt;Trolltech Secures $6.7 Million in Series B Investment Led by Index Ventures&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;Trolltech®, provider of leading technologies for Linux and cross-platform software development, today announced the completion of a $6.7 million Series B round of financing led by Index Ventures. Existing investors Teknoinvest and Northzone Ventures also participated in this round. The funding will be used to fuel Trolltech's global expansion as it capitalizes on the growing markets for embedded Linux and cross-platform desktop applications.&lt;/blockquote&gt;

&lt;p&gt;Not least they have an office in Brisbane, where I've thought of applying for work in the past. &lt;a href="http://scottcollins.net/blog/2005/05/sco-long-and-thanks-for-all-fish.html"&gt;Scott Collins&lt;/a&gt; has additional information.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111744412409010090?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111744412409010090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111744412409010090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111744412409010090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111744412409010090'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/trolltech-secures-67-million-in-series.html' title='Trolltech Secures $6.7 Million in Series B Investment Led by Index Ventures'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111736368014299658</id><published>2005-05-29T20:46:00.000+10:00</published><updated>2005-05-29T20:48:29.793+10:00</updated><title type='text'>vi Reference Mug</title><content type='html'>&lt;p&gt;Finally, &lt;a href="http://www.cafepress.com/shop/geeks/browse/Ne-25_N-3807_bt-2_pv-geekcheat.11507711"&gt;these&lt;/a&gt; appear to have come back on the market. PI had a couple of these years ago, but both were dropped and broken.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111736368014299658?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111736368014299658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111736368014299658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111736368014299658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111736368014299658'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/vi-reference-mug.html' title='vi Reference Mug'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111733883462933166</id><published>2005-05-29T13:38:00.000+10:00</published><updated>2005-05-29T13:53:54.633+10:00</updated><title type='text'>Backups with Burn Folders</title><content type='html'>&lt;p&gt;I have a two step backup strategy for my Mac, 1) I create a complete bootable clone of my hard disk to an external FireWire disk using &lt;a href="http://www.google.com/url?sa=U&amp;start=1&amp;q=http://www.bombich.com/software/ccc.html&amp;e=9707"&gt;Carbon Copy Cloner&lt;/a&gt; and 2) I create smaller backups of important data to DVDs. I've used a bunch of different methods to create the backups and burn them, including the built-in command line tools to manipulate disk images. However, I've never found any technique that I really like, or is quick enough for me to create these regularly and automatically (my core data is usually around 10Gbm so a lot of manual deletion is usually in order).&lt;/p&gt;

&lt;p&gt;Tiger however includes the new Burn Folders, which are essentially a folder full of symlinks to stuff you want to burn. Fill it up, check its size (Command-I) and burn!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111733883462933166?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111733883462933166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111733883462933166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111733883462933166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111733883462933166'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/backups-with-burn-folders.html' title='Backups with Burn Folders'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111698909497681973</id><published>2005-05-25T12:41:00.000+10:00</published><updated>2005-05-25T12:44:54.980+10:00</updated><title type='text'>New kinds of databases</title><content type='html'>The ACM is hosting an article about forms of databases other than SQL: &lt;a href="http://acmqueue.com/modules.php?name=Content&amp;pa=showpage&amp;pid=299"&gt;Beyond Relational Databases&lt;/a&gt;. Tucana dealt with this issue for a few years, so the point that &amp;quot;relational&amp;quot; databases may not be the only answer is not new, howeve this article gives it good treatment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111698909497681973?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111698909497681973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111698909497681973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111698909497681973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111698909497681973'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/new-kinds-of-databases.html' title='New kinds of databases'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111697464929017677</id><published>2005-05-25T08:41:00.000+10:00</published><updated>2005-05-25T12:40:28.040+10:00</updated><title type='text'>Web Services are easy</title><content type='html'>&lt;p&gt;Oh dear... After my recent experiences with a auto-generated web services from MS-land, &lt;a href="http://www.artima.com/lejava/articles/threeminutes.html"&gt;this article&lt;/a&gt; really worries me. What worries me the most, is that people will think creating web services are easy, and then harass poor developers when they don't build a service in a few minutes.&lt;/p&gt;

&lt;p&gt;To repeat, for anyone who hasn't heard, web services are not hard to create, what is hard is getting them right, removing the squidginess and making them integrate. They're not a panacea for integration woes...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111697464929017677?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111697464929017677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111697464929017677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111697464929017677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111697464929017677'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/web-services-are-easy.html' title='Web Services are easy'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111638442844854220</id><published>2005-05-18T12:04:00.000+10:00</published><updated>2005-05-18T12:47:08.450+10:00</updated><title type='text'>Semantics in action</title><content type='html'>&lt;a href="http://www.softwarememetics.com/"&gt;Dave Wood&lt;/a&gt; is in action in his new role at the MIND lab. Read &lt;a href="http://www.reallysi.com/newsletter15_2.htm"&gt;the interview&lt;/a&gt;. Quite a high level overview of the semantic web, but quite good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111638442844854220?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111638442844854220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111638442844854220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111638442844854220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111638442844854220'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/semantics-in-action.html' title='Semantics in action'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111621674601856709</id><published>2005-05-16T13:39:00.000+10:00</published><updated>2005-05-20T10:26:18.183+10:00</updated><title type='text'>Code Formatting</title><content type='html'>Some links to keep in mind while reading the code standard of my new workplace.
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=71730"&gt;Why Your Code Sucks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://twasink.net/blog/archives/2004/06/_no_comment.html"&gt;/** no comment */&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.stickyminds.com/testing.asp?Function=edetail&amp;ObjectType=ART&amp;ObjectId=9041&amp;tth=DYN&amp;tt=siteemail&amp;iDyn=3"&gt;Write Sweet-Smelling Comments&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111621674601856709?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111621674601856709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111621674601856709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111621674601856709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111621674601856709'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/code-formatting.html' title='Code Formatting'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111615699866627589</id><published>2005-05-15T21:18:00.000+10:00</published><updated>2005-05-20T12:11:01.246+10:00</updated><title type='text'>Dictionary.app</title><content type='html'>&lt;p&gt;It appears that the dictionary used in applications (within text fields, etc.) for spell checking is not the same as the "dictionary" used by Dictionary(.app). The word "preemptively" is flagged as being incorrect, the suggestion is "pre-emptively". However, a quick search in Dictionary shows:&lt;/p&gt;

&lt;blockquote&gt;
&lt;strong&gt;preemptive&lt;/strong&gt;&lt;br/&gt;adjective &lt;br/&gt;serving or intended to preempt or forestall something, esp. to prevent attack by disabling the enemy : &lt;em&gt;preemptive action&lt;/em&gt; | &lt;em&gt;a preemptive strike&lt;/em&gt;.&lt;br/&gt;• relating to the purchase of goods or shares by one person or party before the opportunity is offered to others : preemptive rights.&lt;br/&gt;• Bridge denoting a bid, typically an opening bid, intended to be so high that it prevents or interferes with effective bidding by the opponents.&lt;br/&gt;USAGE See usage at &lt;strong&gt;peremptory&lt;/strong&gt;.
&lt;/blockquote&gt;

&lt;p&gt;(I like the example of a preemptive strike, quite topical considering the news coming out of the US on Iraq.)&lt;/p&gt;

&lt;p&gt;Also, the Command-Control-D shortcut for invoking Dictionary doesn't like hyphenated words. And another thing, double clicking on a word in the full dictionary (i.e. the app not the popup) takes you to the entry for that word, very nice. Seems like it's using WebCore for the rendering, a copy and paste to get the definition above gave me some words in lowercase, even though they're in uppercase in Dictionary, my guess is CSS to the rescue.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111615699866627589?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111615699866627589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111615699866627589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111615699866627589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111615699866627589'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/dictionaryapp.html' title='Dictionary.app'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111577491143841657</id><published>2005-05-11T11:25:00.000+10:00</published><updated>2005-05-25T08:46:49.493+10:00</updated><title type='text'>Axis 1.2 RC1</title><content type='html'>&lt;p&gt;OK, this release of Axis is worse than we previously thought. We're in the process of changing the name of an operation, and thought the easiest way to manage the change was to bring in another operation (being the new name), switch the tests over to the new operation, then remvoe the old operation. Simple.&lt;/p&gt;

&lt;p&gt;Turns out Axis doesn't like two operations on the same port (my teminology may be wrong) with the same parameters. It generates code just fine, but ignores the &lt;code&gt;SOAPAction&lt;/code&gt; header, selecting the first operation defined in the WSDL, instead of the one specified by the action header.&lt;/p&gt;

&lt;p&gt;Nice one.&lt;/p&gt;

&lt;p&gt;Update: Turns out that the I cannot reproduce this again on a different machine. We've changed the WSDL subtely (namespaces and element names), again which scares me.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111577491143841657?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111577491143841657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111577491143841657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111577491143841657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111577491143841657'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/axis-12-rc1.html' title='Axis 1.2 RC1'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111572200520994363</id><published>2005-05-10T20:36:00.000+10:00</published><updated>2005-05-29T13:55:20.633+10:00</updated><title type='text'>A better WSDL</title><content type='html'>&lt;p&gt;The project I'm currently working on is using Web Services as the integration point between itself an the outside world. After using it on a few previous projects, I once had no problems with WS, but have now come to look at it in a new light. There's a good adage that we've adopted, "if you have a problem and you pick XML as a solution, you now have two problems". I think the same sentiments can be levelled at WSDL.&lt;/p&gt;

&lt;p&gt;We've found the technology we're using (Castor/Axis/XSD/etc.) to be "squidgy", such that it sometimes works and sometimes doesn't, failing silently sometimes, working other times when it should fail (for example allowing an operation to be invoked with no message, when the WSDL clearly states otherwise). We've taken steps to sure it up (such as hooking payload validation into the backend, but we're constantly butting heads with it, so much so, that we've developed a mini-methodology for working with changes to the WS interface (no such method required for Java integration points, they have their own niceties :).&lt;/p&gt;

&lt;p&gt;I have no problem with WS in theory, sending XML across HTTP seems like a great way (albeit heavyweight) to do integration, what I do have a problem with is the current state of the standards and the tools (thankfully most are OSS so they can be improved readily).&lt;/p&gt;

&lt;p&gt;Yes, we could have used a REST-based Web Service, but unfortunately bigger organisational issues prevented us from doing so. Still, it's not really the transport mechanism that is broken, much comes down to the way you declare your service, typically done using WSDL.&lt;/p&gt;

&lt;p&gt;So it didn't really strike me as a surprise when I found that Tim Bray is also &lt;a href="http://tbray.org/ongoing/When/200x/2005/05/03/Replacing-WSDL"&gt;replacing WSDL&lt;/a&gt; with something better. He poses two options, his own &lt;a href="http://tbray.org/ongoing/When/200x/2005/05/03/SMEX-D"&gt;SMEX-D&lt;/a&gt; and another, &lt;a href="http://norman.walsh.name/2005/03/12/nsdl"&gt;NSDL&lt;/a&gt;. Now, I'm yet to read either, but they both sound quite promising.&lt;/p&gt;

&lt;p&gt;Update: &lt;a href="http://xins.sourceforge.net/"&gt;XINS - XML Interface for Network Services&lt;/a&gt; seems to be another candidate in this simplification effort.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111572200520994363?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111572200520994363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111572200520994363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111572200520994363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111572200520994363'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/better-wsdl.html' title='A better WSDL'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111572130262716765</id><published>2005-05-10T20:30:00.000+10:00</published><updated>2005-05-10T20:35:02.633+10:00</updated><title type='text'>FileVault</title><content type='html'>Tim Bray is &lt;a href="http://tbray.org/ongoing/When/200x/2005/04/29/BonnieFV"&gt;telling us&lt;/a&gt; that FileVault slows down your system 4x on writes... Hmm, not good, I'd just decided to give it a go on the new Tiger install on my PowerBook. After confirming the comments that I'd heard about IntelliJ being faster on 1.5 - I'm obviously not getting an apple-for-apple comparison - it seems it would be faster still if FileVault were turned off. Most of the observed slowness is in compilation before running tests, which writes quite a few files to the file system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111572130262716765?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111572130262716765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111572130262716765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111572130262716765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111572130262716765'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/filevault.html' title='FileVault'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111520386939641276</id><published>2005-05-04T20:51:00.001+10:00</published><updated>2005-05-25T12:39:30.543+10:00</updated><title type='text'>Test before vs. test driven</title><content type='html'>&lt;p&gt;I've been seeing a lot of articles lately about "test driving" code when developing software. This has appeared most lately in an &lt;a href="http://developer.apple.com/tools/unittest.html"&gt;article on ADC&lt;/a&gt;, but also - as I've been looking for work recently - during interviews. Companies I've worked for have always written tests before they write code (or at worst, just after). This is often passed off as test driven code. However, it isn't. Test driving means writing a very simple test first, that &lt;strong&gt;forces&lt;/strong&gt; you to write the &lt;em&gt;simplest&lt;/em&gt; code that will pass the test.&lt;/p&gt;

&lt;p&gt;So for example, suppose you want to create a class called &lt;code&gt;Xxx&lt;/code&gt;. To do this, first create a class called &lt;code&gt;XxxUnitTest&lt;/code&gt;. Add a method called &lt;code&gt;testCreate()&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;public void testCreate() {
  assertNotNull(new Xxx());
}&lt;/pre&gt;

&lt;p&gt;What this does, is &lt;strong&gt;force&lt;/strong&gt; you to write the implementation class. You can follow the same simple pattern for driving out member methods, the test doesn't need to stay the same, it can change dynamically.&lt;/p&gt;

&lt;pre&gt;public void testCreate() {
  Xxx x = new Xxx();
  assertEquals(“bar”, x.foo());
}&lt;/pre&gt;

&lt;p&gt;We've now driven out the method &lt;code&gt;foo()&lt;/code&gt;. Repeating this process, we can drive out all the implementation, safe in the knowledge that we have pretty good test coverage.&lt;/p&gt;

&lt;p&gt;If you always write the simplest code to pass the test, sometimes you end up needing to triangulate to drive out the desired behaviour. So for example consider the following:&lt;/p&gt;

&lt;pre&gt;public void testFoo() {
  assertEquals(“bar”, new Xxx(“bar”).foo());
}&lt;/pre&gt;

&lt;p&gt;This code implies that the constructor will store the string passed in a member field, then return it when &lt;code&gt;getFoo()&lt;/code&gt; is called. However the simplest code that will pass this test is something like:&lt;/p&gt;

&lt;pre&gt;class Xxx {
  Xxx(String bar) {}
  getFoo() {
   return “bar”;
  }
}&lt;/pre&gt;

&lt;p&gt;This code passes the test, however, it doesn't express the intent implied in the unit test. So now, you need to include a new test that checks a different argument.&lt;/p&gt;

&lt;pre&gt;public void testFoo() {
  assertEquals(“bar”, new Xxx(“bar”).foo());
  assertEquals(“baz”, new Xxx(“baz”).foo());
}&lt;/pre&gt;

&lt;p&gt;So the simplest code that will pass the test will store the parameter passed into the constructor, and return it when &lt;code&gt;getFoo()&lt;/code&gt; is called. Of course, this test lends itself nicely to a little refactoring to reduce the duplication in the test...&lt;/p&gt;

&lt;p&gt;If we were to test before we wrote this class, we would potentially build up a large chunk of test code, that will contain a lot of compile errors, meaning the code is a long way from being complete at any point in time. We may also decide, once we write the code, that the test is not correct, as we learn something by writing the code that we didn't know beforehand. By keeping the tests and the code in tight sync, you minimise the amount of time spent in the wilderness, and ensure good test coverage.&lt;/p&gt;

&lt;p&gt;This approach lends itself nicely to pairing. The pair can work off each other, one writes the failing test, the other does the simplest thing to make it pass, and the cycles continues. This shares the keyboard around, and introduces some good natured competition, usually producing better code than the traditional pairing approach of driver and navigator.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111520386939641276?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111520386939641276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111520386939641276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111520386939641276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111520386939641276'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/test-before-vs-test-driven.html' title='Test before vs. test driven'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111512018187890619</id><published>2005-05-03T21:30:00.000+10:00</published><updated>2005-05-04T20:57:15.826+10:00</updated><title type='text'>Up and racing</title><content type='html'>&lt;p&gt;
Well, after several months of being offline, due to the international move, my blog is now back. I shall be retrofitting all the old content again (for posterity) sometime soon, with more to come. Still not sure about this hosted blog thing, but seems to be all the rage...
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111512018187890619?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111512018187890619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111512018187890619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111512018187890619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111512018187890619'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2005/05/up-and-racing.html' title='Up and racing'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537694019461880</id><published>2004-11-24T20:48:00.000+10:00</published><updated>2005-05-06T20:55:40.200+10:00</updated><title type='text'>Screamfeeder Videos</title><content type='html'>Continuing the Screamfeeder posts of late, I just found a &lt;a href="http://homepage.mac.com/bretto/feeder/index.html"&gt;collection of videos&lt;/a&gt;. Very nice indeed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537694019461880?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537694019461880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537694019461880' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537694019461880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537694019461880'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2004/11/screamfeeder-videos.html' title='Screamfeeder Videos'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537754492435541</id><published>2004-11-22T21:04:00.000+10:00</published><updated>2005-05-06T21:05:44.930+10:00</updated><title type='text'>Biblical Literalists</title><content type='html'>&lt;blockquote&gt;Only about a third of Americans believe that Charles Darwin's theory of evolution is a scientific theory that has been well supported by the evidence, while just as many say that it is just one of many theories and has not been supported by the evidence. The rest say they don't know enough to say. Forty-five percent of Americans also believe that God created human beings pretty much in their present form about 10,000 years ago. A third of Americans are biblical literalists who believe that the Bible is the actual word of God and is to be taken literally, word for word.&lt;/blockquote&gt;

Source:  &lt;a href="http://www.gallup.com/poll/content/login.aspx?ci=14107"&gt;Third of Americans Say Evidence Has Supported Darwin's Evolution Theory&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537754492435541?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537754492435541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537754492435541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537754492435541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537754492435541'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2004/11/biblical-literalists.html' title='Biblical Literalists'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537645854415533</id><published>2004-11-16T20:44:00.000+10:00</published><updated>2005-05-06T20:47:38.550+10:00</updated><title type='text'>Introducing Screamfeeder</title><content type='html'>The new &lt;a href="http://www.screamfeeder.com/"&gt;Screamfeeder&lt;/a&gt; album
&amp;quot;&lt;a href="http://homepage.powerup.com.au/~timst/introducing.html"&gt;INTRODUCING: SCREAMFEEDER | Singles and More 1992 - 2004&lt;/a&gt;&amp;quot; just arrived as a birthday gift from Janelle's parents. It's great to get a handwritten note from the band to accompany it. Now this doesn't surprise me as they are a Brissie band!

Screamfeeder are an interesting band, they've been a favourite ever since I saw them with Pete at a Big Day Out on the Gold Coast in the mid nineties. I also have some bazaar connections to them. A good friend of mine Kent tells me he used to hang out with them in the early nineties (along with Powderfinger et al.) and my buddy Keith is good friends with Tim's (singer/guitarist) brother.

It's very refreshing to know that you can support a &amp;quot;local&amp;quot; band (not that local to me anymore) from half a world away. Actually, listening to the songs makes me quite homesick...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537645854415533?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537645854415533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537645854415533' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537645854415533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537645854415533'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2004/11/introducing-screamfeeder.html' title='Introducing Screamfeeder'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111520460532422941</id><published>2004-11-10T21:03:00.000+10:00</published><updated>2005-05-06T21:38:40.456+10:00</updated><title type='text'>Kowari Paper for WWW2005</title><content type='html'>David Wood, Paul Gearon and I have just completed a paper on &lt;a href="http://www.kowari.org/"&gt;Kowari&lt;/a&gt; entitled &amp;quot;Kowari: A Platform for Semantic Web Storage and Analysis&amp;quot;  for the  &lt;a href="http://www2005.org/"&gt;14th International World Wide Web Conference (WWW2005)&lt;/a&gt; next year in Japan.

&lt;blockquote&gt;Large-scale Semantic Web applications require large-scale storage of Resource Description Framework (RDF) information and a means to analyze that information via the Web Ontology Language (OWL) in near real time.  The Kowari Metastore was designed as a purpose-built RDF database to fulfill this requirement.  Kowari provides a scalable, transaction-safe storage infrastructure for RDF statements and an expressive query language for their analysis, with or without the use of a subset of the RDF Schema and/or OWL languages.  OWL Lite plus the full cardinality constraints from OWL Full are currently supported via the interactive Tucana Query Language (iTQL) or the Simple Ontology Framework API (SOFA).  Kowari&amp;#8217;s native quad-store indexing scheme has been shown to scale to hundreds of millions of RDF statements on a single machine.  Kowari is an Open Source project sponsored by Tucana Technologies and is licensed under the Mozilla Public License, version 1.1.&lt;/blockquote&gt;

It's basically an overview paper containing an explanation of the components that make up the system focusing on the query engine, the resolver framework and the XA statement store.  So it's very much like similar papers on &lt;a href="http://www.cs.vu.nl/~jbroeks/papers/ISWC02.pdf"&gt;Sesame&lt;/a&gt; and the &lt;a href="http://eprints.aktors.org/273/"&gt;3store&lt;/a&gt;. We're pretty hopeful it'll be accepted, we think we needed to provide a good overview of this important piece of Semantic Web infrastructure.

(Update... The paper wasn't accepted to the stream we submitted it to at www2005, but was accepted to &lt;a href="http://www.xtech-conference.org/"&gt;xtech 2005&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111520460532422941?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111520460532422941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111520460532422941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111520460532422941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111520460532422941'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2004/11/kowari-paper-for-www2005.html' title='Kowari Paper for WWW2005'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537741860569711</id><published>2004-11-03T21:01:00.000+10:00</published><updated>2005-05-06T21:03:38.610+10:00</updated><title type='text'>Systems</title><content type='html'>The recent election here in the US had me thinking about some of the problems that I've observed with the systems that operate here. The electoral process is my first target here.

It amazes me that a country as wealthy as the US, still struggles with things that I would have thought were solved problems. The electoral process here is &lt;em&gt;really&lt;/em&gt; screwed up, a fact that I'm starting to see highlighted more and more in the news media. For a start, there's the antiquated electoral college system. I'm not 100% sure of its origins, but I imagine that it would have made sense a couple of hundred years ago, but seems a bit silly to an outsider in this day and age. Personally, I find the Westminster system of the party that wins the most seats winning government the easiest to understand.

The voting system here is also weird. The person who gets the most votes wins, regardless of whether they have a majority. In Oz, we have preferential voting, which basically means that people vote in order for who they like, and the candidate who gets the least votes, gets their second preference re-allocated. This goes on until someone gts a majority. Our system appears very similar to what is know here as &lt;a href="http://www.fairvote.org/irv/whatis2.htm"&gt;Instant Runoff Voting (IRV)&lt;/a&gt; (a much sexier name than &amp;quot;optional preferential&amp;quot;).

My second target is the general law enforcement system. Back home in Oz we basically have two police forces. Each state has a police department that looks after all matters of policing and there's also a federal police force, that takes care of cross-state issues, drug running, border enforcement and lots of stuff I probably have no idea of.

Contrast that with the US. In the Northern Virginia area, we have &lt;em&gt;lots&lt;/em&gt; of different police forces, seemingly unable to cooperate. We have park police, state police, town police, highway police, airport police, tollway police and I'm sure there's at least 14 more that I've missed. So when I got my car insurance card in the mail the other day and I read that the first step in reporting an accident was to call the police, I thought &amp;quot;which one?&amp;quot;.

Given the number of separate agencies, is it no wonder that the events that lead to 9/11 happened here. America is full of minor bureaucracies that all compete for power at the expense of the people they purport to represent.

Surely this is a solved problem too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537741860569711?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537741860569711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537741860569711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537741860569711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537741860569711'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2004/11/systems.html' title='Systems'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537900050342009</id><published>2004-10-22T21:28:00.000+10:00</published><updated>2005-05-06T21:30:00.506+10:00</updated><title type='text'>Bush on Vietnam</title><content type='html'>Heard a good one today from a buddy, who in turn read it on &lt;a href="http://www.msnbc.msn.com/id/6269520/#041021"&gt;Eric Alterman's blog&lt;/a&gt;.

&lt;blockquote&gt;What's the difference between Iraq and Vietnam? Bush had a plan for getting out of Vietnam.&lt;/blockquote&gt;

On a similar note, &lt;a href="http://www.kottke.org/"&gt;kottke.org&lt;/a&gt; is pointing to &lt;a href="http://msn.ancestry.com/landing/strange/bush4/tree.htm"&gt;this nice jem&lt;/a&gt; about Kerry and Bush being distant relatives.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537900050342009?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537900050342009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537900050342009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537900050342009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537900050342009'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2004/10/bush-on-vietnam.html' title='Bush on Vietnam'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537726398366048</id><published>2004-09-24T20:56:00.000+10:00</published><updated>2005-05-06T21:01:03.986+10:00</updated><title type='text'>Beverage</title><content type='html'>Told myself that I'll write down all my observations on the US while it's still slightly novel. I've found that I've started to forget many of the things that I found so bazaar when we first arrived. Here is my latest observation...

Was at Starbucks yesterday afternoon to grab a quick coffee while waiting for Janelle and her Dad to drop off a rental car. The line was &lt;em&gt;really&lt;/em&gt; slow, so by the time you got to the front the cashier had forgotten the order. So he started asking people &amp;quot;What was your beverage?&amp;quot;. I think this is a good reflection of American culture. Instead of saying toilet here, they say bathroom, as if the daily necessities of life are somehow a bad thing. I see this as an example of the effect of nice-ening up everyday experiences to the point of nausea. So instead of using the word drink or even coffee (for what was plainly a coffee), he chose to sugar coat the word to make it (subjectively) more palatable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537726398366048?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537726398366048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537726398366048' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537726398366048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537726398366048'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2004/09/beverage.html' title='Beverage'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111520414030014908</id><published>2004-09-23T20:52:00.000+10:00</published><updated>2005-05-06T21:36:44.543+10:00</updated><title type='text'>RDFlets and Kowari Descriptors</title><content type='html'>Saw an &lt;a href="http://lists.w3.org/Archives/Public/public-rdf-dawg/2004JulSep/0517.html"&gt;interesting post&lt;/a&gt; yesterday on the &lt;a href="http://lists.w3.org/Archives/Public/public-rdf-dawg/"&gt;DAWG list&lt;/a&gt; from Alberto Reggiori at &lt;a href="http://www.asemantics.com/"&gt;@semantics&lt;/a&gt;. He talks about a technology they've developed on top of &lt;a href="http://www.rdfstore.org/"&gt;RDFStore&lt;/a&gt; called &lt;a href="http://www.asemantics.com/rdflets/"&gt;RDFlets&lt;/a&gt;. Very cool... At a first glance, these look very similar to our &lt;a href="http://www.kowari.org/571.htm"&gt;descriptors&lt;/a&gt;, which are XSL stylesheets that allow the execution of iTQL queries, getting the results in XML, and the massaging of the results using XSLT. When Keith and I initially designed them a few years back, &lt;a href="http://www.livejournal.com/users/sebkha/"&gt;Simon&lt;/a&gt; came to us with the idea of applying a transformation to an RDF datastore, in an analogous manner to the way transformations are applied to XML files. This is the way I like to think of them, although &lt;a href="http://prototypo.blogspot.com/"&gt;others&lt;/a&gt; like to explain them as stored procedures. And of course you can pass whatever parameters to them you like, and use them in whatever way XSL allows variables to be used.

As the &lt;a href="http://www.kowari.org/618.htm"&gt;documentation states&lt;/a&gt;, descriptors really consist of:

&lt;ul&gt;&lt;li&gt;Extensions to XSL: 1) a &amp;lt;query&amp;gt; tag to issue iTQL commands from within XSL stylesheets; and 2) a lt;descriptor&amp;gt; tag to allow one descriptor to call another;&lt;/li&gt;
&lt;li&gt;Java objects that invoke descriptors and return their results;&lt;/li&gt;
&lt;li&gt;Java Servlets that invoke descriptors using HTTP;&lt;/li&gt;
&lt;li&gt;URL addressable SOAP endpoints.&lt;/li&gt;&lt;/ul&gt;

So, how do RDFlets and descriptors stack up (points stolen from K...)?

&lt;ul&gt;&lt;li&gt;RDFlets don't seem to be integrated into XSL so they require a container of sorts, i.e Apache using &lt;a href="http://httpd.apache.org/docs/howto/ssi.html"&gt;SSIs&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;RDFlets don't allow for the cascading of queries like descriptors do (unless SSIs give you this for free). So say we're querying metadata on a document, you can use a top level descriptor to get the top most document properties, then call off to other specialised descriptors for each of those properties. This lets you get optional properties back very nicely.&lt;/li&gt;
&lt;li&gt;Descriptors expose their interface (parameters passed in and out) in a queriable fashion, as it's defined in RDF. This lets you do cool things like "show me all the descriptors that work against RSS feeds and return XHTML".&lt;/li&gt;&lt;/ul&gt;

Of course no technology is perfect, and descriptors certainly &lt;a href="http://www.kowari.org/619.htm"&gt;have their faults&lt;/a&gt;, not least of which is trying to explain to people what the hell they are...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111520414030014908?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111520414030014908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111520414030014908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111520414030014908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111520414030014908'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2004/09/rdflets-and-kowari-descriptors.html' title='RDFlets and Kowari Descriptors'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537891327916371</id><published>2004-07-29T21:27:00.000+10:00</published><updated>2005-05-06T21:28:33.283+10:00</updated><title type='text'>John Kerry</title><content type='html'>Well, watching the Kerry speech, he's just about to arrive. They've been making a big deal about his war record, extolling it on one side, and ridiculing it on the other. Frankly I think one of these sides is attempting to create something from nothing...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537891327916371?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537891327916371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537891327916371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537891327916371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537891327916371'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2004/07/john-kerry.html' title='John Kerry'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537881599731055</id><published>2004-03-25T21:25:00.000+10:00</published><updated>2005-05-06T21:26:56.003+10:00</updated><title type='text'>Bush is at it again</title><content type='html'>Yeah, &lt;a href="http://www.pandagon.net/mtarchives/001472.html"&gt;everybody&lt;/a&gt; has seen &lt;a href="http://www.time.com/time/election2004/article/0,18471,600858,00.html"&gt;it&lt;/a&gt;, but this guy never ceases to amaze me.

&lt;blockquote&gt;Administration sources tell TIME that employees at the Department of Homeland Security have been asked to keep their eyes open for opportunities to pose the President in settings that might highlight the Administration's efforts to make the nation safer. The goal, they are being told, is to provide Bush with one homeland-security photo-op a month.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537881599731055?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537881599731055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537881599731055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537881599731055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537881599731055'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2004/03/bush-is-at-it-again.html' title='Bush is at it again'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537917430847718</id><published>2003-07-17T21:30:00.000+10:00</published><updated>2005-05-06T21:32:54.313+10:00</updated><title type='text'>Mac OSX for Geeks</title><content type='html'>&lt;a href="http://saladwithsteve.com/osx/"&gt;Forwarding Address: OS X&lt;/a&gt; has a link to a great &lt;a href="http://www.faisal.com/docs/osxforgeeks.html"&gt;set of tips&lt;/a&gt; for unix geeks new to OSX.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537917430847718?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537917430847718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537917430847718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537917430847718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537917430847718'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2003/07/mac-osx-for-geeks.html' title='Mac OSX for Geeks'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537868353615405</id><published>2003-07-10T21:22:00.000+10:00</published><updated>2005-05-06T21:24:43.543+10:00</updated><title type='text'>Creation Science</title><content type='html'>This is pure gold... Someone at work pointed me to the &lt;a href="http://objective.jesussave.us/creationsciencefair.html"&gt;Creation Science Fair&lt;/a&gt;. It has a boatload of great stuff, from showing that &amp;quot;Pine Cones Are Complicated&amp;quot;, hence proving the existence of God, to the three week long, scientifically rigorous &amp;quot;Life Doesn't Come From Non-Life&amp;quot; experiment.

I've seen a couple of documentaries on these nutters, and it still amazes me that these people &lt;em&gt;truly believe&lt;/em&gt; these things. They even have a &lt;a href="http://objective.jesussave.us/creationnews.html"&gt;latest news&lt;/a&gt;section, detailing the latest &lt;em&gt;advancements&lt;/em&gt; in creation science, more gold.

And I just found that &lt;a href="http://www.apple.com/"&gt;Apple&lt;/a&gt; is &lt;a href="http://objective.jesussave.us/propaganda.html#APPLE"&gt;anti-Christian and a cult&lt;/a&gt;:

&lt;blockquote&gt;However, these propagandists aren't just targeting the young. Take for example Apple Computers, makers of the popular Macintosh line of computers. The real operating system hiding under the newest version of the Macintosh operating system (MacOS X) is called... Darwin! That's right, new Macs are based on Darwinism! While they currently don't advertise this fact to consumers, it is well known among the computer elite, who are mostly Atheists and Pagans.&lt;/blockquote&gt;

There's a great deal more on this site, it's kept the guys here entertained for a few hours already.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537868353615405?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537868353615405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537868353615405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537868353615405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537868353615405'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2003/07/creation-science.html' title='Creation Science'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537854587463403</id><published>2003-03-24T21:20:00.000+10:00</published><updated>2005-05-06T21:22:25.876+10:00</updated><title type='text'>Quote of the day</title><content type='html'>Someone on a &lt;a href="http://www.mtb-oz.com/"&gt;mailing list&lt;/a&gt; I'm on wrote this nice little summary of how a lot of people are feeling at the moment:

&lt;blockquote&gt;Now we see a pyrotechnic display on TV that is the war as we are allowed to witness it. But THAT is not the war. The real war we never get to see. We don't get to see magled bodies, we don't get to smell rotting, burned flesh, we don't see the pain of the families of killed Iraqi soldiers. No, the in our war the people that get killed all somehow deserve it, as we are good and therfore they must be evil.&lt;/blockquote&gt;

The whole thing makes me fucking sick.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537854587463403?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537854587463403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537854587463403'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2003/03/quote-of-day.html' title='Quote of the day'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537842269779849</id><published>2003-03-20T21:19:00.000+10:00</published><updated>2005-05-06T21:20:22.703+10:00</updated><title type='text'>More US media stories</title><content type='html'>&lt;a href="http://www.birdhouse.org/blog/archives/000746.php"&gt;Scot&lt;/a&gt; has a little more information about the US media and its handling of the upcoming (current?) war in Iraq. He points to a &lt;a href="http://www.salon.com/opinion/feature/2003/02/06/iraq_poll/index_np.html"&gt;poll&lt;/a&gt; whose results claim that 44 percent of Americans believe that most or some of the 9/11 hijackers were Iraqi. He also notes that &lt;a href="http://www.salon.com/"&gt;Salon&lt;/a&gt; appear to be &lt;a href="http://www.salon.com/letters/editor/2003/03/18/war_stories/index.html"&gt;setting themselves up&lt;/a&gt; to report the other side of the stories, that the mainstream doesn't want to cover. We can only hope...

&lt;a href="http://www.megnut.com/political/006656.asp"&gt;Meg&lt;/a&gt; has more information and lots of links from a couple of days ago on the media issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537842269779849?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537842269779849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537842269779849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537842269779849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537842269779849'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2003/03/more-us-media-stories.html' title='More US media stories'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537831921237376</id><published>2003-03-18T21:17:00.000+10:00</published><updated>2005-05-06T21:18:39.216+10:00</updated><title type='text'>Americans look elsewhere for news</title><content type='html'>I've been telling Keith about how I've noticed  that a lot of American bloggers (&lt;a href="http://x180.net/Blog/1104100123.html"&gt;James Duncan Davidson&lt;/a&gt; in particular) are looking at blogs to get their news fixes. I've considered that this stems from US news networks/sites/etc. not objectively reporting the current Iraq &amp;quot;crisis&amp;quot;. Of note, &lt;a href="http://morenews.blogspot.com/"&gt;Andrew&lt;/a&gt; pointed me at an &lt;a href="http://www.buzzflash.com/analysis/03/03/14_press.html"&gt;article&lt;/a&gt; outlining the way the current US administration is using the media to push its agenda (I'd also heard of recent press conferences where the Bush camp handed out pre-baked questions, and only called for question from reporters who were willing to ask the questions).

Looks like wired have picked up on the thread, and have posted an &lt;a href="http://www.wired.com/news/culture/0,1284,58056,00.html"&gt;article&lt;/a&gt; on the subject. What is interesting to me (apart from the obvious) is that the &lt;a href="http://www.abc.net.au/news/"&gt;ABC news&lt;/a&gt; site is getting a lot of hits from US-ians looking for objective coverage. &lt;a href="http://buzz.weblogs.com/"&gt;buzz.weblogs.com&lt;/a&gt; has more articles on the matter. In fact this site looks rather scathing... an interesting read!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537831921237376?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537831921237376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537831921237376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537831921237376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537831921237376'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2003/03/americans-look-elsewhere-for-news.html' title='Americans look elsewhere for news'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537821226676111</id><published>2003-02-07T21:16:00.000+10:00</published><updated>2005-05-06T21:16:52.270+10:00</updated><title type='text'>North Korea</title><content type='html'>Looks to me like North Korea is pulling the piss out of the US again. They're now saying that &lt;a href="http://abc.net.au/news/newsitems/s778579.htm" title="ABC news online's coverage"&gt;they'll launch a pre-emptive attack&lt;/a&gt; if the US places more troops into the region. I'm not entirely sure if the North Korean government is taking the US' tactics as an example and is serious (which they probably are), or whether they're just exposing the hypocrisy of the current US Administration's stand on Iraq.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537821226676111?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537821226676111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537821226676111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537821226676111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537821226676111'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2003/02/north-korea.html' title='North Korea'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537814632345509</id><published>2003-02-05T21:14:00.000+10:00</published><updated>2005-05-06T21:15:46.326+10:00</updated><title type='text'>Senate passes no confidence vote</title><content type='html'>Well it looks like the senate has finally &lt;a href="http://www.abc.net.au/news/2003/02/item20030205003706_1.htm" title="ABC news online coverage of the senate's vote"&gt;passed the no confidence vote&lt;/a&gt; on Johnny's handling of the Iraq &amp;quot;crisis&amp;quot;. The vote was carried 34 to 31 with the support of the opposition, the &lt;a href="http://www.greens.org.au/"&gt;Greens&lt;/a&gt; and the &lt;a href="http://www.democrats.org.au/"&gt;Democrats&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537814632345509?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537814632345509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537814632345509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537814632345509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537814632345509'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2003/02/senate-passes-no-confidence-vote.html' title='Senate passes no confidence vote'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537804518172481</id><published>2003-01-31T21:12:00.000+10:00</published><updated>2005-05-06T21:14:05.186+10:00</updated><title type='text'>Map of Terror</title><content type='html'>Just found this &lt;a href="http://www.wrongwaygoback.com/gaullery/twot/"&gt;Map of Terror&lt;/a&gt;. The site is that of a fellow Aussie who seems to have the same take on this whole &amp;quot;War on Terror&amp;quot; thing as me (ie. it's a joke). On a similar note I saw a large tow truck the other day with a perspex &amp;quot;Infinite Justice&amp;quot; sign mounted on the front of the bonnet. Of course he had the obligatory US flag to hide behind mounted on the rear of the cab, as well as a large eagle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537804518172481?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537804518172481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537804518172481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537804518172481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537804518172481'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2003/01/map-of-terror.html' title='Map of Terror'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12616776.post-111537790258298910</id><published>2003-01-28T21:06:00.000+10:00</published><updated>2005-05-06T21:11:42.586+10:00</updated><title type='text'>Bush coverup</title><content type='html'>Well seems like good ol' George has done it again (ie. something stupid), this time he's &lt;a href="http://www.nytimes.com/2003/01/23/politics/23BOXE.html"&gt;re-labeled a bunch of boxes&lt;/a&gt; stamped &amp;quot;Made in China&amp;quot; with &amp;quot;Made in America&amp;quot; (thanks &lt;a href="http://www.birdhouse.org/blog/archives/000704.php"&gt;Scot&lt;/a&gt;).

Of course this wouldn't happen in Australia, we're far too un-patriotic for this kind of behaviour, or so says a random interviewee in a story aired over the weekend on the closing of &lt;a href="http://www.oldsydneytown.com.au/"&gt;Old Sydney Town&lt;/a&gt; - something along the lines of &amp;quot;They wouldn't stand for this in Ameria. They love their country and wouldn't let their history go down the drain&amp;quot;. While I can support the need for this kind of history to be preserved, there's a lot of other history that needs to be sorted out also - eg. the stolen generation.

To take this comment out of proportion, I'd hate to see us taking a more US-styled approach to everything we do (which unfortunately seems to be the approach we're headed down under the current government). I watched an old western on the weekend (&lt;a href="http://us.imdb.com/Title?0042338"&gt;Colt .45&lt;/a&gt;) staring &lt;a href="http://us.imdb.com/Name?Scott,%20Randolph"&gt;Randolph Scott&lt;/a&gt; as the gunslinging hero, and began to think that maybe ol' Georgy boy considers himself such a hero, rescuing the town and getting the girl. I just hope America doesn't wich too fondly to be back in the good old days of the wild west where bad guys were hunted down and hung. One scene in the movie - where two gang members are brought into town by a deupty and the townsfolk demanded a hanging - reminded me of the current world climate. Hopefully common sense will prevail and see civil liberties retained instead of being erroded in the name of the &amp;quot;War on Terror&amp;quot;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12616776-111537790258298910?l=nosewheelie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosewheelie.blogspot.com/feeds/111537790258298910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12616776&amp;postID=111537790258298910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537790258298910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12616776/posts/default/111537790258298910'/><link rel='alternate' type='text/html' href='http://nosewheelie.blogspot.com/2003/01/bush-coverup.html' title='Bush coverup'/><author><name>Tom Adams</name><uri>http://www.blogger.com/profile/16126053163040522576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/6952/1077/1600/haughty3_gal.jpg'/></author><thr:total>0</thr:total></entry></feed>
