Offpunk 1.0 : un navigateur déconnecté pour le smolnet

Posté par  (site web personnel, Mastodon) . Édité par Ysabeau 🧶, ted et Benoît Sibaud. Modéré par Ysabeau 🧶. Licence CC By‑SA.
Étiquettes :
59
21
mar.
2022
Ligne de commande

Alors que sort la version audiolivre de mon roman cyberpunk Printeurs, dont il a été question sur ce site, j’ai le plaisir de vous annoncer une autre sortie très punk, la version 1.0 du logiciel Offpunk, un navigateur optimisé pour la navigation déconnectée sur le « smolnet », incluant les protocoles https, gemini, gopher et spartan.

Offpunk est un logiciel écrit en Python et utilisable entièrement en ligne de commande : il s’affiche dans un terminal et n’utilise ni souris ni raccourci clavier. Chaque action nécessite une commande. Le rendu des pages et des images se fait dans l’afficheur « less » (en utilisant chafa pour les images).

Sommaire

Smolnet, Gemini, Gopher, Spartan, kezako ?

Il n’a échappé à aucune personne intéressée par l’informatique que le web prend de l’ampleur, au point d’être souvent confondu avec Internet. Ce qui n’était au départ qu’un protocole parmi d’autres tend à devenir le réseau sur lequel il s’appuie. Ce monopole du web s’accompagne d’une surcharge des contenus. Charger une simple page web représente aujourd’hui des dizaines voire parfois des centaines de connexions et, le plus souvent, plusieurs mégaoctets de téléchargement. Beaucoup de ces données et connexions sont au détriment de l’utilisateur : les requêtes servent à le pister et l’espionner, les données téléchargées cherchent à lui afficher des publicités ou à le renvoyer vers des réseaux sociaux monopolistiques. Le tout en ralentissant sa connexion et le forçant à mettre à jour régulièrement son matériel pour faire tourner des navigateurs de plus en plus gourmands.

Face à ce constat, de plus en plus d’utilisateurs se tournent vers un minimalisme matériel, un minimalisme d’usage voire un minimalisme dans le design de leur propre site. D’autres réinvestissent le vénérable protocole Gopher, inventé un peu avant le web et qui permet d’afficher du texte brut à travers des listes de liens (les « GopherMaps »).

En 2019, le dévelopeur Solderpunk, utilisateur du réseau Gopher, s’est décidé de l’améliorer et a créé les spécifications d’un nouveau protocole : Gemini. Le nom est une référence au programme spatial Gemini qui était à peine plus compliqué que le programme Mercury (référence à Gopher) et beaucoup plus simple que le programme Apollo (symbolisant le web). Le réseau Gemini s’appuie sur un format de texte, le « Gemtext », bien plus simple que la syntaxe des menus Gopher (le Gemtext est un markdown très simplifié et optimisé pour être facile à interpréter). Gemini impose également une connexion chiffrée par SSL entre le client et le serveur. Le but de Gemini était de créer un protocole simple, sécurisé, utilisable et ne pouvant pas être étendu pour afficher des publicités ou pister les utilisateurs.

Le site officiel du protocole Gemini
Ma découverte du protocole Gemini

Accéder au réseau Gemini demande l’installation d’un client, comme Offpunk. Un client graphique populaire est Lagrange. Ceux ne pouvant installer un client peuvent utiliser un proxy sur le web. Mais je recommande bien entendu Offpunk, qui ne nécessite pas d’installation (il suffit de lancer le fichier python dans un terminal).

Le client Gemini Lagrange
Mon gemlog vu à travers un proxy web

Le succès de Gemini est de plus en plus important. Le nombre de « gemlogs » (les blogs sur Gemini) ne cesse d’augmenter et des applications originales voient le jour, voire complètement délirantes comme Astrobotany qui permet de faire pousser et de récolter des plantes virtuelles. Grâce à jpfox, il est d’ailleurs possible de lire Linuxfr sur Gemini.

gemini://astrobotany.mozz.us/
gemini://jpfox.fr/rss/linuxfr-depeches/
gemini://jpfox.fr/rss/linuxfr-journaux/

Notons également la page Antenna, qui agrège les derniers posts des gemlogs choisissant de s’annoncer sur ce service. Un autre explorateur de l’espace Gemini est Cosmos, qui liste les réponses entre les posts.

