2025

There was talk of journalling in the Hemispheric View’s Discord and it got me curious about Apple Journals. When that first came out it was iPhone only, and I was unable to try it out. But they’ve since included it on iPadOS with the iOS 26 release. So I booted it up and to a quick look. If I had to choose one must-have for a Journalling app, its exports. A journalling app must support exporting your posts to an open format, preferably one that is readable within a text editor.

From the archives: “Hark! Is that the sound of singing angles, I hear?” “No, it’s just a Hyundai EV reversing.” There’ve been quite a few people playing music through their phones’ loudspeaker this morning, so I thought this was another instance of that. But no: electric car reversing.

Part of me is wondering whether I should move my Devlog posts to another blog. I like writing them, but I can’t imagine most entries being more interesting than “did this, went okay.” And I feel like they’re overwealming this blog in a way. No decision made yet, just waffling in public.

Some advice for the TLDraw Obsidian plugin maintainer: drop everything after the words “and” and “then” in these menu items, then remove duplicates. This should bring the menu items down to a number that’s easy to scan. I can manipulate tabs myself, but finding what I want here is a lot.

Enjoy getting power bills and seeing a credit thanks to my solar panels. Really happy I got those installed. ☀️

Okay, up go SPF shields. After seeing spam emails impersonating my domain, I’ve checked my SPF settings and discovered they were pretty lenient: v=spf1 include:example.com ?all Well, no more. If the email is not from Fastmail, it gets blocked: v=spf1 include:example.com -all

I’m a little surprised I haven’t seen this sooner. Paper-looking sign with dynamic information on it? I think this is an eInk display. If so, it’s the first time I’ve seen it used this way.

Looks like I’ve already written more posts this year than I have last year — 846 vs 843 — and there’s still two and a bit more months left. Not that this is a goal, but I’m wondering if I’ll hit 1,000 posts just in this year.

Interesting that given a bag containing both a laptop and a 1 litre water bottle, it’s the water bottle, not the laptop, that determines whether the bag is heavy or not (based on how much water it contains).

Quick tip for anyone using TLDraw: if you want to export part of a diagram rather than the whole page, select the objects you want to export, then in the menu select “Edit → Export as → PNG (or whatever)”. Useful for those that are keeping multiple diagrams on a single page.

It’s so easy to remember the times you wish you did something, verses doing something that turned out right. Such is the human condition, I suppose. Well, this is one of those times I wish I did something. Should’ve listened to my instincts at the time. And now I have to fix it. 🤦‍♂️

Speaking of logos for government agencies, it looks like the State Electricity Service is coming back in some capacity, complete with its original logo. I haven’t seen the SES logo since the ’90s.

Now that PTV and VicRoads are being merged into a single department, new signage with the Transport Victoria logo is starting to appear. Can’t say I’m loving it right now, but it took a while for me to like the PTV logo, and now I’ll be sad to see it go (if it does go).

Went to a matinee today: the Australian National Youth Ballet’s performance of the Nutcracker. Quite good.

Cannot disagree more with the idea of merging all programming languages into one syntax. That’s like saying getting rid of all natural languages and have everyone speak Esperanto, getting rid of all styles of visual art and have everyone paint with Cubism, etc. Programming languages are more than just a means of computation, there are a means of expression steeped in a level of how abstract one wants to think. Assembly is required when you’re talking to the machine, but it would be a nightmare to work at that level when one is trying to write shell scripts.

Thinking more about the writing of Ron Jeffries, I’m left to wonder: how does he do this? I’ve only tried doing something similar a few times but I find myself getting lost in the task. To context switch from IDE to your “lab notes” would mean a stilted form of progression. And when I do write notes, they tend to be bullet points, not the flowing prose we have here.

Well that’s one way to get people to stop using AI: release an US-only, iPhone-only app that becomes all the rage; then when the dust settles, release it world wide and on Android. By that time people (i.e. me) would’ve completely forgotten about it. It happened to Sora 1. 😏

🔗 Martin Hähnel: Write Like You’re Ron Jeffries The meandering pace of solving a problem, of how ideas develop and how people create are not replaced by the slick surface of the perfect how-to in which everything seemed to have worked on the first try, was clear from the beginning. Jeffries’ texts […] document the doing in the making, learning in the making. It makes it obvious that that which is presented is very often not how it was derived.

Updating my Kubernetes skill level from “elementary” to “enough to be dangerous.”

🔗 Brandon’s Journal: Save Your Writing Some good advice about saving your previous creations, even if you feel you’ll never look at it again. Maybe you won’t, but if it’s writing, what’s a couple of megabytes in this world swimming in storage? Move it out of sight if you must, but don’t delete it.

Interesting development in the world of Go: in 1.26, the new() function will now accept expressions, not just types. This returns a pointer to the value, which will be useful for those types that use pointers for their fields: type User struct { Age *int } user := User{} var age int = 10 user.Age = new(age) It also works for literal values, so that temporary age variable is strictly not necessary, although the linked post does state that it requires some consideration for types.

I thought that any coffee is better than no coffee, but I’ve discovered that’s not entirely true. Not only is bad coffee bad in its own right, it also takes away the reason for getting coffee at places you know are good. Ah well, live and learn.

“Get out more” goal for October achieved. ✅ Boardgames at the Melbourne Central Lion Hotel again. Tonight just Codewords. One of these days I’ll stay longer than 1.5 hours.

Well it’s been a fun day slamming my head against the wall trying to get Kubernetes and AWS working, but I shouldn’t be hasty. I need to leave some head slamming for tomorrow.

The worst part of working with technologies like Kubernetes is that there’s no feedback when you forget something. I got no error when I was deploying a Role and RoleBinding for a service account that didn’t exist. Managed to spot it before embarking on a lengthy, auth-related wild-goose chase.

A podcast about podcasting and they post a frickin’ YouTube video instead of an audio file on their website? What is this world coming to?! Hand-wringing emoji. (Show redacted to protect the guilty).

Breakfast at St. Ali coffee, in South Melbourne.

Bit more on lifts in Godot today. Re-engineered how the whole thing works: now everything is driven by the stationary lift doors. Each door has a reference to a lift and a target door. This makes the lift carriage itself rather passive: it will continue to reparent the player as before, but it no longer needs to track activations or have animating doors of it’s own. The doors just tell it where and when to go.

Why do I even buy umbrellas? They’re never in the bag when they’re necessary. 🌨️

A bit more work on my Godot game, mainly building out mechanic for world 3. Tonight it was building an old-style lift with a caged door that the player can use to travel between different heights. Turned out really well. Animating the door was a slog, and if that was all I achieved this evening, I would’ve considered that a success. But I had a bit of time to code up the lift too.

Bash scripts truly are the duct tape of the computing world.

We’re coming into that slightly annoying time of year where the mornings are too cold to travel to work without a coat, yet the afternoons are too warm to travel home with one.

🔗 Robert Birming: The world’s worst blogger I moved my blog from Bear to Micro.blog because, as I put it, it “started to feel limited”. I had begun creating photo albums, a status log, and some other stuff. It became harder and harder to manage… So I moved [to Micro.blog]. A place with great features for adding photo collections, logging books, writing both long posts and short ones without titles. All just a click away…

I’ve been really enjoying the soundtrack of Tunic recently. Would I go all the way to London to watch a symphonic rendition of it? Tempting. If I was in London, maybe. But, being halfway across the world…

Small change to the thirst mechanic for my Godot project. Switched from discrete thirst levels to a single timer that will tick down if the player is thirsty. This allowed for a change to how I indicate this to the player, replacing text messages that’ll be displayed at each thirst level with a gauge that shows up on the HUD. I thought that the messages would be enough, but after playing through with them, they turned out to be more of a hindrance.

Also, first impressions of Godot 4.5 after upgrading from 4.2.2: quite good. I like that tilemap layers are now proper nodes, where I can turn physics off and on from the designer. I can ditch a custom script that did that. What’s not as nice is that inactive layers are too transparent, and that there’s no way to adjust this. They’re so hard to see now. Hope that’s fixed soon.

More on that Godot project today. Finally bit the bullet and started working on proper backdrops. I’ve leaving the artwork until later (i.e. I’m procrastinating), today was all about the mechanics, trying to get parallax scrolling working. Fortunately Godot has built-in nodes to make this easy, although I did have to upgrade Godot to 4.5. This is my first cut, some simple colour banding to represent sky and sand in one of the desert levels:

Just a reminder that MacOS comes with a grapher, and a pretty decent one at that. Came in handy when I wanted to visualise a few functions.

That said, what makes for a compelling Go blog? I do see them around, yet I don’t subscribe to them. It’s difficult having topics that grab my interest. I can read about people building their own software all day, but I’m hardly interested in the actual code. Libraries are maybe a little more interesting, but only if they can be potentially useful to me. And no, I don’t care what performance multiplier your JSON parser has.

I do wish more Go bloggers are on the Indieweb. Seems like this platform mainly attracts web frontend devs. Understandably, given that the tech is what they work in professionally. Most Go devs I encounter are still writing on Medium, of all platforms. Sigh.

Took a train to Hurstbridge and walked the trail to Diamond Creek. Was rather grey, but the air was mild, so it made for good walking weather.

Speaking of lunch, maybe the next time the miners decide to swoop me they’ll remember that I’ve been rather nice to them.

The cafe I’ve visited today has got this chicken sandwich on a “signature croissant scroll.” I was skeptical at first, but after trying it out, it works quite well. Very nice.

Go to any bakery in the country round here and every one touts their “famous vanilla slice.” I’m sure every baker thinks their slice is amazing, but the maths just doesn’t work out. Maybe someone should lean into this fact and tout their “rather unremarkable vanilla slices.” 🙂

Consolidated my three existing online utilities — a world clock, two-letter country code browser, and Freelens logo maker — into a single tools site. I plan to use this for any new online utilities going forward. Felt good to do this. Gave me that sense of accomplishing something I was lusting over all morning.

documentation (n.) — written artefacts describing the workings, design, or operations of a software projects. we should really fix our documentation (n. ph.) — common complaint from software engineers. Translates to one of: We should actually write some documentation We should find that message in Slack someone posted several months ago and put it in our wiki as documentation I hate using wikis/this wiki software and I rather this documentation is in our Git repository as Markdown files I’m to lazy to to checkout this Git repository to edit this Markdown files and I wish this documentation was in a wiki I can’t find anything in this wiki/Git repository and I wish things were organised the way I like 😜

It’s been 0️⃣ days since I had an issue with TLS certificates.

I really appreciate the split-screen feature in Obsidian. I use it all time. It’s so useful being able to reference two areas of the same note.

Looks like the “copy link text” pop-menu item is broken in Vivaldi: it’s present in the menu config but not in the menu itself. Hope it’s fixed soon. That’s such a useful option as it saved me from having to deal with all the unwanted whitespace when I select the link text manually.

Small DevLog update today. Continuing to work on that Godot game. I got the bulk of the mechanics of level 2-1 built (it still needs dressing up), and I spent this evening mainly just play-testing it, and tweaking it. I think I may need to get someone else to play-test it though, just to make sure it’s not too hard. It’s significantly long, coming in at 10,560 units horizontally, and given how many new mechanics are involved, I’m a little worried about the difficulty curve.

Murphy’s law of food condiments: if it can be spilt on your clothes, it will be spilt on your clothes (discovered this law this afternoon, to my embarrassment).

Murphy’s law of caches: if it can get out of sync, it will get out of sync.

🛠️ TLDraw Obsidian Plugin Create and embed TLDraw diagrams in an Obsidian note. I have a few nitpicking UX issues with this plugin, but it works, and that’s the main thing. Looks to be a proper embed of TLDraw as it seems to work offline too (at least based on my tests).

Domain name registers should start introducing a cool-down period, giving the customer 1-2 hours after they’ve “bought” the domain to change their mind. Could’ve saved me some regret, not to mention the $30.00 USD I’ve spent. 🤦‍♂️

I’ve decided to change my attitude towards doing Kubernetes work. I’ll never be one to deploy Kubernetes for my own stuff, but a skill is a skill, and there’s very little downside in learning a new one.

Don't Choose To Reuse (Yet)

Designing software for reuse too early leads to unnecessary complexity and maintenance burdens, whereas focusing on immediate needs fosters simplicity and effectiveness.

How many people do you think know about pigeon racing? I know it’s not a common activity, but I thought most people would be aware of it. Yet I was listening to a podcasts today, and it sounded like one of the hosts, who may have been 5 years younger than me, was hearing about it for the first time.

I appreciate that those making, and putting up, these signs are sticking to this classic phrase.

Argh! I keep forgetting Micropub wants everything to be an array. Setting a property in a h=post POST request to a plain old string doesn’t do anything. It took me 30 minutes of faffing about trying to get draft posts working before I turned to Claude Code to get the solution.

Not that I need more social media consumption in my life, but I do wonder if it’s possible to follow Mastodon profiles in a Mastodon client, while responding to them via Micro.blog. I would like to follow a few people who post on Mastodon, but they’re really chatty, and I rather avoid having them in my Micro.blog timeline. I could use my Mastodon account to follow them, but that’ll mean responses come from there, and not from Micro.

I keep forgetting that I have a Nebular subscription. I should use it more often.

Matt Birchler @matt_birchler@mastodon.social Im happy to report that you can take portrait selfies in landscape on the new iPhones. Absolute sicko behavior, of course, but it’s there! 2:07 AM • September 20, 2025 (UTC) Portrait selfies with a phone in landscape orientation I can give or take. What I want is landscape photos from the phone in portrait. Device manufacturers, make that, then we’ll talk.

Retired my old kettle and set up my new one. Currently drinking my inaugural cup of tea from it, while I work on my site.

Just read this week’s P&B with @birming. Loved it. It’s always fascinating reading these interviews from people you follow.

🛠️ Signboard A kanban app that writes Markdown files by Colin Devroe. Looks interesting. Will take a look when I need a standalone Kanban app.

Can definitely recommend Nurse On-Call for any Victorian unsure about how to respond to a health problem. The queue was short, almost immediate, and the nurse took their time going through my concerns and symptoms. I got peace of mind and some material on what to do next. Wonderful service.

Speaking of cafes, this pigeon is determined to get inside. It was shooed out a few minutes ago, but it wandered back in again. It’s at my feet while I write this.

Whenever I go to the cafe, I bring along my iPad to read through my RSS feeds. One day, a kid walked by my table and took a peek at my iPad screen. I can only image their disappointment when they discovered I had no video or game playing on there. 😏

“Get out more” goal for September achieved. ✅ Boardgames at the Melbourne Central Lion Hotel again. Tonight, it was Codewords (had a go at being the spymaster this time) and Dixit.

🛠️ Glow: Render markdown on the CLI, with pizzazz! 💅🏻 Terminal Markdown viewer. Nice little app. My one criticism is that it should default to opening a file argument in the viewer, rather than just rendering the file to stdout. But otherwise, sure to be a useful little tool.

I saw Manton use ChatGPT to try and guess his age, in the context of OpenAI adding some age gating features. I was curious to know how it’d go with my age, so I did likewise, giving it this prompt: Based on your memory of past conversations, along with the various posts I make on sites such as lmika.org, can you guess my age? It’s guess: Putting all that together, my best guess is that you’re probably in your late 30s to early 40s.

Spotted on my way to work: a Little Black Cormant and an Australasian Darter preening by the river.

There’s not much us Android users have over iOS, but there is one: Myki integration with Google Wallet, with auto top-up. It really is quite nice not to worry about running out of credit when you’re rushing to catch the train.

It’d be nice if ChatGPT had an option to link to a specific position in a chat session while keeping the chat private. That way, I can effectively create a bookmark that I can place in notes and refer to later. I’ve started doing this for Slack messages too, and it’s been quite useful.

🔗 Steph Ango: File over app The files you create are more important than the tools you use to create them. Apps are ephemeral, but your files have a chance to last. This is excellent advice, and one that I’m trying to practice better. I’d also argue that this can be extended to a software design principal, which is to assume the data will outlive the system. Therefore, prefer a data scheme that will be long lasting, and worry less about the systems that operate over it.

CSS is turning into quite a capable programming language. I just learnt that the language is getting custom functions and an if function. I’m quite excited to hear this.

Credit to Metro. A tree blew over the line mid-afternoon, suspending the train line, and I was worried it would affect my commute. But they managed to clear it before peak time, and I experienced a smooth ride home. Very impressive recovery. 👍

It’s amusing to imagine how far Apple’s bizarre, corporate-esque copywriting goes. Would one be able to go into Caffè Macs in Apple Park, pick up a packed sandwich, and see printed on the label: With this sandwich, our focus is to maximise sustenance and nourishment so we can drive continued living in our employees. We’ve also introduced a new ecosystem of ingredients to compliment this unique sandwich. Thanks to the incredible availability of nuts and other allergens, we’re able to create a new awareness that this sandwich may contain some of these.

I’ve seen a few strange things in parks, but this disco ball is probably one of the strangest.

🔗 Ditch those words! Liked this post by Robin Rendle. Folks will spend so much time adding fancy illustrations and making sure the icons aren’t blurry but when it comes to words and actions in interfaces they seem to gloss right over them. It’s a well known trope in UI design that the user generally doesn’t read things. So I can forgive those who feel that words in UIs are not as important as icons.

Sitting in the gazebo waiting for the cafe to open. The pigeons’ keeping me company.

Finished reading: Silverthorn by Raymond E. Feist 📚

I’m a little disappointed at the state of home desks that are available. Many I saw today were quite small, leading me to wonder whether they’re being designed more for appearance, rather than for something to get work done. There were a few that look good, but they weren’t easy to find.

When it comes to furnature shopping, it’s not a matter of wanting something. It’s a matter of the pain of not having something eventually outweighing the pain associated with going furnature shopping. 😀

Why do I prefer Markdown over WYSIWYG? Because if the WYSIWYG editor is buggy, you are shot out of luck trying to format your email/document/whatever the way you want. Looking at you, Mail.app for MacOS 15, which seems to have the buggiest bullets/numbering implementation I’ve ever used.

This week’s earworm’s an interesting one. It’s Intro, on the album Recomposed, by Carl Craig & Moritz Von Oswald. Finding a legitimate copy is tricky: I’ve only found this version of questionable provenance on YouTube Music. It’s also on Music for Programming, which is where I discovered it. 🎵

Got greeted this morning with the lovely smell of freshly cut grass in the park, mixed with a slight dampness from a little rainfall. Lovely.

🔗 Rebooting the blogosphere Under the heading Don’t be shy: Tell everyone you see. Be a nuisance. I find the hardest part of blogging is telling people I have a blog. 🙂

For anyone else using Vivaldi who wants Kagi as their default search engine, yet has had issues using Kagi’s Chrome extension to achieve this, try these instructions instead. It’s a manual process, but after doing it myself, it a process that seems to work better.

Driving Kubernetes config all day, a skill which I don’t really have nor have much interest in learning. I can find myself around a Kubernetes cluster — the app Freelens is great for that — and I’ve made some progress in getting a Helm chart deployed via Flux. But, it’s not doing much to keep me awake, or focus on the task at hand.

🔗 Manuel Moreale: On em dashes What if they tweak the instructions next week and tell it to use more full stops or commas? What are we gonna do then? Stop using those as well? Hell no. I’ll keep writing however I want, and if someone decides to stop reading what I write because they suspect it’s AI-generated because I use too many em dashes, or parentheses, or any other punctuation or word or whatever, well, good riddance.

Aren’t the “remember me” checkboxes on login forms a bit unnecessary? I’m almost always using my own computers so of course I want the website to remember me. Granted, this is not the case when I’m using a shared machine, but maybe a “this is not my computer” checkbox would be more useful there.

I kind of wish I cared about the Apple event. I mean, I’m glad others do, and there was one time in the past where I did, at least vicariously (I don’t have an iPhone). But recently? 🤷 Might be that it’s a maturing product category, and that any advancements are incremental at best. Or maybe it’s just age, and being around long enough to have seen it all before. In either case, it’s getting harder to be excited about something that you yourself don’t use.

