• เครื่องมือบันทึกเทอร์มินัล 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

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น