All articles

Monday, 23 November 2015
Octopus Energy

A modern, high-tech energy supplier

Friday, 2 October 2015
A useful template for commit messages

A simple heuristic for preferring the imperative mood

Wednesday, 2 September 2015
Copying Postgres output into a spreadsheet

Quick tip on tweaking the output of psql

Saturday, 2 May 2015
An SSH tip for modern AWS patrons

Slightly useful tip for SSHing onto EC2 instances

Saturday, 4 April 2015
Thursday, 19 March 2015
Backing up Postgres database rows before deleting them

Quick tip on avoiding accidental data loss

Saturday, 31 January 2015
Avoiding clashing Django migrations

A simple Travis test to avoid frustration

Friday, 24 October 2014
Bootstrapped virtualenvs

Using postmkvirtualenv to prime postactivate

Wednesday, 22 October 2014
Integrating Django application metrics into Zabbix

A simple how-to for feeding Django metrics into Zabbix

Thursday, 17 July 2014
Linking to Github

Git aliases for grabbing Github links

Wednesday, 18 June 2014
Continuously rebuild your project

Using CI to avoid pain for new team members

Tuesday, 17 June 2014
Using the silver searcher with Vim

Lightning-fast :grep searching in Vim

Thursday, 1 May 2014
The road to Oscar 1.0

A plan for 2014

Thursday, 16 January 2014
Command-line tips for effective release announcements

Git tips for writing release notes

Friday, 4 October 2013
Thursday, 8 August 2013
Enhancing your git commit editor

Commit message pedantry taken to a new level

Sunday, 28 July 2013
Dumping and restoring a PostGIS database

Harder than it should be

Tuesday, 9 July 2013
purl, URI templates and generated tests

Matching the RFC using Nose's test generators

Wednesday, 12 June 2013
A deferred logging file handler for Django

Using a setting to control where file logs go

Saturday, 1 June 2013
Conditional logic in Django forms

Radio buttons can be tamed

Friday, 3 May 2013
PyPI README badges

Shiny badges using

Tuesday, 23 April 2013
Monday, 22 April 2013
Disable database access when writing unit tests in Django

A decorator for the testing puritan

Thursday, 18 April 2013
How to install PIL on 64-bit Ubuntu 12.04

Because I have to look this up every time

Monday, 4 March 2013
Converting Github issues into pull requests

A better workflow using Hub

Tuesday, 19 February 2013
Altering Postgres table columns with South

Using USING to cast correctly

Monday, 14 January 2013
Configuring logging for

The recommended way of debugging SQL problems

Friday, 14 December 2012
Mathematics and engineering

A pithy footnote from SICP

Saturday, 20 October 2012
Tuesday, 16 October 2012
How to chroot a user in Ubuntu 12.04

Allowing external parties to sFTP securely

Sunday, 9 September 2012
Sunday, 2 September 2012
Cacheback - asynchronous cache refreshing for Django

A simple caching library that uses Celery to refresh stage cache items

Thursday, 19 July 2012
Use models for uploads

Using models for audit and clarity

Friday, 6 July 2012
Vim macros for adding i18n support to Django templates

Using macros to automate the boring stuff

Saturday, 16 June 2012
A data migration for every Django project

No more embarassing emails from

Saturday, 5 May 2012
Django, Nginx, WSGI and encoded slashes

Encoded slashes have a hard time getting through to Django

Thursday, 19 April 2012
purl - immutable URL objects for Python

An immutable URL class designed for easy inspection and manipulation

Thursday, 12 April 2012
Embedding HTML in Django messages

Using extra_tags to flag up HTML-safe messages

Sunday, 1 April 2012
Wednesday, 21 March 2012
How to reload Django's URL config

A rare sighting of the reload function in the wild

Tuesday, 13 March 2012
Validating international postcodes in Django

Using dynamic imports to leverage Django's localflavor

Sunday, 11 March 2012
How to sync PyCon videos to your iPhone

Using Python to fetch and convert YouTube videos for syncing to iPhone

Monday, 5 March 2012
Tips for using a git pre-commit hook

Yet another git tips article

Saturday, 3 March 2012
Confoo 2012 presentations

