Flux
Toutes les sources

JoliCode

34 articles Flux RSS
Programmation Web
Introducing beberlei/metrics v3.0.0

Introducing beberlei/metrics v3.0.0

Since 2012, beberlei/metrics has been doing one small job well: giving PHP applications a single, consistent API to send metrics (counters, timings, gauges...) without tying the calling code to a specific backend. Swap StatsD for Prometheus, or send to both at once, and the instrumented code never changes. Version 3.0 is the biggest release in the project's history. It drops everything older than PHP 8.4, rewrites the core API around strict types, and - the part I'm most excited about - ships…

JoliCode
Migrating from Webpack Encore to Vite with Reprise

Migrating from Webpack Encore to Vite with Reprise

We maintain a high-traffic project for one of our clients: 5 websites served by a single Symfony application, 800 Twig templates, and a React + Tailwind front end that has been built by Webpack Encore for years. A front-end build that was starting to weigh on us: over a minute of Webpack, a NODE_OPTIONS=--max_old_space_size=4096 to keep the heap from blowing up, a 200-line webpack.config.js driving two separate builds, and no hot reload for developers. Webpack Encore is reaching the end of its…

JoliCode
Migrer de Webpack Encore vers Vite avec Reprise

Migrer de Webpack Encore vers Vite avec Reprise

Nous maintenons, pour un de nos clients, un projet à fort trafic : 5 sites servis par une même application Symfony, 800 templates Twig, et un front React + Tailwind buildé depuis des années par Webpack Encore. Un build front qui commençait sérieusement à peser : plus d'une minute de Webpack, un NODE_OPTIONS=--max_old_space_size=4096 pour ne pas exploser la heap, un webpack.config.js de 200 lignes pilotant deux builds distincts, et aucun hot reload pour les développeurs. Webpack Encore arrive en…

JoliCode
SimHash : trouver les pages qui se ressemblent

SimHash : trouver les pages qui se ressemblent

Il y a quelques semaines, j'ai eu besoin de détecter du contenu dupliqué dans le crawler de redirection.io. Pas du dupliqué à la virgule près, ça c'est facile, mais du dupliqué « en gros, c'est la même page ». J'aurais pu utiliser des embeddings avec un LLM, mais il me fallait quelque chose de rapide et de gratuit. J'ai finalement utilisé SimHash, un algorithme qui date de 2002 et qui tient en trente lignes de PHP. Dans cet article, nous allons voir pourquoi md5() ne peut pas nous aider,…

JoliCode
Quand le cache de Symfony ralentit votre application...

Quand le cache de Symfony ralentit votre application...

Mettre une valeur en cache, c'est toujours plus rapide, non ? Et bien, pas forcément ! Cet article partage l'analyse d'un problème de performance causé par la protection "anti-stampede" du composant Cache de Symfony, et sur la manière dont nous l'avons diagnostiqué puis corrigé. Nous avons récemment corrigé un problème de lenteur sur une application Symfony en production. Le diagnostic nous a pris un certain temps, car la cause était contre-intuitive : le responsable était le composant Cache de…

JoliCode
L'Agent Development Environment : une nouvelle unité de travail

L'Agent Development Environment : une nouvelle unité de travail

Régulièrement, quelque chose arrive et change ce que « écrire du code » veut dire. Cette fois, il se pourrait que ça ne veuille plus dire écrire du tout. D'où je viens Ce qui suit est mon parcours, pas une histoire de PHP. D'autres ont vécu ces mêmes années très différemment. Mon histoire commence en 2013, quand PHP n'était pas le choix évident qu'il allait devenir, donc j'ai appris le C : pointeurs, gestion mémoire manuelle, segfaults. Ensuite je suis passé à l'Objective-C pour du…

JoliCode
The Agent Development Environment: A New Unit of Work

The Agent Development Environment: A New Unit of Work

The Agent Development Environment: A New Unit of Work Every few years, something comes along that changes what "writing code" means. This time, it might stop meaning writing at all. Where we come from What follows is my own path, not a history of PHP. Other people lived those same years very differently. My story starts in 2013, when PHP was not the obvious choice it would later become, so I learned C: pointers, manual memory management, segfaults. Then I moved to Objective-C for iPad…

JoliCode
Writing the PHP Virtual Machine in Rust (with a lot of help from AI)

Writing the PHP Virtual Machine in Rust (with a lot of help from AI)

A few years ago, if someone had told me to rewrite the PHP engine in Rust, I would probably have laughed 😆. Not because it is technically impossible, but because such a project traditionally requires years of reading C code, reverse engineering decades of optimizations, and an intimidating amount of perseverance. Today, Large Language Models have changed how we approach ambitious engineering projects. They do not magically produce production-ready software, but they dramatically reduce the…

