<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="https://www.yellowduck.be/pretty-atom-feed-v3.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>🐥 YellowDuck.be</title>
  <id>https://www.yellowduck.be/posts/feed</id>
  <updated>2026-11-11T18:00:00Z</updated>
  <author>
    <name>Pieter Claerhout</name>
    <email>pieter@yellowduck.be</email>
  </author>
  <link rel="self" href="https://www.yellowduck.be/posts/feed"/>
  <link rel="alternate" href="https://www.yellowduck.be"/>
  <entry>
    <id>https://www.yellowduck.be/posts/mapsets-a-set-thats-secretly-a-map</id>
    <title>🔗 MapSets: A set that's secretly a map</title>
    <updated>2026-11-11T18:00:00Z</updated>
    <published>2026-11-11T18:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/mapsets-a-set-thats-secretly-a-map"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;What if a set could be more than just a collection of items? In the article, Bruce Tate sheds light on &lt;code&gt;MapSet&lt;/code&gt;, revealing its hidden map structure and how it utilizes maps for efficient membership checks. He explains that &lt;code&gt;MapSet&lt;/code&gt; allows for quick lookups like traditional maps, but provides set functionality where order doesn't matter and duplicates are ignored. Readers learn how to create sets, check for membership, and effectively manage expected behaviors when working with &lt;code&gt;MapSet&lt;/code&gt;, all while emphasizing the importance of the underlying map data structure. By understanding these concepts, developers can choose better data structures for various scenarios, enhancing both performance and clarity in their Elixir applications.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://grox.io/blog/55-mapsets-a-set-that-s-secretly-a-map/&quot;&gt;Continue reading on &lt;strong&gt;grox.io&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/elixir&quot;&gt;#elixir&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/a-modern-web-app-in-c</id>
    <title>🔗 A modern web app in C</title>
    <updated>2026-11-11T14:00:00Z</updated>
    <published>2026-11-11T14:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/a-modern-web-app-in-c"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;The decline of CGI in web development seemed set in stone in 2004, but in 2026 it's being reconsidered. Corey Prophitt highlights how he successfully built and launched a modern web application using C and CGI, showcasing a minimalistic stack including OpenBSD, SQLite, and essential libraries like &lt;code&gt;libcurl&lt;/code&gt; and &lt;code&gt;libsodium&lt;/code&gt;. This approach emphasizes the advantages of simplicity, low overhead, and fewer dependencies, making it possible to deliver a robust product without the complexities of modern frameworks. Prophitt argues that writing a CGI application today is feasible and effective, allowing developers to lean on their knowledge of HTTP without the burden of additional APIs. The article offers a glimpse into how leveraging timeless technologies can yield practical, less risky solutions in contemporary development.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://prophitt.me/writing/a-modern-web-app-in-c&quot;&gt;Continue reading on &lt;strong&gt;prophitt.me&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/tools&quot;&gt;#tools&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/http&quot;&gt;#http&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/my-ai-policy</id>
    <title>🔗 My AI policy</title>
    <updated>2026-11-11T09:00:00Z</updated>
    <published>2026-11-11T09:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/my-ai-policy"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;What happens when developers grapple with LLMs and community standards? This article tackles the challenges of expressing a personal stance on AI, balancing professional tools with ethical concerns. The author shares his journey and reflections on using LLMs to complement his work while confronting the larger issues of AI company practices. He questions the morality behind mass training on public content, highlighting the disconnect between content creators and the companies that profit from their work. As the web community faces increasing scrutiny over technology choices, he advocates for building a supportive environment instead of shaming others for their decisions. Whether discussing the ethics of AI or the pressures of public opinion, the piece provides a candid insight into the current landscape of development and AI integration.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://remysharp.com/2026/10/12/my-ai-policy&quot;&gt;Continue reading on &lt;strong&gt;remysharp.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/im-sorry-but-you-still-have-to-think</id>
    <title>🔗 I'm sorry, but you still have to think.</title>
    <updated>2026-11-10T14:00:00Z</updated>
    <published>2026-11-10T14:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/im-sorry-but-you-still-have-to-think"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;DHH, the creator of Ruby on Rails, chose to rewrite Campfire Once from Ruby on Rails to Rust, relying on a developer to handle the Rust code due to his discomfort with it. This decision, along with rewrites in languages like Elixir and Go, offers insight into the challenges faced by those using AI agents for coding without understanding the code themselves. The results weren't promising; they highlighted the necessity of specificity in prompts, as many programming decisions come down to subjective choices. While Elixir's version stayed closer to the original Rails architecture, both rewrites exhibited significant trade-offs. Rust payments weak performance in certain aspects, including a low new post delivery rate under heavy load due to its limited broadcast channel capacity. The comparative analysis emphasizes that programming decisions are complex and a single metric doesn’t tell the whole story. Ultimately, it reinforces the importance of thoughtful coding practices and understanding the nuances of each programming language's features and limitations.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://itsallaboutthebit.com/i-am-sorry-but-you-still-have-to-think/&quot;&gt;Continue reading on &lt;strong&gt;itsallaboutthebit.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/rust&quot;&gt;#rust&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/ive-been-the-sole-developer-of-a-healthcare-membership-platform-for-6-years-heres-what-it-looks-like</id>
    <title>🔗 I've been the sole developer of a healthcare membership platform for 6+ years. Here's what it looks like.</title>
    <updated>2026-11-10T09:00:00Z</updated>
    <published>2026-11-10T09:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/ive-been-the-sole-developer-of-a-healthcare-membership-platform-for-6-years-heres-what-it-looks-like"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;What does a healthcare membership platform look like after six years of sole development? Tim Kamanin shares insights from building a system that integrates member applications, payments, event management, and more using Django and Wagtail CMS. Initially created to address a pressing need, the platform has grown into a robust tool handling memberships, communications, and exams seamlessly. Key features include automatic status tracking, an internal email system, and independent management of events—allowing non-technical staff to efficiently handle operations. This article explains how Kamanin maintains a monolithic codebase with a simple frontend while staying attuned to every line of code and business rule. He highlights the advantages of being the sole developer: quick adaptations, clean code, and deep familiarity with the platform's architecture. A testament to streamlined software development in the healthcare sector, his experience illustrates the value of dedicated ownership in tech projects.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://timonweb.com/case-study/ive-been-the-sole-developer-of-a-healthcare-membership-platform-for-6-years-heres-what-it-looks-like/&quot;&gt;Continue reading on &lt;strong&gt;timonweb.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/django&quot;&gt;#django&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/wagtail&quot;&gt;#wagtail&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/review-fatigue-is-real-heres-what-my-team-did-about-it</id>
    <title>🔗 Review fatigue is real. Here's what my team did about it</title>
    <updated>2026-11-09T18:00:00Z</updated>
    <published>2026-11-09T18:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/review-fatigue-is-real-heres-what-my-team-did-about-it"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Reviewing pull requests (PRs) can often take longer than writing the code itself. This phenomenon, highlighted by Ivan Pelivanovic, emphasizes that even as AI tools facilitate quicker coding, they don't necessarily streamline the review process. The increasing speed of code deployment can lead to an overwhelming volume of reviews, resulting in a state of review fatigue that teams struggle to manage. This article explores strategies some teams have implemented to tackle this issue, ensuring that code quality and thoroughness don't suffer in the rush to deliver results.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://shiftmag.dev/review-fatigue-12276/&quot;&gt;Continue reading on &lt;strong&gt;shiftmag.dev&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/git&quot;&gt;#git&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/why-mcp-was-always-a-bad-idea</id>
    <title>🔗 Why MCP was always a bad idea</title>
    <updated>2026-11-09T14:00:00Z</updated>
    <published>2026-11-09T14:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/why-mcp-was-always-a-bad-idea"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;MCP was hailed as a necessary protocol when released by Anthropic in 2024, but the landscape has drastically changed. As LLMs became adept at executing code and autonomously calling APIs, MCP began to feel redundant. While it facilitated early integrations between AI models and external services, the evolution of these models means they can now interact directly with APIs without reliance on MCP, which often wraps existing services. The recent emergence of Cloudflare's Code Mode exemplifies how LLMs have outpaced the capabilities offered by MCP, composing scripts directly and omitting the need for intermediary servers. The article argues for a shift towards direct use of HTTP APIs and standard practices. Standardization could streamline interactions, making agents more efficient than ever before. Thus, embracing closure on MCP may very well be a strategic step forward in AI development.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://maharship.com/blog/why-mcp-was-always-a-bad-idea/&quot;&gt;Continue reading on &lt;strong&gt;maharship.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/http&quot;&gt;#http&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/how-i-built-tjommis-backend</id>
    <title>🔗 How I built Tjommi's backend</title>
    <updated>2026-11-09T09:00:00Z</updated>
    <published>2026-11-09T09:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/how-i-built-tjommis-backend"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Tjommi's backend integrates sophisticated data handling for tracking purchased products and claims. It processes varied formats like emails, PDFs, and screenshots into structured records. The article dives into the iterative development of this backend, documenting architectural choices and technological advancements spanning from 2019 to 2023. Key components include the use of receipt extraction, retailer integrations, and the introduction of AI for processing formats. The evolving modular architecture within a Laravel application ensures smooth functionality, while managing complexities tied to retailer behaviors. Overall, it highlights how continuous refinement and innovative technologies enhanced the claims process and improved customer experience.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://helgesver.re/articles/how-i-built-tjommi&quot;&gt;Continue reading on &lt;strong&gt;helgesver.re&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/pdf&quot;&gt;#pdf&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/laravel&quot;&gt;#laravel&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/why-we-started-building-on-the-django-6-1-alpha</id>
    <title>🔗 Why we started building on the Django 6.1 alpha</title>
    <updated>2026-11-08T14:00:00Z</updated>
    <published>2026-11-08T14:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/why-we-started-building-on-the-django-6-1-alpha"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Divio chose to adopt the Django 6.1 alpha long before its official release to actively contribute to its development. This decision was driven by their commitment to the Django community and the compelling new features Django 6.1 promised, such as database-level delete options and enhancements in the admin interface. By testing the pre-release daily, they not only utilized its advancements but also identified and reported several bugs, aiding the refinement of the framework. Their hands-on approach ensured they were at the forefront of developments and equipped them with insights into the new functionalities. As a result, Divio can now encourage others to explore Django 6.1, showcasing the readiness and potential of the framework for production use.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.divio.com/blog/why-we-started-building-on-the-django-6-1-alpha/&quot;&gt;Continue reading on &lt;strong&gt;www.divio.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/django&quot;&gt;#django&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/testing&quot;&gt;#testing&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/shadcn-datatable-filtering</id>
    <title>🔗 Shadcn datatable filtering</title>
    <updated>2026-11-08T09:00:00Z</updated>
    <published>2026-11-08T09:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/shadcn-datatable-filtering"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;A good datatable filter is essential for improving user experience by allowing for quick and easy access to specific data within large datasets. The Shadcn datatable filtering blocks combine search boxes, condition builders, and category filters to enhance the usability of data tables. These features allow users to narrow down their search through options like free-text search, stackable condition-based filters, and date range selectors, all while maintaining a seamless front-end experience using React and Tailwind CSS.&lt;/p&gt;
