I forgot that yesterday was St. Patricks Day. But I did wear a green polo, listened to some Celtic inspired music, and watched a few episodes of Derry Girls last night. Does that mean I accidentally celebrated St. Patricks Day? ☘️

Sometimes I wish I had the patients (and the hardware) to play some of the video games indies have been releasing. After reading about them, or watching a speed-run, I see that there some that are actually quite incredible. There are some really talented game designers out there.

Reading the chapter on Microformats in Indie Microblogging brought me back to uni where we were taught about the Semantic Web. I tell you, I feel exhausted just thinking about it now.

All these standards: RDF, OWLS, tautologies, and like seven other acronyms I’ve sinced forgotten. Each one building on top of the other like a gigantic wedding cake. And oh yeah, all of them using XML1 and requiring seven different namespaces and five different forms of URI’s to express even the most basic relationship.

It was the only part of the subject that didn’t seem fun. HTML? CSS? Great, sign me up! Keeping seven different XML files up to date when a relationship changes? No, thank you.

If there was ever an instance of technologists overengineering a solution without considering how it would be used to solve the problem, the Semantic Web is a great example.


  1. RDF did have a non-XML representation but I do remember being told that using it was discourage in favour of the XML standard. ↩︎

An important tenet of software development that I don’t think is appreciated that much: make your software easy to test. This includes building tests, test setup, running tests, configuration for testing, etc. If you don’t do this, your software will not be tested.

🔗 Go 1.18 Release Notes

Happy “generics finally in Go” day.

(I wouldn’t call myself someone who was itching for the Go devs to add generics; but now that they are in the language, I’ll probably use them).

Broadtail 0.0.7

Released Broadtail 0.0.7 about a week ago. This included some restyling of the job list on the home page, which now includes a progress bar updated using web-sockets (no need for page refreshes anymore).

For the frontend, the Websocket APIs that come from the browser are used. There’s not much to it — it’s managed by a Stimulus controller which sets up the websocket and listen for updates. The updates are then pushed as custom events to the main window, which the Stimulus controllers used to update the progress bar are listening out for. This allows for a single Stimulus controller to manage the websocket connection and make use of the window as a message bus.

Working out the layers of the progress bar took me a bit of time, as I wanted to make sure the text in the progress bar itself was readable as the progress bar filled. I settled in a HTML tree that looked like the following:

<div class="progressbar">
  <!-- The filled in layer, at z-index: 10 -->
  <div class="complete">
    <span class="label">45% complete</span>
  </div>

  <!-- The unfilled layer -->
  <span class="label">45% complete</span>
</div>

As you can see, there’s a base layer and a filled in layer that overlaps it. Both of these layers have a progress label that contain the same status message. As the .complete layer fills in, it will hide the unfilled layer and label. The various CSS properties used to get this effect can be found here.

The backend was a little easier. There is a nice websocket library for Go which handles the connection upgrades and provides a nice API for posting JSON messages. Once the upgrade is complete, a goroutine servicing the connection will just start listening to status updates from the jobs manager and forward these messages as JSON text messages.

Although this works, it’s not perfect. One small issue is that updates will not reconnect if there is an error. I imagine that it’s just a matter of listening out for the relevant events and retrying, but I’ll need to learn more about how this actually works. Another thing is that the styling of the progress bar relies of fixed widths. If I get around to reskinning the style of the entire application, that might be the time to address this.

The second thing this release has is a simple integration with Plex. If this integration is configured, Broadtail will now send a request to Plex to rescan the library for new files, meaning that there’s no real need to wait for the schedule rescan to occur before the videos are available in the app. This simply uses Plex’s API, but it needs the Plex token, which can be found using this method.

Anyway, that’s it for this version. I’m working on re-engineering how favourites work for the next release. Since this is still in early development, I won’t be putting in any logic to migrate the existing favourites, so just be weary that you may loose that data. If that’s going to be a problem, feel free to let me know.

Learning Through Video

Mike Crittenden wrote a post this morning about how he hates learning through videos. I know for myself that I occasionally do prefer videos for learning new things, but not always.

Usually if I need to learn something, it would be some new technology that I have to know for my job. In those cases, I find that if I have absolutely no experience in the subject matter, a good video which provides a decent overview of the major concepts helps me a great deal. Trying to learn the same thing from reading a lengthy blog post, especially when jargon is used, is less effective for me. I find myself getting tired and loosing my place. Now, this could just be because of the writing — dry blocks of text are the worst, but I tend to do better if the posts are shorter and formulated more like a tutorial.

If there is a video, I generally prefer them to be delivered in the style of a lecture or presentation. Slides that I can look at while the presenter is speaking are fine, but motion graphics or a live demo is better, especially if the subject is complex enough to warrant them. But in either case, I need something visual that I can actually watch. Having someone simply talk to the camera really doesn’t work for me, and makes watching the video more of a hassle (although it’s slightly better if I just listen to the audio).

Once I’ve become proficient in the basics, learning through video become less useful to me and a decent blog post or documentation page works better. By that time, my learning needs become less about the basics and more about something specific, like how to do a particular thing or details of a particular item. At that point, speed is more important to me, and I prefer to have something that I can skim and search in my own time, rather than watch videos that tend to take much longer.

