Articles pour développeurs

Explications sur les formats d'encodage, le travail avec JSON et d'autres sujets utiles aux développeurs, avec des liens vers les outils en ligne tulzy correspondants.

Encodage

Base64 : à quoi sert l'encodage et comment il fonctionne

Comment Base64 transforme des données binaires en texte ASCII, et quand c'est réellement utile.

Base32 : en quoi il diffère de Base64 et quand il est plus pratique

L'alphabet de Base32, insensible à la casse, et les cas où il est plus pratique que Base64.

URL Encode/Decode : le percent-encoding dans les liens

Comment les caractères spéciaux d'une URL et de ses paramètres deviennent des séquences %XX.

HTML Entities : afficher des caractères spéciaux en toute sécurité

Pourquoi les caractères < > & doivent être échappés, et comment cela évite de casser le balisage.

JWT : structure du token et ce que signifie « décoder » un JWT

Le header, le payload et la signature d'un JWT, et pourquoi décoder n'est pas la même chose que vérifier la signature.

Unicode Escape : que signifient les séquences \uXXXX

D'où viennent les séquences du type \u0041 dans le JSON et les chaînes JS, et ce qu'elles signifient.

ROT13 et le chiffre de César : une simple substitution de caractères

Pourquoi un décalage de 13 lettres rend ROT13 auto-inverse, et pourquoi on l'utilise encore aujourd'hui.

Punycode : comment les domaines internationalisés fonctionnent dans le DNS

Comment un domaine avec des caractères non latins devient une forme ASCII avec le préfixe xn--.

Le morse : comment le texte devient des points et des traits

Le principe de l'encodage des lettres en points et traits, et où le morse est encore utilisé aujourd'hui.

Data URI : quand intégrer une image directement dans le code

Comment un Data URI intègre le contenu d'un fichier directement en HTML ou CSS, et quand cela en vaut la peine.

Gzip + Base64 : compresser des données pour les transmettre en texte

Pourquoi des données binaires compressées sont aussi encodées en Base64 avant d'être placées dans un champ texte.

XML Entities : échapper les caractères dans les documents XML

Les cinq entités XML obligatoires, sans lesquelles le document se casse à l'analyse.

JSON

JSON Formatter : mise en forme, minification et validation

Mise en forme pour la lisibilité, minification pour la taille, validation pour la correction : trois tâches JSON différentes.

JSONPath : interroger des données JSON sans les parcourir à la main

Comment JSONPath permet d'extraire les valeurs voulues d'un gros JSON en une seule expression, sans parcours manuel.

JSON Diff : en quoi la comparaison structurelle diffère de la comparaison textuelle

Pourquoi l'ordre des clés ne devrait pas affecter la comparaison de deux documents JSON.

JSON Schema : décrire et valider la structure d'un JSON

Comment JSON Schema permet de vérifier automatiquement si des données respectent un contrat attendu.

JSON Flatten : transformer une structure imbriquée en liste plate

Comment un JSON profondément imbriqué devient une liste plate de clés comme user.address.city.

JSON Sort Keys : pourquoi trier les clés d'un objet

Pourquoi l'ordre des clés JSON n'est pas spécifié, mais reste utile à trier en pratique.

JSON Repair : pourquoi le JSON casse et comment le réparer

Les causes courantes de JSON « cassé », et ce qu'une réparation automatique peut ou ne peut pas corriger.

Mock JSON Generator : à quoi servent les fausses données

Comment des données fictives permettent de commencer à construire une interface avant que le backend soit prêt.

JSON ↔ YAML/CSV/XML/TOML : quand et pourquoi convertir

Quelles données se perdent en convertissant du JSON en CSV, et pourquoi YAML et TOML sont populaires pour les fichiers de configuration.

Texte

Case Converter : pourquoi il existe différents styles de nommage

Pourquoi un même projet écrit les variables en camelCase mais les fichiers en kebab-case, et d'où viennent ces règles.

Text Diff : comment les algorithmes trouvent la différence entre deux textes

Comment un algorithme de diff trouve l'ensemble minimal de changements entre deux versions d'un texte.

Expressions régulières : syntaxe de base et motifs courants

Comment lire une expression régulière, et en quoi la correspondance gourmande diffère de la paresseuse.

Trier et dédupliquer des lignes : pourquoi c'est utile

