Ce tutoriel explique l’utilité des pseudo-classes fonctionnelles en CSS pour cibler des éléments de manière plus efficace et lisible :
-
:is()
: Permet de regrouper plusieurs sélecteurs (logique OU) pour appliquer les mêmes styles, réduisant la redondance.
Exemple ::is(h1, h2, h3) { color: [#333](https://raphael.salique.fr/liens/./add-tag/333); }
-
:not()
: Exclut un élément d’une sélection, utile pour appliquer des styles à tous sauf à quelques exceptions.
Exemple :li:not(:last-child) { border-bottom: 1px solid [#ccc](https://raphael.salique.fr/liens/./add-tag/ccc); }
-
:where()
: Similaire à:is()
, mais avec une spécificité nulle, idéal pour des styles de base facilement surchargeables.
Exemple ::where(header, main, footer) { margin: 1rem 0; }
-
:has()
: Cible un élément parent en fonction de ses descendants, une nouveauté puissante pour des sélections contextuelles.
Exemple :article:has(img) { border: 2px solid red; }
Ces sélecteurs améliorent la concision et la maintenabilité du code CSS.
Se motiver pour une tâche pénible ? (Ashley Janssen)
L’auteure compare cela à son vélo d’appartement détesté : on redoute avant, on est soulagé·e après. Ses astuces :
- Identifier le blocage (fatigue, peur, ennui) et agir dessus.
- Rendre la tâche moins désagréable : musique, récompense.
- Démarrer petit : 5 minutes suffisent souvent à lancer l’élan.
- Routine > motivation : planifier plutôt qu’attendre l’envie.
"La clé ? Commencer, même mal. Le reste suit."
Dans cet article, Andy Clarke explore le concept d’animations ambiantes : des mouvements subtils et lents qui apportent de la vie à un design sans distraire l’utilisateur. Contrairement aux animations interactives ou narratives, les animations ambiantes se fondent dans l’arrière-plan, créant une atmosphère discrète mais immersive. Clarke illustre son propos en transformant une couverture de comic book statique en une animation CSS/SVG où les éléments (plumes, fumée, expressions) s’animent de manière naturelle et presque imperceptible. L’objectif ? Renforcer la personnalité d’une marque ou d’un projet sans nuire à l’expérience utilisateur, en privilégiant des transitions douces, des boucles fluides et une approche minimaliste.
L’auteur partage des conseils pratiques : privilégier les éléments qui bougeraient naturellement (feuilles, fumée, ombres), éviter les mouvements brusques, et respecter les préférences utilisateur (comme le mode prefers-reduced-motion
). Il insiste sur l’importance de la modération et de la performance, en utilisant des SVG bien structurés et du CSS optimisé. Un exemple concret et un démo CodePen accompagnent l’article, montrant comment ces micro-interactions, bien dosées, ajoutent de la profondeur et du charme à un design.
Josh W. Comeau analyse la nouvelle règle CSS @starting-style
, qui permet d’utiliser des transitions pour animer l’apparition d’éléments (ex: fondu, déplacement), là où on utilisait avant des @keyframes
.
Le piège :
Contrairement aux @keyframes
, les styles définis dans @starting-style
ne sont pas prioritaires et peuvent être écrasés par des sélecteurs plus spécifiques (ID, styles inline). Résultat : l’animation ne se déclenche pas.
Exemple :
Un bouton génère des particules avec une transition sur transform
. Si la position finale est définie en JavaScript (style inline), @starting-style
est ignoré.
Solutions :
- Forcer avec
!important
(peu maintenable), - Utiliser des variables CSS pour égaliser la spécificité,
- Revenir aux
@keyframes
, plus simples et compatibles.
Verdict :
@starting-style
est pratique, mais les @keyframes
restent souvent plus fiables.
Une liste de sites sur lesquels acheter de la musique en haute qualité
L’IA excelle dans les tâches complexes et calculatoires (résoudre des équations, analyser des données), mais peine sur ce qui nous semble intuitif : reconnaître une ironie, plier une chemise, ou gérer l’imprévu. Ce paradoxe, identifié par Hans Moravec dès 1980, s’observe aujourd’hui dans l’automatisation du travail :
- Les métiers cognitifs routiniers (juristes juniors, traducteurs) sont menacés par l’IA, qui prend en charge les tâches répétitives.
- Les métiers manuels et relationnels (artisans, soignants, éducateurs) résistent, car ils reposent sur l’intuition, la motricité fine et le lien humain.
L’enjeu n’est pas de craindre l’IA, mais de l’utiliser comme une prothèse cognitive : automatiser le répétitif pour se recentrer sur la créativité, l’accompagnement et le sens. La vraie valeur du travail humain se déplace vers ce que les machines ne savent pas faire : interpréter, improviser, créer du lien.
Chaque modèle d’IA a ses spécificités : format préféré (XML pour Claude, Markdown pour GPT), sensibilité à la position des informations (les modèles retiennent mieux le début et la fin d’un texte), et une « personnalité » propre (prudence, concision, etc.). Plutôt que de forcer un modèle à sortir de ses biais, mieux vaut adapter ses prompts à ses particularités. Une approche qui optimise performance, coût et conformité, et transforme l’interaction avec l’IA en un véritable artisanat.
Ce guide explique comment monter une partition Windows chiffrée avec BitLocker sous Linux, en utilisant Dislocker ou Cryptsetup. Idéal pour les dual-boot ou la récupération de données.
🔹 Outils : dislocker
, cryptsetup
, ntfs-3g
🔹 Astuce : Désactiver le Fast Startup de Windows pour éviter les problèmes.
🔹 Alternative : Utiliser cryptsetup
(depuis la v2.3.0) si Dislocker pose problème.
Une adaptation des concepts du Clean Code en PHP
Problème : Traiter une vidéo en synchrone bloque l’utilisateur et le serveur.
Solution : Découper la vidéo en chunks, traiter chaque morceau en parallèle via des workers Symfony Messenger (RabbitMQ, Redis).
Étapes clés :
- Upload → Envoi d’un message
ProcessVideoMessage
. - Découpage en chunks → Messages
ProcessVideoChunkMessage
traités par des workers. - Recomposition finale avec FFmpeg une fois tous les chunks prêts.
Avantages :
✅ Expérience utilisateur fluide (pas d’attente).
✅ Scalable (ajoutez des workers).
✅ Architecture modulaire et tolérante aux pannes.
L’article détaille la mise en place d’un pipeline GitLab CI pour un projet Symfony, avec les étapes clés suivantes :
-
Automatisation des tests (unitaires, fonctionnels) à chaque Merge Request ou push, en utilisant SQLite pour les tests (plus léger que PostgreSQL).
-
Configuration du fichier
.gitlab-ci.yml
:- Définition des stages (
build
,test
). - Utilisation d’images Docker (PHP 8.3, Node 21.7) pour exécuter les jobs.
- Installation des dépendances (Composer, npm) et exécution des tests via PHPUnit.
- Gestion des fixtures et du schéma de base de données en environnement de test.
- Build des assets front-end (Webpack Encore) avec partage des artefacts entre jobs.
- Définition des stages (
-
Blocage des merges si les tests échouent, via l’option "Pipelines must succeed" dans les paramètres de GitLab.
-
Bonus : Pistes pour aller plus loin (analyse statique avec phpstan, audit de sécurité, déploiement automatique).
NixOS et Proxmox forment un duo puissant pour créer des serveurs reproductibles, déclaratifs et atomiques :
- Déclaratif : Un seul fichier (
configuration.nix
) décrit l’état final du système. - Reproductible : Clonez vos VM à l’identique, sans "flocons de neige".
- Atomique : Mises à jour sans risque, avec rollback instantané en cas d’échec.
L’article propose un tutoriel pratique :
- Téléchargement automatisé de l’ISO NixOS.
- Création d’une VM Proxmox via
qm
, avec boot UEFI et montage de l’ISO. - Préparation à l’installation via
configuration.nix
.
Idéal pour une infrastructure propre, robuste et facile à maintenir. Une approche moderne pour dire adieu au "ça marche sur ma machine" !
Cet article explique pourquoi l’utilisation de Math.random()
pour générer des mots de passe est dangereuse (prédictibilité, absence de sécurité cryptographique) et propose une solution robuste via l’API Web Crypto et sa méthode crypto.getRandomValues()
. Cette dernière utilise des sources d’entropie cryptographiquement sécurisées, évitant les biais de distribution grâce au rejection sampling.
L’article fournit un exemple d’implémentation complète, incluant :
- Une classe
SecurePasswordGenerator
personnalisable (longueur, types de caractères, exclusion des caractères ambigus). - Une méthode pour calculer la force du mot de passe généré.
- Des bonnes pratiques : validation côté serveur, gestion mémoire, et compatibilité navigateur (HTTPS requis).
À retenir : Toujours privilégier crypto.getRandomValues()
et éviter Math.random()
pour toute application sensible. L’API est largement supportée (Chrome, Firefox, Safari) et garantit une sécurité optimale.
Découvre ce tutoriel pas à pas pour développer un assistant vocal personnalisé en Python, inspiré de Jarvis. L’article détaille comment utiliser des bibliothèques comme speech_recognition
, pyttsx3
et wikipedia
pour reconnaître la voix, répondre à des commandes et interagir avec ton ordinateur. Idéal pour automatiser des tâches ou s’initier à l’IA conversationnelle.
Ce tutoriel de ZoneTuto explique comment configurer le montage automatique d’un volume chiffré avec LUKS (Linux Unified Key Setup) au démarrage du système. Il détaille les étapes clés :
- Préparation du volume chiffré et création d’une clé de déchiffrement dédiée.
- Configuration de
/etc/crypttab
et/etc/fstab
pour un montage automatique. - Sécurisation de la clé et gestion des permissions.
Idéal pour ceux qui souhaitent allier sécurité et praticité sous Linux.
Lyra Rebane défend l’idée que beaucoup de sites n’ont pas besoin de JS ou de frameworks lourds pour offrir une expérience riche : modernes, HTML et CSS seuls suffisent souvent. L’article montre de nouveaux outils CSS (naming, nesting, pseudo-classes, color mixing, unités viewport dynamiques, etc.), des composants interactifs accessibles (via « \:checked », « \:has », « details/summary », etc.), et des effets visuels performants. L’auteur insiste aussi sur les bénéfices pour la performance, l’accessibilité, la vie privée, et le plaisir de coder léger, esthétique et fonctionnel.
Dans le cadre de son projet Foundations, l’auteur partage douze croyances qu’il a révisées après une année de recherches approfondies, combinant lecture intensive et mise en pratique. Il souligne d’abord que la valeur de la recherche réside moins dans la découverte de vérités évidentes (comme l’importance du sport ou du sommeil) que dans la capacité à trancher entre des théories plausibles ou à approfondir des sujets pour en faire une priorité durable. Parmi ses changements d’avis marquants : la primauté du cardio sur la musculation pour la santé, l’idée que la productivité découle davantage du bien-être que du stress, ou encore la risque accru des obligations par rapport aux actions sur le long terme. Il nuance aussi des idées reçues, comme la nocivité persistante des graisses saturées, la supériorité des livres papier pour la rétention, ou l’impact vital des liens sociaux sur la longévité. D’autres prises de position surprennent, comme l’efficacité des médicaments contre le TDAH (contrairement aux approches comportementales), les bienfaits d’un léger auto-illusionnement pour l’efficacité personnelle, ou l’avantage d’un désencombrement radical plutôt que progressif. Enfin, il remet en cause des dogmes comme la quête du sommeil parfait (source de contre-productivité) ou le rôle surévalué de l’empathie émotionnelle dans la morale, prônant plutôt la compassion et la raison. Ces ajustements, souvent contre-intuitifs, reflètent une approche pragmatique où la nuance l’emporte sur les certitudes, et où l’action compte autant que la connaissance.
Face à l’encombrement du Web actuel (publicités intrusives, trackers, JavaScript omniprésent, données superflues), le protocole Gopher — créé en 1991 — propose une approche radicalement simple : des menus textuels, des requêtes uniques, et une absence totale de scripts ou de cookies. Là où une recette web pèse plusieurs mégaoctets, Gopher se contente de quelques kilooctets, sans pistage ni distraction. Sans sessions ni contenu dynamique, il privilégie l’information pure et la légèreté, au prix d’une expérience dépouillée, idéale pour ceux qui recherchent efficacité et confidentialité. Porté par des communautés comme les Pubnix, Gopher reste une niche pour les amateurs de sobriété numérique, accessible via des clients dédiés (Lagrange, Bombadillo, etc.).
La multi-location (multi-tenancy) en base de données désigne une architecture où une seule instance d’application et d’infrastructure sert plusieurs clients (tenants), tout en garantissant une isolation logique de leurs données. Ce modèle, largement adopté dans le cloud, permet une meilleure scalabilité, une réduction des coûts de maintenance et une optimisation des ressources. L’article détaille quatre approches principales : base unique avec schéma partagé (simple mais risqué en cas d’oubli de filtrage par tenant), base unique avec schémas séparés (meilleure isolation mais complexité accrue), base dédiée par tenant (isolation maximale mais coûteuse en gestion), et plusieurs bases avec tenants partagés (compromis entre coût et performance). Chaque méthode présente des avantages et des inconvénients selon les besoins en sécurité, performance et maintenance
L’article présente Git Much Faster, un script open source conçu pour optimiser drastiquement les temps de clonage des dépôts Git, surtout pour les gros projets (comme Chromium ou le noyau Linux). En combinant des stratégies comme la désactivation de la compression (core.compression=0
), l’augmentation de la taille des buffers HTTP (http.postBuffer=1024M
), les clones partiels (--filter=blob:none
) et les checkouts éparses, il permet de réduire les temps de clone jusqu’à 93% et l’espace disque jusqu’à 98%, sans sacrifier l’accès au code source. Par exemple, le dépôt Chromium (60+ Go) passe de 95 minutes à 6 minutes de clonage. Le script propose aussi des benchmarks comparatifs avec Git Scalar et des configurations sur mesure pour CI/CD ou environnements distants. Idéal pour les équipes confrontées à des dépôts volumineux ou des pipelines lents, il s’installe simplement via un script bash et s’adapte à différents cas d’usage, tout en limitant les impacts sur l’historique ou la complétude des données. Une solution pragmatique pour booster la productivité et réduire les coûts d’infrastructure.