atlas des actus
    
Jérémy Decool
17  mars     23h00
Le principe d’Exponential Backoff
   La majorité des applications modernes sont amenées à communiquer avec des systèmes tiers, tels que des services Web, des bases de données, des systèmes de messageries ou de file d’attente, etc. Ces derniers peuvent rencontrer des pannes temporaires liées à des facteurs externes, perte de...
11  mars     23h00
Les tests automatisés à eux seuls ne garantissent pas le bon fonctionnement de vos applications
   Lorsque l’on commence à écrire des tests, nous avons souvent un sentiment de sécurité vis à vis du bon fonctionnement de nos applications. Une fonctionnalité a été conçue, une série de tests automatisés qu’ils soient unitaires, fonctionnels, d’intégrations, parfois même en parallèle de tests...
28  février     23h00
Des objets autovalidants avec le Self-Validating Object pattern
   J’ai déjà évoqué dans ce blog la notion de cohérence des données au sein d’un modèle orienté objet. Ce principe est connu sous le nom de Self Validating Object objet autovalidant . On le retrouve également sous le nom de Validated Domain Object ou Invariant Enforcing Object dans la littérature...
15  février     23h00
Tester les implémentations d’une interface avec le Behavioral Contract Testing
   Lorsque l’on doit écrire plusieurs implémentations d’une interface, il est crucial de veiller à ce qu’elles aient le même comportement. Par exemple, une interface PaymentProcessor permettant de s’interfacer avec plusieurs plateformes de paiements possède trois implémentations, il est important que...
11  février     23h00
Gérer des raccourcis clavier dans des projets Web
   Il peut parfois être utile d’ajouter des raccourcis clavier dans nos applications Web afin de simplifier ou d’accélérer l’accès à certaines fonctionnalités. Mettre en place une gestion des raccourcis dans son projet est très facile : cela ne nécessite que quelques lignes de code JavaScript. Il...
09  février     23h00
Le design pattern Unit of Work
   Le design pattern Unit of Work est au coeur de nombreux projets du fait qu’il s’agit d’un modèle utilisé par de nombreux ORM parmi lesquels on peut citer Hibernate pour Java, EntityFramework pour l’environnement Dotnet ou encore Doctrine pour PHP . Ce dernier a pour objectif de tenir à jour une...
02  février     23h00
Quelle différence entre le pattern CQS et CQRS ?
   Ces dernières années, on a entendu de plus en plus souvent parler du pattern CQRS pour Command Query Responsability Segration du fait sa démocratisation croissante. Mais on entend beaucoup moins parler du pattern CQS pour Command Query Separation . Et pour cause, les deux concepts sont souvent...
26  janvier     23h00
La notion de message en programmation
   Au début de l’informatique, le concept de message était assez large, désignant une transmission de données entre des objets appels de fonctions, système événementiel, etc. . De nos jours, un message se définit plutôt comme une communication émise dans un bus généralement asynchrone, mais pas...
24  janvier     23h00
Intégrer un moteur de recherche dans un site statique
   Un moteur de recherche est disponible depuis quelques mois sur la page des articles de ce blog. Ce dernier étant généré par Jekyll, un générateur de sites statiques, mettre en place un moteur de recherche sur un site non dynamique n’est pas chose aisée. Heureusement, il existe Lunr.js: une biblioth...
19  janvier     23h00
Les constructeurs nommés comme alternative aux constructeurs multiples en PHP
   En PHP et, contrairement à d’autre langage, il n’est pas possible d’avoir plusieurs constructeurs dans une classe. Pouvoir définir plusieurs constructeurs peut être intéressants dans de nombreux cas, comme par exemple, pouvoir construire un objet à partir de différents types de données. Si cela n...
12  janvier     23h00
Écrire une API idempotente (exemple en PHP avec Symfony)
   D’après la RFC qui spécifie la sémantique d’une requête HTTP, une requête est considérée comme idempotente si elle peut être effectuée plusieurs fois et obtenir un résultat identique lors de chaque appel. Par exemple, si l’on tente d’accéder à une ressource REST GET resource , deux appels ...
06  janvier     23h00
Copier une image Docker d’une registry à une autre
   J’ai récemment eu le besoin de copier plusieurs images d’une registry Docker à une autre. Bien que cette opération peut sembler simple au premier abord, il y a quelques points auxquels il faut prêter attention. La première solution à laquelle on pourrait penser serait de récupérer l’image sur...
