<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://www.yellowduck.be/pretty-atom-feed-v3.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <link href="https://www.yellowduck.be" rel="alternate"/>
  <link href="https://www.yellowduck.be/posts/feed" rel="self"/>
  <author>
    <name>Pieter Claerhout</name>
    <email>pieter@yellowduck.be</email>
  </author>
  <id>https://www.yellowduck.be/posts/feed</id>
  <title>🐥 YellowDuck.be</title>
  <updated>2026-06-23T17:00:00Z</updated>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/build-an-mcp-server-with-laravel-and-use-it-to-publish-this-post" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Every MCP server tutorial you&apos;ll find is written in Python or TypeScript. If you&apos;re a Laravel developer, you&apos;ve been left out of the conversation — until now. Laravel&apos;s official &lt;code&gt;laravel/mcp&lt;/code&gt; package lets you build MCP servers that expose your application&apos;s functionality directly to AI assistants like Claude. This setup eliminates traditional concerns like REST API design and authentication tokens. In just about 20 minutes, the author created an MCP server to manage this very blog post.&lt;/p&gt;
&lt;p&gt;The article dives into the Model Context Protocol (MCP), an open standard that enables AI assistants to perform structured actions with clear inputs and outputs. With Laravel&apos;s support for both &lt;code&gt;stdio&lt;/code&gt; and &lt;code&gt;HTTP&lt;/code&gt; transports, users can effortlessly query, create, update, and publish blog posts, all without navigating a browser. From tools like &lt;code&gt;CreatePostTool&lt;/code&gt; to &lt;code&gt;PublishPostTool&lt;/code&gt;, each section details simple class implementations, helping developers seamlessly integrate AI interactions with their Laravel applications.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://thunk.dev/posts/build-mcp-server-with-laravel&quot;&gt;Continue reading on &lt;strong&gt;thunk.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/laravel&quot;&gt;#laravel&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/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-06-23T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/build-an-mcp-server-with-laravel-and-use-it-to-publish-this-post</id>
    <title>🔗 Build an MCP server with Laravel (and use it to publish this post)</title>
    <updated>2026-06-23T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/software-engineering-discipline-and-posture" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;There’s something quietly dignified about a clean commit history and well-written documentation. This article by Blain Smith emphasizes that engineering discipline is rooted in respect for teammates. Respect isn&apos;t just a thumbs-up emoji; it’s about naming variables wisely and writing comprehensive documentation that doesn’t assume prior knowledge.&lt;/p&gt;
&lt;p&gt;Commits serve as ongoing conversations, not merely logs of activity. Each commit message should prioritize clarity, recognizing that it may be read long after its creation. Pull requests are portrayed as invitations for collaboration, requiring context and clarity rather than vague demands. The piece stresses the importance of making improvements every time code is touched, no matter how small. Ultimately, engineering transcends merely shipping features; it’s about enhancing the experience for future developers, thus advocating for a respectful, disciplined approach to software craftsmanship.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://blainsmith.com/articles/software-engineering-discipline-and-posture/&quot;&gt;Continue reading on &lt;strong&gt;blainsmith.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/git&quot;&gt;#git&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-06-23T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/software-engineering-discipline-and-posture</id>
    <title>🔗 Software engineering discipline and posture</title>
    <updated>2026-06-23T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/pair-programming-is-a-cheat-code" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Pair-programming is often called a cheat code for developers and businesses alike. It not only accelerates decision-making but also promotes real-time code reviews and knowledge transfer. Instead of enduring lengthy pull-request reviews, pairs can bounce ideas off one another immediately, reducing the risk of expensive changes late in the development cycle.&lt;/p&gt;
