6 puntos por GN⁺ 2023-08-20 | 1 comentarios | Compartir por WhatsApp
  • Textual es un framework que permite crear interfaces de usuario multiplataforma con una API simple de Python y ejecutar apps en la terminal o en el navegador web
  • La API combina elementos modernos de Python y del desarrollo web, y facilita el mantenimiento a largo plazo con componentes desacoplados y un framework avanzado de pruebas
  • La biblioteca de widgets ofrece botones, controles de árbol, tablas de datos, entradas, áreas de texto y más, junto con un sistema flexible de layouts y temas predefinidos
  • Internamente es un framework asíncrono, puede integrarse con bibliotecas async si se desea, pero no obliga a usar async
  • Se instala con pip install textual textual-dev, y la demo puede ejecutarse con python -m textual
    • También es posible ejecutar textual demo sin instalar nada usando uvx --python 3.12 textual-demo, aunque este método requiere uv
  • El paquete textual-dev ofrece una consola de desarrollo que se conecta a la aplicación desde otra terminal y permite revisar mensajes del sistema, eventos, logs y la salida de print
  • Las apps de Textual incluyen una paleta de comandos con búsqueda difusa que se abre con ctrl+p y puede ampliarse con comandos personalizados para la aplicación
  • textual serve "python -m textual" permite servir apps de Textual en la web, y Textual Web admite el despliegue de aplicaciones además del servicio local
  • Las apps de Textual tienen bajos requisitos del sistema, pueden instalarse donde sea que corra Python y no requieren escritorio

