Librairie PyMinitel

Bonjour les amis

Après m’être battu comme un beau diable avec Haskell pour voir ENFIN un beau JPEG s’afficher sur un Minitel, je suis en train de m’attaquer à PyMinitel, histoire de voir ce que je pourrais éventuellement en tirer. Il est à noter que je ne connais quasiment rien à Linux et pas plus à Python …

==> Quelqu’un a-t-il déjà joué avec ?

Je trouve cette librairie intéressante à deux titres :

  • Gestion du multi-thread
  • Existence d’une interface utilisateur comprenant menu, saisie de texte, etc

Bonjour,

Oui, je suis je connais bien cette bibliothèque car je bosse dessus pour améliorer quelques points. Elle fonctionne plutôt bien et a été bien écrite (testé sur Minitel 1 et 2). Elle mériterait d’être plus connue :slight_smile:

1 J'aime

Ah ah - Tu m’intéresses alors !

Je viens de passer quelques heures à essayer d’en tirer quelque chose et j’ai quelques questions, peut-être pourras-tu éclairer ma lanterne ?

  • Je suis jusque-là infoutu de « compiler » la doc (déjà, ça part mal, mais bon, il y a les exemples et le code !) - As-tu des instructions pour me guider ?
  • Je ne parviens pas à recevoir de caractère ‹ correct › en 9600 avec mon M2, comme si la parité n’était pas prise en compte à cette vitesse [mais en émission, tout est OK ???]
  • L’UI comporte des fonctionnalités intéressantes, mais je ne comprends pas bien cette notion de « surcharge de méthode » ==> Ex dans UI.py
    def gere_touche(self, sequence):
    « Gère une touche
    Cette méthode est appelée automatiquement par la méthode executer dès
    qu’une séquence est disponible au traitement.
    Pour tout élément interactif, cette méthode doit être surchargée car
    elle ne traite aucune touche par défaut et renvoie donc False. »

N’hésite pas si tu as des questions vu que j’ai écrit pynitel à l’origine pour recréer l’annuaire et ULLA et d’autres trucs…

Je me suis inspiré de Cristel et de Dragster (pour la gestion des zones de saisie).

Projet d’origine: https://github.com/cquest/pynitel

Si vous l’améliorez, merci de reverser au repo d’origine avec des pull-requests (aussi par respect de l’esprit de la licence A-GPL).
De même si vous avez des problèmes, ouvrez une issue: https://github.com/cquest/pynitel/issues

Bref, collaborons !

Je te remercie bien, Christian.

Dans un premier temps, je vais me faire les dents sur Python/Linux et sur PyMinitel, si je n’arrive vraiment à rien, je changerai mon fusil d’épaule, mais je ne veux pas courir deux lièvres à la fois (du moins, dans un premier temps).

Oui, c’est essentiel.

Si tu découvre python, tu verra c’est un langage à la base très clair et facile à aborder.

C’est un bon investissement :wink:

Certainement - Mais il y a des trucs chauds quand même. D’ailleurs, je ne comprends pas la différence entre https://docs.python.org/3/library/telnetlib.html et https://github.com/jquast/telnetlib3

@cquest : je crois qu’Hervé fait allusion à la bibliothèque PyMinitel (zigazou), pas Pynitel.

@hwarin :

(i) Pour la doc, tu m’apprends qu’il y en a une. Pour la générer, il faut installer sphinx, aller dans le répertoire « doc » et taper « make html » pour avoir la doc au format « html » par exemple.

(ii) Aucune idée. Si tu te connectes au minitel par la prise péri-informatique, as-tu vérifié le câble ?

(iii) C’est de la programmation objet : la classe « UI » est une classe abstraite qui fournit un cadre général pour un composant graphique. Les sous-classes (« Menu », « Label », « ChampTexte », « Conteneur ») héritent de cette classe et peuvent réimplémenter des méthodes de la classe « UI » pour changer leur comportement par défaut. Par exemple, la méthode « gere_touche » a un comportement différent pour un label et un menu.

Merci Nicolas.

(i) Oui, j’ai vu ça, mais mon PI de test est actuellement plein à 92% ! Je ne voudrais pas risquer le disk full avec ces plaisanteries, d’autant que si on peut la générer en HTML, ca m’arrangerait bien de l’avoir ailleurs - sauf que je n’ai pas d’autre pingouin sous la main. StandBy donc sur ce point tant que je ne trouve pas les HTML « tout fait »

(ii) Oui - Il marche on ne peut mieux en 4800/1200/300, et aussi en 9600 (mais émission seulement - en réception, je reçois bien des caractères mais on dirait qu’il manque des bits - le A et le B retournent tous les deux 64 ??!!!)
NB : Mon câble est on ne peut plus con : Un FTDI, un transistor et 2 résistances.

(iii) Aïe, du jargon ! Si je comprends bien, si je veux bêtement prendre en compte la touche ‹ annulation › dans un champ de texte, je n’ai que deux options :

  • Soit je modifie le fichier « ChampTexte.py » (et je modifie par là même la sous-classe)
  • Soit je copie le fichier « ChampTexte.py » en « ChampTexteAnnulation.py » (et je crée par là une nouvelle sous-classe)

(i) J’ai essayé de générer la doc html de mon côté mais je n’avais qu’un bout, je peux essayer de creuser et te la filer toute faite quand j’ai un moment.
(ii) Si le câble est ok, je n’ai pas trop d’idée, je laisse les autres réagir sur ce point.
(iii) Tu peux faire ça, oui. Idéalement, on ne devrait pas modifier les fichiers mais c’est là qu’il y a encore un peu de marge pour améliorer l’existant. Que veux-tu faire exactement ? Des boutons qui déclenchent une action spécifique ?

Merci à toi

Pareil - Je vais le tester avec autre chose qu’un PI « pour voir » [je n’avais jamais ‹ joué › en 9600 jusque maintenant]

C’est bien ce que je me dis, donc, en conséquence, il faudrait faire de nouvelles sous-classes qui font ce que j’attends d’elles … s’il n’y a pas d’autre option

Oups !

Pas pareil à 2 lettres près en effet !

En prime, j’avais commis une faute de frappe : MyMinitel !

Bon, je progresse…

  • Fonctionnel :
    • Minitel => WebSockets : OK
    • (Restent à faire les filtrages/traductions protocole)
  • En cours :
    • Modem => WebSockets (*)(**)
    • Menus de configuration
    • Sélection du serveur (saisie URL + port)
  • A faire :
    • Sauvegarde de la configuration
    • Minitel retourné => WebSockets (*)(**)
    • Annuaire local
    • Minitel/Modem/Minitel retourné => Telnet
  • A étudier :
    • Annuaire partagé
    • Mode « serveur » [WebSockets/Telnet => Minitel/Modem] (*)
    • PAVI « réparti »
    • Simulation de la facturation
    • Simulation de sonnerie

(*) Nécessite une ligne téléphonique fantôme (cf mon post sur le sujet) et idéalement la simulation d’une sonnerie
(**) Permet l’utilisation de minitels ne disposant pas de prise péri-info