Hebdomadaire Shaarli

Tous les liens d'un semaine sur une page.

Semaine 51 (December 15, 2025)

Styling by Language: Using the lang Attribute for Multilingual Design - HTMHell

Cet article explique comment utiliser l'attribut lang en HTML pour adapter le style CSS en fonction de la langue, notamment pour les sites multilingues comme les combinaisons anglais-japonais. L'article aborde les défis typographiques entre les scripts latins et japonais, proposant des solutions pour équilibrer visuellement les polices, les poids de caractères, l'espacement et la hauteur de ligne. Des exemples concrets montrent comment ajuster ces paramètres pour harmoniser l'affichage des textes bilingues.

No persist(), Still Saved? How Doctrine’s Dirty Checking Really Works | by Yusuf Biberoğlu | Dec, 2025 | Medium

Cet article explique pourquoi Doctrine ORM sauvegarde les modifications des entités même sans appeler la méthode persist(). Le mécanisme clé est le "dirty checking" : Doctrine suit les entités gérées (chargées depuis la base de données), compare leurs valeurs actuelles avec une copie initiale, et génère des requêtes SQL uniquement pour les champs modifiés lors de l'appel à flush(). La méthode persist() n'est nécessaire que pour les nouvelles entités.

Comment créer un logiciel durable ?

L'article explore les stratégies pour développer des plateformes pérennes, en se basant sur l'exemple de Writizzy. Il met en avant l'importance de la réversibilité, en permettant aux utilisateurs d'exporter facilement leurs données et d'utiliser leur propre nom de domaine. L'auteur souligne aussi l'importance de prévenir la "merdification", c'est-à-dire l'évolution négative des produits due aux pressions économiques et internes. Il propose de construire uniquement ce qui est nécessaire et d'évoluer de manière mesurée, sans recourir à des investisseurs externes. L'interopérabilité et la décentralisation sont également évoquées comme des solutions pour assurer la durabilité des contenus.

How Claude Code is helping me as an open source maintainer · Stan's blog

Stan partage son expérience en tant que mainteneur de projets open source (openvpn-install et wireguard-install) et explique comment Claude Code l'a aidé à gérer son backlog important. Grâce à l'IA, il a pu mettre en place des tests automatisés dans Docker, ce qui lui a permis de traiter plus efficacement les bugs et les demandes de fonctionnalités. Il décrit son workflow, les défis rencontrés et les améliorations apportées, comme la gestion des logs et l'ajout de fonctionnalités demandées depuis longtemps. Un témoignage intéressant sur l'impact des outils d'IA sur la maintenance de projets open source.

Autoriser les lecteurs RSS derrière Cloudflare

Ce billet explique comment contourner le blocage des lecteurs RSS par Cloudflare, qui les considère comme des bots. L'auteur, Nicolas Simond, détaille la création d'une règle personnalisée dans l'interface Cloudflare pour exclure les flux RSS de la protection anti-bot, permettant ainsi aux lecteurs d'accéder normalement aux flux. Il mentionne aussi une limite : les adresses IP blacklistées ne pourront pas bénéficier de ce contournement.

Optimizing CLS for Infinite Scroll and Load More - Web Performance Calendar

Andrea Verlicchi, expert en performance web, aborde dans cet article l’optimisation du Cumulative Layout Shift (CLS) pour les pages utilisant le défilement infini ou le bouton « Charger plus ». Il identifie deux causes majeures de CLS : les bannières promotionnelles retardées et le chargement dynamique de contenu (typique des sites e-commerce), qui déplace le pied de page hors de la vue et dégrade l’expérience utilisateur.

Pour le défilement infini, la solution consiste à insérer des squelettes (placeholders) dès le début de la requête, réservant ainsi l’espace nécessaire avant l’affichage du contenu réel, évitant tout saut de mise en page. Pour le bouton « Charger plus », bien qu’un délai de 500 ms après le clic soit toléré, il recommande aussi d’utiliser des squelettes pour garantir une stabilité visuelle, quel que soit le temps de réponse du réseau.

La règle d’or ? Ne jamais déplacer le contenu visible pendant le défilement et toujours réserver l’espace à l’avance, sauf après une interaction utilisateur explicite (clic), en respectant la fenêtre de 500 ms. Une approche simple mais efficace pour améliorer les Core Web Vitals et l’expérience utilisateur. 🎄✨

calebevans/cordon: Reduce logs to their semantic anomalies

Cordon est un outil open-source qui utilise des embeddings de transformateurs et des scores de densité pour identifier des anomalies sémantiques dans de grands fichiers de logs, réduisant ainsi les logs massifs aux sections les plus anormales pour une analyse plus facile. Il filtre les motifs répétitifs et met en avant les événements inhabituels ou regroupés. Cordon supporte plusieurs backends comme sentence-transformers, llama.cpp, et des APIs distantes (OpenAI, Gemini, etc.). Il peut être installé via PyPI ou depuis la source, et offre une utilisation en ligne de commande ainsi qu'une API Python. Pour une explication détaillée de la méthodologie, un article sur Red Hat Developer est disponible.

AGENTS.md

AGENTS.md est un format ouvert et simple pour guider les agents de codage, utilisé par plus de 60 000 projets open source. Il sert de complément au README.md en fournissant des instructions spécifiques pour les agents, comme les étapes de construction, les tests et les conventions, tout en gardant le README concis et axé sur les contributeurs humains. Le fichier AGENTS.md est compatible avec divers agents de codage et outils, et peut être adopté librement par quiconque trouve cela utile.

Stop using JavaScript to solve CSS problems - LogRocket Blog