Apparently it takes Spotify to raise their price by $2.00 for me to cancel my subscription. I guess it acts like a good reminder of how much I was paying a month for a service I barely used. YouTube Music will be my secondary music service now (Alto is, and always will be, primary).

Ending the day on a win. Managed to diagnose and resolve a slow PostgreSQL query by creating an index, and also managed to configure Istio to allow communication between two Kubernetes cluster. These are super esoteric, and I’m not expecting anyone to care. Still, it’s good to leave work on a high.

I can’t for the life of me get this Docker image updated. I’ve tried deploying it to Kubernetes multiple times and it’s just refusing to launch any version newer than 4 commits ago. I may have to deploy via CI/CD, which will work, but is much slower than from the command line. ⏳

Really enjoyed this discussion on the latest Shoptalk show discussing why one would want a website. I disagree with the idea that restauranteurs can get away with just an Instagram. Restaurant websites generally suck, but I’m not sure what I’ll do if they aren’t around, and I can’t see their menu. Oh, and P.S. I don’t know how to use Instagram.

Finally indeed.

I’ve been looking forward to this as a general train enthusiast. Then I realised it can improve my commute home. Now I’m really looking forward to this.

Speaking of Dequoter, in “celebration” of the upcoming release of MacOS 26, I styled the command palette a little, adding a transmissive blur to give it a glass effect: It’s a shame I can’t style the options of the select element. It would be nice to increase their margins a bit.

Ah, MacOS’s locked-down nature strikes again! Was testing the CI/CD build for Dequoter and after downloading the artefact and attempting to open it, I got this warning message: Turn’s out it was being quarantined by MacOS, and these instructions resolved the issue. The binaries not notarised so I wasn’t expecting it to work out of the box. I was hoping that it would do that thing where the app will be listed in settings and I can allow it to launch from there, but I guess there’s something about where this file came from that was too much from MacOS.

Father’s Day over here. Saw a family in the cafe with the father and son wearing matching Bluey T-shirt’s, with the message on the son’s T-shirt saying “My Dad’s awesome” and the Dad’s saying “Dad goals.” Like that idea.

🔗 HN Comment by IanCal in a discussion about RDF (emphasis added): Someone will suggest modelling to solve this but here lies the biggest problem: The correct modelling depends on the questions you want to answer. Our modelling had good tradeoffs for mapping academic citation tracking. It had bad modelling for legal ownership. There isn’t one modelling that solves both well. That may be why I was turned off by RDF all those years ago.

The 21st century - current progress: ████▒▒▒▒▒▒▒▒▒▒▒▒ 25.75%

It’s funny how the prevalence of electric cars seemed to snuck up around me. Four or five years ago, the number of times I see someone drive an electric car on any given day may have occupied one hand. Today, I’ve been outside for about an hour and I’ve already seen three drive by.

🔗 Dave Winer: We Make Shitty Software We know our software sucks. But it’s shipping! Next time we’ll do better, but even then it will be shitty. The only software that’s perfect is one you’re dreaming about. Real software crashes, loses data, is hard to learn and hard to use. But it’s a process. We’ll make it less shitty. Just watch! It’s true. Speaking for myself, I too make shitty software.

For anyone else that has unwanted YouTube channel subscriptions that they cannot unsubscribe from on the channel page because the subscribe button requires payment (that seems like a bug, Google), you can remove them by visiting the all subscriptions page (source).

I saw someone online mention Zo Computer so I though I’d give it a try. Asked it to produce a Go function based on one of my blog posts, since I needed the same thing in a different project. I saw it open the blog post and generate the function in about 5 seconds. Granted that this is hardly groundbreaking. It’s using GPT 4.1 mini, so it’s likely I could’ve done the same thing straight from ChatGPT.

In 2021, I organised for a static IP address that can be whitelisted in the VPN of my previous job so I can work from home. Today, that same static IP address seems to be constantly added to the blocklist of the VPN of my current job. Yeah, VPNs are up there with DNS on the corporate pain-o-meter.

I see Manton’s sign and raise him this: Taken yesterday evening.

Kind of shocked to hear that Atlassian is buying The Browser Company. Did not expect any synergy to spark between those two. Anyway, all the best to The Browser Company. May I suggest that they keep away from the Jira side of the business. Here be dragons over there.

Blew someone’s mind today when I told them I’ve never seen Top Gun. All I know about that movie is that it’s American, it involves planes, and that someone, possibly Tom Cruise, needs speed for some reason.

Saw a Stack Overflow answer for a Stripe question linking to a Discord message as a source. I’m sorry, but for SO questions about Stripe, citing some random message on Discord is not good enough, even if the poster is Stripe support. You may as well cite “some Stripe dev I overheard at a conference.”

🔗 GitHub: Gopher Hawaiian Shirts Patterns for printing Hawaiian shirts with the Go gopher. I think I’ve found what I’ll be wearing to work in the future. 😄 Via: Golang Weekly

TIL that you can use +++ to add a page break in iA Writer: the previous page +++ the next page Just tried it in a export and it works great. I’ve been in hell wrangling PDF exports of stuff all week so to learn that this feature exists is one nice glass of ice water indeed.

Starting to work on the background tiles. This is what I have so far. I hope it’s not too busy or distracting.

Tonight’s menu: a chicken schnitzel burger from the local fish-and-chips shop, enjoyed at a local park. Haute cuisine at its finest. 😀

Just used a web-app with a table that had checkboxes to select multiple items, yet no actions that operated on those items in bulk, which is a tad misleading. And it’s not like I didn’t have appropriate permissions. I did what I needed to do. I just had to do it to one item at a time.

Can humanity create an AI so intelligent, that it knows not to interrupt with a marketing interstitial when I’ve started typing out the prompt? One of the greatest questions of our time, apparently. 😒

3.78 GHz for a phone chip! I remember getting a desktop clocked at just over 1 GHz and thinking that was the fastest computer I’ve ever used. These phone chips are almost 4 times faster, and there’s like 7 cores here, with 5 clocked faster then 3 GHz. Absolutely crazy when you think about it.

📺 Brian Will: Object-oriented Programming is Bad Enjoyed this video about what makes OOP crummy. No spoilers but it’s not what you think (or it wasn’t what I thought). Didn’t agree with every argument but still quite though provoking.

Has anyone considered an app that takes a photo and screenshot at the same time? If such an app existed, they would’ve seen my post of a pigeon walking by while I’m looking at a headline about bird watching.

Is “deregistration” a word? I always though it was, and online searches seem to suggest that it is. Yet MacOS’s spellchecker considers it a spelling error of “reregistration”. Odd, though not wholly surprising. Maybe I should be using “unregistration,” which doesn’t get the red underline.

What is this? A UI for ANTS?! 😼

It’s not unheard of to have animals, usually kangaroos, on our line near the down end where it’s quite bushy. But this is well within the inner city. I wonder what it could be. 🤔

Devlog: Godot Project — Bricks in Level 2-3 Laid

Just a quick update today. I’ve finished all the brickwork in level 2-3. And it didn’t go too badly. Made one significant mistake which would’ve involved a lot of rework, that I patched up with some single tiles: Top: the mistake. Bottom: the fix. Doing the rest of it was pretty dreary work. Godot does have some tools to make this easier, but there was no getting around the level of care needed to place the bricks correctly.

Not sure how PTV is expecting people to pay the tram fare when half the Myki readers are non-functional.

Nice to think that we’ve finally reached the paperless office future we’ve all dreamed of, yet we still struggle to make sure things look good printed out because we’re now passing files as PDFs. Why yes, I am trying to make a good looking PDF export from Confluence.

🔗 PCjs Machines Virtual machines of early PC operating systems, such as Windows and OS/2 1.0, that run in the browser. For anyone else who’s interested in a nostalgic kick. Don’t forget to check-out the list of included software installable via the virtual floppy drive.

Timed my morning coffee perfectly today. Was able to photograph the steam train heading to the Wattle Festival this morning. It was pulling a Tait set, a rare sight for my eyes.

Devlog: Shutting Down Nano Journal

With the move to Obsidian for my journalling needs, I shut down my bespoke journalling web-app. I deployed it on 26th August 2024, which makes it just over a year old. I did start using Obsidian on the 20th though, so it didn’t quite make it the entire year. Even so, not bad for something hand made and somewhat neglected. Most things I eventually abandon last way less than that.

🔗 Ludipe: Intro to Puzzle Design Filing this under good tips for game development. Via: GMTK weekly digest.

I just love these posts on game development making comments about the hardest part being the programming. Mate, I wish the hardest part of game development is the programming. For me, it’s by far the easiest. It’s everything else that I struggle with.

On the mailing list for someone who releases weekly digest newsletters using both Patreon and Substack. Both are now truncating the email, requiring me to click through to read the entire thing. Seems like a terriable middle ground between a newsletter (read the whole thing in my email client) and a website (read the whole thing in an RSS reader).

Words I’ve been misspelling all week: Utilization Prometheus And for today, a word that I thought I misspelt but I actually got correct: Thanos. US spelling intentional.

I shutdown my work laptop over the weekend, which means I usually start the week with zero projects open in my IDE. By the end of the week, the open project count is always much higher than I expect and I never remember how it get so high. This week, the count is 18 open projects.

Really enjoyed Brent Simmons post about his experience with Frontier. I really like the idea of sorts of software tools that provide so much customisation that a user can really make it their own.

Decided to move my journal over to Obsidian, taking up one of the 8, now 7, remaining vaults I have on my Obsidian Sync Plus plan. So far, so good. Offers a pretty decent writing experience — a nice thing about using Day One — while allowing entries to be plain Markdown files — which is nice about my bespoke solution. There are also some nice features with using a native app, such as having it launch on login, ready to start a new entry at a click of a button.

I wonder if anyone finds being an actor in stock footage ambitious. Guess it’s much like being an actor that just does commercials.

I can understand why Google’s choosing to block sideloading unverified Android apps, but this still disappoints me. The whole reason why I chose Android over iOS is the ability to side-load apps. Not sure what I’m going to do about this change.

A recent scramble for the need of activity on Slack, yet no-one knows what activities need doing. Choosing this course of action:

Tests failing on the build server so I’ve reverted to print debugging to find the cause. Part of me feels a bit dirty using this form of debugging, but there’s no doubting it’s effectiveness.

Tempting fate by walking out of the house without an umbrella. Deliberately, I might add. Is no umbrella better than a broken umbrella? 🤔

Oof! $149.00, paid to Apple for the right to notarise apps. Problem here being that I’ve not notarised any apps recently. Probably should release something, just to get my money’s worth.

Today I had the pleasure of driving this: An oil-fired steam locomotive. Drove it from Castlemaine to Maldon, round-trip of about 40 km, as part of the driving experience offered by the Victorian Goldfields Railway. Very fun. Was anxious about it at first but turned out to be a great experience.

Back in Castlemaine for the weekend. Enjoying a walk around the Botanical Gardens.

It’s always something with NPM, isn’t it: Here’s an idea: why don’t YOU rename that directory, NPM?

🔗 Wikipedia: White-winged chough I’ve seen this bird before and I had no idea what they are: black, white tips on the wings, red eyes, and an interesting call. Their presence in a random YouTube video I was watching revealed the answer.

Currently waiting for a Zero Trust 2FA email to arrive. It’s been about 8 minutes and I still hasn’t received it. I could always request a new code, but the minute I do that, the old code comes up and I have to wait another 5 minutes for the new code to arrive. Of course if I don’t do that, and the original code email failed for some reason, then I’ve waited 8 minutes for nothing.

Why does Stripe delete test subscriptions after 90 days? What resources do these test subscriptions actually take up? I can understand deleting them after, say, 2 years, but 90 days seem a bit short.

“Get out more” goal for August achieved. ✅ Boardgames at the Melbourne Central Lion Hotel. Played Codewords and Avalon. Was fun. I didn’t stay long but I’m considering this a success. Will probably go again.

I rather services that were not localised than badly localised. Saw at an addressed in my calendar with Melbourne VI at the end. What the heck does “Melboune VI” mean? Melbourne the 6th? I then realised that it was short for Victoria, the state, typically abbreviated as Vic in Australia. But being a US service, they assume that states only had 2 characters. No, bad assumption. If you can’t do it right, don’t even ask for the state.

I generally dislike people writing one sentence a message in Slack or any other messaging app, especially when they’re pushing out messages rapidly, constantly pings my phone. But I think I like the idea of one question per message, allowing the responder to answer it in a thread.

🛠️ VisBug Same ShopTalk show mentioned VisBug which I’ve never heard of before. It’s a Chrome(ium) plugin that has a bunch of layout, colour, and text tools allowing you to view and modify style properties of the elements on a webpage. Could be useful.

Some good advice.

Talk to anyone working on the Go language and they’ll tell you about the JSON parser they built. Maybe the CSS designer equivalent is making their own CSS reset. 😏

Big week this week. Lots of new experiences coming up, mainly doing things with other people. I don’t work well with new experiences involving other people. In fact, they kind of terrify me. My mind goes into overdrive thinking about… what? About things going wrong? No, it’s not that. I think is mostly a fear of people having a negative opinion about me. About showing up with differing expectations or insufficient “preparation” about the task at hand.

Wish I had a reason to buy a reMarkable 2 tablet. Passed by one while shopping yesterday and gave it a test. Wow, it feels so good to write on. Was able to write out my signature. I’ve not been able to write my signature on any electrical device.

Bought new shoes today, meaning it’s now time to do a value analysis of this article of clothing: Price was: $179.99 Lifecycle: let’s say 7 months Monthly depreciation: $25.71 /month So, shoe subscription entrepreneurs: this is the price to beat in order for me to consider your service.

At the cafe looking out the window at the pigeons wondering about. The suburb I live in is not as built up as some areas, yet there’s quite a large number of them living nearby. I have a bit of a soft spot for pigeons. Despite being introduced, I find them an interesting bird to watch. Doubly so when you consider their history and relationship with humanity.

Just saw a magpie have a go at a cyclist, twice. You know what this means: it’s officially swooping season again. 👷‍♂️

Released version 1.3.1 of Postlists for Micro.blog. Notable changes in this release are: A new title-matches attribute, which can be used to filter the list of posts to those with titles that match a regular expression. Check out the documentation on this for some examples. Fixed an issue where using the shortcode without any attributes resulted in an empty list. The cause of this was Hugo returning some strange things when a shortcode is called without arguments.

Can’t hear what your friend is saying? Instead of speaking loudly, consider taking your Air Pods out first. You may experience a difference. 🙉

Does Github just refuse to send emails out when a new issue is created? Opened a repository and found an open issue that was over a month old. 😠 Apologies for the delay.

Okay, get out more goal for August has been organised. I won’t fail this month!

When it comes to making real-world friends, I am absolutely, bloody awful (I know everyone says this but trust me: as bad as you may think you are, I’m worse). But by shear accident of showing up at the same cafe at the same time every weekend, one might be starting to ignite. Or at the very least, it may have a chance to. While talking with this fellow this morning, my mind casted back to this piece by JCProbably about how making friends as an adult requires effort, yet it’s worth it at the end (my writing about it is not doing it justice; go read it, it’s good).

This week’s earworm: QE2, by Mike Oldfield. 🎵

Seems like every work wiki I encounter is always messy. I think one of the reasons for this is that users believe modifying or deleting a page would be permanent. This is usually not the case: many wikis have versioning features. But they’re always hidden away and I wonder if people just forget they’re there. The version history also seem to be tied to pages, as oppose to the wiki as a whole, meaning that recovering a deleted page is a different set of actions than comparing an older version of an existing page.

Dear Go developers, You don’t need to return pointers, Unless you do need to return pointers. But if you think you need to return pointers, You probably don’t need to return pointers. Instead, consider just returning regular struct values. Keep the nil-pointer panics at bay.

Seeing some very interesting visitor pattens over the last two days. There seems to be two or three visitors from the US opening what seems to be every single page on this site. It’d be interesting to know who it is… or what it is. Maybe I should ask around.

Spiders are out in force this week. Third day in a row where I had to kill a white-tail that got inside. 🕷️

I’m the first to admit that my spelling is pretty atrocious, so I’m heavily reliant on spellcheckers. But there has been more than one occasion where I’ve chosen what I though was a correction, only to find out later that I ended up choosing a completely different word than I wanted. So when I can, I always try to check the definition of the word after selecting it. This technique tends to breakdown on iPadOS, for the reasons laid out in this dramatisation of lunch this afternoon:

Went to the cafe today and ordered my lunch. It came out with 2 forks and a knife. It was only when I went back for dessert, and received it with no further cutlery, that I realised that must be what the second fork is for. The cafe staff know me too well. 😀

The number of times I work from home has reduced quite considerably, so I’m not making coffee a home as often as I used to. The beans themselves confirm this: the coffee I’m drinking right now tastes rather stale. 😣

Upgraded my Obsidian plan which gives me 10 vaults to sync. I’m currently using 2: one for my personal notes and one for TIL Computer. I’m contemplating moving my journal to a 3rd. Just need to find uses for the other 7.

Had an interesting dream last night where I was at an open garden while King Charles III was in attendance. Some people I was with were eager to meet Him but I felt otherwise, and I went outside the pavilion and waited in the trees beside the door. The King’s entourage started exiting the building and a secret service/protocol officer that I just noticed I was standing next to said to me, “when the King looks at you, you do what I say.

It might be time for the City of Melbourne to close off Collins St. to cars between Spenser and King. Tram Stop 1 is so busy in the afternoon. So many people are transferring to trains. It’d be easier if they can use what is currently the road. That leaves the busses but they can use the tram line.

I’ve was really excited about LLM-powered auto-complete when I first started using it, but now I’m starting to find it a little annoying, particularly if completions are offered unbidden. It feels like the IDE equivalent of someone attempting to finish your sentences and often getting it wrong.

🛠️ CyberChef A nice website for doing the sort of things one tends to do when writing software. Quite a large suite of tools: JWT decode, Protobuf decode, X.509 cert decode, UNIX epoch conversion, etc. Runs completely within the browser. In fact you can download the HTML+JS and open it locally.

Open any book about creativity and the author would say something like “ideas do not beget action; action beget ideas.” I’ve never really internalised this until quite recently, when I found myself getting many more ideas for a project only after working on it. I just needed to start work.

If you’ve designed a REST API that requires users to distinguish between a null value and a missing value for any particular JSON field, then you’ve designed your REST API badly.

🔗 The Monospace Web A very nice exploration of webpage design using a monospace font. The first thought I had when I saw this was that this would work great for online man pages, which never look as good online as they do in the terminal. Via: Robb Knight

Find it I did. Went by St. Ali Coffee on my way to work today on the advice of a friend. Tried their expresso. Not much of an expresso drinker but I did like it: a very interesting taste. I may try their cappuccino next time.

The same market had a showcase of vintage cars maintained by enthusiast. I know a few people who would love to see this stuff. Not me, however. I wouldn’t know a Mustang from a Maserati.

Passed by some old-school “marketing” on my way home from the cafe this morning.

Bocce at Albert Park. Stunning day for it. Quite cold in the shade, but the Sun’s got that bite to it again, announcing that Spring is on its way.

From the archives: If there was ever an instance of technologists overengineering a solution without considering how it would be used to solve the problem, the Semantic Web is a great example. Was reminded of this when I saw Dave Winer mention RDF. It was meant to be the future of the web — the original Web 3, before those peddling blockchain rubbish commandeered the name. I’m really glad that it went nowhere.

Might be my imagination, but I think Google has tweaked Maps to show street names more often than they were. If so, nice work, Google. Appreciate it.

It’s funny how one’s route to a venue has an impact of how one feels of that venue itself. After that new route to work, it feels a bit like I’ve entered the office for the first time today, despite coming here 3-4 times a week for the past two years. Maybe it’s just a new sense of place as you see areas you’re unfamiliar with: filling in the gaps, as it were.

Walked to work via St. Kilda Road today, which is a route I’ve not taken yet. Longer than my usual route, but was still very pleasant, until I had to cross Kings Way, which is a little stroady. Will file this route under “occasionally”.

