6 puan yazan GN⁺ 2023-08-20 | 1 yorum | WhatsApp'ta paylaş
  • Textual, basit bir Python API'si ile çapraz platform kullanıcı arayüzleri oluşturmayı ve uygulamaları terminalde veya web tarayıcısında çalıştırmayı sağlayan bir framework'tür
  • API, modern Python ile web geliştirmenin ilerlemelerini birleştirir; ayrık bileşenler ve gelişmiş bir test framework'ü sayesinde uzun vadeli bakım desteği sunar
  • Widget kütüphanesi; düğmeler, ağaç kontrolleri, veri tabloları, giriş alanları, metin alanları ve daha fazlasını sunar; ayrıca esnek bir yerleşim sistemi ve ön tanımlı temalar sağlar
  • Dahili olarak asenkron bir frameworktür; istenirse async kütüphaneleriyle entegre olabilir, ancak async kullanımını zorunlu kılmaz
  • pip install textual textual-dev ile kurulabilir ve python -m textual ile demo çalıştırılabilir
    • Kurulum yapmadan uvx --python 3.12 textual-demo ile textual demo çalıştırılabilir; bu yöntem için uv gereklidir
  • textual-dev paketi, başka bir terminalden uygulamaya bağlanan bir geliştirme konsolu sunar; sistem mesajları, olaylar, log mesajları ve print çıktılarının görüntülenmesini destekler
  • Textual uygulamaları, bulanık arama destekli bir komut paleti sunar; ctrl+p ile açılabilir ve uygulamaya özel özel komutlarla genişletilebilir
  • textual serve "python -m textual" ile Textual uygulamaları web'de sunulabilir; Textual Web, yerel sunumun yanı sıra uygulama sunumunu da destekler
  • Textual uygulamaları düşük sistem gereksinimlerine sahiptir, Python'ın çalıştığı her yere kurulabilir ve masaüstü ortamı gerektirmez

