It’s amazing what a difference going to the gym can make. This afternoon I was feeling so lethargic, like all I wanted to do was crawl into bed. But I decided to crawl to the gym instead. I really didn’t want to, and I usually don’t go Mondays so I had an excuse not to. But I’m so glad I did because afterwards I got my energy back and I was eager to just do stuff.
Partial credit goes to coffee. It also helped with getting over the slump.
Photos of Fitzroy Gardens, while we play our bocce comp. grand final. Perfect weather for it. Also lots of weddings going on.



Dev Log - 2023-03-12
Preamble
When I moved Working Set over to Micro.blog, I’d thought I’d be constantly writing micro-posts about what I’m working on, as a form of working in public. I found that didn’t really work for me, for a few reasons.
I’ve got a strange relationship with this blog. I wanted a place online to write about the projects I’ve been working on, but every time I publish something here, I always get the feeling that I’m “showing off” in some way: ooh, look what I’ve done, aren’t I cleaver? And okay, I’d be lying if there’s not a part of me that wants others to see how I spend my time. If I didn’t want that, I’d be content with these posts existing in a private journal.
And maybe this is a form of self-justification but I’d like to think that there’s a bit of that feeling in every developer that keeps a public blog on what they do. Maybe not exactly “showing off”, but I’m sure they feel proud on what they work on and they want to talk about it. And there’s really nothing wrong with that. In fact, the posts I tend to enjoy the most are those from other devs talking about the projects they’re working on.
So yeah, I admit that having others see what I’m working on would be nice. They say write what you want to read, and this is my attempt at doing just that.
But that only explains why I write about it on a public blog instead of a private journal. Why I should want to write these posts at all is that I’d like to keep a record of the the projects I work on. Nostalgia is one reason: seeing a project progress over time or remembering projects long since abandoned. But another might be a way to track where I’m spending my time. This is theoretical at the moment, but if there ever came a time when I wanted to find this out, I have to have the record written somewhere.
But not as micro-posts. I think a fixed weekly cadence is more appropriate. I tried this a couple of years ago, and although it worked for a while, I fell out of the habit. But after seeing the weekly entries by Jonathan Hays, I’ve been inspired to try it again.
So that’s why I’m trying these weekly update. They’ll be frequent enough to be useful to act like diary entries, but not so frequent that they will bother people who aren’t interested. They’ll be long enough to warrant a title, making it easy for people to skip it. And they’ll be any anything related to a side project I’m working on: either current or abandoned, public or completely private. And I’m giving myself permission not to feel bad about it.
Anyway, we’ll see how we go.
Update 6th July: I’ve gone back to just making posts when I have something to write about.
Dynamo-Browse
Big week for Dynamo-Browse: I finally got v0.2.0 out the door. This is the release with scripting support (yes, it finally shipped). The scripting implementation has been finished for a while. The thing that was blocking it’s release was all the documentation I had to write: both the section in the manual and the API reference.
The build was also a bit of an issue. The release builds are built using GitHub actions. To get them published as Homebrew casks, the actions need to push them to another repository. The secret token used to access this repository expired, and I had to create another one. Not difficult, but the fact that I had to create a whole new secret instead of rotate the existing one was a little annoying. Getting the permissions right, and being forced to choose a different name (“Deploy Homebrew formulas v2”) didn’t help matters either.
But got there in the end. The v0.2.0 release is now available on dynamobrowse.app and GitHub.
I’ll reduce the time I spend on this for a little while. We’ll see how long that lasts. I use this tool for work so often and I’ve got a whole list of features I’d like to see added to it.
CCLM

