<?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 rel="alternate" href="https://www.yellowduck.be"/>
  <link rel="self" href="https://www.yellowduck.be/posts/feed"/>
  <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-04-04T13:00:00Z</updated>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/designing-ai-features-that-actually-help-users"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Many AI features often misfire due to poor interface design rather than flawed models. By maintaining the original workflow structure, AI can effectively translate user intent into structured data that enhances functionality without overwhelming users.&lt;/p&gt;
&lt;p&gt;Traditional filtering interfaces can become complex and unwieldy, making it hard for users to articulate their needs. This approach proposes an intuitive AI-driven intent layer that simplifies user interactions by converting natural language into understandable filter parameters, leading to a more efficient and user-friendly experience.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.mimiquate.com/blog/designing-ai-features-that-actually-help-users&quot;&gt;Continue reading on &lt;strong&gt;www.mimiquate.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/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-04-04T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/designing-ai-features-that-actually-help-users</id>
    <title>🔗 Designing AI features that actually help users</title>
    <updated>2026-04-04T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/using-clickhouse-as-a-webhook-endpoint-with-hmac-verification"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;One of the standout features in ClickHouse 25.12 is the &lt;code&gt;HMAC&lt;/code&gt; function, which allows for message authentication with a shared key. This functionality enhances ClickHouse&apos;s ability to act as a webhook endpoint by enabling verification of incoming requests, thereby filtering out unauthorized sources.&lt;/p&gt;
&lt;p&gt;The setup involves three primary components: a staging table initiated with the &lt;code&gt;MergeTree&lt;/code&gt; engine, a materialized view for data validation, and a logs table to store successful entries. This method, paired with ClickHouse&apos;s architecture, ensures that only validated data is recorded, while invalid requests are rejected based on signature mismatches.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://clickhouse.com/blog/clickhouse-webhook-endpoint&quot;&gt;Continue reading on &lt;strong&gt;clickhouse.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;/p&gt;</content>
    <published>2026-04-04T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/using-clickhouse-as-a-webhook-endpoint-with-hmac-verification</id>
    <title>🔗 Using ClickHouse as a webhook endpoint with HMAC verification</title>
    <updated>2026-04-04T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/re-implementing-the-google-reader-api-in-2025"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In 2025, a post details the implementation of a Google Reader API-compatible service using Elixir. Despite challenges with the original API&apos;s lack of documentation, a baseline features implementation emerges, including logging in, fetching subscriptions, and managing feed item statuses.&lt;/p&gt;
&lt;p&gt;The project illustrates the complexity of working with reverse-engineered specifications and feeds, emphasizing the need for compatibility with evolving RSS clients. It describes essential concepts and endpoints while acknowledging that the API&apos;s intricacies make achieving a complete implementation challenging yet feasible for practical use.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.davd.io/posts/2025-02-05-reimplementing-google-reader-api-in-2025/&quot;&gt;Continue reading on &lt;strong&gt;www.davd.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/tools&quot;&gt;#tools&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-04-03T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/re-implementing-the-google-reader-api-in-2025</id>
    <title>🔗 Re-Implementing the Google Reader API in 2025</title>
    <updated>2026-04-03T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/thinking-elixir-podcast-297-javascript-joins-the-beam"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;News includes Quickbeam bringing a full JS runtime into the BEAM, Elixir’s type system inspiring Python’s Ruff, LiveView Debugger v0.7, Oban v2.21, and more!&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://podcast.thinkingelixir.com/297&quot;&gt;Continue reading on &lt;strong&gt;podcast.thinkingelixir.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/elixir&quot;&gt;#elixir&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-04-03T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/thinking-elixir-podcast-297-javascript-joins-the-beam</id>
    <title>🔗 Thinking Elixir Podcast 297: JavaScript Joins the BEAM?</title>
    <updated>2026-04-03T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/ai-should-help-us-produce-better-code"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Many developers fear that AI tools will compromise code quality, producing hastily written, flawed code. Instead of accepting poor output, teams should address flaws directly and choose to improve their code quality.&lt;/p&gt;
