AI from scratch
3 parts so far
What a language model actually is and how one works, built from a toy that adds two digits up to the machinery behind the real thing. Plain language, runnable code.
Notes from a Lead Cyber Security Architect in Munich. Automation, GitOps, self-hosting, and whatever I'm currently taking apart to see how it works.
3 parts so far
What a language model actually is and how one works, built from a toy that adds two digits up to the machinery behind the real thing. Plain language, runnable code.
A runnable PyTorch script that trains a tiny transformer on all 100 single-digit addition facts and decodes them character by character, with real verified output.
ai-from-scratch · part 3
How to spawn a throwaway Jupyter environment on NixOS, macOS, any Linux, or Windows, without committing to an installation. With collapsed extras for what this site's own notebooks need on top.
A plain-language, no-code walkthrough of building the smallest useful language model: one that adds two single-digit numbers.
ai-from-scratch · part 2
Where the models everyone talks to sit in AI, the one thing they actually do, and the path text takes through one: the architecture the rest of the series fills in.
ai-from-scratch · part 1
Moving thirteen VMs from libvirt to Proxmox with dd and nbdcopy over SSH, then asking Hetzner to route the /29 to its new home: the request, the flip, and wiping the old server.
hetzner-migration · part 4
An OpenVPN tunnel between the old pfSense and the new OPNsense, and the per-address routine that moves one IP across it: a VIP conversion on one side, a route or an alias on the other, and an AAAA swap for IPv6.
hetzner-migration · part 3
Setting up the new Proxmox host before anything moves: taking over the firewall, keeping Hetzner happy about MAC addresses, and a bridge design that can accept IPs one at a time.
hetzner-migration · part 2
Why the old server had to go, what replaced it, and why the networking makes a naive migration impossible.
hetzner-migration · part 1