&lt;p&gt;Additionally, frequently rotating pairs helps prevent knowledge silos, ensuring that no single developer is solely responsible for critical areas of the codebase. This method also serves as an effective teaching tool for junior developers, allowing them to absorb best practices quickly. In a world increasingly influenced by AI, maintaining this collaborative practice becomes crucial for keeping skills and knowledge current.&lt;/p&gt;
&lt;p&gt;Overall, the benefits of pair-programming are clear, encouraging teams to embrace it more fully for long-term success.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.germanvelasco.com/blog/pair-programming-is-a-cheat-code&quot;&gt;Continue reading on &lt;strong&gt;www.germanvelasco.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-06-23T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/pair-programming-is-a-cheat-code</id>
    <title>🔗 Pair-programming is a cheat code</title>
    <updated>2026-06-23T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/genserver-state-management-in-elixir-a-production-order-book" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;One GenServer manages critical aspects of trading like open positions, pending orders, and strategy state in real-time systems. This article highlights the state struct that powers the &lt;code&gt;RealtimeTrader&lt;/code&gt;, which functions as a session-scoped process in a trading pipeline. It breaks down the state management into three essential categories: runtime data comprising orders and account balance, collaborator references for dependency management, and operational flags that control system behavior.&lt;/p&gt;
&lt;p&gt;The article emphasizes design choices that allow strategies to maintain state effectively and how important features like trading flags can prevent system errors, ensuring trading activities run smoothly. Furthermore, readers gain access to full source code, enabling them to see production-grade implementations directly in action.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://seriousalchemy.com/genserver-living-order-book/&quot;&gt;Continue reading on &lt;strong&gt;seriousalchemy.com&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/pattern&quot;&gt;#pattern&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/elixir&quot;&gt;#elixir&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-06-22T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/genserver-state-management-in-elixir-a-production-order-book</id>
    <title>🔗 GenServer state management in Elixir: A production order book</title>
    <updated>2026-06-22T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/concurrent-reads-serialized-writes-with-genserver-and-registry" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;GenServer is often a beginner&apos;s first encounter with Elixir, but common pitfalls can arise, especially concerning data access patterns. This article highlights an issue when using &lt;code&gt;GenServer.call&lt;/code&gt; for reading data as it serializes requests, blocking concurrent access and affecting performance, such as the refresh timer for data.&lt;/p&gt;
&lt;p&gt;The solution involves utilizing &lt;code&gt;Registry&lt;/code&gt;, which allows registering processes and storing data without the complexities of managing ETS lifecycle. By implementing a &lt;code&gt;via&lt;/code&gt; tuple, the &lt;code&gt;GenServer&lt;/code&gt; can store its state in &lt;code&gt;Registry&lt;/code&gt;, enabling concurrent read access. The article provides a practical example with the FXRates module demonstrating how to effectively use &lt;code&gt;Registry&lt;/code&gt; to facilitate concurrent reads while still serializing writes. This approach not only optimizes access patterns but simplifies code management as well.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://distantprovince.by/posts/concurrent-reads-serialized-writes-with-genserver-and-registry/&quot;&gt;Continue reading on &lt;strong&gt;distantprovince.by&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-06-22T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/concurrent-reads-serialized-writes-with-genserver-and-registry</id>
    <title>🔗 Concurrent reads, serialized writes with GenServer and Registry</title>
    <updated>2026-06-22T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/the-beginning-of-programming-as-well-know-it" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In the wake of AI coding assistants like Claude and Codex, many wonder if the role of a computer programmer is coming to an end. While it seems AI can perform tasks in minutes, it is not time to count human programmers out. Currently, human developers are essential for overseeing AI outputs because they infuse wisdom and creativity, which AI lacks.&lt;/p&gt;
