<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Aching Brain</title>
	<atom:link href="http://www.achingbrain.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.achingbrain.net</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 23 Jun 2010 15:56:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Uniqueness</title>
		<link>http://www.achingbrain.net/alex/uniqueness</link>
		<comments>http://www.achingbrain.net/alex/uniqueness#comments</comments>
		<pubDate>Wed, 23 Jun 2010 15:56:04 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=183</guid>
		<description><![CDATA[Something we've been ruminating on at work recently is uniqueness.  We'd quite like everything in our system to have a unique identifier, usually referred to as a GUID or Globally Unique IDentifier.  This way you can access any entity from any place, and the display method of said entity is determined by the place of [...]]]></description>
			<content:encoded><![CDATA[<p>Something we've been ruminating on at work recently is uniqueness.  We'd quite like everything in our system to have a unique identifier, usually referred to as a GUID or Globally Unique IDentifier.  This way you can access any entity from any place, and the display method of said entity is determined by the place of access.  By way of example, if you were to access an email, you'd see the email, but if you were looking at a folder full of emails, you'd see the email in the context of the folder that contains it.</p>
<p>Back to uniqueness though.  We don't really need our GUIDs to be truly globally unique, only unique within our system.  Ideally we'd also like them to be short so if you email someone a url their client won't wrap the line in the middle of our GUID.</p>
<p>The simplest way to ensure this would be with a number.  This is easy to maintain as they can be sequential, generated by a database and don't need any special rules.  The only problem is the namespace is not very big.  If you allow five characters for your GUID in the familiar base 10 number system, you have 10,000 potential values, or 10<sup>5</sup>.</p>
<p>10,000 is a good start but what if you've got entities in different tables?  Entity#1 in table A is not the same as entity#1 in table B.  Perhaps we can do better.</p>
<p>The canonical GUID implementation is the <a href="http://en.wikipedia.org/wiki/Universally_Unique_Identifier">Universally Unique Identifier</a> or UUID.  UUID has been standardised as <a href="http://www.ietf.org/rfc/rfc4122.txt">RFC4122</a> by people a lot cleverer than me so let's assume it's pretty good.  A UUID takes the following form:</p>
<p>550e8400-e29b-41d4-a716-446655440000</p>
<p>Right away we can see that it's going to result in a much larger namespace than using numbers as it incorporates letters as well.  This expands the value each character can be from 10 to (26 + 10), giving us a base 36 namespace.  A five character GUID in base 36 has 60,466,176 possible values, or 36<sup>5</sup>.</p>
<p>Version 5 UUIDs are calculated by taking an existing source of uniqueness (a URL is recommended) and hashing it using the SHA-1 algorithm.  This is not fantastic for us as we're trying to create a GUID which will be used in the creation of a URL, so we're going to have to look elsewhere.</p>
<p>The simple thing to do would be to generate them randomly.  This is not as bad as it sounds and appears to be a <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/UUID.html#randomUUID()">standard</a> way of doing it.  We've just introduced a subtle problem though.  As we are now randomly generating the GUID we become vulnerable to the <a href="http://en.wikipedia.org/wiki/Birthday_problem">birthday paradox</a>.  From this <a href="http://my.instacalc.com/calc/91ca9ae67a434f82be1b84d85ea9e065">rather nifty calculator</a>, we can deduce that we'll reach a 99.9% probability of a collision (eg. two items with the same GUID) with a five character GUID in base 36 after 29,903 items.  Although this means we are fairly likely to have collisions with randomly generated GUIDs, it's still much better than using integers which reach 99.9% after just 372 items.</p>
<p>Clearly the way to increase the namespace is to increase the base of the number system we are using.  There's easy thing we can do here - include capital and lower case letters.  YouTube do this to great effect, even including punctuation:</p>
<p><a href="http://www.youtube.com/watch?v=ZOU8GIRUd_g">http://www.youtube.com/watch?v=ZOU8GIRUd_g</a></p>
<p>So lower case (26), upper case (26), integers (10) and underscores (1) gives us base 56 - 550,731,776 potential values at five characters, or 56<sup>5</sup>.  No need to stop at underscores though - <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC2396</a> tells us that the only restricted characters for URLs are ; / ? : @ &amp; = + $ ,.  That leaves !@£%^*()[]{}"'\|&gt;&lt;. etc etc.</p>
<p>At 11 base 56 characters, YouTube can accommodate nearly 17,000,000,000,000,000,000 videos (or 1.7 x 10<sup>-8</sup> <a href="http://www.facebook.com/pages/The-Official-Petition-to-Establish-Hella-as-the-SI-Prefix-for-1027/277479937276?v=info">hella</a> videos) before running out of GUIDs.  When they do, they can just add another character on to literally increase the namespace exponentially or simply allow additional punctuation marks.  Taking the birthday paradox into account, they can have 15,325,262,787 videos before a 99.9% probability of collision occurs.  If <a href="http://wiki.answers.com/Q/How_many_videos_are_there_on_YouTube">they currently have 120,000,000</a> they are still a long way off needing to extend their namespace.</p>
<p>So there you have it.  Increase your number base to reduce the chance of GUID collision and make your life easy when trying to make everything in your database have a unique, email friendly identifier.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=183&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/uniqueness/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Register&#8217;s guide to Linux Distributions</title>
		<link>http://www.achingbrain.net/alex/the-registers-guide-to-linux-distributions</link>
		<comments>http://www.achingbrain.net/alex/the-registers-guide-to-linux-distributions#comments</comments>
		<pubDate>Mon, 21 Jun 2010 19:06:13 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=180</guid>
		<description><![CDATA[Tomorrow, we'll tell you how to get them, burn them and set them up to dual-boot with Windows and on Wednesday there will be a guide to tweaking your new setup and getting it ready for use.
Three days to set up and have a Linux desktop ready to use.  Yep, that about tallies with my [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Tomorrow, we'll tell you how to get them, burn them and set them up to dual-boot with Windows and on Wednesday there will be a guide to tweaking your new setup and getting it ready for use.</p></blockquote>
<p>Three days to set up and have a Linux desktop ready to use.  Yep, that about tallies with my memory of it.</p>
<p><a href="http://www.theregister.co.uk/2010/06/21/reg_linux_guide_1">http://www.theregister.co.uk/2010/06/21/reg_linux_guide_1</a></p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=180&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/the-registers-guide-to-linux-distributions/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Security Hacking for kids</title>
		<link>http://www.achingbrain.net/alex/security-hacking-for-kids</link>
		<comments>http://www.achingbrain.net/alex/security-hacking-for-kids#comments</comments>
		<pubDate>Thu, 13 Aug 2009 16:45:54 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=175</guid>
		<description><![CDATA[From Five hacks you can explore with your kids (Wired)
The thrill of getting a root shell using a well crafted buffer overflow is a joy few non-geeks will ever know. Security cracking is skill that requires an in depth knowledge of networking, operating systems and programming. Helping your kids build these important skills without turning [...]]]></description>
			<content:encoded><![CDATA[<p>From <a href="http://www.wired.com/geekdad/2009/08/5-hacks-you-can-explore-with-your-kids/">Five hacks you can explore with your kids</a> (Wired)</p>
<blockquote><p>The thrill of getting a root shell using a well crafted buffer overflow is a joy few non-geeks will ever know. Security cracking is skill that requires an in depth knowledge of networking, operating systems and programming. Helping your kids build these important skills without turning into web site trashing script kiddies is every good parent’s job.</p></blockquote>
<p>Well quite.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=175&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/security-hacking-for-kids/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Updates</title>
		<link>http://www.achingbrain.net/alex/updates</link>
		<comments>http://www.achingbrain.net/alex/updates#comments</comments>
		<pubDate>Sun, 02 Aug 2009 11:20:14 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=174</guid>
		<description><![CDATA[I'd forgotten what a time consuming, involving and generally ill thought through process updating a copy of Windows is.  On the Mac you use a desktop application, on Windows a flaky looking web app.  On the Mac you select things like "QuickTime Update 7.6.2" which kind of makes sense, on Windows you select "Critical Update [...]]]></description>
			<content:encoded><![CDATA[<p>I'd forgotten what a time consuming, involving and generally ill thought through process updating a copy of Windows is.  On the Mac you use a desktop application, on Windows a flaky looking web app.  On the Mac you select things like "QuickTime Update 7.6.2" which kind of makes sense, on Windows you select "Critical Update for Windows XP (KB9832082)" which might as well be in Esperanto.</p>
<p>Operating system updates on the Mac are all rolled together, so if you are on 10.5.3, updating to 10.5.7 is one step (and a big download).  On Windows you need to repeatedly visit Windows Update to ensure that no new updates have been unlocked by installing the last set.</p>
<p>After selecting your desired updates, on the Mac any further interaction is done right at the start of the process - EULA clicking, etc.  On Windows the process is constantly interrupted with wizard after wizard after wizard, meaning that you can't just click "go", put the kettle on and come back half an hour later.  No, you have to constantly hand hold the process like some it's some sort of attention seeking toddler.</p>
<p>It also offered me the option of installing something called Microsoft Genuine Windows Notifications which promised, if my copy of windows was not "Genuine", to constantly bombard me with nagging reminders to "solve" this problem.</p>
<p>Who in their right mind would actually choose to install such a piece of software?  If your copy is legit you don't need it and if it's not, you don't want it.</p>
<p>It then prompted me to follow a link to a list of benefits of using "Genuine" Windows software.  I didn't follow the link, but presumably it's just a picture of Steve Balmer in a bath of money.</p>
<p>Sorry that this post is so unashamedly pro Mac.  I'd have mentioned the Linux update process as these days it's pretty painless.  The update process itself is painless, I mean.  The pain comes after the update when you find that half of your shit doesn't work any more.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=174&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/updates/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The march of progress</title>
		<link>http://www.achingbrain.net/ktm/the-march-of-progress</link>
		<comments>http://www.achingbrain.net/ktm/the-march-of-progress#comments</comments>
		<pubDate>Thu, 09 Oct 2008 10:56:10 +0000</pubDate>
		<dc:creator>ktm</dc:creator>
				<category><![CDATA[Uncategorised]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=173</guid>
		<description><![CDATA[Today I received my lovely new Sony Ericsson C902 couriered straight to my desk.  It was very painless: Orange rang, I'm a valued customer, they offer me a new piece of kit and a sexier calling package for less money.  I wasn't expecting much, just a new, smaller, shinier phone and it is just that.  [...]]]></description>
			<content:encoded><![CDATA[<p>Today I received my lovely new Sony Ericsson C902 couriered straight to my desk.  It was very painless: Orange rang, I'm a valued customer, they offer me a new piece of kit and a sexier calling package for less money.  I wasn't expecting much, just a new, smaller, shinier phone and it is just that.  However, it has one thing that most phones don't and that is a mini-jack connector for the headphones.  No need to use the rubbish headphones that come with the phone, I can plug whatever I want into it.  Now that is what I call progress...</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=173&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/ktm/the-march-of-progress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flashpaper</title>
		<link>http://www.achingbrain.net/alex/flashpaper</link>
		<comments>http://www.achingbrain.net/alex/flashpaper#comments</comments>
		<pubDate>Sat, 06 Sep 2008 08:09:47 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorised]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=172</guid>
		<description><![CDATA[Adobe have despatched Flashpaper to the same grave of irrelevant products as FreeHand and ImageReady.  Considering Flashpaper was made by Macromedia before their assimilation, it was kind of on the cards due to it's competition with PDF.
From the article the CEO a doomed startup whines:
What about all the websites that have been storing all their documents [...]]]></description>
			<content:encoded><![CDATA[<p>Adobe have <a href="http://uk.techcrunch.com/2008/09/04/startups-in-chaos-as-adobes-flashpaper-discontinues/">despatched</a> Flashpaper to the same grave of irrelevant products as FreeHand and ImageReady.  Considering Flashpaper was made by Macromedia before their assimilation, it was kind of on the cards due to it's competition with PDF.</p>
<p>From the article the CEO a doomed startup whines:</p>
<blockquote><p>What about all the websites that have been storing all their documents with Flashpaper? It will be a major job having to transfer all those documents to a new solution</p></blockquote>
<p>Perhaps if instead of willingly submitting to vendor lock in they stored their documents in a <a href="http://www.w3.org/TR/xhtml1/">recognised, open standard that's widely implemented by multiple vendors</a> they would not have this problem.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=172&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/flashpaper/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>FlashCommand</title>
		<link>http://www.achingbrain.net/alex/flashcommand</link>
		<comments>http://www.achingbrain.net/alex/flashcommand#comments</comments>
		<pubDate>Mon, 01 Sep 2008 08:45:55 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorised]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=171</guid>
		<description><![CDATA[I found this excellent command line tool to compile Flash movies the other day.
It works like this:



flashcommand -p -s /path/to/fla



The -p switch means 'publish' and '-s' specifies the path to the source .fla file.  It works by opening Flash CS3 in the background and instructing it to compile the movie, consequently it will respect [...]]]></description>
			<content:encoded><![CDATA[<p>I found this <a href="http://code.google.com/p/flashcommand/">excellent command line tool</a> to compile Flash movies the other day.</p>
<p>It works like this:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">flashcommand -p -s /path/to/fla</div>
</li>
</ol>
</div>
<p>The -p switch means 'publish' and '-s' specifies the path to the source .fla file.  It works by opening Flash CS3 in the background and instructing it to compile the movie, consequently it will respect the publish settings you've defined in the .fla so the generated .swf file will end up in the right directory.</p>
<p>Combining this with Flash CS3's ability to import an external AS3 file to use with each movie means bar the initial .fla file creation you'll never have to use Adobe's painfully bad authoring environment ever again.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=171&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/flashcommand/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UK communications database</title>
		<link>http://www.achingbrain.net/alex/uk-communications-database</link>
		<comments>http://www.achingbrain.net/alex/uk-communications-database#comments</comments>
		<pubDate>Tue, 20 May 2008 16:24:46 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorised]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=170</guid>
		<description><![CDATA[The latest krazee plan from the Home Office's policy department seems to be a massive database containing the details of every phone conversation and email sent in the UK.
Assuming it works (it won't) then at least they'll realise just how bad the spam situation is.
]]></description>
			<content:encoded><![CDATA[<p>The latest krazee plan from the Home Office's policy department seems to be a massive database containing the details of <a href="http://news.bbc.co.uk/1/hi/technology/7410885.stm">every phone conversation and email sent</a> in the UK.</p>
<p>Assuming it works (it won't) then at least they'll realise just how bad the spam situation is.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=170&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/uk-communications-database/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Running FMS 3 on Gentoo Linux</title>
		<link>http://www.achingbrain.net/alex/running-fms-3-on-gentoo-linux</link>
		<comments>http://www.achingbrain.net/alex/running-fms-3-on-gentoo-linux#comments</comments>
		<pubDate>Thu, 24 Apr 2008 13:22:47 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=169</guid>
		<description><![CDATA[I've been trying to install Macromedia Adobe Flash Media Server 3 on my local development box and have run into some problems.
To help out anyone else trying to do the same thing, here's how I did it.
First you need to install nspr



emerge -uDv dev-libs/nspr



Add a user/group for it to run under:



groupadd fms


useradd -g fms -d [...]]]></description>
			<content:encoded><![CDATA[<p>I've been trying to install <span style="text-decoration: line-through;">Macromedia</span> Adobe Flash Media Server 3 on my local development box and have run into some problems.</p>
<p>To help out anyone else trying to do the same thing, here's how I did it.</p>
<p>First you need to install nspr</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">emerge -uDv dev-libs/nspr</div>
</li>
</ol>
</div>
<p>Add a user/group for it to run under:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">groupadd fms</div>
</li>
<li class="li1">
<div class="de1">useradd -g fms -d /dev/null -s /bin/bash fms</div>
</li>
</ol>
</div>
<p>Then download and extract the media server as per usual.  Before installing it, you need to fiddle the install script so that it will install on your "unsupported" platform.  Open installFMS in your favourite text editor and find the line that reads</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re2">DISTRO=</span>`check_distro`</div>
</li>
</ol>
</div>
<p>Change it to something appropriate like</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re2">DISTRO=</span>redhat-RHEL4-i686</div>
</li>
</ol>
</div>
<p>Then start the installation script as normal.  Tell it that you don't want it to run as a daemon (as it requires the Red Hat only chkconfig command) and that you don't want it to start the server when done.</p>
<p>After you've installed the server, you'll need to make the bundled <code>libasneu.so.1</code> library available for use:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">ln</span> -s /opt/fms/libasneu.so<span class="nu0">.1</span> /lib/libasneu.so<span class="nu0">.1</span></div>
</li>
</ol>
</div>
<p>For some reason the install messed up the configuration files, adding things like the administrative user name twice.  Check conf/fms.ini to make sure this hasn't happened to you.</p>
<p>The installer creates init scripts at <code>/etc/init.d</code> but in order to use them you first need to create a file called <code>.autostart</code> in the installation directory:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">touch</span> .autostart</div>
</li>
</ol>
</div>
<p>You should then be able to start and stop the server normally:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">/etc/init.d/fms start</div>
</li>
<li class="li1">
<div class="de1">/etc/init.d/fms stop</div>
</li>
</ol>
</div>
<p>And use <code>rc-update</code> to have the server start on boot:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">rc-update add fms default</div>
</li>
</ol>
</div>
<p>Good luck.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=169&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/running-fms-3-on-gentoo-linux/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vista SP1 sales video</title>
		<link>http://www.achingbrain.net/alex/vista-sp1-sales-video</link>
		<comments>http://www.achingbrain.net/alex/vista-sp1-sales-video#comments</comments>
		<pubDate>Thu, 17 Apr 2008 15:45:50 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=168</guid>
		<description><![CDATA[I really hope this is a spoof as it makes me want to stab myself in the eye with a fork.

]]></description>
			<content:encoded><![CDATA[<p>I really hope this is a spoof as it makes me want to stab myself in the eye with a fork.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="wmode" value="transparent" /><param name="src" value="http://www.youtube.com/v/sPv8PPl7ANU&amp;hl=en" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://www.youtube.com/v/sPv8PPl7ANU&amp;hl=en" wmode="transparent"></embed></object></p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=168&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/vista-sp1-sales-video/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Prototype String.toQueryParams() weirdness</title>
		<link>http://www.achingbrain.net/alex/prototype-stringtoqueryparams-weirdness</link>
		<comments>http://www.achingbrain.net/alex/prototype-stringtoqueryparams-weirdness#comments</comments>
		<pubDate>Tue, 15 Apr 2008 14:34:46 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=167</guid>
		<description><![CDATA[I just came across this while using Prototype:



&#34;section=blo%g&#38;id=45&#34;.toQueryParams&#40;&#41;;



To save you the trouble of running it yourself, I'll tell you what happens - the unescaped percent symbol causes a URI malformed error to be thrown.
Very odd.  The Prototype documentation for toQueryParams says:
Parses a URI-like query string and returns an object composed of parameter/value pairs.
Since it's [...]]]></description>
			<content:encoded><![CDATA[<p>I just came across this while using <a href="http://www.prototypejs.org">Prototype</a>:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="st0">&quot;section=blo%g&amp;id=45&quot;</span>.<span class="me1">toQueryParams</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>To save you the trouble of running it yourself, I'll tell you what happens - the unescaped percent symbol causes a URI malformed error to be thrown.</p>
<p>Very odd.  The Prototype documentation for <a href="http://www.prototypejs.org/api/string#method-toqueryparams">toQueryParams</a> says:</p>
<blockquote><p>Parses a URI-like query string and returns an object composed of parameter/value pairs.</p></blockquote>
<p>Since it's a URI-like query string and not an actual query string (by which I mean one that's been through the browser address bar and as such subject to whatever text munging the browser does), my example above should be a legal use case.</p>
<p>After a little digging around in prototype.js, it seems that the problem is caused by the JavaScript function decodeURIComponent() not enjoying being given a string that contains an unescaped percent symbol.  Usually percent symbols are used in conjunction with a number to represent a non-alphanumeric character in a URL - %20 for space, etc, but in the above it's a literal percent symbol.</p>
<p>My first attempt to fix it changed lines 98 and 100 of string.js in the Prototype source to use the built in <a href="http://www.w3schools.com/jsref/jsref_escape.asp">escape</a> function:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> key = decodeURIComponent<span class="br0">&#40;</span>pair.<span class="me1">shift</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">...</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>value != undefined<span class="br0">&#41;</span> value = decodeURIComponent<span class="br0">&#40;</span>value<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">to</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> key = decodeURIComponent<span class="br0">&#40;</span>escape<span class="br0">&#40;</span>pair.<span class="me1">shift</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">...</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>value != undefined<span class="br0">&#41;</span> value = decodeURIComponent<span class="br0">&#40;</span>escape<span class="br0">&#40;</span>value<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>This worked for my use case but caused Prototype to fail a different unit test.  Changing them to the following worked out okay:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> key = unescape<span class="br0">&#40;</span>decodeURIComponent<span class="br0">&#40;</span>escape<span class="br0">&#40;</span>pair.<span class="me1">shift</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">...</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>value != undefined<span class="br0">&#41;</span> value = unescape<span class="br0">&#40;</span>decodeURIComponent<span class="br0">&#40;</span>escape<span class="br0">&#40;</span>value<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Granted the unescape(...(escape(...)) is a little clumsy, but it seems to get the job done.</p>
<p>Adding the following unit test to string.html allows to test for the above:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">this</span>.<span class="me1">assertHashEqual</span><span class="br0">&#40;</span><span class="br0">&#123;</span><span class="st0">'key1'</span>: <span class="st0">'va%lue1'</span><span class="br0">&#125;</span>, <span class="st0">'key1=va%lue1'</span>.<span class="me1">toQueryParams</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="st0">'rogue percent symbol test'</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>I've created some <a href="http://www.achingbrain.net/files/prototype_toQueryParams_bug/">test pages</a> which demonstrate the problem.</p>
<p>There is also a <a href="http://www.achingbrain.net/files/prototype_toQueryParams_bug/string.js.patch">patch file</a> available.  Apply it to /src/string.js in your Prototype source tree.</p>
<p><strong>Update</strong></p>
<p>I've also <a href="http://prototype.lighthouseapp.com/projects/8886/tickets/15-patch-test-string-toqueryparams-not-handling-properly">filed a bug</a>.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=167&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/prototype-stringtoqueryparams-weirdness/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Code</title>
		<link>http://www.achingbrain.net/alex/code</link>
		<comments>http://www.achingbrain.net/alex/code#comments</comments>
		<pubDate>Fri, 11 Apr 2008 14:40:45 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.achingbrain.net/?p=166</guid>
		<description><![CDATA[I haven't posted here for a while, mainly due to the time sink that is Facebook, but I have been writing code in my spare time, honest.  I thought I'd have a little skim through what's on my machine and share a few choice nuggets.
Recently I've been trying to get into programming applications for Mac [...]]]></description>
			<content:encoded><![CDATA[<p>I haven't posted here for a while, mainly due to the time sink that is Facebook, but I have been writing code in my spare time, honest.  I thought I'd have a little skim through what's on my machine and share a few choice nuggets.</p>
<p>Recently I've been trying to get into programming applications for Mac OS X - I use it on a day to day basis so thought it would be best to get involved.  I've put some new things on the <a href="http://www.achingbrain.net/stuff">Stuff</a> page for your perusal.  They are:</p>
<h3><a href="http://www.achingbrain.net/stuff/cocoa/applications/backgrounderer">Backgrounderer</a></h3>
<p>A little app to download desktop wallpapers from veer.com.  If you wish to build from source, you'll need to install <a href="http://regexkit.sourceforge.net/">RegexKit</a> first.</p>
<h3><a href="http://www.achingbrain.net/stuff/cocoa/applications/mail-rss-exporter">Mail RSS Exporter</a></h3>
<p>An application that exports your RSS feeds from Apple Mail and stores them in either OPML format or Safari Bookmarks.</p>
<h3><a href="http://www.achingbrain.net/stuff/cocoa/applications/touch-me">TouchMe</a></h3>
<p>A program to run AppleScripts on a computer on your local network from your iPhone or iPod Touch - I use this to control a Mac mini attached to a projector.  The projector is not always switched on so Front Row was insufficient.  It also allows you to force quit applications that have hung.</p>
<h3><a href="http://www.achingbrain.net/stuff/cocoa/frameworks/simplehttpd">SimpleHTTPd</a></h3>
<p>A Cocoa native web server packaged as a framework so you can use it in your own projects.  Based on Jurgen Schwiezer's <a href="http://www.oreilly.com/pub/a/mac/2006/11/14/how-to-write-a-cocoa-web-server.html">SimpleHTTPServer</a>.</p>
<p>All of the above require OS X 10.5 Leopard as coming from a Java/PHP background I have a strange fetish for garbage collectors and consequently find manual memory management tedious.</p>
<p>They are all BSD licensed and source is included with each program so go crazy.</p>
<p>I'll get round to posting about each one in more depth in the near future.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=166&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/code/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brain IV</title>
		<link>http://www.achingbrain.net/alex/brain-iv</link>
		<comments>http://www.achingbrain.net/alex/brain-iv#comments</comments>
		<pubDate>Wed, 19 Mar 2008 19:07:54 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Meta]]></category>

		<guid isPermaLink="false">http://wordpress/alex/brain-iv</guid>
		<description><![CDATA[Welcome to version 4 of Aching Brain.  It's been an awfully long time, but I promise to post more often.
The major change is that I've switched from a custom back end to pre-written blog software as maintaining it became a bit of a nightmare.  I say maintaining - what I mean is writing [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome to version 4 of Aching Brain.  It's been an awfully long time, but I promise to post more often.</p>
<p>The major change is that I've switched from a custom back end to pre-written <a href="http://www.wordpress.com">blog software</a> as maintaining it became a bit of a nightmare.  I say maintaining - what I mean is writing new versions of it as who wants to administer crufty old code when they get home?  AB4 has been in the works for over a year but I never seemed to be able to finish it without wanting to re-write great big chunks of it so I've bitten the bullet and gone down the shoulders-of-giants route.  And I have to say, so far it's been relatively painless - the only thing that's really given me trouble is getting apostrophes to play nice in code tags, but more on that later.</p>
<p>All the old content should be here somewhere. The only difference is a slight change in the URL structure but a little bit of .htaccess fiddling should mean that incoming links still point in the right place.</p>
<p>If you spot anything amiss, <a href="/contact">do let me know</a>.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=150&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/brain-iv/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Button, button, who&#8217;s got the button?</title>
		<link>http://www.achingbrain.net/alex/button-button-whos-got-the-button</link>
		<comments>http://www.achingbrain.net/alex/button-button-whos-got-the-button#comments</comments>
		<pubDate>Thu, 26 Jul 2007 07:44:14 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://wordpress/blog/alex/button-button-whos-got-the-button</guid>
		<description><![CDATA[From an article on the Wall Street Journal about Steve Job's button phobia.
 When the company introduced the iPod in late 2001, the most common calls to Apple's technical support lines for a time were about how to turn the device, which lacked a clearly defined power button, off and on, says a former Apple [...]]]></description>
			<content:encoded><![CDATA[<p>From an article on the Wall Street Journal about <a href="http://online.wsj.com/public/article/SB118532502435077009.html?mod=blog">Steve Job's button phobia</a>.</p>
<blockquote><p> When the company introduced the iPod in late 2001, the most common calls to Apple's technical support lines for a time were about how to turn the device, which lacked a clearly defined power button, off and on, says a former Apple executive.</p></blockquote>
<p>Wow, I'd forgotten all about that.  Years ago Will left his iPod at our house for a week or two and I had such trouble trying to figure out how to turn the damn thing on.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=149&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/button-button-whos-got-the-button/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Apache2 and OS X</title>
		<link>http://www.achingbrain.net/alex/apache2-and-os-x</link>
		<comments>http://www.achingbrain.net/alex/apache2-and-os-x#comments</comments>
		<pubDate>Fri, 20 Jul 2007 11:20:45 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://wordpress/blog/alex/apache2-and-os-x</guid>
		<description><![CDATA[This is more a note to myself than anyone else, but to compile Apache2 on OS X, use the following configure:



./configure --with-included-apr --enable-so --enable-mods-shared=most



When Apache starts whinging about "dlname not found, assuming libtool archive" and shit, and refuses to produce .so modules instead kicking out a bunch of .a and .la files in their place, [...]]]></description>
			<content:encoded><![CDATA[<p>This is more a note to myself than anyone else, but to compile Apache2 on OS X, use the following configure:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">./configure --with-included-apr --enable-so --enable-mods-<span class="re2">shared=</span>most</div>
</li>
</ol>
</div>
<p>When Apache starts whinging about "dlname not found, assuming libtool archive" and shit, and refuses to produce .so modules instead kicking out a bunch of .a and .la files in their place, it means you've fucked up somewhere along the line, probably because this isn't the first time you've tried to run the configure script.</p>
<p>Delete the entire Apache source directory and start again.  If you are lucky you'll even get a nice copy of libexpat.0.dylib at the end of it all.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=148&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/apache2-and-os-x/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Orwellian</title>
		<link>http://www.achingbrain.net/alex/orwellian</link>
		<comments>http://www.achingbrain.net/alex/orwellian#comments</comments>
		<pubDate>Tue, 26 Jun 2007 19:04:08 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://wordpress/blog/alex/orwellian</guid>
		<description><![CDATA[The BBC ... has always taken a platform agnostic approach to its internet services.
And then a little later:
It is not possible to put an exact timeframe on when BBC iPlayer will be available for Mac users.
--bad, indeed.
The corporation's governing body asked the BBC to ensure that the iPlayer could run on different systems - such [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>The BBC ... has always taken a platform agnostic approach to its internet services.</p></blockquote>
<p>And then a little later:</p>
<blockquote><p>It is not possible to put an exact timeframe on when BBC iPlayer will be available for Mac users.</p></blockquote>
<p>--bad, indeed.</p>
<blockquote><p>The corporation's governing body asked the BBC to ensure that the iPlayer could run on different systems - such as Apple Macs - within "a reasonable time frame", initially twenty-four months.</p></blockquote>
<p>Twenty four months for porting to Mac OS X is reasonable?!  I dread to think about the poor old Linux users out there.</p>
<blockquote><p>The BBC has previously said it cannot commit to a two-year time frame as many decisions would have to be made by third parties.</p></blockquote>
<p>i.e. Either Microsoft decide to port their DRM software or someone else will have to decide to write some.</p>
<blockquote><p>A statement from the BBC read: "Our ability to deliver this open approach will be influenced by the availability of alternative DRM systems on the market.</p></blockquote>
<p>i.e. Microsoft have no plans to port their DRM software to any other operating system so the BBC will have to find some other system to use and so far haven't so we'll just have to wait.</p>
<p>What a load of rubbish.  I've always been a strong supporter of the BBC but this is utterly unacceptable.</p>
<p><a href="http://news.bbc.co.uk/1/hi/technology/6236612.stm">http://news.bbc.co.uk/1/hi/technology/6236612.stm</a></p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=147&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/orwellian/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shouty Shouty</title>
		<link>http://www.achingbrain.net/ktm/shouty-shouty</link>
		<comments>http://www.achingbrain.net/ktm/shouty-shouty#comments</comments>
		<pubDate>Thu, 24 May 2007 06:35:48 +0000</pubDate>
		<dc:creator>ktm</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://wordpress/blog/katherine/shouty</guid>
		<description><![CDATA[Adverts that shout work.  I like them.  "Bang and the dirt is gone."  They weren't lying and if I hadn't been so entertained by the shouty antics of Barry Scott I wouldn't have bought what can only be described as the most potent chemical concoction available to buy (legally) in a supermarket.
My [...]]]></description>
			<content:encoded><![CDATA[<p>Adverts that shout work.  I like them.  "Bang and the dirt is gone."  They weren't lying and if I hadn't been so entertained by the shouty antics of Barry Scott I wouldn't have bought what can only be described as the most potent chemical concoction available to buy (legally) in a supermarket.</p>
<p>My latest favourite is Tyrannosaurus Alan.  I don't know why I am so enamoured by a fuzzy felt dinosaur and shouty volcano.  I once had a conversation with a marketing type who had to find out why Volvic was continuously outperformed by Evian sales-wise.  I didn't know the answer then, but told him that it was because Volvic sounded like part of the female anatomy and everyone knows that Vittel is better than both of them.  I think however he must have found the solution; everyone loves the wacky dinosaur and his volcanic buddy.  Today's Metro even featured a three (half-)page long advert featuring the aforementioned characters in cartoon strip style (and revealed Mr Volcano's first name √¢‚Ç¨‚Äú George!), I just can't wait to find out what happens next.</p>
<p>Does it really work though?  As much as I am entertained by Mr (George) Volcano's peculiar pronunciation of water I won't start buying Volvic until they decide to do a 'free' (¬£2.99 for P&amp;P of course) Tyrannosaurus Alan toy.  Now, there's a thought!</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=146&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/ktm/shouty-shouty/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Warranty</title>
		<link>http://www.achingbrain.net/alex/warranty</link>
		<comments>http://www.achingbrain.net/alex/warranty#comments</comments>
		<pubDate>Fri, 27 Apr 2007 07:47:32 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://wordpress/blog/alex/warranty</guid>
		<description><![CDATA[From the little booklet in the box:
Off road riding extracts a severe toll on footwear.  On and off the pedals thousands of times, lots of walking, days of 150 degree heat rotting the shoes in your trunk all means these shoes will eventually wear out.  When the rubber is worn smooth off the [...]]]></description>
			<content:encoded><![CDATA[<p>From the little booklet in the box:</p>
<blockquote><p>Off road riding extracts a severe toll on footwear.  On and off the pedals thousands of times, lots of walking, days of 150 degree heat rotting the shoes in your trunk all means these shoes will eventually wear out.  When the rubber is worn smooth off the bottoms and your riding buddies locate you by following the flapping noise of your torn uppers, BUY NEW SHOES.  Don't return them to your dealer with your altar boy face on and mmble, "Uh, I only used them once and look what happened.  Gimme new for nuthin." (sic)</p>
<p>Of course, if we screwed up and forgot to send you (sic) your particular pair through our patented top secret bulletproofing process and they come apart for no good reason, give us a call at the number listed below and we will see what we can do to remedy the problem or come up with another bit of creative customer relations to keep you happy.  Just give us a call.</p></blockquote>
<p>I appear to have just bought a pair of shoes from a company that not only regards its customers as a bunch of scroungers but also feels the need to press this point home in a rather patronising manner.</p>
<p>It's a shame - they are rather nice shoes.</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=145&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/warranty/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Glastonbury tickets</title>
		<link>http://www.achingbrain.net/alex/glastonbury-tickets</link>
		<comments>http://www.achingbrain.net/alex/glastonbury-tickets#comments</comments>
		<pubDate>Sun, 01 Apr 2007 08:15:48 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://wordpress/blog/alex/glastonbury-tickets</guid>
		<description><![CDATA[Alex is currently wondering if the Glastonbury ticket website is run off of a beige box in the corner of someone's flat with a cat chewing on the network cable.
Honestly, what with all the pre-registering bollocks it's not like they were unaware of the demand.  Why can't they design a server infrastructure that can [...]]]></description>
			<content:encoded><![CDATA[<p>Alex is currently wondering if the Glastonbury ticket website is run off of a beige box in the corner of someone's flat with a cat chewing on the network cable.</p>
<p>Honestly, what with all the pre-registering bollocks it's not like they were unaware of the demand.  Why can't they design a server infrastructure that can handle enough requests?</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=144&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/glastonbury-tickets/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Whither Wii?</title>
		<link>http://www.achingbrain.net/alex/whither-wii</link>
		<comments>http://www.achingbrain.net/alex/whither-wii#comments</comments>
		<pubDate>Mon, 12 Feb 2007 19:50:08 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://wordpress/blog/alex/whither_wii</guid>
		<description><![CDATA[It's hard to believe just how difficult a Nintendo Wii is to acquire.  I made a vague stab on release day, trawling the electronics drags on Tottenham Court Road and Oxford Street.  Everywhere I was greeted with smirks, and laughter accompanied by pointing and other gesticulation.  The guy I spoke to in [...]]]></description>
			<content:encoded><![CDATA[<p>It's hard to believe just how difficult a Nintendo Wii is to acquire.  I made a vague stab on release day, trawling the electronics drags on Tottenham Court Road and Oxford Street.  Everywhere I was greeted with smirks, and laughter accompanied by pointing and other gesticulation.  The guy I spoke to in Virgin Megastore looked like he was going to hit me.</p>
<p>So I thought I'd leave it for a bit until the demand died down.  It's just a new games console whose sales are feeding of the intense hype surrounding it.  It will sort itself out after a month or so.</p>
<p>On Saturday while ktm was queueing in Argos for a replacement bathroom light (it's a rented property - what, you want us to go to Habitat?), I nipped out to see if, on the off chance, there was any Wii in Woolworths.</p>
<blockquote><p>No</p></blockquote>
<p>I was told, but I could order one.  How long?</p>
<blockquote><p>3-5 days, if they are in stock</p></blockquote>
<p>said the pimply faced youth.  Wicked, I think.  So I queued to be greeted by the very same PFY at the counter.</p>
<blockquote><p>Ah, you want a Wii.  I'll just pull it up on the computer.  Oh, they are out of stock.  My gosh!  You can't even order them!.</p></blockquote>
<p>My gosh indeed.</p>
<p>So to WHSmiths.  Nope.  To Dixons.  Nope.  Return to Argos.  Nope.  Having picked up the better half, we headed back to Dixons in search of a FM radio aerial and I took the opportunity to quiz a member of staff on their availability.  Nope.  I thought I might as well go for it and ask if I could order or join some sort of waiting list.  She laughed.</p>
<blockquote><p>We got a couple in last week, but we are still filling our pre-orders.</p></blockquote>
<p>!</p>
<blockquote><p>From November</p></blockquote>
<p>!!</p>
<p>There are Wii available, however.  Game's online store occasionally has stock.  However they are <a href="http://www.game.co.uk/ViewProduct.aspx?cat=&amp;mid=330334&amp;cm_sp=wii-_-instock-_-wideboy">opportunist bastards</a> and only sell the console in a bundle with four non-discounted games.  Then again I did really want one and the games it comes with are rather good.  I took one for the team.</p>
<p>Having come into possession of possibly the most elusive bit of gaming kit currently on the market (save a copy of Duke Nukem Forever) I thought it would be an easy ride from here on in.</p>
<p>The thing is, I haven't told ktm that there's a Wii arriving at some point in the near future*.  Consequently, I need to be able to placate her when it arrives.  This may be possible via a game or two of Wii tennis.  For this, as any 12 year old will be able to tell you, I need two controllers, or Wiimotes to use the approved lingo, and the console only comes with one.  I stepped out of my Wii owning friend's trendy Farringdon design studio at lunch time to attempt to locate a second of these fabled devices.</p>
<p>Dixons.  Nope.  WHSmiths.  Nope.  Hmm, not so good.  Having exhausted the local possibilities, I resolved to head to Oxford Street after work.  Virgin Megastore.  Nope.  Dixons.  Nope.  Game.  Nope.  HMV.  Nope.</p>
<p>Against my better judgement, I tried some of the little nameless electronics stores at the bottom of Tottenham Court Road who take no greater pleasure than in ripping off gadget crazed geeks with their inter-shop price fixing database.  No Wiimotes there either.</p>
<p>?!?@?!?!?@?!</p>
<p>Urgh, this was becoming a little silly.</p>
<p>Since every major store and most minor ones have come up empty, I was forced to try the black market.  Computer Exchange.</p>
<blockquote><p>Yes, we have one Wiimote in stock, but it's ¬£35</p></blockquote>
<p>the little goth pixie behind the counter tells me.</p>
<p>??!?!?!??!!@@@@?!?@1/</p>
<p>I looked at her incredulously, trying to come with some counter argument about how dare they have the nerve to sell me a second hand controller at above RRP.  She stared blankly back at me.  I opened my mouth.  She put her hand on her hip and tilted her head slightly, as if she was about to begin lecturing me on market forces dictating the price of goods in a free market.  ktm's disapproving look as I open the box from Parcel Farce loomed out of my imagination.  All right, I'll have it, I grumble.  When I protest sarcastically at the lack of box, the happy capitalist goth chirpily informs me that there's a one year guarantee.  Hooray.  I grab the bag and walk out.</p>
<p>I can't help but feel ever so slightly taken advantage of.</p>
<p>* = It's just possible that I may have blown my cover</p>
<img src="http://www.achingbrain.net/?ak_action=api_record_view&id=143&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.achingbrain.net/alex/whither-wii/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
