Theppitak's blog

My personal blog.

18 มีนาคม 2557

Fonts-TLWG 0.6.0

ออกไปแล้วเมื่อวาน สำหรับ Fonts-TLWG 0.6.0 สำหรับรุ่นนี้ การเปลี่ยนแปลงที่สำคัญที่ทำให้ถึงกับต้องเพิ่มเลขรุ่นที่เลขกลาง ก็คือการรองรับภาษาชาติพันธุ์อย่างมีการเตรียมการ

สำหรับข้อมูลเบื้องต้นเกี่ยวกับภาษาชาติพันธุ์ กรุณาอ่าน blog เก่า และ บทความของคุณอนงค์ เพิ่มเติม

ที่ว่า รองรับอย่างมีการเตรียมการ ก็เพราะในรุ่นก่อนก็สามารถรองรับได้ในระดับหนึ่ง หลังจากที่ Pango 1.31.0 (GNOME 3.6) ขึ้นไปได้โละ engine ภาษาไทยที่ใช้ วทท. 2.0 (มอก. 1566-2541) ทิ้ง และย้ายไปใช้ HarfBuzz จัดการแทน ก็ทำให้กระบวนการวาดภาษาไทยย้ายหนีจาก วทท. 2.0 มาเป็น normalization ตามข้อกำหนดยูนิโค้ด โดยปริยาย ซึ่งข้อกำหนดนี้จะผ่อนคลายกว่า วทท. 2.0 ที่ผูกติดกับภาษาไทยเพียงภาษาเดียว เพราะยูนิโค้ดได้เตรียมการเผื่อการใช้อักษรไทยเขียนภาษาชาติพันธุ์ต่าง ๆ เอาไว้ด้วย ทำให้ฟอนต์ชุด TLWG รุ่นเก่าก็สามารถใช้เขียนภาษาชาติพันธุ์ได้ทันที แต่จะเป็นการวางอักขระซ้อนกันแบบไม่มีการจัดตำแหน่ง บางกรณีก็วางแล้วไม่ซ้อนกัน บางกรณีก็ซ้อนทับกัน แต่ในฟอนต์รุ่น 0.6.0 นี้ มีการออกแบบเพื่อรองรับกรณีต่าง ๆ ให้จัดวางอักขระได้อย่างสวยงาม

ข้อกำหนด วทท. 2.0 นั้น มีลำดับการซ้อนสระและวรรณยุกต์ตายตัวตามอักขรวิธีภาษาไทย แต่เมื่ออักษรไทยถูกใช้เขียนภาษาชาติพันธุ์ จะมีการดัดแปลงอักขระบางตัวเพิ่มเติม เช่น ใช้ไม้ไต่คู้กำกับเหนือสระบน ใช้วรรณยุกต์เหนือไม้ไต่คู้ ใช้ทัณฑฆาตหรือยามักการเป็นวรรณยุกต์เพิ่มเติม การประพินทุใต้สระ การวางสระบนเหนือสระอา หรือกระทั่งดัดแปลงไม้ตรีใช้เป็นสระพิเศษ!

Ethnic languages using Garuda font

ภาษาชาติพันธุ์ที่ใช้ในรูป (ตั้งแต่บรรทัดที่สองเป็นต้นไป ส่วนบรรทัดแรกใช้ทดสอบฟอนต์ตามข้อกำหนดยูนิโค้ดเท่านั้น) :-

  • ภาษากูย/ส่วย (สุรินทร์) [1]:
    • ปะเฺติ็ลฺ = ขันตักน้ำ
    • โฺญฺ็จฺ = หยุดกึกเพราะกลัวหรือตกใจ
  • ภาษาเขมรถิ่นไทย (สุรินทร์):
    • ปั็วฮฺ
    • ทฺ็อง
    • เปฺิ็ว
    • มูํย
  • ภาษาบรู/ข่า:
    • แต็่ง = to spread
    • เจฺํอ = already
    • เปรฺิ่ห์ = dirty
    • โจ๊่ = bunch of bamboo
    • เปฺี่ย = to mix
  • ภาษาโส้:
    • โฺทร = โส้ (ชื่อภาษา)
  • ภาษาช์อง (จันทบุรี):
    • ม็่อง
  • ภาษาญัฮกุร [อ่านว่า ญะกุ้น] (ชัยภูมิ):
    • เติ็ง
  • ภาษาละว้า:
    • อาื = chase
    • ยาึ = mine
  • ภาษามลายูปาตานี [2]:
    • จือรฺุ
    • การฺู

การใช้งานเหล่านี้ นอกจากทำให้ต้องยกเครื่องจาก วทท. 2.0 เป็นยูนิโค้ดแล้ว ยังมีผลต่อการออกแบบฟอนต์ที่ต้องรองรับกรณีพิเศษเพิ่มเติมด้วย

