I took a few hours this weekend to experiment with building a hybrid native app with Gleam and Tauri. This post is a summary of that project. If you’d just like to see the code, I have published that at:
Looking for posts made before 2020? Check out the previous version of my website.
systemd-sysusers and Chimera Linux
I use Chimera Linux as the primary OS on my laptop (as opposed to my desktop, which is still running Arch Linux for now). Chimera was created in 2021 and reached alpha status in June 2023. Chimera was built from scratch and as the name suggests it comprised of a motley crew of components:
- Kernel: Linux
- Toolchain: LLVM
- libc: Musl with Scudo allocator
- Core userland: FreeBSD (with some NetBSD and OpenBSD too)
- Init: Dinit
- Package manager: apk
- Package builder: cbuild
The project and its development is proving very useful to me for seeing how a Linux distribution is built and evolved over time. Watching it progress (and helping a little by maintaining some packages) has helped expose some lesser known (to me) components that make up a typical Linux system, and their role.
Recently systemd-sysusers was introduced. Some folks might find this surprising as Chimera does not use systemd for the role of pid 1/init. As mentioned above it uses Dinit for this. Some standalone parts of systemd are used though. Currently:
- and now,
I had not encountered
systemd-sysusers previously (even though it’s probably
used on the systemd based distros I’ve used before), so I thought I’d jot down
what I learned about it and how it’s used (at the time of writing) in Chimera.
Fixing OpenBSD panic dc_atapi_start: not ready in KVM
I tried creating an OpenBSD 7.3 virtual machine on my new computer (Arch Linux host) and the installer kept crashing with the error:
dc_atapi_start: not ready, st = 50
fatal protection fault in supervisor mode trap type 4 code 0 rip ffffffff810089d9 cs 8 rflags 10282 cr2 287eb3000 cpl 6 rsp ffff800014fd11a0
gssbase Oxffffffff818fbff0 kgsbase Ox0
panic: trap type 4, code=0, pc=ffffffff810089d9
syncing disks...12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 _
Australian and New Zealand Makers on YouTube
I decided I wanted to add some more local folks into my YouTube subscriptions. I put the call out on Mastodon for suggestions for folks doing videos about machining, woodworking, electronics, software, that type of thing. I received a number of helpful replies and thought it might be useful to collect the list (as well as ones I’m already subscribed to) on this page in case others are looking for new channels to check out.
Building a Classic Mac OS App in Rust
Instead of using my funemployment to build useful things I have continued to build things for old versions of Mac OS. Through some luck and a little persistence I have actually managed to get Rust code running on classic Mac OS (I’ve tried Mac OS 7.5 and 8.1). In this post I’ll cover how I got here and show a little network connected demo application I built—just in time for the end of #MARCHintosh.
How to use DeRez
After my post on trying to run
Rust on Classic Mac OS post I continued trying to
find a modern language that I can use to build classic Mac OS software. I’ve
had some success with Nim and built a little
temperature converter application. As part of this I wanted to be able to use
ResEdit to edit the layout of the dialog. The problem was that I need a way
to convert the modified resources back into the textual representation used in
the source code. In this post I describe how I did this with
Creating a Podcast From a Mastodon Account With XSLT
I recently discovered the ATPrewind account on Mastodon. It’s an account sharing “gems discovered while re-listening to @atpfm from the very first episode. By @joshua”. ATP is a tech Podcast that’s been running for about 10 years. Each post (so far) from ATPrewind includes a short clip from the show in the form of a little video.
This post describes how I was nerd sniped into creating a podcast from the ATPrewind posts.
Trying to Run Rust on Classic Mac OS
I recently acquired a Power Macintosh 9500/150 and after cleaning it up and building a BlueSCSI to replace the failed hard drive it’s now in a semi-operational state. This weekend I thought I’d see if I could build a Mac app for it that called some Rust code. This post details my trials and tribulations.
Debugging a Docker Core Dump
On my main machine I use an excellent cross-platform tool called Docuum that
automatically cleans up unused docker images. This allows me to use Docker
without the need to periodically wonder why I’m out of disk space, run
docker system prune and recover half my disk.
I installed Docuum via the AUR package (although tweaked to build the latest Docuum release) and ran it via the bundled systemd service definition. This worked great for a while but some time back it started failing. Every time Docuum would try to check for things to clean up I’d see the following in the system journal:
Hide Sign in With Google Pop Up
Inspired by Rach Smith’s post on using userstyles to hide YouTube shorts I came up with some CSS to hide those annoying Sign in with Google pop-ups.
divmod, Rust, x86, and Optimisation
While reviewing some Rust code that did something like this:
let a = n / d;
let b = n % d;
I lamented the lack of a
divmod method in Rust (that would return both the
quotient and remainder). My colleague Brendan pointed out that he actually
added it back in 2013 but it was moved out of the standard
library before the 1.0 release.
Garage Door Monitor Update
The garage door monitor that I built earlier in the year has by all accounts been running perfectly since I installed it. Recently I implemented a couple of new features that I’ve wished for over the last few months.
Resuming Read Rust Tweeting
The Read Rust Twitter account crossed over 10K followers in the last few days. Amazingly 4350 of those coming after I stopped regular posting. This got me thinking about the account and how I might be able to use it to benefit the community while avoiding the overhead that led me to winding things down in Sep 2020.
Generating RSS Feeds From Web Pages With RSS Please
Sometimes I come across a web page that I’d like to revisit when there’s
new content. Typically, I do this by subscribing to the RSS feed in
Feedbin. Unfortunately some sites don’t provide an RSS feed, which is why I
built RSS Please (
rsspls). RSS Please allows you to generate an RSS
feed by extracting specific parts of a web page. In this post I give a bit of
background on the tool and how I’m running it in my Docker infrastructure.
Monitoring My Garage Door With a Raspberry Pi, Rust, and a 13Mb Linux System
I’ve accidentally left our garage door open a few times. To combat this I built a monitor that sends an alert via Mattermost when the door has been left open for more than 5 minutes. This turned out to be a super fun project. I used parts on hand as much as possible, implemented the monitoring application in Rust, and then built a stripped down Linux image to run it.
Fixing Monospace Text in Kobo eReaders
After verifying with friends that eBook readers do a decent job of rendering
technical content I purchased a Kobo Libra 2 this week. I loaded up some books
and started reading… but something was off. Sure enough, after verifying the
EPUB with Calibre on my computer I confirmed that the Kobo was not rendering
text with CSS rules like
font-family: monospace in a monospace font.
Alpine Linux and Docker Infrastructure Three Years Later
Three years ago I published, Rebuilding My Personal Infrastructure With Alpine Linux and Docker, in which I described how I was hosting various applications using an Alpine Linux host and Docker on a virtual machine at Vultr. I thought it would be good to write a follow-up on how this worked out.
I’m working on a web-based side project in my spare time. The great thing about side projects is you get to make all the choices and question the common wisdom. Recently I’ve been building out the sign-up flow and I started thinking about usernames—specifically the characters that they may be comprised of.
A few weeks ago I got up at 2:30am and attended virtual RustConf 2021. The pre-recorded talks were live-streamed and there was a dedicated Discord server for discussion and Q&A while the talks ran. It was overall well organised and a good experience. All the talks were interesting and well executed. The Discord chat was fun but I’m not sure it added a lot to the value of my experience.
Burning 2.5Tb of Bandwidth Hosting a Nitter Instance
On 24 August I received an email from Vultr saying that my server had used 78% of its 3Tb bandwidth allocation for the month. This was surprising as last time I looked I only used a small fraction of this allocation across the various things I host.
After some investigation I noticed that the Nitter instance I set up six
months ago at
nitter.decentralised.social seemed to be
getting a lot of traffic. In particular it seemed that there were several
crawlers including Googlebot and bingbot attempting to index the whole site and
all its media.
Turning One Hundred Tweets Into a Blog Post
Near the conclusion of my #100binaries Twitter series I started working on the blog post that contained all the tweets. It ended up posing a number of interesting challenges and design decisions, as well as a couple of Rust binaries. Whilst I don’t think the process was optimal I thought I’d share the process to show my approach to solving the problem. Perhaps the tools used and approach taken is interesting to others.
One Hundred Rust Binaries
Slowing Down Read Rust Posting
After nearly 3 years and more than 3200 posts I’m going to slow down the posting frequency on Read Rust. I hope this will free up some spare time and make it easier to take breaks from social media. I aim to share all of the #rust2021 posts I can find, but after that I’ll probably only share posts that seem particularly noteworthy or interesting.
Working Around GitHub Browser Sniffing to Get Better Emoji on Linux
I have my system configured to use JoyPixels for emoji, which I consider vastly more attractive than Noto Color Emoji. Sadly GitHub uses browser sniffing to detect Linux user-agents and replaces emoji with (badly aligned) images of Noto Color Emoji. They don’t do this on macOS and Windows. In this post I explain how I worked around this.
Setting the amdgpu HDMI Pixel Format on Linux
This week I discovered some details of digital display technology that I was
previously unaware of: pixel formats. I have two Dell P2415Q displays
connected to my computer. One via DisplayPort, the other via HDMI.
The HDMI connected one was misbehaving and showing a dull picture. It turned
out I needed to force the HDMI port of my RX560 graphics card to use RGB output
instead of YCbCr. However, the
amdgpu driver does not expose a means to do
this. So, I used an EDID hack to make it look like the display only supported
I don’t have time to build all the things I’d like to build, so I’m offering bounties on the following work.
Comparing Alternatives to top Written in Rust
New Design 2020
It’s been more than 10 years since I started working on the previous design for this website 😅. This feels like a good point to come up with a new one!