<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>The Watchmaker Project Tumblelog</title>
		<link>http://www.thewatchmakerproject.com/</link>
		<description>Blog entries, links, thoughts, videos, and quotes by The Watchmaker Project.</description>
		<dc:language>en</dc:language>
		<dc:creator>rss@thewatchmakerproject.com</dc:creator>
		<dc:rights>Copyright 2010</dc:rights>
		<dc:date>2010-07-23T15:44:47+00:00</dc:date>
		<admin:generatorAgent rdf:resource="http://expressionengine.com/" />
		
			<item>
				<title>Using URL rewrites to make ExpressionEngine, Campaign Monitor &amp;amp; Google Analytics play nice</title>
				<link>http://newism.com.au/blog/post/56/expressionengine-campaign-monitor-google-analytics-and-url-rewrites/</link>
				<guid>http://newism.com.au/blog/post/56/expressionengine-campaign-monitor-google-analytics-and-url-rewrites/#When:15:44:47Z</guid>
				<content:encoded><![CDATA[<p>Bookmarking this article so I don&#8217;t have to keep searching for it when this problem bites me every time.</p>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-07-23T15:44:47+00:00</dc:date>
			</item>
		
			<item>
				<title>EECI2010 Round&#45;Up</title>
				<link>http://expressionengine.com/blog/entry/eeci2010_round-up/</link>
				<guid>http://expressionengine.com/blog/entry/eeci2010_round-up/#When:11:31:01Z</guid>
				<content:encoded><![CDATA[<p>Bookmarking for future reference back to the various Erskine presentations from EECI2010.</p>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-06-14T11:31:01+00:00</dc:date>
			</item>
		
			<item>
				<title>So you’re moving to Hollywood</title>
				<link>http://johnaugust.com/archives/2010/moving-to-hollywoo</link>
				<guid>http://johnaugust.com/archives/2010/moving-to-hollywoo#When:03:41:02Z</guid>
				<content:encoded><![CDATA[<p>A great, great article on the experiences of a 20-something aspiring screenwriter working a series of soul-destroying PA jobs in Los Angeles.</p>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-05-19T03:41:02+00:00</dc:date>
			</item>
		
			<item>
				<title>I am already bored with 3D | Joeblade</title>
				<link><a href="http://joeblade.com/2010/04/25/i-am-already-bored-with-3d/">I am already bored with 3D | Joeblade</a></link>
				<guid><a href="http://joeblade.com/2010/04/25/i-am-already-bored-with-3d/">I am already bored with 3D | Joeblade</a>#When:01:56:35Z</guid>
				<content:encoded><![CDATA[<blockquote><p>&#8220;If a film’s selling point is that when you watch it with special glasses on then some objects that were formerly on the screen are now sort-of hovering in front of the screen if you’re at the right angle then it doesn’t bode well. When a film trailer triumphantly announces that the film is in 3D, all I take from that is is that the film’s story, the characters and performances weren’t good enough to sell the film. It marks the film out as one to miss.&#8221;</p></blockquote>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-04-26T01:56:35+00:00</dc:date>
			</item>
		
			<item>
				<title>Google Maps API Tutorials</title>
				<link>http://econym.org.uk/gmap/</link>
				<guid>http://econym.org.uk/gmap/#When:05:08:29Z</guid>
				<content:encoded><![CDATA[<p>An enormous collection of tutorials and links relating to Google&#8217;s Maps API.</p>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-04-09T05:08:29+00:00</dc:date>
			</item>
		
			<item>
				<title>3 CodeIgniter libraries that will make your life easier</title>
				<link>http://geshan.blogspot.com/2010/03/3-codeigniter-libraries-that-will-make.html</link>
				<guid>http://geshan.blogspot.com/2010/03/3-codeigniter-libraries-that-will-make.html#When:09:01:00Z</guid>
				<content:encoded><![CDATA[<p>The Ocular templating library looks interesting.</p>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-03-30T09:01:00+00:00</dc:date>
			</item>
		
			<item>
				<title>Bill Nighy makes a mean cocktail</title>
				<link>http://www.thewatchmakerproject.com/blog/bill-nighy-makes-a-mean-cocktail/</link>
				<guid>http://www.thewatchmakerproject.com/blog/bill-nighy-makes-a-mean-cocktail/#When:11:18:12Z</guid>
				<content:encoded><![CDATA[<p>I’d been looking forward to the movie for at least thirty seconds, although now I can’t even remember its name. A tired sequel to a Disney franchise, I think; anthropomorphic animals and plants, singing and dancing. Don’t ask me why we wanted to see it. The cinema was actually inside the hotel where she worked, and I was hoping we could make it from the restaurant over to the cinema with enough time to catch the Pepsi adverts.</p>

<p>In the restaurant&mdash;upscale dining, large round tables, food that you know is too expensive but feels like a treat to order&mdash;I caught her arm. We had to go.</p>

<p>“One more order then I’m ready.”</p>

<p>I followed her over to the bar area, dodging the other staff as they swirled and eddied around the tables, almost falling over the girl crouched at the top of the small flight of stairs cleaning cutlery. I leaned against the smooth top of the bar and watched her as she filled her tray; two coffees and a dark, bitter-looking cocktail.</p>

<p>“I’ll take that for you,” said another anonymous waitresses, leaning across the bar, hand extended to claim and balance the laden tray.</p>

<p>“Thanks,” she said. Dropping her apron in a drawer, she took my hand. “Let’s go!”</p>

<p>Through the restaurant entrance hall, we pushed through the heavy double doors and out into the hotel reception area.</p>

<p>“Just a second,” I said, “there’s something I need to do.”</p>

<p>Cutting diagonally across the broad carpeted floor I entered the small hotel bar. It was empty save for the occupants of the only two stools at the counter; a midget wearing a gold lamé suit, and BAFTA award-winning actor Bill Nighy. Turning to regard me, Nighy slowly rose and moved behind the bar.</p>

<p>“Drink?” he asked, placing a whisky in front of me. I sipped it quickly as the pair watched me. The dwarf hopped down from his stool and moved towards the door.</p>

<p>“Another.” insisted Nighy; this time a shot glass of tequila appeared on the bar.</p>

<p>“No, I’m afraid I really have to go,” I protested. The dwarf stood aside as I left the bar, but turning back I bent down to bring myself level with his ear. “Can you tell me where the toilets are?”</p>

<p>Raising one arm he indicated a door further down the corridor. “Thanks,” I said. Sweet relief.</p>

<p>As I pushed hard on the heavy swing door, I woke up. Perhaps unsurprisingly, I really needed to pee.</p>]]></content:encoded>
				<dc:subject>Dreams, Personal, Writing</dc:subject>
				<dc:date>2010-03-25T11:18:12+00:00</dc:date>
			</item>
		
			<item>
				<title>Placehold.it &#45; Quick and simple image placeholders</title>
				<link>http://placehold.it/</link>
				<guid>http://placehold.it/#When:08:50:31Z</guid>
				<content:encoded><![CDATA[<p>An actually useful single-serving site. I&#8217;m bound to forget about it when I actually need it, though&#8230;</p>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-03-23T08:50:31+00:00</dc:date>
			</item>
		
			<item>
				<title>Write PHP Properly</title>
				<link>http://www.thewatchmakerproject.com/blog/write-php-properly/</link>
				<guid>http://www.thewatchmakerproject.com/blog/write-php-properly/#When:15:59:45Z</guid>
				<content:encoded><![CDATA[<p>For your reading pleasure this week, I bring you two cautionary tales on the importance of not taking shortcuts in your PHP code, or making assumptions about your (future) hosting environment.</p>

<h2>Short tags off</h2>

<p>For years I&#8217;ve been using PHP&#8217;s short tags to write out variables within HTML. For this habit I at least partially blame the <a href=”http://codeigniter.com/”>CodeIgniter</a> documentation, which uses short tags liberally to illustrate how to output variables set in the controller into a view file. For example:</p>

<pre class="code">
&lt;p&gt;Welcome back, &lt;?= $name ?&gt;!&lt;/p&gt;
</pre>

<p>Unfortunately this approach falls down when you find yourself deploying to a server that has had PHP compiled with short tag support off. The above code will not be parsed by the PHP engine&#8230; but the presence of angle-brackets will mean that you won&#8217;t see the unparsed output on the web page; so you end up with blank spaces, viz:</p>

<pre class="code">
Welcome back, !
</pre>

<p>The &#8216;fix&#8217; for this laziness is, of course, not to use short tags, even when outputting the simplest of variables:</p>

<pre class="code">
&lt;p&gt;Welcome back, &lt;?php echo $name; ?&gt;!&lt;/p&gt;
</pre>

<p>It is also a good practice to get into in readiness for PHP6, which will be removing the ability to use short tags altogether.</p>

<h2>Don&#8217;t rely on truthy and falsey values</h2>

<p>Like several other languages, PHP has a concept of truthiness and falsiness when it comes to evaluating <a href="http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting" title="PHP.net boolean conversions">boolean</a> expressions. The number zero, an empty string, NULL or undefined will all evaluate to FALSE in a simple expression:</p>

<pre class="code">
&lt;?php
$x = 0;
$y = &#8217;&#8216;;
if ($x || $y || $z) {
&nbsp; echo "This will not be displayed";
}
?&gt;
</pre>

<p>(Yes, I know you can test if a variable is actually FALSE by using the triple-equals sign === in the conditional, but that&#8217;s not what this point is about.)</p>

<p>So we know that we can rely on PHP returning FALSE whenever we test a non-existing, empty or zero variable. Using this knowledge, we can check for the presence of incoming settings before doing things:</p>

<pre class="code">
&lt;?php if ($_GET[&#8216;foo&#8217;]): ?&gt;
&nbsp; &lt;p&gt;You submitted the foo item.&lt;/p&gt;
&lt;?php endif; ?&gt;
</pre>

<p>We can even write quite neat little loops using array indices:</p>

<pre class="code">
&lt;?php
while ($myarr[0])
{
&nbsp; process_item(array_shift($myarr));
}
?&gt;
</pre>

<p>So where&#8217;s the problem here? Well, all of those tests for non-existent variables or array items will throw a PHP <code>E_NOTICE</code> level error. Usually this isn&#8217;t a problem; most apps and PHP installations set the default error reporting value to <code>E_ALL &amp; ~E_NOTICE</code>, which is to say they do not include <code>E_NOTICE</code> errors. No errors are shown on your web pages, and everything is fine.</p>

<p>That is, until you notice that the error_log on your live server has filled up with over a gigabyte of PHP errors per day. Yup, it&#8217;s another server configuration issue, this time one that writes every single notice to a text file. And if, like me, you were relying on the above behaviour then that text file gets very big, very fast.</p>

<p>To fix this problem just takes a little more discipline when coding. In short, always check for the presence of a variable or array key before checking its value:</p>

<pre class="code">
&lt;?php if (isset($_GET[&#8216;foo&#8217;]) &amp;&amp; $_GET[&#8216;foo&#8217;] == &#8216;bar&#8217;): ?&gt;
&nbsp; &lt;p&gt;You submitted the foo item.&lt;/p&gt;
&lt;?php endif; ?&gt;
</pre>

<p>Now the first part of the conditional&mdash;<code>isset($_GET[&#8216;foo&#8217;])</code>&mdash;will fail, and the second part with the non-existent array key will never be evaluated.</p>]]></content:encoded>
				<dc:subject>PHP</dc:subject>
				<dc:date>2010-03-19T15:59:45+00:00</dc:date>
			</item>
		
			<item>
				<title>JavaScript Module Pattern: In&#45;Depth</title>
				<link>http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth</link>
				<guid>http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth#When:06:40:33Z</guid>
				<content:encoded><![CDATA[<p>This is a great, detailed look at the Module Pattern in JavaScript. I&#8217;d really like to convert all our code to use the loosely-coupled version of this with lazy-loading of scripts to speed up our&#8230;</p>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-03-19T06:40:33+00:00</dc:date>
			</item>
		
			<item>
				<title>RequireJS: Asynchronous JavaScript loading</title>
				<link><a href="http://ajaxian.com/archives/requirejs-asynchronous-javascript-loading?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+ajaxian+%28Ajaxian+Blog%29">RequireJS: Asynchronous JavaScript loading</a></link>
				<guid><a href="http://ajaxian.com/archives/requirejs-asynchronous-javascript-loading?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+ajaxian+%28Ajaxian+Blog%29">RequireJS: Asynchronous JavaScript loading</a>#When:04:18:03Z</guid>
				<content:encoded><![CDATA[<blockquote><p>&#8220;If you are running require()-esque loader code in the browser you want to avoid blocking calls else Steve Souders will come over and beat you up.&#8221;</p></blockquote>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-03-19T04:18:03+00:00</dc:date>
			</item>
		
			<item>
				<title>The Future of Publishing (via @monooso)</title>
				<link>http://www.youtube.com/watch?v=Weq_sHxghcg&amp;feature=player_embedded</link>
				<guid>http://www.youtube.com/watch?v=Weq_sHxghcg&amp;feature=player_embedded#When:23:41:38Z</guid>
				<content:encoded><![CDATA[<object width="400" height="336"><param name="movie" value="http://www.youtube.com/v/Weq_sHxghcg&amp;rel=0&amp;egm=0&amp;showinfo=0&amp;fs=1"></param><param name="wmode" value="transparent"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/Weq_sHxghcg&amp;rel=0&amp;egm=0&amp;showinfo=0&amp;fs=1" type="application/x-shockwave-flash" width="400" height="336" allowFullScreen="true" wmode="transparent"></embed></object>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-03-18T23:41:38+00:00</dc:date>
			</item>
		
			<item>
				<title>FPDF Library &#45; PDF Generator</title>
				<link>http://www.fpdf.org/</link>
				<guid>http://www.fpdf.org/#When:02:49:42Z</guid>
				<content:encoded><![CDATA[<p>Via @drewm, a handy PDF library for PHP.</p>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-02-19T02:49:42+00:00</dc:date>
			</item>
		
			<item>
				<title>One quick thought of my own on the new Apple iPad</title>
				<link>http://www.thewatchmakerproject.com/blog/one-quick-thought-of-my-own-on-the-new-apple-ipad/</link>
				<guid>http://www.thewatchmakerproject.com/blog/one-quick-thought-of-my-own-on-the-new-apple-ipad/#When:14:20:52Z</guid>
				<content:encoded><![CDATA[<p>So I just spent my lunch hour catching up with my neglected feedreader (tip: never let your feeds pile up over an Apple event!) and I haven&#8217;t seen anyone else raise this point, so here goes.</p>

<p>I don&#8217;t know about you, but personally my 16Gb iPhone is mostly full of music. There are a few odd podcasts, less than a hundred photos, and a couple-dozen apps, but for the most part&mdash;70, 80-percent&mdash;it&#8217;s music that takes up the space.</p>

<p>And that makes sense for what I use it for&mdash;as a phone, a portable music player, a games device and, occasionally, a camera.</p>

<p>Now consider the new <a href="http://www.apple.com/ipad/">Apple iPad</a>, which comes in 16Gb, 32Gb and 64Gb sizes. If its primary target market is folks sat on their sofa, idly surfing the web, dealing with emails or playing games, does music really fit into that usage profile? I can&#8217;t imagine that the built-in speakers are that much cop, plus if you&#8217;re moving the thing around you&#8217;re hardly experiencing the optimal listening experience. Earphones? Not convenient, not like being able to slip your iPod or iPhone into your pocket when you need to get up and go somewhere. And anyway, who doesn&#8217;t have some other means of listening to music?</p>

<p>So what is going to take up all that flash drive space? It has various &#8220;Productivity&#8221; apps&mdash;word processing, spreadsheets, and so forth&mdash;but those don&#8217;t take up much space. iBooks? Again, they&#8217;re mostly text, they don&#8217;t need the space either.</p>

<h2>So it&#8217;s got to be apps&#8230;</h2>

<p>...and lots of them. Is Apple betting on the iPad to drive even more growth in App Store sales than they&#8217;ve already seen with the iPhone and iPod Touch?</p>

<p>And if you have trouble keeping track of a few dozen apps on your iPhone, how will you cope with a few hundred on an iPad?</p>]]></content:encoded>
				<dc:subject>iPhone, Macintosh</dc:subject>
				<dc:date>2010-02-10T14:20:52+00:00</dc:date>
			</item>
		
			<item>
				<title>1000 Free &#8220;Farm&#45;Fresh Web Icons&#8221;</title>
				<link>http://www.fatcow.com/free-icons/</link>
				<guid>http://www.fatcow.com/free-icons/#When:09:40:36Z</guid>
				<content:encoded><![CDATA[<p>Larger versions of famfamfam by the look of it.</p>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-02-10T09:40:36+00:00</dc:date>
			</item>
		
			<item>
				<title>The Missing Google Analytics Manual</title>
				<link>http://www.grokdotcom.com/2009/02/16/the-missing-google-analytics-manual/</link>
				<guid>http://www.grokdotcom.com/2009/02/16/the-missing-google-analytics-manual/#When:09:40:36Z</guid>
				<content:encoded><![CDATA[<p>A helpful collection of links and tutorials on Google Analytics - always nice if someone else does the hard work and finds the best results for you.</p>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-02-10T09:40:36+00:00</dc:date>
			</item>
		
			<item>
				<title>Revised Font Stack</title>
				<link>http://www.awayback.com/revised-font-stack/</link>
				<guid>http://www.awayback.com/revised-font-stack/#When:09:40:36Z</guid>
				<content:encoded><![CDATA[<p>My new go-to resource for deciding on a decent font stack in those important first few CSS rules of each new site.</p>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-02-10T09:40:36+00:00</dc:date>
			</item>
		
			<item>
				<title>Potential EE add&#45;ons: What would you like first?</title>
				<link>http://www.thewatchmakerproject.com/blog/potential-ee-add-ons-what-would-you-like-first/</link>
				<guid>http://www.thewatchmakerproject.com/blog/potential-ee-add-ons-what-would-you-like-first/#When:14:56:31Z</guid>
				<content:encoded><![CDATA[<p>Partly because I really don&#8217;t know, but mostly because I haven&#8217;t got anything else to write about this week for <a href="http://project52.info/">Project 52</a>, here is a list of potential <a href="http://expressionengine.com/">ExpressionEngine</a> add-ons I plan to build&mdash;and I&#8217;d like you to tell me which to do first.</p>

<p>Of course, it&#8217;s entirely possible that someone has already done any or all of these and I just haven&#8217;t found them yet&#8230; in which case please point me in the right direction and save me a ton of unnecessary work!</p>

<h2>Related fieldtype dropdowns</h2>

<p>If you ever have a client with thousands of pages (or products or whatever) that wants to use related entries, the default dropdown format isn&#8217;t very useful for them. This add-on will replace some or all related fieldtypes with those snazzy &#8220;search as you type&#8221; Ajax-powered search fields. Neato!</p>

<h2>Ree-Categorize</h2>

<p>Can&#8217;t make an ExpressionEngine add-on without a double-e pun, right? This idea is an extension to the current way categories work when you delete one that has entries; instead of just leaving a bunch of orphaned entries, it will prompt you to re-categorise them.</p>

<h2>Category Image URL Fieldtype</h2>

<p>Hopefully a simple one, this&mdash;lets you use a helpful file manager fieldtype for the Category Image URL field. At the moment it&#8217;s just a text field, which is not exactly helpful for non-technical clients. Replacing it with something like the <a href="http://www.ngenworks.com/software/ee/ngen-file-field/">nGen File Field</a> file upload tool would be very handy if you rely on category imagery.</p>

<h2>Mac OS X Dashboard Widget</h2>

<p>Okay, this last one isn&#8217;t exactly an EE add-on, but I find it very handy. It&#8217;s a dashboard widget for Mac that just lists all the latest comments on any of your pages, and lets you click through to edit or delete them. It&#8217;s very useful if like me you don&#8217;t get to see any &#8216;new comment&#8217; emails until you get home but want to stay on top of comment spam. I guess it could also be used to keep a count of things like caught spam or Akismet&#8217;s tally too.</p>

<h2>Cast your vote now</h2>

<p>Alright, I&#8217;m not actually taking votes, but I&#8217;d be interested to see what people think of these potential add-ons, and if there&#8217;s a clear winner I&#8217;ll make that my priority for development. Tell me what to do, please&#8230;</p>]]></content:encoded>
				<dc:subject>ExpressionEngine, Macintosh, Personal</dc:subject>
				<dc:date>2010-02-09T14:56:31+00:00</dc:date>
			</item>
		
			<item>
				<title>Kick&#45;Ass &#45; Trailer 2</title>
				<link>http://www.youtube.com/watch?v=NhMEYclhrKQ&amp;feature=channel</link>
				<guid>http://www.youtube.com/watch?v=NhMEYclhrKQ&amp;feature=channel#When:06:21:21Z</guid>
				<content:encoded><![CDATA[<object width="400" height="336"><param name="movie" value="http://www.youtube.com/v/NhMEYclhrKQ&amp;rel=0&amp;egm=0&amp;showinfo=0&amp;fs=1"></param><param name="wmode" value="transparent"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/NhMEYclhrKQ&amp;rel=0&amp;egm=0&amp;showinfo=0&amp;fs=1" type="application/x-shockwave-flash" width="400" height="336" allowFullScreen="true" wmode="transparent"></embed></object>]]></content:encoded>
				<dc:subject></dc:subject>
				<dc:date>2010-02-09T06:21:21+00:00</dc:date>
			</item>
		
			<item>
				<title>Reading List 2009</title>
				<link>http://www.thewatchmakerproject.com/blog/reading-list-2009/</link>
				<guid>http://www.thewatchmakerproject.com/blog/reading-list-2009/#When:19:26:55Z</guid>
				<content:encoded><![CDATA[<p>Just as I have done for the last two years, I&#8217;ve been carefully recording my reading material. 2009&#8217;s repository was Nathan Borror&#8217;s excellent new web app, <a href="http://www.readernaut.com/">Readernaut</a> - and the final total is a not completely unimpressive thirty.</p>

<h2>Fiction</h2>

<p>Still trying to improve my consumption of &#8220;classic&#8221; literature, I slogged through Midnight&#8217;s Children last year, which was not an easy read but ultimately rewarding. The only other book that really made an impression was the excellent high-concept novel, The Time Traveller&#8217;s Wife.</p>

<ul>
<li>My Favourite Wife (Tony Parsons)</li>
<li>The Time Traveller&#8217;s Wife (Audrey Niffenegger)</li>
<li>Good Omens (Terry Pratchett, Neil Gaiman)</li>
<li>Revolutionary Road (Richard Yates)</li>
<li>By Design (Richard E Grant)</li>
<li>A Matter For Men (David Gerrold)</li>
<li>Farnham&#8217;s Freehold (Robert A Heinlein)</li>
<li>Time For The Stars (Robert A Heinlein)</li>
<li>Ysabel (Guy Gavriel Kay)</li>
<li>Midnight&#8217;s Children (Salman Rushdie)</li>
<li>The Magicians (Lev Grossman)</li>
<li>Requiem for a Dream (Hubert Selby Jr)</li>
<li>Nation (Terry Pratchett)</li>
</ul>

<h3>eBooks</h3>

<p>As I&#8217;ve been travelling a lot this year, I occasionally found that I didn&#8217;t have the bag space to fit a book into my overnight bag. Thus, eBooks on iPhone have made their first appearance on my reading list. </p>

<ul>
<li>The Adventures of Sherlock Holmes (Arthur Conan Doyle)</li>
<li>The Curious Case of Benjamin Button (F Scott Fitzgerald)</li>
<li>A Princess of Mars (Edgar Rice Burroughs)</li>
</ul>

<h2>Non-fiction</h2>

<ul>
<li>The Audacity of Hope (Barack Obama)</li>
<li>Outliers (Malcolm Gladwell)</li>
<li>Droidmaker (Michael Rubin)</li>
</ul>

<p>Droidmaker, the story behind the birth of movie special effects and George Lucas&#8217; role in that art&#8217;s genesis, was actually a free PDF recommended by Michael Heilemann of <a href="http://www.binarybonsai.com/">Binary Bonsai</a>, but I&#8217;d certainly pick it up for a coffee table book if I saw it in the shops. It was an excellent geek read.</p>

<h2>Fantasy</h2>

<p>Yet more fantasy to pad out my reading list. This year I discovered Robin Hobb, and I&#8217;m slowly slogging through her various trilogies. Looking forward to <a href="http://www.joeabercrombie.com/">Joe Abercrombie</a>&#8216;s new book, due out sometime in 2010.</p>

<ul>
<li>Best Served Cold (Joe Abercrombie)</li>
<li>Tigana (Guy Gavriel Kay)</li>
<li>Assassin&#8217;s Apprentice (Robin Hobb)</li>
<li>Royal Assassin (Robin Hobb)</li>
<li>Assassin&#8217;s Quest (Robin Hobb)</li>
<li>Ship of Magic (Robin Hobb)</li>
<li>The Mad Ship (Robin Hobb)</li>
</ul>

<h3>Graphic Novels</h3>

<p>I re-read Watchmen before going to see the (excellent, faithfully adapted) film in March.</p>

<ul>
<li>Watchmen (Alan Moore, Dave Gibbons)</li>
<li>World War Hulk (Greg Pak)</li>
<li>Batman: The Killing Joke (Alan Moore, Brian Bolland, John Higgins)</li>
<li>Batman: Arkham Asylum (Grant Morrison)</li>
</ul>

<h2>Highlights of 2009</h2>

<p>Despite reading more than in 2008, it&#8217;s difficult to pick out any real standout books from the preceding lists. <a href="http://www.amazon.co.uk/Time-Travelers-Wife-Audrey-Niffenegger/dp/0099464462/thewatchmaker-21" title="The Time Traveller's Wife on Amazon.co.uk">The Time Traveller&#8217;s Wife</a> was clever but ultimately forgettable; <a href="http://www.amazon.co.uk/Midnights-Children-Vintage-Classics-Rushdie/dp/0099511894/thewatchmaker-21" title="Midnight's Children on Amazon.co.uk">Midnight&#8217;s Children</a> was impressive but hard work. So no real recommendations from me, just a reaffirming of my intentions to actually read some more &#8220;proper&#8221; literature in the coming twelvemonth.</p>]]></content:encoded>
				<dc:subject>Books, Personal</dc:subject>
				<dc:date>2010-01-30T19:26:55+00:00</dc:date>
			</item>
		
	</channel>
</rss>