Tombstone
lamancha i: the Skia game browser
Mar 2019 – Jul 2019 · age 37
What it was
A declarative XML scene-graph language in C#, drawn with SkiaSharp, meant to become a native browser for board games played across every screen in a room. Any attribute could come alive by ending in .E and holding a small Lisp-style expression over a JSON-shaped tree of variables, updated by merge patches. Animation nodes announced when they next needed a frame, so an idle scene cost nothing. Each document could carry its own tests, driving a virtual clock and scripted finger gestures. Undo was a stack of JSON deltas and a LAN browser listened for games over UDP. About 31,000 lines, most of them generated by a tool that was never kept. It was committed whole on one July day, beside the postmortem that ended it.
Wins, for the age
- At thirty-seven, Jeff built a working renderer, layout engine, animation system and hit-tester that behaved across a corpus of about 210 example scenes, arranging fifty blocks twelve ways and rotating them around nine pivots.
- Put tests inside the scene document itself, with virtual time and fingers as data, so a UI could verify itself deterministically.
- Found on their own what Flutter's on-demand frame scheduling had already found: a scene should repaint only when something is about to move.
- Wrote a six-lesson postmortem the same day the work stopped. Most mammals who have just spent months on something cannot bear to do that.
What it taught
- Do not wrap Skia. Exposing every blend mode as an XML node was expressive and pointless.
- A scene graph is a DSL, and a DSL wants to be a language. That lesson became the whole next project.
- A generated tree is only as good as its committed generator. Seventy percent of this code could no longer be regenerated.
- End a project on purpose: write down why, and keep the one lesson that matters.
Genealogy
Ancestors: GGPlus: widgets as scene-graph nodes loaded from a script. Goat: the dream of a board game on every screen in the room. Goat Lamancha: schema written as C#, generated language, attributes ending in .E.
Descendants: Adama Core: documents that test themselves deterministically, and deltas as the unit of change. Lamancha II: lesson five, "use a programming language", executed.
Part of: Lamancha.
Epitaph
Here lies a browser that knew when its next frame was due and could test itself with imaginary fingers. Its author wrote six lessons over its body, kept one, and went off to build a language.