46 liens privés
Pour préparer un message de commit à l'avance dans Git sans créer de commit immédiatement, vous pouvez utiliser un script qui met en scène du contenu et prépare un message de commit. Ce message sera automatiquement inséré dans l'éditeur lors du prochain commit sans nécessiter de paramètres supplémentaires ou de modifications de configuration.
La solution, qui semble non documentée, consiste à utiliser le fichier .git/MERGE_MSG
. En écrivant votre message de commit dans ce fichier, l'éditeur de commit s'ouvrira avec ce message déjà rempli.
Initialement, l'auteur avait suggéré d'utiliser .git/SQUASH_MSG
, mais .git/MERGE_MSG
est plus approprié. Cette méthode a été découverte en examinant le comportement de git cherry-pick --no-commit
, qui permet de comprendre comment Git gère ces fichiers. Cette approche reste utile pour identifier tout nouveau mécanisme si celui-ci venait à changer.
L'article explore les inconvénients du perfectionnisme et comment il peut affecter négativement la productivité, le bien-être et les relations. L'auteur distingue deux types de perfectionnisme : le perfectionnisme sain, qui vise l'amélioration tout en maintenant un équilibre émotionnel, et le perfectionnisme névrotique, qui pousse à des standards extrêmement élevés au détriment du bien-être personnel.
L'article identifie six problèmes cachés du perfectionnisme :
- Diminution de la productivité : Les perfectionnistes passent souvent trop de temps à perfectionner des détails mineurs, ce qui réduit leur efficacité globale.
- Procrastination : Le perfectionnisme peut conduire à repousser des tâches en attendant des conditions parfaites.
- Myopie : Une attention excessive aux détails peut faire perdre de vue l'objectif global.
- Stress constant : Les perfectionnistes s'imposent des standards élevés, ce qui entraîne un stress et une anxiété permanents.
- Estime de soi négative : Les perfectionnistes sont souvent leurs propres critiques les plus sévères, ce qui nuit à leur estime de soi.
- Relations tendues : Le perfectionnisme peut imposer des attentes irréalistes aux autres, nuisant aux relations personnelles.
L'auteur partage également son expérience personnelle avec le perfectionnisme et comment cela a affecté sa productivité, sa santé mentale et ses relations. Elle conclut en mentionnant qu'il est possible de gérer le perfectionnisme pour éviter ces inconvénients et mener une vie plus équilibrée et positive
.
L'article explique pourquoi il est préférable d'utiliser des objets de transfert de données (DTO) avec les formulaires Symfony plutôt que des entités. Bien que l'utilisation directe des entités dans les formulaires soit simple et efficace pour des opérations CRUD basiques, elle peut devenir complexe et problématique pour des cas d'utilisation plus avancés.
L'auteur illustre cela avec un exemple où un formulaire d'édition d'utilisateur doit gérer des champs d'adresse conditionnels. Utiliser directement les entités nécessite des ajustements complexes, comme des transformateurs de données, et peut mener à des états incohérents des entités.
En revanche, l'utilisation de DTOs permet de séparer clairement les données du formulaire de la logique métier, rendant le code plus maintenable et compréhensible. Les DTOs représentent exactement les données du formulaire, évitant ainsi de modifier les entités pour s'adapter aux besoins du formulaire.
Bien que cela nécessite un peu plus de code pour mapper les données entre les DTOs et les entités, cette approche est plus flexible et évite les inconvénients liés à l'utilisation directe des entités dans les formulaires
L'article explore cinq stratégies de déploiement populaires pour minimiser les risques et assurer une expérience utilisateur fluide lors de la mise en production de nouvelles fonctionnalités.
-
Blue/Green Deployment : Utilise deux environnements identiques pour permettre un retour en arrière instantané et garantir une disponibilité continue. Idéal pour les applications nécessitant un temps d'arrêt nul, comme la fintech ou la santé
-
Canary Deployment : Déploie progressivement les nouvelles versions à un petit groupe d'utilisateurs pour détecter les problèmes avant une mise en production complète. Adapté aux applications à grande échelle où les déploiements complets immédiats sont risqués
-
A/B Testing : Compare différentes variations d'une fonctionnalité pour déterminer laquelle performe le mieux. Utile pour les produits B2C axés sur l'optimisation du comportement utilisateur
-
Feature Flag Deployment : Permet de déployer du code sans l'activer immédiatement, facilitant les déploiements continus et les expérimentations. Convient aux équipes pratiquant la livraison continue
-
Rolling Deployment : Met à jour les instances progressivement, réduisant ainsi le temps d'arrêt. Adapté aux environnements conteneurisés et microservices
Le choix de la stratégie dépend de la tolérance au temps d'arrêt, de la taille de la base d'utilisateurs, de la complexité de l'infrastructure, des contraintes de coût et des besoins en expérimentation et analyse
L'article explique les principes et l'utilisation des JSON Web Tokens (JWT), une solution populaire pour l'authentification inter-domaines. Il aborde les problèmes de l'authentification traditionnelle basée sur les sessions, puis détaille le fonctionnement des JWT. Un JWT est composé de trois parties : l'en-tête (Header), la charge utile (Payload) et la signature (Signature). L'article explique comment ces composants sont générés et utilisés pour assurer une authentification sécurisée et sans état. Il mentionne également les avantages et les inconvénients des JWT, notamment leur capacité à réduire les requêtes serveur mais aussi les risques liés à la non-révocabilité des tokens avant leur expiration.
L'article propose un guide complet pour créer une barre de recherche conforme aux normes d'accessibilité RGAA. Il inclut des bonnes pratiques, des erreurs à éviter, et des exemples de code en HTML et React/MUI pour aider les développeurs à concevoir des interfaces utilisateur inclusives et fonctionnelles
.
L'article explique comment utiliser les fichiers .http pour tester des API et augmenter la couverture de code sans écrire de tests d'intégration complexes. Les fichiers .http sont des fichiers texte simples qui décrivent des requêtes HTTP et peuvent être exécutés directement depuis des IDE populaires comme IntelliJ, Visual Studio et VSCode, ou en ligne de commande.
L'auteur propose d'utiliser ces fichiers dans les pipelines CI/CD pour exécuter des tests d'API et collecter la couverture de code. Il mentionne l'outil httpyac pour exécuter les fichiers .http en ligne de commande et dotnet-coverage pour instrumenter les binaires et collecter la couverture de code sans framework de tests.
L'article fournit également des exemples de commandes pour exécuter ces outils et intégrer les tests dans des pipelines Azure DevOps et GitHub Actions
.
L'article explique comment automatiser le déploiement d'un site statique généré avec 11ty, hébergé sur GitHub, vers un serveur alwaysdata. Le processus inclut la configuration d'un webhook sur GitHub pour notifier alwaysdata des mises à jour, l'installation d'une bibliothèque de gestion de webhooks sur alwaysdata, et la création de scripts pour automatiser le déploiement. L'article détaille chaque étape, depuis la configuration initiale jusqu'à la gestion des éventuels problèmes, pour assurer un déploiement fluide et automatisé des mises à jour du site
.
L'article présente dix fonctions Python moins connues mais très utiles pour améliorer l'efficacité et la lisibilité du code. Voici un résumé des fonctions abordées :
- bisect : Permet de maintenir des listes triées et de trouver des points d'insertion efficacement.
- itertools.pairwise : Génère des paires consécutives dans une séquence, utile pour l'analyse des tendances.
- statistics.fmean : Calcule la moyenne plus rapidement et avec une meilleure précision que
mean()
. - itertools.takewhile : Traite les séquences jusqu'à ce qu'une condition ne soit plus remplie.
- operator.attrgetter : Simplifie l'extraction d'attributs d'objets, utile pour le tri.
- itertools.chain.from_iterable : Aplatit les structures imbriquées de manière efficace.
- functools.cache : Met en cache les résultats de fonctions pour accélérer les calculs répétitifs.
- contextlib.suppress : Permet de gérer les exceptions de manière plus propre sans code superflu.
- pathlib.Path.glob : Recherche des fichiers correspondant à un motif spécifique dans un répertoire.
- dataclasses.asdict : Convertit facilement des objets en dictionnaires pour une manipulation ou une sérialisation JSON simplifiée.
Ces fonctions permettent de simplifier des opérations complexes et d'améliorer la performance du code.
L'article explique comment contourner les restrictions de sécurité qui bloquent les ports autres que HTTP/HTTPS (80 et 443) en utilisant HAProxy pour encapsuler le trafic SSH dans du SSL. L'auteur propose deux méthodes : la première consiste à rediriger le trafic SSH vers le port 443, et la seconde à encapsuler ce trafic dans du SSL pour tromper les pare-feux intelligents. L'article inclut des configurations détaillées pour HAProxy et des conseils pour sécuriser l'accès SSH
.
L'article explique comment déployer un cluster Kubernetes en utilisant Proxmox, OpenTofu, et Talos Linux. Il décrit les étapes pour configurer l'environnement, créer des machines virtuelles, et appliquer les configurations nécessaires pour initialiser le cluster Kubernetes. L'article met en avant les avantages de Talos Linux, un système d'exploitation sécurisé et immuable conçu pour Kubernetes, et montre comment utiliser OpenTofu pour automatiser le processus de déploiement. Il inclut également des exemples de code et des conseils pratiques pour gérer le cluster une fois déployé.
L'auteur du blog a récemment migré son infrastructure personnelle, composée de quelques machines virtuelles gérées par Ansible, vers un cluster Kubernetes mono-nœud. Il explique que cette transition lui permet de gérer ses applications et leurs dépendances de manière entièrement déclarative, en utilisant des fichiers YAML dans un dépôt Git. Cette approche simplifie la mise à jour et la maintenance des applications, réduisant ainsi le temps et les efforts nécessaires pour gérer son infrastructure. Il mentionne également que Kubernetes offre une meilleure gestion des versions des runtimes et des dépendances, ce qui n'était pas toujours possible avec Ansible. Enfin, il souligne que cette migration a été un succès, lui permettant de gérer ses services de manière plus efficace et automatisée
L'auteur défend WordPress contre les critiques des développeurs. Il souligne que WordPress alimente 43,4% des sites web mondiaux et est utilisé par de grands acteurs comme la Maison Blanche et TechCrunch. L'article retrace l'histoire de WordPress, de ses débuts en 2003 à son évolution avec des fonctionnalités modernes comme l'éditeur Gutenberg. Il explique les composants clés de WordPress : thèmes, plugins, hooks, et modèle de données. L'article présente également des outils modernes comme Themosis, Bedrock, Sage, WP-CLI, et Timber, qui améliorent le développement WordPress. Enfin, il compare WordPress aux approches full-stack modernes, concluant que WordPress reste un choix pertinent pour de nombreux projets web
.
L'article présente Rector, un outil de refactoring automatique pour PHP qui modernise le code, applique les bonnes pratiques et standardise les conventions. Il explique comment configurer et utiliser Rector, en mettant en avant ses avantages en termes de gain de temps, de cohérence et d'apprentissage. L'auteur partage sa configuration personnelle et des conseils pratiques pour intégrer Rector dans les projets, tout en soulignant l'importance de prévenir les erreurs courantes
.
L'article présente PHP-CS-Fixer, un outil qui standardise le format du code PHP pour assurer la cohérence. Il explique comment configurer et utiliser PHP-CS-Fixer, en mettant en avant ses avantages pour la maintenance du code, les revues de code, et l'intégration de nouveaux développeurs. L'auteur partage des conseils pratiques et des exemples de configuration pour tirer le meilleur parti de cet outil
.
L'article explore des fonctionnalités avancées de Docker souvent méconnues mais puissantes pour améliorer les workflows DevOps et renforcer la sécurité des déploiements.
-
SBOM et l’analyse avec Trivy : Générez des inventaires de composants logiciels (SBOM) et analysez-les avec Trivy pour détecter les vulnérabilités dans vos images Docker.
-
Multi-architecture avec Docker et Buildx : Créez des images Docker compatibles avec plusieurs architectures (AMD, ARM, etc.) en une seule commande grâce à Docker Buildx.
-
Signature des images Docker avec Sigstore : Signez et vérifiez vos images Docker avec Sigstore et Cosign pour garantir leur intégrité et provenance.
-
OCI Registry et ORAS : Utilisez ORAS pour pousser et récupérer des artefacts OCI sur des registries, au-delà des images Docker, pour une gestion standardisée et sécurisée des artefacts.
Ces fonctionnalités montrent l'évolution de Docker vers une plateforme plus sécurisée et flexible, adaptée aux besoins des environnements DevOps modernes.
La "Clean Architecture" va bien au-delà d'une simple organisation de fichiers. Bien que souvent représentée par des couches comme Domain, Application, Infrastructure et UserInterface, son principe fondamental réside dans le sens des dépendances, qui doivent toujours pointer vers l'intérieur. Cela signifie que les règles métier (Domain) ne doivent pas dépendre des détails techniques (couches extérieures), permettant ainsi d'isoler la logique métier et de faciliter les tests et les évolutions du code. Cette approche, illustrée par les principes SOLID, favorise la flexibilité et la modularité, rendant le code plus résilient aux changements. Bien que l'arborescence des dossiers soit un outil pratique pour visualiser et organiser le code, l'essentiel est de se concentrer sur l'indépendance des couches métier vis-à-vis des dépendances techniques.
Les tests d'architecture sont essentiels pour maintenir la cohérence et la maintenabilité d'un projet sur le long terme. Ils permettent de vérifier que le code respecte les règles architecturales définies, assurant ainsi une structure correcte et empêchant les dérives lors de l'ajout de nouvelles fonctionnalités ou de l'intégration de nouveaux développeurs. Ces tests servent également de documentation explicite des règles, facilitant l'intégration des nouveaux membres de l'équipe. Plusieurs outils, comme Deptrac, PHPArkitect, PHPat, et Pest, peuvent être utilisés pour mettre en place ces tests dans l'écosystème PHP, chacun ayant ses propres méthodes de configuration et d'utilisation.
La navigation au clavier est un aspect crucial de la conception web accessible, permettant aux utilisateurs d'interagir avec un site uniquement via le clavier, en utilisant des raccourcis et en sélectionnant des éléments avec les touches Tab et Entrée. Cela rend le site plus accessible aux personnes ayant des troubles moteurs ou visuels, améliore l'efficacité pour tous les utilisateurs et peut éviter des complications légales liées à l'accessibilité. Pour rendre un site navigable au clavier, il est essentiel d'inclure des indicateurs de focus visibles, un ordre de tabulation logique, des liens de navigation rapide et des éléments interactifs accessibles via le clavier. Tester la navigabilité au clavier en utilisant uniquement le clavier permet de s'assurer que le site répond aux normes d'accessibilité.
Cet article explique comment configurer, gérer et optimiser les journaux Nginx pour améliorer le débogage, la surveillance et les performances des applications. Les journaux Nginx, essentiels pour diagnostiquer les problèmes, se trouvent par défaut dans /var/log/nginx/
sur la plupart des systèmes Linux. Le guide détaille comment localiser, personnaliser et organiser ces journaux, propose des formats de logs avancés pour le débogage, et offre des techniques pratiques d'analyse avec des outils comme grep
, awk
et GoAccess. Il aborde également la rotation des logs pour éviter la saturation des disques et résout des problèmes courants comme les logs non écrits ou les formats incorrects. Enfin, il présente des techniques avancées telles que le logging en JSON et l'envoi des logs à syslog pour des configurations plus complexes.