Theppitak's blog

My personal blog.

19 กุมภาพันธ์ 2556

IBus-LibThai 0.1.0

ผมเคย เขียนถึง IBus-LibThai ไปเมื่อ 3 เดือนก่อน ซึ่งเป็นการปัดฝุ่นโค้ดที่ร่างไว้ตั้งแต่ปีก่อนจนใช้การได้ แล้วก็ย้ายไปทำ โครงการล้านช้าง สำหรับป้อนอักษรธรรมลาว-อีสานผ่าน IBus อยู่ระยะหนึ่ง ระหว่างนี้ก็ทดลองใช้เองมาเรื่อย ก็ใช้การได้ดี แต่เนื่องจากมีงาน release ซอฟต์แวร์ต่าง ๆ ก็เลยยังไม่ได้กลับไปดูต่อ

จนกระทั่งในการประชุม “โสเหล่” ครั้งล่าสุดของ KKLUG ผมถูกกระตุ้นอีกครั้งจาก เสกสรร เพื่อนร่วมโครงการ อักษรอีสาน ว่าเขาใช้ IBus แล้วทำให้มีปัญหาการป้อนภาษาไทยด้วย ibus-m17n หลายอย่าง ไหน ๆ ผมก็ปล่อยซอฟต์แวร์ที่คั่งค้างอยู่เสร็จไปแล้ว ก็เลยรับปากว่าจะเร่งออก IBus-LibThai ให้

วันนี้ก็ได้แล้วครับ IBus-LibThai 0.1.0 ซึ่งต้องอาศัย API ใหม่ใน LibThai 0.1.19 ที่เพิ่งออกไป โดยได้ทำแพกเกจสำหรับ Debian และอัปโหลดเข้า experimental เรียบร้อยแล้วด้วย ขณะนี้รออยู่ที่ คิว NEW รอทีม ftp-master มารีวิวก่อนจึงจะได้เข้า อาจจะรอนานหน่อย เพราะช่วงนี้สำหรับ Debian แล้ว งานออกรุ่น Wheezy สำคัญกว่าครับ

ป้ายกำกับ: ,

15 กุมภาพันธ์ 2556

Fonts-TLWG 0.5.1

fonts-tlwg 0.5.1 ออกแล้ว น่าจะเป็น release สุดท้ายของช่วงนี้ ซึ่งเป็นการปล่อยของที่สะสมไว้ในช่วงปีที่ผ่านมา (fonts-tlwg 0.5.0 ออกไปเมื่อ 15 ก.พ. 2555 รุ่นนี้ก็ครบหนึ่งปีพอดี)

ความจริงรุ่นนี้มีการเปลี่ยนแปลงไม่มากนัก แต่สิ่งที่สะสมไว้นานวันก็สมควรปล่อยออก การเปลี่ยนแปลงที่สำคัญคือ:

  • เพิ่ม glyph บางตัวที่พบว่าขาดหายไปในฟอนต์ monospace (TlwgTypist, TlwgTypo, TlwgTypewriter, TlwgMono) แต่มีการอ้างถึงในแฟ้ม enc ของ LaTeX รายการนี้เป็นผลจากการ revise แฟ้ม enc ใน ThaiLaTeX 0.4.7 นู้น แล้วมาพบไล่หลังว่ามี glyph ขาดหายในชุด mono ก็เพิ่มให้ครบ
  • แก้ปัญหาเงื่อนไขการ match ฟอนต์ใน fontconfig ที่ผิดรูปแบบ ซึ่ง fontconfig รุ่นใหม่ (ในขณะนั้น) จะเริ่มบ่น Akira Tagoh ได้รายงานไว้ใน RedHat #837538 และ Daiki Ueno ได้แจ้งผมผ่านทางเมลพร้อมเสนอวิธีแก้ แพตช์นี้ผมได้ backport เข้า Debian ไปก่อนตั้งแต่ตอนนั้นแล้วด้วย ตอนนี้ก็ปล่อยออกที่ต้นน้ำเลย
  • เพิ่ม glyph สำหรับภาษาเอสเปอรันโตในฟอนต์ Purisa ซึ่ง Pablo Busto ได้ส่งแพตช์ให้ผมทางเมล ถือได้ว่าฟอนต์นี้ยังคงเป็นที่นิยมของชาวต่างประเทศอยู่เช่นเคย