So that’s how and when I prefer to learn something from video. I’ll close by saying that this is my preferred approach when I need to learn something for work. If it’s during my downtime, either a video or blog-post is fine, so long as my curiosity is satisfied.

🔗 Kubernetes 101

A pretty good introduction about the fundamentals of Kubernetes, and also the post in question here.

I was ask today by someone at work1 if I knew of a good post describing the fundamentals of Kubernetes. I remember reading one several months ago which explained the fundamentals quite well to me, and thought it would be helpful for this person as well. But I forgot to bookmark the link.

I probably should have realised at the time that it would have been a good post to bookmark. I guess I was hoping to rely on the browser’s history, but as far as I can tell, the history in Vivaldi only goes back three or four months. I felt the post was useful enought to spend some time finding it again.

As you can imagine, doing a straight search for anything on Kubernetes in either Google or DuckDuckGo would result in nothing helpful, since there are roughly a bajillion posts on Kubernetes out there on the internet. But I did remember that the author actually released a simple, for-pay image sharing application, and announced it on Hacker News.

So I did a DuckDuckGo search for “site:ycombinator.com image hosting single person.” Amazingly the Hacker News post was the top hit. This eventually led me to the app in question, which eventually led me to this person’s blog, and after one more DuckDuckGo search, eventually to the post itself.

It took a good 20 minutes find this post once more, and I was honestly unsure whether I would have been about to find it at all. I’m bookmarking it now so that it may never2 be lost again.


  1. Yes, I’m working during a public holiday today. ↩︎

  2. Or at least until this blog is shutdown. ↩︎

Finished reading: Ignore Everybody: and 39 Other Keys to Creativity by Hugh MacLeod 📚

Another book full of thought provoking advice that could be read in a weekend.

Hard to get out of old habits. I’ve started reading Indie Microblogging by Manton today. So far a terrific read — which natually means that I stopped so that I can save it for “later”. Really need to just finish reading what I find interesting now.

This is by far the most useful quick action I’ve made in Automator. It generates a UUID, and places it in the pasteboard. I’ve got it bound to Ctrl+Opt+Cmd+U and I’ve been using it constantly over the last week (writing a lot of tests with test data).

I think it’s time to close the “Untitled Summer Project”, the service I was working on to upload files to S3 for publishing on Drummer.

The goal — despite not being entirely public — was to have a service that could be used by others to upload images to S3 for the purpose of publishing them to their blog, particularly blogs published using Drummer and served through Old School. I was hoping to have something that I could share with others by the end of Summer.

Well, now it’s Autumn, and I’ve made very little progress on it since early February. So it’s time to cut my losses and shut it down.

I think there were a number of factors that resulted in the failure of this project:

  1. I wasn’t using it enough to get excited about it. I mean, I was using to manage my uploaded pictures for workingset.net, but I was only doing so occasionally.
  2. Apart from not using it, I wasn’t getting much out of the project itself. There wasn’t anything exciting about the project from a purely coding standpoint (apart from doing image resizing in the browser using WASM, which might come in handy for some other projects), and if I was getting nothing from using the project myself, there was no other intrinsic motivation to continue working on it.
  3. I was planning to move on from Drummer and Old School as a blogging platform. I figured giving write.as a try, which also has image hosting, so there was no real need for it anymore.

I think what I need to do for any project that I hope to share with others, I need to share it with others much earlier than when I was originally planning to. I think that feedback from others using it is important for driving the project forward, particularly if I am not getting that drive from using it myself.

Here’s another clip of the echidna, taken from the same 2 minute video I took yesterday. It’s also the third video of wildlife looking for food that I’ve posted on this blog. Is a trend forming I wonder? 🤔

Went for my afternoon walk yesterday, and saw an echidna looking for food. That doesn’t happen every day, so it seemed like a good subject for a video.

Wondering if I could part with A$ 10,000.00 on a souped up Mac Studio. Very tempting, but that’s a fair bit of money.

I’m looking for a new CMS for my side-project journal, which is currently on Drummer and Old School. I’m looking at write.as as a possible contender, and so far it looks promising.

My printed Day One journals for 2021 have arrived, much quicker than I expected. They came out nicely. I think paper covers are the way to go — they feel much better to flip through than the hard cover one I have for 2020.

I was reminded about the post on streaming apps by John Siracusa when I was browsing Apple Maps today. Do you know that after a search, it takes three taps to dismiss the sidebar, reveling the actual thing I want to see — the map? Do these taps count as “engagement”? 😒

Some More Updates of Broadtail

I’ve made some more changes to Broadtail over the last couple of weeks.

The home page now shows a list of recently published videos below the currently running jobs.

Clicking through to “Show All” displays all the published videos. A simple filter can be applied to filter them down to videos with titles containing the keywords (note: nothing fancy with the filter, just tokenisation and an OR query).

Finally, items can now be favourited. This can be used to select videos that you may want to download in the future. I personally use this to keep the list of “new videos” in the Plex server these videos go to to a minimum.