6 pontos por GN⁺ 2023-08-20 | 1 comentários | Compartilhar no WhatsApp
  • Textual é um framework que permite criar interfaces de usuário multiplataforma com uma API Python simples e executar apps no terminal ou no navegador web
  • A API combina elementos modernos do Python e da evolução do desenvolvimento web, e oferece suporte à manutenção de longo prazo com componentes desacoplados e um framework avançado de testes
  • A biblioteca de widgets oferece botões, controles em árvore, tabelas de dados, campos de entrada, áreas de texto e mais, junto com um sistema de layout flexível e temas predefinidos
  • Internamente, é um framework assíncrono e, se desejado, pode ser integrado a bibliotecas async, sem obrigar o uso de async
  • A instalação é feita com pip install textual textual-dev, e é possível executar a demo com python -m textual
    • Também é possível executar a textual demo sem instalação usando uvx --python 3.12 textual-demo, mas esse método requer uv
  • O pacote textual-dev oferece um console de desenvolvimento que se conecta à aplicação a partir de outro terminal, com suporte para verificar mensagens do sistema, eventos, mensagens de log e saídas de print
  • Apps Textual oferecem uma paleta de comandos com busca difusa, que pode ser aberta com ctrl+p e expandida com comandos personalizados para a aplicação
  • É possível servir apps Textual na web com textual serve "python -m textual", e o Textual Web oferece suporte para disponibilizar aplicações além do serviço local
  • Apps Textual têm baixos requisitos de sistema, podem ser instalados em qualquer lugar onde o Python rode e não exigem desktop