gemini://warmedal.se/~antenna/
gemini://skyjake.fi/~Cosmos/recent.gmi

On trouve également quelques francophones sur unbon.cafe et sur lanterne.chilliet.eu.

gemini://unbon.cafe/
gemini://français.lanterne.chilliet.eu/

Anecdotiquement, quelques utilisateurs de Gemini ont souhaité rendre le protocole encore plus simple en supprimant le chiffrement et en simplifiant la structure des requêtes pour créer le protocole Spartan.

gemini://spartan.mozz.us/

Avec Offpunk, mettez-vous torse-nu et tentez : go spartan://mozz.us/.

La navigation déconnectée

Alors que je préparais l’idée de passer une année essentiellement déconnectée, ne m’autorisant qu’une synchronisation de mon ordinateur avec Internet par jour, je me suis rendu compte qu’aucun outil ne me permettait de garder contact avec le réseau Gemini. J’avais Newsboat pour télécharger régulièrement mes flux RSS favoris et je pouvais envoyer, par mail, les sites que je voulais visiter au service forlater.email (un service dont le code est opensource qui renvoie le contenu d’une URL reçue par mail). Rien de similaire n’existait pour Gemini.

Le service forlater.email

Avec le protocole Gemini, Solderpunk avait développé un client minimaliste appelé AV-98, inspiré de son propre client Gopher, VF-1. Je me suis alors dit que je n’avais qu’à hacker ce logiciel assez simple pour sauvegarder sur le disque mes gemlogs préférés.

Le client AV-98

L’idée de base est assez simple : sauvegarder sur le disque chaque capsule (les sites geminis s’appellent « capsules ») visitée et utiliser le client sans connexion réseau. Si un lien suivi n’a jamais été visité auparavant, il est stocké dans une liste to_fetch.

Lorsque je me connecte pour synchroniser mes courriels et mes RSS, il me suffit de lancer un moteur de synchronisation que j’ai intégré qui va aller chercher ce qui est dans to_fetch mais également rafraichir mes gemlogs favoris.

Bien entendu, l’implémentation se révéla plus compliquée que prévu.

Jusqu’au jour où je me suis rendu compte que je ne recevais plus rien du service forlater.email. Joint par mail, le créateur me confirma une erreur qu’il corrigea quelques jours plus tard. Quelques jours que je mis à profit pour trouver une solution de rechange.

Vu que je pouvais désormais naviguer déconnecté sur Gemini, pourquoi ne pas en faire autant sur le web ? Après tout, il ne s’agissait « que » de créer un moteur de rendu HTML en console. Avec conversion des images en caractères Unicode grâce au logiciel Chafa.

L’afficheur d’images en console Chafa

Bien entendu, l’implémentation…

Je fis le choix de me concentrer sur la lecture d’article. Les pages HTML sont donc passées à la moulinette de python-readability pour en extraire le contenu pertinent. Cela rend Offpunk impropre à la navigation web sur les pages d’accueil (il est possible de court-circuiter readability en utilisant la commande « view full » ou « v full » mais le résultat est rarement joli à voir).

Mais la plupart des pages d’accueil disposent, parfois sans même le savoir, d’un flux RSS. J’ai donc ajouté le support des flux RSS dans Offpunk (« view feed »). Au point de désormais me passer de Newsboat. Un simple « subscribe » sur une page va me proposer de m’abonner aux changements de cette page ou, si détecté, au flux RSS/ATOM lié à cette page.

Les supports de Gopher et de Spartan furent ajoutés pour le fun. Je pensais que Gopher était trivial à implémenter.

Bien entendu, l’impl…

Synchronisation

Pendant la journée, Offpunk peut donc être utilisé entièrement hors-ligne (commande « offline »). Toute requête non-connue est ajoutée à la liste « to_fetch ».

La navigation se fait essentiellement à travers un « tour » car il n’y a pas d’onglets. La commande t 5 8-10 ajoute les liens 5, 8, 9 et 10 de la page courant au tour. La commande t affiche la prochaine page à lire dans le tour. t ls affiche le contenu du tour et t clear le vide.

