<?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-19T13:00:00Z</updated>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link rel="alternate" href="https://www.yellowduck.be/posts/comprehension-debt-the-hidden-cost-of-ai-generated-code"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Comprehension debt is the hidden cost to human intelligence and memory resulting from excessive reliance on AI and automation. For engineers, it applies most to agentic engineering.&lt;/p&gt;
&lt;p&gt;There’s a cost that doesn’t show up in your velocity metrics when teams go deep on AI coding tools. Especially when its tedious to review all the code the AI generates. This cost accumulates steadily, and eventually it has to be paid - with interest. It’s called comprehension debt or cognitive debt.&lt;/p&gt;
&lt;p&gt;Comprehension debt is the growing gap between how much code exists in your system and how much of it any human being genuinely understands.&lt;/p&gt;
&lt;p&gt;Unlike technical debt, which announces itself through mounting friction - slow builds, tangled dependencies, the creeping dread every time you touch that one module - comprehension debt breeds false confidence. The codebase looks clean. The tests are green. The reckoning arrives quietly, usually at the worst possible moment.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://addyosmani.com/blog/comprehension-debt/&quot;&gt;Continue reading on &lt;strong&gt;addyosmani.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/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-04-19T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/comprehension-debt-the-hidden-cost-of-ai-generated-code</id>
    <title>🔗 Comprehension debt - the hidden cost of AI generated code</title>
    <updated>2026-04-19T13: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/11-software-development-best-practices-in-2026"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Discover essential software development best practices to enhance code quality, efficiency, and maintenance, featuring principles like DRY and YAGNI.&lt;/p&gt;
&lt;h2&gt;Best Practices for Software Development in 2026&lt;/h2&gt;
&lt;p&gt;Software development is a constantly evolving field, and adopting the right practices can significantly improve the quality and maintainability of your code. Here are some of the best practices that you should implement in your software development processes in 2026:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DRY (Don&apos;t Repeat Yourself)&lt;/strong&gt;:&lt;br /&gt;
Reducing repetition within your codebase enhances clarity and minimizes maintenance efforts.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;YAGNI (You Aren&apos;t Gonna Need It)&lt;/strong&gt;:&lt;br /&gt;
Avoid implementing features until they are necessary. This practice helps in keeping the codebase clean and manageable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;KISS (Keep It Simple, Stupid)&lt;/strong&gt;:&lt;br /&gt;
Aim for simplicity in your designs and implementations. Overcomplication can lead to more bugs and harder maintenance.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.netguru.com/blog/best-software-development-practices&quot;&gt;Continue reading on &lt;strong&gt;www.netguru.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-04-19T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/11-software-development-best-practices-in-2026</id>
    <title>🔗 11 software development best practices in 2026</title>
    <updated>2026-04-19T08: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/tower-16-for-mac-beta-introducing-ai-commits"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Say goodbye to tedious commit messages! Tower 16 for Mac introduces AI Commits, allowing users to generate commit messages and descriptions effortlessly using AI right from their Git client. With the new &lt;strong&gt;Generate&lt;/strong&gt; button in the Commit Composing area, I can stage changes and click to get instant suggestions for commit messages. Tower 16 also supports two AI providers—Claude Code and OpenAI&apos;s Codex—which I can configure in the new &lt;strong&gt;AI&lt;/strong&gt; tab under settings. I can even create custom prompt presets for my team&apos;s specific commit conventions, ensuring consistency and clarity. The update includes handy features in the &lt;strong&gt;Working Copy&lt;/strong&gt; view, and improvements such as clickable URLs in the License View and better performance with large branches. Overall, this beta makes my Git workflow smoother and more efficient!&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-16&quot;&gt;Continue reading on &lt;strong&gt;www.git-tower.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/announcement&quot;&gt;#announcement&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/git&quot;&gt;#git&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/mac&quot;&gt;#mac&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-04-18T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/tower-16-for-mac-beta-introducing-ai-commits</id>
    <title>🔗 Tower 16 for Mac (Beta) — Introducing AI commits ✨</title>
    <updated>2026-04-18T17: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/production-query-plans-without-production-data"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;This article examines how PostgreSQL 18 introduces enhancements for managing optimizer statistics without the need for production data. The features &lt;code&gt;pg_restore_relation_stats&lt;/code&gt; and &lt;code&gt;pg_restore_attribute_stats&lt;/code&gt; enable users to inject statistics directly into the catalog tables, facilitating the creation of test environments that mimic production systems in terms of query planning and execution.&lt;/p&gt;
