<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Isotoma</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/" />
    <link rel="self" type="application/atom+xml" href="http://blog.isotoma.com/atom.xml" />
   <id>tag:blog.isotoma.com,2008://2</id>
    <link rel="service.post" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2" title="Isotoma" />
    <updated>2008-05-17T08:39:28Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.2</generator>
 
<entry>
    <title>Some thoughts on concurrency</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/05/some_thoughts_on_concurrency.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2079" title="Some thoughts on concurrency" />
    <id>tag:blog.isotoma.com,2008://2.2079</id>
    
    <published>2008-05-17T07:10:58Z</published>
    <updated>2008-05-17T08:39:28Z</updated>
    
    <summary>In an earlier post Over on the Twisted blog, Duncan McGreggor has asked us to expand a bit on where we think Twisted may be lacking in it&amp;#8217;s support for concurrency. I&amp;#8217;m afraid this has turned into a meandering essay,...</summary>
    <author>
        <name>Doug Winter</name>
        <uri>http://www.isotoma.com</uri>
    </author>
            <category term="Software engineering" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>In an <a href="http://blog.isotoma.com/2008/04/inflection_points_1.html">earlier post</a> Over on the Twisted blog, Duncan McGreggor <a href="http://labs.twistedmatrix.com/2008/05/twisted-in-news.html">has asked us</a> to expand a bit on where we think Twisted may be lacking in it&#8217;s support for concurrency.  I&#8217;m afraid this has turned into a meandering essay, since I needed to reference so much background.  It does come to the point eventually&#8230;</p>

<h2>An unsolved problem</h2>

<p>To many people it must seem as though &#8220;computers&#8221; are a solved problem. They seem to improve constantly, they do many remarkable things and the Internet, for example, is a wonder of the modern world.  Of course there are screw ups, especially in large IT projects, and these are generally blamed on incompetent officials and greedy consulting firms and so on. </p>

<p>Although undoubtedly officials are incompetent and consultants are greedy, these projects are often crippled by the failure of industry to recognise that some of the core problems of systems design are an unsolved problem.  Concurrency is one of the major areas where they fall down.  Building an IT system to service a single person is straightforward.  Rolling that same system out to service hundreds of thousands is not.</p>