Cet article met en lumière l'utilisation excessive de JavaScript pour résoudre des problèmes qui pourraient être mieux gérés par CSS. L'auteur, Chizaram Ken, souligne que les lacunes de connaissances poussent souvent les développeurs à sur-ingénieriser des solutions, ce qui impacte négativement les performances. Par exemple, des fonctionnalités CSS comme content-visibility: auto et les unités de vue modernes (dvh, svh, lvh) offrent des solutions efficaces sans JavaScript, mais les développeurs continuent de privilégier des solutions JavaScript par habitude. L'article explore des problèmes spécifiques comme la virtualisation dans React, les requêtes de conteneur et les animations de défilement, en proposant des alternatives CSS et en discutant des cas où JavaScript reste pertinent. Un appel est lancé pour éviter d'utiliser useEffect et useState pour des problèmes de rendu, en insistant sur l'importance de comprendre les capacités natives du navigateur avant de recourir à des bibliothèques JavaScript.

A tale of two animations – the compositor in the skies - Web Performance Calendar

Morgan Murrah explique comment il a optimisé les animations de son site web en utilisant le compositeur (compositor), un processus GPU séparé qui améliore les performances des animations CSS. Il partage son expérience avec deux animations : des nuages en mouvement et un soleil avec des ondes pulsantes. En analysant les performances avec Chrome, il découvre que l'animation des nuages, utilisant la propriété left, génère une activité excessive dans le thread principal. Il apprend à convertir cette animation en une animation composée, utilisant la propriété transform au lieu de left, ce qui réduit significativement l'impact sur les performances. Un article accessible pour comprendre l'importance du compositeur dans les animations web.

Concevoir un service numérique responsable dans une organisation produit — 24 jours de web

Cet article partage l'expérience de SNCF Connect dans la mise en place d'une stratégie de service numérique responsable. Il définit un service numérique responsable comme une solution utile, sobre, accessible et respectueuse, reposant sur quatre piliers : accessibilité, sobriété, confidentialité et respect des libertés. L'article souligne l'importance de ces principes, soutenus par des référentiels concrets comme le RGAA, le RGPD et le RGESN, et illustre comment SNCF Connect aligne ses actions sur ces enjeux pour promouvoir des mobilités durables et accessibles. Il présente également des bonnes pratiques pour déployer une telle stratégie, comme la labellisation numérique responsable.

Le cauchemar des systèmes de coordonnées en bioinformatique - Bioinfo-fr.net

Le cauchemar des systèmes de coordonnées en bioinformatique est un article accessible et pédagogique publié sur Bioinfo-fr.net qui explique les défis souvent sous-estimés liés à la représentation des positions génomiques dans les fichiers et outils bioinformatiques. Il aborde notamment comment différents formats utilisent des systèmes d’indexation (commençant à 0 ou à 1) et des types d’intervalles (bornes inclusives ou non), des choix qui semblent techniques mais qui peuvent rapidement devenir des sources d’erreurs fréquentes pour qui manipule des génomes, des annotations ou des alignements. Une lecture indispensable pour comprendre et éviter les pièges des coordonnées dans vos analyses de données génomiques.

Guilde design, DesignOps, ResearchOps : cuisine interne et service en salle — 24 jours de web

L'article de Goulven Baron, "Guilde design, DesignOps, ResearchOps : cuisine interne et service en salle", explore le rôle de référent de la guilde design dans une mutuelle d'assurance. Il décrit comment, inspiré par le DevOps, le DesignOps et le ResearchOps améliorent la pratique du design et de la recherche utilisateur. L'auteur compare cette organisation à la série "The Bear", où un chef tente de transformer une sandwicherie chaotique. Il souligne l'importance de comprendre les pratiques existantes et de faciliter la transversalité entre les différentes équipes de designers, tout en évitant d'imposer des méthodes de manière rigide.

Don't leave the screen reader hungry - HTMHell

L'article explore les écarts entre ce que les lecteurs d'écran annoncent et ce qui est visuellement affiché à l'écran, en utilisant des burritos comme métaphore. Il souligne que les emojis et autres éléments visuels peuvent induire en erreur les utilisateurs de lecteurs d'écran, comme dans l'exemple d'un emoji de burrito dans un titre de sandwich. L'auteur fournit des tableaux comparatifs montrant comment les lecteurs d'écran populaires (JAWS, NVDA, VoiceOver) annoncent différents éléments HTML, et discute des éléments que le HTML fournit par défaut et ceux qui nécessitent des ajouts pour des annonces significatives. L'article encourage à mieux documenter et enregistrer les exigences des lecteurs d'écran pour combler les lacunes entre la conception et le code.

Gérer les Custom Domains et le SSL dynamique avec Coolify et Traefik

Ce billet explique comment configurer des domaines personnalisés avec SSL dynamique pour une application multi-tenant utilisant Coolify et Traefik. L'auteur, Hugo Lassiège, détaille les étapes pour rediriger le trafic via des enregistrements DNS (CNAME, ALIAS, ou A) et configurer Traefik pour gérer les certificats SSL pour ces domaines personnalisés, en évitant de redémarrer l'application et en permettant une gestion programmatique.

Ma stack 2025 pour construire une application SAAS

Hugo Lassiège partage sa stack technologique préférée pour construire des applications SAAS en 2025, basée sur son expérience depuis 2001. Il utilise un Tech Radar pour classer les technologies en trois catégories : LOVE, OKish et Meh. Pour le frontend, il privilégie Vue.js et Nuxt.js pour leur productivité et leur capacité à faire du SSR, améliorant ainsi le SEO. Il met à disposition son Tech Radar sur son blog, qui sera régulièrement mis à jour.

How We Lost Communication to Entertainment

Ploum explore dans cet article la transformation des canaux de communication en réseaux de distribution de contenu, soulignant que nous sommes de plus en plus divertis mais de moins en moins connectés. Il discute des divergences d'opinions sur le protocole ActivityPub, utilisé par le Fediverse, entre ceux qui le voient comme un outil de communication et ceux qui le considèrent comme un moyen de consommation de contenu. L'auteur critique l'idée de multiplier les comptes sur différentes plateformes, une pratique qu'il juge contraire à l'esprit de la fédération et de l'interopérabilité. Il conclut que les réseaux sociaux ne sont pas des réseaux de communication, mais des plateformes de divertissement. Il encourage tous ceux qui préfèrent les technologies ennuyeuses comme l'email ou les flux RSS à continuer à communiquer à travers elles plutôt qu'avec les réseaux sociaux.

