Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

👨‍💻 Wesley Moore

Posts

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

Making the Web More Readable With Stylus

Stylus is an open-source browser extension for managing and applying “user styles”—custom snippets of CSS—to websites. It allows you to tweak sites you visit to tailor them to your preferences. In this post I list the ways I use Stylus to make my browsing experience nicer.

Continue Reading →

Replicating My Alacritty Appearance in Ghostty

Ghostty by Mitchell Hashimoto is the new hotness in the terminal emulator world. It recently came out of private beta launching publicly as 1.0. It’s similar to other GPU accelerated terminal emulators like Alacritty and Kitty, but differs in that it uses the native toolkit on macOS and Linux (GTK). For nerds it’s also interesting because it’s implemented in Zig.

Continue Reading →

Building a Tiny CDN With pyinfra and Chimera Linux

In my quest to make linkedlist.org—my link blog—faster, I set up multiple deployments around the world. I used pyinfra to automate the process and Chimera Linux as the host operating system. Join me on this adventure in over-engineering to see how I dropped the average response time across nine global locations from 807ms to 189ms without spending a fortune.

Network diagram of Linked List infrastructure A network diagram showing a user at the top. An arrow from the user points downward to a node labelled Gcore GeoDNS. Three dashed arrows point down from the Gcore node to three servers labelled: AU, FR, and NY. Below the servers at the bottom of the diagram is another smaller server titled Qotom. It has arrows pointing up to each of the other servers with a label over the arrows, "Certs".

A diagram of what we’re building.[1]

Continue Reading →

Generating a Static Website From a Pleroma Archive

Almost two years ago, in Jan 2023 I migrated from my Fediverse presence from my self-hosted Pleroma instance to a single user Mastodon instance hosted by masto.host. Since then I’ve wanted to retire the Pleroma instance, but I didn’t want to just take it offline. I wanted to preserve my posts and links to them. That became a priority over the weekend so I built a tool, pleroma-archive to do it.

Continue Reading →

Building and Launching My New Link Blog, linkedlist.org (Twice)

I’ve started a new tech focused link blog over at linkedlist.org. “Not another tech blog”, I hear you groan, and rightly so. However my intention is not to cover topics that are already well reported upon like Apple, Google, Microsoft, the latest drama at OpenAI, and other stuff like that. Instead, I plan to focus more open-source, programming, hardware, software, Linux, Rust, retro computing etc. There’s some more details in the welcome post.

In this post I’m going to cover the process I took to the build the site (twice) and some of the considerations that went into it—for a site with only a handful of pages there was a surprising amount of them.

Continue Reading →

Australian Chimera Linux Mirror

I have set up a mirror of repo.chimeralinux.org on a server in Australia (Brisbane). It’s been running well for a couple of weeks now. The root of the mirror shows an index of what is hosted and when it was last synced. /chimera is where the Chimera data lives.

It mirrors the packages as well as ISO and rootfs downloads. Using the mirror greatly speeds up package downloads, which in-turn makes things like apk upgrade a lot faster. Some rudimentary testing suggests this this server may also provide a speed improvement for folks in parts of Asia too.

Continue Reading →

Announcing Feedlynx

Feedlynx logo: a caricature of a Lynx with a stem in its mouth. At the end of the stem is the orange RSS logo.

My latest project, Feedlynx, is a self-hosted tool that allows you to collect links in an RSS feed[1]. You subscribe to the feed in your RSS reader of choice and read or watch later at your leisure. Plus it has an adorable mascot!

Feedlynx runs on most mainstream operating systems including Linux, macOS, BSD, and Windows and has no runtime dependencies. Check out the latest release to download pre-compiled binaries for some common platforms.

After a few weeks using Feedlynx myself I think it’s ready for others to check out. Read on for more information about my motivations behind building Feedlynx.

Continue Reading →

A Developer's Review of a Snapdragon X Laptop (Lenovo Yoga Slim 7x)

Photo of the Yoga 7x laptop open on a desk showing the Glass House Mountains on the desktop. To the right of the laptop is a coffee mug and a pair of glasses.
Lenovo Yoga Slim 7x Snapdragon

For the last two weeks I’ve been testing out my new laptop, a Lenovo Yoga Slim 7x (14", Gen 9) Snapdragon. This laptop is interesting because it’s one of the initial batch based on Qualcomm’s Snapdragon X Elite Arm CPUs. In this post I aim to provide a detailed review of the device and the experience of using it from the perspective of a software developer. This post was written on the Yoga 7x.

Continue Reading →

Why Chimera Linux

I received a reply to my Tech Stack 2024 post asking: Why Chimera Linux? I wrote a response that turned out longer than anticipated and figured I may as well post it here too. I’m not trying to convince you to use Chimera with this post, just note down why it appeals to me. That’s really the crux of it: there’s dozens of distros out there all with different goals and values and Chimera really speaks to me, for you it might be something else.

Continue Reading →

How Much Is a Browser Worth?

Apparently people are excited about funding independent browser efforts this week. I have little interest in funding yet another browser built in C++ in 2024 but Servo is still alive. Since Mozilla refuse to let us directly fund Firefox I shall set up a recurring donation to Servo.

The next question is how much is a web browser worth to me? Based on minutes spent using a browser, quite a lot!

Continue Reading →

Tech Stack 2024

Inspired by Alex Chan’s Tools of the trade post I thought I’d note down my current tech stack and then revisit it in a few years to see how things evolve. As per Alex’s post I’ll break it down into three sections: software, (development) tech stack, and hardware.

A photo of my desk. There's two displays, the one on the right is rotated into a portait orientation, the left on is on a wooden monitor stand. In front of the monitors are: a PS4 controller, TI-89, tenkeyless mechanical keyboard, mouse, and Kobo e-Reader.
My desk. The computer is behind the displays.
Continue Reading →

Exporting YouTube Subscriptions to OPML and Watching via RSS

This post describes how I exported my 500+ YouTube subscriptions to an OPML file so that I could import them into my RSS reader. I go into fine detail about the scripts and tools I used. If you just want to see the end result the code is in this repository, which describes the steps needed to run it.

I was previously a YouTube Premium subscriber but I cancelled it when they jacked up the already high prices. Since then I’ve been watching videos in NewPipe on my Android tablet or via an Invidious instance on real computers.

Continue Reading →

Testing a $4 Micro SD Card From AliExpress

I needed three low capacity micro SD cards for an upcoming project. There’s plenty of these available on AliExpress but its very difficult to know if you if the actual capacity will match the packaging. I did some research and came across this interesting video that tested 16 different cards. Their recommendation was the Lexar ones. So I found some 32Gb ones for AU$4.13 and placed an order[1].

Photo of the micro SD card in its packaging.
The card being tested.

As per the video’s suggestion I tested one with an open-source tool called F3 (Fight Flash Fraud) when they arrived. F3 verifies the capacity against what the drive advertises and verifies that that amount of data can be written and read back without error.

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 →

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 →

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 →

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 →

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 →

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 →