Si vous disposez d’une version de less récente (v572+), il est même pratique d’accomplir ces tâches au milieu de la lecture d’un long article empli de liens. q pour quitter less, suivi de t 12 13 14 pour ajouter les liens et v(ou view ou l ou less) pour revenir dans less à l’endroit exact de la lecture (cela ne fonctionne malheureusement pas pour les versions plus anciennes de less). La commande open permet d’afficher le fichier en cours dans un programme externe (surtout utile pour les images ou pour ouvrir une page donnée dans un navigateur graphique).

Les pages peuvent être ajoutées dans des listes personnalisables. La commande add toread ajoute la page courante à la liste "toread" (qui doit être créée préalablement avec list create toread). Cette liste est un simple fichier au format gemtext qui peut être édité avec la commande list edit toread. Il est possible de rajouter des commentaires, des notes. La commande help list donne plus d’informations sur les possibilités.

La commande subscribe, déjà évoquée plus haut permet de s’abonner à une page ou un flux RSS (si un flux RSS est détecté, il sera proposé).

Lors d’une connexion, la commande sync permet d’effectuer une synchronisation. Au cours de celle-ci, les contenus de la liste to_fetch seront téléchargés et ajoutés au prochain tour. De même, les pages auxquelles l’utilisateur est abonné seront rafraichies. Si un nouveau lien est trouvé dans ces pages, il sera immédiatement ajouté au tour. Pour rafraichir les abonnements, la commande sync nécessite une période, en secondes. sync 3600 rafraichit toute page de plus d’une heure. Ceci est bien sûr automatisable en ligne de commande avec offpunk --sync --cache-validity 3600 (la ligne de commande permet également d’accepter les erreurs de certificat, fréquente sur Gemini, avec --assume-yes et de modifier la profondeur avec laquelle Offpunk doit pré-télécharger du contenu. Par défaut, --depth 1 est utilisé afin de télécharger les images d’une page. Une profondeur plus grande est à utiliser à vos risques et périls).

La commande help permet d’avoir un aperçu de toutes les fonctionnalités d’Offpunk. Notons le très pratique cp url pour copier l’URL de la page en cours dans le presse-papier et le fait que la commande go, sans argument, propose automatiquement d’accéder aux URLs présentes dans le presse-papier.

Offpunk est un seul et unique fichier python qui peut être lancé sans installation avec python3 offpunk.py ou ./offpunk.py. Les fonctionnalités de base fonctionnent sans dépendance particulière. La commande version vous permettra de voir les dépendances qui manquent pour activer certaines fonctionnalités. Un appel est lancé aux empaqueteurs pour rendre Offpunk disponible dans les différentes distributions.

L’un des objectifs de développement post-1.0 est de réduire ces dépendances en implémentant ce qui peut l’être directement sans trop d’effort. J’ai notamment le projet de réécrire le moteur de rendu HTML d’Offpunk pour ne plus dépendre de la libraire Ansiwrap. Bien entendu, je subodore que l’implémentation se révèlera… plus compliquée que prévu.

L’un des points importants d’Offpunk est son cache, sauvegardé dans ~/.cache/offpunk/ (ou autre suivant les variables $XDG). Ce cache ne comporte aucune base de donnée mais est le simple reflet des fichiers téléchargés. Par exemple, le contenu de https://linuxfr.org/journal/ sera dans ~/.cache/offpunk/https/linuxfr.org/journal/index.html.

Cette structure est très simple à comprendre et à manipuler. (Certains utilisateurs ont même rapporté utiliser offpunk comme une alternative à wget pour les capsules Gemini). L’utilisateur peut à sa guise effacer des fichiers si le cache prend trop de place ou utiliser le contenu du cache dans d’autres logiciels. Le principal défaut est que le mimetype annoncé par le serveur pour chaque fichier n’est pas préservé et qu’il faut donc le déduire du fichier lui-même lors de la navigation hors-ligne (ceci est fait en combinant les fonctions standards python-mime avec la librairie python-magic).

Conclusion

Alors que je pensais vivre une année vraiment déconnectée, force est de constater qu’Offpunk permet de « tricher ». Ceci étant dit, le confort apporté par Offpunk dans mon terminal configuré à mon goût rend le web traditionnel particulièrement agressif. Je saigne des yeux chaque fois que je dois lancer un véritable navigateur web sur une vraie page pleine de couleurs et de JavaScript.

