Writing

Build logs on how the projects were built, milestone by milestone, including the parts that broke.

  1. 2026-10-13
    glasswing explained · 1
    How a language model reads: from letters to numbersThe first step of every language model happens before any thinking: turning text into numbers. With the real tokenizer and the real word vectors of a model I trained, all of it interactive.
  2. 2026-10-13
    glasswing explained · 2
    What happens inside: attention, neurons, and a stream of numbersHow a stack of eight identical layers turns a list of word vectors into a guess for the next word: words looking at each other, neurons with surprisingly specific jobs, and the moment the right answer appears.
  3. 2026-10-13
    glasswing explained · 3
    Teaching it to write: 3.6 hours from noise to storiesHow 15.7 million random numbers became a model that writes children's stories: the loss, walking downhill, the learning-rate schedule, the real training run checkpoint by checkpoint, and how a word finally gets picked.
  4. 2026-10-13
    glasswing explained · 4
    A model in your browser: rebuilding it from scratch, and proving it's the sameTraining gave me a file of numbers and a Python program to run it. To make it run in a web page, I wrote the model again in Rust, checked it number by number against the original, and made it fast. A tour of the engine, with the real measurements.
  5. 2026-10-13
    glasswing explained · 6
    Serving a model to strangersThe same engine that runs glasswing in your browser also serves a real open model, SmolLM2, from a cluster in my flat to anyone on the internet, without a login. How a request gets there, what makes a model feel fast, and the limits that keep it alive. You can try it from this page.
  6. 2026-10-13
    glasswing explained · 5
    Finding an induction head in a 16M-parameter model I can watch thinkI trained a small language model, rebuilt it in Rust for the browser, and went looking for the circuit that lets it copy names. Two layers, three heads, and the moment the answer appears.
  7. 2026-10-12
    Site
    Rebuilding takodana.dev as a waystationWhy the home page is an orrery, why the site is a static export, and why it runs on a laptop in my flat instead of a CDN.
  8. Night Sky · M0
    Pinning everything: image digests, action SHAs and keyless signingWhy a tag is a branch and a digest is a commit, a CVE gate that only blocks what you can fix, and what cosign verify actually checks.
    coming
  9. Night Sky · M1
    Being polite to arXiv: a resumable OAI-PMH harvesterOne request every three seconds, resumption tokens, idempotent upserts and a checkpoint that only moves after a whole window.
    coming
  10. Night Sky · M2
    Hybrid search with pgvector and Postgres full textbge-m3 embeddings, HNSW, a stored tsvector and reciprocal-rank fusion in six lines of Python.
    coming
  11. Night Sky · M3
    Evaluating a retrieval system when you don't know astrophysicsLLM-written queries, pooled judging by two local models, a tie-breaker, a human audit at κ 0.81, and a regression gate in CI.
    coming
  12. Night Sky · M4
    Stopping an LLM from inventing citationsJSON-schema output, a deterministic citation check with retries, and tracing every call in a self-hosted Langfuse.
    coming
  13. Night Sky · M5
    SLOs and error budgets for a one-person serviceFreshness measured from the database, multiwindow burn-rate alerts, and why one late day uses up a 99% monthly budget.
    coming
  14. Homelab
    Kubernetes on a laptop's WSL2: what bit meMemory limits in .wslconfig, a misspelled section header, mount propagation, and reaching a GPU on another machine over Tailscale.
    coming
  15. Homelab
    GitOps with Argo CD: app of apps, Sealed Secrets and one shared chartHow every app on the cluster gets the same Deployment, NetworkPolicy and ServiceMonitor, and why secrets are sealed off-cluster.
    coming
  16. Homelab
    Self-hosting Langfuse: four services, one operator, two crashesCRD ordering, Helm lookup versus GitOps, and pinning every generated credential.
    coming
  17. Incident
    The fix was in Git, the pod was still crashingA JavaScript heap out of memory, exit code 134, and a sync operation that blocked its own fix.
    coming
  18. Incident
    The commit that never reached mainHow a "metrics missing" alert caught a process mistake, and the rule that came out of it.
    coming