Write your own Virtual CPU in C++ (2014)
I've previously covered writing my own virtual CPU , but I never really fleshed it out and it was never a real thing... For a while, wel...
Common mistakes writing React components with hooks
The most common mistakes I found while writing react components, why they are mistakes and how to avoid or fix them.
How I recovered a lost email from my email client’s memory
A bug caused 30 minutes of work on an email to disappear. However, I was able to recover it by poking around in the process memory using gdb/gcore. Here’s how.
Algorithms Are Now Commodities
When I first started writing software, developers had to implement most of the algorithms they used; yes, hardware vendors provided libraries, but the culture was one of self-reliance (except for maths functions, which were technical and complicated).
Clear explanation of Rust’s module system
Easy to understand explanation using visual aids and practical examples
How to break everything by fuzz testing
Fuzz testing is a bit like the infinite monkey theorem, but instead of Shakespeare you get crashes.
Why does musl make my Rust code so slow?
Software engineer specializing in query engines and distributed systems
Reflections on Software Performance
At this point in my career, I’ve worked on at least three projects where performance was a defining characteristic: Livegrep, Taktician, and Sorbet (I discussed sorbet in particular last time, and livegrep in an earlier post). I’ve also done a lot of other performance work on the tools I use, some of which ended up on…
Regexes vs. Combinatorial Parsing (2019)
Recently, I’ve been working on a music app that needs to get a musical sequence (like a melody) from the server to the client. To do this, we use a format called ABC. (You can read about how ABC music notation works here .) We chose ABC because it’s more readable than MIDI, it’s pretty concise, and it’s a standard, so…
Guitar Chord Voicings with Prolog
Prolog is a language that excels at defining and exploring relationships. Let’s take advantage of that and use Prolog to explore a few of the myriad of relationships that exist between chords and the guitar’s fretboard.
Notes on Paxos
These are my notes after learning the Paxos algorithm. The primary goal here is to sharpen my own understanding of the algorithm, but maybe someone will find this explanation of Paxos useful! This post assumes fluency with mathematical notation.
Five lines I put in a blank .vimrc
TL;DR To make a default Vim installation more useful, type the following 5 lines into its .vimrc file:
Specter – Clojure API for immutable programming (2017)
After two years of being open source and a lot of development, Specter has reached 1.0. In this po...
Using Clojure in the command line with Babashka
Kari Marttila’s Blog (e.g. cloud and Clojure related articles)
Sync vs. Async Python: What Is the Difference?
Have you heard people say that async Python code is faster than "normal" (or sync) Python code? How can that be? In this article I'm going to try to explain what async is and how it differs from…
A Pico-8 story: How the fantasy console unlocked Frédéric Souchu’s dreams
Pico-8 and the retro-gaming trend
Continuations by example: Exceptions, time-traveling search, threads, and more
Continuations are the least understood of all control-flow constructs. This lack of understanding (or awareness) is unfortunate, given that continuations permit the programmer to implement powerful language features and algorithms, including exceptions, backtracking search, threads, generators and coroutines.
What if we'd had better HTML-in-JS syntax all along?
I have a theory that a grave mistake was made in 1995 - the decision not to have a neat, succinct and declarative way of representing html elements in javascript. [On reading the hacker news comments this is pretty historically inaccurate, however, I think this article still stands as "look just how close javascript…
SELECT wat FROM sql
Thanks to Nikhil Benesch, Justin Jaffray and several decades of "wouldn't it be nice if..." for contributions.
Exploring mullender.c – A deep dive into the first IOCCC winner
This post will explore the famous winner of the first IOCCC contest, dive into the story behind the code, and even display the original source programs!
The Hitchhiker’s Guide to PlantUML
share a model or diagram between all members of the team that they can all understand and contribute to and edit
An Introduction to Lock-Free Programming (2012)
Lock-free programming is a challenge, not just because of the complexity of the task itself, but because of how difficult it can be to penetrate the subject in the first place. I …