Weeknotes 2025 W41: The Romans

October 6​–​12, 2025

Quick bits:


Shower thoughts:


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:


Links:

Politics links:

Tech links:


  1. I’m being quite vague because I don’t want to give anything away. I don’t want to spoil anything! ↩︎

  2. 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. ↩︎

  3. The Roses, directed by Jay Roach (Searchlight Pictures, TSG Entertainment, South of the River Pictures, 2025). ↩︎

  4. Timberborn (Mechanistry, 2021), published by Mechanistry. ↩︎

You can reply to this weeknotes entry by email. I’d love to hear your thoughts!
If you like what I write, stick your email address below and subscribe. I send out my weeknotes every Sunday morning. Alternatively, subscribe to the web feed.