&lt;p&gt;Additionally, the blocks work harmoniously with both Base UI and Radix UI, making integration straightforward. Users can employ the Shadcn Builder to effortlessly drag and drop these blocks into their projects, streamlining the layout process without the need for manual coding. The article thoroughly outlines the capabilities and use cases of these filtering blocks, which are a standout in the Shadcn studio library for efficient data handling.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://shadcnstudio.com/blocks/datatable/datatable-filtering&quot;&gt;Continue reading on &lt;strong&gt;shadcnstudio.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/javascript&quot;&gt;#javascript&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/frontend&quot;&gt;#frontend&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/css&quot;&gt;#css&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/home-django-absurd</id>
    <title>🔗 django-absurd: ceci n'est pas un queue</title>
    <updated>2026-11-07T18:00:00Z</updated>
    <published>2026-11-07T18:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/home-django-absurd"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;django-absurd&lt;/code&gt; integrates a Postgres-native workflow engine into Django, allowing developers to run background tasks and durable workflows seamlessly. It utilizes Django's existing database connection, minimizing overhead and setup complexity. To get started, developers must ensure compatibility with Python 3.12+, Django 6.0+, and use the psycopg driver. After adding &lt;code&gt;django_absurd&lt;/code&gt; to the &lt;code&gt;INSTALLED_APPS&lt;/code&gt;, the database schema is migrated, and tasks can be written using Django's &lt;code&gt;@task&lt;/code&gt; decorator. The article outlines a straightforward task loop, from enqueuing to result retrieval, and highlights the use of workflow contexts for reliable task execution with checkpoints and retries. Key functionalities include tasks, workflows, cron jobs, worker management, and monitoring, making it a versatile solution for task management in Django applications.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://lincolnloop.github.io/django-absurd/&quot;&gt;Continue reading on &lt;strong&gt;lincolnloop.github.io&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/python&quot;&gt;#python&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/django&quot;&gt;#django&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/django-and-deployments</id>
    <title>🔗 Django and deployments</title>
    <updated>2026-11-07T14:00:00Z</updated>
    <published>2026-11-07T14:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/django-and-deployments"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;What if Django had a streamlined &lt;code&gt;deploy&lt;/code&gt; command? This article contemplates the future of Django deployments, building on insights from Will Vincent's recent talks and suggestions from the community. The author, who is also the maintainer of &lt;code&gt;django-prodserver&lt;/code&gt;, proposes conceptual stages for deployment, breaking them down into manageable commands. Key commands might include &lt;code&gt;manage.py init_deploy_env&lt;/code&gt; and &lt;code&gt;manage.py productionize&lt;/code&gt;. While there are myriad deployment strategies, the focus is on establishing a common API in Django that can aid in automating essential processes. By examining existing packages like &lt;code&gt;django-production&lt;/code&gt;, the author suggests a pathway toward simplifying deployment in Django projects, inviting community feedback on the potential for such innovations.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://softwarecrafts.co.uk/100-words/day-311&quot;&gt;Continue reading on &lt;strong&gt;softwarecrafts.co.uk&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/django&quot;&gt;#django&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/devops&quot;&gt;#devops&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/django-serve-a-security-txt-file</id>
    <title>🔗 Django: Serve a security.txt file</title>
    <updated>2026-11-07T09:00:00Z</updated>
    <published>2026-11-07T09:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/django-serve-a-security-txt-file"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;When a vulnerability is found on a site, security researchers often struggle to find a reliable way to report it. The solution? A &lt;code&gt;security.txt&lt;/code&gt; file, standardized in April 2022, which lays out how to communicate security issues. This article provides a comprehensive guide on implementing a &lt;code&gt;security.txt&lt;/code&gt; file in Django, serving it over HTTPS, and ensuring it remains current through unit tests and a custom system check. A thorough implementation is demonstrated, including the required content fields like &lt;code&gt;Contact&lt;/code&gt; and &lt;code&gt;Expires&lt;/code&gt;, as well as the code needed to serve the file and validate its integrity. Maintaining an updated &lt;code&gt;security.txt&lt;/code&gt; file not only aids communication but is crucial for any web application’s security protocol. Adam Johnson expertly covers these aspects to ensure your site is prepared for researchers looking to communicate vulnerabilities effectively.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://adamj.eu/tech/2026/10/01/django-security-txt/&quot;&gt;Continue reading on &lt;strong&gt;adamj.eu&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/django&quot;&gt;#django&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/testing&quot;&gt;#testing&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/speeding-up-migrations-when-using-django-tenants-in-prod-and-in-tests</id>
    <title>🔗 Speeding up migrations when using Django Tenants, in prod and in tests</title>
    <updated>2026-11-06T14:00:00Z</updated>
    <published>2026-11-06T14:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/speeding-up-migrations-when-using-django-tenants-in-prod-and-in-tests"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;The slow nature of Django migrations can hinder production deployments, especially when using Django Tenants. With a growing platform and numerous tenants, Xelix found that running migrations could take excessive time. Mikuláš Poul introduces the &lt;code&gt;django-tenants-smart-executor&lt;/code&gt; library, which optimizes how migrations are handled. It detects when there are no migrations to apply and skips the lengthy checks, drastically reducing migration times for both production and testing environments. Additionally, the library allows skipping irrelevant state migrations based on the schema, further enhancing efficiency. While suggesting best practices to streamline migration processes in a multi-tenant architecture, this article serves as a valuable resource for those seeking to improve their deployment speed and test setup when using Django Tenants.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.mikulaspoul.cz/speeding-up-django-tenants-migrations/&quot;&gt;Continue reading on &lt;strong&gt;www.mikulaspoul.cz&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/django&quot;&gt;#django&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/devops&quot;&gt;#devops&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/testing&quot;&gt;#testing&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/django-websockets-with-daphne-a-complete-guide</id>
    <title>🔗 Django WebSockets with Daphne: A complete guide</title>
    <updated>2026-11-06T09:00:00Z</updated>
    <published>2026-11-06T09:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/django-websockets-with-daphne-a-complete-guide"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;WebSockets facilitate real-time communication, offering persistent connections over a single TCP channel. This article provides a thorough exploration of implementing WebSockets in Django using Daphne. It addresses the advantages of WebSockets over traditional HTTP requests, particularly for applications needing instant updates. By maintaining an ongoing connection, WebSockets enable bidirectional data flow, making them essential for modern applications such as chat systems or live notifications. The guide outlines the steps to integrate Daphne, showcasing configuration requirements and code snippets to get started effectively. This is a must-read for developers looking to enhance their Django projects with real-time capabilities.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.digitalocean.com/community/questions/django-websockets-with-daphne-a-complete-guide&quot;&gt;Continue reading on &lt;strong&gt;www.digitalocean.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/http&quot;&gt;#http&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/django&quot;&gt;#django&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/api-response-cache-with-redis-and-etags</id>
    <title>🔗 API response cache with Redis and ETags</title>
    <updated>2026-11-05T18:00:00Z</updated>
    <published>2026-11-05T18:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/api-response-cache-with-redis-and-etags"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;High-traffic REST APIs often suffer from repetitive expensive computation and database queries for read-heavy resources. Without caching, backend systems waste CPU cycles and network bandwidth serving identical responses to clients, causing higher latency and elevated infrastructure costs.&lt;/p&gt;