<p>It may seem odd to people outside the world of software, but concurrency (&#8220;doing several things at once&#8221;) is <em>still</em> one of the hot topics in software architecture and language design.  Not only is it not a solved problem, there&#8217;s still a lot of disagreement on what the problem even <em>is</em>.</p>

<p>Here&#8217;s a typical scenario in  IT systems rollout.  Every experienced engineer will have been involved in this.  A project where it seemed to be going ok, the software was substantially complete and people were talking about live dates.  So the developers chuck it over the wall to the systems guys, so they can run some tests to work out how much hardware they&#8217;ll need.</p>

<p>And the answer comes back something like &#8220;we&#8217;re going to need one server per user&#8221; or &#8220;it falls over with four simultaneous users&#8221;.  And I can tell you, if you get <em>that far</em> and discover this, the best option is to flee.  Run for the hills and don&#8217;t look back.</p>

<h2>Two worlds</h2>

<p>There has always been a distinction between the worlds of academia and industry.  Academics frame problems in levels of theoretical purity, and then address them in the abstract.  Industry is there to solve immediate problems on the ground, using the tools that are available.</p>

<p>Academics have come up with a thousand ways to address concurrency, and a lot of these were dreamt up in the early days of computing.  All the things I&#8217;m going to talk about here were substantially understood in the eighties.  But these days it takes twenty years for something to make it from academia to something industry can use, and that time lag is increasing.</p>

<p>Industry only really cares about it&#8217;s tooling.  The fact that academics have dreamt up some magic language that does really cool stuff is of no interest if there isn&#8217;t an ecosystem big enough to use.  That ecosystem needs trained developers, books, training courses, compilers, interpreters, debuggers, profilers and of course huge systems libraries to support all the random crap every project needs (oh, it&#8217;s just like the last project except we need to write iCalendar files <em>and</em> access a remote MIDI music device).  It also needs actual physical &#8220;tin&#8221; on which to run the code, and the characteristics of the tin make a lot of difference.</p>

<p>Toy academic languages are <em>no use</em>, as far as most of industry is concerned, for solving their problems.  If you can&#8217;t go and get five hundred contractors with it on their CV, then you&#8217;re stuck.</p>

<h2>The multicore bombshell</h2>

<p>So, all industry has these days, really, is <em>C++</em> and <em>Java</em>.  <em>C++</em> is still very widely used, but <em>Java</em> is gaining ground rapidly, and one of the reasons for this is it&#8217;s support for concurrency.  I&#8217;ll quote <a href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html">Steve Yegge</a>:</p>

<blockquote>
  <p>But it&#8217;s interesting because C++ is obviously faster for, you know, the short-running [programs], but Java cheated very recently. With multicore! This is actually becoming a huge thorn in the side of all the C++ programmers, including my colleagues at Google, who&#8217;ve written vast amounts of C++ code that doesn&#8217;t take advantage of multicore. And so the extent to which the cores, you know, the processors become parallel, C++ is gonna fall behind.</p>
  
  <p>&#8230;</p>
  
  <p>But for now, Java programs are getting amazing throughput because they can parallelize and they can take advantage of it. They cheated! Right? But threads aside, the JVM has gotten really really fast, and at Google it&#8217;s now widely admitted on the Java side that Java&#8217;s just as fast as C++.</p>
</blockquote>

<p>His point here is vitally important.  The reason Java is gaining is not an abstract language reason, it&#8217;s because of a change in the architecture of computers.  Most new computers these days are multicore.  They have more than one CPU on the processor die.  Java has fundamental support for threading, which is one approach to concurrency, and so some programs can take advantage of the extra cores.  On a quad-core machine, with the right program, Java will run four times faster than C++.  A win, right?</p>

<p>Well here&#8217;s a comment from the master himself, <a href="http://www.informit.com/articles/article.aspx?p=1193856">Don Knuth</a>:</p>

<blockquote>
  <p>I might as well flame a bit about my personal unhappiness with the current trend toward multicore architecture. To me, it looks more or less like the hardware designers have run out of ideas, and that they’re trying to pass the blame for the future demise of Moore’s Law to the software writers by giving us machines that work faster only on a few key benchmarks! I won’t be surprised at all if the whole multithreading idea turns out to be a flop, worse than the “Itanium” approach that was supposed to be so terrific—until it turned out that the wished-for compilers were basically impossible to write.</p>
  
  <p>Let me put it this way: During the past 50 years, I’ve written well over a thousand programs, many of which have substantial size. I can’t think of even five of those programs that would have been enhanced noticeably by parallelism or multithreading. Surely, for example, multiple processors are no help to TeX….</p>
  
  <p>I know that important applications for parallelism exist—rendering graphics, breaking codes, scanning images, simulating physical and biological processes, etc. But all these applications require dedicated code and special-purpose techniques, which will need to be changed substantially every few years.
  (via <a href="http://tytso.livejournal.com/">Ted Tso</a>)</p>
</blockquote>

<p>Hardware designers are threatening to increase the numbers of cores massively.  Right now you get two, four maybe eight core systems.  But soon maybe hundreds of cores.  This is important.</p>

<h2>The problems with threading</h2>

<p>Until recently, if you&#8217;d said to pretty much any developer that concurrency was an unsolved problem, they&#8217;d look at you like you were insane.  Threading was the answer - everyone knew that.  It&#8217;s supported in all kernels in all major Operating Systems.  Any serious software used threads widely to handle all sorts of concurrency, and hey it was easy - Java, for example, provides primitives in the language itself to manage synchronisation and all the other stuff you need.</p>

<p>But then some people started realising that it wasn&#8217;t quite so good as it seemed.  Steve Yegge again:</p>

<blockquote>
  <p>I do know that I did write a half a million lines of Java code for this game, this multi-threaded game I wrote. And a lot of weird stuff would happen. You&#8217;d get NullPointerExceptions in situations where, you know, you thought you had gone through and done a more or less rigorous proof that it shouldn&#8217;t have happened, right?</p>
  
  <p>And so you throw in an &#8220;if null&#8221;, right? And I&#8217;ve got &#8220;if null&#8221;s all over. I&#8217;ve got error recovery threaded through this half-million line code base. It&#8217;s contributing to the half million lines, I tell ya. But it&#8217;s a very robust system.</p>
  
  <p>You can actually engineer these things, as long as you engineer them with the certain knowledge that you&#8217;re using threads wrong, and they&#8217;re going to bite you. And even if you&#8217;re using them right, the implementation probably got it wrong somewhere.</p>
  
  <p>It&#8217;s really scary, man. I don&#8217;t&#8230; I can&#8217;t talk about it anymore. I&#8217;ll start crying.</p>
</blockquote>

<p>This is a pretty typical experience of anyone who has coded something serious with threads.  Weird stuff happens.  You get deadlocks and breakage and just utterly confusing random <strong>stuff</strong>.</p>

<p>And you know, all those times your Windows system just goes weird, and stuff hangs and crashes and all sorts.  I&#8217;m willing to bet a good proportion of those are due to errors in threading.</p>

<p>In reality threads are <strong>hard</strong>.  It&#8217;s sort of accepted wisdom these days (at least amongst some of the community) that threads are actually <strong>too hard</strong>.  Too hard for most programmers anyhow.</p>

<h2>Python</h2>

<p>We&#8217;re Python coders, so Python is obviously of particular interest to us.  We also write concurrent systems.  Python&#8217;s creator (Guido van Rossem) took an approach to threading, which has become pretty standard in most modern &#8220;dynamic&#8221; languages.  Rather than ensure the whole Python core is &#8220;thread-safe&#8221; he introduced a Global Interpreter Lock.  This means that in practice when one thread is doing something it&#8217;s often impossible for the interpreter to context switch to other threads, because the whole interpreter is locked.</p>

<p>It certainly means threads in Python are massively less useful than they are in, say, Java.  For a lot of people this has doomed Python - &#8220;what no threads!?&#8221; they cry, and then move on. Which is a shame, because threads are not the only answer, and as I&#8217;ve said I don&#8217;t even think they are a good answer.</p>

<p>Enter Twisted.  Twisted is single-threaded, so it avoids all of the problems of threads.  Concurrency is handled cooperatively, with separate subsytems within your program yielding control, either voluntarily or when they would block (i.e. when they are waiting for input).</p>

<p>This model fits a large proportion of programming problems very effectively, and it&#8217;s much more efficient than threads.  So how does this handle multicore?  Pretty effectively right now.  We design our software in such a way that core parts can be run separately and scaled by adding more of them (&#8220;horizontal&#8221; scaling in the parlance).  Our soon-to-be-released CMS, Exotypes, works this way, using multiple processes to exploit multiple cores.</p>

<p>This is a really effective approach.  We can run say six processes, load balance between them and it takes great advantage of the hardware.  Because we&#8217;ve designed it to work this way, we can even scale across multiple physical computers, giving us a lot of potential scale.</p>

<p>But what of machines of the future?  Over a hundred cores, run a hundred processes?  Over a thousand?  At large numbers of cores the multi-process model breaks down too.  In fact I don&#8217;t think any commonly deployed OS will handle this sort of hardware well at all, except for specialised applications.  This is where I think Twisted falls down, through no fault of it&#8217;s own.  I just suspect, like Don Knuth, that the hardware environment of the future is one that&#8217;s going to be extremely challenging for us to work in.</p>

<h2>Two worlds, reprise</h2>

<p>Of course, these issues have been addressed in academia, and I think, to finally answer Duncan&#8217;s question, that the long term solution to concurrency has to be addressed as part of the language.  The only architecture that I think will handle it is the sort of thing represented in Erlang - lightweight processes that share no state.  </p>

<p>Erlang addresses the challenge of multicore computer fantastically well, but as a language for writing real programs it suffers some huge lacks.  I don&#8217;t think it&#8217;s Erlang that&#8217;s going to win, but it&#8217;s going to be a language with many of it&#8217;s features.</p>

<p>First, Erlang is purely functional, with no object-oriented structures.  Pretty much every coder in the world has been trained, and is familiar with, the OO paradigm.  For a language to gain traction it&#8217;s going to need to support this. This is quite compatible with Erlang&#8217;s concurrency model, and shouldn&#8217;t be too hard to support.</p>

<p>It also needs a decent library.  Right now, the Erlang library ecosystem is, well, sparse.</p>

<p>Finally it needs wide adoption.</p>

<p>So, gods of the machines, I want something that&#8217;s got OCaml&#8217;s functional OO, Erlang&#8217;s concurrency and distribution, Python&#8217;s syntax and Python&#8217;s standard library.    And I want you to bribe people to use it.</p>

<p>If you can do all this, not only will we be able to support multicore, but we might also, finally, be able to actually build a large IT system that actually works.</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Big thanks to Rapidswitch</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/05/big_thanks_to_rapidswitch.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2078" title="Big thanks to Rapidswitch" />
    <id>tag:blog.isotoma.com,2008://2.2078</id>
    
    <published>2008-05-14T09:52:36Z</published>
    <updated>2008-05-14T10:03:31Z</updated>
    
    <summary>Our server ISP is RapidSwitch. It&amp;#8217;s unfortunate, but most ISPs are pretty poor - there aren&amp;#8217;t enough good people to go around, margins are very tight and it&amp;#8217;s just the kind of work where it&amp;#8217;s hard to keep good people....</summary>
    <author>
        <name>Doug Winter</name>
        <uri>http://www.isotoma.com</uri>
    </author>
            <category term="System Engineering" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>Our server ISP is <a href="http://www.rapidswitch.com/">RapidSwitch</a>.  It&#8217;s unfortunate, but most ISPs are pretty poor - there aren&#8217;t enough good people to go around, margins are very tight and it&#8217;s just the kind of work where it&#8217;s hard to keep good people.  Last night RapidSwitch showed that at least not <em>all</em> ISPs are poor.</p>

<p>Because of the OpenSSL issues yesterday, we chose to reboot all of our servers last night, to ensure every service was using the new SSL code.  A new kernel image came down too yesterday, and a number of our machines had the updated kernel.</p>

<p>We rebooted a number of machines on one cluster simultaneously&#8230; and they didn&#8217;t come back.  We requested a KVM session, but in the meantime one of RapidSwitch&#8217;s engineers had noticed 4 of our machines were down simultaneously, so he went and took a look.  Proactivity!</p>

<p>He worked out what had happened, and raised a ticket for us, telling us that the new Debian kernel was incompatible with our Network Cards.  We asked him to manually boot the machines into the previous kernel, and they came back up without a hitch. Clue!</p>

<p>He then said RapidSwitch were aware of this issue and they were offering a free PCI network card to anyone who needed them.  Planning!</p>

<p>Frankly this is unheard of in my experience.  Massively well done guys - that&#8217;s what I call service.</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Debian&apos;s OpenSSL Disaster</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/05/debians_openssl_disaster.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2077" title="Debian's OpenSSL Disaster" />
    <id>tag:blog.isotoma.com,2008://2.2077</id>
    
    <published>2008-05-14T07:38:54Z</published>
    <updated>2008-05-14T09:39:10Z</updated>
    
    <summary>Many of you will know by now of the serious security problems revealed yesterday by Debian, the Linux distribution. We use Debian exclusively for our server platform, so we had to react very quickly to this issue, and make sure...</summary>
    <author>
        <name>Doug Winter</name>
        <uri>http://www.isotoma.com</uri>
    </author>
            <category term="System Engineering" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>Many of you will know by now of the serious security problems revealed yesterday by Debian, the Linux distribution.  We use Debian exclusively for our server platform, so we had to react very quickly to this issue, and make sure our systems were secure again.  I think we&#8217;ve made all of the necessary changes now to ensure we&#8217;re safe from this particular problem.</p>

<p>I have also made some attempt to get to the bottom of what actually went on, and I&#8217;ll record it here for posterity.  If any of the below is wrong, please let me know!</p>

<h2>What Happened</h2>

<p>The story, basically, is this.  In April 2006 bug <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=363516">#363516</a> was raised, suggesting that openssl wasn&#8217;t clean for valgrind.  Valgrind is a package that detects problems in C code, and is widely used to help ensure software is correct.  Valgrind reported some errors with openssl, and the reporter wanted to be able to use valgrind with openssl.</p>

<p>At that bug url a change is discussed to the openssl codebase.  The general feeling from the bug discussion is that making this change isn&#8217;t a good idea, but then a patch was applied on 4th May 2006.  There are two instances of the specific issue in the bug, one in <code>ssleay_rand_add</code> and one in <code>ssleay_rand_bytes</code>.</p>

<p>In the meantime, a <a href="http://marc.info/?l=openssl-dev&amp;m=114651085826293&amp;w=2">discussion took place</a> on the openssl-dev list.  This mentions the same two lines, and on the 1st May ulf@openssl.org says he is in favour of removing them.</p>

<p><a href="http://svn.debian.org/viewsvn/pkg-openssl/openssl/trunk/rand/md_rand.c?rev=141&amp;view=diff&amp;r1=141&amp;r2=140&amp;p1=openssl/trunk/rand/md_rand.c&amp;p2=/openssl/trunk/rand/md_rand.c">The patch</a> amends the two lines suggested.</p>

<p>The problem, as I understand it, was a misunderstanding by the Debian Developer who made the change.  The change to <code>ssleay_rand_bytes</code> was fine - this added some uninitialised memory into the entropy pool, which is fine.  But the software doesn&#8217;t rely on it for security, and removing it is fine.</p>

<p>But the other change, in <code>ssleay_rand_add</code>, is a complete disaster.  It alters the seeding for the random number generator in key generation, a serious flaw.</p>

<p>This reduces the keyspace to a few hundred thousand possible keys.  It&#8217;s possible to generate all these keys in a few hours, and brute force a machine that&#8217;s using public key authentication with a compromised key in a few minutes, potentially.  This is a security disaster of the first water, considering the number of organisations (such as ours) that rely on public key authentication for a lot of our inter-machine security.  This also affected key generation for self signed email, web certificates, private networks, anonymous proxy networks and all sorts of other things.  The cleaning up is going to take some time, and cost an awful lot.  Some people are going to be compromised by this, and a lot of machines may be broken into.</p>

<h2>Some background on how distributions work</h2>

<p>Debian has a vast number of packages under management.  They produce these packages by taking source packages from &#8220;upstream&#8221; (the people who maintain the software) and modifying it to fit the rules and goals of the distribution.</p>

<p>Some of these changes are for compatibility - for example, using standard file locations or configuration systems.  Some of them are mechanical changes to do with integration with the build process.  Quite a few changes are bug fixes. </p>

<p>It&#8217;s recommended that bug fixes be coordinated with upstream - send patches back to them, so everyone in the community can benefit from the changes.</p>

<h2>Whose Fault Was It</h2>

<p>After going through the above, it&#8217;s pretty clearly the DD (Debian Developer) in question&#8217;s fault.  Although he suggested making changes on the openssl-dev list, and got an affirmative from someone on the project, it was pretty clear in the response that this was &#8220;if this helps with debugging it&#8217;s a good idea&#8221; not &#8220;i&#8217;ve closely read the code in question, and I agree&#8221;.</p>

<p>The DD should have also submitted a patch back to the openssl guys.  They&#8217;d have spotted the error and screamed blue murder.  He was a bit lazy and thoughtless here, and I imagine right now he wishes he could crawl into a hole and die.</p>

<h2>What to do about it</h2>

<p>Debian are getting badly slammed for this but it is worth keeping some perspective.  We, and many others, use Debian because of it&#8217;s long history of excellent package quality.  This is a result both of their culture (which is aggressively perfectionist) and their selection criteria for developers, which weeds out many dodgy ones.  We are proud to use Debian, and will continue to do so.</p>

<p>DD&#8217;s are generally conscientious, knowledgeable and dedicated to their work.  I have no reason to believe this DD was any different. Even conscientious, knowledgeable and dedicated people make mistakes.  This is what process is for, to help mitigate human error.  I think there was clearly a lack of process.  </p>

<p>Two things would have really helped.  Code review internally to debian and code review by upstream.  I don&#8217;t think it&#8217;s unreasonable that for security critical packages Debian should require both for non-critical changes to these packages.  Even critical changes should be reviewed as soon as possible.</p>

<p>Internal code review is impractical for every package, since it requires a good understanding of the code in question, and would impose a huge workload - but for critical packages I think it&#8217;s a necessity.</p>

<p>Upstream review is potentially tricky too.  Some upstreams don&#8217;t have the time or inclination to participate.  There is also often a lot of friction between distributions and upstream, since they have very different goals.  This isn&#8217;t a problem that can be easily resolved - these groups really do have different goals and values, and sometimes unreconcilable differences arise.  But for the good of their eventual users they need to work together to help stop this sort of problem occurring.</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Inflection Points</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/04/inflection_points_1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2076" title="Inflection Points" />
    <id>tag:blog.isotoma.com,2008://2.2076</id>
    
    <published>2008-04-26T08:06:34Z</published>
    <updated>2008-04-26T11:40:55Z</updated>
    
    <summary>Some of you may know Tim Bray. He&amp;#8217;s been a major player in some important technologies of the present (XML) and the future (Atom). He also has a really good blog. He&amp;#8217;s posted a good summary of some of the...</summary>
    <author>
        <name>Doug Winter</name>
        <uri>http://www.isotoma.com</uri>
    </author>
            <category term="Architecture" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>Some of you may know <a href="http://en.wikipedia.org/wiki/Tim_Bray">Tim Bray</a>.  He&#8217;s been a major player in some important technologies of the present (XML) and the future (Atom).  He also has a really good blog.</p>

<p>He&#8217;s <a href="http://www.tbray.org/ongoing/When/200x/2008/04/24/Inflection">posted a good summary</a> of some of the big issues in software and systems architecture.  These are some of the points that occupy anyone involved in longer-term technology strategy, and it&#8217;s sobering to see them listed together like that.  These are very exciting times to be in technology - but it&#8217;s probably easier now than it has ever been to back the wrong horse.</p>

<p>A lot of these issues are ones that we struggle with here at Isotoma, and as Chief Software Architect it&#8217;s my job to try and anticipate some of these trends, for the benefit of our clients.  This seems like a good opportunity to respond to Tim, and to show how we&#8217;re thinking about technology strategy.</p>

<p>(Apologies if I lapse at times into gobbledegook.  Some of the things I&#8217;ll talk about are just plain technical.  I&#8217;ll try and link them appropriately, so at least there&#8217;s some context.)</p>

<h2>Programming Languages</h2>

<blockquote>
  <p>Up till not too damn long ago, for a big serious software project you could pick Java or .NET or, if you really liked pain, C++. Today you’d be nuts not to look seriously at PHP, Python, and Ruby. What’s the future mind-share of all these things? I have no idea, but that decision is being made collectively by the community right now.</p>
</blockquote>

<p>He&#8217;s absolutely right, but obviously we&#8217;ve done rather more than look seriously.  We&#8217;ve been a pretty much pure Python shop right from the outset.  We use some PHP, when it makes sense, but Python is our clear choice, and it&#8217;s one we&#8217;re more than happy with.  It&#8217;s a significant competitive advantage for us, in all sorts of ways.</p>

<p>Python has delivered for us in developer productivity, and on a larger scale it&#8217;s delivered in elegance - it scales very well as a developer language.  Also, perhaps unlike Ruby, it scales very well in terms of performance, so I&#8217;m comfortable building very large systems in Python.</p>

<p>As Tim says, the community is deciding right now what to choose.  There&#8217;s never quite an outright winner in language terms, but I&#8217;m comfortable having bet on Python, and it wouldn&#8217;t surprise me if, along with Javascript, it became one of the top languages of the next ten or fifteen  years.  The only caveat to this is below under &#8220;Processors&#8221;.</p>

<h2>Databases</h2>

<blockquote>
  <p>No, I don’t think relational databases are going away anytime soon. But I think that SQL’s brain-lock on the development community for the past couple of decades has been actively harmful, and I’m glad that it’s now OK to look at alternatives.</p>
  
  <p>Will the non-relational alternatives carve out a piece of the market? I suspect so, but that decision is being made by the community, right now.</p>
</blockquote>

<p>Brain-lock is right.  It&#8217;s been the case for twenty years that for every single IT project your architect would open his toolbox and would pull out an <a href="http://en.wikipedia.org/wiki/RDBMS">RDBMS</a>.</p>

<p>Relational Databases are still suited to a whole suite of applications and classes of problem.  When you have highly structured data and very tight performance criteria they&#8217;re going to be a good choice for a long time to come.  But for many of the problems they&#8217;ve been used to solve they are terminally ill-suited.</p>

<p>We&#8217;ve been using <a href="http://www.python.org/workshops/2000-01/proceedings/papers/fulton/zodb3.html">ZODB</a> as part of Zope since 2004 (and I used it myself for several years before that).  ZODB has some excellent characteristics for whole classes of problem that an RDBMS has problems with.  It&#8217;s a lot more flexible, and it&#8217;s hierarchical nature provides a natural fit for web projects.</p>

<p>More recently we&#8217;ve been making heavy use of <a href="http://www.oracle.com/technology/products/berkeley-db/xml/index.html">DB XML</a>, Oracle&#8217;s Open Source XML database.  This is a fantastic product, and it&#8217;s a much better model for most of the applications we build.  A good example, oddly, would be <a href="http://forkd.com">Forkd</a> which we built using a traditional RDBMS.  If we had the experience of DB XML then that we have now then there&#8217;s no question that we&#8217;d use it for Forkd.  Fitting recipes into a relational database is an exercise in ultimately pointless contortion.</p>

<p>I&#8217;m very confident XML databases are going to be <em>huge</em>.</p>

<h2>Network Programming</h2>

<blockquote>
  <p>CORBA is dead. DCOM is dead. WS-* is coughing its way down the slope to dusty death. REST, they say, is the way to go. Which I believe, actually. Still, there’s not much yet in tooling or best practices or received wisdom or blue-suit consultants or the other apparatus of a mainstream technology.</p>
  
  <p>So what are they going to be teaching the kids, a few years hence, the right way is to build an application across a network full of heterogeneous technology? That’s being worked out by the community, right now.</p>
</blockquote>

<p>The lack of tooling and blue-suit consultants (ignore <em>my</em> blue suit for the second) is, I think, a <em>good</em> thing.  REST is not a technology stack, it&#8217;s an architectural style.  It pares down the network programming model to fit the harsh realities of a stateless, highly concurrent, open system.  We&#8217;re big fans of REST, and it&#8217;s a natural fit for how we work.</p>

<p>It&#8217;s not the whole story though, and there are a whole bunch of recurring problems in RESTful interfaces that are awaiting smart people to solve them.  There&#8217;s some good work going on with <a href="http://bitworking.org/news/URI_Templates">URI Templates</a> and <a href="http://www.intertwingly.net/wiki/pie/PatchMotivatingExamples">PATCH</a>, and of course <a href="http://en.wikipedia.org/wiki/Atom_(standard)">Atom</a> that I think are part of the solution yet.</p>

<p>Some relatively common orchestrations are horribly contorted in REST too, and it wouldn&#8217;t surprise me if here, to handle specific cases of lock acquisition and release and so forth we see some tooling.</p>

<h2>Processors</h2>

<blockquote>
  <p>Moore’s law is still holding, but the processors get wider not faster. Now that the best and the brightest have spent a decade building and debugging threading frameworks in Java and .NET, it’s increasingly starting to look like threading is a bad idea; don’t go there. I’ve personally changed my formerly-pro-threading position on this 180º since joining Sun four years ago.</p>
  
  <p>We still haven’t figured out the right way for ordinary people to program many-core processors; check out the inconclusive results of my Wide Finder project last year. (By the way, I’ve now got an Internet-facing T2000 all of my own and will be re-launching Wide Finder as soon as I get some data staged on it; come one, come all).</p>
  
  <p>And I can’t even repeat my crack about the right answer being worked out right now, because I’m not actually sure that anyone has a grip on it just yet. But we’re sure enough at an inflection point.</p>
</blockquote>

<p>We&#8217;re a lot further down this particular inflection curve than most, I think.  We make heavy use of <a href="http://www.twistedmatrix.com">Twisted</a>, a single-threaded cooperatively multitasking network programming system that specifically addresses the threading problem.</p>

<p>I don&#8217;t think it&#8217;s the whole answer though, but nor is <a href ="http://en.wikipedia.org/wiki/Erlang_(programming_language)">Erlang</a>, which Tim championed in his <a href="http://www.tbray.org/ongoing/When/200x/2007/09/20/Wide-Finder">Wide Finder</a> project, with fascinating results.</p>

<p>Erlang has some marvellous attributes when it comes to large scale concurrent systems, and I&#8217;m very impressed with it.  But adopting Erlang throws too much away, I think, losing the large-scale structural advantages of the Object Oriented approach that is pretty much the default for software architecture today.</p>

<p>Perhaps something like <a href="http://www.stackless.com/">Stackless</a> is the longer term solution here.  An OO, message-passing, naturally distributed language using Python syntax and standard library but with some core functional changes (variables not being variable, for example) is the answer.</p>

<p>Or maybe even <a href="http://www.mozart-oz.org/">Mozart</a>, which solves a lot of these problems too.  It&#8217;s the current first-year MIT language [<strong>update</strong>: this is probably a lie, see comments], so expect to hear more of it in time.</p>

<p>Tim is right though, nobody really knows the answer here.  All we know is that it certainly isn&#8217;t traditional multi-threaded programming, a la Java or C++.</p>

<h2>Web Development</h2>

<blockquote>
  <p>Used to be, it was Java EE or Perl or ASP.NET. Now all of a sudden it’s PHP and then Rails and a bunch of other frameworks bubbling up over the horizon; not a month goes buy that I don’t see a bit of buzz over something that includes the term “Rails-like”.</p>
  
  <p>It seems obvious to me that pretty soon there’s going to be a Rails++ that combines the good ideas from RoR with some others that will be obvious once we see them.</p>
  
  <p>Also, that some of those “Rails-like” frameworks, even if they’re not a huge step forward, will get some real market share because they’ll have some combination of of minor advantages.</p>
  
  <p>Once again, I can’t say it’s being worked out right now, because for right now I see a pretty uniform picture of Rails’ market share advancing steadily. It won’t last.</p>
</blockquote>

<p>We use a couple of rails-like frameworks ourselves, Turbogears being the most obviously <a href="http://en.wikipedia.org/wiki/Model-view-controller">MVC</a>.  The big ideas in Rails, and similar frameworks, is the combination of MVC with an Object Relational layer.  Since, as I&#8217;ve said, I don&#8217;t think the Relational stuff is needed at all, there&#8217;s an obvious first place where Rails and friends should look.  Ditch the RDBMS.</p>

<p>Second, MVC maps pretty well to a lot of applications, and it&#8217;s a natural architectural style for a lot of people.  MVC isn&#8217;t the <em>only</em> architectural style though, and it&#8217;s not necessarily the best fit for some though.  The <a href="http://www.techcrunch.com/2008/04/23/amateur-hour-over-at-twitter/">well-documented</a> problems at Twitter, for example, I think just show a poor fit between MVC and Twitter&#8217;s fascinating (and well chosen) Jabber back-end.  I know for certain, I&#8217;d not have used anything Rails-like for that.</p>

<p>I think it&#8217;s likely that the notional &#8220;Rails++&#8221; will probably not be MVC, and nor will it have an Object Relational layer.  I think Rails, and it&#8217;s imitators, are just not suited long-term to the challenges of scale and distribution.  That said, they clearly work well for a whole host of small and medium-sized projects <em>right now</em>.</p>

<h2>Business Models</h2>

<blockquote>
  <p>Servers, they’re easy to understand. Blue-suited salesmen sell them to CIOs a few hundred thousand dollars’ worth at a time, they get loaded into data centers where they suck up too much power and HVAC.</p>
  
  <p>Well, unless you’re gonna do your storage and compute and load-balancing and so on out in the cloud. Are you? The CIOs and data-center guys are wrestling this problem to the ground right now.</p>
  
  <p>And as for software, used to be you shipped binaries on magnetic media and charged ’em a right-to-use license. Nope, nowadays it’s open-source and they download it for free and you charge them a support contract. Nope, that was last century; maybe the software’s all going to be out there in the cloud and you never download anything, just pay to use what’s there.</p>
  
  <p>Personally, I don’t think any of those models are actually going to go away. But which works best where? The market’s working that out, right now.</p>
</blockquote>

<p>Obviously we&#8217;re Open Source throughout, which takes us a long long way down this road already.  We&#8217;ve got one secret squirrel project that&#8217;s successfully deployed using a massive Amazon EC2 back-end too, but I can&#8217;t say more about it.</p>

<p>Lets just say the massive economic advantages of the cloud are so conclusive that this is an obvious bet.  Something like <a href="http://code.google.com/appengine/">Google&#8217;s AppEngine</a> is only a first step down this road, but it&#8217;s visionary and appropriate. And it&#8217;s in Python ;)</p>

<h2>Desktops</h2>

<blockquote>
  <p>As I wrote a couple of months ago: how long can the public and private sector IT management continue to go on ignoring the fact that in OS X and Ubuntu, there are not one but two alternatives to the Windows desktop that are more reliable, more secure, more efficient, and cheaper? More or less everybody now has a friend or relative that’s on Mac or Linux and is going to be wondering why their desktop can’t be that slick.</p>
  
  <p>What’s going to happen? I don’t know, but it’s going to be dramatic once we get to the tipping point, and I think we’re approaching it right now.</p>
</blockquote>

<p>We use Ubuntu throughout, on all our desktops and laptops.  Well, nearly.  The machine that runs Sage for accounting is Windows.  And our front-end guys need Windows or OSX to run PhotoShop and Flash.  But everything else?  Ubuntu works really well, and saves us an absolute fortune.</p>

<h2>Will It Always Be Like This?</h2>

<blockquote>
  <p>You know, just maybe. Our mastery of the IT technologies is still in its brawny youth, with lots of low-hanging fruit to be snatched and big advances to be made. And these days, with the advent of blogs and unconferences and all those new communication channels, our thought leaders are busy chattering at each other about all these problems all the time, 24/7/365. The gap between the leading edge and technology that’s actually deployed in the enterprise is as wide as it’s ever been and to me, that feels like a recipe for permanent disruption. Cowabunga!</p>
</blockquote>

<p>Our industry has the greatest community of practice that has existed, perhaps, in the history of mankind.  Every profession has it&#8217;s conferences and papers and journals, but only in our part of IT is it normal to share and discuss all of our work, all of the time, even to the extent of giving away the very code we write.</p>

<p>I can&#8217;t see an end to this cycle of innovation yet - it&#8217;s just too damed valuable to everyone concerned.  Cowabunga indeed :)  </p>
]]>
        

    </content>
