Writing
Notes on iOS, mentoring, and applied AI.
Long-form explanations, written the way I'd want them explained to me.
Filter by
2026
- Building a macOS menu bar app with SwiftUI: a real SSH server monitor I wanted my server's CPU without opening a terminal, so I built a tiny app that lives in the menu bar: MenuBarExtra, talking SSH from Swift, an actor-based service that hides the complexity, and polling that respects your battery.
- RAG is not magic: building retrieval-augmented generation from zero Your LLM doesn't know your documents. RAG is a disciplined way of showing them to it: embeddings, a vector store, and top-k retrieval, built up from first principles in about a hundred lines of Python, plus where naive RAG quietly fails.
- Foundation Models: running Apple's on-device LLM in your iOS app No API key, no server, no internet. A roughly 3-billion-parameter model already lives on your user's iPhone. How to call it in five lines, have it return typed Swift with guided generation, and when to fall back to the cloud.
- Running iOS UI tests without opening Xcode: xcodebuild, clean output, and an agent that fixes itself How to drive XCUITest from the command line with xcodebuild, turn its firehose of output into something readable, and close the loop so an AI agent can write a feature, run the tests, read the failure, and fix itself.
- SwiftData in production: what the tutorials do not tell you SwiftData demos look easy until you ship a POS app with 10,000 transactions. A field guide to the four traps that bite real apps (@Query overuse, unpaginated lists, delete-rule crashes, and background writes) with production Swift code and an honest SwiftData vs Core Data vs GRDB verdict.
- The AI Access Ladder: a framework for responsible AI use in learning We did not ban AI. We built a ladder instead: five levels of access, from no-AI fundamentals to full delegation, matched to what a learner is actually trying to build. The decision rules, the science of desirable difficulty, and the honest results, including the failures.
- The quiet power of Claude Code hooks Hooks are the part of Claude Code almost nobody turns on: small shell commands that fire at fixed points in the agent's loop, so you can auto-format every edit, block a dangerous command before it runs, or ping yourself when a task finishes, deterministically, without asking the model to remember. A look at what they are, where they live, and three I keep switched on.
- App icons with Icon Composer: from Figma to Xcode 26 A step-by-step guide to creating adaptive iOS and macOS app icons using Icon Composer in Xcode 26. Pick a Figma community template, export SVG, configure layers for light, dark, and tinted appearances, then wire it up to your target.
- Prompting for general tasks: common mistakes and how to fix the answer Most bad AI answers come from the same handful of prompt mistakes: vague ask, missing context, no example, no format. This is the anatomy of a prompt that works, a short taxonomy of the errors people actually make, and a symptom-to-fix table for repairing a response instead of starting over.
- Vibe coding vs engineering: where is the line? Vibe coding is real and it works, for the right things. A field guide to the spectrum between talking a feature into existence and actually engineering it, the stakes-by-lifespan matrix that tells you which one a task deserves, and one rule that survives contact with production: you can vibe what you could verify.
- Becoming AI-fluent: a learner's playbook for the 4Ds Knowing the 4D framework is not the same as living it. This is the implementation side: why AI fluency matters for learners now, what changes when you build the habits versus when you don't, and a per-session and four-week routine that turns Delegation, Description, Discernment, and Diligence into reflexes.
- The 4D framework: a learner's map for working with AI Anthropic's AI Fluency course teaches four habits (Delegation, Description, Discernment, Diligence) for working well with AI. Here is what each one means, the sub-skills inside it, and why a learner who internalises the 4Ds gets more from AI without quietly outsourcing their own understanding.
- Connect Claude to your Zotero library with a local MCP server A step-by-step guide to wiring Claude into your own Zotero library with a local MCP server. Search, summarise, and pull quotes from your papers in plain conversation, with every hop staying on your machine.
- Run your Linear board from Claude Code: set up the Linear MCP Linear ships an official hosted MCP server, so wiring it into Claude Code is one command and a browser sign-in, with no install and no API key. This is a plain, step-by-step guide to connecting it, confirming it works, and using it for real project management without letting it loose on your tracker.
- Let Claude Code set up the Zotero MCP for you: a prompt-first guide You do not have to install or configure anything by hand. With Claude Code in auto mode, you prompt and it does the work. This is a plain, step-by-step guide to the prompts, the checks, and confirming the connection on both macOS and Windows.
- Printing thermal receipts from an iPad: ESC/POS over Bluetooth There is no Swift package that just works for the cheap thermal printers Indonesian shops actually buy. This is the byte-level field guide (ESC/POS, Core Bluetooth, MTU chunking, and a small ReceiptBuilder you can copy) for printing a Rupiah receipt from an iPad.
- Git branching strategies that scale: from a solo repo to a team of fifty A practical field guide to the four branching models that cover almost every project (commit-to-main, GitHub Flow, trunk-based, and Git Flow), with the commands for each and a clear rule for knowing which one you are actually in.
- Git workflow for teams: the daily habits a shared repo runs on A practical playbook for working in a shared repository: branching cleanly, writing commits that explain themselves, opening reviewable pull requests, staying in sync without rewriting shared history, and choosing how a PR lands.
- Structuring a new SwiftUI project so month six does not hurt A practical starting structure for a fresh SwiftUI app: the entry point, grouping by feature instead of by kind, where state actually lives, naming conventions, and the honest signal for when to reach for Swift Packages.
- Platform, Multiplatform & Companion App: what's the actual difference? Three terms that describe how Apple apps relate to hardware, and how code is shared (or not) across devices. Defined, illustrated, and compared with references to Apple's documentation and WWDC sessions.
No articles match all of those tags.