Weeknotes 185
Underwhelming improvement
-
A good week: various administrative successes and plenty of time spent with friends. A balm for the soul.
-
I met up with Chris on Monday for a therapeutic chat over lunch and a medicinal pint or two, which sorted me right out and got me through most of the week.
-
I baked a couple of decent loaves on Thursday morning and then cycled over to Holborn for a very pleasant coffee in the sunshine with Aleks and Simon.
-
For the weekend I caught the train up to Yorkshire and recreated last year’s visit with Paul and family.
It was pretty rainy so we didn’t venture out as much this time. On Friday we fed the ducks at Ilkley Tarn and skirted the edge of the moor before heading back inside.
On Saturday we stomped along the River Wharfe and back through the northern mizzle.
It felt liberating to get out of London, step outside briefly and relax among friends.
-
After a month of sneaking up behind it I finally merged the type use abbreviation implementation into my WebAssembly interpreter.
I’ve had it working for ages but the hard part was breaking up the work into meaningful pieces: deferring the results of the preprocessor to allow module fields to wait for type definitions, then plumbing everything together to allow type definitions to be generated during preprocessing, and finally desugaring the actual abbreviation which was, by this late stage, an easy change.
The upshot is that you can write an inline type like
(func (param i32) (result i64) …)
and it’ll be expanded into an explicit type use & definition like(func (type 0) …) (type (func (param i32) (result i64)))
and the AST parser only has to deal with the latter case.What a relief to ship this at last. It’s made parsing function definitions, type uses and especially block types slightly less gnarly. I mean, now that I look at it, it’s a bit of an underwhelming improvement given the slog; all that for a drop of blood. Oh well, it’s the principle of the thing.
-
I’ve almost finished dealing with all the abbreviations now. A couple of easy bits aside, the remaining work is to move the instruction unfolding out of the parser and into the preprocessor. At that point I’ll be desugaring every tricky detail before it reaches the parser and that’ll be a nice milestone.
-
I’ve spent enough time on this bloody preprocessor that I’d like to make it visible somehow. Maybe I could stick it in a web page and build a tool that can desugar a complete WebAssembly program? I doubt there’s a single person on the planet who needs such a thing but at least it’d be an output.
-
Oh, and I forgot to mention previously that my change to add support for
--backtrace-limit
inRUBYOPT
was merged, giving me one more reason to wish for a Ruby 3.3.0-preview2 release. -
I had to fill in a American tax form so that O’Reilly could keep paying me royalties.
When I first completed this form a decade ago it consisted of one page which mainly involved ticking a box saying “I reckon I probably don’t need to pay any tax in the United States”. It’s now eight pages and you have to specify your FATCA status (“active NFFE” for me) and exactly which section of the UK/USA tax treaty applies in your case (article twelve paragraph one, naturally).
It’s right at the sweet spot of being a nightmare to fill in correctly (under penalty of going to prison etc) and not mattering at all because it doesn’t appear to be sent to the IRS, just put in a filing cabinet as insurance against any future tax audit.
-
I needed to jump through some hoops to log into a twenty-year-old account on a university system so I could complete some paperwork, and it turns out they’re still using a very old photo of me that I’d forgotten about:
Not sure what facial expression I was going for there. In any case, you’re welcome.
-
On a whim I bought Viewfinder and wanted to like it but sadly it’s not very good. It has pretty visuals and a creative core concept but they don’t combine to form an interesting game. It looks a little bit like The Witness and has some of the same ideas without managing to execute them as cleverly or integrate them as coherently.
The plot and worldbuilding are a bolted-on nothingburger and the voice acting is not good, but the fundamental gameplay problem is that the “puzzles” are barely puzzles in the first place — you just have to stand somewhere and press a button. Even the occasional tricky bit has made me realise that I don’t enjoy this kind of fiddly analogue puzzling where you spend five seconds thinking and then five minutes messing about trying to get your solution to accidentally work. Give me a discrete grid any day.
Also, the DualSense touch pad is used for looking around, which is an absolutely terrible idea.