&lt;p&gt;By using these functions, developers can export statistics from a production database and reproduce them in development or testing contexts, improving the accuracy of performance assessments. This capability addresses the challenges posed by differing row configurations in production and CI environments, allowing for reliable query plan validations and potential optimizations based on real-world data distributions.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://boringsql.com/posts/portable-stats/&quot;&gt;Continue reading on &lt;strong&gt;boringsql.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/postgresql&quot;&gt;#postgresql&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/testing&quot;&gt;#testing&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-04-18T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/production-query-plans-without-production-data</id>
    <title>🔗 Production query plans without production data</title>
    <updated>2026-04-18T13: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/mickamy-sql-tap-watch-sql-traffic-in-real-time-with-a-tui"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;sql-tap&lt;/code&gt; is a real-time SQL traffic viewer that functions as a proxy daemon and terminal user interface (TUI). It captures and displays queries from PostgreSQL, MySQL, or TiDB without requiring application code changes, offering features like query inspection and EXPLAIN commands.&lt;/p&gt;
&lt;p&gt;Installation is straightforward across different platforms, including Homebrew, Docker, and building from source. Users can start the proxy daemon and connect their applications seamlessly to view live SQL traffic through the TUI or web interface, with options for real-time monitoring of N+1 and slow queries.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/mickamy/sql-tap&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/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/tools&quot;&gt;#tools&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/devops&quot;&gt;#devops&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/sql&quot;&gt;#sql&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-04-18T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/mickamy-sql-tap-watch-sql-traffic-in-real-time-with-a-tui</id>
    <title>🔗 mickamy/sql-tap: Watch SQL traffic in real-time with a TUI</title>
    <updated>2026-04-18T08: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/sfq-simple-stateless-stochastic-fairness"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Stochastic Fairness Queuing (SFQ) offers a method to effectively manage workloads in distributed systems by utilizing a fixed set of queues. By hashing customer identifiers to this limited number of queues, SFQ mitigates the negative impact of noisy neighbors while maintaining O(1) performance for both enqueueing and dequeueing requests.&lt;/p&gt;
&lt;p&gt;The proposal combines SFQ with shuffle sharding and a best-of-two algorithm to optimize request handling further. This approach enhances customer isolation from noisy neighbors, ensuring that service degradation does not persist, even during resource contention.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://brooker.co.za/blog/2026/02/25/sfq.html&quot;&gt;Continue reading on &lt;strong&gt;brooker.co.za&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;/p&gt;</content>
    <published>2026-04-17T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/sfq-simple-stateless-stochastic-fairness</id>
    <title>🔗 SFQ: Simple, Stateless, Stochastic Fairness</title>
    <updated>2026-04-17T17: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-and-the-ship-of-theseus-armin-ronachers-thoughts-and-writings"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Because code gets cheaper and cheaper to write, re-implementations are becoming more common. This post highlights considerations regarding copyright implications when AI-generated code is involved, especially concerning licensing like GPL versus more permissive options.&lt;/p&gt;
