Notes on .NET, XAF, and building things
Twenty years of XPO, application frameworks, and lately a lot of applied AI. 278 articles and counting.
Browse by topic
All topics →Latest articles
View all →
imgproxy: Getting Back the One Thing I Missed from Appcelerator Titanium
Sharing the same images between a mobile app and a web app — each sized right for its screen — is a problem I've been chasing for years. Back in my Appcelerator Titanium days, the cloud backend solved it for me: upload a photo once, get back properly sized versions for whoever asked. Then that service went away. imgproxy is how I get that capability back — self-hosted, open source, and serving every app in my fleet from a single URL.

Getting Started with Microsoft.Extensions.AI — Part 4: Tools, Functions & the Agent Framework
Let's empower our LLMs to interact with the real world by letting them call our C# code, then see how the Agent Framework elevates this to autonomous orchestration.

What Is Postiz? Self-Hosting Your Social Scheduling (and the Gotchas Nobody Warns You About)
Postiz is an open-source, self-hostable social media scheduler — think Buffer or Hootsuite, but running on your own box with your own API key. I moved my channels onto it and it's genuinely good. It also taught me four things the README is quiet about: a YouTube token that dies every seven days, two completely separate auth systems, a reschedule endpoint the public API can't touch, and the fact that some platforms simply won't talk to a personal account at all — they demand a business or creator account first. Here's what Postiz is, why you'd self-host it, and the gotchas so you don't lose an afternoon to them like I did.

A Practical Guide to Cheap and Local AI: OpenRouter, Gateways, and Local Models
In Part 1 I argued that price is a feature and that the real skill is right-sizing the model to the task. This is the how-to: the three tiers of cheap inference (aggregators like OpenRouter, a self-hosted gateway, and fully local models), how to point your coding tools at them with bring-your-own-key, how to route a request to the cheapest model that can do the job, and how to run a blind eval so you actually know your cheap model is good enough. Tools and config, no vendor lock-in.

What Is OpenAI Codex Sites? Prompt-to-Hosted-App, With a Catch
OpenAI's Codex picked up a feature called Sites: describe an app in plain language and Codex builds it, runs it, deploys it, and hands you back a live hosted URL — no deploy pipeline of your own. It's a genuinely interesting glimpse of where agents are heading. It also ships with some walls worth knowing about before you get excited. Here's the honest rundown.
More topics
All topics →
Price Is a Feature: The Case for Cheap and Local AI Models
I've got the local-model disease, and I don't want a cure. New cheap and open-weight models drop every week, prices on the frontier keep climbing, and somewhere in there is a quiet truth most agentic-coding hot-takes miss: price is a feature. A model that costs cents instead of dollars doesn't just save money — it changes how you work, removes the mental tax on every prompt, and makes 'right-size the model to the task' the actual skill. Here's why I think cheap-and-local is the most important trend in AI tooling right now.

LM Studio 0.4.16: Your Local Models Just Went Mobile
LM Studio is the app I reach for whenever I want to run a model on my own hardware, and the 0.4.16 release adds the thing I didn't know I wanted: a mobile app called Locally that lets me drive my big desktop models from my phone over LM Link. Here's what's new, and why this is a bigger deal than a point release sounds.

WWDC Deep Dive, Part 3: Xcode 27's Real Story — the Agent Client Protocol, MCP, and the End of the Simulator
The OS was a tick year, but Xcode 27 is where Apple made a serious play. It speaks MCP, it added a real chat experience — and the sleeper feature is the Agent Client Protocol, which lets you plug your own CLI harness (Copilot, Claude, and the rest) into native Xcode. Meanwhile the simulator is being replaced by a Device Hub, and the whole thing points at the 'closing the loop' wave that native developers have been late to. Here's what changed in the part of WWDC that actually affects how you write code.

Static Analyzers: How They Work and Why You Actually Need Them
A static analyzer reads your code without running it and tells you what's wrong — the bug you didn't see, the await you forgot, the disposable you leaked. After twenty years of .NET I treat them as non-negotiable. Here's what they actually are, how they work under the hood (with a peek at Roslyn), and why every serious project should have them turned on and turned up.

What Is ACP? The Agent Client Protocol — LSP, but for AI Coding Agents
If you've watched the AI coding space lately, you've heard about MCP. Its quieter cousin is ACP — the Agent Client Protocol — and it solves a different problem: not how an agent talks to its tools, but how your editor talks to the agent. The one-line version: if MCP is USB-C for AI tools, ACP is LSP for AI agents. Here's what it is and why I think it matters.