JoliCode
Détecter les régressions visuelles dans la CI avec Playwright et Docker

Détecter les régressions visuelles dans la CI avec Playwright et Docker

Sur un gros site public, le front bouge tout le temps : une migration Tailwind par-ci, un composant React par-là, un bloc CMS qui change de gabarit. Et comme toujours avec le CSS, la modification d’une classe qui semblait anodine peut très bien décaler un bloc trois pages plus loin, sans que personne ne s’en rende compte avant la mise en production. Sur un de nos projets, nous avions déjà des tests Behat pour le fonctionnel, et des tests PHPUnit pour le métier. Mais aucun de ces tests ne disait…

JoliCode
JoliDay 2026 avec du malt, des aiguilles, de la 3D et des copeaux

JoliDay 2026 avec du malt, des aiguilles, de la 3D et des copeaux

Comme tous les ans, nous avons profité d’un jour férié (en application de la journée de solidarité avec les personnes âgées) pour nous retrouver tous ensemble et faire des projets ni Web ni Mobile, mais toujours de qualité 👌. Nous avons un gros faible pour le DIY et retrouvons la même gratification à résoudre des problèmes dans « le monde réel » que dans nos projets du quotidien ! Dans cet article, nous vous présentons les différents projets réalisés en une journée par les JoliCodeuses et…

JoliCode
JoliMediaSyliusBundle, a New Bridge for Your Sylius Projects

JoliMediaSyliusBundle, a New Bridge for Your Sylius Projects

Does the excellent Sylius E-commerce framework even need an introduction? If Sylius has established itself in the e-commerce ecosystem, it's largely thanks to its ability to adapt to a wide variety of business needs without imposing a rigid architecture. Its extension system allows for gradual feature evolution while preserving the framework's core mechanisms. Late last year, we launched JoliMediaBundle, a Symfony bundle dedicated to managing media libraries. It already came with two bridges…

JoliCode
JoliMediaSyliusBundle, un nouveau bridge pour vos projets Sylius

JoliMediaSyliusBundle, un nouveau bridge pour vos projets Sylius

Est-il encore nécessaire de présenter l’excellent framework E-commerce Sylius ? Si Sylius s’est imposé dans l’écosystème e-commerce, c’est notamment grâce à sa capacité à s’adapter à des besoins métier très variés sans imposer une architecture rigide. Son système d’extensions permet de faire évoluer progressivement les fonctionnalités tout en conservant les mécanismes du cœur du framework. Fin d'année dernière, nous avons lancé le JoliMediaBundle, un bundle Symfony dédié à la gestion de…

JoliCode
Accélérer votre CI : mettre en cache l’état de la base de données

Accélérer votre CI : mettre en cache l’état de la base de données

Il y a quelques années, j’écrivais Accélérer votre intégration continue. L’article passait en revue tout un tas de techniques pour rendre une CI plus rapide : cache Composer, cache Yarn, layers Docker, parallélisation, tmpDir de PHPStan… et, tout en bas de la liste, une idée un peu à part : plutôt que de rejouer les fixtures à chaque build, charger un dump SQL pré-généré. L’idée est séduisante, mais sous sa forme la plus simple (un dump statique, versionné, régénéré à la main) elle a un défaut…

JoliCode
Customizing Sylius Grids - Improved DX with Grid Mutators

Customizing Sylius Grids - Improved DX with Grid Mutators

In Sylius, grids handle back-office list rendering: data fetching, column definitions, filters, actions, and more. Sylius E-commerce ships with a large number of ready-to-use grids that can be customized to fit your project's needs. Until now, customization mainly relied on YAML configuration overrides or Grid events. These approaches still work, but they quickly hit their limits when you need to introduce business logic or benefit from a more modern, pleasant API. With the upcoming release of…

JoliCode
Customiser les grilles Sylius - DX améliorée avec les Grid mutators

Customiser les grilles Sylius - DX améliorée avec les Grid mutators

Dans Sylius, les grilles sont responsables de l'affichage des listes du back-office : récupération des données, définition des colonnes, filtres, actions... Sylius E-commerce fournit un grand nombre de grilles prêtes à l'emploi, qu'il est possible de personnaliser pour répondre aux besoins de votre projet. Jusqu'à présent, cette personnalisation reposait principalement sur des surcharges de configuration YAML ou sur les Grid events. Ces approches fonctionnent toujours, mais elles atteignent…

JoliCode