&lt;p&gt;This script solves the problem by combining &lt;strong&gt;Redis server-side caching&lt;/strong&gt; with &lt;strong&gt;HTTP ETags (Entity Tags)&lt;/strong&gt;. Server-side caching in Redis reduces backend execution times to near-zero for warm keys, while HTTP ETags enable conditional GET requests (&lt;code&gt;If-None-Match&lt;/code&gt;). When a resource hasn't changed, the server returns a lightweight &lt;code&gt;304 Not Modified&lt;/code&gt; header with no response body, dramatically reducing bandwidth usage and client render latency.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.valtersit.com/python/api-response-cache-with-redis-and-etags/&quot;&gt;Continue reading on &lt;strong&gt;www.valtersit.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/http&quot;&gt;#http&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/devops&quot;&gt;#devops&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/blue-green-deployment-switcher-script</id>
    <title>🔗 Blue-green deployment switcher script</title>
    <updated>2026-11-05T14:00:00Z</updated>
    <published>2026-11-05T14:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/blue-green-deployment-switcher-script"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In zero-downtime deployment architectures, switching traffic between two identical environments—Blue (current live) and Green (new release)—is a critical operation. Performing this traffic switch manually via web server configurations or load balancer updates is prone to human error, slow to execute, and lacks immediate automated validation. If a newly deployed environment passes preliminary build steps but fails under actual runtime conditions, manual rollbacks can introduce significant downtime and service disruption.&lt;/p&gt;
