6 คะแนน โดย GN⁺ 2023-08-20 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Textual เป็นเฟรมเวิร์กที่ช่วยสร้างส่วนติดต่อผู้ใช้แบบข้ามแพลตฟอร์มด้วย Python API ที่เรียบง่าย และสามารถรันแอปได้ทั้งในเทอร์มินัลหรือเว็บเบราว์เซอร์
  • API ผสานแนวคิดสมัยใหม่ของ Python และการพัฒนาเว็บเข้าด้วยกัน พร้อมรองรับการบำรุงรักษาระยะยาวด้วยคอมโพเนนต์ที่แยกเป็นสัดส่วนและเฟรมเวิร์ก ทดสอบ ขั้นสูง
  • ไลบรารี วิดเจ็ต มีทั้งปุ่ม ทรีคอนโทรล ตารางข้อมูล อินพุต พื้นที่ข้อความ ฯลฯ พร้อมระบบ เลย์เอาต์ ที่ยืดหยุ่นและธีมที่กำหนดไว้ล่วงหน้า
  • ภายในเป็น เฟรมเวิร์กแบบอะซิงโครนัส และหากต้องการก็สามารถผสานกับไลบรารี async ได้ โดยไม่ได้บังคับให้ต้องใช้ async
  • ติดตั้งด้วย pip install textual textual-dev และสามารถรันเดโมได้ด้วย python -m textual
    • สามารถรัน textual demo ได้แบบไม่ต้องติดตั้งด้วย uvx --python 3.12 textual-demo ซึ่งวิธีนี้ต้องใช้ uv
  • แพ็กเกจ textual-dev มี development console สำหรับเชื่อมต่อกับแอปพลิเคชันจากอีกเทอร์มินัลหนึ่ง และรองรับการตรวจสอบ system messages, events, log messages และผลลัพธ์จาก print
  • แอป Textual มี command palette พร้อมการค้นหาแบบฟัซซี เปิดได้ด้วย ctrl+p และขยายได้ด้วย คำสั่งแบบกำหนดเอง สำหรับแอปพลิเคชัน
  • สามารถเสิร์ฟแอป Textual ขึ้นเว็บได้ด้วย textual serve "python -m textual" และ Textual Web รองรับการเสิร์ฟแอปพลิเคชันนอกเหนือจากการเสิร์ฟแบบโลคัล
  • แอป Textual ต้องการทรัพยากรระบบต่ำ ติดตั้งได้ทุกที่ที่รัน Python ได้ และไม่จำเป็นต้องมีเดสก์ท็อป

