3 puan yazan GN⁺ 2024-08-12 | 1 yorum | WhatsApp'ta paylaş

Modern bir TUI framework’ü geliştirirken öğrendiğim 7 şey

Terminal hızlıdır

  • Modern terminal emülatörleri son derece gelişmiş yazılımlardır
  • Donanım hızlandırmalı render kullanarak ekran titremesi azaltılabilir
  • Titremeyi azaltmak için üç numara:
    • Ekranı temizlemeyin, üzerine yazın
    • Standart çıktıya tek seferde yazın
    • Synchronized Output protokolünü kullanın
  • Textual, akıcı animasyonlar sunmak için varsayılan olarak 60fps kullanır

DictView’ler şaşırtıcıdır

  • Python’daki dict nesnelerinin keys() ve items() metotları KeysView ve ItemsView döndürür
  • ItemsView nesnesinin simetrik farkı kullanılarak değişen öğeler kolayca bulunabilir
  • Textual’da bu, CSS özellikleri değiştiğinde optimize edilmiş güncellemeler için kullanılır

lru_cache hızlıdır

  • functools modülündeki @lru_cache dekoratörü, fonksiyonun dönüş değerlerini önbelleğe alır
  • Textual’da sık çağrılan küçük fonksiyonlarda @lru_cache kullanılarak performans artırılır
  • Önbelleklemenin gerçekten etkili olup olmadığını görmek için cache_info() kontrol edilmelidir

Immutable nesneler en iyisidir

  • Python’ın tuple’ları, NamedTuple’ları veya frozen dataclass’ları kullanılarak immutable nesnelerin avantajlarından yararlanılabilir
  • Immutable nesneler, yan etkisiz kod yazmayı kolaylaştırdığı için test ve önbellekleme daha rahat olur

Unicode art iyidir

  • Unicode kutu çizim karakterleriyle hazırlanan diyagramlar dokümantasyonda çok faydalıdır
  • İyi yazılmış docstring’lerle birlikte kullanıldığında büyük yarar sağlar

Kesirler doğrudur

  • Python’ın fractions modülü, kayan nokta hatalarını önleyebilir
  • Textual’da ekran oranlara göre bölünürken doğru bir yerleşim elde etmek için kesirler kullanılır

Emoji berbattır

  • Terminalde emoji desteği öngörülemez ve karmaşıktır
  • Emojinin genişliğini kontrol etmek için Unicode veritabanı kullanılır, ancak en yeni emojiler öngörülemeyen sonuçlara yol açabilir
  • Çoklu codepoint emojiler daha büyük sorunlara neden olur

GN⁺ özeti

  • Bu yazı, Python terminal uygulamaları geliştirirken işe yarayan ipuçları ve püf noktaları sunuyor
  • Textual framework’ünü geliştirme deneyiminden elde edilen pratik tavsiyeleri paylaşıyor
  • Emoji gibi karmaşık sorunların nasıl ele alınacağını anlatarak geliştiricilere yardımcı oluyor
  • Benzer işlevlere sahip projeler arasında urwid ve prompt_toolkit bulunuyor

1 yorum

 
GN⁺ 2024-08-12
Hacker News görüşü
  • TUI geliştiricileri Unicode, uluslararası karakterler ve emoji işleme konusunu ayrı bir proje olarak ele almak zorunda kalıyor

    • Aynı sorun rivo/tview ve rivo/uniseg paketlerinde de yaşanmış
    • Her TUI kütüphanesi bakımcısı kendine özgü bir çözüm geliştirmiş
    • Karakter genişliği standartlaşmadığı için terminaller karmaşık
    • OP yalnızca Unicode 9'u destekliyor (mevcut Unicode sürümü 15.1)
    • Sonuçta kullanıcılar bazı emoji ya da uluslararası karakterlerin doğru render edilmediğinden şikayet edecek
  • Textual'ın React'i taklit etmeye çalışması rahatsız edici

    • React popüler bir framework, ancak kullanıcı arayüzü oluşturmak için iyi bir yöntem değil
    • Temel duyarlı tasarım zaten iyi bilinen bir yaklaşım
    • CSS kullanmak gereğinden fazla görünüyor
    • React modeli, CSS'in kavramlarının çoğunu zaten bozuyor
    • CSS kullanmak zorunda değilsen sorun değil
  • Textual'ı denedim ve CSS kullanmak zorundasınız

    • İyi standart bileşenler yok, bu yüzden kendiniz yapmanız gerekiyor
    • Python sınıfları yerine harici stil dosyaları kullanıyor
    • Bu nedenlerle Textual hâlâ bana uygun değil
    • Python'da tek bir açık yöntem olmalı
    • React'i fazla yakından taklit ederek JavaScript topluluğunun zayıf yönlerini yansıtıyor
  • Bu TUI güzel görünüyor ama onu gerçekten kullanacağım bir senaryo aklıma gelmiyor

    • Ya asgari işlevlerle yetinirim ya da doğrudan GUI kullanırım
    • YouTube bağlantısında hücre vurgulaması yapılabilen bir tablo gösteriliyor
    • Bunun TUI'de neden gerekli olduğunu anlamıyorum
    • Sonunda düzgün bir GUI'ye ihtiyaç duyulacak
  • kitty daha fazla özellik sunuyor

  • Yazılım mühendislerinin TUI'lere neden bu kadar ilgi duyduğunu anlamıyorum

    • İyi komut satırı programlarını severim ama TUI'ler bana çekici gelmiyor
  • Monodraw yalnızca MacOS için, ancak diğer platformlarda da iyi alternatifler var

  • "Üzerine yaz, silme" geçmişte kullanılan bir oyun geliştirme yöntemiydi

    • DirectX'ten önce doğrudan frame buffer'a yazılır ve yalnızca değişen kısımlar yeniden çizilirdi
  • Terminalde imleç konumunu kontrol ederek Unicode sürümünü tahmin etmenin bir yolu var

    • Terminal emojileri öngörülemez şekilde render ediyor
    • Dize genişliğini belirlemek gerektiğinde bu yöntem kullanılabilir
    • wcwidth'den bıktığım için bir ara bu yöntemi kullanmıştım
  • Birden fazla TUI kütüphanesini değerlendirdikten sonra, FTXUI kullanımı en kolay ve en güvenilir olanıydı

    • FTXUI
    • Klavye ve fare destekli etkileşimli panolar oluşturmak için kullanışlı