สำหรับฟอนต์ TrueType/OpenType สิ่งที่ทำเพิ่มก็คือ:

  • เพิ่ม glyph สำหรับอักขระยกสูงเพิ่มเติม นอกจากชุดวรรณยุกต์ปกติในฟอนต์ทั่วไปแล้ว ก็ต้องมีไม้ไต่คู้ นิคหิต และยามักการยกสูงเพิ่มด้วย โดย glyph ชุดนี้จะมีขนาดย่อส่วนลงเล็กน้อย แต่ไม่ใช่ scale down ตามปติ เพราะจะทำให้ได้เส้นที่บางลง แต่จะเป็นการวาดด้วยเส้นหนาเท่าเดิมให้ตัวเล็กลง
  • เพิ่มกฎ GSUB ในการแปลงอักขระชุดดังกล่าวให้เป็นตัวยกสูง โดยต้องครอบคลุมทุก combination ไม่ใช่แค่ที่มีในภาษาไทย
  • เพิ่ม anchor ให้กับอักขระเหนือบรรทัด ให้สามารถซ้อนกันได้ครบทุกคู่ ไม่ใช่แค่ที่มีในภาษาไทย
  • เพิ่ม anchor ชนิด BelowMark อีกชนิดหนึ่งในตาราง 'mkmk' (mark to mark) เพื่อรองรับการซ้อนสระล่างใต้พินทุ พร้อมทั้งเพิ่ม anchor ให้กับ glyph แต่ละ glyph ให้ครบ

นอกจากนี้ ยังได้ ส่งแพตช์ สำหรับแก้ให้ HarfBuzz normalize อักขระใต้บรรทัดให้พินทุมาก่อนสระล่างอย่างถูกต้องด้วย ซึ่งแพตช์ยังอยู่ระหว่างอภิปราย

แต่เนื่องจากฟอนต์ชุด TLWG ยังมีการใช้งานใน LaTeX (pdfTeX engine) ด้วย ซึ่งใน LaTeX ยังคงใช้ PUA glyph แบบเก่า (ที่เรียกกันว่า ตัวหลบ) อยู่ ไม่สามารถใช้ประโยชน์จากการปรับข้อมูล OpenType ข้างต้นได้ จึงต้องปรับขยายกฎ LIGKERN ให้ครอบคลุมกรณีของภาษาชาติพันธุ์เพิ่มเติม กล่าวคือ ต้องเพิ่มกฎต่อไปนี้:

  • ใช้วรรณยุกต์ยกสูงถ้าตามหลังไม้ไต่คู้ วรรณยุกต์ หรือทัณฑฆาต (กฎ LIGKERN ใน LaTeX จะใช้วรรณยุกต์ตัวลดต่ำโดยปริยาย แล้วค่อยใช้กฎ LIGKERN ยกให้สูงขึ้น ซึ่งจะกลับกันกับฟอนต์บนเดสก์ท็อป)
  • ใช้วรรณยุกต์ยกสูงหลบซ้ายถ้าตามหลังไม้ไต่คู้ วรรณยุกต์ หรือทัณฑฆาตที่หลบซ้าย
  • ใช้สระบนที่หลบซ้ายถ้าตามหลังพินทุที่ตามหลังพยัญชนะหางยาว (ป ฝ ฟ ฬ)
  • ใช้สระอุ อู ลดต่ำเมื่อตามหลังพินทุ
  • generalize กฎอื่น ๆ ที่บังเอิญเจาะจงเฉพาะกรณีที่ปรากฏในภาษาไทยไว้ เช่น ใช้นิคหิตหลบซ้ายหลังสระอูและพินทุที่ตามหลังพยัญชนะหางยาว, ใช้สระบนหลบซ้ายถ้าตามหลังสระอุ อู ที่ตามหลังพยัญชนะหางยาว)

นั่นคือสิ่งที่ทำได้ในตอนนี้สำหรับ LaTeX ยังมีกรณีที่ขาดเหลืออยู่ซึ่งยังไม่สามารถทำได้ เนื่องจากตาราง LTH encoding เต็มแล้ว ไม่มีช่องเหลือให้เพิ่ม PUA glyph เช่น

  • ยามักการยกสูง
  • ไม้ไต่คู้ นิคหิต ยามักการ ที่ยกสูงและหลบซ้าย

ถือเป็นข้อจำกัดที่ต้องพยายามหาทางแก้ไขในรุ่นถัดไป แต่ขณะนี้ก็ถือว่าครอบคลุมกรณีในภาษาชาติพันธุ์ได้พอสมควรแล้ว (ข้อจำกัดนี้มีเฉพาะสำหรับ pdfTeX เท่านั้น ส่วนฟอนต์บนเดสก์ท็อป หรือ XeTeX รองรับครบทุกกรณี)

Ethnic languages in LaTeX

ผลพลอยได้ระหว่าง fine-tune ฟอนต์ก็คือ ได้เพิ่มฟอนต์ Umpush Light สำหรับการใช้งานใน LaTeX แล้วด้วย โดยสามารถกำหนดฟอนต์ด้วยคำสั่ง \usefont เช่น

  \usefont{LTH}{umpush}{l}{n}   % ตัวตรง
  \usefont{LTH}{umpush}{l}{it}  % ตัวเอียง

Umpush Light in LaTeX

ฟอนต์รุ่นนี้ ได้อัปโหลดเข้า Debian sid (สำหรับเดสก์ท็อป) และที่ CTAN (สำหรับ LaTeX) แล้วทันทีหลังจากออกรุ่นที่ต้นน้ำ สำหรับ LaTeX ใน Debian นั้น ต้องรอทีม TeX ของ Debian อัปเดตพร้อมกับภาษาอื่น ๆ ในแพกเกจ texlive-lang-other ต่อไป

อ้างอิง:

