Archive
MJ Convento
-
PHP 8, three months in: the JIT was the least of it
We moved twelve app servers from PHP 7.4 to 8.0 in January. The JIT did nothing measurable and is switched off. The comparison semantics and internal TypeErrors are what actually cost us a night.
-
Laravel 8, and why we stayed on Blade
Notes from taking a small client dashboard to Laravel 8.15: namespaced seeders, class-based factories, squashed migrations, job batching. Then the argument we actually had, which was whether to adopt Livewire, and why we did not.
-
Messenger, and the queue we should have built two years earlier
We ran background work off a cron and a pending_jobs table for five years. Replacing it with Symfony Messenger took three weeks and taught me what retries, a failure transport and mortal workers are actually for.
-
Typed properties, six weeks in
Six weeks on PHP 7.4 across twelve boxes. Typed properties shortened our classes and introduced a silent failure mode in the serializer, preloading gave back six milliseconds, and the deprecation sweep found two real bugs.
-
Redis in front of a report that was still slow
Caching a nine second aggregate report cut the median to 81 milliseconds and pushed the p99 to nearly fifteen seconds, because every expiry started a stampede. What the lock, the stale copy and the cache keys look like now.
-
JSON_THROW_ON_ERROR earned its keep
A truncated partner payload decoded to null for nineteen days and nobody noticed, because json_decode reports failure with the same value it returns on success. One PHP 7.3 flag fixed that.
-
Vue 2 in a Symfony app, before and after a build step
Three islands of Vue 2 inside Twig-rendered pages, first from a CDN script tag and then through Webpack Encore. The Twig delimiter collision, the options API contract for v-model, and the totals that disagreed by one centavo.
-
Docker for local PHP development, two years in
Two years after replacing per-machine PHP installs and a shared dev server with Compose. The composer timing that won the argument, the osxfs flags that make bind mounts survivable, and the uid problem still unsolved.