<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description></description><title>blog.chrisgrice.com</title><generator>Tumblr (3.0; @chrisgrice)</generator><link>http://blog.chrisgrice.com/</link><item><title>Really liking this ad campaign for a double exhibition in Common and Port St Beer House:



From...</title><description>&lt;p&gt;Really liking this ad campaign for a double exhibition in Common and Port St Beer House:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzjd1w5bT71qzzrxc.jpg"/&gt;&lt;img src="http://media.tumblr.com/tumblr_lzjbrtut3l1qzzrxc.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;From &lt;a href="http://www.teacakedesign.com/"&gt;Teakcake Design&lt;/a&gt; (&lt;a href="http://twitter.com/#!/teacakedesign"&gt;@teacakedesign&lt;/a&gt;). You can see more details on the &lt;a href="http://teacakedesign.blogspot.com/2012/02/we-would-like-to-take-this-opportunity.html"&gt;teacake design blog&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/17762173261</link><guid>http://blog.chrisgrice.com/post/17762173261</guid><pubDate>Fri, 17 Feb 2012 12:06:58 +0000</pubDate></item><item><title>Importing Shapefiles to MySQL</title><description>&lt;p&gt;For future reference:&lt;/p&gt;

&lt;p&gt;&lt;script type="syntaxhighlighter" class="brush: bash"&gt;&lt;![CDATA[&lt;br/&gt;
ogr2ogr -f "MySQL" MySQL:"dbname,user=root,host=127.0.0.1,password=pass" -lco engine=MYISAM shapefile.shp]]&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;Requires the gdal package, or you can download &lt;a href="http://fwtools.maptools.org/"&gt;FWTools&lt;/a&gt;, which includes it.&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/730988135</link><guid>http://blog.chrisgrice.com/post/730988135</guid><pubDate>Thu, 24 Jun 2010 11:33:00 +0100</pubDate></item><item><title>Simple test runner for Python</title><description>&lt;p&gt;If you have the following project layout:&lt;/p&gt;

&lt;pre style="font-family: monospace"&gt;
/src
    /module
        class1.py
        class2.py
        /tests
             test1.py
             test2.py
    /module2
        class1.py
        class2.py
        /tests
             test1.py
             test2.py
    tests.py
&lt;/pre&gt;

&lt;p&gt;Putting this script into src/tests.py will let you bootstrap your tests. &lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush: python"&gt;&lt;![CDATA[
import sys, os, unittest, imp
import module.test, module2.test
import pkgutil
  
def loadTestsFromPackageList(packages):
    for package in packages:
        pkgpath = os.path.dirname(package.__file__)
        for module in [name for _, name, _ in pkgutil.iter_modules([pkgpath])]:
            fullmodule = ''.join([package.__name__, '.',module])
            suite.addTests(unittest.TestLoader().loadTestsFromName(fullmodule))
             
PACKAGES = [client1.test, module.test]
suite = unittest.TestSuite()
loadTestsFromPackageList(PACKAGES)
unittest.TextTestRunner().run(suite)
]]&gt;&lt;/script&gt;&lt;p&gt;Note: To import modules from your test classes, use relative import statements. For example:&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush: python"&gt;&lt;![CDATA[
import module.class1    # doesn't work
import ..class1         # works!
]]&gt;&lt;/script&gt;&lt;p&gt;This means, of course, that you need to compartment your tests so they only test things in their parent package. This isn&amp;#8217;t a bad thing, as unit tests should be focusing on per-module functionality anyway.&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/407124540</link><guid>http://blog.chrisgrice.com/post/407124540</guid><pubDate>Tue, 23 Feb 2010 15:36:30 +0000</pubDate><category>python</category><category>unittest</category><category>testing</category></item><item><title>Highlighting a tail -f</title><description>&lt;p&gt;Add this function to your .bashrc&lt;/p&gt;

&lt;p&gt;&lt;script type="syntaxhighlighter" class="brush: bash"&gt;&lt;![CDATA[&lt;br/&gt;
function rtail() {&lt;br/&gt;
        tail -f $1 | perl -pe 's/'$2'/\e[1;31;43m$&amp;\e[0m/g'&lt;br/&gt;
}&lt;br/&gt;
]]&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;Produces:&lt;/p&gt;