[1]
นเรศ นโรปกรณ์. (๒๕๓๖). อัจฉริยลักษณ์และความเป็นวิทยาศาสตร์ของลายสือไทย. พิมพ์ครั้งที่ ๑. กรุงเทพฯ : โอเดียนสโตร์. ISBN 974-276-975-3.
[2]
ราชบัณฑิตยสถาน. (๒๕๕๓). คู่มือระบบเขียนภาษามลายูปาตานีอักษรไทย ฉบับราชบัณฑิตยสถาน. พิมพ์ครั้งที่ ๑. กรุงเทพฯ : ราชบัณฑิตยสถาน. ISBN 978-616-7073-25-5.

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

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% แล้ว

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

24 พฤศจิกายน 2556

My GNOME Escape

หนึ่งปีเต็มที่ผมได้เปลี่ยนมาใช้ Xfce เต็มตัว (บันทึกการทดลองใช้ E17, LXDE และ Xfce ก่อนจะตกลงปลงใจที่ Xfce) รู้สึกว่าได้เดสก์ท็อปที่ลงตัว ไม่พยายามวิ่งตามแพลตฟอร์มอื่นมากเกินไป ไม่ว่าจะวินโดวส์หรือแมคหรือแอนดรอยด์ ขณะเดียวกันก็ไม่ได้อนุรักษ์นิยมกับยูนิกซ์จ๋าจนดูตกยุค เรื่อง usability ถือว่าสอบผ่าน ความยืดหยุ่นในการปรับแต่งก็มีเหนือ GNOME โปรแกรมต่าง ๆ ที่จำเป็นก็มีให้เกือบครบ บางตัวที่ไม่มี (เช่น PDF viewer) ผมก็ยืมใช้จาก GNOME ไปพลางก่อน แต่ก็ทยอยถอดถอนตัวที่ไม่จำเป็นออกไปเรื่อย ๆ และคงรุ่น GNOME app ส่วนใหญ่ไว้ที่ 3.4

สาเหตุที่ยังคงรุ่น GNOME app ไว้ที่ 3.4 ก็เพราะการอัปเกรดเกินรุ่นนี้จะทำให้เกิดความเปลี่ยนแปลงของระบบอย่างใหญ่หลวง เช่น GDM 3.8 จะลากเอา systemd มาลง (ผ่านทาง gnome-settings-daemon) ซึ่ง systemd นี้ จะเป็นดีมอนสำหรับบูตระบบซึ่งจะมาแทนที่ sysvinit ที่ Debian ใช้อยู่ และ เป็นที่ถกเถียงกันอยู่ ในหมู่นักพัฒนาแพลตฟอร์มยูนิกซ์อื่น ๆ ที่ไม่ใช่ลินุกซ์ (เช่น OpenBSD, FreeBSD, Solaris) เพราะเป็นระบบบูตที่จำเพาะเจาะจงกับลินุกซ์เท่านั้น และยังมีข้อสังเกตว่ามัน ออกแบบขัดกับปรัชญาของยูนิกซ์อย่างแรง

ไม่ใช่แต่เท่านั้น GDM 3.8 ยังใช้ GNOME Shell ทำงานเป็นหน้าล็อกอินอีกด้วย คุณอาจจะคิดว่าผมใช้ความรังเกียจ GNOME Shell มาตัดสิน แต่ถ้าคุณมองความเหมาะสมในทางเทคนิคแล้ว จะเห็นว่ามีอะไรมากกว่านั้น ในเมื่อ GDM ต้องใช้ GNOME Shell และ GNOME Shell ก็ต้องใช้แทบทุกสิ่งทุกอย่างของ GNOME เพราะ GNOME Shell เองก็ออกแบบมาให้รวมทุกสิ่งทุกอย่างของ GNOME เข้ามาในตัว ไม่ว่าจะเป็นการจัดการพลังงาน การใช้พาเนล การจัดการเครือข่าย ไปจนถึง instant messenger และ video call! (ในฐานะนักแปล ผมติดตามเรื่องนี้ได้ไม่ยากครับ ทุกครั้งที่เห็นการย้ายข้อความจากแพกเกจอื่นเข้า GNOME Shell ผมปาดเหงื่อตลอด) ซึ่งก็หมายความว่า คุณไม่สามารถติดตั้ง GDM เพียงลำพังในฐานะ display manager ของระบบเพื่อใช้ล็อกอินเข้าเดสก์ท็อปอื่น (เช่น KDE, Xfce, LXDE, E17, WindowMaker ฯลฯ) โดยไม่แถมพ่วง GNOME เกือบทั้งตัวมาด้วยได้! แล้วนิยามของ display manager คืออะไรกันแน่?

ผมผิดหวังกับ GNOME อีกครั้งที่ออกแบบ GDM ให้ไปรุกล้ำนอกวาระการเข้าระบบ เพียงเพื่อจะเพิ่มประสิทธิภาพของ GNOME โดยไม่แยแสเดสก์ท็อปอื่น ถัดจาก systemd ที่ไปรุกล้ำระบบยูนิกซ์อื่นมาแล้ว พฤติกรรมแบบนี้ ผมว่าผมเคยเห็นมาก่อนนะครับ กับระบบปฏิบัติการบางยี่ห้อ...