Testing is software engineering

Cet article souligne l'importance cruciale des tests dans le développement logiciel. Il argue que les tests ne sont pas une activité annexe, mais une partie intégrante de l'ingénierie logicielle. Les tests améliorent la conception du code, donnent confiance pour apporter des modifications, et facilitent la collaboration en révélant des cas limites et des exigences cachées. En intégrant les tests dès le début du processus de développement, les développeurs peuvent concevoir un logiciel de meilleure qualité, effectuer des changements avec moins de stress et découvrir des exigences cachées avant qu'elles ne deviennent des obstacles.

Your Job Is Not Your Career - by Steve Huynh

Steve Huynh explique dans cet article pourquoi il est crucial de ne pas confondre son emploi avec sa carrière. Il souligne que se concentrer uniquement sur les tâches quotidiennes (85% du temps) sans consacrer du temps à la stratégie (15%) peut freiner la croissance professionnelle. Il recommande de réallouer une partie de son temps pour travailler sur des projets à long terme, comme développer des compétences (Multiplicateurs), créer des opportunités (Optionnalité) ou planifier des paris audacieux (Big Bets). Cette approche permet de transformer son travail quotidien en croissance de carrière sans nécessairement augmenter sa charge de travail.

Développeuse ? Jardinière ? Je suis quoi, déjà ? — 24 jours de web

Marine Dunstetter, ingénieure logicielle senior, explore les parallèles entre son métier et sa passion pour le jardinage. Elle souligne que ces deux activités, bien que différentes en apparence, partagent des similitudes fondamentales : un travail sans fin, un écosystème complexe à gérer et un apprentissage continu. Le jardinage, comme le développement web, demande une attention constante et une adaptation permanente aux changements. Les erreurs, inévitables dans les deux domaines, sont des opportunités d'apprentissage. L'auteur invite à voir ces défis comme des occasions de croissance et de compréhension plus profonde de nos environnements, qu'ils soient numériques ou naturels.

Implementing TOTP-Based Multi-Factor Authentication in Symfony 7 | by Edgaras | Dec, 2025 | Medium

Ce tutoriel explique comment implémenter l'authentification multi-facteurs (MFA) basée sur les mots de passe à usage unique temporels (TOTP) dans Symfony 7, sans utiliser de bundles tiers. Il couvre les principes de fonctionnement du TOTP, la création d'un service TOTP personnalisé, la conception de la base de données pour le 2FA, les flux de configuration et de vérification, ainsi que l'application de l'authentification à deux facteurs basée sur les sessions via des abonnés d'événements. Le tutoriel inclut également la génération de codes QR pour une configuration facile et des composants d'interface utilisateur pour la configuration, la vérification et la désactivation du TOTP. Les prérequis incluent un projet Symfony 7.x avec l'authentification déjà configurée, Doctrine ORM et une compréhension de base de la sécurité Symfony.

CQRS Design Pattern

L'article explique le pattern CQRS (Command Query Responsibility Segregation), qui sépare les opérations de lecture et d'écriture vers la base de données. Ce pattern permet d'optimiser les performances et la sécurité en utilisant des modèles de données distincts pour les lectures et les écritures. L'article explore différentes implémentations du CQRS et montre comment Debezium peut simplifier sa mise en œuvre, notamment dans les architectures microservices.

Proxmox VE sur un serveur dédié Scaleway Start-2-S-SATA [E02]: Réseau, pare-feu et reverse proxy Caddy démystifiés · F84 | Blog

Ce second article de la série détaille la configuration avancée d’un nœud Proxmox VE sur un serveur dédié Scaleway avec une seule IP publique. L’auteur explique comment exposer plusieurs services (comme Garage S3 et l’interface Proxmox) de manière sécurisée via HTTPS, en utilisant Caddy comme reverse proxy avec gestion automatique des certificats SSL via Let’s Encrypt. Le guide couvre la configuration d’un réseau privé avec NAT, la création de règles de pare-feu Proxmox à trois niveaux (datacenter, nœud, VM/conteneur), et le dépannage des problèmes courants (DNS, ports, certificats, erreurs 502). Une attention particulière est portée sur l’identification des flux réseau internes et l’adaptation des IPSET pour éviter les blocages involontaires. L’objectif est de centraliser et sécuriser l’accès aux services tout en automatisant la gestion des certificats.

BFG Repo-Cleaner by rtyley

Le BFG Repo-Cleaner est un outil en Scala, plus rapide et plus simple que git-filter-branch, conçu pour nettoyer les dépôts Git en supprimant les gros fichiers ou les données sensibles comme les mots de passe. Il permet de cloner un dépôt, de le nettoyer avec des commandes spécifiques, puis de pousser les modifications. Exemples d'utilisation : suppression de fichiers spécifiques, suppression de blobs volumineux, remplacement de texte sensible. Le BFG ne modifie pas le dernier commit pour éviter les problèmes de déploiement.

Tout le Web dépend de l’hébergeur AWS ? — 24 jours de web

En octobre 2025, une panne majeure de l'hébergeur AWS a perturbé de nombreux services Internet, relançant la question de la dépendance du Web à ces géants. Bien que la panne soit localisée et logicielle, ses conséquences ont été amplifiées par la complexité et l'interconnexion des services. L'article analyse les réactions médiatiques, souvent sensationnalistes, et souligne la difficulté de gérer des infrastructures aussi vastes. Il invite à une réflexion sur les compromis entre robustesse et diversité des services offerts.

Captcha et protection contre les bots nouvelle génération, conforme au RGPD | ALTCHA

