Comment utiliser Hyperfine pour comparer les performances de rg et ag
Qu’est-ce que Hyperfine ?
Hyperfine est un outil en ligne de commande qui permet de mesurer et de comparer les performances d’autres commandes. Il est particulièrement utile pour évaluer la vitesse d’exécution de différentes commandes ou scripts, en fournissant des statistiques détaillées comme le temps moyen, l’écart-type, et la plage de temps d’exécution.
Présentation de rg (ripgrep)
Ripgrep, souvent abrégé en rg, est un outil de recherche de texte ultra-rapide. Il est conçu pour parcourir rapidement des fichiers et des répertoires à la recherche de motifs spécifiques. Ripgrep est connu pour sa rapidité et sa capacité à ignorer les fichiers non pertinents, comme ceux dans les répertoires .git ou node_modules.
Présentation de ag (The Silver Searcher)
The Silver Searcher, ou ag, est un autre outil de recherche de texte, similaire à ack, mais plus rapide. Il est optimisé pour la recherche dans des projets de code, en ignorant automatiquement les fichiers et répertoires non pertinents. Bien qu’il soit rapide, il est souvent surpassé par rg en termes de performances.
Comparaison des performances avec Hyperfine
Pour comparer les performances de rg et ag, nous pouvons utiliser Hyperfine avec la commande suivante :
Les résultats montrent que rg est significativement plus rapide que ag :
rg a un temps moyen d’exécution de 256.6 ms.
ag a un temps moyen d’exécution de 910.3 ms.
En résumé, rg est environ 3.55 fois plus rapide que ag dans ce scénario.
Pourquoi utiliser rg plutôt que ag ?
La comparaison effectuée avec Hyperfine démontre clairement que rg est plus performant que ag pour la recherche de texte. Si la vitesse est un critère important pour vous, rg est donc un choix évident. De plus, rg offre une meilleure gestion des fichiers ignorés et une intégration plus fluide avec les outils modernes de développement.
Automatiser le nettoyage des branches Git avec un alias : Guide pratique
Travailler avec Git implique souvent de gérer de nombreuses branches, locales et distantes. Au fil du temps, il est courant que des branches distantes soient supprimées, laissant des branches locales obsolètes. Pour simplifier le nettoyage de ces branches, vous pouvez créer un alias Git qui automatise ce processus. Dans cet article, nous vous expliquons comment faire, ainsi que les avantages et les inconvénients de cette méthode.
Créer un alias Git pour nettoyer les branches locales
Voici la commande pour créer un alias Git nommé prune-all qui nettoie automatiquement les branches locales obsolètes :
Une fois cet alias configuré, vous pouvez simplement exécuter :
git prune-all
Cette commande va :
Mettre à jour les références locales et supprimer les branches distantes supprimées (git fetch --prune).
Identifier les branches locales qui n’ont plus de branche distante associée (git branch -vv | grep ": gone]").
Extraire les noms de ces branches (sed).
Supprimer les branches locales (xargs -r git branch -d).
Pourquoi utiliser cet alias ?
Cet alias offre plusieurs avantages :
Gain de temps : Plus besoin d’exécuter manuellement plusieurs commandes pour nettoyer les branches locales.
Automatisation : Le processus est entièrement automatisé, ce qui réduit les erreurs humaines.
Propreté du dépôt : Vous gardez votre dépôt local propre et synchronisé avec le dépôt distant.
Les précautions à prendre
Bien que cet alias soit très utile, il est important de comprendre ses limites et les risques potentiels :
Utilisation de git branch -d : L’alias utilise git branch -d pour supprimer les branches locales. Cela signifie que Git refusera de supprimer une branche si elle contient des commits non fusionnés. C’est une sécurité pour éviter de perdre du travail.
Risque de suppression accidentelle : Si vous utilisez git branch -D (avec un D majuscule) à la place de -d, les branches seront supprimées de force, même si elles contiennent des commits non fusionnés. Soyez prudent si vous modifiez l’alias pour utiliser -D.
Vérification manuelle : Avant d’exécuter l’alias, il peut être utile de vérifier les branches qui seront supprimées en exécutant :
Cet alias est particulièrement utile dans les situations suivantes :
Vous travaillez sur un projet avec de nombreuses branches, et vous voulez garder votre dépôt local propre.
Vous collaborez avec une équipe et les branches distantes sont fréquemment supprimées après fusion.
Vous voulez automatiser une tâche répétitive pour gagner du temps.
Conclusion
Créer un alias Git pour nettoyer les branches locales est une excellente façon d’automatiser une tâche fastidieuse et de garder votre dépôt propre. En utilisant git branch -d, vous ajoutez une couche de sécurité pour éviter de perdre du travail non fusionné. Cependant, soyez conscient des risques si vous décidez d’utiliser git branch -D à la place.
N’hésitez pas à essayer cet alias et à l’adapter à vos besoins. Bonne gestion de branches !
Vous avez des questions ou des suggestions ? Laissez un commentaire ci-dessous !
Écran Noir (Black Screen) – Un outil simple mais utile
J’ai récemment ajouté une fonctionnalité simple mais pratique à mon site : une page « Écran Noir » accessible à l’adresse olivierpons.fr/black-screen.
Qu’est-ce que c’est ?
Il s’agit simplement d’une page web complètement noire, sans aucun élément d’interface ou contenu visible. Elle a été conçue pour afficher un écran noir pur qui occupe la totalité de votre navigateur.
À quoi ça sert ?
Cette page peut être utilisée dans plusieurs situations pratiques :
Présentations et conférences : Pour faire une pause entre deux diapositives ou temporairement masquer votre écran.
Économie d’énergie : Un écran noir consomme moins d’énergie sur les écrans OLED/AMOLED.
Réduction de la luminosité : Dans un environnement sombre, quand vous avez besoin d’une source de lumière minimale.
Tests d’affichage : Pour vérifier les fuites de lumière ou la qualité du noir sur votre écran.
Méditation ou concentration : Éliminer les distractions visuelles pendant une session de concentration.
Comment ça fonctionne ?
Techniquement, c’est une simple page HTML statique avec un fond noir qui occupe 100% de l’écran et désactive le défilement. Elle est servie directement par Nginx sans passer par WordPress.
Cette solution a été implémentée avec l’aide de Claude, l’assistant IA d’Anthropic, qui m’a guidé dans la configuration Nginx et la création du fichier HTML approprié.
N’hésitez pas à l’utiliser quand vous en avez besoin, c’est un petit outil sans prétention mais qui peut s’avérer étonnamment utile !
Comment améliorer votre terminal ZSH avec l’auto-suggestion et la coloration syntaxique
Vous utilisez ZSH comme shell par défaut mais vous souhaitez le rendre plus puissant et agréable à utiliser ? Dans cet article, nous allons voir comment installer et configurer deux plugins essentiels : zsh-autosuggestions pour l’auto-complétion intelligente et zsh-syntax-highlighting pour la coloration syntaxique en temps réel.
Prérequis
ZSH installé comme shell par défaut
Git installé sur votre système
Droits d’accès à votre répertoire personnel
Installation des plugins
Commençons par créer un dossier dédié pour nos plugins ZSH et clonons les dépôts nécessaires :
Le plugin zsh-autosuggestions vous suggère des commandes basées sur votre historique pendant que vous tapez. Pour accepter une suggestion, appuyez simplement sur la touche ➡️ (flèche droite).
Coloration syntaxique
zsh-syntax-highlighting colore vos commandes en temps réel :
Commandes valides en vert
Commandes invalides en rouge
Options et arguments en couleurs distinctes
Chemins de fichiers existants soulignés
Conclusion
Avec ces deux plugins, votre terminal ZSH devient beaucoup plus convivial et efficace. L’auto-suggestion vous fait gagner du temps en proposant les commandes pertinentes, tandis que la coloration syntaxique vous aide à repérer rapidement les erreurs de frappe.
Conseils bonus
Redémarrez votre terminal ou exécutez source ~/.zshrc pour appliquer les changements
Vous pouvez personnaliser les couleurs et le comportement des plugins en consultant leur documentation respective sur GitHub
Ces plugins sont compatibles avec la plupart des frameworks ZSH comme Oh My Zsh et Prezto
N’hésitez pas à laisser un commentaire si vous rencontrez des difficultés ou si vous souhaitez partager d’autres astuces pour améliorer votre terminal !
Comment installer Google Chrome sur Linux (Ubuntu/Debian) – Guide complet
Dans ce guide, vous découvrirez comment installer facilement Google Chrome sur votre distribution Linux (Ubuntu ou Debian) en utilisant le terminal. Suivez ces étapes simples pour une installation réussie.
Étapes d’installation détaillées
Créer le dossier pour les clés de sécurité
Cette étape permet de préparer le système pour stocker les clés de sécurité Google.
Télécharger et installer la clé Google
Nous récupérons la clé officielle de Google pour garantir l’authenticité des paquets.
Ajouter le dépôt Chrome
Configuration du dépôt officiel dans votre système pour accéder aux paquets Chrome.
Mettre à jour la liste des paquets
Actualisation de votre système avec le nouveau dépôt ajouté.
Installer Chrome
Installation finale du navigateur sur votre système.
Commandes à exécuter
Copiez et collez ces commandes une par une dans votre terminal :
GitHub et GitLab ont adopté des normes de sécurité SSH plus récentes et plus robustes pour renforcer la sécurité des connexions.
En remplacement, GitHub a introduit les clés hôtes ECDSA et Ed25519, qui sont basées sur la cryptographie à courbe elliptique, offrant ainsi de meilleures caractéristiques de sécurité pour des augmentations modestes de taille et de calcul.
Aujourd’hui, on recommande l’utilisation de clés SSH ED25519, qui sont plus sécurisées et devraient être disponibles sur n’importe quel système. Bien sûr quand on parle de système Linux on est sûr qu’elles sont déjà présentes.
Il est essentiel de générer des paires de clés SSH sûres et de les configurer correctement. Par défaut une clé de 1024 bits est générée, il faut donc impérativement changer la taille de la clé par au minimum 4096 :
f"{self.label}" utilise le mécanisme d’interpolation de chaînes de caractères de Python qui peut être légèrement plus rapide parce qu’il est optimisé pour concaténer des littéraux de chaîne et des variables ;
str(self.label) appelle explicitement le constructeur de la classe str, ce est un peu plus lent en raison de l’appel de fonction.
Numpy et Pandas n’ont pas exactement les mêmes objectifs.
Dans la plupart des cas, NumPy peut être légèrement plus rapide que pandas, car NumPy est plus bas niveau et a moins de surcharge. Cependant, pandas offre des structures de données et des fonctionnalités plus avancées, ce qui peut faciliter le travail avec des ensembles de données complexes. Les performances relatives de NumPy et pandas dépendent également des opérations spécifiques effectuées sur les données, de sorte que les différences de performances peuvent varier en fonction des tâches spécifiques. Certaines fonctions n’existent qu’avec pandas, et qui n’ont pas d’équivalents NumPy sont : read_csv, read_excel, groupby, pivot_table, merge, concat, melt, crosstab, cut, qcut, get_dummies et applymap.
Résultats
Résultat : image générée : notez bien que j’ai appelé des fonctions « bas niveau » pour qu’on voie ce que NumPy a dans le ventre et des fonctions qui n’existent que dans pandas, que ré-implémentées en Python pur + NumPy.
Code source
Voici le code source que j’ai fait, qui appelle quelques fonctions connues de NumPy et de pandas.
A rendre le dimanche 12 février 2023 minuit au plus tard
Projet individuel
Comment le rendre
Faites un fichier README.txt et déposez-le ici
Dans le fichier README.txt, précisez :
le sujet choisi
l’adresse de votre site
un nom d’utilisateur
un mot de passe
(et plusieurs nom/mot de passe, s’il y a plusieurs niveaux de droits (administrateur/visiteur etc.))
si vous avez utilisé des librairies spécifiques que je vous ai autorisées, merci de le re-préciser
Sujet
Ce que vous voulez tant que c’est dans le cadre de ce que l’on a vu. Vous avez tout le Web comme inspiration ! N’oubliez pas de me donner le nom et le mot de passe pour se connecter ! Si vous gérez des profils différents (admin / user ou autre), donnez moi les noms et mots de passe de différents profils !
Fonctionnalités obligatoires
Nouveaux modèles
Nouvelles relations à mettre en oeuvre : ForeignKey, ManyToMany, OneToOne
Au moins un formulaire
Connexion + déconnexion (vu en cours)
Visualisation de tout dans l’interface d’administration
Sujets possibles
Site de partage de photos
Site de cocktails (cf ci-dessus)
e-rated : site d’appréciations (selon des sujets, à définir)
Ask-a-question : site où l’on pose des questions sur des sujets divers, et des gens répondent
Write-a-book-together : site où l’on se connecte et où on peut écrire un livre à plusieurs
Wedding-couple-site : site où l’on uploade + partage des photos de mariage + livre de commandes
Playing-cards-collection : site où on scanne + échange des cartes (Magic the gathering)
Polls-and-surveys : site de création de sondages (= QCM, exemple très beau ici : quipoquiz)
Poems-generator : faire un cadavre exquis qui génère des poèmes + possibilité pour les utilisateurs de les noter / d’ajouter des mots
The-future-of-post-it : faire un carnet de choses à faire pour les utilisateurs, qui envoie des mails de rappels de ces choses à des dates données
Gift-ideas : un site où l’on va faire des idées de cadeaux / suggérer des idées de cadeaux + les noter (les meilleurs ressortent en premier)
Le-bon-recoin : refaire le bon coin en plus simple
Suggest-crawlers : site de suggestions : on clique sur un mot, il en suggère plein d’autres avec + définitions / liens de sites pour chacuns
Tv-fans : site de présentations + notes d’émissions télé
Faire le jeu SokoBan vu en cours, avec la possibilité de login, enregistrement. Pour les appels JSON supplémentaires, lorsque l’utilisateur choisit un tableau, s’en souvenir (= AJAX) et lorsqu’il se reconnecte, le remettre directement. Puis enregistrer son score lorsqu’il a terminé un niveau + montrer les meilleurs scores.
Pour les sujets qui suivent, ils sont possibles mais plutôt complexes et demandent plus d’investissement. Si vous êtes motivés, demandez-moi plus d’informations, je vous expliquerai les difficultés que vous allez rencontrer.
Turn-by-turn : faire un jeu multijoueurs en tour par tour (jeu de cartes, de poker, ou de plateau etc)
Chat-with-someone : site de chat/discussion
A-maze-ing : site où l’on peut se ballader dans un labyrinthe et essayer d’en trouver la sortie
Sujet imposé si vous n’avez pas d’idée
Cocktails : on se connecte, on a une liste d’éléments (récupérés en JSON) disponibles, on coche ceux qui nous intéressent, on valide, c’est envoyé, et le retour en JSON affiche les cocktails qu’il est possible de faire avec ce que l’on a coché.
Note pour ceux qui connaissent / font / du React : la librairie est autorisée, mais il me faut le code d’origine, et non pas le code minifié / de production.
Interdiction d’utiliser une librairie JavaScript qui ne vienne pas des sites autorisés précédemment
Retard
Après la date et heure limite
Passé ce délai ce sera 1 pt par 2 heures de retard (mon robot qui analyse les mails prend en compte la date de réception du mail, tout est fait automatiquement).
Pour ceux qui essaient vraiment d’aller jusqu’à la dernière minute, toute heure entamée est comptée comme une heure complète.
Exemple : un point en moins si je le reçois un jour après à la minute près, soit date limite plus 00:01 minute.
N’oubliez pas de me donner le nom et le mot de passe pour se connecter !
Copier-coller
Copie sur une autre personne (« je se savais pas comment implémenter telle ou telle fonctionnalité dont j’avais besoin pour aller plus loin, je l’ai copiée sur un autre ») :
si la personne est clairement nommée : note pour la fonctionnalité divisée par 2 (uniquement la moitié du travail a été faite) ;
0 aux deux personnes sinon ;
Si je m’aperçois que vous avez bêtement copié collé des sources Internet, je vous convoquerai pour vous demander de m’expliquer la fonctionnalité, et :
si vous ne savez pas m’expliquer le code alors 0 ;
si vous savez m’expliquer tout le code alors votre note totale sera divisée par vous + le nombre de contributeurs à ce projet, ce qui se rapprochera certainement de 0 aussi.