<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUMHQng9cSp7ImA9Wx5TFEw.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582</id><updated>2010-07-30T00:23:53.669+10:00</updated><title>chris mountford</title><subtitle type="html">another layer of abstraction</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.chromosundrift.com/" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Chromosundrift" /><feedburner:info uri="chromosundrift" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUANSHc_fSp7ImA9WxFbE08.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-2044156652460361232</id><published>2010-07-05T21:03:00.000+10:00</published><updated>2010-07-05T21:03:19.945+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-05T21:03:19.945+10:00</app:edited><title>Apple: I Was Wrong, Here's Your $200 Back</title><content type="html">Previously on Chris Mountford's blog...&lt;br /&gt;
&lt;br /&gt;
Genius: "Oh um ya that battery that split open like a stepped-on-banana.. that's expected behaviour"&lt;br /&gt;
Me: "You're kidding me? Should I expecting all other Apple products to do this?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The latest is, thanks to Mr Anonymous, Paul M and legion others like them, is that I have been refunded my $200 because, as a reasonable person would assume, the extended warranty DOES cover such explosive situations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-2044156652460361232?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/OELrAjr1ptU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/2044156652460361232/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2010/07/apple-i-was-wrong-heres-your-200-back.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/2044156652460361232?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/2044156652460361232?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/OELrAjr1ptU/apple-i-was-wrong-heres-your-200-back.html" title="Apple: I Was Wrong, Here's Your $200 Back" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2010/07/apple-i-was-wrong-heres-your-200-back.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEAQnk7fSp7ImA9WxFUF08.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-1488567518662392191</id><published>2010-06-28T21:30:00.000+10:00</published><updated>2010-06-28T21:30:43.705+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-28T21:30:43.705+10:00</app:edited><title>Exploding Macbook Pro Battery = "Expected Behaviour"</title><content type="html">After booking my appointment with a Genius at the Genius Bar in Sydney's city Apple Store, waiting in line dutifully holding my AppleCare extended warranty stuff, packing what I thought would be an iron-clad case of Exploding Battery Obviously Defective Here's A New One Sir, I was rudely awoken by the facts.&lt;br /&gt;
&lt;br /&gt;
Apple's official position, according to the lips of two courteous Genii, is that exploding is &lt;b&gt;"expected behaviour".&amp;nbsp; &lt;/b&gt;The battery was bought with the computer in June 2008 (exactly 2 years ago) and it had been sitting for a couple of months looking like this before I got around to taking it in:&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_74NHueaBr9E/TCh9qYOC7ZI/AAAAAAAAAKk/V_dxEBumdQU/s1600/explodo.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://2.bp.blogspot.com/_74NHueaBr9E/TCh9qYOC7ZI/AAAAAAAAAKk/V_dxEBumdQU/s400/explodo.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Well it's not behaviour I ever expected. And I say this with some experience with batteries, even lithium ion rechargeable batteries, that ranges roughly two fashionable Genius lifespans or near enough, judging by their fresh-faced appearance. I've never had anything like this.&lt;br /&gt;
&lt;br /&gt;
I think the elephant in the room is that while the fine print may say that the extended warranty doesn't cover batteries, this is a major manufacturing defect and Apple know it. I was virtually told as much as I was assured my 1 year old Macbook Pro with the built-in battery would not suffer the same fate since it is a non-nickel based lithium polymer construction. I was invited to attend the Apple battery page: &lt;a href="http://www.apple.com/batteries/"&gt;http://www.apple.com/batteries/&lt;/a&gt; which keen observers will note contains nothing of Apple's expectation of explosions.&lt;br /&gt;
&lt;br /&gt;
Looking further the Apple &lt;a href="http://www.apple.com/batteries/replacements.html"&gt;battery replacement page&lt;/a&gt; says:&lt;br /&gt;
&lt;blockquote&gt;However the AppleCare Protection Plan for notebook computers does not cover  batteries that have failed or are exhibiting diminished capacity except  when the failure or diminished capacity is the result of a manufacturing  defect.&lt;/blockquote&gt;Right so, who says this is not a manufacturing defect? Shouldn't a manufacturer's expectations about common failure cases be published on thier main information page? If it really is not a manufacturing defect where is the information about this expected behaviour on their written material?&lt;br /&gt;
&lt;br /&gt;
The battery still holds a charge as demonstrated by the indicator lights on the battery. Also, although it doesn't properly fit the case due to it's unsightly bulge, it was powering the laptop fine until I took it out. In fact the reason I did so was because the bulge was pushing the back of the mouse button, preventing it from clicking. None of this stuff appeared to be news to the Geniuses. Just another exploding battery.&lt;br /&gt;
&lt;br /&gt;
So $199 later, I purchase a new battery which, I carefully  confirmed, &lt;i&gt;would&lt;/i&gt; be expected to explode in roughly 300 power cycles  (which I assured the young Genius my existing battery had not  experienced).&lt;br /&gt;
&lt;br /&gt;
Has anyone else had luck in getting their battery replaced as a part of Apple extended warranty? I see plenty of talk to this end:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.appledefects.com/?cat=27"&gt;http://www.appledefects.com/?cat=27&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://discussions.apple.com/thread.jspa?threadID=909217"&gt;http://discussions.apple.com/thread.jspa?threadID=909217&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.tuaw.com/2006/12/25/battle-of-the-battery-bulge/"&gt;http://www.tuaw.com/2006/12/25/battle-of-the-battery-bulge/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-1488567518662392191?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/ZM8FRbWdwZ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/1488567518662392191/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2010/06/exploding-macbook-pro-battery-expected.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/1488567518662392191?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/1488567518662392191?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/ZM8FRbWdwZ4/exploding-macbook-pro-battery-expected.html" title="Exploding Macbook Pro Battery = &quot;Expected Behaviour&quot;" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_74NHueaBr9E/TCh9qYOC7ZI/AAAAAAAAAKk/V_dxEBumdQU/s72-c/explodo.JPG" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2010/06/exploding-macbook-pro-battery-expected.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEARH0zeCp7ImA9WxBbF08.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-7143624000344574034</id><published>2010-03-16T16:23:00.003+11:00</published><updated>2010-03-16T17:57:25.380+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-16T17:57:25.380+11:00</app:edited><title>Aussie Censorship Error</title><content type="html">As a father of three young kids the thought of child porn disgusts me. &lt;br /&gt;
&lt;br /&gt;
If only an Internet filter imposed by the government would be effective against it. &lt;br /&gt;
&lt;br /&gt;
As a professional software engineer I can't help but acknowledge that the proposed filter will be 100% ineffective at stopping child pornography and that hundreds of millions of dollars could be better spent elsewhere.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_74NHueaBr9E/S58WZMxRhDI/AAAAAAAAAJA/XaIHrxWVtic/s1600-h/error.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="97" src="http://3.bp.blogspot.com/_74NHueaBr9E/S58WZMxRhDI/AAAAAAAAAJA/XaIHrxWVtic/s400/error.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://www.efa.org.au/category/censorship/mandatory-isp-filtering/"&gt;proposed censorship by senator Steven Conroy&lt;/a&gt; does not propose to stop most material that is unsuitable for children and it does not propose to stop the most common channels of illegal content on the Internet (bit torrents).&lt;br /&gt;
&lt;br /&gt;
Finally any VPN will effectively go straight through the filter so anyone who wishes to can circumvent it using current technology.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-7143624000344574034?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/fr0m9oHMXjo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/7143624000344574034/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2010/03/aussie-censorship-error.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/7143624000344574034?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/7143624000344574034?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/fr0m9oHMXjo/aussie-censorship-error.html" title="Aussie Censorship Error" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_74NHueaBr9E/S58WZMxRhDI/AAAAAAAAAJA/XaIHrxWVtic/s72-c/error.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2010/03/aussie-censorship-error.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQAQ3g9cSp7ImA9WxBbFkg.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-8242260255494007090</id><published>2010-03-15T22:33:00.003+11:00</published><updated>2010-03-15T22:59:02.669+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-15T22:59:02.669+11:00</app:edited><title>Titanium Reinforced Self</title><content type="html">For those of you I know personally, you've probably already seen my impressive X-rays, but for the rest of you I'm announcing that I have recently had cause to become hyper human.&lt;br /&gt;&lt;br /&gt;Not content with collar bones constructed of mere bone matter, which I ably demonstrated can break with the aid of a single mountain bike and a spot of bad luck, I opted for hyper human augmentation.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_74NHueaBr9E/S54eIFIsIwI/AAAAAAAAAH0/EhDAC6pXKKc/s1600-h/IMG_0713.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_74NHueaBr9E/S54eIFIsIwI/AAAAAAAAAH0/EhDAC6pXKKc/s400/IMG_0713.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5448825723331289858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I can wholeheartedly recommend the procedure should you be advised that it's necessary for adequate bone knitting. It completely stopped the disconcerting clunk that occurred in my shoulder on certain movements for the 36 hours prior to surgery. &lt;br /&gt;&lt;br /&gt;The only down side was, apart from the usual recovery and healing process, I discovered much to my surprise, morphine is quite disgusting. It certainly blankets almost all pain but at the expense of almost all cognitive ability. &lt;br /&gt;&lt;br /&gt;Further, morphine causes the sensation of hanging upside down in a vat of warm butter after having skulled a salmon milkshake. With an automated IV drip, that feeling was only a button press away should I become convinced that it was better than post op pain.&lt;br /&gt;&lt;br /&gt;Now I'm back on the bike but my shoulder does not have 100% strength or mobility and my muscles feel wasted and weak all over. So if you happen to pass me on a hill, this is going to be my standing excuse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-8242260255494007090?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/P_ayvMdECj8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/8242260255494007090/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2010/03/titanium-reinforced-self.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/8242260255494007090?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/8242260255494007090?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/P_ayvMdECj8/titanium-reinforced-self.html" title="Titanium Reinforced Self" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_74NHueaBr9E/S54eIFIsIwI/AAAAAAAAAH0/EhDAC6pXKKc/s72-c/IMG_0713.JPG" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2010/03/titanium-reinforced-self.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YBQHs7eSp7ImA9WxBbEU0.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-3255258767954315775</id><published>2010-03-09T14:12:00.003+11:00</published><updated>2010-03-09T14:25:51.501+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-09T14:25:51.501+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cowbell" /><category scheme="http://www.blogger.com/atom/ns#" term="groovy" /><title>More Cowbell in One Line of Groovy</title><content type="html">Sometimes you just need &lt;a href="http://video.google.com/videosearch?q=more%20cowbell&amp;oe=utf-8&amp;rls=org.mozilla:en-GB:official&amp;client=firefox-a&amp;um=1&amp;ie=UTF-8&amp;sa=N&amp;hl=en&amp;tab=wv#"&gt;more cowbell&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It is for those times that I wrote this:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;groovy -e 's=javax.sound.midi.MidiSystem.synthesizer;s.open();c=s.channels[9];c.noteOn 56,99;Thread.sleep 99;c.noteOff 96;s.close()'&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;I do often find myself needing more cowbell, such as when invoking a maven comannd which inevitably downloads the internet, like &lt;span style="font-weight:bold;"&gt;mvn clean&lt;/span&gt;. So get this puppy on your PATH and you can do this:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;mvn clean &amp;&amp; cowbell&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;...for an audio cue that tells you the internet has been successfully downloaded with a modicum of funk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-3255258767954315775?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/0XEfAIEIK-Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/3255258767954315775/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2010/03/more-cowbell-in-one-line-of-groovy.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/3255258767954315775?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/3255258767954315775?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/0XEfAIEIK-Y/more-cowbell-in-one-line-of-groovy.html" title="More Cowbell in One Line of Groovy" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>6</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2010/03/more-cowbell-in-one-line-of-groovy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUINQX49eSp7ImA9WxBVFkg.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-5164531357571616409</id><published>2010-02-20T20:11:00.003+11:00</published><updated>2010-02-20T20:19:50.061+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-20T20:19:50.061+11:00</app:edited><title>Ali G Joins Github Team</title><content type="html">I was browsing a Github hosted project, &lt;a href="http://github.com/mangos/mangos/network"&gt;Mangos&lt;/a&gt; recently and attempted to check out the network graph visualisation of the clones of this open source World of Warcraft server.&lt;br /&gt;&lt;br /&gt;Moments later I learned that there are too many branches on the graph for the flash visualisation to render. The following error message is shown:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Sorry, this repository's graph is currently too logical awesome to display. We're working on optimizing it. Check back soon.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Which leaves one wondering just how much is the right amount of logical awesome. &lt;br /&gt;&lt;br /&gt;Clearly the only conclusion is that the Github team has been joined by a celebrity error message writer, Ali G:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_74NHueaBr9E/S3-o5h99EkI/AAAAAAAAAG8/jDFGE4YsZbA/s1600-h/alig_logical_awesome.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 397px;" src="http://1.bp.blogspot.com/_74NHueaBr9E/S3-o5h99EkI/AAAAAAAAAG8/jDFGE4YsZbA/s400/alig_logical_awesome.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5440252581211083330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Booyakasha!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-5164531357571616409?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/b54mXuJy4c8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/5164531357571616409/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2010/02/ali-g-joins-github-team.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/5164531357571616409?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/5164531357571616409?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/b54mXuJy4c8/ali-g-joins-github-team.html" title="Ali G Joins Github Team" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_74NHueaBr9E/S3-o5h99EkI/AAAAAAAAAG8/jDFGE4YsZbA/s72-c/alig_logical_awesome.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2010/02/ali-g-joins-github-team.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEENR3o4fCp7ImA9WxBWGEg.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-5653536930923328978</id><published>2010-02-11T11:47:00.004+11:00</published><updated>2010-02-11T12:44:56.434+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-11T12:44:56.434+11:00</app:edited><title>A Tale of Three Buzzes</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_74NHueaBr9E/S3NgvIySQ6I/AAAAAAAAAG0/PomsunslYds/s1600-h/Picture+3.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 400px; height: 252px;" src="http://4.bp.blogspot.com/_74NHueaBr9E/S3NgvIySQ6I/AAAAAAAAAG0/PomsunslYds/s400/Picture+3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5436795538094834594" /&gt;&lt;/a&gt;&lt;br /&gt;Google's Buzz is causing a stink. It's the third social network which is called "Buzz" to come out recently. All have the Twitter model of microblogging (or multicast chat) with an asymmetric social graph (people decide who they follow but not who follows them).&lt;br /&gt;&lt;br /&gt;Yahoo Buzz has been out for at least a year on &lt;a href="http://buzz.yahoo.com/"&gt;buzz.yahoo.com&lt;/a&gt; and predicatably, Yahoo and their new overlords Microsoft are going &lt;a href="http://money.cnn.com/2010/02/09/technology/google_buzz_yahoo_microsoft/"&gt;batshit insane&lt;/a&gt; about this.&lt;br /&gt;&lt;br /&gt;Oh really Microsoft? You've got a product and a bigger competitor comes along and uses your idea? And they use the generic term to name it? That must be annoying. The worm has turned. &lt;br /&gt;&lt;br /&gt;And the drones at AT&amp;T launched &lt;a href="http://buzz.com/"&gt;buzz.com&lt;/a&gt; about 6 months ago. Less said about that the better. In fact you can probably safely forget them right now.&lt;br /&gt;&lt;br /&gt;So now we'll all be looking forward to the shakedown. There are too many players.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_74NHueaBr9E/S3NXbRaBNQI/AAAAAAAAAGs/WX9SciPsiik/s1600-h/Picture+2.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 358px; height: 400px;" src="http://4.bp.blogspot.com/_74NHueaBr9E/S3NXbRaBNQI/AAAAAAAAAGs/WX9SciPsiik/s400/Picture+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5436785301206938882" /&gt;&lt;/a&gt;I think the winner will be the service that provides enough features (not necessarily the most, Facebook) with the best integration with everything else. Twitter so far has been successful at crowdsourcing the integration work with the massive proliferation of Twitter clients and "tweet this" buttons like &lt;a href="http://tweetmeme.com/"&gt;Tweetmeme&lt;/a&gt;. Can Yahoo/Microsoft get this traction? &lt;br /&gt;&lt;br /&gt;Google already has a great integration story. When the hundreds of millions of monthly GMail users hit their inbox now, they will be able to thread together lots of their google software that produces socialisable events. Now the google suite can buzz.&lt;br /&gt;&lt;br /&gt;Perhaps it's just me but the one image I have about Buzz is those hotted up cars with the ultra-loud stereo systems and the monsterous bass frequencies causing every bolt in the chassis to loosen and the number plate to buzz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-5653536930923328978?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/0Aexw68NCK8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/5653536930923328978/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2010/02/tale-of-three-buzzes.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/5653536930923328978?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/5653536930923328978?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/0Aexw68NCK8/tale-of-three-buzzes.html" title="A Tale of Three Buzzes" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_74NHueaBr9E/S3NgvIySQ6I/AAAAAAAAAG0/PomsunslYds/s72-c/Picture+3.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2010/02/tale-of-three-buzzes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAGRn04cCp7ImA9WxBWF0w.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-3466331008900002189</id><published>2010-02-09T22:47:00.006+11:00</published><updated>2010-02-09T23:15:27.338+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-09T23:15:27.338+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="security" /><title>China Hackers Update: Arrests and Details</title><content type="html">It is inevitable after the Google hacks, as they are known, that China responds by showing its international business partners that they do not condone hacking.&lt;br /&gt;&lt;br /&gt;China Daily reports that &lt;a href="http://www.chinadaily.com.cn/china/2010-02/08/content_9440667.htm"&gt;the biggest hacker training site has been shut down&lt;/a&gt;. via &lt;a href="http://www.readwriteweb.com/archives/chinese_black-hat_hackers_arrested.php?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+readwriteweb+%28ReadWriteWeb%29&amp;amp;utm_content=Google+Reader"&gt;RWW&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"I could download trojan programs from the site which allowed me to control other people's computers. I did this just for fun but I also know that many other members could make a fortune by attacking other people's accounts," said a 23-year-old member of Black Hawk Safety Net in Nanjing of East China's Jiangsu province, who asked to remain anonymous.&lt;br /&gt;&lt;/blockquote&gt;and&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="width: 630px;"&gt;They seized nine Web servers, five computers and one car, and shut down all the sites involved in the case, according to the provincial public security department.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;So there you go Google - nothing to worry about. The "provincial public security department" got the baddies. Carry on.&lt;br /&gt;&lt;br /&gt;Of course there's no reported link with what is now clearly a much larger and more sophisticated program of industrial espionage than previously thought as reported in detail by &lt;a href="http://www.wired.com/threatlevel/2010/02/apt-hacks/"&gt;wired magazine&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The salient points of the wired article are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;    The hacks have compromised thousands of companies, not just 37 as previously reported.&lt;/li&gt;&lt;li&gt;Most of the compromises are currently still active and law enforcement has been contacting companies to let them know they have been compromised.&lt;/li&gt;&lt;li&gt;The exploit was an IE 6 security flaw that was first reported to Microsoft by an Israeli researcher in September 2009 but which remained unpatched for months. ("0-day")&lt;/li&gt;&lt;li&gt;The attack profile include multiple-year-long occupation of companies' computer systems and typically involved hidden siphoning of large amounts of private data including email, documents, etc. This is in contrast to the smash and grab techniques more common in the past.&lt;/li&gt;&lt;li&gt;Existing security software (like antivirus software) is not able to detect this attack profile or the malware used to initiate it.&lt;/li&gt;&lt;li&gt;The full extent of data theft will never be known.&lt;/li&gt;&lt;li&gt;The goal of the attacks appears to be coroporate and national espionage.&lt;/li&gt;&lt;li&gt;The hackers have levelled up.&lt;/li&gt;&lt;li&gt;The trail goes dead in Taiwan where the data was siphoned to and China where the spear phishing attacks were initiated from.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Now it really feels like we're living in a Neal Stephenson novel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-3466331008900002189?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/1o8y8pqvtCA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/3466331008900002189/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2010/02/china-hackers-update-arrests-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/3466331008900002189?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/3466331008900002189?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/1o8y8pqvtCA/china-hackers-update-arrests-and.html" title="China Hackers Update: Arrests and Details" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2010/02/china-hackers-update-arrests-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUDQHcyeip7ImA9WxBTFEk.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-6926815213958395532</id><published>2009-12-10T20:36:00.004+11:00</published><updated>2009-12-10T22:57:51.992+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-10T22:57:51.992+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="startups" /><title>Build to Flip vs Organic Growth</title><content type="html">In this world of GFC hell (is it over yet?) the biz buzz is "Organic Growth". That is to say business owners who are looking forward to the challenge of entrepreneurship in a downturn are standing as proud adovocates for a refreshing change to the mentality of the bubble and the zero profit, high valuation world of two point oh dot coms.&lt;br /&gt;&lt;br /&gt;It's refreshing because the &lt;a href="http://www.businessweek.com/magazine/content/06_33/b3997002.htm"&gt;business press is usually obsessed with the crazy valuations&lt;/a&gt;. A sale price with more zeros means more heroes. Examples abound. Twitter's recent funding round reportedly topped $100,000,000. That would be nine zeros. Profit is currently just zero. You'd think by now they could afford to give us more than 140 characters.&lt;br /&gt;&lt;br /&gt;Clearly people building businesses the traditional way, you know, charging a price (stay with me) for a product or service and growing revenues slowly over years, those people feel some justification in presenting themselves as a sane alternative to a world gone mad. &lt;a href="http://blogs.atlassian.com/rebelutionary/archives/2006_09.html"&gt;Atlassian CEO Mike Cannon-Brookes&lt;/a&gt; has ranted exactly this in the past.&lt;br /&gt;&lt;br /&gt;With financial systems in the toilet due to excessive valuation of flaky assets, this can seem justified as much as ever. Indeed my own aspirations for a new business incorporate this sane model of organic growth. I know it could take longer.&lt;br /&gt;&lt;br /&gt;It seems that the venture capital (VC) funded model of startups popular in silicon valley are stuck in railway thinking. VCs think that if it isn't something they can put many millions in and get hundreds of millions out, it's "not interesting". And of course more is always more.&lt;br /&gt;&lt;br /&gt;As a tech guy, I think the prospect of growing a business up from nothing seems plenty interesting. But if I had taken millions of someone else's money to start the company, well the reality is I'd have already sold the company. A chunk of it. I'd have borrowed money and would need to pay it back. How would I pay back the millions with extra zeroes on the end? I would have to sell out big. This is the railway. Once you get on it you don't get to choose where to go. You only get to choose when to get off, assuming you don't run out of steam. And VCs don't want you crawling down the track. They are looking ahead to their exit impatiently. They want their money to fuel the train as fast as possible. Destination "liquidity event".&lt;br /&gt;&lt;br /&gt;On the other hand, is it really a problem if people want to start a business with someone else's money and sell it in a couple of years? What's wrong with &lt;a href="http://www.fastcompany.com/magazine/32/builttoflip.html"&gt;build to flip&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;I think the real problem here is cultural. If kids these days aspire to be like &lt;a href="http://en.wikipedia.org/wiki/Kevin_Rose"&gt;Kevin Rose, founder of Digg&lt;/a&gt;, or want to build the next Facebook or Twitter or even &lt;a href="http://www.mint.com/"&gt;Mint&lt;/a&gt; (just bought by competitor &lt;a href="http://quicken.intuit.com/"&gt;Quicken&lt;/a&gt; for $170M), they may well be building with a mind to sell out in the short term. I don't think this short term thinking will build the next generation of great companies. It wasn't the kind of thinking that built Apple or Microsoft or even Google. These companies have really made their mark and changed the world, hopefully for better, but they're clearly more than an expensive flash in the pan. Even Bill Gates has become quite the philanthropist.&lt;br /&gt;&lt;br /&gt;The parallels of build to flip with the &lt;a href="http://onstartups.com/tabid/3339/bid/8608/Startup-Lessons-From-The-Underpants-Gnomes-PROFIT.aspx"&gt;the Underpants Gnomes&lt;/a&gt; are too stark to ignore. Can't remember step two.. never you mind about step two. Step three is profit. I suspect it's only this pesky string of recent bank collapses that has put a dampener on the craze of Underpants Gnomes business models. If the GFC hadn't happened first I think the startup upstarts might well all have bubble gum on their faces by now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-6926815213958395532?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/IU-jaHItLx0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/6926815213958395532/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/12/build-to-flip-vs-organic-growth.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/6926815213958395532?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/6926815213958395532?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/IU-jaHItLx0/build-to-flip-vs-organic-growth.html" title="Build to Flip vs Organic Growth" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/12/build-to-flip-vs-organic-growth.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cASHg8cSp7ImA9WxNbFE8.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-5294729629607279932</id><published>2009-11-17T11:28:00.003+11:00</published><updated>2009-11-17T12:24:09.679+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-17T12:24:09.679+11:00</app:edited><title>Jason Fried on Less is More</title><content type="html">I'm a fan of &lt;a href="http://37signals.com/svn/"&gt;Jason Fried&lt;/a&gt;, the &lt;a href="http://37signals.com/"&gt;37 Signals&lt;/a&gt; founder who sticks to his guns and stands up for simplicity in software design. I like how he's a dissenting voice and clearly has the courage of his convictions. I like how he promotes what VCs disparagingly call "lifestyle businesses". I'm happy that he's been featured on &lt;a href="http://www.inc.com/magazine/20091101/the-way-i-work-jason-fried-of-37signals.html"&gt;INC&lt;/a&gt;, a major US business magazine, even though I'm not enough of a fan to care what kind of tea he drinks and all that.&lt;br /&gt;&lt;br /&gt;I'm a fan of Less is More. This year I have been exploring the surprising depth and complexity of this oft-quoted pithy aphorism. Jason Fried is a Less is More poster boy. Except he doesn't like the phrase. I've read it from him elsewhere, but the INC magazine feature reminded me. &lt;br /&gt;&lt;br /&gt;If he didn't like &lt;span style="font-style:italic;"&gt;less is more&lt;/span&gt; because it was overused and therefore overlooked, I would completely understand. But that's not his objection. He says that he doesn't like Less is More because it implies that More is better. Ridiculous!&lt;br /&gt;&lt;br /&gt;Actually I worked with a guy who straight-out didn't understand the phrase. In one of his customary rants about inconsequential stuff he confided that he thought Less is More was vacuous and clearly irrational. "More is more and less is less!" he said.&lt;br /&gt;&lt;br /&gt;First of all, I think it's obvious why it has a deliberate and prominent paradox. The semantic collision is a key feature of its beauty. Less is More works so well because it identifies the conflict of competing values in a compact and humourous way.&lt;br /&gt;&lt;br /&gt;Less [of one thing] is more [of another]. &lt;br /&gt;&lt;br /&gt;There is an unspoken contex shift in the middle.&lt;br /&gt;&lt;br /&gt;So to object to the phrase because it implies that More is better is to misunderstand it on the most flimsy semantic level. Less is better because it is "more good". To advocate Less you must refer to its superiority. Inherent in every word to describe "better" is the notion of "more". It's just words!&lt;br /&gt;&lt;br /&gt;So to properly appreciate how well Less is More applies to Jason Fried's own philosophy of software design, you see that (arguably) less features enables something. Something is gained in their place. There is more of something. &lt;br /&gt;&lt;br /&gt;Understanding what the two sides of the see-saw are is the critical (dare I say pivotal?) task of applying the less is more wisdom to a given situation. What exactly is the tradeoff being made? This is how I use Less is More in my software development and also in my life.&lt;br /&gt;&lt;br /&gt;The opportune moments for the wisdom of Less is More are more specific than just identifying competing goals. It represents minimalism. It's not just less pizza is more beer. It advocates a fresh look at what is essential and rejects overconsumption, overburdening, hoarding and powermongering. It represents a philosophy of happiness and a wholistic goal rather than the pointless pursuit of intermediate tokens that we first world people frequently use as proxies for real goals. &lt;br /&gt;&lt;br /&gt;Less is more is a tool for escaping from the distraction of things that are merely a means to an end and resets attention on the end itself.&lt;br /&gt;&lt;br /&gt;There are usually hidden tradeoffs in software design and the business of programming. The 80/20 rule (the &lt;a href="http://en.wikipedia.org/wiki/Pareto_principle"&gt;Pareto Principle&lt;/a&gt;) is essentially a variant of this where the see-saw becomes a lever and therefore provides (hold your nose) &lt;span style="font-style:italic;"&gt;leverage&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Complexity is befuddling. Complexity in software actually prevents people from getting their work done and often inhibits progress towards their goal. For all it's enabling potential, complex software has an opportunity cost. When I was a kid, I had the justified belief that I could learn any application in one sitting. Those days are long gone. There's a great power to that. Jason Fried seems to be a voice in support of this idea.&lt;br /&gt;&lt;br /&gt;I'd like to write more on Less is More. I think the irony is stopping me for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-5294729629607279932?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/a6TcT4VE4Ew" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/5294729629607279932/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/11/jason-fried-on-less-is-more.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/5294729629607279932?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/5294729629607279932?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/a6TcT4VE4Ew/jason-fried-on-less-is-more.html" title="Jason Fried on Less is More" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/11/jason-fried-on-less-is-more.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IEQng8eip7ImA9WxNXGEk.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-1420722640800299405</id><published>2009-10-06T22:32:00.004+11:00</published><updated>2009-10-07T02:05:03.672+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-07T02:05:03.672+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><title>Smart Programmers Who Don't Get Patterns</title><content type="html">I've been recently struck by the relatively large amount of ignorance about software design patterns amongst the pundits and seemingly intelligent "thought leaders" of the sofware development blogosphere. Actually it's not all that recent. &lt;br /&gt;&lt;br /&gt;Sure, I expect newbies and unscreened job applicants to fail to understand the point of design patterns, but to me they've always been one of the things all good developers should understand.&lt;br /&gt;&lt;br /&gt;First, I don't think the problem is the definition. I'm not squabbling about this. People get this mostly right. A design pattern is a form of solution to a known problem. They originate from Christopher Alexander's work in Architecture where examples include the "Ante Room" or "Roof Garden". The idea is that a pattern describes a general solution to an open range of problems. Architects might consider adding a "Roof Garden" when they are faced with forces and constraints in a design project where the Roof Garden can help achieve the design goals.&lt;br /&gt;&lt;br /&gt;Thanks to the work of many OO pioneers, but most famously the Gang of Four via their seminal book, &lt;a href="http://en.wikipedia.org/wiki/Design_Patterns_%28book%29"&gt;Design Patterns&lt;/a&gt;, the software world has adopted design patterns as a technique for storing and disseminating software design wisdom.&lt;br /&gt;&lt;br /&gt;But why?&lt;br /&gt;&lt;br /&gt;This is where many otherwise well-trained and intelligent software developers fall down. They think that the point of design patterns is component reuse. They think that, like building blocks, design patterns are prefab parts you can stick together, thereby doing less work or using less attention. And once this mistake is made, their rejection of this dumbing down of attentive design in place of convenience is understandable. &lt;br /&gt;&lt;br /&gt;But they have missed the point.&lt;br /&gt;&lt;br /&gt;The whole point of design patterns is to enable communication about design. Design patterns are an attempt to standardise a vocabulary for solutions. Design is frequently a collaborative effort, and even when it's not, a design concept often needs to be communicated either verbally or in written form. Learning about system design also relies on a standardised language.&lt;br /&gt;&lt;br /&gt;So a design pattern usually has a kind of specification which includes a stable name and possible aliases, description and suitable use situations. Developers who have used this pattern can then use the name instead of some long-winded boxes-and-lines session at the whiteboard.&lt;br /&gt;&lt;br /&gt;Now for some examples of seemingly intelligent and experienced software developers speaking out against design patterns.&lt;br /&gt;&lt;br /&gt;Some years ago &lt;a href="http://www.paulgraham.com/icad.html"&gt;Paul Graham and others argued&lt;/a&gt; that Design Patterns suggested a violation of the &lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY principle&lt;/a&gt; and that they always indicated a smell that the program required refactoring to remove duplication or that the language was not powerful enough to factor out the duplication. While this could in theory be true, only Lisp developers are in danger of suggesting that their language is perfect, so for the rest of us (statistically speaking, everyone), perhaps there is enough complexity and subtlety in our domain that we find ourselves able to recognise solution forms that we can name and talk about, and yet not implement generically.&lt;br /&gt;&lt;br /&gt;I take his point, but I think for most people it's a principled rather than a very practical one. The reality is that we live with imperfections in everything, so even if design patterns only exist to cope with this imperfection, then they will still have a seemingly permanent role.&lt;br /&gt;&lt;br /&gt;The point that different languages have different patterns, some more than others, is &lt;a href="http://c2.com/cgi/wiki?AreDesignPatternsMissingLanguageFeatures"&gt;well documented&lt;/a&gt;, and really orthogonal to the issue at hand - namely that design patterns are useful primarily for collaboration and communication. Even programming language designers use design patterns. All (impefect) programming languages, like all software, are knowingly designed to contain a subset of all possible features. Don't forget simplicity is a very valuable feature. Apparently Ralph Johnson, one of the Gang of Four, &lt;a href="http://www.cincomsmalltalk.com/userblogs/ralph/blogView?entry=3335803396"&gt;pointing this out&lt;/a&gt; did little to calm the hysteria on &lt;a href="http://blog.plover.com/prog/johnson.html"&gt;an argument that design patterns formed a list of language features that should be implemented&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Zed Shaw, Ruby on Rails agitator and apparent chronic self-congratulator warns developers in &lt;a href="http://www.youtube.com/watch?v=stDL3aOTYIU&amp;feature=player_embedded#"&gt;his keynote&lt;/a&gt; entitled "Why Keynotes Suck" which was (with what one must assume is deliberate irony) literally read off an irc channel:&lt;br /&gt;&lt;br /&gt;"Stop using patterns. No really, quit using patterns, they aren't helping. I have evidence on that by the way, which is later"&lt;br /&gt;&lt;br /&gt;I didn't catch the evidence but later he did say:&lt;br /&gt;&lt;br /&gt;"Adapter, Bridge and Connector are the same"&lt;br /&gt;&lt;br /&gt;And then&lt;br /&gt;&lt;br /&gt;"Patterns suck, use algorithms."&lt;br /&gt;&lt;br /&gt;The idea of patterns "not helping" conjures images of these dead zones in the code where there is a pattern just taking up space and not actually providing functionality. Should I go and delete all the patterns from my code? What would pattern-free code look like? Do they just suck because there are aliases? Plenty of algorithms have multiple names. What makes algorithms ok? Is Zed just trying to sound old school?&lt;br /&gt;&lt;br /&gt;To be fair, during this talk his main point was to encourage individual thinking and not to follow advice blindly (including his own) but I do get the impression that his idea of patterns has come from the blind cookie-cutter adoption of patterns with small amounts of bad glue code holding the "architecture" together. We've all seen it.&lt;br /&gt;&lt;br /&gt;A recent example is from &lt;a href="http://blip.tv/file/2537613/"&gt;a video interview with Stuart Halloway&lt;/a&gt; author of "Programming Clojure" and a series of articles about post-java jvm languages. When explaining the advantages of macros, Stuart basically repeats Paul Graham, saying,&lt;br /&gt;&lt;br /&gt;"Languages that have macros don't really have design patterns". &lt;br /&gt;&lt;br /&gt;Perhaps because he thinks a design pattern is when:&lt;br /&gt;&lt;br /&gt;"I couldn't really figure out how to solve this in a resuable way, so whenever I hit this problem I copy and paste from somewhere else and tweak. So it's amazing that design patterns has put a positive spin on this copy and paste reuse of these blocks of code".&lt;br /&gt;&lt;br /&gt;I'm not an expert on functional languages with macros, but Peter Norvig is. Even this mighty Lisp and AI guru &lt;a href="http://norvig.com/design-patterns/"&gt;identifies design patterns&lt;/a&gt; in such languages though he does say that 16 of 23 patterns are either invisible or simpler due to language features like macros, first class functions and multimethods. Stuart may be overstating it - I think what he is talking about is a more populist use of the canonical GOF design patterns and similar OO patterns.&lt;br /&gt;&lt;br /&gt;The dread curse of this misunderstanding about patterns seems to have arisen from the usual cause of all technology's ills: marketing. I distinctly recall a Compuware salesman give a bone dry presentation to a local Java user group in about 2000 demonstrating how you could avoid programming almost completely by dragging and dropping patterns from a palette onto a ... thing on the screen. Clearly not targeted to a group of programmers so geeky that they want to get together after hours and talk about the joys of programming. Similarly books about something called "&lt;a href="http://www.google.com.au/search?hl=en&amp;client=firefox-a&amp;rls=org.mozilla%3Aen-GB%3Aofficial&amp;hs=GTT&amp;q=%22pattern+oriented%22&amp;btnG=Search&amp;meta="&gt;pattern oriented&lt;/a&gt; architecture" began to appear and patterns was something to put on the resume.&lt;br /&gt;&lt;br /&gt;What these people need to understand is that design patterns will continue to be useful and to have a role because they are one level of abstraction above implementation. They are needed to explain solutions in terms of a programming language but they cannot be replaced by the language. They are softer than software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-1420722640800299405?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/4CA8qPskwtw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/1420722640800299405/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/10/smart-programmers-who-dont-get-patterns.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/1420722640800299405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/1420722640800299405?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/4CA8qPskwtw/smart-programmers-who-dont-get-patterns.html" title="Smart Programmers Who Don't Get Patterns" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/10/smart-programmers-who-dont-get-patterns.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQFQHo4eyp7ImA9WxNSE04.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-7904388431096210232</id><published>2009-08-27T10:12:00.002+10:00</published><updated>2009-08-27T10:18:31.433+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-27T10:18:31.433+10:00</app:edited><title>My Code Sux!</title><content type="html">I don't know about you, but when I look at code I wrote three years ago, I always seem to think it sux. &lt;br /&gt;&lt;br /&gt;And that's a good thing.&lt;br /&gt;&lt;br /&gt;If the code you wrote three years ago doesn't suck then you're not learning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-7904388431096210232?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/i2Kff19JU-Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/7904388431096210232/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/08/my-code-sux.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/7904388431096210232?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/7904388431096210232?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/i2Kff19JU-Q/my-code-sux.html" title="My Code Sux!" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/08/my-code-sux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8AQn44cCp7ImA9WxJQFE0.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-6769800519457430864</id><published>2009-05-27T10:21:00.004+10:00</published><updated>2009-05-27T15:40:43.038+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-27T15:40:43.038+10:00</app:edited><title>Incompetence is the Most Powerful Force in Software Development</title><content type="html">Incompetence is the most powerful force in software development. It's like dark matter. It makes up the vast majority of the observable software development universe but nobody has discovered how to harness its power - for either fun or profit. This doesn't stop people constantly trying.&lt;br /&gt;&lt;br /&gt;In the many software development shops I admire, it is universally avoided. For example, at &lt;a href="http://blogs.atlassian.com/developer"&gt;Atlassian&lt;/a&gt;, we concentrate on how to profit from software development using the best people we can find. I think we're resigned to the intractability of utilising incompetence. &lt;br /&gt;&lt;br /&gt;For some, however, the allure of the ready availability of incompetence is too much to resist, and besides, it accumulates like lint or &lt;a href="http://pcbunn.cithep.caltech.edu/jjb/administratium.htm"&gt;administratium&lt;/a&gt;. Only the good people leave. So why not harness the immense power of this abundant natural resource? Unfortunately incompetence is a force that can only be used for evil.&lt;br /&gt;&lt;br /&gt;To a businessperson, incompetence is such an "obvious" business potential. It's tantamount to turning lead into gold. There is a desperation in business to believe that it can work and that there isn't some inherent value missing from that raw material. The rule applies for all skilled specialists, especially of newfangled, esoteric or otherwise incomprehensible arts.&lt;br /&gt;&lt;br /&gt;In software development there's a long legacy of tools vendors preying on this desperation as they sell software that purports to make it possible for muppets to perform like competent professionals. No clue required. I have some future posts lined up on this topic, so stay tuned for some bile.&lt;br /&gt;&lt;br /&gt;This post continues my apparent pattern of physics metaphors for software development:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.atlassian.com/developer/2009/02/general_law_of_laptop_relativi.html"&gt;The Laptop Law of Relativity&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.atlassian.com/developer/2009/05/quantum_mechanics_and_unit_tes.html"&gt;Quantum Mechanics and Unit Testing&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.chromosundrift.com/2009/05/when-team-gels-motorcycle-powerband.html"&gt;When a Team Gels: a Motorcycle Powerband&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So unless you've worked out how to turn lead into gold, avoid it or risk it all. Everyone knows, like a &lt;a href="http://gizmodo.com/374066/large-hadron-collider-wont-destroy-earth-of-course-not"&gt;misconfigured hadron collider&lt;/a&gt;, incompetence can cause your project's universe to implode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-6769800519457430864?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/XGM_fFywgrc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/6769800519457430864/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/05/incompetence-is-most-powerful-force-in.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/6769800519457430864?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/6769800519457430864?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/XGM_fFywgrc/incompetence-is-most-powerful-force-in.html" title="Incompetence is the Most Powerful Force in Software Development" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/05/incompetence-is-most-powerful-force-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUERHw8eip7ImA9WxJRE00.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-6342488209048177691</id><published>2009-05-14T21:09:00.004+10:00</published><updated>2009-05-14T22:13:25.272+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-14T22:13:25.272+10:00</app:edited><title>When A Team Gels: A Motorcycle Powerband</title><content type="html">When a team gels, there's nothing like it. Explaining it does no use - it only sounds like a cliche  or bad sports metaphor. But there's no mistaking the sensation you get. Not to mention the hyper productivity.&lt;br /&gt;&lt;br /&gt;What it reminds me of most - me with my "overactive imagination" as Mr Ryan, my 4th grade teacher would say - ahem - what it reminds me of most is hitting the powerband on a motorcycle. Bear with me! I can bring this baby in to land.&lt;br /&gt;&lt;br /&gt;Now this, I think I can explain. When you open up the throttle on a decent motorbike, the engine goes faster and obviously the bike accelerates. But (depending on lots of engine-type stuff) there can often be a point in the speed of the engine where several things come together at once, and you learn that once the revs reach a &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_74NHueaBr9E/SgwHyrjUskI/AAAAAAAAABg/U3bL1BOBrQE/s1600-h/Yamaha_R1_0V8Y1737.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 400px; height: 277px;" src="http://1.bp.blogspot.com/_74NHueaBr9E/SgwHyrjUskI/AAAAAAAAABg/U3bL1BOBrQE/s400/Yamaha_R1_0V8Y1737.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5335648225792930370" /&gt;&lt;/a&gt;familiar resonance through the body of the bike, what was an ineffectual buzz only a moment ago transforms into a surge of forward force that teleports you down the road - wherever you point the thing - at a whole new category of fast. Instinctively you pull against this force as it threatens to rip your arms off and you become one with the machine, the front wheel unweighting and your face an immutable smile. It's like magic, but of course, it's just physics.&lt;br /&gt;&lt;br /&gt;This gratuitous metaphor got me thinking about the "physics" of a team gelling and what factors contribute to it. Then I realised the metaphor goes even further.&lt;br /&gt;&lt;br /&gt;In a team, the sensation of things starting to "gel" is a categorical transition. Team members anticipate each other's needs, they are able to judge the relative priority of each others goals and they can correct the natural misunderstandings that happen in all communication with greater speed and less fuss. The communication, the routines, the knowlege each member has of the others, it all starts working together. &lt;br /&gt;&lt;br /&gt;I'm not going to put my amateur psychologist hat on (you know I've got one), but it struck me that this feature of the interactions between team members is very like a fluid dynamics scenario. It's complex and chaotic and all that, but under certain conditions, all the ins and outs and vortices and what not stop working against each other and find a kind of harmony.&lt;br /&gt;&lt;br /&gt;Well guess what? That fluid dynamics scenario is literally what's happening in the engine as the motorcycle hits the power band. The timing of the fuel and air flowing into the engine, the combustion rates, temperature and pressure changes, exhaust speed, the lengths and volumes and shapes of each part of the whole breathing system work together more and against each other less. &lt;br /&gt;&lt;br /&gt;So if you've never worked in a team that gelled (believe me you'll know if you have) then keep working towards it. Either that or get yourself a motorbike.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-6342488209048177691?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/V2sBpR923wA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/6342488209048177691/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/05/when-team-gels-motorcycle-powerband.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/6342488209048177691?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/6342488209048177691?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/V2sBpR923wA/when-team-gels-motorcycle-powerband.html" title="When A Team Gels: A Motorcycle Powerband" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_74NHueaBr9E/SgwHyrjUskI/AAAAAAAAABg/U3bL1BOBrQE/s72-c/Yamaha_R1_0V8Y1737.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/05/when-team-gels-motorcycle-powerband.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EHRXg_fip7ImA9WxJREEw.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-3448192654073421216</id><published>2009-05-11T15:02:00.002+10:00</published><updated>2009-05-11T15:27:14.646+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-11T15:27:14.646+10:00</app:edited><title>Brief, Incomplete, Wrong, Funny</title><content type="html">Just spotted a pants-wettingly funny satirical history of computer programming languages over at James Iry's blog, One Div Zero, &lt;a href="http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html"&gt;A Brief, Incomplete, and Mostly Wrong History of Programming Languages&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here's a taste:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;[Lisp] remains an influential language in "key algorithmic techniques such as recursion and condescension"&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;and&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Lambdas are relegated to relative obscurity until Java makes them popular by not having them.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;and it all started back in 1801:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;1801 - Joseph Marie Jacquard uses punch cards to instruct a loom to weave "hello, world" into a tapestry. Redditers of the time are not impressed due to the lack of tail call recursion, concurrency, or proper capitalization.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Whereupon one wit proclaimed in the comments:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Jacquard's loom wasn't concurrent? It was pretty thoroughly multithreaded, I'd have thought!&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Programming languages are furtile ground for satirical humour. Like the awesome &lt;a href="http://www.malevole.com/mv/misc/killerquiz/"&gt;Programming Language Designer or Serial Killer&lt;/a&gt; quiz and the ever growing mound of &lt;a href="http://en.wikipedia.org/wiki/Esoteric_programming_language"&gt;esoteric programming languages&lt;/a&gt; such as &lt;a href="http://www.muppetlabs.com/~breadbox/bf/"&gt;Brainfuck&lt;/a&gt;, &lt;a href="http://esolangs.org/wiki/Befunge"&gt;Befunge&lt;/a&gt; and &lt;a href="http://catb.org/esr/intercal/"&gt;INTERCAL&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-3448192654073421216?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/XJUjDBkCzQ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/3448192654073421216/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/05/brief-incomplete-wrong-funny.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/3448192654073421216?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/3448192654073421216?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/XJUjDBkCzQ0/brief-incomplete-wrong-funny.html" title="Brief, Incomplete, Wrong, Funny" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/05/brief-incomplete-wrong-funny.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4BRHY6eip7ImA9WxJSEEs.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-1986073084102280633</id><published>2009-04-30T14:48:00.000+10:00</published><updated>2009-04-30T14:49:15.812+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-30T14:49:15.812+10:00</app:edited><title>Being Clever</title><content type="html">In software engineering, being clever is not smart.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-1986073084102280633?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/ja8ZIDNCfUI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/1986073084102280633/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/04/being-clever.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/1986073084102280633?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/1986073084102280633?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/ja8ZIDNCfUI/being-clever.html" title="Being Clever" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>4</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/04/being-clever.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YCQnk-fip7ImA9WxJTE0w.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-3547506702284737985</id><published>2009-04-21T19:42:00.004+10:00</published><updated>2009-04-21T21:59:23.756+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-21T21:59:23.756+10:00</app:edited><title>Google What's Up CAPTCHA</title><content type="html">I heard about the new Google robot detector a.k.a. &lt;a href="http://en.wikipedia.org/wiki/Captcha"&gt;CAPTCHA&lt;/a&gt; from a security blog I've been reading, &lt;a href="http://ha.ckers.org/blog/20090420/google-whats-up-captcha/"&gt;ha.ckers.org&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The captcha problem is a real favourite of mine and I think about it all the time.&lt;br /&gt;&lt;br /&gt;Good old "rsnake" seems to dismiss this new system seemingly out of hand. I think it's great. Google's What's Up CAPTCHA makes several improvements over the previous warped letters systems. Many of these are described in their &lt;a href="http://www.richgossweiler.com/projects/rotcaptcha/rotcaptcha.pdf"&gt;report&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Briefly, the system involves showing randomly rotated pictures and the user is prompted to indicate which way is up.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_74NHueaBr9E/Se2oPeiwV4I/AAAAAAAAAA4/gfee3TviEy4/s1600-h/Picture+1.png"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 319px; height: 320px;" src="http://1.bp.blogspot.com/_74NHueaBr9E/Se2oPeiwV4I/AAAAAAAAAA4/gfee3TviEy4/s320/Picture+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5327098918099507074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Firstly captcha is only about robot detection. It won't detect large hordes of humans paid paltry sums or coerced to pass your detector. Don't blame captcha. This is not the seven letter acronym you are looking for.&lt;br /&gt;&lt;br /&gt;The current letter recognition strategies all require a large amount of noise or distortion to be added. It doesn't help that computer scientists have been working for decades to improve automated letter detection in the presence of noise for legitimate purposes. The reality is, as with Chess, computers have become pretty good at it. Excessive noise can throw them off, trouble is most people seem to have almost as much difficulty.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_74NHueaBr9E/Se2nHPGJDOI/AAAAAAAAAAw/_ttAYJyvr8Y/s1600-h/captcha3.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 263px;" src="http://1.bp.blogspot.com/_74NHueaBr9E/Se2nHPGJDOI/AAAAAAAAAAw/_ttAYJyvr8Y/s320/captcha3.jpg" alt="" id="BLOGGER_PHOTO_ID_5327097677002378466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Warped letters, along with most if not all visual stimuli leave blind people in the lurch. Often a parallel audio cue is used for them.&lt;br /&gt;&lt;br /&gt;Another problem with letters is that they are not very international. Many cultures are comparatively unfamiliar with the English alphabet which is invariably adopted for captcha and will have an even harder time than native English speakers in recognising letters after they've been twisted.&lt;br /&gt;&lt;br /&gt;RSnake takes a hurried swipe at the new system by running through the captcha acronym coming up with the following categories of dismissal:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It leaves blind people in the lurch.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It is not Completely Automated, requiring Google staff to run through images to see if there is an obvious "up". &lt;/li&gt;&lt;li&gt;It requires JavaScript, Flash or other new fangled technology which people like RSnake never use.&lt;/li&gt;&lt;/ul&gt;I think he's wrong on all three counts.&lt;br /&gt;&lt;br /&gt;Firstly, a parallel audio alternative is no less an option than it is today. Blind people can use that. It can remain a completely parallel audio captcha effort with it's own analogous problems. Perhaps people aren't writing audio captcha solvers. Perhaps it's still too hard.&lt;br /&gt;&lt;br /&gt;Secondly it can be completely automated. The fact that humans will reliably discern "up" in pictures that have a discernable up will show up in large numbers of responses. Robots will be random, systematically wrong or inaccurate across a greater range than humans. If you present a series of prompts and use the combined results to decide then you can get whatever statistical probability you deem acceptable. The &lt;span style="font-weight: bold;"&gt;only&lt;/span&gt; critical factor is that humans find it easier than computers by a significant margin.&lt;br /&gt;&lt;br /&gt;Without human intervention, you may get non-performant source images, such as a photo pointed straight down at the ground. Presumably humans will not be able to tell "up" uniformly and these can be weeded out of the source pool using only responses to the prompts.&lt;br /&gt;&lt;br /&gt;So, assuming "up detection" is still too hard to automate, this will make a nice captcha system. If this assumption starts to be violated, then it will be time to dream up a new system.&lt;br /&gt;&lt;br /&gt;Lastly, I can say with some confidence that this system can be implemented with no new-fangled technology or plugins. Just images and HTML. Not as "2.0" as the AJAX version, but adequate.&lt;br /&gt;&lt;br /&gt;There are some other awesome captcha systems that I have heard of over the years. Of particular note is &lt;a href="http://arstechnica.com/old/content/2006/04/6554.ars"&gt;kitten auth&lt;/a&gt; and &lt;a href="http://valleywag.gawker.com/tech/hot-or-not/a-face-only-a-bot-could-love-246656.php"&gt;hot or not captcha&lt;/a&gt; where you prove you are human by identifying kittens and sexiness respectively.&lt;br /&gt;&lt;br /&gt;My mind is bubbling with exciting ideas on this topic, so it's probably a good point to cut this post off and promise to put those to print another day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-3547506702284737985?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/luoUSq5zP8U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/3547506702284737985/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/04/google-whats-up-captcha.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/3547506702284737985?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/3547506702284737985?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/luoUSq5zP8U/google-whats-up-captcha.html" title="Google What's Up CAPTCHA" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_74NHueaBr9E/Se2oPeiwV4I/AAAAAAAAAA4/gfee3TviEy4/s72-c/Picture+1.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/04/google-whats-up-captcha.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkECRXw7eip7ImA9WxVbGUU.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-3680691327355160175</id><published>2009-04-06T12:13:00.002+10:00</published><updated>2009-04-06T12:24:24.202+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-06T12:24:24.202+10:00</app:edited><title>Don't Be Quality Guy</title><content type="html">&lt;blockquote&gt;Do not make the mistake of taking on the role in your team of the greatest advocate for improving quality. Don't be quality guy.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This was the advice given to me by an ex-colleague and he assured me it was first-hand wisdom, hard-won.&lt;br /&gt;&lt;br /&gt;My approach has been to see things as business cases. Does quality always have a business case? This is something I've been wondering about for a long time. It certainly seems to depend on the details.&lt;br /&gt;&lt;br /&gt;Thankfully I have never had to learn this lesson first hand. I just adopted it. I remember the look in my ex-colleague's eyes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-3680691327355160175?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/Lw8lkBI12zo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/3680691327355160175/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/04/dont-be-quality-guy.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/3680691327355160175?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/3680691327355160175?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/Lw8lkBI12zo/dont-be-quality-guy.html" title="Don't Be Quality Guy" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>4</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/04/dont-be-quality-guy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAERX04eip7ImA9WxVUE04.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-2519581979512366182</id><published>2009-03-18T10:32:00.002+11:00</published><updated>2009-03-18T11:38:24.332+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-18T11:38:24.332+11:00</app:edited><title>Swamp Waders and Watchmakers</title><content type="html">I used to be a nasty hacker. I mean I used to write horribly twisted unmaintainable code.&lt;br /&gt;&lt;br /&gt;It was as if &lt;a href="http://freeworld.thc.org/root/phun/unmaintain.html"&gt;this&lt;/a&gt; was my manual. It was fun!&lt;br /&gt;&lt;br /&gt;But much later, after I finished high school and then university and eventually started being paid to write code, I started to work on systems which did &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; have the property that all of the concepts and implementation details of the system were in my head.&lt;br /&gt;&lt;br /&gt;I began to prefer cleaner code.&lt;br /&gt;&lt;br /&gt;Cleaner code led to fewer mistakes, faster changes and relied less on memory of the system when returning to it after an absence.&lt;br /&gt;&lt;br /&gt;When I started to prefer cleaner code and worked for a while on systems where the code was comparatively clean, I started to sense a kind of allergic reaction whenever working on code which was disogranised, inconsistent and swamp-like.&lt;br /&gt;&lt;br /&gt;It disgusted me and my occasions of exposure to the swamp were overwhelming. I have worked with guys who slithered past the many traps and gotchas, unmoved to clean up. I remembered that I used to be like them.&lt;br /&gt;&lt;br /&gt;I remember never really thinking about the meaning of names. Why not just "x" or "w", or "foo" or "grandma"? I expected just to have my own symbol table in my head. Keeping all the mess in my head was a sharply honed skill.&lt;br /&gt;&lt;br /&gt;I was a swamp wader. But I have since evolved.&lt;br /&gt;&lt;br /&gt;I had become more like a watchmaker. I chose to keep things in their proper place. All the delicate sprockets and springs, neatly arrayed on sea green felt.&lt;br /&gt;&lt;br /&gt;With everything in its place I refactor with confidence to bring the few strays into line. I revisit forgotten code and my expectations of being insulated from failures in unrelated parts of the code are capably met by the beautiful mechanisms. Names infer purpose. The code speaks for itself. I sought to only work with like minds.&lt;br /&gt;&lt;br /&gt;Unneeded, my swamp-wading skills dwindled.&lt;br /&gt;&lt;br /&gt;But sporadic outings into swamp lands were disorienting so I started to worry that being a pure watchmaker put me at a disadvantage. What if a nuclear holocaust wiped out all the quality code and I was forced to fend for myself in the swamp? How would I put food on the table and gadgets in my pocket?&lt;br /&gt;&lt;br /&gt;I knew I needed to train myself. To follow a regime of tortuous swampy puzzles. Like writing Perl. And assembly. To maintain my mental toughness.&lt;br /&gt;&lt;br /&gt;These days, decades after I began in the swamps I no longer suffer from the watchmaker's nervous discomfort in the presence of swampy code. I wade in when I have to. I do tend to cultivate things a little here and there but resist creating islands of pond-scum topiary amidst the impossible wilds. When I can I will isolate and subdivide. I'll leave signs and make paths. If there is time I may do more, but sometimes I just have to get dirty.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-2519581979512366182?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/S67-WbPbWC0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/2519581979512366182/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/03/swamp-waders-and-watchmakers.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/2519581979512366182?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/2519581979512366182?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/S67-WbPbWC0/swamp-waders-and-watchmakers.html" title="Swamp Waders and Watchmakers" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/03/swamp-waders-and-watchmakers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIMSX07eip7ImA9WxVVFUU.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-8698599039644180330</id><published>2009-03-04T10:10:00.004+11:00</published><updated>2009-03-09T18:26:28.302+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-09T18:26:28.302+11:00</app:edited><title>And I Want an iPony</title><content type="html">I have recently joined that elite set of wankers, the iPhone users.&lt;br /&gt;&lt;br /&gt;It feels good. As people say, it's like living in the future.&lt;br /&gt;&lt;br /&gt;Of course, being a software developer I can't help wondering how plausible it would be for me to make it rich by making an addictive physics puzzle game or something and flogging it on the app store for a couple of bucks. It certainly is incredibly easy to buy stuff.&lt;br /&gt;&lt;br /&gt;My first purchase was iGo, an implementation of &lt;a href="http://senseis.xmp.net/?GNUgo"&gt;GNU Go&lt;/a&gt; with a slick user interface. So now I can work on strengthening my game on the bus. The perfect compliment to that is a free &lt;a href="http://www.pandanet.co.jp/English/"&gt;IGS&lt;/a&gt; client, &lt;a href="http://www.gentgo.be/tetsuki/"&gt;Tetsuki&lt;/a&gt; so I can be beaten at Go by Japanese children anywhere, any time.&lt;br /&gt;&lt;br /&gt;I won't bother enumerating the vast array of personal efficiency gains I believe I'll make.&lt;br /&gt;&lt;br /&gt;The device is capable, luxurious and respectful of my time.&lt;br /&gt;&lt;br /&gt;It has also exhausted my meagre toy budget for some time to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-8698599039644180330?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/3dK94AHmf6I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/8698599039644180330/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/03/and-i-want-ipony.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/8698599039644180330?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/8698599039644180330?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/3dK94AHmf6I/and-i-want-ipony.html" title="And I Want an iPony" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/03/and-i-want-ipony.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMGQHk4fip7ImA9WxVVFUU.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-7644812034532112848</id><published>2009-02-28T08:41:00.000+11:00</published><updated>2009-03-09T18:23:41.736+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-09T18:23:41.736+11:00</app:edited><title>Too many unit tests? It Always Depends</title><content type="html">The correct answer to all non-trivial questions in software development (and a great many other things) is "It depends". Knowing this shows experience. But the correct question is really "What does it depend on?". Knowing the answer to that shows true wisdom.&lt;br /&gt;&lt;br /&gt;Let's take a topic which has received some attention by august luminaries recently about &lt;span style="font-weight: bold;"&gt;the extent to which one should write unit tests&lt;/span&gt;. Your first reaction may be, "Really, people are still debating this?" Well yes they are.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.joelonsoftware.com/items/2009/01/31.html"&gt;Joel Spolsky and Jeff Atwood are debating this.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As much as Joel makes me chuckle and as much as he clearly has experience shipping quality software (full disclosure: the company I work for, &lt;a href="http://www.atlassian.com/"&gt;Atlassian&lt;/a&gt;, happily competes with his flagship product), Joel has seemingly just levelled up or something and is going around with Jeff Atwood and challenging what I call "blind completeness" in unit testing practices.&lt;br /&gt;&lt;br /&gt;Well I'm sure anyone on my team (&lt;a href="http://www.atlassian.com/software/jira/"&gt;JIRA&lt;/a&gt;) could come up with some plausible practical scenarios where additional unit tests do not repay the time spent on them. Unit tests are to catch regressions and to act as a jig keeping the code still as you maximise the design for maintainability. They also act as an index of working features (as opposed to fictional specifications). If the software won't ever be modified, then the time spent on unit testing will be waste. Just like all risk management work carried out where the maladies don't arise. And insurance policies on which a claim is never made.&lt;br /&gt;&lt;br /&gt;It's possible that a turn of events will occur such that a given set of unit tests were unnecessary. It's not theoretical, it's practical. And it's wasted time, and for a business owner like Joel, that's wasted money. It completely makes sense that he's thinking about this. He needs to run his software business and he needs to use this fact about the possibility of wasted money to his economic advantage. Go Joel!&lt;br /&gt;&lt;br /&gt;So what action should one take with this practical knowledge?&lt;br /&gt;&lt;br /&gt;Here's what Jeff Atwood says:&lt;br /&gt;&lt;blockquote&gt;The longer I think about this, the less I care about code hygiene issues (laughs). Because the unit of measure that really matters to me is, how quickly you can respond to real business needs with your code. And by that I mean, how well are you serving the people that are using your code. To me that's what it's &lt;i&gt;all&lt;/i&gt; about.&lt;/blockquote&gt;Absolutely. Except over what time frame? Just this week? Don't unit test at all then.&lt;br /&gt;&lt;br /&gt;Code quality, specifically effective unit test coverage is a leading indicator of the &lt;span style="font-style: italic;"&gt;future&lt;/span&gt; ability of that code to respond to real business needs. That's why this apparent front-loading is so central to agile practices. It's the only kind of optimisation that cannot be premature if you care about the future cost of change. Optimising for maintainability is the single most critical practice for enabling change. It is not necessary to understand this about agile processes in order to get value from unit testing, however.&lt;br /&gt;&lt;br /&gt;As an aside, watch what &lt;a href="http://www.threeriversinstitute.org/blog/?p=29"&gt;magnificent apoplexy happens to Kent Beck&lt;/a&gt; when his &lt;span style="font-style: italic;"&gt;You Aren't Going To Need It&lt;/span&gt; (YAGNI) mnemonic is turned on his own advice about up-front testing.&lt;br /&gt;&lt;br /&gt;So the question in the terms of my opening statement is:&lt;br /&gt;&lt;br /&gt;"How much should I unit test?"&lt;br /&gt;&lt;br /&gt;...and the answer will not surprise the attentive (or experienced):&lt;br /&gt;&lt;br /&gt;"It depends".&lt;br /&gt;&lt;br /&gt;And...&lt;br /&gt;&lt;br /&gt;"What does it depend on?"&lt;br /&gt;&lt;br /&gt;There are two factors:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;How much does the test cost to create and maintain? Like all code, tests are relatively cheap to create. At least when you compare to the typical total cost of maintenance. For some reason the figure that stuck in my brain from reading some oft-cited book that I've long-forgotten (Peopleware?) was a ratio like 4:1 maintenance. If anyone can find me a citation I'd be grateful.&lt;/li&gt;&lt;li&gt;What is the cost of bugs in production? You could put this another way: what is the benefit of the test catching a bug before it gets into production. This cost is not a dollar value. It's a dollars over time curve.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The cost of bugs in production to a software shop like Joel's is the loss of customers or goodwill due to a customer's bad experiences with the software. And to make matters worse, you may not ever find out that the reason a customer didn't purchase or renew a license was their experience with bugs. There may be some potential for getting sued, but to my knowledge this doesn't happen in the development tools product world. Medical software? Perhaps. So there's at least one thing it depends on.&lt;br /&gt;&lt;br /&gt;For completeness I'll mention some second order effects of bugs in production. Sometimes the bug never manifests but the assumptions evident in the code lead maintainers to draw incorrect conclusions about the system invariants. This can lead to bugs that do manifest. Don't make the mistake of thinking this is a theoretical problem.&lt;br /&gt;&lt;br /&gt;The biggest problems with measuring the cost of bugs in production are that the cost is not immediate and often not simple to trace. There's a huge time delay. Bugs can sleep for years. And of course, if your customer base is growing then your potential loss due to the impact of bugs is also growing. If your customer base is tiny (as with fledgling start-ups and many internal IT department projects) then the cost of bugs in production is sometimes much smaller than for an established software product with millions of users. There's another thing it depends on.&lt;br /&gt;&lt;br /&gt;Some software is sold on features, others on reputation or marketing. If you are a big name you can make money selling poor quality software at a high price because the purchasing decision-makers do not personally evaluate it nor are they fired for buying from a big name. Of course while business people can be perfectly happy shovelling this kind of shit, good developers rarely are. But there's another thing it depends on.&lt;br /&gt;&lt;br /&gt;Further, the mechanisms for the impact of the cost of bugs in production often lean on non-development parts of the organisation like support and sales. It may be a cost coming from someone else's budget! Perhaps the project sponsor doesn't care about that budget! I would bet Joel does care because it's his company. From the point of view of the project sponsor, it depends on this too.&lt;br /&gt;&lt;br /&gt;Clearly the economics of bugs is all about knowing your business, your customers business and the role of the software in it.  And your market. And your pricing. And your customer's purchasing decision process. It depends on all this stuff.&lt;br /&gt;&lt;br /&gt;You need to know the time frame over which you are measuring the cost-benefit trade-off of being at &lt;span style="font-style: italic;"&gt;your&lt;/span&gt; sweet spot on the quality curve. This may also change over time. Sometimes it's critical to "get to market". Other times it's super critical. In my experience getting to market only ranges between these two.&lt;br /&gt;&lt;br /&gt;All this stuff is just basic cost-benefit analysis and there is no magic formula that will work across all software projects. There's too much variation. Of course this doesn't stop pundits from continually declaring which size fits all.&lt;br /&gt;&lt;br /&gt;So now in terms of Robert Martin's blog post, &lt;a href="http://blog.objectmentor.com/articles/2009/01/31/quality-doesnt-matter-that-much-jeff-and-joel"&gt;Quality Doesn't Matter That Much -- Jeff and Joel&lt;/a&gt;. My response is. &lt;span style="font-weight: bold;"&gt;It bloody depends.&lt;/span&gt;  Software developers need to be able to speak to their project sponsors in terms such that they can negotiate the optimal quality balance for the circumstances.&lt;br /&gt;&lt;br /&gt;Finally, if you are a software developer working on a project for whom the cost-benefit trade-off that has been decided by your project sponsor leaves you with a quality level that robs you of job satisfaction, then drop me an &lt;a href="mailto:chris@think.net.au"&gt;email&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-7644812034532112848?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/qfBdCC76LgQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/7644812034532112848/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/02/too-many-unit-tests-it-always-depends.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/7644812034532112848?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/7644812034532112848?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/qfBdCC76LgQ/too-many-unit-tests-it-always-depends.html" title="Too many unit tests? It Always Depends" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/02/too-many-unit-tests-it-always-depends.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUBQXs5eSp7ImA9WxJSGEs.&quot;"><id>tag:blogger.com,1999:blog-2759480248865232582.post-4579255541168424192</id><published>2009-02-26T10:22:00.001+11:00</published><updated>2009-05-09T20:50:50.521+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-09T20:50:50.521+10:00</app:edited><title>First Post!</title><content type="html">This is the inaugural post of my new blog on the topic of software development and other stuff I like. As I write I hope my adequately configured blogging software makes that sentence redundant.&lt;br /&gt;&lt;br /&gt;The thing that was stopping me starting a new blog in the past was the effort of retrieving my old blog's posts which are stored in a database dump in a tarball on a drive somewhere. As the value of keeping and restoring my tired old rants into a new blog approached zero and the idea of just starting afresh maintained its appeal, I ultimately reached the threshold where my impetus to write exceeded my resistance to giving up on them.&lt;br /&gt;&lt;br /&gt;Perhaps there's just enough room left to succinctly justify my pushing my opinionated commentary on the world in case of the minuscule possibility that this first post will be read by someone.&lt;br /&gt;&lt;br /&gt;Actually, let's just say I'm only doing it for the money.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2759480248865232582-4579255541168424192?l=blog.chromosundrift.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Chromosundrift/~4/Op0NMcOHF50" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.chromosundrift.com/feeds/4579255541168424192/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.chromosundrift.com/2009/02/first-post.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/4579255541168424192?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2759480248865232582/posts/default/4579255541168424192?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Chromosundrift/~3/Op0NMcOHF50/first-post.html" title="First Post!" /><author><name>Chris Mountford</name><uri>http://www.blogger.com/profile/03560327085364406517</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07827571607594341651" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.chromosundrift.com/2009/02/first-post.html</feedburner:origLink></entry></feed>
