Interesting stuff from me

Blog post

Forging signed commits on GitHub

November 11, 2023
Creating fake signed commits (continue reading)
Blog post

How to average hues

November 13, 2022
Averaging hues is weird, you can't just take a normal average (continue reading)
Blog post

Each step of decoding a PNG

March 11, 2022
Blog post

Resolving an email deliverablity mystery

June 24, 2024
I broke my mail server by forgetting to update a DNS record (continue reading)
Blog post

GPT-3.5 crashes when it thinks about useRalativeImagePath too much

January 21, 2024
Asking it to repeat "ponyuseRal ponyuseRal ponyuseRal pony" makes API requests fail (continue reading)

IRCCloud XSS from Mastodon embeds

October 9, 2023
Stack Exchange post

Can I buy I-bonds with my tax refund, as a non-resident?

August 5, 2023
I want to own American I bonds, but I'm not a US citizen/resident so I don't have a SSN (I …
Blog post

Everything the Rust format! macro can do

November 19, 2022
My printable summary of everything the Rust format! macro can do (continue reading)
Blog post

Playing with raw census data

June 22, 2022
Blog post

Hidden HTML markup Google Sheets adds to the clipboard

June 20, 2022
Google Sheets/Docs/Slides adds extra HTML markup when copying stuff to the clipboard (continue reading)
Itch game


June 11, 2022
Blog post

Undocumented Google Sheets formula functions

May 8, 2022
Google Sheets has several interesting undocumented functions (continue reading)
Blog post

Turning off Rust's borrow checker, completely

March 28, 2022
Breaking all of the safety in Rust (continue reading)
Blog post

Tracking PDF forms as plain text

March 12, 2022
How I manage my answers to PDF forms in Git (continue reading)
Blog post

Writing semantic ASCII

March 9, 2022
ASCII control characters are quite useful (continue reading)
Blog post

HTML comments work in JavaScript too

February 23, 2022
Some weird legacy behavior in JavaScript (continue reading)
Stack Exchange post

Is there a way to collect statistics from cargo test?

January 23, 2022
On nightly compilers, you can use some unstable flags to get these statistics. Passing the unstable --report-time to the test executable makes it …
Blog post

Zopfli is *really* good at compressing PNGs

December 16, 2021
The Zopfli compression engine provides very good compression ratios. (continue reading)
Stack Exchange post

What is the etymology or software principle behind "fuse" in Rust?

December 13, 2021
The earliest use I could find of "fuse" in the Rust ecosystem is …
Blog post

Analyzing the public hostnames of Tailscale users

December 8, 2021
Blog post

Your Phone app has an email client

November 14, 2021
An explanation of how visual voicemail systems work (continue reading)
Blog post

Google's new related search box optimizes for the wrong metric

November 10, 2021
A box with related searches comes up at the worst possible moment (continue reading)
Observable notebook

How PNG compresses images using filters

November 1, 2021
Stack Exchange post

How do I programmatically taint the Linux kernel?

September 24, 2021
Is it possible to taint a running Linux kernel programatically? I want to be able to test things with a tainted kernel, without recompiling it to make …
Stack Exchange post

Is it possible to check if `panic` is set to `abort` while a library is compiling?

September 21, 2021
You can use this unstable code in your binary or library to cause an error when -C panic=abort is specified:
Stack Exchange post

How to compile Rust to LLVM bitcode including dependencies?

September 3, 2021
Expanding on Aiden4s comment: Delete the current target directory to prevent any old artifacts …
Blog post

How good is Codex?

August 17, 2021
I evaluate Codex, a large-scale language generation model intended to generate programming source code from OpenAI. (continue reading)
Blog post

Accidentally causing a Switch rumor

July 31, 2021
Nintendo's website wasn't updated because of a big update, but because I asked them to. (continue reading)
Stack Exchange post

Remove default linker flags in Rust

July 23, 2021
Start by making sure that you are passing the right linker-flavor. rustc …
Blog post

Using Colemak for a year

July 17, 2021
Blog post

Security​Classification​Level in email headers

May 17, 2021
Recently I got a non-automated email from a government agency. While the email was interesting, what was more interesting was the email headers. (continue reading)
Stack Exchange post

Why doesn't converting a u8 pointer into a [bool; 8] pointer yield the number bit-by-bit?

May 5, 2021
The behavior of that program is undefined (so the output is meaningless). From Miri: error: Undefined Behavior: memory access failed: …
Stack Exchange post

Is repr(C) a preprocessor directive?

April 23, 2021
#[repr(C)] is not a preprocessor directive, since Rust doesn't use a preprocessor 1. It is an …
Blog post

Interesting things in Nintendo's OSS code

March 25, 2021
The Nintendo Switch has some open source parts, and Nintendo very kindly allows the source code for these parts to be viewed. (continue reading)
Stack Exchange post

Destructuring an Option<Box<_>> inside a match statement in Rust

March 15, 2021
Dereference the box after matching: if let Some(inner) = self.pending_removal.take() { let (temp_structure, some_boolean) = *inner; …
Blog post

Writing a Boolean expression parser in Rust

March 15, 2021
Let's write some Rust to parse and evaluate Boolean expressions. (continue reading)
Web app

Linear transformation playground

March 13, 2021
Play with some linear transformations in your browser!
Stack Exchange post

How to run a single doc test in Rust?

March 1, 2021
You can run doc-tests at the granularity of individual documented items. If you have some source code like this: /// ## Example /// ``` …
Observable notebook

Using MNIST data with Observable

November 20, 2020
Blog post

TagTime Web: my stochastic time tracking web app

August 26, 2020
It randomly samples what you are doing (continue reading)
Web app

TagTime Web

August 20, 2020
Time tracking that randomly samples you.
Itch game

Time Freezer

August 17, 2020
You can freeze time for a few seconds
Blog post

Reddit's website uses DRM for fingerprinting

July 8, 2020
Blog post

Data WhiteOps collects

July 8, 2020
A long list of data collected by WhiteOps (continue reading)
Blog post

Gmail's fake loading indicator

July 4, 2020
Gmail's loading progress bar doesn't *actually* measure the progress of loading. (continue reading)
Blog post

How I improved this blog

June 16, 2020
How I improved this blog a bunch. (continue reading)
Blog post

Generating our own knowledge panels

June 14, 2020
About how I made a simple clone of Google's knowledge graph. (continue reading)
Itch game

Pencil Defense

May 24, 2020
Defend the pencil in the middle!
Itch game


May 10, 2020
Shoot the red enemies with your duel-sided laser, while avoiding the good guys!
Itch game

Use your distance

May 1, 2020
You have a limited amount of movement to beat 4 levels.


January 3, 2020
A game where you avoid tiny squares.
Blog post

A bookmarklet to amplify YouTube

November 15, 2019
A bookmarlet to amplify YouTube videos. (continue reading)
Web app

Is your shift key pressed?

October 24, 2019
Wondering if your shift key is pressed? Not anymore.
Blog post

How to use private JS class variables

September 30, 2019
A short tutorial on using private class variables in JavaScript. (continue reading)


September 8, 2019
A game with slippery controls.

Square game

September 1, 2019
A game that involves squares.
Blog post

AlertReady To Retire Ku Band Alerts

July 5, 2019
Pelmorex, the company that runs AlertReady will stop providing alerts over the satellite Ku band on August 31. (continue reading)
Web app


June 27, 2019
A dictation website that uses Web APIs.
Blog post

Easily upload files to IPFS, online

June 5, 2019
Easily upload files to IPFS with my new online tool! (continue reading)
Web app


June 4, 2019
Upload files to the IPFS network online.
Blog post

How to watch YouTube video frame-by-frame

April 14, 2019
Watching YouTube videos frame-by-frame is simple: here's how. (continue reading)
Blog post

Next Canada-wide emergency alert test announced for May 8

April 9, 2019
Pelmorex has announced the test alert, which will be played across phones, TV shows, and radios. (continue reading)
Blog post

Nim: How to use a cstringArray

February 6, 2019
A overview of how to use a cstringArray in Nim. (continue reading)
Blog post

New Blog!

February 2, 2019
Welcome to my new blog. (continue reading)


January 14, 2019
Tools for the Nimiq blockchain.
Web app

Splinterlands explorer

November 25, 2018
Explore operations that have happened on Splinterlands.


April 13, 2018
A small educational website.
Blog post

Interesting stuff from me

January 1, 0001
Rendered 70 items.