&lt;p&gt;&lt;img width="500" src="http://imgur.com/pm6I1.png"/&gt;&lt;/p&gt;

&lt;p&gt;Usage: rtail [FILE] [PERL_REGEX]&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/390696479</link><guid>http://blog.chrisgrice.com/post/390696479</guid><pubDate>Mon, 15 Feb 2010 12:28:00 +0000</pubDate><category>bash</category><category>logging</category><category>perl</category><category>regex</category><category>linux</category></item><item><title>Bluetile on Ubuntu</title><description>&lt;p&gt;I recently read a &lt;a href="http://news.ycombinator.com/item?id=980167"&gt;post&lt;/a&gt; on Hacker News about &lt;a href="http://projects.haskell.org/bluetile/"&gt;Bluetile&lt;/a&gt;, a branch of &lt;a href="http://xmonad.org/"&gt;XMonad&lt;/a&gt; that was designed to be more accessible to new users. I&amp;#8217;ve been reading about tiling window managers like XMonad for a while, but have never found the time to dive in and try one out. Bluetile was the perfect excuse.&lt;/p&gt;

&lt;p&gt;However, getting it set up on Ubuntu 9.10 turned out to be a bit of a hassle, so I&amp;#8217;ve documented the steps taken here for future use. &lt;/p&gt;

&lt;p&gt;First, lets install all dependencies: &lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush: bash"&gt;&lt;![CDATA[sudo aptitude install ghc libghc6-parsec-dev libghc6-network-dev libghc6-zlib-dev libghc6-http-dev libghc6-gtk-dev libghc6-glade-dev]]&gt;&lt;/script&gt;&lt;p&gt;We can then pull down and install Cabal, a package manager for Haskell. This is what we&amp;#8217;ll use to install Bluetile.&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush: bash"&gt;&lt;![CDATA[wget http://www.haskell.org/cabal/release/cabal-1.6.0.2/Cabal-1.6.0.2.tar.gz
tar xvf Cabal-1.6.0.2.tar.gz
cd Cabal-1.6.0.2/
ghc --make Setup
./Setup configure --user
./Setup build
./Setup install]]&gt;&lt;/script&gt;&lt;p&gt;And repeat these steps to install the cabal installer:&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush: bash"&gt;&lt;![CDATA[wget http://www.haskell.org/cabal/release/cabal-install-0.6.2/cabal-install-0.6.2.tar.gz
tar xvf cabal-install-0.6.2.tar.gz
cd cabal-install-0.6.2/
ghc --make Setup
./Setup configure --user
./Setup build
./Setup install]]&gt;&lt;/script&gt;&lt;p&gt;Then create a symlink to cabal:&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush: bash"&gt;&lt;![CDATA[sudo ln -s /home/$USER/.cabal/bin/cabal /usr/local/bin/cabal]]&gt;&lt;/script&gt;&lt;p&gt;We can now update cabal, and finally install Bluetile:&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush: bash"&gt;&lt;![CDATA[cabal update
cabal install bluetile
sudo ln -s /home/chris/.cabal/bin/bluetile /usr/local/bin/bluetile
]]&gt;&lt;/script&gt;&lt;p&gt;Run bluetile from a terminal, and we have our first basic tiling window manager! Bluetile will take over from metacity, and give you some quick guidance on how to use the WM. &lt;a href="http://projects.haskell.org/bluetile/#documentation"&gt;Some important shortcuts&lt;/a&gt; are documented on the bluetile site.&lt;/p&gt;

&lt;p&gt;The great benefit of tiling window managers is how easy it is to set up workspaces and desktops for a specific task, workflow, or mood. A comment on Hacker News sums it up:&lt;/p&gt;