Two talks from the Python stream

Thursday, 1 March 2012
Testing HTTPS handling in Django

Spoofing a HTTPS request using the Django test client

Saturday, 25 February 2012
Prefer data migrations to initial data

South provides a better way

Thursday, 9 February 2012
A Fabric function for git tagging

Using Fabric with git-flow

Thursday, 2 February 2012
Solving MySQL connection problems caused by a dead name server

MySQL's DNS lookups can cause serious problems

Monday, 23 January 2012
Friday, 13 January 2012
Introducing unittest-xml: testing XML in Python

A simple module for making XPath assertions

Friday, 6 January 2012

Yet another RST blog

Thursday, 5 January 2012
How to set-up MySQL for Python on Ubuntu

This doesn't stick in my head

Saturday, 20 August 2011
Tuesday, 16 August 2011
Console logging to STDOUT in Django

Undocumented option required to avoid STDERR

Thursday, 11 August 2011
Sunday, 22 May 2011
Multi-scp: copying a file to all hosts in your SSH config

Using node.js to copy a file to multiple remote hosts

Wednesday, 20 April 2011
Coloured output while doing TDD with Django and Fabric

Providing simple coloured feedback

Sunday, 13 March 2011
Domain-model-mapper - A PHP Data Mapper implementation

A lightweight implementation of the Data Mapper for PHP 5.3

Saturday, 12 March 2011
Commandlinefu presentation at Confoo 2011

Link to slides available here

Friday, 4 February 2011
Wednesday, 10 November 2010
nurl - an immutable URL object for node.js

A URL value object for node.js

Friday, 5 November 2010
mysqldump with wildcard table matching

Using the fu to enhance mysqldump

Friday, 3 September 2010
Sunday, 22 August 2010
Phing trick for avoiding deploying debug code

Using the fu with with phing to prevent further embarassments

Thursday, 28 January 2010
Return false with prudence

Returning false to indicate an error is wrong

Tuesday, 13 October 2009
Javascript refactoring for customising shared libraries

Structuring a javascript file for repeating use and customisation

Thursday, 9 July 2009
A pseudo-code job advert and its discontents

A cringe-worth and divisive recruitment technique

Sunday, 31 May 2009
Deploying cron jobs using Phing

A phing pattern for deploying cron scripts

Monday, 25 May 2009
Auto-generating an FAQ with Prototype

A lazy way of generating an FAQ

Sunday, 24 May 2009
Inspecting Javascript objects

Simple introspection methods

Wednesday, 6 May 2009
Phing, Xinc and Nabaztags

Using Phing to command a Nabaztag

Wednesday, 15 April 2009
Ingenious use of an anonymous function

An element Lambda employment

Sunday, 15 March 2009
Using a Phing filter to flush browser caches

Using a filterchain to set a cache-busting query parameter

Tuesday, 3 February 2009
Thursday, 22 January 2009
Current pet project: Command-Line-Fu

Creating a site for sharing commands

Sunday, 11 January 2009
Saturday, 10 January 2009
Phing task to update Twitter status

Simple PHP extension to Phing for Tweeting

Sunday, 4 January 2009
Deploying to a shared hosting environment using Phing

Using Phing's FtpDeployTask to good effect

Sunday, 14 December 2008
Monitoring MySQL with Ganglia and gmetric

A simple bash script for pushing MySQL stats in Ganglia

Saturday, 6 December 2008
Sunday, 23 November 2008
Checking all MySQL tables

Using the commandline to build a string of CHECK commands

Saturday, 8 November 2008
Javascript cookie objects using Prototype and JSON

Simple class-based wrapper to using cookies

Friday, 7 November 2008
Date conditional redirects with mod_rewrite

Using mod_rewrite to redirect based on the date

Friday, 31 October 2008
Creating large XML files with PHP

Using PHP's DomDocument to create large XML files

Sunday, 26 October 2008
Monitoring MySQL

watch ing mysqladmin ftw

Wednesday, 22 October 2008
Following log files with tail -f

Simple trick to watch progressive updates to a file

Thursday, 10 November 2005
Writing a Thesis in LaTeX

A short guide to getting things to look nice

RSS feed