&lt;p&gt;Although there are many success stories of AI constructing applications from specifications, they often overshadow numerous AI failures that produce unusable code. The reality is that AI-generated code cannot be deemed complete until a human reviews and corrects it. Adopting a healthy skepticism towards AI outputs will help developers maintain quality standards.&lt;/p&gt;
&lt;p&gt;As the landscape evolves, those who leverage AI effectively without relinquishing control will likely remain indispensable in their roles. This mantra echoes across all creative professions, reminding us that human oversight is paramount in the face of advancing technology.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://bitsplitting.org/2026/04/01/the-beginning-of-programming-as-well-know-it/&quot;&gt;Continue reading on &lt;strong&gt;bitsplitting.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-06-22T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/the-beginning-of-programming-as-well-know-it</id>
    <title>🔗 The beginning of programming as we’ll know it</title>
    <updated>2026-06-22T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/rust-vs-go-comparison" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Oh no, not another &apos;Is Rust better than Go?&apos; article. Seriously, haven&apos;t we all had our fill of these comparisons by now? But before you sigh in exasperation, hear us out!&lt;/p&gt;
&lt;p&gt;Many comparisons between Go and Rust emphasize their differences in syntax and the initial learning curve. However, ultimately, what matters is the ease of use for non-trivial projects.&lt;/p&gt;
&lt;p&gt;Since we are a platform-as-a-service provider, we think that we can contribute the most by showing you how to build a small web service in both languages. We will use the same task and popular libraries for both languages to compare the solutions side-by-side so that you can make up your own mind and get a feel for what it&apos;s like to work in each ecosystem.&lt;/p&gt;
&lt;p&gt;So, before you dismiss this as &apos;just another comparison&apos;, give it a read. There might be some details that other comparisons have missed before.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.shuttle.dev/blog/2023/09/27/rust-vs-go-comparison&quot;&gt;Continue reading on &lt;strong&gt;www.shuttle.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/rust&quot;&gt;#rust&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-06-21T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/rust-vs-go-comparison</id>
    <title>🔗 Rust vs Go: A hands-on comparison</title>
    <updated>2026-06-21T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/reading-a-200k-line-codebase-you-didn-x27-t-write-a-field-guide" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Is it really possible to understand a sprawling 200,000-line codebase that someone else authored? Christoph Beck&apos;s article presents a practical guide to tackling inherited code through a systematic approach. Starting without diving directly into the files, Beck emphasizes the importance of first interpreting the project&apos;s structure, including the directory tree, dependency manifests, CI configuration, and git history.&lt;/p&gt;
&lt;p&gt;By pairing human intuition with coding agents, developers can uncover insights about the codebase&apos;s history and current state. The article details how to analyze project components efficiently, looking for clues that highlight the team’s practices and any lurking issues. With quick commands and thoughtful interpretation, readers gain a comprehensive understanding of how a legacy codebase functions before they read a single line of code.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://bitcrowd.dev/reading-a-200k-line-codebase-you-did-not-write-a-field-guide/&quot;&gt;Continue reading on &lt;strong&gt;bitcrowd.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/git&quot;&gt;#git&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-06-21T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/reading-a-200k-line-codebase-you-didn-x27-t-write-a-field-guide</id>
    <title>🔗 Reading a 200k-line codebase you didn&apos;t write: a field guide</title>
    <updated>2026-06-21T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/claude-talk-small-code-still-big" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;AI coding assistants often provide lengthy explanations with every change. But what if they cut down on chatter?&lt;/p&gt;
&lt;p&gt;The author shares their experience using the &quot;Caveman&quot; skill, which simplifies AI output to short, effective phrases like &quot;Me fix bug&quot;. While this approach saved tokens, the actual savings were less than anticipated.&lt;/p&gt;
&lt;p&gt;Most tokens are spent on reading files and generating code, rather than on explanations alone. Despite this, there&apos;s merit in the brevity for simple tasks, keeping reviews light-hearted and efficient.&lt;/p&gt;
&lt;p&gt;However, for more complex changes, traditional communication is still essential to capture important context.&lt;/p&gt;
&lt;p&gt;In conclusion, while the Caveman skill doesn&apos;t revolutionize AI coding assistants, it provides a lighter, more amusing way to handle quick tasks.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://spatie.be/blog/claude-talk-small-code-still-big&quot;&gt;Continue reading on &lt;strong&gt;spatie.be&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-06-21T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/claude-talk-small-code-still-big</id>
    <title>🔗 Claude talk small. Code still big.</title>
    <updated>2026-06-21T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/oauth-2-0-device-flow-explained-for-engineers-especially-for-backend-engineers" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;A frustrating login experience with long passwords on devices led to the development of OAuth 2.0 device flow. This flow provides a practical solution for scenarios where typing passwords is unfeasible, such as on smart TVs or IoT devices.&lt;/p&gt;