I got the editor up and running again last week and I spent Saturday designing a level with the working name “The Beach”. I’m a huge fan of the Developing series on the Game Makers Toolkit YouTube channel, and the latest video was about how difficult it was for Mark to design levels for his video game. I found I had the exact same problem for designing levels for mine (although I think the lack of effort I put into it doesn’t help). He pointed to a blog post by an indie game designer that had some useful tips to help with puzzle design. The one about using two elements that interact with it.
The one I worked on was for a custom element that will change boxes with a square indicator to blank tiles when pressing the yellow button. I’ve had this element around for a while but I haven’t actually used it in a level yet. I’d thought I’ll be time to do so, but the level I came up with seems a little simple. Not sure what I’d do about it. I could either rearrange it so that it appears earlier in the level set, or I can make it a little more difficult in some way.
Client Project
One thing that releasing Dynamo-Browse has given me is the opportunity to do a small client project. I’ve talked about this on lmika.org and the latest update is that I think I’ve convinced him to consider a static site, seeing that it would be easier for him to run (don’t need to worry about plugins) and would be easier for me to build (I don’t know how to use Wordpress, especially not their new block editor).
This week was basically coming up with a site layout. I had the opportunity to use Figma for the first time. Works reasonably well, but I’m wondering if Balsamiq Mockups was probably a better choice for a rough outline of what the site is to look like. But that’s all moot: a layout was put together and sent to the client for him to get some feedback.
Anyway, still early days here. I’m looking at possible Hugo templates to build the site in and possible hosting solutions that would work with the client. I’m not aware of options for static hosting other than the AWS, Cloudflare or Azures of the world. Not sure it will work for the client, although it’s totally possible that I’m just not looking in the right places.
So that’s it. Update one done. Although next week I’ll be taking some leave so update two might be slightly shorter (at least there’ll be no preamble) so it may be less about current updates. I guess we’ll find out together.
It took me a while to get use to it but I’ve grown to like The Verge homepage redesign. Having the micro-posts there seems to work well, especially considering that certain microblogging services have effectively cut off API access.
I know UI designers like using either Sketch or Figma — and after signing up to Figma this week, I can see why. But I’m going to give a shout-out to Balsamiq Wireframes (nee Balsamiq Mockups). I’ve found it to be a great tool for demonstrating a proposed layout for a UI without worrying too much about the details. It’s so quick to put together and the hand-drawn motif makes it clear that the drawn UI is just a concept.
I also love how they use text to represent visual content. An example is items in a table-view: instead of using the mouse to draw each row by hand, you configured it by effectively typing out a CSV with some Markdown. Use commas to separate the columns, use [ ]
to indicate a column should have checkboxes. Such a great idea.
Do sites that just load their articles with (video) ads, pop-overs, requests for emails, etc. see any improvements in their metrics after doing this (more clicks, longer visit times, more ad revenue)? Or are the just in a cycle of diminishing returns and think that adding more crap will help?
🔗 After 6 long months, an Android phone finally cloned the iPhone 14
The screen-shots of this “mini capsule” are hillarous. The animated waves that appear when the capsule is expanded; the fact that the only thing it can display is the battery level since there’s nothing like Live Actions. The capper is the “90%” on the right side of the capsule, right next to the 90 in the battery indicator. You know, just in case you need reminding that the battery is at 90%. Champions indeed!
Hilarity aside, it’s a little sad seeing these Android OEMs doing everything they can to rip off Apple’s design. And it’s not just those in the long tail of OEMs either. Seeing Samsung half-arse features months after they debut on the iPhone, just to abandon them months later is really cringeworthy (anyone remember “AR Emoji”, their rip-off of Animoji). It’s past time they developed some taste on their own.
Hiding Your Attachment Folder In Obsidian's Outline
A useful little CSS snippet for anyone using Obsidian that wants to hide their attachment folder from their outline.
.nav-folder.mod-root>.nav-folder-children .nav-folder>.nav-folder-title[data-path^="Attachments"],
.nav-folder.mod-root>.nav-folder-children .nav-folder>.nav-folder-title[data-path^="Attachments"] + .nav-folder-children {
display: none;
}
To use:
- Go to the directory
$VAULT/.obsidian/snippets
where$VAULT
is the directory of you vault. If thesnippets
directory doesn’t exist, create it. - Copy the CSS snippet into a new CSS file.
- Open you vault settings and go to Appearance.
- Scroll to the bottom to where you see CSS snippets.
- Click the reload button. You should see the CSS file you’ve just created appear in the list. Turn it on to apply it.
This’ll work if you’ve configured Obsidian to store attachments in a folder called “Attachments” located at the root of your vault, like I do. But I suspect the data-path
attribute holds the folder’s path so you could use whatever CSS attribute selector you need based on how you’ve configured attachments. For example, [data-path*="/Files"]
selector will probably work if you’ve configured attachments to be in folders called “Files” that sits alongside your notes (I haven’t tested this so YMMV).
Working with some GitHub access tokens last night left me wondering why there’s no way to just renew an expired token. Dealing with the secret is not as tedious as dealing with the token permissions. Get that wrong and you’ve wasted several minutes of work.
Completed the release of Dynamo-Browse 0.2.0. Most of the work in the last week was updating the manual, especially the scripting API. Some more updates need to be made for the query expressions as well, but I’ll publish what I have now and update that over time.
It’s 2023 now, and I still hate code reviews.
Seeing Mastodon posts from Jason Snell about his trip to Aotearoa New Zealand prompted me to check when I travelled to Queenstown for a holiday. It was 10 years ago to the day: 7th March 2013. Would love to go back there again some day.
Follow-up from my earlier post about ChatGTP this morning, it turns out I probably should’ve RTFM:

Thanks to @andreab@social.lol for the tip.
Oh, AWS. Once again your brilliant UX design chops shine through in the products you release. I always wondered why copying an API keys from an SSO login session took just one click. It’s great that it now takes two, plus a whole lot more reading of small text. 😒
Remember in Gödel, Escher, Bach when they were saying that a (then) theoretical AI is less like a calculator and more akin to the human mind; and just like the human mind is likely to produce errors in the answers it gives? Well…