ผมจึงยิ่งแน่ใจที่ผมย้ายหนี GNOME มา Xfce ว่าเป็นการตัดสินใจที่ถูกต้องแล้ว ผมเป็นผู้ใช้ ก็ขอใช้สิทธิ์ของผู้ใช้ที่จะไม่เลือกสนับสนุนระบบที่ผมไม่เห็นด้วยครับ

สำหรับ display manager โชคดีที่โลกนี้มีตัวอื่นให้เลือก เช่น lightdm (ผมใช้ GTK+ Greeter) และ SLiM

แล้ว blog หน้า ผมจะมาเขียนถึงการใช้งาน Xfce ในฐานะ GNOME refugee ต่อไปครับ

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

08 พฤศจิกายน 2556

Thanks, and the September-October Diary

ขอขอบคุณผู้สนับสนุนงานพัฒนาของผมในเดือนกันยายน-ตุลาคมที่ผ่านมาดังนี้ครับ:

เป็นอีกครั้งหนึ่งที่ต้องเขียน blog แบบรวบสองเดือน เนื่องจากภารกิจต่าง ๆ ค่อนข้างเร่งรัด จนอยากใช้เวลาสะสางงานให้เต็มที่มากกว่า

งานในช่วงสองเดือนที่ผ่านมา แบ่งเป็นหมวด ๆ ดังนี้ครับ:

โครงการอักษรอีสาน

งานพัฒนาที่ LTN และ Debian