The exhaustive Go linter complaining about missing cases for switch statements with a default clause is killing me. missing cases in switch of type this, and this, and this, and this, and…

I can count on one hand the number of times I regret writing something on this blog. To count the number of times I regret not writing something on this blog, I’d have to include both feet. Wish I can get over the sense that others wouldn’t find it interesting. That’s probably true. Write it anyway.

Aaaaargh… 😫 May need to get a new kettle. In the meantime, coffee machine’s putting in double duties.

🛠️ LlamaLab: Automate for Android Found this app while looking at AntennaPod. Looks similar to Workflows or Shortcuts on Apple products, but for the Android platform. Looks very interesting.

I gotta say, I’m not digging this white-on-white button motif in Liquid Glass. It looks buggy and unfinished. A little dated too: it reminds me of the late 2000’s when box-shadows were added to CSS 3 and websites were experimenting with using shadows as borders.

I’ve gotta get off PocketCasts. I’m no fan of what they’re trying to do to their web-player, such as their push for podcasts “I may like” (even with I have recommendations turned off). Based on what I listen to and what they think I might like, their algorithm has very much miss-categorised me.

Okay, so it’s going to be one of those days.

Oh, interesting. That’s a good explanation as to why OpenAI et. al. would want to make a browser. And if they do tout it as being “AI powered”, then it kinda makes sense that Google would do likewise, as a defensive move to keep marketshare.

Was given a free coffee this morning by my barista at the station. His opened late yesterday but was around to see me and felt bad for missing me (must’ve seen me make my way to one of the nearby cafes that were opening). Apparently I’m one of his loyal customers. I’m honored and appreciative.

🔗 How we built Bluey’s world: tales from original series art director, Catriona Drummond As someone who knows absolutely nothing about animation, I found this fascinating. Some nice bits of theory in this, such as the “language” of shapes: Circles are round, friendly and soft. No hard edges! Triangles are sharp, aggressive and evoke pain. Squares are sturdy, steady and firmly planted. Then on top of that, even directional lines have implicit associations!

