221 results for "":
NeverJam: the game jam jam game
Our January project was ambitious: a 2D puzzle game, a-la lemmings with a twist, with big and numerous levels. And of course, all using our homegrown tools, from the compiler to the level editor to the UI system and game framework.
However, January ended too soon, and, sleepless nights notwithstanding, I had to resolve to publish something completely different. It was a good occasion to get to know Twine.
Printing ASCII cats to the terminal
Now that our development environment is all set up, let’s make something useful!
Creating the catscii crate
From a VS Code window connected to our VM (as we just set up), let’s make a new Rust project:
amos@miles:~$ cargo new catscii
Created binary (application) `catscii` package
And open it in a new VSCode window:
amos@miles:~$ code catscii
Making our own spectrogram
A couple months ago I made a loudness meter and went way too in-depth into how humans have measured loudness over time.
Today we’re looking at a spectrogram visualization I made, which is a lot more entertaining!
We’re going to talk about how to extract frequencies from sound waves, but also how my spectrogram app is assembled from different Rust crates, how it handles audio and graphics threads, how it draws the spectrogram etc.
That health is mental
Disclaimer:
Trigger warning: depression, talk of suicide.
It’s been a while since I wrote a mental health piece — but I think it’s important to occasionally stop, take a breather, and think about how we feel.
So.
deep breath
I’m okay, I think? Just a little restless.
A bit of personal context
For those keeping score, I went through major life events in 2023 — a divorce, a move, and the news that I might need a second round of jaw surgery.
Aiming for correctness with types
The Nature weekly journal of science was first published in 1869. And after one and a half century, it has finally completed one cycle of carcinization, by publishing an article about the Rust programming language.
It’s a really good article.
What I liked about this article is that it didn’t just talk about performance, or even just memory safety - it also talked about correctness.
2025 Recap: so many projects
I’ve been working on so many projects in 2025, I thought it was important for me to make a recap, if only just to clear my head.
There are many, many, many things to go through and we don’t have a sponsor today, so I’m gonna start right away with facet!
facet
facet is a project that I started working on in March of this year — that’s right, it’s only been ten months, yet it feels like an eternity.
Huffman 101
Let’s play a game: your objective is to guess a word, but you can only ask yes or no questions. You should also aim to ask as few questions as possible.
You might have played a variant of this game before, guessing famous actors or musicians. You’d usually ask questions like “Are they alive?”, or “Have they won an Oscar”? And that would allow you to narrow down the possibilities, until you finally resort to a list of direct guesses (“Is it Amy Adams?”) or simply give up.
Trying to use nix
Now that my website is deployed as a container image, I wanted to give
nix a try. I’m still doing it the old-fashioned way right
now: with a Dockerfile, running cargo in a “builder” image, copying stuff
out of there into a slimmer image (that still has an Ubuntu base, even though
distroless images are a
thing now).
But why?
I was mostly interested in nix because some parts of my website have pretty big
native dependencies. futile itself mostly relies on sqlite3 and some JS engine
(used to be quickjs, currently duktape because MSVC Windows builds). But the
asset processing pipeline, salvage (which I’d like to integrate with futile
at some point) has a bunch more!
A no_std Rust binary
In Part 11, we spent some time clarifying mechanisms we had previously glossed over: how variables and functions from other ELF objects were accessed at runtime.
We saw that doing so “proper” required the cooperation of the compiler, the assembler, the linker, and the dynamic loader. We also learned that the mechanism for functions was actually quite complicated! And sorta clever!