เช่นกัน fonts-tlwg รุ่นนี้เป็นรุ่นแรกที่ออก tarball โดย บีบอัดแบบ XZ ซึ่งขนาดของ tarball ลดลงอย่างฮวบฮาบถึง 48% สำหรับ source และ 43% สำหรับ binary (TTF)

-rw-r--r--  1 thep thep 5612877 ก.พ.  15 14:14 fonts-tlwg-0.5.1.tar.gz
-rw-r--r--  1 thep thep 2923204 ก.พ.  15 14:10 fonts-tlwg-0.5.1.tar.xz
-rw-r--r--  1 thep thep 3102815 ก.พ.  15 14:27 ttf-tlwg-0.5.1.tar.gz
-rw-r--r--  1 thep thep 1765300 ก.พ.  15 14:26 ttf-tlwg-0.5.1.tar.xz

พร้อมกันนี้ ก็ได้อัปโหลดฟอนต์สำหรับ LaTeX เข้า CTAN แล้ว (รอรีวิว) และได้อัปโหลดแพกเกจเข้า Debian experimental แล้วด้วย

ป้ายกำกับ: ,

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

swath 0.5.0

swath 0.5.0 ออกแล้ว ถือเป็นชุดเดียวกันกับ thailatex 0.5.1 และ libthai 0.1.19 ที่ออกไปก่อนหน้านี้ในแง่ของพจนานุกรมที่ใช้ในการตัดคำและในการสร้าง hyphenation pattern แต่ยังมีการเปลี่ยนแปลงอย่างอื่นอีกมากมายที่ทำให้ปรับ minor version ขึ้นเป็น 0.5.0

รายละเอียดเคย blog ไว้เมื่อปีกลาย เป็นการเปลี่ยนโครงสร้างโปรแกรมขนานใหญ่พอสมควร แม้ engine สำหรับตัดคำจะยังเหมือนเดิมก็ตาม โดยสรุปคือ:

  • ปรับโครงสร้างการแปลงรหัสอักขระ TIS-620 กับ UTF-8 โดยให้ผลลัพธ์ทันทีโดยไม่ทำบัฟเฟอร์ผ่านแฟ้มชั่วคราว
  • ผลข้างเคียงคือ ได้รื้อโค้ดส่วนจัดการเอกสาร RTF เขียนใหม่ทั้งหมด พร้อมกับทดสอบกับเอกสารจริงด้วย
  • เปลี่ยนการประมวลผลอักขระภายในจาก มอก. 620 มาเป็นยูนิโค้ด เพื่อรักษาอักขระยูนิโค้ดในข้อมูลขาเข้าที่ไม่ใช่ไทย-อังกฤษไว้ในผลลัพธ์ขาออกด้วย
  • ผลข้างเคียงของงานข้างต้นอีกอย่างคือ โค้ดถูกทำความสะอาดครั้งใหญ่อีกครั้ง (แต่ยังเหลืออีกเยอะ)
  • แก้ security bug ตามที่ได้รับรายงาน

และเช่นกัน swath รุ่นนี้เป็นรุ่นแรกที่ใช้ XZ tarball compression ซึ่งลดขนาดลงถึง 33%

-rw-r--r-- 1 thep thep 490028 ก.พ.  11 15:05 swath-0.5.0.tar.gz
-rw-r--r-- 1 thep thep 328292 ก.พ.  11 12:11 swath-0.5.0.tar.xz

อัปโหลดเข้า Debian experimental เรียบร้อยครับ พบได้ที่ Debian mirror ใกล้บ้านท่าน

ป้ายกำกับ:

08 กุมภาพันธ์ 2556

ThaiLaTeX 0.5.1

ต่อจาก LibThai 0.1.19 ก็มาเป็น ThaiLaTeX 0.5.1 ที่ออกตามมา โดยมีการ sync ข้อมูลพจนานุกรมจาก LibThai มาเพื่อสร้าง hyphenation pattern ใหม่ พร้อมกับปรับกฎการแทรกยัติภังค์ให้เป็นไปตามที่กำหนดในพจนานุกรมทุกคำ

อีกรายการหนึ่ง เป็นเรื่องของความพยายามแก้ปัญหาขอบขวาหยักในการจัดหน้าเอกสาร ซึ่งผมเคยเจอเองบ้าง ได้ฟังผู้ใช้ถามวิธีแก้เข้ามาหลายครั้งหลายหน

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

