Integrating with external services is a pain. The technical challenges—reliability, performance, caching, downtime, and so on—are well-known and ...
Everything is fucked, no systems are sound, all decisions are wrong, and we should destroy all software. I've noticed this recurring trend at my last...
Context At a previous job, we built a service we called our operations platform. Its aim was to unify the SaaS tooling used by our ops teams with dom...
Background I got these Antela smart bulbs a while ago. They connect to my home network, and I control them from my phone via either the Tuya Smart ap...
I noticed a pattern when I join a new company. I'm being onboarded, someone is explaining their systems to me, and they make a joke about how it's un...
I've finally completed the first year (of three) of my Bachelor's degree in Engineering at IU Hochschule. Technically speaking, it's my second first ...
As practice in thinking and talking about practical software design approaches (at the high and low level), I want to explore some scenarios from fir...
Watching Dawn of the Planet of the Apes gave me some thoughts about dictatorship, and more broadly, leadership. Mostly regarding at work, but also...
How SVG works The common way of representing digital images is via pixels. Take an image and break it down into small squares ("pixels"), where each ...
We have the low-level tools for connecting to the Faktory server, executing commands, fetching data, logging, and so on. Now, I'll work on the high-l...
This is a dump of my learnings and experiments while going down a little rabbit hole. Concurrent rate limiters I was studying Sidekiq's page on rate ...
Let's talk about cardinality. Can we talk about cardinality please, Mac? I've been dying to talk about cardinality with you all day. In maths, cardi...
Goal: A brief exploration of what it means to "pack" and "unpack" bytes. Inspiration I've come across Ruby's Array#pack and String#unpack methods, bu...
In this part, we'll focus on supporting some more parts of the Faktory protocol. INFO The INFO command returns information about the Faktory instance...
Separating responsibilities Following on from Part 3, it's time for some refactoring. Thus far, all of the code has been in the TcpClient, but it mak...
At this point, I'll take a break from Faktory-focused functionality to address the shortcomings I raised at the end of the last part. Specifically, I...
This is a re-post of an article I wrote for my company's blog. Here's a story of how we improved our CI run times in one of our core Ruby services by...
I want to share a little algorithm I wrote to solve a puzzle. It's fairly basic computer science, but I feel a bit proud of it because I worked throu...
Now I'll turn what I did in Part 1 into code. First, I'll set up a new Composer project. My composer.json looks like this (truncated): { "require...
My recent queue foray put me on the scent of Faktory, a language-agnostic queue server made by Sidekiq's author. I noticed there wasn't a good PHP cl...
No big revelation here, just writing this as a reminder to myself next time I try curl localhost from WSL and it doesn't work: Don't use localhost o...
This post is part 4 of a series where I build a task queue system. Other parts: Part 1 Part 2 Part 3 Before we continue, at this point, you'd have...
This post is part 3 of a series where I build a task queue system. Other parts: Part 1 Part 2 Part 4 Error handling Right now, when an error happe...
I thought I understood Ruby's Module class, but nope. While reading Jeremy Evans' Polished Ruby Programming, I looked deeper and found some confusing...
This post is part 2 of a series where I build a task queue system. Other parts: Part 1 Part 3 Part 4 Next, I'll beef up my queue library with some...
This post is part 1 of a series where I build a task queue system. Other parts: Part 2 Part 3 Part 4 Motivation Some time ago, I came across a pos...
This post was inspired by this Twitter conversation. The tweet asserts: I should be able to use pnpm while my teammates use yarn or npm, without iss...
A quick post to document some specific behaviours I encountered with PHP 8's Attributes that aren't in the official docs. 1. Inheriting from an attr...
I had a use case some time ago where base64 saved my ass, and I thought I'd write a short refresher for myself on what it can do, and how it can be a...
While writing my custom serialization format, I spent a while working with byte streams, strings and encodings, so I figured I'd do an article on tha...