- เครื่องมือบันทึกเทอร์มินัล asciinema CLI 3.0 ถูก เขียนใหม่ทั้งหมด ด้วย Rust พร้อมเพิ่มความสามารถ อัปเกรดฟอร์แมตไฟล์ และ ไลฟ์สตรีมมิงเทอร์มินัล
- การเลือกใช้ Rust ทำให้สามารถแจกจ่ายแบบ static binary ได้ มีเวลาเริ่มต้นที่รวดเร็วขึ้น และด้วยการผสาน AVT จึงจัดการ concurrency และ system call ได้ง่ายขึ้น พร้อมวางรากฐานสำหรับฟีเจอร์ใหม่
- ฟอร์แมตใหม่ asciicast v3 เพิ่มระบบเวลาแบบ interval (delta)-based timing สำหรับอีเวนต์, จัดโครงสร้างเมตาดาต้าย่อยไว้ใต้
term, รองรับอีเวนต์จบการทำงาน "x", และเพิ่มคอมเมนต์ระดับบรรทัด # เพื่อให้แก้ไขและแสดงผลได้ยืดหยุ่นขึ้น
- ไลฟ์สตรีมมิงเทอร์มินัล มีให้ใช้สองโหมดคือเซิร์ฟเวอร์ภายในเครื่องแบบโลคัล และรีเลย์ระยะไกล (โฮสต์เอง/เซิร์ฟเวอร์ทางการ) โดยมี adaptive buffering ตามสภาพเครือข่ายเพื่อให้การรับชมลื่นไหล
- ปรัชญาหลักถูกปรับกลับเป็น Local-first โดย
rec ต้องระบุชื่อไฟล์เสมอและแยกการอัปโหลดออกมาต่างหาก (upload <ไฟล์>), พร้อม พรอมป์ตให้เลือกเซิร์ฟเวอร์ของตนเอง เพื่อรองรับการ self-hosting มากขึ้นและลดความเสี่ยงจาก ข้อมูลรั่วไหลโดยไม่ตั้งใจ
เปิดตัว 3.0: asciinema CLI ที่เขียนใหม่ด้วย Rust และการปรับปรุงสำคัญ
- asciinema CLI 3.0 เปิดตัวอย่างเป็นทางการแล้ว
- เวอร์ชันนี้มีการ เขียนโค้ดทั้งหมดใหม่ด้วย Rust ควบคู่ไปกับ การอัปเกรดฟอร์แมตไฟล์บันทึก
- มีการเพิ่มและปรับปรุงฟีเจอร์หลายอย่าง รวมถึง ไลฟ์สตรีมมิงเซสชันเทอร์มินัล
การเขียนใหม่ด้วย Rust และการปรับปรุงโดยรวม
- CLI ถูก เขียนใหม่ทั้งหมดด้วย Rust เพื่อยกระดับประสบการณ์ของนักพัฒนาและการบำรุงรักษา พร้อมทั้งแจกจ่ายเป็น static binary ทำให้ขั้นตอนติดตั้งง่ายขึ้น เปิดใช้งานได้เร็วขึ้น และรองรับการขยายฟีเจอร์ได้ดีขึ้น
- ผู้เขียนเลือกใช้ Rust จากประสบการณ์ที่พบว่าการจัดการ system call และ concurrency ทำได้ง่ายกว่า Python และยังผสาน asciinema virtual terminal (AVT) เข้ากับ CLI จึงเปิดทางให้สร้างฟีเจอร์ใหม่ได้
- ผลลัพธ์คือได้ รากฐานสำหรับการเพิ่มฟีเจอร์ในอนาคต ทั้งในด้านประสิทธิภาพ การแจกจ่าย และสถาปัตยกรรม
ฟอร์แมตไฟล์ asciicast v3
- ฟอร์แมตไฟล์ asciicast v3 คือวิวัฒนาการถัดไปที่เข้ามาแก้ข้อจำกัดหลายอย่างของ v2
- ระบบ timestamp แบบค่าสัมบูรณ์ของ v2 ถูกแทนที่ด้วย interval (delta)-based timing เพื่อแก้ปัญหาที่ต้อง ปรับ timestamp ทั้งชุดของเหตุการณ์ถัดไป เมื่อต้องแทรกหรือลบอีเวนต์
- มีการจัดโครงสร้าง header ใหม่ โดยรวมเมตาดาต้าที่เกี่ยวกับเทอร์มินัลไว้ใต้คีย์
term และรองรับอีเวนต์ "x" (exit) สำหรับเก็บสถานะการจบเซสชัน
- อนุญาตให้มี คอมเมนต์ระดับบรรทัด (
#) ภายในไฟล์ เพื่อให้อ่านและดูแลจัดการได้ง่ายขึ้น
- มีตัวอย่างสไนปเป็ตเพื่อแสดงโครงสร้างและการจัดองค์ประกอบของสตรีมอีเวนต์ให้เข้าใจได้ตรงไปตรงมา
- ฟอร์แมตใหม่นี้รองรับแล้วใน asciinema server และ asciinema player
ไลฟ์สตรีมมิงเทอร์มินัล
- โหมดโลคัล: ใช้เซิร์ฟเวอร์ HTTP ที่ฝังมาในตัวเพื่อให้รับชมสตรีมได้ภายในเครือข่ายเดียวกัน เป็นโหมดที่ ให้ความสำคัญกับความเป็นส่วนตัว เพราะข้อมูลจะถูกส่งไปยังเบราว์เซอร์ของผู้ชมเท่านั้น
- CLI มาพร้อม asciinema player เวอร์ชันล่าสุดแบบ bundle จึงเล่นได้ทันที แต่อาจต้องเปิดพอร์ตบนไฟร์วอลล์
- โหมดระยะไกล: ใช้ asciinema server (ทั้งเซิร์ฟเวอร์ทางการหรือที่โฮสต์เอง) เป็นรีเลย์เพื่อเผยแพร่สตรีมผ่าน URL ที่แชร์ได้
- ทั้งสองโหมดสามารถใช้งาน พร้อมกันได้ ทำให้เลือกการกระจายสตรีมได้ตามสถานการณ์
- ตัว player ใช้ adaptive buffering โดยอิงจากการวัดความหน่วงของเครือข่ายแบบเรียลไทม์ เพื่อสร้างสมดุลระหว่างความหน่วงต่ำกับการป้องกัน buffer underrun
- ฝั่งเซิร์ฟเวอร์รองรับ การบันทึกสตรีมอัตโนมัติ ขณะที่เซิร์ฟเวอร์ asciinema.org ที่ให้บริการอยู่ในปัจจุบันปิดการบันทึกไว้ และมีนโยบาย จำกัดสตรีมพร้อมกัน 1 รายการ
- หาก self-hosting จะเปิดการบันทึกเป็นค่าเริ่มต้น และไม่มีการจำกัดจำนวนสตรีมพร้อมกัน
การกลับสู่แนวทาง Local-first
- ในอดีต
asciinema rec มีขั้นตอนอัปโหลดรวมอยู่ในเส้นทางการใช้งานปกติ จึงมีความเสี่ยงต่อ การเปิดเผยหรือรั่วไหลของข้อมูลโดยไม่รู้ตัว
- ในเวอร์ชัน 2.4 ได้เพิ่ม พรอมป์ตก่อนอัปโหลด เพื่อเตรียมการเปลี่ยนผ่าน และใน 3.0 ได้เปลี่ยนเป็น ต้องระบุชื่อไฟล์ พร้อม ตัดความสามารถอัปโหลดออกจาก
rec และแยกเป็นคำสั่งชัดเจน upload <ไฟล์>
- ปรัชญาหลักถูกทำให้ชัดเจนว่าเป็น local-first โดยออกแบบ flow ใหม่ให้ผู้ใช้เป็นผู้ตัดสินใจว่าจะเผยแพร่หรือแชร์เมื่อมีเจตนาเท่านั้น
- รองรับการใช้งานแบบโลคัลล้วน อย่างสมบูรณ์ และจะเผยแพร่ก็ต่อเมื่อสั่งอย่างชัดเจนเมื่อจำเป็น
เสริมความเป็นมิตรต่อการ self-hosting
- เมื่อใช้
upload/stream/auth ครั้งแรก จะมี พรอมป์ตให้เลือก URL ของเซิร์ฟเวอร์ โดยเสนอค่าเริ่มต้นเป็น asciinema.org แต่จะบันทึก อินสแตนซ์ที่ผู้ใช้เลือกตามเจตนา ไว้
- เดิมก็สามารถกำหนดผ่านไฟล์ตั้งค่าหรือตัวแปรสภาพแวดล้อมได้อยู่แล้ว แต่แนวทางนี้ช่วยให้กำหนดค่าได้ง่ายขึ้นใน สภาพแวดล้อมแบบโต้ตอบ (เช่น VM ใหม่หรือ Dev container)
- แนวทางนี้ช่วยเพิ่มความสะดวกในการ self-hosting และยังทำหน้าที่เป็นมาตรการความปลอดภัยเพิ่มเติมเพื่อ ป้องกันการอัปโหลดออกภายนอกโดยไม่ต้องการ
การแจกจ่ายและคำแนะนำการใช้งาน
- อาจต้องใช้เวลาสักระยะกว่าที่แต่ละดิสทริบิวชันจะอัปเดตแพ็กเกจในรีโพซิทอรีของตน
- ในระหว่างนี้สามารถดาวน์โหลด ไบนารีที่ pre-build แล้วสำหรับ GNU/Linux และ macOS จาก GitHub Releases มาใช้งาน หรือจะ build จากซอร์ส ก็ได้
- รายละเอียดรีลีสและประวัติการเปลี่ยนแปลงแบบเต็มสามารถดูได้จาก release notes และเอกสาร CHANGELOG บน GitHub
ยังไม่มีความคิดเห็น