&lt;p&gt;Technical debt often arises from trade-offs during development, and avoiding it in the first place is ideal. Coding agents, like Gemini Jules and OpenAI Codex, can effectively handle refactoring tasks and enhance the development process without disruption, ensuring higher quality outputs with minimal cost.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://simonwillison.net/guides/agentic-engineering-patterns/better-code/&quot;&gt;Continue reading on &lt;strong&gt;simonwillison.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/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-04-03T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/ai-should-help-us-produce-better-code</id>
    <title>🔗 AI should help us produce better code</title>
    <updated>2026-04-03T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/why-use-static-closures"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In PHP, static closures are significant since they prevent unintended references to the object, enhancing memory management. By using the &lt;code&gt;static&lt;/code&gt; keyword, developers can ensure closures do not bind to &lt;code&gt;$this&lt;/code&gt;, allowing for earlier memory release and avoidance of memory leaks.&lt;/p&gt;
&lt;p&gt;The upcoming PHP 8.6 update aims to automate this process with inferred static closures, optimizing performance and memory usage. This change will streamline code, making it safer by default and reducing the risk of accidental captures, further promoting efficient memory management in PHP development.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://f2r.github.io/en/static-closures.html&quot;&gt;Continue reading on &lt;strong&gt;f2r.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/php&quot;&gt;#php&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-04-02T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/why-use-static-closures</id>
    <title>🔗 Why use static closures?</title>
    <updated>2026-04-02T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/type-systems-are-leaky-abstractions-the-case-of-map-take-2"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Adding a type system to Elixir showcases the limits of expressive programming languages. This article examines the proposal of &lt;code&gt;Map.take!/2&lt;/code&gt; and its potential to enhance type safety by raising errors for missing keys in maps.&lt;/p&gt;
&lt;p&gt;The function aims to align with Elixir&apos;s dynamic nature while addressing type correctness. This post highlights challenges in achieving precise type signatures and suggests that utilizing macros may provide a viable solution to ensure static key validation without exposing the type system to unnecessary complexity.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://dashbit.co/blog/type-systems-are-leaky-abstractions-map-take&quot;&gt;Continue reading on &lt;strong&gt;dashbit.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/pattern&quot;&gt;#pattern&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-04-02T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/type-systems-are-leaky-abstractions-the-case-of-map-take-2</id>
    <title>🔗 Type systems are leaky abstractions: the case of Map.take!/2</title>
    <updated>2026-04-02T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/how-do-you-know-if-youre-a-good-leader"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In this article, self-reflection is highlighted as a crucial aspect of effective leadership. Drawing inspiration from Abraham Lincoln&apos;s introspective writings, it emphasizes that good leaders embrace self-doubt, manage uncertainty, and seek honest feedback from multiple sources.&lt;/p&gt;
&lt;p&gt;Effective leadership isn’t about perfection but recognizing and addressing flaws. Leaders should engage in honest self-evaluation, understanding that their effectiveness is perceived through the experiences of others, not solely their self-assessment.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://mikefisher.substack.com/p/how-do-you-know-if-youre-a-good-leader&quot;&gt;Continue reading on &lt;strong&gt;mikefisher.substack.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;/p&gt;</content>
    <published>2026-04-01T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/how-do-you-know-if-youre-a-good-leader</id>
    <title>🔗 How do you know if you’re a good leader?</title>
    <updated>2026-04-01T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/good-software-knows-when-to-stop"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Good software excels by understanding its core purpose and knowing when to stop evolving. This article highlights that effective tools avoid unnecessary complexity and focus on what truly serves users&apos; needs.&lt;/p&gt;
&lt;p&gt;It emphasizes lessons from notable figures in software development, advocating for constraints as advantages. By prioritizing essential features and understanding underlying problems, developers can create better solutions and ensure their software remains impactful without overstretching.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://ogirardot.writizzy.com/p/good-software-knows-when-to-stop&quot;&gt;Continue reading on &lt;strong&gt;ogirardot.writizzy.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/best-practice&quot;&gt;#best-practice&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-04-01T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/good-software-knows-when-to-stop</id>
    <title>🔗 Good software knows when to stop</title>
    <updated>2026-04-01T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/using-systemd-units-for-laravel-cronjobs-and-background-processes"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Most Laravel applications require background processes on Linux servers. This article explains how to use &lt;code&gt;systemd&lt;/code&gt; for tasks like cronjobs or queue workers, instead of relying on Supervisor.&lt;/p&gt;
