The Garden
12 notes growing. 🌱 seedling · 🌿 budding · 🌲 evergreen.
Not sure where to start? Follow a trail →
- curl olragon.com: walk the garden from your terminal 🌱 seedling · EN · VI
This garden reads fine with curl: coloured text, clickable links, pictures drawn in characters. Same address, same HTML, no browser needed. How it works, why curl | bash here is less scary than it sounds, and the times the terminal played tricks on me. - HiMedia Q10 Pro on mainline Linux 6.18 🌿 budding · EN · VI
A working reference for anyone holding a HiMedia Q10 Pro (HiSilicon Hi3798CV200) who wants it on mainline Linux with no serial console: where it gets stuck, which way I went, what order to do it in, what works with measurements, what doesn't yet, and what is still unfinished. - How do I browse my Android phone from a Mac? 🌿 budding · EN · VI
macOS has no MTP and macFUSE wants a Recovery boot. But macOS already ships a WebDAV client that needs neither. adbdav serves the phone over adb on loopback and mounts it. Where it gets stuck, which way I went, and the three adb round trips that decide whether it feels fast. - olragon.css: drop it in, skip the classes 🌿 budding · EN · VI
One small stylesheet that styles plain semantic HTML — no classes, no build, no deps, system fonts only. Drop it in and a bare page looks cared-for. This page is the demo. - What does Papa Dragon believe, and how sure? 🌱 seedling · EN · VI
The garden's book of beliefs: eleven things I hold right now, sorted by how sure I am. Four I'd bet on, four I lean toward, three I'm still guessing. Each one points back to where it won or lost, and when I change my mind I add a line and never delete the old one. - What does Vietnamese lose when Google Fonts cuts a font in two? 🌱 seedling · EN · VI
A Vietnamese font from Google reaches your machine as two files, so a letter pair split across them gets no kerning. A fix log concluded that kerning was therefore useless for Vietnamese, and dropped it. I measured 36,729 letter pairs in two browsers: 58 to 74% of the kerning still works, and only the part touching stacked-diacritic letters is lost. Dropping it for 21.7 KB is still fair, for a different reason. - What is this garden built from, and why so small? 🌲 evergreen · EN · VI
A colophon. One runtime, no framework, native HTML5, system fonts, zero trackers, on a machine small enough to fit in my head. Notes on the small, stubborn choices behind it. - Which system fonts draw every Vietnamese letter? 🌱 seedling · EN · VI
The garden loads no web font, so whether Vietnamese looks right depends on the fonts already on your machine. I counted all 146 Vietnamese letters in every font on one Mac: Palatino lacks exactly ớ, Iowan lacks the whole ơ and ư family, Comic Sans has 54. And Chrome ignores ui-serif, so for four months every Chrome reader on a Mac saw Times New Roman without my knowing. - Why did a page with no title score 100 for SEO? 🌱 seedling · EN · VI
I work on an SEO checker. Fail every rule about title, viewport, robots.txt and sitemap, 105 of 325 rules in all, and it still gave 100. The culprit was a ?? 0 in the scoring code. Around it, two weeks of fixing the same disease in other shapes: checks with nothing to do with what they check. - Why did pkill -f cat close every app on my Mac? 🌱 seedling · EN · VI
One of my AI agents wanted to clear a hung cat, so it typed pkill -f cat. The -f flag matches the whole command line, and /Applications contains cat, so nearly every app on the machine got told to quit, the agent's own supervisor included. Counted again on my machine today: 183 processes match, 130 of them only because they live in /Applications. A hook now blocks that kind of command before it runs. - Why doesn't Bun.spawn see the env var I just set? 🌱 seedling · EN · VI
Set process.env.X in a Bun script, call Bun.spawn without passing env, and the child never sees X. It gets the environment the script started with. I measured seven ways to start a child on 12 Bun versions, 1.0.0 to 1.4.4: Bun.spawn misses on all of them, and node:child_process missed up to 1.3.14. The fix is to pass env: process.env explicitly. - Why doesn't RAM go down after I collect the garbage? 🌱 seedling · EN · VI
A server held nearly 2 GB, and its biggest culprit held nothing: one index build left about 1 GB behind. Bun.gc plus Bun.shrink afterwards gave back 7 MB. I measured it again on 277 thousand real lines: collecting after the build leaves 1,110 MB, collecting during it leaves 699 MB, at the price of about 1 second. In a clean process the gap is only 20 MB, so measuring one holder at a time never shows it.