1 comentários

 
GN⁺ 2023-08-20
Opiniões no Hacker News
  • A demonstração do Textual de que mais gosto no momento é https://github.com/1j01/textual-paint
    É uma imitação bem decente do Microsoft Paint rodando no terminal

  • Uma das primeiras coisas que coloquei ao criar um novo projeto em Python foi https://github.com/Textualize/rich
    Escolhi porque é muito fácil deixar a saída do terminal bonita

    • Gosto de criar ferramentas de linha de comando e também gosto da aparência do Textual, mas depois de usar algumas vezes achei um pouco pesado e pouco flexível para mim
      Já o Rich é excelente e deixa o fluxo de desenvolvimento muito suave. Gosto do fato de ter uma boa API para usar de imediato recursos como negrito, cores, emojis e tabelas
    • Parece realmente bonito; fico curioso se há bibliotecas parecidas em Go ou Rust
  • Parece bem interessante
    Em uma empresa de trading onde trabalhei antes, usamos o lanterna(https://github.com/mabe02/lanterna/tree/master) para criar uma UI em texto para um processo importante. Era um processo que recebia dados de mercado atualizados e tratava mudanças entre a sessão de negociação anterior e o dia atual, como alteração de ticker (de PCLN para BKNG) e mudança de categoria devido a variações no valor de mercado
    Eram tarefas que o sistema em tempo real não processava, mas que aconteciam com frequência demais ou eram complicadas demais para tratar manualmente. A empresa tinha uma UI desktop para a equipe de trading, mas não existia o conceito de uma UI de servidor, e os servidores eram headless
    Não havia desenvolvedores front-end; programadores de backend, sistemas e dados mexiam no front-end de vez em quando, então as UIs web eram muito simples ou feitas sob medida para usos específicos, sem ferramentas comuns
    Se fosse em 2023, talvez eu tivesse escolhido create-react-app ou next.js, mas queria algo fácil de acessar mesmo durante plantões, por SSH em uma conexão 4G tethered ruim, então descartei X11 forwarding e RDP. Por isso procurei um construtor de TUI que pudesse ser usado em Java, a linguagem do projeto
    O que gostei no Lanterna foi que ele tinha uma implementação baseada em Swing, permitindo rodar direto no IntelliJ e iterar rapidamente, enquanto em produção era possível executar no terminal via SSH na máquina do servidor
    Pretendo continuar acompanhando o Textual para ver se dá para criar algo interessante com ele. Ainda não gosto muito de web apps, porque sinto que eles exigem muito mais esforço para chegar a um resultado em comparação com produtos funcionalmente equivalentes feitos como TUI ou GUI desktop, sem navegador

  • Infelizmente, parece que a expressão “desenvolvimento rápido de aplicações” também se aplica à própria biblioteca
    Sai uma nova versão a cada duas semanas, e ela quebra em lugares um tanto imprevisíveis. É fácil fazer um protótipo com Textual, mas depois a manutenção fica difícil

    • Entendo que isso possa ser irritante. Como alguém que mantém código escrito em Textual, sei muito bem disso
      Ainda assim, enquanto ele ainda está na versão 0.x, estamos aproveitando ao máximo a vantagem de poder ajustar um pouco a direção quando fica claro que existe uma abordagem melhor em alguma área
      Ao lançar novas versões, tentamos deixar as mudanças incompatíveis o mais visíveis possível. Se houver algo difícil de contornar ou de fazer voltar a funcionar, você pode pedir ajuda em issues do GitHub, discussões ou, se quiser, no Discord
  • Não sou um desenvolvedor com muita experiência em Python, então queria perguntar: quão fácil é transformar isso em um binário sem grandes dependências?
    Estou procurando algo que ajude a criar pacotes de instalação de produto para Windows e Linux. Antes e depois de o cliente instalar o software, são necessárias tarefas de configuração como escrever arquivos INI, verificar conexão com DB e verificar servidor HTTP

    • Há muitas opções, mas, pela minha experiência, PyInstaller foi o mais fácil nessa área
  • Parece bom. Acabei de criar um app interno de DevOps e gestão de mudanças com unicurses e Python; funciona, mas não parece que vá escalar bem
    No começo tentei TK e QT, mas ambos tinham peculiaridades na instalação inicial. O QT funciona bem, mas a documentação útil é meio escassa
    O Textual parece se encaixar exatamente nos requisitos, então com certeza vou experimentar

  • Dei uma olhada por alto em https://textual.textualize.io/tutorial/ e https://github.com/Textualize/textual/blob/main/docs/example...
    Fico curioso sobre o que vocês usaram com sucesso em Go. O atrativo do Textualize é que ele tem uma sensação bastante parecida com a de um navegador web, e até visualizações de tabelas roláveis ficam bem limpas
    O tview também parece interessante, mas, por exemplo, ao olhar para brew install dbui, parece mais uma manipulação imperativa direta do tipo if KeyPress.A: do_something() do que uma navegação declarativa e aninhada
    Talvez seja a diferença entre uma perspectiva centrada no aplicativo/SPA, de “controlar tudo”, e uma perspectiva centrada em documentos, de “adicionar componentes à página e deixá-los fluir”. Gostaria de feedback sobre os itens desta lista: https://codeberg.org/tecras/awesome-go#advanced-console-uis

    • Quando você diz “manipulação imperativa direta do tipo if KeyPress.A: do_something()”, quer dizer que, em vez de esconder o loop de mensagens como está na moda hoje, ele realmente deixa você controlá-lo?
    • Bubble Tea é excelente
    • Usei termui em um projeto e não tive reclamações
      https://github.com/gizak/termui
  • Lazarus/Freepascal é a resposta. O resto está mais para retrocesso

  • Essas animações e transições são implementadas só com texto ASCII puro?

    • Mais precisamente, é texto Unicode, mas sim. É tudo texto
    • Sim, fizeram o terminal parecer lento /s
      Falando sério, vale dar uma olhada nos recursos de “easing” e transições. Um atraso de uns 500 ms incomoda usuários experientes, mas parece ajudar a dar contexto enquanto se aprende a navegação do app
  • Fico me perguntando como projetos assim se sustentam
    Este projeto está em desenvolvimento há 2 anos, mas não vejo uma fonte de receita. Fico curioso se os desenvolvedores recebem alguma compensação de alguma forma

    • Este projeto recebeu investimento seed. O fundador do Textual escreveu um post de blog relacionado, vale a pena ler
      https://www.willmcgugan.com/blog/tech/post/from-open-source-...
    • A grande maioria dos projetos open source é conduzida e mantida como hobby, ou como projetos paralelos relacionados a outro trabalho remunerado
      Também é preciso considerar o mercado. Em 2023, literalmente quase ninguém vai pagar para usar uma biblioteca de widgets de terminal