weekends are for leisure

Learning more Kubernetes

A few months ago I got the urge to refresh and expand my Kubernetes skills. I know the basics, but have never managed a cluster. Several companies I worked at used Kubernetes in some capacity, but sadly I was never on those teams. But that’s ok! I’m no stranger to learning on my own, and it’s a great excuse to expand my homelab.

Continue reading

James Recycling in Portland

There are so many beautiful people in Portland. This video features a man who partnered with a local plastics recycler to provide a way for residents to recycle plastics that aren’t accepted in their curbside bins.

Continue reading

I love Oregon Field Guide

I made more time for evening relaxation this year because it was a tremendously taxing one. I’m talking about the kind of relaxation where you lounge without moving, don’t touch your phone, and give your full attention to something for the full duration. When I need that level of rest, my TV show of choice is Oregon Field Guide. It is the epitome of wonderfully crafted nature communication, and has been my favorite PBS show for about 15 years.

Continue reading

Re-theme in progress

I’ve been fighting against the theme I was using for this blog for a couple years now. It hadn’t been updated to work with newer versions of Hugo, which is the tool I use to convert my writings into a themed, usable website.

So a month ago I decided to create my own theme, after avoiding this rabbit-hole for years. I knew there’d be a multi-hour learning curve involved, but now felt like the right time.

Continue reading

QNAP QWA-AC2600 on Linux, setting the country code for hostapd

Setting the country code within the hostapd config doesn’t work on Debian bookworm or Ubuntu 22 LTS. Nor does using iw reg set US without a workaround. The trick is to remove all kernel modules for the card, then use iw reg set US and reload the modules.

The card worked fine under Debian 11. I have a hunch things broke when Linux moved away from the CRDA package, but I’m not a kernel developer. If you know what may have happened, please let me know.

Continue reading

Tutorial: Using ARMv6 SIMD Intrinsic Instructions on a Raspberry PI Zero W

Raspberry Pi Zero W computers have a single core ARM1176JZF-S CPU that implements version 6 of the ARM11 ARM architecture. From the docs:

It supports the ARM and Thumb instruction sets, Jazelle technology to enable direct execution of Java bytecodes, and a range of SIMD DSP instructions that operate on 16-bit or 8-bit data values in 32-bit registers.

The SIMD (Single Instruction Multiple Data) instructions are what we’ll be talking about in this tutorial. These instructions can help you speed up an application than needs to perform the same operation on many pieces of data. If you have two arrays of integers and you want to add each corresponding element and store the result in a third array, you can use SIMD instructions to perform four additions at a time.

Continue reading

Rust Sharding StatsD Proxy: Performance Improvement

If it ain’t broke, make it faster.

I’m writing a sharding StatsD proxy as a way to learn the Rust programming language. This is just a toy project, but I’m treating it as if it were something I’d run in production where I care about performance.

This proxy can be used to spread StatsD message load across N downstream servers (ie. Telegraf with the StatsD input plugin). However, due to the way metrics are stored in a timeseries database like InfluxDB, we need to ensure consistent hashing. You can think of it as an AWS Load Balancer with sticky sessions enabled. The proxy must always forward the same StatsD message – a measurement and it’s unique tags+values – to the same downstream server.

Continue reading

Setting the Time on a PineTime running InfiniTime

I recently bought a PineTime watch on a whim. And I’m still not sure what I’m going to do with it, but it runs an open source operating system (InfiniTime based on FreeRTOS) so I’m lured by the thought of customizing or contributing in some way no matter how small.

The first thing I noticed when booting my watch for the first time is the battery indicator didn’t seem to be working despite the fact that I was actively charging it. I assumed this was a bug in the version of InfiniTime that ships with the watch (0.7 IIRC), so I headed to the wiki to see how to flash a newer version.

Continue reading

Learning Rust - Sharding StatsD Proxy

TL;DR: I’m learning Rust, creating a sharding StatsD proxy as a learning project, and am creating YouTube videos of the process. See Relaxing With Code.

Continue reading

Android Text Message Backup

I’ve wanted to “factory reset” my old Android phones for years but hadn’t found a good way of exporting text messages including the embedded images and videos. Some solutions involve rooting your phone, and I didn’t want to do that. Nor did I want to use an app that copied to Gmail or the cloud. And I wanted to know exactly what the app’s code was doing. So I found the MessageBackup repo on GitHub and used it as a starting point.

Continue reading