Long Form Posts
-
Or not. I mean, I’m not expecting you to notice. You’ve got lives of yourΒ own, after all. ↩︎
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.
Encapsulation In Software Development Is Underrated
Encapsulation is something object-oriented programming got right.
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.
π¦: Yeah.
L: Yeah. Not sure I agree with him.
π¦: Oh really?
L: Yeah. I mean, thereβs nothing wrong with pianos. Absolutely love them. But everyone seems to be making those, and no-oneβs making saxophones, violins, etc. And we need those instruments too.
π¦: Yeah, I suppose an orchestra with 30 pianos would sound pretty bland.
L: Yeah, we need all the instruments: the oneβs that are approachable, and the ones for those with the technical skills to get the best sound.
And no-one's a beginner for ever. I'm sure there are piano players out there who would like to try something else eventually, like a saxophone.
π¦: Would you say Vivaldi is like a saxophone?
L: I'd probably say Vivaldi is like a synthesiser. The basics are approachable for the beginners, yet it's super customisable for those that want to go beyond the basics.
And just like a synthesiser, it can be easy to get it sounding either really interesting, or really bizarre. You can get in a state where you can't back out and you'll have to start from scratch.
π¦: Oh, I can't imagine that being for everyone.
L: No, indeed. Probably for those piano players that would want to try something else.
Devlog: Dynamo-Browse Now Scanning For UCL Extensions
Significant milestone in integrating UCL with Dynamo-Browse, as UCL extensions are now being loaded on launch.
Devlog: UCL β Assignment
Some thoughts of changing how assignments work in UCL to support subscripts and pseudo-variables.