</entry>
<entry>
    <title>Best practices for speeding up your site</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/04/best_practices_for_speeding_up.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2075" title="Best practices for speeding up your site" />
    <id>tag:blog.isotoma.com,2008://2.2075</id>
    
    <published>2008-04-16T17:02:09Z</published>
    <updated>2008-04-16T17:16:33Z</updated>
    
    <summary>Best Practices for Speeding Up Your Web Site &amp;#8212; part of an excellent series of articles on the Yahoo Developer Network. They mainly focus on the front end, as that is where you&amp;#8217;ll get most bang for your buck. They...</summary>
    <author>
        <name>Francois Jordaan</name>
        
    </author>
            <category term="Javascript" />
            <category term="Patterns" />
            <category term="User experience" />
            <category term="XHTML/CSS" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p><a href="http://developer.yahoo.com/performance/rules.html">Best Practices for Speeding Up Your Web Site</a> &#8212; part of an excellent series of articles on the Yahoo Developer Network. </p>

<p>They mainly focus on the front end, as that is where you&#8217;ll get most bang for your buck. They make frequent reference to <a href="http://developer.yahoo.com/yslow/">YSlow</a>, a Firebug extension that looks extremely useful. </p>

<p>The <a href="http://developer.yahoo.net/blog/archives/2008/03/yahoos_latest_p.html">presentation here</a> is also strongly recommended, as it makes succinct arguments for all the techniques. (<a href="http://www.slideshare.net/stoyan/high-performance-web-pages-20-new-best-practices?src=embed">View on Slideshare</a> to see it full-screen.)</p>

