Almost a year ago, I began writing a book about observability. I had a vision—a small book designed to explain the basic ideas of observability to ...
How do you know that an algorithm is O(n) (or O(log n) or O(1), etc)? The first (and correct) answer is by analysis: if your algorithm loops over a s...
I've talked a good deal about observability, tracing and instrumentation in the past. Recently, I decided to try out some new things in those areas, ...
Some time ago, I was investigating an error report from Sentry on Tentacle. I noticed something baffling: the URL wasn't mine. The error was definite...
Hi! Still working on the upgrade tool from last time. As we saw, the current implementation works, but there are a few issues. There are three main o...
Recently, I released Scribe version 3. It introduced a few changes to the config file, and it came with a little utility: run php artisan scribe:upgr...
I maintain Scribe, a library for automatically generating your HTTP API documentation from your codebase. When you run the generate command, Scribe f...
Okay, back again. Thus far, we've seen the limitations of a single-threaded architecture in achieving concurrency (Part 1). Then we saw how coroutine...
New to this series? Check out Parts 1 and 2 first. Last time, I wrote about how coroutines help enable concurrency, and how they work in JavaScript....
Part 1 of this series is here. Coroutines are interruptible functions. They're functions that pause at specific points and allow the runtime to resum...
Over the past few weeks, I've found myself encountering concurrency problems and discussions in a variety of places. I understand the basic principle...
Lockfiles are common in many dependency management systems today — package-lock.json, composer.lock, and so on. We often don't think much about the...