3 पॉइंट द्वारा GN⁺ 2024-08-12 | 1 टिप्पणियां | WhatsApp पर शेयर करें

आधुनिक TUI फ्रेमवर्क बनाते हुए सीखी गई 7 बातें

टर्मिनल तेज़ है

  • आधुनिक terminal emulator बहुत परिष्कृत software हैं
  • hardware-accelerated rendering का उपयोग करके screen flicker को कम किया जा सकता है
  • flicker कम करने के तीन तरीके:
    • स्क्रीन को साफ़ न करें, उस पर overwrite करें
    • standard output में एक बार में लिखें
    • Synchronized Output protocol का उपयोग करें
  • Textual डिफ़ॉल्ट रूप से 60fps का उपयोग करता है ताकि smooth animation मिले

DictViews चौंकाने वाले हैं

  • Python dicts की keys() और items() methods, KeysView और ItemsView लौटाती हैं
  • ItemsView object के symmetric difference का उपयोग करके बदले हुए items आसानी से खोजे जा सकते हैं
  • Textual में CSS properties बदलने पर optimized updates के लिए इसका उपयोग होता है

lru_cache तेज़ है

  • functools module का @lru_cache decorator function के return value को cache करता है
  • Textual में performance सुधारने के लिए अक्सर कॉल होने वाले छोटे functions पर @lru_cache का उपयोग किया गया
  • cache_info() देखकर यह जाँचना चाहिए कि caching प्रभावी है या नहीं

immutable objects सबसे बेहतरीन हैं

  • Python के tuples, NamedTuples, या frozen dataclasses का उपयोग करके immutable objects के फ़ायदे लिए जा सकते हैं
  • immutable objects इस्तेमाल करने से side effects रहित code लिखा जा सकता है, जिससे testing और caching आसान हो जाती है

Unicode art अच्छा है

  • Unicode box characters से बने diagrams documentation में बहुत उपयोगी होते हैं
  • अच्छी तरह लिखे गए docstring के साथ इनका उपयोग बहुत मददगार होता है

fractions सटीक हैं

  • Python का fractions module floating point errors से बचा सकता है
  • Textual में स्क्रीन को अनुपात के अनुसार बाँटते समय fractions का उपयोग करके सटीक layout लागू किया जाता है

emoji भयानक हैं

  • terminal में emoji support अप्रत्याशित और जटिल है
  • emoji की width जाँचने के लिए Unicode database का उपयोग किया जाता है, लेकिन नए emoji अप्रत्याशित परिणाम दे सकते हैं
  • multi-codepoint emoji और बड़ी समस्या पैदा करते हैं

GN⁺ की संक्षिप्त जानकारी

  • यह लेख Python terminal application development के लिए उपयोगी tips और tricks देता है
  • Textual framework के development अनुभव से मिली व्यावहारिक सलाह साझा करता है
  • emoji जैसी जटिल समस्याओं से निपटने के तरीके समझाकर developers की मदद करता है
  • समान प्रकार की functionality वाले projects में urwid और prompt_toolkit शामिल हैं

1 टिप्पणियां

 
GN⁺ 2024-08-12
Hacker News राय
  • TUI डेवलपर्स को Unicode, अंतरराष्ट्रीय अक्षरों और emoji handling को एक अलग प्रोजेक्ट की तरह संभालना पड़ता है

    • यही समस्या rivo/tview और rivo/uniseg पैकेजों में भी आई
    • हर TUI लाइब्रेरी मेंटेनर ने अपना अलग समाधान विकसित किया
    • character width standardize न होने की वजह से terminal जटिल हो जाते हैं
    • OP केवल Unicode 9 को support करता है (मौजूदा Unicode version 15.1 है)
    • अंत में यूज़र शिकायत करेंगे कि कुछ emoji या अंतरराष्ट्रीय अक्षर सही render नहीं हो रहे
  • Textual के React की नकल करने की कोशिश से असंतोष है

    • React एक लोकप्रिय framework है, लेकिन user interface बनाने का अच्छा तरीका नहीं है
    • बुनियादी responsive design के तरीके पहले से अच्छी तरह जाने-पहचाने हैं
    • CSS का इस्तेमाल कुछ ज़्यादा लगता है
    • React model पहले ही CSS की कई अवधारणाओं को तोड़ देता है
    • अगर CSS इस्तेमाल न करना पड़े, तो ठीक है
  • Textual इस्तेमाल करके देखा, और उसमें CSS का इस्तेमाल करना ही पड़ता है

    • अच्छे standard component नहीं हैं, इसलिए उन्हें खुद बनाना पड़ता है
    • Python class की बजाय external stylesheet का इस्तेमाल होता है
    • इन वजहों से Textual अभी मेरे लिए उपयुक्त नहीं है
    • Python में एक ही स्पष्ट तरीका होना चाहिए
    • React की बहुत नज़दीकी नकल करके यह JavaScript community की कमियों को भी दोहराता है
  • यह TUI दिखने में सुंदर है, लेकिन इसे वास्तव में कहाँ इस्तेमाल किया जाएगा, यह समझ नहीं आता

    • या तो लोग न्यूनतम फीचर्स से संतुष्ट हो जाते हैं, या सीधे GUI का इस्तेमाल करते हैं
    • YouTube लिंक में cell highlighting वाली table दिखाई गई है
    • समझ नहीं आता कि TUI में इसकी ज़रूरत क्यों है
    • आखिरकार एक proper GUI की ज़रूरत पड़ेगी
  • kitty ज़्यादा features देता है

  • समझ नहीं आता कि software engineers TUI में इतनी दिलचस्पी क्यों लेते हैं

    • अच्छे command-line programs पसंद हैं, लेकिन TUI आकर्षक नहीं लगते
  • Monodraw सिर्फ MacOS के लिए है, लेकिन दूसरे platforms पर भी अच्छे विकल्प हैं

  • "overwrite, don't erase" पुरानी game development पद्धति थी

    • DirectX से पहले frame buffer में सीधे लिखा जाता था और सिर्फ बदले हुए हिस्सों को फिर से draw किया जाता था
  • terminal में cursor position देखकर Unicode version का अनुमान लगाने का एक तरीका है

    • terminal emoji को ऐसे render करते हैं कि उनका अनुमान लगाना संभव नहीं होता
    • हर बार string width तय करते समय इस तरीके का इस्तेमाल किया जा सकता है
    • wcwidth से परेशान होकर कभी इस तरीके का इस्तेमाल किया गया था
  • कई TUI libraries का मूल्यांकन करने पर FTXUI सबसे आसान और भरोसेमंद लगा

    • FTXUI
    • keyboard और mouse support वाले interactive dashboard बनाने में उपयोगी है