Ratty: เทอร์มินัลอีมูเลเตอร์ที่รองรับกราฟิก 3D แบบอินไลน์
(ratty-term.org)- Ratty เป็นเทอร์มินัลอีมูเลเตอร์ที่เรนเดอร์ด้วย GPU และรองรับกราฟิก 3D แบบอินไลน์
- มาพร้อมกับเคอร์เซอร์รูปหนูกำลังหมุน
- สามารถอ่านบทความบล็อกได้บนเว็บไซต์
- สามารถไปที่ดาวน์โหลด Rattyได้บนเว็บไซต์
- สามารถไปที่ดูซอร์สได้บนเว็บไซต์
2 ความคิดเห็น
ความเห็นจาก Hacker News
มีบางคนพูดถึงการใช้งานกับ VR ที่นี่ เลยนึกขึ้นได้ว่าเมื่อก่อนเคยลองทำ UI 3D แบบตื้น สำหรับพัฒนาซอฟต์แวร์อยู่บ้าง
มันเป็นความลึกตื้น ๆ แค่ไม่กี่เซนติเมตรเข้าไปจากหน้าจอแล็ปท็อป เพื่อให้ใช้ได้ทั้งวันโดยล้าตาน้อยจาก VAC และให้ความรู้สึกใกล้เคียงกับการวาดโดยเพิ่มสีและเลเยอร์ใน 3D มากกว่าการเหวี่ยงแขนไปมาในห้อง
3D ทำได้ด้วย wobble 3D, มุมมองจากการติดตามศีรษะ/ดวงตาด้วยเว็บแคม, stereo แบบแว่นชัตเตอร์, XR HMD ฯลฯ วิธี wobble ทำได้ง่ายสุดแต่ดูน่ารักและค่อนข้างรบกวนสายตา ส่วนการใช้มุมมองจะละเอียดอ่อนกว่าและกวนใจน้อยกว่า
stereo pair ของแอปอาจทำได้แบบ “มีหน้าต่างตาซ้าย/ตาขวาสองบาน” หรือ “สลับแสดงมุมมองซ้ายขวาพร้อม labeling/synchronization/polling” ซึ่งหลายอย่างในนี้ต้องพึ่งการรองรับจากระบบหน้าต่าง/window manager/เดสก์ท็อป ผมได้แรงส่งเยอะทีเดียวจากการซ้อน Electron กับ X
การดันข้อความให้ออกมาเป็น 3D สนุกกว่าการใส่สี และถ้ายอมรับหน้าตาที่ดูรกขึ้นได้ ก็ยังใส่เลเยอร์ข้อมูลเสริมที่แยกด้วยความลึกได้ด้วย ถ้า Emacs มีความลึกระดับตัวอักษร มันก็จะมีบางอย่างที่แม้แต่ LispM ก็ยังไม่มี
แต่เวลาจะสำรวจความเป็นไปได้กับสิ่งที่โดยเนื้อแท้ไม่ใช่ 3D อย่างข้อความโค้ด การทำ prototype UX ด้วยสีพื้นหน้า/พื้นหลัง, ฟอนต์, Unicode, แอนิเมชัน จะง่ายกว่ามาก และถ้าเป็นเบราว์เซอร์ก็ใช้ div ซ้อนกันกับแคนวาส 2D/3D โปร่งใสได้
ทุกตัวอักษรคือ quad ที่ถูกวางไว้ใน 3D และเรนเดอร์แบบ instance เลยรองรับได้เป็นหลายสิบล้านตัวขึ้นไป แต่ละตัวอักษรถูกอ้างอิงและแก้ไขแยกกันได้เหมือนเป็น polygon คนละชิ้น
ตอนนี้ผมใช้มันเรนเดอร์ทั้ง GitHub repository พร้อมกันในครั้งเดียว และมีทั้งเวอร์ชัน native บน Apple กับเวอร์ชันเว็บ เวอร์ชันเว็บมีองค์ประกอบพื้นฐานของ IDE อยู่แล้ว และอยากฟังมุมมองหรือข้อคิดเห็นจากคนอื่น
https://ivanlugo.dev/ide
UNIX ดูเหมือนว่ายังพยายามไล่ตาม Xerox workstation หรือ Lisp machine ทั่วไปอยู่เลยในแง่ประสบการณ์ REPL
ในปี 1981 ก็มี inline graphics แล้ว
https://youtu.be/o4-YnLpLgtk?t=376
สำหรับคนที่ยังไม่เคยดู: https://www.youtube.com/watch?v=yJDv-zdhzMY
ผมชอบอันนี้นะ ไม่มีเหตุผลเลยว่าทำไมเทอร์มินัลต้องรองรับแค่ข้อความ
โน้ตบุ๊กด้าน data science แสดงให้เห็นหนึ่งในทิศทางที่เทอร์มินัลอาจพัฒนาต่อไปได้ และมีอะไรน่าสนใจเกิดขึ้นในพื้นที่นี้เยอะมาก Kitty น่าจะเป็นผู้เล่นที่ผลักนวัตกรรมแรงที่สุดในตอนนี้ [1]
แต่ผมก็ยังไม่แน่ใจว่ามีวิสัยทัศน์ภาพรวมที่ชัดเจนหรือเปล่า
[1]: https://sw.kovidgoyal.net/kitty/protocol-extensions/
[1] https://github.com/joouha/euporie
pyvistaเคยทำสำเร็จแล้วในการใช้กราฟิกของ Kitty เพื่อ เรนเดอร์วัตถุ 3D แบบกำหนดเองลงในเทอร์มินัลโดยตรงมันเป็นการแฮ็กครั้งใหญ่ และแทบไม่มีทางอื่นให้ได้ประสิทธิภาพนอกจากใช้ shm
https://git.theresno.cloud/panki/kglobe
มันอาจไปไกลกว่า “haiku+macOS mashup” ที่ผมเคยนึกภาพไว้ว่าเป็นอนาคตการคอมพิวต์ในอุดมคติด้วยซ้ำ
ปกติผมชอบสำรวจ filesystem จากเทอร์มินัลมากกว่าคลิกใช้ file manager ถ้ามี
lsแบบตารางที่แสดงโมเดล 3D ในไดเรกทอรี (STL/STEP, 3D printing) ด้วยการเรนเดอร์ผ่านเทอร์มินัลก็น่าจะมีประโยชน์มากถ้าพรีวิวโมเดลแล้วหมุนดูได้ด้วยก็ยิ่งดี
ยังนึกไม่ออกว่าจะเอาไปใช้ตรงไหน แต่เอฟเฟกต์ภาพมันสนุกดี และผมก็ชอบ ดีไซน์แนว brutalism ของเว็บไซต์ด้วย มันทำให้นึกถึงความทรงจำดี ๆ ในอดีต
อันนี้ดูดีมากเลยนะ?
มีคำถามหน่อย จากความสามารถในการเรนเดอร์ ดูเหมือนว่า 2D ก็น่าจะทำได้ดี ใช่ไหม หรือผมเข้าใจผิด? วิธีแก้ปัญหาที่มีอยู่ตอนนี้สำหรับการได้ภาพ 2D คุณภาพสูงหรือการ rasterize ในเทอร์มินัล ส่วนใหญ่ยังไม่ค่อยดีนัก เลยสงสัยว่าอันนี้จะดีกว่าวิธีอื่นหรือเปล่า หรือสุดท้ายก็ไปติดข้อจำกัดพื้นฐานอะไรบางอย่าง
แล้วถ้าใช้ GPU acceleration เวลาผ่าน ssh จะเป็นยังไงด้วย
เทอร์มินัลกำลังค่อย ๆ กลายเป็น เว็บเบราว์เซอร์แบบฟูลฟีเจอร์
พูดตามตรง ตอนนี้ผมก็ยังไม่รู้ แต่ตั้งใจว่าจะลองดูเองเร็ว ๆ นี้ :D
https://github.com/fathyb/carbonyl
https://hyper.is/
ขอร่วมไว้อาลัยให้ Terry ขออย่าให้เขาถูกลืมไปเลย
และพูดเพิ่มเติมอีกนิดว่า พอดูโปรเจกต์นี้แล้วก็รู้สึกเหมือนจิตวิญญาณของเขายังมีชีวิตอยู่ต่อไป :D
เห็นอันนี้แล้วนึกถึงตอน compiz ออกมาใหม่ ๆ ที่ทุกคนพูดว่า “หน้าต่างของฉันอยู่บนลูกบาศก์” หรือ “ฉันต้องมี หน้าต่างเด้งดึ๋ง”
เพราะงั้นผมก็เลยทำตัวสมกับเป็นคนแบบนั้นด้วยการติดตั้งมันทันที
การสลับไปมาระหว่าง Windows กับ Ubuntu พร้อมเอฟเฟกต์แอนิเมชันสารพัดของ compiz มันให้ความรู้สึกเหมือนเวทมนตร์เลย
จากบล็อกโพสต์ที่ลิงก์ไว้ ผมเพิ่งไปรู้จัก glyph protocol [1] ที่เพิ่งถูกเสนอขึ้นมาใหม่ ซึ่งน่าสนใจมาก
เมื่อราว 6 เดือนก่อนผมยังบ่นอยู่เลยว่าไม่มีอะไรแบบนี้ [2]
[1] https://rapha.land/introducing-glyph-protocol-for-terminals/
[2] https://news.ycombinator.com/item?id=45805072
https://github.com/tikimcfee/glyph3d-js
มันทำได้ในระดับหนึ่งอยู่แล้วผ่าน Kitty graphics protocol ผมเคยทำเดโม เรนเดอร์กราฟิก 3D บน Kitty ไว้ [1]
ส่วนที่สำคัญแต่ยังขาดอยู่จริง ๆ คือ vsync ซึ่งดูเหมือน ratty ก็ยังไม่มีเหมือนกัน
ถ้าการเรนเดอร์ไม่ถูกซิงก์ เทอร์มินัลอีมูเลเตอร์อาจไปอ่าน framebuffer ระหว่างที่แอปพลิเคชันกำลังเขียนอยู่ ทำให้เกิด visual artifact ได้
[1] https://x.com/zack_overflow/status/2035921425341763756?s=20
ความเห็นจาก Lobste.rs
หน้าแลนดิงเพจมีกลิ่น LLM เลยไปอ่านโพสต์บล็อกดู แล้วก็เป็นอย่างที่คิดจริง ๆ
ถ้าจะติดแท็กกับการใช้งาน AI เอง ก็คงต้องติดให้กับโปรเจ็กต์ 90% เลย และบทสนทนาก็จะหลุดออกจากตัวผลงานไปด้วย ไม่อยากให้เธรดเกี่ยวกับเทอร์มินัลอีมูเลเตอร์ที่แสดงหนู 3D ซึ่งมีคนคนเดียวแฮ็กทำขึ้นมา ไหลกลายเป็นการถกเถียงด้านจริยธรรม
ผมเองก็ใส่3D เล็กน้อยเพื่อสร้างเอฟเฟกต์ว้าวเร็ว ๆ เหมือนกัน แต่ผมคิดว่าเป้าหมายควรเป็นการทบทวนพื้นฐานใหม่อย่างรอบคอบ แม้ว่าการทดลองของผมจะล้มเหลว อย่างน้อยผมก็ภูมิใจที่ได้สร้างผลิตภัณฑ์จากมุมมองแบบมนุษย์ เพื่อมนุษย์
แน่นอนว่าถ้าพวกเขาทำสิ่งนี้เพราะสนุกจริง ๆ มันก็ไม่ได้มีปัญหาอะไรในตัวมันเอง
อ่านกี่รอบก็ยังสับสนมากอยู่ดี
ด้านหนึ่งพอเห็น sixel หรือ kitty ก็ยังนึกว่า “ทำไปทำไม?” อยู่เรื่อย ๆ การเอากราฟิกมาใส่ในอินเทอร์เฟซที่โดยพื้นฐานแล้วเน้นข้อความมันก็ดูเท่ดี แต่ไม่ค่อยเห็นว่าจะใช้งานจริงได้แค่ไหน แน่นอนว่าจะแย้งแบบเดียวกันกับ curses หรือ slang ก็ได้
แต่อีกด้านหนึ่งก็อดสงสัยไม่ได้ว่าจะมีทางยัด โปรโตคอล/การแสดงผลการเรนเดอร์ 3D เข้าไปใน Emacs ได้ไหม ยังไม่รู้เลยว่าจะเอาไปทำอะไร แต่คิดว่าคงเจ๋งมากแบบโปรเจ็กต์นี้
เมื่อก่อนเราสร้างโปรแกรมกันเพราะมันสนุก จำกันไม่ได้แล้วหรือ?
ผมใช้เวลาช่วงเย็นครึ่งวันทำให้ Haskell CAD framework ของผมสามารถส่งออกวัตถุในรูปแบบที่ Ratty อ่านได้
เมื่อเทียบกับเวลาที่ลงไป มันดูมีแววพอสมควร แต่ก็อยากให้คำสั่ง “จัดวางวัตถุ” ปรับแต่งได้มากกว่านี้หน่อย อยากให้มันจัดการสร้างพื้นที่ใน REPL output และปรับขนาดวัตถุได้ด้วยตัวเอง
อีกอย่าง Ratty ดูจะโหลด ไฟล์นอกโฟลเดอร์ assets ไม่ได้ ซึ่งค่อนข้างน่าเสียดาย การเลื่อนหน้าจอก็ดูเหมือนจะพังนิดหน่อย เพราะผมเห็นวัตถุหายไปบ่อยทั้งที่ยังไม่น่าจะถึงเวลาหาย แต่อาจเป็นเพราะผมทำอะไรผิดเองก็ได้