<?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">
  <link href="https://www.yellowduck.be" rel="alternate"/>
  <link href="https://www.yellowduck.be/posts/feed" rel="self"/>
  <author>
    <name>Pieter Claerhout</name>
    <email>pieter@yellowduck.be</email>
  </author>
  <id>https://www.yellowduck.be/posts/feed</id>
  <title>🐥 YellowDuck.be</title>
  <updated>2026-09-28T08:00:00Z</updated>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/how-ai-text-watermarking-works-a-visual-guide" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;A watermark in plain text may seem impossible, as text lacks pixels and metadata. However, Google has implemented text watermarking from Gemini, starting in 2024, with new Claude models marking text invisibly and resiliently as of August 2026. These marks reside in the choices between words, not within the characters themselves.&lt;/p&gt;
&lt;p&gt;The process involves small word choices made by a model that rolls weighted dice among acceptable options. Each choice can secretly lean toward certain words using a key, which makes counting colored choices easier for detection. The text can still read normally, but marked sections show an imbalance when re-evaluated with the correct key. Even editing alters the marks, as they depend on unbroken runs of original text.&lt;/p&gt;
&lt;p&gt;Detection remains private and needs the provider’s key, contrasting with unreliable AI style detectors. This method can indicate whether a text has been processed without confirming authorship. Overall, it highlights the ongoing battle in maintaining and detecting AI-generated information.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://declaude.org/watermarking/&quot;&gt;Continue reading on &lt;strong&gt;declaude.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/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>
    <published>2026-09-28T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/how-ai-text-watermarking-works-a-visual-guide</id>
    <title>🔗 How AI text watermarking works: a visual guide</title>
    <updated>2026-09-28T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/elixirs-genstage-demand-a-visual-explainer" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;GenStage is a powerful Elixir abstraction that manages data processing through a simple yet effective concept: demand. As articulated by Andrea Leopardi, the article delves into how GenStage enables efficient data flow between producers and consumers while tackling a common issue in concurrent systems—the problem of unbounded queues. The discussion begins with a real-world example involving message consumption from a queue, illustrating how demand controls the rate at which producers send data. By employing a simple demand structure, consumers can regulate their intake and prevent overwhelming the system. The examination highlights how demand helps manage resources and explores important parameters like &lt;code&gt;max_demand&lt;/code&gt; and &lt;code&gt;min_demand&lt;/code&gt;, which dictate the rhythm of event processing. With clear explanations and practical examples, the piece offers vital insights for those looking to harness the full potential of GenStage in their applications.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://andrealeopardi.com/posts/genstage-demand-visualized/&quot;&gt;Continue reading on &lt;strong&gt;andrealeopardi.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/pattern&quot;&gt;#pattern&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/elixir&quot;&gt;#elixir&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-27T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/elixirs-genstage-demand-a-visual-explainer</id>
    <title>🔗 Elixir&apos;s GenStage demand (a visual explainer)</title>
    <updated>2026-09-27T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/the-elixir-hiring-paradox-notes-from-elixirconf-eu-2026" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Three common hiring mistakes plague companies looking for Elixir engineers. Arjun Gillard shared insights from his lightning talk at ElixirConf EU 2026 in Málaga, emphasizing that successful hiring requires a clear definition of success in the first 90 days. He noted that recruiters often fail to recognize that volume of applicants doesn&apos;t equal quality, and that evaluating candidates based solely on years of experience in Elixir technologies like Phoenix and LiveView misses the more crucial aspect: an applicant&apos;s reasoning skills. With Elixir&apos;s talent pool being tight-knit and relatively small in Europe, word travels fast when companies implement poor hiring processes. Gillard&apos;s observations highlight the importance of thoughtful, community-driven recruitment strategies that engage with candidates&apos; conceptual understanding rather than their memorized skills in the stack.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://agtalent.co.uk/the-elixir-hiring-paradox-notes-from-elixirconf-eu-2026/&quot;&gt;Continue reading on &lt;strong&gt;agtalent.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/elixir&quot;&gt;#elixir&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/announcement&quot;&gt;#announcement&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-27T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/the-elixir-hiring-paradox-notes-from-elixirconf-eu-2026</id>
    <title>🔗 The Elixir hiring paradox: notes from ElixirConf EU 2026</title>
    <updated>2026-09-27T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/japan-tried-to-build-an-operating-system-for-the-entire-world-then-the-us-government-intervened" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;There&apos;s an alternate history of computing where Windows wasn&apos;t the dominant OS. This article reveals how Japan&apos;s TRON project aimed to replace traditional file systems with a hypermedia document model, but U.S. government intervention labeled it a trade barrier in 1989. Designed by Ken Sakamura at the University of Tokyo in 1984, TRON included sub-architectures like BTRON for personal computing and ITRON for embedded systems. Despite the ambitious goal of integrating Japan&apos;s digital infrastructure, BTRON was ultimately sidelined. Its design features, like a unique document-centric interface and a character encoding system capable of supporting over a million characters, were years ahead of their time. ITRON, however, succeeded in becoming widely used in embedded systems, marking a significant yet often overlooked chapter in technology history and highlighting the impact of global market dynamics on innovation.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.xda-developers.com/japan-tried-build-operating-system-entire-world-us-government-intervened/&quot;&gt;Continue reading on &lt;strong&gt;www.xda-developers.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;/p&gt;</content>
    <published>2026-09-26T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/japan-tried-to-build-an-operating-system-for-the-entire-world-then-the-us-government-intervened</id>
    <title>🔗 Japan tried to build an operating system for the entire world, then the US government intervened</title>
    <updated>2026-09-26T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/a-struct-is-just-a-map-with-rules" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Elixir&apos;s structs are more than just advanced maps; they enforce rules that prevent typographical errors. When modeling data, like a user profile, using a map can lead to subtle bugs if a key is misspelled — Elixir won&apos;t catch it. Bruce Tate points out that structs enable you to define specific keys within a module, allowing the compiler to enforce structure and prevent mistakes. Each struct contains an extra &lt;code&gt;__struct__&lt;/code&gt; key that links it to the module&apos;s definitions, ensuring the correct framework is maintained. By contrasting maps and structs, Tate emphasizes that maps are useful for dynamic and flexible data, while structs are designed for fixed data types. This nuanced distinction helps developers make informed choices when structuring Elixir applications, aligning with best practices seen within Elixir&apos;s own modules. Using structs can significantly improve code reliability and clarity.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://grox.io/blog/46-a-struct-is-just-a-map-with-rules/&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/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/elixir&quot;&gt;#elixir&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-26T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/a-struct-is-just-a-map-with-rules</id>
    <title>🔗 A struct is just a map with rules</title>
    <updated>2026-09-26T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/the-reality-of-being-a-cto" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;What does being a CTO really entail? James Stanier reveals that the role is often misunderstood. It ranges from a hands-on founder writing code to a board-level executive. The unique challenges include balancing technology with business outcomes and navigating high-stakes conversations beyond engineering. Stanier emphasizes that a successful CTO must bridge the gap between technical prowess and executive responsibility. He shares insights on managing time between team collaboration and conversations with other functional leaders, which is crucial for operating effectively. The evolving nature of AI introduces additional complexities, as it shifts hiring practices and expectations. Ultimately, being a CTO requires strong financial acumen and the ability to prioritize organizational strategy over just technical excellence.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://leaddev.com/leadership/the-reality-of-being-a-cto&quot;&gt;Continue reading on &lt;strong&gt;leaddev.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/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-26T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/the-reality-of-being-a-cto</id>
    <title>🔗 The reality of being a CTO</title>
    <updated>2026-09-26T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/full-text-search-at-contentful-just-got-faster-why-its-important-and-how-we-did-it" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Full-text search in Contentful just got faster — we improved the median response time by 35%. This is the story of how we did it and why it&apos;s important.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.contentful.com/blog/contentful-faster-full-text-search/&quot;&gt;Continue reading on &lt;strong&gt;www.contentful.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/devops&quot;&gt;#devops&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-25T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/full-text-search-at-contentful-just-got-faster-why-its-important-and-how-we-did-it</id>
    <title>🔗 Full-text search at Contentful just got faster: Why it’s important and how we did it</title>
    <updated>2026-09-25T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/re-linking-patchwork-with-sashiko" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;On July 14, 2026, Linus Torvalds expressed strong opinions about the role of AI in the Linux kernel development process. He countered the notion of an anti-AI stance within the community, making it clear that AI tools, including LLMs, can enhance the work of maintainers rather than hinder it. Torvalds emphasized that dismissing AI outright fails to recognize its utility and that the kernel community prioritizes technological merit above all. He noted that while AI isn&apos;t flawless, its capabilities have reached a level where it is undeniably beneficial to the project. He urged contributors to embrace these tools and focus on how they can assist rather than complicate development workflows. Torvalds remains committed to a technology-driven approach for the kernel, rejecting any viewpoints based purely on ideological objections.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/linux-media/CAHk-=wi4zC+Ze8e+p3tMv8TtG_80KzsZ1syL9anBtmEh5Z40vg@mail.gmail.com/&quot;&gt;Continue reading on &lt;strong&gt;lore.kernel.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/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/ai&quot;&gt;#ai&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/linux&quot;&gt;#linux&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-25T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/re-linking-patchwork-with-sashiko</id>
    <title>🔗 Re: Linking Patchwork with Sashiko?</title>
    <updated>2026-09-25T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/go-1-27-release-notes" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Go 1.27 has arrived with significant toolchain, runtime, and library updates. It introduces support for generic methods, allowing methods to declare their own type parameters, promoting better data type encapsulation. The &lt;code&gt;math/rand/v2&lt;/code&gt; module now has a generic method signature. Additionally, the release enhances package tools like response file parsing for smoother builds, while deprecating support for &lt;code&gt;bzr&lt;/code&gt; version control. In terms of testing and documentation, &lt;code&gt;go test&lt;/code&gt; now performs a standard library version check by default, and &lt;code&gt;go doc&lt;/code&gt; introduces new syntax for package documentation. It also brings improvements to memory allocation processes and introduces new profiling options, specifically for identifying leaked goroutines. Notably, the addition of new libraries, including &lt;code&gt;encoding/json/v2&lt;/code&gt; and &lt;code&gt;crypto/mldsa&lt;/code&gt;, further enriches the Go ecosystem with modernized functionalities. With Go 1.27, programmers can expect an overall improved experience while maintaining compatibility with previous versions.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://go.dev/doc/go1.27&quot;&gt;Continue reading on &lt;strong&gt;go.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/golang&quot;&gt;#golang&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/announcement&quot;&gt;#announcement&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-25T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/go-1-27-release-notes</id>
    <title>🔗 Go 1.27 release notes</title>
    <updated>2026-09-25T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/how-instacart-built-a-modern-search-infrastructure-on-postgres" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In a previous blog post &lt;a href=&quot;https://tech.instacart.com/optimizing-search-relevance-at-instacart-using-hybrid-retrieval-88cb579b959c&quot;&gt;“Improving search at Instacart using hybrid recall”&lt;/a&gt;, we shared our progress on adaptively combining traditional full text search with embedding-based retrieval. Embarking on this journey required rethinking our search infrastructure to support hybrid recall while ensuring scalability and reliability. In this blog post, we will dive deeper into the architecture and engineering efforts that made this possible and lessons learned along the way.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://tech.instacart.com/how-instacart-built-a-modern-search-infrastructure-on-postgres-c528fa601d54&quot;&gt;Continue reading on &lt;strong&gt;tech.instacart.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/postgresql&quot;&gt;#postgresql&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/devops&quot;&gt;#devops&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-24T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/how-instacart-built-a-modern-search-infrastructure-on-postgres</id>
    <title>🔗 How Instacart built a modern search infrastructure on PostgreSQL</title>
    <updated>2026-09-24T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/building-distributed-systems-in-elixir-part-5-supervisor-from-scratch" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In the latest installment of his series, the article breaks down how to create a supervisor from scratch in Elixir, emphasizing the concepts of process links and exit signals. The author illustrates the implementation of a manual supervisor managing two worker processes, highlighting its ability to restart failed workers without affecting healthy ones. The restart policy is simplified to focus only on abnormal exits, mimicking some of the mechanisms provided by OTP without using its built-in features. Through concrete examples, the piece clarifies how to track child processes and respond appropriately to crashes while maintaining the system&apos;s resilience. This hands-on approach aids in understanding distributed systems, making the complexities of supervision more approachable for Elixir developers.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://dev.to/pckrishnadas88/building-distributed-systems-in-elixir-part-5-supervisor-from-scratch-32mh&quot;&gt;Continue reading on &lt;strong&gt;dev.to&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/pattern&quot;&gt;#pattern&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/elixir&quot;&gt;#elixir&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-24T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/building-distributed-systems-in-elixir-part-5-supervisor-from-scratch</id>
    <title>🔗 Building distributed systems in Elixir: Part 5 — Supervisor from scratch</title>
    <updated>2026-09-24T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/building-distributed-systems-in-elixir-part-4-process-linking" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In this article, Krishnadaspc dives into the concept of process linking in Elixir, exploring how failure relationships affect processes. He explains that when a parent process and a worker process are linked, if one fails, the other can be impacted, which helps maintain system integrity. The piece showcases examples using &lt;code&gt;spawn_link/1&lt;/code&gt; and &lt;code&gt;Process.flag(:trap_exit, true)&lt;/code&gt; to illustrate how to create and manage linked processes. It elaborates on how abnormal exits propagate exit signals and how they differ from normal exits. Readers learn the importance of managing these relationships for building resilient distributed systems.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://dev.to/pckrishnadas88/building-distributed-systems-in-elixir-part-4-process-linking-okb&quot;&gt;Continue reading on &lt;strong&gt;dev.to&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/pattern&quot;&gt;#pattern&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/elixir&quot;&gt;#elixir&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-24T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/building-distributed-systems-in-elixir-part-4-process-linking</id>
    <title>🔗 Building distributed systems in Elixir: Part 4 — Process linking</title>
    <updated>2026-09-24T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/building-distributed-systems-in-elixir-part-3-process-monitoring" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;What happens when a process dies in a distributed Elixir application? Instead of polling to check if a worker is alive, Elixir provides an elegant solution through process monitoring. This article guides readers through building a process monitoring system using the &lt;code&gt;Process.monitor/1&lt;/code&gt; function. It highlights how to receive notifications about process terminations without relying on supervisors or GenServers. Through practical examples, it demonstrates how to handle both normal exits and crashes effectively, ensuring that processes can monitor each other’s lifecycles seamlessly. By leveraging Elixir’s message-passing model, the author emphasizes that failure detection can be integrated into the communication flow of distributed systems, laying the groundwork for more resilient application architectures.&lt;/p&gt;