1 comentarios

 
GN⁺ 2023-08-20
Opiniones de Hacker News
  • La demo de Textual que más me gusta ahora es https://github.com/1j01/textual-paint
    Es una imitación bastante buena de Microsoft Paint que corre en la terminal

  • Una de las primeras cosas que agregué al crear un nuevo proyecto en Python fue https://github.com/Textualize/rich
    La elegí porque hace muy fácil que la salida de la terminal se vea bien

    • Me gusta crear herramientas de línea de comandos y también me gusta el aspecto de Textual, pero después de usarlo algunas veces me pareció un poco pesado y poco flexible para mí
      En cambio, Rich es excelente y hace que el flujo de desarrollo sea muy fluido. Me gusta que tenga una buena API para usar de inmediato funciones como negritas, colores, emojis y tablas
    • Se ve realmente bonito; me pregunto si hay bibliotecas similares para Go o Rust
  • Se ve bastante genial
    En una empresa de trading donde trabajé antes, usamos lanterna (https://github.com/mabe02/lanterna/tree/master) cuando creamos una UI de texto para un proceso importante. Era un proceso que recibía datos de mercado actualizados y manejaba cambios entre la sesión de trading anterior y la de hoy, como cambios de nombre de acciones (de PCLN a BKNG) o cambios de categoría por variaciones en la capitalización de mercado
    Eran tareas que el sistema en tiempo real no procesaba, pero que ocurrían con demasiada frecuencia o eran complicadas de manejar manualmente. La empresa tenía una UI de escritorio para el personal de trading, pero no existía el concepto de UI de servidor, y los servidores eran headless
    No había desarrolladores frontend, y los programadores backend, de sistemas y de datos solo tocaban el frontend de vez en cuando, así que las UI web eran muy simples o estaban hechas para usos específicos, y tampoco había herramientas comunes
    Si hubiera sido 2023 quizá habría elegido create-react-app o next.js, pero quería que fuera fácil de acceder incluso desde una conexión SSH pésima por 4G compartido durante una guardia, así que descarté X11 forwarding y RDP. Por eso busqué un constructor de TUI que pudiera usarse en Java, el lenguaje del proyecto
    Lo bueno de Lanterna era que tenía una implementación basada en Swing, así que podía ejecutarla directamente en IntelliJ e iterar rápido, y en producción podía correr la terminal por SSH en la máquina donde estaba el servidor
    Voy a seguir de cerca Textual para ver si se puede construir algo interesante. Las apps web todavía no me gustan mucho porque siento que requieren mucho más esfuerzo para obtener resultados que un producto funcionalmente equivalente hecho como TUI o GUI de escritorio, no en el navegador

  • Lamentablemente, parece que lo de “desarrollo rápido de aplicaciones” también aplica a la propia biblioteca
    Hay una nueva versión cada dos semanas y se rompe en lugares algo difíciles de predecir. Es fácil crear un prototipo con Textual, pero después mantenerlo es difícil

    • Entiendo que eso pueda ser molesto. Mantengo código escrito con Textual, así que lo sé muy bien
      Dicho eso, mientras siga en la versión 0.x, estamos aprovechando al máximo la posibilidad de cambiar un poco de rumbo cuando se vuelve claro que hay un enfoque mejor en alguna área
      Cuando sacamos una nueva versión, intentamos destacar lo más posible los cambios incompatibles. Si hay algo difícil de sortear o complicado de hacer funcionar otra vez, puedes pedir ayuda en GitHub Issues, en Discussions o, si quieres, en Discord
  • No soy un desarrollador con mucha experiencia en Python, así que pregunto: ¿qué tan fácil es convertir esto en un binario sin muchas dependencias?
    Estoy buscando algo que ayude a crear paquetes de instalación de producto para Windows y Linux. Antes o después de que el cliente instale el software, se necesitan tareas de configuración como escribir archivos INI, verificar conexiones a la DB y revisar un servidor HTTP

    • Hay muchas opciones, pero en mi experiencia PyInstaller ha sido lo más fácil en este ámbito
  • Se ve bien. Acabo de crear una app interna de DevOps y gestión de cambios con unicurses y Python; funciona, pero no creo que escale bien
    Al principio intenté con TK y QT, pero ambos tenían peculiaridades en la instalación inicial. QT funciona bien, pero le falta documentación útil
    Textual parece encajar justo con los requisitos, así que definitivamente voy a probarlo

  • Le eché un vistazo rápido a https://textual.textualize.io/tutorial/ y https://github.com/Textualize/textual/blob/main/docs/example...
    Me da curiosidad saber qué han usado con éxito en Go. Lo atractivo de Textualize es que se siente bastante como un navegador web y hasta las vistas de tablas con scroll quedan prolijas
    tview también se ve interesante, pero por ejemplo al mirar brew install dbui, da más la sensación de manejar directamente lógica imperativa tipo if KeyPress.A: do_something() que de tener navegación declarativa y anidada
    Quizá sea la diferencia entre una perspectiva centrada en la aplicación/SPA, de “controlarlo todo”, y una perspectiva centrada en documentos, de “agregar componentes a la página y dejar que fluyan”. Me interesa recibir comentarios sobre los elementos de esta lista: https://codeberg.org/tecras/awesome-go#advanced-console-uis

    • Con eso de “manejar directamente lógica imperativa tipo if KeyPress.A: do_something()”, ¿te refieres a que no oculta el message loop como se acostumbra hoy, sino que te deja controlarlo de verdad?
    • Bubble Tea es excelente
    • Usé termui en un proyecto y no tuve quejas
      https://github.com/gizak/termui
  • Lazarus/Freepascal es la respuesta. Lo demás es casi un retroceso

  • ¿Estas animaciones y transiciones están implementadas solo con texto ASCII puro?

    • Técnicamente es texto Unicode, pero sí. Todo es texto
    • Sí, lograron que la terminal se sintiera lenta /s
      Hablando en serio, vale la pena echarle un vistazo a las funciones de “easing” y transiciones. Un retraso de unos 500 ms puede molestar a usuarios expertos, pero parece ayudar a dar contexto mientras uno aprende a navegar por la app
  • Me pregunto cómo se sostienen proyectos como este
    Este proyecto lleva 2 años en desarrollo y no veo una fuente de ingresos. Me pregunto si los desarrolladores reciben algún tipo de compensación

    • Este proyecto recibió inversión semilla. El fundador de Textual escribió una entrada de blog al respecto, vale la pena leerla
      https://www.willmcgugan.com/blog/tech/post/from-open-source-...
    • La gran mayoría de los proyectos open source se desarrollan y mantienen como hobby, o se llevan como proyectos paralelos relacionados con otro trabajo remunerado
      También hay que considerar el mercado. En 2023, literalmente casi nadie va a pagar por usar una biblioteca de widgets para terminal