ALTCHA propose une solution de protection contre les bots et le spam, conforme au RGPD et à d'autres réglementations internationales, sans suivi, cookies ou fingerprinting. Leur système, auto-hébergé et open source, utilise une vérification basée sur le Proof-of-Work (PoW) pour une expérience utilisateur fluide, avec une option de défi par code pour les cas à haut risque. ALTCHA Sentinel offre une protection adaptative et discrète, idéale pour les entreprises et les sites web, disponible également sous forme de plugin pour WordPress.

My USB-C was slow until I tried this ridiculous fix

L'article explique comment l'auteur a résolu un problème de vitesse lente sur un câble USB-C en découvrant que l'orientation du câble affectait les performances. Il explore ensuite les détails techniques des connecteurs USB-C, qui possèdent 24 broches, chacune ayant une fonction spécifique. L'auteur fournit un diagramme simplifié des broches et explique que certaines broches sont interconnectées à l'intérieur du câble pour permettre la réversibilité. Il mentionne également que tous les câbles et chargeurs n'utilisent pas toutes les broches disponibles.

Chain of Responsibility, Rule, Specification… How to combine three patterns to make your business flexible | by Nicolas Jourdan | Dec, 2025 | Medium

Nicolas Jourdan explique comment combiner trois patterns de conception (Specification, Rule et Chain of Responsibility) pour gérer efficacement les règles métier complexes en PHP. L'article détaille d'abord le pattern Specification, qui transforme les conditions métier en objets réutilisables et testables, évitant ainsi les if imbriqués et le code dupliqué. Il présente ensuite une implémentation moderne de ce pattern avec une interface de base et des classes pour les opérations logiques (AND, OR, NOT). Cette approche permet de construire des conditions métier claires et modulaires, facilitant ainsi la maintenance et l'extensibilité du code.

The Old Ways Are the Best: 100 Lighthouse, 0ms TBT, 32ms Queries - Web Performance Calendar

L'article explore comment des techniques anciennes et des API natives du navigateur surpassent les frameworks modernes en termes de performance. L'auteur présente multicardz, un outil de gestion de données spatiales, qui utilise des bitmaps pour les requêtes backend, réduisant ainsi les temps de traitement. Pour le frontend, il utilise DATAOS (DOM As The Authority On State), une approche où le DOM est la source de vérité pour l'état de l'application, éliminant ainsi la nécessité de synchroniser un état séparé. Le résultat est une application performante avec un bundle JavaScript de seulement 32KB, un score Lighthouse de 100, et des temps de réponse extrêmement rapides.

N’opposons pas conformité et accessibilité — 24 jours de web

Cet article remet en question le slogan souvent répandu "La conformité n’est pas de l’accessibilité". Les auteurs expliquent que, bien que ce slogan soit séduisant et partiellement vrai, il est réducteur et peut prêter à confusion. Ils soulignent que la conformité aux référentiels comme le RGAA est essentielle pour garantir une base d'accessibilité minimale, permettant aux personnes handicapées d'accéder aux services en ligne sans difficultés majeures. L'article illustre également, à travers une expérience vécue, que l'expérience utilisateur peut parfois contredire les évaluations d'experts, mais cela ne remet pas en cause l'importance des normes d'accessibilité.

Le design system de la Fabrique de Noël — 24 jours de web

Le design system de la Fabrique de Noël est un article narratif qui illustre, à travers une métaphore festive, les enjeux de l’accessibilité numérique et la mise en place d’un design system. Oli Daynight (designer) et Any Goodcookie (experte accessibilité) sont chargés par le Père Noël de rendre la plateforme de la Fabrique de Noël plus inclusive. Ils optent pour une refonte directe des composants du design system, plutôt qu’un audit préalable, afin de gagner du temps avant Noël. Any insiste sur l’importance de former les équipes, d’intégrer l’accessibilité dès la conception (en s’appuyant sur les WCAG) et de mettre en place des processus collaboratifs, comme des sessions de tests entre pairs (« Dans leurs chaussons »). Malgré des contraintes de temps, les résultats sont encourageants : les composants deviennent plus accessibles, et les équipes s’approprient progressivement ces bonnes pratiques. L’article souligne que l’accessibilité est un travail continu, nécessitant engagement et améliorations itératives. Une lecture ludique et inspirante pour aborder les défis concrets de l’accessibilité web ! 🎄✨

Des tableaux de données complexes accessibles, c’est possible ? — 24 jours de web

Cet article de Guillaume Barbier explore les défis liés à la création de tableaux de données accessibles sur le web en 2025. Il identifie deux principales raisons pour lesquelles les tableaux restent inaccessibles : un manque de culture numérique et des limitations techniques. L'auteur souligne la confusion entre la structuration de l'information et la présentation visuelle, ainsi que les difficultés techniques rencontrées avec certaines combinaisons de navigateurs et lecteurs d'écran. Il propose une synthèse des connaissances pour aider à créer des tableaux accessibles et évoque quelques motifs à éviter. L'article aborde également d'autres critères d'accessibilité comme la redistribution et les mouvements de glissement, avec des techniques pour éviter les déformations sur les écrans étroits.

Them’s the Breaks - HTMHell

L'article explore les différentes techniques HTML pour gérer les sauts de ligne et les ruptures de mots. Il détaille l'utilisation de la balise <br> pour les sauts de ligne, <wbr> pour les opportunités de rupture de mots, &shy; pour les tirets mous et &nbsp; pour les espaces insécables. L'auteur explique quand et comment utiliser ces éléments, tout en soulignant leurs limites et alternatives. Un guide pratique pour mieux maîtriser la mise en page du texte en HTML.

Développer dans son navigateur | Richard Dern

Richard Dern explore les environnements de développement basés sur le web, cherchant une solution native à NixOS qui ne limite pas ses capacités quotidiennes. Il retrace l'histoire des IDE, des éditeurs de code en mode console comme vi et Emacs, aux environnements intégrés modernes. Son parcours, similaire à celui de la recherche d'un émulateur de terminal, aboutit à une solution pérenne mais avec quelques compromis, tout en notant l'évolution constante des alternatives.

Implémenter un captcha sans tracking avec Atcha et Nuxt

