6 points par GN⁺ 2023-08-20 | 1 commentaires | Partager sur WhatsApp
  • Textual est un framework qui permet de créer des interfaces utilisateur multiplateformes avec une API Python simple, et d’exécuter les apps dans un terminal ou un navigateur web
  • L’API combine le Python moderne avec les avancées du développement web, et facilite la maintenance à long terme grâce à des composants découplés et à un framework de test avancé
  • Sa bibliothèque de widgets fournit des boutons, des contrôles d’arborescence, des tableaux de données, des champs de saisie, des zones de texte, etc., ainsi qu’un système de mise en page flexible et des thèmes prédéfinis
  • En interne, il s’agit d’un framework asynchrone ; il peut s’intégrer à des bibliothèques async si souhaité, sans imposer l’utilisation de l’async
  • Il s’installe avec pip install textual textual-dev, et la démo peut être lancée avec python -m textual
    • Il est possible d’exécuter la démo textual sans installation avec uvx --python 3.12 textual-demo ; cette méthode nécessite uv
  • Le package textual-dev fournit une console de développement qui se connecte à l’application depuis un autre terminal, avec prise en charge de l’affichage des messages système, des événements, des messages de log et de la sortie print
  • Les apps Textual proposent une palette de commandes avec recherche floue, accessible via ctrl+p, et extensible avec des commandes personnalisées pour l’application
  • Avec textual serve "python -m textual", il est possible de servir une app Textual sur le web ; Textual Web prend en charge le service d’applications au-delà du service local
  • Les apps Textual ont de faibles exigences système, peuvent être installées partout où Python s’exécute, et ne nécessitent pas d’environnement de bureau