&lt;p&gt;The emergence of AI-generated code may lead to many software projects reappearing under different licenses, raising questions about copyrights and authorship. This situation may ignite renewed debates around copyleft and permissive licenses, with advocates stressing the value of open sharing against those who prioritize licensing enforcement.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://lucumr.pocoo.org/2026/3/5/theseus/&quot;&gt;Continue reading on &lt;strong&gt;lucumr.pocoo.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/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-17T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/ai-and-the-ship-of-theseus-armin-ronachers-thoughts-and-writings</id>
    <title>🔗 AI and the Ship of Theseus</title>
    <updated>2026-04-17T13: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-code-review-tools-what-works-what-doesnt-and-how-to-set-it-up"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;AI code review tools excel at catching mechanical issues like security patterns, formatting violations, test coverage gaps, and code smells that humans miss when fatigued. However, they consistently fail at architectural decisions, business logic validation, and recognizing when correct code represents the wrong approach.&lt;/p&gt;
&lt;p&gt;The practical setup involves choosing a tool based on infrastructure constraints, configuring it to reduce noise, and establishing a workflow where AI reviews first to handle surface-level checks. Human reviewers then focus on depth—architecture, business logic, and strategic fit—making reviews faster and more focused rather than replacing human judgment entirely.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://madewithlove.com/blog/ai-code-review-tools/&quot;&gt;Continue reading on &lt;strong&gt;madewithlove.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/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-17T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/ai-code-review-tools-what-works-what-doesnt-and-how-to-set-it-up</id>
    <title>🔗 AI code review tools: what works, what doesn&apos;t, and how to set it up</title>
    <updated>2026-04-17T08: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/writing-a-pdf-parser-in-php-from-scratch"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;PDFs can be notoriously complex, presenting significant challenges in extracting data. Driven by my previous struggles with existing libraries like &lt;code&gt;smalot/pdfparser&lt;/code&gt;, I set out to create a more robust solution. After two years of intermittent development, I launched the &lt;code&gt;prinsfrank/pdfparser&lt;/code&gt;, aiming for a PHP library that allowed straightforward contributions and full typing for objects. Initially tough, the project gained momentum when I re-engaged in late 2024, culminating in the release of version 2.0, which now includes features like positional context and image extraction. I&apos;m even tackling encrypted PDFs next! This journey underscores the intricacies of PDF parsing and the ongoing demand for better solutions in this space.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://prinsfrank.nl/2026/03/21/Writing-a-PDF-parser-in-PHP-from-scratch&quot;&gt;Continue reading on &lt;strong&gt;prinsfrank.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/pdf&quot;&gt;#pdf&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/php&quot;&gt;#php&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-04-16T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/writing-a-pdf-parser-in-php-from-scratch</id>
    <title>🔗 Writing a PDF parser in PHP from scratch</title>
    <updated>2026-04-16T17: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/think-of-pavlov"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Every interaction functions as a conditioning event that shapes how others perceive working with you. People treat most encounters as repeat games, meaning each conversation trains colleagues on what behavior to expect and whether they should bring problems to you in the future. Consistent tone, timing, and feedback patterns determine reputation and effectiveness far more than any single moment of being right. Hard feedback delivered skillfully can motivate, but the cumulative effect of how you respond—whether with curiosity, dismissal, or excessive solving—establishes the feedback loops that define your influence.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://boz.com/articles/think-pavlov&quot;&gt;Continue reading on &lt;strong&gt;boz.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;/p&gt;</content>
    <published>2026-04-16T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/think-of-pavlov</id>
    <title>🔗 Think of Pavlov</title>
    <updated>2026-04-16T13: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/google-sheets-integration-elixir-data-management-guide"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;This article presents a practical guide to integrating Google Sheets with an Elixir application using the Phoenix Framework. It outlines the steps to extract, organize, and analyze data from a Google Sheets spreadsheet for attendance and ship usage statistics in a gaming context.&lt;/p&gt;
