-
Starting to see the Americans post their “I voted” stickers in my feed. They tried those stickers here once, but with compulsory voting they were a bit of a joke. “I voted!” “Yay, we all did. We had to.” Those stickers haven’t been back since. 😏
-
Much, well pretty much all, of this muxer was written by an agent, but I did want to put something a little personal in it. I asked the agent to display a random quote on the message screen. I insisted on writing the quotes myself and for the last hour and a half, I had a blast finding and adding well known quotes, and quite a few joke quotes too. I’ll need to find a reason to show this page more often.
-
I do wonder if my software engineering experience is having a negative effect to the effectiveness of these agents. After a couple of decades in the field, picking up the lessons and scars of things going right and wrong, it seems natural to get a sense of what;s possible, or how something should be done. It could be that I’m just imagining it, but I feel these boundaries are coming through in the prompts I write. I’d research an approach and tell the agent in detail how to do it. Or I would leave certain behaviours out, or explicitly tell the agent not to do something, with the belief that asking for it would be impossible. Really keeping the reins quite tight.
This is sometimes warranted, when I need to know the code inside out. But for silly little vibe-codeing sessions, is it really helping? Wouldn’t it be better to loosen the reins a little and let the agent find these boundaries?
-
There does seem to be quite a few people working on terminal muxers geared towards agentic coding. The one Matt Bircher is working on looks super compelling. And while the use of agents has become a typical part of my workflow, I am still using the shell just as often in the more traditional way: SSHing into machines, running Git or TUI applications. And let’s not forget the number of time’s I grepping or running JQ over something. So I feel that traditional shells still have a place for me.
-
Started a small vibe-coding project, making a terminal muxer. I started it on Sunday, tried it at work yesterday and spent much of today’s public holiday adding features to it. I wouldn’t call myself a Terminal power user, but I’m always in a terminal, and there are things about it that would be nice to improve, such as maintaining scroll-backs of old sessions I accidentally close. There are some other niceties I’ve added, such as breaking terminal sessions into ad-hoc workspaces (which would be used for separating out tasks) and taking a snapshot of the scroll-back so I can refer to it later.
Built using Go and Wails 2, with Xterm.js as the terminal emulator. Still early days but it looks and feels pretty good.
-
Also updated my Now page. I think it’s fair to say that I’m in a bit of a holding pattern at the moment. No major project, not really reading or watching anything. Did discover some new music, so not completely motionless. But otherwise, in a bit of a “between” phase right now.
-
Had a go at updating my About page. Based on what was written there, I’m not sure it’s been changed since its creation (it had a few dead links too 🫣). So it definitely needed updating, but it remains a difficult page to maintain. Writing about myself doesn’t come naturally.
-
Bugger! Forgot my umbrella again. Apparently one umbrella isn’t enough for me. ☔
-
Got curious about how much a souped-up Mac Studio with 512 GB RAM and 16 TB storage would cost. $29,799.00 Aussie dollars. Oof! Yeah, I might pass on that.
-
Inktober 2026 Wrapped
Finished up Inktober 2026 with 28 drawings. Continue reading →
-
Day 31: Flex. #inktober
-
Day 29: Tusk. #inktober
-
Built a thing: FollowDraw. Enter the domain of a SocialSpec savvy site that has a
following.opmlfile, and it will randomly draw three for you to checkout. Designed for discovering sites that people you follow find interesting, and may be interesting to you. -
Made some changes to Dequoter to support analysis plugins. These are plugins which will produce a result that appears in the status bar, as oppose to transform the selected text. Used it to remake my sum plugin:
d:analyze "Lines: Sum" { |in| count = 0 d:map-lines $in (proc { |l| if (int? $l) { count = add $count $l } }) "Sum: ${count}" }This relies on a new UCL builtin called
int?, which will return true if the given argument can be coerced to an integer. For now, this is only strings or ints: other types, such as nil, can be converted but would produce an error when used with theaddbuiltin. I’m not sure whether this is right, or whether it’d would be better to add nil support toadd. My general direction is towards stricter typing semantics, similar to Python but maybe not as strict, maybe as strict as Lua. And this would leaveint?being slightly more strict than what is possible in the evaluator. Probably not “correct” in a pure sense, but at least it makes it useful.In either case, it does the job:
Follow up
I’ve since been aware of the Lua function math.type:
Returns “integer” if x is an integer, “float” if it is a float, or fail if x is not a number.
This is very close to what I’m envisioning for
int?: a guide that something can be used with arithmetic operations. Maybe that’s how this builtin should be used. -
🔗 Sal’s Blog: A terminal renaissance:
A few short years ago, many programmers who preferred to “just get stuff done” eschewed the terminal in favor of VSCode and JetBrains IDEs.
Maybe for editing files, but throughout my career, the terminal has always been integral to getting my job done. Personal preferences like using the Git CLI aside, I can’t remember a time when I didn’t need it in some capacity. There’s always a Linux box to log into.
That said, it is good seeing the terminal getting some broader love. May not be flashy, but with a bit of creativity, it can be an amazing UI canvas.
-
🔗 Netcraft: April 2026 Web Server Survey
In the April 2026 survey we received responses from 1,433,742,238 sites across 299,194,059 domains and 14,198,148 web-facing computers. This reflects an increase of 5.9 million sites and 1.6 million domains, and a loss of 26,902 web-facing computers.
Huh, so there’s just under 300 million domains serving websites. That seems like a lot, and at the same time, dramatically lower than what I was expecting.
Via: Doc Searls Weblog
-
I’m suspicious of any method that has more annotations than lines of code. Means there is some unseen black magic involved in making the method run as intended: you can’t simply “call” it. Java can be notorious with this. Python too. Go, thankfully, much less so.
-
Finding myself in a position where I would start making a remark about a software problem, only to find myself stopping because I have at my disposable the tools to alleviate it, thus making it rather redundant to complain about the issue in the first place. I guess AI did take something from me. 😏
-
Whimsy in software is a bit like comedy. If you get it right, it works; but it’s a really fine line. Get it wrong and you can really annoy your users.
-
It’s always after I make the logic changes where I discover that I need to upgrade this library or that tool, blowing out the size of what would’ve been a focused PR into something large and sprawling. It would be nice if there was something that would allow me to “shift the commits” around in a branch, rebasing the logic changes atop of the various maintenance work. That way, I could go back up the history, move the commits into separate branches, and raise separate MRs for the maintenance work and the logic changes.
(If I was a savvy online operator, I would’ve ended this post with the line “And after a brief chat with my agent, I came up with this tool which does exactly that.” Unfortunately… 🤷).
-
Day 28: Trophy. #inktober
-
Probably a killer feature of Stripe is the ability to create as many sandboxes as you need. Identity providers need to do something similar: allow devs to create dummy tenants that can be used to simulate common IDPs. This will make testing SSO integration so much easier.
-
Some work days are like exploring a sprawling rabbit warren. You’ve got one tunnel you know you need to follow; but you peek down another one, saying to yourself you’d only explore it for a few minutes, only to find yourself going further down that branch, and further away from where you need to go.
-
Been on a bit of a Savage Gardens kick recently. After hearing a podcast have a go at I Want You (felt like they were pandering to their audience IMHO), I’ve been poking around the tracks of their 90s and 2000s albums. Still quite good.
-
A while ago, I made an online donation for my nonna to St. Anthony Basilica in Padua, Italy. She’s passed on but I’m still receiving emails from them. I don’t mind. Made a donation in her memory for All Souls Day.
-
Day 27: Dumb. #inktober
-
Used to be a fan of companies building home-grown applications. Now that I’m in a position where I’m asked whether we support integrations with these home-grown application, those feelings are somewhat tempered. But it’s fine, so long as there’s nothing that makes it super easy to build these… oh.
-
Maybe I’ve been spoilt by standardised documentation of Go packages — and before that, Javadoc — but the documentation of third-party Python modules is quite a sorry state. And it’s nothing trivial either: I’m talking about docs for constructors that lack the documentation for the class itself. 🤷
-
Released v1.1 of Keep With A View. Jumping should be fairer, and a few of the levels had some bugs that needed fixing.
-
Day 26: Zip. #inktober
-
Looks like I’ll be getting another niece. And while the gender reveal didn’t involve utes doing burnouts with pink smoke and eventually catching fire, it’s still very good news.
-
Day 25: Fracture. #inktober
Based on real events.
-
📘 Devlog
Blogging Tools - Post Classifier
Integrating Jev and TypeSafe into Blogging Tools to automatically set post categories. Continue reading →
-
Signed up to TypeSafe and started playing around with the playground. I wanted to see if it could work as a category classifier for the posts on this blog. Looks to be really promising for this, provided the questions are properly calibrated. Also, super cheap: 13 requests and 5k tokens costs 0.02¢.
-
The LXRP work is progressing. New stanchions for the overhead wires being installed. The existing brown ones, probably in place since the railway was first electrified, are getting rarer by the day.
-
Day 24: Bake. #inktober
-
Resizing And Centering the Canvas Of a Godot Web Export
The project and export settings you will need in order to center the canvas of a Godot web export, and resize it to fit the browser window. Continue reading →
-
All right, we are done! 🙌 Keep With A View, my Godot platformer, is ready for release. Playable within a desktop browser (Chromium recommended). Requires keyboard. Follow the link to check it out.
-
Let’s talk about regret.
I’ve never regretted taking an umbrella.
I’ve regretted not taking an umbrella.
I’ve regretted loosing an umbrella, like I did a couple of weeks ago.
I don’t regret having a spare umbrella.
I don’t regret remembering where I bought those umbrellas, so I can buy them again. -
Day 23: Dapper. #inktober