3 poin oleh GN⁺ 2024-08-12 | 1 komentar | Bagikan ke WhatsApp

7 hal yang dipelajari saat membangun framework TUI modern

Terminal itu cepat

  • Emulator terminal modern adalah perangkat lunak yang sangat canggih
  • Dapat menggunakan rendering dengan akselerasi perangkat keras untuk mengurangi kedipan layar
  • Tiga trik untuk mengurangi kedipan:
    • Jangan bersihkan layar, timpa saja
    • Tulis ke output standar sekaligus dalam satu kali kirim
    • Gunakan protokol Synchronized Output
  • Textual menggunakan 60fps secara default untuk memberikan animasi yang mulus

DictViews itu mengejutkan

  • Metode keys() dan items() pada dict di Python mengembalikan KeysView dan ItemsView
  • Perbedaan simetris pada objek ItemsView dapat digunakan untuk dengan mudah menemukan item yang berubah
  • Di Textual, ini digunakan untuk pembaruan yang dioptimalkan saat properti CSS berubah

lru_cache itu cepat

  • Dekorator @lru_cache dari modul functools menyimpan cache nilai kembalian fungsi
  • Di Textual, performa ditingkatkan dengan memakai @lru_cache pada fungsi-fungsi kecil yang sering dipanggil
  • Perlu memeriksa informasi cache (cache_info()) untuk memastikan bahwa caching benar-benar efektif

Objek immutable adalah yang terbaik

  • Anda bisa mendapatkan manfaat objek immutable dengan memakai tuple, NamedTuple, atau frozen dataclass di Python
  • Dengan objek immutable, Anda dapat menulis kode tanpa efek samping sehingga pengujian dan caching menjadi lebih mudah

Seni Unicode itu bagus

  • Diagram yang menggunakan karakter kotak Unicode sangat berguna untuk dokumentasi
  • Jika dipakai bersama docstring yang ditulis dengan baik, hasilnya sangat membantu

Pecahan itu akurat

  • Modul fractions di Python dapat menghindari kesalahan floating point
  • Di Textual, pecahan digunakan untuk membagi layar berdasarkan rasio sehingga tata letak yang akurat dapat diwujudkan

Emoji itu mengerikan

  • Dukungan emoji di terminal tidak dapat diprediksi dan rumit
  • Lebar emoji diperiksa menggunakan basis data Unicode, tetapi emoji terbaru dapat menghasilkan perilaku yang tidak terduga
  • Emoji multi-codepoint menimbulkan masalah yang lebih besar

Ringkasan GN⁺

  • Tulisan ini memberikan tip dan trik yang berguna saat mengembangkan aplikasi terminal Python
  • Artikel ini membagikan saran praktis yang diperoleh dari pengalaman mengembangkan framework Textual
  • Artikel ini membantu pengembang dengan menjelaskan cara menangani masalah kompleks seperti emoji
  • Proyek dengan fungsi serupa antara lain urwid dan prompt_toolkit

1 komentar

 
GN⁺ 2024-08-12
Komentar Hacker News
  • Pengembang TUI akhirnya harus menangani Unicode, karakter internasional, dan emoji sebagai proyek terpisah

    • Paket rivo/tview dan rivo/uniseg mengalami masalah yang sama
    • Setiap pemelihara library TUI mengembangkan solusi mereka sendiri
    • Lebar karakter tidak distandardisasi sehingga terminal menjadi rumit
    • OP hanya mendukung Unicode 9 (versi Unicode saat ini adalah 15.1)
    • Pada akhirnya pengguna akan mengeluh bahwa emoji tertentu atau karakter internasional tidak dirender dengan benar
  • Tidak suka bahwa Textual mencoba meniru React

    • React adalah framework populer, tetapi bukan cara yang baik untuk membangun antarmuka pengguna
    • Desain responsif dasar adalah metode yang sudah lama dikenal
    • Menggunakan CSS terasa berlebihan
    • Model React sudah merusak banyak konsep CSS
    • Jika tidak harus menggunakan CSS, itu masih bisa diterima
  • Setelah mencoba Textual, ternyata harus menggunakan CSS

    • Tidak ada komponen standar yang bagus sehingga harus membuatnya sendiri
    • Menggunakan stylesheet eksternal alih-alih kelas Python
    • Karena alasan-alasan ini, Textual masih belum cocok untuk saya
    • Di Python seharusnya ada satu cara yang jelas
    • Ia meniru React terlalu dekat sehingga mencerminkan kelemahan komunitas JavaScript
  • TUI ini memang cantik, tetapi saya tidak bisa membayangkan situasi nyata untuk memakainya

    • Biasanya saya puas dengan fitur minimal atau langsung memakai GUI
    • Di tautan YouTube ditunjukkan tabel yang bisa menyorot sel
    • Saya tidak paham mengapa itu diperlukan di TUI
    • Pada akhirnya Anda akan membutuhkan GUI yang layak
  • kitty menawarkan lebih banyak fitur

  • Saya tidak mengerti mengapa software engineer begitu tertarik pada TUI

    • Saya suka program command-line yang bagus, tetapi TUI tidak terasa menarik
  • Monodraw memang hanya untuk MacOS, tetapi ada alternatif bagus di platform lain

  • "Timpa, jangan hapus" adalah cara pengembangan game di masa lalu

    • Sebelum DirectX, orang menulis langsung ke frame buffer dan hanya menggambar ulang bagian yang berubah
  • Ada cara untuk memperkirakan versi Unicode dengan memeriksa posisi kursor di terminal

    • Terminal merender emoji dengan cara yang tidak bisa diprediksi
    • Metode ini bisa dipakai setiap kali perlu menentukan lebar string
    • Saya pernah memakai cara ini karena kesal dengan wcwidth
  • Setelah mengevaluasi beberapa library TUI, FTXUI adalah yang paling mudah digunakan dan paling andal

    • FTXUI
    • Berguna untuk membuat dashboard interaktif dengan dukungan keyboard dan mouse