&lt;p&gt;The article details how to implement this flow step-by-step using a command-line interface called &lt;code&gt;mycli&lt;/code&gt;. It breaks down how to handle the authorization process effectively, manages polling, and explains the various server responses that developers must anticipate.&lt;/p&gt;
&lt;p&gt;With real-world examples of how this flow enhances user experience, the piece serves as a guide for backend engineers to streamline authentication processes for users facing input constraints, ultimately urging developers to implement it in their applications.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.blog/2026/05/11/oauth-2-0-device-flow-explained-for-engineers-especially-for-backend-engineers/&quot;&gt;Continue reading on &lt;strong&gt;stackoverflow.blog&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/http&quot;&gt;#http&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/auth&quot;&gt;#auth&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-06-20T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/oauth-2-0-device-flow-explained-for-engineers-especially-for-backend-engineers</id>
    <title>🔗 OAuth 2.0 – device flow explained for engineers, especially for backend engineers</title>
    <updated>2026-06-20T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/laravel-mcp-getting-started" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Your AI coding agent writes better code when it has real context about your application.&lt;/p&gt;
&lt;p&gt;This article examines the Laravel MCP, which provides a structured way to expose your app’s capabilities to AI clients, like ChatGPT and Claude. Without MCP, AI agents can misinterpret your app&apos;s architecture, causing them to guess column names and routes. By utilizing the &lt;code&gt;laravel/mcp&lt;/code&gt; package, developers can build an MCP server that allows their applications to interact intelligently with AI.&lt;/p&gt;
&lt;p&gt;This starts to shine when integrating with non-technical users, simplifying data access without needing knowledge of APIs or CLI calls. The piece also covers practical steps for setting up an MCP server, tools, resources, prompts, and authentication methods, ensuring that readers can effectively harness AI to interact seamlessly with their Laravel applications.&lt;/p&gt;
&lt;p&gt;It drives home the importance of structured integration as development scales, particularly in enterprise environments.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://laravel.com/blog/laravel-mcp-a-complete-guide&quot;&gt;Continue reading on &lt;strong&gt;laravel.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/laravel&quot;&gt;#laravel&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/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-06-20T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/laravel-mcp-getting-started</id>
    <title>🔗 Laravel MCP: Getting started</title>
    <updated>2026-06-20T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/credence-elixir-semantic-linter" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;A semantic linter for LLM-generated Elixir code.&lt;/p&gt;
&lt;p&gt;Elixir&apos;s compiler checks syntax. Credo checks style. Credence checks semantics — it mainly catches patterns that compile and pass tests but are non-idiomatic, inefficient, or ported from Python/JavaScript conventions that don&apos;t belong in Elixir.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://hex.pm/packages/credence&quot;&gt;Continue reading on &lt;strong&gt;hex.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/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-06-20T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/credence-elixir-semantic-linter</id>
    <title>🔗 Credence: Elixir semantic linter</title>
    <updated>2026-06-20T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/the-tacit-dimension-why-your-best-engineers-cant-tell-you-what-they-know" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In today&apos;s software development landscape, the tacit knowledge held by experienced engineers is undervalued and often overlooked. This article argues that while explicit knowledge is easily documented and processed by AI, the intuitive insights and patterns recognized by seasoned developers are impossible to articulate or transfer effectively to artificial intelligence.&lt;/p&gt;