&lt;p&gt;By implementing Google APIs for both Sheets and Drive, the post provides insights into creating a seamless data management experience. Detailed snippets of Elixir code are provided to illustrate the interaction with Google Sheets, data manipulation, and how to set up a Phoenix application for real-world applications.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.curiosum.com/blog/interacting-with-google-sheets-in-elixir?__readwiseLocation=&quot;&gt;Continue reading on &lt;strong&gt;www.curiosum.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/database&quot;&gt;#database&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/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-16T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/google-sheets-integration-elixir-data-management-guide</id>
    <title>🔗 Google Sheets integration: Elixir data management guide</title>
    <updated>2026-04-16T08: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-299-dont-paste-that-into-your-terminal"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;The EEF needs your support for a major security grant, Hex.pm completes its first security audit, José Valim drops a massive Tidewave update, and we discuss the ClickFix supply chain attack that hit Axios, and more!&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://podcast.thinkingelixir.com/299&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-15T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/thinking-elixir-podcast-299-dont-paste-that-into-your-terminal</id>
    <title>🔗 Thinking Elixir Podcast 299: Don&apos;t Paste That Into Your Terminal</title>
    <updated>2026-04-15T17: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-2-minute-claude-code-upgrade-youre-probably-missing-lsp"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Right now, every Claude Code user is running without &lt;code&gt;LSP&lt;/code&gt;. This means searching for definitions is akin to using &lt;code&gt;grep&lt;/code&gt;, leading to delays and inaccuracies in large codebases. Enabling &lt;code&gt;LSP&lt;/code&gt; changes everything; with it, queries like asking where &lt;code&gt;processPayment&lt;/code&gt; is defined return precise results in 50 milliseconds, compared to 30-60 seconds without it. &lt;code&gt;LSP&lt;/code&gt; separates language intelligence from the editor, making it more efficient. It opens up advanced capabilities such as automatic error correction and precise code navigation, eliminating the frustration of traditional text searches. Enabling it is straightforward and takes only a couple of minutes. You add a flag in your settings and install the relevant language server binaries. This transforms how you interact with your code, enhancing accuracy and speed significantly.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://karanbansal.in/blog/claude-code-lsp/&quot;&gt;Continue reading on &lt;strong&gt;karanbansal.in&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/best-practice&quot;&gt;#best-practice&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-04-15T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/the-2-minute-claude-code-upgrade-youre-probably-missing-lsp</id>
    <title>🔗 The 2-minute Claude code upgrade you&apos;re probably missing: LSP</title>
    <updated>2026-04-15T13: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-to-optimize-sonarqube-for-reviewing-ai-generated-code"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;AI-generated code can introduce various quality issues, including technical debt and security vulnerabilities. This post emphasizes the need for a stricter quality gate and quality profile tailored for AI-generated code within SonarQube Cloud.&lt;/p&gt;
&lt;p&gt;The recommended approach includes designing a custom quality gate that increases coverage requirements and limits code duplication. Additionally, establishing a custom quality profile will help maintain code readability and enforce stricter validation rules, ensuring that AI-generated outputs meet higher standards.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.sonarsource.com/blog/how-to-optimize-sonarqube-for-reviewing-ai-generated-code/&quot;&gt;Continue reading on &lt;strong&gt;www.sonarsource.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;a href=&quot;https://www.yellowduck.be/tags/testing&quot;&gt;#testing&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-04-15T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/how-to-optimize-sonarqube-for-reviewing-ai-generated-code</id>
    <title>🔗 How to optimize SonarQube for reviewing AI-generated code</title>
    <updated>2026-04-15T08: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-part-of-the-sdlc-nobody-talks-about-and-many-companies-dont-do-properly"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;The most overlooked part of the software development lifecycle (SDLC) is decommissioning. Many companies neglect or mishandle this phase, leading to significant costs and inefficiencies. For instance, zombie resources like forgotten databases or unused virtual machines waste an estimated 30% of cloud spending. Despite the common belief that removing resources doesn’t add value, failing to do so increases financial, operational, and security burdens over time. Proper decommissioning requires a clear process with a checklist to ensure no resources are left behind. This includes reviewing service usage, notifying teams, disabling alerts, and thoroughly cleaning up all related components. Ignoring this crucial phase creates unnecessary costs and complicates infrastructure management.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://blog.danskingdom.com/The-part-of-the-SDLC-nobody-talks-about--and-many-companies-dont-do-properly/&quot;&gt;Continue reading on &lt;strong&gt;blog.danskingdom.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/devops&quot;&gt;#devops&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/sysadmin&quot;&gt;#sysadmin&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-04-14T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/the-part-of-the-sdlc-nobody-talks-about-and-many-companies-dont-do-properly</id>
    <title>🔗 The part of the SDLC nobody talks about, and many companies don’t do properly</title>
    <updated>2026-04-14T17: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/ashtypescript-typed-channels"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;AshTypescript enables the generation of typed TypeScript event subscriptions using Ash PubSub&apos;s publications. This functionality allows developers to handle server-pushed events in a type-safe manner over Phoenix channels, enhancing the client-side experience with well-defined payload types.&lt;/p&gt;
