<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>Isotoma</title>
      <link>http://blog.isotoma.com/</link>
      <description></description>
      <language>en</language>
      <copyright>Copyright 2008</copyright>
      <lastBuildDate>Sat, 17 May 2008 07:10:58 +0000</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=3.2</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>Some thoughts on concurrency</title>
         <description><![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>
]]></description>
         <link>http://blog.isotoma.com/2008/05/some_thoughts_on_concurrency.html</link>
         <guid>http://blog.isotoma.com/2008/05/some_thoughts_on_concurrency.html</guid>
         <category>Software engineering</category>
         <pubDate>Sat, 17 May 2008 07:10:58 +0000</pubDate>
      </item>
            <item>
         <title>Big thanks to Rapidswitch</title>
         <description><![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>
]]></description>
         <link>http://blog.isotoma.com/2008/05/big_thanks_to_rapidswitch.html</link>
         <guid>http://blog.isotoma.com/2008/05/big_thanks_to_rapidswitch.html</guid>
         <category>System Engineering</category>
         <pubDate>Wed, 14 May 2008 09:52:36 +0000</pubDate>
      </item>
            <item>
         <title>Debian&apos;s OpenSSL Disaster</title>
         <description><![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>
]]></description>
         <link>http://blog.isotoma.com/2008/05/debians_openssl_disaster.html</link>
         <guid>http://blog.isotoma.com/2008/05/debians_openssl_disaster.html</guid>
         <category>System Engineering</category>
         <pubDate>Wed, 14 May 2008 07:38:54 +0000</pubDate>
      </item>
            <item>
         <title>Inflection Points</title>
         <description><![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>
]]></description>
         <link>http://blog.isotoma.com/2008/04/inflection_points_1.html</link>
         <guid>http://blog.isotoma.com/2008/04/inflection_points_1.html</guid>
         <category>Architecture</category>
         <pubDate>Sat, 26 Apr 2008 08:06:34 +0000</pubDate>
      </item>
            <item>
         <title>Best practices for speeding up your site</title>
         <description><![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>
]]></description>
         <link>http://blog.isotoma.com/2008/04/best_practices_for_speeding_up.html</link>
         <guid>http://blog.isotoma.com/2008/04/best_practices_for_speeding_up.html</guid>
         <category>Patterns</category>
         <pubDate>Wed, 16 Apr 2008 17:02:09 +0000</pubDate>
      </item>
            <item>
         <title>KSS and Firebug</title>
         <description><![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>]]></description>
         <link>http://blog.isotoma.com/2008/04/kss_and_firebug.html</link>
         <guid>http://blog.isotoma.com/2008/04/kss_and_firebug.html</guid>
         <category>Plone</category>
         <pubDate>Tue, 15 Apr 2008 17:40:36 +0000</pubDate>
      </item>
            <item>
         <title>Search vs. URL</title>
         <description><![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>]]></description>
         <link>http://blog.isotoma.com/2008/03/search_vs_url.html</link>
         <guid>http://blog.isotoma.com/2008/03/search_vs_url.html</guid>
         <category>Misc</category>
         <pubDate>Fri, 28 Mar 2008 18:32:17 +0000</pubDate>
      </item>
            <item>
         <title>Forkd: big news</title>
         <description><![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>
]]></description>
         <link>http://blog.isotoma.com/2008/03/forkd_big_news.html</link>
         <guid>http://blog.isotoma.com/2008/03/forkd_big_news.html</guid>
         <category>News</category>
         <pubDate>Mon, 10 Mar 2008 23:51:37 +0000</pubDate>
      </item>
            <item>
         <title>Could not read chunk delimiter</title>
         <description><![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>]]></description>
         <link>http://blog.isotoma.com/2008/03/could_not_read_chunk_delimiter.html</link>
         <guid>http://blog.isotoma.com/2008/03/could_not_read_chunk_delimiter.html</guid>
         <category>Misc</category>
         <pubDate>Sat, 08 Mar 2008 12:03:42 +0000</pubDate>
      </item>
            <item>
         <title>Favourite Firefox plugins</title>
         <description><![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>
]]></description>
         <link>http://blog.isotoma.com/2008/03/favourite_firefox_plugins.html</link>
         <guid>http://blog.isotoma.com/2008/03/favourite_firefox_plugins.html</guid>
         <category>Misc</category>
         <pubDate>Fri, 07 Mar 2008 17:02:32 +0000</pubDate>
      </item>
            <item>
         <title>IE8: steps in the right direction</title>
         <description><![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>
]]></description>
         <link>http://blog.isotoma.com/2008/03/ie8_steps_in_the_right_directi.html</link>
         <guid>http://blog.isotoma.com/2008/03/ie8_steps_in_the_right_directi.html</guid>
         <category>XHTML/CSS</category>
         <pubDate>Thu, 06 Mar 2008 23:08:18 +0000</pubDate>
      </item>
            <item>
         <title>Reflections of a Windows-Mac switcher</title>
         <description><![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>]]></description>
         <link>http://blog.isotoma.com/2008/03/reflections_of_a_windowsmac_sw.html</link>
         <guid>http://blog.isotoma.com/2008/03/reflections_of_a_windowsmac_sw.html</guid>
         <category>User experience</category>
         <pubDate>Mon, 03 Mar 2008 11:15:59 +0000</pubDate>
      </item>
            <item>
         <title>In praise of invisible text</title>
         <description><![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>
]]></description>
         <link>http://blog.isotoma.com/2008/03/in_praise_of_invisible_text.html</link>
         <guid>http://blog.isotoma.com/2008/03/in_praise_of_invisible_text.html</guid>
         <category>User experience</category>
         <pubDate>Mon, 03 Mar 2008 09:18:33 +0000</pubDate>
      </item>
            <item>
         <title>Start ups of the UK unite</title>
         <description><![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>
]]></description>
         <link>http://blog.isotoma.com/2008/02/start_ups_of_the_uk_unite.html</link>
         <guid>http://blog.isotoma.com/2008/02/start_ups_of_the_uk_unite.html</guid>
         <category>Web-two-point-oh</category>
         <pubDate>Tue, 19 Feb 2008 14:34:36 +0000</pubDate>
      </item>
            <item>
         <title>Sleevenotez and the Beeb</title>
         <description><![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>]]></description>
         <link>http://blog.isotoma.com/2008/02/sleevenotez_and_the_beeb.html</link>
         <guid>http://blog.isotoma.com/2008/02/sleevenotez_and_the_beeb.html</guid>
         <category></category>
         <pubDate>Tue, 05 Feb 2008 10:55:40 +0000</pubDate>
      </item>
      
   </channel>
</rss>
