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.
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.
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
- Offpunk, site officiel (1023 clics)
- L’annonce des deux sorties sur le blog de Ploum (238 clics)
- Offpunk v1.0 (325 clics)
- Mon journal de déconnexion (330 clics)
# merci
Posté par Anonyme . É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 ploum (site web personnel, Mastodon) . Évalué à 6.
La technique de base avec Offpunk :
Tous les matins, faire tourner :
offpunk --sync --assume-yes --cache-validity 43200
(43200s = 12h)
Ensuite, dans offpunk, pour parcourir les nouvelles:
Tiens, le lien numéro 4 de cette nouvelle semble intéressant
Bon, suivant,
Tiens, la nouvelle parait intéressante à lire plus en longueur :
(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")
Tiens, à mon avis, l’article a été un peu raccourci. Il doit y avoir des commentaires. J’aimerais voir la page complète
Celle là, j’aimerais l’afficher dans mon navigateur par défaut (ou le logiciel approprié en fonction du type)
Après, on peut créer une autre liste d’abonnement que celle par défaut :
(à 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 :
(ou plus rapidement)
Ok, j’ai lu, je veux supprimer de ma liste toread
Ah mais ça, c’est intéressant à garder sous le coude pour mon projet linuxfr.
Bon, là j’ai plein de liens dans ma liste linuxfr, je veux les ordonner pour les organiser en prenant des notes.
Mes livres CC By-SA : https://ploum.net/livres.html
# Gemini : un protocole read only ?
Posté par Pol' uX (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 bobo38 . É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 Pol' uX (site web personnel) . Évalué à 2.
Ok on peut peut être poster au moins via html, xmpp ou smtp ou TLS. :)
Adhérer à l'April, ça vous tente ?
[^] # Re: Gemini : un protocole read only ?
Posté par Stéphane Bortzmeyer (site web personnel, Mastodon) . Évalué à 5.
Ou bien le très connu forum gemini://station.martinrue.com/. Il est donc parfaitement possible d'écrire avec Gemini (même si le but n'est effectivement pas de faire 100 % de ce que fait le Web, c'est même tout le contraire).
[^] # Re: Gemini : un protocole read only ?
Posté par ploum (site web personnel, Mastodon) . Évalué à 4.
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: Gemini : un protocole read only ?
Posté par Psychofox (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.
[^] # Re: Gemini : un protocole read only ?
Posté par Pol' uX (site web personnel) . Évalué à 3.
Le POST ça ne sert pas qu'à crier « J'ai fini ! » sur touiteur après avoir fait caca. Ça sert aussi par exemple à demander un extrait d'acte de naissance.
Adhérer à l'April, ça vous tente ?
[^] # Re: Gemini : un protocole read only ?
Posté par Psychofox (Mastodon) . Évalué à 3.
Personne, pas même son auteur, n'a prétendu qu'il fallait remplacer tout le web par Gemini.
[^] # Re: Gemini : un protocole read only ?
Posté par Laurent Pointecouteau (site web personnel, Mastodon) . Évalué à 4.
Certes, mais j'imagine que parmi les utilisateurs de Gemini, nombreux sont ceux qui aimeraient aussi se passer le plus possible du Web. Il y aura toujours des débats sur la portée de la spécification (j'en avais vu passer des âpres sur Mastodon), mais de la même façon que toutes les applis jadis tendaient vers l'intégration d'un client email, il me semble que les protocoles alternatifs au web finiront par se poser la question de l'envoi de contenu. Après tout, les premiers navigateurs web permettaient de directement modifier les pages visitées, et même le Minitel permettait de discuter (n'était-ce pas devenu son usage principal ?).
[^] # Re: Gemini : un protocole read only ?
Posté par Misc (site web personnel) . Évalué à 3.
Ou à poster sur Linuxfr :)
# version 1.1
Posté par ploum (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 jseb . É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 SimonLefort (site web personnel) . Évalué à 2.
Les liens pour accéder au repo d'Offpunk sont morts car le nom du projet a changé :
https://tildegit.org/ploum/AV-98-offline/ =>
https://tildegit.org/ploum/offpunk
https://tildegit.org/ploum/AV-98-offline/releases/tag/v1.0 => https://tildegit.org/ploum/offpunk/releases/tag/v1.0
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.