A bit more on Godot this evening, mainly working on pausing the game, and the end-of-level sequence. Have got something pretty close to what I was looking for: a very Mario-esc sequence where the player enters a castle, it start auto-walking the character, and the level stats show up and “spin” for a bit. Not too bad, although I may need to adjust the timing and camera a little to keep the stats from being unreadable.
Not sure what’s going on but both Safari on the iPad, and Vivaldi on my phone have been feeling very sluggish these last couple of days. Could very well be a particular site I visit, but why would I still be experiencing slowdown after closing all tabs? Very strange.
I believe the gen AI could have a place in software development, but I wouldn’t say that I’m ready to go all in on “vibe coding”. I believe the best utility of gen AI comes from knowing what good code looks like. Someone with, if I may use the word here, a sense of taste. And I think the only way to develop that is to be hands on in the craft of writing code. You have to “touch” it, to feel it; almost like how a carpenter feels the grain of a new cabinet. And I don’t think you can get that if you see the code generated before your eyes.
Oof! Something I wrote has gone a little viral. It made it onto Hacker News a few days ago, and has had a bit of traction. But this weekend itβs just exploded. 12,376 views over the last two days and counting. Took me about a year and a half to get to 20k total views, and two days to get to 30k.
Stunning day for bocce today. Finally nice to get some autumnal weather. Tournament ended with a draw, so no definitive winner for the 2024 season.

Ugh! I’ll use WhatsApp if I must because of network effects (i.e. my friends are there) but let me state for the record that I do not like it, nor the company that owns it. Wonder if I could persuade my friends to move to something else. The network runs deep so it might be a tough sell.
I kinda wish I had a nice βbespokeβ keyboard. The Microsoft Sculpt Iβm using is fine, and it keeps my RSI at bay. But itβs uninteresting. Seeing β and more importantly, hearing β the keyboard others are using at work, it would be nice to have something new.
Although, I guess I could get something for work to replace the Apple Magic keyboard I tollerate.
Pitch for the first act of a romance movie: a barista expresses their love for a customer via latte art. Maybe the customerβs sitting there, wishing for love, maybe with a friend. Then they get their drinks and the friend notices that thereβs an awful lot of hearts there. The rest writes itself. βοΈ
Ugh, using IMDB for anything is just awful. Would love to give Callsheet a try, if only I didn’t have an Android phone.
One of the tools I built for work is starting to get more users, so I probably should remove UCL and replace it with a “real” command language. That’s the risk of building something for yourself: if it’s useful, others will want to use it.
I will miss using UCL, if I do have to remove it. Integrating another command language like TCL or Lisp is not easy, mainly because it’s difficult to map my domain to what the language supports. Other languages, like Lua or Python, map more nicely, but they’re awful to use as a command language. Sure, they may have REPLs, but dealing with the syntax is not fun when you’re just trying to get something done. That’s why I built UCL: to be useable in a REPL, yet rich enough to operate over structured data in a not-crappy way (it may not be glamorous, but it should be doing), while easy to integrate within a Go application.
Of course, if I want to continue to use it, it needs some effort put into it, such as documentation. So which one do I want more?
This weekβs earworm: Yooka-Laylee and the Impossible Lair (Original Game Soundtrack). Might be all the Godot stuff I’m doing at the moment. π΅

I’d be curious to know why Microsoft renamed Azure Active Directory to “Entra.” That name isβ¦ not good.
Still wondering this.
Wow, do not use Confluence for anything you’ll need to export as PDF. The export cannot layout tables β it does things like slap the header in the middle of one page and the first row on the next β and the right margin is too far in that it crops the prose. Looks sloppy and unprofessional.
Can definitely recommend Aseprite for making simple pixel artwork. I’m using it now for making some sprites for my Godot game I’m working on. Reminds me of the time I used MS Paint for this during the 90’s era, back when it was closer to this than what it is now.

Don't Be Afraid Of Types
Types in coding projects are good. Don’t be afraid to create them when you need to.
Another pro-tip for anyone writing in Go: multiple return values is nice but don’t over do it. Functions returning values that are related to each other are fine: think functions doing vector maths in 3-dimensions. Up to three values being returned along with an error, also fine (although I’d argue three is starting to push it). Anything else, consider returning a struct type.
Pro-tip: merge any changes to gRPC schemas only when you’ve got approvals to merge the implementation. Then merge both PRs at one time. Otherwise, you’ll have gRPC schemas that declare services that are not implemented. This is bad enough for clients but it’s worse for anyone working on the service.
A bit more Godot work this evening. I wanted to add a foreground layer of tiles that obscured in the player. This is for making false walls to hide secrets around the level. It took me a while to work out how to turn off collision of this foreground layer: there wasn’t really any way to do so within the designer.
Fortunately, this Github comment showing how to do so using a script worked like a charm:
extends TileMap
const foreground_layer = 1
func _use_tile_data_runtime_update(layer: int, coords: Vector2i) -> bool:
return layer == foreground_layer
func _tile_data_runtime_update(layer: int, coords: Vector2i, tile_data: TileData) -> void:
tile_data.set_collision_polygons_count(0, 0)
Only limitation seems to be that it will disable collision for the whole layer, but that’s perfectly fine with me.
After the last peanut incident, I added a rule to mark emails with the lunch menu red when the word satay
or nut
appears in the body. It’s been working pretty well so far. There is the occasional false positive β “coconut” is a common one β but it’s doing it’s job in alerting me to be careful.

One other thing I did yesterday was get my nostalgia fix by playing Wario Land on OpenEmu. Such an amazing game.