Blog
41 posts about software development, DevOps, and technology.
2026
Jev: Attack of the Classifiers
TF-IDF, MiniLM, and DSPy draw their swords. Jev raises a shield. BANKING77 keeps score.
Jev at the Branches: The State Machine Is the Agent
A state-machine architecture in which deterministic code owns the plan and the facts, while Jev supplies bounded judgment only at decision branches.
Jev: AI Decisions as a Typed Function Call
What I learned using TypeSafe's Jev for code review, and why its more surprising uses are browser control and generative UI.
Managing Context Windows with pi /tree: Branches, Summaries, and Subagent-like Workflows
How I use pi's /tree to manage context windows in long coding sessions, when to choose /tree vs /fork, and patterns that feel like lightweight subagents without leaving one session.
Ralph loops for SDK migrations: a case study
Part 4 of my gym-coding series: using a Ralph loop to migrate an entire SDK dependency in 81 minutes, what worked, what didn't, and where autonomous loops shine.
How my agents code when I am at the gym
Part 3 of my gym-coding setup: autonomous coding agents that keep working for you while you are out and about, and even while you sleep.
How I code from the gym — Part 2: Any AI tool, one command
Extending my phone-based coding workflow beyond OpenCode Web to support Amp, Claude Code, Codex, and any terminal AI tool using SSH, tmux, and a small session manager called vaibhav.
How I code from the gym
My setup for coding from anywhere: running OpenCode Web on Ubuntu as a systemd service and securely connecting from my phone with Tailscale.
2025
Supercharged Code Reviews: How AI Subagents Make Human Reviewers Superhuman
Speed up your team's code reviews with AI-powered analysis that catches what humans miss and prepares focused insights, making reviewers more effective without replacing their expertise.
Having Fun with Claude Code Hooks - Make Your AI Coding Assistant Talk!
Tired of staring at your terminal waiting for Claude to finish? Let's add some personality with audio notifications and custom automation using Claude Code hooks.
2024
Thoughts on FastHTML
Why I Moved from FastHTML to Svelte for Building a Complex Chat Application
2018
MLFlow as a model repository in your CI/CD workflow
We recently started using MLFlow as a model repository and integrated it with GoCD
2016
Using multiple worktrees with git
Use multiple worktrees to make working with branches and bug fixes much easier with git
Running WebDriverIO tests using docker-compose
Running WebDriverIO tests using docker-compose for development and CI
Basics of rolling updates with Kubernetes
Basics of rolling updates with Kubernetes. Describes a basic ReplicationController template for rolling updates
How to git add only files that have already been staged
Adding only those files already staged, back to the index with new changes
Hosting an S3 backed Docker Registry on Kubernetes
Hosting an S3 backed Docker Registry on Kubernetes
2015
Sharing docker images without a registry
Sharing docker images between developer workstations without a registry
2013
Using git at a hackathon where git:// port is blocked
A quick guide to using git over https instead of git protocol when the latter is blocked.
Things that trip newbies in Powershell - Pipeline Output
Some common things that trip new Powershell users when working with pipeline output
git learns pre-push hook - new in 1.8.2
A new feature in Git 1.8.2 - pre-push hook to control what gets pushed out.
git learns to ignore better - new in 1.8.2
A new feature in Git 1.8.2 - better ignoring of files through .gitignore and git check-ignore.
Why use virtualenv when there is pythonbrew?
A comparison of virtualenv vs pythonbrew for managing python environments
Things that trip newbies in Powershell - Encodings
Powershell has some quirks around text encodings that often trip new users. This post covers the common gotchas.
Using TypeConverters to get AppSettings in .NET
A quick way to get strongly typed AppSettings in .NET using TypeConverters.
Remembering Aaron Swartz in his writings
A selection of writings by Aaron Swartz that capture his brilliance and passion for open information and civic participation
2012
Why a feature of our website stopped working for Norway
We recently discovered that a feature on our site stopped working for users in Norway. Here's what happened and how we fixed it.
Writing a Git provider for Windows Powershell - Part 3
In this final part, we look at implementing some basic Git commands like status, add, commit etc using the provider interface.
Writing a Git provider for Windows Powershell - Part 2
In this part we look at creating the provider and mounting the default drive at git:\
Better code analysis with Resharper 7 contract annotations
Resharper 7 introduces support for Code Contracts annotations in .NET code. This allows for more robust static analysis and validation of code contracts.
Writing a Git provider for Windows Powershell - Part 1
In this first part, we will look at setting up the infrastructure required to write a PowerShell provider for Git - creating a snap-in, registering the provider etc.
Testing extension methods with Microsoft Fakes
With right dosage of proper design, decoupling objects, dependency injection and simplicity, you can write testable code without requiring sophisticated tools.
Contract testing a JSON service in .NET
In this post I discuss how to write contract tests for a JSON service.
Learning by answering questions
I have been learning a lot lately by answering questions on Stack Overflow. This post is about my journey of learning by answering questions.