Uncategorized

  • array_is_list, and twenty years of guessing

    Deciding whether an array was a list or a map had been done with array_keys($a) === range(0, count($a) – 1), which allocates two arrays to answer a question…

  • A dependency inventory generated in the pipeline

    An inventory maintained by hand is out of date the day it is written; one generated by the build is correct by construction. Three sources are needed because…

  • Methods on an enum replace a match in six places

    The same match over order status appeared in a controller, two Blade templates, a mailer and an exporter, and adding a case updated four of the five. Moving…

  • A readonly array is not deeply immutable

    readonly prevents reassignment of the property and says nothing about what the property points at, which is obvious for objects and surprising for arrays. The array case works…

  • final on a class constant, which was previously impossible

    A class constant could always be overridden by a subclass, silently, and there was no way to say it should not be. This matters most for a constant…

  • A deploy that can be undone in ninety seconds

    The rollback plan was “redeploy the previous tag” and it took nineteen minutes. Rolling back is a build, and a build is not fast.

  • An enum can implement an interface but cannot extend

    Enums are final, cannot extend anything and cannot be extended, which removes a set of designs that class constants had allowed. Implementing an interface is what makes an…

  • Answering ‘are we affected’ should take minutes

    The value of an inventory is entirely in query time, and a set of JSON files nobody can search is a compliance artefact rather than a tool. The…

  • readonly locks on first write, not at construction

    A readonly property is not initialised-at-declaration; it is write-once from inside the declaring class, and the difference decides what a wither method can do. The property has no…

  • A randomised test order, in CI, on every push

    Tests that pass in file order and fail in any other order are testing the order, and the coupling is invisible until something is added. The seed being…