Work Email Spam

Opened my work email this morning and received a greeting from the following spam messages:

  • Webinar to “overcome the fear of public speaking” from some HR Training mob
  • A training course on “accelerating innovation in data science an ML” (there’re a few emails about AI here)
  • Webinars from Stripe, Slack, and Cloudflare about how other companies are using them
  • Weekly updates about what’s happening on our Confluence wiki (this probably could be useful… maybe? But our wiki is so large that most updates are about things other teams are working on)
  • A training course on some legal mandates about hiring (honestly, my email must’ve appeared on some mailing list for HR professionals)
  • Another webinar from the first training mob about dealing with “employees from hell”

Marked all as read, closed email, and opened Slack.

Follow-up to yesterday: I was curious to know if the click-track is only present in bounces of projects imported from GarageBand, or if it also occurs in Logic Pro projects created from scratch. After a quick test, it looks like it doesn’t matter where the project is from: the clicks are there.

TIL that Logic Pro will include the click-track in the bounce if it’s left on. This “feature” costed me a fair bit of rework today. I’d prefer it if the click-track is never in the bounce unless you enable it otherwise. More likely to show intent: wanting it there vs. forgetting to turn it off.

This conversation with @Gaby got my creative juices flowing so I though I’d put together a small video tutorial for using the GLightbox plugin by @jsonbecker. There have been a few updates with the plugin so how I use it might be slightly out of date. Either way, please enjoy.

I enjoyed today’s issue of People and Blogs with Jim Nielsen. I’m a huge fan of Jim Nielson’s blog and it’s always fun reading about how people like Jim started their blogging careers.

Apart from looking at Fiber this week, I also took a look at import maps. I was skeptical at first, but after using them I can probably learn to like them, especially if it means no build step for JavaScript. Would be nice if I could put them in a separate file, but I guess that’ll come in time.

Funny how we’ve gone from online services being famous for getting users off their site as quickly as possible (Google circa 2000), to online services warning users that they’re leaving the site when they click on a link (Discord circa today).

My upcoming trip will take 40 minutes, so I can probably give it 45 minutes to get there. I don’t need to leave an hour out.

Honestly, thank goodness I’m in software development. I’m too anxious for a job in logistics.

There’s a school of though in Go that says the built-in HTTP handler types are all you need to build a web-service. There’s a good reason for this: web frameworks come and go (anyone remember Gin?) But I’ve been playing around with Fiber recently and it’s been delightful. Hopefully it sticks around.

Vivaldi has been really unstable recently. It usually crashes once a week on average (which is, arguably, already too often), but this week I’ve just experienced crash number 3. Fortunately no data loss yet.

More Logic Pro this evening. Here’s a recording of the main theme from Tubular Bells 2. Love how the Steinway Grand Piano sounds.

Have gone down, of all things, a HTMX essays rabbit-hole. I discovered1 HTMX from reading Jim Nielson’s excellent blog, and although I haven’t had a chance to use it yet, I do like their principals to web front-end development.

Some articles that have grabbed me so far:

Looking forward to actually using the library.


  1. Well, maybe “rediscovered” is a better way to describe it. I tried adding HTMX to my bookmarks only to discover that it’s been there for over a year. ↩︎

🔗 Canada’s 84-year radio time check has stopped because of accuracy concerns

Interesting article about how Canada broadcasted timing information via radio. Reminds me of the 6 pips played just before the news on ABC radio when I was a kid. I’m guessing they served a similar role.

Rehearsal today. Haven’t got the PA equipment yet so I had to settle for 30 year old PC speakers. They worked better than expected, but they’ll probably struggle with a full garden.

A keyboard synthesiser on a keyboard stand in a garden, connected to two small, yellowed PC speakers which are sitting on the ground to the right

More work on Mainboard Mayhem today. Had a bit more success getting the Windows build into a releasable state.

First thing was the app icon. That blog post I talked about yesterday worked: I was able to set the icon of the executable. I did make a slight adjustment though. The post suggested using ImageMagick to produce the ICO file, but I wasn’t happy with how they looked. There were a lot of artefacts on the smaller icon sizes.

So I looked around for an alternative, and found this package by Lea Anthony. He’s the maintainer of Wails, a cross-platform toolkit for making browser-based GUI apps in Go, sort of like Electron but without bundling Chrome. In fact, most of the build for Mainboard Mayhem was put together by reading the Wails source code, so I trust he knows what his doing. And sure enough, his package produced a nicely scaled ICO file from a source PNG image. Better yet, it was distributed as a Go package, so I could no need to install and shell-out to run it: I could just integrated it directly into the project’s build tool.

Using rsrc to generate the SYSO file with the icon worked as expected: Go did pick it up and embed it into the executable. I did have some trouble getting the Go compiler to pick up these files at first. In short, they need to be in the same directory as the main package. So if you’re running go build ./cmd/thing, make sure the SYSO files are in ./cmd/thing. Other than that, no real issues here.

