Notes on .NET, XAF, and building things
Twenty years of XPO, application frameworks, and lately a lot of applied AI. 342 articles and counting.
Browse by topic
All topics →Latest articles
View all →
What Is Tiny Corp, and Is tinygrad Open Source? I Ran It on My Mac
Tiny Corp is George Hotz's company, and tinygrad is its deep-learning framework: a PyTorch-like library small enough to read, with its own compiler. Yes, it's open source, under the MIT licence. I installed it on my Mac Studio: it picked the GPU on its own, fused a 'giant' matrix product into one kernel running at 3.5 TFLOPS, and trained MNIST to 98% in about 11 seconds. Then I benchmarked it against MLX and PyTorch on the same training run: MLX is still fastest, but with its kernel search on, tinygrad's own generated code matched Apple's. Here's what tinygrad is, how the company makes money, and who it's for.

What Is a Tokenizer? Why the Same Sentence Costs More in Russian Than in English
Before a model sees a single tensor, a tokenizer chops your text into pieces. Which pieces depends on the language. I ran the same three sentences in English, Spanish, Russian and Chinese through four real tokenizers: GPT-2 needs 5.4× more tokens for Russian than for English, while Qwen3.5 needs fewer tokens for Chinese than for English. Here's how tokenizers work, why languages pay different prices, and an interactive explainer to see it yourself.

Owning a Formula 1 Car Doesn't Make You a Driver: AI Tools, Experience and the Minority Report
Today anyone can write software: agents and models like ChatGPT, Claude, DeepSeek and Kimi will write it for you. But owning a Formula 1 car doesn't make you a Formula 1 driver. I built a model training pipeline, had it reviewed by four different AI models, and was sure it had no errors. Then my partner Pedro, who thinks about users and flows instead of code, found flaws in it in an afternoon. Here's what that taught me about experience, perspective, and why good code still comes from teams.

Where Do a Model's Weights Come From? I Trained One From Nothing, in Spanish and English
I've written about adjusting a model with LoRA, but where does the model come from in the first place? It starts as random numbers. To show it, I trained a tiny language model from nothing on Don Quijote, in Spanish and in English, on my Mac Studio: about 6 minutes each. At step 0 it writes noise; at step 5,000 it writes Cervantes-flavoured sentences. Here's how weights are born, why they start random and not at zero, and how my toy compares with a real model.

Why My Chinese Reports Skipped Records: Alphabets, Case and Tokenization
To a computer every letter is a number, and 'A' and 'a' are different numbers, exactly 32 apart. About 20 years ago that fact made my reports in Shenzhen skip every item with a Chinese name. The same fact still shapes how AI tokenizers split text: 'HELLO' costs more tokens than 'hello', and the Russian word ШКОЛА costs 10 tokens in GPT-2. Here's how alphabets, case and bytes work, with an interactive explainer.
More topics
All topics →
What Is a Tensor? AI Explained With Boxes of Numbers
Every AI model you've ever used is made of one thing: tensors. A tensor is a box of numbers with some number of dimensions: a scalar, a vector, a matrix, or a stack of matrices. Text becomes tensors, the model multiplies them by weight tensors layer after layer, and learning is nudging those weights a tiny bit at a time. This post explains it with an interactive explainer you can play with, and shows where LoRA and quantization fit.

Microsoft Just Shipped Jev's API: Microsoft-Decision-1 vs Jev, Tested From C#
On 9 October Microsoft put Microsoft-Decision-1 into Foundry: a System One model that picks instead of writing, at exactly Jev's price. The surprising part isn't the model, it's the wire format. It serves Jev's System One API field for field, so one C# client now talks to Jev, to Microsoft, and to a free local open-jev. I ran 48 labeled support tickets through Decision-1 and open-jev, hit five Foundry traps on the way, and found a bug in my own earlier Jev client.

Can a small model learn a programming language nobody has ever seen?
Every time a small model writes clean code, there's a question behind it: did it learn that, or just remember it from training? So I built an experiment where remembering is impossible — I invented a .NET language called Kite.NET, gave it a compiler, and taught a 1.5B model to write it. Before training it passed 0% of the exam; after, 69.4%, on kinds of problems it had never seen.

Designing Kite.NET
Kite.NET had to be three things at once: new (no model could have seen it), visibly not C# (so a fallback is obvious to me and the compiler), and small but real enough to run on .NET. This is a tour of the language that came out — records, pipes, when-matching, let vs let mut — and every example compiles and runs.

Compiling a made-up language to .NET
A made-up language needs a compiler before any model can learn it, because the compiler is what grades every answer. Here's the one decision that shaped everything: how to get a new language onto .NET. I went through Roslyn with #line markers — the same trick Razor uses — to keep the .NET analyzers and point every error back at the Kite source.