&lt;p&gt;Using &lt;code&gt;systemd&lt;/code&gt; offers centralized logging, dependency management, and resource limitation benefits. The article details creating service and timer units for running Laravel processes with corresponding examples and commands for verification.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://command-g.nl/en/articles/using-systemd-units-for-cronjobs-and-background-processes&quot;&gt;Continue reading on &lt;strong&gt;command-g.nl&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/laravel&quot;&gt;#laravel&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/linux&quot;&gt;#linux&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-04-01T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/using-systemd-units-for-laravel-cronjobs-and-background-processes</id>
    <title>🔗 Using systemd units for Laravel cronjobs and background processes</title>
    <updated>2026-04-01T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/weaving-stories-with-cascading-workflows"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;The newly announced Pro v1.6 RC introduces innovative workflow features, revolutionizing how tasks are coordinated. With its user-friendly design, building workflows requires no specialized knowledge, fostering creativity and spontaneity.&lt;/p&gt;
&lt;p&gt;The article showcases the creation of the &quot;Fire Saga&quot; workflow, which generates children&apos;s stories through generative AI. By employing Oban Workflows, it seamlessly manages task dependencies, making the storytelling process automated and efficient while producing delightful results.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://oban.pro/articles/weaving-stories-with-cascading-workflows&quot;&gt;Continue reading on &lt;strong&gt;oban.pro&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/pattern&quot;&gt;#pattern&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-03-31T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/weaving-stories-with-cascading-workflows</id>
    <title>🔗 Weaving stories with cascading workflows</title>
    <updated>2026-03-31T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/things-i-miss-about-spring-boot-after-switching-to-go"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;This article compares the advantages of Spring Boot with the simplicity of Go after transitioning from one to the other. It highlights Spring Boot’s extensive features like dependency injection, built-in validations, and a mature ecosystem which greatly aid backend development, whereas Go’s minimalism promotes explicit code and lower resource usage, making deployment easier and faster.&lt;/p&gt;
&lt;p&gt;The discussion emphasizes that Spring Boot offers solid foundational tools for complex applications, such as Spring Security and Spring Data, which facilitate quick implementation of essential backend features. Conversely, Go&apos;s concurrency model and quick startup times are beneficial for lightweight services and applications, stressing that each technology has its strengths based on the system needs.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://sushantdhiman.dev/things-i-miss-about-spring-boot-after-switching-to-go/&quot;&gt;Continue reading on &lt;strong&gt;sushantdhiman.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/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/java&quot;&gt;#java&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-03-31T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/things-i-miss-about-spring-boot-after-switching-to-go</id>
    <title>🔗 Things I miss about Spring Boot after switching to Go</title>
    <updated>2026-03-31T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/zen"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;When migrating API services from TypeScript to Go, the need for a lightweight HTTP framework that integrates with OpenAPI and offers precise middleware control becomes crucial. Zen emerges as a solution, focusing on simplicity and efficiency by utilizing Go&apos;s standard library without the bloat of complex dependencies.&lt;/p&gt;
&lt;p&gt;The structure of Zen allows for custom middleware execution, ensuring cleaner handlers that are focused solely on business logic. By adopting a schema-first approach for OpenAPI integration, Zen guarantees a rigorous API specification that enhances developer experience while maintaining control over the API contract.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.unkey.com/blog/zen&quot;&gt;Continue reading on &lt;strong&gt;www.unkey.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/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/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>
    <published>2026-03-30T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/zen</id>
    <title>🔗 A minimalist HTTP library for Go</title>
    <updated>2026-03-30T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/batch-inserts-in-sql-for-large-data-loads"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Large data loads in SQL require efficient insert strategies to enhance performance. Using single row inserts can significantly slow down operations due to overhead from network latency, statement parsing, and transaction commit cycles.&lt;/p&gt;
&lt;p&gt;Batching inserts minimizes these issues by reducing the number of statements sent to the database, leading to higher throughput. This article highlights the importance of transaction management, indexing, and how batch processing can optimize data loading strategies.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://freedium-mirror.cfd/https://medium.com/@AlexanderObregon/batch-inserts-in-sql-for-large-data-loads-b2aef69b0d95&quot;&gt;Continue reading on &lt;strong&gt;freedium-mirror.cfd&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/sql&quot;&gt;#sql&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-03-30T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/batch-inserts-in-sql-for-large-data-loads</id>
    <title>🔗 Batch inserts in SQL for large data loads</title>
    <updated>2026-03-30T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/why-i-stopped-using-ai-code-editors"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;TL;DR: I chose to make using AI a manual action, because I felt the slow loss of competence over time when I relied on it, and I recommend everyone to be cautious with making AI a key part of their workflow.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In late 2022, I used AI tools for the first time, even before the first version of ChatGPT. In 2023, I started using AI-based tools in my development workflow. Initially, I was super impressed with the capabilities of these LLMs. The fact that I could just copy and paste obscure compiler errors along with the C++ source code, and be told where the error is caused felt like magic.&lt;/p&gt;
