Accueil

Ripgrep (rg) : chercher rapidement dans le code

Pour retrouver une fonction, un TODO ou une variable de configuration dans un projet, on tape souvent grep -r, qui fouille aussi .git, node_modules et tous les fichiers générés. ripgrep (commande rg) les ignore par défaut : les résultats sont plus pertinents, et ils arrivent beaucoup plus vite sur un vrai projet. Dans ce tutoriel, nous allons vo...

Plus

Python : Comment utiliser les f-strings

Depuis Python 3.6, il suffit de préfixer une chaîne par f pour y insérer des variables entre accolades : f"Bonjour {nom}". Nous allons faire le tour de ce qu’on peut mettre dans ces accolades, du simple nom de variable au formatage des nombres, des dates et des colonnes alignées.

Plus

Python : Comment envoyer des emails

Python sait envoyer des emails sans rien installer, avec les modules smtplib et email de la bibliothèque standard. Dans ce tutoriel, nous allons envoyer un email texte puis HTML, ajouter des pièces jointes, gérer les erreurs, et voir comment faire la même chose depuis une application Flask.

Plus

Optional en Java : éviter les NullPointerException

Une méthode qui renvoie null quand elle ne trouve rien oblige l’appelant à y penser, et le jour où il oublie, c’est la NullPointerException. Optional<T>, introduit en Java 8, rend cette absence visible dans le type de retour. Voyons comment créer et manipuler un Optional, et dans quels cas il vaut mieux s’en passer.

Plus

Les Sealed classes en Java

Les classes scellées (sealed classes), finalisées en Java 17, fixent la liste exacte des types qui ont le droit d’étendre une classe ou d’implémenter une interface. En échange, le compilateur peut vérifier qu’un switch traite tous les cas. Dans ce tutoriel, nous allons voir comment les déclarer et comment les combiner avec les records et le patt...

Plus

Java : Comment faire des group by

Compter des ventes par ville, additionner un chiffre d’affaires par produit, trouver la plus grosse commande de chaque client : ce sont des “group by”, comme en SQL. En Java, on peut les écrire avec une boucle et une Map, ou avec les Streams et Collectors.groupingBy, qui couvre la plupart des agrégations en une seule expression.

Plus

Records en Java : simplifier vos DTOs

Un DTO en Java, c’est souvent un constructeur, des getters, equals(), hashCode() et toString() : une trentaine de lignes pour trois champs. Les records, arrivés en preview avec Java 14 et finalisés en Java 16, génèrent tout ça à partir d’une seule ligne. Dans ce tutoriel, nous allons voir comment les écrire, les personnaliser et les utiliser ave...

Plus

Déboguer les requêtes SQL et problèmes N+1 dans Django

Le problème N+1 est l’un des pièges les plus courants avec l’ORM de Django : pour afficher une liste d’objets et leurs relations, Django exécute une requête pour la liste, puis une requête par objet. Avec 100 articles, cela fait 101 requêtes SQL là où une ou deux suffisent. Dans ce tutoriel, nous allons voir comment afficher les requêtes exécuté...

Plus

Activer les mises à jour de sécurité automatiques sur Ubuntu/Debian

Sur un serveur, un correctif de sécurité ne sert à rien tant qu’il n’est pas installé, et attendre de penser à lancer apt upgrade peut laisser une faille ouverte pendant des semaines. Ubuntu et Debian fournissent pour cela le paquet unattended-upgrades, qui installe automatiquement les mises à jour de sécurité tous les jours. Dans ce tutoriel, n...

Plus

Automatiser le nettoyage de données avec pandas

Les données qu’on récupère d’un export CSV, d’un fichier Excel ou d’une API sont rarement propres : valeurs manquantes, doublons, nombres stockés sous forme de texte, majuscules qui changent d’une ligne à l’autre. Dans ce tutoriel, nous allons voir comment repérer et corriger ces problèmes avec pandas, puis regrouper toutes les étapes dans une f...

Plus