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...
In programming, serialization is the process of transforming data so it can be transferred, stored, or compared. You might have a variable in your pr...
One thing to look out for in Node.js: functions that may throw an error either synchronously or asynchronously (which, technically, is any function t...
In A Practical Tracing Journey, I described how I added tracing to a real-world app to get insights on how I could improve performance. One of the co...
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...