1 yorum

 
GN⁺ 2023-08-20
Hacker News yorumları
  • Şu anda en sevdiğim Textual demosu https://github.com/1j01/textual-paint
    Terminalde çalışan oldukça iyi bir Microsoft Paint taklidi

  • Yeni bir Python projesi oluştururken ilk eklediğim şeylerden biri https://github.com/Textualize/rich oldu
    Terminal çıktısını güzel göstermek çok kolay olduğu için onu seçtim

    • Komut satırı araçları yapmayı seviyorum ve Textual’ın görünüşü de hoşuma gidiyor, ama birkaç kez kullandıktan sonra bana biraz ağır ve esneklikten yoksun geldi
      Buna karşılık Rich harika ve geliştirme akışını çok akıcı hale getiriyor. Kalın yazı, renk, emoji, tablo gibi özellikleri hemen kullanmaya yarayan iyi bir API sunmasını seviyorum
    • Gerçekten çok güzel görünüyor; Go veya Rust için de benzer bir kütüphane var mı merak ediyorum
  • Oldukça havalı görünüyor
    Eskiden çalıştığım trading şirketinde önemli süreçler için metin tabanlı UI yaparken lanterna(https://github.com/mabe02/lanterna/tree/master) kullanmıştık. Güncellenmiş piyasa verilerini alıp önceki işlem seansı ile bugün arasında değişen şeyleri, örneğin hisse adının değişmesi (PCLN’den BKNG’ye), piyasa değeri değişimi nedeniyle kategori değişikliği gibi işleri işleyen bir süreçti
    Bunlar gerçek zamanlı sistemin işlemediği ama çok sık olan ya da elle ele almak için zahmetli görevlerdi. Şirkette trading personeli için masaüstü UI vardı ama sunucu UI’ı diye bir kavram yoktu ve sunucular headless çalışıyordu
    Frontend geliştiricisi yoktu; backend, sistem ve veri programcıları arada frontend’e dokunuyordu. Bu yüzden web UI’ları ya çok basitti ya da belirli bir amaca özel hazırlanmıştı; ortak araç da yoktu
    2023 olsaydı create-react-app veya next.js tarafını seçmiş olabilirdim, ama nöbet sırasında tethering ile bağlandığım berbat bir 4G SSH bağlantısından da kolayca erişmek istediğim için X11 forwarding veya RDP’yi eledim. Bu yüzden projenin dili olan Java’da kullanabileceğim bir TUI builder aradım
    Lanterna’yı sevmemin nedeni, Swing tabanlı bir implementasyonu olması sayesinde IntelliJ içinde doğrudan çalıştırıp hızlı yineleme yapabilmem ve üretim ortamında sunucunun bulunduğu makinede SSH üzerinden terminalde çalıştırabilmemdi
    Textual’ı da izlemeye devam edip onunla iyi bir şey yapabilir miyim bakacağım. Web uygulamalarını hâlâ pek sevmiyorum; çünkü sonuç almak için, tarayıcı olmayan bir TUI ya da masaüstü GUI ile yapılmış işlevsel olarak eşdeğer bir ürüne kıyasla çok daha fazla emek istiyor gibi geliyor

  • Ne yazık ki “hızlı uygulama geliştirme” ifadesi kütüphanenin kendisi için de geçerli gibi
    İki haftada bir yeni sürüm çıkıyor ve biraz öngörmesi zor yerlerde bozulmalar oluyor. Textual ile prototip yapmak kolay, ama sonrasında bakım yapmak zor

    • Bunun can sıkıcı olabileceğini anlıyorum. Textual ile yazılmış kodu bakımını yapan biri olarak bunu gerçekten iyi biliyorum
      Yine de hâlâ 0.x sürümünde olduğu sürece, bazı alanlarda daha iyi bir yaklaşım netleştiğinde yönü biraz değiştirebilmenin avantajından olabildiğince yararlanıyoruz
      Yeni sürüm çıkarırken kırıcı değişiklikleri olabildiğince görünür şekilde duyurmaya çalışıyoruz. Etrafından dolaşması zor ya da tekrar çalışır hale getirmesi güç bir yer varsa GitHub issue’larında, tartışmalarda veya isterseniz Discord’da yardım isteyebilirsiniz
  • Python’da çok deneyimli bir geliştirici değilim, o yüzden soruyorum: Bunu büyük bağımlılıklar olmadan bir binary haline getirmek ne kadar kolay?
    Windows ve Linux için ürün kurulum paketleri hazırlamaya yardımcı olacak bir şey arıyorum. Müşterinin yazılımı kurmadan önce/sonra INI dosyası yazma, DB bağlantısını kontrol etme, HTTP sunucusunu kontrol etme gibi yapılandırma işleri gerekiyor

    • Seçenek çok, ama bu alanda deneyimime göre PyInstaller en kolayıydı
  • Güzel görünüyor. Az önce unicurses ve Python ile dahili DevOps ve değişiklik yönetimi uygulaması yaptım; çalışıyor ama pek ölçeklenebilir olmayacak gibi
    Başta TK ve QT denedim, ama ikisinin de ilk kurulumunda kendine özgü pürüzler vardı. QT iyi çalışıyor, ancak faydalı dokümantasyon biraz eksik
    Textual gereksinimlere tam uyuyor gibi görünüyor; mutlaka deneyeceğim

  • Hızlıca göz atıp https://textual.textualize.io/tutorial/ ve https://github.com/Textualize/textual/blob/main/docs/example... sayfalarına baktım
    Go tarafında neleri başarıyla kullandığınızı merak ediyorum. Textualize’ın çekici yanı, epey web tarayıcısı gibi hissettirmesi ve kaydırılabilir tablo görünümüne kadar temiz olması
    tview de ilginç görünüyor, ama örneğin brew install dbuiye bakınca bildirimsel ve iç içe navigasyondan çok, if KeyPress.A: do_something() gibi emir kipinde işlemeeyi kendiniz yapıyormuşsunuz hissi daha baskın
    Belki de bu, “her şeyi kontrol eden” uygulama merkezli/SPA bakışı ile “sayfaya bileşenler ekleyip akmasına izin veren” belge merkezli bakış arasındaki farktır. Bu listedeki öğeler hakkında geri bildirimleri merak ediyorum: https://codeberg.org/tecras/awesome-go#advanced-console-uis

    • if KeyPress.A: do_something() gibi emir kipinde işlemleri kendiniz yapıyorsunuz” derken, bugünlerde moda olduğu gibi mesaj döngüsünü gizlemek yerine gerçekten kontrol etmenize izin verdiğini mi kastediyorsunuz?
    • Bubble Tea harika
    • Bir projede termui kullandım ve şikâyetim olmadı
      https://github.com/gizak/termui
  • Lazarus/Freepascal doğru cevap. Geri kalanı gerilemeye yakın

  • Bu animasyonlar ve geçiş efektleri tamamen saf ASCII metinle mi uygulanmış?

    • Tam olarak Unicode metin, ama evet. Hepsi metin
    • Evet, terminali yavaş hissettirmişler /s
      Ciddi konuşursak “easing” ve geçiş özelliklerine bir bakmaya değer. 500 ms civarında bir gecikme deneyimli kullanıcılar için can sıkıcıdır, ama uygulama navigasyonunu öğrenirken bağlam sağlamaya yardımcı oluyor gibi
  • Bu tür projeler nasıl sürdürülebiliyor merak ediyorum
    Bu proje 2 yıldır geliştiriliyor ama gelir kaynağı görünmüyor. Geliştiricilerin herhangi bir biçimde karşılık alıp almadığını merak ediyorum

    • Bu proje seed yatırım aldı. Textual’ın kurucusu bununla ilgili bir blog yazısı yazdı; okumaya değer
      https://www.willmcgugan.com/blog/tech/post/from-open-source-...
    • Açık kaynak projelerinin büyük çoğunluğu hobi olarak geliştirilip sürdürülüyor ya da başka ücretli işlerle ilişkili yan projeler olarak yürütülüyor
      Pazarı da hesaba katmak gerek. 2023’te terminal widget kütüphanesi kullanmak için para ödeyecek kişi kelimenin tam anlamıyla neredeyse yok