&lt;p&gt;To implement typed channels, developers can utilize &lt;code&gt;AshTypescript.TypedChannel&lt;/code&gt; for applications that push events to clients. Using transformation functions and specifying event types in the channel module, the TypeScript types are generated, which promotes a seamless integration between the server and the frontend application.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://hexdocs.pm/ash_typescript/0.16.0/typed-channels.html&quot;&gt;Continue reading on &lt;strong&gt;hexdocs.pm&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/typescript&quot;&gt;#typescript&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/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/announcement&quot;&gt;#announcement&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-04-14T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/ashtypescript-typed-channels</id>
    <title>🔗 AshTypescript Typed Channels</title>
    <updated>2026-04-14T13: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/spec-driven-development-from-vibe-coding-to-structured-development"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Spec-driven development (SDD) offers a structured approach to coding, focusing on writing specifications before coding starts. This method counteracts the limitations of vibe coding by ensuring that the AI has a solid foundation to work from, minimizing bugs and architectural drift.&lt;/p&gt;
&lt;p&gt;Tools like GitHub&apos;s Spec Kit, Amazon&apos;s Kiro, and Fission AI&apos;s OpenSpec enhance this process by formalizing the workflow and generating artifacts to guide development. By emphasizing a persistent specification that serves as the source of truth, SDD allows for more coherent and compliant code output, especially in complex environments like payments systems.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://zarar.dev/spec-driven-development-from-vibe-coding-to-structured-development/&quot;&gt;Continue reading on &lt;strong&gt;zarar.dev&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/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-04-14T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/spec-driven-development-from-vibe-coding-to-structured-development</id>
    <title>🔗 Spec-driven development: From vibe coding to structured development</title>
    <updated>2026-04-14T08: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/18-months-of-code-gone-heres-what-we-learned"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;We developed this product for over 1.5 years, closed clients left right and center, and now we&apos;re throwing everything away.&lt;/p&gt;
