<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Darren Hobbs</title>
	<atom:link href="http://darrenhobbs.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://darrenhobbs.com</link>
	<description>Shameless self promotion</description>
	<pubDate>Mon, 15 Mar 2010 14:41:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Dear Apple</title>
		<link>http://darrenhobbs.com/?p=561</link>
		<comments>http://darrenhobbs.com/?p=561#comments</comments>
		<pubDate>Mon, 15 Mar 2010 14:41:07 +0000</pubDate>
		<dc:creator>darren</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://darrenhobbs.com/?p=561</guid>
		<description><![CDATA[Dear Apple,
Although I love your products, as long as you continue to pursue your lawsuit against HTC, I shall no longer be buying any of them for the forseeable future.
Best regards,
Darren
]]></description>
			<content:encoded><![CDATA[<p>Dear Apple,</p>
<p>Although I love your products, as long as you continue to pursue your lawsuit against HTC, I shall no longer be buying any of them for the forseeable future.</p>
<p>Best regards,</p>
<p>Darren</p>
]]></content:encoded>
			<wfw:commentRss>http://darrenhobbs.com/?feed=rss2&amp;p=561</wfw:commentRss>
		</item>
		<item>
		<title>Javascript: 2010</title>
		<link>http://darrenhobbs.com/?p=554</link>
		<comments>http://darrenhobbs.com/?p=554#comments</comments>
		<pubDate>Wed, 23 Dec 2009 11:31:28 +0000</pubDate>
		<dc:creator>darren</dc:creator>
		
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://darrenhobbs.com/?p=554</guid>
		<description><![CDATA[
http://nodejs.org/ - Evented I/O for         V8 javascript
http://www.jaxer.org/ - Ajax server
http://narwhaljs.org/ - Cross-platform, multi-interpreter, general purpose JavaScript platform
http://commonjs.org/ - A group with a goal of building up the JavaScript ecosystem for web servers, desktop and command line apps and in the browser

The year we make contact with javascript [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://nodejs.org/">http://nodejs.org/</a> - Evented I/O for         <a href="http://code.google.com/p/v8/">V8 javascript</a></li>
<li><a href="http://www.jaxer.org/">http://www.jaxer.org/</a> - Ajax server</li>
<li><a href="http://narwhaljs.org/">http://narwhaljs.org/</a> - Cross-platform, multi-interpreter, general purpose JavaScript platform</li>
<li><a href="http://commonjs.org/">http://commonjs.org/</a> - A group with a goal of building up the JavaScript ecosystem for web servers, desktop and command line apps and in the browser</li>
</ul>
<p>The year we make contact with javascript as a platform in its own right?</p>
]]></content:encoded>
			<wfw:commentRss>http://darrenhobbs.com/?feed=rss2&amp;p=554</wfw:commentRss>
		</item>
		<item>
		<title>Attention deficit</title>
		<link>http://darrenhobbs.com/?p=550</link>
		<comments>http://darrenhobbs.com/?p=550#comments</comments>
		<pubDate>Wed, 23 Dec 2009 11:15:39 +0000</pubDate>
		<dc:creator>darren</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://darrenhobbs.com/?p=550</guid>
		<description><![CDATA[Twitter has totally clobbered my ability to express any thought that requires more than 140 characters. Must get back into the blogging habi
]]></description>
			<content:encoded><![CDATA[<p>Twitter has totally clobbered my ability to express any thought that requires more than 140 characters. Must get back into the blogging habi</p>
]]></content:encoded>
			<wfw:commentRss>http://darrenhobbs.com/?feed=rss2&amp;p=550</wfw:commentRss>
		</item>
		<item>
		<title>Road safety and an apology</title>
		<link>http://darrenhobbs.com/?p=546</link>
		<comments>http://darrenhobbs.com/?p=546#comments</comments>
		<pubDate>Wed, 27 May 2009 18:22:47 +0000</pubDate>
		<dc:creator>darren</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[driving]]></category>

		<category><![CDATA[motorcycling]]></category>

		<category><![CDATA[safety]]></category>

		<guid isPermaLink="false">http://darrenhobbs.com/?p=546</guid>
		<description><![CDATA[To the person I overtook and had to squeeze in front of as the overtaking lane merged into the left hand lane going up that hill who was themselves held up by the queue of traffic that I was overtaking, sorry. I flashed my hazard lights at you in apology once I was safely in [...]]]></description>
			<content:encoded><![CDATA[<p>To the person I overtook and had to squeeze in front of as the overtaking lane merged into the left hand lane going up that hill who was themselves held up by the queue of traffic that I was overtaking, sorry. I flashed my hazard lights at you in apology once I was safely in front of you. Hopefully you interpreted that gesture correctly. Now, does my lack of judgement make it okay for you to accelerate into my path and actively try to block my return to the line of traffic? In what way did your actions contribute to the safe and swift progress of all concerned? Would you have preferred it if I&#8217;d not seen you (and then hit my horn long and hard I admit) and just ploughed into your right hand side? My car would have been a mess, but yours would have gone into the ditch at 60 miles an hour.</p>
<p>I&#8217;ve just spent a week motorcycling in France and I&#8217;m left with this impression: French driving in general is significantly better than British driving. Many French people ride scooters as teenagers and it shows in their friendly and considerate attitude towards their two-wheeled friends and road safety in general. We British drivers sometimes act like we own the road and all other road users are an inconvenient obstacle. We also appear to believe ourselves invulnerable and infallible. Personally I think learning to ride a moped or motorcycle before learning to drive a car should be compulsory.</p>
]]></content:encoded>
			<wfw:commentRss>http://darrenhobbs.com/?feed=rss2&amp;p=546</wfw:commentRss>
		</item>
		<item>
		<title>Dammit, Wordpress</title>
		<link>http://darrenhobbs.com/?p=544</link>
		<comments>http://darrenhobbs.com/?p=544#comments</comments>
		<pubDate>Sun, 22 Feb 2009 12:07:20 +0000</pubDate>
		<dc:creator>darren</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://darrenhobbs.com/?p=544</guid>
		<description><![CDATA[Few things enrage me more than wrestling with blog software. All I want to do is fix the archive links so that outside references to popular posts imported from movable type still work. Messing about with mod-rewrite, random plugins and generally wasting my morning are not part of that agenda. All it needs is one [...]]]></description>
			<content:encoded><![CDATA[<p>Few things enrage me more than wrestling with blog software. All I want to do is fix the archive links so that outside references to popular posts imported from movable type still work. Messing about with mod-rewrite, random plugins and generally wasting my morning are not part of that agenda. All it needs is one extra field that I can manually type my own permalink into that would map to a specific post. I don&#8217;t NEED an algorithmic solution here, that&#8217;s the beauty of URLs. They&#8217;re just text! If only this blasted software would get out of the way and do the simplest thing that could possibly work.</p>
]]></content:encoded>
			<wfw:commentRss>http://darrenhobbs.com/?feed=rss2&amp;p=544</wfw:commentRss>
		</item>
		<item>
		<title>Piano</title>
		<link>http://darrenhobbs.com/?p=534</link>
		<comments>http://darrenhobbs.com/?p=534#comments</comments>
		<pubDate>Sun, 11 Jan 2009 21:23:17 +0000</pubDate>
		<dc:creator>darren</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[music]]></category>

		<category><![CDATA[piano]]></category>

		<guid isPermaLink="false">http://darrenhobbs.com/?p=534</guid>
		<description><![CDATA[This year, for some reason (*cough* midlife crisis) I&#8217;ve been motivated to do some things I&#8217;ve thought about in the past but allowed myself to be talked out of (by myself or others). So I&#8217;m learning the piano. I&#8217;ve played a few instruments as a child, with a timeline that basically went like this: Start [...]]]></description>
			<content:encoded><![CDATA[<p>This year, for some reason (*cough* midlife crisis) I&#8217;ve been motivated to do some things I&#8217;ve thought about in the past but allowed myself to be talked out of (by myself or others). So I&#8217;m learning the piano. I&#8217;ve played a few instruments as a child, with a timeline that basically went like this: Start having lessons, breeze through for a few months, right up to the point where regular practicing was required to make progress, lose interest and stop. Somewhat counterintuitively, I could improve further than average initially with little practice, so would hit a wall when I stopped improving as I had become used to making easy progress.</p>
<p>Coming into a new instrument after more than a few years, and having mostly lost any music reading ability I may have had, I&#8217;ve been struck by how regular music actually is. There are patterns everywhere and things that I struggled to understand as a young&#8217;un make perfect sense to me now. For example, scales:</p>
<p>The easiest scale to play on a piano is C-Major. You start at the white key to the left of the two black keys (that&#8217;s C) and press each white key (whole notes, eg C,D,E,F etc.) until you get to the next one that looks the same. Other scales however involve pressing black keys (the sharps and flats, eg C♯, E♭) and this was one of the things I found confusing whenever I considered it before. But there is a very simple pattern for all major scales, and it goes like this: 0-2-2-1-2-2-2-1. This means you press the first two keys two semitones apart after the first note (0), then the next semitone, followed by three more keys each two semitones apart, followed by a single semitone interval, which puts you on your starting note one octave higher. This applies to all major scales, regardless of which note you start on.</p>
<p>What&#8217;s a semitone? Its the difference between each adjacent key on the keyboard irrespective of colour. Notice how most white keys have a black between them but some don&#8217;t? That&#8217;s why the C-Major scale is only on the white keys. It happens that just when you need to go only one semitone higher, you&#8217;re at two white keys next to each other with no black key in the middle. Start at a different spot however and sometimes you&#8217;ll have to hit a black key in order to maintain the above sequence (eg. if you find yourself needing to go one semitone higher and there is a black key to the right, or two semitones higher when there is no black key between the key you&#8217;re on and the next white key along.)</p>
<p>So there you go. Music is maths.</p>
]]></content:encoded>
			<wfw:commentRss>http://darrenhobbs.com/?feed=rss2&amp;p=534</wfw:commentRss>
		</item>
		<item>
		<title>The many dimensions of time in software</title>
		<link>http://darrenhobbs.com/?p=528</link>
		<comments>http://darrenhobbs.com/?p=528#comments</comments>
		<pubDate>Mon, 10 Nov 2008 17:49:21 +0000</pubDate>
		<dc:creator>darren</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://darrenhobbs.com/?p=528</guid>
		<description><![CDATA[Here&#8217;s a modelling scenario that crops up on many occasions in software systems.
Today is wednesday. The friendly neighbourhood HR person is updating the HR system. She needs to record the following information.
Last thursday, Bob from Treasury received a pay rise, commencing next friday.
It&#8217;s now monday almost 2 weeks later, the business day after next friday. [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a modelling scenario that crops up on many occasions in software systems.</p>
<p>Today is wednesday. The friendly neighbourhood HR person is updating the HR system. She needs to record the following information.</p>
<p>Last thursday, Bob from Treasury received a pay rise, commencing next friday.</p>
<p>It&#8217;s now monday almost 2 weeks later, the business day after next friday. Friendly neighbourhood HR person is told of a mistake with Bob&#8217;s pay rise. She needs to record the following information.</p>
<p>The pay rise recorded for Bob 2 wednesdays ago that he received 3 thursdays ago that commenced last friday was wrong. It should have been backdated to the beginning of the month, 5 fridays ago, not last friday.</p>
<p>Developers and their software can get in an awful mess if sufficient thought is not given to the many dimensions of time. In this example a robust system would have recorded the following:</p>
<ul>
<li>The time the initial entry was made by FNHRPerson.</li>
<li>The time the pay rise was given to Bob.</li>
<li>The time the pay rise took economic effect.</li>
<li>The time the entry was modified.</li>
<li>The new time the pay rise took economic effect.</li>
</ul>
<p>It might also need to answer questions like, &#8216;when does Bob&#8217;s pay rise take effect?&#8217; and &#8216;as of the day before yesterday, when did you think Bob&#8217;s pay rise took effect?&#8217;.</p>
<p>There&#8217;s a whole other side to this story with respect to calculating how much money had changed hands and the correction required in light of the new date data. But that&#8217;s another dimension altogether.</p>
]]></content:encoded>
			<wfw:commentRss>http://darrenhobbs.com/?feed=rss2&amp;p=528</wfw:commentRss>
		</item>
		<item>
		<title>Asynchronous Synchrony</title>
		<link>http://darrenhobbs.com/?p=524</link>
		<comments>http://darrenhobbs.com/?p=524#comments</comments>
		<pubDate>Sun, 28 Sep 2008 13:29:29 +0000</pubDate>
		<dc:creator>darren</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://darrenhobbs.com/?p=524</guid>
		<description><![CDATA[Or, when is performing request-response communication over an asynchronous channel a good idea? When is it not?
If system A needs to ask system B a question and get some data as a response it could do so in a variety of ways, some awful, others less so.

Take a periodic database extract, transform and load
Query the [...]]]></description>
			<content:encoded><![CDATA[<p>Or, when is performing request-response communication over an asynchronous channel a good idea? When is it not?</p>
<p>If system A needs to ask system B a question and get some data as a response it could do so in a variety of ways, some awful, others less so.</p>
<ul>
<li>Take a periodic database extract, transform and load</li>
<li>Query the other system&#8217;s database on the fly</li>
<li>Use RMI / Corba binary interop</li>
<li>Send a message and wait for a reply</li>
<li>Get some XML from a URL via HTTP</li>
</ul>
<p>This list is not exhaustive, but represents a reasonable spread of mechanisms. Lets narrow it down to the two least awful.</p>
<p>First, any integration involving a database is right out. Coupling application databases together is extremely awful. Binary integration is bad for the same reason. These integration mechanisms are fragile and make the job of releasing both applications much harder, as well as making it hard to know if a change has broken the integration.</p>
<p>Moving on to the two remaining choices. Using messaging can work well if the requesting system can tolerate a large variation in latency and/or you need to scale by having multiple processes sending and receiving the messages. It is also very handy if you need to cope with one of the systems failing periodically as the messaging infrastructure can hold onto the messages when the systems are unavailable. The request-response semantics can be achieved by passing a correlation id around to track conversational state. The implementation is more complicated because you don&#8217;t really want the requestor sitting blocked waiting for a response that could take an unbounded amount of time to return (eg. if the responder is busy or down).</p>
<p>If the complexity of a message based approach is not justified then a simple web service (that is, XML and HTTP GET requests, no SOAP or other pointless nonsense) can work very well. As an added benefit, if some thought is put into how the URLs are designed it is a relatively simple matter to insert an HTTP proxy cache (such as <a href="http://www.squid-cache.org/">Squid</a>) into the flow. Sensible use of cache directives in the HTTP headers can allow even moderately fast changing data to be cached effectively without going stale. All without having to complexify the code that returns the XML.</p>
]]></content:encoded>
			<wfw:commentRss>http://darrenhobbs.com/?feed=rss2&amp;p=524</wfw:commentRss>
		</item>
		<item>
		<title>JDom, XPath and the saga of the invisible namespace</title>
		<link>http://darrenhobbs.com/?p=518</link>
		<comments>http://darrenhobbs.com/?p=518#comments</comments>
		<pubDate>Mon, 15 Sep 2008 14:14:36 +0000</pubDate>
		<dc:creator>darren</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[xml]]></category>

		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://darrenhobbs.com/?p=518</guid>
		<description><![CDATA[JDOM&#8217;s XPath implementation has (in my opinion)  big glaring bug with respect to its handling of the default namespace. That&#8217;s a namespace that looks a bit like this in the XML:
&#60;?xml version="1.0" encoding="utf-8"?&#62;
&#60;myRootElement xmlns="http://darrenhobbs.com/some/namespace/2008/10/15"
               xmlns:foo="http://darrenhobbs.com/some/foo/namespace"&#62;
 &#60;myChildElement&#62;
  ... some stuff ...
 [...]]]></description>
			<content:encoded><![CDATA[<p>JDOM&#8217;s XPath implementation has (in my opinion)  big glaring bug with respect to its handling of the default namespace. That&#8217;s a namespace that looks a bit like this in the XML:</p>
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;myRootElement xmlns="http://darrenhobbs.com/some/namespace/2008/10/15"
               xmlns:foo="http://darrenhobbs.com/some/foo/namespace"&gt;
 &lt;myChildElement&gt;
  ... some stuff ...
 &lt;/myChildElement&gt;
 &lt;foo:aFooElement&gt;
  ... some foo stuff ...
 &lt;/foo:aFooElement&gt;
&lt;/myRootElement&gt;</pre>
<p>Note the &#8216;xmlns=&#8230;&#8217;, denoting the default namespace. As opposed to &#8216;xmlns:foo=&#8217; which denotes the &#8216;foo&#8217; namespace.</p>
<p>Let&#8217;s say I wanted to run an XPath query for: &#8216;//myChildElement&#8217;:</p>
<pre>XPath xPath = XPath.newInstance("//myChildElement");
xPath.addNamespace(Namespace.getNamespace("http://darrenhobbs.com/some/namespace/2008/10/15"));
List nodes = xPath.selectNodes(aDocument);</pre>
<p>This will never work. XPath does not play nicely with default namespaces. The solution is to register the same namespace URI against a made-up prefix and change the XPath like so:</p>
<pre>XPath xPath = XPath.newInstance("//dh:myChildElement");
xPath.addNamespace("dh", "http://darrenhobbs.com/some/namespace/2008/10/15");</pre>
<p>The query should then work.  This is <a href="http://weblogs.asp.net/wallen/archive/2003/04/02/4725.aspx">not a new problem</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://darrenhobbs.com/?feed=rss2&amp;p=518</wfw:commentRss>
		</item>
		<item>
		<title>Chrome / V8 Javascript performance</title>
		<link>http://darrenhobbs.com/?p=516</link>
		<comments>http://darrenhobbs.com/?p=516#comments</comments>
		<pubDate>Tue, 02 Sep 2008 20:56:35 +0000</pubDate>
		<dc:creator>darren</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://darrenhobbs.com/?p=516</guid>
		<description><![CDATA[According to http://code.google.com/apis/v8/run.html Chrome&#8217;s javascript engine is 10 times faster than Firefox 3.0. 1152 (Chrome) vs 110 (Firefox). Although they both take about 8 seconds to run on my machine. This is the danger of benchmarks. You can optimise for any benchmark but the real trick is in choosing which benchmarks to optimise for. And you ignore [...]]]></description>
			<content:encoded><![CDATA[<p>According to <a href="http://code.google.com/apis/v8/run.html">http://code.google.com/apis/v8/run.html</a> Chrome&#8217;s javascript engine is 10 times faster than Firefox 3.0. 1152 (Chrome) vs 110 (Firefox). Although they both take about 8 seconds to run on my machine. This is the danger of benchmarks. You can optimise for any benchmark but the real trick is in choosing which benchmarks to optimise for. And you ignore &#8216;user time&#8217; at your peril. As a browsing human, I don&#8217;t really care how many milliseconds New and Improved Browser shaves off Brand X&#8217;s benchmarks. I care about how long I&#8217;m waiting for the hourglass to disappear or the spinny thing to stop spinning.</p>
<p>As a developer, of course I went off and found the <a href="http://webkit.org/perf/sunspider-0.9/sunspider.html">webkit benchmark</a>. Results below, in all their ugly unformatted glory:</p>
<pre id="console">TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           2.28x as fast     5387.6ms +/- 0.6%   2358.2ms +/- 0.2%     significant

=============================================================================

  3d:                  3.69x as fast      621.6ms +/- 1.1%    168.6ms +/- 4.0%     significant
    cube:              5.35x as fast      229.0ms +/- 1.3%     42.8ms +/- 11.5%     significant
    morph:             2.88x as fast      205.4ms +/- 1.4%     71.2ms +/- 5.7%     significant
    raytrace:          3.43x as fast      187.2ms +/- 2.1%     54.6ms +/- 3.1%     significant

  access:              6.93x as fast      885.6ms +/- 0.9%    127.8ms +/- 4.3%     significant
    binary-trees:      13.7x as fast      112.6ms +/- 0.6%      8.2ms +/- 12.7%     significant
    fannkuch:          8.92x as fast      401.2ms +/- 0.1%     45.0ms +/- 2.0%     significant
    nbody:             4.86x as fast      210.8ms +/- 2.7%     43.4ms +/- 10.0%     significant
    nsieve:            5.16x as fast      161.0ms +/- 1.7%     31.2ms +/- 4.4%     significant

  bitops:              8.42x as fast      796.8ms +/- 0.2%     94.6ms +/- 5.3%     significant
    3bit-bits-in-byte: 26.6x as fast      154.2ms +/- 0.4%      5.8ms +/- 17.9%     significant
    bits-in-byte:      17.8x as fast      217.2ms +/- 0.5%     12.2ms +/- 8.5%     significant
    bitwise-and:       5.51x as fast      178.6ms +/- 0.9%     32.4ms +/- 4.4%     significant
    nsieve-bits:       5.58x as fast      246.8ms +/- 0.2%     44.2ms +/- 7.0%     significant

  controlflow:         28.3x as fast      113.2ms +/- 0.5%      4.0ms +/- 22.0%     significant
    recursive:         28.3x as fast      113.2ms +/- 0.5%      4.0ms +/- 22.0%     significant

  crypto:              5.29x as fast      405.0ms +/- 0.3%     76.6ms +/- 4.8%     significant
    aes:               4.97x as fast      153.2ms +/- 0.7%     30.8ms +/- 6.0%     significant
    md5:               5.27x as fast      126.6ms +/- 1.1%     24.0ms +/- 8.2%     significant
    sha1:              5.74x as fast      125.2ms +/- 0.8%     21.8ms +/- 2.6%     significant

  date:                1.07x as fast      416.2ms +/- 1.1%    389.6ms +/- 1.6%     significant
    format-tofte:      1.23x as fast      261.4ms +/- 1.3%    212.2ms +/- 2.0%     significant
    format-xparb:      *1.15x as slow*    154.8ms +/- 1.0%    177.4ms +/- 1.8%     significant

  math:                3.79x as fast      619.6ms +/- 1.1%    163.4ms +/- 5.6%     significant
    cordic:            3.24x as fast      294.2ms +/- 0.9%     90.8ms +/- 6.2%     significant
    partial-sums:      3.39x as fast      177.8ms +/- 2.9%     52.4ms +/- 11.3%     significant
    spectral-norm:     7.31x as fast      147.6ms +/- 0.5%     20.2ms +/- 2.8%     significant

  regexp:              *1.88x as slow*    305.8ms +/- 10.1%    573.6ms +/- 0.5%     significant
    dna:               *1.88x as slow*    305.8ms +/- 10.1%    573.6ms +/- 0.5%     significant

  string:              1.61x as fast     1223.8ms +/- 3.3%    760.0ms +/- 1.4%     significant
    base64:            1.81x as fast      154.8ms +/- 2.2%     85.6ms +/- 9.5%     significant
    fasta:             3.84x as fast      306.0ms +/- 2.1%     79.6ms +/- 2.6%     significant
    tagcloud:          -                  216.0ms +/- 3.5%    209.0ms +/- 1.5%
    unpack-code:       1.36x as fast      378.0ms +/- 10.1%    278.2ms +/- 2.3%     significant
    validate-input:    1.57x as fast      169.0ms +/- 2.9%    107.6ms +/- 2.4%     significant</pre>
<p>That&#8217;s looking a bit more believable. On average Chrome/V8 seems to be twice as fast as Firefox/Spidermonkey, with results varying from 30 times faster to almost 2 times slower. It will be interesting to see how <a href="http://weblogs.mozillazine.org/roadmap/archives/2008/08/tracemonkey_javascript_lightsp.html">Tracemonkey</a> compares, as it seems to be about 1.8 times faster than Spidermonkey.</p>
]]></content:encoded>
			<wfw:commentRss>http://darrenhobbs.com/?feed=rss2&amp;p=516</wfw:commentRss>
		</item>
	</channel>
</rss>