<p>Some things were familiar to me (and most are already standard practice for my colleagues), many weren&#8217;t (e.g. avoid @import for CSS), and some I know of but haven&#8217;t been convinced of before (e.g. CSS sprites). I was quite intrigued by <a href="http://www.google.com/images/nav_logo3.png">this example</a> of CSS sprites in use on Google. (When using CSS sprites, remember to consider their accessibility to screen readers, and don&#8217;t use if you want them to print.)</p>
]]>
        

    </content>
</entry>
<entry>
    <title>KSS and Firebug</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/04/kss_and_firebug.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2074" title="KSS and Firebug" />
    <id>tag:blog.isotoma.com,2008://2.2074</id>
    
    <published>2008-04-15T17:40:36Z</published>
    <updated>2008-04-15T17:51:00Z</updated>
    
    <summary>I&apos;m just playing with KSS for the first time properly today - a quick note for myself and anyone else out there who may get bitten by this one. If you are in the habit of using console.log() in your...</summary>
    <author>
        <name>Andy Theyers</name>
        <uri>http://www.isotoma.com</uri>
    </author>
            <category term="Plone" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>I'm just playing with <a href="http://plone.org/documentation/how-to/how-to-setup-and-use-kss-on-plone-3.0">KSS</a> for the first time properly today - a quick note for myself and anyone else out there who may get bitten by this one.  If you are in the habit of using <code>console.log()</code> in your jQuery (or MochiKit, or whatever). Somewhere in the internals of KSS console becomes a KSS object, and calls to console.log() cause Firefox to hang.  Just a warning :) If I track down what's going on I'll follow up on this post...</p>]]>
        
    </content>
