<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>James Little</title>
	
	<link>http://www.jameslittle.me.uk</link>
	<description />
	<lastBuildDate>Mon, 06 Feb 2012 09:09:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/james-little" /><feedburner:info uri="james-little" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjames-little" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjames-little" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjames-little" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/james-little" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjames-little" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fjames-little" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjames-little" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item>
		<title>Google Maps Precache</title>
		<link>http://feedproxy.google.com/~r/james-little/~3/QLFK9UmqN8s/</link>
		<comments>http://www.jameslittle.me.uk/google-maps-precache/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 22:48:39 +0000</pubDate>
		<dc:creator>James Little</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[giffgaff]]></category>

		<guid isPermaLink="false">http://www.jameslittle.me.uk/?p=168</guid>
		<description><![CDATA[{lang: 'en-GB'}I&#8217;m off to Switzerland tomorrow and this is one of the reasons I love my Android phone: Now I can switch my data off (and save a load of cash) without getting lost, as the GPS will function as normal. Do cool features like this help make carrier contracts a bit obsolete? I think [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/google-maps-precache/">{lang: 'en-GB'}</g:plusone></div><p>I&#8217;m off to Switzerland tomorrow and this is one of the reasons I love my Android phone:</p>
<p style="text-align:center;"><img title="Precache Google Maps" src="http://www.jameslittle.me.uk/images/precache_google_maps_android.jpg" alt="A Google Maps Precache in progress on Android" width="230" height="384" /></p>
<p>Now I can switch my data off (and save a load of cash) without getting lost, as the GPS will function as normal. </p>
<p>Do cool features like this help make carrier contracts a bit obsolete? I think so; there&#8217;s so many ways of working round expensive data costs when you have a decent smartphone. That&#8217;s why I&#8217;ve ditched my contract and gone with <a href="http://www.jameslittle.me.uk/giffgaff-review" title="Giffgaff" target="_blank">Giffgaff</a>.</p>
<p>To enable this on your Android on a recentish version of Google maps, just go to Settings > Labs > Precache Map Area. Now when you click on an address you&#8217;ll get the option to precache, which grabs the 10 square miles around it. The one above (of Basel) costs 6MB of disk space, a small price to pay not to have to wonder around trying to find stuff in a language I don&#8217;t really understand. <img src='http://www.jameslittle.me.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/google-maps-precache/">{lang: 'en-GB'}</g:plusone></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/james-little?a=QLFK9UmqN8s:wLTJvVRB2Uc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/james-little?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/james-little?a=QLFK9UmqN8s:wLTJvVRB2Uc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/james-little?i=QLFK9UmqN8s:wLTJvVRB2Uc:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/james-little/~4/QLFK9UmqN8s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jameslittle.me.uk/google-maps-precache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.jameslittle.me.uk/google-maps-precache/</feedburner:origLink></item>
		<item>
		<title>Giffgaff Review</title>
		<link>http://feedproxy.google.com/~r/james-little/~3/tMqyw-Ntemk/</link>
		<comments>http://www.jameslittle.me.uk/giffgaff-review/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 20:58:23 +0000</pubDate>
		<dc:creator>James Little</dc:creator>
				<category><![CDATA[giffgaff]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://www.jameslittle.me.uk/?p=88</guid>
		<description><![CDATA[{lang: 'en-GB'} Ditch your phone contract! &#8216;Coz with Giffgaff you can get unlimited data, 250 minutes any time/network and unlimited SMS for £10/month. And they&#8217;ll even throw in a FREE FIVER when you activate your SIM. I&#8217;ve been with Giffgaff for eight months now, and I&#8217;m impressed. They operate on the O2 network, so they [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/giffgaff-review/">{lang: 'en-GB'}</g:plusone></div><p><a href="http://giffgaff.com/orders/affiliate/jimlit" target="_blank"><img class="aligncenter size-medium wp-image-97" title="giffgaff" src="http://www.jameslittle.me.uk/wp-content/uploads/2011/03/giffgaff_logo-300x83.jpg" alt="giffgaff - the mobile network run by you" width="300" height="83" /></a></p>
<p>Ditch your phone contract! &#8216;Coz with <a href="http://www.giffgaff.com" target="_blank">Giffgaff</a> you can get unlimited data, 250 minutes any time/network and unlimited SMS for <strong>£10/month</strong>. And they&#8217;ll even throw in a <a href="#fiver">FREE FIVER</a> when you activate your SIM.</p>
<p>I&#8217;ve been with Giffgaff for eight months now, and I&#8217;m impressed. They operate on the O2 network, so they benefit from their infrastructure and signal quality, which seems to be pretty decent. At least it&#8217;s been rare that I&#8217;ve not had a 3G signal down here on the south coast, even in fairly rural areas. Anyway, this article is mainly to get you thinking about whether you <em>need</em> to be tied to<em> </em>that (expensive, long) mobile phone contract. In short, on giffgaff I&#8217;m currently spending £10/month in total including <strong>unlimited</strong> data, with <strong>no contract</strong>, and no hidden obligations. You <a href="http://giffgaff.com/orders/affiliate/jimlit" target="_blank">order a SIM card</a> (for free), it arrives, you top it up, and you forget about it. How do I get by on a tenner? Simples:</p>
<ul>
<li><strong>250 minutes</strong> of call time, any UK network, any time of day.</li>
<li><strong>Unlimited</strong> Texts</li>
<li><strong>Unlimited</strong> Data usage</li>
</ul>
<p><span id="more-88"></span> &#8212;&#8212;&#8211;</p>
<a name="Giffgaff+Goody+Bags"></a><h3>Giffgaff Goody Bags</h3>
<p>The <a href="http://giffgaff.com/goodybags" target="_blank">giffgaff goodybag</a> is essentially a pre-packaged mixture of data, minutes and SMS allowance that lasts for one month. The £10 goodybag gets you all the above, the £15 gets you even more, and so on, up to a maximum of 1500 inclusive minutes (which is £25/month). If you&#8217;re not in need of unlimited data, there&#8217;s also a £5 goodybag that gets you a bunch of free minutes and SMS.</p>
<p>When the goodybag expires, you still fall back to your regular &#8220;credit&#8221; balance, like a normal PAYG arrangement; <strong>that is &#8211; you don&#8217;t have to buy a goodybag</strong>. The regular PAYG tariff is still very competitive:</p>
<ul>
<li>10p/min calls to any UK network or landline, any time of day</li>
<li>6p/per text</li>
<li><strong>Free</strong> calls to other giffgaff users</li>
<li>0800 numbers are actually free</li>
<li>*Giffgaff goody bags expire (after one month), but normal credit doesn&#8217;t</li>
</ul>
<p>These charges are very reasonable indeed compared to the competition, but if you require unlimited data (i.e. you have an smartphone), in the long run you&#8217;re probably better off with a £10 goodybag. Basically my goodybag covers all my normal usage, and my balance is kind of a backup, for when my goodybag lapses, or if I want to do something not covered by a goodybag, like texting a foreign number. Also, bear in mind that you can set up auto-topups, so you can totally avoid any &#8220;running out of credit&#8221; situation. Plus giffgaff warn you by text before your goodybag expires.</p>
<a name="Do+you+really+need+a+contract%3F"></a><h3>Do you really need a contract?</h3>
<p>This may be a newsflash for contract owners: PAYG tariffs have changed! giffgaff isn&#8217;t the only operator offering unlimited data on a PAYG tariff; and you&#8217;ve heard of Skype right? Well:</p>
<p style="text-align: center;"><em>Smartphone + Wifi + Skype (or similar) = free calls</em></p>
<p>I&#8217;m not sure about the feasibility of VoIP on 3G, but presumably this will improve over time. Anyway, they have wifi in cafes now you know? And malls, and even train stations. What&#8217;s more, they have it in other countries too.</p>
<p>Few people seem to break down the real cost of their contract. Don&#8217;t pay £35/month just because you can afford to. Let&#8217;s face it, most people can afford to. But the conditions for contracts seem to have got substantially worse in the last couple of years (remember 12 month contracts?). Here&#8217;s a patronising formula for you:</p>
<p style="text-align: center;"><em>24 months x £35/mnth = £840</em></p>
<p>£840, that&#8217;s some phone. What does it do? Give you an Indian head massage before bed? Unless you need more than 250 mins of call-time, you could be spending just £240 over 2 years on giffgaff. And if you do need more than 250 mins, get a bigger goody bag: 400 mins for £15.  Oh yeah, but have you seen the price of iPhones? They cost hundreds anyway! Well that&#8217;s because apple are taking the p**s quite frankly. But it&#8217;s hardly your only option. I picked up a Google Nexus One on ebay for £200 (good as new), running Android 2.3 (Gingerbread).</p>
<p>Then there&#8217;s the lack of flexibility. 24 months? Some marriages don&#8217;t last that long! What if you take a job abroad for a few months, or go traveling? (you have seen the foreign call charges right?) You&#8217;re gonna want a local SIM, with data allowance, which (maybe surprisingly to some ripped-off Brits), pretty much any country will provide you with. I&#8217;ve been to Vietnam and paid less for data than I would here; just buy a local SIM (often free), plug it into your phone, and bask in the glory of not having a pointless UK contract.</p>
<p>All I&#8217;m saying is: think about the total cost of ownership of your contracted handset.</p>
<a name="How+do+I+get+the+free+%C2%A35%3F"></a><h3><a style="text-decoration: none; color: #000;" name="fiver"></a>How do I get the free £5?</h3>
<p>Giffgaff will boost your credit by £5 if you sign up via an affiliate link, such as (mine!):<br />
<a href="http://giffgaff.com/orders/affiliate/jimlit" target="_blank">http://giffgaff.com/orders/affiliate/jimlit</a><br />
The free fiver will be added after you have activated the SIM and made your first top-up, which is done online and takes no time. I also get £5 credit, so everyone&#8217;s a winner <img src='http://www.jameslittle.me.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<a name="Will+giffgaff+work+with+my+iPhone%3F"></a><h3>Will giffgaff work with my iPhone?</h3>
<p>Yes. giffgaff will work with any iPhone version. <strong>Importantly</strong>, it will even work with an O2-locked iPhone (which many are), since giffgaff operate on O2. I&#8217;m not an iPhone user, but it sounds as though you simply need to send a text message to giffgaff, and they reply with the settings for your iPhone. More details here:<br />
<a title="Does giffgaff SIM work with locked O2 iPhone?" href="http://community.giffgaff.com/t5/Help-Ask-the-community-got-stuck/Does-giffgaff-sim-work-with-locked-02-phone/td-p/28231">Does giffgaff SIM work with locked O2 iPhone?</a></p>
<p>Here&#8217;s an important point though &#8211; <strong>Giffgaff do not directly hand out Microsims</strong>. So you can either cut a regular SIM down to micro-size, as explained in numerous Youtube videos, or you can order a Microsim through the giffgaff community: <a href="http://apps.giffgaff.com/microgaff/" target="_blank">http://apps.giffgaff.com/microgaff/</a> instead.</p>
<p>If your iPhone is locked to a network other than O2, then you will need to get it unlocked first. Sometimes the network will do this officially, for a charge. Apparently Orange do this:<br />
<a title="Orange iPhone Unlock for £20" href="http://www.cableforum.co.uk/board/65/33664590-orange-iphone-unlock-for-20-a.html">Orange iPhone Unlock for £20</a><br />
And less &#8220;official&#8221; methods do exist. giffgaff have recently added a very thorough guide to legitimately unlocking various handsets (including the iPhone), which can be found at <a href="http://giffgaff.com/unlock" target="_blank">www.giffgaff.com/unlock</a>. It covers all the major UK networks.</p>
<p>Like Android phones, the iPhone is ideal for taking advantage of unlimited data with its feature-rich apps and background/sync tasks. The automated setup via SMS is also available for most Android phones.</p>
<a name="How+is+giffgaff+so+cheap%3F"></a><h3>How is giffgaff so cheap?</h3>
<p>Obviously I&#8217;m no expert in the financial operations of a telecoms provider, but I think it has something to do with their business model. They have a community support system on their forum, encouraging others to contribute to support issues (such as setting up internet on your Android handset, or the iPhone thread linked to above), and rewarding contributors with &#8220;kudos&#8221; points, which can be cashed in at a later date. They also have a referral scheme, offering customers £5 of credit for every friend they sign up. Yes, I&#8217;ll get a fiver if you click the link below and sign up <img src='http://www.jameslittle.me.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Why else do you think I&#8217;m spending 45 mins on a Tuesday night writing about this crap? Actually, I&#8217;ll tell you why: it&#8217;s because I get the feeling that giffgaff relies on this kind of promotion. So I&#8217;m spreading the word &#8211; I think it&#8217;s called viral marketing or something? Basically, I don&#8217;t want giffgaff to go bust because they&#8217;re saving me a sh*tload! Plus the more people there are on giffgaff, the more free calls I get!</p>
<p>An interesting blog article <a href="http://danceliketheydo.wordpress.com/2011/03/23/giff-gaff/" target="_blank">here</a> talks about giffgaff&#8217;s &#8220;non-advertising&#8221; approach.</p>
<a name="Any+bad+points%3F"></a><h3>Any bad points?</h3>
<p>One small gripe. A couple of times I&#8217;ve been blocked from certain websites because of &#8220;over 18 content&#8221;. It wasn&#8217;t a porn site, honest. Anyway, I shot them a message through the online login on their website and it seemed to clear the issue.<br />
I can&#8217;t really speak for their customer support quality, because I&#8217;ve had no issues. I am a fan of community-based support; you&#8217;ll often get a faster and more intelligent response than from someone in a generic call centre who&#8217;s handling calls for hundreds of companies(!). But I guess if you&#8217;re the kind of person that likes to phone someone up and ask &#8220;how do I turn on my phone?&#8221;, giffgaff might not be for you. Although for all I know, their phone support is great.</p>
<p>**UPDATE** Yes it seems they don&#8217;t offer phone support (as I suspected), and I guess this a major factor in keeping costs down.</p>
<div itemscope itemtype="http://schema.org/Product">
<a name="Giffgaff+SIM+Card"></a><h3><span itemprop="name">Giffgaff SIM Card</span></h3>
<p>  <img src="http://www.jameslittle.me.uk/images/giffgaff_sim.png" alt='Giffgaff SIM' /><br />
  So what are you waiting for?<br />
  Get your <span itemprop="description">free Giffgaff SIM with &pound;5 credit </span><a itemprop="url" href="http://giffgaff.com/orders/affiliate/jimlit" target="_blank">HERE</a></p>
<div id="rate"></div>
<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
<p>   Rated <span itemprop="ratingValue">4.41</span>/5<br />
   based on <span itemprop="reviewCount">42</span> customer reviews
  </div>
</div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/giffgaff-review/">{lang: 'en-GB'}</g:plusone></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/james-little?a=tMqyw-Ntemk:UJSzLLP5FcQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/james-little?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/james-little?a=tMqyw-Ntemk:UJSzLLP5FcQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/james-little?i=tMqyw-Ntemk:UJSzLLP5FcQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/james-little/~4/tMqyw-Ntemk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jameslittle.me.uk/giffgaff-review/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
		<feedburner:origLink>http://www.jameslittle.me.uk/giffgaff-review/</feedburner:origLink></item>
		<item>
		<title>The Asus Eee PC 1005PE &amp; Ubuntu</title>
		<link>http://feedproxy.google.com/~r/james-little/~3/TFKv4oi-CHY/</link>
		<comments>http://www.jameslittle.me.uk/asus-1005pe-ubuntu/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 06:13:42 +0000</pubDate>
		<dc:creator>James Little</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[drivers]]></category>
		<category><![CDATA[netbook]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.jameslittle.me.uk/?p=61</guid>
		<description><![CDATA[{lang: 'en-GB'}It seems there&#8217;s some mixed information about whether the wireless chip in this model works out-of-the-box with Ubuntu. I&#8217;ve tested with Karmic and the Lucid Beta (Netbook Remix versions) and for me it didn&#8217;t work. The chip in my model is the Atheros AR2427, which although not a new chip, seems to have an [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/asus-1005pe-ubuntu/">{lang: 'en-GB'}</g:plusone></div><p>It seems there&#8217;s some <a href="https://wiki.ubuntu.com/HardwareSupport/Machines/Netbooks#Asus%20Eee%20PC%201005PE" target="_blank">mixed information</a> about whether the wireless chip in this model works out-of-the-box with Ubuntu. I&#8217;ve tested with Karmic and the Lucid Beta (Netbook Remix versions) and for me it didn&#8217;t work. The chip in my model is the Atheros AR2427, which although not a new chip, seems to have an an unfamiliar hardware device ID of <code>002c</code>, and so is not picked up by the ath9k wifi driver found in the kernel. The driver has been patched by the <a href="http://wireless.kernel.org/" target="_blank">Linux Wireless</a> developers but this patch has not worked its way into a kernel release yet, so the solution is to compile and install the latest bleeding edge wireless drivers, which is actually a pretty painless operation. It&#8217;s also a very safe operation, because the installer leaves the original kernel drivers intact and provides an uninstall script; but I have not needed to revert.</p>
<p><span id="more-61"></span> In order to compile the driver you&#8217;ll need at least a C compiler and the make utility, so I suggest installing the build-essential package:</p>
<p><code>sudo apt-get install build-essential</code><br />
You&#8217;ll need an internet connection to download packages via apt-get, so hook up to a router using a network cable if possible. If not, then download the package from packages.ubuntu.com. For Karmic for example: <a href="http://packages.ubuntu.com/karmic/devel/build-essential" target="_blank">http://packages.ubuntu.com/karmic/devel/build-essential</a>. Then use a USB key to transfer the package to your netbook and run <code>dpkg -i &lt;<em>file_name&gt;</em></code> to install.</p>
<p>You&#8217;ll also need your kernel headers installed, but they should be by default. Double check that the directory <code>/lib/modules/`uname -r`/build</code> exists.</p>
<p>Download the latest bleeding edge (updated every day) drivers from <a href="http://wireless.kernel.org/download/compat-wireless-2.6/compat-wireless-2.6.tar.bz2">http://wireless.kernel.org/download/compat-wireless-2.6/compat-wireless-2.6.tar.bz2</a>. Unwrap the tarball and cd into the resulting directory:<br />
<code>james@netbook:~$ tar -xvjf compat-wireless-2.6.tar.bz2<br />
james@netbook:~$ cd compat-wireless-2010-03-31</code></p>
<p><em>Notice that the directory name will change depending on what day you downloaded <img src='http://www.jameslittle.me.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<p>The AR2427 chip is covered by the ath9k driver, so we prep the make utility for making this driver:<br />
<code>$james@netbook:~/compat-wireless-2010-03-31$ ./scripts/driver-select ath9k</code></p>
<p>And then build and install:<br />
<code>james@netbook:~$ make<br />
james@netbook:~/compat-wireless-2010-03-31$ <strong>sudo</strong> make install</code></p>
<p>This will take a couple of minutes. After installation you should just need to modprobe the driver:<br />
<code>james@netbook:~/compat-wireless-2010-03-31$ sudo modprobe ath9k</code></p>
<p>and the device will appear under <code>iwconfig</code> and also a new icon at the top of the screen. To double check you have the right driver installed and active, run a modinfo:<br />
<code>james@netbook:~/compat-wireless-2010-03-31$ modinfo ath9k<br />
filename:       /lib/modules/2.6.32-18-generic/updates/drivers/net/wireless/ath/ath9k/ath9k.ko<br />
license:        Dual BSD/GPL<br />
description:    Support for Atheros 802.11n wireless LAN cards.<br />
author:         Atheros Communications<br />
srcversion:     A50A865BAAB45E03B5852F0<br />
alias:          pci:v0000168Cd0000002Esv*sd*bc*sc*i*<br />
alias:          pci:v0000168Cd0000002Dsv*sd*bc*sc*i*<br />
<strong> alias:          pci:v0000168Cd0000002Csv*sd*bc*sc*i*</strong><br />
alias:          pci:v0000168Cd0000002Bsv*sd*bc*sc*i*<br />
alias:          pci:v0000168Cd0000002Asv*sd*bc*sc*i*<br />
alias:          pci:v0000168Cd00000029sv*sd*bc*sc*i*<br />
alias:          pci:v0000168Cd00000027sv*sd*bc*sc*i*<br />
alias:          pci:v0000168Cd00000024sv*sd*bc*sc*i*<br />
alias:          pci:v0000168Cd00000023sv*sd*bc*sc*i*<br />
depends:        ath9k_hw,mac80211,led-class,ath,cfg80211,ath9k_common<br />
vermagic:       2.6.32-18-generic SMP mod_unload modversions 586<br />
parm:           debug:Debugging mask (uint)<br />
parm:           nohwcrypt:Disable hardware encryption (int)</code></p>
<p>The important line is in bold because this is the new device ID for the 1005PE&#8217;s chip, and the one that was added to the driver by the recent patch.</p>
<p>Compiling and installing the driver should work for earlier versions of Ubuntu too.</p>
<p>Aside from the wifi issue, there is also some strange behaviour when using the brightness buttons on the keyboard, but I can live with that for now. Everything else seems to work nicely and Lucid Beta1 seems very stable.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/asus-1005pe-ubuntu/">{lang: 'en-GB'}</g:plusone></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/james-little?a=TFKv4oi-CHY:95mNuaEhqbs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/james-little?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/james-little?a=TFKv4oi-CHY:95mNuaEhqbs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/james-little?i=TFKv4oi-CHY:95mNuaEhqbs:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/james-little/~4/TFKv4oi-CHY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jameslittle.me.uk/asus-1005pe-ubuntu/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://www.jameslittle.me.uk/asus-1005pe-ubuntu/</feedburner:origLink></item>
		<item>
		<title>Call to undefined function imagetypes()</title>
		<link>http://feedproxy.google.com/~r/james-little/~3/QlJHJ9VS5lA/</link>
		<comments>http://www.jameslittle.me.uk/call-to-undefined-function-imagetypes/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 00:56:29 +0000</pubDate>
		<dc:creator>James Little</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.jameslittle.me.uk/?p=51</guid>
		<description><![CDATA[{lang: 'en-GB'}I came across this PHP error after installing the WordPress plugin Contact Form 7 and then using Really Simple CAPTCHA. The exact error given was: Fatal error: Call to undefined function imagetypes() in ... on line 201. After searching around for a while, I found that the GD library is required on the server, [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/call-to-undefined-function-imagetypes/">{lang: 'en-GB'}</g:plusone></div><p>I came across this PHP error after installing the WordPress plugin Contact Form 7 and then using <a href="http://wordpress.org/extend/plugins/really-simple-captcha/" target="_blank">Really Simple CAPTCHA</a>. The exact error given was:<br />
<code>Fatal error: Call to undefined function imagetypes() in ... on line 201.</code></p>
<p>After searching around for a while, I found that the <a href="http://www.boutell.com/gd/">GD library</a> is required on the server, and (on linux at least) it&#8217;s a simple case of installing the library from the repository. So on Ubuntu/Debian, run:<br />
<code>sudo apt-get install php5-gd</code></p>
<p>and on Redhat/CentOS, etc. <code>sudo yum install php-gd</code> should do the trick. This will install several dependencies, such as the underlying C Library itself.</p>
<p>Obviously if you don&#8217;t have full control over your server, you will have to ask your hosting company or administrator to do this for you.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/call-to-undefined-function-imagetypes/">{lang: 'en-GB'}</g:plusone></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/james-little?a=QlJHJ9VS5lA:XJJHuQPEGkU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/james-little?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/james-little?a=QlJHJ9VS5lA:XJJHuQPEGkU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/james-little?i=QlJHJ9VS5lA:XJJHuQPEGkU:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/james-little/~4/QlJHJ9VS5lA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jameslittle.me.uk/call-to-undefined-function-imagetypes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.jameslittle.me.uk/call-to-undefined-function-imagetypes/</feedburner:origLink></item>
		<item>
		<title>Macbook Uptime</title>
		<link>http://feedproxy.google.com/~r/james-little/~3/0Z__ZfVEO7c/</link>
		<comments>http://www.jameslittle.me.uk/macbook-uptime/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 07:46:24 +0000</pubDate>
		<dc:creator>James Little</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[macbook]]></category>

		<guid isPermaLink="false">http://www.jameslittle.me.uk/?p=31</guid>
		<description><![CDATA[{lang: 'en-GB'}I knew there was a reason I bought a Mac! 47 days of uptime is pretty impressive for any non-server system, let alone a laptop which often rattles around in my bag (when cycling), comes on holiday, stays &#8220;asleep&#8221; for a whole weekend, etc. etc. And I guess that&#8217;s the point really: the sleep [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/macbook-uptime/">{lang: 'en-GB'}</g:plusone></div><p>I knew there was a reason I bought a Mac! 47 days of uptime is pretty impressive for any non-server system, let alone a laptop which often rattles around in my bag (when cycling), comes on holiday, stays &#8220;asleep&#8221; for a whole weekend, etc. etc.</p>
<div id="attachment_35" class="wp-caption aligncenter" style="width: 616px"><a href="http://www.jameslittle.me.uk/wp-content/uploads/2009/10/macbook_uptime2.jpg"><img class="size-full wp-image-35" title="macbook uptime" src="http://www.jameslittle.me.uk/wp-content/uploads/2009/10/macbook_uptime2.jpg" alt="My Macbook's Uptime" width="606" height="258" /></a><p class="wp-caption-text">My Macbook&#39;s Uptime</p></div>
<p>And I guess that&#8217;s the point really: the sleep function on Apple&#8217;s laptops &#8220;just works&#8221;. In this case I only had to reboot after 47 days for a system update. Of course, it&#8217;s generally easy to avoid reboots on most *nix systems, but I&#8217;m yet to find a Linux desktop distro/hardware combination where the sleep function reliably works. If anyone out there would like to correct me, that would be most appreciated <img src='http://www.jameslittle.me.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Also, who can beat 47 days on a Macbook (or MB Pro)?</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/macbook-uptime/">{lang: 'en-GB'}</g:plusone></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/james-little?a=0Z__ZfVEO7c:9ICREMI8FPo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/james-little?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/james-little?a=0Z__ZfVEO7c:9ICREMI8FPo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/james-little?i=0Z__ZfVEO7c:9ICREMI8FPo:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/james-little/~4/0Z__ZfVEO7c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jameslittle.me.uk/macbook-uptime/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.jameslittle.me.uk/macbook-uptime/</feedburner:origLink></item>
		<item>
		<title>Detect visitor’s country with PHP &amp; MySQL</title>
		<link>http://feedproxy.google.com/~r/james-little/~3/BREUId9hgAA/</link>
		<comments>http://www.jameslittle.me.uk/detect-visitors-country-with-php-mysql/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 10:17:56 +0000</pubDate>
		<dc:creator>James Little</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.jameslittle.me.uk/detect-visitors-country-with-php-mysql/</guid>
		<description><![CDATA[{lang: 'en-GB'}Of course you don&#8217;t have to use PHP, or MySQL for that matter. But it&#8217;s my method of choice for most web apps, and it&#8217;s also a pretty common one. The general gist is to do a lookup on a database of geographical locations for IP addresses, having taken your visitor&#8217;s IP address from [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/detect-visitors-country-with-php-mysql/">{lang: 'en-GB'}</g:plusone></div><p>Of course you don&#8217;t have to use PHP, or MySQL for that matter. But it&#8217;s my method of choice for most web apps, and it&#8217;s also a pretty common one. The general gist is to do a lookup on a database of geographical locations for IP addresses, having taken your visitor&#8217;s IP address from the PHP superglobal array <a href="http://www.php.net/reserved.variables.server" target="_blank">$_SERVER</a>. Yes there are caveats: the database is not 100% complete/accurate, and some ISPs (like AOL!) use proxies across different countries so the user will appear to come from somewhere other than their true country of origin. Boo hoo, let&#8217;s do it anyway; <a href="http://www.maxmind.com/app/geolitecountry" target="_blank">according to MaxMind</a>, their free(!) GeoLite Country database is 99.3% accurate, and their licensed version, 99.8%.</p>
<p>The database is released monthly in CSV format, so I&#8217;ll have to import it into MySQL using <a href="http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html" target="_blank">mysqlimport</a>, or <a href="http://dev.mysql.com/doc/refman/5.0/en/load-data.html" target="_blank">LOAD DATA INFILE</a>. I prefer the first option. Those of you that are MySQL fans probably know that there is a <a href="http://dev.mysql.com/tech-resources/articles/csv-storage-engine.html" target="_blank">CSV storage engine</a> available, but that&#8217;s only in version 5.1 which is still in Release Candidate stage, so I&#8217;ll stick to mysqlimport.</p>
<p><a href="http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip" target="_blank">Download the GeoLite database</a> from Maxmind, extract the CSV file and rename it to something more convenient; mysqlimport uses the filename for the name of the MySQL table it imports into:</p>
<pre class="brush: bash; gutter: false; first-line: 1; highlight: []; html-script: false">root@jim-desktop:/home/jim/data# wget http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
root@jim-desktop:/home/jim/data# unzip GeoIPCountryCSV.zip
root@jim-desktop:/home/jim/data# mv GeoIPCountryWhois.csv geo_csv.csv</pre>
<p>Before we import the data into MySQL we need to create a table for it to go into. The following DDL accurately describes the structure of the data. Obviously create a new database if you want; here I have one called geo_ip:</p>
<pre class="brush: sql; gutter: false">CREATE TABLE  `geo_ip`.`geo_csv` (
 `start_ip` char(15) NOT NULL,
 `end_ip` char(15) NOT NULL,
 `start` int(10) unsigned NOT NULL,
 `end` int(10) unsigned NOT NULL,
 `cc` char(2) NOT NULL,
 `cn` varchar(50) NOT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1</pre>
<p>If you look at the data in the CSV file you&#8217;ll see it&#8217;s delimited by commas and the text is qualified by double quotes. With that in mind, we use the following statement to import the data:</p>
<pre class="brush: bash; gutter: false; first-line: 1; highlight: []; html-script: false">root@jim-desktop:/home/jim/data# mysqlimport --fields-terminated-by=&quot;,&quot;  --fields-optionally-enclosed-by=&quot;\&quot;&quot; --lines-terminated-by=&quot;\n&quot; geo_ip /home/jim/data/geo_csv.csv
geo_ip.geo_csv: Records: 102957  Deleted: 0  Skipped: 0  Warnings: 0</pre>
<p>If the mysqlimport binary is not in your environment path, use locate to find it. If you don&#8217;t have it at all then use LOAD DATA INFILE.</p>
<p>So we now have the raw data imported into MySQL, but how do we use it? First let&#8217;s take a look at the data:</p>
<pre class="brush: shell; gutter: false">mysql&gt; select * from geo_csv order by rand() limit 10;
 +---------------+----------------+------------+------------+----+----------------+
 | start_ip      | end_ip         | start      | end        | cc | cn             |
 +---------------+----------------+------------+------------+----+----------------+
 | 207.209.7.0   | 207.209.7.255  | 3486582528 | 3486582783 | AU | Australia      |
 | 79.99.200.0   | 79.99.207.255  | 1331939328 | 1331941375 | BE | Belgium        |
 | 217.27.192.0  | 217.27.207.255 | 3642474496 | 3642478591 | DE | Germany        |
 | 194.59.180.0  | 194.59.180.255 | 3258692608 | 3258692863 | FR | France         |
 | 81.16.160.0   | 81.16.175.255  | 1360044032 | 1360048127 | SE | Sweden         |
 | 62.23.198.192 | 62.23.198.207  | 1041745600 | 1041745615 | GB | United Kingdom |
 | 64.49.231.240 | 64.49.232.15   | 1077012464 | 1077012495 | US | United States  |
 | 83.217.68.32  | 83.217.68.95   | 1406747680 | 1406747743 | BE | Belgium        |
 | 91.193.20.0   | 91.193.23.255  | 1539380224 | 1539381247 | CH | Switzerland    |
 | 194.37.249.0  | 194.37.249.255 | 3257268480 | 3257268735 | SE | Sweden         |
 +---------------+----------------+------------+------------+----+----------------+
 10 rows in set (0.22 sec)</pre>
<p>The table is essentially a big list (~103k records) of IP ranges, given in both <a href="http://en.wikipedia.org/wiki/IPv4#Address_representations" target="_blank">dot-decimal and decimal form</a>. The decimal form is the most efficient to search on as the datatype int requires less memory than char, and with integers we can reliably make use of operators such as greater than, less than, BETWEEN, etc. Exactly how you will use the data will depend on your scenario. I began looking into this when I was working on a German website that wanted to know when a visitor was from Switzerland, so it could display prices in CHF rather than Euros. So in fact, all I needed to know was whether the visitor was Swiss, and if they were from any other country, they would see Euros. So the only columns I&#8217;ll need from the table are start and end, and all the rows belonging to Switzerland, or &#8216;CH&#8217;. So to make searches more efficient I&#8217;ll grab only the data I need and put it in a new table called ch_ip:</p>
<pre class="brush: bash; gutter: false; first-line: 1; highlight: []; html-script: false">mysql&gt; create table ch_ip as select start,end from geo_csv where cc=&#039;CH&#039;;
Query OK, 2023 rows affected (0.05 sec)
Records: 2023  Duplicates: 0  Warnings: 0</pre>
<p>Great, that&#8217;s cut the data from nearly 103 thousand records to just over 2 thousand, and we&#8217;ve also lopped off four columns. I&#8217;ll now be searching on a table that&#8217;s 18K in size, rather than the original 5.3MB. Maybe you need every row of data in your scenario, but in many cases you only need a fraction. And in any case, you really don&#8217;t need the start_ip and end_ip columns (as you will see shortly). You could also split off the country names (cn column) into another table so that cc becomes a foreign key. Or you could ditch the country names completely and create an array of CC =&gt; CN in your application; there are only 239 unique CCs after all:</p>
<pre class="brush: bash; gutter: false">mysql&gt; select count(distinct cc) from geo_csv;
 +--------------------+
 | count(distinct cc) |
 +--------------------+
 |                239 |
 +--------------------+
 1 row in set (0.05 sec)</pre>
<p>So I have my table of 2,023 Swiss IP ranges. Now I need to grab a visitor&#8217;s IP address and convert it into decimal notation. For this we can use PHP&#8217;s built-in function <a href="http://www.php.net/ip2long" target="_blank">ip2long</a>. We use sprintf to ensure the result is always unsigned:</p>
<pre class="brush: php; gutter: false">&lt;?php  $ip_num = sprintf(&quot;%u&quot;, ip2long($_SERVER[&#039;REMOTE_ADDR&#039;]));  ?&gt;</pre>
<p>Once we have $ip_num we can create our MySQL query:</p>
<pre class="brush: bash; gutter: false; first-line: 1; highlight: []; html-script: false">$qry = &quot;SELECT &#039;&#039; FROM ch_ip WHERE $ip_num BETWEEN start AND end&quot;;</pre>
<p>All we need to know is whether the query returns &gt; 0 rows. If it does, then the visitor is Swiss and we&#8217;ll set their locale appropriately. Obviously we don&#8217;t want to be performing this query on every page, so once it has been performed once for the visitor we&#8217;ll set a session variable. So the final code looks like this:</p>
<pre class="brush: php; gutter: false">&lt;?php 

session_start();
if (!session_is_registered(&quot;locale&quot;)) { //check if the session variable has already been set first
    $con = mysql_connect(&#039;localhost&#039;, &#039;geo_user&#039;, &#039;geo_password&#039;);
    if ($con) {
        $ip_num = sprintf(&quot;%u&quot;, ip2long($_SERVER[&#039;REMOTE_ADDR&#039;]));
        mysql_select_db(&quot;geo_ip&quot;, $con);
        $result = mysql_query( &quot;SELECT &#039;&#039; FROM ch_ip WHERE $ip_num BETWEEN start AND end&quot; );
        $num_rows = mysql_num_rows($result);
        if ($num_rows &gt; 0) {
            $_SESSION[&#039;locale&#039;] = &quot;ch&quot;;
        }
        else { $_SESSION[&#039;locale&#039;] = &quot;de&quot;; }
    }
    else { $_SESSION[&#039;locale&#039;] = &quot;de&quot;; //If no db connection can be made then set their locale to German }
};

?&gt;</pre>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/detect-visitors-country-with-php-mysql/">{lang: 'en-GB'}</g:plusone></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/james-little?a=BREUId9hgAA:CdieVnd5rxQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/james-little?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/james-little?a=BREUId9hgAA:CdieVnd5rxQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/james-little?i=BREUId9hgAA:CdieVnd5rxQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/james-little/~4/BREUId9hgAA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jameslittle.me.uk/detect-visitors-country-with-php-mysql/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://www.jameslittle.me.uk/detect-visitors-country-with-php-mysql/</feedburner:origLink></item>
		<item>
		<title>mysqlslap for MySQL 5.0</title>
		<link>http://feedproxy.google.com/~r/james-little/~3/QCH8eDutkV8/</link>
		<comments>http://www.jameslittle.me.uk/mysqlslap-for-mysql-50/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 07:18:13 +0000</pubDate>
		<dc:creator>James Little</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[mysqlslap]]></category>

		<guid isPermaLink="false">http://www.jameslittle.me.uk/mysqlslap-for-mysql-50/</guid>
		<description><![CDATA[{lang: 'en-GB'}mysqlslap is a very useful tool for emulating client load, something that would normally be very difficult in the real world (until you go live!). The binary is bundled into the MySQL 5.1 releases (still at Release Candidate stage) but not 5.0, so the only option is to compile from 5.1 source and then [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/mysqlslap-for-mysql-50/">{lang: 'en-GB'}</g:plusone></div><p>mysqlslap is a very useful tool for emulating client load, something that would normally be very difficult in the real world (until you go live!). The binary is bundled into the MySQL 5.1 releases (still at Release Candidate stage) but not 5.0, so the only option is to compile from 5.1 source and then you can use it with your 5.0 server installation.</p>
<p>Fortunately when compiling you can save some time by configuring with the <code>--without-server</code> option, which will compile just the client tools (mysqldump, mysqlbinlog, mysql CLI, etc.). The following worked for me on an installation of CentOS5 64-bit, on the same machine that runs my 5.0 server.</p>
<p>1. Download the MySQL 5.1 source code in compressed tar format (.tar.gz). Go to the <a href="http://dev.mysql.com/downloads/mysql/5.1.html#source">download page</a>, or do a wget (in my case from the Mirror Service from the University of Kent, UK). Version  5.1.23-rc was current at the time of writing:<br />
<code>wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.23-rc.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/</code></p>
<p>2. Unpack the archive:<br />
<code>tar -xvvzf mysql-5.1.23-rc.tar.gz</code></p>
<p>3. Install required development packages and compile:<br />
<code>cd mysql-5.1.23-rc<br />
yum install glibc gcc libtool ncurses-devel gcc-c++<br />
./configure --without-server --disable-shared<br />
make<br />
make install</code></p>
<p>The &#8216;make&#8217; stage will take some time. Why configure with <code>--disable-shared</code>? I wanted my binary to be portable so I could share amongst a group of similar-spec machines, and I can&#8217;t be sure that the shared libraries are all in the same location. See the <a href="http://dev.mysql.com/doc/refman/5.1/en/configure-options.html" target="_blank">MySQL Installation pages</a> for more details on configuration options; you may want to make use of <code>--libdir=...</code> instead.</p>
<p>4. Copy/move the mysqlslap binary (it will be in /usr/local/bin  by default) to wherever the rest of your v5.0 client binaries are. For example:<br />
<code>cp /usr/local/bin/mysqlslap  /usr/local/mysql/bin/mysqlslap</code><br />
5. Test it out! Run something like:<br />
<code>./mysqlslap --user=root --auto-generate-sql --concurrency=100 --iterations=5</code><br />
as a quick test, and check out the <a href="http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html" target="_blank">MySQL Documentation</a> for a more detailed use-guide.</p>
<p>Since compiling I have thrown the binary around various other Intel machines (and VMs) running CentOS, without any problems.<span id="more-21"></span><!--more--></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/mysqlslap-for-mysql-50/">{lang: 'en-GB'}</g:plusone></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/james-little?a=QCH8eDutkV8:BlB9pzCnY9k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/james-little?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/james-little?a=QCH8eDutkV8:BlB9pzCnY9k:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/james-little?i=QCH8eDutkV8:BlB9pzCnY9k:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/james-little/~4/QCH8eDutkV8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jameslittle.me.uk/mysqlslap-for-mysql-50/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.jameslittle.me.uk/mysqlslap-for-mysql-50/</feedburner:origLink></item>
		<item>
		<title>mprime for Mac</title>
		<link>http://feedproxy.google.com/~r/james-little/~3/m2ykMLWZt7c/</link>
		<comments>http://www.jameslittle.me.uk/mprime-for-mac/#comments</comments>
		<pubDate>Sat, 08 Mar 2008 13:50:04 +0000</pubDate>
		<dc:creator>James Little</dc:creator>
				<category><![CDATA[Mathematics]]></category>
		<category><![CDATA[number theory]]></category>

		<guid isPermaLink="false">http://www.jameslittle.me.uk/mprime-for-mac/</guid>
		<description><![CDATA[{lang: 'en-GB'}For those of you that don&#8217;t know what a Mersenne Prime is (most people I suspect), it&#8217;s a prime number of the form 2^n -1 where n is a natural number. The largest known prime number, 2^32,582,657 -1 is a Mersenne prime. Many, no doubt fascinating individuals (like me for example) like the idea [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/mprime-for-mac/">{lang: 'en-GB'}</g:plusone></div><p>For those of you that don&#8217;t know what a Mersenne Prime is (most people I suspect), it&#8217;s a prime number of the form 2^n -1 where n is a <a href="http://en.wikipedia.org/wiki/Natural_number" target="_blank">natural number</a>. The largest known prime number, 2^32,582,657 -1 is a Mersenne prime.  Many, no doubt fascinating individuals (like me for example) like the idea of finding the first prime number that is &gt; 10 million digits long because 1) there&#8217;s a $100,000 reward and 2) because it would be cool (sort of). Check out <a href="http://www.mersenne.org/" target="_blank">GIMPS</a> and <a href="http://en.wikipedia.org/wiki/Mersenne_prime" target="_blank">Wikipedia</a> for more info.</p>
<p>I searched around for ages for a version of mprime (highly optimized software used to search for Mersenne Primes) compiled for Intel Macs and didn&#8217;t have much luck; for some reason it doesn&#8217;t seem to be linked from the GIMPS website. Eventually I found a random link to <a href="http://www.mersenne.org/gimps" target="_blank">this page</a> which contains all the software downloads. So if you want to contribute to the worldwide distributed search and you use a Mac, please download it. And you never know, you might get lucky!</p>
<p><em> For those of you that couldn&#8217;t care less about Mersenne primes (most people I suspect), but want to do some stress testing/benchmarking  on their Mac, mprime is a very useful tool. Overclockers of the Windows variety will be familiar with the Prime95 app, a Windows GUI version of mprime. </em></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/mprime-for-mac/">{lang: 'en-GB'}</g:plusone></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/james-little?a=m2ykMLWZt7c:naenCx7a4PU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/james-little?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/james-little?a=m2ykMLWZt7c:naenCx7a4PU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/james-little?i=m2ykMLWZt7c:naenCx7a4PU:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/james-little/~4/m2ykMLWZt7c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jameslittle.me.uk/mprime-for-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.jameslittle.me.uk/mprime-for-mac/</feedburner:origLink></item>
		<item>
		<title>Installing CentOS 5 on a Dell R200</title>
		<link>http://feedproxy.google.com/~r/james-little/~3/T3vXP7CrN5Y/</link>
		<comments>http://www.jameslittle.me.uk/installing-centos-5-on-a-dell-r200/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 11:51:38 +0000</pubDate>
		<dc:creator>James Little</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[dell]]></category>
		<category><![CDATA[drivers]]></category>

		<guid isPermaLink="false">http://www.jameslittle.me.uk/installing-centos-5-on-a-dell-r200/</guid>
		<description><![CDATA[{lang: 'en-GB'}This is the latest value rackmount offering from Dell. It&#8217;s a great spec for the price, but installation of CentOS 5 seems surprisingly difficult, thanks to the SATA DVD drive used in the unit. RHEL/CentOS doesn&#8217;t have the driver for the controller so can&#8217;t find the DVD during installation. I&#8217;m sure there are other [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/installing-centos-5-on-a-dell-r200/">{lang: 'en-GB'}</g:plusone></div><p>This is the latest value rackmount offering from Dell. It&#8217;s a great spec for the price,  but installation of CentOS 5 seems surprisingly difficult, thanks to the SATA DVD drive used in the unit. RHEL/CentOS doesn&#8217;t have the driver for the controller so can&#8217;t find the DVD during installation. I&#8217;m sure there are other workarounds (network install, USB DVD drive etc.), but eventually I got hold of a Redhat driver disk from Dell Support (it doesn&#8217;t seem to be on the Dell site btw).</p>
<p>I&#8217;ve uploaded the disk image <a href="http://www.jameslittle.me.uk/wp-content/uploads/2008/02/ata_piix-2001dell-manykernels-ddimg.gz">here</a>; just uncompress it and <strong>copy the .img file</strong> onto a USB key. At the installation command-prompt type &#8216;linux dd&#8217; and then hit Enter. You&#8217;ll then be asked for the location of the driver disk image; just navigate to the USB disk, select the image, and you&#8217;re in business.</p>
<p><a title="SATA driver disk" href="http://www.jameslittle.me.uk/wp-content/uploads/2008/02/ata_piix-2001dell-manykernels-ddimg.gz">SATA driver disk<br />
<a href="http://www.jameslittle.me.uk/wp-content/uploads/2008/02/ata_piix-2001dell-manykernels-ddimg.zip">.</a></a><a href="http://www.jameslittle.me.uk/wp-content/uploads/2008/02/ata_piix-2001dell-manykernels-ddimg.zip">zip version</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/installing-centos-5-on-a-dell-r200/">{lang: 'en-GB'}</g:plusone></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/james-little?a=T3vXP7CrN5Y:dsPPlGTLptE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/james-little?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/james-little?a=T3vXP7CrN5Y:dsPPlGTLptE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/james-little?i=T3vXP7CrN5Y:dsPPlGTLptE:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/james-little/~4/T3vXP7CrN5Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jameslittle.me.uk/installing-centos-5-on-a-dell-r200/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://www.jameslittle.me.uk/installing-centos-5-on-a-dell-r200/</feedburner:origLink></item>
		<item>
		<title>How to Access MySQL with an SSH Tunnel</title>
		<link>http://feedproxy.google.com/~r/james-little/~3/bxBO3vQs1X4/</link>
		<comments>http://www.jameslittle.me.uk/how-to-access-mysql-with-an-ssh-tunnel/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 14:18:24 +0000</pubDate>
		<dc:creator>James Little</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.jameslittle.me.uk/how-to-access-mysql-with-an-ssh-tunnel/</guid>
		<description><![CDATA[{lang: 'en-GB'}This is a particularly useful method for gaining access to your remote MySQL databases, such as those held on a web hosting account where the MySQL port may not be open. You can use this method to gain access to other services too (SMTP, IMAP, FTP), but in this post I&#8217;ll explain how I [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/how-to-access-mysql-with-an-ssh-tunnel/">{lang: 'en-GB'}</g:plusone></div><p>This is a particularly useful method for gaining access to your remote MySQL databases, such as those held on a  web hosting account where the MySQL port may not be open. You can use this method to gain access to other services too (SMTP, IMAP, FTP), but in this post I&#8217;ll explain how I use it in combination with <a href="http://www.mysql.com/products/tools/query-browser/" target="_blank">MySQL Query Browser</a> to administrate my DBs with a GUI. You need to have SSH access to your remote server (normally over port 22) for this to work. My instructions are for Ubuntu but it&#8217;s easily transferred to other distros, Mac OS X, and Windows (just download an SSH client).</p>
<p>Run <code>sudo apt-get install ssh</code> if it isn&#8217;t installed already, which will install several SSH connectivity tools (more info <a href="http://www.openssh.com/" target="_blank">here</a>). Query Browser is an excellent tool with which to run queries, updates, create views and stored procedures, and loads more besides. Run <code>sudo apt-get install mysql-query-browser</code>. Now to create the SSH tunnel by using port forwarding; here&#8217;s how I access a MySQL instance on my local network:<br />
<code>james@james-laptop:~$ ssh -L 3307:localhost:3306 root@192.168.1.211<br />
root@192.168.1.211's password:</code></p>
<p>Essentially this forwards all traffic on port 3307 on the local machine (james-laptop) to port 3306 on 192.168.1.211. The general format is <code><br />
ssh -L localport:host:hostport</code>. Note that in my example I used localhost, but this is resolved after the connection has been made to 192.168.1.211 and so it refers to that IP address.</p>
<p>Effectively we can now access port 3306 (the default MySQL port) on 192.168.1.211 via port 3307 on james-laptop even though port 22 (the SSH port) is the only port open on 192.168.1.211. Keep the connection open (i.e. don&#8217;t close the terminal) and open Query Browser. In the connection dialogue set the hostname to 127.0.0.1 and the port to 3307 and enter a username/password as required. Hit connect and you should see a graphical representation of your database(s). Note that in *nix OSs (including Mac OS X) you must use 127.0.0.1 rather than &#8216;localhost&#8217; or the connection will be made via a named pipe rather than TCP.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="medium" count="" href="http://www.jameslittle.me.uk/how-to-access-mysql-with-an-ssh-tunnel/">{lang: 'en-GB'}</g:plusone></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/james-little?a=bxBO3vQs1X4:eTta5gcZp4o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/james-little?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/james-little?a=bxBO3vQs1X4:eTta5gcZp4o:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/james-little?i=bxBO3vQs1X4:eTta5gcZp4o:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/james-little/~4/bxBO3vQs1X4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jameslittle.me.uk/how-to-access-mysql-with-an-ssh-tunnel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.jameslittle.me.uk/how-to-access-mysql-with-an-ssh-tunnel/</feedburner:origLink></item>
	</channel>
</rss>

