👨‍💻 Wesley Moore

Posts

Looking for posts made before 2020? Check out the previous version of my website.

Building a Hybrid Native Application With Gleam and Tauri

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:

https://forge.wezm.net/wezm/gleam-tauri-experiment

Screenshot of the application showing a name field, minus button, plus button, Greet button and the current time.
Screenshot of the application.
Continue Reading →

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:

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:

  • udev
  • systemd-tmpfiles
  • and now, systemd-sysusers

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.

Continue Reading →

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:

Screenshot of the installer crash.
Screenshot of the installer crash.
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 _
Continue Reading →

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.

Continue Reading →

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.

Continue Reading →

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 DeRez.

Continue Reading →

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.

Continue Reading →

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.

Continue Reading →

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:

Continue Reading →

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.

Continue Reading →

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.

Continue Reading →

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.

Continue Reading →

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.

Continue Reading →

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.

Continue Reading →

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.

Continue Reading →

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.

Continue Reading →

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.

Continue Reading →

ASCII-centric Usernames

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.

Continue Reading →

RustConf 2021

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.

Continue Reading →

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.

Continue Reading →

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.

Continue Reading →

One Hundred Rust Binaries

I recently completed a #100binaries series on Twitter wherein I shared one open-source Rust tool or application each day, for one hundred days (Jul—Nov 2020). This post lists binaries 1–50. See page 2 for binaries 51–100.

Continue Reading →

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.

Continue Reading →

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.

Continue Reading →

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 RGB.

Continue Reading →

Software Bounties

I don’t have time to build all the things I’d like to build, so I’m offering bounties on the following work.

Continue Reading →

Comparing Alternatives to top Written in Rust

Recently I aliased top to ytop. Then I became aware of bottom, and zenith. These are all terminal based system monitoring tools that you might use instead of top. In this post I set out to compare them.

Screenshot of ytop, bottom, and zenith while building some Rust code
Left to right: ytop, bottom, and zenith.
Continue Reading →

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!

Continue Reading →