</entry>
<entry>
    <title>Search vs. URL</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/03/search_vs_url.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2073" title="Search vs. URL" />
    <id>tag:blog.isotoma.com,2008://2.2073</id>
    
    <published>2008-03-28T18:32:17Z</published>
    <updated>2008-03-28T18:43:30Z</updated>
    
    <summary>Watching the TV last night I saw an advert for EMA (Education Maintenance Allowance) which instead of giving a URL suggested that the viewer &quot;search for EMA online&quot;. This is the first time I&apos;ve seen this type of advertising in...</summary>
    <author>
        <name>Andy Theyers</name>
        <uri>http://www.isotoma.com</uri>
    </author>
            <category term="Misc" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>Watching the TV last night I saw an advert for EMA (<a href="http://ema.direct.gov.uk/">Education Maintenance Allowance</a>) which instead of giving a URL suggested that the viewer "search for EMA online".  This is the first time I've seen this type of advertising in the UK, although strangely only last week the article about <a href="http://www.cabel.name/2008/03/japan-urls-are-totally-out.html">search terms taking over from URLs in Japan</a> over at cabel.name was doing the rounds.  Searching for EMA across Google (first both paid and natural), Yahoo! (first paid, second natural) and Live (first paid, third natural) seems like this works in this instance, but I can't help but fear the torrent of spam that will start to follow major ad campaigns that feature particular terms.</p>

<p>As Cabel says in his article this change seems inevitable for all the reasons that he lists, but it sure is going to make management of search placement a lot more complex over the next few years.</p>]]>
        
    </content>
</entry>
<entry>
    <title>Forkd: big news</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/03/forkd_big_news.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2068" title="Forkd: big news" />
    <id>tag:blog.isotoma.com,2008://2.2068</id>
    
    <published>2008-03-10T23:51:37Z</published>
    <updated>2008-03-12T11:04:30Z</updated>
    
    <summary>Firstly, we&amp;#8217;ve rolled out a wide range of new features on our recipe community site forkd.com and removed yet more &amp;#8220;coming soons&amp;#8221; from the site in the process: Activity panel (my favourite) RSS feeds Change message when changing a forked...</summary>
    <author>
        <name>Francois Jordaan</name>
        
    </author>
            <category term="News" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>Firstly, we&#8217;ve rolled out a wide range of new features on our <a href="http://forkd.com">recipe community site  forkd.com</a> and removed yet more &#8220;coming soons&#8221; from the site in the process: </p>