&lt;p&gt;For real applications with multiple workers, it also outlines how to manage and track multiple processes using maps to correlate monitor references with worker identifiers. Ultimately, this part of the series sets the stage for exploring process links in the next installment.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://dev.to/pckrishnadas88/building-distributed-systems-in-elixir-part-3-process-monitoring-5b5p&quot;&gt;Continue reading on &lt;strong&gt;dev.to&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/pattern&quot;&gt;#pattern&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/elixir&quot;&gt;#elixir&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-23T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/building-distributed-systems-in-elixir-part-3-process-monitoring</id>
    <title>🔗 Building distributed systems in Elixir: Part 3 — Process monitoring</title>
    <updated>2026-09-23T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/building-distributed-systems-in-elixir-part-1-building-a-stateful-process-in-elixir-without-genserver" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;What if a counter could be a process instead of just a variable? This article introduces the concept of building stateful processes in Elixir without using &lt;code&gt;GenServer&lt;/code&gt;, focusing on the underlying message-passing model. The author, Krishnadas, details the creation of a simple counter process using only basic constructs like &lt;code&gt;spawn&lt;/code&gt;, &lt;code&gt;send&lt;/code&gt;, and &lt;code&gt;receive&lt;/code&gt;. The piece illustrates how multiple clients can interact with the counter while maintaining the integrity of its state. By allowing processes to own their state and communicate solely through messages, Elixir embraces a design that minimizes synchronization issues commonly seen in multithreaded environments. This foundational understanding prepares readers for the more complex topics of OTP and distributed messaging to be discussed in future articles.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://dev.to/pckrishnadas88/building-a-stateful-process-in-elixir-without-genserver-58eb&quot;&gt;Continue reading on &lt;strong&gt;dev.to&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/pattern&quot;&gt;#pattern&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/elixir&quot;&gt;#elixir&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-23T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/building-distributed-systems-in-elixir-part-1-building-a-stateful-process-in-elixir-without-genserver</id>
    <title>🔗 Building distributed systems in Elixir: Part 1 - Building a stateful process in Elixir without GenServer</title>
    <updated>2026-09-23T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/your-application-is-already-an-mcp-server" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Today marks the release of &lt;code&gt;tempest/mcp&lt;/code&gt;, a new package designed for integrating AI clients with Tempest applications via the Model Context Protocol (MCP). This tool allows support agents to interact seamlessly with tasks like updating tickets and checking application states without needing to build separate applications. With &lt;code&gt;tempest/mcp&lt;/code&gt;, key functionalities are embedded within an application’s existing architecture, transforming classes into servers and simplifying backend intricacies related to dependencies and validations. The article describes a real-world use case: creating an AI-powered support desk using SQLite that facilitates various ticket operations. By leveraging Tempest&apos;s validation and dependency management, the package ensures that all interactions are smooth and consistent, paving the way for real-time integration of AI functionalities in applications. It&apos;s an exciting step towards enhancing how applications can leverage AI in operational workflows, even while still in its experimental phase.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://tempestphp.com/blog/tempest-mcp&quot;&gt;Continue reading on &lt;strong&gt;tempestphp.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/ai&quot;&gt;#ai&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/elixir&quot;&gt;#elixir&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-23T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/your-application-is-already-an-mcp-server</id>
    <title>🔗 Your application is already an MCP server</title>
    <updated>2026-09-23T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/your-ci-should-be-disposable" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Your CI should only schedule builds, not install dependencies. It promotes a disposable approach, allowing local runs with a simple command. The article highlights using tools like Docker, Nix, or Makefiles to keep the process streamlined. With a well-defined workflow like &lt;code&gt;steps: name: Do the thing run: nix build .#&lt;/code&gt;, developers can maintain control over their builds. This method ensures delivery continuity, even when services like GitHub Actions encounter issues, urging engineers to think about alternatives.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://oppi.li/posts/disposable_ci/&quot;&gt;Continue reading on &lt;strong&gt;oppi.li&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/docker&quot;&gt;#docker&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-22T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/your-ci-should-be-disposable</id>
    <title>🔗 Your CI should be disposable</title>
    <updated>2026-09-22T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/ten-books-that-shaped-how-i-think" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;What foundational texts have fundamentally influenced an engineer&apos;s mindset? This article highlights ten impactful books, each shaping a crucial aspect of thinking in engineering and beyond. From John Ousterhout&apos;s &lt;em&gt;A Philosophy of Software Design&lt;/em&gt;, which emphasizes hiding complexity through deep modules, to Joseph Weizenbaum&apos;s &lt;em&gt;Computer Power and Human Reason&lt;/em&gt;, which critiques reliance on technology, these selections serve as a guide for bridging theory and practice. Readers will find valuable insights into systems thinking, design principles, and the communications challenges of software development. The author&apos;s personal connection to these texts makes them compelling reading for anyone looking to refine their approach to engineering and design.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.birkey.co/2026-05-18-ten-books-that-shaped-how-i-think.html&quot;&gt;Continue reading on &lt;strong&gt;www.birkey.co&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;/p&gt;</content>
    <published>2026-09-22T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/ten-books-that-shaped-how-i-think</id>
    <title>🔗 Ten books that shaped how I think</title>
    <updated>2026-09-22T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/the-case-for-tri-state-dark-mode-toggles" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Adding a dark mode toggle often leads many developers to implement a simple binary switch. However, the article argues that this approach is flawed for user experience. A tri-state control—allowing options for system, light, and dark modes—provides clearer intent and avoids confusion. The author references a experience where he challenged existing conventions by polling users, which overwhelmingly favored the tri-state option. The drawbacks of two-state controls are highlighted, particularly when a user&apos;s OS automatically switches themes. By offering clarity over brevity, tri-state controls not only help users express their preferences more explicitly but also reduce unexpected changes in the interface. This article encourages developers to rethink how they approach dark mode toggles, emphasizing predictability and user intent.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.bram.us/2026/08/18/the-case-for-tri-state-dark-mode-toggles/&quot;&gt;Continue reading on &lt;strong&gt;www.bram.us&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/frontend&quot;&gt;#frontend&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/css&quot;&gt;#css&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-22T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/the-case-for-tri-state-dark-mode-toggles</id>
    <title>🔗 The case for tri-state dark mode toggles</title>
    <updated>2026-09-22T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/1-million-db-updates-3-days-200-lines-of-go-a-legacy-rescue-story" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;A legacy PHP application faced daily failures, causing delays in marketing campaigns. Instead of a complete rewrite, the team opted for a minimal intervention using Go and RabbitMQ. By decoupling the request lifecycle, they managed to process user updates asynchronously without overwhelming the database. The solution, implemented in just 200 lines of Go, led to zero failures over 18 months, demonstrating the power of simplicity and idempotency in rescue scenarios. This article details the challenges faced, the design choices made, and the significant outcomes achieved. It&apos;s a practical case study that underscores the need for adaptive, low-risk solutions in legacy systems.&lt;/p&gt;