เป็นการปล่อยสิ่งที่พัฒนาสะสมมาตั้งแต่ระลอกที่แล้วเมื่อต้นปี โดยทยอยตรวจสอบความเรียบร้อยและออกรุ่นซอฟต์แวร์ต่าง ๆ ดังนี้:

  • libdatrie 0.2.7
    • แก้ไขประเด็นเรื่อง portability เกี่ยวกับ void pointer arithmatics ซึ่งจะมีปัญหากับคอมไพเลอร์ที่ไม่ใช่ GCC โดยได้รับรายงานจากคุณ Mikhail Korobov ว่าคุณ Gabi Daver ได้พบปัญหานี้ขณะคอมไพล์ด้วย Visual C++ พร้อมแพตช์แก้
    • ระหว่างแก้ ได้ทดลองคอมไพล์ด้วยตัวเลือก -Wall ทำให้เจอ warning เพิ่มเติม และแก้ไขจนหมด
    • เขียน test case เพื่อให้สามารถตรวจสอบความถูกต้องเวลาแก้โค้ดได้ในอนาคต ที่ผ่านมาจะทดสอบผ่าน libthai เป็นหลัก แต่เขียน test case เป็นเรื่องเป็นราวน่าจะสะดวกกว่า ซึ่งในระหว่างที่เขียน test case ก็ทำให้ได้อ่านเอกสารประกอบและแก้ไขที่ผิด พร้อมกับได้เพิ่ม API เพื่อความสะดวกในการใช้งานด้วย
    • ปรับ Doxyfile ที่ใช้สร้างเอกสาร เพื่อตัดสิ่งที่เลิกใช้แล้วใน doxygen 1.8.4
    • ออก libdatrie 0.2.7.1 ตามมา หลังจากพบว่าลืมปรับค่า library version เพื่อให้ SONAME สะท้อนการเพิ่ม API ที่เกิดขึ้น
    • อัปโหลด 0.2.7.1-1 เข้า Debian sid
  • thaixfonts 1.2.6
    • มีการปรับระบบ build ตาม autoconf รุ่นใหม่ และเปลี่ยนมาใช้ XZ tarball แทน GZ tarball ซึ่งเป็นสิ่งที่ทำไว้นานแล้ว ก็ออกรุ่นมาเพื่อปรับตามซอฟต์แวร์อื่นเท่านั้น ส่วนตัวเนื้อหาฟอนต์ไม่มีการเปลี่ยนแปลงอะไร
    • อัปโหลด 1:1.2.6-1 เข้า Debian sid
  • LibThai 0.1.20
    • ปรับข้อมูลพจนานุกรมตัดคำตามที่พบกรณีต่าง ๆ ในช่วงที่ผ่านมา [เกร็ด: รุ่นนี้รู้จักอำเภอขนอมที่ไม่ใช่ ขน-อม แล้ว ;-)]
    • แก้ compiler warning ที่พบใน test case ต่าง ๆ
    • อัปโหลด 0.1.20-1 เข้า Debian sid
  • TeX hyphenation patterns
    • sync ข้อมูลพจนานุกรมตัดคำจาก libthai เข้าไปที่ ThaiLaTeX SVN พร้อมกับปรับแก้ hyphenation patterns ตามข้อมูลใหม่
    • แจ้งไปที่โครงการ tex-hyphen ว่าขอปรับข้อมูล hyphenation patterns ภาษาไทย พร้อมกับรายงานปัญหาของสคริปต์บางตัวที่ใช้สร้างข้อมูลอัตโนมัติ คุณ Mojca Miklavec ก็ได้ช่วยแก้สคริปต์ให้ (rev 652, 653) และรับแพตช์ปรับข้อมูลภาษาไทยไปรวมให้ (rev 654)
    • สอบถามและขอ import source ของ hyphenation patterns ภาษาไทยเข้าใน tex-hyphen โดยตรง เพื่อที่ต่อไปจะได้ไปทำงานที่นั่นแทนที่จะต้องผ่าน ThaiLaTeX แบบนี้ ทั้งนี้เพื่อให้เป็นไปตามแผน ที่เคยคุยกันไว้ จนกระทั่งได้ import source ใน rev 655
    • ไม่มีการอัปโหลดอะไรใน Debian แค่รอ Debian อัปเดตแพกเกจ texlive-base เท่านั้น
    • request ขอลบ thailatex ออกจาก Debian unstable เพื่อไม่ให้มีซอร์สตกค้างอยู่ (ลบแล้ว)
  • swath 0.5.1
    • แก้รหัสตัดคำของ Lambda จาก U+200C (ZWNJ) เป็น U+200B (ZWSP) ...ว่าแต่มีใครใช้ฟีเจอร์นี้ไหมเนี่ย?
    • sync ข้อมูลพจนานุกรมตัดคำจาก ThaiLaTeX/hyph-utf8 (ซึ่ง sync มาจาก LibThai อีกที) เพื่อให้ตัวตัดคำ LaTeX ทำงานสอดคล้องกับ hyphenation patterns
    • ก่อนออกก็ปรับซอร์สโค้ดของ swath เพื่อให้แต่ละรุ่นมีการปรับปรุงด้านความปลอดภัยไปทีละน้อย โดยในรุ่นนี้ได้ป้องกัน buffer overflow ใน file filter ต่าง ๆ (ยังมีให้แก้อีกเยอะในรุ่นถัด ๆ ไป :-P )
    • อัปโหลด 0.5.1-1 เข้า Debian sid
  • IBus-LibThai 0.1.2
    • แก้ปัญหาการกด shortcut (เช่น Ctrl-C) ใน IBus 1.5 อันเนื่องมาจากการเชื่อมรวมกับ XKB ของ IBus รุ่นนี้ ทำให้ผังแป้นพิมพ์ที่ระบุใน metadata ของ IBus-LibThai ว่าเป็น th ทำให้กด Ctrl-C ได้เป็น Ctrl-แ เสมอ แก้ไขโดยปรับผังแป้นพิมพ์เป็น us เท่านั้น
    • อย่างไรก็ดี การแก้ปัญหาในรายการที่แล้วทำให้เกิดปัญหาใหม่ คือทำให้กด accelerator ใน GUI ที่แปลเป็นไทย (เช่น Alt-ฟ เพื่อเรียกเมนู แฟ้ม) ไม่ได้ วิธีแก้ที่เหมาะสมจึงควรให้ IBus-LibThai พยายามแปลง key event ที่มีการกดปุ่มประกอบให้เป็นภาษาไทย แต่ปรากฏว่าไม่สามารถส่ง event ที่แปลงแล้วกลับไปหา event queue ได้ เนื่องจากฟังก์ชัน ibus_engine_forward_key_event() ไม่ทำงานอย่างที่คาด งมอยู่นานก็ไม่สามารถแก้ได้ เวลามีจำกัดจึงใช้วิธีกำหนดผังแป้นพิมพ์เป็น us,th เพื่อให้ GTK+ กับ XKB ไปคุยกันเอง ซึ่งก็ได้ผล แต่ปัญหาคือ มันจะแปลงอักขระตามผังเกษมณีเท่านั้น ใครใช้ผังปัตตะโชติใน IBus-LibThai ก็จะงง ไว้หาวิธีแก้ต่อไปในรุ่นหน้า
    • เพิ่มการรองรับการป้อนเลขไทยด้วยแป้นตัวเลข โดยอาศัยการกด CapsLock ล็อคไว้ หรือใช้การยกแคร่ระดับ 3 (Alt ขวา) อนึ่ง ตามที่เคยได้ ออกแบบไว้ เมื่อสองปีก่อนนั้น จะใช้ ScrollLock ไม่ใช่ CapsLock เนื่องจาก CapsLock จะไปเพิ่มขั้นตอนขณะสลับภาษาไปเป็นภาษาอังกฤษที่จะต้องปลด CapsLock อีกขั้นหนึ่งด้วย แต่ในครั้งนี้ได้ตัดสินใจเปลี่ยนเป็น CapsLock ด้วยเหตุผลสองประการ ประการแรกคือการตรวจสอบสถานะของ ScrollLock ด้วย API ของ IBus เป็นไปได้ยาก เพราะไม่มีการเตรียมการรองรับไว้ ประการที่สองคือในแป้นพิมพ์ย่อส่วน เช่นแป้นพิมพ์โน้ตบุ๊ก หลายรุ่นได้ตัดปุ่ม ScrollLock ออกไปแล้ว ตามที่ วิกิพีเดียว่าไว้ (โน้ตบุ๊กผมก็ไม่มี)
    • อัปโหลด 0.1.2-1 เข้า Debian sid

งานแปล

  • ตรวจทาน คำแปล GNOME ตามที่มีผู้ส่งคำแปลเข้ามา โดยที่ผมไม่ได้แอคทีฟตามแปลเองอีกต่อไปแล้ว
  • แปล Xfce เป็นไทย เพิ่มเติม โดยล่าสุด ได้แปล core package ต่าง ๆ ครบแล้ว พร้อมกับปรับคำแปลทั้งหมดจาก master กลับไปที่ branch xfce-4.10 ด้วย และแปลปลั๊กอินที่ผมใช้อีกนิดหน่อยเพิ่มเติม ทำให้ขณะนี้อัตราการแปลของภาษาไทยอยู่ที่ 54% แล้ว