<ul><li><strong>Activity panel</strong> (my favourite)</li>
<li><strong>RSS feeds</strong></li>
<li><strong>Change message</strong> when changing a forked recipe</li>
<li><strong>Blog to Wordpress</strong></li>
<li><strong>People search</strong></li>
<li><strong>Tag brush</strong> &#8212; our humble attempt to evolve the act of tagging</li></ul>

<p>As usual, the <a href="http://blog.forkd.com/2008/03/here_we_go_again_1.html">full details are on the Forkd blog</a>.</p>

<p>But more importantly, I am happy to announce that after our 6-month invite-only beta, sorry feta period, <strong>we are opening registration on forkd.com!</strong> We&#8217;re confident that we have a strong enough feature set, and have squashed all really embarrassing bugs, that we&#8217;re ready to open it up to all comers. So if you&#8217;re not on Forkd yet, why not <a href="http://forkd.com/register">sign up</a> and give it a go?</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Could not read chunk delimiter</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/03/could_not_read_chunk_delimiter.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2067" title="Could not read chunk delimiter" />
    <id>tag:blog.isotoma.com,2008://2.2067</id>
    
    <published>2008-03-08T12:03:42Z</published>
    <updated>2008-03-08T12:11:23Z</updated>
    
    <summary>I nearly cried. I went to svn up in a local check out of one of the projects I&apos;m working on, knowing that I was a good few days behind and instead of getting the usual stream of files I...</summary>
    <author>
        <name>Andy Theyers</name>
        <uri>http://www.isotoma.com</uri>
    </author>
            <category term="Misc" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>I nearly cried.  I went to svn up in a local check out of one of the projects I'm working on, knowing that I was a good few days behind and instead of getting the usual stream of files I got an error message:</p>

<blockquote>Could not read chunk delimiter</blockquote>

<p>I logged on to the server and ran <code>svnadmin verify /path/to/repo</code> and got a different error message:</p>

<blockquote>Decompression of svndiff data failed</blockquote>

<p>Much googling later and I found <a href="http://www.szakmeister.net/blog/fsfsverify/">fsfsverify.py - a script that repairs broken fsfs-type svn repositories</a>. The author (jszakmeister) doesn't allow comments on the page of his blog that hosts the script, so this is a public thanks for really really saving my bacon!</p>]]>
        
    </content>
</entry>
<entry>
    <title>Favourite Firefox plugins</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/03/favourite_firefox_plugins.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2066" title="Favourite Firefox plugins" />
    <id>tag:blog.isotoma.com,2008://2.2066</id>
    
    <published>2008-03-07T17:02:32Z</published>
    <updated>2008-03-07T17:36:41Z</updated>
    
    <summary>It&amp;#8217;s worth choosing carefully which extensions you install, since too many of them will definitely slow down Firefox and use up memory. Here are the ones I rely on every day: Firebug. Simply the most indispensible tool for the web...</summary>
    <author>
        <name>Francois Jordaan</name>
        
    </author>
            <category term="Misc" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>It&#8217;s worth choosing carefully which extensions you install, since too many of them will definitely slow down Firefox and use up memory. Here are the ones I rely on every day:</p>

<p><strong><a href="http://www.getfirebug.com/">Firebug</a>.</strong> Simply the most indispensible tool for the web developer. One of those rare applications that you love more every time you use it.</p>

<p><strong><a href="http://fireftp.mozdev.org/">FireFTP</a>.</strong> Not only will I never need a standalone FTP application anymore, but this actually outperforms any I&#8217;ve ever used.</p>

<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/1122">Tab Mix Plus</a></strong>, mainly for the Session Manager. I typically have 3-4 FF windows open, one for each project or aspect of a project, and many tabs in each. It&#8217;s imperative that I retain this from one day to the next. Session Manager can reload the last session, or the one before that, or save any number of sessions to a particular name. </p>

<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/60">Web Developer toolbar</a>.</strong> Before Firebug, this would&#8217;ve been #1. A lot of its functionality is supplanted by Firebug, but it still has many useful tools and some handy keyboard shortcuts, e.g. Ctrl-Shift-S Toggle CSS, Ctrl-Shift-E Edit CSS and Ctrl-Shift-A Validate HTML. It&#8217;s also great for evaluating accessibility.</p>

<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/5194">Netvouz buttons</a>.</strong> This is my online bookmark manager. For why I use it instead of Del.icio.us, see my comment (the 5th one) on this <a href="http://www.profy.com/2007/10/22/netvouz/">review</a>. </p>

<p><strong><a href="http://pearlcrescent.com/products/pagesaver/">Pearl Crescent Page Saver Basic</a>.</strong> I need it for one simple reason only: making snapshots of web pages longer than the screen. The basic (free) version creates a PNG on the desktop; the pro version will copy the snapshot to the clipboard.</p>

<p><strong><a href="http://www.iosart.com/firefox/colorzilla/">ColorZilla</a>.</strong> It has a lot of functionality that I don&#8217;t use, but I find it the quickest way to read colour values off web pages. (I&#8217;d need Photoshop open otherwise.)</p>

<p>What are yours, and why?</p>
]]>
        

    </content>
</entry>
<entry>
    <title>IE8: steps in the right direction</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/03/ie8_steps_in_the_right_directi.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2065" title="IE8: steps in the right direction" />
    <id>tag:blog.isotoma.com,2008://2.2065</id>
    
    <published>2008-03-06T23:08:18Z</published>
    <updated>2008-03-07T17:39:16Z</updated>
    
    <summary>After the furious controversy and rationalisation unleashed by Microsoft&amp;#8217;s embrace of version targeting from IE8 onwards, we were thrilled by their u-turn on the decision yesterday. Instead of acting like IE7 unless instructed otherwise, &amp;#8220;IE8 will, by default, interpret web...</summary>
    <author>
        <name>Francois Jordaan</name>
        
    </author>
            <category term="XHTML/CSS" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>After the furious <a href="http://www.alistapart.com/articles/theyshootbrowsers ">controversy</a> and <a href="http://www.alistapart.com/articles/minorthreat">rationalisation</a> unleashed by Microsoft&#8217;s embrace of version targeting from IE8 onwards, we were thrilled by their <a href="http://blogs.msdn.com/ie/archive/2008/03/03/microsoft-s-interoperability-principles-and-ie8.aspx">u-turn on the decision yesterday</a>. Instead of acting like IE7 unless instructed otherwise, &#8220;IE8 will, by default, interpret web content in the most standards compliant way it can.&#8221; Big sigh of relief. </p>

<p>And today Microsoft released the first <a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/default.mspx">IE8 Beta</a>. Thanks to John Resig for his excellent <a href="http://ejohn.org/blog/javascript-in-internet-explorer-8/">review</a>, pointing out all the significant improvements as well as ommissions. As Resig points out, it&#8217;s primarily my JavaScript-coding colleagues who&#8217;ll see the greatest leaps forward, but I&#8217;m amazed and happy to see support for <a href="http://developer.mozilla.org/en/docs/ARIA:_Accessible_Rich_Internet_Applications">ARIA</a>, meaning we can finally improve the accessibility of Ajax-based web applications. And I love the Firebug-like integrated debugger &#8212; you can even use it when in IE7 mode!</p>

<p>In the review, Resig makes one comment that resonated with me: &#8220;I simultaneously feel both joy and anger in seeing these fixed. Happy that they&#8217;re being released and anger for the fact that I had to struggle through them and that they now consume some portion of my brain.&#8221; Joy and anger. That&#8217;s exactly what IE8 makes me feel. We&#8217;re made to feel grateful for the fixing of years-old bugs that on any normal software product wouldn&#8217;t have been tolerated for longer than a few months. </p>
]]>
        

    </content>
