Notes on .NET, XAF, and building things

Twenty years of XPO, application frameworks, and lately a lot of applied AI. 297 articles and counting.

Browse by topic

All topics →

Latest articles

View all →
Aug 5, 20269 min read

Open Weights Doesn't Mean Local — and "Same Model" Doesn't Mean the Same Model

Three words get used as if they were one: open weights, open source, and local. They're independent properties, and collapsing them leads people to buy privacy they didn't get. Then I went and pulled the live provider list for one open-weight model and found something worse: thirteen companies serving Llama 3.3 70B under one name, at four different quantization levels — one of them literally labelled 'unknown' — with a 7x price spread, five that can't do structured outputs and two that won't accept a seed. Same weights. Not the same product.

Aug 5, 202612 min read

A Barrel Is a Barrel. A Token Is Not a Token.

Three posts ago I set out to distill a model, measured first, and ended up routing instead. Looking back at those numbers, they were not really a benchmark — they were a substitution test, the thing commodity markets use to decide whether two sellers are selling the same good. So here is the economics underneath it: what a commodity actually is, why tokens are becoming one grade at a time, why the eval harness turns out to be the grading standard, and the three places the analogy breaks — starting with the fact that the unit everybody prices in isn't standardized at all. Also: why this is a post with an expiry date, and the three things worth re-measuring every six months to see how much closer tokens have moved to being a commodity.

Jul 27, 20268 min read

The Foreigner's Checklist: Actually Incorporating in El Salvador and Getting Qualified

Part one made the case: fifteen years at zero income tax for a qualifying tech company in El Salvador. This is the mechanics — the one-dollar company you incorporate online, what changes when you don't have a Salvadoran ID, the one-month approval clock with its deadlines written into the regulation, and the obligations you carry for the next fifteen years. Plus a claim-by-claim citation table so you can check every number against the decrees yourself.

Jul 27, 20266 min read

Fifteen Years of Zero Income Tax: El Salvador's Tech Law Nobody Outside the Country Has Read

When someone says 'incorporate somewhere tax-friendly,' the reflex list is Dubai, Estonia, Singapore, Puerto Rico. El Salvador is not on that list and it should be. Since 2023 a qualifying tech company here pays zero income tax, zero capital gains, zero municipal tax on net assets and zero import duty — for fifteen years. This is part one: what you actually get, and the four rules that disqualify most applicants before they start.

Jul 27, 202610 min read

Before You Distill, Measure: Racing DeepSeek Against Opus on 36 Office-Document Tasks

Last post I argued that a small model pointed at one narrow job beats renting a generalist for every call. Then I went to actually do it, and learned that the step before distillation is the one everybody skips: measuring whether the cheap model is even worse. We raced Claude Opus 4.8 against DeepSeek-V4-Pro on 36 office-document tasks through an identical grader. Two formats out of three came back at exact parity — and the first result we got was a harness bug wearing a model's name. Updated with the follow-up: in-context teaching went 7/10 to 8/10 while breaking an unrelated task, and chasing the last failures showed the whole PowerPoint gap was API guessing, not reasoning — one retry on the traceback took it to 9/10.

More topics

All topics →
Jul 27, 20265 min read

You Don't Need a Frontier Model for That: Distilling a Small Model for One Narrow Job

Every time a task shows up that has language in it, the reflex is the same: route it to the biggest model we have access to. I had that reflex too — right up until the invoice arrived. You're not paying for the answer, you're paying for the model's ability to also write sonnets, on every call, forever. Here's how distillation gets you out of that, when it's worth doing, and the three ways it goes wrong.

Jul 4, 20266 min read

There's No ADB for iPhone: Automating React Native UI Tests on Real iOS Devices

If you come from Android like I do, you have a comfortable habit: plug in a device, talk to it over adb, script everything. So the natural question when you ship the iOS side of a React Native app is — can I do the same on a physical iPhone? The short answer is yes, but. And the 'but' lands squarely on the thing I care about most: running on a real device instead of a simulator.

Jul 4, 20265 min read

Speech-to-Text in React Native: Four Ways to Reach Android Parity

My React Native app transcribes voice on iOS just fine — Apple hands you a recognizer and you're done. Then I went to reach parity on Android and found the usual mobile story: the easy path exists, but it's a different easy path, with different tradeoffs. Here are the four routes I weighed, and the two questions that actually decide which one you pick.

Jul 3, 20264 min read

You Don't Need a GPU for Speech: Self-Hosting Whisper and TTS on a CPU VPS

The reflex when someone says 'speech-to-text' or 'text-to-speech' is to reach for a GPU. For real-time voice on a server, you mostly don't need one. The thing that actually makes CPU speech fast isn't CUDA — it's a set of instruction sets your cheap VPS already has. Here's how I run both transcription and synthesis on a plain CPU box, always-on, with no API keys and no GPU bill.

Jul 3, 20265 min read

FOMO, JOMO, and FOWT — The Fear of Wasted Tokens

I pay for the max plans — Codex and Claude Code — plus a monthly Azure token allotment. Here's the thing nobody warns you about: those are monthly quotas. Use them or lose them. And I've caught myself genuinely afraid to oversleep or take a day trip, because that's quota I'll never get back. That feeling needed a name, so I gave it one: FOWT, the Fear Of Wasted Tokens.