Long Form Posts
-
Or not. I mean, I’m not expecting you to notice. You’ve got lives of your own, after all. ↩︎
Devlog: UCL - Comparing UCL To Some Early Ideas
Comparing UCL to an idea for a hypothetical command language for a now-defunct CLI project, which aimed to combine shell-like REPL functionality with scripting capabilities.
On The Little Things of Data Representation
Attention to the finer details of how marshalled data is represented is important. Don’t neglect it.
Devlog: Blogging Tools — All About Images
Some recent changes to Blogging Tools around images and image processing.
Kicking the Tyres of Ollama's Native App
Some thoughts of my experience trying out Ollama’s new native app for the first time, along with my thoughts of some of the available models.
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.
Some First Impressions of iPadOS 26 Public Beta
Thoughts on Liquid Glass and Safari after 30 minutes of use.
Devlog: Godot Project — Level 4-2 And Level 2-3
Progress has been made on level 4-2, and early development on level 2-3, alongside new game elements.
Devlog: Blogging Tools — Category Fixer
Adding an RSS feed parser and in-app notifications to build a feature to triage image posts that don’t have a category.
Devlog: Godot Project — Some Feelings
Progress on the Godot game has been fulfilling yet tinged with doubt about its value and purpose.
Moan-routine: LO's Predicate Signatures
A critique of function signatures the ’lo’ package offers for functions like Map and Filter.
On the UI of Coding Assistants And Agents
An AI assistant verses an AI agent may have less to do with the UI, and more with how it’s used.
I.S. Know: An Online Quiz About ISO and RFC Standards
An online quiz called “I.S. Know” was created for software developers to test their knowledge of ISO and RFC standards in a fun way.
Brief Look At Microsoft's New CLI Text Editor
Kicking the tyres on Edit, Microsoft’s new text editor for the CLI.
On MacOS Permissions Again
Some dissenting thoughts about John Gruber and Ben Thompson discussion about Mac permissions and the iPad on the latest Dithering.
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.
First stop was the Railway Museum, which featured quite a few bits of rolling stock that operated on the Yass tramway. Yes, Yass had a tramway which, given the size of the town, I was not expecting.
This was followed by lunch at a local cafe, then a brief walk by the Yass river, which had an old tram bridge. I managed to walk around 500 metres from the bridge to the footy oval. It would’ve been nice to walk a bit longer, but it was cold, wet, and the ground was quite slippery. Plus I had to get home to spend some time with the birds. But I did make a brief diversion to Yass Junction railway station to see if there were any trains passing through (unfortunately, there were none).
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.
I’ve been trying this for a while, and I’ve deceided I didn’t like it. It felt strange to me. It shouldn’t, really, as it’s similar to how variable assignments work in Go’s templating language, which I consider an inspiration for UCL. On the other hand, TCL and Bash scripts, which are also inspirations, require the variable name to be written without the leading dollar sign in assignments. Heck, UCL itself still had constructs where referencing a name for a variable is done so without a leading dollar sign, such as block inputs. And I had no interest in changing that:
proc foo { |x|
echo $x
}
for [1 2 3] { |v| foo $v }
So I made the decision to remove the need for the dollar sign prefix in the set operator. Now, when setting a variable, only the variable name can be used:
msg = "Hello"
echo $msg
In fact, if one were to use the leading dollar sign, the program will fail with an error.
This does have some tradeoffs. The first is that I still need to use the @
prefix for setting pseudo variables, and this change will violate the likeness of how the two look in assignments:
@ans = 123
bla = 234
The second is that this breaks the likeness of how a sub-index looks when reading it, verses how it looks when it’s being modified:
a = [1 2 3]
a.(1) = 4
$a
--> [1 4 3]
$a.(1)
--> 4
(One could argue that the dollar sign prefix makes sense here as the evaluator is dereferencing the list in order to modify the specific index. That’s a good argument, but it feels a little bit too esoteric to justify the confusion it would add).
This sucks, but I think they’re tradeoffs worth making. UCL is more of a command language than a templating language, so when asked to imagine similar languages, I like to think one will respond with TCL or shell-scripts, rather than Go templates.
And honestly, I think I just prefer it this way. I feel that I’m more likely to set regular variables rather than pseudo-variables and indicies. So why not go with the approach that seems nicer if you’re likely to encounter more often.
Finally, I did try support both prefixed and non-prefixed variables in the set operator, but this just felt like I was shying away from making a decision. So it wasn’t long before I scrapped that.
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.
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.
I don’t want to say too much about it, other than I managed to get the post functionality working. Creating a new link post would involve fetching the page, and pre-populating the link and optional via link with the fetched page title. I’d just finish the post with some quotes or quips, then click Post. That’ll save the post in a local database, write it to a staged Hugo site, run Hugo to generate the static site, and upload it to Netlify. There was nothing special about link posts per se: they were just a specialisation of the regular posting feature — a template if you will — which would work the same way, just without the pre-fills.
The other thing I added was support for adding arbitrary pages. This was a dramatic simplification to what is possible in Hugo, in that only one page bundle was supported. And it was pretty compromised: you had to set the page title to “Index” to modify the home page. But this was enough for that, plus some additional pages at the top level.
One other feature was that you can “preview” the site if you didn’t have a Netlify site setup and you wanted to see the Hugo site within the app itself. I had an idea of adding support for staging posts prior to publishing them to Netlify, so that one could look at them. But this never got built.
Finally there were some options for configuring the site properties. Uploads were never implemented.
Here are some screenshots, which isn’t much other than evidence that I was prioritising the backend over the user experience:
So, why was this killed? Well, apart from the fact that it seemed like remaking prior art — I’m sure there are plenty of Hugo CMSes out there — it seemed strange having two systems that relate to blogging. Recognising this, I decided to add this functionality to Blogging Tools:
This can’t really be described as CMS. It’s more of a place to create posts from a template which can then be published via a Micropub endpoint. But it does the job I need, which is creating link posts with the links pre-filled.