1 ความคิดเห็น

 
GN⁺ 2023-08-20
ความคิดเห็นจาก Hacker News
  • เดโม Textual ที่ผมชอบที่สุดตอนนี้คือ https://github.com/1j01/textual-paint
    เป็น โคลน Microsoft Paint ที่ค่อนข้างดีและรันในเทอร์มินัล

  • สิ่งแรก ๆ ที่ผมใส่เข้าไปตอนสร้างโปรเจกต์ Python ใหม่คือ https://github.com/Textualize/rich
    เลือกเพราะทำให้เอาต์พุตในเทอร์มินัลดูดีได้ง่ายมาก

    • ผมชอบทำเครื่องมือ command-line และก็ชอบหน้าตาของ Textual แต่ลองใช้ไปสองสามครั้งแล้วรู้สึกว่าสำหรับผมมันค่อนข้าง หนักและไม่ยืดหยุ่นพอ
      ในทางกลับกัน Rich นั้นยอดเยี่ยมและทำให้ flow การพัฒนาลื่นมาก ชอบตรงที่มี API ดี ๆ ให้ใช้ฟีเจอร์อย่างตัวหนา สี อีโมจิ และตารางได้ทันที
    • ดูสวยจริง ๆ สงสัยว่ามีไลบรารีคล้าย ๆ กันสำหรับ Go หรือ Rust ไหม
  • ดูเจ๋งทีเดียว
    ตอนอยู่บริษัทเทรดดิ้งเดิม เราใช้ lanterna(https://github.com/mabe02/lanterna/tree/master) ทำ text UI สำหรับโปรเซสสำคัญ ๆ เป็นโปรเซสที่รับข้อมูลตลาดที่อัปเดตแล้วจัดการสิ่งที่เปลี่ยนไประหว่างเซสชันเทรดก่อนหน้ากับวันนี้ เช่น การเปลี่ยนชื่อหุ้น (จาก PCLN เป็น BKNG) หรือการเปลี่ยนหมวดหมู่จากการเปลี่ยนแปลงมูลค่าตลาด
    เป็นงานที่ระบบ real-time ไม่ได้จัดการ แต่เกิดบ่อยเกินไปหรือยุ่งยากเกินกว่าจะทำด้วยมือ บริษัทมี desktop UI สำหรับพนักงานเทรดดิ้ง แต่ไม่มีแนวคิดเรื่อง server UI และเซิร์ฟเวอร์ก็เป็นแบบ headless
    ไม่มี frontend developer มีแค่ backend, system และ data programmer ที่แตะ frontend เป็นครั้งคราว ดังนั้น web UI จึงเรียบง่ายมากหรือถูกทำมาเฉพาะงาน และไม่มีเครื่องมือร่วมกัน
    ถ้าเป็นปี 2023 ผมอาจเลือกไปทาง create-react-app หรือ next.js แต่เพราะอยากเข้าถึงได้ง่ายแม้ผ่าน SSH connection แย่ ๆ บน 4G ที่ tethering ระหว่าง on-call เลยตัด X11 forwarding หรือ RDP ออกไป ดังนั้นจึงมองหา TUI builder ที่ใช้ได้ใน Java ซึ่งเป็นภาษาของโปรเจกต์
    เหตุผลที่ Lanterna ดีคือมี implementation ที่อิงกับ Swing ทำให้รันใน IntelliJ แล้ว iterate ได้เร็ว และใน production ก็เปิดเทอร์มินัลผ่าน SSH บนเครื่องที่มีเซิร์ฟเวอร์อยู่ได้
    ผมยังจะติดตาม Textual ต่อไปเพื่อดูว่าจะสร้างอะไรที่น่าสนใจได้ไหม ผมยังไม่ค่อยชอบเว็บแอป เพราะยังรู้สึกว่าต้องใช้แรงมากกว่าจะได้ผลลัพธ์ เมื่อเทียบกับผลิตภัณฑ์ที่มีฟังก์ชันเทียบเท่ากันแต่ทำเป็น TUI หรือ desktop GUI แทนเบราว์เซอร์

  • น่าเสียดายที่คำว่า “rapid application development” ดูเหมือนจะใช้ได้กับตัวไลบรารีเองด้วย
    มี release ใหม่ออกมาทุกสองสัปดาห์ และพังในจุดที่ค่อนข้างคาดเดายาก ทำ prototype ด้วย Textual นั้นง่าย แต่ดูแลต่อหลังจากนั้นยาก

    • ผมเข้าใจว่ามันน่าหงุดหงิดได้ เพราะผมเองก็อยู่ในฐานะที่ต้องดูแลโค้ดที่เขียนด้วย Textual เลยรู้ดีมาก
      แต่ตราบใดที่ยังเป็น เวอร์ชัน 0.x เราก็พยายามใช้ประโยชน์จากข้อดีที่ยังปรับทิศทางได้ทีละนิดเมื่อเห็นชัดว่าแนวทางไหนดีกว่า
      เวลาออก release ใหม่ เราพยายามประกาศ breaking changes ให้เห็นเด่นที่สุดเท่าที่ทำได้ ถ้ามีส่วนไหน workaround ยากหรือทำให้กลับมาทำงานได้ลำบาก ก็ขอความช่วยเหลือได้ผ่าน GitHub issue, discussion หรือถ้าต้องการก็ใน Discord
  • ผมไม่ได้เป็นนักพัฒนาที่ทำ Python มาเยอะ เลยอยากถามว่า การทำสิ่งนี้ให้เป็น binary โดยไม่ต้องมี dependency ใหญ่ ๆ นั้นง่ายแค่ไหน
    กำลังมองหาอะไรสักอย่างที่ช่วยทำแพ็กเกจติดตั้งผลิตภัณฑ์สำหรับ Windows และ Linux ลูกค้าต้องทำงานตั้งค่าบางอย่างก่อน/หลังติดตั้งซอฟต์แวร์ เช่น เขียนไฟล์ INI, ตรวจสอบการเชื่อมต่อ DB, ตรวจสอบ HTTP server

    • มีตัวเลือกเยอะ แต่จากประสบการณ์ของผม PyInstaller ง่ายที่สุดในด้านนี้
  • ดูดีนะ ผมเพิ่งทำแอปภายในสำหรับ DevOps และ change management ด้วย unicurses กับ Python แม้มันจะทำงานได้ แต่ไม่น่าจะขยายต่อได้ดี
    ตอนแรกลอง TK กับ QT แต่ทั้งคู่มีจุดแปลก ๆ ตอนติดตั้งเริ่มต้น QT ทำงานได้ดีแต่เอกสารที่มีประโยชน์ค่อนข้างน้อย
    Textual ดูตรงกับ requirement พอดี เลยตั้งใจว่าจะลองใช้แน่นอน

  • ผมไล่ดูคร่าว ๆ แล้วเช็ก https://textual.textualize.io/tutorial/ กับ https://github.com/Textualize/textual/blob/main/docs/example...
    สงสัยว่าฝั่ง Go มีอะไรที่คนใช้แล้วประสบความสำเร็จบ้าง เหตุผลที่ Textualize น่าสนใจคือมันให้ความรู้สึกค่อนข้าง เหมือนเว็บเบราว์เซอร์ และทำได้เรียบร้อยไปจนถึงมุมมองตารางที่เลื่อนได้
    tview ก็ดูน่าสนใจ แต่ถ้าดูตัวอย่างอย่าง brew install dbui จะรู้สึกว่าเป็นการจัดการแบบ imperative อย่าง if KeyPress.A: do_something() เองมากกว่าเป็น navigation แบบ declarative และซ้อนกัน
    บางทีนี่อาจเป็นความต่างระหว่างมุมมองแบบ application-centric/SPA ที่ “ควบคุมทุกอย่าง” กับมุมมองแบบ document-centric ที่ “เพิ่ม component ลงในหน้าแล้วปล่อยให้มัน flow” อยากฟัง feedback เกี่ยวกับรายการในลิสต์นี้: https://codeberg.org/tecras/awesome-go#advanced-console-uis

    • ที่ว่า “จัดการแบบ imperative อย่าง if KeyPress.A: do_something() เอง” หมายถึงมันไม่ได้ซ่อน message loop แบบที่กำลังฮิตกัน แต่ให้เราควบคุมจริง ๆ ใช่ไหม?
    • Bubble Tea ยอดเยี่ยมมาก
    • ผมเคยใช้ termui ในโปรเจกต์และไม่มีอะไรให้บ่น
      https://github.com/gizak/termui
  • Lazarus/Freepascal คือคำตอบ ที่เหลือแทบจะเป็นการถอยหลัง

  • animation กับ transition แบบนี้ทำด้วยข้อความ ASCII ล้วน ๆ เหรอ?

    • พูดให้ถูกคือเป็น ข้อความ Unicode แต่ใช่ ทั้งหมดเป็นข้อความ
    • ใช่ ทำให้เทอร์มินัลรู้สึกช้าลง /s
      ถ้าพูดจริงจังก็ควรลองดูฟีเจอร์ “easing” กับ transition ดีเลย์ประมาณ 500ms อาจขัดใจคนที่ชำนาญแล้ว แต่ดูเหมือนจะช่วยให้บริบทระหว่างเรียนรู้การนำทางในแอปได้
  • สงสัยว่าโปรเจกต์แบบนี้อยู่ต่อได้อย่างไร
    โปรเจกต์นี้พัฒนามา 2 ปีแล้ว แต่ไม่เห็นแหล่งรายได้ เลยสงสัยว่านักพัฒนาได้รับค่าตอบแทนในรูปแบบใดบ้างไหม

    • โปรเจกต์นี้ได้รับ seed investment ผู้ก่อตั้ง Textual เขียนบล็อกโพสต์ที่เกี่ยวข้องไว้ น่าอ่าน
      https://www.willmcgugan.com/blog/tech/post/from-open-source-...
    • โปรเจกต์โอเพนซอร์สส่วนใหญ่ดำเนินการและดูแลเป็นงานอดิเรก หรือเป็น โปรเจกต์เสริม ที่เกี่ยวข้องกับงานประจำที่มีค่าจ้าง
      ต้องพิจารณาตลาดด้วย ในปี 2023 แทบจะไม่มีใครเลยจริง ๆ ที่ยอมจ่ายเงินเพื่อใช้ไลบรารีวิดเจ็ตบนเทอร์มินัล