&lt;pre class=&quot;lumis&quot;&gt;&lt;code class=&quot;language-go&quot; translate=&quot;no&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;1&quot;&gt;package main
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;2&quot;&gt;
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;3&quot;&gt;import (
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;4&quot;&gt; &quot;database/sql&quot;
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;5&quot;&gt; &quot;time&quot;
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;6&quot;&gt;)
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;7&quot;&gt;
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;8&quot;&gt;func processBatch(messages []StatusMessage) error {
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;9&quot;&gt; // 1. Fixed batch size of 50,000 messages.
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;10&quot;&gt; batch := messages[:50000]
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;11&quot;&gt; // 2. Begin an atomic transaction. (ALL or NOTHING)
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;12&quot;&gt; tx, err := db.Begin()
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;13&quot;&gt; if err != nil {
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;14&quot;&gt; return err
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;15&quot;&gt; }
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;16&quot;&gt; defer tx.Rollback()
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;17&quot;&gt; // 3. Process updates within the transaction.
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;18&quot;&gt; for _, msg := range batch {
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;19&quot;&gt; _, err := tx.Exec(
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;20&quot;&gt; ` UPDATE users SET status = &amp;#39;processed&amp;#39; WHERE id = $1 AND status = &amp;#39;pending&amp;#39; `,
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;21&quot;&gt; msg.UserID)
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;22&quot;&gt; if err != nil {
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;23&quot;&gt; return err
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;24&quot;&gt; }
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;25&quot;&gt; }
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;26&quot;&gt; // 4. Commit the batch atomically.
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;27&quot;&gt; if err := tx.Commit(); err != nil {
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;28&quot;&gt; return err
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;29&quot;&gt; }
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;30&quot;&gt; // 5. Acknowledge messages to RabbitMQ ONLY after commit.
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;31&quot;&gt; for _, msg := range batch {
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;32&quot;&gt; msg.Ack()
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;33&quot;&gt; }
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;34&quot;&gt; // 6. Static Backpressure: Sleep for 2 seconds.
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;35&quot;&gt; time.Sleep(2 * time.Second)
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;36&quot;&gt; return nil
&lt;/div&gt;&lt;div class=&quot;l-line&quot; data-line=&quot;37&quot;&gt;}&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://dev.to/pckrishnadas88/async-processing-for-dashboard-clicks-batch-updates-in-go-6p8&quot;&gt;Continue reading on &lt;strong&gt;dev.to&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/golang&quot;&gt;#golang&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/devops&quot;&gt;#devops&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-21T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/1-million-db-updates-3-days-200-lines-of-go-a-legacy-rescue-story</id>
    <title>🔗 1 million DB updates, 3 days, 200 lines of Go: A legacy rescue story</title>
    <updated>2026-09-21T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/the-agent-needs-identity-the-model-does-not" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;A support agent may need a customer&apos;s email address to perform a lookup, but importantly, the model does not require that information. This article delves into the challenges of maintaining this distinction throughout an agent&apos;s operations, especially as it starts calling tools. With a practical demonstration using a support agent built with Phoenix LiveView, OpenAI, and other tools, it explores how personal information can inadvertently escape through various application states and tool arguments. The author outlines strategies to protect identity relationships while allowing necessary data access for operations. By designing these safeguards, agents can operate effectively without exposing sensitive customer information to models. This ensures a balance between functionality and privacy, showcasing a modern architectural approach to identity management in applications.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://hfiguera.github.io/obscura/blog/the-agent-needs-identity-the-model-does-not/&quot;&gt;Continue reading on &lt;strong&gt;hfiguera.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/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;a href=&quot;https://www.yellowduck.be/tags/phoenix&quot;&gt;#phoenix&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-21T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/the-agent-needs-identity-the-model-does-not</id>
    <title>🔗 The agent needs identity. The model does not.</title>
    <updated>2026-09-21T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/cant-touch-the-dom-reach-for-has-to-style-any-element" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Using third-party component libraries can speed up development but often limits styling flexibility. Andrew Spencer introduces the CSS pseudo-class &lt;code&gt;:has()&lt;/code&gt;, which allows developers to style parent or sibling elements without modifying the DOM directly. This tool lets you style elements based on the presence of others, unlocking new possibilities in CSS design. It&apos;s particularly useful for handling components from libraries where custom styles might be challenging. For example, &lt;code&gt;:has(.error)&lt;/code&gt; enables dynamic styles like changing the label color based on the error state of an input. With growing browser support, this feature heralds a new era for more straightforward styling adjustments in complex component libraries.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://thoughtbot.com/blog/can-t-touch-the-dom-reach-for-has&quot;&gt;Continue reading on &lt;strong&gt;thoughtbot.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/frontend&quot;&gt;#frontend&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/css&quot;&gt;#css&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/html&quot;&gt;#html&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-21T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/cant-touch-the-dom-reach-for-has-to-style-any-element</id>
    <title>🔗 Can’t touch the DOM? Reach for :has() to style any element</title>
    <updated>2026-09-21T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/engineering-judgment-matters-more-than-ever" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;The rise of AI agents in software development raises a critical question: can technology replace human engineering judgment? In a recent article, the author&apos;s experience illustrates how coding methodologies have transitioned with the integration of AI tools like GitHub Copilot and Claude Code. They now spend 80% of their time relying on these agents, which handle implementation tasks autonomously, allowing engineers to focus on strategy and design. However, the article emphasizes that despite advancements, AI tools still fall short in areas requiring deep understanding and contextual awareness. Good engineering requires not just coding ability but also an awareness of existing solutions, organizational history, and collaborative decision-making. The article provides valuable insights into the delicate balance of leveraging technology while maintaining essential human oversight in engineering workflows.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://boredhacking.com/coding-with-ai-agents-2026/&quot;&gt;Continue reading on &lt;strong&gt;boredhacking.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>
    <published>2026-09-20T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/engineering-judgment-matters-more-than-ever</id>
    <title>🔗 Engineering judgment matters more than ever</title>
    <updated>2026-09-20T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/apis-are-100x-more-important-than-five-years-ago-and-still-uncool" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;APIs might be boring topics for casual conversation, but their significance has skyrocketed. Kin Lane reveals that APIs are now about a hundred times more crucial than they were five years ago, even as their visibility diminishes. While AI grabs the spotlight, it relies heavily on APIs for functionality, creating a paradox where APIs remain essential yet overlooked.&lt;/p&gt;
