Theppitak's blog

My personal blog.

11 กุมภาพันธ์ 2557

Thanks, and the November-January Diary

เร่งงานตามสัญญาโครงการอยู่หลายเดือน ไม่ได้เขียน blog จึงขอขอบคุณย้อนหลัง สำหรับผู้สนับสนุนงานพัฒนาของผมในเดือนพฤศจิกายน 2556 ถึงเดือนมกราคม 2557ที่ผ่านมาดังนี้ครับ:

ขออวยพรปีใหม่สากลและตรุษจีนย้อนหลังแด่ผู้สนับสนุนทุกท่าน ขอให้เจริญอายุ วรรณะ สุขะ พละ พร้อมทั้งมั่งมีศรีสุขครับ และที่สำคัญคือ 願源碼與你同在。[หงวงหง่วงแบ้อื่อลื่อตั่งต๋อ] May the Source be with you!

สามเดือนที่ผ่านมา นอกจากงานโครงการอักษรอีสานที่เป็นงานหลักแล้ว ก็มีงานพัฒนาอื่น ๆ เช่น

  • swath 0.5.2
    • แก้ปัญหา infinite loop ใน LaTeX filter ซึ่ง นิวตรอน รายงานมาทาง G+ (เป็น private share) พร้อมแพตช์แก้
    • แก้ปัญหาอักขระหายใน token ยาว ๆ ใน HTML filter ซึ่งคุณ Nicolas Brouard จากโครงการ ดีโมพีเดีย ได้พบขณะใช้ swath ช่วยเตรียมเอกสารฉบับพิมพ์ จากการใช้ base-64 encode รูปภาพในแท็ก <img src="data:image/png;base64,...> ซึ่งทำให้ token ยาวพอจะทำให้พบบั๊กได้ ถือเป็น use case ที่น่าสนใจมาก และทำให้รู้ว่ายังมีผู้ใช้ที่ใช้ HTML filter อยู่ ไม่ใช่แค่ LaTeX
    บั๊กทั้งสองนี้ เกิดจากความพยายามในการป้องกัน buffer overflow ใน swath 0.5.1 แต่แก้ไม่สมบูรณ์ (รุ่นก่อนหน้านั้นจะ segfault ในบั๊กหลังเลยทีเดียว ซึ่งเป็นช่องทางของ buffer overflow exploit ได้)
  • libdatrie 0.2.8
    • แก้ warning ใน test suite
    • แก้ปัญหาที่พบในการใช้ datrie เก็บคีย์ที่เป็นข้อมูล binary ซึ่งจะใช้ alphabet เต็มช่วงตั้งแต่ 1 ถึง 255 ทำให้พบปัญหาคีย์ซ้ำสำหรับอักขระ 255 อันเนื่องมาจากค่าสิ้นสุดการวนลูปที่ไม่ถูกต้อง รายงานโดยคุณ Naoki Youshinaga
    • แก้ให้ trie ล้มเหลวเมื่อเดินด้วยอักขระนอกช่วง alphabet แทนที่จะยอมให้อักขระดังกล่าวเดินได้ด้วยค่า 255 แล้วทำให้เกิดคีย์ปลอม ๆ ขึ้น แนะนำโดยคุณ Naoki Youshinaga เช่นกัน
    • เพิ่มเติมรายละเอียดในเอกสารประกอบ ตามที่ทักท้วงโดยคุณ Naoki Youshinaga
  • ปรับแพกเกจใน Debian โดยการเปลี่ยนแปลงที่น่าสนใจคือ
    • libdatrie-dev และ libthai-dev รองรับ multi-arch แล้ว หลังจากที่รองรับแค่ตัว lib package มาก่อนหน้านี้ ขณะนี้ dpkg รองรับการใช้แฟ้มร่วมกันระหว่างหลายแพกเกจแล้ว ทำให้สามารถใช้ header file ร่วมกันระหว่าง architecture ที่ต่างกันได้
    • รัน test suite ในการ build ทั้งใน libdatrie และ libthai ซึ่งทำให้พบ warning เพิ่มเติมใน libthai และแก้ที่ต้นน้ำแล้ว
  • ร่วมแปล VLC หลังจากพบคำสะกดผิดใน UI ก็ได้แปลเพิ่มเติมด้วยพอสมควร โดยเฉพาะชื่อภาษาต่าง ๆ ทำให้ได้ไปสอบทานกับคำแปล ISO 639 และ ISO 639-3 ในแพกเกจ iso-codes ควบคู่กันไปด้วย (ออกมาในรุ่น 3.50)
  • ตรวจทาน คำแปล GNOME ตามที่มีผู้ส่งคำแปลเข้ามา
  • งานแปล Xfce ขณะนี้แปลได้ 70% แล้ว

