The Cryptopals challenges are a series of cryptography problem sets. I have a high opinion of these, and wrote a solution set prior to joining NCC Group's Cryptography Services team (which currently maintains the challenges).
This series was inspired by my experience helping a couple people work through the challenges. As much as I enjoyed this, I realized two things: first, it's really fun, and second, it's really time-consuming. To save time, I tried to steer them towards answering their own questions through research, but with cryptography being the esoteric field that it is, often the primary sources they were looking for didn't exist or weren't written to be accessible to students. Seeing this, I chose to take matters into my own hands and create a series where I just sit down and explain, as clearly as I can, everything I'd want to convey if I were helping someone with the problem sets in person.
The problems are treated as jumping-off points for discursive discussions with as many tangents, connections, suggested readings, as I can pack in. The goal is not just to reach the finish line as fast as possible, but to take a leisurely stroll in that direction and see some sights along the way. I'm hoping this will make the videos interesting even to people who have already solved the problems.
Starting with the second problem set, I've also started using manim to generate custom illustrations of the concepts at play in each challenge. It's not really built for computer science, so to support this project I've had to develop a custom plugin which I'm calling cranim; this will be released Soon(TM).
Ironically, this project has itself proven to be very time-consuming; in fact, it has devoured much of my free time for several years running. This is in part because I've had to teach myself each step in the process, some of which, like audio engineering, manually cleaning recordings, video editing, and rendering animations, are nontrivial (luckily, they're also fun).
So far, the reception has been overwhelmingly positive (it spent a day in the top ten on Hacker News!), and I am planning to continue the series for as long as my employer continues supporting it.
That's me on the right! The music isn't mine but the projections all are.
(for the full concert, see here)
I've been collaborating with my good friends in Fuzzy Math, developing visual sets for their live shows. You can see an example above.
I run the lights off of a couple MIDI controllers which feed into a custom graphics framework I've written from scratch in Processing and GLSL.
Everything you see in my visual sets is generated live. It's different every time, and most of it is improvised.
You can find a collection of these posts here.
I only write these for books I've really enjoyed. The form, then, is less of a review (since you already know what I think) and more of an exploration. It's my attempt to share some of what makes these books so compelling to me.
This project is currently paused; see this post for details.
I've been working on this project since early 2017. The goal: to create a robust system for sharing and preserving research. This was first conceived as a response to attempts by several governments to censor research on climate change.
The system consists of two parts: The actual application described above - Theseus - and a distributed hash table (DHT) on top of which the application is built. In theory, a number of existing DHT algorithms could be used, but I'm designing a new one with the working name Theseus DHT. I believe this new design can greatly improve on today's popular DHTs' defenses against certain categories of attack, particularly Sybil attacks.
These projects' implementations are not yet complete, but the theoretical results achieved so far are striking.
I've written a fair bit on this site about Theseus and Theseus DHT. Here's a list of those posts (though bear in mind that not all of them are up to date).
Obsidian is a constraint-based system for graphics programming. Backed by Z3, It lets you define groups of shapes, specify relations between them, style them in any way supported by the SVG format, and render them from that information alone.
To be honest, the project is currently in a half-broken state - I added support for animations, and got just far enough to generate the content in the first part of my writeup of Wang's Attack, but this broke some stuff and I haven't picked up the pieces yet.
I feel that this project is cool, and I'm proud of it, but practically speaking I'm not sure it does much that I couldn't also do with Manim and the manim-mobject-svg plugin (neither of which were made by me, just to be clear - but they're what I would use today, which is why I haven't felt the need to fix this tool yet).
I have an unconventional system for taking notes, and I'm a bit proud of it.
Most of my notes start out as voice notes on a dedicated handheld recorder. This plugs into a central server over USB; whenever the recorder is plugged in, recordings are automatically moved off of it. This is also how the recorder recharges.
Once transferred, recordings are automatically encrypted and these encrypted copies are backed up to the cloud. The server, which has lots of cores and lots of RAM, also runs an optimized implementation of OpenAI's Whisper text-to-speech model, which automatically transcribes every recording.
These transcriptions are automatically fed into my text-based note taking system, which is built around ssh and Vim with the vim-notes plugin.
I'm planning on writing a couple blog posts, one on the TTS stuff and one on the vim-notes stuff, and will update this section once they're finished.
Project Euler is a bafflingly extensive set of problems situated in the overlap of math and computer science. Back in high school I was really into these, as you can see, and despite having barely touched them in the last decade I'm still ranked in the 99.3rd percentile.
Unlike Cryptopals, Project Euler strongly discourages people from sharing their solutions, as I think they should. That said, everyone who works on these problem sets in any serious way will end up building up an extensive toolkit, and I don't see anything wrong with sharing those. One of these days I'll get around to sharing mine; watch this space.