Blog Posts

I try to post new content every week. The search bar above can help you find what you’re looking for.

You may also find the following links useful:
20262025Tags

Upgrading My Home NAS: Transitioning from Synology DS418 to UGREEN DXP2800
Upgrading My Home NAS: Transitioning from Synology DS418 to UGREEN DXP2800

Finding the perfect home Network Attached Storage (NAS) setup is a balancing act between hardware capabilities and software maturity. When Prime Day offered a discount on the UGREEN NASync DXP2800, I decided it was time to retire my trusty but ageing four-bay Synology DS418. The hardware upgrade …

Pushing the Limits: Running Gemma 4 Locally on Apple Silicon
Pushing the Limits: Running Gemma 4 Locally on Apple Silicon

Running state of the art language models locally on your own hardware has never been more accessible. Tools like Ollama allow you to pull down massive models and interact with them completely offline, ensuring your data remains entirely private. However, pushing the limits of your hardware reveals …

Querying Precisely: Type-Safe GraphQL in Python with Strawberry
Querying Precisely: Type-Safe GraphQL in Python with Strawberry

Connecting client applications to database records requires a clear, reliable communication contract. For years, Representative State Transfer (REST) has served as the default architecture for modern web applications. If you read my previous guide, Building Modern APIs with FastAPI and Python, you …

Why Google AI Pro is the Best Value AI Subscription in 2026
Why Google AI Pro is the Best Value AI Subscription in 2026

If you’ve been following the AI space over the last couple of years, you’ve probably noticed a distinct pattern. Every major provider has settled on a near-identical pricing model for their premium consumer tiers. Ever since OpenAI set the initial benchmark with ChatGPT Plus, the …

Connecting LangGraph Agents to FastMCP Servers
Connecting LangGraph Agents to FastMCP Servers

Connecting large language models (LLMs) to local tools and system resources has historically required a lot of custom integration work. This friction makes agentic systems difficult to scale and maintain. Fortunately, the Model Context Protocol (MCP) provides a standard way to expose tools, …

From Insight to Production: Software Engineering Habits for Data Scientists
From Insight to Production: Software Engineering Habits for Data Scientists

If you come from a data science background, your core strength lies in translating complex, messy datasets into actionable business insights. You are likely a master of statistical modelling, feature engineering, and extracting patterns from noise. However, a common bottleneck arises when you need …

Building Agentic System Tools with FastMCP and Python
Building Agentic System Tools with FastMCP and Python

If you have spent any time building agentic systems recently, you have likely encountered the integration bottleneck. Connecting large language models (LLMs) to local tools, internal databases, or system utilities has historically meant writing custom APIs for every single integration. This …

Building Modern APIs with FastAPI and Python
Building Modern APIs with FastAPI and Python

If you’re starting a new Python backend project today, you’re almost certainly going to use FastAPI. It has rapidly displaced older frameworks to become the industry standard for API development. The reasons are simple: it’s fast, it embraces modern Python type hints, and it does a …

Board Game Reviews: Mists Over Carcassonne
Board Game Reviews: Mists Over Carcassonne

Carcassonne is one of those games that’s been on countless family shelves for over two decades, building cities and stealing roads from one another with cheerful ruthlessness. Mists Over Carcassonne takes that familiar tile-laying foundation and does something unexpected with it: it turns you …

MySQL, PostgreSQL, and SQL Server: Choosing the Right Relational Database
MySQL, PostgreSQL, and SQL Server: Choosing the Right Relational Database

If you’ve been building software for any length of time, you’ve almost certainly worked with at least one relational database. There’s a good chance it was MySQL, PostgreSQL, or SQL Server. All three can store rows, run queries, and handle transactions, so it’s tempting to …

Beyond Graphs: An Introduction to Google's Agent Development Kit (ADK)
Beyond Graphs: An Introduction to Google's Agent Development Kit (ADK)

If you’ve spent any time building agentic systems lately, you’re likely familiar with LangGraph. It’s a powerful framework that treats agents as nodes in a graph, connected by edges that define the flow of execution and state. It’s robust, explicit, and extremely capable once …

Streaming State and Tokens in LangGraph
Streaming State and Tokens in LangGraph

If you’ve been following the earlier posts in this series, you’ll have built graphs that gather data, call tools, and produce structured output. Every one of those examples used .invoke(), which means the caller waits in silence until the entire graph finishes and then receives the final …