Offpunk s’est également révélé très utile en voyage. Le manque de connexion n’est plus du tout un problème. Je peux passer plusieurs jours à simplement lire des contenus intéressants de ma liste toread, les trier et les relire (je crée une liste par projet, rajoutant parfois des notes dans la liste. Par exemple list edit freebsd me permet d’annoter les articles que j’ai sauvegardé sur le sujet freebsd). Offpunk ne dispose pas (encore?) d’un moteur de recherche mais quelques coups de ripgrep dans le cache me permettent de trouver des articles que j’ai lu et archivé voire, dans plusieurs cas, des informations que je n’avais jamais lues mais qui avaient été emmagasinées préemptivement. J’explore l’idée d’intégrer python-whoosh pour rechercher directement dans le cache.

À noter que la commande gus permet de faire une recherche sur le réseau Gemini à travers le moteur geminispace.info et de récolter les résultats à la prochaine connexion.

Je conseille Offpunk à celles et ceux qui veulent passer plus de temps en ligne de commande et/ou moins de temps sur leur navigateur. D’une manière générale, je conseille l’expérience d’utiliser Offpunk pendant quelques heures, quelques jours ou plus si affinités pour simplement vous interroger sur le rapport que vous avez au Web et à la connexion permanente.

Si le sujet de la déconnexion vous intéresse, je vous invite à lire mon journal de déconnexion (sept chapitres parus à ce jour). J’ai bien entendu dû noter une exception pour proposer cette news…

