RSSAmplifier

Blog

Shalvah's Blog

blog.shalvah.meRSS feed ↗24 posts

Latest posts

DIY Smart home project: Restoring the wall switch

Background
In a previous post, I wrote about building a presence sensor to automatically turn my bedroom lights on and off (smart bulbs connected to ...

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

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

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

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

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

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

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

An exploration of vector search

With the AI hype going around, you may have come across the phrase 'vector search', 'vector database', or 'embeddings' lately. Here's an exploration ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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