&lt;p&gt;This script solves the problem by automating the blue-green traffic cutover process. It verifies the health of the target environment before switching traffic, atomically updates the local web server reverse proxy (such as NGINX), validates the live router state after the switch, and automatically triggers an immediate rollback if the new live endpoint exhibits post-switch degradation.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://valtersit.com/python/blue-green-deployment-switcher-script/&quot;&gt;Continue reading on &lt;strong&gt;valtersit.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/tools&quot;&gt;#tools&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/devops&quot;&gt;#devops&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/testing&quot;&gt;#testing&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/sysadmin&quot;&gt;#sysadmin&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/environment-variable-injector-for-docker-run</id>
    <title>🔗 Environment variable injector for Docker run</title>
    <updated>2026-11-05T09:00:00Z</updated>
    <published>2026-11-05T09:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/environment-variable-injector-for-docker-run"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;When running containerized applications locally or across testing and production environments, developers often need to inject configuration settings stored in key-value &lt;code&gt;.env&lt;/code&gt; files directly into Docker containers. Passing environment variables manually using multiple &lt;code&gt;-e KEY=VALUE&lt;/code&gt; flags quickly becomes tedious, verbose, and error-prone.&lt;/p&gt;
&lt;p&gt;While Docker natively supports the &lt;code&gt;--env-file&lt;/code&gt; flag, it can be rigid—it lacks support for dynamically overriding dynamic host environment variables, programmatically inspecting injected keys before execution, or combining variable injection with standardized container runtime parameters (such as automatic port mapping, container naming, and dry-run output). This script bridges that gap by providing a CLI tool that parses &lt;code&gt;.env&lt;/code&gt; files safely using &lt;code&gt;python-dotenv&lt;/code&gt;, injects key-value pairs along with host-level environment fallbacks, validates prerequisites, and executes a clean &lt;code&gt;docker run&lt;/code&gt; command via standard subprocessing.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://valtersit.com/python/environment-variable-injector-for-docker-run/&quot;&gt;Continue reading on &lt;strong&gt;valtersit.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/python&quot;&gt;#python&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/tools&quot;&gt;#tools&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/devops&quot;&gt;#devops&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/docker&quot;&gt;#docker&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/fastapi-background-task-queue-with-asyncio</id>
    <title>🔗 FastAPI background task queue with asyncio</title>
    <updated>2026-11-04T18:00:00Z</updated>
    <published>2026-11-04T18:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/fastapi-background-task-queue-with-asyncio"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;When handling long-running operations—such as PDF generation, audio processing, batch notifications, or web scraping—processing them synchronously inside a FastAPI route handler blocks the response and risks timing out the client's HTTP connection.&lt;/p&gt;
