<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>soyuka.me</title>
		<link>https://soyuka.me/</link>
		<description>Recent content on soyuka.me</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
			<copyright>All rights reserved - 2026</copyright>
		
		
			<lastBuildDate>Wed, 30 Sep 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://soyuka.me/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Resolving IRIs to Doctrine Entities with the Object Mapper</title>
				<link>https://soyuka.me/resolving-iris-to-doctrine-entities-with-the-object-mapper/</link>
				<pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/resolving-iris-to-doctrine-entities-with-the-object-mapper/</guid>
				<description>&lt;p&gt;In &lt;a href=&#34;https://github.com/api-platform/core/discussions/8587&#34;&gt;api-platform/core#8587&lt;/a&gt; a user wanted to POST an &lt;code&gt;Activity&lt;/code&gt; with an IRI for its user and ended up parsing the IRI with a regex. Their &lt;code&gt;$user&lt;/code&gt; was a &lt;code&gt;string&lt;/code&gt;, so API Platform had no relation to resolve, and typing it with the entity doesn&amp;rsquo;t work either because an IRI resolves to the resource the API exposes, not to the entity.&lt;/p&gt;</description>
			</item>
			<item>
				<title>API Platform 4.4 and 5.0 - Are APIs Still Relevant in the AI Era?</title>
				<link>https://soyuka.me/api-platform-4-4-and-5-0/</link>
				<pubDate>Thu, 17 Sep 2026 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/api-platform-4-4-and-5-0/</guid>
				<description>&lt;h2 id=&#34;api-platform-44-and-50-are-out&#34;&gt;API Platform 4.4 and 5.0 are out!&lt;a class=&#34;anchor&#34; href=&#34;#api-platform-44-and-50-are-out&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;We released both versions live on stage at the &lt;a href=&#34;https://api-platform.com/con/2026/&#34;&gt;API Platform Conference&lt;/a&gt; in Lille. Here are the slides of my talk, &lt;em&gt;Are APIs still relevant in the AI era?&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;iframe class=&#34;speakerdeck-iframe&#34; style=&#34;border: 0px; background: rgba(0, 0, 0, 0.1) padding-box; margin: 0px; padding: 0px; border-radius: 6px; box-shadow: rgba(0, 0, 0, 0.2) 0px 5px 40px; width: 100%; height: auto; aspect-ratio: 560 / 315;&#34; frameborder=&#34;0&#34; src=&#34;https://speakerdeck.com/player/8131b86b26be476fa1b94a993cd651b2&#34; title=&#34;Are APIs Still Relevant in the AI Era?&#34; allowfullscreen=&#34;true&#34; data-ratio=&#34;1.7777777777777777&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;The year has been busy on &lt;code&gt;api-platform/core&lt;/code&gt;: between January 1st and September 13th we opened 508 pull requests and merged 429 of them, that&amp;rsquo;s +76% opened and +77% merged compared to 2025. 468 commits landed since 4.3.0 alone. Coding got faster for everyone, review did not, and my review standard on correctness, backward compatibility and maintenance stays exactly the same. Thanks to everyone who contributed!&lt;/p&gt;</description>
			</item>
			<item>
				<title>Forza Horizon 6 on Linux, from a broken installer to working saves</title>
				<link>https://soyuka.me/forza-horizon-6-linux-offline-saves/</link>
				<pubDate>Tue, 15 Sep 2026 22:40:00 +0000</pubDate>
				<guid>https://soyuka.me/forza-horizon-6-linux-offline-saves/</guid>
				<description>&lt;p&gt;I&amp;rsquo;ve spent the last few weeks getting Forza Horizon 6 to run on Linux, and it turned out to be the&#xA;usual thing with recent Windows games: never one problem, a queue of them, each&#xA;one hiding the next. Four rounds. The installer wouldn&amp;rsquo;t extract. Then the game&#xA;wouldn&amp;rsquo;t start. Then it started and immediately quit. And then it ran&#xA;beautifully and refused to save, &lt;code&gt;LOAD FAILED, E:0-0&lt;/code&gt;, every single time. This&#xA;post is the whole queue, in order, with the settings that actually worked. If&#xA;you&amp;rsquo;re only interested in the save fix, &lt;a href=&#34;https://soyuka.me/forza-horizon-6-linux-offline-saves/#load-failed-e0-0&#34;&gt;click&#xA;here&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>From API to Agent</title>
				<link>https://soyuka.me/from-api-to-agent/</link>
				<pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/from-api-to-agent/</guid>
				<description>&lt;p&gt;For as long as I&amp;rsquo;ve built software, the contract was the same: humans operate interfaces, interfaces operate systems. Agents break that chain. More and more, software is being operated by software — you describe what you want, an agent goes and does it, and the interface you&amp;rsquo;d normally click through never enters the picture.&lt;/p&gt;</description>
			</item>
			<item>
				<title>BMW F800 GSA ABS pump 638C, from a 1200€ quote to a 67€ fix</title>
				<link>https://soyuka.me/bmw-f800-gsa-abs-pump-638c-67-euro-fix/</link>
				<pubDate>Tue, 09 Jun 2026 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/bmw-f800-gsa-abs-pump-638c-67-euro-fix/</guid>
				<description>&lt;p&gt;I usually write about PHP, Symfony and dev tooling here, but I&amp;rsquo;ve spent the past year fighting a &lt;code&gt;638C&lt;/code&gt; &amp;ldquo;Pressure modulator: pump motor&amp;rdquo; code on my BMW F 800 GSA (&lt;code&gt;K75&lt;/code&gt;, production date 14/05/2014, Bosch ABS &lt;code&gt;9M&lt;/code&gt; block). After about 800€ burned on diagnostic tools, shipping, a &amp;ldquo;repair&amp;rdquo; that didn&amp;rsquo;t repair, and a warranty round-trip that didn&amp;rsquo;t fix it either, I finally swapped just the electric motor of the ABS pump with one from a salvaged F 850 GS block bought for 49€ + 18.50€ shipping. It worked. This post is the full story, with what I&amp;rsquo;d do differently and how the swap actually goes on a &lt;code&gt;Bosch 9M&lt;/code&gt; block that was crimped from the factory.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Replacing Serialization Groups with Property-Level Security</title>
				<link>https://soyuka.me/replacing-serialization-groups-with-property-level-security/</link>
				<pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/replacing-serialization-groups-with-property-level-security/</guid>
				<description>&lt;p&gt;Serialization groups have been the go-to mechanism for controlling field visibility in Symfony and API Platform for years. They work — but they introduce a layer of indirection that gets painful as your application grows. I recently removed the last serialization group from a production codebase and replaced it with &lt;code&gt;ApiProperty(security:)&lt;/code&gt; on a dedicated input DTO. The result is cleaner, more explicit, and honestly more secure.&lt;/p&gt;</description>
			</item>
			<item>
				<title>API Platform 4.3 - When Your API Meets AI</title>
				<link>https://soyuka.me/api-platform-4-3-when-your-api-meets-ai/</link>
				<pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/api-platform-4-3-when-your-api-meets-ai/</guid>
				<description>&lt;p&gt;&lt;em&gt;Cover photo by &lt;a href=&#34;https://www.reddit.com/user/AffectionateSand8525/&#34;&gt;AffectionateSand8525&lt;/a&gt; — &lt;a href=&#34;https://www.reddit.com/r/itookapicture/comments/1rrk9nq/itap_of_the_mirror_geometry/&#34;&gt;source&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;api-platform-43-when-your-api-meets-ai&#34;&gt;API Platform 4.3: When Your API Meets AI&lt;a class=&#34;anchor&#34; href=&#34;#api-platform-43-when-your-api-meets-ai&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m excited to announce API Platform 4.3! This release brings a game-changing feature: native support for the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;, letting your existing API resources be consumed by AI agents. Beyond MCP, we&amp;rsquo;ve shipped advanced filtering capabilities, security optimizations, better spec compliance, and a fresh docs UI.&lt;/p&gt;&#xA;&lt;p&gt;Since 4.2, the community has been busy:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Resilient API Clients in TypeScript: why code generation is not the perfect solution</title>
				<link>https://soyuka.me/resilient-api-clients-typescript/</link>
				<pubDate>Tue, 30 Dec 2025 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/resilient-api-clients-typescript/</guid>
				<description>&lt;p&gt;In the world of modern frontend development, we’ve become obsessed with type safety. We want our IDEs to tell us exactly what an API returns before we even make the request, and we want to ensure we are working with &lt;strong&gt;valid data structures&lt;/strong&gt; at every step. To achieve this, the industry has largely converged on a single solution: &lt;strong&gt;generating TypeScript clients from OpenAPI specifications.&lt;/strong&gt;&lt;br&gt;&#xA;It sounds like a win-win. But relying entirely on static generation can lead us into a &amp;ldquo;tightly-coupled RPC trap,&amp;rdquo; creating maintenance headaches that simpler architectures avoid.&lt;/p&gt;</description>
			</item>
			<item>
				<title>La Gangrène du Système Capitaliste : L&#39;Obsolescence de l&#39;Homme et le Règne du Faux</title>
				<link>https://soyuka.me/la-gangrene-du-systeme-capitaliste/</link>
				<pubDate>Fri, 19 Dec 2025 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/la-gangrene-du-systeme-capitaliste/</guid>
				<description>&lt;p&gt;Le capitalisme algorithmique a franchi un seuil ontologique : il ne cherche plus seulement à exploiter l&amp;rsquo;homme, il entreprend de le remplacer. Nous vivons l&amp;rsquo;heure de son auto-gangrénisation, ce moment pathologique où le système, ayant saturé le monde matériel, se replie sur un écosystème auto-référentiel de signes vides. Ce n&amp;rsquo;est plus la vie réelle qui est administrée, mais une simulation permanente où le faux n&amp;rsquo;est plus un leurre, mais la seule réalité opérationnelle. En 2024, le rapport &lt;a href=&#34;https://www.imperva.com/resources/resource-library/reports/bad-bot-report/&#34;&gt;Imperva Bad Bot&lt;/a&gt; révélait que 52 % du trafic internet mondial était généré par des agents non-humains, marquant une augmentation vertigineuse de 74 % en seulement cinq ans&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. Cette mutation n&amp;rsquo;est pas un incident technique ; elle est l&amp;rsquo;aboutissement logique d&amp;rsquo;une économie qui a fait du réel son dernier obstacle. Comme l&amp;rsquo;écrivait Günther Anders dans &lt;em&gt;L&amp;rsquo;Obsolescence de l&amp;rsquo;homme&lt;/em&gt;[7], nous sommes devenus « honorablement superflus » : le système n&amp;rsquo;a plus besoin de nous pour fonctionner, il lui suffit désormais de consommer sa propre contrefaçon généralisée dans une boucle mortifère où l&amp;rsquo;humain n&amp;rsquo;est plus qu&amp;rsquo;un spectateur résiduel.&lt;/p&gt;</description>
			</item>
			<item>
				<title>2025: Performance Milestone for the Symfony Ecosystem</title>
				<link>https://soyuka.me/2025-performance-milestone-for-the-symfony-ecosystem/</link>
				<pubDate>Thu, 27 Nov 2025 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/2025-performance-milestone-for-the-symfony-ecosystem/</guid>
				<description>&lt;h2 id=&#34;2025-performance-milestone-for-the-symfony-ecosystem&#34;&gt;2025: Performance Milestone for the Symfony Ecosystem&lt;a class=&#34;anchor&#34; href=&#34;#2025-performance-milestone-for-the-symfony-ecosystem&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;I recently had the opportunity to present at SymfonyCon on a topic that has been driving much of my work lately: &lt;strong&gt;2025: Performance Milestone for the Symfony Ecosystem&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For those who couldn&amp;rsquo;t attend, or if you want to look closer at the benchmarks and code samples, I’ve published the slides. This presentation explores how Symfony has evolved from a full-stack framework into a set of high-performance components, and how these changes are impacting &lt;a href=&#34;https://api-platform.com&#34;&gt;API Platform&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>API Platform 4.2 - Redefining API Development</title>
				<link>https://soyuka.me/api-platform-4-2-redefining-api-development/</link>
				<pubDate>Thu, 18 Sep 2025 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/api-platform-4-2-redefining-api-development/</guid>
				<description>&lt;h2 id=&#34;api-platform-42-redefining-api-development&#34;&gt;API Platform 4.2: Redefining API Development&lt;a class=&#34;anchor&#34; href=&#34;#api-platform-42-redefining-api-development&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m thrilled to announce the release of API Platform 4.2, unveiled at the 5th edition of the API Platform Conference in Lille! As the release manager, I&amp;rsquo;m incredibly proud of the work our community has put into this version. Let&amp;rsquo;s dive into what makes this release so special.&lt;/p&gt;&#xA;&lt;p&gt;Since version 4.0, the API Platform community has been hard at work. We&amp;rsquo;ve seen an incredible amount of activity:&lt;/p&gt;</description>
			</item>
			<item>
				<title>API Platform 4.1 - Documentation at the heart of API Discoverability</title>
				<link>https://soyuka.me/api-platform-4-1-documentation-heart-api-discoverability/</link>
				<pubDate>Fri, 28 Feb 2025 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/api-platform-4-1-documentation-heart-api-discoverability/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;api-platform.com&#34;&gt;API Platform&lt;/a&gt; is a framework centered around API standards, assisting developers in maintaining and utilizing these specifications. With &lt;a href=&#34;https://github.com/api-platform/core/blob/main/CHANGELOG.md#v410&#34;&gt;API Platform 4.1&lt;/a&gt;, our focus is on enhancing support for the Hydra specification, OpenAPI, and JSON Schema.&lt;/p&gt;&#xA;&lt;h2 id=&#34;openapi-improvements&#34;&gt;OpenAPI improvements&lt;a class=&#34;anchor&#34; href=&#34;#openapi-improvements&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;create-several-versions-of-a-specification&#34;&gt;Create several versions of a specification&lt;a class=&#34;anchor&#34; href=&#34;#create-several-versions-of-a-specification&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;You can now decline a same OpenAPI specification in multiple versions using the &lt;code&gt;x-apiplatform-tags&lt;/code&gt; tag:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ApiPlatform\OpenApi\Factory\OpenApiFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#[&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;GetCollection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;openapi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Operation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;extensionProperties&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;OpenApiFactory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;API_PLATFORM_TAG&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;customer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;developer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]))]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#[&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;Post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;openapi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Operation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;extensionProperties&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;OpenApiFactory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;API_PLATFORM_TAG&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;developer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]))]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Book&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, either use the query parameter for the web version such as &lt;code&gt;/docs?filter_tags[]=customer&lt;/code&gt; or through the command line:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Symfony Object Mapper component</title>
				<link>https://soyuka.me/symfony-object-mapper-component/</link>
				<pubDate>Thu, 05 Dec 2024 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/symfony-object-mapper-component/</guid>
				<description>&lt;h2 id=&#34;symfony-object-mapper-component&#34;&gt;Symfony Object Mapper Component&lt;a class=&#34;anchor&#34; href=&#34;#symfony-object-mapper-component&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Check out the &lt;a href=&#34;https://speakerdeck.com/soyuka/symfony-mapper-component&#34;&gt;slides of my conference&lt;/a&gt; at the Symfony Con:&lt;/p&gt;&#xA;&lt;iframe class=&#34;speakerdeck-iframe&#34; style=&#34;border: 0px; background: rgba(0, 0, 0, 0.1) padding-box; margin: 0px; padding: 0px; border-radius: 6px; box-shadow: rgba(0, 0, 0, 0.2) 0px 5px 40px; width: 100%; height: auto; aspect-ratio: 560 / 315;&#34; frameborder=&#34;0&#34; src=&#34;https://speakerdeck.com/player/ee4457cb19154b9b914a863d008901e7&#34; title=&#34;Symfony Mapper Component&#34; allowfullscreen=&#34;true&#34; data-ratio=&#34;1.7777777777777777&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;Mapping is something that you see in many frameworks over the web in every programming languages. Doctrine, for example, has a quite complex mapper to transform the relational database representation to your well-known entity.&#xA;After covering the history behind years of discussion and research by the Symfony community, we&amp;rsquo;ll study the needs for such a component in Symfony. We&amp;rsquo;ll analyse how different it is from the Symfony Serializer, and what are the solutions popular frameworks on the Web offer. At least, we&amp;rsquo;ll showcase the new Mapper component and its application from API design to day to day use cases.&lt;/p&gt;</description>
			</item>
			<item>
				<title>API Platform 4 - The pragmatic API Platform</title>
				<link>https://soyuka.me/api-platform-4-the-pragmatic-api-platform/</link>
				<pubDate>Mon, 23 Sep 2024 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/api-platform-4-the-pragmatic-api-platform/</guid>
				<description>&lt;h2 id=&#34;api-platform-4-is-out&#34;&gt;API Platform 4 is out!&lt;a class=&#34;anchor&#34; href=&#34;#api-platform-4-is-out&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Check out the &lt;a href=&#34;https://www.slideshare.net/slideshow/api-platform-the-pragmatic-api-framework/271965564&#34;&gt;slides of my conference&lt;/a&gt; at the API Platform Con:&lt;/p&gt;&#xA;&lt;iframe src=&#34;https://www.slideshare.net/slideshow/embed_code/key/2hLxQy064OiExS?startSlide=1&#34; width=&#34;597&#34; height=&#34;486&#34; frameborder=&#34;0&#34;   marginwidth=&#34;0&#34; marginheight=&#34;0&#34; scrolling=&#34;no&#34; style=&#34;border:1px solid #CCC; border-width:1px;   margin-bottom:5px;max-width: 100%;margin: 0 auto; display: block;&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;Read our &lt;a href=&#34;https://api-platform.com/docs/core/upgrade-guide/&#34;&gt;Upgrade Guide&lt;/a&gt; if you want to update to 3.4 and 4.0.&lt;/p&gt;&#xA;&lt;h2 id=&#34;an-awesome-moment&#34;&gt;An awesome moment!&lt;a class=&#34;anchor&#34; href=&#34;#an-awesome-moment&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;While waiting for the replays, live our best moments:&lt;/p&gt;&#xA;&lt;div style=&#34;margin: 0 auto; display: block; width: 640px; text-align: center&#34;&gt;&#xA;&lt;a data-flickr-embed=&#34;true&#34; href=&#34;https://www.flickr.com/photos/194052559@N02/albums/72177720320499314&#34; title=&#34;API Platform Con 2024&#34;&gt;&lt;img src=&#34;https://live.staticflickr.com/65535/54010744175_cfe6fecd13_z.jpg&#34; width=&#34;640&#34; height=&#34;480&#34; alt=&#34;API Platform Con 2024&#34;/&gt;&lt;/a&gt;&lt;script async src=&#34;//embedr.flickr.com/assets/client-code.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;follow-us&#34;&gt;Follow us!&lt;a class=&#34;anchor&#34; href=&#34;#follow-us&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Here are some of our accounts if you want to be the first to know:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Upgrading PHPUnit and speeding up API Platform unit tests</title>
				<link>https://soyuka.me/upgrading-phpunit-and-speeding-up-api-platform-unit-tests/</link>
				<pubDate>Wed, 17 Jul 2024 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/upgrading-phpunit-and-speeding-up-api-platform-unit-tests/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m &lt;a href=&#34;https://github.com/api-platform/core/pull/6438&#34;&gt;removing legacy code&lt;/a&gt; on the API Platform codebase to prepare for the API Platform 4 release. While doing that I also updated many dependency requirements such as PHP 8.2 (previously PHP 8.1 was allowed), Symfony 7.1 (as &lt;a href=&#34;https://symfony.com/releases&#34;&gt;7.0 is now EOL&lt;/a&gt;) and PHPUnit to 11 which is the main topic of this blog post. If you&amp;rsquo;re only interested in how I sped up tests &lt;a href=&#34;https://soyuka.me/upgrading-phpunit-and-speeding-up-api-platform-unit-tests/#speeding-up-tests&#34;&gt;click here&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>API Platform 3.3</title>
				<link>https://soyuka.me/api-platform-3.3/</link>
				<pubDate>Mon, 29 Apr 2024 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/api-platform-3.3/</guid>
				<description>&lt;p&gt;API Platform 3.3 is out and adds nice improvements once again! Many new options added to the Metadata classes, an increased focus on RDF at the heart of API design and a target to make API Platform more Laravel friendly.&lt;/p&gt;&#xA;&lt;p&gt;Many thanks to every contributor that made API Platform more pleasant to use! Don&amp;rsquo;t miss our &lt;a href=&#34;https://api-platform.com/con/2024/&#34;&gt;API Platform Conference&lt;/a&gt;, we completed the program last week, it&amp;rsquo;s huge!&#xA;As the last early bird tickets were sold in a &lt;strong&gt;few days&lt;/strong&gt; ❤️ we added some more to celebrate the release!&lt;/p&gt;</description>
			</item>
			<item>
				<title>API Platform 3.2</title>
				<link>https://soyuka.me/api-platform-3.2/</link>
				<pubDate>Thu, 12 Oct 2023 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/api-platform-3.2/</guid>
				<description>&lt;p&gt;We just released API Platform 3.2! We presented most of the new features at the &lt;a href=&#34;https://api-platform.com/con&#34;&gt;API Platform Con&lt;/a&gt;, &lt;a href=&#34;https://docs.google.com/presentation/d/1a3cB9qeMN2acIT0aXdrhCAbgKjFnMmHS5MaVzCDyrKg&#34;&gt;here are my slides&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Use &lt;code&gt;composer recipes:update&lt;/code&gt; to update your configuration file. The default configuration file is:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;api_platform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Hello API Platform&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.0.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;formats&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jsonld&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;application/ld+json&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;docs_formats&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jsonld&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;application/ld+json&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jsonopenapi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;application/vnd.openapi+json&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;text/html&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;defaults&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;stateless&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;cache_headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;vary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Authorization&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Origin&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;extra_properties&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;standard_put&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rfc_7807_compliant_errors&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# this will be the default value in 4.x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;event_listeners_backward_compatibility_layer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# use symfony event listeners&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;keep_legacy_inflector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# use doctrine/inflector&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Listeners will not get removed in API Platform 4 but will rather use our new Providers and Processors. You can now force the request to go through a particular state for example:&lt;/p&gt;</description>
			</item>
			<item>
				<title>An HTTP State story</title>
				<link>https://soyuka.me/http-state-story/</link>
				<pubDate>Tue, 26 Sep 2023 15:40:00 +0000</pubDate>
				<guid>https://soyuka.me/http-state-story/</guid>
				<description>&lt;p&gt;An HTTP state story About HTTP framework architecture and the state of MVC.&lt;/p&gt;&#xA;&lt;h2 id=&#34;mvc-architecture&#34;&gt;MVC architecture&lt;a class=&#34;anchor&#34; href=&#34;#mvc-architecture&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;MVC originated in the Smalltalk-80 system to promote a layered approach when developing graphical user interfaces. (&amp;hellip;) It defined three different components:&#xA;The model handles application and business logic.&#xA;The view handles presentation logic.&#xA;The controller accepts and interprets keyboard and mouse input.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;— Knight and Dai. “Objects and the Web.” IEEE Software, March/April 2002.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to create a PHP Playground for your documentation</title>
				<link>https://soyuka.me/how-to-create-a-php-playground-for-your-documentation/</link>
				<pubDate>Mon, 25 Sep 2023 15:40:00 +0000</pubDate>
				<guid>https://soyuka.me/how-to-create-a-php-playground-for-your-documentation/</guid>
				<description>&lt;p&gt;Since I gave the talk &amp;ldquo;True Serverless or how to run PHP in the browser to document an open source project&amp;rdquo;&#xA;and released the &lt;a href=&#34;https://api-platform.com/playground/&#34;&gt;API Platform Playground&lt;/a&gt;, many asked to build their own.&#xA;I&amp;rsquo;ll show here how to use php and WASM to build your own playground.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s build &lt;a href=&#34;https://soyuka.github.io/php-wasm/&#34;&gt;this PHP playground&lt;/a&gt; in 43 lines of code.&lt;/p&gt;&#xA;&lt;h2 id=&#34;php--wasm&#34;&gt;PHP + WASM&lt;a class=&#34;anchor&#34; href=&#34;#php--wasm&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&#xA;&#xA;&lt;iframe style=&#34;margin: 0 auto; display: block&#34; src=&#34;https://docs.google.com/presentation/d/1rcJZsvezZTvj2IIcMIG5Kvo1J0_XjjJYXkHbWr2d6Ro/embed&#34; frameborder=&#34;0&#34; width=&#34;800&#34; height=&#34;600&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;&#xA;&#xA;&#xA;&lt;p&gt;There&amp;rsquo;s some history about &lt;a href=&#34;https://github.com/oraoto/pib&#34;&gt;PHP In Browser by oraoto&lt;/a&gt; and &lt;a href=&#34;https://github.com/seanmorris/php-wasm&#34;&gt;PHP Wasm by seanmorris&lt;/a&gt;, I mainly continued working on this at &lt;a href=&#34;https://github.com/soyuka/php-wasm&#34;&gt;PHP Wasm&lt;/a&gt; where the build got improved with Docker steroids.&lt;/p&gt;</description>
			</item>
			<item>
				<title>API Platform 3.1</title>
				<link>https://soyuka.me/api-platform-3.1-whats-new/</link>
				<pubDate>Fri, 20 Jan 2023 19:55:01 +0000</pubDate>
				<guid>https://soyuka.me/api-platform-3.1-whats-new/</guid>
				<description>&lt;h1 id=&#34;api-platform-31-is-out&#34;&gt;API Platform 3.1 is out!&lt;a class=&#34;anchor&#34; href=&#34;#api-platform-31-is-out&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://soyuka.me/images/2023/api-platform3.png&#34; alt=&#34;webby api platform 3.1&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The API Platform core team released the next minor version, &lt;a href=&#34;https://github.com/api-platform/core/releases/tag/v3.1.0&#34;&gt;API Platform 3.1&lt;/a&gt;. This version is backed by &lt;a href=&#34;https://les-tilleuls.coop/&#34;&gt;Les-Tilleuls.coop&lt;/a&gt; and is the work of many contributors, thanks to them!&lt;/p&gt;&#xA;&lt;p&gt;We had really amazing feedbacks on API Platform 3, we have now released &lt;a href=&#34;https://github.com/api-platform/core/releases/tag/v3.0.11&#34;&gt;API Platform 3.0.11&lt;/a&gt; and &lt;a href=&#34;https://github.com/api-platform/core/releases/tag/v2.7.7&#34;&gt;API Platform 2.7.7&lt;/a&gt;. Note that if you haven&amp;rsquo;t upgraded yet to 3.0, you really need to as the 2.7 version will now only get security updates. If you&amp;rsquo;re not comfortable or think that it&amp;rsquo;s too hard to upgrade &lt;a href=&#34;mailto:contact@les-tilleuls.coop&#34;&gt;contact us&lt;/a&gt;, we can help!&lt;/p&gt;</description>
			</item>
			<item>
				<title>CQRS with API Platform</title>
				<link>https://soyuka.me/cqrs-with-api-platform/</link>
				<pubDate>Mon, 26 Sep 2022 14:13:00 +0000</pubDate>
				<guid>https://soyuka.me/cqrs-with-api-platform/</guid>
				<description>&lt;h2 id=&#34;cqrs-with-symfony&#34;&gt;CQRS with Symfony&lt;a class=&#34;anchor&#34; href=&#34;#cqrs-with-symfony&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Here, CQRS stands for Command and Query Responsibility Segregation. I recommend to read &lt;a href=&#34;https://martinfowler.com/bliki/CQRS.html&#34;&gt;Martin Fowler&amp;rsquo;s introduction&lt;/a&gt; which is a really good starting point.&lt;/p&gt;&#xA;&lt;p&gt;I often see implementation of CQRS using the &lt;a href=&#34;https://symfony.com/components/Messenger&#34;&gt;Symfony messenger&lt;/a&gt; component. Let&amp;rsquo;s take two data transfer objects an &lt;code&gt;OrderBookCommand&lt;/code&gt; and a &lt;code&gt;ReadBookQuery&lt;/code&gt;. For each of these objects we have message &lt;a href=&#34;https://symfony.com/doc/current/messenger.html#creating-a-message-handler&#34;&gt;handlers&lt;/a&gt;, in our case an &lt;code&gt;OrderBookCommandHandler&lt;/code&gt; and a &lt;code&gt;ReadBookQueryHandler&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Then, using the messenger we dispatch our query/command class through a bus, which calls handlers. Let&amp;rsquo;s look at the code to order a book:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Guide to Open Source contributions with github</title>
				<link>https://soyuka.me/guide-open-source-github-git-remote/</link>
				<pubDate>Mon, 20 Dec 2021 14:13:00 +0000</pubDate>
				<guid>https://soyuka.me/guide-open-source-github-git-remote/</guid>
				<description>&lt;h2 id=&#34;git-vs-github-disambiguation&#34;&gt;Git vs Github disambiguation&lt;a class=&#34;anchor&#34; href=&#34;#git-vs-github-disambiguation&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Git is a Version Control System (VCS) software created in 2005. It was initially build to handle the source code of the Linux Kernel and its contributions. The official website can be found at &lt;a href=&#34;https://git-scm.com/&#34;&gt;git-scm.com&lt;/a&gt;. There is also a comprehensive book that you can read online for free &lt;a href=&#34;https://git-scm.com/book/en/v2&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Github is a company that hosts the Website &lt;a href=&#34;https://github.com&#34;&gt;Github.com&lt;/a&gt;. This website offers a user interface on top of the Version Control System Git. It has additional features like Pull Requests, a Bug Tracker (named Issues), project planning tools and even a Continuous Integration system.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Git rebase guide</title>
				<link>https://soyuka.me/git-rebase-guide/</link>
				<pubDate>Fri, 11 Jun 2021 01:39:10 +0000</pubDate>
				<guid>https://soyuka.me/git-rebase-guide/</guid>
				<description>&lt;p&gt;This is my guide for rebase, I&amp;rsquo;ll explain my process for rebasing and an alternative using cherry-pick that I often use when working on Open Source software. This guide is usefull when a maintainer says &amp;ldquo;please rebase&amp;rdquo; and you end up with 40 commits not being yours in the github pull request.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Keep your system clean with linux</title>
				<link>https://soyuka.me/keep-system-clean-linux/</link>
				<pubDate>Sat, 22 May 2021 11:48:50 +0000</pubDate>
				<guid>https://soyuka.me/keep-system-clean-linux/</guid>
				<description>&lt;p&gt;I monitor my system disk usage a lot and lately, 90% of the space was used. This needs spring cleanup! I use a partition for &lt;code&gt;/&lt;/code&gt; (30GB) and one for &lt;code&gt;/home&lt;/code&gt;(466GB).&lt;/p&gt;&#xA;&lt;h2 id=&#34;docker&#34;&gt;Docker&lt;a class=&#34;anchor&#34; href=&#34;#docker&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Docker has a special directory at &lt;code&gt;/home/docker&lt;/code&gt;, for this to work add this to &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{&amp;#34;data-root&amp;#34;: &amp;#34;/home/docker&amp;#34;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To clean up docker usage, there are &lt;em&gt;prune&lt;/em&gt; commands for images, volumes and networks. You may want to stop and remove running containers first:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Docker to run multiple PHP versions</title>
				<link>https://soyuka.me/docker-run-multiple-php-version-development/</link>
				<pubDate>Sun, 09 May 2021 11:48:50 +0000</pubDate>
				<guid>https://soyuka.me/docker-run-multiple-php-version-development/</guid>
				<description>&lt;p&gt;When programming, I like to have the tools on my current shell. I use PHP 8 on a daily basis but from times to times you need to test something with older versions. Docker is really handy for this and I usually use a Dockerfile like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-docker&#34; data-lang=&#34;docker&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# change the version here&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;php:7.4-alpine&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;COPY&lt;/span&gt; --from&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;composer /usr/bin/composer /usr/bin/composer&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; apk add git bash &lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;WORKDIR&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/srv&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CMD&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;php&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once you have this, build and run:&lt;/p&gt;</description>
			</item>
			<item>
				<title>ESQL an alternative to DQL here is why</title>
				<link>https://soyuka.me/esql-alternative-to-doctrine-query-language-why/</link>
				<pubDate>Fri, 29 Jan 2021 11:48:50 +0000</pubDate>
				<guid>https://soyuka.me/esql-alternative-to-doctrine-query-language-why/</guid>
				<description>&lt;p&gt;In the last month or two, I&amp;rsquo;ve hacked around a concept that I call &amp;ldquo;PHP Extended SQL - an alternative to Doctrine Query Language&amp;rdquo;. In this post I&amp;rsquo;ll showcase the &lt;a href=&#34;https://github.com/soyuka/esql&#34;&gt;ESQL library&lt;/a&gt; with a complex use case, illustrating the reasons behind the creation of the ESQL library.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-use-case&#34;&gt;The use case&lt;a class=&#34;anchor&#34; href=&#34;#the-use-case&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I have a collection of Products each belonging to a Category. The data is using the vocabulary of &lt;a href=&#34;https://schema.org/Product&#34;&gt;https://schema.org/Product&lt;/a&gt; which represents the Category property of my Product as: &amp;ldquo;A category for the item. Greater signs or slashes can be used to informally indicate a category hierarchy. &amp;ldquo;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Borg backups from my archlinux workstation to a synology NAS</title>
				<link>https://soyuka.me/borg-backups-archlinux-synology/</link>
				<pubDate>Tue, 29 Sep 2020 11:48:50 +0000</pubDate>
				<guid>https://soyuka.me/borg-backups-archlinux-synology/</guid>
				<description>&lt;p&gt;Since I setup my workstation with sway (&lt;a href=&#34;https://soyuka.me/make-screen-sharing-wayland-sway-work/&#34;&gt;see this article&lt;/a&gt;), the last thing I need to add is a backup solution. On OS X you have Time Machine, on Windows there&amp;rsquo;s also a backup system but on linux you have to roll your own.&lt;/p&gt;&#xA;&lt;h2 id=&#34;research&#34;&gt;Research&lt;a class=&#34;anchor&#34; href=&#34;#research&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m a fervent user of &lt;a href=&#34;https://syncthing.net/&#34;&gt;syncthing&lt;/a&gt;, a continuous file synchronization program. This runs on my Android phone, my workstation, my home computer and a raspberry pi. It helps syncing my photos and my passwords on every devices. But this is not a backup solution in my opinion. At first, I wanted to use this syncthing tool to backup the whole computer and by digging I found out that syncthing users usually backed up their syncthing databse with rsync or Borg.&#xA;I never heard of Borg and went to read their documentation. It&amp;rsquo;s one of the most used software to do backups as it supports:&lt;/p&gt;</description>
			</item>
			<item>
				<title>My first golang project, an url obfuscator</title>
				<link>https://soyuka.me/my-first-golang-project-an-url-obfuscator/</link>
				<pubDate>Fri, 01 May 2020 11:48:50 +0000</pubDate>
				<guid>https://soyuka.me/my-first-golang-project-an-url-obfuscator/</guid>
				<description>&lt;p&gt;Recently, a family member&amp;rsquo;s friend asked me to send him content I had on a server of mine. This server has no hostname and IPs are often censored by tools like Facebook Messenger. I then searched for an URL shortener, minifier, obfuscator or whatever&amp;hellip; Many exists, but how is my data safe? This is always one of my primary concerns. Because none of the tools didn&amp;rsquo;t had any data analysis behind it, I searched for some open source software I could run myself. Here again, they are some good software around, but none that had all my criterias.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Make screen sharing on wayland (sway) work!</title>
				<link>https://soyuka.me/make-screen-sharing-wayland-sway-work/</link>
				<pubDate>Tue, 21 Apr 2020 17:43:50 +0000</pubDate>
				<guid>https://soyuka.me/make-screen-sharing-wayland-sway-work/</guid>
				<description>&lt;p&gt;Note: &lt;a href=&#34;https://www.archlinux.org/packages/community/x86_64/xdg-desktop-portal-wlr/&#34;&gt;xdg-desktop-portal-wlr is on arch&amp;rsquo;s community repository&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;from-i3-to-sway&#34;&gt;From i3 to Sway&lt;a class=&#34;anchor&#34; href=&#34;#from-i3-to-sway&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://soyuka.me/images/2020/04/sway.png&#34; alt=&#34;my new desktop&#34;&gt;&#xA;&lt;a href=&#34;https://www.reddit.com/r/unixporn/comments/fhd4en/sway_switched_from_i3_to_sway_on_my_new_setup/&#34;&gt;Reddit post on /r/unixporn&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Few months ago I&amp;rsquo;ve updated my linux stack and decided to switch to a wayland-based infrastructure (see also: &lt;a href=&#34;https://www.secjuice.com/wayland-vs-xorg/&#34;&gt;Wayland vs Xorg&lt;/a&gt;). I use i3 for some years now, the natural way further is &lt;a href=&#34;https://github.com/swaywm/sway/&#34;&gt;Sway&lt;/a&gt;. I had to find alternatives to my previous tools, here&amp;rsquo;s a list:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;X11&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Wayland&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Description&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Rofi&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Wofi&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;App launcher&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;notify-osd&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;mako&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Notify server&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;arandr&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;wdisplays&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Monitor manager&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;xsel, xclip&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;wl-clipboard-x11&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Clipboard manager&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;scrot&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;grim slurp&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Screenshot manager&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;i3bar&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;waybar&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Bars&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;You can find all the packages I use daily in my &lt;a href=&#34;https://github.com/soyuka/dotfiles#packages-list&#34;&gt;dotfiles repository&lt;/a&gt;. Here are some of my favourite:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Angular2 modal component</title>
				<link>https://soyuka.me/angular2-modal-component/</link>
				<pubDate>Wed, 02 Aug 2017 17:43:50 +0000</pubDate>
				<guid>https://soyuka.me/angular2-modal-component/</guid>
				<description>&lt;p&gt;This article is about creating a simple and re-usable modal component with angular2. Featuring &lt;code&gt;@HostListener&lt;/code&gt;, &lt;code&gt;ng-content&lt;/code&gt;, and some basic vanilla javascript code!&lt;/p&gt;</description>
			</item>
			<item>
				<title>Angular2 external subscriber in a directive (Output)</title>
				<link>https://soyuka.me/angular2-external-subscriber-directive/</link>
				<pubDate>Tue, 17 Jan 2017 22:34:10 +0000</pubDate>
				<guid>https://soyuka.me/angular2-external-subscriber-directive/</guid>
				<description>&lt;p&gt;You made a great component that leverage reactive forms. The thing is, you want to share this directive, and let users define the Observable that should be used by the custom form component.&#xA;The naive way to make this work would be to bind that Observable in an &lt;code&gt;@Input&lt;/code&gt;, and then use that input in the component. We will see here why it doesn&amp;rsquo;t feel right and how to implement it as an &lt;code&gt;@Output&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Distance between flexbox items</title>
				<link>https://soyuka.me/distance-between-flexbox-item/</link>
				<pubDate>Wed, 28 Sep 2016 22:34:10 +0000</pubDate>
				<guid>https://soyuka.me/distance-between-flexbox-item/</guid>
				<description>&lt;p&gt;Ever wanted to set a gutter between your flexbox items? This is, in my opinion the best way to do it. It doesn&amp;rsquo;t require negative margins or padding hacks, which will lead you to only struggle more. By the way, this method hooks on columns and doesn&amp;rsquo;t need additional &lt;code&gt;div&lt;/code&gt;&amp;rsquo;s or inner containers.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Fast fix diverged branches</title>
				<link>https://soyuka.me/fast-fix-diverged-branches/</link>
				<pubDate>Wed, 15 Jun 2016 01:39:10 +0000</pubDate>
				<guid>https://soyuka.me/fast-fix-diverged-branches/</guid>
				<description>&lt;p&gt;You made a pull-request, but now some other changes got merged and branches have diverged. There&amp;rsquo;s a small tip I use to keep history while re-applying commits.&lt;/p&gt;&#xA;&lt;p&gt;Make sure to also check out my &lt;a href=&#34;https://soyuka.me/git-rebase-guide&#34;&gt;Git Rebase guide&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rewrite an older commit with rebase and stash</title>
				<link>https://soyuka.me/rewrite-an-older-commit-with-rebase-and-stash/</link>
				<pubDate>Thu, 26 May 2016 11:30:10 +0000</pubDate>
				<guid>https://soyuka.me/rewrite-an-older-commit-with-rebase-and-stash/</guid>
				<description>&lt;p&gt;You just commited some modifications, but there you&amp;rsquo;ve to edit things that are related to a previous commit, which isn&amp;rsquo;t the last one. So, instead of simply amending the commit, you need some more work to keep clean commits.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Optimize Web assets with Gulp</title>
				<link>https://soyuka.me/optimize-web-assets-with-gulp/</link>
				<pubDate>Sat, 23 Apr 2016 16:12:10 +0000</pubDate>
				<guid>https://soyuka.me/optimize-web-assets-with-gulp/</guid>
				<description>&lt;p&gt;Images, css, javascript, fonts, we&amp;rsquo;re using a lot of things in today&amp;rsquo;s websites. Every time you add an asset &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;, &lt;code&gt;@import&lt;/code&gt;, the browser will issue a request to fetch it. The number of requests that you&amp;rsquo;ll send might not matter compared to how heavy your ressources are.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Indexing hashes with a set in redis</title>
				<link>https://soyuka.me/indexing-hashes-with-a-set-in-redis/</link>
				<pubDate>Fri, 01 Apr 2016 08:04:18 +0000</pubDate>
				<guid>https://soyuka.me/indexing-hashes-with-a-set-in-redis/</guid>
				<description>&lt;p&gt;Recently I was confronting a redis performance issue involving the following commands:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;keys&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;scan&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;multiple &lt;code&gt;hgetall&lt;/code&gt; calls&lt;/li&gt;&#xA;&lt;li&gt;storing a json string in the hash (wtf)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Clearly, I was doing everything wrong when I now take a look at my new solution. What&amp;rsquo;s weird is that it felt right when I first wrote the code. Maybe that this is because I was &lt;em&gt;mind-stuck&lt;/em&gt; in a relational pattern instead of putting those aside and starting to think redis-only.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Angular2 providers, view providers and &#34;singletons&#34;</title>
				<link>https://soyuka.me/angular2-providers-view-providers-and-singletons/</link>
				<pubDate>Thu, 10 Mar 2016 18:57:45 +0000</pubDate>
				<guid>https://soyuka.me/angular2-providers-view-providers-and-singletons/</guid>
				<description>&lt;p&gt;The following is an illustration of how providers act through the angular application, or the components tree.&#xA;You can control their action scope by using &lt;code&gt;providers&lt;/code&gt; or &lt;code&gt;viewProviders&lt;/code&gt; so that multiple sibling components share the same instance of that provider.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Benchmarking nodejs streams</title>
				<link>https://soyuka.me/benchmarking-nodejs-streams/</link>
				<pubDate>Sat, 20 Feb 2016 17:02:34 +0000</pubDate>
				<guid>https://soyuka.me/benchmarking-nodejs-streams/</guid>
				<description>&lt;p&gt;I was trying to compare my new &lt;a href=&#34;github.com/soyuka/jhaml&#34;&gt;streamable haml parser&lt;/a&gt; against &lt;a href=&#34;https://github.com/tj/haml.js&#34;&gt;other&lt;/a&gt; &lt;a href=&#34;https://github.com/creationix/haml-js&#34;&gt;implementations&lt;/a&gt; and my results kept getting inconsistent. What I didn&amp;rsquo;t realised at first was that I was trying to compare things that can&amp;rsquo;t be compared.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The first point is obvious: the golden rule of a useful benchmark is to only compare apples and apples.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;From &lt;a href=&#34;http://redis.io/topics/benchmarks&#34;&gt;redis documentation&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-benchmarking&#34;&gt;What is benchmarking?&lt;a class=&#34;anchor&#34; href=&#34;#what-is-benchmarking&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;First, I should&amp;rsquo;ve asked myself &amp;ldquo;What is benchmarking?&amp;rdquo;. The answer might be obvious, but asking questions is never stupid.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Having fun with nodejs child processes</title>
				<link>https://soyuka.me/having-fun-with-nodejs-child-processes/</link>
				<pubDate>Fri, 05 Feb 2016 19:38:25 +0000</pubDate>
				<guid>https://soyuka.me/having-fun-with-nodejs-child-processes/</guid>
				<description>&lt;p&gt;When using nodejs child processes you can enable an IPC channel (Inter-process communication). This is great because it gives you the ability to exchange informations between sub processes.&lt;/p&gt;&#xA;&lt;p&gt;With nodejs we often talk about micro-services, and I think that most of the time those micro-services can be represented in micro-processes, especially those with an asynchronous behaviour.&lt;/p&gt;&#xA;&lt;p&gt;A few weeks ago I&amp;rsquo;ve studied node internals and IPC and I&amp;rsquo;ve tried to ease this process implementation with &lt;a href=&#34;https://github.com/soyuka/relieve&#34;&gt;relieve&lt;/a&gt;. While doing this, I&amp;rsquo;ve learned that:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Use Gulp to ease your angularjs workflow</title>
				<link>https://soyuka.me/use-gulp-to-ease-angularjs/</link>
				<pubDate>Tue, 01 Dec 2015 19:18:17 +0000</pubDate>
				<guid>https://soyuka.me/use-gulp-to-ease-angularjs/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m often seeing people having trouble managing angular dependency injection, minification, templates etc. I never had such issues, because my &lt;em&gt;gulp-based&lt;/em&gt; workflow already handles everything for me.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Call nodejs frameworks routes programmatically</title>
				<link>https://soyuka.me/call-framework-routes-programmatically/</link>
				<pubDate>Thu, 29 Oct 2015 20:19:07 +0000</pubDate>
				<guid>https://soyuka.me/call-framework-routes-programmatically/</guid>
				<description>&lt;p&gt;All those examples will call &lt;code&gt;GET /some/other/path&lt;/code&gt; when &lt;code&gt;GET /&lt;/code&gt; is called with different frameworks.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Dockerize a node app in 2 minutes</title>
				<link>https://soyuka.me/dockerize-a-node-app-in-2-minutes/</link>
				<pubDate>Sat, 17 Oct 2015 14:56:00 +0000</pubDate>
				<guid>https://soyuka.me/dockerize-a-node-app-in-2-minutes/</guid>
				<description>&lt;p&gt;For the following I&amp;rsquo;m using a project of mine : &lt;a href=&#34;https://github.com/soyuka/explorer&#34;&gt;Explorer&lt;/a&gt;. It&amp;rsquo;s a directory listing tool. To run it only needs a configuration file.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Use dependency injection!</title>
				<link>https://soyuka.me/use-dependency-injection/</link>
				<pubDate>Thu, 08 Oct 2015 12:15:16 +0000</pubDate>
				<guid>https://soyuka.me/use-dependency-injection/</guid>
				<description>&lt;p&gt;Take a nodejs app, which has :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a &lt;em&gt;global&lt;/em&gt; configuration&lt;/li&gt;&#xA;&lt;li&gt;a redis client (or it could be a database connection)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Those both will most likely be instancianted once in your application. A database pool might have a more complicated behavior, but at the end it&amp;rsquo;ll has the same result: a pool instance to work with.&lt;/p&gt;</description>
			</item>
			<item>
				<title>An unpleasant babeljs experiment</title>
				<link>https://soyuka.me/an-unpleasant-babeljs-experiment/</link>
				<pubDate>Thu, 01 Oct 2015 19:02:32 +0000</pubDate>
				<guid>https://soyuka.me/an-unpleasant-babeljs-experiment/</guid>
				<description>&lt;p&gt;We all love new technologies, and we want to use them as soon as they&amp;rsquo;re out. ES6 comes with really nice features, for example:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;arrow function&lt;/li&gt;&#xA;&lt;li&gt;default function argument value&lt;/li&gt;&#xA;&lt;li&gt;block scopes&lt;/li&gt;&#xA;&lt;li&gt;rest parameters&lt;/li&gt;&#xA;&lt;li&gt;etc&amp;hellip;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thing is, nodejs doesn&amp;rsquo;t allow the use of all those new, and mostly nice features, &lt;strong&gt;yet&lt;/strong&gt;. This is why some folks build the well known &lt;a href=&#34;https://babeljs.io/&#34;&gt;Babeljs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://soyuka.me/images/2015/10/cat.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Yeah, this was my reaction too at first sight. It seems flawless. Building apps with a futuristic code, trying a lot of new features. The ES6 dream has come through!&#xA;On top of that a nice-looking documentation!&lt;/p&gt;</description>
			</item>
			<item>
				<title>Créér un environnement de développement avec Vagrant et Chef</title>
				<link>https://soyuka.me/creer-un-environnement-de-developpement-avec-vagrant-et-chef/</link>
				<pubDate>Fri, 28 Aug 2015 13:55:59 +0000</pubDate>
				<guid>https://soyuka.me/creer-un-environnement-de-developpement-avec-vagrant-et-chef/</guid>
				<description>&lt;p&gt;Écris à l&amp;rsquo;origine pour la communauté de &lt;a href=&#34;http://mondedie.fr/viewtopic.php?id=7086&#34;&gt;MonDedié&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Dans ce tutoriel nous allons créer un environnement de développement avec Vagrant. Nous allons y configurer nodejs et php avec nginx.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;a class=&#34;anchor&#34; href=&#34;#introduction&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;disclaimer&#34;&gt;Disclaimer&lt;a class=&#34;anchor&#34; href=&#34;#disclaimer&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Si vous n&amp;rsquo;avez pas un minimum de connaissances linux ce tutoriel n&amp;rsquo;est malheureusement pas pour vous. Il s&amp;rsquo;adresse à un public avancé.&lt;br&gt;&#xA;Je suis un fan de la doctrine RTFM , et pour cause j&amp;rsquo;ajouterai souvent un lien vers la documentation lié à la tâche en cours. Utilisez ces liens à bon escient, ou juste par curiosité. Si vous exécutez ce tutoriel juste en faisant des copier/coller vous n&amp;rsquo;apprendrez pas grand chose.&lt;br&gt;&#xA;Retrouvez aussi ce tutoriel et le code complet sur &lt;a href=&#34;https://github.com/soyuka/vagrant-tutoriel-nginx-php-nodejs&#34;&gt;github&lt;/a&gt; !&lt;/p&gt;</description>
			</item>
			<item>
				<title>Streaming big json files the good way with php</title>
				<link>https://soyuka.me/streaming-big-json-files-the-good-way/</link>
				<pubDate>Mon, 05 Jan 2015 13:45:43 +0000</pubDate>
				<guid>https://soyuka.me/streaming-big-json-files-the-good-way/</guid>
				<description>&lt;p&gt;Json is now really popular to share data between components. I&amp;rsquo;m working on an small &lt;a href=&#34;http://en.wikipedia.org/wiki/Enterprise_application_integration&#34;&gt;EAI&lt;/a&gt; (Enterprise Application Integration). It&amp;rsquo;s basic purpose is to transform  and integrate data from an application to another.&#xA;Original data is transformed to JSON from an SQL instance, parsed by the EAI and backed up in another database with transformations and tests.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;a class=&#34;anchor&#34; href=&#34;#the-problem&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;This seems really simple on the first look, but when you work with big files, you can not simply &lt;code&gt;json_decode&lt;/code&gt; a file and put it back where you need too. It could work with small files, which sizes aren&amp;rsquo;t bigger than you&amp;rsquo;re computer memory. With big files, it&amp;rsquo;ll eat up memory and might break the server, or worse eat up ressources that other applications might need.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Install nginx, php-fpm with oracle on Debian Wheezy</title>
				<link>https://soyuka.me/install-nginx-php-fpm-with-oracle-on-debian-wheezy/</link>
				<pubDate>Thu, 04 Sep 2014 08:50:41 +0000</pubDate>
				<guid>https://soyuka.me/install-nginx-php-fpm-with-oracle-on-debian-wheezy/</guid>
				<description>&lt;h2 id=&#34;install-oracle-instant-client&#34;&gt;Install Oracle instant client&lt;a class=&#34;anchor&#34; href=&#34;#install-oracle-instant-client&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;First of all, download those both files &lt;a href=&#34;http://www.oracle.com/technetwork/topics/linuxsoft-082809.html&#34;&gt;from the official Oracle website&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;oracle-instantclient11.2-&lt;strong&gt;basic&lt;/strong&gt;-11.2.0.3.0-1.x86_64.rpm&#xA;&lt;small&gt;library files later extracted in &lt;code&gt;/usr/lib/oracle/11.2/client/&lt;/code&gt;&lt;/small&gt;&lt;/li&gt;&#xA;&lt;li&gt;oracle-instantclient11.2-&lt;strong&gt;devel&lt;/strong&gt;-11.2.0.3.0-1.x86_64.rpm&#xA;&lt;small&gt;headers files extracted in &lt;code&gt;/usr/include/oracle/11.2/client&lt;/code&gt;&lt;/small&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Install php5 php5-fpm and nginx on Debian 5 Squeeze</title>
				<link>https://soyuka.me/install-php5-php5-fpm-and-nginx-on-debian-5-squeeze/</link>
				<pubDate>Mon, 18 Aug 2014 11:08:23 +0000</pubDate>
				<guid>https://soyuka.me/install-php5-php5-fpm-and-nginx-on-debian-5-squeeze/</guid>
				<description>&lt;p&gt;In many tutorials I&amp;rsquo;ve seen that you should use &lt;code&gt;dotdeb&lt;/code&gt; packages like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/apt/sources.list.d/php-fpm.list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb http://packages.dotdeb.org stable all  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb-src http://packages.dotdeb.org stable all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
			</item>
			<item>
				<title>NoSQL databases does not MEAN anything</title>
				<link>https://soyuka.me/nosql-databases-does-not-mean-anything/</link>
				<pubDate>Tue, 12 Aug 2014 12:58:00 +0000</pubDate>
				<guid>https://soyuka.me/nosql-databases-does-not-mean-anything/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;There is so much hype around the MEAN stack, it can be hard to ignore.&#xA;&lt;small&gt; &lt;a href=&#34;https://twitter.com/lewiswalsh/status/499160628024840192&#34;&gt;@lewiswalsh&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True. And oh gosh, I hate this abbreviation!&#xA;Think about a small developer, all he knows is some PHP and a bit of jQuery  to write his website. One morning, on twitter, he reads that everybody is talking about MEAN. First thing he&amp;rsquo;s going to ask is: what does it mean? (yeah crap joke)&lt;/p&gt;</description>
			</item>
			<item>
				<title>Installing OCI8 extension for PHP 5.4 debian wheezy (x86)</title>
				<link>https://soyuka.me/installing-oci8-extension-for-php-5-4-debian-wheezy/</link>
				<pubDate>Wed, 26 Feb 2014 14:51:31 +0000</pubDate>
				<guid>https://soyuka.me/installing-oci8-extension-for-php-5-4-debian-wheezy/</guid>
				<description>&lt;p&gt;&amp;ldquo;Welcome to the oracle hell&amp;rdquo;&amp;hellip; Just read that on the &lt;a href=&#34;http://fr2.php.net/manual/fr/oci8.installation.php#83747&#34;&gt;php OCI8 man page&lt;/a&gt; and it&amp;rsquo;s true. Installing OCI8 extension wasn&amp;rsquo;t hard but took a lot of googling time&amp;hellip; I&amp;rsquo;m describing here what I did to accomplish this hard task.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using nodejs with cygwin (v0.10.25)</title>
				<link>https://soyuka.me/using-nodejs-with-cygwin-v0-10-25/</link>
				<pubDate>Fri, 07 Feb 2014 09:05:24 +0000</pubDate>
				<guid>https://soyuka.me/using-nodejs-with-cygwin-v0-10-25/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m using Windows at work and I wanted to make some tests with nodejs. I went to the &lt;a href=&#34;http://nodejs.org&#34;&gt;http://nodejs.org&lt;/a&gt;, downloaded the &lt;code&gt;node-v0.10.25.msi&lt;/code&gt; and installed it.&lt;/p&gt;&#xA;&lt;p&gt;Back to my cygwin, I&amp;rsquo;m naturally writing:&#xA;&lt;code&gt;npm -v&lt;/code&gt; - command not found&lt;/p&gt;</description>
			</item>
			<item>
				<title>Comment gérer les messages de github avec gmail</title>
				<link>https://soyuka.me/comment-gerer-les-messages-de-github-avec-gmail/</link>
				<pubDate>Sat, 11 Jan 2014 18:40:13 +0000</pubDate>
				<guid>https://soyuka.me/comment-gerer-les-messages-de-github-avec-gmail/</guid>
				<description>&lt;p&gt;Personnellement, j&amp;rsquo;aime bien être au courant de quelques scripts intéressants sur github (watch) mais des fois il est clair que cela peut être encombrant sur la boite mail !&lt;/p&gt;&#xA;&lt;p&gt;J&amp;rsquo;ai une solution parfaite pour faire en sorte de les séparer des mails normaux !&lt;/p&gt;</description>
			</item>
			<item>
				<title>Petit moniteur d&#39;activité pour raspberry sous node.js</title>
				<link>https://soyuka.me/petit-moniteur-dactivite-pour-raspberry-sous-node-js/</link>
				<pubDate>Thu, 19 Dec 2013 14:38:06 +0000</pubDate>
				<guid>https://soyuka.me/petit-moniteur-dactivite-pour-raspberry-sous-node-js/</guid>
				<description>&lt;p&gt;Après avoir &lt;a href=&#34;http://soyuka.me/installer-nodejs-sur-un-raspberry-pi/&#34;&gt;laborieusement installé nodejs&lt;/a&gt; sur le raspberry, et après avoir parcouru les quelques articles du blog d&amp;rsquo;&lt;a href=&#34;http://blog.idleman.fr/raspberry-pi-14-surveiller-les-performances-du-rpi-depuis-le-web/&#34;&gt;idleman&lt;/a&gt; j&amp;rsquo;ai découvert &lt;a href=&#34;https://github.com/imjacobclark/Raspcontrol&#34;&gt;Raspcontrol&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Raspcontrol est un système créé sous PHP qui permet de surveiller les performances de son Raspberry Pi.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://soyuka.me/images/2013/Dec/raspcontrol.png&#34; alt=&#34;Raspcontrol&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Accessible via un navigateur, j&amp;rsquo;ai rapidemment parcouru le code source pour comprendre ce que le script fais. C&amp;rsquo;est assez basique, il utilise &lt;a href=&#34;http://www.php.net/manual/en/function.exec.php&#34;&gt;exec&lt;/a&gt; pour aller chercher les différentes informations du système, puis les formattes. Autant vous dire que lors de son déploiement sur d&amp;rsquo;autres plateforme vous risquez d&amp;rsquo;être confronté à quelques petits problèmes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Installer nodejs sur un raspberry PI</title>
				<link>https://soyuka.me/installer-nodejs-sur-un-raspberry-pi/</link>
				<pubDate>Wed, 18 Dec 2013 09:26:45 +0000</pubDate>
				<guid>https://soyuka.me/installer-nodejs-sur-un-raspberry-pi/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://soyuka.me/images/2013/Dec/nodejs_logo-4.png&#34; alt=&#34;NodeJS&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;C&amp;rsquo;est parti, après le dépoussiérage, je me suis lancé dans l&amp;rsquo;installation de nodejs sur le raspberry pi.&lt;/p&gt;&#xA;&lt;p&gt;Comme à mes habitudes, j&amp;rsquo;ai téléchargé le code source et ai compilé node &lt;small&gt;&lt;a href=&#34;#badidea&#34;&gt;(mauvaise idée)&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Réinstallation du raspberry pi (raspbian)</title>
				<link>https://soyuka.me/reinstallation-du-raspberry-pi-raspbian/</link>
				<pubDate>Tue, 17 Dec 2013 14:14:00 +0000</pubDate>
				<guid>https://soyuka.me/reinstallation-du-raspberry-pi-raspbian/</guid>
				<description>&lt;p&gt;Après avoir trouvé un PC un peu plus puissant pour faire office de &lt;em&gt;media center&lt;/em&gt;, le raspberry pi acheté pour l&amp;rsquo;occasion à besoin de se refaire une beauté !&lt;/p&gt;</description>
			</item>
			<item>
				<title>Un lecteur mp3 et FLAC en javascript</title>
				<link>https://soyuka.me/un-lecteur-mp3-et-flac-en-javascript/</link>
				<pubDate>Fri, 29 Nov 2013 13:46:19 +0000</pubDate>
				<guid>https://soyuka.me/un-lecteur-mp3-et-flac-en-javascript/</guid>
				<description>&lt;p&gt;Il y a encore quelques mois, il était impossible d&amp;rsquo;avoir un lecteur audio MP3 qui fonctionne sur tous les navigateurs récents. &lt;a href=&#34;http://audiocogs.org&#34;&gt;Audiocogs&lt;/a&gt; révolutionne donc le monde de l&amp;rsquo;audio en offrant un décodeur de MP3, AAC, FLAC, ALAC en VanillaJS (pas de flash !) !&lt;/p&gt;&#xA;&lt;p&gt;Plusieurs personnes m&amp;rsquo;ont demandé d&amp;rsquo;intégrer le FLAC à ezseed (&lt;a href=&#34;http://soyuka.me/ezseed-une-seedbox-pour-toute-la-famille/&#34;&gt;un script d&amp;rsquo;installation et de gestion de seedbox&lt;/a&gt;), et de ce fait, je me suis intéressé de plus prêt à ce script.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Mieux organiser ses sockets avec express.js</title>
				<link>https://soyuka.me/mieux-organiser-ses-sockets-avec-express-js/</link>
				<pubDate>Thu, 21 Nov 2013 12:42:06 +0000</pubDate>
				<guid>https://soyuka.me/mieux-organiser-ses-sockets-avec-express-js/</guid>
				<description>&lt;p&gt;Si vous avez déjà utilisé les sockets dans une application node.js, vous vous êtes surement déjà retrouvé dans un cas où votre fichier principal deviens plutôt long et mal organisé.&lt;/p&gt;&#xA;&lt;p&gt;J&amp;rsquo;ai une solution simple à ce problème. En effet, lorsque l&amp;rsquo;on cherche un peu les documentations sur les sockets avec express.js on retrouve souvent ce schéma :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;express&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;express&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;express&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;** la configuration d&amp;#39;express, les routes etc.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;*/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//Déclaration du serveur&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;createServer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;port&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(){&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Express server listening on port &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;port&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;io&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;socket.io&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//Et là c&amp;#39;est la catastrophe&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;configure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(){&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;c1&#34;&gt;//On gère l&amp;#39;authentification par exemple&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sockets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;connection&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//Nos listeners, emiters&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;action&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Rien que dans cet exemple, très simplifié, le fichier &lt;code&gt;app.js&lt;/code&gt; est bordélique et comporte bien trop de choses différentes : les routes, les middlewares, les actions des sockets.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Installer Ghost sur un vps (pm2 &#43; apache2)</title>
				<link>https://soyuka.me/installer-ghost-sur-un-vps-pm2-apache/</link>
				<pubDate>Wed, 20 Nov 2013 15:07:37 +0000</pubDate>
				<guid>https://soyuka.me/installer-ghost-sur-un-vps-pm2-apache/</guid>
				<description>&lt;p&gt;Certains d&amp;rsquo;entre vous on probablement entendu parler de &lt;a href=&#34;https://github.com/TryGhost/Ghost&#34;&gt;Ghost&lt;/a&gt;. Cette nouvelle plateforme de Blog a pu voir le jour grâce a un &lt;a href=&#34;http://www.kickstarter.com/projects/johnonolan/ghost-just-a-blogging-platform/comments&#34;&gt;financement participatif&lt;/a&gt; à hauteur de £196,362 (environ 234 176 €) !&lt;/p&gt;&#xA;&lt;p&gt;Ghost tourne sous Node.js, étant assez fanatique de cette programmation en Javascript &lt;em&gt;only&lt;/em&gt;, je me suis empressé de la tester, et je vais vous montrer comment l&amp;rsquo;installer sur un &lt;a href=&#34;http://www.ovh.com/fr/vps/&#34;&gt;VPS de chez OVH&lt;/a&gt; assez simplement.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Ezseed - une seedbox pour toute la famille !</title>
				<link>https://soyuka.me/ezseed-une-seedbox-pour-toute-la-famille/</link>
				<pubDate>Tue, 19 Nov 2013 15:30:59 +0000</pubDate>
				<guid>https://soyuka.me/ezseed-une-seedbox-pour-toute-la-famille/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://github.com/soyuka/ezseed2&#34;&gt;Ezseed&lt;/a&gt; est un script qui permet l&amp;rsquo;installation d&amp;rsquo;une seedbox simple à utiliser.&lt;/p&gt;&#xA;&lt;h3 id=&#34;quest-ce-quune-seedbox-&#34;&gt;Qu&amp;rsquo;est-ce qu&amp;rsquo;une seedbox ?&lt;a class=&#34;anchor&#34; href=&#34;#quest-ce-quune-seedbox-&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;En gros, la seedbox c&amp;rsquo;est un peu le meilleur des 2 mondes que sont le P2P et le DDL. En effet, vous partagez via votre seedbox et vous récupérez le tout directement sans attente puisque la seedbox a déjà récupéré ce que vous souhaitiez.&#xA;&lt;small&gt;&lt;a href=&#34;http://fr.wikipedia.org/wiki/Seedbox&#34;&gt;Wikipedia&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Vaste n&amp;rsquo;est-il pas ? Voici un schéma pour les non initiés :&lt;/p&gt;</description>
			</item>
			<item>
				<title>L’open data strasbourgeois accessible à tous !</title>
				<link>https://soyuka.me/lopen-data-strasbourgeois-accessible-a%CC%80-tous/</link>
				<pubDate>Mon, 18 Nov 2013 15:01:17 +0000</pubDate>
				<guid>https://soyuka.me/lopen-data-strasbourgeois-accessible-a%CC%80-tous/</guid>
				<description>&lt;p&gt;&lt;em&gt;A l’occasion du concours open data lancé par la ville de Strasbourg, 26 projets ont été présélectionnés par le jury. Parmi eux, stras.io, un concept ludique, original et innovant lancé par Antoine BLUCHET et Gilles HUMEZ, deux étudiants en informatique.&lt;/em&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Blog dgear.fr migré</title>
				<link>https://soyuka.me/blog-dgear-fr-migre/</link>
				<pubDate>Mon, 18 Nov 2013 14:43:01 +0000</pubDate>
				<guid>https://soyuka.me/blog-dgear-fr-migre/</guid>
				<description>&lt;p&gt;Je migre sur &lt;a href=&#34;http://ghost.org&#34;&gt;Ghost&lt;/a&gt; et sous node.js  (surtout pour le MD &amp;lt;3) !&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;&lt;a href=&#34;http://dgear.fr/portfolio/&#34;&gt;ancien blog&lt;/a&gt; est toujours disponible.&lt;/p&gt;</description>
			</item>
			<item>
				<title>CSV vers MYSQL en php</title>
				<link>https://soyuka.me/csv-vers-mysql-en-php/</link>
				<pubDate>Mon, 18 Nov 2013 14:40:16 +0000</pubDate>
				<guid>https://soyuka.me/csv-vers-mysql-en-php/</guid>
				<description>&lt;p&gt;Transformation d’une ligne csv à une requête SQL, le script remplace toutes les entrées à chaque fois, il ne met pas à jour mais est facilement transformable (voir la variable &lt;code&gt;$q&lt;/code&gt;).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Detection mobile php</title>
				<link>https://soyuka.me/detection-mobile-php/</link>
				<pubDate>Mon, 18 Nov 2013 14:35:12 +0000</pubDate>
				<guid>https://soyuka.me/detection-mobile-php/</guid>
				<description>&lt;p&gt;Voici un très bon plugin php qui permet de reconnaître beaucoup de mobiles différents depuis le user-agent. Il est régulièrement mis à jour ! Il m’a été utile plus d’une fois est est très simple d’utilisation :&lt;/p&gt;&#xA;&lt;p&gt;Incluons le fichier &lt;a href=&#34;https://raw.github.com/serbanghita/Mobile-Detect/master/Mobile_Detect.php&#34;&gt;Mobile_Detect.php&lt;/a&gt; :&lt;/p&gt;</description>
			</item>
			<item>
				<title>Override du PHP des modules prestashop 1.5</title>
				<link>https://soyuka.me/override-du-php-des-modules-prestashop-1-5/</link>
				<pubDate>Mon, 18 Nov 2013 14:14:20 +0000</pubDate>
				<guid>https://soyuka.me/override-du-php-des-modules-prestashop-1-5/</guid>
				<description>&lt;p&gt;Il s’agit ici de pouvoir remplacer les modules depuis le chemin &lt;code&gt;override/modules/mon_module/mon_module.php&lt;/code&gt;, pour par exemple ajouter des &lt;strong&gt;HOOK&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Dans &lt;code&gt;override/classes/modules&lt;/code&gt;, nous allons créer la classe &lt;code&gt;Module&lt;/code&gt; afin de remplacer &lt;code&gt;getInstanceByName&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title></title>
				<link>https://soyuka.me/drafts/2023-09-01-experience-developer-works-with-react-and-tailwind-for-a-week/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://soyuka.me/drafts/2023-09-01-experience-developer-works-with-react-and-tailwind-for-a-week/</guid>
				<description>&lt;p&gt;props mistake inside useEffect&#xA;weird behavior when wrong dependencies&#xA;quite nice hooks helps compartementalize&lt;/p&gt;&#xA;&lt;p&gt;if (activeTab === &amp;lsquo;x&amp;rsquo;) useEFfect =&amp;gt; logic to create the component&#xA;beginner =&amp;gt; use eslint&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
