<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://f2r.github.io/feed/en.xml" rel="self" type="application/atom+xml" /><link href="https://f2r.github.io/" rel="alternate" type="text/html" /><updated>2026-05-27T13:28:47+00:00</updated><id>https://f2r.github.io/feed/en.xml</id><title type="html">F2R Articles | En</title><subtitle>All articles wrote by F2R: PHP, methodology, web, architecture, development, programming, and so.</subtitle><author><name>Frederic Bouchery</name></author><entry xml:lang="en"><title type="html">I&apos;m Becoming a Markdown Developer</title><link href="https://f2r.github.io/en/markdown-developer.html" rel="alternate" type="text/html" title="I&apos;m Becoming a Markdown Developer" /><published>2026-05-27T00:00:00+00:00</published><updated>2026-05-27T00:00:00+00:00</updated><id>https://f2r.github.io/en/markdown-developer</id><author><name>Frederic Bouchery</name></author><category term="en" /><summary type="html"><![CDATA[I've been coding since 1983. Today, my primary tool isn't an IDE — it's a Markdown file. That's not surrender; it's moving up an abstraction level. And strangely, I've never felt more like I'm actually doing my job as a developer.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://f2r.github.io/img/developpeur-markdown.jpg" /><media:content medium="image" url="https://f2r.github.io/img/developpeur-markdown.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="en"><title type="html">AI Produces Garbage?</title><link href="https://f2r.github.io/en/ai-produces-garbage.html" rel="alternate" type="text/html" title="AI Produces Garbage?" /><published>2026-05-03T00:00:00+00:00</published><updated>2026-05-03T00:00:00+00:00</updated><id>https://f2r.github.io/en/ai-produces-garbage</id><author><name>Frederic Bouchery</name></author><category term="en" /><summary type="html"><![CDATA[A colleague tells me AI produces garbage. He's right — and he's wrong. The problem isn't the tool; it's that we handed it a vague spec and expected brilliance. On the real cognitive cost of AI-assisted development.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://f2r.github.io/img/ia-produit-de-la-merde.png" /><media:content medium="image" url="https://f2r.github.io/img/ia-produit-de-la-merde.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="en"><title type="html">When Did You Start Being Ashamed of Your Code?</title><link href="https://f2r.github.io/en/ashamed-of-your-code.html" rel="alternate" type="text/html" title="When Did You Start Being Ashamed of Your Code?" /><published>2026-03-31T00:00:00+00:00</published><updated>2026-03-31T00:00:00+00:00</updated><id>https://f2r.github.io/en/ashamed-of-your-code</id><author><name>Frederic Bouchery</name></author><category term="en" /><summary type="html"><![CDATA[There's a scene that keeps repeating in code reviews: a developer apologizing for using AI. That shame is both absurd and revealing. Here's what it says about our profession — and why you should still worry, just not about that.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://f2r.github.io/img/honte-de-votre-code.png" /><media:content medium="image" url="https://f2r.github.io/img/honte-de-votre-code.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="en"><title type="html">LLM: From Probability to Orchestration</title><link href="https://f2r.github.io/en/llm-probability-orchestration.html" rel="alternate" type="text/html" title="LLM: From Probability to Orchestration" /><published>2026-03-04T00:00:00+00:00</published><updated>2026-03-04T00:00:00+00:00</updated><id>https://f2r.github.io/en/llm-probability-orchestration</id><author><name>Frederic Bouchery</name></author><category term="en" /><summary type="html"><![CDATA[What you think you know about AI is half the picture. The real revolution isn't in the models — it's in how we orchestrate them. From tokens to multi-agent systems: how we went from word prediction to distributed systems engineering in two years.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://f2r.github.io/img/llm-probabilite-orchestration.png" /><media:content medium="image" url="https://f2r.github.io/img/llm-probabilite-orchestration.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="en"><title type="html">Why use static closures?</title><link href="https://f2r.github.io/en/static-closures.html" rel="alternate" type="text/html" title="Why use static closures?" /><published>2026-03-03T00:00:00+00:00</published><updated>2026-03-03T00:00:00+00:00</updated><id>https://f2r.github.io/en/static-closures</id><author><name>Frederic Bouchery</name></author><category term="en" /><summary type="html"><![CDATA[Your closure doesn't reference $this, yet it's keeping the object alive in memory. The PHP behavior nobody explains to you — and why the static keyword can change the lifetime of your objects.]]></summary></entry><entry xml:lang="en"><title type="html">Asynchronous Programming in PHP</title><link href="https://f2r.github.io/en/asynchrone.html" rel="alternate" type="text/html" title="Asynchronous Programming in PHP" /><published>2025-05-25T00:00:00+00:00</published><updated>2025-05-25T00:00:00+00:00</updated><id>https://f2r.github.io/en/asynchrone</id><author><name>Frederic Bouchery</name></author><category term="en" /><summary type="html"><![CDATA[PHP asynchronous? You were told it doesn't exist — and that's been partially wrong since 2002. A complete walkthrough: from streams to Fibers, generators to Promises, ReactPHP versus Amp.]]></summary></entry><entry xml:lang="en"><title type="html">Exploring Concurrent Access Handling</title><link href="https://f2r.github.io/en/concurrent-access.html" rel="alternate" type="text/html" title="Exploring Concurrent Access Handling" /><published>2025-02-09T00:00:00+00:00</published><updated>2025-02-09T00:00:00+00:00</updated><id>https://f2r.github.io/en/concurrent-access</id><author><name>Frederic Bouchery</name></author><category term="en" /><summary type="html"><![CDATA[Two PHP workers, one task to process: how MySQL saves you — or betrays you. A walk from SELECT FOR UPDATE to SKIP LOCKED, with all the transaction traps in between.]]></summary></entry><entry xml:lang="en"><title type="html">Stop using Pseudo-Types</title><link href="https://f2r.github.io/en/stop-using-pseudo-types.html" rel="alternate" type="text/html" title="Stop using Pseudo-Types" /><published>2025-01-20T00:00:00+00:00</published><updated>2025-01-20T00:00:00+00:00</updated><id>https://f2r.github.io/en/stop-using-pseudo-types</id><author><name>Frederic Bouchery</name></author><category term="en" /><summary type="html"><![CDATA[callable and iterable look convenient. They're a trap. A deep dive into what these pseudo-types actually hide, why they weaken your code, and how Closure changes everything.]]></summary></entry><entry xml:lang="en"><title type="html">Understanding Dependency Injection</title><link href="https://f2r.github.io/en/dependancy-injection.html" rel="alternate" type="text/html" title="Understanding Dependency Injection" /><published>2024-12-16T00:00:00+00:00</published><updated>2024-12-16T00:00:00+00:00</updated><id>https://f2r.github.io/en/dependancy-injection</id><author><name>Frederic Bouchery</name></author><category term="en" /><summary type="html"><![CDATA[new is a coupling. A complete walkthrough of dependency injection — not the framework container recipe, but the fundamental reasoning: why we separate creation from execution, and where injection should stop.]]></summary></entry><entry xml:lang="en"><title type="html">DRY at all costs: The trap of premature abstraction</title><link href="https://f2r.github.io/en/hasty-abstraction.html" rel="alternate" type="text/html" title="DRY at all costs: The trap of premature abstraction" /><published>2024-11-27T00:00:00+00:00</published><updated>2024-11-27T00:00:00+00:00</updated><id>https://f2r.github.io/en/hasty-abstraction</id><author><name>Frederic Bouchery</name></author><category term="en" /><summary type="html"><![CDATA[DRY at all costs: the principle that turns an innocent duplication into an unmaintainable tangle. The story of a refactor that starts with good intentions and ends up in boolean parameter hell.]]></summary></entry></feed>