blog นี้ก็เลยยาวหน่อย ขอขอบคุณทุกท่านที่ติดตามครับ

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

31 สิงหาคม 2556

Thanks, and the July-August Diary

ผู้หย่อนสตางค์ลงหมวกเพื่อสนับสนุนงานพัฒนาของผมในเดือนกรฎาคม-สิงหาคมที่ผ่านมา คือ อ.พฤษภ์ บุญมา และคุณวิทยา ไตรสารวัฒนะ โดยทั้งสองท่านได้หย่อนสตางค์ทั้งสองเดือน ขอขอบคุณอีกครั้งครับ May the Source be with you!

สองเดือนที่ผ่านมา มีกิจธุระบางอย่างทำให้ไม่มีเวลาเขียน blog ทำให้ต้องยกยอดมาเขียนสองเดือนรวมกัน สำหรับกิจกรรมที่เกิดขึ้นระหว่างนี้ ก็ได้แก่:

  • ปรับวิธีการเพื่อแก้ขัดสำหรับการรองรับอักษรไทน้อยในระหว่างที่ยังไม่กำหนดมาตรฐาน โดยจากการทดลองเมื่อเดือน มิ.ย. พบว่า วิธีวิรามยังต้องการการรองรับในเบราว์เซอร์เพิ่มเติม แต่ในช่วงของการบันทึกการปริวรรตเพื่อสำรวจข้อมูลในช่วงนี้ จำเป็นต้องทำให้มันทำงานได้ไปก่อน จึงปรับมาใช้การกำหนดรหัสอักขระแบบ pre-composed ไปก่อน กล่าวคือ
    • สระออย แทนด้วย U+0EBE
    • บ เฟื้อง แทนด้วย U+0EE0
    • ม เฟื้อง แทนด้วย U+0EE1
    • ล เฟื้องข้าง แทนด้วย U+0EE2
    • ส เฟื้อง แทนด้วย U+0EE3
    • พ เฟื้อง แทนด้วย U+0EE4
    • ธ เฟื้อง แทนด้วย U+0EE5
    • ด เฟื้อง แทนด้วย U+0EE6
    • ตัวควบ ขฺน แทนด้วย U+0EF0
    • ตัวควบ ขฺม แทนด้วย U+0EF1
    • ตัวควบ คฺน แทนด้วย U+0EF2
    • ตัวควบ คฺม แทนด้วย U+0EF3
    • ตัวควบ ถฺน แทนด้วย U+0EF4
    • ตัวควบ ถฺล แทนด้วย U+0EF5
    • ตัวควบ สฺน แทนด้วย U+0EF6
    • ตัวควบ สฺม แทนด้วย U+0EF7
    ทั้งนี้ ได้ทดลองใช้กับการปริวรรตใบลานเรื่อง พญาคันคาก และ ฮีตคองคะลำ เป็นตัวอย่าง โดยได้ปรับโครงสร้างของ ระบบป้อนข้อความล้านช้าง เพื่อเพิ่ม engine สำหรับอักษรไทน้อย เพื่ออำนวยความสะดวกในการเตรียมข้อมูลด้วย
  • เซ็นสัญญากับเนคเทคเพื่อเป็นที่ปรึกษาโครงการร่างมาตรฐานภาษาไทย โดยมีเรื่องอักษรอีสานอยู่ในวาระด้วย
  • เริ่มโครงการ แปล Xfce ให้เป็นภาษาไทย โดยในขณะนี้ ผมเริ่มแปลไปได้สองตัว คือ Xfce4-panel และ Xfwm4 ด้วยสิทธิ์ของ translator ธรรมดา ยังไม่ใช่ moderator โดยหวังว่าจะเรียนรู้ระบบและค่อยขยับเป็น reviewer หรือ coordinator ในที่สุด ระบบแปลของ Xfce ใช้ Transifex ซึ่งหลักการคล้าย rosetta บน launchpad ของ Ubuntu ระบบนี้จำเป็นอย่างยิ่งที่จะต้องมี reviewer ที่แอคทีฟ เพื่อควบคุมคุณภาพและความสม่ำเสมอของคำแปลให้ไปในทางเดียวกันแบบ GNOME ปัจจุบันผมจึงยังไม่ประสานงานกับนักแปลอื่นจนกว่าจะมีสิทธิ์ทำอะไรได้มากกว่านี้
  • ตรวจทานคำแปล GNOME ตามที่มีผู้ส่งคำแปลเข้ามา สำหรับ GNOME นี้ ผมเลิกแอคทีฟไปแล้ว หลังจากเปลี่ยนมาใช้ Xfce แทน แต่ผมจะยังแปลเฉพาะในส่วนที่เป็นประโยชน์ต่อ Xfce (เช่น GLib, GTK+, Evince, Zenity) เท่านั้น ส่วนอื่น ๆ นั้น หากมีผู้ส่งคำแปลเข้ามา ผมก็ยังยินดีตรวจทานและ commit ให้ครับ เพียงแต่ผมจะไม่ไปไล่แปลเองอย่างเคยเท่านั้น

คิดว่าสำหรับเดือนกันยายน ก็คงจะดำเนินการวาระข้างต้นนี้ต่อไป รวมถึงงานดูแลแพกเกจใน Debian ตามแต่โอกาสจะอำนวย

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

04 กรกฎาคม 2556

Thanks, and the June Diary

