tag:blogger.com,1999:blog-27594802488652325822024-03-14T17:59:15.999+11:00Chris Mountfordanother layer of abstractionChris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.comBlogger36125tag:blogger.com,1999:blog-2759480248865232582.post-13667336256844621382015-04-13T17:15:00.002+10:002015-04-16T17:00:33.996+10:00Coding Super-ComplexityYoung, intelligent developers often fail when they become accustomed to the following two things:<br />
<br />
<ul>
<li>being 10x smarter than everyone around them; and</li>
<li>fitting all the code in their head </li>
</ul>
<div>
When they join a team where everyone else is pretty smart - even if not quite as smart - they can still fail hard.</div>
<div>
<br /></div>
<div>
They are like younger, stronger kung-fu warriors that yet cannot best the wizened master!</div>
<div>
<br /></div>
<div>
The problem is that while they may be able to solve problems that are 10x more complex than other developers, this is only true when limited to a practice which requires one to remember and understand everything about the system under development. Note that this is typical experience in hobby projects and many university projects.<br />
<br /></div>
<div>
</div>
<div>
I think software engineering, definitively, focuses on solving problems which require software to be built that is generally much larger than anyone can fit in their head. </div>
<div>
<br /></div>
<div>
In some ways intelligence can be a curse because it delays the lesson that systemic practices and superior tools (languages, architecture, frameworks) are necessary. Here I identify tools and techniques as superior primarily by their ability to massively magnify the effectiveness of our ability to deal with complexity. To tame it. To contain it.</div>
<div>
<br /></div>
<div>
Isolation, abstraction, automation - these things all help pump complexity out of the brain and into the software. It's true these systems can fail. Machines can fail and all software has bugs. But it's also true that we can often rely on them and that refusing to rely on them is a severe limitation and in some people who never learn this, even a personality defect!</div>
Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-44632035425943255562014-10-22T16:05:00.000+11:002014-10-22T16:05:54.679+11:00Open Source Needs CopyrightCopyright is not very well understood by many people. Open source likewise. Recently a friend of mine asked me to explain my statement that Open Source Software critically relies on copyright. I think there is a sense in the population outside of software development (and perhaps outside intellectual property law) that open source is an alternative or distinction to copyright.<br />
<br />
In fact the opposite is true.<br />
<div class="p2">
<br /></div>
<div class="p1">
Open source software is protected by copyright. If it were not, then any company could co-opt it and make it their own. Depending on the license, “free software” which is a distinction frequently (and some would say tediously) insisted upon by open source leading lights like the inimitable Richard Stallman, this software may impose a restriction on the rules by which reproduction or distribution of the software may be done - including modified versions of the software.<br />
<br />
This free software is freedom-enhanced or freedom-protecting. That's free as in speech, not free as in beer.</div>
<div class="p2">
<br /></div>
<div class="p1">
The famous GPL (GNU Public License) is like this - some say it is “viral”. If you or any company makes a product which is the result of modifying open source code which is licensed under the GPL, then the modifications you have made must not be published without the same affordances, indeed not without the same exact license. Notably this requires you to provide access to the the full source code without preventing anyone from further adding or modifying it.</div>
<div class="p2">
<br /></div>
<div class="p1">
Copyright law enables this because without such protections, software licenses would not be necessary. Failure to follow the terms of the license make one’s distribution of software a violation of copyright. Many companies have been busted because they have not followed the licenses and these days technology companies are familiar with meeting their obligations on this matter.</div>
<div class="p2">
<br /></div>
<div class="p1">
You may notice that most consumer electronic devices - computers, TVs etc. contain code (e.g. Linux), the license of which requires the manufacturer to tell you that you have the right to obtain the source code and that the manufacturer cannot deny you this right - nor can you deny anyone else the same rights should you decide to take that Samsung TV firmware and make a better version! Believe it or not, people do this sort of thing. You might get a bundle of open source licenses along with your equally impenetrable operation manual.</div>
<div class="p2">
<br /></div>
<div class="p1">
There are other licenses which are extremely permissive, such as the MIT license or the BSD license which do not place these viral restrictions on distributions. Some people believe this is more convenient, especially for software that is ideally suited to being incorporated in proprietary products as one of many components. However, just like GPL, whatever provisions the licenses do make - if these are the only terms under which the software is provided then they stick because copyright is an exclusive right to distribute unless it is explicitly assigned.</div>
Lastly, copyright assignment is completely independent of the terms of a license. Typically copyright is held like title deeds and not given to users of the software. Exceptions are if the work is undertaken as "work for hire" where someone pays someone else to develop that software - typically copyright is assigned in exchange for the money - and another common case of copyright assignment is when an individual developer submits a modification to be included in an official open source project. Such open source projects (like Apache) have a foundation that exists to hold the copyright so that the stewardship of the software can be maintained without a messy consultation with hundreds of dispersed pseudonymous bedroom hackers who happened to have made a small contribution.Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-10066131321313792492013-10-28T10:40:00.001+11:002013-10-28T10:40:36.373+11:00Show Me Numbers! Automated Browser Performance TestingHere's my talk from AtlasCamp 2013, Atlassian's annual plugin developer conference held in Amsterdam.<br />
<br />
My topic is Automated Browser Performance Testing.<br />
<br />
JavaScript developers often talk about performance, always tweaking to make the user experience faster. The good developers carefully and accurately measure this performance in multiple browsers. The great developers automate this measurement.<br />
<br />
In this talk I tell the full-stack story of the design and implementation of User Experience (UX) performance tests in<a href="https://www.atlassian.com/software/jira"> JIRA</a>. Learn techniques critical to improve not only actual performance, but also perceived performance - and when they are not the same thing!<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="344" src="//www.youtube.com/embed/y1Jx9LRKA5I" width="459"></iframe>Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-58940446476073489862013-04-23T18:32:00.000+10:002013-04-23T18:33:12.007+10:00Nice Syntax for Ignoring Exceptions in Groovy<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Save your breath. I don't need to hear how we shouldn't ignore exceptions. I agree with you. We should use exceptions as a part of an API and we should accept exception handling as an important, fundamental design element in our code. Happy?</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">OK now, sometimes you know you need to ignore an exception. Often it's a narrow exception type, for example, the following exceptions are frequently ignored with good reason (usually the exception cannot happen in practice):</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">MalformedURLException</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">NumberFormatException</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">IllegalAccessException</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">UnsupportedEncodingException</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Groovy inherits Java's exception handling syntax, the try, catch, finally blocks. While writing some code that ignored the exceptions I wondered what a Groovier way to do things would be. The following Config class is a kind of bean containing validated values read from a properties file. The defaults remain if the config file cannot be parsed for the given value.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<script src="https://gist.github.com/christo/5441689.js"></script>
<span style="font-family: Courier New, Courier, monospace;"><br /></span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Notice how the </span><span style="font-family: Courier New, Courier, monospace;">try {...} catch {...} </span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">looks like Groovy's closure passing syntax, as if there was a try method which is being passed a block. In fact I think Scala's equivalent is literally this (also, Scala is awesome). </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">But while it looks that way, it doesn't quite act that way. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">But could it?</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">What I really wanted to have was something like this:</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">ignore (NumberFormatException) {</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> threads = Integer.parseInt(config?.threads as String)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">}</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">This would ignore only a NumberFormatException if it was thrown, if something else was thrown, it would be thrown out of the present block.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">As I expected this is pretty easy to implement in Groovy and after a brief search I couldn't really find anything in the standard libraries or the blogosphere at large.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Here's my implemenation with some example code:</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><script src="https://gist.github.com/christo/5441677.js"></script></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Run this on the live <a href="http://groovyconsole.appspot.com/script/950001">GroovyConsole</a> yourself.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">What do you think? </span><br />
<br />Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-65882811661422081842013-01-31T10:14:00.000+11:002013-01-31T10:14:58.956+11:00Activate Remote Disc with Command Line on MAC OSX<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">On Macs without a DVD drive (i.e. everything these days) OSX is configured to easily allow use of a "Remote Disc" wherever another machine has enabled DVD/CD sharing.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">The trouble is the "Remote Disc" device was not showing up on my old Mac Mini's (broken DVD drive) and although I can usually avoid it I recently wanted to install something from a DVD. This machine has a DVD drive which is presumably why the option did not show up in the Finder preferences under Sidebar. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Fortunately these preferences can be turned on with a command line as follows:</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">defaults write com.apple.NetworkBrowser ODSSupported -bool true</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">defaults write com.apple.NetworkBrowser EnableODiskBrowsing -bool true</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Enter that in the terminal and then <i>Restart Finder</i> using the <i>Force Quit</i> menu so the settings take effect.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-SQbqsae8UrY/UQmo2kb3EaI/AAAAAAAAAXY/tYqSgLLXwgM/s1600/Screen+Shot+2013-01-31+at+10.07.45+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Remote Disc icon now shows up in the Finder Sidebar under Devices" border="0" src="http://1.bp.blogspot.com/-SQbqsae8UrY/UQmo2kb3EaI/AAAAAAAAAXY/tYqSgLLXwgM/s1600/Screen+Shot+2013-01-31+at+10.07.45+AM.png" title="Remote Disc icon now shows up in the Finder Sidebar under Devices" /></a></div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Then you should see the remote disc icon and can mount remotely shared DVDs and CDs. Note that you must also enable DVD/CD sharing on the machine with the disc.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com1tag:blogger.com,1999:blog-2759480248865232582.post-31626117173257005472011-10-19T12:30:00.000+11:002011-10-19T12:30:01.880+11:00New Stuxnet Virus Beta Version DiscoveredStuxnet, the most advanced computer virus ever discovered (by a long way), generally believed to be the first sophisticated example of a virus being used as an international military weapon, just got an upgrade. Most likely from its original authors. <br />
<br />
At least, according to <a href="http://www.symantec.com/content/en/us/enterprise/media/security_response/whitepapers/w32_duqu_the_precursor_to_the_next_stuxnet.pdf?API1=100&API2=4166445">Symantec's analysis</a> lab where a recently found version has been dissected on the operating table, it looks like the versions found in the wild "in Europe" were targeted test runs of a new version that was partly recompiled from the original source code which has so far remained secret.<br />
<br />
The new version carries a different payload to the original Stuxnet which, it is generally believed, was intended to shut down or disrupt Iranian nuclear facilities. In fact the new version's actual payload is pluggable. Modules can be loaded dynamically from a command and control server located in India.<br />
<br />
Duqu, as the new version is called, can read and write files, execute programs, capture keyboard input (to collect passwords) and generally open back doors for later use by the unknown attackers.<br />
<br />
Check out the great article on this by <a href="http://www.readwriteweb.com/hack/2011/10/new-stuxnet-variants-are-found.php">Read Write Web</a> and for a quick recap on the original Stuxnet, check this nicely produced - if creepy - video by Hungry Beast in Australia:<br />
<br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/7g0pi4J8auQ?hd=1" frameborder="0" allowfullscreen></iframe>Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-79201555389613190112011-10-09T09:01:00.000+11:002011-10-09T09:01:35.859+11:00Why Programming is HardProgramming is not hard because computers are fussy. Programming <i>is</i> hard, but not for that reason.<br />
<br />
There are plenty of pesky surface details in managing programming projects and programmers regularly find themselves burdened with managing tools and configuration details. More so when using Maven (Zing!). <br />
<br />
But this is just work. Annoying repetitive work. It's not what makes programming hard.<br />
<br />
In fact, programming is hard because there are so few limits to what you can do. <br />
<br />
Certainly there are limits to computability, and there are famous problems and algorithms that define the state of the art in computer science, but for many programmers, knowing about these limits is enough to prevent them from pushing up against the hardness of these limits on a regular basis. <br />
<br />
Programming is hard because the only limit is our own mental capability. It's always going to appear to be hard. It doesn't matter how smart you are.<br />
<br />
If programming is not hard, then you're doing it wrong. Your brain is not being fully utilised? You are being limited by your tools and you need to replace them.<br />
<br />
Any time spent dealing with repetitive details, remembering lots of things or even managing huge amounts of code, this time waste generally can be eliminated with more programming! This assumes you're in a postion to change the system enough and perhaps this is where practical project tradeoffs impose. And perhaps "the business" isn't interested in funding improvements to the open source build tool, or switching from Java to Scala. (Double Zing!) But those are not programming problems.<br />
<br />
For me, because software is so soft, the goals can be altered subtly, continuously, destructively. Especially when ill-defined. The hardest thing generally comes down to dealing with the confusion of some form of not being clear what I'm trying to do. Unravelling the "is it this or is it that" trail of mental plans that led to the curent state. When this happens in the large, a software project is almost certain to fail.<br />
<br />
But maybe that's just me. Do you think programming is not hard? Do you think it's hard for a different reason?Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com3tag:blogger.com,1999:blog-2759480248865232582.post-8059849112820320482011-09-30T10:29:00.001+10:002011-09-30T10:35:12.603+10:0032 Bit 64 Bit - All up in your BitnessHere's one for the logophiles. English usage nerds. I'm coming out as a bit of a language nerd officially, today, so consider yourself warned.<br />
<br />
In film they talk of footage. In transport, haulage. Then there are words like passage, patronage and of course cleavage. At school my friends and I would regularly put "-age" after words. "Foodage?" would mean "are you hungry?". "Skateage" was time spent skateboarding.<br />
<br />
So what is it when you want to refer to how many bits something is?<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-Vyc9mvw_KF4/ToUM2zO7fuI/AAAAAAAAAQI/dyAeX8ENh-k/s1600/alphabits.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://3.bp.blogspot.com/-Vyc9mvw_KF4/ToUM2zO7fuI/AAAAAAAAAQI/dyAeX8ENh-k/s1600/alphabits.jpg" /></a></div><br />
<br />
You know your latest laptop is 64 bits and your last one was 32 bits. You know about the 16 bit retro video games like Sonic the Hedgehog and maybe even the "8 bit era" of the Commodore 64. So what do call that ... bitness?<br />
<br />
I've heard it called bitness, and tweeted about it a while ago and got some interesting alternatives:<br />
<br />
<ul><li>bitness</li>
<li>bittage</li>
<li>bittitude</li>
<li>bitality</li>
<li>bitosity</li>
<li>bitch</li>
</ul><div>I guess the last one is a little challenging, linguistically. Maybe German?</div><div><br />
</div><div>Of course I had lots of replies to my tweet saying well you're talking about "word length" or "machine architecture" or other term specific to the usage. Well what if I'm talking about sound samples? "Is that a 16 bit sample or a 32 bit one?". Or colour space in digital imagery? Is that 24 bit colour? Ignoring bittitude is just like saying you can't call it footage, you have to call it film length.</div><div><br />
</div><div>We need to agree on a word that covers bitness and I think I'm coming down on the side of bittage.</div><div><br />
</div><div>Of course this is a question of crucial importance to the world (not - but I did warn you).</div><div><br />
</div><div>What do you think?<br />
<br />
image credit <i>jeffrey on</i><a href="http://www.mrbreakfast.com/">Mr Breakfast</a></div>Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com4tag:blogger.com,1999:blog-2759480248865232582.post-35592186474291546292011-08-24T12:04:00.000+10:002011-08-24T12:04:33.388+10:00Last Minute UsabilityUsability, like scalability and security cannot be added to a finished product any more than flavour can be added to a finished meal.<br />
<br />
<br />
<a href="http://www.flickr.com/photos/zebrafx/2697722496/" title="Delightfully Delicious by Shutter Ferret, on Flickr"><img "="" alt="Delightfully Delicious" height="500" src="http://farm4.static.flickr.com/3185/2697722496_4d0e4600f3.jpg" width="333" /></a><br />
delicious photo by <a href="http://www.flickr.com/photos/zebrafx/2697722496/">Shutter Ferret</a>Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com1tag:blogger.com,1999:blog-2759480248865232582.post-58326361378889613892011-04-19T17:07:00.001+10:002011-04-19T17:10:28.957+10:00This is NOT the 80:20 Rule You Are Looking For<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-8ePzK5WZnU4/Ta0vccZjCEI/AAAAAAAAANY/HFKSUGPUx8Q/s1600/shb-construction-fly-over_web.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-8ePzK5WZnU4/Ta0vccZjCEI/AAAAAAAAANY/HFKSUGPUx8Q/s1600/shb-construction-fly-over_web.jpg" /></a></div><br />
The 80:20 rule is based on the assumption that there is (often) an 80% (ish) subset of the realised value for a project that only costs 20% of the resources (e.g time) to complete. The rule, actually the <a href="http://en.wikipedia.org/wiki/Pareto_principle">Pareto Principle</a> popularised by <a href="http://www.scribd.com/doc/3664882/The-8020-Principle-The-Secret-to-Success-by-Achieving-More-with-Less">Richard Koch</a> and others, like all rules of thumb, can be applied incorrectly.<br />
<br />
It's not a license for doing things half-arsed.Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-35305699601593923622010-12-07T15:01:00.000+11:002010-12-07T15:01:53.173+11:00Guy Steele Disassembles 40 Year Old PunchcardJust a quick note to let all of you know who are not currently at the YOW! 2010 conference, some of the fun that you're missing out on.<br />
<br />
Firstly it must be said that this is a world-class conference. The calibre of speakers is amazing. Dave Thomas and his team have done an incredible job of drawing this talent to Australia for this meeting of minds. I'll be posting more about this stuff later, but for now, here's a teaser photo from one of my favourite sessions, Guy Steele's "<a href="http://yowconference.com.au/brisbane/events_tracks/event_details.html?eventId=2715">How to Think about Parallel Programming--Not!</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_74NHueaBr9E/TP2wuIh0BzI/AAAAAAAAAMc/7NPYkXxOKCs/s1600/IMG_0327.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="http://4.bp.blogspot.com/_74NHueaBr9E/TP2wuIh0BzI/AAAAAAAAAMc/7NPYkXxOKCs/s400/IMG_0327.JPG" width="400" /></a></div><br />
In this photo, Guy is disassembling his own 40 year old self-modifing code, starting with a punch card and an old manual (which he admitted to still owning). He demonstrates his deserved bare-metal hacker street cred. Then half-way through the talk he shifts gears into real parallel programming in <a href="http://en.wikipedia.org/wiki/Fortress_%28programming_language%29">Fortress</a>. I was quite exhausted after that one!Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-83742810943619589542010-08-24T10:51:00.000+10:002010-08-24T10:51:03.579+10:00Computer Science Is All About Windows 7 For Dummies<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_74NHueaBr9E/THMXaW2ROvI/AAAAAAAAAK8/8RsktJvXFtg/s1600/computer-science.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/_74NHueaBr9E/THMXaW2ROvI/AAAAAAAAAK8/8RsktJvXFtg/s320/computer-science.jpg" /></a></div>Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-34039845644448091412010-08-23T11:48:00.000+10:002010-08-23T11:48:01.195+10:00Next Android OS Codename: Apple Pie<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/_74NHueaBr9E/THHRODiIIEI/AAAAAAAAAK0/ogxO11AoFvc/s1600/apple-pie.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://4.bp.blogspot.com/_74NHueaBr9E/THHRODiIIEI/AAAAAAAAAK0/ogxO11AoFvc/s320/apple-pie.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">cc photo by http://www.flickr.com/photos/mattmendoza</td></tr>
</tbody></table><br />
OMG Google has to do this.<br />
<br />
With the Android OS versions getting code names like cupcake, éclair and froyo (which is, evidently, a word), the dessert namespace provides an opportunity too good to miss. Apple Pie. OM NOM NOM.<br />
<br />
Of course the logo should be a white stylised piece of apple pie with one bite out of it. Or perhaps a rainbow version?<br />
<br />
People, Google fanboys and Apple haters mostly, desperately want Android to DUHSHTROY iPhone in the market. Personally I don't think this is very likely. I know there are a lot of Android devices out now - more than iPhone I hear - but the fragmentation is really starting to happen. Just like <a href="http://en.wikipedia.org/wiki/MSX">MSX</a>.<br />
<br />
The code name of Apple Pie would trump the Eclipse Foundation's latest IDE version naming stunt, <a href="http://en.wikipedia.org/wiki/Helios">Helios</a>, Ancient Greek for <a href="http://en.wikipedia.org/wiki/Sun_Microsystems">Sun</a>, aka their competitor recently bought by Oracle who is now suing.. Google. Keeping up?Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com1tag:blogger.com,1999:blog-2759480248865232582.post-61116492086400586232010-08-20T15:06:00.001+10:002010-08-20T15:06:11.933+10:00Why Bookshops Always Put Computer Books With Business<div class='posterous_autopost'><p>It's near-universal. Especially for those bookshops with large self-help or mysticism and occult sections and no science section. Computer books are put (and often intermingled with) business books.</p> <p>Why?</p> <p>To me it's like always putting cycling with business. Or painting.</p> <p>Yes computers are used heavily in business, but they're used just as heavily in music or movies or writing.</p> <p>When I look for programming books, sometimes I'm interested in the topics that combine businesses (or the needs of an organisation) with programming - generally topics like how to translate the needs of project sponsors into deliverable systems. But way more often than that I'm interested in topics that concern the creation of software using specific techniques, paradigms, or languages and frameworks.</p> <p>I like programming. I would do it more on the weekends if I had time. I don't think it has anything in common with business but it seems that many non-technically minded people assume that the only reason someone would want to do programming is for business purposes.</p> <p>Well plenty of people do it for fun. Just like cycling or painting.</p> <p style="font-size: 10px;"> <a href="http://posterous.com">Posted via email</a> from <a href="http://chromosundrift.posterous.com/why-bookshops-always-put-computer-books-with">chris mountford</a> </p> </div>Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-20441566524603612322010-07-05T21:03:00.000+10:002010-07-05T21:03:19.945+10:00Apple: I Was Wrong, Here's Your $200 BackPreviously on Chris Mountford's blog...<br />
<br />
Genius: "Oh um ya that battery that split open like a stepped-on-banana.. that's expected behaviour"<br />
Me: "You're kidding me? Should I expecting all other Apple products to do this?<br />
<br />
<br />
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.Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-14885675186623921912010-06-28T21:30:00.000+10:002010-06-28T21:30:43.705+10:00Exploding Macbook Pro Battery = "Expected Behaviour"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.<br />
<br />
Apple's official position, according to the lips of two courteous Genii, is that exploding is <b>"expected behaviour". </b>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:<br />
<b> </b><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_74NHueaBr9E/TCh9qYOC7ZI/AAAAAAAAAKk/V_dxEBumdQU/s1600/explodo.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="246" src="http://2.bp.blogspot.com/_74NHueaBr9E/TCh9qYOC7ZI/AAAAAAAAAKk/V_dxEBumdQU/s400/explodo.JPG" width="400" /></a></div><br />
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.<br />
<br />
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: <a href="http://www.apple.com/batteries/">http://www.apple.com/batteries/</a> which keen observers will note contains nothing of Apple's expectation of explosions.<br />
<br />
Looking further the Apple <a href="http://www.apple.com/batteries/replacements.html">battery replacement page</a> says:<br />
<blockquote>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.</blockquote>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?<br />
<br />
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.<br />
<br />
So $199 later, I purchase a new battery which, I carefully confirmed, <i>would</i> be expected to explode in roughly 300 power cycles (which I assured the young Genius my existing battery had not experienced).<br />
<br />
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:<br />
<br />
<a href="http://www.appledefects.com/?cat=27">http://www.appledefects.com/?cat=27</a><br />
<a href="http://discussions.apple.com/thread.jspa?threadID=909217">http://discussions.apple.com/thread.jspa?threadID=909217</a><br />
<a href="http://www.tuaw.com/2006/12/25/battle-of-the-battery-bulge/">http://www.tuaw.com/2006/12/25/battle-of-the-battery-bulge/</a>Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com4tag:blogger.com,1999:blog-2759480248865232582.post-71436240003445740342010-03-16T16:23:00.003+11:002010-03-16T17:57:25.380+11:00Aussie Censorship ErrorAs a father of three young kids the thought of child porn disgusts me. <br />
<br />
If only an Internet filter imposed by the government would be effective against it. <br />
<br />
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.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_74NHueaBr9E/S58WZMxRhDI/AAAAAAAAAJA/XaIHrxWVtic/s1600-h/error.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="97" src="http://3.bp.blogspot.com/_74NHueaBr9E/S58WZMxRhDI/AAAAAAAAAJA/XaIHrxWVtic/s400/error.jpg" width="400" /></a></div><br />
<br />
The <a href="http://www.efa.org.au/category/censorship/mandatory-isp-filtering/">proposed censorship by senator Steven Conroy</a> 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).<br />
<br />
Finally any VPN will effectively go straight through the filter so anyone who wishes to can circumvent it using current technology.Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com1tag:blogger.com,1999:blog-2759480248865232582.post-82422602554940070902010-03-15T22:33:00.003+11:002010-03-15T22:59:02.669+11:00Titanium Reinforced SelfFor 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.<br /><br />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.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_74NHueaBr9E/S54eIFIsIwI/AAAAAAAAAH0/EhDAC6pXKKc/s1600-h/IMG_0713.JPG"><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" /></a><br /><br />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. <br /><br />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. <br /><br />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.<br /><br />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.Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com2tag:blogger.com,1999:blog-2759480248865232582.post-32552587679543157752010-03-09T14:12:00.003+11:002010-03-09T14:25:51.501+11:00More Cowbell in One Line of GroovySometimes you just need <a href="http://video.google.com/videosearch?q=more%20cowbell&oe=utf-8&rls=org.mozilla:en-GB:official&client=firefox-a&um=1&ie=UTF-8&sa=N&hl=en&tab=wv#">more cowbell</a>.<br /><br />It is for those times that I wrote this:<br /><br /><tt>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()'</tt><br /><br />I do often find myself needing more cowbell, such as when invoking a maven comannd which inevitably downloads the internet, like <span style="font-weight:bold;">mvn clean</span>. So get this puppy on your PATH and you can do this:<br /><br /><tt>mvn clean && cowbell</tt><br /><br />...for an audio cue that tells you the internet has been successfully downloaded with a modicum of funk.Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com6tag:blogger.com,1999:blog-2759480248865232582.post-51645313575716164092010-02-20T20:11:00.003+11:002010-02-20T20:19:50.061+11:00Ali G Joins Github TeamI was browsing a Github hosted project, <a href="http://github.com/mangos/mangos/network">Mangos</a> recently and attempted to check out the network graph visualisation of the clones of this open source World of Warcraft server.<br /><br />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:<br /><br /><blockquote>Sorry, this repository's graph is currently too logical awesome to display. We're working on optimizing it. Check back soon.</blockquote><br /><br />Which leaves one wondering just how much is the right amount of logical awesome. <br /><br />Clearly the only conclusion is that the Github team has been joined by a celebrity error message writer, Ali G:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_74NHueaBr9E/S3-o5h99EkI/AAAAAAAAAG8/jDFGE4YsZbA/s1600-h/alig_logical_awesome.png"><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" /></a><br /><br />Booyakasha!Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-56535369309233289782010-02-11T11:47:00.004+11:002010-02-11T12:44:56.434+11:00A Tale of Three Buzzes<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_74NHueaBr9E/S3NgvIySQ6I/AAAAAAAAAG0/PomsunslYds/s1600-h/Picture+3.png"><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" /></a><br />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).<br /><br />Yahoo Buzz has been out for at least a year on <a href="http://buzz.yahoo.com/">buzz.yahoo.com</a> and predicatably, Yahoo and their new overlords Microsoft are going <a href="http://money.cnn.com/2010/02/09/technology/google_buzz_yahoo_microsoft/">batshit insane</a> about this.<br /><br />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. <br /><br />And the drones at AT&T launched <a href="http://buzz.com/">buzz.com</a> about 6 months ago. Less said about that the better. In fact you can probably safely forget them right now.<br /><br />So now we'll all be looking forward to the shakedown. There are too many players.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_74NHueaBr9E/S3NXbRaBNQI/AAAAAAAAAGs/WX9SciPsiik/s1600-h/Picture+2.png"><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" /></a>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 <a href="http://tweetmeme.com/">Tweetmeme</a>. Can Yahoo/Microsoft get this traction? <br /><br />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.<br /><br />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.Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com2tag:blogger.com,1999:blog-2759480248865232582.post-34663310089000021892010-02-09T22:47:00.006+11:002010-02-09T23:15:27.338+11:00China Hackers Update: Arrests and DetailsIt 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.<br /><br />China Daily reports that <a href="http://www.chinadaily.com.cn/china/2010-02/08/content_9440667.htm">the biggest hacker training site has been shut down</a>. via <a href="http://www.readwriteweb.com/archives/chinese_black-hat_hackers_arrested.php?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+readwriteweb+%28ReadWriteWeb%29&utm_content=Google+Reader">RWW</a><br /><br /><blockquote>"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.<br /></blockquote>and<br /><br /><blockquote><span style="width: 630px;">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.</span></blockquote><br />So there you go Google - nothing to worry about. The "provincial public security department" got the baddies. Carry on.<br /><br />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 <a href="http://www.wired.com/threatlevel/2010/02/apt-hacks/">wired magazine</a>.<br /><br />The salient points of the wired article are:<br /><br /><ul><li> The hacks have compromised thousands of companies, not just 37 as previously reported.</li><li>Most of the compromises are currently still active and law enforcement has been contacting companies to let them know they have been compromised.</li><li>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")</li><li>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.</li><li>Existing security software (like antivirus software) is not able to detect this attack profile or the malware used to initiate it.</li><li>The full extent of data theft will never be known.</li><li>The goal of the attacks appears to be coroporate and national espionage.</li><li>The hackers have levelled up.</li><li>The trail goes dead in Taiwan where the data was siphoned to and China where the spear phishing attacks were initiated from.<br /></li></ul><br />Now it really feels like we're living in a Neal Stephenson novel.Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com0tag:blogger.com,1999:blog-2759480248865232582.post-69268152139583955322009-12-10T20:36:00.004+11:002009-12-10T22:57:51.992+11:00Build to Flip vs Organic GrowthIn 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.<br /><br />It's refreshing because the <a href="http://www.businessweek.com/magazine/content/06_33/b3997002.htm">business press is usually obsessed with the crazy valuations</a>. 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.<br /><br />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. <a href="http://blogs.atlassian.com/rebelutionary/archives/2006_09.html">Atlassian CEO Mike Cannon-Brookes</a> has ranted exactly this in the past.<br /><br />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.<br /><br />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.<br /><br />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".<br /><br />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 <a href="http://www.fastcompany.com/magazine/32/builttoflip.html">build to flip</a>?<br /><br />I think the real problem here is cultural. If kids these days aspire to be like <a href="http://en.wikipedia.org/wiki/Kevin_Rose">Kevin Rose, founder of Digg</a>, or want to build the next Facebook or Twitter or even <a href="http://www.mint.com/">Mint</a> (just bought by competitor <a href="http://quicken.intuit.com/">Quicken</a> 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.<br /><br />The parallels of build to flip with the <a href="http://onstartups.com/tabid/3339/bid/8608/Startup-Lessons-From-The-Underpants-Gnomes-PROFIT.aspx">the Underpants Gnomes</a> 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.Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com2tag:blogger.com,1999:blog-2759480248865232582.post-52947296296072799322009-11-17T11:28:00.003+11:002009-11-17T12:24:09.679+11:00Jason Fried on Less is MoreI'm a fan of <a href="http://37signals.com/svn/">Jason Fried</a>, the <a href="http://37signals.com/">37 Signals</a> 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 <a href="http://www.inc.com/magazine/20091101/the-way-i-work-jason-fried-of-37signals.html">INC</a>, 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.<br /><br />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. <br /><br />If he didn't like <span style="font-style:italic;">less is more</span> 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!<br /><br />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.<br /><br />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.<br /><br />Less [of one thing] is more [of another]. <br /><br />There is an unspoken contex shift in the middle.<br /><br />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!<br /><br />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. <br /><br />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.<br /><br />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. <br /><br />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.<br /><br />There are usually hidden tradeoffs in software design and the business of programming. The 80/20 rule (the <a href="http://en.wikipedia.org/wiki/Pareto_principle">Pareto Principle</a>) is essentially a variant of this where the see-saw becomes a lever and therefore provides (hold your nose) <span style="font-style:italic;">leverage</span>. <br /><br />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.<br /><br />I'd like to write more on Less is More. I think the irony is stopping me for now.Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com2tag:blogger.com,1999:blog-2759480248865232582.post-14207226408002994052009-10-06T22:32:00.004+11:002009-10-07T02:05:03.672+11:00Smart Programmers Who Don't Get PatternsI'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. <br /><br />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.<br /><br />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.<br /><br />Thanks to the work of many OO pioneers, but most famously the Gang of Four via their seminal book, <a href="http://en.wikipedia.org/wiki/Design_Patterns_%28book%29">Design Patterns</a>, the software world has adopted design patterns as a technique for storing and disseminating software design wisdom.<br /><br />But why?<br /><br />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. <br /><br />But they have missed the point.<br /><br />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.<br /><br />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.<br /><br />Now for some examples of seemingly intelligent and experienced software developers speaking out against design patterns.<br /><br />Some years ago <a href="http://www.paulgraham.com/icad.html">Paul Graham and others argued</a> that Design Patterns suggested a violation of the <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">DRY principle</a> 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.<br /><br />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.<br /><br />The point that different languages have different patterns, some more than others, is <a href="http://c2.com/cgi/wiki?AreDesignPatternsMissingLanguageFeatures">well documented</a>, 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, <a href="http://www.cincomsmalltalk.com/userblogs/ralph/blogView?entry=3335803396">pointing this out</a> did little to calm the hysteria on <a href="http://blog.plover.com/prog/johnson.html">an argument that design patterns formed a list of language features that should be implemented</a>.<br /><br />Zed Shaw, Ruby on Rails agitator and apparent chronic self-congratulator warns developers in <a href="http://www.youtube.com/watch?v=stDL3aOTYIU&feature=player_embedded#">his keynote</a> entitled "Why Keynotes Suck" which was (with what one must assume is deliberate irony) literally read off an irc channel:<br /><br />"Stop using patterns. No really, quit using patterns, they aren't helping. I have evidence on that by the way, which is later"<br /><br />I didn't catch the evidence but later he did say:<br /><br />"Adapter, Bridge and Connector are the same"<br /><br />And then<br /><br />"Patterns suck, use algorithms."<br /><br />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?<br /><br />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.<br /><br />A recent example is from <a href="http://blip.tv/file/2537613/">a video interview with Stuart Halloway</a> 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,<br /><br />"Languages that have macros don't really have design patterns". <br /><br />Perhaps because he thinks a design pattern is when:<br /><br />"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".<br /><br />I'm not an expert on functional languages with macros, but Peter Norvig is. Even this mighty Lisp and AI guru <a href="http://norvig.com/design-patterns/">identifies design patterns</a> 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.<br /><br />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 "<a href="http://www.google.com.au/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-GB%3Aofficial&hs=GTT&q=%22pattern+oriented%22&btnG=Search&meta=">pattern oriented</a> architecture" began to appear and patterns was something to put on the resume.<br /><br />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.Chris Mountfordhttp://www.blogger.com/profile/03560327085364406517noreply@blogger.com2