From Celery to Restate: Rethinking Async Tasks in Django

The Celery Question For years, when someone asked “How do I handle background tasks in Django?”, the answer was almost always “Use Celery”. And for good reason. Celery is mature, battle-tested, and has solved async task processing for countless Django applications. It has extensive documentation, a large ecosystem of plugins, and most Django developers have at least some experience with it. But Celery also brings complexity. You need a message broker like Redis or RabbitMQ. You need to manage worker processes. You need to implement your own progress tracking if tasks need to report status. You need to handle state persistence separately if your tasks need to remember things across restarts. As your application grows, this infrastructure overhead grows with it. ...

November 16, 2025 · 9 min · 1782 words · Joel Hanson

Adding Durable Execution to Flask Applications with Restate

The Challenge of Reliable Background Operations Building web applications with Flask is straightforward until you need to handle operations that can fail. Database operations timeout, external APIs become unavailable, and network connections drop. These failures are inevitable in production systems, yet handling them gracefully often requires significant engineering effort. Recently, I was trying to build a Todo application where users could create, update, and delete tasks. On the surface, this seems simple. But when you start thinking about production scenarios, questions emerge. What happens if the database connection fails mid-operation? How do you handle retries without duplicating operations? What if the server crashes while processing a delete request? ...

November 16, 2025 · 7 min · 1385 words · Joel Hanson

Convert Your Django DRF Project to MCP in 5 Minutes

The Problem: When APIs Meet AI Assistants A few weeks ago, I was experimenting with Model Context Protocol (MCP) for a Kafka integration project. The experience was eye-opening - being able to interact with complex systems through natural language felt like a glimpse into the future of development workflows. After successfully getting MCP working with Kafka, I started thinking about other systems I could connect. That’s when I looked at one of my old Django projects. ...

August 3, 2025 · 13 min · 2701 words · Joel Hanson

Building an MCP Server for Your Kafka Cluster

A step‑by‑step guide to using FastMCP and the MCP protocol to expose Kafka operations (topic management, produce/consume, troubleshooting) as LLM‑accessible tools.

June 7, 2025 · 4 min · 841 words · Joel Hanson

Mastering the Egg Drop: A Math Heist Unveiled

Mastering the egg drop involves a careful blend of strategy, mathematics, and optimization. From crafting a plan with two replicas to understanding the arithmetic behind the sum formula, the jewel thief’s mission highlights the fascinating intersection of math and real-world problem-solving. As we unravel the complexities, we find that breaking a few eggs may require a dash of strategic brilliance and a pinch of mathematical finesse.

December 29, 2023 · 5 min · 954 words · Joel Hanson

Building a CSV Reader in C with Python Integration

CSV (Comma-Separated Values) files are a common format for storing tabular data. In this blog post, we’ll explore the process of creating a simple CSV reader in C using CPython standard library.

December 19, 2023 · 5 min · 1033 words · Joel Hanson