ป้ายกำกับ: , , , , , , ,

01 กุมภาพันธ์ 2550

Scheduled Video Broadcast

ผมเองก็ไม่แน่ใจหรอกนะ ว่าอะไรหลายๆ อย่างที่เซ็ตไว้ที่โรงเรียน จะได้ใช้งานจริงหรือเปล่า แม้แต่เว็บโรงเรียนที่เคยทำไว้ ก็มีหลายส่วนที่สุดท้ายก็ไม่มีใครแตะต้องเลย (สาเหตุหลักคือการต่อต้านไอทีของครูเก่า) แต่ไหนๆ ก็ได้ลงแรงเซ็ตไปแล้ว อย่างน้อยๆ ก็ขอให้เกิดประโยชน์บ้าง ด้วยการบันทึกเป็นประสบการณ์เก็บไว้

งานอีกชิ้นหนึ่งที่เซ็ตไว้ในช่วงเดือนมกราที่ผ่านมา ก็คือระบบสถานีกระจายภาพ โดยจะเล่นวีดิทัศน์ตามกำหนดเวลาที่ตั้งไว้ ออกทางจอทีวีที่มีแผนจะติดตั้งไว้ที่จุดต่างๆ ของโรงเรียน

ทีแรก ก็นึกถึง solution แบบ video streaming ไว้ก่อนเลย เพราะจะสามารถใช้ LAN ของโรงเรียนกระจายสัญญาณไปที่จุดต่างๆ ได้เลย แต่ด้วยข้อกำหนดที่ต้องการแสดงสื่ออย่างอื่นนอกจากวีดิทัศน์ได้ด้วย เช่น slide show จึงต้องเปลี่ยนมาเป็นระบบเล่นออกจอเดียว แล้วใช้วิธีพ่วงสายทีวีเอา

ซึ่งก็ปรากฏว่าง่ายลงเยอะ โดยปัญหาถูกลดลงเหลือแค่การตั้งเวลาเล่นสื่อเท่านั้น ทำให้สามารถใช้โปรแกรมได้หลากหลายขึ้น จากเดิมที่คิดว่าคง VLC แน่ๆ ก็สามารถใช้เครื่องมืออย่าง Totem หรือ xine ได้ (Mplayer นั้น ยังไม่เคยใช้) แต่ปรากฏว่าไม่มีเวลาพอจะสำรวจความสามารถเรื่องการตั้งเวลาของ xine ได้แค่สำรวจ vlc และ totem เท่านั้น

vlc นั้น มี VLM ที่สามารถกำหนด schedule ได้ จึงสามารถตั้งโปรแกรมสถานีได้ ว่าจะเล่นอะไรเวลาไหน แต่ข้อจำกัดคือ ยังขาดความยืดหยุ่นในการควบคุมหากต้องการภาพออกจออย่างต่อเนื่อง โดยไม่เผยให้เห็นเดสก์ท็อปข้างหลัง เพราะเท่าที่ดูคำสั่งแล้ว ปัญหาใหญ่คือ VLM ไม่สามารถแทรกการควบคุมหลังจากเล่นสื่อที่เล่นรอบเดียวจบแล้วได้ และไม่สามารถปิดสื่อที่เล่นแบบ repeat ได้ด้วย เพราะเมื่อปิดแล้วก็จะเริ่มเล่นใหม่เสมอ หากจะทำได้ ก็แค่สั่ง pause หรือ play เท่านั้น

