2024
Advent of Code 2024: Days 1–5
Image upload with render hooks
Syntax highlighting with render hooks
Deprecating shortcodes with render hooks
Review: Bezos
Year X
The many (bad) interfaces of Substack
Print stylesheets
2023
Adventures in latent space
Review: The Excavation of Hob's Barrow
Review: The Lost Room
The Last Battle
Postmortem: Ludum Dare 53
Walkthrough: Causality Couriers
Game: Causality Couriers
Nine years go by
2022
2021
Review: Impostor Factory
Research first
The fate of Imgur
Lucky number seven
Review: Baba is You
Powerpointless
Review: Factorio
Death to the document
2020
Footnote previews
Review: In The Night Wood
Text editors III: Emacs
Brave Rewards and web monetisation
Fraidycat
Illegal unrated blogpost
Managing drafts in Hugo
Roam Research
Review: Lair of the Clockwork God
Review: The Man From Earth: Holocene
Year Number Six
Dumb smart quotes
Browser reader modes
Review: The Outer Worlds
2019
Dark mode
Programming in Inform 7
Animal Man and comics continuity
Fake news on the social graph
The unified Twitter experience
Untangling the IndieWeb
Flat Earth
Site redesign
Nested global substitution in Ruby
Using an external text editor in GameMaker Studio 2
Five years
RIP Google Inbox
Review: Unavowed
The inner page
2018
Product placement in memes
Review: Shardlight
Review: Meddling Kids
Review: The Gig Economy
Postmortem: Trollcave
Walkthrough: Trollcave
Going fourth
Spotify vs Google Music
The project wizard
2017
Review: Getting Over It with Bennett Foddy
Review: Finding Paradise
Announcing Trollcave
How I publish this blog
Review: What the Hell Did I Just Read
List encounters of the third kind
Review: The Sense of Style
Mine cryptocurrency instead of clicking ads
Review: Why's (Poignant) Guide to Ruby
Review: The House in Fata Morgana
Creating a personal wiki with Vimwiki and Gollum
Review: Paranatural
Tiling window managers
Ghost 1.0
Review: Stardew Valley
RSS: there's nothing better
The first three years
Ways to download a file from a remote Windows machine
The Mandela Effect and your imperfect memory
2016
Review: The Magic Circle
Programming in GameMaker
Apple and the jackless iPhone
GPU passthrough: gaming on Windows on Linux
Moving to a static site
Writing a LaTeX macro that takes a variable number of arguments
Review: Demetrios
Showing the current Google Music song in conky
Review: Undertale
End of Year Two
Review: Technobabylon
Review: Life is Strange
Notes on contentEditable and HTML injection
GameMaker and Git
Review: The King in Yellow
2015
Review: The Force Awakens
Text editors II: Acme
Password strength
Notes on CSRF and the ASP.NET ViewState
Apps vs websites
Review: Out There Ω
Postmortem: Ludum Dare 33
Game: I Hunger
Directory persistence hack for webshells
Text editors I: Vim
Review: The City & The City
Review: Her Story
Iji: a subjective experience
Notes on CSRF and JSON APIs
YEAR OF THE GHOST BLOGGING PLATFORM
Encrypting a second hard drive on Ubuntu (post-install)
Writing software
Select only nth row in T-SQL (pre-2012)
Setting up a UniFi controller on CentOS with SELinux
Website updates: fonts and random string helpers
Automated file upload in Ruby with Net::HTTP and MultipartBody
Review: Starbound
2014
Notes on HP Lovecraft and suspension of disbelief
Review: Infinite Jest
Review: Apothecia
GamerGate and game reviews
Review: Taft 2012
Pages per week
Review: Broodhollow
Scraping Facebook for fun and profit
dot ee es
Review: Deep Sounding
Fudge productive test
Review: The General Zapped an Angel
Android development with Java
Game pricing
[s4s] and internet memes
Review: Blackwell Epiphany
The great ear cushion mystery
The unified Windows 8 experience
Some comments on comments
A few site updates
Goodnight, sweet prince
This is the first post