&lt;p&gt;The piece draws on Michael Polanyi&apos;s concept of tacit knowledge to illustrate how many crucial understandings in engineering cannot be reduced to written words. As teams increasingly rely on AI for coding tasks, there&apos;s a rising danger of losing this invaluable insight, which could leave future engineers ill-equipped to navigate complex codebases.&lt;/p&gt;
&lt;p&gt;The author warns that, without intentional mentorship and collaboration, the next generation could experience a decline in critical thinking and problem-solving skills, making the role of experienced engineers more essential than ever.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://cekrem.github.io/posts/the-tacit-dimension/&quot;&gt;Continue reading on &lt;strong&gt;cekrem.github.io&lt;/strong&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://www.yellowduck.be/tags/reading-list&quot;&gt;#reading-list&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/development&quot;&gt;#development&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/best-practice&quot;&gt;#best-practice&lt;/a&gt; &lt;a href=&quot;https://www.yellowduck.be/tags/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-06-19T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/the-tacit-dimension-why-your-best-engineers-cant-tell-you-what-they-know</id>
    <title>🔗 The tacit dimension: why your best engineers can&apos;t tell you what they know</title>
    <updated>2026-06-19T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/ais-impact-on-software-engineers-in-2026-key-trends-part-2" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;What if AI tools not only boost productivity but also lead to decreased code quality? In this concluding part of the series, Gergely Orosz and Elin Nilsson delve into the findings from over 900 survey responses regarding AI&apos;s effects on software engineers by 2026. They reveal that while AI can reduce the time spent on routine tasks, it introduces new challenges like unrealistic expectations and quality issues.&lt;/p&gt;
&lt;p&gt;Many companies struggle with large-scale adoption, finding that effective AI use depends heavily on existing engineering practices. Engineers report a decline in codebase quality, with more bugs sneaking into projects and less experienced programmers grappling with AI-generated code. The piece emphasizes the need for robust guidelines and highlights the complex influence of AI on collaboration, highlighting varying impacts based on individual adaptability and team culture.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://newsletter.pragmaticengineer.com/p/ai-impact-on-software-engineers-part-2&quot;&gt;Continue reading on &lt;strong&gt;newsletter.pragmaticengineer.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-06-19T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/ais-impact-on-software-engineers-in-2026-key-trends-part-2</id>
    <title>🔗 AI’s impact on software engineers in 2026: key trends, Part 2</title>
    <updated>2026-06-19T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/high-performance-git" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Git serves multiple roles beyond just version control; it operates as a content-addressed database, a filesystem cache, and more. This article dives into the different layers of Git, discussing the performance implications of objects, refs, the index, and history traversal. It covers advanced topics like packfiles, maintenance, sparse working trees, and the nuances of partial cloning.&lt;/p&gt;
&lt;p&gt;Written specifically for engineers—particularly those in build, CI, and developer experience roles—the content highlights the importance of maintaining speed and efficiency as repositories grow in size and complexity. It offers insights into diagnosis, configuration, and recovery, making it a valuable resource for anyone managing Git at scale.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://gitperf.com/&quot;&gt;Continue reading on &lt;strong&gt;gitperf.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/git&quot;&gt;#git&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-06-19T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/high-performance-git</id>
    <title>🔗 High performance Git</title>
    <updated>2026-06-19T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/make-friends-with-your-ai-assistant" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Could your AI assistant be causing more chaos than compliance? This article emphasizes the importance of structured workflows and clear rules when working with AI. It illustrates how utilizing start and stop words can prevent careless commits and untested code pushes. Furthermore, it stresses that providing clean code examples is essential for quality outputs from the assistant.&lt;/p&gt;