&lt;p&gt;In case you don&apos;t know me (or &lt;a href=&quot;https://getautonoma.com&quot;&gt;Autonoma&lt;/a&gt;), we&apos;re no strangers to pivots. Funnily enough, we pivoted like 4 times already (enterprise search, documentation generation, coding agent, QA testing platform). The reasons are beyond the scope of this article. In all cases, we knew bugs were painful, we just didn’t know what was the best way of solving the problem.&lt;/p&gt;
&lt;p&gt;On our last pivot, we actually started getting customers and raised a round from one of the biggest names in the industry. We hired a team of 14 (as I’m writing this article) and started closing clients left right and center. So why would we take such a drastic decision over something that’s working for many customers? Well, many reasons. That’s why I’m writing this article.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://tompiagg.io/posts/we-threw-away-1-5-years-of-code&quot;&gt;Continue reading on &lt;strong&gt;tompiagg.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/testing&quot;&gt;#testing&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-04-13T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/18-months-of-code-gone-heres-what-we-learned</id>
    <title>🔗 18 months of code, gone. Here&apos;s what we learned.</title>
    <updated>2026-04-13T17: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/fixing-full-recompiles-of-elixir-caused-by-claude-code"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;At work, many of us were having a persistent issue where our Elixir app was having to do a full recompile very frequently, despite not having touched the dependencies, &lt;code&gt;mix.exs&lt;/code&gt;, and so on. We were finally able to narrow it down to affecting the people who use Claude Code and Mise together (it may affect ASDF users as well?).&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://tylerayoung.com/2026/03/11/elixir-full-recompiles/&quot;&gt;Continue reading on &lt;strong&gt;tylerayoung.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-13T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/fixing-full-recompiles-of-elixir-caused-by-claude-code</id>
    <title>🔗 Fixing full recompiles of Elixir caused by Claude code</title>
    <updated>2026-04-13T13: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/slow-down-to-speed-up"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In today&apos;s AI-driven world, there&apos;s a powerful counterintuitive principle: slowing down can lead to faster outcomes. This isn&apos;t just philosophical fluff; it&apos;s based on Daniel Kahneman’s System 1 and System 2 thinking. While AI excels at rapid execution and pattern matching, the crucial first step of clearly defining what to build remains a distinctly human task. Flawed assumptions propagate quickly in the age of fast prototyping, leading to worse outcomes and accumulating technical debt. I learned that deliberate slowness, whether through writing down requirements or running pre-mortems, allows for better decision-making before launching into rapid development. AI can enhance both speed and thoroughness, but I have to know when to harness each effectively. Ultimately, embracing this balance is essential for sustainable innovation in any tech environment.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.theengineeringmanager.com/growth/slow-down-to-speed-up/&quot;&gt;Continue reading on &lt;strong&gt;www.theengineeringmanager.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-04-13T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/slow-down-to-speed-up</id>
    <title>🔗 Slow down to speed up</title>
    <updated>2026-04-13T08: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/claude-skill-incoming-generating-postman-collections-with-ai"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;This article discusses the introduction of a Claude Skill designed to facilitate the generation of Postman collections from Rails controllers. This tool automates the documentation process, ensuring that QA teams can quickly access up-to-date API documentation without extensive manual effort.&lt;/p&gt;
&lt;p&gt;The skill scans existing Rails controllers for essential data such as routes, actions, and parameters, producing a comprehensive Postman collection in JSON format. While there are limitations regarding its accuracy, particularly without RSpec specifications, the skill effectively reduces the burden of manual documentation in fast-paced development environments.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://thoughtbot.com/blog/claude-skill-incoming-generating-postman-collections-with-ai&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/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/announcement&quot;&gt;#announcement&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-04-12T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/claude-skill-incoming-generating-postman-collections-with-ai</id>
    <title>🔗 Claude Skill incoming! Generating Postman collections with AI</title>
    <updated>2026-04-12T17: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-cte-bad-cte"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;CTEs (Common Table Expressions) are a popular feature among SQL developers, often used to simplify complex queries. However, their actual performance and optimizations have significantly changed in PostgreSQL 12, shifting from always being treated as optimization fences to more flexible handling of CTEs.&lt;/p&gt;
&lt;p&gt;PostgreSQL 12 introduced several optimizations regarding CTE handling, allowing non-recursive, side-effect-free CTEs to be inlined and treated as subqueries. This change improves query performance by enabling predicate pushdown and better index usage, while also providing control over CTE materialization when needed for specific use cases.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://boringsql.com/posts/good-cte-bad-cte/&quot;&gt;Continue reading on &lt;strong&gt;boringsql.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/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-04-12T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/good-cte-bad-cte</id>
    <title>🔗 Good CTE, bad CTE</title>
    <updated>2026-04-12T13: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-blog-with-elixir-and-phoenix"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;This post describes building a blog using Elixir and Phoenix with server-side rendering, NimblePublisher for markdown processing, and Tailwind CSS for styling. The setup uses no database, compiles all posts at build time, and achieves fast performance through pre-compiled HTML generation.&lt;/p&gt;
&lt;p&gt;The blog runs on a self-hosted Dokploy instance on Hetzner with bunny.net as a CDN, featuring automated CI/CD through GitHub Actions and rolling deploys that complete in 30 seconds. Additional features include RSS feeds, XML sitemaps, blog post redirects, and comprehensive SEO metadata with Open Graph and Twitter Card tags.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://jola.dev/posts/building-a-blog-with-elixir-and-phoenix&quot;&gt;Continue reading on &lt;strong&gt;jola.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/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/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;/p&gt;</content>
    <published>2026-04-12T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/building-a-blog-with-elixir-and-phoenix</id>
    <title>🔗 Building a blog with Elixir and Phoenix</title>
    <updated>2026-04-12T08: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/two-soups-two-cookies"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Is the difference between something that works and something that feels right just about the ingredients? I discovered this when I made two soups using the exact same ingredients. The first soup was boiled conventionally, resulting in bland flavors. The second was roasted, allowing the natural sweetness of the veggies to emerge. This simple change in process transformed the dish from decent to exceptional.&lt;/p&gt;
&lt;p&gt;Similarly, my wife enhanced her cookies by paying attention to details. Browning the butter added depth, varying chocolate sizes created texture, and resting the dough improved flavor integration. These adjustments, while optional, made a substantial difference. This approach parallels software development. Many can replicate features and UI, but they miss the critical processes—user feedback, bug fixes, and frustrations—that shape a product&apos;s quality. In essence, it’s not just about the ingredients; it&apos;s about the care and processes that lead to truly great outcomes.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://liamhammett.com/two-soups-two-cookies&quot;&gt;Continue reading on &lt;strong&gt;liamhammett.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;/p&gt;</content>
    <published>2026-04-11T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/two-soups-two-cookies</id>
    <title>🔗 Two soups, two cookies</title>
    <updated>2026-04-11T17: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/getting-started-with-paraxial-io-free-tier"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;This guide will walk you through setup for Paraxial.io. Most features require a paid account. If you are on the free tier, email &lt;code&gt;support@paraxial.io&lt;/code&gt; to request a 2 week free trial.&lt;/p&gt;
&lt;p&gt;Application Secure&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Asset management - A full inventory of all your Elixir projects&lt;/li&gt;
&lt;li&gt;Network Scans - Determine which ports are open on your web server&lt;/li&gt;
&lt;li&gt;Code Scans - Source code (SAST) and dependency (SCA) scanning&lt;/li&gt;
&lt;li&gt;GitHub or GitLab App - Get security feedback in your pull request&lt;/li&gt;
&lt;li&gt;License Scans - Determine which open source licenses are in use&lt;/li&gt;
&lt;li&gt;App Audit - A runtime inventory of all your dependency versions&lt;/li&gt;
&lt;li&gt;Exploit Guard - runtime detection of deserialization exploits&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bot Defense&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ingesting HTTP traffic&lt;/li&gt;
&lt;li&gt;Rate limiting - Ban IPs that do too many login attempts&lt;/li&gt;
&lt;li&gt;Honeypots - Ban IPs that submit a fake form&lt;/li&gt;
&lt;li&gt;Blocking data center/cloud IP attacks&lt;/li&gt;
&lt;li&gt;Banning bots scanning for &lt;code&gt;.php&lt;/code&gt; routes&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://docs.paraxial.io/elixir/started/&quot;&gt;Continue reading on &lt;strong&gt;docs.paraxial.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/http&quot;&gt;#http&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-11T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/getting-started-with-paraxial-io-free-tier</id>
    <title>🔗 Getting started with Paraxial.io for Elixir</title>
    <updated>2026-04-11T13:00:00Z</updated>
  </entry>
</feed>