- Collectors class
A stream pipeline has to end somewhere. collect is the general-purpose ending, and the Collectors class supplies the recipes — turn this stream into a list, a map, a grouped report, or one joined string. There are dozens of them and you do not need dozens. Six do almost all the work in practice,…
- Omega, Theta and the Rest of the Notation
Big O is an upper bound, Omega is a lower bound and Theta is both at once. What each one actually claims, why saying an algorithm is O(n^2) does not mean it is slow, and the difference between a bound and a case that people conflate constantly.
- Angular – The Component Lifecycle
The hooks Angular calls on your component and the order they fire in: `ngOnInit`, `ngOnChanges`, `ngAfterViewInit`, `ngOnDestroy` and the rest. The striking thing about the demo app is how few it uses — one `ngOnInit` in thirty components — because signals, `effect`, `afterRenderEffect` and `DestroyRef` cover what they used to. This lesson is mostly about which ones you can now stop reaching for.
- Docker – Don't Run as Root
A container runs as root unless you say otherwise, and root in the container is root on the kernel it shares with you. Creating and switching to a non-root user, why port 80 then stops working, keeping secrets out of image layers, scanning with `docker scout`, and pinning a base image by digest.
- Hasura – Mutations
Writing through the API. `insert`, `update`, `delete`, their `_one` variants, `returning`, upserts with `on_conflict`, and the fact that several mutations in one request run in a single transaction while several requests do not. Also the harder question this track's demo app answers with a deliberate no: which writes belong in Hasura at all, and which belong behind your own API.