05  novembre     23h00
Un environnement local Dockerisé en deux lignes de commande avec ddev
   Construire un environnement de développement en local peut être fastidieux. Si l’on souhaite un environnement natif, il faudra installer tout le nécessaire en local. L’utilisation de machines virtuelles est pratique, mais gourmand en ressources matérielles. L’alternative à tout cela c’est bien ...
27  octobre     23h00
Testez vos images Docker
   Vous construisez des images Docker régulièrement Vous savez alors certainement que ce n’est pas parce que la construction de votre image s’est réalisée sans erreurs que cette dernière va se comporter comme vous vous y attendez. La construction d’une image Docker, tout comme n’importe quel code ...
24  octobre     22h00
Le pattern Optional, le conteneur de valeur qui va remplacer vos données nullables
   Nous manipulons tous au quotidien des données nullables, or manipuler des données qui peuvent être null implique de devoir effectuer de nombreuses vérifications afin de savoir si la donnée que l’on manipule contient bien une valeur avant de l’utiliser. Auquel cas, nous aurons une erreur de type...
22  octobre     22h00
Installer des extensions PHP facilement dans une image Docker
   Si vous avez déjà construit des images Docker pour des applications ou projet PHP, vous avez certainement utilisé l’outil docker php ext install. Ce dernier permet d’installer et configurer simplement des extensions PHP qui seront disponibles dans le conteneur. Néanmoins, cet outil se limite...
11  septembre     22h00
Installer Cursor sur Ubuntu 24.04
   Je ne sais pas pour vous, mais s’il y a bien un outil orienté IA dont j’entends beaucoup parlé en ce moment c’est bien Cursor, un fork de Visual Studio Code dont la promesse est de vous faire développez plus avec grâce à l’intelligence artificielle tout en restant dans un environnement connu. Par...
03  septembre     22h00
Comment récupérer le nombre d’erreurs ignorées dans une analyse PHPStan
   Je travaille au quotidien avec PHPStan que ce soit pour mes projets personnels, mais également professionnels. Pour des projets complexes et ayant plusieurs années d’existence, il n’est pas rare d’ajouter des règles d’analyses graduellement afin d’éviter un trop grand nombre d’erreurs à corriger ...
28  juillet     22h00
Tester un bundle avec plusieurs versions de Symfony
   Lorsque l’on travaille et maintient un bundle Symfony, il n’est pas rare de devoir gérer la compatibilité de ce dernier avec plusieurs versions du framework. Par exemple, au moment ou je publie ces lignes, les versions . , . et . sont officiellement maintenues. Exécuter sa batterie de tests...
01  juillet     22h00
Le principe de verrouillage optimiste (optimistic locking) avec Doctrine ORM
   Lorsque l’on travaille sur une application manipulant une base de données, il est possible de se retrouver dans un cas ou une donnée va être modifiée par deux requêtes concurrentes. Cela peut être problématique, car cela peut entraîner des incohérences dans les données d’un système. Prenons l...
26  mai     22h00
Quelle différence entre DateTime et DateTimeImmutable en PHP ?
   Il existe en PHP deux classes pour gérer et manipuler nativement les dates: DateTime et DateTimeImmutable. Je me rends compte que de nombreux développeurs ne maitrisent pas la différence entre les deux notions. Ce billet est l’occasion de voir pourquoi et dans quel cas utiliser l’un ou l’autre. ...
12  mai     22h00
Gérer les décisions d’architectures dans les projets
   On me demande régulièrement comment sont gérées les décisions et le suivi d’architectures que l’on est amené à prendre dans les projets sur lesquels j’interviens. Dans la plupart des cas, cela va se dérouler en deux phases: la communication et le suivi. La première étape que j’ai nommée la...
05  mai     22h00
Retrouvez ma veille sur Maston Bluesky
   Cela fait maintenant plusieurs années que je partage presque quotidiennement ma veille sur X Twitter . Du lundi au vendredi, généralement entre h et h, je diffuse jusqu’à publications sur le thème de développement et de l’informatique. Malheureusement, ces derniers temps, l’écosystème...
04  mai     22h00
Non, vous ne faites pas de la programmation objet
   Si vous posez la question à n’importe quel développeur, il vous répondra très certainement que oui, il fait bien de la programmation orientée objet. Effectivement, les langages de développement les plus utilisés actuellement tels que Python, C, Java, C , JavaScript, PHP ou encore Ruby permettent...
21  mars     23h00
Concentrez-vous sur les principes, pas la technologie
   Au détour d’une discussion sur les monolithes modulaires avec un collègue développeur ce matin, je lui explique être en train de regarder une formation en ligne intitulée Modular Monoliths in .NET . Il me demande alors: Pourquoi regarder une formation orientée .NET Alors qu’au quotidien, tu...
