Shalvah

Shalvah @shalvah

About: Builder, explorer, writer. APIs, dev tools, automation. Advocate of simple design. I blog at http://blog.shalvah.me

Location:
Lagos, Nigeria
Joined:
Jan 2, 2018

Shalvah
articles - 73 total

Dealing with domain modelling mismatches on external services

Integrating with external services is a pain. The technical challenges—reliability, performance, caching, downtime, and so on—are well-known and ...

Learn More 1 0Nov 23 '25

All decisions are wrong, but some are better

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

Learn More 4 1Nov 4 '25

Making non-atomic actions atomic using intents

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

Learn More 2 0Oct 27 '25

DIY Smart home project: Presence-activated lights

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

Learn More 13 1May 1 '25

In defence of complexity

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

Learn More 2 0Dec 24 '24

Reflections on Year 1 of my engineering studies

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

Learn More 0 0Oct 18 '24

Exploring software design problems and solutions: Transactions and side effects

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

Learn More 0 0Jul 19 '24

Lessons for me on leadership, from a film about apes

Watching Dawn of the Planet of the Apes gave me some thoughts about dictatorship, and more broadly, leadership. Mostly regarding at work, but also...

Learn More 1 0Apr 21 '24

Learn SVG by drawing an arrow

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

Learn More 0 0Jan 11 '24

Building a PHP client for Faktory, Part 6: Higher-level usage

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

Learn More 1 0Nov 25 '23

Exploring concurrent rate limiters, mutexes, semaphores

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

Learn More 2 2Sep 11 '23

High and low cardinality

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

Learn More 0 0Aug 13 '23

Packing and unpacking bytes

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

Learn More 0 0Jul 22 '23

Building a PHP client for Faktory, Part 5: Protocol

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

Learn More 1 0Jul 2 '23

Building a PHP client for Faktory, Part 4: Refactoring

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

Learn More 0 0May 7 '23

Building a PHP client for Faktory, Part 3: Making development easier

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

Learn More 0 0Apr 23 '23

How we cut down our CI build times by 50%

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

Learn More 1 1Apr 20 '23

Solving a logic puzzle

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

Learn More 1 0Feb 2 '23

Building a PHP client for Faktory, Part 2: Converting to code

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

Learn More 0 0Jan 27 '23

Building a PHP client for Faktory, Part 1: Talking over TCP

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

Learn More 1 0Jan 27 '23

Connecting to a Windows server process from WSL

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

Learn More 1 0Jan 23 '23

Building a task queue, Part 4

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

Learn More 2 0Dec 29 '22

Building a task queue, Part 3

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

Learn More 2 0Dec 25 '22

Ruby's Module class drives me crazy

I thought I understood Ruby's Module class, but nope. While reading Jeremy Evans' Polished Ruby Programming, I looked deeper and found some confusing...

Learn More 2 0Nov 20 '22

Building a task queue, Part 2

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

Learn More 1 0Nov 11 '22

Building a task queue, Part 1

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

Learn More 3 0Nov 1 '22

Why aren't Node.js package managers interoperable?

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

Learn More 1 0Oct 7 '22

PHP 8 attribute quirks

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

Learn More 5 0Sep 17 '22

Base64's goodness

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

Learn More 6 0Sep 4 '22

String encodings

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

Learn More 8 1Feb 20 '22