Uncategorized

  • Window functions replace a habit

    8.0 went GA in April and the correlated subquery can retire. The plans before and after, the recursive CTE that replaces a loop, and the upgrade nobody expects.

  • PSR-15 middleware, and the interface it standardised

    Every framework had middleware and none of them agreed on the signature, so a piece of middleware was written once per framework despite doing the same thing. The…

  • Descending indexes are real in 8.0

    Earlier versions accepted DESC in an index definition and ignored it, which is worse than rejecting it because the query looked optimised and was doing a filesort. It…

  • A stream is not a list, and XADD is not RPUSH

    A list used as a queue loses the message when a consumer crashes mid-work, because BRPOP removes it and there is no record that anything was in flight.…

  • gzip_static serves a file you compressed at build time

    Compressing the same unchanging JavaScript bundle on every request is work done thousands of times that could have been done once. With gzip_static on, nginx serves app.js.gz when…

  • opcache.validate_timestamps=0 needs a deploy that clears it

    Turning off timestamp validation removes a stat call per file per request and means PHP never notices a changed file — so a deploy that does not reset…

  • Wildcard certificates, and the DNS challenge

    ACME v2 landed in March and wildcards need a different proof. The certificate is the easy part; the API token that can rewrite your zone is not.

  • MySQL 8.0 made utf8mb4 the default, and utf8 still lies

    The character set named utf8 in MySQL has always been a three-byte subset that cannot store an emoji or several CJK characters, and 8.0 makes the four-byte one…

  • What the regulation actually asks of a schema

    The deadline is in May and the work is not a cookie banner. An inventory first, because everything else depends on knowing which tables hold what.

  • Profiling with a sampling profiler instead of an instrumenting one

    An instrumenting profiler records every function call, which changes the timings it is measuring — small fast functions look disproportionately expensive because the overhead is per call. Sampling…