&lt;p&gt;The author highlights a systematic approach to task management, urging readers to break down large tasks to avoid confusion. With emphasis on the art of feedback, the piece offers practical advice on how to effectively communicate with the assistant, enhancing productivity while minimizing errors. The article provides a detailed checklist for AI assistance that every developer should consider for improved results.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://rocket-science.ru/hacking/2026/05/18/make-claude-robust&quot;&gt;Continue reading on &lt;strong&gt;rocket-science.ru&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-06-18T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/make-friends-with-your-ai-assistant</id>
    <title>🔗 Make friends with your AI assistant</title>
    <updated>2026-06-18T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/before-github" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;GitHub was not the first home for Open Source software; SourceForge was. Before it, Armin Ronacher had his own Trac installation with Subversion repositories, tickets, and documentation. GitHub became essential, shaping a significant part of his Open Source identity and fostering countless professional relationships.&lt;/p&gt;
&lt;p&gt;However, he expresses disappointment in GitHub&apos;s current trajectory and laments the loss of community presence that defined the platform. He recalls a time when dependencies had depth and context, contrasting the current scenario where micro-dependencies proliferate with less regard for the maintainers behind them. The article warns about GitHub&apos;s decline and the implications for the Open Source community, urging for a structured archiving solution to preserve essential projects and their histories.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://lucumr.pocoo.org/2026/4/28/before-github/&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/github&quot;&gt;#github&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-06-18T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/before-github</id>
    <title>🔗 Before GitHub</title>
    <updated>2026-06-18T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/utilizing-claude-skills-in-client-projects" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Working on a project for Ticketmatic unveiled a repetitive challenge: integrating with their API using the Saloon library. Despite Artisan commands like &lt;code&gt;php artisan saloon:response&lt;/code&gt;, developers still faced tedious work creating DTOs and manually wiring everything. By leveraging Claude Skills, the process transformed dramatically.&lt;/p&gt;
&lt;p&gt;Claude generates request files, fixes namespaces, and even creates DTOs based on provided specifications. Although it handles 90% correctly, some review remains necessary. Beyond request generation, skills streamline tasks like creating Livewire components, ensuring ease and consistency in the codebase. This automation reduces mistakes and frees developers to focus on more critical aspects of their work.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://spatie.be/blog/utilizing-claude-skills-in-client-projects&quot;&gt;Continue reading on &lt;strong&gt;spatie.be&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/laravel&quot;&gt;#laravel&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;a href=&quot;https://www.yellowduck.be/tags/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-06-17T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/utilizing-claude-skills-in-client-projects</id>
    <title>🔗 Utilizing Claude skills in client projects</title>
    <updated>2026-06-17T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/symptoms-of-bad-software-design" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;What are the telltale signs that software design has gone wrong? Marcos F. Lobo identifies four crucial symptoms: rigidity, fragility, immobility, and viscosity. Rigidity surfaces when a change triggers unexpected complications across modules, often due to excessive coupling. Fragility appears when one fix causes multiple issues elsewhere.&lt;/p&gt;
&lt;p&gt;Immobility is evident when code is so entangled it&apos;s easier to rewrite than reuse. Viscosity represents the tendency to opt for quick, dirty solutions instead of adhering to best practices. Each symptom carries a solution—like employing the Strategy Pattern to combat rigidity or using Clean Architecture to ensure code reusability. Lobo emphasizes that identifying these design flaws paves the way for effective refactoring and better software practices.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://newsletter.optimistengineer.com/p/symptoms-of-bad-software-design&quot;&gt;Continue reading on &lt;strong&gt;newsletter.optimistengineer.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-06-17T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/symptoms-of-bad-software-design</id>
    <title>🔗 Symptoms of bad software design</title>
    <updated>2026-06-17T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/why-senior-developers-fail-to-communicate-their-expertise" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;What happens when senior developers and the rest of the business struggle to understand each other? Tuhin Nair delves into a communication gap that arises from differing priorities: senior developers focus on managing complexity, while business teams prioritize speed and uncertainty reduction. Senior developers often express their concerns regarding system stability and complexity, but this doesn’t resonate with non-developers who are driven by a need for rapid market feedback.&lt;/p&gt;
