< back

One Representation to Rule Them All?


Thinking after property-graphs-vs-reified-graphset-graphs, the reified graphset-graph is not sufficient to represent e.g. an AST, because we want to have two nodes with the same ‘identity’.

A Pyramid of Concerns for Code Review


I once interviewed a software engineer for a role at a company and this was how they explained their approach to code review.

Introducing Nigel


This short presentation / essay describes a novel hypermedia / artistic software invention. You can watch the video here (locally hosted) or on YouTube, and there is a transcript with screenshots below.

Searching YouTube Watch History by Transcripts


The other day I was discussing something with a friend and I remembered a video essay I had watched which referenced a play by Samuel Beckett. Unfortunately I couldn’t remember what the video was, but I did remember the description of the referenced work.

In order to find the original video, I wrote the following short Python 3 software script to search through the transcripts of my YouTube watch history.

Property graphs vs. reified graphset-graphs


This essay presents some ideas on the limitations of property graphs, and outlines a new, more general model which I call ‘reified graphset-graphs’.

Knowledge management and graphs


These are some notes about my journey so far with using graphs for knowledge management, and an idea for a Memex-like universal graph knowledge management system.

MoneyLab NFT Essay


An experimental art essay about non-fungible tokens, made as a submission to the MoneyLab NFT Essay prize.

The question to be addressed is: “Are NFTs the key to a generation’s empowerment, or a capitalist trap?”

This essay has been developed using Git as a narrative medium. You can find the essay, along with documentation on how to read it, on Github at https://github.com/wcerfgba/moneylab-nft-essay.

Not (Un)opinionated Enough


This is an essay on (software) product development that I started writing in December 2021 but never finished. I’ve tried to polish this off and publish it so that it’s actually ‘out there’ in the world and able to inspire other people’s thoughts, but if it’s a bit clunky to read, now you know why! 😅

Products are vehicles for delivering value to customers. Most often products deliver value by being use-objects: they are things which customers can use to perform a task and achieve a goal. For example, a can opener allows me to open a can, and an electric can opener allows me to open a can with less manual effort than a manual can opener.

Custom Search Engine


An essay about some Web search software hacking I’ve undertaken this weekend.

There are (at least) two different modalities to Web search. Sometimes, we don’t have any particular resources or websites we want to consult, and we want to search ‘the whole Web’ to see what people have written on a particular topic. Other times, we have our preferred sources and we wish to consult those websites first, because we appreciate the style or perspective of the creators who publish there. For example, if I want to find a recipe for quesedillas, I can search ‘the whole Web’ for inspiration, but if I want to make vegan quesedillas, I would prefer to restrict my search to ‘my Web’, the websites whose vegan recipes I’ve enjoyed in the past, since there a lot of approaches to making vegan cheese sauces, and I trust certain chefs and food bloggers more than others on such a topic.

End User Programmable Automation


We have a lot of software in our lives but it all seems to exist in its own bubbles. Interop is an explicit feature which has to be built in by the programmer, often requiring specific data structures and support from both ‘ends’ of that interop. For example, if I want my calendar to update my presence in my chat client to ‘Busy’ when I’m in a meeting, I need to have a ‘port’ in the chat client to receive a “set presence to busy” command, and I have to change my calendar to send the correct message to the chat client. This is all assuming that this software is open to extension by myself, and that I’m able to comprehend the code, make the changes, and make my own build with this interop included.

Criss-Cross Booklet


The traditional booklet is intuitive and can be opened up to view two pages at a time. However, unless it is bound along the spine – using a stitch or staples – is is very unwieldy, because as soon as you turn the first page, you split the booklet in to two disconnected grouping of folios – these are called signatures.

To avoid this, we can arrange the folios in a zig-zag or criss-cross pattern, so that each folio locks together with the next one.

A Catalogue of Chords Example


At the start of 2021 I spent some time writing some Clojure code to generate a catalogue of assorted musical chords. You can find the catalogue, with explanatory info and the script to generate it, on GitHub.

In this essay I’ll demonstrate using the catalogue to build a chord progression.

Reverse Engineering Mixcloud Streams


I was listening to a show on Mixcloud today and when I went to try and rewind I discovered that I was unable to, unless I purchased a premium subscription. While I appreciate that platforms such as Mixcloud have to monetise somehow – in order to cover employee wages and bandwidth costs, and eventually make profit to invest in new innovations –, I resent the use of anti-features or feature limitations as a way to drive users to convert to paying customers. In particular, I have no patience for restrictions which are imposed on my local machine. By the time the data has transferred to my computer, if I were to rewind the stream it would be my own computer which is doing the work of loading data from its local cache and seeking through that data. Scrubbing over a timeline is a basic feature of any audio or video player, and if Mixcloud offered an option to download an MP3 then I would be able to seek freely through the show in the audio player of my choice.

Navvies' Barge


This is a website I built for some friends up in Glasgow who run a canal boat trip co-operative. The design is skeuomorphic and makes heavy use of existing design assets and branding. It’s a mostly static site made with Harp and a sprinkle of Vue.js for the booking form. On the backend, there are a couple of PHP scripts and a cron job for receiving booking requests, and sending confirmation emails.



the-light-of-the.world was a piece of self-describing network software art I created that was active from May 2019 to June 2020. The original copy that was hosted on the site is presented below.







WARNING: This audio is loud and clips heavily, please turn down your volume before playing!

An experiment generated in the ChucK programming langauge.