Uncategorized

  • A build secret is mounted for one RUN and lands in no layer

    A build argument is recorded in the image history whether or not it was used, so a token passed as ARG is readable by anybody who can pull…

  • Full-text search that did not need a search engine

    A search cluster running for one feature on 40,000 rows. The operational cost was larger than the feature it served.

  • Symfony 6.1 lets a controller return a plain object

    6.1 adds argument and return value resolution that removes the serialisation boilerplate from a controller action. Moving serialisation out of the action makes the controller shorter and moves…

  • A cgroup limit is not what /proc/meminfo says

    A container reads the host’s memory and CPU counts from /proc, because those files are not namespaced, and anything sizing itself from them sizes for the wrong machine.…

  • An audit record needs before, after and an actor

    A log line saying that an order was updated answers none of the questions asked during a dispute. Recording only the changed fields rather than the whole model…

  • Exemplars link a metric to a trace

    A latency histogram tells you the 99th percentile is four seconds and cannot tell you which request that was, and an exemplar attaches a trace id to a…

  • Rendering a block template in a test

    A block theme has no PHP for a unit test to call, and the nearest equivalent is rendering the template and asserting on the markup. go_to sets the…

  • random_int, never rand, for anything that matters

    rand and mt_rand are seeded generators whose output is predictable from a small number of samples, and they are still the first result for “php random number”. The…

  • readonly plus a wither means a constructor call

    clone copies the initialised state of a readonly property, so modifying the copy throws and every wither has to construct a new instance. The verbosity compounds: a value…

  • Flysystem 3 returns false less and throws more

    The filesystem abstraction moved from returning false on failure to throwing, and Laravel 9 wraps that in a setting rather than a change. Defaulting to the old behaviour…