Weeknotes 2025 W41: The Romans
Quick bits:
-
I’ve completed four years of weeknotes. What a ride!
-
This week, I’ve been distinctly under the weather. My throat hurts, and it is painful to speak. This better not last long.
I’ve also just been low on energy. Despite coming back from a short holiday, I feel like I need another holiday.
-
Soon, I’ll have news about the job search. It’s getting closer. I can feel it. I can feel it!
-
In W38, I mentioned how my keyboard kept reverting to QWERTY, and in W39, it started reverting to Colemak before mysteriously fixing itself. It has now once again started reverting to QWERTY. I don’t understand what is going on.
For now, I’ve put my transition to Tarmak-2 on hold, because the job search requires me to be able to type properly. I cannot afford to switch keyboard layouts right now.
-
I used to be so envious of other kids speaking “foreign” languages. Meanwhile, I grew up speaking two languages, and now speak three languages reasonably well.
-
I crunched down on my second wasp this summer. Bitter and gross, just like last time. Eww.
Shower thoughts:
- I wonder how many of my preconceptions about the Romans still comes from the Astérix comic book series.
Eight weeks, give or take, until the theatre performance where my acting classmates and I will put on a handful of scenes and monologues.
I’ve got one out of three monologues under my belt. Much more work is needed for the other two, but those are coming along nicely too. I’ve got lines to learn, and I’ve got a heck of a lot of notes to work through.
I’m not sure I can manage all three, but that is still what I am aiming for. These are three entirely disconnected pieces; three distinct characters in three distinct contexts. It’d be considerably less work if it were the same amount of text, but for just one character, or at least from the same play.
Earlier this week I spent some arts and crafts time to make a prop.1 It doesn’t look great up close, but it’s perfect from far away. Nobody will notice! I’m also planning to head to a second-hand clothes store to get a few pieces of clothing to convey the identity of my characters. The performances will be distinctly minimalist (a chair and a table) but I’d nonetheless like to add a thing or two.
Slow progress with Deng.
Last week, I mentioned working on adding array support. That finally landed this week, but it sure took a while.
In particular, I struggled with a function pointer being called seemingly the wrong way. I had this function for getting a value from a given array at a given index:
fn my_array_get(
ptr: ?*const anyopaque,
index: usize,
) callconv(.c) deng.CValue {
// ...
}
Each ArrayValue has a pointer to a function like my_array_get. But bizarrely, that function pointer got called with ptr set to an arbitrary value, and the index parameter got the value of ptr. Something very strange was going on, and I could not for the life of me figure out why.
This is not a Zig problem. This is a C problem. I’m blaming void pointers. Void pointers are a pain to work with — a necessary evil, though.
C interop is always going to be a pain, is it not? I’m so glad not to be using plain old C for Deng — I considered it briefly and even implemented a prototype of Deng in C, but decided against C very quickly.
The way I solved this problem is to put the problem to the side, refactor some less-nice bits of the codebase, expand the test suite, and try again — and then the array implementation suddenly became simple (and correct).
I did, essentially, what Kent Beck said:
for each desired change, make the change easy (warning: this may be hard), then make the easy change
It is such excellent advice. It belongs in my Software engineering principles.
Deng is currently at over 230 commits, which is quite a bit. But there is still plenty to do on the to-do list.
For no particular reason, please admire my fake screenshot of a Mac OS 9 progress dialog that shows the migration to Ruby on Rails:

I still rather like the aesthetic of Mac OS 8/9.2
Entertainment:
-
The Roses3 is great. Deliciously violent. Olivia Colman and Benedict Cumberbatch having a go at each other is delightful.
-
I’ve wasted a remarkably large amount of time in Timberborn.4 It is rather addictive. My beavers are happy, hydrated, and their fur is nice and wet!
Links:
-
How We're Redesigning Audacity For The Future (tantacrul)
-
58 Things I Know at 58 (Patrick Rhone): There are true gems in there.
-
Common Moon Mistakes (minutephysics)
-
Inside a LIDL bottle security device (bigclivedotcom)
Politics links:
-
How to eat with others (Mike Monteiro): Excellent advice.
-
Inside tech billionaire Peter Thiel’s off-the-record lectures about the antichrist (Johana Bhuiyan, Dara Kerr, Nick Robins-Early for The Guardian): Too bizarre for words. Peter Thiel is a nutcase.
-
GenAI Predictions (Tim Bray)
Tech links:
- Reflections on software performance (Nelson Elhage): Performance sure is a feature. It’s why I’m doing more and more work with Zig, after all!
-
I’m being quite vague because I don’t want to give anything away. I don’t want to spoil anything! ↩︎
-
I’m reminded that I’m not on the latest version of macOS yet. Liquid Glass is too much of a step in the wrong direction. ↩︎
-
The Roses, directed by Jay Roach (Searchlight Pictures, TSG Entertainment, South of the River Pictures, 2025). ↩︎
-
Timberborn (Mechanistry, 2021), published by Mechanistry. ↩︎