เดือนมิถุนายนที่ผ่านมา อ.พฤษภ์ บุญมา ได้หย่อนสตางค์ลงหมวกเพื่อสนับสนุนงานพัฒนาของผม ขอขอบคุณอีกครั้งครับ

สำหรับเดือนมิถุนายนที่ผ่านมา งานหลักก็ยังคงเป็นโครงการอักษรอีสานยืนพื้น โดยมีการตัดสินใจลงมือกระทำบางอย่าง คือ

  • ตั้งกลุ่มอักษรอีสานใน Facebook เพื่อเรียนเชิญอาจารย์ผู้เชี่ยวชาญอักษรอีสานมาช่วยให้ข้อแนะนำ หลังจากที่ผมได้พบผู้รู้ทาง Facebook มาหลายท่านก่อนหน้านี้
  • ตัดสินใจใช้รหัสยูนิโค้ด U+0324 COMBINING DIAERESIS BELOW แทนตัวสะกดแม่กกจุดคู่ในอักษรธรรมอีสานไปพลางก่อน โดยปรับเพิ่มทั้งในฟอนต์โคตรบูรณ์ และ ระบบป้อนข้อความล้านช้าง พร้อมกันนี้ก็ได้ปรับปรุงร่างข้อเสนอขอเพิ่มอักขระอักษรธรรมเพื่อให้อ้างอิงได้สะดวกในตัวเองด้วย
  • ทดลองใช้ระบบวิราม (virama) สำหรับตัวเฟื้องของอักษรไทน้อยที่ยืมมาจากอักษรธรรม โดยทดลองใช้กับการปริวรรตหนังสือใบลานเรื่อง พญาคันคาก ปรากฏว่า Pango/Harfbuzz มันวาดให้ใน GTK+ ขณะเตรียมข้อมูลก็จริง แต่ Firefox ไม่ยอมวาดตัวเฟื้องบนเว็บให้ คาดว่าระบบจัดแสดงข้อความของ Firefox คงมีการกลั่นกรองอักขระยูนิโค้ดเข้มงวด ทำให้ได้แนวทางว่าควรจะถอยมาใช้วิธีกำหนดอักษรเป็นตัว ๆ ตามแนวทางเดิมของอักษรไทย-ลาวไปพลางก่อน เมื่อได้ข้อกำหนดที่เป็นมาตรฐานสุดท้ายแล้วค่อยมาปรับแก้ตามมาตรฐานทีหลัง
  • ตัดลำดับ SAKOT + อ อักษรธรรมออกจากฟอนต์โคตรบูรณ์ เพราะเป็นลำดับที่ไม่ถูกต้อง แต่ผู้ใช้มักจะชอบใช้มากกว่าจะใช้สระออล่าง (U+1A6C) ที่ถูกต้อง เพื่อป้องกันการเกิดข้อมูลที่ผิดมาตรฐาน จึงตัด fallback นี้ออก
  • ปรับวิธี map ปุ่มในระบบป้อนข้อมูลล้านช้าง จากเดิมที่ map อักขระ ASCII ไปเป็นอักษรธรรม มาเป็นการ map จากตำแหน่งปุ่มโดยตรง เนื่องจากการ map จาก ASCII จะมีปัญหาเมื่อผู้ใช้พยายามสลับผังแป้นพิมพ์ด้วย XKB แทนการสลับ IBus engine โดยในผังแป้นพิมพ์ไทยจะยังมีบางปุ่มที่เป็นอักขระ ASCII อยู่ เช่น / - , . ? แต่พอผู้ใช้พยายามกดอักขระเหล่านี้ในผังแป้นพิมพ์ไทย ล้านช้างจะแปลงอักขระเหล่านี้เป็นอักษรธรรมเสีย ซึ่งไม่ใช่สิ่งที่ผู้ใช้ต้องการ
  • ปรับโค้ดใน IBus-LibThai ในทำนองเดียวกันด้วย (ผมเคย blog ไปแล้ว ว่า IBus-LibThai สำหรับภาษาไทยนั้น เกิดขึ้นได้ด้วยแรงกระตุ้นจากโครงการอักษรอีสาน แม้การพัฒนาในระยะต่อมาก็ยังเป็นจริงอยู่ IBus-LibThai นั้น เข้า Debian และ Ubuntu ไปแล้ว แต่ IBus-Lanxang ยังต้องรอความชัดเจนอีกสักหน่อยเกี่ยวกับตัวมาตรฐาน)

งานอื่นที่เกิดขึ้นในเดือนมิถุนายน:

  • ปรับคำแปล ISO 3166-2 ในโครงการ iso-codes โดยอ้างอิงหนังสือแผนที่ภูมิศาสตร์ ทำให้คำแปลปรับจาก (732 translated, 218 fuzzy, 3749 untranslated) ไปเป็น (1829 translated, 58 fuzzy, 2812 untranslated)
  • edit แผนที่ OSM ในกรุงเทพฯ และขอนแก่น อันเป็นควันหลงจากงาน INET Bangkok 2013 และ Netizen Meetup โดยได้รับความร่วมมือจากสมาชิก KKLUG ด้วย

สำหรับเดือนกรกฎาคมนี้ ก็คงจะเดินหน้าโครงการอักษรอีสานต่อไปครับ โดยจะไปเน้นที่อักษรไทน้อยมากขึ้น

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