&lt;p&gt;The shift is not just in importance but in audience too. APIs, once tailored for developers, are now increasingly designed for automated agents without human patience or context. This change demands more precise documentation and clearer structures, removing the leeway humans once had. Lane argues that while the industry may overlook APIs, their foundational role will only grow, making those who invest in their infrastructure the real winners in the future.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://apievangelist.com/2026/08/16/apis-are-100x-more-important-and-still-uncool/?via=dailydev&quot;&gt;Continue reading on &lt;strong&gt;apievangelist.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/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>
    <published>2026-09-20T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/apis-are-100x-more-important-than-five-years-ago-and-still-uncool</id>
    <title>🔗 APIs are 100x more important than five years ago, and still uncool</title>
    <updated>2026-09-20T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/a-deep-and-fuzzy-dive-into-search" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;How does fuzzy search transform how we match terms in data? This article by Andrey Abramov unveils the inner workings of fuzzy search algorithms like Levenshtein automata and n-gram similarity. Initially launched in SereneDB six years ago, the article revisits the foundational algorithms that enable approximate matching in a new SQL-focused environment. It highlights the need for fuzzy search in handling unstructured text across fields from linguistics to bioinformatics, emphasizing its importance in deduplication scenarios. The author clearly explains how the Levenshtein distance defines similarity measures, and describes the powerful automaton trick that optimizes searching for close matches. The journey through theory and implementation offers insights into the complexity of scaling fuzzy search algorithms effectively.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://blog.serenedb.com/fuzzy-search-deep-dive&quot;&gt;Continue reading on &lt;strong&gt;blog.serenedb.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/sql&quot;&gt;#sql&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-20T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/a-deep-and-fuzzy-dive-into-search</id>
    <title>🔗 A deep (and fuzzy) dive into search</title>
    <updated>2026-09-20T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/how-i-use-ai-in-2026-coding-writing-learning-assistant-ing" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;One of the best ways to learn how to use AI effectively is by observing a power user and experimenting with different technologies to discern genuine functionality from hype. In this follow-up to &lt;strong&gt;How I use AI (2025)&lt;/strong&gt;, Shrivu Shankar shares his latest interactions with AI tools. He details his coding and research projects, utilizing &lt;code&gt;Codex&lt;/code&gt; and &lt;code&gt;Claude Code&lt;/code&gt; without custom features to facilitate workflows. Shankar emphasizes the importance of initial prompts, stating that 95% of the code is generated in a single run.&lt;/p&gt;
&lt;p&gt;For writing, he recognizes the growing challenge of distinguishing AI-generated text from genuine effort, opting for a human touch instead. He also transforms research papers into interactive &lt;code&gt;HTML&lt;/code&gt; files to enhance learning experiences. Notably, Shankar&apos;s approach to personal assistants has evolved, focusing on efficiency and minimal interference, with the goal of reducing notification fatigue while maintaining productivity. His commitment to cost-effective subscription choices showcases a practical approach to leveraging AI technologies.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://blog.sshh.io/p/how-i-use-ai-in-2026-coding-writing&quot;&gt;Continue reading on &lt;strong&gt;blog.sshh.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/development&quot;&gt;#development&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/tools&quot;&gt;#tools&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-09-19T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/how-i-use-ai-in-2026-coding-writing-learning-assistant-ing</id>
    <title>🔗 How I use AI in 2026 (Coding, Writing, Learning, Assistant-ing)</title>
    <updated>2026-09-19T17:00:00Z</updated>
  </entry>
</feed>