Aller plus loin

  • # merci

    Posté par  . Évalué à 6.

    Merci pour cette présentation: je cherchais un client gemini simple pour pouvoir visiter les liens sur lesquels je pouvais tomber sans passer par un proxy et j'ai trouvé là quelque chose de beaucoup plus grand.

    C'est tentant, mais cela demande un vrai changement de mode de consommation des sources d'information. Aujourd'hui je fonctionne principalement avec FreshRSS auto-hébergé pour récupérer mes infos en tâche de fond et également pour les lire. J'ai bien essayé de passer par newsboat, mais je n'ai pas encore trouvé un mode de restitution/navigation qui me paraisse simple, naturel et satisfaisant.

    Offpunk est une jolie alternative que je vais m'empresser de tester.

    • [^] # Re: merci

      Posté par  (site web personnel, Mastodon) . Évalué à 6.

      La technique de base avec Offpunk :

      go https://ploum.net
      subscribe
      (ici, choisir le flux préféré, souvent, c’est le numéro 2)

      Tous les matins, faire tourner :
      offpunk --sync --assume-yes --cache-validity 43200

      (43200s = 12h)

      Ensuite, dans offpunk, pour parcourir les nouvelles:

      t (ou tour)

      Tiens, le lien numéro 4 de cette nouvelle semble intéressant

      t 4

      Bon, suivant,

      t

      Tiens, la nouvelle parait intéressante à lire plus en longueur :

      add toread

      (faut d’abord créer la liste avec "list add toread" et la geler pour que les contenus ne soit pas mis à jour, au cas où un article intéressant disparait : "list freeze toread")

      t

      Tiens, à mon avis, l’article a été un peu raccourci. Il doit y avoir des commentaires. J’aimerais voir la page complète

      v full (ou view full)

      Celle là, j’aimerais l’afficher dans mon navigateur par défaut (ou le logiciel approprié en fonction du type)

      open

      Après, on peut créer une autre liste d’abonnement que celle par défaut :

      list create myrss
      list subscribe myrss

      go https://ploum.net
      v feed
      add myrss

      (à noter que toutes les listes, visible avec "list", sont des fichiers au format gemtext dans ~/.local/share/offpunk/lists/ )

      Petite astuce également : si ce qu’on a ajouté dans "toread" contient des liens vers des images, relancer la synchronisation va télécharger ces images et, si chafa est installé, elles vont s’afficher dans la page.

      Bon, maintenant, je vais lire plus en longueur :

      list toread
      1

      (ou plus rapidement)

      list toread 1

      Ok, j’ai lu, je veux supprimer de ma liste toread

      archive

      list toread 1

      Ah mais ça, c’est intéressant à garder sous le coude pour mon projet linuxfr.

      list create linuxfr
      list freeze linuxfr
      move linuxfr

      list linuxfr

      Bon, là j’ai plein de liens dans ma liste linuxfr, je veux les ordonner pour les organiser en prenant des notes.

      list edit linuxfr

      Mes livres CC By-SA : https://ploum.net/livres.html

  • # Gemini : un protocole read only ?

    Posté par  (site web personnel) . Évalué à 3.

    De ce que je comprends, Gemini n'a pas d'équivalent à la la requête POST. Du coup ça fait une alternative du web en mode lecture seule, ce que je vis comme une régression.

    Autant je perçois et partage l'intérêt d'avoir un navigateur qui soit plus simple qu'une machine de Turing, autant je doute que Gemini puisse prendre une place dans les usages si écrire dans Gemini signifie « héberger son serveur ». Ok on peut peut être poster via html, xmpp ou smtp mais ce genre de technique stratifie l'usine à gaz et pose parfois des soucis supplémentaires.

    Adhérer à l'April, ça vous tente ?

    • [^] # Re: Gemini : un protocole read only ?

      Posté par  . Évalué à 1.

      Le site gemini://astrobotany.mozz.us/ réagit aux inputs utilisateurs en utilisant un certificat. Ça a l'air d'être possible d'implémenter une messagerie. Je dirais que ce n'est pas "just read-only"

    • [^] # Re: Gemini : un protocole read only ?

      Posté par  (site web personnel, Mastodon) . Évalué à 4.

      1. Il y’a une équivalent Gemini à la requête POST. Pas mal de capsules implémentent même les commentaires comme sur des blogs traditionnels.
      2. Elle n’est pas implémentée dans Offpunk (dur de développer cela offline mais faudrait que je le fasse. Faudrait que j’aie un bon site de test pour cela).
      3. "HTML peut faire X mais Gemini ne le peut pas". Oui. C’est justement l’objectif du protocole Gemini. It’s a feature, not a bug.

      Mes livres CC By-SA : https://ploum.net/livres.html

    • [^] # Re: Gemini : un protocole read only ?

      Posté par  (Mastodon) . Évalué à 4. Dernière modification le 22 mars 2022 à 09:27.

      En même temps limiter l'interaction et les commentaires permet aussi de limiter la procrastination et avoir un meilleur rapport signal/bruit.

      C'est devenu trop facile de donner son avis sur tout. Si recevoir des retours est une bonne idée, on en est arrivé à un point où une grande majorité de personnes donnent maintenant leur avis sans lire les articles associés ou alors en diagonale.

      Du coup oui mettre une barrière d'entrée, le fait de devoir héberger ses pensées/avis et ou de contacter de manière asynchrone l'auteur de l'article permet de manière totalement arbitraire de limiter le bruit. Accessoirement il existe déjà des capsules qui servent d'hébergement gratuit.

  • # version 1.1

    Posté par  (site web personnel, Mastodon) . Évalué à 5.

    À noter entre temps que le fait de sortir une version 1.0 a élargi ma base de test et que, dans certaines configurations, la 1.0 crashait. C’est fixé avec la 1.1:
    https://tildegit.org/ploum/AV-98-offline/tags

    Les rapports de bugs sont bienvenus sur offpunk@gemini.eu (dans la version de développement, le moteur de rendu HTML a été complètement réécrit pour ne plus dépendre de la librairie ansiwrap. C’est plus beau, plus rapide mais beaucoup moins testé. À noter que pour un meilleur rendu des images, chafa > 1.8 et le terminal kitty sont conseillés).

    Mes livres CC By-SA : https://ploum.net/livres.html

  • # BBS ?

    Posté par  . Évalué à 5.

    Bonjour,

    J'ai lu avec intérêt et le principe me fait fortement penser aux BBS.

    Navigation dans les threads d'un BBS sans connexion à celui-ci (offline).
    Récupération des messages / envoi des siens (online 5mn par jour).
    Et on recommence …

    C'est intéressant également pour faire passer des discussions même à travers une ligne ADSL de faible capacité (avec les BBS on s'en sortait à 3ko/s, alors une ligne ADSL !)

    Merci pour le POST :)

    Discussions en français sur la création de jeux videos : IRC libera / #gamedev-fr

  • # Liens morts.

    Posté par  (site web personnel) . Évalué à 2.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.