&lt;blockquote&gt;It takes about a week or two to adapt, but it&amp;#8217;s a great productivity enhancement. Its really a kind of desktop construction kit: I find myself making layouts that suit my work, mood, and hardware.&lt;footnote&gt;From  &lt;a href="http://news.ycombinator.com/item?id=980731"&gt;this comment&lt;/a&gt; by &lt;a href="http://news.ycombinator.com/user?id=kevbin"&gt;kevbin&lt;/a&gt; on &lt;a href="http://news.ycombinator.com"&gt;news.ycombinator.com&lt;/a&gt;.&lt;/footnote&gt;&lt;/blockquote&gt;

&lt;p&gt;For example, my original setup for python development in bluetile, which blew away my old one (namely, dragging windows into position, losing focus to browsers, losing my editor etc):&lt;/p&gt;

&lt;center&gt;&lt;a href="http://chrisgrice.com/blog/bluetile_ss1.png"&gt;&lt;img src="http://chrisgrice.com/blog/bluetile_ss_thumb.png"/&gt;&lt;/a&gt;&lt;/center&gt;

&lt;p&gt;The tiling means I can spend less time worrying about my windows, and more time getting stuff done. Which is reason enough on its own to try Bluetile. Give it a go, even if you&amp;#8217;ve never thought about tiling window managers before.&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/283439591</link><guid>http://blog.chrisgrice.com/post/283439591</guid><pubDate>Mon, 14 Dec 2009 18:22:00 +0000</pubDate></item><item><title>Day of the Tentacle!</title><description>I was cleaning out some old stuff from my parent&amp;#8217;s house, and uncovered these. Blast from the past. 

&lt;center&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ksakj4MnAA1qzzrxc.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;Front covers&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ksalxgEXsN1qzzrxc.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8220;My Greatest Physics Adventure&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ksalz8Aoxx1qzzrxc.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;The tentacles in question&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ksam18U5jA1qzzrxc.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;This made my day.&lt;/p&gt;
&lt;/center&gt;

&lt;p&gt;A cool thing about the game was how the copy protection worked. I&amp;#8217;ll let the manual explain:&lt;/p&gt;

&lt;center&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ksamacL8uy1qzzrxc.jpg"/&gt;&lt;/p&gt;&lt;/center&gt;

&lt;p&gt;You then have to match up one of these images (two at the bottom of every page) with the beakers shown mid-game, or else you can&amp;#8217;t continue. A bit archaic, but I love things like this.&lt;/p&gt;

&lt;center&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ksamhhZ5Nm1qzzrxc.jpg"/&gt;&lt;/p&gt;&lt;/center&gt;

&lt;p&gt;So that&amp;#8217;s my small trip down gaming memory lane. I used to love this game to bits, but sadly the manuals are all I have left. It has, however, prompted me to try and find a copy of the full game again, as it really was brilliant.&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/227214884</link><guid>http://blog.chrisgrice.com/post/227214884</guid><pubDate>Thu, 29 Oct 2009 20:35:17 +0000</pubDate></item><item><title>RIAA Barcode Checker on Android</title><description>&lt;p&gt;I finally bit the bullet this weekend, and puchased a &lt;a href="http://www.t-mobile.co.uk/shop/mobile-phones/phones/pay-monthly/t-mobile/g2-touch/overview/"&gt;T-Mobile G2 Touch&lt;/a&gt;. I wanted the phone for the &lt;a href="http://www.android.com/"&gt;Android OS&lt;/a&gt;, and it hasn&amp;#8217;t disappointed. One of the biggest draws for me is the &lt;a href="http://code.google.com/p/android-scripting/"&gt;Android Scripting Environment&lt;/a&gt;, which lets you write small apps in Python, Lua, Perl, Ruby and Bash, using an embedded editor and terminal. I can&amp;#8217;t describe how cool it is to be able to code on the train, without my laptop. So far, I&amp;#8217;ve played around with the Python API, and it really is fantastic - dirt simple to use, and easy enough to extend with external modules. &lt;a href="http://www.crummy.com/software/BeautifulSoup/"&gt;Beautiful Soup&lt;/a&gt; comes pre-packaged, but you can recompile the python interpreter with any pure python modules.&lt;/p&gt;