Request for a go linter: something that would warn when an variable with the name err is not of type error: func Bla() { err := 123 // 'err' not of type 'error' } Would’ve saved me a few hours today trying to test if a Future was not-nil, without actually waiting for the result.

Some follow-up on moving TIL Computer to Quartz. I mentioned that I wanted to eventually set-up a hot-key for activating search. Well, Quartz comes out of the box with that already: press Cmd+K to open the search. Very nice!

Need to learn patience over when to post about an event here. Something’s coming up today, and although I have some thoughts of what will happen, I don’t know for sure. Best to write about it after the event, rather than pepper a post with speculations, like “might this” or “could that”.

Dredging equipment deployed in the Yarra.

Moving TIL Computer To Quartz

Moving TIL Computer from a blog-like technical stack to Quartz 4 to enhance its functionality as a knowledge repository, transitioning from a blog format to a more wiki-like architecture while integrating with Obsidian for content management.

I used to be an AWS Step Function guy. Couldn’t stand the YAML, but the execution model was decent and it was reasonably featureful. But now I’m using Temporal and I’m starting to like it a lot. Provides just enough workflow for those cases where Step Functions is overkill. Plus, no YAML!

Looks like my touch-bar didn’t show up to work today.

🔗 Aresluna: Frame of preference This walk through the various preference windows of MacOS is amazing. The way they integrate Infinite Mac alongside it: genius. Best explored while listening to ATP Overtime. Via: ATP #650: Whatever It Takes to Get the Laundry Folded

Enjoying listening to the latest Talk Show with LMNT (I’m about 67% through it so far). Especially liked this part about Safari, and not just because it validated my feelings about it. 😀

If anyone’s interested in rebooting the Core, here’s your premise: rich tech entrepreneurs are sick of slow terrestrial Internet speeds. One comes up with a solution: instead of laying deep-sea cables around the Earth, why not lay cables through the Earth? A venture is formed and work begins. But uh-oh: they got too greedy and tunneled too deep. Throw in shots of cities getting destroyed, people yelling at each other in offices, a crack team of heroes being assembled for the Virgil II, and boom!

Pro-tip: install software updates for your tools before you want to use them, not when you want to use them.

There was something about the appearance of iOS 26 Safari WebViews I wasn’t too sure about, and now I know: there’s a material transition between the header and the web-page, but there’s nothing separating the two. No edge, no gradient. This looks unnatural and, dare I say, a little amateur.

“Get out more” goal for July failed. ❌ Not my fault this month: plans fell through. But will attempt to remedy this in August.

TIL that Donaldson’s Dairy from which Hairy Maclary resides is what we call a milk-bar on this side of the Ditch. Growing up and having these stories read to me, I always thought it was like a dairy farm. Odd to think this in retrospect, given that the setting is essentially a suburban street.

Nah, shortcuts’ not gonna work this time. Looks like I’ll have to do this fix properly. 🚶‍➡️

I can’t decide if a busy work or a slow week is worse. Busy weeks are frantic in the moment, but there’s always a sense of accomplishment at the end, even if you can’t remember what you did. I’ve also lived through weeks where nothing happened, and I must say: that feeling of time wasted lingers.

I wonder if the prudent course of action for iOS app developers is to hold off from releasing their redesigns on day one. I wonder if iOS’s new look will be overwhelming for users and having an app that’s unchanged for a week or a month could provide them with something familiar to them. 🤷

Wow, Slack just crashed. Haven’t experienced that in a while. At least it kept the draft I was writing so I didn’t loose anything.

The thing about testing, at least in my experience, is that the total time actually spent testing the logic is probably around 20%. The other 80% is setup, finding test data, fixing unrelated things, discovering other bugs blocking you, etc. It’s just a slog through one problem after another.

Today’s the day that I listen to the linter say “you know, you could improve your code here” instead of telling it be quiet with nolint comments.

🛠️ Obsidian Plugin: Daily Notes Editor Displays all your daily notes in a single editor tab, much like Roam Research. This was a feature I liked about Roam, and when I first looked at Obsidian, I wish it had it. Trying it out on my personal vault, where the daily notes tend to be quite small.

Yes, I am going to spend 30 minutes obsessing over what information log messages have. It’ll save me the 4 hours I spent trying to get this information next time I need it, because past me didn’t obsess over these log messages enough.

🔗 Daring Fireball: Microsoft Introduces ‘Copilot Mode’ in Edge Some follow-up from my recent pondering about chatbots in browsers. From Gruber: I think something similar is behind Microsoft trying to make Copilot front-and-center in Edge, and Google’s concurrent move to junk up Chrome with AI-generated suggestions. Their goal is to make their web browsers chatbots faster than OpenAI can make ChatGPT a web browser. Okay, that’s plausible. If it’s just a fight for mindshare than I can understand this.

🔗 Daring Fireball: Google Chrome Adds AI-Generated Store Summaries Now browsers themselves will be adding their own layers of distracting cruft atop the websites. The entire premise of Chrome — the reason for its name — is that it was originally designed to simplify the UI of the browser app itself, the “chrome”, at a time when Internet Explorer and even Firefox were increasingly cluttered and confusing. I’m confused as to why Google and all these AI companies are so gun-ho about adding AI agents to browsers.

Barely took me a week to realise that weekly notes in Obsidian is not for me. Thought I could use them to track week-long TODO list. But after a busy day yesterday, the note was already long enough that scrolling to the top to add a TODO was a bit much. These daily notes get quite large apparently.

I’ve changed my mind about relative date-stamps in software listings. I no longer like them, even when the event is recent. No more “3m ago” or “7h ago” (and definitely no “3 months ago” which tells me nothing). Just give me an absolute date and time, please.

The trouble with Holmes’ axiom is that it’s in direct opposition to Occam’s razor, which tends to be the answer more often than not. So one is likely to come to the improbable cause of an issue last, once all the simple causes have been tried and rejected. That’s probably the right way to do things, but it does slow things down in cases where time may be of the essence.

Sherlock Holmes would’ve been an amazing developer: When you have eliminated all which is impossible, then whatever remains, however improbable, must be the truth.

I suspect half the reason developers like to complicate things is to just talk about them. Overhearing two colleagues right now talk about React, Next.JS, and how they’re managing state in their personal projects. As someone with no interest in React, it’s hardly a boast of my abilities to walk over there and say, “well the last project I worked on uses HTML and a bit of vanilla JavaScript.”

Passed by some purple swamphens (or pūkekos for those across the Ditch) on my walk today. About three of them went by going the other way, just going about their business. Such interesting birds.

Making that Seinfield reference in my post on iPadOS 26 and Liquid Glass got my creative/meme-ing juices going. Opened DaVinci Resolve for this one.

Just for the record, I’m not going to stop using em dashes just because LLMs use them too. But to prove my authenticity, I’ll occasionally use ’em dashes incorrectly - like this. Hopefully this is enough evidence of my human—typed—this bona fides.

Got confirmation that I’ve been admitted into a very exclusive group: the cafe regulars Heidi recognises. Fellow members include a few other regulars, the cafe staff, and the lady who runs the milk-bar next door. Initiation involves getting one’s leg sniffed upon entry of Heidi.

🔗 Manuel Moreale: Why this matters Manuel Moreale celebrates and reflects on reaching the 100th People and Blogs. Congratulations, Manuel! Here’s to many more. We’re entering the 3 digits era of People and Blogs, and the next milestone is going to be the beginning of the 4 digits era, which will arrive in the year 2042. […] I’m not even sure if blogs will still be a thing by then.

Really glad that I organised some work about 6 months ago that, at the time, seemed like an extravagance. It really came in handy today, and significantly cut down the time and effort it took to finish my task. We’re talking about savings of a couple of weeks, based on how long it took back then.

If you asked me today, I’d probably call this game “rock paper scissors,” most likely due to my consumption of American media. But growing up, I do remember calling this game “paper scissors rock.”

Watched this excellent video by Taitset about the train derailment that happened last week. Quite informative on what happened, the extent of the damage, recovery, and what could’ve caused it.

Was eying migrating my journal away from a bespoke app to Memos yesterday. Slept on it and decided it’s probably not worth the hassle, at least for now. But for anyone else interested in self-hosting your notes, there’s much to like about this little web-app.

Had to troubleshoot an issue where images weren’t being updated properly when changed. You can probably guess what the underlying cause was.

I think I’ve come to prefer programs that report progress when they’re doing something. I can understand the rule of silence when I’m confident that the program is doing something and will finish soon. But if it’s anything involving a network or lots of data, I rather know how far it’s progressed.

When did software development get so slow? I can understand large builds taking a while. At least it’s obvious that the computer is working on something. Nowadays it feels like I’m waiting for no good reason.

I’ve said this before and I’ll say it again: the ability to make a lambda from a method, a la Java’s double colon operator (e.g. obj::toString) is sorely lacking in Go. It would be great to use myVal::String to get a func (myType) string function that I can pass into Map and Filter.

Since I’m not a huge user of iCloud, the fact that I only have 5 GB doesn’t offend me. But seeing the breakdown of my storage usage, I can understand why people think Apple is being unreasonable here. To use up 80% of the available storage and leave a measly 1 GB for personal use is not great.

Logged into the iCloud web-portal for the first time today (I completely forgot that there was a web portal). I don’t know if this is a thing many people use, but it’s… okay. A little slow, but potentially useful for those times when you can’t access something via native apps. There is also a sense that it’s a little flimsy, that if you push too hard it will fall over. Can’t quite put my finger on why that is, but I think it’s all the small, thin fonts and pale colours.

Kind of wished Mail.app kept your email rules when you choose to sign out of iCloud. I did just that on my work laptop, and today I found all my rules got clobbered. Good thing I documented at least one of them, so I didn’t loose too much. But it’s still data loss, and I rather it didn’t happen.

It’s the simple things in life that give you joy, like the one I’m currently experiencing: being in a warm bakery on a cold morning.

Work email spam is so weird. Seeing emails from vendors with pitches for stuff, as if I have any decision power over anything. Maybe they’re hoping that I’ll forward it to my boss or something. Or maybe I’m just flattering myself, and they’re simply phishing attempts.

Quick trip along the Main Yarra Trail near Heidelberg this afternoon. Busy as always, but was a nice day to be out so not too surprising.

I posit to you that those that complain about the state of the web haven’t actually experience the web, or not enought of it. They spend all their time in closed platforms, consuming algorithmic feeds and not making nor following links, and get turned off by the ensittification of it all. It’s like travelling overseas, spending all your time at or around the hotel, coming home, then telling others that your trip was pretty boring.

Don’t want to say much about Apple’s lawsuit against Jon Prosser other than that it’s not a good look. Might be that Apple has lost all sense of optics, as evident in the string of “success” they had in their recent advertising. So let me clue them in on something: Apple, you are no longer the underdog. If I’m going to see headlines saying “Apple sues X” where X is anything other than Microsoft, Google, Meta, or the US Government, I’m just going to think that you’re throwing your weight around trying to hurt or stop someone way smaller than you.

It’s funny how blogging can feel like you’re writing to everyone and no-one at the same time.

Nothing like ending the week with a somewhat involved Friday release to production.

Listening to a podcast where the guest recounted a story of a young person saying that they “watch a lot of podcasts,” and I just sighed with despondency.

Someone needs to teach washing machine microcontroller engineers about non-volatile memory, so they can build machines that remember the last cycle and wash options. At the very least, they could be better in selecting good defaults. “Cottons” is not a good default if “everyday” is the mode I want.

I keep forgetting that the written word has different expectations around contractions. I’d probably speak aloud something that sounds like “the same round here”. But I need to remember to write that as around or ‘round. Being ‘round here is different from being round here (but still applicable 😉).

About 9 years ago, while visiting the USA on a work trip, I went to the Elephant & Castle in Washington, DC. Someone recommended it to me, but I was frankly underwhelmed: not what you’d typically get at a pub around here. Today I learnt that it’s actually a chain of pubs, which probably explains it.

Just one of those weeks where nothing is working at all. Computers, transport, the gym. Probably should just write this one off and regroup next week.

Eyeing this course on screencasting. Might be a good skill to develop. I’ve recorded a few screencasts for work in the past and not only did I find it a good reference to share to others, it was fun to do. Via: Chris Coyier

Should turn in my software development credentials right now. Thought I fixed a bug which failed QA because it didn’t work when multiple items were submitted. I didn’t test submitting multiple items, I only tested singles. Effin’ amateur hour! 🤦

🔗 MacSparky: A Remarkable, Unremarkable Thing We often talk about how people can’t put their phones down while in line at the market, but what about during moments of joy? When taking in a theme park with your family, at the beach, or on vacation? Those moments are found solely in your immersion in the now. A thought-provoking post.

It’s striking how few Substack writers have setup their own domain name. Every link I see in the post I’m reading bar one is something.substack.com. Is it just too difficult to do? I thought that service attracted those that want to go out on their own. This feels like going halfway.

Oof! Interviewing always takes it out of me. And I’m not even the one being interviewed. 😩

It’s DNS. It’s always DNS. It always will be DNS.

Train line outage is still ongoing. Apparently there’s been a derailment due to pantographs getting entangled in the overhead wires. So the new rolling stock experience continues. Today’s is a brief ride in a Siemens, complete with driver pointing out landmarks of interest.

Got lucked into getting a Comeng train. Haven’t ridden one of these in years. They’re being retired so may be one of the last times I get to ride them.

Making lemonade out of the lemons that is a total outage of my train line by seeing areas of the network that are completely new to me.

I feel for anyone that needs to write any code that deals with audio. Hope you like big arrays of numbers and small quanta of time.

Ooh, has it been 5 years already?

Overheard the barista talk about watching a YouTube video of someone who owns an expresso bar taking a minute to make a coffee. “Why does it take him a minute to make a coffee? I can make 5 coffees in that time. I understand pride in your work, but if I were waiting for that…” They go on to debate the expectation of customers of a cafe verses those going to such fancy establishments.

🛠️ The Death Generator An online tool for generating images of message screens from retro 90’s games. Quite a selection of classic game message screens. Now, my egotistical side will think it beneath me to use this for posting lame memes here. To that part of me I say… Via: Robb Knight

Amazing Dithering this week. Loved the discussion on why Apple is so driven to remove all software chrome. Never considered that it was because of how the various teams are organised (spoilers in the included clip).

Everything’s been so quiet around here. The school holidays explain it in part, but I wasn’t expecting it to be this quiet. Is everyone away? Or maybe they’re just staying indoors trying to keep warm. In any case, makes going to the cafe and being the only customer a little awkward.

Look, I’m no fan of Amazon and I’d like to get off using Kindles eventually. But the alternatives can sometimes be downright unusable. Behold: using the Kobo reader on an iPad in landscape orientation.

It would be nice if MacOS Calendar had an option to send a email receipt when setting up a meeting. For a while I couldn’t get email invitations sent out to attendees. I think it’s fixed now, but I still have doubt that it’s working properly again.

I did not expect the mushroom murder trial to make its way into the Economist this week. But given the intricate nature of the case, I can absolutely understand why. I no doubt expect this will be turned into some sort of mini-series in a few years.

It’s funny the way you sort of “run into” people and their work online. I’ve only been following Simon Willison for about a year, yet it was only today that I noticed a testimonial of his on a Golang project I’ve been using for quite a bit longer. “Serendipitous”, I guess you could call this.

I’ve been misspelling “cancelled” a lot recently, in that I’ve been spelling it correctly yet the linter’s been saying, “no. Use the US spelling of ‘canceled’!” 😏

If there’s one thing I’m learning from Ben Thompson, it’s that everything’s a trade-off and nothing in life is perfect. And that’s no less true for something like adopting a branching process. Should you merge your changes straight to main; or should you keep main stable for production releases, and have a separate development branch? Not the question to ask: either approach sucks (trust me, I’ve worked with both). The answer is to find an approach that sucks the least for you and the way you work.

My mind wandered this morning to a job I previously had that had an office in a building that had a pair of breeding peregrine falcons. They were provided with a nesting box and an ornithologist set up a webcam. The feed is available on the internet and in the office we tacked it on to a TV set up to cycled through things like our Jira board and support queue.

Glad I’m not the only one that’s frustrated with Google Maps showing route numbers instead of street names. May be a false memory but I seem to remember this being better in the past. Don’t know why they decided to change it.

I see that JetBrains hasn’t fix that GoLand backspace bug yet, where the backspace key stops working for some random reason. That’s quite a strange one.

“How fast does Stripe post web-hook events?”, you ask. Well at the moment I’m facing a small race condition where a thread makes a call to Stripe, and another thread receives the event before the first one has finished its routine. So yeah, pretty fast.

Release version 1.2.0 of Postlist which contains the following changes: New limit attribute which can be used the set the maximum number of posts shown in the list. A new mode which display the full contents of a post, rather than just the title or the first line. This can be enabled by setting the new display attribute to content. Just a reminder that the attributes can be mixed and matched, so you can use both these new attributes together, along with all the existing ones:

🛠️ PocketCal Nice looking web-app for sharing event dates by Cassidy Williams. Nothing stored server-side: all the event details are encoded in the URL. One of those sites that’s worth keeping in your back pocket for when you need it. Via: Robb Knight

Great time of year to pick a birthday. Organising an event today and everyone’s sick, including myself. Just received one cancellation because someone’s got the flu. Argh! Ah well. It is what it is.

🔗 Simon Willison: Identify, solve, verify No matter how good these [coding LLMs] get, they will still need someone to find problems for them to solve, define those problems and confirm that they are solved. […] It’s also about 80% of what I do as a software developer already. Hey, I’m a software developer too. And I acknowledge that my job is more than just typing things into an IDE. In fact, it’s probably closer to what Simon Willison does, where I’m identifying problems, and writing Jira tickets for others to fix rather than do it myself.

Lightbulb moments.

It may seem like that spending all evening watching TGV cab rides on YouTube would not yield any lessons1, and usually you would be correct. But after watching a cab-ride yesterday, I did learn a few things about overhead electrical systems that I found quite interesting. French railway sign indicating neutral zone. Credit: Peter Bereczki For example, I learnt about neutral sections, which are areas of the track that are unpowered.

🔗 LMNT: I’ve Got Better Things To Do Than This, and Yet It’s one thing for QuickTime UI to “get out of the way.” Please, do. I’m watching a video. I don’t need a big honkin’ pause button in the middle of the window, you know? But wait a minute, why is there a big honkin’ pause button in the middle of the window anyway? That’s not how it used to be.

I’m now fully on the train of code first, manual testing next, then unit tests last. It’s while the code is running in a larger system where you “feel” how best it should behave, and whether that behaviour needs to change in any way. You then use the unit tests at the end to lock that behaviour in.

🔗 CSS Minecraft Pretty impressive to see what’s possible with CSS nowadays. Viewing the page source is quite illuminating.

🔗 Search Engine Land: What 1,000 food blog audits has taught me about SEO I’m wary about posts on SEO but I found this one discussing the techniques attempted by recipe bloggers quite interesting. In short: cargo cult thinking around SEO myths is resulting in many bad food sites. Via: Pixel Envy

Released version 1.1.0 of Postlist. Featuring more sorting options, such as sorting by date or sorting in descending order: <!– Oldest to newest –> {{< postlist order="date" >}} <!– From Z to A –> {{< postlist order="alpha desc" >}} See docs for details.

Started seeing Christmas in July signs go up. Wonder if that’s a thing in countries north of the equator. Something celebrated by Aussie expats who consider Christmas a summer holiday.

Suffering from a cold, I probably shouldn’t have gone in to work today. I’m sort of glad I did though as I had a pretty productive day. Got a release out to prod that’s been in the works for a few months that I’m really happy to see the back of.

It’s funny how much you crave comfort food when you’re sick. It’s like saying to your body “well, if you’re going to inflict all this pain, then I’ll show you. Here’s some empty calories.”

Here’s an idea to shake up code reviews: “review bombs.” A team member can post a review bomb which will start a countdown timer: say 30 minutes. Everyone else can either make a comment or approve it, which will stop the timer. If the timer reaches zero, the request will be auto merged.

Day 30: solitude #mbjune

Today I’ve complete my 40th trip around the sun. I don’t have anything prepared for such an occasion. Maybe just read Annie’s birthday blog post. It’s good.

“Get out more” goal for June failed. ❌ I know, I know: my failures on this goal is ongoing. But being away from home for over two weeks this month, I’m giving myself a bit of a pass. But July. Let’s get this back on track in July.

Day 29: winding Photo of my boss and I travelling down a winding road to the beach on Niue. Taken Aug 2014. #mbjune

On Ranting

Thoughts on Manuel Moreal’s latest post and what makes a good rant.

Built a new Micro.blog plugin: Postlist. Adds a short-code which will display a list of posts, optionally filtered to a specific category, and ordered either alphabetically or reverse chronologically. Similar to Bear Blog’s post macro, although not as fully featured just yet.

Day 28: ephemeral Not a high quality photo today, but true to the prompt, it was the best one I could take of this stormy cloud formation before it slipped away from view. #mbjune

Got my kettle lid back. Dad did a great job.

Before I left for Canberra, I handed my broken kettle lid to my dad who offered to repair it. I haven’t got it back yet so this past evening I’ve been using my kettle without one. And I can now tell you what happens when you do: it doesn’t shut off. The water starts boiling and will continue to boil until I manually cut the power (it’s one of those kettles which an induction coil so it’s just a matter of lifting it off the base).

Looking forward to the rail link to Melbourne Airport. Can’t come soon enough

It’s funny that I find myself downloading 4 hours of podcasts for an hour-long flight. On the flight up here I barely got through a 30 minute Stratechey weekly article.

Before I started studying computer science, I didn’t even know how to spell Vi. Now I know how to quit from it. 😛 (This is a bit of an inside reference that I’m not expecting anyone to get. Maybe one day I’ll explain it.)

Day 27: collective Last day in Canberra. Spending some time being in the company of these two before we head over to the minder. #mbjune

So I hear Dennis Villeneuve will be directing the next Bond film. Not sure the city of London is large enough for his typical establishment shot. 😏 I kid. I like his work on Dune. I’m confident he’ll do a good job here.

Day 26: bridge #mbjune

I can understand the move away from gas for home heating to reverse cycle, but I think I will miss it. Reverse cycle for heating is not perfect. I’ve got the thermostat set for 20°C and I still feel quite cold. I don’t get that toasty feeling that comes from central gas.

🔗 Spyglass: Apple Lives Long Enough to Become the Ad Villain People pay a lot of money for these devices from Apple. And part of the implicit bargain is that they won’t have adware or ads themselves shoved at them in every direction. Now I’m no marketing expert, but I do know that understanding one’s customer base is important for success. And I understand that Apple’s is generally made up of people who pay a premium for a good user experience.

There’s no reason to use Testify’s Suite package for Go unit tests anymore. It’s possible to do whatever you need to do with Go’s builtin test runner. Furthermore, most IDEs are smart enough to detect and run sub-tests that use t.Run(). So save yourself some trouble and just use the defaults.

Marco Arment @marcoarment@mastodon.social This is a core system app interrupting you, promoting a sale by a movie-ticketing company, to push you to go see the platform vendor’s new movie. Why not just pop up random ads all the time, always creating new channels that everyone’s opted-into by default so you can never keep up with opting out of them all? Oh wait, that’s already what happens. Apple’s as bad as everyone else.

Day 25: decay #mbjune

Shoutout to all the vendors out there that slip a question about a feature that’s never used in production on a certification exam. I’m only going through training at the moment, but the instructor had a colleague that saw a question about a “tip of a day” feature on an exam once.

🔗 Omer: you are what you launch: how software became a lifestyle brand they don’t just ship features anymore, they ship vibes. onboarding becomes a performance. the ui is the brand. the founder’s blog post is the manifesto. it’s not about what the software does.it’s about who it’s made for. I guess this shouldn’t be surprising. Software construction is like any other human endeavour, where the person making it puts a bit of themselves into it.

Day 24: bloom #mbjune

Slack’s Canvas feature needs to make clearer which bullet point is associated with the open thread. I’ve been pinged in three separate threads over the last minute, and I can’t tell which one is which. Showing the bullet point at the top is not enough as we’re using headers to distinguish them.

Need to change my credit card as my old one is expiring, so I’m doing a stocktake of what I’ve subscribed to. Total service count is 28. Potentially more as I’m sure there are some that I don’t have a 1Password entry for. A good opportunity to trim some of them down.

Day 23: fracture #mbjune

Day 22: hometown #mbjune

On MacOS Permissions Again

Some dissenting thoughts about John Gruber and Ben Thompson discussion about Mac permissions and the iPad on the latest Dithering.

Returned to Tuggeranong for breakfast and a walk around the lake. The morning was quick crisp, and there was plenty of frost on the ground, but it was quite nice in the sun.

Day 21: silhouette #mbjune

Out early in yet another bracing morning. Didn’t even know this temperature gauge showed negative numbers.

Being in meetings most of the day has left my voice hoarse and completely tired out. I don’t know how people who talk for a living do it (my suspicion is a decent microphone and regular vocal training).

Day 20: gather #mbjune

Was writing “Airbus” in a message and mistakenly typed a P instead of a B. Found the results amusing, so I fired up ChatGPT’s image generator:

From the archives — key ring: Was true a year ago and is currently true today.

Done. Removed the Discover feed from BlueSky. I was getting a little too obsessed with it and depressed from it. It’s reverse chronological from here on out. (Honestly, I should probably cut down on social media altogether, but one step at a time.)

Day 19: equal Full disclosure: I used the Google Photo AI erasure tool to remove the front number-plates from these two silver Toyota Echoes (if you’re a regular reader, you can probably guess why). #mbjune

Found a particularly interesting bug in Safari when I tried adding a background transition to radio-button labels styled to look like regular buttons. Tapping the labels on the iPad causes the background colour to flicker: Fixed it by working around the problem: I only need the transition when the user taps “Submit”, so I held-off from applying the transition attributes until that happens. But wow, what an weird way to fail.

Pro tip: don’t copy the .git directory of one repository over the .git directory of another. Some weird and wacky things will happen, like the active branch changing from underneith you to the files you modified being in conflict with those same files being deleted.

Tried out the Micro.blog Raycast extension by Tynan Purdy. Works well. I am curious to know how customisable the input form is. A larger text box and a character counter would be nice.

Thinking of Meta putting ads in WhatsApp reminds me of when Microsoft tried ads in Skype. The pitch for users, as I was to understand it, was that the ads will help drive the conversation. I know my life could be spiced up with a conversation about dishwashing detergent.

Day 18: texture #mbjune

Mark this day where I got swayed to build something atop of Kubernetes rather than doing something hand-rolled. Hope not to look back on this day when things are broken and delayed and I have no idea of how to fix it.

I think I’ve decided that I prefer Canberra in the summer rather than the winter. Sure it means you’re likely to get the hot weather, but it needs to get really hot before you decide not to go outside. And getting outside when the temperature is at or below freezing is just as hard. 🥶

🔗 Nicholas Bate: The Greatest Productivity Tips, 159 Simply because we do not affix a postage stamp to our e-mail does not mean it is free. That mail has a huge cost in productivity terms: for us, in did we craft it correctly first time? For others in lack of certainty perhaps of what is required of them. For others in being cc’d without need. No, mail isn’t free. It’s extraordinarily expensive.

Day 17: warmth #mbjune

Just watched the WWDC video on Liquid Glass and I must say it looks pretty nice. Granted I’ve not actually used any part of this new design yet, but if they can manage to pull it off, it’ll be quite a refreshing new look.

Day 16: blur #mbjune

🔗 82MHz: Blogs are still a thing One more for the “blogging’s not dead yet” list everyone’s keeping. Blogging is a small niche these days. There isn’t much hype around it, nor is there any money to be made because the VC firms are all busy chasing the next big thing […] But it is still here, and I like it exactly because it’s not the hype technology of the day anymore.

Gallery: Day Trip to Yass

Decided to go to Yass today, a small town in NSW just north of where I’m staying in Canberra. I pass by Yass every time I drive to Canberra from Melbourne, and I wanted to see what it was like, at least once. And this morning I discovered that it had a railway museum, which sealed the deal. Unfortunately the weather was not kind: it was bitterly cold and rainy the whole time I was there.

Day 15: tie Was wondering what I’d submit for today until I realised that the bird cage had all sorts of toys with tied knots. #mbjune

🔗 MOR10: Blogging is dead. Long live ephemerality. This ended up being quite an insightful piece, particularly around how much better the authoring tools are in Instagram and other social media apps. Via: Juha-Matti Santala

Appreciate that there’s someone else out there getting driven crazy by Apple throwing up permission pop-ups everywhere in MacOS. And the Terminal, of all places.

Ricco’s taken an interest to my shoes today. Ivy, despite trying to come off as her own bird when it comes with dealing with Ricco, couldn’t help taking an interest too. 🦜

Devlog: UCL — More About The Set Operator

I made a decision around the set operator in UCL this morning. When I added the set operator, I made it such that when setting variables, you had to include the leading dollar sign: $a = 123 The reason for this was that the set operator was also to be used for setting pseudo-variables, which had a different prefix character. @ans = "this" I needed the user to include the @ prefix to distinguish the two, and since one variable type required a prefix, it made sense to require it for the other.

Day 14: twilight #mbjune

I think I may need to write more long form. It’s easy to dash out a small thought or two like this. It’s quite different trying to organise your thoughts into something larger. Different muscles are being exercised, and it feels like mine have atrophied a little.

Some Morning AI Thoughts

Some contrasting views on the role of AI in creation, highlighting the importance of human creativity and quality over speed and cost-cutting in technological advancements.

Day 13: pathway #mbjune

Hello there. 🦜

I must admit, I was not expecting much when I plugged my iPad into a HDMI and USB hub splitter. Yet I was pleasantly surprised that it had no trouble extending (well, mirroring) the display and enabling keyboard and mouse. It’s not perfect, but it’s better than I was expecting.

Day 12: hidden #mbjune

If ute is short for “utility” vehicle, then instead of SUV, we should be calling these vehicles “sports utes”.

🔗 Robert Birming: Blog Inspiration Very nice collection of links to blogging resources — from ideas and inspirations through to colour and icon packs — from @birming. This stuff is cat nip for me, so I’m sure to enjoy browsing these links.

Speaking of avians, I’m back in Canberra, which can only mean one thing: there will be photos of cockatiels.

Every cafe or eatery at the airport uses an avian or aviation theme. Here’s a way to stand out: nautical theme. Having a fish and chip shop with boats and lighthouses will turn heads.

🔗 You’re not a front-end developer until you’ve… - Nic Chan Scored 17 in this little quiz. Not bad for a backend developer, although many of the questions universally apply. Via: Jim Nielsen’s Notes

Day 11: brick Might be pushing the definition of “brick” for this one. #mbjune

🔗 Science: Cockatoos have learned to operate drinking fountains in Australia Each placed one or both of its feet on the fountain’s twist handle, then lowered its weight to twist the handle clockwise and prevent it from springing back up. Amazing.

Looking forward to all the fun new permission gates that will show up in MacOS Tahoe. “Your keyboard is trying to use a process on your computer. Keyboards are known to result in modifications to your personal data.” 😛

Day 10: rail I post a lot of train photos on this site, so here’s one of the other railed vehicles I encounter. #mbjune

That Which Didn't Make the Cut: a Hugo CMS

You’ve probably noticed1 that I’ve stopped posting links to Open Bookmarks, and have started posting them here again. The main reason for this is that I’ve abandoned work on the CMS I was working on that powered that bookmarking site. Yes, yes, I know: another one. Open Bookmarks was basically a static Hugo site, hosted on Netlify. But being someone that wanted to make it easy for me to post new links without having to do a Git checkout, or fiddle around YAML front-matter, I thought of building a simple web-service for this.

🔗 Dan Sinker: The Who Cares Era This post has been doing the rounds in the online circles I travel in. I finally got around to reading it, and I think the author is right: caring about something in a world where others don’t is a radical idea. I know it’s an area where I could be better. Oh, and I’m sorry, but I find the term “Instagram mini-essay” to be an oxymoron.

Day 9: wood A photo of my grandfather’s old joinery. #mbjune

Day 8: travel I suppose I should start thinking about filling this up. #mbjune

Will be away from home for a while so got a VS Code server ready so I can still work on projects. Setting it up in Coolify was so easy, yet I’ll need to fix the issue of the proxy server adding /proxy/port-no in front of all my handlers. Got some Java servet vibes from this.

TIL that the metaphor for nervous anticipation is not to be “on tender hooks.” It’s to be “on tenterhooks,” a type of hook used in a frame called a “tenter” used to hold material.

Just setup a cron for performing a repo backup on my Mac Mini server. And I swear to God: if MacOS prevents this backup from running because of some damn permission check, I’m going to be effin’ furious.

Chalk me up as one of those people that wished they could use Markdown everywhere. I use it for notes, for messaging, writing here, etc. I occasionally dabble with WYSIWYG editors but I always turn back to Markdown. Love it.

Day 7: switch Has anyone had any success knowing what each hotel switch does without having to try each one of them first? #mbjune

🔗 Inessential: Retirement Day I stopped working this day in 2025, almost 41 years later, as a senior engineer (which is surprisingly a lot like busing tables — lots of cleanup and setting the table just right for the customers to have a great time). This line made me laugh. I’ve never waited tables, but as a senior dev myself, it often feels that my job has become less about coding and more about fixing problems and getting out of people’s way.

🔗 Jim Nielsen: Notes from Andreas Fredriksson’s “Context is Everything” What really resonates in his step-by-step process is how, as problems present themselves, you see how much easier it is to deal with performance issues for stuff you wrote vs. stuff others wrote. Not only that, but you can debug way faster! The understanding that comes from the code you wrote yourself is grossly underrated in my opinion. Choosing to use a library for something is not free.

🔗 Flamed Fury: Monthly Recap: May 2025 I found the bookmarks from this monthly recap to be really interesting.

Everyone wants to move fast. Yet everyone wants to change their minds all the time. Yet everyone wants things to be robust and secure. Argh! Speed, quality, flexibility. Pick two. If you ask for three, you’ll get zero.

Day 6: contrast Moonlight coming through my bedroom window. This one’s had the Onxy filter applied as the original was quite noisy. #mbjune

Had a reason to write a journal entry today, which meant I had a reason to work on the journaling app. Biggest change was moving the entry list to a separate page and supersizing the text-area to allow for larger entries. Good thing too: today’s was going to need all the space it could get.

If only joining new Discord servers is enough to satisfy the “get out more” goal I set for myself. It induces the same feelings I get when I walk into a room of people I don’t know all getting along. 😬

Day 5: reflection #mbjune

Working on that Godot game again, mainly coming up with mechanics for a new level 2. This is what I’ve got so far: a mine tethered to a balloon. Their idle state is just bobbing up and down, but I am planning a variant which will drop their payload and fly away when the player is nearby.

I’m gonna miss these malfunctioning 1st gen Myki readers when they eventually get replaced.

Day 4: nostalgia A bit of a personal one today: the back room of my Nonna’s house, taken 11 years ago while she was in the process of moving out. Many things in this photo that are nostalgic in their own right. The house has been demolished and Nonna has past on, so I’m glad I have this. #mbjune

Me, exactly a month ago, about how I didn’t care for page transitions: Anyway, that’s the feeling at the moment. Maybe I’ll come around. I think I’m coming around.

Spent most of the day hitting my head against the wall trying to get this damn service to work. I came up with a version which I thought would work, to a degree. But then I handed it to the testers: fail, fail, fail, fail, fail. Argh! I guess it’s back to the wall tomorrow. 😫

Day 3: shadow #mbjune

I wonder if stations can benefit from installing high tables. Seating is useful, but it’d also be useful if I had access to a surface to temporarily place a coffee or wet umbrella when I get something from my bag.

I found Jason’s position about Apple adding gambling odds to their sports app a little odd (no pun intended). Not to say that he endorses it — he definitely does not — but I would’ve thought he’d recognise that people buying Apples products expect a premium experience. And that adding such, one might say, “vulgar” features to their app, degrades that experience. Or at least this probably how I’d feel about it.

Day 2: curve #mbjune

Day 1: tree #mbjune

If I had a dollar for every time I mix up brew update and brew upgrade, I’d probably be able to quit my job.

🔗 Simon Willison: No build frontend is so much more fun If you’ve found web development frustrating over the past 5-10 years, here’s something that has worked worked great for me: give yourself permission to avoid any form of frontend build system. […] The joy came flooding back to me! It turns out browser APIs are really good now. None of my frontend projects are used for “real” things, so I’m not speaking from authority here.

Rubberducking: Of Brass and Browsers

🦆: Did you hear about The Browser Company? L: Oh yeah, I heard the CEO wrote a letter about Arc. 🦆: Yeah, did you ever use Arc? L: Nah. Probably won’t now that it seems like they’ve stopped work on it. Heard it was pretty nice thought. 🦆: Yeah, I heard Scott Forstall had an early look at it. L: Oh yeah, and how he compared it to a saxophone and recommended making it more like a piano.

I hear Apple executives have decline John Gruber’s invitation to his live Talk Show. This may end up being a good thing. The executives were always so guarded, it felt like an interview with a politician. Having someone outside that bubbles will probably make for a much better show.

TIL that Vivaldi has a dashboard of sorts. I discovered it by accident: I created a new tab, and while moving my mouse to the URL bar, I clicked too early and revealed it. Could make a nice canvas for those little web tools I use for work.

So Apple wants to get serious about gaming, eh? Here’s a suggestion for them: instead of spending dev resources on new, dedicated gaming apps, see if you can get a game from 2010 running at more than 10 FPS with all the visual settings set to low.

Enjoyed the interview with Kagi’s founder Vladimir Prelovac on Manton’s Timetable podcast. Motivated me to sign up and give Kagi a try. Let’s see this thing the cool kids online are raving about.

Getting pinged on all sides at the moment. So tempting to reply with something like: Thank you for messaging Leon. You are currently number 2 in the queue. But no, I won’t. I’ll be good. 😀

“Get out more” goal for May failed. ❌ Oh, I’m still slipping on this goal. 😩

I find it amusing that vandals are tagging this wall with chalk. Their graffiti stays up for a few days before the cleaners come with what I assume are industrial-strength erasers. 😄

Dear MacOS devs, Since you already know the email address I’m trying to invite — you included it as an auto-complete suggestion after all — may I suggest that you show a New Contact form pre-filled with said address when I click “Open Contacts” here? Saves me a click and a copy-paste. Cheers.

Be careful when asking someone to do something. They may just go ahead and do it.

🔗 Birchtree: Apple copies Samsung 😉 It has been fundamentally strange that Apple currently has OS’s with the same features that rarely share a number, so numbering them by year makes sense. Wait, I was under the impression that Apple’s practice of trying to jam the same features into their OSes at the same time had a detrimental effect on quality. And they’re going to synchronise all their OS version numbers?

Not sure I’m willing to spend 9 minutes and 21 seconds watching that “Sam and Jony” IO1 video, but after hearing that it featured music from the Martian soundtrack, it got me wanting to listen to it again. It’s been about 9 years since I played it last, and I’ve forgotten how good it is. Not sure I’ll add it to my rotation — there are a few less-than-pleasent memories associated with it — but there’s no denying that it’s a pretty decent soundtrack.

Shout out to Daman, who helped me with my recent podcast dramas.

Might be a bit early in the week but I’m calling it now: this week’s earworm is very likely to be songs from Eurovision Song Contest 2025, in Basel. 🎵 And I make no apologies for this. Well, maybe some apologies to Kev Quirk. 😁

It annoys me to no end when people and systems display durations of operations, and do not include units. Are we talking milliseconds? Seconds? Minutes? Millenia? Don’t just give me a number like 300. I need to know if that’s a blink of an eye, or if I should go grab a coffee while I wait.

Somehow, the access token for managing my account for a private podcast feed found it’s way into Google’s search index. A complete stranger emailed me about it, which I very much appreciated. Turns out they were searching for one of the query parameters involved in an OAuth 2 exchange: not something super common, yet common enough to be a problem. The issue is resolved now but I’m wondering how it leaked.

Wow, Amazon’s Step Functions are absolute hot garbage. Do not use! For context, we’ve got a Step Function that we’re trying to trigger, but is failing to start for some reason. The error seems to suggest that Step Functions are unable to load resources, or get it from the cache, or some other reason (I don’t have the error in front of me). A problem with the Step Function runtime itself, rather than step function we’re trying to launch.

I wonder if anyone’s considered a system for measuring length where one unit equals the distance an object needs to be to look like the height of someone’s outstretched thumb. One “thumbkin”, if you will.

Number of days since I’ve embarrassed myself by forgetting the name of someone I work with: 0

For anyone else who needs to know this: the town north of Castlemaine is Harcourt. It’s not Clarkefield; that’s north of Sunbury.

📺 Andor: Season 2 (2025)

For anyone else who’s feeling out of sorts today, here’s my recommendation: get a haircut. With your head not in it’s right place, having it uncomfortably poked and prodded with sheers and shavers is oddly satisfying.

Seems fitting that the cafe should be playing Fleetwood Mac’s Black Magic Woman as I’ve been on a Fleetwood Mac kick all week. And not for the first time. Maybe it’s a May thing.

🕹️ Word Play Enjoyed playing the demo of this new game by Mark Brown, the person behind the GMTK YouTube channel (apparently the only games I play are from those on YouTube). Got to the last stage but didn’t quite make it. Was 40 points short of victory.

TIL the difference between an “editorial” and op-ed". Both are opinion pieces, but an op-ed is by a specific contributor, sometimes outside the publication, whereas an editorial, or “leader,” is an opinion piece by the publication itself. Also, “op-ed” is short for “opposite the editorial page.”

Has anyone considered that maybe the reason “io” is not capitalised is because the shift key on their 2017 MacBook Pro is broken. 😜 (lmika has used up 1 of 1 snark posts for the day. Quota will be refreshed tomorrow.)

🔗 Inessential: My Wildly Incorrect Bias About Corporate Engineers I was impressed, and grew more impressed as time went on, by my fellow engineers’ rigor, talent, professionalism, care, and, especially, ability to work with other people toward common goals. As someone who has only worked in mid-sized businesses (and government) I appreciate Brent Simmons — a developer who I admire and whose software I use every day — candour here. Admitting your biases is not easy.

Bell and chime instruments playing a single note in C5 have been ruined for me as they sound exactly like the Slack notification chime.

Moved Blogging Tools from a Linode VPS, hosted in Sydney, to a Hetzner one, and now one the services it calls out to is returning 404s. I originally thought it’s because the service is not available in Germany, but I tried moving it to Singapore next and it’s still returning 404. Very odd.

Just got a message from the real-estate agent I bought my current house from that it’s been 10 years since settlement. A worthy milestone. Saying that the time flew by is trite, but it really feels like the last 5 years was just a blink of the eye.

In this week’s I wish Obsidian did a thing, oh wait there might be a plugin for this, ah there is find: Note Archiver. Adds a new context menu item to move notes into an Archive directory. Works seamlessly with my manual archiving approach.

Kind of crazy that we now live in a world where it’s easier and potentially cheaper for restaurants and cafes to display their menu on 80 inch LCD TVs than it would be to just have a sign made.

To whom it may concern.

🔗 Pixel Envy: The Future of British Television in a U.S. Streaming World The BBC has problems, but it matters to people. If a country values its domestic media — particularly public broadcasting — it should watch the future of British media closely and figure out what is worth emulating to stay relevant. The CBC is worth it, too. I’d add that the ABC (Australian Broadcasting Cooperation) and SBS are worth it too.

Don’t underestimate the utility of naming meeting rooms. As someone who was almost late to a meeting in the “conference room next door, but not that one you’re thinking of,” they can be super useful.

People at work were always talking about a bánh mì place that was “across the road.” Today, I realised that they weren’t referring to the major road a few doors down from the office, but literally across the street the office is located on (you can see it from the front door). Pretty decent bánh mì.

Watching an integration video to learn more about how to work with an API service provider. First slide: We use HTTP REST, which has 4 verbs: GET, POST, PUT, DELETE. You just used a GET to get this video… Ah, I guess we’re starting this story at the Big Bang. 😩

I know for myself that if an OS vendor started designing their products thinking that I’d want an emotional connection with my computer, I’d start looking for another OS vendor. This is coming from someone who’s turned off Siri on all their Macs. I’m here to use my computer, not make new friends.

All the recent changes to UCL is in service of unifying the scripting within Dynamo Browse. Right now there are two scripting languages: one for the commands entered after pressing :, and one for extensions. I want to replace both of them with UCL, which will power both interactive commands, and extensions. Most of the commands used within the in-app REPL loop has been implemented in UCL. I’m now in the process of building out the UCL extension support, start with functions for working with result sets, and pseudo-variables for modifying elements of the UI.

Unexpected heron sighting. The noisy miners were not expecting it either, and they were not happy.

Like the coining of phrase “Canadian Devil Syndrome” by emailer Joseph on the latest Sharp Tech.

Serious Maintainers

I just learnt that Hugo has changed their layout directory structure (via) and has done so without bumping the major version. I was a little peeved by this: this is a breaking change1 and they’re not indicating the “semantic versioning” way by going from 1.x.x to 2.0.0. Surely they know that people are using Hugo, and that an ecosystem of sorts has sprung up around it. But then a thought occurred: what if they don’t know?

Watched the first semifinals of the Eurovision Song Contest this evening on SBS (the good and proper time for an Aussie). Good line-up of acts tonight: not too disappointed with who got through. My favourites this evening: 🇮🇸🇪🇪🇪🇸🇸🇪🇸🇲🇳🇱🇨🇾, plus 🇳🇴🇧🇪🇦🇿 which were decent.

My first automation to assist me with this “issue driven development” approach: a Keyboard Maestro macro which will activate Obsidian, go to the end of the document, and add a new line beginning with the current time. My goal is to have one Obsidian note per Jira task, which I will have open when I’m actively working on it. When I want to record something, like a decision or passing thought, I’ll press Cmd+Option+Ctrl+L to fire this macro, and start typing.

Enjoyed watching Simon Willison’s talk about issue driven development and maintaining temporal document for tasks. Watch the video but that section can be boiled down to “now write it down.” Will give this a try for the tasks I do at work.

Devlog: Blogging Tools — Finished Podcast Clips

Well, it’s done. I’ve finally finished adding the podcast clip to Blogging Tools. And I won’t lie to you, it took longer than expected, even after enabling some of the AI features my IDE came with. Along with the complexity that came from implementing this feature, that touched on most of the key subsystems of Blogging Tools, the biggest complexity came from designing how the clip creation flow should work. Blogging Tools is at a disadvantage over clipping features in podcast players in that it:

I sometimes wish there was a way where I could resurface an old post as if it was new, without simply posting it again. I guess I could adjust the post date, but that feels like tampering with history. Ah well. In other news, my keyboard’s causing me to make spelling errors again. 😜

My online encounters with Steve Yegge’s writing is like one of those myths of someone going on a long journey. They’re travelling alone, but along they way, a mystical spirt guide appears to give the traveller some advice. These apparitions are unexpected, and the traveller can go long spells without seeing them. But occasionally, when they arrive at a new and unfamiliar place, the guide is there, ready to impart some wisdom before disappearing again.

Gotta be honest: the current kettle situation I find myself in, not my cup of tea. 😏

Amusing that find myself in a position where I have to log into one password manager to get the password to log into another password manager to get a password.

Does Google ever regret naming Go “Go”? Such a common word to use as a proper noun. I know the language devs prefer not to use Golang, but there’s no denying that it’s easier to search for.

The category keyword test is a go.

Unless you’re working on 32 bit hardware, or dealing with legacy systems, there’s really no need to be using 32 bit integers in database schemas or binary formats. There’s ample memory/storage/bandwidth for 64 bit integers nowadays. So save yourself the “overflow conversion” warnings. This is where I think Java made a mistake of defaulting to 32 bit integers regardless of the architecture. I mean, I can see why: a language and VM made in the mid-90s targeting set-top boxes: settling on 32 integers made a lot of sense.

There’s also this series of videos by the same creator that goes in depth on how the Super Mario Bros. levels are encoded in ROM. This is even more fascinating, as they had very little memory to work with, and had to make some significant trade-offs, like allowing Mario to go left. 📺

If anyone’s interested in how levels in Super Mario Bros. 2 are encoded in the ROM, I can recommend this video by Retro Game Mechanics. It goes for about 100 minutes so it’s quite in depth. 📺

Just blindly accepting permission dialogs whenever MacOS throws them at me, like some bad arcade game. Was this your intention, Apple?

Overheard this exchange just now at the cafe: Customer: How ya’ feeling? Barista: Feeling cold. Customer: Well at least that’s something. If ya’ don’t feel the cold it means you’re dead. Had a lot more weight to me than I think the customer originally intended.

Mother’s Day in full bloom over here. 💐

Rubberducking: More On Mocking

Mocking in unit tests can be problematic due to the growing complexity of service methods with multiple dependencies, leading to increased maintenance challenges. But the root cause may not be the mocks themselves.

🔗 NY Mag: Rampant AI Cheating Is Ruining Education Alarmingly Fast Two thoughts on this. The first is that I think these kids are doing a disservice to themselves. I’m not someone who’s going to say “don’t use AI ever,” but the only way I can really understanding something is working through it, either by writing it myself or spending lots of time on it. I find this even in my job: it’s hard for me to know of the existence of some feature in a library I haven’t touched myself, much less how to use it correctly.

How and when did “double click” become a phrase meaning to focus on or get into the details of a topic? Just heard it being used on a podcast for the second time in as many weeks.

If Apple think the recent App Store ruling is taking away their right to monetise their IP, then Apple needs to explain what the $US 99.00 developer fee is for. They’re probably shooting their videos for WWDC right now. Maybe have one going through each line item of a theoretical “developer fee invoice” and explain what the fee is, and what IP rights the fee is covering.

When hiring a senior software engineer, it’s probably less useful to know whether they could code up a sorting algorithm versus knowing whether they can work out what time it is in UTC in their head. 😀

Ooh, I lost my temper when I was under the pump and MacOS decided to stop everything and throw up this modal, asking if I permit Terminal to access files from other apps. Of course I do, Apple! I’m not using the terminal to amuse myself. I’m trying to get shit done, and your insistent whining is getting in my way! 😡

Seeing these river tour boats moored like this reminds me of the UK, and all the narrowboats in the canals.

Devlog: Blogging Tools — Ideas For Stills For A Podcast Clips Feature

I recently discovered that Pocketcasts for Android have changed their clip feature. It still exists, but instead of producing a video which you could share on the socials, it produces a link to play the clip from the Pocketcasts web player. Understandable to some degree: it always took a little bit of time to make these videos. But hardly a suitable solution for sharing clips of private podcasts: one could just listen to the entire episode from the site.

Ah, CSV files. They’re a little painful to work with, but they truly are the unsung heroes of ad-hoc scripts written in haste.

Listening to all the recent platform talk on Stratechery has been fascinating, if not a little melancholy. We may never see another mainstream platform be as truly open as Windows, MacOS, or the Web is right now.

What ever happen to Power Nap on MacOS? Is that still a thing? I’ve been asked when I’d like to install updates for about a week now. Yet despite choosing “later tonight” every time, nothing’s been happening. I could choose to install them now, but I thought deferring them to a time when I’m not using my computer was the point of this feature.

Argh! Someone has discovered my secret of where the best place to stand on an A-class tram is (it’s at the back, beside the back door).

It’s easy to get a irrational sense of how scalable a particular database technology can be. Take my experience with PostgreSQL. I use it all the time, but I have it in my head that it shouldn’t be used for “large” amounts of data. I get a little nervous when a table goes beyond 100,000 rows, for example. But just today, I discovered a table that had 47 million rows of time-series data, and PostgreSQL seems to handle this table just fine.

Ah! I think I know why I keep asking for a bagel with lettuce, tomato, and cheese instead of ham, tomato, and cheese. It’s because I always said “lettuce, tomato, and cheese” when ordering sandwiches back when I was working in the CBD. Wow, talk about old habits dying hard.

🔨 GSAP Another JavaScript animation library. Has some interesting features that might be pertinent for a project I’ve been toying with in my mind.

It’s 2025. Why am I still not writing down thoughts I had in the shower that I knew I wanted to remember? 🤦

Devlog: Dialogues

A post describing a playful dialogue styling feature, inspired by rubber-duck debugging, and discusses the process and potential uses for it.

Bluesky needs a bookmarking feature. It took me a while, but I’ve grown to bookmarking posts in Micro.blog and Mastodon that I’d like to revisit in the future. Extra points for having a public API/RSS feed for those bookmarks.

On AI, Process, and Output

Manuel Moreale’s latest post about AI was thought-provoking: One thing I’m finding interesting is that I see people falling into two main camps for the most part. On one side are those who value output and outcome, and how to get there doesn’t seem to matter a lot to them. And on the other are the people who value the process over the result, those who care more about how you get to something and what you learn along the way.

Very happy with how this evening has panned out. 🇦🇺

Free business idea for anyone: I see lots of people around the polling booth with dogs. I don’t believe dogs are allowed inside, so they must be walking them. But they’ll need to vote eventually, and if the queue is small, maybe they’ll think it’s worth voting now. So, here’s the pitch: Stand outside the front along with those handing how-to-vote cards, and offer to look after their dogs while they go in to vote.

At the cafe. Polling station is directly across the road and will open in a few minutes. Already a queue of people waiting to vote. Party banners on the fence, people with how-to-vote cards at the ready. Hardest decision I have before me is if I should join them once I’ve finished breakfast. But the barbie’s not been wheeled out yet and I’ve not organised anything for lunch.

Lot of welcomed news from the open-source realm: Redis is moving back to an OSS license, and NATS has settled their dispute with CNCF. That’s good news for users of these packages. But some doubt remains. The reason for why they turned to commercial licenses still seems largely unanswered to me.

The journey to being good at parkour begins with a single step.

Been enjoying some remixes that Anders Enger Jensen have released recently: Dopamine, and I Believe. Very different styles but great listening if you like electronic music.

Been listening to Elton John for the first time in a while. What’s remarkable is how many of his songs just end after the last chorus. No coda or outro; just in and out, wasting no time. Quite a contrast to what I usually listen to.

Even without considering AI, it’s amusing to consider how complicated modern software systems are that the developers themselves don’t know everything about them. A true beast of their own creation, where they’re left with suggestions on how it’ll behave if some particular thing were to happen.

Made a fool of myself after congratulating someone on a significant life event, to which they politely reminded me that not only did I already congratulate them a couple of weeks ago, but I got certain key details about this event quite wrong. And you know what: the world didn’t end. Other than feeling a little silly, I left the encounter just fine (it helps that they were super nice about this faux pas).

While we’re talking about schema changes and generated code, here’s some more advice: don’t add any generated code into shared libraries. These libraries will change less frequently than the schema the code is generated from, and when you include such libraries in services that also generate code from these schemas, you’ll get namespace conflicts. The generated code should only exist in the service that contains the build targets to generate them.

“Get out more” goal for April failed. ❌ Oh! April just when by too quickly, and much of it was filled with family events that it left me socially tired. Fortunately it’s looking like May will be quieter so will try to get back on this horse.

I seemed to have developed some sort of condition where I hear American podcasters say Instagram, and it sounds like they’re saying “Insta-Graham.”

Near the start of the pandemic, I dropped my cutting board onto the tiled floor and it developed a split along the surface. This evening, five years later, that split finally separated apart. Not a bad run actually. And the board itself is still usable, it’s just a little smaller.

Since moving from Vim to VSCode back when I was learning Go, I lost my muscle memory for all those Vim keyboard commands I was using. Which is a shame, as I still use Vim to write Git commit messages. I probably don’t need to relearn them all again, but a useful subset would be nice.

🔨 XCancel If you want to view a Twitter/X post or user without an account, this tool has proved to be quite useful. I’ve used it a few times and works flawlessly. Via: @amerpie@social.lol on Mastodon

Oh wonderful. Now there’s an online sports betting/gambling site that shares the same first name as me. 🤮 And no, you don’t get a link to it.

🔨 Kanbanish Looks like a nice, polished, online Kanban board. Will file it away when I need something like this in the future. Via: Mike Crittenden (the developer)

Oof! The cocktail of feelings one has when taking public transport: empathy for those stranded due to a major line disruption, mixed with relief that it’s not affecting your line.

A style of video I enjoy watching are vlogs by those that post other videos on YouTube. Because they put all their effort in their main topical videos, they can just be casual in these vlogs, with no pressure to be performative. It’s refreshing to watch.

I wonder if one of the desirable features of a foldable phone is its thickness when it’s folded up. Easier to find in a bag, easier to handle when using it in its closed form. I’m not sure it’s for me, but I can see it being a pro for others.

Gang-gang sighting in the park.

Devlog: Godot Game Update

A brief status update on that Godot game. I think we’re pretty close to a finished 4-1 level. The underground section has been built, and the level has been decorated. I’ve also added a couple of secrets, which needed a few new mechanics — like doorways, which are used to transport the player around the level — plus some refinement to existing ones. I am a little concerned about the amount of waiting involved near the end of the first half, where the player will need to make their way across a large gap by jumping on the slow cycling “layer 2” tile layer.

If paying attention to birds is a sign of getting old, then I’ve been old all my life. 🪶

I’ve been finding great success in drafing up a post in my head about some missing feature, checking to make sure that feature is actually absent, finding out it actually exist, using it, and posting nothing. Call it motivated, not-looking-like-a-fool-on-the-internet approach to feature discovery.

🔗 You Can Be a Great Designer and Be Completely Unknown A great post, and one that I agree with. The best designs of everyday things — light switches, road signs, etc. — are the ones that do their job without calling attention to themselves. And with the “out of sight, out of mind” operations of humans, I suspect it’s rare for people to wonder who were behind such successful designs.

I’m pretty impressed by how full-feature GDScript is as a programming language. For example, I was wondering if GDScript supported lambdas, and sure enough, they do, along with full closures. These are pretty sophisticated language features.

You Probably Do Want To Know What You Had for Lunch That Other Day

There’s no getting around the fact that some posts you make are banal. You obviously thought your lunch was posting about at the time was worthy of sharing: after all, you took the effort to share it. Then a week goes buy and you wonder why you posted that. “Nobody cares about this,” you say to yourself. “This isn’t giving value to anyone.” But I’d argue, as Doc did in Back to the Future, that you’re just not thinking forth-dimensionally enough.

Stripe support is a lot like democracy: it was better in the past, and on the whole it’s the worst one out there, aside from all the other payment gateways.

🔗 Rib :ms_red_panda: (@Rib) Today Melissa Lewis over on BlueSky pointed out that the font used in the infamous “You wouldn’t steal a car” anti-piracy campaign was actually designed by Just van Rossum, whose brother, Guido, created the Python programming language (https://bsky.app/profile/melissa.news/post/3ln7hx5rhcj2v) She also pointed out that the font had been cloned and released illegally for free under the name “XBAND Rough”. Naturally, it would be hilarious if the anti-piracy campaign actually turned out to have used this pirated font, so I went sleuthing and quickly found a PDF from the campaign site with the font embedded (https://web.

I see why OpenAI is interested in buying Chrome if Google’s forced to divest it. I’d imagine it’s the same reason why Google built Chrome in the first place. Perplexity buying TikTok? That I don’t understand. Smells a little like empire building.

For anyone else who needs to know this: the MacOS keyboard shortcut to go to the matching bracket in Goland is Ctrl+M. For those who know Vim, this is equivalent to %.

🔗 Think less, ship more Some good advice for everyone (or at a minimum, for myself). Via: Ashley Willis (indirectly)

🔗 Working Through the Fear of Being Seen That’s why I’ve been tinkering again. Rebuilding old sites. Playing around with code. Trying to find my way back to that spark. Trying to remember what it feels like to create without pressure or performance. Just because it’s fun. But even then, I don’t share most of it. Because the fear is still there. What if it’s not that good? What if someone sees it and thinks I’ve lost my edge?

A nice quality of life improvement I’d like to see in Goland’s merge conflict window is the full commit message of the rebased commit I’m trying to resolve conflicts for. It’d help for knowing which strategy I should use for picking hunks, whether to pull it from main or the feature branch.

YouTube’s watch later list should be reverse-chronological based on the time you added the video, with recent videos showing up near the top. Having to scroll through the entire list to get to recent additions is time consuming. I guess YouTube assumed people would removed videos from that list once they’ve watched it. I know for myself I like to keep them in there, usually because the videos I bookmarked are worth watching again later.

🔗 A lack of frequency increases the pressure to deliver quality I have this story in my head, that the longer I go without writing a note here, the better that note has to be when I do eventually come back and post again. Oh yeah, this feeling is very real. Part of me thinks that this stems partly from the duality that comes from writing on your own site verses writing “throwaway” thoughts on social media.

Podcasters, I’m begging you: if you mention an article in your show, no matter how trivial it may be, put a link to it in the show notes. Take a page from your YouTube making cousins, who fill their video descriptions with links, even to things that seem inconsequential to the topic of the video.

Gallery: Morning In Sherbrooke

A visit to Sherbrooke in the Dandenong Ranges on Easter Monday included a walk along the falls track, a sighting of a Superb Lyrebird, and a brief exploration of Alfred Nicholas Memorial Garden.

🔗 You don’t have to be a “content creator” to have a website Dang, I want us to start putting our personal website URLs in our lanyards when we go to conferences instead of social media handles! What is the difference between a personal website that doesn’t have “content” and a social media account where there aren’t many posts anyway? The only thing in common is being reachable. Yes, this! Ditch all those social media handles which seem to go out in style quicker than dress fashion (anyone still posting their Twitter handle on badges, at least without being embarrassed?

Hanging with Rico. He’s got a habit of overpreening, which is why he looks a little shabby.

On the subject of names of social media sites:

Does anything good come from revenue shares from social media sites, like Facebook or Instagram? I’m not a user of either platform but I get the sense that those programs are more likely to promote plagurism and AI slop. The only one I see having any success is YouTube. Granted there’s plagurism and AI slop there too, but others seem to have an easier time making original content and making a living from revenue shares doing so.

🔗 The CSS shape() function One of those articles to bookmark should CSS clip-paths or shapes need to be important to me in the future. Via: @xaviercodes.bsky.social on Bluesky

Made some more progress on that Godot game. I haven’t gotten any further with the first level of world 2, so I’ve been spending much of my time making mechanics. One of them was the slow moving “level 2” mechanic that I stole wholesale from Super Mario World. That mechanic, despite it being frustrating to speed-runners, was always slightly interesting to me. To have areas of a level become accessible or hazardous just due to a layer of it oscillate up and down, it promised to make for some interesting timing challenges.

Some more #big-spending going on around here with the arrival of my brand new TV… remote control. 🤑 Yeah, I finally got a replacement remote control for my TV. And honestly, doing so was a long time in coming. The old one (right) has been failing over the last few years: with certain buttons, particularly Power and Enter, requiring significantly more force that others before responding. About a month or so ago, the Power button stopped functioning completely, and the only way I could turn the TV on was to use the Netflix button (making that button useful for the first time in years) and quickly switching to AV 2.

Ooh, how interesting: Vivaldi is offering blog hosting. I hear blogging is all the rage now, so I gave it a bit of a test. And it’s nothing Earth shattering: it’s basically Wordpress. But it’s interesting seeing Vivaldi do this.

🔨 SQLite File Format Viewer I haven’t tried this myself — I don’t have an Sqlite DB handy — but it looks to be interesting. Via: Simon Willison

🔗 Introducing Kermit: A typeface for kids “A typeface for kids.” Hmm, I’d probably opt with a better tagline, as I’m suspicious of anything that claims that they’re an X for kids, as it tends to imply that it’s of lesser quality than it would’ve been if it were for adults. That unfair thought aside, it’s a font designed around helping those with undiagnosed dyslexia, and that may not take to reading.

🔗 Don’t fork the ecosystem Python, ES Modules, Deno, JSR all feel like justified forks to me. They attempt to move the status quo forward in significant ways. And yet every fork is justified. They all happen for good reasons. This doesn’t change the fact that the costs of forking are high, very high. It’s extremely hard to change an ecosystem, software or otherwise; and you’re most likely going to kill it in the process if you try.

🔗 AI 2027 Well, that was… interesting. And terrifying. Bookmarking this for 2 years into the future, to see how it’s all going. Via: Manton Reece

Here’s a life hack: if you’re listening to a podcast, but not paying attention, and wishing you were listening to something else, stop listening to the podcast and listen to the other thing. Amazing, I know. Subscribe to my newsletter for more amazing life hacks. 😜

Got a bit bored today. Fortunately Acorn comes with an eye-dropper and Galvji, the closest to SF Pro I had available to me.

It kind of blew my mind that this currency exchange rate “API” is nothing more than just some static files on a CDN, along with a cronjob that updates them daily. I guess it’s technically still an API. If the interface is stable, then there’s no reason why it needs to be backed by a database.

It’s amazing, when you consider the vast computing resources that AWS has, that it still takes tens of minutes to deploy several lambdas at once.

Fixed spelling of canceled My last commit message. With the linter requiring US spelling for all code artefacts, I never had more of an urge to put scare-quotes in a commit message as I do right now.

On time arrival at Albury, NSW.

At “Broady 3,” waiting for the XPT to Albury. 🚂

🔗 But what if I really want a faster horse? Overall, consistency, user control, and actual UX innovation are in decline. Everything is converging on TikTok—which is basically TV with infinite channels. You don’t control anything except the channel switch. This… “trend,” let’s say, is bad. I’m seeing it myself: media consumption apps are turning into glorified magazines, trying to push you to consume media they think you might be interested in (or have an incentive to have as many people as possible consume), rather that what you actually want to consume.

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.

🔗 BBC News: Official Themes by David Lowe Good sounding theme for the BBC News. Not for nothing, I’d like someone to release the themes for the ABC News as an album. I do know someone did a remix of one of them so there’s probably an album out there. Via: @robb@social.lol on Mastodon

🔗 Blogging expectations In my case, it’s true, honestly. I like attention, I want my blog posts to sometimes show up in Hacker News or get shared on big social media sites (despite the aftermath of random people who don’t know me hating on it), I want people to comment on toots linking to my blog posts, I want people to send me an email sharing their thoughts or opinion on it, I want people to contact me on Signal or XMPP and have a random chat, I want to get invited into a podcast despite how terrible my spoken English would be, I want people to know me?

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! 😀

🔗 This is number 10,000 Seth Godin has just celebrated his 10,000th post. What an achievement! Via: Manton Reece

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.

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.

🔗 Power users need love too Completely agree with Matt here, and not just about Apple. App developers too should think of the needs of the more advanced users, despite taking up a smaller proportion of the user base. Very few users stay beginners for ever. Your best ones, the one’s that keep coming back, are likely going to know your app inside out. It’s worth building features for them.

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.

🔗 Anime.js: JavaScript Animation Engine This looks really interesting. Should look more into this.

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.

🔗 CSS loaders and Spinners A page of pure CSS loaders and spinners. Click on each one to get the source. No GIFs required.

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. 😀

🔗 Celebrating 50 years of Microsoft A nice retrospective on Altair BASIC — Microsoft’s first product — from Bill Gates. And quite a flashy page as well (maybe a little too flashy: it wasn’t really possible to select text). No spoilers, but it’s amusing to see them pull the same trick with MITS and Altair BASIC as they did with IBM and DOS. Via: Manton Reece

This week’s earworm: Chronology, by Jean-Michel Jarre. 🎵

It’s telling that the word “stupider” is growing in our lexicon. I’m all for language evolving, but seeing this is just making online reading “painfullier” (10 points to anyone that gets this obscure ‘90s reference).

My trumpet playing skills are what got me into the strings section. 😄

Free B-movie idea: you have a large multi-national company, like one of the large tech coorporations. One day, the CEO is away for an extended period of time. They might be on leave or something, but it’ll need to be for a few weeks or more. During that time, a new hire that looks exactly like the CEO begins working there. They start doing their medial tasks until one time during lunch, one of the executives mistakes them as the CEO, and starts asking for directions about company strategy, etc.

🔗 512 Pixels: A Fresh Coat of Paint Stephen Hackett’s new site looks quite nice. Although I didn’t mind the orange, he’s right about the blue. I do wonder about using “Source Sans 3” for the body text; not sure it’s quite my cup of tea. But the rest looks quite nice. Via: Mastodon

The Switch 2 looks pretty exciting. If I were ever to spend money on a game console, I’d probably go for this.

Tina Arena is a really underrated artist. Her music is really good.

Started working on world 2, and one of the main mechanics of this world: quicksand. It won’t kill the player directly, but it will make it difficult for them to manoeuvre, and getting too low could cause death. Might be one of the more annoying mechanics in the game, but that’s kind of the point.

The results of my first play-test are in. And overall, they were pretty positive: movement was good, hit-boxes were fair, and it was described as “quite fun,” which was better than I was hoping for. One thing I’ll need to look out for is telegraphing secrets. The number of secrets is indicated at the end of the level, and based on the play-tester’s feedback, they seemed to have spent a lot of time running against walls trying to find them.

Ugh, dealing with financial institutions is so annoying. Forms, solicitors, settlements; everything’s more complicated than it first appears.

🔗 How to create an animated tile in Godot 4’s tilemaps Useful tutorial for creating animated tiles. You don’t need to use animated sprites to do this. It can all be done using tilesets.

📺 Reacher: Season 3 (2025)

Apple’s style of public writing is so grating. I’m sorry, but seeing thoughts written in a way to suggest that they’re made by someone who is “just a regular person” comes off as patronising when it’s backed by a three trillion dollar company. I just can’t suspend disbelief in thinking that these are genuine, off-the-cuff comments.

Saw my barista put a few coffee beans in the chocolate shaker when he refilled it this morning. He says that it helps break up the clumps of chocolate powder that form near the bottom. That’s brilliant! I’m going to do this when I get home.

Got some answers about the recent train shutdown. Reason why busses couldn’t run from our station had nothing to do with the overhead lines. It was just logistics; turning the busses around was easier to do at the station they did run from. Okay. Interesting to know that.

🔗 Perfectly Imperfect As described by sod on Micro.blog: It’s just people (not algorithms) sharing what they love. Hanging out there usually puts me in a good mood. An apt description. I also like the ’90s early-web vibe they’re going with. Via: Reply on Micro.blog

🔗 Steph Ango: Flexoki Flexoki is an inky color scheme for prose and code. Flexoki is designed for reading and writing on digital screens. It is inspired by analog inks and warm shades of paper. Always on the lookout for nice colour schemes, and this one fits the bill. Via: Mastodon

🔗 Revenge font They used our building, so now we’re using their typeface. This looks good: a font based on tags used by vandals. I have no need for this now, but who knows what the future may bring? Via: Mastodon

🔗 Web Origami Origami is a new programming language that complements HTML and CSS for making small- to medium-scale websites. This certainly looks intriguing. Via: Mastodon

🔗 Ente - Private cloud storage for your photos, videos and more Might be a suitable system for my photos should I want to get off Google Photos. Via: Mastodon

🔗 YouTube: Replace batteries numpad Sculpt Ergonomic Desktop It’s surprisingly complicated to open up the battery compartment of the Sculpt number pad. This video proved to be very useful. Via: Microsoft’s Support Documentation

TIL: CR2420 button batteries are not the same as CR2032, no matter what your eyes say to you.

🔗 Incomplete JSON Pretty Printer This looks pretty useful. Requiring JSON to be syntax correct prior to formatting it is a huge pain. Via: Simon Willison

I’ve started keeping links to interesting posts and software packages on a separate link blog. These links would usually go into my Linkding instance, but I may repurpose that for things I’d like to revisit later, whereas this site will be more of an archive of things I’ve seen.

This site, now served from Europe. 🇪🇺

Okay, I too tried out ChatGPT’s new image generator, mainly it’s graphics design capability. Got it to generate a logo for our bocce club. I’m impressed by the results: it’s pretty much what I imagining.

A bit more on the Godot game this morning, this time working on background tiles artwork. Made some grey masonry tiles for the end castle sequences. Also tried some background rocks for underground areas. I’m pretty rubbish at anything organic, but they didn’t turn out too bad. Right side has the background tiles surrounded with their complementary foreground tiles on the left.

It pains me that Forgejo’s CI “pipeline running” animation spins anti-clockwise, as if you’re going backwards in time. A metaphor, perhaps? Services get undeployed, binaries go back to the source code, projects return to their seeds of ideas. 🤔💭 Oh, build’s done. Never-mind. 😀

I don’t think I’ve ever regretted spending money on a solo or small team’s online publication. Sure I’ve cancelled subscriptions when I lost interest, but it’s not like I’ve said to myself that I wish I’ve never signed up in the first place.

I always felt a little sorry for the front-end developers on their team: always under the pump when UI changes come through, and well… (whisper) the tooling. So it was a suprise to hear one frontend dev who’s starting doing backend work that he always felt sorry for us backend devs: having 10 different services that we need to change and worry about. The grass is always greener… eh. Well, actually it’s more like the reverse: as in our grass is greener and we fell sorry for our neighbour who just can’t get a lawn established.

One thing I’m noticing on Bluesky: very few hashtags in posts, including those in the Discover feed. I expected a hashtag-per-post ratio closer to that of classic Twitter, but it seems closer to that of Mastodon. It’s nice.

Now that trains are running again, it got me wondering whether my temporary commute, where I drove to a nearby station, is worth keeping. I don’t think it is. It got me into work earlier, which is nice, but with all the road traffic, getting home was slower and more of a hassle.

Added a few final things to my Godot game, such as a really boring title and end-title screen, before preparing a release for play testers (or play tester, I’ve got exactly one lined up). I think we’re ready.

Seeing sponsored features in Vivaldi is… well, it is what it is: they need to make their money somehow. And atleast they’re easy to remove. But I’m left wondering if Netscape’s attempted approach of charging people for a browser was the better way to go in the long run.

Do you POSSE? I POSSE. You’re seeing me POSSE right now. POSSE!!1!

Two awesome vessels: a water bottle I got from AWS reInvent, and a keepcup I bought at Coles. What makes them awesome is that they’re double-layered, so my coffee stays hot and my water stays cool.

Still wishing for MR review software that allows one to make private notes. Some of the reviews I’m looking at today are quite large, and it would be good for me to annotate things I’ve seen. I could use notes or something, but UI for marking up the code is already there.

I’m finding, as I go through my Godot journey, that a good indication that a particular approach to a problem is the one preferred by the designers, is the amount of “infrastructure” that goes into making that approach easy to execute. Case in point, I ran into an issue in my Godot game yesterday, where a nested scene, one included in another nested scene, was unable to get a unique node near the root of the tree.

Frustrating to be facing a task at work where my answers to when it will be done look like: I don’t know. I don’t know. I don’t know. I don’t know. I don’t know. Ok, it’s done.

“Vibe coding” I can take or leave, but this poster’s point on iOS distribution is spot on: I recently built a small iOS app for myself. I can install it on my phone directly from Xcode but it expires after seven days because I’m using a free Apple Developer account. I’m not trying to avoid paying Apple, but there’s enough friction involved in switching to a paid account that I simply haven’t been bothered.

Here’s a useful Obsidian plugin. It allows you to use emoji short-codes in your notes, just like Slack and I think some flavours of Markdown. Good for todo lists where emojis could be used to highlight questions or priority items.

🔗 Adactio: Journal—Design processing There’s no doubt about it, using a generative large language model helped a non-designer to get past the blank page. But it was less useful in subsequent iterations that rely on decision-making: I’ve said it before and I’ll say it again: design is deciding. The best designers are the best deciders. Another writer coming to the conclusion that the effective use of these AI tools rely on taste.

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.

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.

🔗 Owls in Towels Pretty much all you need sometimes. Via: SimpleBits Studio Notes

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. 🎵

From the archives: I’d be curious to know why Microsoft renamed Azure Active Directory to “Entra.” That name is… not good. Still wondering this.

🔗 U.S. could lose democracy status, says global watchdog Seems to me like this week was a pivotal time for the US, when Trump started ignoring a court order to stop a deportation. Most pleases I follow seem to suggest that this was the final guardrail. With this falling, I’m now hearing people (i.e. podcasters) say that US is no longer a democracy. So that’s all it takes?

🔗 Enshittification as a matter of taste It’s starting to look like taste is increasingly going to be important in this brave new world of slop and Enshittification. Via: Manton Reece

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.

🔗 Make stuff, on your own, first First. I don’t believe you create anything truly good with AI without first deeply your practicing craft in its absence. You have to hone your skills by making things without automation in order to perceive and understand what is truly good in your art. Otherwise the tools of automation will own you. This point might be about ability, but I think it also applies to developing taste.

🔗 Writing became secondary The good news is that great writing is already all over the web. It’s just overwhelmed by all this platform-siloed, revenue-focused, engagement bullshit. It’s hidden among the sea of SEO-laden posts that flood the web. It’s bottled up on Medium or Substack, and other platforms that promise the exposure of social media. It’s such a crime seeing great writing on platforms such as Medium or Substack. Yes, I know, I know: you’ve gotta make a living.

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:

🔗 Choosing Languages There was a couple of things that happened here. The first is just simply, in 2013, I did not understand that the things I said had meaning. […] I saw myself at the time as just Steve, some random guy. If I say something on the internet, it’s like I’m talking to a friend in real life, my words are just random words and I’m human and whatever.

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.

Spent more time on my Godot platformer yesterday, mainly rebuilding the first level from scratch. The previous version was rush and was just not fun (it didn’t look good either, but I didn’t dress it up yet). This new one is much nicer, and allowed me to use a few new mechanics I’ve built. I still need to build out the level ending sequence. I’ve got less than the basics at the moment: a drawbridge descends and that’s pretty much it.

🔗 “Wait, not like that”: Free and open access in the age of generative AI A well written essay from Molly White about how the dangers of locking down sites from AI bots could affect the free and open nature of online resources. She provides some alternatives near the end. I remain skeptical about how effective these could be. For one, legal enforcement is only effective in the jurisdictions they’re enforced in, and there are a lot of those in this world.

Got caught in heavy rain while on my walk this morning. About effin’ time! 🌧️

Here’s a terrible idea for any social networks with a boost feature: for any post with an external link, intercept any requests going to the site, and inject some tracking into the destination page that will monitor how long the user is on the site plus the position of the scroll bar. What you’re interested in knowing is that they’re reading the article, as best as you can determine that through heuristics such as average reading time, and whether they’re moving the scroll bar.

Our bocce group needs to get out more. Seems like the only time we see any rain is when we organise a bocce session.

At the cafe for lunch. Someone came by and asked if they could put up flyers for their shop. Owner said “yes.” Should try that someday. Not putting up flyers, but just asking people for something I may want. At worst I get a “no,” which is not nearly as bad as brooding at myself for staying quiet.

Oof, Gruber’s piece on the Siri AI fiasco is quite damning. Understandably so. One thing I’ve heard from Apple pundits all these years is that Apple does not show vaporware. That they have done so probably should shake these pundits to the core.

Needed some passwords generated, and I set about doing something involving Go until I remembered that random.org exists. You’d think that by being a regular listener of the Incomparable Game Show, it’d would come to me immediately. 😏

Oof, quite tired at the moment. Woke up today with the correllas, which this morning was at 2:30 am.

🔗 How to Work Better Sage advice from Kev Quirk. I feel like I’m struggling a little at work recently, like things are slipping. Like Kev I can’t multitask, and I know I’ve got to get better at doing a single thing at a time. But unlike Kev, I need to care more about making an effort.

Not sure I’ll ever get used to web forms that don’t have an explicit submit button.

Request to work from home tomorrow has been denied. That means I’ll have to deal with, what someone at work so elegantly put it, “rich people in go-karts driving round in circles.” 👎

I’d be curious to know why running Golang linter slows my system to a crawl.

🔗 OpenEmu - Multiple Video Game System I asked in the Hemispheric Views Discord on recommendations of a good emulator of the GameBoy for MacOS. Some members recommended this, which I’ve yet to try out. But it looks interesting.

John Gruber, on the casing of “Internet”: The Internet is a lot like the Earth. It’s everywhere. It is our universe, in a sense, from the human-scale perspective. But it’s a unique and distinct thing, thus deserving to be treated as a proper noun. It’s almost disrespectful to lowercase it, and the Internet is one of the great achievements in the history of mankind. It’s also grammatically wrong. As my Networks lecturer would say, “the Internet” — the thing hosting the Web that we use everyday — is distinct from “an internet” — a collection of interconnected networks.

My reputation for a bottle opener.

A good documentation site generator not come produce documentation, but it certainly helps, especially when tool comes with a nice way to order content or a set of default themes that are easy on the eye. This site is using Hugo which is pretty decent. Yet I’d be the first to admit that it’s not the easiest thing out there. There’s a fair bit to learn about how the content is organise or how to use Go templates to build a layout in order to build something that looks the way you want it.

Was looking at how I could add hazards to my Godot project, such as spikes. My first idea was to find a way to detect collisions with tiles in a TileMap in Godot. But there was no real obvious way to do so, suggesting to me that this was not the way I should be going about this. Many suggested simply using an Area2D node to detect when a play touches a hazard.

Tried opening my Godot project this morning and was greeted with the following error: scene/resources/resource_format_text.cpp:284 - res://scenes/falling_platform.tscn:14 - Parse Error: Failed loading resource: res://scenes/falling_platform.tscn. Make sure resources have been imported by opening the project in the editor at least once. Failed to instantiate scene state of "res://scenes/falling_platform.tscn", node count is 0. Make sure the PackedScene resource is valid. Failed to load scene dependency: "res://scenes/falling_platform.tscn". Make sure the required scene is valid.

🔗 Ethical Ads I’m not likely going to put ads on anything, but if I was, this might be worth considering. Via: Bluesky

Jim Nielsen @jimniels@mastodon.social Can plane sleep even be classified as sleep? Surely it does not meet the international standard for the definition of sleep 3:41 AM • March 8, 2025 (UTC) I wasn’t a believer until it happened to me once. It was a 10 hour flight traveling from Tokyo to Melbourne (so roughly in the same time zone). Granted I was in premium economy but I managed to sleep uninterrupted from dinner until breakfast, around 7-8 hours.

Plenty of people taking advantage of the warm weather and low water level at Pound Bend, Warrandyte today.

“Get out more” goal for March achieved. ✅ Joined a bushwalking club and went for a hike in Warandyte.

Rendezvousing with a group that published a Melway location with the address. Really miss when people did that. Miss just flipping through the Melways for no reason other than it’s cool looking at maps. Maybe I should buy a Melways.

The one good thing I get from hearing podcasters talk about Formula One is that they provide a good reminder for when the local race is on, so I can remember which dates I should stay the heck away from the city. 👎

Adventures In Godot: Respawning A Falling Platform

My taste of going through a Godot tutorial last week has got me wanting more, so I’ve set about building a game with it. Thanks to my limited art skills, I’m using the same asset pack that was used in the video, although I am planning to add a bit of my own here and there. But it’s the new mechanics I enjoy working on, such as adding falling platforms. If you’ve played any platformer, you know what these look like: platforms that are suspended in air, until the player lands on them, at which point gravity takes a hold and they start falling, usually into a pit killing the player in the process:

Ooh, you know you have a situation on your hands when you see three glass trucks in convoy.

I can’t see voice assistants ever getting better than very basic human understanding. I heard someone mention that they asked their cylinder to “brighten the lights in the room and make it warmer.” The assistant bumped up the heater, but if it was me, I would’ve adjusted the light temperature.

The next “touch grass” event, plus my “get out more” goal for March, has been booked for this upcoming long weekend.

🔗 cathoderay.tube Yes.

It’s amusing to see a farewell card get passed around the office like a hot potato. A hot potato that everyone has to touch at least one, without letting the recipient know that such a potato even exists.

When do you reach the diminishing returns of adding defensive code to handle outcomes that are “unlikely?”. It’s probably worth it if the chances are 1:10,000, but what about when they’re 1:10,000,000? Is it worth adding this extra complexity if you believe it could happen, despite not being sure?

Idea for a game show: you’re given some out-of-context messages from a Slack thread, and a vague description of who the participants are and where they work, and you have to guess what they’re trying to communicate to each other.

Lot of web developers I’m seeing online are going all in on cross-document view transitions. Chalk me up as someone who doesn’t like fun (a fair assessment) but I really can’t see myself using this anytime soon. It just doesn’t feel… genuine. I can’t really describe it any better than this. It’s as if the site is trying to be something that it’s not (a native app, verses a website).

Go really should consider adding enum types. There are many useful things that can come from doing so, like the ability to specify a zero value, to detecting when a switch or map is non-exhaustive. I encountered both cases in the last 10 minutes where such features would’ve been helpful.

Kev Quirk: I received an email yesterday in response to my “iOS Mail Is Shite” post and the email started with “Kev - I cannot agree with you more.” But Apple “Intelligence” summarised the email as “Disagrees with Kev; uses Mutt for blog email.” Maybe Apple Intelligence is smart enough to know when it’s being criticised. 😄 Jokes aside, I find it pretty useless too. The priority message for the last couple of weeks is a notice for someone to move their car.

So, uh, Stripe; which is it? You can’t change the currency of a customer, or you can? Because I was under the impression that you were unable to change the currency once it was set. So you could imagine my surprise when I was able change the currency of a customer this morning.

It’s crazy to think how little you have to pay to put up a website nowadays. For what you get for your money when using a service like Netlify, such as a CDN and edge computing, it feels like an absolute steal.

🔗 Choose Boring Technology The problem with “best tool for the job” thinking is that it takes a myopic view of the words “best” and “job.” Your job is keeping the company in business, god damn it. And the “best” tool is the one that occupies the “least worst” position for as many of your problems as possible. I’ve grown beyond the phase of wanting to look for the new and shiny for a particular problem at work.

It lives!

Working through the Godot tutorial I posted yesterday, while at the same time trying to ignore my ego saying “Pff! I can do this already.” If that was the case, then the work would speak for itself. And on that topic, let me show you exhibit A. So yeah, maybe let’s go through the tutorial first.

Love a good opening theme, and the one used for Challenger: The Final Flight is a great one. Not sure I can listen to an extended version that goes for 8:43, but I can listen to the first 50 seconds of this all day.

🔗 The hardest working font in Manhattan You’ll have to click through to know which font this is: no spoilers. But I’ve seen this font on old keyboards myself, and it’s quite unique. Via: Birming

Watching a YouTube tutorial about Godot. First lesson: it’s pronounced g’doh, with a short G, much like g’day. I was always pronouncing it go-dot.

The problem with doing an MVP is that once you’re done, all you have is an MVP. Sometimes an MVP is necessary to get something out the door quickly, but it’ll slow you down later when you need something that’s beyond the capability of the MVP. Can’t use what you didn’t build.

This week’s earworm: 140 OST. 🎵

Not quite sure how I got the “likes pictures of mushrooms” attribute on Bluesky’s Discover algorithm.

I vaguely remember a movie I watched when I was very young, like 4 or something. It would’ve been released in the late 80’s and was like ET, but terrifying, at least to my young eyes (not that I didn’t get freaked out by ET too. This is why I don’t watch scary movies). I only remembered scenes of it and for a while I wondered if I actually imagined it.

Well, got my evening sorted. 😫

Gave Dave Winer’s Wordland a try today. I like it. It’s quite a nice writing environment to work in. Wrote a couple of long form posts in it, along with a few that were a paragraph or two, and the editor felt great to use. Does a good job growing with the length of the piece too.

I’m one of those few that hate the taste of coriander. I can’t confirm whether it tastes like soap — I’ve never eaten soap — but I do find it unpleasant. Actually had a bit of a reputation at a bánh mì shop on being the guy that didn’t want coriander on his sandwich.

Good on Obsidian for changing their license to allow free for commercial use. It can’t be easy walking away from money, but I couldn’t really see a way of getting work to pay for my use of Obsidian. And I use the heck out of Obsidian at work. It would’ve been hard moving to something else.

Prototyped a game I had in mind, sort of a 2D Sokoban-like thing, where you control a robot with a retractable pushing arm that is to push gems to a “receiver” tile. Not entirely sure if it’s fun enough to actually build. Used PixiJS to build it. Not a bad framework.

Following on from my adventures in dealing with spam messages, it’s quite strange that Mail.app doesn’t have an option to always show the from address domain in the mailbox list. It took opening the message, plus an additional click to confirm whether a “spam summary” email I received this morning was a phishing attempt (it was). I rather not open those mail messages at all1, if I can help it, and seeing the domain — which should be enough, given that it’s usually some junk domain like “funnybone dot com” — could allow me to dispose of these messages using the context menu.

I’ve started seeing phishing emails that try to simulate those email spam summaries you occasionally get from centralised spam-traps. I don’t usually get these sorts of messages so my suspicions where heightened when I saw these emails this morning, and after checking the domain — which takes too many clicks to do, Apple! — my suspicions were confirmed. And it got me thinking: why didn’t Apple’s Mail summary indicated that these messages were spam?

Attending the DDD Melbourne 2025 Conference

Yesterday, I attended the DDD Melbourne 2025 conference. This was in service of my yearly goal to get out more, to be around people more often than I have been. So the whole reason I attended was to meet new people. That didn’t happen: I said hi to a few people I once worked with, and spoke to a few sponsors, but that was it. So although I marked it off my goal list, it wasn’t a huge success.

Saw a couple of spotters at the gym this morning: two brush tail possums. Mother and baby I’m guessing.

“Get out more” goal for February achieved. ✅ Attended the DDD Melbourne 2025 conference. Technically I’m still attending it, as it’s not over yet, but it’s close enough to finished that I’m calling it now.

Swanson St, Melbourne. Been a while since I’ve walked this.

I think I tend to overthink things too much, if last night is any indication. It’s probably good, to some degree, to consider all outcomes of doing something, for no other reason than to satisfy a need for certainty when events go a certain way. But it might be that one could spend too long doing so, and miss any opportunities that come from it. It’s always harder to see things go right than it is to see things go wrong, or at least that’s how I seem to be wired.

Free motivational slogan for anyone wanting to start a line of sports-related T-shirts: This SHIRT, that HURT, could’ve hit the DIRT. Emphasis intentional.

🔗 Sony WH-1000XM5 Headphones Someone at work showed them to me and let me try out their noise cancelling. It’s good. The best I’ve head so far. All the background noise completely vanished. Will need to check these out.

🔗 Letters from an American: February 1, 2025 Hmm, not entirely sure what’s going on over there in the US, but it doesn’t sound good.

🔗 The Gentrification of Video Game History An interesting discussion on the slow erosion of local history around gaming in the face of a US-centric telling of history.

I enjoyed Cory Doctorow five year anniversary post on Pluralistic. Even better was falling down the rabbit hole of reading his other anniversary posts, then branching out to his other posts such as his one on blogging itself.

Debugging Edge Lambdas is such a pain due to how long it takes to deploy them to test something. Not helping is that different layers have standardised on names that use URL while others use Url. I wonder if it’s better to just pick one case for the names I’m using, even if stands out from the other names following the particular “standard”.

Oh crap, I’ve gotta watch myself! I just configured a parameter in prod thinking that I was doing it in dev. Should’ve seen the warning signs when I got a permission error and had to boost to the next level. The change should be benign, but I need to be a little more careful.

I’ve been kind of anxious about tomorrow these past few days. I’m going to a single day developer conference alone, with no-one else I know or work with. This means I’ll be interacting with people I don’t know. That is the point of this — this activity is Feb’s “get out more” goal — but I’ve been partly wondering whether I’ve bitten off more than I can chew here. But reflecting on it just now, it may not be as bad as I think.

Another Twitter embed bites the dust: That’s all of them now. I can’t see any more uses of that short-code here. Guess I was right not to do that too often.

Have technically secured user no. 2 of UCL today, after sharing one of the tools that’s using the language with them at work. It’s just a shame that the docs are so far behind (read: not existent). All I really have are these blog posts about building it. Good thing he’s a reader 😛. (Hi, KK).

Things I’ve said out loud today: What am I going to do about Norway? I’ve got a plan but I’ve yet to rollout a fix yet. 😛🇳🇴

“Well we can’t run the trams on time, but with our new PTV app, we can tell you just how late they are.” “What an age we live in.” 😛

I know for myself that if I were to choose one blogging CRM over another because “that’s how I get the traffic,” I’d probably stop blogging. It’d be clear to me that my priorities are warped, that I’m writing purely to chase the views. I can’t see that road leading to anything other than burnout.

I’m noticing how unproductive I am when I’m babysitting long running processes. Every time I try to start some focus work, I immediately switch back to monitoring the output with the expectation of dealing with errors or refreshing timed-out auth tokens.

Bad keyboard! Naughty keyboard! Causing all these spelling errors in your user’s last two posts. 😜

Seeing all these photos from those in the US with massive dumps of snow they need to shovel and clear makes me glad I live in a climate that doesn’t get snow.

I’ve never understood a task asking me to “find out what needs to be done.” These are not big tasks that need a design or prototype. They’re a regular size coding task, with the output being another task of the same size to actually do the work. Why not simply do the work in the first task?

Have pulled down the bit of fence extension that was falling down. I don’t think it was recoverable, or at least not with the wear it had endured plus my limited carpentry skills. But that’s fine. At least it’s neater now.

Dusted off Podcast Favourites (last commit 25 April 2022) and fixed a longstanding issue of thumbnails being lost when they’re changed in the feed. Editing the feed properties will now force a refresh of the thumbnail URLs. Didn’t need to change anything else, which was a nice change.

Ooh, what a milestone.

So sorry to hear about the loss of @merlinmann’s pet lizard, which I just learnt is a central bearded dragon (they’re good looking lizards). I didn’t include it in the clip but he had some really nice things to say about it.

Kind of wish I can be more like Dave Winer and just write about what I’m working on without thinking too much about it. I spent the week moving posts about personal projects and questions are flowing through my head like, “should I be moving these posts? Would it better if they stayed here? Should I even be writing these posts at all?” I don’t know how this topic became such a source of doubt and indecision.

Apple AI in Mail and What Could Be

Apple AI features in Mail currently do not help me. But they can, if Apple invited us to be more involved in what constitute an important email.

Lots of good things in Go 1.24, including weak pointers (finally) and a utility function for generating cryptographically secure random strings (good for IDs). This new os.Root, which acts a bit like chroot, looks interesting too.

🔗 Prefer Numbered Lists to Bullets Good arguments for using numbered listed instead of bullets in chat communication. I don’t disagree with any of them. I will say that tend to preferred bulleted lists simply because the chat apps I use tend to make using numbered lists more difficult than it should be. Slack, for example, only starts a “real” numbered list when it detects you type 1.. And once you’ve started, there’s no way to skip ordinals within the same numbered list.

The Rules dialog in MacOS’s Mail needs some serious love. Aside from the fact that it’s teeny tiny, it’s also buggy. I couldn’t get the “set background colour” action to work, and selecting the condition to choose mail based on content doesn’t allow me to enter a value. Not good.

Well, damn! I ate something with peanuts today. That’s going to knock me about for the next few hours.

Here’s today’s face egging: my boss asked me to check if a list of countries we have included Åland Islands. Assuming that this list was in sorted order, I took a quick look at the countries beginning with A — conveniently at the top of the list — and came to the conclusion that the country wasn’t listed. Only after I told my boss that did I actually try to search for Åland Islands to double check, and sure enough: there it was, at the bottom of the list, right below Zimbabwe.

Request for any open-source projects that want to put banner ads on their site: please consider hard-coding the height of your banner to prevent the ad from reflowing the page. Otherwise, it may have an impact on the experience of those reading your docs.

Oh, that’s nice. Looks like Obsidian allows you to set the starting ordinal for numbered lists. This was something I wish vanilla Markdown had for a while, so it’s good to see at least one Markdown editor embracing this.

Was a little concerned that I was running out of time to meet my “get out more” goal for February, until someone I used to work with pointed me towards a day-long dev conference. Bought a ticket then and there. So should be able to check off the goal for this month (if the fates allow).

Ok, I admit that I probably should’ve looked through the settings menu before writing a post, because it looks like my new cooler does has a shutoff after N hours feature. It also allows you to set the fan speed. Why it’s on page 2 of the settings menu is beyond me, but it’s there and it works.

🔗 We are destroying software We are destroying software telling new programmers: “Don’t reinvent the wheel!”. But, reinventing the wheel is how you learn how things work, and is the first step to make new, different wheels. Wheels are not the same. If I need a wheel for a wheelbarrow, I don’t want to use a wheel for a tractor just because it exists. The same is true for software. If all I want to do is minify some JS without all the transpiling crap that comes from using React or Typescript, why not eschew Webpack for my own handwritten build scripts?

I thought the need to use these isolators — which, when opened, will shut off power in the overhead line flowing from north to south — was the reason why the train replacement busses are where they are. Turns out I was wrong, as these isolators are still closed. Must be some other reason.

So many people on bikes today. Have not seen this many cyclists in the park for a while. Guess the cool weather has brought people outside. 🚲

Moving all my project posts onto a separate blog… again. I tried writing them here, but I still feel like they belong elsewhere, where I have a bit more control over the layout and the design. Spent the morning configuring the theme, which was going to be orange but I had to change it to red as the orange didn’t provide a nice contrast for reading (you had to darken it almost to brown).

UCL: Some Updates

Made a few minor changes to UCL. Well, actually, I made one large change. I’ve renamed the foreach builtin to for. I was originally planning to have a for loop that worked much like other languages: you have a variable, a start value, and an end value, and you’d just iterate over the loop until you reach the end. I don’t know how this would’ve looked, but I imagined something like this:

Enjoyed this week’s P&B with Lou Plummer. I enjoy reading linkage.lol and I know people I work with who also follow’s Lou’s work. His blog recommendations look interesting too.

Released a new plugin for Micro.blog: Sidebar for the Bayou theme (yes, another sidebar plugin). Thanks again to @Mtt for making changes to the theme to support adding the sidebar. Can be installed from the plugin directory (please ensure you have Bayou version 1.1.3 or later).

What a cruel irony it is that the instinctive response to an itchy eye is to rub it, which doesn’t provide relief and only prolongs the irritation. The only way out is to ignore instinct and practice self control. There’s a metaphor here somewhere I’m sure.

About My New Cooler's Programming Feature

There’s lots to like about my new cooler, but the programming feature is not one of them. My old unit had a very simple timer with two modes: turn cooler on after N hours, or turn cooler off after N hours. Anything else requires manual intervention. The old control panel (turns out I did have a photo, albeit an old one). Set the mode: cool/vent (fan), the power setting, then tap Timer Select to choose between turn on or off after N hours.

Recent earworm: Samplextra, by Lee Rosevere. 🎵

I don’t understand YouTubers who start their videos with a hype bumper. Just get to the frickin’ interview. You got my attention already.

Keep forgetting to give my keep-cup a proper clean when I get home. Now today’s morning coffee taste like yesterday afternoon’s lemon and ginger tea.

I had a Ventolin inhaler expire on me, a first in my life. It was a little smokey yesterday so I used it, and sprayed… something into my lungs, resulting in a coughing fit. I still feel the effects a bit today. Hope I didn’t cause too much damage.

🔗 Animating Rick and Morty One Pixel at a Time Using OpenGL Shading Language, which is apparently supported by browsers, to produce an animation of Rick from Rick and Morty. I’ve yet to go into this post in any great detail, but it certainly looks very interesting. Via: Simon Willison

My unread items in Feedbin are starting to pile up again, largely because I’m “keeping them for later.” Need to decide when later is now. May as well have later be now now. 🧐

May have gotten to the bottom of a problem that was stumping people at work. The cause, yet to be verified, looks to be a change in the integer value of a gRPC enum value. Suspect that it may have been a manual change to generated code (yeah, try to avoid doing that if you can help it).

It’s a shame online integrations assumes that everyone’s using GitHub. I can understand why they build their products that way, and I knew that I’d loose much of those integration niceties when I moved to my own setup. Still, it would be nice to see more integrations work with any Git-based SCM.

Trying out Bayou theme by @Mtt on a test blog. Lots to like about it, especially the idea of having the latest micro-post appear in the form of a status message. Very unique.

New AC installed and doing the best it can on this slightly humid day, although it’s performing better than the old unit. I forgot to take a photo of the old panel, so here’s a photo of the new one (the lower one is for the heater).

Already making daily note archives for 2025.

Was not expecting the 10 mm of rain we had last night. Not sure anyone was, not even the Bureau. Put a dampener on my plans. I thought I was being super smart washing my towels in the evening and hanging them on the line to dry overnight so I could use the line for other washing today. Ah well. 🤷

Idea for UCL: Methods

I’m toying with the idea of adding methods to UCL. This will be similar to the methods that exist in Lua, in that they’re essentially functions that pass in the receiver as the first argument, although methods would only be definable by the native layer for the first version. Much like Lua though, methods would be invokable using the : “pair” operator. strs:to-upper "Hello" –> HELLO The idea is to make some of these methods on the types themselves, allowing their use on literals and the result of pipelines, as well as variables:

My latest YouTube binge has been Drew Gooden, and his videos on YouTube and Instagram influencers and trends: an area of online culture I know nothing about. I’m kinda glad that I stayed well away from that area of the internet. Seems like more drama than I can handle. 📺

Getting a new cooler installed tomorrow. The one I have, which I think is as old as the house, is on it’s last legs. It struggles to cool the house, only managing to keep the inside temperature steady if I turn it on early enough, and leaks profusely. I shutter to think what my next water bill will be. The new unit’s going to be another evaporative cooler. Everyone I talk to tells me I’m crazy, and I should just go with reverse cycle.

No trains today.

Can one have a project with a relational database that is deployed early and often, and not have thousands of SQL migration scripts? Seems like it’s difficult to have both. Maybe there’s some way to “roll up” old migration scripts into one nice SQL schema. I guess running them all on a new database and exporting the schema will do that. 🤔

🧑‍💻 New post on TIL Computer: Local Values In Fiber

Love how the database methods for the project I’m working on are consistently inconsistent. “InsertPost”, “NewSite”, “AddUser” — only some of the names I’ve chosen so far. Could I, maybe, “infuse” a target? Or maybe even “interpose” a page? How about “stuff in” some styles? Where’s my thesaurus? 🙃

Being able to “simply hook-up an interactive debugger” is a capability I wish we still had in this brave new world of micro-services and Kubernetes.

🔗 Mastodon Bookmark RSS Generates an RSS feed of all the toots you bookmark. I’ve been using it these past couple of weeks and it’s been fantastic. Mastodon bookmarks are front and centre now, thanks to them being in my feed reader. Via Robb Knight

UCL: Iterators

Still working on UCL in my spare time, mainly filling out the standard library a little, like adding utility functions for lists and CSV files. Largest change made recently was the adding iterators to the mix of core types. These worked a lot like the streams of old, where you had a potentially unbounded source of values that could only be consumed one at a time. The difference with streams is that there is not magic to this: iterators work like any other type, so they could be stored in variables, passed around methods, etc (streams could only be consumed via pipes).

A service I’m partly responsible for at work has had a number of core issues that have been plaguing us for more than a year now. We’ve been making fixes round the edge, but have left much of the core intact, lest it ties us up in a large refactor. Today I got the green light to start addressing these core issues directly. I feel so happy: I get to put away my scalpel and finally take out my sledgehammer.

It’s finally happened: the local pigeons have discovered bagels and coffee.

Had a go at integrating Keycloak in a personal project. Got to the point where it kinda-sorta worked, but I’m not sure what I’m trying to prove by continuing. That I can integrate an auth service? Well yeah, but it’s a lot of work, and probably not worth it for a project where I’d be the sole user.

New ground stickers telling people not to ride on the path. We’ll see how well these work, since the sign has been such a “success”. Maybe the police emblem will help. 😏

Okay, I think I know why I stopped playing Wordle.

I never imagined that my software development job would someday involve reading legalisation on Indonesian tax law.

Galah’s letting anyone who cares to know that it’s on this pole, it’s their pole, and don’t you forget that.

Trying out DeepSeek’s chat model. Started with a pretty tame session, but it was something I needed from ChatGTP a week ago. DeepSeek seems to do pretty well here: I like how terse the answers are. I’d be curious to try out the API too.

Hitchhiker. One of two today.

Finding that styling a page with min-height: 100vh causes the need to scroll when I open the page in Vivaldi Mobile, as vh does not recognise vertical space taken up by toolbars. What I actually want is 100dvh (i.e. dynamic view-height) which does. Found this slide helpful (source and via).

This week’s distraction: building a Wordle clone. No particular reason for doing this other than I felt like building one, although I did miss the small time waster of the original Wordle, and watching a game show with my parents that had a similar concept just made those feelings stronger. Main difference between this and Wordle classic: board randomly selects between 4-letter, 5-letter, and 6-letter words; no daily limit or social-media sharing when you guessed the word correctly; and the biggest one: UK English spelling.

“Get out more” goal for January achieved. ✅ Just a small one this month though, as I was a little unorganised: just work drinks and coffee with a team I don’t usually work with. Baby steps I suppose.

Discovered new street art this morning. Took a photo of my favourites.

Was talking with a coworker at lunch today about his Twich streaming setup, and how he was using Unreal to produce backgrounds that’ll be composited with his webcam feed. He was clearly excited about it all. Streaming’s not my thing, but it was great talking with someone so enthusiastic about doing something like this.

It’s so strange how Hugo doesn’t configure Goldmark with unsafe enabled by default. Having it off makes sense for the Goldmark library, but the whole point of Hugo is to make a website. And websites, generally, contain HTML. You can turn it on, but it’s always a bit of a hassle.

How do I get an email about a support ticket, saying that they’re waiting for me to respond, without providing me a link or instructions I can follow to actually respond? Not even a link to the support page. Hmm.

The conspiratorial side of me is thinking that running shoes are getting more expensive and lasting half as long. The shoes I had have worn out considerably so I bought a new pair, which arrived today. So I’m officially marking the date.

I did not think I would continue to use an evaporative cooler, but given the price I was quoted to replace the unit I got, I figured it’s worth a try. If it doesn’t work out, then I’m happy to have paid the sunk cost. But if it does, then that saves me significant modifications to my home.

My tolerance for seeing anything regarding US politics is pretty low right now. I’m going to be pretty liberal with my mute, block, and hide boost options for the foreseeable future.

Learnt a very import thing about Stimulus outlets this evening: the outlet name must match the controller name of the outlet target. If this is not the case, the outlet will not bind and you’d be beside yourself struggling to find out why the outlet target cannot be found. From the docs: The outlet identifier in the host controller must be the same as the target controller’s identifier. Took me 30 minutes and stepping through with code with the debugger to find this out.

I appreciate programs like Obsidian that automatically saves my work, yet let me press Cmd+S without saying anything. It’s empathetic of those trained to frequently Cmd+S whenever they’re working on something. It may seem like showing a message saying “you don’t need to save” is useful, and it might be first time for new users. But doing it every time they press Cm+S quickly becomes distracting. It takes a long time for this reflex to be unlearned, especially when there are programs which still require explicit saving.

Just heard the name for John’s new app. Must say I kinda like it. It grows on you. No spoilers (except in the clip), but I do appreciate that it follows a similar vein to the crazy names I came up with. It just does it so much better.

I’m guessing the product owners of YouTube’s Android app assumes that people will be opening links to videos from social apps, where there’s a link preview. Tapping a link now opens the YouTube video in full screen mode. I rarely have a link preview available to me, so this feature is quite jarring.

Started filling out the UCL website, mainly by documenting the core modules. It might be a little unnecessary to have a full website for this, given that the only person who’ll get any use from it right now will be myself. But who knows how useful it could be in the future? If nothing else, it’s a showcase on what I’ve been working on for this project.

Some photos of birds taken during my walk this morning.

I’m pretty happy with my success at using Obsidian for my work notes, and I think a key to this is adding Obsidian as a launch item, so that it’s open at log in. I’m doing likewise for my non-work vault to see if it helps with my personal notes. “Out of sight, out of mind” is a real phenomenon.

I don’t know what’s worse: overhearing others in cafés talk about local politics, or overhearing others in cafés talk about US politics. Surely there are more interesting topics to talk about than politics.

🔗 We Don’t Need More Cynics. We Need More Builders. Liked this piece by Joan Westenberg. I occasionally see this cynicism myself, which is frustrating as they usually come from builders. Surely they know how hard it is to come up with a solution to a problem, only have it torn down. Granted, there might be some ego involved in these feelings. Via Pixel Envy.

The whole “squeaky wheel gets the oil” approach to software companies is that it’s easy for those working on a project to get a warped sense on how it’s received. A majory of users may find what you’re building usable, maybe even good, yet all you hear are the problems and shortfalls.

I wish I was the type of person that can use physical notebooks. That’s said, I’m going to try Obsidian for my personal notes again. I realised I don’t use the fancy features that Notion offers, and I think I prefer making straight markdown notes most of the time.

Signed up to Lottielabs after watching Matt Birchler’s video about it. Had an idea for an animated seven-segment display countdown, which I had a go making as a GIF. It was pretty easy to make, and came out pretty well, although not exactly how I imagined it.

My Micro.blog mug by @jimmitchell has arrived. Looks great. As for where it fits in my ever expanding tech-related mug collection, if we were to order by size, it sits nicely in the middle.

How is a .lol or .fun domain more expensive than a .com domain? Is there some discount for being serious I’m not aware of? 🤨

🔗 100 quotes that helped me write Wish I could remember where I saw this so I can give them a HT. But there are some excellent quote here in this list prepared by Austin Kleon.

Started rewatching Andor last night. Wow, it’s such a great series.

Saw my headphone doppelgänger on the train this morning. In a world where pretty much everyone else is wearing AirPods, it was unexpected to see another wear black JBL E45BT Bluetooth headphones.

I’ve been using UCL a lot recently, which is driving additional development on it. Spent a fair bit of time this evening fixing bugs and adding small features like string interpolation. Fix a number of grammar bugs too, that only popped up when I started writing multi-line scripts with it.

It’s said that “short cuts make long delays”. The beauty of software is that you get to experience those delays over and over again. 😏

Like the Australian Open. Not because of the tennis, but because for two weeks, the tram I take home is rerouted to go directly to Southern Cross station, saving me from making a large road crossing. A very small improvement to my day.

Oof, my Python skills have atrophied quite badly. I’m trying to write a script and I’m forgetting fundamental things like how to interpolate variables within strings, or which standard library packages are used to do what. It’s not like I can’t look this stuff up, but it’s really slowing me down.

On Slash Pages Verses Blog Posts

Interesting discussion on ShopTalk about slash pages and whether blog posts may make more sense for some of them. Chris and Dave makes the point that blog posts have the advantage of syndicating updates, something that static pages lack on most CMSs. It’s a good point, and a tension I feel occasionally. Not so much on this site, but there’ve been several attempts where I tried to make a site for technical knowledge, only to wonder whether a blog or a wiki makes more sense.

One crummy thing about the move to SPAs is that website’s no longer expose query URLs. I wanted to add a Raycast quick link to search for a 2-letter country code, but ISO’s search uses AJAX or something, and there’s no way to run a search directly from a URL. Or at least I didn’t see one.

Oh dear. I’m eying a domain that’s priced at $370.00 /year. Not sure the revenue from my idea — currently estimated to be $0.00 /year — will cover that cost. I think there’s a business word for such discrepancies. 😬

I only just discovered that you can use your finger to annotate screenshots in iPadOS. Go to the options menu and turn on “Draw with Finger”. I actually had no idea it was possible to make annotations without using a pencil. Why this is off by default when there’s no pencil nearby is beyond me.

I kinda feel for UI designers. If you were asked to come up with a menu icon for showing reading mode, font size settings, and accessing the page menu with other miscellanea, which gliph would you use? I’d say that the one chosen for Safari is a little confusing, but I really cannot blame them.

Project Update: DSL Formats For Interactive Fiction

Still bouncing around things to work on at the moment. Most of the little features have been addressed, and I have little need to add anything pressing for the things I’ve been working on recently. As for the large features, well apathy’s taking care of those. But there is one project that is tugging at my attention. And it’s a bit of a strange one, as part of me just wants to kill it.

Trying out the use of XML over a home made domain-specific language and… I must concede, it might be a better fit. As clunky as the DOM is, XML can be made to be good, as long as you use it in moderation.

Finally putting some money into a decent chair for my desk at home. The one I have is showing its age, not to mention loosing its comfort. Who would’ve though a sub $100 desk chair from Officeworks would be lacking in quality? 😛

Interesting odometer reading this evening.

Had another look at how I could export an Obsidian kanban board as an actual kanban board today. I thought I’d through ChatGTP at the problem, and see whether it could produce a Go program that took the markdown representation of a kanban board and reproduce it as a HTML file. Here was the prompt I used: Please write a Go program which will take a Markdown version of an Obsidian kanban note, parse it, and convert it into a HTML page.

Saw hot air balloons out flying this morning. Usually I see them in autumn, yet we’re not even half way through summer. Probably the earliest in the calendar year I’ve seem them operate. That said, it’s pretty good conditions for them this morning, if not a little warm.

I started using the Obsidian Kanban plugin to organise work for my team. Working quite well for my needs. Only problem is, I can’t export it as a Kanban board to an interested team member. It seems like only exporting the raw Markdown is supported. I need to have a think about what I can do here.

Keyboard Maestro is coming into its own as a way for scheduling recurring tasks. I’ve just set one up for a daily report I need to run. It’s little more than a shell script so I probably could’ve used crontab to do it, but is so much easier configuring and testing it in Keyboard Maestro.

Spotlight has stopped indexing my apps again. Not sure what broke between now and the last time I tried to fix it, but I think it’s time to move to something else. So I’m giving Raycast a try. And yeah, so far so good. At least it lets me launch apps.

Ugh, you know you’re getting old when you start seeing remakes of things you were too old for the first time around. 😏

On the train home, and all the phone screens from the seated passengers act like tiny mirrors, reflecting the sun to where I stand. Have to face backwards to keep from getting blinded. Even doing that doesn’t completely stop the flashes of light. 🙈

🧑‍💻 New post on TIL Computer: A Way To Resolve Redelivered Messages Stuck In A NATS Jetstream

🔗 Curve boards For anyone else interested in the trackside signage of Victorian railways. What got me looking was learning about coast boards. Seems to be instructions to the driver on what to set the train’s power output.

Solved Mini 287 on lex.games in 2 minutes, 29 seconds. No reveals. ⬜⬜⬜⬜⬛ ⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜ ⬜⬜⬜⬜⬜ ⬛⬜⬜⬜⬛

Manuel Moreale wrote about Spotify: [T]hey keep adding all these bizarre new things that I’m always left wondering if I’m a very odd user and other people’s use of Spotify is so much different than mine. Like who watches video podcasts on Spotify? Why is a music app getting into videos? I’ve not used any feature built by Spotify that didn’t directly relate to playing music as audio, nor do I know anyone that does.

I recently got a new phone, a Pixel 9 Pro, which meant I needed to bring Alto Player up to date. I probably could’ve gotten away using the version I was using on my Pixel 6. But I didn’t have a binary build, and I needed to upgrade Gradle anyway, so I decided to spend a bit of time bringing it up to date to API version 35, the version used in Android 15.

📺 Wallace & Gromit: Vengeance Most Fowl (2024)

Seems like Substack is not giving up on their Twitter clone. I only just discovered that if you tap on a post’s author, it goes to their Notes page. Not sure what I was expecting (maybe an About page, but would that make sense given their target market?) but I wasn’t expecting this.

Thanks for my new found fondness of buying mainstream music instead of streaming it, I needed a way to get these albums into Alto Catalogue. There exists a feature for fetching and importing tracks from a Zip referenced by a URL. This works great for albums bought in Bandcamp, but less so for any tracks I may have on my local machine. I’ve managed to get Alto Catalogue building again after updating Webpack and a few NPM packages, so in theory, I could add an Upload Zip file action.

Bit surprised to see this appear in my washing machine after washing some new clothes I bought this week.

I’ve started buying music via Qobuz, which offers DRM-free MP3 and FLACS of mainstream albums. So far it’s been really good, although I wish they offered a way to download an album as a Zip file, rather than require you to do so track by track (they have a download manager but, come on: it’s 2025).

One thing I absolutely must do in 2025 is get out more: attend meetups, join a club, anything to get me around other people. I generally hate these sort of things, but I think it would be good for me. If I start with one social gathering a month, I think that’s manageable.

Learnt a valuable lesson today, which I will share with you via another King DerpCats most wondrous meme gen’rat’r.

🔗 How to Write Docs People Read Some interesting ideas on documentation from Allen Pike. I know for myself I tend to turn towards how-tos when I need to reference something. I’d be curious to know how this could work with technical documentation, which is usually dry and out of date.

I somtimes wish I could remember why I subscribed to half the RSS feeds I have subscribed to. Did I hear about these site from a podcast or see it in a blog? (most likely). Why did I subscribe at all? Maybe if Feedbin remembered the top post when the subscription was created it could jog my memory.

2024 Year In Review

It’s a few minutes to 12:00 PM on the 1st January 2025 when I published this. Thanks to time-zones, that means it’s just about to turn 12:00 AM one hour to the west of Greenwich, meaning that it’s still 2024 in much to the west of the prime meridian. So I’m technically still within the window of time where I could say I got a year in review post out for 2024.