ผลก็คือ ถ้าจะโปรแกรมให้มีสื่อคั่นเวลาในช่วงต่อระหว่างโปรแกรม (เพื่อไม่ให้เผยเดสก์ท็อปข้างหลัง) จะทำได้ยาก เพราะจะให้ pause สื่อคั่นเวลาที่ repeat แล้วเล่นสื่อตามโปรแกรมรอบเดียว จบแล้ว play สื่อคั่นเวลาต่อ ก็ทำไม่ได้

นอกจากนี้ ยังมีปัญหาเรื่องการเหลื่อมของโปรแกรม โดยหากถึงเวลาเล่นสื่อตามกำหนด แล้วยังมีสื่ออื่นเล่นอยู่ vlc ก็จะไม่ยอมเล่นสื่อตามกำหนดนั้นเสียเฉยๆ โดยมีข้อความ debug บอกว่า resource ไม่ว่าง

อาจมีวิธีปรับแต่งได้มากกว่านี้ แต่ด้วยเวลาที่จำกัด จึงไม่สามารถสำรวจมากกว่านี้ได้ และเมื่อมาดู totem กลับพบวิธีควบคุมที่ง่ายกว่า

แทนที่จะใช้ telnet interface เหมือน vlc (ซึ่งความจริงคงสะดวกสำหรับการใช้งานในเครือข่าย) totem สามารถควบคุมผ่าน command line ได้ โดยสามารถสั่ง replace สื่อที่กำลังเล่นในหน้าต่างเดิมได้เลย โดยใช้ตัวเลือก --replace filename|URI (ใส่หลายสื่อได้)

ข้อดีอีกอย่างหนึ่งของ totem คือ ถ้าเล่นสื่อที่ไม่มีภาพ ก็จะแสดงภาพพื้นหลังคงไว้ เป็นรูปโลโก้ของ totem ซึ่งสามารถ hack ให้เป็นรูปอื่นได้ จึงเป็นการเพิ่มทางเลือกในการเล่นเพลงคั่นรายการได้โดยไม่เผยเดสก์ท็อปด้านหลัง

ส่วนเรื่องการตั้งเวลาเล่น totem ยังไม่มีความสามารถนี้เหมือน vlc แต่ก็ไม่ใช่ปัญหา เพราะสามารถตั้ง crontab สั่ง replace play list ของ totem ตามกำหนดเวลาได้

หมดเวลาสำรวจ.. ยังไม่ได้ดูตัวอื่นต่อเลย ก็คงลงเอยที่ totem นี่แหละ เมื่อตั้งให้เปิด totem แบบ fullscren โดยอัตโนมัติในแบบ kiosk แล้ว ก็แค่รอ cron สั่งเล่น play list ตามกำหนดเวลาเท่านั้นเอง ข้อเสียเปรียบหลักๆ ของ totem สำหรับงานนี้ ก็คงอยู่ที่เรื่อง format ที่เล่นได้ ยังไม่หลากหลายเท่า vlc แต่ก็พยายามถูไถ ด้วยการแปลง format ได้

คำถามที่อาจเกิดขึ้นคือ แล้วจะใช้ crontab ควบคุม vlc แบบที่ควบคุม totem ไม่ได้หรือ? คำตอบคือ vlc เผยเดสก์ท็อปด้านหลังง่ายเกินไป พอเล่นสื่อที่ไม่มีภาพ ก็จะหดหน้าต่างปิดส่วนแสดงภาพไปเลย หรือถ้าเล่นวีดิทัศน์จบแล้ว ก็หดหน้าต่างลงทันทีเหมือนกัน เมื่อเทียบกับวิธี replace play list ของ totem แล้ว ดู totem จะควบคุมได้ตามความต้องการมากกว่า

ป้ายกำกับ: , , , ,

hacker emblem