&lt;p&gt;While heavy distributed task frameworks like Celery with Redis or RabbitMQ are standard for large systems, introducing external message brokers adds significant deployment and operational overhead for small-to-medium applications. This script implements an in-memory, decoupled background task queue directly inside FastAPI using Python's native &lt;code&gt;asyncio.Queue&lt;/code&gt;. It provides background job scheduling, task status monitoring, failure isolation, worker concurrency controls, and clean shutdown handling without relying on external dependencies.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.valtersit.com/python/fastapi-background-task-queue-with-asyncio/&quot;&gt;Continue reading on &lt;strong&gt;www.valtersit.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/python&quot;&gt;#python&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/http&quot;&gt;#http&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/github-actions-manual-trigger-cli</id>
    <title>🔗 GitHub Actions manual trigger CLI</title>
    <updated>2026-11-04T14:00:00Z</updated>
    <published>2026-11-04T14:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/github-actions-manual-trigger-cli"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Automating deployments across microservices or triggering remote CI/CD pipelines often requires firing off GitHub Actions workflows from outside the GitHub web interface. While GitHub provides the &lt;code&gt;workflow_dispatch&lt;/code&gt; event for manual triggers, developers and DevOps engineers often rely on ad-hoc &lt;code&gt;curl&lt;/code&gt; commands or manual browser clicks. This approach is prone to syntax errors, lacks validation, and makes it difficult to pass complex parameters or monitor run progress programmatically.&lt;/p&gt;
