Textual - เฟรมเวิร์กพัฒนาแอปพลิเคชันอย่างรวดเร็วสำหรับ Python
(github.com/Textualize)- 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 demo ได้แบบไม่ต้องติดตั้งด้วย
- แพ็กเกจ
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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เดโม Textual ที่ผมชอบที่สุดตอนนี้คือ https://github.com/1j01/textual-paint
เป็น โคลน Microsoft Paint ที่ค่อนข้างดีและรันในเทอร์มินัล
สิ่งแรก ๆ ที่ผมใส่เข้าไปตอนสร้างโปรเจกต์ Python ใหม่คือ https://github.com/Textualize/rich
เลือกเพราะทำให้เอาต์พุตในเทอร์มินัลดูดีได้ง่ายมาก
ในทางกลับกัน Rich นั้นยอดเยี่ยมและทำให้ flow การพัฒนาลื่นมาก ชอบตรงที่มี API ดี ๆ ให้ใช้ฟีเจอร์อย่างตัวหนา สี อีโมจิ และตารางได้ทันที
ดูเจ๋งทีเดียว
ตอนอยู่บริษัทเทรดดิ้งเดิม เราใช้ 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 นั้นง่าย แต่ดูแลต่อหลังจากนั้นยาก
แต่ตราบใดที่ยังเป็น เวอร์ชัน 0.x เราก็พยายามใช้ประโยชน์จากข้อดีที่ยังปรับทิศทางได้ทีละนิดเมื่อเห็นชัดว่าแนวทางไหนดีกว่า
เวลาออก release ใหม่ เราพยายามประกาศ breaking changes ให้เห็นเด่นที่สุดเท่าที่ทำได้ ถ้ามีส่วนไหน workaround ยากหรือทำให้กลับมาทำงานได้ลำบาก ก็ขอความช่วยเหลือได้ผ่าน GitHub issue, discussion หรือถ้าต้องการก็ใน Discord
ผมไม่ได้เป็นนักพัฒนาที่ทำ Python มาเยอะ เลยอยากถามว่า การทำสิ่งนี้ให้เป็น binary โดยไม่ต้องมี dependency ใหญ่ ๆ นั้นง่ายแค่ไหน
กำลังมองหาอะไรสักอย่างที่ช่วยทำแพ็กเกจติดตั้งผลิตภัณฑ์สำหรับ Windows และ Linux ลูกค้าต้องทำงานตั้งค่าบางอย่างก่อน/หลังติดตั้งซอฟต์แวร์ เช่น เขียนไฟล์ INI, ตรวจสอบการเชื่อมต่อ DB, ตรวจสอบ HTTP server
ดูดีนะ ผมเพิ่งทำแอปภายในสำหรับ 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
if KeyPress.A: do_something()เอง” หมายถึงมันไม่ได้ซ่อน message loop แบบที่กำลังฮิตกัน แต่ให้เราควบคุมจริง ๆ ใช่ไหม?https://github.com/gizak/termui
Lazarus/Freepascal คือคำตอบ ที่เหลือแทบจะเป็นการถอยหลัง
animation กับ transition แบบนี้ทำด้วยข้อความ ASCII ล้วน ๆ เหรอ?
ถ้าพูดจริงจังก็ควรลองดูฟีเจอร์ “easing” กับ transition ดีเลย์ประมาณ 500ms อาจขัดใจคนที่ชำนาญแล้ว แต่ดูเหมือนจะช่วยให้บริบทระหว่างเรียนรู้การนำทางในแอปได้
สงสัยว่าโปรเจกต์แบบนี้อยู่ต่อได้อย่างไร
โปรเจกต์นี้พัฒนามา 2 ปีแล้ว แต่ไม่เห็นแหล่งรายได้ เลยสงสัยว่านักพัฒนาได้รับค่าตอบแทนในรูปแบบใดบ้างไหม
https://www.willmcgugan.com/blog/tech/post/from-open-source-...
ต้องพิจารณาตลาดด้วย ในปี 2023 แทบจะไม่มีใครเลยจริง ๆ ที่ยอมจ่ายเงินเพื่อใช้ไลบรารีวิดเจ็ตบนเทอร์มินัล