13  mars     23h00
Ne faites pas confiance aux données de vos utilisateurs
   S’il y a bien un proverbe que j’entends depuis que j’ai démarré l’informatique, c’est bien never trust user input ne faites pas confiance aux données de vos utilisateurs . L’idée est simple: lorsque vous attendez des données utilisateurs en entrée d’un traitement, il est nécessaire au préalable...
15  février     23h00
IA: ne ratez pas la révolution qui est en marche
   Hier soir jeudi février , j’ai eu la chance de pouvoir participer à la soirée de lancement de livre Hyperprompt, le premier manuel français de prompt engineering écrit par Flavien CHERVET auteur d’ouvrage et conférencier sur la thématique de l’intelligence artificielle . Durant cette...
05  février     23h00
Sauvegarder sa base de données MySQL sans perturber sa production
   Dans la majorité des cas, pour sauvegarder une base de données MySQL, c’est la commande mysqldump, l’outil fourni par le SGBD, qui va être utilisé. Mais saviez vous que cela n’est pas sans risque et que cette opération peut perturber les opérations en cours sur votre base de données J’ai pu le...
27  janvier     23h00
Installer et utiliser un LLM en local
   S’il y a bien un sujet tendance ces dernières années surtout depuis l’arrivée de Chat GPT , c’est les Large Language Model souvent appelé LLM . Personnellement, je n’échappe pas à ce mouvement . J’utilise Github Copilot au quotidien et Chat GPT régulièrement qui a remplacé à la fois Google...
19  octobre     22h00
Bouchon (mock) et implémentation mémoire dans les tests
   Un projet sur lequel je travaille actuellement utilise dans ses tests des bouchons ou mock en anglais , mais également des implémentations mémoires de service travaillant avec des objets. Aussi, on m’a demandé l’intérêt d’utiliser l’un ou l’autre et je trouvais le sujet assez intéressant pour en ...
08  octobre     22h00
Utiliser PHPUnit 10 avec Symfony
   Au moment ou j’écris ce billet, PHPUnit a été publié il y a près de mois le février . Et pourtant si on tente de l’utiliser dans un projet Symfony utilisant le bridge symfony phpunit bridge, nous obtenons l’erreur suivante: PHP Fatal error: Uncaught Error: Class PHPUnit TextUI Command...
27  juillet     22h00
Les interactions: la clé de la réussite d’un développement logiciel
   Au plus j’avance dans ma carrière et au plus je m’intéresse aux interactions entre individus. Je me rends compte au fil de mes expériences que la partie technique et produit ne sont qu’une partie de la clé de la réussite d’un logiciel. On peut avoir les meilleurs Product Owner, les meilleurs d...
18  janvier     23h00
Rendez-vous le 12 mai 2023 à l’AFUP Day
   L’AFUP Association Française des Utilisateurs de PHP vient de l’annoncer sur son blog cache , Twitter amp; Mastodon: La communauté PHP lyonnaise est en ébullition à l’idée du retour de l’AFUP Day dans sa ville. L’AFUP Day Lyon est SOLD OUT, mois avant l’événement Un peu plus de...
07  janvier     23h00
De l’utilité des réunions
   La tendance qui n’est pas nouvelle, je l’entends depuis plusieurs années maintenant est à la limitation des réunions. Dernier exemple en date, Shopify qui envisage de supprimer toutes les réunions récurrentes de plus de deux personnes. J’ai vraiment l’impression qu’il s’agit là d’une tendance...
02  janvier     23h00
A propos de la couverture de code
   Lorsque l’on met en place des tests sur un projet et que l’on souhaite commencer à avoir des indicateurs sur ces derniers, c’est naturellement que l’on se tourne sur le taux de couverture de code alias le code coverage en anglais . Pourtant, dans absolument toutes mes expériences professionnelles...
05  décembre     23h00
Retrouvez les utilisateurs Twitter sur Mastodon
   Comme je l’ai annoncé il y a peu de temps, je suis maintenant présent sur Mastodon. Comme sur Twitter, j’y partage ma veille, mes réflexions ainsi que mes différentes trouvailles. Mais il s’agit également d’une source de veille. Migrer vers un nouveau réseau social n’est pas aisé, encore plus...
13  novembre     23h00
Retrouvez-moi sur Mastodon
   Depuis son rachat par Elon Musk, Twitter est un peu dans la tourmente: licenciement en masse, de nombreux départ volontaire des employés et des utilisateurs effrayés qui fuient vers des réseaux alternatifs. Il n’y a pas de doute, Twitter est dans une très mauvaise période. Je ne suis pour le...
