Deblan blog

Simon Vieille

DevOp animé par la culture du libre et du hacking

Analyser efficacement un fichier CSV

Je travaille régulièrement sur des traitements de fichiers CSV. J'apprécie beaucoup ce format de fichier car il se génère et se lit facilement, qu'on soit informaticien ou non. J'ai d'ailleur écrit 2 librairies PHP pour lire, générer et valider des CSV : deblan/csv et deblan/csv-validator.

Lors des mes analyses, je me confronte parfois à des fichiers qui comportent beaucoup de colonnes et c'est un enfer d'utiliser un tableur pour visualiser et filtrer ces tableaux très larges.

Après quelques recherches, j'ai découvert deux projets qui se complètent à merveille ! Le premier est un outil qui transforme un fichier CSV en une base de données SQLite : csvs-to-sqlite. Le second génère une interface web (avec un serveur web intégré) pour faire des requêtes SQL sur une base de données SQLite : datasette.

Ce sont des outils écrits en Python qui s'installent et s'utilisent en une poignée de secondes.

$ sudo pip3 install csvs-to-sqlite datasette

Pour illustrer, je vais traiter le fichier CSV de la base officielle des codes postaux disponible sur data.gouv.fr.

$ wget -O code_postaux.csv https://datanova.legroupe.laposte.fr/explore/dataset/laposte_hexasmal/download/\?format\=csv\&timezone\=Europe/Berlin\&use_labels_for_header\=true
$ csvs-to-sqlite -s ";" codes_postaux.csv codes_postaux.db
$ datasette serve codes_postaux.db
Serve! files=('codes_postaux.db',) (immutables=()) on port 8001
INFO:     Started server process [8550]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8001 (Press CTRL+C to quit)

On peut maintenant accéder à http://127.0.0.1:8001 depuis un navigateur et commencer à analyer et traiter les données :

datasette

Et le plus intéressant pour moi, c'est de pouvoir écrire des requêtes SQL affiner vraiment les données affichées :

datasette

Enfin, on peut générer un nouveau fichier CSV (ou JSON) avec les données filtrées.

Simple, rapide et efficace !


Je suis critique pour moi-même

La semaine dernière, mon quartier a subi une coupure électrique qui a rendu inaccessible mon serveur auto-hébergé pendant 2 heures.

Il m'a fallu seulement quelques petites minutes pour me rendre compte qu'il y avait un problème et pendant tout le temps de la panne, je me suis rendu compte que la très grande majorité de mes outils étaient indisponibles :

  • Mes mails
  • Mes calendriers
  • Mon gestionnaire de tâches
  • Mes contacts téléphoniques
  • Mes fichiers et mes partages
  • Mes dépôts pour mes projets
  • Mon lecteur de flux RSS et mon instance Wallabag qui m'aide aussi à partager ma veille
  • Des outils de monitoring
  • Et encore d'autres services…

C'est pénible mais ce n'est pas insurmontable quand on sait que rien n'est cassé et que c'est juste un problème de courant. Cette une grosse centralisation de données et services que j'aurais largement critiquée dans un autre contexte. Cependant, comme tout est hébergé à la maison, ça ne me pose véritablement aucun problème et il faut accepter des coupures de temps en temps.

Je crois que c'est une étape importante qui a été franchie avec la reprise en main de toutes les données numériques qui m'appartiennent qui et ne devraient pas stockées ailleurs.

Not bad


Bilan de l’année 2019

On est arrivé en 2020 depuis plusieurs jours et j’avais envie de faire le bilan de 2019. Cette année a été assez productive du coté des logiciels libres. J’ai pu contribuer avec la réalisation de quelques projets :

J’ai également publié d’autres projets sans en parler sur mon blog :

En enfin, j’ai maintenu des projets existants comme Gist et l’outil pour s’identifier sur Office 365 (je cherche d’ailleurs des contributions pour implémenter la double authentification). Du côté de l’auto-hébergement, j’ai ajouté quelques services comme wallabag et cyberchef. Au 31 décembre, 15 services étaient proposés gratuitement avec un accès libre ou sur inscription et 36 personnes m’ont fait une demande d’accès à un service restreint (hébergement web, service mail, Nextcloud, …).

Cela fait maintenant plus de 10 ans que je m’auto-héberge et j’héberge maintenant pas mal de monde. Ça tourne super bien et je suis très content que de plus en plus de gens s'y intéressent. Je suis sollicité par des associations qui veulent d'affranchir des GAFAM et c'est bien !

