- Docker Compose – Profiles, Overrides and Multiple Files
Not every service should start every time. Compose profiles put Elasticsearch, a message broker and a mail sink behind opt-in flags so the default `up` starts one container. Then `compose.override.yaml`, stacking `-f` files for dev and prod, and how `${VAR}` and `.env` interpolation works.
- Hasura – Migrations, Metadata and CI/CD
How a schema change gets from your laptop to production without anyone clicking in a console. What the Hasura CLI's migrations, metadata and seeds directories each hold, why metadata and migrations must move together, and the awkward question of who owns the schema when your ORM already runs its own migrations. Then a pipeline that applies both on merge, and the v3 equivalent built on `ddn supergraph build`.
- React – Error Boundaries
One thrown error in one component blanks the entire page — React unmounts the whole tree rather than show something broken. An error boundary is the only thing that stops it, it is still the one thing you need a class component for, and it does not catch event handlers or async code. Here is what to do about all three.
- Java 21 Virtual Threads
A virtual thread is a thread that costs almost nothing to create. You can have millions of them. That single change removes the reason most server code was written asynchronously, and it is the biggest thing to happen to Java concurrency in twenty years. The problem A platform thread — the only…
- Greedy Algorithms
Take the best-looking option at each step and never reconsider. Fast, simple, and correct only when the greedy choice property holds — with a worked case where greedy returns three coins and dynamic programming returns two, so you can see it fail.