Extracting a list of IDs from an XLSX file

Using csvkit and UNIX to extract a list of IDs from an XLSX file.

Read more →

Fruit garden schematic

Diagram of my fruit garden, so I remember what’s what.

Read more →

Potential social benefits of the coronavirus pandemic

A look at some of the positive things I hope will come out of the coronavirus pandemic.

Read more →

Working from home tips

Some tips for working from home that have served me well over the years.

Read more →


FiraCode is a “monospaced font with programming ligatures”, which means it makes things like == show up in your editor as a single token.

Read more →

Ruby's Time vs DateTime classes

In Ruby when should you use Time vs DateTime, and why?

Read more →

It gets easier

It gets easier. Every day it gets a little easier. But you’ve got to do it every day. That’s the hard part. But it does get easier.

Read more →

Early wild garlic

Found some young wild garlic shoots while out walking yesterday

Read more →

Start with the command line

Starting your project with a command line tool forces you to figure out what the minimal solution to your problem would look like.

Read more →

Foggy winter days

I like the mystery of fog. You don’t know what might be happening beyond the fog.

Read more →

Being ill

Being ill is rubbish, but when you come out the other side it can make you feel grateful that things are back to normal.

Read more →

The costs of your habits

The costs of your good habits are in the present. The costs of your bad habits are in the future.

Read more →

Command-query separation principle

When writing a program it’s common to have two distinct types of method, verbs and nouns. The verb methods have names like generate or launch, and the noun methods have names like quarterly_sales_statistics or current_altitude.

Read more →

Life Lessons from Bergson

Refusing to learn anything new is a major cause of petrifaction.

Read more →


I relish a good sunset.

Read more →

Older posts

Beauty in decay Friday 4 October 2019

Chopping wood Thursday 3 October 2019

Enjoy life Wednesday 2 October 2019

The secret of a full life Tuesday 1 October 2019

Trees will save the world Monday 30 September 2019

September's books and links Sunday 29 September 2019

Chutney Saturday 28 September 2019

Early autumn Friday 27 September 2019

Have fewer dependencies Thursday 26 September 2019

Programming language trends Wednesday 25 September 2019

Do things for fun Tuesday 24 September 2019

Find the underlying principle Monday 23 September 2019

Sunday morning runs Sunday 22 September 2019

Sunflowers Saturday 21 September 2019

Just start Friday 6 September 2019

August musings Thursday 29 August 2019

Restaurant review: The Looking Glass, Cheltenham Saturday 3 August 2019

Distraction-free new tab Sunday 14 October 2018

The power of a system Wednesday 3 October 2018

Eat food, not too much, mostly plants Sunday 2 September 2018

Running philosophy Tuesday 21 August 2018

YNAB API: Get total amount paid to each payee Wednesday 15 August 2018

Gloucester Cathedral Sunday 26 November 2017

In Ruby, #find_all and #select are different (for Hashes) Monday 17 October 2016

Using nokogiri with pry Tuesday 11 October 2016

Web scraping with morph.io Friday 6 February 2015

Advanced web scraping with Mechanize Thursday 22 January 2015

Web Scraping with Ruby Monday 19 January 2015

Banana Bread Saturday 12 April 2014

Beer Wednesday 1 January 2014

Static http file server in Go Wednesday 17 July 2013

Raspberry Pi GPIO Hacking Monday 31 December 2012

Slow dotfiles Monday 17 December 2012

Removing code Sunday 9 December 2012

Resque Rails Auth Friday 13 January 2012

Test Driven Development Lifecycle Tuesday 22 March 2011

An introduction to node.js Sunday 14 February 2010