&lt;p&gt;This script solves the problem by providing a production-ready command-line interface (CLI) to trigger GitHub Actions manual workflows (&lt;code&gt;workflow_dispatch&lt;/code&gt;). It handles authentication, parses structured inputs, validates responses, and can optionally poll the newly created workflow run until completion—making it suitable for standalone developer usage, deployment scripts, or cross-repository orchestration.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.valtersit.com/python/github-actions-manual-trigger-cli/&quot;&gt;Continue reading on &lt;strong&gt;www.valtersit.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/tools&quot;&gt;#tools&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/devops&quot;&gt;#devops&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/github&quot;&gt;#github&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/terminal&quot;&gt;#terminal&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/found-our-django-app-was-losing-2-seconds-per-request-to-gil-and-gc-built-an-ebpf-tool-to-catch-it</id>
    <title>🔗 Found our Django app was losing 2 seconds per request to GIL and GC. Built an eBPF tool to catch it.</title>
    <updated>2026-11-04T09:00:00Z</updated>
    <published>2026-11-04T09:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/found-our-django-app-was-losing-2-seconds-per-request-to-gil-and-gc-built-an-ebpf-tool-to-catch-it"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;We run Django + gunicorn + DRF in production. Our API latency was consistently higher than what our traces showed. OpenTelemetry showed database and third-party API time, but there were always 1-2 seconds unaccounted for.&lt;/p&gt;
