Notes on .NET, XAF, and building things
Twenty years of XPO, application frameworks, and lately a lot of applied AI. 295 articles and counting.
Browse by topic
All topics →Latest articles
View all →
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.

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.

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.

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.

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.
More topics
All topics →
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.

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.

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.

What Is Token Maxxing? Spending Compute to Buy Correctness
There's a piece of slang making the rounds in the AI dev world: token maxxing. Strip away the meme and it names something real — the deliberate choice to spend more tokens on a problem because tokens have become the cheapest thing you can throw at it. Here's what it actually means, when it works, and when you're just lighting money on fire.

The Vision Model That Wasn't There: DeepSeek V4, a Vanished Paper, and a Recipe You Can Use Today
I set out to wire DeepSeek V4's much-described image-understanding into a side project — the model that 'calculates bounding boxes and relative dimensions step by step.' One problem: DeepSeek V4 can't see images at all. This is the detective story of how I found that out three different ways, the vanished research paper that explains where the claim came from, and the lesson that mattered most — a method is portable even when a model isn't. So I ported the recipe to Gemini and measured it.