Pourquoi un tri numérique plaçant « 10 » avant « 9 » est une erreur, et comment l'éviter.

String Escape : pourquoi le même texte doit être échappé différemment

Pourquoi le même guillemet s'échappe différemment dans une chaîne JS, du JSON et une commande shell.

CRLF contre LF : pourquoi les caractères de fin de ligne comptent encore

Pourquoi un fichier écrit sous Windows peut apparaître « entièrement modifié » dans git sous Linux.

Compter les caractères et les mots : pourquoi ce n'est pas toujours trivial

Pourquoi un emoji ou une lettre accentuée peut compter comme plusieurs caractères à la fois.

Lorem Ipsum : d'où vient ce texte de remplissage et à quoi il sert

Pourquoi les designers utilisent délibérément un texte « insensé » plutôt que du vrai contenu dans les maquettes.

Slugify : transformer un texte quelconque en URL

Comment un titre comme « Bonjour, le Monde ! » devient une chaîne compatible URL comme bonjour-le-monde.

Markdown : pourquoi une syntaxe texte simple a supplanté les éditeurs riches

Pourquoi les développeurs préfèrent écrire la documentation en Markdown plutôt que dans un éditeur de texte riche.

Espaces et caractères invisibles : la cause cachée de bugs étranges

Pourquoi deux chaînes qui semblent identiques peuvent ne pas correspondre à cause d'un caractère invisible.

Text Reverse : pourquoi « inverser un texte » est plus dur qu'il n'y paraît

Pourquoi une inversion naïve de chaîne peut transformer un emoji en octets inutilisables.

Analyse de fréquence de texte : pourquoi compter les répétitions de mots

Comment la fréquence des lettres dans un texte chiffré aide à casser les chiffrements par substitution les plus simples.

Hachage/Crypto

Hash Generator : en quoi MD5, SHA-1 et SHA-256 diffèrent

Pourquoi MD5 sert encore à vérifier l'intégrité de fichiers, mais pas pour les mots de passe.

Checksum Verifier : comment vérifier qu'un fichier n'est pas corrompu

Pourquoi une somme de contrôle correspondante confirme l'intégrité d'un fichier, mais pas qui l'a créé.

HMAC : en quoi un hachage avec clé diffère d'un hachage classique

Pourquoi un simple SHA-256 ne protège pas contre la falsification d'un message, mais HMAC oui.

Bcrypt : pourquoi les mots de passe sont hachés lentement, pas rapidement

Pourquoi un SHA-256 rapide est un mauvais choix pour les mots de passe, et un bcrypt lent le bon choix.

UUID : comment générer des identifiants qui ne se répètent presque jamais

Pourquoi un UUID v4 peut être généré indépendamment sur des millions de machines sans risque de collision.

Générateur de mots de passe : ce qui rend vraiment un mot de passe solide

Pourquoi un long mot de passe fait de mots du dictionnaire est plus solide qu'un court avec symboles et chiffres.

AES : comment fonctionne le chiffrement symétrique

Pourquoi la même clé chiffre et déchiffre les données en AES, et en quoi cela diffère du chiffrement asymétrique.

Argon2 : pourquoi cet algorithme a remporté le concours de hachage de mots de passe

Comment Argon2 se défend mieux contre les attaques par GPU que les algorithmes de hachage de mots de passe plus anciens.

Scrypt : pourquoi l'algorithme a besoin d'autant de mémoire

Pourquoi scrypt exige volontairement beaucoup de mémoire pour compliquer le cassage sur des dispositifs ASIC.

TOTP : comment fonctionnent les codes à usage unique des applications d'authentification

Pourquoi le code de Google Authenticator fonctionne sans internet et se synchronise avec le serveur uniquement via l'heure.

PBKDF2 : le plus ancien standard d'étirement de clé

Pourquoi le nombre d'itérations recommandé pour PBKDF2 augmente chaque année.

X.509 : ce qu'il y a à l'intérieur d'un certificat SSL

Ce que le navigateur vérifie exactement dans le certificat d'un site avant d'afficher le cadenas vert.

PGP : comment fonctionne le chiffrement à clé publique et privée

Pourquoi on peut partager librement une clé publique PGP, mais jamais la clé privée.

Temps/Nombres

Temps Unix : pourquoi les ordinateurs comptent le temps depuis 1970

