Here's a chronological list of all the posts on this website. A star (*) means that I thought the post was pretty neat (or, that a lot of other people thought it was pretty neat).
Extending my Lisp compiler and adding a fast virtual machine.
Visualizations and techniques for different maze generation algorithms.
Using ptrace to intercept and modify a process's getrandom syscall.
Exploring patterns and systems for creating realtime browser games.
Smaller programs that do less work.
Transpiling Lisp to JavaScript using Rust.
Creating my own developer tooling, and some thoughts on line profilers.
Shrinking demo data by a factor of 13x.
2023
Making my programming language 4000x quicker, and adding a static type checker.
Building a demo player for coaches and analysts to visualize CS2 gameplay.
Building a fast boolean expression evaluation engine.
Using seccomp and setrlimit to build a Python sandbox.
The highest user-joy-per-visit than any other project I'll ever work on.
Using Vercel's Build Output API to explore some framework ideas.
Thoughts and reflections on my six week batch.
An overview of the sandboxing landscape, and some experiments with Deno.
How I added three new features to my text editor.
Writing my own quirky version of nano using the 2D game engine Ebitengine.
Rewriting library code to speed up my interpreter benchmark by 28%.
Extending an existing tree-walk interpreter step by step.
2022
Sharing files with my friends from the terminal.
Building a guessing game for popular open source projects.
A few ideas I tried. Including flamegraphs, fast HTTP routing, and infinite chess.
Artificial life and Langton's ant.
Shipping a speedy key/value store for datasets larger than memory.
Creating an automated solver for Sokoban puzzles.
Writing a fast file searching program and benchmarking it.
I wrote a program that sends cats to my phone when I'm sad at the computer.
2021
Using Web Workers and WebAssembly to build a speedy UI.
What is the minimum amount of features I need to not hate my life during this festive season?
WebAssembly meets 16000 HTML checkboxes.
The sensation of incremental progress when programming with Rust.
Writing an interpreter from scratch.
Building a live dashboard with the help of a few hardware modules.
Picking the correct thread colors from embroidery hoop images.
Applying photo geolocation estimation to the game of GeoGuessr.
Building a technical demo to understand this blossoming area of technology.
Generating random but familiar text by building Markov chains from scratch.
2020
People that inspire me the most (and that I steal from most regularly).
Exploring the computational complexity of chess. Code snippets in Python so you can do the same.
Making a casual game more competitive and arguing with my friends about Elo systems.
Picking up Ink and giving back to the community.
Learning more about user data collection by writing my own analytics system.
The famous flocking simulation built with the Ebiten game library.
Building a replacement for JavaScript's random number generator.
Calculating the path between two countries with the least border crossings.
A quick look at polyfilling, along with with solutions for both environments.
Engineering tickets often end up meaning a lot. For the product but also emotionally for the individual.
Use Netlify serverless functions to let users add comments to a static website.
A prototype Raspberry Pi dashboard to save me talking to my smart assistant.
Writing code, working (almost) solo, and exploring remote-life during the UK lockdown.
Building a fun toy with my Raspberry Pi, Python, and Tweepy.
Discussing an amazing resource for those writing for developers.
Building a tool for users to analyze their work over time.
Migrating from Jekyll to Gatsby.
2019
Writing JavaScript with a one character width restriction.
Using Canvas, Express, and a GitHub Action.
I'm really starting to enjoy Go.
Conway's Game of Life in Ebiten.
My most popular project yet!
Pairing for fun and profit.
A high-level overview of caching.
Prepping for the internet to happen.
Using character codes to hide in plain sight.
Making a small change to the Jekyll project.
A few tips that have really helped me.
The title is a lie I also show how to use SQLite.
Different ways to do one thing well.
It's fast but is it worth it?
A JavaScript webscraper for MDN.
Joining two of my favorite ecosystems together.
Breaking down the Boyer–Moore majority vote algorithm with examples in Python.
Bubblesort isn't everything.
Advice that I haven't seen elsewhere.
Attract and educate.
Let's learn how to pass data back and forth between languages.
Learning and building.
Using the DEV.to API with Node.
Crawling a website for missing resources using the Python standard library.
I love code golf and you should too!
Dust off your ternary expressions, we're going in.
The basics of building a Reddit bot that listens for phrases and replies to them.
How to setup Travis CI for a Node/Express project.
A lo-fi solution for streaming images from your Raspberry Pi to the web.
An overview of how I learned to code. Also a bit on my experience during my CS Masters.
Living, working, building, and drinking too much coffee.
A little on the history of WebSockets and a brief overview on how to use them in JavaScript.
On enjoying being part of a team.
Creating GitHub badges based off the time when most people contribute to a GitHub project.
Building a website which live streams every emoji posted to Reddit.com.
Goofy project in which you can play Sudoku entirely within your URL bar.
Writing an order tracker with Node, Express, and Firebase.
Benchmarking websocket servers and frameworks with async Python.
Solutions for: Move Zeroes, Merge Two Sorted Lists, and Merge Two Binary Trees.
Solutions for: Flipping an Image, Leaf-Similar Trees, and Maximum Depth of N-ary Tree.
Solutions for: Invert Binary Tree, N-ary Tree Postorder Traversal, and N-ary Tree Preorder Traversal.
Solutions for: Monotonic Array, Max Consecutive Ones, and Contains Duplicate.
Solutions for: Range Sum of BST, Max Increase to Keep City Skyline, and Custom Sort String.
Solutions for: Verifying an Alien Dictionary, Reverse Only Letters, and Backspace String Compare.
Solutions for: Reverse Vowels of a String, Isomorphic Strings, and Reverse Words in a String.
Solutions for: Single Number II, Fibonacci Number, and Ransom Note.
Solutions for: Majority Element, Detect Capital, and Not Boring Movies.
Solutions for: Encode and Decode TinyURL, Insert into a Binary Search Tree, Minimum Add to Make Parentheses Valid, and Goat Latin.
Solutions for: Two Sum, Valid Anagram, and Length of Last Word.
Solutions for: Keyboard Row, Reorder Log Files, and Single Number.
Solutions for: Uncommon Words from Two Sentences, Search in a Binary Search Tree, and Fizz Buzz.
Solutions for: Reverse Words in a String III, Sort Array By Parity II, and Reverse String.
Solutions for: Sort Array By Parity, Robot Return to Origin, and Self Dividing Numbers.
Solutions for: N-Repeated Element in Size 2N Array, Univalued Binary Tree, and Unique Morse Code Words.
Episode one of tacking Leetcode problems and discussing solutions. Jewels and Stones, Unique Email Addresses, and To Lower Case.