&lt;p&gt;Once GitHub Copilot started becoming more and more powerful, I started using it more and more. I used various other LLM integrations right in my editor. Using AI was part of my workflow.&lt;/p&gt;
&lt;p&gt;In late 2024 I removed all LLM integrations from my code editors. I still use LLMs occasionally and I do think AI can be used in a way that is very beneficial for many programmers. So then why don’t I use AI-powered code editing tools?&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://lucianonooijen.com/blog/why-i-stopped-using-ai-code-editors/&quot;&gt;Continue reading on &lt;strong&gt;lucianonooijen.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/tools&quot;&gt;#tools&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/github&quot;&gt;#github&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-03-29T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/why-i-stopped-using-ai-code-editors</id>
    <title>🔗 Why I stopped using AI code editors</title>
    <updated>2026-03-29T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/your-agent-framework-is-just-a-bad-clone-of-elixir-concurrency-lessons-from-telecom-to-ai"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Recently, José Valim published &lt;a href=&quot;https://dashbit.co/blog/why-elixir-best-language-for-ai?ref=georgeguimaraes.com&quot;&gt;&quot;Why Elixir is the Best Language for AI&quot;&lt;/a&gt;, citing a Tencent study showing Elixir achieved the highest LLM code completion rate across 20 languages. Claude Opus 4 scored 80.3% on Elixir problems versus 74.9% for C#, the next-best performer.&lt;/p&gt;
&lt;p&gt;But there&apos;s a deeper argument than &quot;LLMs write good Elixir.&quot; It&apos;s this: &lt;strong&gt;the actor model that Erlang introduced in 1986 is the agent model that AI is rediscovering in 2026&lt;/strong&gt;. Every pattern the Python AI ecosystem is building (isolated state, message passing, supervision hierarchies, fault recovery) already exists in the BEAM virtual machine. And it&apos;s been running telecom switches, WhatsApp, and Discord at scale for decades.&lt;/p&gt;
&lt;p&gt;I&apos;ve been building agentic commerce infrastructure at New Generation. Before that, I shipped a full AI stack serving more than 3 million merchants at a unicorn Brazilian fintech. Both systems run on Elixir. Here&apos;s why that&apos;s not a hipster language choice. It&apos;s an architectural inevitability.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note on terminology:&lt;/strong&gt; Throughout this post I refer to &quot;the BEAM.&quot; BEAM is the virtual machine that runs both Erlang and Elixir code, similar to how the JVM runs both Java and Kotlin. Erlang (1986) created the VM and the concurrency model. Elixir (2012) is a modern language built on top of it with better ergonomics. When I say &quot;BEAM,&quot; I mean the runtime and its properties. When I say &quot;Elixir,&quot; I mean the language we write.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://georgeguimaraes.com/your-agent-orchestrator-is-just-a-bad-clone-of-elixir/&quot;&gt;Continue reading on &lt;strong&gt;georgeguimaraes.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/typescript&quot;&gt;#typescript&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/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-03-29T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/your-agent-framework-is-just-a-bad-clone-of-elixir-concurrency-lessons-from-telecom-to-ai</id>
    <title>🔗 Your agent framework is just a bad clone of Elixir: concurrency lessons from telecom to AI</title>
    <updated>2026-03-29T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/easily-connecting-to-beam-nodes-in-kubernetes-with-kubectl-beam"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;A kubectl plugin that makes connecting to Erlang and Elixir nodes running in Kubernetes pods as easy as running a single command---with full TTY support and Observer GUI.&lt;/p&gt;
&lt;p&gt;Debugging BEAM applications in Kubernetes has always been more painful than it should be. You know the drill: your Phoenix app is misbehaving in production, you need to inspect some process state, maybe run a few commands in an IEx shell, or fire up Observer to see what’s going on. Simple enough on your local machine, right? But in Kubernetes, you end up manually port-forwarding EPMD, figuring out the dynamic distribution port, wrestling with DNS resolution, and praying your terminal doesn’t get mangled in the process.&lt;/p&gt;
&lt;p&gt;I’ve done this dance too many times—enough to finally build something that handles all the tedious bits automatically. That’s why I created &lt;a href=&quot;https://github.com/codeadict/kubectl-beam&quot;&gt;kubectl-beam&lt;/a&gt;, a kubectl plugin that connects you to BEAM nodes running in Kubernetes pods with a single command.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://dairon.org/connecting-to-beam-nodes-in-kubernetes/&quot;&gt;Continue reading on &lt;strong&gt;dairon.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/elixir&quot;&gt;#elixir&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/phoenix&quot;&gt;#phoenix&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/terminal&quot;&gt;#terminal&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/kubernetes&quot;&gt;#kubernetes&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-03-28T14:00:00Z</published>
    <id>https://www.yellowduck.be/posts/easily-connecting-to-beam-nodes-in-kubernetes-with-kubectl-beam</id>
    <title>🔗 Easily connecting to BEAM nodes in Kubernetes with kubectl-beam</title>
    <updated>2026-03-28T14:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/nobody-gets-promoted-for-simplicity"/>
    <content type="html">&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;“Simplicity is a great virtue, but it requires hard work to achieve and education to appreciate. And to make matters worse, complexity sells better.”&lt;br /&gt;