&lt;p&gt;I built an eBPF profiler that hooks into CPython from kernel space. Here's what we found in our Django app:&lt;/p&gt;
&lt;p&gt;GIL contention from Django URL resolution. Django's URL resolver was holding the GIL while resolving routes. With a large urlconf, this added up. Since our URLs are static, we added URL caching and cut GIL wait by 80%.&lt;/p&gt;
&lt;p&gt;GC gen-2 pauses. Django loads a lot of objects at startup (models, middleware, URL patterns). Gen-2 GC was walking 1.5M objects on each collection. We added gc.freeze() in our gunicorn post_fork hook. Worst-case GC pause went from 1.27s to 88ms.&lt;/p&gt;
&lt;p&gt;Gunicorn handoff latency. Measures how long a request sits in gunicorn's queue before a worker picks it up. When workers are busy with GIL contention or GC, handoff time spikes. After our fixes, handoff dropped from seconds to single-digit milliseconds.&lt;/p&gt;
&lt;p&gt;Off-CPU stacks. Found that a Kafka push in one of our DRF views was blocking the thread for 130ms. Invisible in OpenTelemetry because it wasn't instrumented. Our tool showed the full Python stack: views.py:post &amp;gt; sessions.py:post &amp;gt; socket.py:readinto.&lt;/p&gt;
&lt;p&gt;The tool uses eBPF uprobes on CPython's take_gil/drop_gil and gc_collect_main. No code changes to your Django app. Just point at the gunicorn PIDs and it shows you everything.&lt;/p&gt;
&lt;p&gt;CPython 3.11 only for now. Open source.&lt;/p&gt;
&lt;p&gt;GitHub: &lt;a href=&quot;https://github.com/deepanshu406/python-ebpf-profiling&quot;&gt;https://github.com/deepanshu406/python-ebpf-profiling&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/django/comments/1wsfgc4/found_our_django_app_was_losing_2_seconds_per/?share_id=_LR14NuuXTmDeOeQQ3f6w&quot;&gt;Continue reading on &lt;strong&gt;www.reddit.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/python&quot;&gt;#python&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/tools&quot;&gt;#tools&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/django&quot;&gt;#django&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/devops&quot;&gt;#devops&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/mcp-server-design-for-a-large-internal-api-surface</id>
    <title>🔗 MCP server design for a large internal API surface</title>
    <updated>2026-11-03T14:00:00Z</updated>
    <published>2026-11-03T14:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/mcp-server-design-for-a-large-internal-api-surface"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Mapping 200 internal REST endpoints to 200 MCP tools results in substantial overhead, adding 200 KB of JSON schema per request. With the update on 2026-07-28, traditional methods of dynamic tool registration are now prohibited. This article, authored by Marius Bughiu, discusses the three effective strategies that remain: curation, authorization-scoped tool lists, and a search-and-execute facade. All strategies were validated against the @modelcontextprotocol/server 2.0.0. It emphasizes the importance of curating the tool list and optimizing the serialization process to ensure efficiency. Measurable wire sizes confirm the impact of tool catalog size on performance, affirming that a leaner approach to tool management can drastically improve interaction times and reduce costs. The need for a proper caching strategy is also stressed, calling attention to potential pitfalls in implementing public cache scopes.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://startdebugging.net/2026/08/mcp-server-design-for-a-large-internal-api-surface/&quot;&gt;Continue reading on &lt;strong&gt;startdebugging.net&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/http&quot;&gt;#http&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/the-ai-native-sdlc-playbook</id>
    <title>🔗 The AI-native SDLC playbook</title>
    <updated>2026-11-03T09:00:00Z</updated>
    <published>2026-11-03T09:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/the-ai-native-sdlc-playbook"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;How can AI reshape the software development lifecycle? In this playbook by Louis Claxton, the transformation of the traditional SDLC into an AI-native approach is detailed. The article outlines how AI, specifically Claude, can streamline processes across all stages—planning, design, building, testing, deploying, and maintaining software. By shifting focus from a human-centric to an AI-assisted model, organizations can eliminate bottlenecks that currently constrain productivity. Claxton provides actionable insights through various stages of an AI-native SDLC, showcasing how to leverage AI for automated processes while keeping human oversight in critical areas. This playbook serves as a practical guide for enterprises looking to adopt AI in their software development workflows, challenging outdated practices and encouraging a more efficient, collaborative environment.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://claude.com/blog/the-ai-native-sdlc-playbook&quot;&gt;Continue reading on &lt;strong&gt;claude.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/using-uv-for-installing-wagtail</id>
    <title>🔗 Using UV for installing Wagtail</title>
    <updated>2026-11-02T18:00:00Z</updated>
    <published>2026-11-02T18:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/using-uv-for-installing-wagtail"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In a recent article, Raphael Stolt shared his experience with &lt;code&gt;uv&lt;/code&gt;, the swift Python package and project manager, for setting up Wagtail on his Ubuntu development box. He highlighted how &lt;code&gt;uv&lt;/code&gt; simplifies the installation process and enhances the management of virtual environments. The guide walks through the commands needed to install Wagtail, set up a virtual environment, and start the server, ensuring a smooth transition for developers familiar with PHP tools like Composer. Stolt appreciates the speed and usability of &lt;code&gt;uv&lt;/code&gt;, likening its impact on Python to that of Composer on PHP. His insights shed light on the growing capabilities of Python tooling, making it an appealing option for developers.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://wagtail.org/blog/using-uv-for-installing-wagtail/&quot;&gt;Continue reading on &lt;strong&gt;wagtail.org&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/python&quot;&gt;#python&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/tools&quot;&gt;#tools&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/wagtail&quot;&gt;#wagtail&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/linux&quot;&gt;#linux&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://www.yellowduck.be/posts/nifty-django-feature-q-objects</id>
    <title>🔗 Nifty Django feature: Q() objects</title>
    <updated>2026-11-02T14:00:00Z</updated>
    <published>2026-11-02T14:00:00Z</published>
    <author><name>Pieter Claerhout</name><email>pieter@yellowduck.be</email></author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/nifty-django-feature-q-objects"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;A nifty feature of Django that is often underutilized is the &lt;code&gt;Q&lt;/code&gt; object, which allows developers to express complex SQL conditions. &lt;code&gt;Q&lt;/code&gt; objects can be combined with filters to dynamically build queries, enabling more flexible and powerful database interactions.&lt;/p&gt;
&lt;p&gt;For instance, when searching for pets that need treats, &lt;code&gt;Q&lt;/code&gt; objects can help combine conditions easily. With an example implementation, a &lt;code&gt;Pet&lt;/code&gt; model is shown that effectively uses the &lt;code&gt;Q&lt;/code&gt; feature to find pets who are starving by checking treat statuses. Additionally, composing &lt;code&gt;Q&lt;/code&gt; objects dynamically opens new ways to tailor queries based on user input or other dynamic variables.&lt;/p&gt;
&lt;p&gt;Overall, understanding how to utilize and compose &lt;code&gt;Q&lt;/code&gt; objects can significantly enhance querying capabilities in Django, reducing redundancy and streamlining how developers interact with the database.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.better-simple.com/django/2026/09/09/nifty-feature-q-objects/?_bhlid=ff02589bc80f3beb58223ab4ef3d07fa71981a28&quot;&gt;Continue reading on &lt;strong&gt;www.better-simple.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/django&quot;&gt;#django&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
</feed>