Ce billet de blog explique comment implémenter un captcha sans suivi avec Atcha et Nuxt. L'auteur, Hugo Lassiège, décrit les problèmes rencontrés avec des inscriptions automatisées sur son formulaire de contact et la nécessité d'ajouter un captcha pour les bloquer. Il explore les solutions existantes, notamment Nuxt Turnstile, qui repose sur Cloudflare, et présente Atcha, une alternative open source. L'article détaille le fonctionnement des captchas de nouvelle génération, qui utilisent des techniques comme la preuve d'espace et le fingerprinting pour détecter les bots, tout en soulevant des questions sur la conformité avec le RGPD.

My CSS layout strategy  •  Stuff & Nonsense

L'auteur partage sa stratégie pour concevoir des mises en page avec CSS, en insistant sur l'importance de partir du contenu plutôt que d'un conteneur prédéfini. Il explique comment choisir la grille adaptée (12 colonnes, grille composée, modulaire, ou aucune) en fonction des besoins du projet, et comment définir et réutiliser ces grilles de manière cohérente à travers un site. Il utilise des attributs de données pour nommer et réutiliser rapidement des arrangements d'éléments enfants, favorisant ainsi une approche systématique et efficace.

How to Read One Book Per Week (Even if You Read Slowly) - Scott H Young

Scott H Young partage ses stratégies pour lire un livre par semaine, même en lisant lentement. Il suggère d'avoir toujours un livre à portée de main, de diversifier les formats (livre papier, audio, e-book), de ne pas finir les livres qui ne vous intéressent plus, de supprimer les réseaux sociaux de son téléphone, de lire avant de dormir, de créer une "antilibrary" (une bibliothèque de livres non lus mais souhaités) et de concevoir des projets de lecture thématiques. Ces astuces permettent d'augmenter sa consommation de livres et d'améliorer ses connaissances et sa motivation.

21 Lessons from 14 Years at Google - by Addy Osmani

Addy Osmani partage 21 leçons tirées de ses 14 années chez Google, axées sur les compétences humaines et organisationnelles plutôt que sur les technologies. Parmi ces leçons, il souligne l'importance de se concentrer sur les problèmes des utilisateurs, de collaborer plutôt que d'avoir toujours raison, de privilégier l'action et le partage rapide, de privilégier la clarté à la complexité, et de limiter l'innovation aux cas où elle est vraiment nécessaire. Ces conseils visent à aider les ingénieurs à naviguer efficacement dans leur carrière et leurs projets.

De l'usage des DTO dans les formulaires

Florent Destremau discute de l'utilisation des DTO (Data Transfer Objects) dans les formulaires, soulignant que leur utilisation est souvent présentée comme une évidence sans considérer le contexte et le coût de maintenance. Il illustre cela avec un exemple simple où l'ajout d'un DTO et d'un service de mapping pour une entité basique crée une sur-complexité et une duplication de code. Il argue que pour des opérations CRUD simples, les DTO n'apportent que peu de valeur et recommande plutôt d'écrire des tests pour protéger le code. Il montre comment déplacer les contraintes de validation sur l'entité et utiliser du typage strict peut simplifier le code tout en maintenant une bonne robustesse. Il conclut que cette approche résulte en un couplage plus souple et une couverture de test accrue, malgré une perception initiale de moins de rigueur.

Semantics beyond the tag name - HTMHell

L'article critique l'utilisation excessive de balises <div> (divitis) et l'abus de balises HTML sémantiques sans compréhension de leur véritable signification. L'auteur explique que l'HTML sémantique ne se limite pas à remplacer les <div> par d'autres balises, mais nécessite une compréhension approfondie des éléments et de leur usage correct selon les normes HTML. Il souligne l'importance d'aller au-delà des apparences et de se former continuellement pour écrire un HTML vraiment sémantique et accessible.

Adieu `direnv`, Bonjour `mise` - Julien Wittouck

Julien Wittouck, architecte freelance et formateur, partage son expérience en passant de direnv à mise pour la gestion des variables d'environnement et des outils de développement. Il explique les limites de direnv et les avantages de mise, qui offre une gestion de packages, de variables d'environnement et d'exécution de tâches, tout en étant extensible via des plugins. Il détaille l'installation sur Linux et la configuration du shell pour une intégration fluide.

Testing with DTOs and Value Objects

Cet article de Sebastian Bergmann explique les différences entre les Data Transfer Objects (DTOs) et les Value Objects, et pourquoi l'immutabilité facilite les tests. Les DTOs, motivés techniquement, servent à transférer des données entre couches ou systèmes, tandis que les Value Objects, motivés par le domaine, représentent des concepts stables du domaine. L'immutabilité réduit la charge cognitive en test, car elle garantit que l'état des objets ne change pas. Les Value Objects, étant immuables, n'ont pas besoin de test doubles, contrairement aux DTOs qui peuvent en nécessiter si ils contiennent de la logique. L'utilisation d'objets immuables simplifie les tests en évitant les effets de bord indirects.

Proxmox VE sur un serveur dédié Scaleway Start-2-S-SATA [E01]: Installation sur Debian 13 Trixie · F84 | Blog

L’article détaille l’installation de Proxmox VE sur un serveur dédié Scaleway (modèle Start-2-S-SATA) sous Debian 13 Trixie, motivée par la volonté de remplacer une solution de sauvegarde instable basée sur un VPS Hetzner et un stockage Samba. L’auteur explique chaque étape : choix de Debian 13 pour éviter les versions obsolètes de Proxmox proposées par Scaleway, partitionnement manuel du disque (avec ajustements post-installation pour créer des partitions dédiées à /datastore et /data), configuration réseau en NAT pour permettre à plusieurs VMs/LXC de partager une seule IP publique, et sécurisation du serveur. Le guide inclut aussi la configuration du pare-feu Proxmox, l’activation du routage IPv4, et des astuces pour le dépannage. L’objectif final est de déployer un conteneur LXC avec Garage S3 pour stocker les sauvegardes Proxmox Backup Server de manière fiable et distante. Un tutoriel technique et pratique pour administrer un hyperviseur sur un serveur dédié avec une seule IP publique.

