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. Other languages, like Lua or Python, map more nicely, but they’re awful to use as a command language. Sure, they may have REPLs, but dealing with the syntax is not fun when you’re just trying to get something done. That’s why I built UCL: to be useable in a REPL, yet rich enough to operate over structured data in a not-crappy way (it may not be glamorous, but it should be doing), while easy to integrate within a Go application.
Of course, if I want to continue to use it, it needs some effort put into it, such as documentation. So which one do I want more?
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. 🎵

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. You may get working code from an LLM, but do you know if it’s any good? Is it maintainable? If the shit were to hit the proverbial fan, would you be able to go on to fix it?
I know from my sessions playing with these things, the answer is usually not great. But being someone who’s been in the coding gig for 17 years, I know good code when I see it (or at least I like to think I do). But it took slogging through so much of it to develop that eye.
Via: Jim Nielsen’s Notes
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. But please, can it be on your own platform? Ghost is right there.
Via: rscottjones
Don't Be Afraid Of Types
Types in coding projects are good. Don’t be afraid to create them when you need to.
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:
extends TileMap
const foreground_layer = 1
func _use_tile_data_runtime_update(layer: int, coords: Vector2i) -> bool:
return layer == foreground_layer
func _tile_data_runtime_update(layer: int, coords: Vector2i, tile_data: TileData) -> void:
tile_data.set_collision_polygons_count(0, 0)
Only limitation seems to be that it will disable collision for the whole layer, but that’s perfectly fine with me.
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. It is what it is.
But at that time in my life, that wasn’t actually the case. I was on the Rails team, I was speaking at conferences, and people were reading my blog and tweets. I was an “influencer,” for better or worse. But I hadn’t really internalized that change in my life yet. And so I didn’t really understand that if I criticized something, it was something thousands of people would see. To me, I’m just Steve.
Via: Simon Willison
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. I need to add the conditions for when the bridge descends (specifically, a minimum number of coins), stopping the player movement for a brief scripted sequence, then transition to the next level. I think I know how I want to do this, it’s just a matter of implementing it. Once level 1 is dressed up and working, I think that’ll be the next thing I do.
I’m enjoying working on this project so far, although part of me is a little afraid that I’m spending time on something that just isn’t good, like there’s some sunk cost with the time I’m spending on this that’s better put to use on something else. Of course, when I give in to these feelings, I usually just spend the time watching TV. So which activity is the real waste of time? Is producing something that may be crap (or worse, just boring) better than not producing anything at all?
Anyway, not should how this became a feeling post. This game might be rubbish, but I still enjoy working on it: Godot is actually quite fun to use. Surely that is reason enough to continue.