Je copie colle ^^
Sous le coude : la commande à utiliser quand la clé ssh d'un host a changé.
ssh-keygen -R 
L’article explique comment résoudre un conflit de noms de groupes de volumes LVM (VG Name) sous Ubuntu, lorsque deux installations (une sur SSD interne, une sur SSD externe) utilisent le même nom par défaut (ubuntu-vg). Après avoir branché le SSD externe, l’auteur constate que la partition principale ne monte pas à cause de ce conflit. La solution consiste à identifier les volumes avec sudo vgdisplay, puis à renommer l’ancien groupe de volumes à l’aide de son UUID via la commande sudo vgrename <UUID> <nouveau_nom> (exemple : sudo vgrename Kr38B5-Jt8d-3s42-0TLH-l3fe-av3a-C8a1Xt oldSSD). Une fois renommé, le volume peut être monté et accessible normalement après saisie de la phrase de passe de déchiffrement.
L’article explique comment automatiser la découverte et l’enregistrement des commandes console dans une application PHP utilisant le framework Power Modules et Symfony Console. L’auteur part du constat que la registration manuelle des commandes (via une boucle sur les modules et leurs composants exportés) est répétitive et peu élégante. Il propose une solution basée sur un PowerModuleSetup dédié, qui s’intègre au cycle de vie des modules pour collecter et enregistrer automatiquement les commandes, en s’appuyant sur le conteneur de dépendances de Symfony. La solution évolue vers une approche optimisée avec un ContainerCommandLoader, permettant un chargement paresseux des commandes. Le résultat est un code plus modulaire, réutilisable et sans duplication, idéal pour les architectures basées sur Power Modules. Le package est disponible via Composer : power-modules/console. 
L’article relate l’installation laborieuse de Linux Mint sur un Acer Swift 1 SF114-31-P68BW, une opération qui a pris bien plus de temps que prévu (plus de deux heures au lieu de 25 minutes). Le premier obstacle a été l’impossibilité de désactiver le Secure Boot dans le BIOS, résolue en définissant un mot de passe BIOS. Ensuite, après une installation apparemment réussie, le PC affichait « No Bootable Device » au redémarrage. La solution a consisté à ajouter manuellement le fichier shimx64.efi comme fichier UEFI de confiance dans le BIOS, puis à reconfigurer l’ordre de démarrage pour placer Linux Mint en première position. L’auteur critique la complexité imposée par Acer pour une simple installation d’un autre système d’exploitation, malgré la documentation officielle, et espère que son retour d’expérience aidera d’autres utilisateurs confrontés au même problème. Un témoignage utile pour ceux qui souhaitent passer à Linux sur ce modèle !
Cet article explique comment générer des "captures d’écran" au format SVG d’éléments HTML, notamment pour les réutiliser dans des fichiers HTML, EPUB ou PDF. L’auteur présente deux bibliothèques JavaScript permettant de convertir du HTML en SVG, avec une préférence pour html-to-svg. Il détaille une méthode pour créer une page web contenant plusieurs démonstrations de mises en page CSS, chacune convertie en SVG via un script. Chaque section peut être affichée ou téléchargée sous forme d’image SVG, avec un nom de fichier dérivé de l’ID de la section. L’astuce repose sur l’utilisation de Blob et de URL.createObjectURL pour générer un lien de téléchargement fonctionnel. Une solution pratique pour intégrer des visuels dynamiques et scalables dans divers formats de documents. 
Ce billet explique comment résoudre en DNS les noms de conteneurs Docker sous le domaine local .docker en utilisant systemd-resolved plutôt que dnsmasq, une solution plus simple et performante depuis systemd 258. L’auteur utilise toujours dnsdock pour gérer la résolution DNS, mais délègue désormais la zone .docker à ce service via un fichier de configuration /etc/systemd/dns-delegate.d/docker.dns-delegate. Après avoir lancé dnsdock et configuré resolved, il devient possible de résoudre les noms des conteneurs (basés sur leur nom, alias ou étiquettes) directement depuis la machine hôte, facilitant ainsi la gestion de plusieurs services comme PostgreSQL sans conflit de ports. Une mise à jour pratique pour les utilisateurs de Docker et systemd.
Dans son article, Josh W. Comeau explore les défis et solutions pour créer des effets de décalage de couleurs dynamiques en CSS, notamment pour des animations de particules. Il explique d’abord comment générer des couleurs aléatoires en HSL pour une cohérence visuelle, mais souligne une limitation majeure : les navigateurs interpolent les couleurs en RGB, ce qui produit des teintes grisées et peu naturelles lors des transitions entre deux couleurs HSL. Par exemple, une transition entre rouge et turquoise passe par du gris, car les canaux RGB convergent vers des valeurs similaires. Pour contourner ce problème, il propose d’utiliser la propriété CSS filter: hue-rotate(), qui permet de faire tourner la teinte de manière fluide et naturelle autour de la roue chromatique, sans perte de saturation. Il partage aussi des astuces pour ajouter des effets de scintillement aléatoires aux particules, améliorant ainsi le réalisme de l’animation. 
Pour intercepter le trafic réseau d’une application Android, deux approches principales existent : l’inspection via Android Studio (réservée aux apps en développement) et l’utilisation d’un proxy HTTPS (comme Proxyman) pour les apps tierces. En développement, Android Studio exploite le flag android:debuggable="true" et le protocole JDWP pour rediriger les flux réseau via ADB, permettant d’analyser les requêtes HTTP(S) sans déchiffrement direct, mais en interceptant les objets mémoire des bibliothèques comme OkHttp. Pour les apps en production, non debuggables, la solution passe par un proxy HTTPS (ex : Proxyman) : il faut rediriger le trafic de l’émulateur/device vers le proxy, installer son certificat root dans le magasin système (nécessitant souvent un accès root ou un émulateur non-production), puis activer le déchiffrement HTTPS pour les domaines cibles. Cette méthode contourne les restrictions d’Android 7+ sur les certificats utilisateur, mais exige des manipulations avancées (injection de certificats via adb, configuration de SELinux, etc.). L’article détaille aussi le rôle clé de Zygote dans l’initialisation des apps et propose des scripts pour automatiser l’installation des certificats. Une alternative comme Frida est évoquée pour des cas plus complexes.
Pour optimiser les Dev Containers, l’auteur propose une approche basée sur les prebuilds : créer une image Docker générique (avec Zsh, Oh My Zsh, Docker-in-Docker, etc.) et la réutiliser comme base pour tous ses projets. Cela évite de reconstruire l’environnement à chaque fois et réduit le temps de démarrage. Il utilise aussi des volumes Docker pour persister l’historique des commandes et les dépendances Maven entre les conteneurs. Grâce à la CLI des Dev Containers, il construit et pousse ces images pré-configurées, puis les utilise directement dans ses projets (ex. : Java avec Maven, JBang, Quarkus). Résultat : des environnements prêts en quelques secondes, même si la taille des images reste conséquente. Une méthode idéale pour gagner en efficacité, surtout lors des changements de machine ou pour standardiser ses outils de dev.
Un analyste confronté à une requête lente sur une table de 150 millions de transactions (2 minutes d’exécution, parfois des timeouts) a optimisé son code en utilisant une CTE (Common Table Expression) avec WITH. Au lieu de joindre d’abord les tables puis de filtrer, la CTE filtre d’abord les transactions récentes (20M de lignes au lieu de 150M), réduisant le temps d’exécution de 127 à 11 secondes. En allant plus loin et en agrégeant directement dans la CTE, il a même descendu ce temps à moins de 6 secondes. La clé ? Filtrer tôt pour alléger la charge de jointure, clarifier la logique, et exploiter les optimisations des moteurs modernes (PostgreSQL 12+, BigQuery). Attention toutefois : les performances varient selon le SGBD (risque de matérialisation en tables temporaires sous MySQL ancien). Une leçon simple : une requête bien structurée = des gains de performance majeurs.
L'auteur présente 3 techniques pour déclencher un téléchargement de fichier :
- un attribut introduit en HTML5
- la simulation d'un clic en JavaScript, par exemple suite à une action utilisateur
- dans le cas du téléchargement de données générées dynamiquement, les transformer en Blob et utiliser la méthode précédente
L’article met en lumière un piège courant en JavaScript : l’utilisation de Array.includes dans une boucle (comme source.some(item => target.includes(item))) peut devenir extrêmement coûteuse en performance avec des tableaux volumineux, car la complexité algorithmique passe à *O(nm). Par exemple, avec des tableaux de 60 000 éléments, l’exécution peut prendre plusieurs secondes. La solution consiste à utiliser des structures de données optimisées pour des recherches en temps constant, comme un objet, une Map, ou mieux, un Set (new Set(target)), réduisant la complexité à O(n + m)** et rendant le code quasi instantané même pour de très grands jeux de données. Une astuce simple, mais cruciale pour éviter des goulots d’étranglement inattendus dans le code JavaScript.
L'article d'Alex Wlchan explique une méthode plus rapide pour copier des bases de données SQLite entre ordinateurs. En utilisant la commande .dump de SQLite, on peut convertir la base de données en un fichier texte contenant des instructions SQL, ce qui réduit considérablement la taille du fichier. Ce fichier texte, qui peut être encore compressé avec gzip, est plus rapide à transférer. Une fois copié, le fichier texte peut être utilisé pour reconstruire la base de données locale. Cette approche évite les problèmes de corruption lors de la copie de gros fichiers et améliore l'efficacité des transferts, surtout pour les bases de données volumineuses.
L'article explore comment le Playwright MCP (Model Context Protocol) en mode Agent peut naviguer de manière autonome dans une application, découvrir des fonctionnalités clés et générer des tests exécutables sans script manuel. À travers une démonstration en direct sur une application de films, l'auteur montre comment le MCP peut découvrir des cas limites, construire une couverture de test et même révéler des bugs non détectés manuellement. L'agent explore l'application, interagit avec elle comme un utilisateur réel, et génère automatiquement des tests basés sur ces interactions, offrant ainsi une approche puissante d'assistance par IA pour le développement et les tests.
L'article décrit une méthode pour démarrer Symfony Messenger à la demande afin de réduire les coûts inutiles sur AWS pour un projet nécessitant l'importation et le traitement occasionnel de grands fichiers Excel. L'auteur configure Symfony Messenger pour utiliser une file d'attente Doctrine et crée un message personnalisé, ProcessImportMessage, qui est envoyé via un bus de messages chaque fois qu'un fichier est téléversé. Un service, MessengerConsumer, est utilisé pour démarrer le consommateur de messages uniquement lorsque nécessaire, avec une limite de temps pour s'arrêter automatiquement. Le message est ensuite traité par un gestionnaire qui importe les données et gère les erreurs, offrant ainsi une solution efficace et économique pour les traitements peu fréquents.
L'article aborde un problème courant mais critique dans les projets Symfony utilisant Doctrine et le Symfony Serializer. L'auteur décrit une expérience de débogage où une erreur de mémoire épuisée a été causée par l'utilisation négligente du serializer par défaut de Symfony, qui utilise les métadonnées de Doctrine, entraînant une consommation excessive de mémoire. Le problème est survenu lors de la sérialisation de grandes quantités de données dans une entité contenant de grands champs JSON. La solution proposée consiste à créer un adaptateur de serializer léger qui évite complètement les métadonnées de Doctrine. L'article souligne l'importance d'utiliser des serializers adaptés pour les données internes de débogage ou de sauvegarde et met en garde contre l'utilisation du serializer par défaut pour les entités avec de grandes ou des données imbriquées, afin de rester en contrôle de l'utilisation de la mémoire.
L'article explore les défis et solutions liés à l'utilisation de paramètres avec les écouteurs d'événements en JavaScript. L'auteur souligne l'importance de gérer correctement ces écouteurs pour éviter les fuites de mémoire et les problèmes de performance. L'article aborde des erreurs courantes, comme l'appel immédiat de fonctions lors de l'ajout d'écouteurs, et propose des solutions utilisant des fonctions fléchées, des fermetures et l'API AbortController pour une gestion efficace des paramètres et la suppression des écouteurs.
Je repartage ça, ça peut être utile ^^
Apache, suite à une mise à jour, est plus strict sur les vérifications SSL. Ça a eu un impact sur les serveurs Plesk qui utilisent nginx en tant que proxy. Voici la commande à exécuter en tant que root
echo -e "proxy_ssl_server_name on;\nproxy_ssl_name \$host;" > /etc/nginx/conf.d/fixssl.conf && service nginx restart
Si le composant Lock de Symfony pose quelques problèmes dans les tests unitaires, on peut essayer de configurer env.test ainsi : soit LOCK_DSN=null soit LOCK_DSN=in-memory
 
