<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Python on Joel Hanson</title>
    <link>https://joelhanson.com/tags/python/</link>
    <description>Recent content in Python on Joel Hanson</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>joelhanson025@gmail.com (Joel Hanson)</managingEditor>
    <webMaster>joelhanson025@gmail.com (Joel Hanson)</webMaster>
    <copyright>&amp;copy; Joel Hanson</copyright>
    <lastBuildDate>Mon, 01 Dec 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://joelhanson.com/tags/python/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>ContextLayer</title>
      <link>https://joelhanson.com/projects/contextlayer/</link>
      <pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/projects/contextlayer/</guid>
      <description>Transform any REST API into an MCP server — connectors that make existing APIs usable by LLM tools.</description>
      
    </item>
    
    <item>
      <title>Convert Your Django DRF Project to MCP in 5 Minutes</title>
      <link>https://joelhanson.com/posts/20-convert-your-django-drf-project-to-mcp-in-5-minutes/</link>
      <pubDate>Sun, 03 Aug 2025 15:20:06 +0530</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/posts/20-convert-your-django-drf-project-to-mcp-in-5-minutes/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;The Problem: When APIs Meet AI Assistants&#xA;    &lt;div id=&#34;the-problem-when-apis-meet-ai-assistants&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#the-problem-when-apis-meet-ai-assistants&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;A few weeks ago, I was experimenting with &lt;a href=&#34;https://modelcontextprotocol.io/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Model Context Protocol (MCP)&lt;/a&gt; for a &lt;a href=&#34;https://joelhanson.com/posts/16-breaking-kafka-walls-building-an-mcp-server-for-your-kafka-cluster/&#34; &gt;Kafka integration project&lt;/a&gt;. 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.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Kafka MCP Server</title>
      <link>https://joelhanson.com/projects/kafka-mcp-server/</link>
      <pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/projects/kafka-mcp-server/</guid>
      <description>Expose Kafka cluster operations as LLM-accessible tools via the Model Context Protocol.</description>
      
    </item>
    
    <item>
      <title>Building an MCP Server for Your Kafka Cluster</title>
      <link>https://joelhanson.com/posts/16-breaking-kafka-walls-building-an-mcp-server-for-your-kafka-cluster/</link>
      <pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/posts/16-breaking-kafka-walls-building-an-mcp-server-for-your-kafka-cluster/</guid>
      <description>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.</description>
      
    </item>
    
    <item>
      <title>Antarctic Iceberg Tracker</title>
      <link>https://joelhanson.com/projects/iceberg-locations/</link>
      <pubDate>Thu, 01 May 2025 00:00:00 +0000</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/projects/iceberg-locations/</guid>
      <description>Real-time iceberg monitoring with NASA data, automated pipelines, and GitHub as a data platform.</description>
      
    </item>
    
    <item>
      <title>Django DRF → MCP</title>
      <link>https://joelhanson.com/projects/django-drf-mcp/</link>
      <pubDate>Sun, 03 Aug 2025 00:00:00 +0000</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/projects/django-drf-mcp/</guid>
      <description>Turn an existing Django REST Framework project into MCP tools for AI assistants in minutes.</description>
      
    </item>
    
    <item>
      <title>SSE Stream Monitor</title>
      <link>https://joelhanson.com/projects/sse-stream/</link>
      <pubDate>Sat, 07 Dec 2024 00:00:00 +0000</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/projects/sse-stream/</guid>
      <description>Minimal Server-Sent Events demo — a live CPU/RAM dashboard with almost no client code.</description>
      
    </item>
    
    <item>
      <title>Flask &#43; Restate</title>
      <link>https://joelhanson.com/projects/flask-restate/</link>
      <pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/projects/flask-restate/</guid>
      <description>Side-by-side Flask apps showing durable execution with Restate versus plain request handlers.</description>
      
    </item>
    
    <item>
      <title>From Celery to Restate: Rethinking Async Tasks in Django</title>
      <link>https://joelhanson.com/posts/24-from-celery-to-restate-rethinking-async-tasks-in-django/</link>
      <pubDate>Sun, 16 Nov 2025 17:00:00 +0530</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/posts/24-from-celery-to-restate-rethinking-async-tasks-in-django/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;The Celery Question&#xA;    &lt;div id=&#34;the-celery-question&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#the-celery-question&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;For years, when someone asked &amp;ldquo;How do I handle background tasks in Django?&amp;rdquo;, the answer was almost always &amp;ldquo;Use Celery&amp;rdquo;. 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.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Adding Durable Execution to Flask Applications with Restate</title>
      <link>https://joelhanson.com/posts/23-adding-durable-execution-to-flask-with-restate/</link>
      <pubDate>Sun, 16 Nov 2025 16:00:00 +0530</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/posts/23-adding-durable-execution-to-flask-with-restate/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;The Challenge of Reliable Background Operations&#xA;    &lt;div id=&#34;the-challenge-of-reliable-background-operations&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#the-challenge-of-reliable-background-operations&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;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.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Mastering the Egg Drop: A Math Heist Unveiled</title>
      <link>https://joelhanson.com/posts/03-solve-egg-drop-with-2-eggs-and-n-floors/</link>
      <pubDate>Fri, 29 Dec 2023 11:20:41 +0530</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/posts/03-solve-egg-drop-with-2-eggs-and-n-floors/</guid>
      <description>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&amp;rsquo;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.</description>
      
    </item>
    
    <item>
      <title>Building a CSV Reader in C with Python Integration</title>
      <link>https://joelhanson.com/posts/01-how-to-load-csv-using-cpython/</link>
      <pubDate>Tue, 19 Dec 2023 20:08:08 +0530</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/posts/01-how-to-load-csv-using-cpython/</guid>
      <description>CSV (Comma-Separated Values) files are a common format for storing tabular data. In this blog post, we&amp;rsquo;ll explore the process of creating a simple CSV reader in C using CPython standard library.</description>
      
    </item>
    
  </channel>
</rss>