15  septembre     22h00
Quelle est la définition d’une équipe ?
   Aujourd’hui, en consultant LinkedIn, j’ai eu l’occasion de voir passer une infographie de Catherine TESTA proposant une définition que je trouve très juste d’une équipe. Je vous laisse apprécier.
13  septembre     22h00
Corriger un fichier UTF-8 mal encodé
   J’ai une application qui me génère pour une raison que j’ignore des fichiers UTF qui contiennent des caractères mal encodés. Si ce n’est visuellement pas dérangeant, certaines applications plantent à l’ouverture du fichier à cause de cela. S’il vous arrive la même chose et que vous êtes sous...
25  février     23h00
Le pattern Parameter Object
   Après avoir publié mon billet concernant le pattern Commande hier, on m’a demandé s’il était possible d’utiliser une commande pour remplacer un groupe de paramètre d’une fonction ou d’une méthode avec pour objectif de simplifier le code et sa lisibilité sans pour autant mettre en place un bus de...
24  février     23h00
Le pattern Commande
   Si je reprends la définition de wikipedia, il s’agit d’un patron de conception ou design pattern en anglais qui permet d’encapsuler la notion d’invocation. C’est un moyen très utile de rendre votre code modulaire et lisible en découpant votre code en différentes commandes, chacune ayant des...
14  novembre     23h00
Gestion des identités et Domain Driven Design
   Maîtriser la gestion des identités de nos entités dans une application dont la conception est pilotée par le domaine Domain Driven Design est un enjeu majeur. Cela permet notamment d’être découplé de son système de gestion de base de données et d’avoir une maîtrise totale de la gestion des donn...
13  novembre     23h00
Quand utiliser des interfaces?
   J’ai récemment découvert le concept de Interface based programming également appelé Interface based architecture . Il s’agit d’un modèle d’architecture reposant sur des interfaces plutôt que des implémentations. J’ai notamment eu l’occasion d’expérimenter cette technique de manière dogmatique ou...
22  septembre     22h00
Lire du code est une compétence
   A ce sujet, je vous recommande la lecture de l’article de Trisha GEE ou elle explique bien le sujet et d’ou je tire le titre de ce billet. Ecrire du code lisible et ou facilement compréhensible est compliqué à juste titre, car c’est avant tout quelque chose d’extrêmement subjectif. Nous avons...
03  mars     23h00
Ne soyez pas passif, créez
   Hier, je vous incitais à vous lancer et à passer l’action. Si l’on y réfléchit, cela va de pair avec le fait d’arrêter d’être passif au quotidien et de passer à l’action. C’est aussi cette idée que m’a inspiré l’article Less Twitter, more building. Je me retrouve un peu dans ce dernier, j’ai r...
02  mars     23h00
Lancez-vous
   Je viens de lire Just Start de Guy TORBET, un étudiant de ans qui explique que peu importe ce que l’on souhaite faire et peu importe le moment ou l’on a l’idée de faire quelque chose, ce n’est jamais le bon moment de se lancer. On est trop jeune, on n’a pas assez d’expérience, on a une famille ...
18  octobre     22h00
Modéliser une relation plusieurs à plusieurs (n:n) dans un agrégat
   J’ai publié hier un article sur la notion d’agrégat, si le principe peut paraître relativement simple, il peut soulever quelques questions comme par exemple, comment modéliser une relation type n:n plusieurs à plusieurs . Prenons un exemple que je suis amené à manipuler régulièrement: le cas de...
17  octobre     22h00
La notion d’agrégat en DDD
   La notion d’agrégat est un principe essentiel de la conception pilotée par le domaine Domain Driven Design . L’agrégat désigne un groupe d’objets du domaine qui doit être manipulé comme une seule unité métier et dont les relations enfants ne peuvent être utilisées de manière indépendante. Prenons...
06  juillet     22h00
Utiliser MinIO comme stockage de données objets en PHP
   Je travaille sur un projet ou il est question de stocker un grand nombre de fichiers. Ce dernier devrait être hébergé dans le Cloud et notamment sur des infrastructures orientées Serverless. Il est donc impensable d’utiliser un système de fichiers classique pour stocker des fichiers. Je me suis...
31  mai     22h00
Définition du rôle de Tech Lead
   Je me suis déjà exprimé plusieurs fois sur le rôle de lead dev. Je découvre aujourd’hui la définition de Patrick KUA si vous ne le connaissez pas, je vous recommande vivement de vous intéresser à son blog sur le sujet. Si ce n’est pas déjà fait, je vous recommande vivement la lecture du...