&lt;p&gt;The ASE also comes with bindings for a couple of external libraries - &lt;a href="http://code.google.com/p/zxing/"&gt;Barcode Scanning from ZXing&lt;/a&gt;, and text-to-speech using &lt;a href="http://code.google.com/p/eyes-free/"&gt;eyes-free&lt;/a&gt;. You can also launch ASE scripts from &lt;a href="http://www.twofortyfouram.com/"&gt;Locale&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My first foray into scripting for Android is an attempt to make my music purchasing habits more independent, and avoid RIAA-affiliated artists at all costs. Using &lt;a href="http://www.riaaradar.com/"&gt;RIAA Radar&lt;/a&gt; and &lt;a href="https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html"&gt;Amazon Web Services&lt;/a&gt;, you can scan a CD barcode and find out whether the album is affiliated with the RIAA.&lt;/p&gt;

&lt;h3&gt;RIAA Scanner&lt;/h3&gt;

&lt;center&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_kr23c0TZCZ1qzzrxc.png" height="300/"/&gt;&lt;/p&gt;
&lt;p&gt;App on home screen&lt;/p&gt;&lt;/center&gt;

&lt;center&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_kr24ivGruH1qzzrxc.png" width="300/"/&gt;&lt;/p&gt;
&lt;p&gt;Scanning a barcode&lt;/p&gt;&lt;/center&gt;

&lt;center&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_kr24jrn3V41qzzrxc.png" width="300/"/&gt;&lt;img src="http://media.tumblr.com/tumblr_kr24lkfFU31qzzrxc.png" width="300"/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Looking up ASIN codes from Amazon, and cross-checking against RIAA Radar&lt;/p&gt;&lt;/center&gt;

&lt;center&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_kr24niTZSu1qzzrxc.png" width="300/"/&gt;&lt;br/&gt;&lt;img src="http://media.tumblr.com/tumblr_kr24nnFsIw1qzzrxc.png" width="300"/&gt;&lt;/p&gt;
&lt;p&gt;Result! You get a notification straight away, and an entry in your notifications in case you want to check several items.&lt;/p&gt;&lt;/center&gt;

&lt;p&gt;You can download the source for this app &lt;a href="http://gist.github.com/202109"&gt;here&lt;/a&gt;. It requires ASE installed, as well as BarcodeScanner. You will also need an AWS account.&lt;/p&gt;

&lt;p&gt;The code itself is pretty simple. The main body of the script is this:&lt;/p&gt;
&lt;script src="http://gist.github.com/202395.js"&gt;&lt;/script&gt;&lt;p&gt;However, the Android barcode scanner returns an &lt;a href="http://en.wikipedia.org/wiki/European_Article_Number"&gt;EAN-13&lt;/a&gt; barcode, while the RIAA Radar search only uses &lt;a href="http://en.wikipedia.org/wiki/Amazon_Standard_Identification_Number"&gt;ASINs&lt;/a&gt;. To convert between the two, we use the AWS Product Search API to find an identification number for the product. The algorithm is defined by Amazon, and is a bit lengthy - you can read about it &lt;a href="http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?rest-signature.html"&gt;here&lt;/a&gt;. The code is below (put together with a lot of help from &lt;a href="http://stackoverflow.com/questions/1088715/how-to-sign-amazon-web-service-requests-from-the-python-app-engine/1343917#1343917"&gt;this post&lt;/a&gt;): &lt;/p&gt;