For reference, macOS Ventura is the current latest release.
Update: Turn’s out the reason for this is that ChatGTP’s data-set only goes back to Nov 2021. See follow-up post.
I wish more app developers built websites for their apps.
There are many benefits in doing so. It’ll allow others to see what the app does without getting kicked out of the browser and shoved to an app store, or when they’re using a device that can’t even access the app store.
It’ll also give others a nice URL that can be linked to or bookmarked. I’m sure App Store URLs are stable, but I wouldn’t call them “nice”. Not much meaning in a URL like apps.apple.com/us/app/id413897608.
I can appreciate that this is asking a fair bit. And I get it: after making websites for a few open-source projects, I know how painful and time consuming they can be to put together.
But I think there’s still value in having a simple, single page website for an app, especially when it’s gained enough traction that people are writing about it. It doesn’t even need to be a standalone site, a blog post would be just as good. But something more than just a listing on the App Store.
Evidence that I didn’t sleep well last night: for a split second I thought this was actually a note I made. I even remarked as to how neat I made it.

The neatness is what eventually tipped me off. None of my notes look as good.
A lot of track work going on this weekend. I enjoy seeing these trucks that can go both on roads and rails. You don’t want to be waiting for them to transition, though. It’s usually done at level crossings and they don’t rush it.

Here’s a bit of a blast from the past. I managed to get ccedit working again. This was the original level editor for workingset.net/2022/12/2… my Chips Challenge “fan game” I’ve been working on.
I’ve been designing a few levels for it recently, but since moving to a new Mac, the level editor I was using was going to be difficult to port. It’s QT application and the QT bindings were a pain to setup, and I rather not go through that again. I was using a Mac at the time I started working on it, but I wasn’t yet ready to go all in on MacOS. So to hedge my bets, I decided to go with QT as the UI toolkit.
This was 5 years ago and I’m unlikely to go back to Linux, so choosing QT was a bit of a bad decision. I think if I had my time again, I’d go with something like AppKit.
Anyway, the level editor still works but I have to log into a screen share to use it. I’d like to be able to edit levels on the machine I’m using now.
The code for the original level editor was still around but it hasn’t been touched in ages. It’s basically an SDL application — the same graphics library I’m using for the actual game itself — and the SDL v2 bindings I’m using are still maintained, so updating those were quite easy1.
One thing I did have to pull out was the Lua VM2. The editor was using old C Lua bindings. Better Lua VMs written in pure Go are now available, so I didn’t want to keep using these old bindings anymore. In fact, I didn’t want to use Lua at all. Lua was originally used for the level scripts, but I replaced this in favour of another language (which is no longer maintained 😒, but I’m not changing it again).

So far the editor boots up, but that’s about it. I can move the cursor around but I can’t add new tiles or load existing levels. There seems to be some weird things going on with the image name lookup. I originally thought image name were case insensitive, but after looking at the image name lookup logic in the game itself, I’m not so sure.
How much time I’d like to spend on this is still a bit of a question. It all depends whether I’d like to release the game itself in some fashion. There are still questions about whether I’m allowed to, given that the graphics are not my own. Still need to think about that.
But in any case, good to see the old editor again.
To Wordpress Or Not To Wordpress
I’m facing a bit of a dilemma.
I’ve been asked to setup a new website for someone who wants to stand up a new business. In therory this is something that I can do quite easily. I know HTML and CSS. I’ve made a living building backends for web-apps. I do have an undeveloped eye for design, but I like to think I have an idea of the principal of good website usability; and as long as I’m not too ambitious, and aim for a minimal usable site, I can probably put together a simple static website.
The only problem is that this may not work for the person that I’m building a site for. This is someone that has no experience with putting together websites, and if I were to go down the static HTML road, I’d probably be on the hook to make changes going forward.
So the alternative is to use a CRM like Wordpress. That way, once I hand ownership of the site to the client, he could either contract someone else to maintain it going forward or even learn to do it himself.
Only problem with that is that my experience with Wordpress is quite minimal. I can get around the dashboard no problem, but when it comes to designing or customising themes or (sigh) using the Block editor, I’m just as much as a novice as he is. And I’m not sure to what degree I can leverage my HTML and CSS skills to style the site. I may be able to change a few things but I’d have to do so within the confines of the block templating system.
So, what to do?
Maybe the best way forward is to get a sense of how often this person would need the site changed. That’s by far the biggest variable here. I only know what he wants at a very superficial sense at this moment. I don’t believe it’ll need any sort of blog or product catalogue; just a simple landing page with contact details.
In that case, I’m wondering if a static site with just plain HTML and CSS would be enough. That’ll be easy enough to put together. It can probably scale with some basic dynamic aspects as well, maybe powered with a simple backend that can regenerate the site. Maybe something like Carrd could work here as well.
But the danger is that he’ll be locked into using a static site. Any changes would require someone who’s versed in HTML and CSS. Even worse would be a static site with a bit of backend “sprinkled in”. Then he’d be locked into using me. Not sure I like that for his sake or for mine. You read about those developers in The Daily WTF who’ve put together a custom backend for a “simple website” that has grown unwieldily and become a huge mess that someone who inherits it needs to cleanup or take responsibility for. The prospect of being such a developer is not a great one.
Which is why I’m looking at Wordpress, and wondering the pain of learning how to work with it is worth it. I guess it’s offsetting the potential future pain (and embarrassment) of transitioning a static site to a proper CRM later.
So, Leon, which pain is worse?