เรื่องนี้อาจจะดีสำหรับข้อความภาษาอังกฤษ เพราะมีช่องว่างให้ยืดหลายจุด ยืดจุดละนิดละหน่อยก็ได้ความกว้างเพิ่มมาพอแล้ว แต่พอมาจัดบรรทัดภาษาไทยจะเจอปัญหาขาดแคลนช่องว่าง เพราะภาษาไทยไม่มีช่องว่างระหว่างคำ ผลคือ เมื่อยืดช่องว่างเท่าที่ยอมยืดแล้ว บรรทัดก็ยังกว้างไม่ถึงขอบขวา ดังนั้น TeX จึงเลือกที่จะดึงคำของบรรทัดถัดไปมาเติมช่องว่างแทน ซึ่งแน่นอนว่าทำให้บรรทัดกว้างเกินขอบขวา เกิด overfull line ถึงแม้จะไม่สวย แต่มันก็เป็นทางเลือกที่ดีที่สุดเท่าที่มีตามข้อกำหนดของ TeX อาการนี้อาจเป็นข้อยกเว้นที่แทบไม่เจอเลยในภาษาอังกฤษ แต่กลับเป็นกรณีที่พบบ่อยมากสำหรับภาษาไทย

วิธีแก้ปัญหานี้เป็นไปได้หลายแบบ เช่น

  • ใช้ letter spacing เป็นวิธีที่นิยมมากในงานพิมพ์ของไทย แม้ของฝรั่งเองก็เคยเห็นบ้าง แต่โดยหลักการแล้วถือว่าเป็นสไตล์ที่ไม่ดี (Frederick Goudy เคย กล่าว ไว้ว่า “Men who would letterspace lower case would shag sheep.”) โดยเฉพาะกับตัวพิมพ์เล็ก และ TeX ก็ไม่ทำ เพราะมันจะทำให้ข้อความอ่านยาก และจะใช้ ligature ไม่ได้ ดังนั้น หากจะทำ letter spacing กับภาษาไทยใน TeX คงไม่ใช่ความคิดที่ดีนัก
  • แทรกช่องว่างระหว่างคำ เป็นวิธีที่ ThaiLaTeX เคยใช้ในระหว่างรุ่น 0.2.5 ถึง 0.4.7 โดยดัดแปลงคำสั่ง \wbr ให้สามารถยืดความกว้างได้ แต่ปัญหาคือ ทำให้คำแยกออกจากกันเป็นคำ ๆ ดูไม่สวยงาม ในที่สุดก็เลิกใช้ไป
  • ยอมให้ยืดช่องว่าง เป็นวิธีที่ TeX เปิดให้จูนได้ โดยกำหนดค่า \pretolerance, \tolerance หรือ \emergencystretch ซึ่งการกำหนดค่า tolerance สูง ๆ อาจทำให้คุณภาพโดยรวมของการจัดบรรทัดตกได้ ผมจึงทดลองใช้ \emergencystretch กับเอกสารของตัวเองอยู่พักหนึ่ง จนได้ค่าที่เหมาะสมคือ 0.6em จนเมื่อ อ.กิตติพงษ์ มาถามผมในการประชุม “โสเหล่” ของ Khon Kaen Linux User Group (KKLUG) ครั้งหนึ่ง เป็นสัญญาณให้ผมตัดสินใจว่ามันเป็นสิ่งที่จำเป็นสำหรับการใช้ภาษาไทยใน LaTeX แล้ว ไม่ใช่สิ่งที่จะเก็บไว้เป็น solution ส่วนตัวอีกต่อไป จึงได้ commit เข้าใน SVN ของ ThaiLaTeX เสีย

ก็อยากให้ทดลองใช้กันดูนะครับ อาจมีวิธีที่ดีกว่านี้ หรือได้ค่า stretch ที่เหมาะกว่านี้ ก็เสนอเข้ามาได้ครับ

รุ่นนี้เป็นรุ่นแรกของ ThaiLaTeX ที่เปลี่ยนมาใช้ tarball แบบ XZ ตามประกาศ LTN ซึ่งปรากฏว่าขนาด tarball ลดลงถึง 26%

-rw-r--r-- 1 thep thep 260914 ก.พ.   8 12:02 thailatex-0.5.1.tar.gz
-rw-r--r-- 1 thep thep 191580 ก.พ.   8 11:35 thailatex-0.5.1.tar.xz

พร้อมกันนี้ ก็ได้อัปโหลดเข้า CTAN ไปแล้ว (รอ moderator รีวิวให้ถึงจะได้เข้า) รวมทั้งอัปโหลดเข้าที่ Debian experimental ไปรอ Jessie ไว้ด้วย

ป้ายกำกับ:

hacker emblem