Pourquoi le 1er janvier 1970 est devenu le point de référence du temps pour la plupart des systèmes informatiques.

Expressions cron : comment déchiffrer un horaire de tâches

Comment déchiffrer une expression comme */15 * * * * et savoir exactement quand la tâche s'exécutera.

Systèmes numériques : à quoi servent le binaire, l'octal et l'hexadécimal

Pourquoi la couleur #FF5733 en CSS est écrite avec des chiffres hexadécimaux plutôt que décimaux.

Opérations bit à bit : comment fonctionnent AND, OR et XOR au niveau des bits

En quoi le AND bit à bit diffère du AND logique, et pourquoi manipuler des bits individuels d'un nombre.

Différence entre dates : pourquoi compter les jours est plus compliqué qu'il n'y paraît

Pourquoi soustraire naïvement deux dates peut donner un résultat incorrect à cause des années bissextiles.

Calcul de l'âge : pourquoi ce n'est pas une simple soustraction d'années

Pourquoi soustraire simplement les années de naissance peut donner un âge supérieur d'un an à l'âge réel.

Fuseaux horaires : pourquoi UTC n'est pas la même chose que GMT

Pourquoi UTC ne change jamais deux fois par an, alors que l'heure de Londres (GMT/BST) change.

Calculatrice de durée : comment additionner correctement heures, minutes et secondes

Pourquoi additionner des minutes et des secondes nécessite de « reporter » le reste sur le rang suivant, comme dans l'addition décimale.

ISO 8601 Duration : comment écrire une durée dans un format standard

Pourquoi PT1H30M signifie « 1 heure 30 minutes », et non « 1 minute 30 heures ».

Numéro de semaine : pourquoi les pays comptent les semaines différemment

Pourquoi le 1er janvier appartient parfois à la semaine 52 ou 53 de l'année précédente selon la norme ISO 8601.

Chiffres romains : comment fonctionne un système sans zéro ni position

Pourquoi IV signifie 4 et non 6, et comment fonctionne la règle de soustraction dans les chiffres romains.

IEEE 754 : pourquoi 0.1 + 0.2 n'est pas égal à 0.3 dans le code

Pourquoi presque tous les langages de programmation affichent 0.30000000000000004 pour 0.1 + 0.2.

Nombre en toutes lettres : pourquoi transformer des chiffres en mots

Pourquoi les documents bancaires écrivent un montant à la fois en chiffres et en toutes lettres.

Développement Web

HEX, RGB, HSL : pourquoi existe-t-il autant de façons d'écrire une couleur

Pourquoi les designers préfèrent souvent HSL à HEX pour choisir une teinte de couleur à la main.

Minification CSS : ce qui est vraiment supprimé du fichier, et pourquoi

Pourquoi un CSS minifié se comporte exactement pareil dans le navigateur, même s'il devient illisible pour un humain.

Minification JavaScript : la différence entre minifier et obfusquer

Pourquoi le code minifié reste lisible si on le souhaite, contrairement au code obfusqué.

Minification HTML : pourquoi les espaces dans le balisage comptent

Pourquoi retirer les espaces dans <pre> ou un textarea peut casser l'apparence de la page, contrairement à presque partout ailleurs.

Dégradés CSS : en quoi linear diffère de radial et conic

Pourquoi conic-gradient convient aux graphiques circulaires alors que radial-gradient donne un effet de tache de lumière.

L'algorithme de Luhn : comment on vérifie la validité d'un numéro de carte

Pourquoi un numéro de carte qui passe la vérification de Luhn ne signifie pas que cette carte existe vraiment.

IBAN : comment est structuré un numéro de compte bancaire international

Pourquoi les deux premières lettres d'un IBAN sont un code pays, et non une partie du numéro de compte.

Codes QR : comment un lien tient dans un carré de pixels

Pourquoi un code QR avec un logo au centre se scanne encore, même si une partie du motif est masquée.

Codes-barres : en quoi Code 128 diffère de l'EAN-13

Pourquoi les produits en magasin utilisent presque toujours l'EAN-13 plutôt que le Code 128.

Images placeholder : pourquoi les fausses images comptent pendant le développement

Pourquoi les développeurs insèrent délibérément des rectangles gris à la place de vraies photos pendant qu'une maquette est encore en construction.