— Edsger Dijkstra&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think there’s something quietly screwing up a lot of engineering teams. In interviews, in promotion packets, in design reviews: the engineer who overbuilds gets a compelling narrative, but the one who ships the simplest thing that works gets… nothing.&lt;/p&gt;
&lt;p&gt;This isn’t intentional, of course. Nobody sits down and says, “let’s make sure the people who over-engineer things get promoted!” But that’s what can happen (and it has been, over and over again) when companies evaluate work incorrectly.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://terriblesoftware.org/2026/03/03/nobody-gets-promoted-for-simplicity/&quot;&gt;Continue reading on &lt;strong&gt;terriblesoftware.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;/p&gt;</content>
    <published>2026-03-28T09:00:00Z</published>
    <id>https://www.yellowduck.be/posts/nobody-gets-promoted-for-simplicity</id>
    <title>🔗 Nobody gets promoted for simplicity</title>
    <updated>2026-03-28T09:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/pausing-traffic-and-retrying-in-caddy"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;A pattern I really like for zero-downtime deploys is the ability to &quot;pause&quot; HTTP traffic at the load balancer, such that incoming requests from browsers appear to take a few extra seconds to return, but under the hood they&apos;ve actually been held in a queue while a backend server is swapped out or upgraded in some way.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/simonw/til/blob/main/caddy/pause-retry-traffic.md&quot;&gt;Continue reading on &lt;strong&gt;github.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/pattern&quot;&gt;#pattern&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/http&quot;&gt;#http&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-03-27T14:00:00Z</published>
    <id>https://www.yellowduck.be/posts/pausing-traffic-and-retrying-in-caddy</id>
    <title>🔗 Pausing traffic and retrying in Caddy</title>
    <updated>2026-03-27T14:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/building-a-weather-agent-with-jido"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;We’re going to build a simple agent that can answer natural language questions about the weather. It will understand the request, use a tool to fetch weather data, and then provide a response, all orchestrated by Jido and an LLM.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://agentjido.xyz/blog/weather-agent&quot;&gt;Continue reading on &lt;strong&gt;agentjido.xyz&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/elixir&quot;&gt;#elixir&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-03-27T09:00:00Z</published>
    <id>https://www.yellowduck.be/posts/building-a-weather-agent-with-jido</id>
    <title>🔗 Building a weather agent with Jido</title>
    <updated>2026-03-27T09:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/row-locks-with-joins-can-produce-surprising-results-in-postgresql"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Here&apos;s a database riddle: you have two tables with data connected by a foreign key. The foreign key field is set as not null and the constraint is valid and enforced. You execute a query that joins these two tables and you get no results! How is that possible? We thought it wasn&apos;t possible, but a recent incident revealed an edge case we never thought about.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this article I show how under some circumstances row locks with joins can produce surprising results, and suggest ways to prevent it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://hakibenita.com/postgres-row-lock-with-join&quot;&gt;Continue reading on &lt;strong&gt;hakibenita.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/sql&quot;&gt;#sql&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-03-26T18:00:00Z</published>
    <id>https://www.yellowduck.be/posts/row-locks-with-joins-can-produce-surprising-results-in-postgresql</id>
    <title>🔗 Row locks with joins can produce surprising results in PostgreSQL</title>
    <updated>2026-03-26T18:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/the-instance-is-up-or-is-it-health-checking-in-client-side-vs-server-side-load-balancing"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;A service reports healthy. The load balancer believes it. A request lands on it and times out. Another follows. Then ten more. By the time the system reacts, hundreds of requests have drained into a broken instance while users stared at a spinner.&lt;/p&gt;
