Programming

Ways of writing code: functional programming, currying, algebraic effects, declarative code and type checking in plain JavaScript.

Too much code to read

Managing AI agents when they write more code than you can read.

26 October 2026

Maintaining a PHP framework for 25 years

From copy-pasted code in a web design company to a modular monolith, one version at a time.

7 October 2026

A globally standard stylesheet

One stylesheet for plain, standards compliant HTML, instead of a sea of divs and classes.

15 July 2026

Declarative programming

Write-up to come.

14 March 2022

Modular monoliths in PHP

One PHP application built from small modules with strict edges, each ready to become a service.

14 December 2021

How I organise Node modules

A module is one tree of names, and every name is written out in full wherever it's used.

21 August 2021

Simple typechecking goes a long way

Most bugs in plain JavaScript are a value of the wrong type, so it pays to check them at the door.

29 June 2021

Type safety at the boundaries

Checking data from the outside world once, as it arrives, with FromJson functions and a small assert library instead of a schema library.

17 November 2020

Angular best practices for large teams

Keeping a large Angular codebase small by having one right way to do everything.

20 October 2020

Declarative charts in Angular

Charts written in the template as components, instead of data objects built first.

22 July 2019

DOM as data

A CSV download whose columns and rows are components: a preview in the page, and the data for the file.

19 July 2019

Composable typechecking in JavaScript

Catching type errors early in plain JavaScript with small type checks that compose, including checks for objects.

9 July 2019

Curried functions in JavaScript

Curried functions exists in some programming languages and they are functions which have been called without all their arguments. This yields a new function which has the remaining arguments, which can be called with those arguments to get a return value from the original function.

7 July 2019

Simulating algebraic effects in JavaScript

Write-up to come.

26 September 2018

SWF disassembler

A disassembler and decompiler for the ActionScript 1 and 2 in Flash SWF files, in JavaScript for Node.js.

23 September 2012