Received another toy the other day: a new Keychron keyboard. It’ll take me some time to get use to the keyboard layout, and I’ll miss the numeric keypad; but it looks, feels, and sounds great. It’s also my first external keyboard with Apple keycaps: all the ones to date had Windows keys.
The weather is stubbornly refusing to turn autumnal. Fortunately the trees are happy to oblige.

That small lizard that occasionally gets inside my house is back. Got a bit of a surprise when I saw it in the hallway today. It ran as I reached for my phone to take this picture.

Does Vivaldi Mobile for Android have GIF support? Yesβ¦ I guess? Not entirely sure who’s asking. Or why. Are these the same people who want to know if Vivaldi has paid stickers or file sharing support? Is this for a hypothetical messaging app?

The epic feature branch rises again. Like a phoenix. A large, complicated phoenix; one that doesn’t get on with the other birds and is difficult to catch when it needs to be put back in its cage at the end.
I’m liking the idea Matt Birchler has with consolidating all the little web utilities he’s built into a single app. I’m wondering if I should do likewise for the random things I’ve built, like the world clock and two letter country code list. Cut down the number of subdomains I’m using.
I learnt something about myself the other day: I will shun a piece of software that has dates in the American format β mm/dd/yyyy
β and won’t allow me to change it. The worst of this was Roam Research, which used that format in note URLs. No one wants that format in something that can’t be changed.
Request to add a new acronym to the vernacular: SMQL β Slack Message Query Language. Definition: a query for data from services by asking devs or operators working on those systems to get that data and send it back via Slack messages.
Every day is CSS Naked Day if you read your blogs in an RSS reader. π
Working for a large(ish) company, it’s difficult to know whether users are enjoying and showing interest int the products you work on (usually it’s the opposite, where your attention is needed when things go wrong). So it’s always a delight to see when they do. Makes it worth while.
Congratulations to Seth Godin for 10,000 blog posts. A phenomenal achievement. I’m a little further behind myself: this will be post number 2,666, just over a quarter of where Seth Godin is. Seth, I’m coming after you! π
Spent some time over the last few days working on that Godot game, mainly building new mechanics. This evening I started working on an interceptor, something that would jump out of the quicksand in order to disrupt the player’s jump. Here’s an example of how they look in the test bed:
And yeah, they’re pretty much a carbon-copy of the Podoboos from Mario. But I think there’s a reason they’re still making an appearance in games, years after their debut in Super Mario Brothers. They’re quite a versatile enemy, making jumping challenges a bit more interesting than just seeing whether the player the clear a gap. Plus they’re reasonably easy to make.
Another mechanic taken from Mario was a switch that revealed coins and tiles for a limited time. Hit it once and the child nodes of this “timed_limited_visible” scene are displayed and activated for 10 seconds, before they disappear again:
Much like the blue P switch this mechanic takes inspiration from, the switch can only be activated once. So it may be only useful for bonuses and areas the player can afford to miss.
I had to do some special handling for nested TileMap
nodes, since the player could still collide with them even when they’re hidden. How I solved this was nothing too spectacular: basically I just walk the child tree looking for TileMap
instances, and when encountering one, just enabling or disabling the first layer:
func _show_and_activate_children():
visible = true
process_mode = Node.PROCESS_MODE_INHERIT
for tm in find_children("*", "TileMap", false):
tm.set_layer_enabled(0, true)
func _hide_and_deactivate_children():
visible = false
process_mode = Node.PROCESS_MODE_DISABLED
for tm in find_children("*", "TileMap", false):
tm.set_layer_enabled(0, false)
Building these elements was fun, but the main problem is that I’m struggling to come up with a centrepiece mechanic for level 2-1, something that defines the level in some way. I have an idea for level 2-2 β this world is set in a desert so I’m hoping to introduce a thirst mechanic β but level 2-1 I’m hoping to keep relatively plain so as to avoid overwhelming the player with too many new things. The fear is to avoid making it little more than what the player encountered in world 1: a series of jumping puzzles over pits. Sure, that’s pretty much the entire game in a way, but some variety would be nice.
I’m hoping one of these mechanics could help here. I guess I’ll find one once I’ve start seriously building the level.
Blessed be the Mail.app View menu and the option to hide the useless Apple AI priority messages. My Inbox is now slightly more sane.

Airing Of Draft Posts
A collection draft ideas and reflections, amassed over the last year, highlighting a mix of topics ranging from technology insights to personal musings.
I just learnt that Nintendo is requiring at least 50 hours of game play on the Switch before one can preorder the Switch 2. That’s a pretty clever way to avoid scalpers. I approve, despite not qualifying.
In a world where every cafe opens at 8:00 on Sunday, the ones that open earlier are guaranteed at least one customer. That customer has two thumbs, and is using them to type up this post on a phone.
If maintaining code is harder than writing it the first time, maybe Perl had the right idea all along. Just write it once. Then when you need to change it, delete it all and just write it once again. π
On Go And Using Comments For Annotations
Some thoughts of whether Go should have a dedicated syntax for annotations that comments are currently being used for.
This weekβs earworm: Chronology, by Jean-Michel Jarre. π΅