</entry>
<entry>
    <title>Reflections of a Windows-Mac switcher</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/03/reflections_of_a_windowsmac_sw.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2064" title="Reflections of a Windows-Mac switcher" />
    <id>tag:blog.isotoma.com,2008://2.2064</id>
    
    <published>2008-03-03T11:15:59Z</published>
    <updated>2008-03-03T15:15:47Z</updated>
    
    <summary>10 months ago, starting a new job and needing a new laptop, I had a choice of platforms. Since I work in user experience design, knowing multiple operating systems is valuable in keeping my frame of reference as broad as...</summary>
    <author>
        <name>Francois Jordaan</name>
        
    </author>
            <category term="User experience" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>10 months ago, starting a new job and needing a new laptop, I had a choice of platforms. Since I work in user experience design, knowing multiple operating systems is valuable in keeping my frame of reference as broad as possible. I haven't used Macs after 1999. I certainly preferred Win2000 and WinXP over Mac OS 7-9, but have become frustrated with Windows with increasing regularity. So I opted for a Mac (Powerbook 2.33 GHz Core 2 Duo with 2GB RAM).</p>

<p>Since then, I've kept a list of the pros and cons of OS X (Tiger) compared with WinXP. Naturally, there were many annoyances in the beginning, but I didn't want to blog about it until I've become settled on the new platform. I've not strictly switched either, since my home computer still runs WinXP, and I simply couldn't use OS X without also having WinXP on Parallels.</p>

