Writing

Android, self-hosting, and the occasional personal reflection. 26 posts and counting.

Jul 16, 2026 · 07:0013 min
I Was Measuring the Wrong Weights
Two weeks ago I said the DGX Spark's bandwidth wall was physics, not a driver update — fast or big, pick one. Then I ran a 122B model on the same box at six times the speed of a 70B. The law was right. The number I kept feeding it wasn't.
Jul 4, 2026 · 06:009 min
I Bought the GPU Anyway
I bought Andromeda, a DGX Spark, to fine-tune models — but first I owed my last post a rematch. I re-ran the same local/free/paid LLM inference benchmark on 120 GB of Grace-Blackwell instead of a CPU NUC. It fixes the one thing the NUC got fatally wrong, hits a bandwidth ceiling I didn't see coming, and makes clear why the real reason I bought it isn't inference at all.
Jun 27, 2026 · 17:007 min
Reading Android Bench: scores, cost, and the efficiency trap
Google's Android Bench scores LLMs on real Android engineering tasks. A look at what the June 2026 leaderboard actually says — why the top is a statistical tie, where the real cost-efficiency winners are, and the trap hiding in the cost and latency columns.
Jun 24, 2026 · 21:0028 min
Putting an AI Agent Inside an Android App with Google's ADK
Google shipped ADK for Android in May. I built a Compose app — clean architecture, MVI, Hilt, persistent chat history — where a Gemini agent calls real on-device functions, and hit every sharp edge the docs don't mention.
Jun 21, 2026 · 21:0020 min
Android App Functions: turning your app into a tool an agent can call
A hands-on walkthrough of Android's experimental AppFunctions API. I build a small but complete notes app, expose four functions to on-device agents with @AppFunction, and trace exactly what the KSP compiler generates and how the system discovers and invokes them.
Jun 16, 2026 · 22:0024 min
Developing for Foldables — making your Compose UI fold-aware
Part 2 of the foldables series. We build an adaptive media player in Jetpack Compose that reacts to tabletop and book postures with Jetpack WindowManager, picks list-detail layouts with window size classes, and verify all of it on the Pixel Fold emulator.
Jun 12, 2026 · 04:006 min
From Window Seats to Boarding Gates
Written at 4 AM at a boarding gate, waiting for my first international trip with my mother. On how travelling with family has changed over the years — from 16-hour train journeys to nani ghar with comics, board games and window-seat fights, to flights, iPads and international itineraries.
Jun 5, 2026 · 21:004 min
The Routine Changed. So Did My Mind.
A few weeks into waking up at 6AM, I have enough distance now to say something I couldn't before: this wasn't just a schedule change. It quietly changed how I think about my days.
Jun 3, 2026 · 22:0013 min
Continuous Content, Gated Code: A Release Process for This Site
This site deployed on every push to main — blog posts and half-finished features alike. I wanted the opposite for code: a feature ships only when I cut a release, while blogs keep publishing the moment they merge. Here's the GitLab pipeline that does both, and the things that broke building it.
May 31, 2026 · 10:0027 min
How Claude Built a 1,500-Entry Fingerprint Dictionary Using 153 Parallel Agents
A deep technical look at the multi-agent workflow that scraped the entire awesome-selfhosted dataset — nine runs, every architectural failure, exact agent counts and token numbers per run, and how it ended with Python bypassing agents entirely.