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
- Concorde
- September 2016
- Diffoscope progress bar
- How to write your first Lintian check
- August 2016
- try.diffoscope.org 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
- travis.debian.net
- Peake Nationalism
- try.diffoscope.org
- 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
- Sprezzatura
- 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
- Goals
- 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
- Lotteries
- 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
- Fingerspitzengefühl
- 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
- DebConf9
- 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
- Devon
- Free concert Thursday
- March 2008
- AptFs - FUSE filesystem for APT source repositories
- Timeline of the Debian project
- February 2008
- FOSDEM 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
- Strawman
- Planet 3YP is dead. Long live Planet 3YP!
- Citylink libnotify client
- Lazy
- July 2007
- Graduation
- June 2007
- Lamby's Second Postulate
- Fnreduce
- 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
- SpamAssassin
- FOSDEM 2007
- Welsh is not ROT-13
- SSHFS and nodev
- January 2007
- Free concert tomorrow
- Moar MONKEYS_AT
- Three MONKEYS_AT Xing
- 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 October 2024, but you can view the archive here:
- 2015
- Sep Oct Nov Dec
- 2016
- Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
- 2017
- Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
- 2018
- Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
- 2019
- Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
- 2020
- Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
- 2021
- Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
- 2022
- Jan Feb Mar Apr May Jun Jul Aug Sep Nov Nov Dec
- 2023
- Jan Feb Mar Apr May Jul Jul Aug Sep Oct Nov Dec
- 2024
- Jan Feb Mar Apr May Jun Jul Aug Sep Oct