<p>Short version: Took me about 3 months before I preferred working on the Mac, and am now likely to stick to the platform for work. Read on for my list of OS X annoyances, and likes.</p>]]>
        <![CDATA[<h4>OS X annoyances</h4>

<p>Many of these complaints are really the fault of particular applications, rather than OS X. But I blame OS X since they're all behaviours that should have been standardised at the OS level. (That, or Apple has been less successful at getting developers to follow standards than Microsoft.)</p>

<ul>
  <li><strong>Lack of "click through" to background windows.</strong> This is a fundamental difference between Windows and Mac and I admit there are strong arguments for both. There are certainly cases where click through can be annoying or dangerous, but even after 8 months it continues to annoy and slow me down. Plus, it's inconsistently implemented: e.g. the Finder clicks through for some operations (window buttons, drag). Some applications make it worse, e.g. the Firefox Back button menu which appears too easily, often forcing me to click 3 times before getting the desired result. The suggestion menus that appear below text fields have the same annoying effect. The latter does not happen in Safari, but dropdown menus still require an extra click to dismiss.</li>
  <li><strong>Modifier keys.</strong> I believe Apple screwed up by insisting for far too long the one-button mouse was easier to use than the 2-button mice common on PCs. The mouse may have been simpler, but it soon foisted upon Mac users a third modifier key, confusingly named Control, in addition to the other two modifiers known variously as Apple, Command, Alt, Option and various runes with even more nicknames. Nowadays Macs have a right-click, but users still have to remember more finger-stretching chords than PC users do. If you use a non-Apple keyboard (<a href="http://theboolean.blogspot.com/2006/08/apple-natural-keyboard.html">inevitable</a> if you, like me, prefer the "natural" layout), then you have the added problem of confusing key labelling and placement.</li>
  <li><strong>Cursor controls are application-specific rather than OS-level.</strong> The most frustrating is the inexplicable lack of support for the Home and End keys. But Cmd-Left/Right, Opt-Left/Right, and Cmd-Up/Down behave inconsistently between applications and is sometimes not supported at all.</li>
  <li><strong>Keyboard access still lags behind Windows.</strong> When a dialogue box comes up, you have no guarantee that you could Tab through the buttons or fields, or activate buttons with keyboard shortcuts. This is up to the application, and there are no keyboard cues (e.g. underlined letters). Lately you can turn on better keyboard access modes, but this is still unintuitive.</li>
  <li><strong>Application installation / uninstallation inconsistent.</strong> I think this is simplicity gone wrong. At first blush, the experience is wonderfully intuitive: just drag the application bundle icon to Applications, delete it to uninstall, and that's it. But not all apps follow this, e.g. some have their own installer, or just a folder rather than an application bundle - hence the need for utils like AppDelete, still flaky.</li>
  <li>Apple hardware is usually wonderful, but there is still the occasional style over function mistake: the <strong>Mighty Mouse</strong> can't click when you're holding the mouse in the air, or if you've rolled onto a cable.</li>
  <li><strong>Unnecessarily hard to resize windows.</strong> Can't believe it's still only the bottom-right corner. Again I blame a wrong-headed idea of "simplicity".</li>
  <li>More simplicity-gone-wrong: I don't agree with <strong>absence of OK/Cancel in dialog boxes</strong> (e.g. System Prefs). No way to Cancel except manually resetting the things you've changed, if you can remember what they were. Also inconsistent from other apps which <em>have</em> OK/Cancel.</li>
  <li>I've gradually made peace with most aspects of <strong>the Dock and app/doc switching</strong>, but some annoyances remain. In Windows, the ability to alt-tab between documents is a great timesaver. Only occasionally in tabbed apps did I have to use Ctrl-Tab too. On the Mac, I routinely need Cmd-Tab, Ctrl-Tab <em>and</em> Cmd-\ which really slows me down. Apple would like you to use Expose, but that doesn't use muscle memory (i.e. making the right selection without having to look/read).</li>
  <li><strong>Cmd-Tab is constantly thrown off by the mouse</strong> cursor happening to be over the icons</li>
  <li><strong>I see way too much of the Beachball.</strong> And the difference between the beachball and the wait cursor (which looks like a survivor from an old OS) is unclear to most users.</li>
  <li><strong>Confusing, overlapping concepts of Hide</strong> (Cmd-H), Minimise (amber button) and F11 (show desktop, which temporarily shoves all windows out of the way). Gradually getting used to this.</li>
  <li><strong>In the Finder, I still miss a tree view. </strong>Multicolumn browse is excellent, but still does not replace a folder tree + file list for some uses. For example, how do you drag things between folders without having lots of Finder windows open? I looked on the web for a utility that adds a tree view to the Finder, but found none.</li>
  <li><strong>Lacks a "temp" location</strong> -- most applications by default abuse the desktop, making it hard to keep clean.</li>
  <li><strong>Lacks an Irfanview-equivalent utility</strong> (fast, versatile image viewer with abundant keyboard shortcuts), either bundled or 3rd-party. The bundled Preview utility is woefully inadequate.</li>
  <li><strong>Spotlight</strong> is very powerful, but results can be unhelpful. It's hard to see the location of files in results listings, and you can't see a text extract around the matched term.</li>
  <li><strong>Some System Pref dialog boxes are as labyrinthine</strong> and confusing as Windows', e.g. Bluetooth.</li>
  <li>Click-drag selections break when the cursor exits the application window. OK, this is not OS X, but too many applications (Firefox, Thunderbird) have this problem. Could this not have been OS-level?</li>
  <li>The most pervasive problem is also the most minor and difficult to explain. Even on a high-spec dual-core Powerbook, the Mac just feels slightly soft/fuzzy compared with Windows. Windows routinely becomes maddeningly laggy, taking many seconds to respond to things that should be instant, which my Mac (so far) doesn't. But it's like there's a "micro-lag" for just about all operations on the Mac, making it feel like walking on a soft or slightly sticky surface. I'm not sure what causes this perception. It may even be a psychological illusion caused by the slightly fuzzy anti-aliased display, and the slightly greater travel distance of the Mighty Mouse button.</li>
</ul>

<h4>OS X likes</h4>

<p>Inevitably, I'm going to be a bit unfair and not mention <em>everything</em> that's good, for the pure reason that when things just work you don't notice them as much. For the record, the benefits are sufficient to make me prefer the platform over Windows.</p>

<ul>
  <li><strong>Menus at top of screen, not on windows.</strong> This is one thing Apple got right from the start, and Microsoft have stubbornly refused to concede.</li>
  <li>Good range of <strong>OS-level shortcut keys</strong>, well explained and configurable in the System Prefs.</li>
  <li>Excellent, <strong>OS-level screengrab</strong></li>
  <li><strong>Copying straight from PDFs</strong> into Photoshop</li>
  <li>Generally <strong>lag-free</strong>: most operating system operations are always fast and smooth</li>
  <li><strong>Things I like about the Dock:</strong><ul>
  <li>Starting apps in any order thanks to fixed Dock. Good for muscle memory. On Windows I always had to open apps in the same order have a predictable taskbar.</li>
  <li>good not to get overloaded by all installed apps</li>
  <li>good that you can drag stuff to Dock icons, unlike Windows (but I still miss Windows' right-click: Send To)</li>
  <li>good that you can overlay progress and other indicators on Dock icons</li></ul></li>
  <li><strong>Expose is great.</strong> The use of screen hotspots (e.g. corners) is also excellent.</li>
  <li><strong>Wireless just works.</strong> On Windows a plethora of crappy devices and utilities, which work one day and not the next.</li>
  <li><strong>Networking that usually "just works", without telling you that it works.</strong> E.g. when you plug in Ethernet cable, you're just on the network, that's it. No announcements. The downside is that you don't know what you did to make it work. And if things don't work, troubleshooting can be as difficult as on PC</li>
  <li><strong>Generally much less intrusive than Windows</strong>, with fewer confirm dialog boxes and things popping up to tell you things you don't need to know. The Security Apple ad is spot-on.</li>
  <li><strong>Things I like about the Finder:</strong><ul>
  <li>Nice instant View buttons on Folder windows (I wish Windows had this)</li>
  <li>Columns view excellent; very quick (but still needs a tree view)</li>
  <li>Keyboard shortcut for New Folder (wish Windows had this)</li></ul></li>
  <li><strong>Laptop hardware likes:</strong><ul>
  <li>excellent power management, suspend, etc</li>
  <li>Two-finger trackpad scrolling, all directions -- unequalled on other laptops</li></ul></li>
  <li><strong>Things crash somewhat less </strong>than Windows, but not <em>much </em>less</li>
  <li>The 3 colour buttons on Finder windows struck me as mystery meat at first, but it makes sense for an OS you use long-term. Good use of reveal on mouseover</li>
</ul>

<h4>Conclusion</h4>

<p>It took me almost 3 months before I got comfortable with the Mac, and didn't want to return to Windows. As I said above, I'd now probably stick with a Mac for work purposes. This is probably down to</p>
<ul>
<li> fewer (or less serious) annoyances than Windows</li>
<li> somewhat greater stability</li>
<li> generally better usability</li>
<li> performance (it handles everything I throw at it, though how it'd compare with a top-spec Windows machine I couldn't say)</li>
<li> excellent hardware</li>
<li> Unix terminal</li>
<li> Vista. Do not want.</li>
</ul>

<p>I'm sticking with Tiger, for the time being. There wasn't anything in the Leopard demos I've seen that made me want to upgrade.</p>
<p>For a more rigorous comparison of the two platforms, see <a href="http://www.xvsxp.com/index.php">xvsxp.com</a></p>
<p>Before anyone points it out, I know there is a 3rd option: Linux. I owe it a decent comparison as well, but well, switching operating systems while trying to get my work done isn't something I do for fun.</p>]]>
    </content>
</entry>
<entry>
    <title>In praise of invisible text</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/03/in_praise_of_invisible_text.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2063" title="In praise of invisible text" />
    <id>tag:blog.isotoma.com,2008://2.2063</id>
    
    <published>2008-03-03T09:18:33Z</published>
    <updated>2008-03-03T09:57:07Z</updated>
    
    <summary>As a website accessibility feature, invisible text has long been accepted as one of the most helpful things you can do. This is text that is invisible on screen, but read out in screen readers, using CSS like the off-left...</summary>
    <author>
        <name>Francois Jordaan</name>
        
    </author>
            <category term="User experience" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>As a website accessibility feature, <a href="http://www.webaim.org/techniques/css/invisiblecontent/">invisible text</a> has long been <a href="http://www.webcredible.co.uk/user-friendly-resources/web-accessibility/beyond-guidelines.shtml">accepted</a> as one of the most helpful things you can do. This is text that is invisible on screen, but read out in screen readers, using CSS like the <a href="http://css-discuss.incutio.com/?page=ScreenreaderVisibility">off-left technique</a>. So far, as in those articles, we&#8217;ve primarily used it to add skiplinks and invisible headings.</p>

<p>Yesterday, while peeking under the hood of the new <a href="http://www.bbc.co.uk">BBC homepage</a> (very impressive HTML/CSS), I noticed another very handy use of invisible text: <strong>replacing the oft-overused title attribute</strong>. Under the Radio section, a link that looks like &#8220;Listen Live&#8221; will actually be coded as <code>&lt;a href="/radio/aod/radio1.shtml" class="radiopop"&gt;Listen&lt;span class="hide"&gt; To Radio 1&lt;/span&gt; Live&lt;/a&gt;</code>. For a sighted user, the visual context makes the extra text superfluous, but for screen readers users, it&#8217;s indispensable.</p>

<p>This is akin to &#8220;Read more&#8221; links, for which we&#8217;d usually add the associated page title in a title attribute (still a <a href="http://juicystudio.com/article/using-title-attribute.php">popular recommendation</a>). But you <a href="http://www.rnib.org.uk/wacblog/articles/too-much-accessibility/too-much-accessibility-title-attributes/">can&#8217;t actually count on</a> all screen reader users hearing the title attribute. (The fault of assistive technologies, but nonetheless&#8230;)</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Start ups of the UK unite</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/02/start_ups_of_the_uk_unite.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2062" title="Start ups of the UK unite" />
    <id>tag:blog.isotoma.com,2008://2.2062</id>
    
    <published>2008-02-19T14:34:36Z</published>
    <updated>2008-02-19T14:41:42Z</updated>
    
    <summary>Mike Butcher over at TechCrunch UK has just posted about a map of start ups around the world. Nice idea. Who&amp;#8217;d have thought that being in York would provide such an advantage - you can see our logos! (At least...</summary>
    <author>
        <name>Andy Theyers</name>
        <uri>http://www.isotoma.com</uri>
    </author>
            <category term="Web-two-point-oh" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>Mike Butcher over at TechCrunch UK has just posted about <a href="http://uk.techcrunch.com/2008/02/19/putting-startups-on-a-map/">a map of start ups around the world</a>.  Nice idea.  Who&#8217;d have thought that being in York would provide such an advantage - <a href="http://www.google.co.uk/maps/ms?ie=UTF8&hl=en&msa=0&msid=100713943793128001568.000446640548e51dc79ad&ll=54.72462,-3.647461&spn=10.088177,16.567383&z=6">you can see our logos</a>! (At least until <a href="http://www.theotherblog.com/">Tom</a> gets in with <a href="http://www.burningahole.co.uk/">burning a hole</a>).</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Sleevenotez and the Beeb</title>
    <link rel="alternate" type="text/html" href="http://blog.isotoma.com/2008/02/sleevenotez_and_the_beeb.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://blog.isotoma.com/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=2060" title="Sleevenotez and the Beeb" />
    <id>tag:blog.isotoma.com,2008://2.2060</id>
    
    <published>2008-02-05T10:55:40Z</published>
    <updated>2008-02-05T11:24:18Z</updated>
    
    <summary><![CDATA[Rather a long time ago Tristan of BBC Audio R&amp;D announced public last.fm accounts for the 4 main BBC music stations. At the time I thought we should probably set up accounts on Sleevenotez for these stations so that people...]]></summary>
    <author>
        <name>Andy Theyers</name>
        <uri>http://www.isotoma.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://blog.isotoma.com/">
        <![CDATA[<p>Rather a long time ago Tristan of BBC Audio R&amp;D <a href="http://www.cookinrelaxin.com/2007/10/lastfm-feeds-for-bbc-radio.html">announced public last.fm accounts for the 4 main BBC music stations</a>.  At the time I thought we should probably set up accounts on <a href="http://www.sleevenotez.com/">Sleevenotez</a> for these stations so that people (us included, to be honest) could track what was being played on the radio.  Finally, finally, I've got my finger out and done it:</p>
<ul>
  <li>Radio1: username: bbcradio1, password: bbcradio1</li>
  <li>Radio2: username: bbcradio2, password: bbcradio2</li>
  <li>1 Extra: username: bbc1extra, password bbc1extra</li>
  <li>6 Music: username: bbc6music, password bbc6music</li>
</ul>

<p>Enjoy!</p>]]>
        
    </content>
</entry>

</feed> 

