<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tutorial on Joel Hanson</title>
    <link>https://joelhanson.com/tags/tutorial/</link>
    <description>Recent content in Tutorial 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>Sun, 16 Nov 2025 17:00:00 +0530</lastBuildDate><atom:link href="https://joelhanson.com/tags/tutorial/index.xml" rel="self" type="application/rss+xml" />
    
    <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>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>Introducing ContextLayer: Transform Any REST API into an MCP Server in Minutes</title>
      <link>https://joelhanson.com/posts/22-introducing-contextlayer-transform-any-rest-api-into-an-mcp-server/</link>
      <pubDate>Sun, 16 Nov 2025 10:00:00 +0530</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/posts/22-introducing-contextlayer-transform-any-rest-api-into-an-mcp-server/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;The Problem: Connecting AI Assistants to Your APIs&#xA;    &lt;div id=&#34;the-problem-connecting-ai-assistants-to-your-apis&#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-connecting-ai-assistants-to-your-apis&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;As AI assistants like &lt;a href=&#34;https://claude.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Claude&lt;/a&gt; and &lt;a href=&#34;https://github.com/features/copilot&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;VS Code Copilot&lt;/a&gt; become more powerful, developers are discovering a critical bottleneck: &lt;strong&gt;these AI tools can&amp;rsquo;t directly interact with our existing REST APIs&lt;/strong&gt;.&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
