L’article met en lumière l’impact des attributs PHP 8 sur l’écosystème Symfony, remplaçant progressivement les annotations et le YAML pour une configuration plus moderne et unifiée (routes, sécurité, Doctrine, DTOs). Il souligne aussi des innovations comme les Property Hooks de PHP 8.4 avec Doctrine 3.4, qui simplifient la gestion des getters/setters, ainsi que l’introduction des Live Components et Twig Components, permettant une approche plus réactive et typée du front-end, sans JavaScript. Une évolution majeure pour les développeurs Symfony, vers plus de simplicité et de puissance.
Josh W. Comeau explique comment la fonction CSS linear() permet de créer des animations avancées (ressorts, rebonds, etc.) directement en CSS, sans dépendre de bibliothèques JavaScript. Contrairement aux courbes de Bézier traditionnelles, linear() utilise une série de points pour dessiner une courbe d'animation personnalisée, offrant ainsi plus de flexibilité. L'article présente des outils comme Linear() Easing Generator et EasingWizard pour générer automatiquement ces valeurs, optimisant ainsi la création d'animations fluides et naturelles. Cependant, cette approche a des limites : elle reste basée sur le temps (contrairement aux animations physiques réelles), peut mal gérer les interruptions, et nécessite beaucoup de points pour un rendu réaliste. Malgré cela, les tests montrent un impact minimal sur les performances. L'auteur recommande d'utiliser des variables CSS pour stocker les fonctions linear() et de prévoir des alternatives pour les navigateurs non compatibles. Une méthode efficace pour enrichir les animations CSS tout en respectant les préférences utilisateur (comme prefers-reduced-motion).
L’article explique comment déployer des applications PHP sans interruption de service en utilisant la méthode blue-green : deux environnements identiques (blue et green) sont maintenus, l’un actif, l’autre en standby. Le déploiement consiste à installer la nouvelle version sur l’environnement inactif, à vérifier son bon fonctionnement, puis à basculer le trafic de manière instantanée et réversible (via un lien symbolique, un load balancer ou Kubernetes). Les avantages incluent un temps d’arrêt quasi nul et un retour arrière rapide en cas de problème. Pour PHP, il est crucial de centraliser les sessions (Redis/Memcached), les uploads (dossier partagé ou S3), et de gérer l’Opcache et les migrations de base de données avec la méthode "expand/contract" pour éviter les ruptures. L’article propose des scripts prêts à l’emploi pour un serveur unique avec Nginx/PHP-FPM, un load balancer ou des conteneurs, ainsi qu’une checklist pour un déploiement sécurisé, incluant des vérifications de santé et la gestion des caches. Les pièges courants (sessions perdues, caches obsolètes, migrations bloquantes) et des outils comme Deployer ou GitHub Actions sont aussi abordés, soulignant que cette approche transforme les déploiements en opérations sans stress.
L’article explique comment FrankenPHP a rendu obsolètes les stacks traditionnelles à base de Nginx + PHP-FPM, en offrant une solution plus simple, performante et moderne pour exécuter des applications PHP. L’auteur détaille son passage à une architecture Docker intégrant FrankenPHP (basé sur le serveur web Caddy) et PostgreSQL, mettant en avant plusieurs avantages clés : une isolation complète des services, une parité parfaite entre développement et production, et une expérience développeur optimisée (hot reload, HTTPS local automatique, débogage facilité avec Xdebug). FrankenPHP se distingue par son mode "worker", qui maintient l’application PHP en mémoire, éliminant ainsi les temps de démarrage à chaque requête. Le billet décrit aussi l’utilisation de Docker multi-stage pour générer des images légères et sécurisées, et l’importance d’une configuration adaptée pour le développement (logs détaillés, désactivation du cache) comme pour la production (optimisation des performances). En résumé, FrankenPHP simplifie la stack technique tout en améliorant significativement les performances et la productivité. Une lecture utile pour les développeurs PHP souhaitant moderniser leur environnement.
Ahmad Shadeed explore dans cet article comment construire une mise en page de section moderne et dynamique en CSS, en s’appuyant sur des techniques avancées comme les container queries, le sélecteur :has(), la fonction clamp(), et les unités de requête de conteneur (cqw). Il propose une solution pour adapter automatiquement la disposition d’une section (en-tête + grille de cartes) selon le nombre d’éléments, en évitant les orphelins visuels et en optimisant l’espace. L’auteur détaille aussi l’utilisation de la typographie fluide, des layouts responsives pour les cartes, et des styles conditionnels (par exemple, si une image est absente). Des astuces comme display: contents pour intégrer l’en-tête dans la grille ou random() pour des bordures aléatoires (expérimental) sont également présentées. Une démonstration pratique et des exemples de code illustrent chaque concept, montrant comment le CSS moderne permet de créer des designs flexibles et adaptatifs sans JavaScript.
Ce site sert à documenter collaborativement les protocoles HTTP/3 et QUIC.
Ce billet explore le pattern Backend-for-Frontend (BFF), une solution architecturale pour les applications modernes où plusieurs frontends (web, mobile, TV) consomment les mêmes services backend. Le BFF agit comme une couche de traduction dédiée à chaque client, agrégeant les appels API, transformant les données et gérant la logique spécifique (cache, authentification, etc.), le tout possédé et maintenu par l’équipe frontend.
Les signes qu’un BFF pourrait être utile incluent des problèmes de performance (appels multiples, sur/sous-récupération de données), une lenteur de développement (dépendances entre équipes, duplication de logique) ou des frictions organisationnelles (API mal adaptées aux besoins UX). Le BFF permet d’aligner les priorités des équipes, d’améliorer les performances (notamment sur mobile) et d’accélérer la livraison de fonctionnalités.
Cependant, le BFF n’est pas une solution universelle : il ajoute de la complexité opérationnelle et peut être excessif pour des applications simples ou des petites équipes. Des alternatives existent (GraphQL, API Gateway, refonte backend). L’article souligne l’importance d’un pilote pour évaluer son impact avant une adoption large, et rappelle que le succès dépend d’une appropriation par les équipes frontend et d’une approche itérative.
Ce billet explique comment tirer pleinement parti du composant symfony/object-mapper, bien au-delà d'une simple hydratation d'objets à partir de tableaux. L'auteur montre que cet outil, basé sur le puissant Serializer de Symfony, permet de gérer des cas avancés comme la création de DTO immutables (avec promotion de propriétés dans le constructeur), la gestion de structures imbriquées et de collections, l'application de logiques personnalisées (ex : conversion de chaînes en DateTimeImmutable), et l'adaptation entre différentes conventions de nommage (snake_case ↔ camelCase). Grâce à des exemples concrets en Symfony 7.3, il démontre comment configurer et utiliser l'ObjectMapper pour des transformations de données élégantes et maintenables, tout en intégrant la validation et la gestion des erreurs. Un guide pratique pour optimiser la manipulation de données dans des applications PHP modernes.
Cet article explique comment utiliser GoAccess, un outil open-source d’analyse de logs web, pour surveiller le trafic de son serveur Apache/Nginx directement depuis le terminal ou via des rapports HTML. L’article détaille l’installation sur Ubuntu, la configuration du format des logs, les commandes de base pour analyser les logs (y compris en temps réel), et des astuces pour filtrer le trafic (exclure les bots, les pages admin, etc.). Il propose aussi des alias pour simplifier l’utilisation, des méthodes pour sécuriser les rapports générés, et des techniques avancées comme l’automatisation via des scripts et cron. L’outil est présenté comme une alternative légère, performante et respectueuse de la vie privée à Google Analytics, idéale pour les développeurs qui veulent garder le contrôle sur leurs données. En résumé : installation rapide, configuration flexible, et résultats complets (visiteurs, pages, OS, géolocalisation, etc.) sans dépendre d’un service externe.
L’article explique comment utiliser Robot Framework, un outil open source écrit en Python, pour automatiser les tests dans le domaine de l’embarqué. Ce framework, mature et flexible, permet de réaliser des tests d’intégration, de bout en bout et des mocks (simulations de devices, communications CAN, API, etc.), grâce à une syntaxe simple et de nombreuses bibliothèques (CAN, HTTP, MQTT, bases de données, etc.). Ses avantages incluent la génération de rapports HTML détaillés, l’export au format xUnit pour les CI/CD (GitLab, Jenkins), et une courbe d’apprentissage accessible même aux non-experts. Cependant, il peut devenir verbeux pour des scénarios complexes et dépend de Python, ce qui le rend plus lent que des tests unitaires natifs en C/C++.
L’article détaille la structure des fichiers .robot (sections Settings, Variables, Test Cases, Keywords), la syntaxe spécifique (variables, boucles, conditions), et présente des exemples concrets : tests de communications CAN avec des mocks Python, simulation d’API via Flask, et exécution de programmes C++ embarqués. Il montre aussi comment intégrer Robot Framework dans un workflow embarqué, en combinant bibliothèques Python, commandes CLI pour lancer les tests, et intégration avec des outils comme Jenkins ou GitLab CI. Un guide pratique pour qui souhaite industrialiser ses tests embarqués tout en gardant une approche haut niveau et maintenable.
L’article explique de manière claire et pédagogique ce que sont les modes musicaux et comment les utiliser pour colorer une composition. Un mode est une gamme dont on change le point de départ : à partir d’une gamme majeure (comme Do majeur), on obtient 7 modes en commençant par chacune de ses notes (ex. : Ré dorien, Mi phrygien, etc.). Les modes sont classés en majeurs (ionien, lydien, mixolydien) et mineurs (dorien, phrygien, aeolien, locrien), chacun ayant une « couleur » sonore distinctive. Par exemple, le lydien (4e mode) apporte une touche féerique grâce à sa quarte augmentée, tandis que le phrygien (3e mode) est sombre et souvent utilisé en métal. L’article détaille la construction de chaque mode, leurs notes caractéristiques et des exemples concrets (comme le thème de Yoda en lydien ou Wherever I May Roam de Metallica en phrygien). Une ressource idéale pour comprendre comment les modes enrichissent l’émotion et l’ambiance d’un morceau, avec des comparaisons visuelles et auditives pour faciliter l’apprentissage. Un PDF et une vidéo sont proposés en téléchargement pour approfondir.
Ce guide pratique détaille 5 étapes essentielles pour sécuriser un serveur Ubuntu : création d’un utilisateur dédié avec droits sudo, configuration de l’authentification SSH par clé (et désactivation de l’accès root et des mots de passe), verrouillage du compte root, personnalisation du hostname et du message d’accueil (MOTD). Il explique aussi comment désactiver les messages système indésirables et propose des bonnes pratiques supplémentaires comme l’utilisation d’un firewall (ufw), l’installation de fail2ban, et la surveillance des logs. L’objectif est de réduire les risques d’intrusion en adoptant une configuration robuste dès l’installation. Idéal pour les administrateurs système souhaitant renforcer la sécurité de base de leur serveur.
L’article de Stack Overflow souligne que le rôle d’un architecte logiciel ne se limite pas à écrire du code, mais consiste surtout à déployer des idées dans des systèmes humains : convaincre, aligner et faire collaborer des équipes aux perspectives variées. Pour cela, le principal outil de l’architecte n’est pas un langage de programmation, mais la rédaction de documents clairs et structurés.
Points clés :
- La documentation comme levier : Les architectes utilisent des documents (Confluence, Google Docs, Notion, etc.) pour formaliser des propositions, des designs techniques ou des analyses, et ainsi obtenir l’adhésion des parties prenantes.
- Principe de base : Privilégier la simplicité (bullet points, titres clairs) et l’utilité immédiate plutôt que la perfection formelle. Un document doit permettre à chacun de trouver rapidement l’information dont il a besoin.
- Types de documents impactants :
- Architecture overview : Schéma ou description des composants d’un système pour faciliter la compréhension et l’onboarding.
- Dev design : Détail des modifications prévues pour recueillir des feedbacks avant de coder.
- Project proposal : Argumentaire pour justifier l’allocation de ressources à un projet.
- Developer forecast : Alerte sur les risques potentiels d’une décision technique.
- Technology menu : Guide pour standardiser les choix technologiques.
- Problem statement : Cadre pour résoudre un problème complexe en équipe.
- Postmortem : Analyse blameless d’un incident pour éviter sa répétition.
Méthode recommandée :
- Organisation chronologique : Classer les documents par sprint/année plutôt que par thème, car la recherche textuelle est plus efficace que la navigation par dossiers.
- Culture de la documentation : Encourager l’écriture rapide et itérative, avec des relectures ciblées, plutôt que des mises à jour constantes.
- Objectif : Rendre les idées accessibles, actionnables et pérennes, même si le document devient obsolète.
En résumé, un architecte excelle moins par sa maîtrise technique que par sa capacité à structurer et communiquer des idées pour faire avancer les projets, en transformant les blocages humains en processus collaboratifs. Une compétence clé pour ceux qui veulent rester techniques tout en élargissant leur impact.
L’auteur partage son passage de BorgBackup à Restic pour ses sauvegardes personnelles sous Archlinux, séduit par sa simplicité, sa documentation claire et sa compatibilité avec SFTP. Il détaille une configuration minimaliste : sauvegardes incrémentales vers un serveur distant, planification via systemd (2x/jour en semaine), gestion des rétentions (3 mois de sauvegardes hebdomadaires), et montage des instantanés en local. Restic s’intègre même comme backend pour Déjà Dup (GNOME 49). Un outil efficace, moderne, et respectueux du principe 3-2-1.
L’article du blog Ippon explique comment personnaliser GitHub Copilot dans VS Code grâce aux custom instructions, afin d’adapter ses suggestions à vos conventions de code, frameworks et besoins spécifiques. Ces instructions, définies via des fichiers Markdown (comme .github/copilot-instructions.md), permettent de guider Copilot sur le style de code, les bibliothèques à utiliser, la structure des livrables, ou encore le niveau de détail des réponses. Trois types de règles existent : personnelles (globales), par dépôt (spécifiques à un projet), et organisationnelles (pour uniformiser les standards d’une équipe). L’article illustre l’impact de ces règles avec un exemple concret de widget Flutter, montrant comment Copilot génère un code plus aligné avec les attentes (design, localisation, gestion d’état) lorsqu’il est bien configuré. Il détaille aussi l’utilisation des prompt files pour des actions récurrentes et le mode Agent de Copilot, capable de modifier plusieurs fichiers ou d’exécuter des tâches complexes. Enfin, des bonnes pratiques et outils (comme la génération automatique de règles via VS Code) sont présentés pour optimiser l’intégration de Copilot dans un workflow, en évitant les contradictions et en maximisant la pertinence des suggestions. Une ressource utile pour transformer Copilot en un véritable partenaire de développement.
Ce guide pratique explique comment maîtriser les migrations de base de données avec Symfony 7 et Doctrine. Il couvre l'installation d'un projet Symfony, la création d'entités, la génération et l'application des migrations, ainsi que leur réversion. L'article détaille aussi la personnalisation des migrations (méthodes preUp, postUp, preDown, postDown, gestion des transactions, etc.), l'évolution des propriétés d'entités, et propose une solution pour éviter l'erreur récurrente de création du schéma public avec PostgreSQL. Un template personnalisé pour les migrations et un listener Doctrine sont présentés pour optimiser le workflow. Enfin, une cheatsheet récapitule les commandes utiles pour gérer les migrations efficacement. Idéal pour les développeurs souhaitant approfondir la gestion des schémas de base de données dans Symfony.
L’article explore les possibilités créatives offertes par la propriété CSS shape-outside, qui permet de faire épouser le flux de texte aux contours d’une image ou d’une forme personnalisée, au lieu de se limiter à un rectangle classique. L’auteur illustre son propos avec des exemples concrets, comme un site web pour une artiste de country fictive, Patty Meltt. Il montre comment utiliser shape-outside pour créer des mises en page dynamiques et immersives : text wrapping autour de portraits, d’instruments de musique, ou même de montages photo, en jouant avec les canaux alpha des images ou des clip-path. L’article détaille aussi des astuces pour simuler un centrage d’image ou contourner les limites des rotations CSS. L’objectif ? Rendre les longs contenus visuellement plus engageants et moins statiques, en intégrant images et texte dans une composition harmonieuse. Des exemples interactifs sont disponibles dans un lab en ligne pour expérimenter ces techniques. Une lecture inspirante pour les designers et développeurs web cherchant à ajouter du mouvement et de la personnalité à leurs layouts.
Cet article explique comment créer des décorateurs Python acceptant des arguments, en utilisant une structure à trois niveaux : une fonction externe pour les paramètres, une fonction intermédiaire pour le décorateur, et une fonction interne pour l'exécution. L'article illustre ce concept avec des exemples concrets comme un décorateur de logging configurable, un système de réessai, une validation de plage, et une limitation de débit. Il montre aussi comment gérer les arguments optionnels et comment implémenter des décorateurs sous forme de classes. L'idée clé est que les décorateurs avec arguments agissent comme des "fabriques de décorateurs", permettant une personnalisation fine du comportement des fonctions décorées. Une lecture utile pour maîtriser l'abstraction et la configuration avancée en Python.
Cet article explore en profondeur le Saga Pattern, une solution élégante pour gérer les transactions distribuées dans les architectures microservices en PHP. Il explique pourquoi les transactions ACID traditionnelles ne fonctionnent pas dans un contexte distribué et comment le Saga Pattern, basé sur des transactions compensatoires et une cohérence éventuelle, permet de contourner ces limites. L'article détaille deux approches d'implémentation (chorégraphie et orchestration), présente des exemples concrets de code, et aborde des défis avancés comme la gestion des timeouts, l'idempotence, les verrous sémantiques, ainsi que des modèles théoriques comme les sagas imbriquées ou parallèles. Une attention particulière est portée sur la persistance de l'état des sagas, la récupération après échec, et la surveillance pour assurer la fiabilité du système. Une lecture essentielle pour les développeurs PHP travaillant sur des systèmes distribués complexes.
Ce shaarli explique comment utiliser Podman comme un substitut à Docker, en permettant l'exécution des commandes Docker habituelles avec Podman. L'article détaille l'installation du paquet podman-docker, qui fournit un script docker émulant les commandes Docker, ainsi que la suppression du message d'avertissement via la création du fichier /etc/containers/nodocker. Il aborde aussi la compatibilité avec docker-compose grâce à l'installation de podman-compose, et présente deux solutions pour gérer le démarrage automatique des conteneurs (via Quadlet ou en activant le service podman-restart). L'objectif est de faciliter la transition pour les utilisateurs habitués à Docker, tout en profitant des avantages de Podman, notamment son absence de démon.