&lt;p&gt;Nair argues that effective communication hinges on rephrasing technical solutions to meet business needs. By using phrases like &apos;Can we try something quicker?&apos;, developers can bridge the gap between maintaining stable systems and meeting the business’s urgency to reduce uncertainty. AI agents may promise to streamline tasks, but they lack the responsibility that seasoned developers hold.&lt;/p&gt;
&lt;p&gt;This article is a call to rethink how senior developers articulate their value amid the push for agility in software development.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://nair.sh/guides-and-opinions/communicating-your-expertise/why-senior-developers-fail-to-communicate-their-expertise&quot;&gt;Continue reading on &lt;strong&gt;nair.sh&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-06-17T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/why-senior-developers-fail-to-communicate-their-expertise</id>
    <title>🔗 Why senior developers fail to communicate their expertise</title>
    <updated>2026-06-17T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/lies-i-was-told-about-collaborative-editing-part-2-why-we-dont-use-yjs" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;The common belief that CRDTs like &lt;code&gt;Yjs&lt;/code&gt; are essential for seamless collaborative editing faces scrutiny in this article. It argues that the algorithmic complexity and architectural choices behind &lt;code&gt;Yjs&lt;/code&gt; compromise performance and reliability. By highlighting serious issues encountered when implementing &lt;code&gt;Yjs&lt;/code&gt;—including document corruption and high latency—the author recommends a simpler alternative that meets necessary editing capabilities with far fewer complications.&lt;/p&gt;
&lt;p&gt;The article explains a lightweight solution that leverages the &lt;code&gt;prosemirror-collab&lt;/code&gt; library, achieving required functionality with just 40 lines of code. This solution avoids the pitfalls seen in &lt;code&gt;Yjs&lt;/code&gt;, such as performing excessive document re-creation on every keystroke, and emphasizes the importance of a more straightforward approach that could significantly improve user experience with collaborative editing.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.moment.dev/blog/lies-i-was-told-pt-2&quot;&gt;Continue reading on &lt;strong&gt;www.moment.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/javascript&quot;&gt;#javascript&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-06-16T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/lies-i-was-told-about-collaborative-editing-part-2-why-we-dont-use-yjs</id>
    <title>🔗 Lies I was told about collaborative editing, part 2: Why we don&apos;t use Yjs</title>
    <updated>2026-06-16T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/lies-i-was-told-about-collaborative-editing-part-1-algorithms-for-offline-editing" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In an era where collaborative editing tools are becoming integral to workflows, some popular algorithms promise effective solutions for both online and offline editing. However, as evaluated in Moment&apos;s development blog, many of these algorithms, including CRDTs and OT, result in unintuitive outcomes that users often perceive as data corruption. Out of numerous tests on these algorithms, about 20-30% resulted in conflicts that left documents in states no user would accept.&lt;/p&gt;
&lt;p&gt;The piece argues for a reframing of collaborative editing as a UI/UX challenge rather than solely an algorithmic one. With advancements in approach, the vision of improved offline editing experiences may not be far-fetched, especially as researchers like Ink &amp; Switch explore the intersection of algorithms and user interface design.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.moment.dev/blog/lies-i-was-told-pt-1&quot;&gt;Continue reading on &lt;strong&gt;www.moment.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/ai&quot;&gt;#ai&lt;/a&gt;&lt;/p&gt;</content>
    <published>2026-06-16T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/lies-i-was-told-about-collaborative-editing-part-1-algorithms-for-offline-editing</id>
    <title>🔗 Lies I was told about collaborative editing, part 1: algorithms for offline editing</title>
    <updated>2026-06-16T08:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/piper-laravel-style-array-and-string-helpers-for-phps-pipe-operator" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;PHP 8.5&apos;s pipe operator enables a seamless flow of data between functions, yet built-in functions and Laravel&apos;s classes weren&apos;t designed for it. Piper bridges that gap by transforming Laravel&apos;s collection and string methods into standalone functions specifically tailored for use with the pipe operator.&lt;/p&gt;
