Hebdomadaire Shaarli
Semaine 17 (April 21, 2025)
L'article explique comment exporter des PDFs prêts à l'impression à partir d'une application Symfony de manière simple et rapide. L'auteur guide le lecteur à travers l'installation de wkhtmltopdf
et du SnappyBundle
, la création de modèles PDF avec HTML et CSS, et la personnalisation du contrôleur Symfony pour générer des PDFs. Le processus permet d'exporter des pages ou des tableaux en PDF, avec des options pour ajuster la mise en page et le style, rendant la génération de PDFs flexible et intégrée à l'application Symfony
.
L'article explique comment étendre les fonctionnalités de Talos, un système d'exploitation minimaliste dédié au déploiement de nœuds Kubernetes. Bien que Talos soit léger, il est conçu pour être extensible via des extensions, permettant d'ajouter des outils ou des fonctionnalités non disponibles par défaut. L'auteur détaille les méthodes pour installer des extensions, soit via une image personnalisée de Talos, soit en spécifiant une image OCI contenant l'extension. Il illustre le processus avec un exemple concret d'installation de l'agent qemu-guest-agent
sur des nœuds Talos, en utilisant Proxmox pour l'hébergement. L'article aborde également la création et la gestion des extensions, ainsi que l'injection de configurations spécifiques pour des besoins particuliers
.
L'article explore comment rendre les sorties des modèles de langage (LLMs) utilisables par des algorithmes de traitement pour en tirer parti de manière automatique et industrielle. Il aborde les limites du prompt engineering classique et introduit la notion de grammaires formelles pour forcer les LLMs à générer des sorties structurées, comme du JSON, afin de garantir la cohérence et la validité des données extraites. L'article illustre ces concepts à travers un cas d'usage concret : l'analyse automatisée de CVs pour extraire des compétences spécifiques, en utilisant des outils comme Pydantic pour définir des schémas de données stricts
.
Le tutoriel explique comment utiliser PolKit sur Linux pour permettre à un utilisateur standard d'effectuer des tâches administratives sans avoir les privilèges root. PolKit permet de définir des règles spécifiques pour autoriser des actions comme la configuration réseau ou l'installation de mises à jour, sans compromettre la sécurité du système. Le processus implique la modification de fichiers d'actions et de règles pour déléguer ces droits de manière contrôlée. Cela optimise le temps de l'administrateur en limitant les interventions manuelles pour des tâches routinières
.
L'article explique comment compresser et réduire la taille d'un fichier PDF volumineux en utilisant Ghostscript, un outil en ligne de commande. Après avoir essayé des logiciels basiques comme PDFSam sans succès, l'auteur découvre Ghostscript, qui permet une compression avancée des fichiers PDF. Il détaille l'installation de Ghostscript sur différentes distributions Linux et fournit une commande spécifique pour compresser un PDF, en ajustant la résolution des images et en supprimant les données superflues. Grâce à cette méthode, il parvient à réduire considérablement la taille de son fichier PDF, passant de 57,8 Mo à 26,6 Mo, tout en conservant une qualité visuelle suffisante pour une lecture à l'écran ou une impression basique
.
L'article explore en profondeur la technologie WebRTC, une norme permettant la communication en temps réel via des navigateurs web. Il détaille l'histoire et les principes de WebRTC, notamment son utilisation de protocoles comme UDP pour des connexions à faible latence, et son intégration de codecs vidéo libres comme VP8 et VP9. L'article explique également les défis techniques, tels que l'établissement de connexions pair-à-pair via ICE, STUN et TURN, et les différentes architectures de serveurs (SFU et MCU) pour gérer les flux multimédias. Il aborde aussi les perspectives futures, comme l'intégration de SVC et de RED pour améliorer la qualité et la fiabilité des communications. En somme, l'article offre une vue d'ensemble technique et pratique de WebRTC, soulignant son importance dans les communications modernes sur le web
.
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 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 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 présente une stratégie Docker éprouvée pour déployer des applications Symfony avec Apache, MySQL et OpenSearch. L'auteur partage son setup personnel utilisant un Dockerfile
et docker-compose
, optimisé pour la production et incluant des ajustements spécifiques à Symfony. L'article met en avant les avantages de Docker pour PHP, notamment la définition de l'infrastructure en tant que code, éliminant ainsi les problèmes de reproductibilité des bugs entre différents environnements
.
L'article présente Anubis, une solution élégante pour contrer les bots qui parcourent le web et surchargent les sites en récupérant des données pour l'entraînement des IA. Anubis fonctionne comme un reverse proxy, utilisant JavaScript pour imposer une preuve de travail aux visiteurs, bloquant ainsi efficacement les bots qui ne gèrent pas JavaScript ou qui sont détectés comme tels. Cette méthode permet de protéger les sites web contre la surconsommation de ressources et est déjà adoptée par plusieurs grandes organisations. L'auteur a implémenté Anubis pour protéger son instance publique de SearXNG, réduisant ainsi la charge CPU et le trafic réseau causés par les bots
.
L'article explique comment configurer des tests de régression visuelle automatisés en utilisant Playwright. L'auteur décrit comment il a utilisé Playwright pour capturer des captures d'écran avant et après des modifications sur une page web, puis comparer les résultats pour détecter des changements non intentionnels. Il partage son expérience en détaillant la configuration, la génération de tests dynamiques et les ajustements nécessaires pour gérer les cas particuliers. L'article met en avant la puissance de Playwright pour automatiser les tests visuels, tout en soulignant les défis liés à la stabilité et à la fiabilité des tests.
L'article explique comment créer un système de téléchargement d'images fonctionnant hors ligne en utilisant les technologies des Progressive Web Apps (PWA) telles qu'IndexedDB, les service workers et l'API Background Sync. Ce système permet de mettre en file d'attente les téléchargements d'images et de les retenter automatiquement lorsque la connexion Internet est rétablie, offrant ainsi une expérience utilisateur fluide même en cas de connectivité réseau instable
.
L'article explique comment créer une autorité de certification (CA) interne et des certificats clients en utilisant OpenSSL. Il couvre les étapes suivantes : génération d'une clé privée et d'un certificat racine pour la CA, ajout de cette CA au magasin de certificats du système, création de certificats clients signés par cette CA, et mise en place de ces certificats sur des serveurs Apache ou Nginx. Le processus inclut des commandes spécifiques pour chaque étape, comme la génération de clés RSA et la signature des demandes de certificats (CSR) avec la CA.
Une base de données graphe intégrée, à la SQLite - (depuis https://bsky.app/profile/did:plc:4q4wdaknunskbt47bzsi2qbv/post/3lnezxpunas2w?ref_src=embed )
Tout est dans le titre
L'article décrit l'expérience de l'autrice sur Mastodon depuis 2022, après avoir quitté Twitter suite à son rachat par Elon Musk. Elle apprécie l'absence de publicité, la bienveillance des utilisateurs et la possibilité de suivre des hashtags pour découvrir du contenu intéressant. Elle utilise Mastodon pour partager des aspects de sa vie quotidienne, des photos et des réflexions professionnelles, tout en interagissant avec une communauté engagée et diversifiée. Elle gère deux comptes, un officiel et un anonyme, et passe environ une heure et demie par jour sur la plateforme, soulignant les avantages de Mastodon par rapport aux réseaux sociaux algorithmiques
.
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 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 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 explique comment Zenstruck Foundry a révolutionné les tests dans Symfony en permettant de créer des données de test de manière simplifiée et expressive. Cette bibliothèque utilise des factories pour générer rapidement des données pour les entités Doctrine, supporte Faker pour des données aléatoires réalistes, et intègre des fonctionnalités comme les "stories" pour définir des scénarios de données réutilisables. Foundry est particulièrement utile pour tester des modèles de domaine complexes, y compris les Value Objects et les Aggregates en Domain-Driven Design (DDD), en simulant des interactions réalistes sans la complexité de gérer les données sous-jacentes
.
L'autrice utilise EXPLAIN avant de lancer la requête - ce qui calcule son plan sans l'exécuter - afin de ne pas surcharger sa base de données avec une requête lente
Elle utilise EXPLAIN ANALYZE après l'exécution de sa requête afin de comprendre pourquoi elle est lente.
La syntaxe présentée est celle de PostgreSQL - à adapter donc selon le SGBD.
On a 3 manières de compter les lignes en SQL :
COUNT(*) compte toutes les lignes, sans s'occuper des valeurs de celles-ci. On l'utilise souvent avec GROUP BY comme dans cette requête sur les prénoms les plus populaires.
SELECT first_name, COUNT(*) FROM people GROUP BY first_name ORDER BY COUNT(*) DESC LIMIT 50
COUNT(DISTINCT column) renvoie le nombre de valeurs distinctes, et est donc très utile si une colonne a des valeurs dupliquées. Par exemple, la requête suivante trouve le nombre d'espèces pour chaque gêne de plante.
SELECT genus, COUNT(DISTINCT species) FROM plants GROUP BY 1 ORDER BY 2 DESC
À noter que GROUP BY 1 signifie de grouper par la 1ère expression du SELECT.
SUM(CASE WHEN expression THEN 1 ELSE 0 END) permet de compter, par exemple dans la requête ci-dessous, combien chaque propriétaire a de chats, de chiens et d'autres animaux.
SELECT owner , SUM(CASE WHEN type = 'dog' THEN 1 ELSE 0 END) AS num_dogs , SUM(CASE WHEN type = 'cat' THEN 1 ELSE 0 END) AS num_cats , SUM(CASE WHEN type NOT IN ('dog','cat') THEN 1 ELSE 0 END) AS num_other FROM pets GROUP BY owner
Ça marche bien si la table a le format
owner | type |
---|---|
1 | dog |
1 | cat |
2 | dog |
2 | parakeet |
Dans son article, Scott H. Young partage ses lectures et ses réflexions sur le sommeil, thème du septième mois de son projet annuel "Foundations". Il souligne l'importance du sommeil pour la cognition, l'humeur et le système immunitaire, et critique la valorisation culturelle de la privation de sommeil. Il explique que le sommeil est régulé par deux processus : l'accumulation de la pression de sommeil (Processus S) et le cycle jour-nuit (Processus C), qui peuvent être perturbés par la caféine et la lumière artificielle. Il résume plusieurs livres sur le sommeil, abordant des sujets tels que l'insomnie, les rythmes de sommeil historiques, la neuroscience du sommeil et des rêves, et les effets des siestes. Il mentionne également les effets du café et l'importance de la lumière pour réguler le rythme circadien.
L'auteur explique comment récupérer des données d'un disque dur en fin de vie, grâce à la commande ddrescue
Une bibliothèque JavaScript open source de visualisation de données très complète
L'auteur explore la complexité de faire confiance à l'expertise. Il admet que, malgré avoir lu de nombreux livres sur la nutrition, il reste beaucoup de choses qu'il ne sait pas. Young souligne que faire confiance aux experts n'est pas une tâche intellectuellement simple. Cela nécessite un travail considérable pour aligner sa vision du monde avec celle des experts. Il argue que les experts, en général, ont des opinions plus précises que les non-experts, et que la majorité des opinions d'experts est souvent plus fiable que les opinions individuelles. Cependant, il reconnaît aussi les défis, comme les biais et les limites des modèles utilisés par les experts, qui peuvent parfois justifier un certain scepticisme. En fin de compte, Young plaide pour une approche équilibrée, où l'on donne du poids aux perspectives dominantes des experts tout en restant ouvert à des points de vue contraires bien fondés
.
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 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
.