Tout cela demande de l'investissement mais c’est essentiel pour ne pas laisser ses données n’importe où.

On verra comment 2020 va se passer 😉


Expiration de certificats SSL

Fin avril dernier, j'ai publié un projet qui génère un récapitulatif de la date d'expiration d'un ou plusieurs nom de domaines.

Je publie aujourd'hui une mise à jour qui intègre un outil pour avoir un récapitulatif des dates d'expirations des certificats SSL. C'est sur le même principe que pour les noms de domaines avec une uniformisation des affichages.

Pour l'installation, rien ne change si ce n'est une dépendance à openssl :

$ git clone --recurse-submodules https://gitnet.fr/deblan/domain-expiration.git
$ cd domain-expiration
$ composer install

Les commandes varient un petit peu mais rien de bien méchant. Pour tester les noms de domaines :

./check domains google.com amazon.com facebook.com apple.com microsoft.com
+---------------+------+---------------------+
| Domain        | Days | Date                |
+---------------+------+---------------------+
| apple.com     | 438  | 2021-02-20 05:00:00 |
| microsoft.com | 510  | 2021-05-03 04:00:00 |
| amazon.com    | 1787 | 2024-10-31 04:00:00 |
| facebook.com  | 3033 | 2028-03-30 04:00:00 |
| google.com    | 3201 | 2028-09-14 04:00:00 |
+---------------+------+---------------------+

Pour tester les certificats :

./check https-certificates google.com amazon.com facebook.com apple.com microsoft.com 
+---------------+------+---------------------+
| Domain        | Days | Date                |
+---------------+------+---------------------+
| google.com    | 49   | 2020-01-27 13:25:53 |
| facebook.com  | 56   | 2020-02-03 13:25:52 |
| amazon.com    | 112  | 2020-03-31 13:25:52 |
| apple.com     | 222  | 2020-07-19 13:25:52 |
| microsoft.com | 543  | 2021-06-05 13:25:50 |
+---------------+------+---------------------+

Des options peuvent être ajoutées pour modifier le retour en simplifiant le tableau, pour générer du JSON et pour ralentir le programme entre chaque test (très pratique pour récupérer les whois sans être bloqué).

C'est toujours libre et le code est disponible sur Gitnet.


Contourner les trackers de YouTube

Lors des échanges sur la protection de la vie privée et la décentralisation des données, la question de YouTube est un sujet qui fait débat. En effet, je peux créer une instance PeerTube ou en choisir une des nombreuses disponibles pour publier une vidéo mais qu'est est-il de la consultation ? Si des créateurs font le choix de déposer leurs vidéos sur plusieurs plateformes, d’autres se contentent de ne publier que sur YouTube. Dès lors, on est contraint de passer par YouTube pour accéder à ses contenus et cela implique de subir le tracking publicitaire de Google.

Invidious est un projet libre sous licence AGPLv3 qui permet ne plus charger l’interface très obèse de YouTube et par effet de bord, de ne plus charger les trackers qu’on peut y trouver. Invidious est assez complet car il permet également de gérer des comptes utilisateurs sans compte Google, de faire des recherches, de s’abonner à des chaînes et de faire l'intermédiaire entre vous et les serveurs vidéos de Google.

Invidious

Pour autant, ce n’est pas totalement suffisant car si vous consultez une page qui affiche une vidéo YouTube ou que quelqu’un vous partage un lien vers YouTube, vous allez à nouveau afficher des pages obèses et pleines de trackers. Le développeur Booteille a réalisé une extension Firefox destinée à résoudre cela. Une fois installée et activée, l’extension va automatiquement remplacer l’Iframe de YouTube par un encart Invidious et rediriger les pages YouTube vers une instance Invidious de votre choix. Voici à quoi ressemble une vidéo affichée depuis une instance Invidious.

Après plusieurs semaines d’utilisation, retourner sur le site YouTube est presque un calvaire car c’est vraiment lent. Invidious charge et affiche les contenus plus rapidement et le lecteur fait extrêmement bien son boulot. Cependant, si l’interface de YouTube vous manque un peu, vous pouvez installer le logiciel FreeTube qui reprend ses codes et permet de s’interfacer avec une instance Invidious.

FreeTube

Si vous avez envie de tester Invidious, vous pouvez accéder à l'instance officielle et les instances publiques voire de l'installer localement ou sur votre serveur.