08 มิถุนายน 2556

INET Bangkok 2013

bact' ในนามของ เครือข่ายพลเมืองเน็ต ชวนผมมางาน INET Bangkok 2013 (พรุ่งนี้ต่องาน Netizen Meetup อีกงานหนึ่ง)

ผมไม่ได้คลุกคลีกับเรื่องเครือข่ายสักเท่าไร เป็นผู้ใช้เสียมากกว่า มางานนี้ก็ได้เปิดหูเปิดตาหลายเรื่องอยู่

  • การเข้าถึงอินเทอร์เน็ตในชนบท ผมเข้าใจผิดเรื่องตารางเวลา เลยไม่ทันครึ่งแรก (ทราบแต่ว่ามีเรื่อง mesh network ที่ ดร.อภินันท์ [เพื่อนผม] บรรยายไป ซึ่งถูกพาดพิงถึงอยู่หลายครั้งในครึ่งหลัง) ในครึ่งหลังนั้น ได้รู้ถึงความพยายามต่าง ๆ ที่จะให้อินเทอร์เน็ตเข้าถึงพื้นที่ห่างไกลให้ได้มากที่สุด ตั้งแต่:
    • การฝึกคนในชุมชน ให้ใช้ประโยชน์จากอินเทอร์เน็ต ตั้งแต่เป็นช่องทางขายของ, เข้าถึงบริการภาครัฐ และเผยแพร่เอกลักษณ์ท้องถิ่น
    • มุมมองของ ISP ที่อยากให้ราคา ADSL ถูกลง, คุณภาพเครือข่ายดีขึ้นเพื่อรองรับพฤติกรรมการใช้เน็ตที่เน้นวิดีโอมากขึ้น, การเรียกร้องภาครัฐให้เปิด content มากขึ้น
    • การลากสายอินเทอร์เน็ตไปตามสถานศึกษาของ UniNet พร้อมกับช่วยโรงเรียนออกแบบระบบเพื่อรองรับการใช้งานที่เริ่มเปลี่ยนเป็น mobile มากขึ้น, การดูแลอุปกรณ์และสายสัญญาณต่าง ๆ ซึ่งจะเจอปัญหาไม่คาดคิด เช่น มดเข้าไปทำรัง กระรอกกัดสาย ฯลฯ
    • กิจกรรมส่งเสริมทีวีท้องถิ่น คอมพิวเตอร์เพื่อน้องในชนบท และการสื่อสารในพื้นที่ภัยพิบัติของมูลนิธิกระจกเงา (อย่างหลังสุด พบว่าวิทยุสื่อสารคือสิ่งที่ช่วยได้มากที่สุด ไม่ใช่อินเทอร์เน็ตหรือโทรศัพท์มือถือ)
    • การสร้าง eco-system ของ Google ตั้งแต่การเสนอช่วยเก็บ content ที่มีคุณภาพ (เช่น กระทู้พันทิป), telemedicine โดยใช้แฮงเอาท์ของ Google+ และกระทั่ง Google map, การช่วยโรงเรียนจัดการเรื่องเครือข่ายอินเทอร์เน็ต โดย Google ยึดหลักว่าไม่ทำแบบทั่วทั้งประเทศ แต่ทำแค่บางแห่งเพื่อค้นหา best practice เป็นต้นแบบให้ที่อื่นทำตาม
  • Open Data น่าจะเป็นประเด็นที่ได้ยินมากที่สุดในงานนี้ กล่าวคือ จากแนวคิดซอฟต์แวร์โอเพนซอร์ส ได้ขยายไปถึงสาขาอื่น ๆ หนึ่งในนั้นคือ open data โดยข้อมูลที่เปิดนั้น ไม่ใช่แค่เอาขึ้นเว็บแล้วก็จบ แต่ต้องเป็นข้อมูลที่เครื่องสามารถประมวลผลเป็นสารสนเทศที่เป็นประโยชน์ได้ด้วย ซึ่งรัฐบาลประเทศต่าง ๆ ได้ทยอยเปิดข้อมูลในลักษณะนี้ไปมากแล้ว ส่วนประเทศไทยก็กำลังจะมีข่าวดีจาก สำนักงานรัฐบาลอิเล็กทรอนิกส์ (สรอ.) ว่าอาจจะมี data.go.th เร็ว ๆ นี้ นอกจากนี้ ยังได้ฟังกรณีตัวอย่างของความเคลื่อนไหวภาคประชาชนทั้งจากไต้หวันและเชียงใหม่ด้วย

และยังมีประเด็นอีกมากมายใน closing session แต่ความรู้สึกรวม ๆ ที่เกิดขึ้นจากการฟังในงานนี้ก็คือ มันคล้ายเป็นอีกกรณีหนึ่งของประเทศไทย ถัดจากเรื่องรถไฟ, วงการซอฟต์แวร์ จนถึงวงการลินุกซ์/โอเพนซอร์ส ที่ไทยเริ่มก่อนใครในภูมิภาค แต่ก็ไปอย่างเชื่องช้า (บางเรื่องแทบหยุดนิ่ง) จนประเทศที่เริ่มทีหลังเขาแซงหน้ากันไปหมด

หรือประเทศเราจะถูกสาปให้เป็นเช่นนั้น?!

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

ป้ายกำกับ:

hacker emblem
No PAD No UDD
No Violent Mob