You can subscribe to new posts via email or RSS.

January 2024
Increasing the Integrity of Software Supply Chains awarded IEEE ‘Best Paper’ award
December 2023
Favourites of 2023
February 2023
Most anticipated films of 2023
December 2022
Favourite films of 2022
Favourite books of 2022: Non-fiction
Favourite books of 2022: Memoir/biography
Favourite books of 2022: Classics
Favourite books of 2022: Fiction
December 2021
Favourite films of 2021
Favourite books of 2021: Classics
Favourite books of 2021: Fiction
Favourite books of 2021: Non-fiction
Favourite books of 2021: Memoir/biography
October 2021
Reproducible Builds: Increasing the Integrity of Software Supply Chains (2021)
September 2021
On Colson Whitehead's Harlem Shuffle
July 2021
Saint Alethia? On Bodies of Light by Sarah Moss
June 2021
Raiders of the Lost Ark: 40 Years On
April 2021
Tour d'Orwell: Wallington
February 2021
The Silence of the Lambs: 30 Years On
January 2021
OpenUK Influencer 2021
December 2020
Favourite books of 2020
Interview: Reproducibility and the future of free software
August 2020
The Bringers of Beethoven
July 2020
Pop culture matters
The comedy is over
June 2020
On the pleasure of hating: Lance (2020)
January 2020
Tour d'Orwell: Sutton Courtenay
December 2019
Favourite books of 2019
Tour d'Orwell: Marrakesh
November 2019
Tour d'Orwell: No. 1 South End Road
October 2019
Tour d'Orwell: Rue du Pot-de-Fer
Tour d'Orwell: The River Orwell
Tour d'Orwell: Southwold
March 2019
Book Review: Jeeves and the King of Clubs
Book Review: The Sellout
February 2019
Book Review: A Paradise Built in Hell
Book Review: Painting the Sand
Book Review: Stories of Your Life and Others
Book Review: Toujours Provence
December 2018
Favourite books of 2018
November 2018
Review: The "Trojan Room" coffee
Record number of uploads of a Debian package in a day
October 2018
Salsa ribbons
April 2018
Re-elected as Debian Project Leader
December 2017
Favourite books of 2017
Simple media cachebusting with GitHub pages
November 2017
Faking cleaner URLs in the Debian BTS
October 2017
python-gfshare: Secret sharing in Python
September 2017
Lintian: We are all Perl developers now
Which packages on my system are reproducible?
Ask the dumb questions
July 2017
More Lintian hacking
Installation birthday
April 2017
Elected Debian Project Leader
February 2017
The ChangeLog #237: Reproducible Builds and Secure Software
December 2016
My favourite books of 2016
10 years of Debian
November 2016
Awarded Core Infrastructure Initiative grant for Reproducible Builds
October 2016
September 2016
Diffoscope progress bar
How to write your first Lintian check
August 2016 CLI client
July 2016
Python quirk: Signatures are evaluated at import time
Python quirk: os.stat's return type
April 2016
Parsing Jenkins log output to determine job status
March 2016
Generating dynamic Python tests using metaclasses
December 2015
Peake Nationalism
October 2015
ImportError: cannot import name add_to_builtins under Django 1.9
September 2015
Joining strings in POSIX shell
July 2015
Where's the principled opposition to the "WhatsApp ban"?
January 2015
Calculating the ETA to zero in shell
Recent Redis hacking
Slack integration for Django
Adjusting a backing track with SoX
Giant's Causeway puzzle
Uploading a large number of files to Amazon S3
Web scraping: Let's move on
December 2014
2014: Selected highlights
find(1), trailing slashes and symbolic links to directories
8:20AM. Sunday, 22 December 2013
Starting IPython automatically from zsh
Don't ask your questions in private
November 2014
Validating Django model attribute assignment
Calculating the number of pedal turns on a bike ride
Generating gradiented fade images using ImageMagick
October 2014
Are you building an internet fridge?
London—Paris—London 2014
August 2014
Strava Enhancement Suite update
July 2014
start-stop-daemon: --exec vs --startas
Disabling internet for specific processes with libfiu
Strava Enhancement Suite
Race report: Ironman Austria 2014
April 2014
Marlon Brando in the Lake District
Race report: Cambridge Duathlon 2014
2014 race schedule
March 2014
Two aesthetically pleasing Python snippets
February 2014
Estimating Training Stress Score (TSS) for running on Strava
The effect of pedestaling on time trial bike position
Defaulting to comparing against yourself on Strava
January 2014
Captain Phillips: Pontius Pirate
December 2013
2013: Selected highlights
Quickly switching between imperial and metric units on Strava
Developing responsive websites using the Awesome window manager
October 2013
Readers-writers lock in eventlet
September 2013
Using the Garmin 910XT on Linux
August 2013
Decrypting the Caesar cipher using shell
Cotswold Classic Middle Distance triathlon
April 2013
Thames Turbo Sprint Triathlon 2013
December 2012
2012: Selected highlights
Beethoven Triple Concerto
December 2011
Samuel Gilkes cello restoration
September 2011
"WIRED: spell checking, TIRED: fact checking"
August 2011
Timezone bingo in debian/changelog files
Careful what you wish for...
Monitoring Redis? Check last_save_time
July 2011
Sysadmin-friendly deployment of Gunicorn in Debian
Optimising directory navigation with multiple terminals
Official Redis packages for Debian "squeeze"
Calculating requests per second with pv
September 2010
When Bender takes a photo and says "neat"
irccat plugin for supybot
August 2010
Debian Live Studio
screen-message prompt for Awesome
July 2010
Four men in a mine
June 2010
Distributing locking with Python and Redis
Appending the request URL to SQL statements in Django
May 2010
Rotating email into your inbox using imapfilter
April 2010
Locating source for any Python module
March 2010
Per-channel BTS bot filtering
December 2009
Readline tab completion using Django models
November 2009
Transparent directory replacement with zsh
Confusing bugs
September 2009
GeoDjango and the UK postcode database
August 2009
No-one expects the string literal exception
Ambigram animations using shell and Imagemagick
No citations please, we're British
June 2009
Checklist for configuring a Debian system
May 2009
Poor man's Google Checkout
April 2009 in UK civil liberties
April 2009
Targeted optimisation with django-dumpslow
Installing FogBugz the Debian way
March 2009
Don't rely on others to speak out
Joachim Raff and the orchestration of Bach's Chaconne
Statically analysing Django applications with Django Lint
February 2009
Beethoven's String Quartet in F, Op. 135
Scrap your boilerplate; POSIX shell edition
Committing every time you save in Vim
January 2009
Matching IPs with regexes conCIDRd harmful
December 2008
Kicking the Vim cursor key habit
Unfortunately, we get parallel octaves at the end
November 2008
Re: A timeline view in Django
September 2008
Debian Developer
July 2008
BTS bot improvements
Nouveau nVidia drivers now available in Debian experimental
June 2008
Strange loops
Free concert Thursday
March 2008
AptFs - FUSE filesystem for APT source repositories
Timeline of the Debian project
February 2008
MyTab deployed
January 2008
"Can you get cp to give a progress bar like wget?"
XORLY? Losing your GPG private key safely
GNOME applet for monitoring Debian bugs
Watching Debian change live
Debian packages sorted by build-time and build-space
RAID-5 rocks my world, baby
December 2007
Java Quiz 2
PDF calendar generation
Claws Mail transparent subject rewriting
Custom Debian-Installer images for DCS
October 2007
"Essential course texts for sale. Never used"
Missing notes in the Mozart's «Dissonance» quartet K. 465?
Optimal solution for the block stacking problem found
Top 10 interactive shell anti-patterns
Upload from home or cycle to campus?
Yet another community Xen Server
Renaming a Mailman list
September 2007
CompSoc dynamic DNS service
Graphing the Debhelper Design Pattern
Why does using all the upstream cause lag?
MS Natural Ergonomic Keyboard 4000 under 2.6.23
August 2007
Planet 3YP is dead. Long live Planet 3YP!
Citylink libnotify client
July 2007
June 2007
Lamby's Second Postulate
Sudoku solver in PostScript
May 2007
Pro Prolog is pro.
A confession
Final report complete
April 2007
Pimp your webpage
Hi, Planet Debian
Java Quiz
And now for something completely different to
March 2007
'1791: Mozart's Last Year'
Look out, he knows chmod(1)!
Iron, like a L10n, in Zion
More presentation stuff
Compiler presentation slides
ReactOS drinking game
February 2007
Welsh is not ROT-13
SSHFS and nodev
January 2007
Free concert tomorrow
December 2006
Visitor pattern in Python
November 2006
BT minus minus
May 2006
Basic XSS flaws in Warwick Blogs
April 2006
Urban metrology
LilyPond and LaTeX plugin for Wordpress
March 2006
The truth about orchestral players
January 2006
Not particularly puzzling
November 2005
In the blink of an IM
First experiment in time-lapse photography

Free / open source software reports

Since 2015 I have written a detailed report every month outlining my activity in the free and open source software community. My latest report is for June 2024, but you can view the archive here:

Sep Oct Nov Dec
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Jan Feb Mar Apr May Jun Jul Aug Sep Nov Nov Dec
Jan Feb Mar Apr May Jul Jul Aug Sep Oct Nov Dec
Jan Feb Mar Apr May Jun