1 commentaires

 
GN⁺ 2023-08-20
Avis de Hacker News
  • La démo de Textual que je préfère en ce moment, c’est https://github.com/1j01/textual-paint
    C’est une assez bonne imitation de Microsoft Paint qui tourne dans le terminal

  • L’une des premières choses que j’ai ajoutées en créant un nouveau projet Python a été https://github.com/Textualize/rich
    Je l’ai choisi parce qu’il rend la sortie du terminal tellement facile à rendre agréable

    • J’aime créer des outils en ligne de commande et j’aime aussi l’apparence de Textual, mais après l’avoir essayé quelques fois, je l’ai trouvé un peu lourd et pas assez flexible pour moi
      En revanche, Rich est excellent et rend le flux de développement très fluide. J’aime le fait qu’il fournisse une bonne API pour utiliser directement le gras, les couleurs, les emojis, les tableaux, etc.
    • Ça a vraiment l’air joli ; je me demande s’il existe des bibliothèques similaires pour Go ou Rust
  • Ça a l’air assez chouette
    Dans une société de trading où je travaillais auparavant, nous utilisions lanterna (https://github.com/mabe02/lanterna/tree/master) pour créer une UI texte destinée à des processus importants. C’était un processus qui recevait des données de marché mises à jour et gérait ce qui avait changé entre la session de trading précédente et celle du jour, par exemple des changements de nom de valeur (de PCLN à BKNG) ou des changements de catégorie dus à l’évolution de la capitalisation boursière
    C’étaient des tâches que le système temps réel ne traitait pas, mais qui survenaient trop souvent ou étaient trop délicates pour être gérées manuellement. L’entreprise avait bien une UI desktop pour les traders, mais pas de notion d’UI serveur, et les serveurs étaient headless
    Il n’y avait pas de développeur frontend ; les programmeurs backend, systèmes et data touchaient parfois au frontend, donc les UI web étaient très simples ou adaptées à un usage très spécifique, sans outils communs
    Si cela avait été en 2023, j’aurais peut-être choisi create-react-app ou next.js, mais comme je voulais pouvoir y accéder facilement même via une connexion SSH médiocre sur une 4G partagée pendant une astreinte, j’ai exclu le forwarding X11 et RDP. J’ai donc cherché un générateur de TUI utilisable en Java, le langage du projet
    Ce que j’aimais avec Lanterna, c’est qu’il disposait d’une implémentation basée sur Swing, ce qui permettait de l’exécuter directement dans IntelliJ et d’itérer rapidement, tout en pouvant en production lancer le terminal en SSH sur la machine hébergeant le serveur
    Je compte continuer à suivre Textual pour voir si je peux en faire quelque chose de bien. Je n’aime toujours pas beaucoup les apps web : j’ai l’impression qu’elles demandent beaucoup plus d’efforts pour obtenir un résultat que des produits fonctionnellement équivalents en TUI ou en GUI desktop, hors navigateur

  • Malheureusement, l’expression « développement rapide d’applications » semble aussi s’appliquer à la bibliothèque elle-même
    Il y a une nouvelle version toutes les deux semaines, et ça casse à des endroits assez difficiles à prévoir. Il est facile de faire un prototype avec Textual, mais la maintenance ensuite est difficile

    • Je comprends que cela puisse être agaçant. Je le sais très bien, puisque je maintiens du code écrit avec Textual
      Cela dit, tant que nous sommes encore en version 0.x, nous essayons de tirer parti de la possibilité de faire évoluer légèrement la direction quand une meilleure approche devient évidente dans certains domaines
      À chaque nouvelle version, nous faisons de notre mieux pour rendre les changements cassants aussi visibles que possible. Si certains points sont difficiles à contourner ou à refaire fonctionner, vous pouvez demander de l’aide via une issue GitHub, les discussions, ou sur Discord si vous préférez
  • Je ne suis pas un développeur très expérimenté en Python, donc je me demande : à quel point est-il facile d’en faire un binaire sans grosses dépendances ?
    Je cherche quelque chose qui aide à créer des packages d’installation produit pour Windows et Linux. Avant et après l’installation du logiciel chez les clients, il faut effectuer des tâches de configuration comme écrire des fichiers INI, vérifier la connexion à la DB, vérifier un serveur HTTP, etc.

    • Il y a beaucoup d’options, mais d’après mon expérience, PyInstaller est le plus simple dans ce domaine
  • Ça a l’air bien. Je viens de créer une app interne de DevOps et de gestion du changement avec unicurses et Python ; elle fonctionne, mais elle ne sera probablement pas très extensible
    Au début, j’ai essayé TK et QT, mais les deux avaient des particularités à l’installation initiale. QT fonctionne bien, mais manque plutôt de documentation utile
    Textual semble correspondre exactement aux besoins, donc je compte vraiment l’essayer

  • J’ai parcouru rapidement https://textual.textualize.io/tutorial/ et https://github.com/Textualize/textual/blob/main/docs/example...
    Je me demande ce que les gens ont utilisé avec succès côté Go. Ce qui rend Textualize attirant, c’est qu’il donne une impression assez proche d’un navigateur web, et qu’il gère proprement jusqu’aux vues de tableaux défilants
    tview a aussi l’air intéressant, mais si l’on regarde par exemple brew install dbui, cela donne davantage l’impression d’écrire soi-même une gestion impérative du type if KeyPress.A: do_something() que d’utiliser une navigation déclarative et imbriquée
    C’est peut-être la différence entre une perspective centrée application/SPA où « l’on contrôle tout », et une perspective centrée document où « l’on ajoute des composants à la page et on les laisse se disposer ». Je serais curieux d’avoir des retours sur les éléments de cette liste : https://codeberg.org/tecras/awesome-go#advanced-console-uis

    • Dire que « l’on écrit soi-même une gestion impérative du type if KeyPress.A: do_something() », cela signifie-t-il qu’au lieu de cacher la boucle de messages comme c’est la mode actuellement, on vous laisse réellement la contrôler ?
    • Bubble Tea est excellent
    • J’ai utilisé termui dans un projet et je n’ai rien eu à lui reprocher
      https://github.com/gizak/termui
  • Lazarus/Freepascal est la bonne réponse. Le reste ressemble presque à une régression

  • Ces animations et transitions sont-elles implémentées uniquement avec du texte ASCII pur ?

    • Plus précisément, du texte Unicode, mais oui. Tout est du texte
    • Oui, ils ont réussi à rendre le terminal lent /s
      Plus sérieusement, les fonctions d’« easing » et de transition valent le coup d’œil. Un délai d’environ 500 ms agace les utilisateurs expérimentés, mais il semble utile pour fournir du contexte pendant qu’on apprend la navigation dans l’app
  • Je me demande comment ce genre de projet peut durer
    Ce projet est en développement depuis deux ans, mais je ne vois pas de source de revenus. Je me demande si les développeurs sont rémunérés d’une manière ou d’une autre

    • Ce projet a reçu un investissement d’amorçage. Le fondateur de Textual a écrit un billet de blog à ce sujet, qui vaut la lecture
      https://www.willmcgugan.com/blog/tech/post/from-open-source-...
    • La grande majorité des projets open source sont menés et maintenus comme des hobbies, ou comme des projets secondaires liés à un autre travail rémunéré
      Il faut aussi tenir compte du marché. En 2023, il n’y a littéralement presque personne qui soit prêt à payer pour utiliser une bibliothèque de widgets de terminal