Hacker. Photographer. Artist. Slacker.

Latest Posts

Useful Enums for Django

I published my first package to PyPI today. Which is odd, considering that I've been developing stuff in Python for over a decade.

I decided, after doing a bunch of work on various projects, that I needed to scratch a particular Django-related, itch. Namely, that of choices:

    (0, "My …

Pythonic Confessions

So, I have a confession to make.

Many years ago, I had an job interview with Canonical. This was, I think, my second interview. The first had gone well, and the second had been postponed because the original interviewer scheduled to talk to me kept forgetting.

Luckily, I got a …

sdroW tsegnoL

After yesterday's bit of fun with Python and the English dictionary, the thought suddenly popped into my head:

There are eight six letter words in English whose letters are in alphabetical order. But what about reverse alphabetical order?

Luckily, the change was a simple one. If you pass --reverse to …

Longest words

Andy Nyman tweeted the following today:

Today's Fact: The word 'almost' is the longest in the English language with all the letters in alphabetical order.

— Andy Nyman (@andynyman) December 27, 2015

And because I'm an ornery sort, I wrote a script to prove it. Turns out that "almost" is …

Transactions in MAAS


Gavin is at it again, talking about transactions in MAAS, and how Django makes your life harder when it comes to transactions.

Introduction to blocking and non-blocking code in MAAS


My friend and erstwhile colleague Gavin Panella has posted an article on how we handle(d) blocking and non-blocking code in MAAS, whilst playing within Django’s sandbox. It’s well worth a read if you’re finding yourself having to asynchronous work within a framework that doesn’t …

Inside the Sausage Factory

Yesterday, I saw a question over on Ask MetaFilter entited "How is the software sausage made?" and asking about different folks' software development methodologies and processes. I decided to share the way that things were done at Canonical, because that's where I learnt a lot of development best-practices (which I …

The Ready-to-Code Checklist

I’m currently working on a Thing for a Client, and I’m reminded of the rules that we used to have for doing Launchpad development. One of them was the Ready-to-Code checklist. Googling “Ready to Code” brought this up as the third result, and since it’s still relevant …

Farewell, Canonical

Truth be told, I’m not sure I ever thought I’d be writing this blog post. I’m leaving Canonical after seven-and-a-half amazing years, and going on to something new.

When I started at Canonical back in 2007 I was such a different engineer from the one I am …

Introductions and Explanations

[Helleau! Greetings! Welcome! Don’t worry, I was just filling time ’til you got here.]{.s1}

[It’s been a long time coming, this blog. I’ve toyed with the idea of it on and off, but I realised that I needed to create it because, well, I only blog …