&lt;script src="http://gist.github.com/202399.js"&gt;&lt;/script&gt;&lt;p&gt;The script took me about a day of on-and-off work, and was great fun to write - I&amp;#8217;m seriously considering trying some &amp;#8220;real&amp;#8221; Android dev work. Hopefully this will be of use to some people, and maybe of interest to a lot.&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/205282152</link><guid>http://blog.chrisgrice.com/post/205282152</guid><pubDate>Mon, 05 Oct 2009 21:16:00 +0100</pubDate><category>android</category><category>RIAA</category><category>music</category><category>python</category></item><item><title>If Operating Systems Ran The Airlines</title><description>&lt;p&gt;Not mine originally, but I liked it so much I had to post it:&lt;/p&gt;
&lt;p&gt;This sums up what I feel about Linux and the whingers that moan how hard it is to install/use.&lt;/p&gt;
&lt;h3&gt;If Operating Systems Ran The Airlines&amp;#8230;&lt;/h3&gt;
&lt;h4&gt;UNIX Airways&lt;/h4&gt;
&lt;p&gt;Everyone brings one piece of the plane along when they come to the airport. They all go out on the runway and put the plane together piece by piece, arguing non-stop about what kind of plane they are supposed to be building.&lt;/p&gt;
&lt;h4&gt;Air DOS&lt;/h4&gt;
&lt;p&gt;Everybody pushes the airplane until it glides, then they jump on and let the plane coast until it hits the ground again. Then they push again, jump on again, and so on&amp;#8230;&lt;/p&gt;
&lt;h4&gt;Mac Airlines&lt;/h4&gt;
&lt;p&gt;All the stewards, captains, baggage handlers, and ticket agents look and act exactly the same. Every time you ask questions about details, you are gently but firmly told that you don&amp;#8217;t need to know, don&amp;#8217;t want to know, and everything will be done for you without your ever having to know, so just shut up.&lt;/p&gt;
&lt;h4&gt;Windows Air&lt;/h4&gt;
&lt;p&gt;The terminal is pretty and colorful, with friendly stewards, easy baggage check and boarding, and a smooth take-off. After about 10 minutes in the air, the plane explodes with no warning whatsoever.&lt;/p&gt;
&lt;h4&gt;Windows NT Air&lt;/h4&gt;
&lt;p&gt;Just like Windows Air, but costs more, uses much bigger planes, and takes out all the other aircraft within a 40-mile radius when it explodes.&lt;/p&gt;
&lt;h4&gt;Linux Air&lt;/h4&gt;
&lt;p&gt;Disgruntled employees of all the other OS airlines decide to start their own airline. They build the planes, ticket counters, and pave the runways themselves. They charge a small fee to cover the cost of printing the ticket, but you can also download and print the ticket yourself.&lt;/p&gt;
&lt;p&gt;When you board the plane, you are given a seat, four bolts, a wrench and a copy of the seat-HOWTO.html. Once settled, the fully adjustable seat is very comfortable, the plane leaves and arrives on time without a single problem, the in-flight meal is wonderful. You try to tell customers of the other airlines about the great trip, but all they can say is, &amp;#8220;You had to do what with the seat?&amp;#8221;&lt;/p&gt;
&lt;p&gt;Credit goes to Lee, UK, from &lt;a href="http://usproxy.bbc.com/2/hi/science/nature/1507908.stm"&gt;here&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/201693409</link><guid>http://blog.chrisgrice.com/post/201693409</guid><pubDate>Thu, 01 Oct 2009 12:38:00 +0100</pubDate></item><item><title>Virgin Media and Linux</title><description>&lt;p&gt;I&amp;#8217;ve just activated a new Virgin Media Broadband account for a new flat, and came accross this idiocy:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://chrisgrice.com/blog/bullshit.png"&gt;&lt;img src="http://chrisgrice.com/blog/bullshit.png" height="313" width="400"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re running anything except the officially sanctioned Windows or Mac OS, you can see this here: &lt;a href="http://act2.virginmedia.com/Activation/runComputerTest.do"&gt;http://act2.virginmedia.com/Activation/runComputerTest.do&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Not only is this test utterly brain-dead (it&amp;#8217;s just broadband for christ&amp;#8217;s sake), it&amp;#8217;s crap. I got around it using the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/59"&gt;User Agent Switcher&lt;/a&gt; for Firefox. So the setup doesn&amp;#8217;t actually need Windows or Mac, it&amp;#8217;s a completely arbitary decision by some pointy-haired manager at Virgin. The &lt;a href="http://www.virginmedia.com/help/activation/unsupported_os.php"&gt;£1/min support line&lt;/a&gt; for people with &amp;#8220;unsupported OSs&amp;#8221; has nothing to do with this decision, of course.&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/156343257</link><guid>http://blog.chrisgrice.com/post/156343257</guid><pubDate>Wed, 05 Aug 2009 12:25:53 +0100</pubDate></item><item><title>Samsung R700 Backlight Brightness</title><description>&lt;p&gt;Posting this just in case it appears in google and helps another person struggling with this issue.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a problem with my Sasmsung R700, in that the backlight is at maximum brightness when booting up, and when in the BIOS menu, but at some point during boot it drops down to a near unusable level. The brightness adjustment keys also didn&amp;#8217;t work, so I was stuck with a horrible display. The fix is to blacklist the video driver causing the problem:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo blacklist video | sudo tee -a /etc/modprobe.d/local&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Running this then rebooting fixed the problem. Hope this helps someone!&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/133463234</link><guid>http://blog.chrisgrice.com/post/133463234</guid><pubDate>Wed, 01 Jul 2009 10:48:28 +0100</pubDate></item><item><title>Release Bonanza</title><description>&lt;p&gt;Wow, this week is becoming a great day for new software. I count 4 great releases already this week:&lt;/p&gt;
&lt;p&gt;Monday:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.eclipse.org/org/press-release/20090624_galileo.php"&gt;Eclipse 3.5 (Galileo)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tuesday:&lt;/p&gt;
&lt;p&gt;Firefox 3.5 (being released today, no official link as of yet, but the RC can be downloaded from &lt;a href="http://www.mozilla.com/en-US/firefox/all-beta.html"&gt;here&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.virtualbox.org/wiki/Downloads"&gt;Virtualbox 3.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://php.net/releases/5_3_0.php"&gt;PHP 5.3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Add to this the relase of &lt;a href="http://www.python.org/download/releases/3.1/"&gt;python 3.1&lt;/a&gt; last week, and it&amp;#8217;s a great time to be using free software.&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/132920356</link><guid>http://blog.chrisgrice.com/post/132920356</guid><pubDate>Tue, 30 Jun 2009 14:59:19 +0100</pubDate></item><item><title>Overheard in Watford</title><description>Small Girl: Mum?&lt;br /&gt;&#13;
Mum: Yes?&lt;br /&gt;&#13;
Small Girl: Everyone's stupid, aren't they.&lt;br /&gt;&#13;
Mum: Yes.</description><link>http://blog.chrisgrice.com/post/123488730</link><guid>http://blog.chrisgrice.com/post/123488730</guid><pubDate>Sun, 14 Jun 2009 18:43:00 +0100</pubDate></item><item><title>Naked Bike Ride!</title><description>&lt;p&gt;Went to London this weekend, to see the &lt;a href="http://www.worldnakedbikeride.org/uk/"&gt;World Naked Bike Ride 2009&lt;/a&gt;. 1000 bikers descending upon the capital, in order to protest against oil dependency and     car culture. Pictures follow, with originals on &lt;a href="http://www.flickr.com/photos/28725775@N03/"&gt;flickr&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/28725775@N03/3625109707/"&gt;&lt;img src="http://farm4.static.flickr.com/3664/3625109707_bbd59a25a7.jpg" align="middle" width="380"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/28725775@N03/3625921716/"&gt;&lt;img src="http://farm3.static.flickr.com/2423/3625921716_4654e4f238.jpg" align="middle" width="380"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/28725775@N03/3625915454/"&gt;&lt;img src="http://farm4.static.flickr.com/3654/3625915454_2e74c80a0e.jpg" align="middle" width="380"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/28725775@N03/3625916190/"&gt;&lt;img src="http://farm4.static.flickr.com/3400/3625916190_49c16864df.jpg" align="middle" width="198" height="500"/&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/123486183</link><guid>http://blog.chrisgrice.com/post/123486183</guid><pubDate>Sun, 14 Jun 2009 18:36:00 +0100</pubDate></item><item><title>Steak!</title><description>&lt;p&gt;This is an unusual topic for me. Steak! Apparently I&amp;#8217;ve been cooking them wrong for a while now, and was enlightened by an anonymous internet person. Following their instructions resulted in the best steak I&amp;#8217;ve ever cooked. As follows:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Buy GOOD meat. Don&amp;#8217;t skimp, you&amp;#8217;ll notice.&lt;/li&gt;
&lt;li&gt;Let your steak stand for half an hour before cooking.&lt;/li&gt;
&lt;li&gt;Get the pan HOT. When you think it&amp;#8217;s hot enough, leave it longer, and check again later.&lt;/li&gt;
&lt;li&gt;Small amount of butter into the pan.&lt;/li&gt;
&lt;li&gt;Sear the steak for 3 minutes on each side, only turning once.&lt;/li&gt;
&lt;li&gt;Leave to stand for 10 minutes after cooking - DO NOT CUT IT OPEN&lt;/li&gt;
&lt;li&gt;Enjoy!&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Result - awesome steak. Add some french mustard and chips and oh god so good.&lt;/p&gt;
&lt;p&gt;This concludes what somehow turned out to be a recipe post.&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/121480744</link><guid>http://blog.chrisgrice.com/post/121480744</guid><pubDate>Thu, 11 Jun 2009 02:22:38 +0100</pubDate></item><item><title>Cthulhu fhtagn! What a wonderful Phrase!Cthulhu fhtagn! Means the end of daaaays!You&amp;#8217;re gonna...</title><description>&lt;p&gt;Cthulhu fhtagn! What a wonderful Phrase!&lt;br/&gt;Cthulhu fhtagn! Means the end of daaaays!&lt;br/&gt;You&amp;#8217;re gonna be eaten, in non-Euclidean waaaays!&lt;br/&gt;It&amp;#8217;s our sanity free, Eschatology,&lt;br/&gt;Cthulhu f&amp;#8217;taghn!&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/118503963</link><guid>http://blog.chrisgrice.com/post/118503963</guid><pubDate>Fri, 05 Jun 2009 17:06:57 +0100</pubDate></item><item><title>I don’t know whether it’s just the hot weather, but...</title><description>&lt;embed type="application/x-shockwave-flash" src="http://assets.tumblr.com/swf/audio_player_black.swf?audio_file=http://www.tumblr.com/audio_file/116828731/H7iQalgIZo8a7hv9wMREW9mT&amp;color=FFFFFF" height="27" width="207" quality="best" wmode="opaque"&gt;&lt;/embed&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I don’t know whether it’s just the hot weather, but I can’t stop listening to this song. Usually while walking somewhere in the sun, with a big goofy smile.&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/116828731</link><guid>http://blog.chrisgrice.com/post/116828731</guid><pubDate>Tue, 02 Jun 2009 16:00:51 +0100</pubDate></item><item><title>"I fear those big words which make us so unhappy."</title><description>“I fear those big words which make us so unhappy.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;James Joyce - I do not care if quoting him is somewhat pretentious, the dude knows Things.&lt;/em&gt;</description><link>http://blog.chrisgrice.com/post/106292225</link><guid>http://blog.chrisgrice.com/post/106292225</guid><pubDate>Mon, 11 May 2009 16:28:30 +0100</pubDate></item><item><title>Video</title><description>&lt;iframe src="http://player.vimeo.com/video/3814849" width="400" height="237" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://blog.chrisgrice.com/post/101993850</link><guid>http://blog.chrisgrice.com/post/101993850</guid><pubDate>Thu, 30 Apr 2009 22:16:24 +0100</pubDate></item><item><title>Radiohead - Videotape</title><description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/-kCKob1YKOU?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Radiohead - Videotape&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/101991365</link><guid>http://blog.chrisgrice.com/post/101991365</guid><pubDate>Thu, 30 Apr 2009 22:07:21 +0100</pubDate></item><item><title>Big Ideas (don’t get any)</title><description>&lt;iframe src="http://player.vimeo.com/video/1109226" width="400" height="225" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Big Ideas (don’t get any)&lt;/p&gt;</description><link>http://blog.chrisgrice.com/post/101990801</link><guid>http://blog.chrisgrice.com/post/101990801</guid><pubDate>Thu, 30 Apr 2009 22:05:08 +0100</pubDate></item></channel></rss>