&lt;p&gt;Health checking sounds simple: ask if something is alive, stop sending traffic if it isn’t. In practice, the mechanism behind that check, and who performs it, determines how fast your system detects failure, how accurately it responds, and how much of that complexity leaks into your application code.&lt;/p&gt;
&lt;p&gt;The answer is fundamentally different depending on where load balancing lives: in a central proxy, or in the client itself.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://singh-sanjay.com/2026/01/12/health-checks-client-vs-server-side-lb.html&quot;&gt;Continue reading on &lt;strong&gt;singh-sanjay.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;/p&gt;</content>
    <published>2026-03-26T14:00:00Z</published>
    <id>https://www.yellowduck.be/posts/the-instance-is-up-or-is-it-health-checking-in-client-side-vs-server-side-load-balancing</id>
    <title>🔗 The instance is up. or is it? Health checking in client-side vs server-side load balancing</title>
    <updated>2026-03-26T14:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/the-illusion-of-speed-when-ai-builds-a-phoenix-app-in-30-minutes"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Before talking about how to work with AI in a structured way, let me show you why so many people fall in love with vibe coding.&lt;/p&gt;
&lt;p&gt;Bruce asked Claude to build a complete application using Phoenix LiveView: Conway’s Game of Life, with controls, pattern library, and interface. It took 30 minutes from idea to working code.&lt;/p&gt;
&lt;p&gt;Gliders moving across the screen, speed controls, randomization, ready-made pattern library, clean interface. Worked on the first try.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://grox.io/blog/17-the-illusion-of-speed-when-ai-builds-a-phoenix-app-in-30-minutes/&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/ai&quot;&gt;#ai&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/phoenix&quot;&gt;#phoenix&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-03-26T09:00:00Z</published>
    <id>https://www.yellowduck.be/posts/the-illusion-of-speed-when-ai-builds-a-phoenix-app-in-30-minutes</id>
    <title>🔗 The illusion of speed: When AI builds a Phoenix app in 30 minutes</title>
    <updated>2026-03-26T09:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/git-bisect-for-bug-tracking"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;The &lt;code&gt;bisect&lt;/code&gt; command can be used to traverse your commit history to find where an unwaned behavior was introduced. If your current commit is broken, and you have a previous working commit, but there&apos;s lots of commits in between, &lt;code&gt;bisect&lt;/code&gt; will help you navigate those commits in between to locate which commit added the unwanted behavior.&lt;/p&gt;
&lt;p&gt;check out &lt;a href=&quot;https://git-scm.com/docs/git-bisect&quot;&gt;these docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://til.hashrocket.com/posts/e3tv5pxqea-git-bisect-for-bug-tracking&quot;&gt;Continue reading on &lt;strong&gt;til.hashrocket.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/git&quot;&gt;#git&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-03-25T14:00:00Z</published>
    <id>https://www.yellowduck.be/posts/git-bisect-for-bug-tracking</id>
    <title>🔗 Git bisect for bug tracking</title>
    <updated>2026-03-25T14:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/supercharging-claude-code-with-the-right-cli-tools"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;I’ve been using &lt;a href=&quot;https://docs.anthropic.com/en/docs/claude-code&quot;&gt;Claude Code&lt;/a&gt; quite a bit lately, and I got curious – what if I asked it directly which tools would make it more productive? Not the usual suspects like &lt;code&gt;ripgrep&lt;/code&gt;, &lt;code&gt;jq&lt;/code&gt; or &lt;code&gt;git&lt;/code&gt;, but tools it wishes it had access to, tools that would genuinely extend its capabilities.&lt;/p&gt;
&lt;p&gt;So I did exactly that. I asked Claude Code: &lt;em&gt;“What are the most valuable CLI tools I could install for you, outside of the ones you already have?”&lt;/em&gt; The answer was surprisingly thoughtful and insightful, so I figured I’d share it here along with my own commentary. Here are 10 tools, ranked by how useful they’d be for an AI coding assistant.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://batsov.com/articles/2026/02/17/supercharging-claude-code-with-the-right-tools/&quot;&gt;Continue reading on &lt;strong&gt;batsov.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/ai&quot;&gt;#ai&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/terminal&quot;&gt;#terminal&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-03-25T09:00:00Z</published>
    <id>https://www.yellowduck.be/posts/supercharging-claude-code-with-the-right-cli-tools</id>
    <title>🔗 Supercharging Claude code with the right (CLI) tools</title>
    <updated>2026-03-25T09:00:00Z</updated>
  </entry>
</feed>