Screenshot of Windows 10 file browser with mainboard.exe shown with the app icon, plus a few sdl DLLs
A beautiful site: Mainboard.exe with the embedded app icon

One last thing I had to deal with was the console window. Running a Go app in Windows shows the console by default. Perfectly fine for command line tools, but less so for games:

Screenshot of Mainboard Mayhem running with the console window open in the background showing log messages
Mainboard Mayhem with that annoying console window. Even the log messages are dull (well, unless you're working on the app).

So I had to find a way to hide the console on launch. Since Mainboard Mayhem is using SDL, I’m actually using MinGW to cross-compile the Windows release on an Ubuntu build runner. The documentation for MinGW suggests adding -mwindows as a linker option to hide the console:

# What I was doing before, which didn't work
CGO_ENABLED=1 \
CC="x86_64-w64-mingw32-gcc" \
GOOS="windows" \
CGO_LDFLAGS="-mwindows -L…" \
go build -o dist/cclm/mainboard.exe ./cmd/cclm'

This didn’t actually work when I tried it: launching the app kept bringing up the console. Turns out what I should’ve done was follow the advice of many Stack Overflow answers, and set -ldflags "-H=windowsgui" on the Go command:

# This works
CGO_ENABLED=1 \
CC="x86_64-w64-mingw32-gcc" \
GOOS="windows" \
CGO_LDFLAGS="-L…" \
go build -ldflags "-H=windowsgui" -o dist/cclm/mainboard.exe ./cmd/cclm'

This works even without the -mwindows switch. Not completely sure why though. I guess MinGW is not actually being used for linking? Or maybe -m only works with C header files? Don’t know. 🤷 But doesn’t matter: the console no longer shows up on launch.

Screenshot of Mainboard Mayhem running, but with no console window. File browser running in the background
Mainboard Mayhem without the console window. A much nicer experience now.

Finally, there was testing it all, and for this I just bit the bullet and set-up a Windows 10 virtual machine in Azure. The rate is something like $0.16 AUD an hour, an easy decision compared to spending time trying to get a VM with Windows 10 running on my machine.

One remaining thing that’s slightly annoying is Windows Defender refusing to launch it after download, doing effectively the same thing as Gatekeeper on MacOS does:

Screenshot of Windows Defender SmartScreen indicating that it's refusing to start an unrecognised app. A single button saying 'Don't Run' appears at the bottom of the dialog.
Gatekeeper a.la. Microsoft.

I’m sure there’s a way around it but it’s probably not worth learning about it at this stage. It’s easy enough to dismiss: click “More Info” and the click “Run Anyway”:

Screenshot of Windows Defender SmartScreen indicating that it's refusing to start an unrecognised app, saying the name of the executable and that the publisher is unknown. Two buttons saying 'Run Anyway' and 'Don't Run' appears at the bottom of the dialog.
Clicking 'More Info' gives you a way to launch the app.

But other than that, I think the Windows version of Mainboard Mayhem is ready. I’ve updated the website to include the Windows archive if anyone’s interested.

Spent some time today on Mainboard Mayhem, trying to finish the Windows build. I’ve actually got Windows version of the game being built for a while now. I just haven’t published them, mainly because I haven’t got the app icon set-up yet.

But this week, Golang Weekly had a link to a blog post by Mahmud Ridwan on how to do so. It looked pretty straightforward, so I thought I’d give it a try.

And yeah, the instructions themselves were easy enough, and I wish I could say if they worked or not. But in order to test it, I need a Windows machine. And I don’t have one, and I wasn’t about to get one just for this.

So I tried setting up Windows in a VM using UTM. I got this far:

A blue Windows install screen within a MacOS window showing a spinner and the message 'Just a moment…' underneath

Yeah, this infinite spinner has been staring at me pretty much all day. I got a Windows 10 installer ISO using CrystalFetch, and it seemed to work. But it just doesn’t want to boot up for the first time.

Not actually sure what the problem is. The error message seems to suggest that it’s having trouble connecting to the internet. Might be that? Or maybe the installation didn’t complete properly? Could be anything. 🤷

So no luck getting this tested yet. I’m wondering if it might be easier to forget virtualisation and just launch a Windows instance in the cloud somewhere instead.

🔗 Age and the past

One way to think about age – we become old when we think and talk more about the past than the future.

Oooh. I feel a little seen. 🫣

Installed the latest version of Android today. One obvious change: the calculator app displays fractions in the result. And there’s no way to turn it off.

This… doesn’t appeal to me. Not enough for me to change apps, at least not yet. But I wish there was a setting to change it back to decimals.

The built-in calculator showing a result of 2.5 in decimals, and 2 1/2 in gray underneath.

Went to Castlemaine for a funeral this morning. For most of my life we would regularly go to Castlemaine to visit family. After today, it might be a while before I visit that town again.

Spending my free time adding photos to my travel journal and I’m starting to wonder if less is more. Maybe not having tens of photos crammed into a single entry, and only having a few good ones makes for a better entry overall.