Ré-création de l’Annuaire Électronique sur Minitel

Après avoir remis en route mes anciens serveurs Minitel sur Apple ][ et Macintosh, l’idée d’en faire un nouveau en s’appuyant sur du soft et hard d’aujourd’hui m’a semblée assez naturelle.

Et pourquoi ne pas faire une «ré-création» d’un service emblématique ?

Un service interactif mais qui se suffirait à lui même pour démarrer et tester quelques solutions permis l’offre pléthorique actuelle en terme d’outils et matériels.

Le plus emblématique de tous est sûrement celui qui a fait rentrer le Minitel dans des millions de foyers, c’est à dire l’Annuaire Électronique !

Merci la prise péri-informatique !

Côté hardware le point de départ est bien sûr un Minitel et pour éviter les galères liées au modem (besoin d’un serveur distant avec les problèmes liés à la VOIP que j’ai constaté avec mes serveurs remis en route) profitons de cette petite prise DIN dont quasiment tous les Minitel sont dotés. Il s’agit de la prise «péri-informatique» qui, à ma connaissance, manque uniquement sur les Minitel Magis.

Cette prise est un port série mais en niveaux électriques TTL c’est à dire 5V au lieu des 12V habituels de la norme RS232.

On ne trouve plus de ports série sur nos ordinateurs depuis déjà bien des années, ils sont encore présents par contre sur des hardware plus basiques comme la famille Arduino ou Raspberry Pi.

Comme j’ai déjà fait une bidouille à base d’Arduino et de Minitel je vais plutôt viser la Raspberry et partir sur du code python qui est devenu mon langage préféré. Ceci me permet aussi de tester tout ça depuis mon laptop et permet sûrement à plus de monde de faire fonctionner ces bidouilles.

Plutôt que d’utiliser le port série d’une Raspberry, j’opte pour une solution plus universelle: un câble USB/Minitel. Il est très simple à réaliser car on trouve pour quelques euros des câbles USB-série qui fonctionnent en niveau TTL.

Il n’y a qu’un petit détail électronique, le besoin d’ajouter une résistance de 220k entre le +5V et l’émission de données du Minitel. Cette résistance on peu la loger dans la prise DIN ou dans le petit boîtier qui fait office de prise USB.

5 soudures à faire et le câble est prêt et ne revient même pas à 10€, du coup j’en fait fait une petite série avec des prises DIN bien solides !

De helloMinitelWorld.py au module “pyNitel”

Pour le tester j’écris quelques lignes de python en utilisant le module pySerial qui s’occupe de gérer un port série.

C’est mon helloMinitelWorld !

import serial
with serial.Serial(‘/dev/ttyUSB0’, 1200, parity=serial.PARITY_EVEN, bytesize=7, timeout=5) as ser:
 ser.write(b’Hello Minitel World !’)
 s = ser.read(2)
 print(s)

Comme j’envisage de ne pas m’arrêter là, gérer les échanges avec le Minitel comme les codes vidéotex pour changer de couleur ou pour gérer les saisies, l’envoi de pages, j’en fait un module python réutilisable.

En fait j’applique la même logique qu’il y a plus de 30 ans avec Cristel puis Dragster. Je m’inspire d’ailleurs des deux pour écrire ce module qui s’appellera pyNitel.

Ce module devra simplifier l’écriture de code python en gérant les spécificités du vidéotex, la gestion du port série ou d’autres moyens de communication comme des websocket pour permettre à un émulateur javascript de se connecter.

Quelles archives de l’Annuaire Électronique ?

Pour recréer une réplique de l’annuaire électronique j’ai déjà quelques billes, comme des copies d’écrans dans différents documents papier que j’ai accumulé ces derniers temps (bouquins, magazines, modes d’emploi, etc).

J’ai surtout une copie binaire vidéotex de l’écran d’accueil principal car j’en ai retrouvé une version enregistrée sur mes disquettes d’Apple ][ datant environ de 1986.

Visible sur: http://minitel.cquest.org/minitel-loader.html?url=vtx/annuaire/E.ANNUAIRE.OPTIM.vtx

Cet écran d’accueil était le formulaire de saisie pour la recherche multi-critères avec nom, rubrique (celles des pages jaunes), localité et pour préciser le département et éventuellement un prénom.

Ensuite le résultat s’affichait sous forme de liste et l’on pouvait naviguer de page en page avec les touches de fonction.

La présentation de l’Annuaire Électronique a évolué au cours des années, j’en reconstitue petit à petit les différentes versions à partir de documents divers.

Pour voir à quoi ressemblait le fonctionnement de l’Annuaire Électronique fin 1983, on peut par exemple consulter les archives de l’INA (à partir de 2'15"): http://www.ina.fr/video/CAB8301844101/l-informatique-au-quotidien-video.html

Pour ce projet de re-création il y a donc trois parties à développer:

  • la gestion de la saisie du formulaire de recherche multi-critère
  • la recherche en elle même
  • la présentation des résultats et l’interaction dans ces résultats

Les recherches… sur le web !

Je décide de démarrer par la recherche, car je sais par avance que je peux faire les deux autres, mais il me faut vérifier la faisabilité de la recherche elle même car, je n’ai bien sûr pas de copie des données sur les abonnés au téléphone, donc elles devront se faire en s’appuyant sur les annuaires actuels accessibles sur le web. Orange a le sien sur 118712.fr (qui en fait le successeur naturel de l’annuaire électronique) mais il y a aussi 118218.fr et 118000.fr

Les résultats retournés en html par ces sites peuvent être analysés pour en extraites les informations à afficher sur le Minitel en vidéotex.

Je commence donc par m’assurer que j’arrive bien à faire ces recherches et à récupérer les résultats. Pour cela j’utilise BeautifulSoup, un module python permettant de parser et d’explorer du contenu xml ou html et le module requests pour gérer les requêtes http.

La structure des pages est relativement stable et ne pose pas trop de problème, mais après quelques essais un captcha bloque le traitement automatique sur l’annuaire d’Orange. Du coup je code trois fonctions, une pour chacun des 3 annuaires et si l’un ne donne pas de résultat je passe au suivant.

Certaines sont très simples, celle du 118000 ne fait même pas 10 lignes de code python !

Ces premiers scripts prennent les valeurs à chercher directement en paramètre depuis la ligne de commande. Ceci me permet de tester les recherches et de passer à l’affichage des résultats en vidéotex.

pyNitel… successeur de Cristel et Dragster

La recherche fonctionne les résultats sont prêts à afficher sur le Minitel, il faut donc implémenter les bases de “pyNitel” pour gérer la codage vidéotex, positionnement à l’écran, choix de couleur, etc.

Le plus simple est de reprendre la documentation du langage de Dragster et d’implémenter l’équivalent de chaque commande BASIC de l’époque (1986) en un équivalent python.

Je laisse de côté l’implémentation de la gestion des zones de saisie, plus complexe et dont je n’ai pas besoin pour l’instant.

Le résultat donne ceci en vidéo:

L’écran d’accueil s’affiche, puis la saisie est simulée, la recherche est réelle et les résultats affichés, mais il n’y a encore aucune interaction avec l’utilisateur sur le Minitel.

Gérer les saisies et l’interaction

Pour cela, je vais m’inspirer encore du langage BASIC de Dragster et de sa gestion de zones de saisies.

Dragster permettait en définir plusieurs zones de saisies, puis gérait le passage d’une zone à l’autre (touches SUITE et RETOUR) ainsi que l’édition par les touches CORRECTION et ANNULATION.

J’implémente donc l’équivalent des RESETZONE, ZONE, ZONENUMBER, etc

On peut donc saisir les critères de recherche et faire la recherche.

Ce qui manque maintenant c’est l’interaction dans les résultats, car l’écran du Minitel est un petit espace de 24 lignes de 40 colonnes, et les résultats s’affichent en général sur plusieurs pages dans lesquelles on navigue avec les touches SUITE et RETOUR.

Une fois cette interaction ajoutée, on a ceci:

Code partagé sur github

Comme c’est suffisamment aboutit et fonctionnel, j’ai partagé ce code sur github

Il fonctionne en python 3.x, testé sur Raspberry Pi (avec Raspbian) et sur Ubuntu et Debian.

Cette re-création de l’Annuaire Électronique est un exemple d’utilisation de pyNitel, car j’espère bien re-créer d’autres services emblématiques en améliorant au passage pyNitel.

Dans les projets, il y a le remplacement du port série par des websocket qui permettrait à l’émulateur javascript de zigazou de se connecter depuis un simple navigateur. Le voici par exemple à l’action pour afficher la page d’accueil de l’annuaire: http://minitel.cquest.org/minitel-loader.html?url=vtx/annuaire/E.ANNUAIRE.OPTIM.vtx

À suivre donc…

Suite… avec la re-création du 3615 ULLA en tant que client Mastodon