The many lives of the page title - HTMHell

L'article explore l'importance souvent sous-estimée du titre de page () dans l'expérience utilisateur. Au-delà de son rôle SEO, il aide les utilisateurs à identifier et naviguer entre les onglets, surtout dans des flux complexes comme les formulaires multi-étapes ou les résultats de recherche paginés. Des titres contextuels et uniques pour chaque écran améliorent significativement la navigation, comme illustré par l'exemple d'un formulaire d'assurance vélo.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> navigation </span> <span class="label label-tag"> seo </span> <span class="label label-tag"> accessibilité </span> <span class="label label-tag"> ux </span> <span class="label label-tag"> bonnes-pratiques </span> <span class="label label-tag"> title </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/9PBx3w" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://lecodeestdanslepre.fr/billets/castor-un-outil-qui-envoie-du-bois">Pourquoi j'ai remplacé mes Makefiles par Castor (et pourquoi vous devriez aussi) • Lecodeestdanslepre</a> </div> <div class="daily-entry-description"><div class="markdown"><p>Ce billet de blog explique pourquoi l'auteur a remplacé les Makefiles par Castor, un task runner développé par JoliCode, pour automatiser ses projets PHP. Castor permet d'utiliser du PHP au lieu de scripts shell fragiles, offrant une meilleure expérience développeur avec autocomplétion, documentation et refactoring. L'auteur détaille comment Castor gère le démarrage du projet, en attendant intelligemment que la base de données soit prête, et montre un exemple de code pour illustrer ses propos.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> Castor </span> <span class="label label-tag"> task-runner </span> <span class="label label-tag"> Developer-eXperience </span> <span class="label label-tag"> php </span> <span class="label label-tag"> make </span> <span class="label label-tag"> Makefile </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/CAoFXw" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://steve-yegge.medium.com/six-new-tips-for-better-coding-with-agents-d4e9c86e42a9">Six New Tips for Better Coding With Agents | by Steve Yegge | Dec, 2025 | Medium</a> </div> <div class="daily-entry-description"><div class="markdown"><p>Steve Yegge partage six nouvelles astuces pour mieux coder avec des agents, basées sur ses expériences récentes. Parmi celles-ci, il souligne que le logiciel est désormais jetable, avec une durée de vie inférieure à un an, rendant les réécritures plus faciles et intelligentes que les corrections. Cette approche remet en question les conseils traditionnels, comme ceux de Joel Spolsky, et ouvre la voie à des architectures modernes et maintenables, posant un défi aux fournisseurs de SaaS tiers.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> conseils </span> <span class="label label-tag"> programmation </span> <span class="label label-tag"> vibe-coding </span> <span class="label label-tag"> intelligence-artificielle </span> <span class="label label-tag"> bonnes-pratiques </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/ACpXuA" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://blog.ght1pc9kc.fr/2025/la-claque-du-d%C3%A9veloppeur/">La claque du développeur · j’ai acheté un PC...</a> </div> <div class="daily-entry-description"><div class="markdown"><p>Cet article raconte l'expérience d'un développeur qui, après des années de confort dans son travail, se retrouve confronté à un collègue plus expérimenté qui remet en question ses méthodes et ses choix. Initialement frustré, il finit par accepter cette "claque" comme une opportunité d'apprentissage, ce qui lui permet de progresser et d'acquérir une compétence essentielle : se remettre en question sans le vivre comme un échec. L'auteur souligne l'importance d'accepter les critiques et de partager les connaissances pour évoluer dans ce métier.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> apprentissage </span> <span class="label label-tag"> développeur </span> <span class="label label-tag"> expérience </span> <span class="label label-tag"> évolution </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/JN8vWA" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://calendar.perfplanet.com/2025/the-anatomy-of-lcp-a-deep-dive-into-sub-parts/">The Anatomy of LCP – A Deep Dive into Sub-Parts - Web Performance Calendar</a> </div> <div class="daily-entry-description"><div class="markdown"><p>L'article explore les différentes phases de l'optimisation du Largest Contentful Paint (LCP), une métrique clé des Core Web Vitals. Il explique que le LCP peut être décomposé en quatre sous-parties : TTFB (Time to First Byte), Resource Load Delay, Resource Load Duration et Element Render Delay. Chaque phase identifie des goulots d'étranglement spécifiques et propose des solutions pour les résoudre. L'article souligne l'importance de comprendre ces phases pour diagnostiquer et améliorer les performances de chargement des pages web, en particulier pour les images, qui représentent la majorité des éléments LCP.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> LCP </span> <span class="label label-tag"> optimisation </span> <span class="label label-tag"> performance </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/QsSwgQ" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://htmhell.dev/adventcalendar/2025/18/">Forms are a badly designed part of HTML - HTMHell</a> </div> <div class="daily-entry-description"><div class="markdown"><p>L'article critique la gestion des formulaires en HTML, soulignant leur conception incomplète et leurs comportements inconsistants. Bien que de nouveaux éléments de formulaire aient été introduits, comme les champs email, téléphone, date et curseur de plage, ceux-ci restent basiques et ne couvrent pas des cas d'utilisation courants comme les comboboxes ou les curseurs de plage pour plusieurs valeurs. La validation intégrée, bien que pratique, manque de flexibilité, nécessitant souvent des solutions JavaScript personnalisées. L'auteur déplore le manque de standardisation pour des éléments combinés et des améliorations de style, pointant du doigt les lacunes persistantes malgré plus de dix ans depuis la recommandation HTML5.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> HTML5 </span> <span class="label label-tag"> critique </span> <span class="label label-tag"> formulaire </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/Us5Ftg" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://www.24joursdeweb.fr/2025/s-investir-dans-les-communautes-quand-on-n-ose-pas">S’investir dans les communautés quand on n’ose pas — 24 jours de web</a> </div> <div class="daily-entry-description"><div class="markdown"><p>Nathalie Rosenberg partage son expérience d'intégration dans les communautés du web, notamment lors de Paris Web en 2009. Elle souligne la difficulté de s'investir quand on est timide et ne connaît personne, mais aussi l'importance des rencontres en présentiel. Elle propose des conseils pour débuter simplement, comme rejoindre des communautés en ligne (forums, Discord, etc.) en demandant des recommandations autour de soi, observer avant de participer, et partager son expérience de manière modeste. Elle encourage à prendre son temps et à adapter son rythme de participation.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> communauté </span> <span class="label label-tag"> intégration </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/EGExQA" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://www.24joursdeweb.fr/2025/title-ce-faux-ami-de-l-accessibilite">Title, ce faux ami de l’accessibilité — 24 jours de web</a> </div> <div class="daily-entry-description"><div class="markdown"><p>L'article revient sur l'utilisation souvent abusive de l'attribut HTML <code>title</code>, qui sert à afficher des infobulles ou à fournir un nom accessible aux éléments interactifs. Malgré les mises en garde depuis 2013, cet attribut est encore mal employé, posant des problèmes d'accessibilité. Les infobulles sont cachées et nécessitent une interaction précise, ce qui les rend peu intuitives et frustrantes pour les utilisateurs. L'article souligne l'importance de répéter les bonnes pratiques pour ancrer une utilisation correcte de l'attribut <code>title</code>.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> accessibilité </span> <span class="label label-tag"> bonnes-pratiques </span> <span class="label label-tag"> title </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/kd_iSA" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://networkpulse.fr/comment-nettoyer-les-anciens-noyaux-debian/">/boot plein sur Debian : Comment nettoyer les anciens noyaux</a> </div> <div class="daily-entry-description"><div class="markdown"><p>Sur Debian, le répertoire <strong>/boot</strong> peut rapidement se remplir à force d’accumuler des anciens noyaux, ce qui peut poser des problèmes lors des mises à jour ou manquer d’espace disque. Cet article explique de manière claire et pratique <strong>comment identifier et supprimer les anciens noyaux Debian</strong> en toute sécurité, via des commandes simples ou avec des outils comme <code>apt</code> et <code>dpkg</code>, afin de libérer de l’espace dans <code>/boot</code>. Une ressource utile pour garder son système propre et éviter les erreurs liées à un /boot saturé.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> boot </span> <span class="label label-tag"> debian </span> <span class="label label-tag"> ubuntu </span> <span class="label label-tag"> noyau </span> <span class="label label-tag"> administration-système </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/zRIR0w" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://ashallendesign-uk.medium.com/the-never-type-in-php-1c2c97ff47e8">The “never” Type in PHP | by Ash Allen | Medium</a> </div> <div class="daily-entry-description"><div class="markdown"><p>L'article explique l'utilisation du type "never" introduit en PHP 8.1, qui indique qu'une fonction ne retournera jamais de valeur, soit en lançant une exception, soit en appelant exit ou die. Ce type ne peut être utilisé que comme type de retour et ne peut pas être combiné avec des types d'intersection ou d'union. L'auteur illustre son propos avec des exemples pratiques et met en garde contre les erreurs fatales si une fonction marquée "never" retourne implicitement ou explicitement une valeur.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> php </span> <span class="label label-tag"> type </span> <span class="label label-tag"> never </span> <span class="label label-tag"> guide </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/xuQDiQ" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://htmhell.dev/adventcalendar/2025/16/">Giving pages a clear shape by using headings - HTMHell</a> </div> <div class="daily-entry-description"><div class="markdown"><p>Cet article explique comment utiliser les titres pour structurer clairement une page web, améliorant ainsi la compréhension pour tous les utilisateurs, y compris ceux utilisant des technologies d'assistance. L'article aborde trois problèmes courants : utiliser des titres pour du texte non structurel, ne pas utiliser de titres pour du texte structurel, et un ordre de titres incohérent. Les solutions proposées incluent l'utilisation appropriée de HTML et CSS pour garantir une sémantique et une hiérarchie correctes des titres.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> hiérarchie </span> <span class="label label-tag"> html </span> <span class="label label-tag"> sémantique </span> <span class="label label-tag"> bonnes-pratiques </span> <span class="label label-tag"> accessibilité </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/cEjhAQ" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://htmhell.dev/adventcalendar/2025/14/">The Wonderful World of Web Feeds - HTMHell</a> </div> <div class="daily-entry-description"><div class="markdown"><p>Cet article explique que les web feeds, souvent appelés "RSS", permettent de syndiquer du contenu web via des formats comme RSS, Atom ou JSON. Les feeds sont utilisés par des lecteurs de flux pour agrégater et présenter le contenu de manière lisible. L'article souligne également l'importance de l'autodécouverte des flux, qui permet aux utilisateurs d'ajouter facilement des sites à leur lecteur de flux sans connaître les détails techniques. Un exemple de mise en œuvre de l'autodécouverte est fourni.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> atom </span> <span class="label label-tag"> json </span> <span class="label label-tag"> rss </span> <span class="label label-tag"> flux </span> <span class="label label-tag"> agrégat </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/PgRxXQ" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://eventuallycoding.com/2025/12/ai-impact-2025">Impacts concrets de l'IA sur les Boîtes Tech et Agences en 2025</a> </div> <div class="daily-entry-description"><div class="markdown"><p>Hugo Lassiège y explore les impacts concrets de l’IA sur les agences tech et PME en 2025, à travers des retours de CTO et responsables. L’IA a révolutionné leur fonctionnement : <strong>facturation à la valeur plutôt qu’au temps</strong>, réduction des risques, mais aussi <strong>goulots d’étranglement côté clients</strong> et <strong>difficulté à recruter des juniors</strong>, faute de recul suffisant pour collaborer avec ces outils. Son adoption divise : entre <strong>contraintes écologiques</strong> (l’IA consomme moins qu’un humain pour une tâche équivalente), <strong>perte de sens</strong> pour certains développeurs, et <strong>pression performance</strong> pour ceux qui la rejettent. Malgré les craintes d’une bulle (comparée à l’éclatement de 2000), l’IA semble durable, notamment dans la niche du développement. Enfin, son omniprésence dans les discours et pitchs commence à lasser, créant un paradoxe entre nécessité et saturation. Un état des lieux terrain, entre opportunités et défis humains.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> intelligence-artificielle </span> <span class="label label-tag"> réflexion </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/VCkPtw" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://www.geeek.org/abuseipdb-cloudflare/">Signaler les IP malveillantes détectées par Cloudflare à AbuseIPDB</a> </div> <div class="daily-entry-description"><div class="markdown"><p>Ce tutoriel explique comment signaler les IP malveillantes détectées par Cloudflare à AbuseIPDB en utilisant un script Python. L'auteur décrit comment récupérer les données du pare-feu Cloudflare via une API GraphQL, analyser les événements par adresse IP, vérifier leur statut sur AbuseIPDB et les signaler. Le script, d'environ 700 lignes, utilise GitHub Copilot et nécessite des tokens API pour Cloudflare et AbuseIPDB. Il permet de générer des rapports d'analyse et de dénoncer automatiquement les IP malveillantes.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> AbuseIPDB </span> <span class="label label-tag"> Cloudflare </span> <span class="label label-tag"> script </span> <span class="label label-tag"> sécurité </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/n92vxA" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://laravel-france.com/posts/clean-architecture-conduire-le-changement-au-sein-une-equipe">Laravel France - Clean Architecture : conduire le changement au sein d'une équipe</a> </div> <div class="daily-entry-description"><div class="markdown"><p>Cet article explore comment conduire le changement vers une Clean Architecture au sein d'une équipe de développement. Il aborde les aspects humains et organisationnels, complémentaires aux aspects techniques traités dans un précédent article. L'auteur partage son expérience en tant que lead développeur, soulignant l'importance de l'adhésion de l'équipe, de la pédagogie, et de la création d'un environnement de confiance pour réussir une telle refonte. Il insiste sur l'importance de lever les incompréhensions et d'encourager l'expérimentation pour ancrer progressivement les concepts. Un article précieux pour ceux qui souhaitent transformer une base de code existante en un terrain d'apprentissage collectif autour de la Clean Architecture.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> clean-architecture </span> <span class="label label-tag"> transformation </span> <span class="label label-tag"> refonte </span> <span class="label label-tag"> guide </span> <span class="label label-tag"> bonnes-pratiques </span> </div> <div class="dailyEntryFooter clear"> </div> </div> <div class="daily-entry"> <div class="daily-entry-title center"> <a href="/liens/shaare/9HnMvQ" title="Permalien"> <i class="fa fa-link"></i> </a> <a href="https://terriblesoftware.org/2025/11/25/what-actually-makes-you-senior/">What Actually Makes You Senior – Terrible Software</a> </div> <div class="daily-entry-description"><div class="markdown"><p>Cet article explore ce qui distingue réellement un ingénieur senior des autres. Au-delà des compétences techniques et des années d'expérience, la capacité à réduire l'ambiguïté est la clé. Les ingénieurs seniors excellent dans la transformation de problèmes flous en projets concrets, en posant les bonnes questions, en identifiant les priorités et en anticipant les risques. Cette compétence est cruciale pour le succès des projets et justifie souvent leur salaire. Malheureusement, les processus de recrutement actuels, axés sur les technologies et les exercices techniques, ne mesurent pas toujours cette aptitude. L'article encourage les ingénieurs à pratiquer cette compétence en prenant en charge les tickets vagues et en clarifiant les problèmes avant de les résoudre.</p></div></div> <div class="daily-entry-tags center"> <span class="label label-tag"> ingénieur </span> <span class="label label-tag"> compétence </span> <span class="label label-tag"> conception </span> </div> <div class="dailyEntryFooter clear"> </div> </div> </div> </div> <div class="clear"></div> <div id="plugin_zone_end_picwall" class="plugin_zone"> </div> </div> </div> </main> <div class="pure-g"> <div class="pure-u-2-24"></div> <footer id="footer" class="pure-u-20-24 footer-container" role="contentinfo"> <i class="fa fa-shaarli" aria-hidden="true"></i> <strong><a href="https://github.com/shaarli/Shaarli">Shaarli</a></strong> · Le gestionnaire de marque-pages personnel, minimaliste, et sans base de données par la communauté Shaarli · <a href="/liens/doc/html/index.html" rel="nofollow">Documentation</a> </footer> <div class="pure-u-2-24"></div> </div> <div id="js-translations" class="hidden" aria-hidden="true"> <span id="translation-fold">Replier</span> <span id="translation-fold-all">Replier tout</span> <span id="translation-expand">Déplier</span> <span id="translation-expand-all">Déplier tout</span> <span id="translation-delete-link">Êtes-vous sûr de vouloir supprimer ce lien ?</span> <span id="translation-delete-tag">Êtes-vous sûr de vouloir supprimer ce tag ?</span> <span id="translation-shaarli-desc"> Le gestionnaire de marque-pages personnel, minimaliste, et sans base de données par la communauté Shaarli </span> </div> <input type="hidden" name="js_base_path" value="/liens" /> <input type="hidden" name="token" value="f3815df7bb2e5b0a252be955b1e3d313f987c11f" id="token" /> <input type="hidden" name="tags_separator" value=" " id="tags_separator" /> <script src="/liens/tpl/default/js/shaarli.min.js?v=8ba283f85e9a4dc050ce550fb96a14315538546b28852cf4bd5372ee6fdd7f20"></script> <script src="/liens/tpl/default/js/thumbnails.min.js?v=8ba283f85e9a4dc050ce550fb96a14315538546b28852cf4bd5372ee6fdd7f20"></script> </body> </html>