&lt;p&gt;The article demonstrates how Piper operates directly on native arrays and strings without needing any wrapper. Functions are curried for easy integration, meaning you can chain array and string transformations fluidly. With its familiar API mirroring Laravel&apos;s, developers can easily adopt Piper to streamline their data manipulations in PHP.&lt;/p&gt;
&lt;p&gt;It emphasizes that you can mix operations on arrays and strings in a single pipeline, creating a natural and efficient coding style.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://laravel-news.com/piper-laravel-style-array-and-string-helpers-for-phps-pipe-operator&quot;&gt;Continue reading on &lt;strong&gt;laravel-news.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/laravel&quot;&gt;#laravel&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-06-15T17:00:00Z</published>
    <id>https://www.yellowduck.be/posts/piper-laravel-style-array-and-string-helpers-for-phps-pipe-operator</id>
    <title>🔗 Piper: Laravel-style array and string helpers for PHP&apos;s pipe operator</title>
    <updated>2026-06-15T17:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/how-llms-interpret-websites-guide-to-ai-visibility" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;How do LLMs interpret the structure of websites? This article from WP Engine delves into how large language models analyze web content to enhance AI visibility. It highlights the significance of clear website architecture and structured data in making content more interpretable to AI.&lt;/p&gt;
&lt;p&gt;By optimizing these elements, businesses can improve their online presence and maximize their reach through AI-driven tools. This guide serves as a valuable resource for web developers and marketers looking to harness the power of LLMs in their SEO strategies.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://wpengine.com/blog/how-llms-interpret-websites/&quot;&gt;Continue reading on &lt;strong&gt;wpengine.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-06-15T13:00:00Z</published>
    <id>https://www.yellowduck.be/posts/how-llms-interpret-websites-guide-to-ai-visibility</id>
    <title>🔗 How LLMs interpret websites: guide to AI visibility</title>
    <updated>2026-06-15T13:00:00Z</updated>
  </entry>
  <entry>
    <author>
      <name>Pieter Claerhout</name>
      <email>pieter@yellowduck.be</email>
    </author>
    <link href="https://www.yellowduck.be/posts/django-liveview-vs-phoenix-liveview-a-real-benchmark" rel="alternate"/>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;How does Django LiveView stack up against Phoenix LiveView in real-world scenarios? In a recent benchmark, identical alert dashboards were built in both frameworks to measure performance under realistic conditions. The tests showed that both frameworks performed similarly, with around 22 ms for mutations and 7 ms for search in most scenarios.&lt;/p&gt;
&lt;p&gt;However, the stark differences emerged in payload sizes and scalability. With larger lists, Django LiveView significantly increased its data transfer, sending more bytes per interaction than Phoenix. Conversely, as the number of concurrent users increased, Phoenix exhibited better scaling capabilities. While Django LiveView allows more explicit control over updates, the inherent advantages of Phoenix&apos;s design can lead to lower latency under load. Overall, they are comparable, but for heavy payloads and concurrency, Phoenix may have the edge.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://en.andros.dev/blog/80134668/django-liveview-vs-phoenix-liveview-a-real-benchmark/&quot;&gt;Continue reading on &lt;strong&gt;en.andros.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/django&quot;&gt;#django&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-06-15T08:00:00Z</published>
    <id>https://www.yellowduck.be/posts/django-liveview-vs-phoenix-liveview-a-real-benchmark</id>
    <title>🔗 Django LiveView vs Phoenix LiveView: a real benchmark</title>
    <updated>2026-06-15T08:00:00Z</updated>
  </entry>
</feed>