Theppitak's blog

My personal blog.

29 เมษายน 2550

ควันหลง ก เอ๋ย ก ไก่

มีความเห็นเพิ่มเติมจาก blog ก เอ๋ย ก ไก่ ที่ถ้าเขียนเป็นความเห็นต่อท้ายก็ชักจะยาวเกินไป เลยขอเขียนเป็น blog ใหม่ละกันครับ

ผมชอบความมีระเบียบของ alphabet บาลี-สันสกฤต (แต่ไม่รู้ไวยากรณ์อะไรมาก) เพราะดูมีหลักการในการเรียงลำดับอักษรกว่าภาษาอื่น ๆ และเมื่อได้รู้จักแล้ว ทำให้เข้าใจอักษรไทยได้ง่าย เหมือนได้ขึ้นมาดู bird-eye view หลังจากที่เรียนแบบ sequential access, random access มา

นอกจากนี้ ยังช่วยให้เปรียบเทียบกับภาษาเพื่อนบ้านที่มาจากรากเดียวกันได้ง่ายด้วย

หลังจากที่ได้รู้จักระบบการเขียนของภาษาต่าง ๆ แบบคร่าว ๆ แล้ว ขอยืนยันว่าภาษาไทยเป็นภาษาที่ง่ายมากแล้วครับ ใครที่คิดว่าภาษาไทยยากและซับซ้อน คุณจะเปลี่ยนความคิดทันทีที่ได้รู้จักภาษาเขมร ภาษาไทยเราเขียนพยัญชนะในบรรทัดเดียว ที่อยู่บน-ล่างก็มีแต่สระ วรรณยุกต์ และเครื่องหมายประกอบเท่านั้น แต่ภาษาเขมรเขาเขียนพยัญชนะใต้บรรทัดด้วยครับ โดยมีการลดรูปลงมา เรียกว่า "เชิง" เวลาอ่านจึงต้องแยกให้ดีว่าต้องออกเสียงพยัญชนะไหน ภาษาล้านนาก็มีลักษณะคล้ายกัน "เชิง" ที่ว่านี้ เข้ามามีอิทธิพลกับตัวเขียนไทยในสมัยหลัง และเหลือร่องรอยอยู่ในอักษรสองตัว คือ ฐ ฐาน และ ญ หญิง ในปัจจุบัน

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

นวัตกรรมของพ่อขุนรามฯ ส่งผลมาถึงปัจจุบัน ทำให้ภาษาไทย (รวมทั้งลาวที่ประยุกต์ใช้ลายสือไทย) กลายเป็นภาษาที่ทำในคอมพิวเตอร์ได้ง่ายที่สุดในบรรดาภาษาตระกูล Indic (เขาเรียกรวมกับภาษาอารบิกที่เขียนจากขวามาซ้าย และมีการเปลี่ยนรูปอักขระตามตำแหน่งที่อยู่ในพยางค์ รวมเรียกว่า "Complex Text Layout" (CTL))

แต่การที่ภาษาไทยที่ง่าย ถูกจัดกลุ่มให้อยู่ใน Complex Text Layout ทำให้เราถูกเหมารวมว่าต้องจัดการซับซ้อนเหมือนกับภาษาต่าง ๆ เหล่านั้นด้วย เช่น ต้อง encode สระหลังอักษรนำเสมอ เช่น คำว่า "โดย" ก็ต้อง encode เป็น "ดโย" คำว่า "เขา" ก็ต้อง encode เป็น "ข{เา}" โดย "{เา}" เป็นอักขระใหม่ที่สร้างขึ้นเพื่อแทนสระเอา สระผสมอื่น ๆ เช่น สระเอือ สระเอีย ฯลฯ ก็ต้องกำหนดอักขระใหม่ให้ทั้งหมด นอกจากนี้ ยังมีการใช้ virama ซึ่งได้แก่ตัวพินทุในภาษาบาลี-สันสกฤต ในการ mark cluster ต่าง ๆ มีเครื่องหมายเปลี่ยนรูปพยัญชนะ ฯลฯ

เรื่องพวกนี้ คนไทยเข้าใจได้ยาก เพราะภาษาเราไม่มีคอนเซ็ปต์เรื่อง conjunct หรือการเปลี่ยนรูปอักขระเมื่อมาผสมกัน ลายสือไทยของพ่อขุนรามฯ ได้แก้ปัญหาความซับซ้อนต่าง ๆ เหล่านี้ไปตั้งแต่ 700 กว่าปีมาแล้ว ภาษาไทยพร้อมสำหรับ computerization โดยไม่ต้องรอ OpenType technology มาตั้งแต่ตอนนั้นแล้ว

นอกจากนี้ พ่อขุนรามฯ ยังได้ทรงออกแบบภาษาไทยไว้ให้เขียนเว้นช่องไฟระหว่างคำด้วย (สังเกตจากศิลาจารึก ช่องไฟนี้แคบกว่าช่องไฟระหว่างประโยค) เรียกได้ว่า ถ้าสมัยนั้นมีคอมพิวเตอร์ ภาษาไทยน่าจะเป็นภาษาแรกในภูมิภาคนี้ที่ implement เสร็จก่อนใครได้เลยทีเดียว โดยแค่ทำฟอนต์ก็ใช้ลายสือไทยใน desktop ได้แล้ว ไม่ต้องไป hack pango ให้วุ่นวาย ช่องไฟระหว่างบรรทัดก็แคบกว่าปัจจุบันด้วย เพราะลายสือไทยเขียนสระทุกตัวในบรรทัดหมด มีเพียงวรรณยุกต์เท่านั้นที่เขียนด้านบน

ความซับซ้อนต่าง ๆ ของภาษาไทยที่เพิ่มมาในยุคหลัง เป็นผลมาจากอิทธิพลของภาษาเขมรที่เป็นภาษาครูภาษาหนึ่งของเรา พยัญชนะที่เคยเขียนได้ใน stroke เดียว ก็เริ่มมีหลาย stroke ในบางตัว เช่น ฐ ญ เพราะความนิยมเขียนเชิงของพยัญชนะ การย้ายสระไปเขียนบนและล่างบรรทัด การเขียนติดกันไม่เว้นช่องไฟ แต่โชคดีที่เรารับมาแค่นั้น ความง่ายของลายสือไทยที่ยังอยู่ ยังส่งผลให้ภาษาไทยสามารถใช้ได้ในคอมพิวเตอร์ก่อนประเทศเพื่อนบ้าน โดยเริ่มใช้ได้มาตั้งแต่ยุคของ DOS โดยไม่ต้องรอเทคโนโลยี complex text layout

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

ป้ายกำกับ:

28 เมษายน 2550

ก เอ๋ย ก ไก่

เก็บกวาด Garuda เสร็จละ ช่วงนี้ทำฟอนต์เยอะ ๆ ได้ไล่ ก-ฮ เป็นสิบรอบเลย เลยทำให้นึกอยาก blog เรื่องตัวอักษรไทย

ถึงเรื่อง ก เอ๋ย ก ไก่ จะเป็นเรื่องของเด็กอนุบาล แต่ก็พบบ่อย ๆ ว่าผู้ใหญ่อย่างเรา ๆ ยังถามกันอยู่ ว่าท่อง ก ไก่ ถึง ฮ นกฮูก ได้หรือเปล่า ผมเองก็ถูกถาม

แหงละ คลุกคลีกับภาษาไทยซะขนาดนี้ ท่องไม่ได้ก็บ้าละ แต่ทุกคนคงเห็นได้ไม่ยาก ว่า ก เอ๋ย ก ไก่ ที่ท่องเป็นกลอนสี่กันนั้น มันไม่ค่อยมีประสิทธิภาพนักในการใช้งานในชีวิตจริง เช่น เวลาเปิดพจนานุกรมหรือเรียงลำดับคำตามตัวอักษร เราคงไม่พยายามท่องกลอนเพื่อจะบอกว่า บ ใบไม้ กับ ด เด็ก อะไรมาก่อน

ทุกคนที่ผ่านชั้นมัธยมมาแล้ว จะรู้จักพยัญชนะบาลี-สันสกฤต (ขอบคุณคุณครูประถม ที่สอนผมไว้ตั้งแต่เนิ่น ๆ) ที่แบ่งวรรคตามฐานที่เกิดของเสียงไว้เป็นอย่างดี:

วรรค กะ (คอ)
วรรค จะ (เพดาน)
วรรค ฏะ (ฟัน)
วรรค ตะ (ปุ่มเหงือก)
วรรค ปะ (ริมฝีปาก)

เศษวรรค ย ร ล ว (ศ ษ) ส ห ฬ ํ

บาลีไม่มี ศ ษ มีแต่ในสันสกฤต

เวลาท่อง ใส่สระอะเข้าไป (กะ ขะ คะ ฆะ งะ ฯลฯ) เป็นจังหวะเพลินดีนักแล

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

วรรค กะ (คอ) ข (ฃ) ค (ฅ)
วรรค จะ (เพดาน) ช (ซ)
วรรค ฏะ (ฟัน) (ฎ) ฏ
วรรค ตะ (ปุ่มเหงือก) (ด) ต
วรรค ปะ (ปาก) (บ) ป ผ (ฝ) พ (ฟ)

เศษวรรค ย ร ล ว ศ ษ ส ห ฬ (อ ฮ)

นี่คือวิธีไล่ ก-ฮ แบบสองมิติที่ผมใช้ ทำให้เทียบ/เรียงลำดับพยัญชนะได้รวดเร็ว แต่ประโยชน์ของการรู้จักพยัญชนะวรรคยังไม่จบแค่นี้ ยังมีเรื่องไตรยางศ์ (อักษร ๓ หมู่) ที่เกี่ยวข้องอีก

การแบ่งวรรคในแถวนอนของบาลี-สันสกฤต เป็นการแบ่งตามฐานที่เกิดของเสียง แต่ในแต่ละแถว ยังแบ่งย่อยในแนวตั้งเป็น ๕ คอลัมน์ ตามวิธีออกเสียง (โฆษะ-อโฆษะ, ธนิต-สิถิล-นาสิก) ดังนี้:

อโฆษะ โฆษะ
สิถิล ธนิต สิถิล ธนิต นาสิก
วรรค กะ (คอ)
วรรค จะ (เพดาน)
วรรค ฏะ (ฟัน)
วรรค ตะ (ปุ่มเหงือก)
วรรค ปะ (ปาก)

เศษวรรค ย ร ล ว (ศ ษ) ส ห ฬ ํ

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

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

สังเกตว่าเสียงสิถิลของคอลัมน์ที่สาม ก็ได้หายไปในภาษาไทยกลางด้วยเช่นกัน โดยกลายเป็นเสียงธนิต ทำให้ ค และ ฆ ออกเสียงเหมือนกัน รวมทั้ง ช และ ฌ, ฑ ฒ ท และ ธ, พ และ ภ ด้วย ภาษาเหนือจะยังคงเสียงสิถิลนี้ไว้ โดยออกเสียง ค เหมือน ก, ช เหมือน จ, ท เหมือน ต, พ เหมือน ป เช่น เชียงราย ออกเป็น เจียงฮาย, งามแท้ ออกเป็น งามแต๊, เพิ่น ออกเป็น เปิ้น ฯลฯ ดังนั้น การผันพยัญชนะวรรคตามแบบคนภาคเหนือ (กะ ขะ ก๊ะ ฆะ งะ) น่าจะใกล้เคียงของเดิมมากที่สุด

ร่องรอยที่ยังเหลืออยู่ของเสียงสิถิลของคอลัมน์สามในภาษาไทยกลาง คงเป็นตัว ฑ นางมณโฑ ที่ยังมีบางคำออกเสียงเป็น ด เช่น บัณฑิต มณฑป แต่อันนี้สันนิษฐานเอา ไม่ยืนยันครับ

สังเกตว่า วรรค ฏะ กับ วรรค ตะ ในภาษาไทยก็กลืนเป็นเสียงเดียวกันไปด้วย ตรงนี้คงเป็นเหมือนกันทุกภาค

การกลืนเสียงต่าง ๆ เหล่านี้แหละ ที่ทำให้เรามีพยัญชนะที่ออกเสียงเหมือนกันหลายตัว แต่ของเดิมจริง ๆ ต่างกันหมด

เกริ่นมาเสียยาว มาถึงเรื่องไตรยางศ์ที่โปรยไว้เสียที ภาษาต่าง ๆ ที่ใช้บาลี-สันสกฤตเป็นแม่แบบ ต่างปรับ feature การออกเสียงของคอลัมน์ต่าง ๆ นี้ไปคนละแบบ ผมเคยเขียนถึงของภาษาเขมรไว้ใน blog เก่า ว่าเขาใช้วิธีเปลี่ยนเสียงสระ เช่น ผันวรรคกะเป็น กอ คอ โก โค โง ซึ่งจะเห็นว่า สองตัวแรกเป็นอโฆษะ ใช้สระหนึ่ง สามตัวหลังซึ่งเป็นโฆษะ ใช้อีกสระหนึ่ง และเมื่อพยัญชนะโฆษะและอโฆษะไปสะกดสระเดียวกัน ก็จะออกเสียงเป็นคนละสระ เป็นต้น แต่ภาษาไทยของเราไม่ผันสระ แต่ผันวรรณยุกต์ เช่น ที่เราผัน กะ ขะ คะ ฆะ งะ จะเห็นว่า เสียงอโฆษะในสองตัวแรก เราใช้เสียงเอก ส่วนเสียงโฆษะสามตัวท้าย เราใช้เสียงตรี

และนี่คือที่มาของอักษรสามหมู่:

กลาง สูง ต่ำ
ต่ำคู่ ต่ำเดี่ยว
วรรค กะ (คอ) ข (ฃ) ค (ฅ)
วรรค จะ (เพดาน) ช (ซ)
วรรค ฏะ (ฟัน) (ฎ) ฏ
วรรค ตะ (ปุ่มเหงือก) (ด) ต
วรรค ปะ (ปาก) (บ) ป ผ (ฝ) พ (ฟ)

ลองเช็กกับ "ไก่จิกเด็กตายบนปากโอ่ง" และ "ไข่ฉันถากผีฝากสากให้" หรืออะไรก็แล้วแต่ที่คุณเคยท่องได้ ส่วนเศษวรรค ก็จำเพิ่มเอา มี อ เป็นอักษรกลางตัวเดียว และเสียง ส ห (ศ ษ ส ห) เป็นอักษรสูง นอกนั้นเป็นอักษรต่ำทั้งหมด

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

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

ที่ว่ามานั่นคือคำเป็น แต่พอเป็นคำตาย ก็จะซับซ้อนหน่อย โดยเฉพาะอักษรต่ำที่เสียงพื้นเป็นโฆษะ รายละเอียดก็ตามที่เรียนมาในวิชาภาษาไทยนะครับ ถ้าสาธยายต่อจะยืดยาวไป

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

ป้ายกำกับ:

25 เมษายน 2550

Garuda Refinement

หลังจากทดลองใช้ Loma แบบ OTF ที่ทำไว้ แรก ๆ รู้สึกไม่คุ้นกับบุคลิกของฟอนต์ที่เปลี่ยนไปเพราะผลของ hint แต่ก็พอใจกับความคมของเส้นพอสมควร แต่บังเอิญว่ามีฟอนต์อีกตัวหนึ่งที่ผมใช้บ่อยมาก คือ Garuda ซึ่งพลอยถูก build แบบ OTF ด้วย รู้สึกว่าคุณภาพการแสดงผลเป็นอันตรายต่อสายตามากกว่าแบบไม่มี hint โดยเฉพาะเมื่อสีพื้นเข้ม สีตัวอักษรเป็นสีขาว โดยเส้นตั้งส่วนใหญ่จะคมแต่เส้นนอนจะเบลอ ลองนึกภาพหน้าเว็บที่เต็มไปด้วยขีดตั้งก็แล้วกัน

ก็เลยตกลงว่าจะทำความสะอาด Garuda เป็นฟอนต์ถัดไป.. อาการของ Garuda จะตรงข้ามกับ Loma โดยคล้ายกับ กินรี ที่เคยทำ คือ spline น้อยเกินไป และขาด extrema เหมือนออกแบบเพื่อหลบ hint โดยเฉพาะ หุ ๆ ส่วนใหญ่ก็เลยเป็นการเพิ่ม spline

ก่อนทำ:

Garuda spline, before editing

หลังทำ:

Garuda spline, before editing

ซึ่งหลังจากไล่ทำจนครบทุก glyph ก็ปรากฏว่าผลการ hint ที่ได้ ดูดีขึ้นนิดหน่อย ไม่ทรมานสายตาเหมือนเดิม

ก่อนทำ:

Garuda spline, before editing

หลังทำ:

Garuda spline, before editing

สังเกตว่า หลังทำ เส้นจะคมตลอดตัวอักษร ไม่ใช่คมบ้างเบลอบ้างเหมือนก่อนทำ ตัวที่เห็นชัดที่สุดคงเป็นสระโอ

เพิ่งได้แค่ตัวธรรมดา ยังเหลือตัวเอียง-ตัวหนาต้องทำอีก

หมายเหตุ: กลับคืนสู่ Planet TLWG อีกครั้ง หลังจากตัด feed ไปชั่วคราว เนื่องจากความมั่วที่เกิดขึ้นใน blog

ป้ายกำกับ:

22 เมษายน 2550

Font Hinting Solutions

คุณ wd แนะนำ มาว่า มีวิธี สร้าง TrueType hint ด้วย fontforge โดยแค่กำหนดรูปแบบ spline ของฟอนต์จาก Cubic ในแบบ Type 1 ให้เป็น Quadratic ของ TrueType เมนู hinting ที่เกี่ยวกับ TrueType ทั้งหมดที่เคย gray อยู่ ก็จะเรียกใช้ได้

ว้าว ใช้ได้จริง ๆ ด้วย และนี่คือผลที่ได้จากการสั่ง AutoInstr:

(screenshot ทั้งหมดข้างล่างนี้ ใช้การตั้งค่าฟอนต์แบบเปิดใช้ hint เต็มที่ และไม่มีการใช้ subpixel ช่วย)

ก่อนทำ:

Unhinted Loma TTF

หลังทำ:

Hinted Loma TTF

หลังจากตื่นเต้นอยู่พักหนึ่ง ก็คิดหาทางปรับ hint โดยอาศัย Tutorial ของไมโครซอฟท์ แต่กลับต้องพิศวงงงงวย กับ instruction ต่าง ๆ ที่รูปแบบไม่ต่างจากภาษาแอสเซมบลีเท่าไร อีกอย่าง การปรับ quadratic spline ก็ทำได้ยากกว่า cubic spline ที่คุ้นเคยด้วย

แต่ยังก่อน นั่นยังไม่ใช่ทั้งหมดของเรื่อง ย้อนกลับไปที่ตอนเช้าของวันนี้ ก่อนจะมาเปิดเครื่องทำงาน.. (และมาเห็นความเห็นของคุณ wd) ขณะทำธุระส่วนตัวก็นึกไปถึงวิธีการสร้างฟอนต์ด้วย fontforge ของเราที่ผ่านมา ที่ทำกับ cubic spline ซึ่งเป็นรูปแบบที่ Type 1 ใช้ แล้ว generate เป็น TTF โดย fontforge จะแปลงรูปแบบ spline เป็น quadratic ให้ ทำให้เราควบคุมการ hint ได้ไม่เต็มที่ และพารามิเตอร์ต่าง ๆ ที่เตรียมไว้ ไม่ว่าจะเป็น HHint, VHint, BlueValues ฯลฯ ก็ล้วนแต่เป็น Postscript ทั้งสิ้น อย่างนี้แล้ว ถ้าเราใช้ฟอนต์ Type 1 โดยตรงได้ ก็คงจะดีไม่น้อย แต่จำได้ว่าฟอนต์ Type 1 จะมีปัญหากับการ shape ภาษาไทย โดยเป็นปัญหาเรื่องการตรวจสอบ glyph ของ fontconfig แต่นั่นก็นานมาแล้ว ตอนนี้จะเป็นยังไงบ้างหนอ

อย่ากระนั้นเลย สิ่งแรกที่ทำในวันนี้คือ ลองฟอนต์ Type 1 ดูเสียหน่อย ได้ผลตามรูป:

Loma Type 1

จะเห็นว่าคุณภาพการ hint ดีกว่า TrueType แต่ยังมีปัญหาวรรณยุกต์ลอยอยู่ ตรวจดูก็ได้ความว่ามี PUA glyph ของวรรณยุกต์ตัวหลบบางตัวอยู่เกินอักขระที่ 255 ไป แล้วก็ไม่โดนอ้างอิงถึง แต่เรื่อง PUA นี่ เราจะ deprecate ในอนาคตแล้วไม่ใช่หรือ เราต้องการ OpenType ต่างหาก

นั่นสิ.. OpenType ไง! OpenType ที่ข้อมูลอยู่ในรูป Postscript แทนที่จะเป็น TrueType ผมเองเคยลองใช้ฟอนต์รูปแบบ OTF แล้วไม่ชอบ เพราะมันคมเกินไป :P แต่พักหลัง ๆ ได้ยินผู้ใช้บ่นเรื่องความเบลอของ TrueType font บนลินุกซ์มากขึ้น.. เอ.. หรือจะลองกลับมาดู OTF อีกครั้ง?

และนี่คือผลที่ได้:

Loma OTF

เป็นไงครับ คมดีไหม? การจัดระดับก็ถูกต้องหมด นี่แหละ คือการเปิดใช้ข้อมูลต่าง ๆ ที่เตรียมไว้อย่างแท้จริง อาจเป็นทางออกให้กับคนที่ชักรู้สึกวิงเวียนกับความเบลอของฟอนต์ TrueType อีกทั้งตัวข้อมูลฟอนต์ก็ไม่ต้องปรับเปลี่ยนอะไรมาก spline และ hinting ทุกอย่าง สามารถนำมาใช้ได้หมด และคุณภาพการ hint ดูจะดีกว่าของ TrueType อยู่หน่อยหนึ่ง (เพราะการรองรับ TrueType instruction ของ fontforge เองยังไม่พัฒนาเต็มที่) แม้จะยังมีบางจุดที่ยังเพี้ยน ก็ดูจะปรับได้ง่ายกว่า TrueType มาก

ว่าแล้วเดี๋ยวนั่ง fine tune hint เสียหน่อยดีกว่า

ป้ายกำกับ:

21 เมษายน 2550

Temporarily Cut Off

เนื่องจาก feed ของผมเกิดความมั่วขึ้น เพราะพยายาม tag blog เก่า โดยไม่รู้ว่า blogger รุ่นใหม่มันจะดัน entry เก่าที่แก้ไขนั้นกลับขึ้นมาหน้าแรก (ในรุ่นเก่านั้น ถ้ากลับไปแก้ blog เก่าที่ตกหน้าแรกไปแล้ว จะไม่มีผลอะไร blog ที่แก้นั้นก็จะยังอยู่ที่เดิม) แม้จะพยายามบังคับวันที่ของการโพสต์เป็นวันที่ blog จริง ก็ไม่ปรากฏว่า blog ถูกดันกลับลงไป ดังนั้น เพื่อไม่ให้ feed ผมไป flood Planet TLWG ก็เลยขอตัด feed ตัวเองออกจาก Planet ก่อนชั่วคราว รอเวลาผ่านไปสักระยะหนึ่งจึงค่อย feed กลับ ขออภัยอีกครั้งสำหรับความไม่สะดวกที่เกิดขึ้น

Font Tuning

แอบปล่อย thaifonts-scalable 0.4.6 ไปเมื่อวันสงกรานต์ ในรุ่นนี้ รวมการเปลี่ยนแปลงต่าง ๆ ที่สะสมไว้ในช่วง 6 เดือนที่ผ่านมา บั๊กหลายตัวแก้ไว้ตั้งแต่ปีกลาย เพิ่งจะถึงคราวสลับมาที่งานฟอนต์ จึงได้โอกาส release:

  • ฟอนต์ Loma ตัวหนาจะเป็นตัวเหลี่ยมเหมือนตัวปกติแล้ว ซึ่งความจริง update จากทีม TLE ไว้นานแล้ว
  • แก้ปัญหาตัว subscript ที่มีปัญหากับ Mozilla
  • เพิ่ม ข้อยกเว้น ใน font license เพื่อไม่ให้เอกสารที่ embed ฟอนต์ต้องถูก GPL ครอบคลุมไปด้วย
  • ปรับปรุง GSUB table ของฟอนต์ เพื่อให้ทำงานกับ Openoffice.org ได้

เรื่องสุดท้ายนี้ยังไม่สมบูรณ์เท่าที่ควร ยังมีปัญหาบางส่วนที่อาจเป็นปัญหาของ OO.o เอง ที่ทำให้คำนวณความกว้างของอักขระเพี้ยน กับอีกปัญหาหนึ่งที่เจอแบบทันทีทันใด (คุณ wd ไวอีกเช่นเคย) คือปัญหาวรรณยุกต์ลอยเมื่อใช้ร่วมกับสระล่าง ตรงนี้ผมก็เจอไล่เลี่ยกับคุณ wd เหมือนกัน พบว่าเป็นปัญหาของ fontforge เองขณะ copy feature ทำข้อมูลเพี้ยนไปตัวหนึ่ง เลยเป็นคำอธิบายว่าทำไมฟอนต์ Garuda ที่เป็นต้นแบบจึงไม่มีปัญหาอยู่ฟอนต์เดียว เลยจัดการแก้ด้วยมือไปแล้วใน CVS

ที่น่าสนใจคือ คุณ wd ได้ทำฟอนต์ Lomaputta (โลมาบุตร) โดยปรับจากฟอนต์ Loma ทำให้เกิดความสนใจที่จะนำมาเทียบเพื่อปรับปรุง Loma ด้วย แต่ระหว่างที่ดู glyph ของ Loma ไป ก็พบความเปรอะของ spline ก็เป็นอันถึงคราวเก็บกวาด Loma หลังจากที่เคย ทำกับฟอนต์กินรี ไปเมื่อสองปีก่อน

Loma ธรรมดาลืมจับ screenshot ก่อนทำ

Loma Oblique ก่อนผ่าตัด:

Loma Oblique, before simplification

Loma Oblique หลังผ่าตัด:

Loma Oblique, before simplification

Loma Bold ก่อนผ่าตัด ยิ่งเปรอะกว่า:

Loma Oblique, before simplification

Loma Bold หลังผ่าตัด:

Loma Oblique, before simplification

ทำไปวันละตัว แต่ดูเหมือนตัวหนาจะอาการสาหัสสากรรจ์ เพราะผ่านการแปลงแบบอัตโนมัติจากตัวธรรมดามาไม่รู้กี่ขั้น ต้องใช้เวลาปรับมากหน่อย ยังเหลือ Loma Bold Oblique อีกตัว ต้องค่อย ๆ ทำไป

นอกจากปรับ spline แล้ว ยังพยายามใช้ glyph reference แทนการวาด spine ซ้ำ ๆ สำหรับ glyph ที่ใช้รูปร่างเดียวกัน เช่น สระบนและวรรณยุกต์ที่ใช้หลบหาง ป ฝ ฟ หรือแม้กระทั่งนิคหิตและลากข้างในสระอำ ก็ไม่ต้องวาดซ้ำ นอกจากนี้ ยังแก้ปัญหาการวางสระอุ อู และพินทุ ใต้ ฎ ฏ ด้วย

จากการปรับทั้งหมด ทำให้ตัด spline ส่วนเกินออกไปเยอะพอควร ฟอนต์ตัวธรรมดาขนาดลดลงไปประมาณ 3 KB คิดเป็น 8% แต่สำหรับฟอนต์ตัวหนาแล้ว ลดลงไปถึง 9 KB หรือคิดเป็น 20% เลยทีเดียว แต่ที่สำคัญคือ การทำ spline ให้อยู่ในรูปที่ง่ายลง น่าจะเป็นผลดีต่อการดูแลฟอนต์ต่อไปในอนาคต รวมทั้งการเอื้อต่อการทำ hint ด้วย

สำหรับผู้ที่สนใจเรื่องทางเทคนิคของฟอนต์นะครับ ไปเจอคู่มือ Type by Design - The Art and Science of Digital Typeface Design ซึ่งเรียกว่าเป็นตำราทำฟอนต์ได้เลยเชียว อ่านแล้วรู้สึกมั่นใจขึ้นในประสบการณ์ที่สั่งสมมาจากการดูแล thaifonts-scalable พร้อมได้หลักการเพิ่มเติมอีกมากมาย

ทิ้งท้ายนิดสำหรับฟอนต์กินรี ฟอนต์นี้แม้จะอยู่ในชุดฟอนต์แห่งชาติ แต่ license ของฟอนต์ไม่ได้ระบุอะไรเลยว่าสามารถแจกจ่ายแก้ไขได้ ทำให้ต้องตัดออกจาก thaifonts-scalable ไปก่อน (blog ตอนที่เตรียมตัด) แต่ถ้าเป็นไปได้ ก็อยากให้เรื่อง license เคลียร์เสียที จะได้รวมมาใน thaifonts-scalable เพื่อให้มีฟอนต์ใช้แทน Angsana ในลินุกซ์ รวมทั้ง Italic (ที่ไม่ใช่ Oblique) และ Bold Italic ที่ผมเคยทำเพิ่มไว้ด้วย

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

หมายเหตุ: กลับสู่ blog ใหม่ตามปกติ หลังจากที่มี blog เก่าถูกดันขึ้นมาแทรกเนื่องจากพยายาม tag blog เก่า ขออภัยในความไม่สะดวกสำหรับผู้อ่าน blog ด้วยครับ

ป้ายกำกับ:

Scripts of the World

งานแปล GNOME 2.12 ยังดำเนินต่อไป เพื่อการหลุดพ้นจากสถานะ unsupported ของภาษาไทย ดูซิจะทำ hat trick ติดชาร์ต top 5 movers สามอาทิตย์ติดต่อกันได้หรือเปล่า เอิ๊กๆ

แต่ละแพกเกจจะมีความยากในการแปลต่างกันไป แต่จะมีบางแพกเกจที่ต้องอาศัยการค้นคว้าเป็นหลัก ไม่ใช่การแปลประโยคตามปกติ อย่างเช่น locations ใน gweather ก็ต้องค้นตัวสะกดชื่อประเทศ และชื่อเมืองต่างๆ และอีกแพกเกจหนึ่ง ที่ต้องอาศัยการค้นคว้าเหมือนกัน คือ gucharmap หรือโปรแกรมตารางอักขระยูนิโค้ดนั่นเอง เป็นการค้นหาตัวสะกดชื่อภาษาต่างๆ ทั่วโลก ซึ่งระหว่างค้นไป ก็จะเจอความรู้เรื่องภาษาไปด้วย ตัวอย่างเช่น:

  • ภาษาจีน นอกจากอักษรฮั่น (Hanzi - 汉字 / 漢字) แล้ว ยังมีตัวเขียนเสียงอ่านอีก ซึ่งเราจะคุ้นกับระบบ พินอิน (Pinyin - 拼音) ซึ่งใช้อักษรโรมันมากกว่า แต่ก็ยังมีระบบเดิมที่ยังใช้อยู่ในไต้หวัน คือ จู้อิน (Zhuyin - 注音) ซึ่งเรียกอีกชื่อหนึ่งว่า Bopomofo (ㄅㄆㄇㄈ) โดยเอามาจากอักขระสี่ตัวแรกที่ใช้เขียนเสียงในระบบนี้นั่นเอง ตัวจู้อินนี้ ในจีนแผ่นดินใหญ่ได้พัฒนามาเป็นพินอิน โดยแทนด้วยอักขระโรมันเท่านั้น องค์ประกอบของเสียงต่างๆ ยังคงเดิมทุกประการ ก็เลยพลิกตำราภาษาจีนกลาง แปล Bopomofo ว่า ปอพอมอฟอ แล้ววงเล็บไว้ว่า จู้อิน หวังว่าจะใช้ได้ เหอๆ
  • แหล่งข้อมูลเรื่องการออกเสียงพินอิน: หลักการออกเสียงภาษาจีนกลางโดยใช้พินอิน (Pinyin) เขียนโดย คุณปาริชาติ
  • คำว่า "อักษรฮั่น" ในภาษาต่างๆ:
    • จีนกลาง: Hanzi
    • ญี่ปุ่น: Kanji
    • เกาหลี: Hanja
    • เวียดนาม: Han tu
  • ประเทศกลุ่ม CJKV มีระบบการเขียนแบบ syllabary คือประกอบพยางค์กันทั้งนั้น ถึงแม้จะมีอักษรฮั่นซึ่งเป็นอักษรภาพใช้ก็ตาม
    • จีนแผ่นดินใหญ่: Pinyin
    • ไต้หวัน: Zhuyin
    • ญี่ปุ่น: Hiragana, Katakana, Romaji
    • เกาหลี: Hangul
    • เวียดนาม: ละติน
  • bookmark แหล่งภาษาเขียนของโลก:

ปล. ช่วงนี้ GNOME เขาย้ายเซิร์ฟเวอร์อยู่นะคร้าบ เห็นแจ้งล่วงหน้าไว้แล้ว ว่าจะใช้เวลาย้ายทั้งหมด 3 วัน บริการต่างๆ ทั้ง CVS, Bugzilla, เว็บ GNOME อะไรพวกนี้ หยุดชั่วคราวก่อน คนแปลโปรแกรมก็แปลแล้วอั้นๆ ไว้ รอ commit พรวดเดียว

หมายเหตุ: วันที่ blog: 29 มิ.ย. 2548 (ถูกดันขึ้นมาเพราะพยายาม tag blog เก่า)

ป้ายกำกับ: ,

Font License, LaTeX

ก่อนจะแปล GNOME ต่อ มีเรื่องฟอนต์ให้สะสางก่อน กล่าวคือ thaifonts-scalable นั้น ไม่ได้ออกรุ่นใหม่มานานแล้ว ทั้งที่ระหว่างนั้นก็มีการปรับปรุงเปลี่ยนแปลงพอสมควร ทั้งนี้เพราะติดปัญหาเรื่องความไม่ชัดเจนของ license ของฟอนต์

ฟอนต์ในไดเรกทอรี "nf" นั้น มาจากโครงการฟอนต์แห่งชาติ ที่เนคเทคเคยจัดให้มีขึ้น โดยได้รับความร่วมมือจากผู้เชี่ยวชาญเรื่องฟอนต์ของเมืองไทย อย่างเช่น Dear Book และ Unity Progress และอาจารย์จากมหาวิทยาลัยบางแห่ง มาร่วมกันร่าง คำแนะนำในการสร้างฟอนต์ไทย พร้อมกับสร้างฟอนต์ตัวอย่างไว้ให้เป็นสาธารณสมบัติ (public domain) ทั้งหมด 3 ฟอนต์ โดยได้รับพระมหากรุณาธิคุณจากสมเด็จพระเทพฯ พระราชทานชื่อฟอนต์ชุดที่ 1, 2 และ 3 ว่า กินรี, ครุฑ และ นรสีห์ ตามลำดับ และในขณะนั้น โครงการก็ประกาศเจตนารมณ์ที่จะส่งเสริมการใช้ฟอนต์ทั้งสาม เป็นฟอนต์มาตรฐานในเอกสารต่างๆ โดยกำจัดข้อจำกัดเรื่อง license ออกไป

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

ทีนี้ ปัญหาที่พบก็คือ ข้อมูลในฟอนต์แห่งชาติที่พัฒนากันอยู่นั้น มันขัดกับเจตนารมณ์ที่โครงการฟอนต์แห่งชาติประกาศไว้ กล่าวคือ ข้อมูล copyright มีการระบุเจ้าของตามปกติ โดยไม่ได้ระบุ license เป็นอย่างอื่น ซึ่งตามกฎหมายลิขสิทธิ์ก็หมายความว่า ฟอนต์ดังกล่าว ได้รับความคุ้มครอง ห้ามผู้ใดทำซ้ำ ดัดแปลง หรือเผยแพร่ โดยไม่ได้รับอนุญาตจากเจ้าของลิขสิทธิ์ ก็เท่ากับว่า เรากำลังละเมิดลิขสิทธิ์ของเจ้าของฟอนต์เหล่านั้นอยู่ ถ้าเป็นการเผยแพร่ภายในประเทศ ก็คงไม่มีปัญหาอะไร ในเมื่อทุกคนรู้เจตนาของการสร้างฟอนต์ ก็น่าจะไม่มีการฟ้องร้องอะไร แต่จะมีปัญหาเมื่อพยายามจะส่งฟอนต์เข้า Linux distro สากล ซึ่งเขาไม่ได้มารับรู้อะไรด้วย ว่ามีโครงการฟอนต์แห่งชาติ หลักฐานที่เขาดู ก็คือข้อมูลที่ระบุในฟอนต์เท่านั้น ซึ่งถ้าเราต้องการให้ลินุกซ์ใช้ภาษาไทยได้แต่ต้น โดยไม่ต้องลงฟอนต์เพิ่ม ก็ต้องแก้ปัญหานี้ โดยต้องไปขออนุญาตกับเจ้าของฟอนต์ แต่คำถามต่อไปก็คือ "ใครคือเจ้าของฟอนต์?"

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

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

ฟอนต์นรสีห์นั้น คุณชนพได้เคยติดต่อ ดร.วิรัช ไว้แล้ว และได้รับอนุญาตให้ใช้ GPL ได้ ส่วนฟอนต์ครุฑนั้น ระบุไว้ใน Copyright ว่า "Generated by NECTEC for Public Domain" ก็น่าจะหมดปัญหาไปอีกหนึ่ง ยังคงขาดข้อมูลเรื่องผู้ออกแบบ glyph เท่านั้น รวมทั้ง glyph ตัวโรมันด้วย ว่าเอามาจากฟอนต์อื่นหรือเปล่า ส่วนฟอนต์กินรี ระบุไว้ชัดเจนเลยว่า "Kinnari by Db Type : Fontographer 3.5" และไม่มีข้อมูล license เลย ตัวนี้ ถ้าติดต่อเจ้าของไม่ได้จริงๆ น่าจะมีปัญหาในการเผยแพร่

วันนี้เลยไล่ตรวจสอบความเรียบร้อยของข้อมูล license ของฟอนต์อย่างเดียว เพื่อเตรียมออกรุ่นใหม่ 9 มิ.ย. นี้ โดยพร้อมจะตัดฟอนต์ที่มีปัญหา เช่น กินรี ออกทุกเมื่อ และได้ update ฟอนต์ไปยัง thailatex ด้วย

พูดถึง LaTeX วันนี้ไปเจอบทความน่าสนใจที่ OSNews.com:

LaTeX isn't for everyone but it could be for you อ่านๆ ไป ถึงเพิ่งรู้ ว่ามีคน เกลียด WYSIWYG ขนาดนี้ โหะๆ ยังไม่ได้อ่าน แต่คิดว่าคงถูกใจผม :-) พร้อมกันนี้ ก็มีลิงก์ไปยังเอกสารสอนใช้ LaTeX ที่น่าสนใจ:

bookmark ไว้ก่อน ไว้มาอ่าน :-)

หมายเหตุ: วันที่ blog: 7 มิ.ย. 2548 (ถูกดันขึ้นมาเพราะพยายาม tag blog เก่า)

ป้ายกำกับ:

Kinnari Fine Tuning

วันศุกร์ พักงานแปลไว้ก่อน รอทีมทะเลที่กำลังเซ็ตอัพระบบเพื่อกลับมาร่วมกันแปลต่อ ระหว่างนี้ก็สลับเอาฟอนต์กินรีมาปรับต่อ เนื่องจากระหว่างทดสอบ thailatex พบว่าคุณภาพการ rasterize ฟอนต์กินรีไม่ค่อยดี เหมือน hinting มันเพี้ยนๆ ลองตรวจ spline ดูก็พบว่า glyph ของกินรีทำ spline ไว้ปราณีตมากก็จริง แต่จำนวนจุดที่ใช้น้อยเกินไป ขาดจุดสำคัญๆ ที่ระบบ hint ของ Type 1 จะใช้ปรับ spline ก็เลยนั่งเพิ่มจุดพร้อมกับถือโอกาสทำความสะอาด spline ในบางจุดที่ค่าเพี้ยนนิดหน่อยไปด้วย

ตัวอย่างบางตอนที่ตัดมา ความจริงตัวตรงจะมีปัญหามากกว่าตัวเอียง แต่พอดีลืมจับ screenshot ไว้ก่อนแก้ สังเกตที่ส่วนโค้งด้านบนของ ณ เณร ไม่มี spline ที่ยอด ทำให้ไม่มี H-Stem hint เมื่อถูกใช้กับค่า BlueValues ที่ดึงเฉพาะส่วนโค้งด้านบนขึ้นไป เส้นเลยปูดออก ถ้าเพิ่ม spline เสีย ก็จะเกิดการขยับเส้นโค้งตามกันไป เรื่องนี้ต้องแก้แทบทุกตัวที่มีเส้นโค้งด้านบนอย่างนี้

นอกจากนี้ ปัญหาเดียวกันยังเกิดที่เส้นขมวดกลมด้วย (พอดีไม่แสดงออกในตัวเอียง) เพราะกำหนดวงกลมด้วยสองจุด พอเพิ่มเป็นสี่จุดก็ดีขึ้น

อีกเรื่องหนึ่งคือเส้นสะบัดที่หาง ธ ธง, ร เรือ และ ฐ ฐาน มีจุดกำกับน้อยเกินไป ทำให้เส้นเลอะเหมือนกัน

ก่อน:

Kinnari sample in xdvi Kinnari spline in fontforge
รูปร่างใน xdvi spline ใน fontforge

หลัง:

Kinnari sample in xdvi Kinnari spline in fontforge
รูปร่างใน xdvi spline ใน fontforge

แก้ไปเกือบหมดเมื่อวันศุกร์ เหลือแต่ Bold Italic ค้างไว้ ก็พอดีวันเสาร์ถูกลากไปธุระของทางบ้าน วันนี้ถึงเพิ่งมาทำต่อจนเสร็จ

ligature ภาษาอังกฤษก็เพิ่มไปแล้ว เหลือเรื่อง kerning สินะ

หมายเหตุ: วันที่ blog: 30 ม.ค. 2548 (ถูกดันขึ้นมาเพราะพยายาม tag blog เก่า)

ป้ายกำกับ:

กินรี Bold Italic

ตามที่เคย ว่าไว้ ว่าเหลือ BoldItalic ของกินรีต้องทำอีก วันนี้วันหยุดเลยถือโอกาสนั่งแต่ง spline จนจบ

Kinnari Bold Italic sample text

เดี๋ยวลองเอาใส่ thailatex ดีกว่า เหอะๆ

หมายเหตุ: วันที่ blog: 23 ม.ค. 2548 (ถูกดันขึ้นมาเพราะพยายาม tag blog เก่า)

ป้ายกำกับ:

กินรี Italic รุ่นแรก

จากที่เคยเสนอเรื่อง กินรี Italic ก็เลยทดลองทำดู โดยเลือกแปลงจากตัวตรงเอา ก็ค่อยๆ แปลงทีละขั้น ตอนนี้ฟอนต์เริ่มมีบุคลิกแตกต่างจากตัว Oblique บ้างแล้ว โดยพบว่า ขั้นที่สำคัญที่สุด (รึเปล่าหว่า) คือการทำหัวตัวอักษรให้กลม เป็นการประกาศอิสรภาพจากการเป็น "เงาเอียง" ของตัวตรง

Normal:

Kinnari Normal sample text

Oblique:

Kinnari Oblique sample text

Italic:

Kinnari Italic sample text

ขั้นตอนที่ทำคือ

  1. เอาตัวตรงมาทำปลายที่แหลมให้ตัดตรง
  2. ดัดแปลงพยัญชนะบางตัว เช่น ยกเส้นเอียงใน ฑ นางมณโฑ และ ท ทหาร ให้สูงขึ้น แปลงลิ่มไม้เอกให้เป็นแท่งตรง โยกหาง ง งู ให้หุบเข้าอีก
  3. ย่อความกว้างตัวหนังสือลงเหลือ 95.34% ของขนาดเดิม (วัดเทียบสัดส่วนเอาจากตัวอย่างในหนังสือ) เพื่อให้ตัวหนังสือดูเพรียว
  4. โยกตัวหนังสือให้เอียง 15.5 องศา (ค่ามุมเอียงของตัวโรมันที่ใช้)
  5. แต่งหัวตัวอักษรทุกตัวให้กลม

ใช้เวลาหนึ่งวันแต่งหัวตัวอักษรจนครบ ปวดหลังใช่เล่น เหอะๆ (ลำพังเส้นด้านในใช้เครื่องมือโยกเอาได้ แต่ตรงรอยต่อระหว่างหัวกับเส้นตัวอักษรนี่ ต้องแต่ง spline เอาอีกที) แต่ก็สนุกดี เหมือนตอนที่เล่น inkscape เลย

ยังเหลือตัวหนาต้องทำอีก ไว้ว่างๆ

หมายเหตุ: วันที่ blog: 17 ม.ค. 2548 (ถูกดันขึ้นมาเพราะพยายาม tag blog เก่า)

ป้ายกำกับ:

กินรี Italic?

จากที่เคยเล่าใน LTN devel forum ว่ามีแบบตัวพิมพ์ที่คิดว่าน่าจะเป็น italic (ไม่ใช่ oblique) ของฟอนต์กินรี ก็เลยถ่ายรูปจากหนังสือเก่ามาเป็นตัวอย่าง เพราะเท่าที่ดูตัวพิมพ์ ฝศ เขาจะใช้ตัวเอนแบบนี้คู่กัน เดี๋ยวเข้าไปถามความเห็นใน LTN ก่อน เรื่องจะลงมือทำคงเป็นอีกเรื่อง เพราะตอนนี้ยังไม่มีสแกนเนอร์เป็นของตัวเองเลย :P

Book snapshot

ได้หนังสือรวมแบบอักษรประดิษฐ์ ที่มีฟอนต์นี้มาพอดี ถ้าต้องลงมือสแกน คงสแกนจากเล่มนั้นดีกว่า

หมายเหตุ: วันที่ blog: 1 ม.ค. 2548 (ถูกดันขึ้นเพราะพยายาม tag blog เก่า)

ป้ายกำกับ:

Old Entries

กลับไป tag blog เก่าที่ถูกอ้างถึงใน blog ล่าสุด แล้วก็เลยไปถึง blog อื่นที่เกี่ยวข้องด้วย.. blogger มันเอามา update ใน feed ให้เลยเหรอเนี่ย - -' ทำ Planet TLWG ป่วนหมด ขออภัยด้วยคร้าบ _/\_

สงสัยล้มเลิกความตั้งใจที่จะ tag blog เก่าแล้วละ ^_^'

18 เมษายน 2550

The Three Kingdoms

ไม่ได้เขียนเรื่องหนังสือเสียนาน ความจริงก็เป็นเรื่องที่ว่าจะเขียนต่อจากเรื่อง คนจีนพบทวีปอเมริกา เมื่อปลายปีกลายน่ะ แต่พอดีมี เรื่องอื้อฉาวของ MICT มาขัดจังหวะเสียก่อน แล้วก็เลยสาละวนกับกิจกรรมโอเพนซอร์สที่ต่อเนื่องจากเหตุการณ์มาตลอด ตามด้วยฤดูรับจ้าง จนกระทั่งมาเริงร่ากับงานพัฒนาได้เมื่อเร็ว ๆ นี้ ก็กลับมาขีดเขียนเรื่องนี้ส่งท้ายวันหยุดเสียหน่อยน่ะ

"อ่านสามก๊กสามจบ คบไม่ได้" เป็นวลีฮิตติดปากคนไทยมาตลอด เกี่ยวกับหนึ่งในสี่วรรณกรรมชิ้นเอกของจีนเล่มนี้ แต่นักตำราบริหารมักจะแนะนำให้อ่าน ถึงกับบอกว่า "ไม่ได้อ่านสามก๊ก อย่าพึงคิดการใหญ่"

ใครถามผม ผมก็ตอบเล่น ๆ ว่าผมอ่านแค่จบเดียวครับ คบได้อยู่ ฉบับเจ้าพระยาพระคลัง ฉบับวณิพก ฉบับสังข์ พัทธโนทัย อย่างละจบเดียวจริง ๆ นี่ถ้าไม่กลัวจะเสียเวลาอาจจะหาฉบับวรรณไว พัทธโนทัย มาอ่านเพิ่มอีก แต่ยังหรอก ผมยังไม่กระหายขนาดนั้น

ที่อยากจะเขียนก็คือ ผมเห็นแย้งว่า "อ่านสามก๊กจบเดียว คบไม่ได้" มากกว่า

ทำไมน่ะหรือ? ผมเห็นว่าคนที่อ่านสามก๊กจำนวนมาก จะเห็นมังกรหลับขงเบ้งเป็นฮีโร่ ถ้าอ่านแค่รอบเดียวโดยซึมซับแต่อรรถรสของนิยายอย่างเดียว ก็เสี่ยงที่จะเลียนแบบพฤติกรรมของขงเบ้งในชีวิตประจำวัน เป็นอย่างนี้มากเข้า เราก็จะพบแต่คนสับปลับปลิ้นปล้อนในสังคม โดยคิดไปว่านั่นคือความฉลาดรู้เท่าทันคน แล้วสังคมก็จะเต็มไปด้วยการเอารัดเอาเปรียบ

ใครจะเห็นขงเบ้งเป็นฮีโร่ก็ตามแต่ ผมรู้สึกตั้งแต่อ่านรอบแรกเลย ว่าถ้าเจอคนอย่างนี้ในชีวิตจริง จะหลีกลี้ให้ไกลสามร้อยโยชน์ คนที่คิดแต่จะเอาเปรียบคนอื่น เอาชนะคนอื่นด้วยความฉ้อฉล โดยไม่คำนึงถึงคุณธรรมแบบนี้ ถึงจะอ้างตามแบบนักการเมืองว่าเพื่อฟื้นฟูราชวงศ์ฮั่น ค้ำบัลลังก์ฮ่องเต้อย่างไรก็ฟังไม่ขึ้น ยังมีวีรบุรุษของจีนอีกมากมาย ที่ค้ำจุนราชบัลลังก์ได้ด้วยคุณธรรม

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

นอกจากนี้ ยังมีเรื่องที่พึงระลึกไว้ตลอดเวลาด้วย ว่าสามก๊กฉบับของล่อกวนตงที่เราอ่านกันนั้น เป็น 三國演義 [แต้จิ๋ว: ซัมกกอิ่งหงี; จีนกลาง: ซันกว๋อเหยียนอี้] ที่ต่อเติมเสริมแต่งเอาไว้เล่นงิ้วเท่านั้น จึงมีการสร้างภาพขาวกับดำชัดเจน พร้อมตอกไข่ ใส่ดราม่าให้ชวนติดตาม กลยุทธ์บางอย่างก็ไม่มีอยู่จริง เป็นเพียงจินตนาการของกวีที่อาจไม่ได้รู้พิชัยสงครามลึกซึ้ง เป็นแต่เขียนเอามัน การจะเอานิยายมาประยุกต์ใช้ จึงต้องใช้วิจารณญาณพอสมควร

หากจะหาบันทึกฉบับพงศาวดารสามก๊ก หรือ 三國志 [แต้จิ๋ว: ซัมกกจี่; จีนกลาง: ซันกว๋อจื้อ] มาอ่าน คงหาอ่านได้ยาก อย่างดีก็อยู่ในคำอธิบายเปรียบเทียบในหนังสือต่าง ๆ ระหว่างเรื่องแต่งกับเรื่องจริง เช่น การสาบานในสวนท้อที่ไม่มีจริง นางเตียวเสี้ยนที่ไม่เคยมีตัวตน ข้อเท็จจริงระหว่างขงเบ้งกับสุมาอี้หลายเรื่อง ฯลฯ แต่เร็ว ๆ นี้ ไปเจอหนังสือของ "เล่าชวนหัว" คนเดิม ที่เอาพงศาวดารมาเรียบเรียงให้อ่านแบบย่อ พร้อมทั้งให้ข้อคิดถึงมุมมองที่ควรมองต่อเรื่องสามก๊ก ซึ่งผมเห็นด้วยอย่างมาก

หากใครอ่านสามก๊กแบบผิวเผิน แล้วเอามาประยุกต์ใช้ทันทีแบบอินกับนิยายเกินไป ระวังไม่มีคนคบนะครับ พยายามอ่านแบบพินิจพิเคราะห์ เทียบวัดกับบรรทัดฐานของคุณธรรมด้วย เพราะ "อ่านสามก๊กจบเดียว คบไม่ได้" ครับ :-)

blog เก่า (เก็บ) ที่เกี่ยวข้อง: อ่านรามเกียรติ์กัน ตอนสมัยอ่านตำราบริหารฉบับวรรณคดีไทย แถมพกด้วย ไซอิ๋ว: รามายณะตำรับจีน?

ป้ายกำกับ:

16 เมษายน 2550

Lenny the Binoculars

มีคนสงสัย ว่า Lenny ที่เป็นชื่อรหัสของ Debian รุ่นถัดไปนั้น เป็นตัวละครไหนของ Toy Story กันแน่ เขาคือ Lenny the Binoculars กล้องส่องทางไกลครับ

Lenny the Binoculars

บทบาทใน Toy Story ตอนที่ Woody ช่วย Buzz ให้รอดพ้นจากการถูก Sid ส่งขึ้นท้องฟ้าด้วยจรวด แล้วหนีออกจากบ้าน Sid มาด้วยกัน มาเที่ยวเกาะรถเพื่อไล่ตามรถของ Andy ให้ทัน Buzz ต้องสละตัวกระโดดลงจากรถเพื่อให้ Woody พ้นจากหมาที่วิ่งไล่รถมา Woody ซึ่งไปจนถึงรถของ Andy ได้ ก็รีบเอารถบังคับวิทยุขับออกมาช่วย Buzz แต่ของเล่นอื่น ๆ ยังเข้าใจว่า Woody อิจฉา Buzz และพยายามแกล้ง Buzz อยู่ จนกระทั่ง Lenny เห็นเป็นคนแรก ว่า Woody ไปช่วย Buzz อย่างที่พูดจริง แล้วบอกของเล่นอื่น ทำให้ทุกคนช่วยกันรับ Woody กับ Buzz ขึ้นรถ แต่รถแบตหมดตอนจังหวะสำคัญ Slink ซึ่งโยนตัวลงไปรับก็ต้องยอมปล่อยไป จนสุดท้าย Woody อาศัยจรวดของ Sid ที่ยังผูกติดหลัง Buzz อยู่ พุ่งตามรถมา โดย Buzz ได้พา Woody และตัวเองมาถึงรถจนได้ ด้วยการ "falling with style"

ป้ายกำกับ:

14 เมษายน 2550

Phu Kum Khao

สงกรานต์ น้องกลับบ้านมาพร้อมกับชาวต่างชาติ ก็เลยคิดโปรแกรมท่องเที่ยวสไตล์เงียบสงบกัน หลังจากคิดไปคิดมากันหลายตัวเลือก ก็มาลงเอยที่ตัวเลือกที่ผมเสนอ คือไปดูไดโนเสาร์ที่ ภูกุ้มข้าว กาฬสินธุ์ โดยกะว่าไปดูโครงกระดูกไดโนเสาร์สักชั่วโมงสองชั่วโมง ว่ากันว่ามีฟอสซิลไดโนเสาร์ที่สมบูรณ์กว่า และมีหลายชนิดกว่าที่ภูเวียง ขอนแก่น จากนั้นก็ไปแวะวัดอีกสักแห่งก่อนกลับ

ไปถึงที่บริเวณวัดสักกะวัน ภูกุ้มข้าว (อ. สหัสขันธ์ จ. กาฬสินธุ์) ก็ตรงไปที่หลุมขุดค้น ก็พบว่าเป็นหลุมใหญ่ แม้จะมีเพียงหลุมเดียว ไม่ใช่หลายหลุมอย่างที่ภูเวียง แต่สภาพโครงกระดูกนับว่าสมบูรณ์กว่ามาก ป้ายประกอบบอกว่าเป็นโครงกระดูกของ ภูเวียงโกซอรัส สิรินธรเน่ (Phuwiangosauraus sirindhornae) ซึ่งเป็นซอโรพอดชนิดเดียวกับที่พบที่ภูเวียง และยังมีกระดูกของซอโรพอดในบริเวณเดียวกันอีกอย่างน้อยสามตัว

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

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

ผมผ่านแผนภูมิธรณีกาลที่บรรจงสลักลงบนพื้นหินอ่อนอธิบายภาพรวมของบรมยุค (Eon) มหายุค (Era) ยุค (Period) สมัย (Epoch) ต่าง ๆ เข้าไปยังรายละเอียดของยุคต่าง ๆ รู้สึกเหมือนถูกดึงเข้าไปในมิติของกาลเวลา ทั้งเรื่องการเคลื่อนของแผ่นเปลือกโลกในยุคต่าง ๆ และความเปลี่ยนแปลงของสิ่งมีชีวิตบนโลกที่เปลี่ยนตามสภาพแวดล้อมของทวีป อ่านไปได้ถึงแค่ยุคครีเทเชียส ก็ถูกตาม ว่าคนอื่นไปถึงทางออกกันแล้ว ที่เหลือเลยอ่านแค่ผ่าน ๆ ไม่ได้เก็บรายละเอียดมาก ดูจากแผนผังธรณีกาลใน เอกสารของกรมธรณีวิทยา จะเห็นว่าผมพลาดมหายุค Cenozoic ไปทั้งมหายุคเลยทีเดียว

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

ผมทั้งรู้สึกเสียดาย ที่ลืมเอากล้องถ่ายรูปไป ทั้งรู้สึกดีใจที่ลืม เพราะถ้าไม่งั้น คงมีกิจกรรมถ่ายรูปมากินเวลา จนทำให้อ่านเรื่องต่าง ๆ ได้น้อยลงอีก

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

ต้องแบบนี้สิ ให้ความรู้ที่แหล่งขุดค้นได้คุ้มค่าจริง ๆ ขอชื่นชมกรมธรณีวิทยามา ณ ที่นี้

ป้ายกำกับ:

12 เมษายน 2550

Back To School

วันที่ 8 เม.ย. ที่ผ่านมา น่าจะเป็นวันที่คึกคักที่สุดวันหนึ่งในประวัติศาสตร์ของ Debian โดยมีเหตุการณ์ใหญ่เกิดขึ้น 3 เรื่อง

เรื่องแรกไม่น่าตื่นเต้นเท่าไร แต่มันเป็นสัญญาณเริ่มแรกของการ release Etch ส่วนการ release Etch ก็น่าตื่นเต้นมากสำหรับผม ไม่ใช่เพราะปลื้ม Etch แต่เป็นเพราะมันเป็นการปลดปล่อย Sid และเป็นจุดเริ่มต้นของ Lenny ต่างหาก ส่วนเรื่อง DPL คนใหม่ ถ้าได้อ่าน เวทีหาเสียง ของ Sam แล้ว จะรู้สึกได้ถึงความน่าลุ้นของยุค Lenny ที่จะถึงนี้

ก็เป็นอันว่า ผมเฉลิมฉลองให้กับ Etch เพราะเขาทำให้ Sid สามารถกลับมาอาละวาดทำลายข้าวของได้อีกครั้ง

โรงเรียนเวทมนตร์เปิดแล้ว!!!

ใครใช้ unstable จะเห็น update ช่วงนี้วันละเป็นสิบ ๆ เม็กกันเลย เพราะมีแพกเกจที่รออยู่ที่ experimental นานแล้ว เริ่มทยอยเข้า unstable ทีละส่วน ผมเองก็เล่นกะเขาด้วย โดยขอ upload libthai จาก experimental เข้า unstable ไปเมื่อวานนี้

อะไรจะเกิดขึ้นต่อไปกับ Debian? ผมเชื่อว่าที่ DD หลายคนสนับสนุน Sam ก็เพราะนโยบายที่ยอมรับความจริงหลายอย่างของ Debian ว่าเป็นปัญหา โดยมอง Ubuntu เป็นเพื่อน รวมทั้ง distro อื่น ๆ อย่าง Gentoo หรือกระทั่ง FreeBSD ว่ามีหลายอย่างให้เรียนรู้จากเขา เพื่อเอามาปรับปรุง Debian ให้กลับมาเป็น distro ที่ดีที่สุดอีกครั้ง การปรับปรุงนี้ รวมไปถึงการปรับปรุงหน้าตาของเว็บไซต์และระบบติดตามบั๊กด้วย ส่วนปัญหาสมองไหล เขาก็เสนอแก้ด้วยการตั้งทีมดูแลแพกเกจแทนที่จะดูแลคนเดียวให้มากขึ้น เพื่อให้ทำงานทดแทนกันได้เวลาที่ผู้ดูแลหลักติดภารกิจอื่น

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

อย่างไรก็ดี ยินดีกับ Sid อีกครั้ง ที่หลุดจองจำ :D

ป้ายกำกับ:

07 เมษายน 2550

Etch Release Party

เห็นทาง Ubuntuclub เขามี Feisty Release Party ช่วงสงกรานต์ (กำหนด Feisty release วันที่ 19 เม.ย. มีการจัด Release Party ทั่วโลก)

ปรากฏว่าทาง Debian เองก็มี Etch Release Party ไล่เลี่ยกัน คือปาร์ตี้ ศุกร์ 13 เม.ย. วันมหาสงกรานต์พอดีเป๊ะ

กล่าวคือ Debian เตรียม release Etch ในสุดสัปดาห์ที่จะถึงนี้แล้วครับ (เลื่อนจากกำหนดเดิม คือ 1 เม.ย.) ไม่ได้ blog เพื่อจะชักชวนให้จัด Etch Release Party หรอกนะครับ เพราะจะนัดกันยังไงทัน กับช่วงวันหยุดยาวอย่างนี้ แต่สำหรับ Debian user อย่างผมแล้ว ข่าว release เป็นข่าวดีมาก ๆ เตรียมต้อนรับและฟูมฟัก Lenny กันได้แล้ว วู้!!!

ป้ายกำกับ:

04 เมษายน 2550

Multitasking

เสร็จจากฤดูรับจ้าง ก็กลับมาทำนา เอ่อ.. หมายถึงงานโอเพนซอร์สน่ะ ดูเหมือนจะเข้าสู่โหมดมัลติทาสก์เต็มที่ละ เพื่อไม่ให้งงในการสลับงานไปมา บันทึกไว้เสียหน่อยดีกว่า:

  1. Win32 installer สำหรับชุด libthai จากคุณ Taniya

    • I/O: e-mail / LTN CVS
    • รายละเอียด: คุณ Taniya ช่วยเขียน Win32 installer สำหรับ libthai และ libdatrie โดยใช้ NSIS ส่งมาให้ จึงพยายามปรับและ merge เข้า CVS
    • สถานะ: merge installer สำหรับ libdatrie เข้า CVS ไปแล้ว ยังขาดเรื่องการติดตั้งแยก component ส่วน libthai นั้น จะ merge เข้าทีหลัง โดยปรับจากกลไกของ libdatrie หลังจากที่ทุกอย่างเรียบร้อยแล้ว
  2. การตัดคำไทยใน upstream Mozilla

    • I/O: Mozilla Bug #336959, Mozilla Bug #7969
    • รายละเอียด: ปรับ patch ตัดคำเพื่อเสนอ check-in เข้า Mozilla trunk เพื่อให้มีผลใน Firefox 3.0
    • สถานะ: คิดต่อจาก blog เก่า เห็นว่าการทำ libthai component ยุ่งยากเกินไป ทั้งวิธีการก็ยังมีจุดบอด คือต้องสร้าง interface สำหรับภาษาไทยขึ้นมาเพื่อเรียกจากใน nsJIS4051LineBreaker อีกทั้งยังไม่มีกลไกสนับสนุนภาษาอื่นที่ชัดเจน จึงย้อนกลับไปหา แนวคิด การแทนที่ LineBreaker ของพี่สัมพันธ์ ที่ใช้ ICU แทน nsJIS4051LineBreaker ไปเลย แทนที่จะเรียกออกมาจาก nsJIS4051LineBreaker โดยพี่เขาทำเป็น extension ต่างหาก แต่ในเมื่อ Mozilla มีตัวเลือกในการลิงก์กับ Pango อยู่แล้ว การแทนที่ด้วย Pango จึงดูเป็นทางเลือกที่ตรงตัวที่สุด และดูมีโอกาสได้ check-in มากที่สุด ก็เลยกลับไปหา Bug #336959 ที่เคยเสนอเรื่อง platform line breaker ไว้ แล้วปรับ patch สำหรับ Pango ใหม่ แทนที่จะเรียกออกมาจาก nsJIS4051LineBreaker ก็แทนที่ nsJIS4051LineBreaker เสียเลย พร้อมกับเปลี่ยนไปใช้ API ของ Pango อีกชุดหนึ่งที่ขั้นตอนน้อยกว่าเดิม ทำให้ patch ดูเรียบง่ายลงเยอะ แล้วก็เสนอใน Bug #7969 (การตัดคำไทย) ว่าขอเสนอทางเลือกใหม่ ผ่าน Pango ก็ปรากฏว่า ได้รับคำแนะนำจาก Robert O'Callahan ซึ่งเป็นผู้ออกแบบ layout engine ของ Gecko ใหม่ ว่าให้ลองโค้ด TextFrame ใหม่ที่กำลังทำอยู่ พอลองแล้วก็พบว่าได้ผลเป็นที่น่าพอใจ ที่สำคัญคือประสิทธิภาพการตัดคำดีขึ้นกว่าเดิมมาก! ดูจะเข้ารูปเข้ารอยแล้วแฮะ ถ้าทุกอย่างเรียบร้อย และเขารับแพตช์ Pango เข้าไป เราอาจไม่ต้องไล่ patch ตัดคำอีกใน Firefox 3 หรือ xulrunner 1.9 เป็นต้นไป แต่ตอนนี้ ยังต้องลุ้นต่อไป
  3. ติว Neutron เรื่อง xulrunner-libthai deb

    • I/O: ICQ / LTN APT
    • รายละเอียด: Neutron อาสา patch และ build xulrunner-libthai 1.8.0.11-2thai1 ซึ่งมีการอัปเดตล่าสุดใน Debian ให้ หลังจากที่เขาได้อาสา patch และ build iceweasel-libthai ไปแล้ว ซึ่ง xulrunner ใช้ระบบ dpatch ช่วยอำนวยความสะดวกต่อ maintainer ในการติดตาม patch ต่าง ๆ แต่ก็หมายความว่า ผู้ patch ปลายน้ำอย่างเราก็ต้องเรียนรู้และจัดการระบบ dpatch ให้เป็นด้วย ขั้นตอนจึงมากกว่า iceweasel (แต่ในแง่ maintainer แล้ว การแยก patch แบบ xulrunner ช่วยให้สะดวกในการติดตาม check-in กว่าแบบ patch รวบใน iceweasel มากนัก.. นี่ถ้าตอนนู้น Mozilla ได้เห็น xulrunner ของ Debian คงด่าไม่ออกเรื่องการจัดระเบียบ patch เพียงแต่อาจโชคไม่ดีที่ xulrunner ไม่ได้ใช้เครื่องหมายการค้า firefox® เลยไม่ได้ถูกตรวจตราเหมือน firefox ในตอนนั้น.. และที่ firefox/iceweasel ของ Debian ยังใช้ระบบ patch แบบเก่า ก็คงเป็นเพราะ xulrunner เกิดทีหลัง และ Debian ก็มีแผนที่จะ build firefox ด้วย xulrunner ในอนาคตอยู่แล้ว ก็เลยไม่ได้ปรับแพตช์ใน firefox.. แต่จะว่าไป firefox ของ Ubuntu ที่ Mozilla รับรองว่า "ใช้ได้" ก็เอาไปจาก Debian นั่นแหละ ระบบ patch รวบยอดเหมือนกันทุกประการ แต่ไม่โดนว่าอะไร แปลกดีเหมือนกัน)
    • สถานะ: Neutron แก้ปัญหาต่าง ๆ ที่พบได้หมดแล้ว และ deb ที่ได้ ก็อยู่ใน LTN APT เรียบร้อยแล้ว
  4. แก้ RC bug ใน gtk-im-libthai ใน Debian

    • I/O: Debian archive
    • รายละเอียด: ก่อน etch จะออก ก็ยังมี massive RC bug ระลอกสุดท้ายมาจากการทดสอบ piuparts อีก โดย gtk-im-libthai ก็ โดนด้วย จึงต้องแก้อย่างรีบด่วน ไม่ให้ขวางทาง etch release
    • สถานะ: แก้ bug และ upload เข้า sid แล้ว และได้ย้ายเข้า etch เรียบร้อยแล้วเช่นกัน
  5. ปรับ pango libthai support ใน Ubuntu feisty

    • I/O: LP #99655, LP #101863, Ubuntu archive
    • รายละเอียด: Mk แจ้งมาว่า gedit ไม่ตัดคำใน feisty ก็ดองไว้วันสองวันจนมีโอกาสบูตเข้า Ubuntu ไปตรวจสอบดู พบว่า pango-libthai กลายเป็นแพกเกจเปล่า มีแต่ doc ไม่มี pango module ซึ่งก็เป็นปัญหาเรื่องการ hard code binary version ใน debian rules ของผมเอง พอเวอร์ชันใน Ubuntu ต่างจากใน Debian ไฟล์ก็เลยหาย ความจริงก็เป็นปัญหาที่เจอระหว่างแก้ Debian RC bug ของ gtk-im-libthai ด้วยแหละ ก็กลับมาแก้ด้วยวิธีเดียวกัน ขณะเดียวกัน เรื่องการตัด pango-libthai ออกจาก Ubuntu แล้วแทนที่ด้วยการ build upstream pango โดยให้ลิงก์กับ libthai ก็ยังคงอยู่ระหว่างเจรจาอยู่ กลายเป็นสองทางเลือกในการแก้ปัญหานี้
    • สถานะ: Mk ช่วยทดสอบ Alexander Sack ช่วยประสานงานต่อให้ จนได้ความว่า Ubuntu จะ build pango ใหม่ให้ลิงก์กับ libthai เพื่อให้สามารถตัดคำไทยได้ตั้งแต่ใน upstream pango แล้วตัด pango-libthai ทิ้งไป.. นับว่าเกินความคาดหมายพอสมควร เดิมยังคิดว่า feisty freeze อยู่อย่างนี้ คงได้ทำหลัง feisty แหง แต่ปรากฏว่า pango-libthai ตายได้สำเร็จแล้วใน Ubuntu!
  6. ปรับ OpenType table ใน thaifonts-scalable เพื่อใช้กับ OO.o

    • I/O: #tlwg / LTN CVS
    • รายละเอียด: kitty รายงานมาในห้องแช็ต ว่าฟอนต์ไทยใน Ubuntu มีปัญหากับ OO.o เมื่อใช้สระอำกับวรรณยุกต์ประกอบกัน ทำให้ผมนึกถึงปัญหาที่ทำให้ทีม TLE ต้องปิด OpenType table ในฟอนต์จาก thaifonts-scalable ซึ่งภายหลัง kitty คุยกับ MrChoke แล้ว ยืนยันว่าเป็นบั๊กเดียวกัน
    • สถานะ: ก่อนอื่น ต้องทำความเข้าใจความแตกต่างระหว่าง pango กับ OO.o ซึ่ง pango นั้น มอดูลภาษาไทยจะมี preprocessing รอบหนึ่งก่อน แล้วจึงใช้กฎ GSUB/GPOS ในฟอนต์ ในขณะที่ใน OO.o หลังจากทดลองดูแล้ว ดูเหมือนจะอิงอาศัย OpenType feature ล้วน ๆ ยกเว้นกรณีที่ขาด OpenType feature จึงจะใช้รูทีน shape ด้วย PUA glyph (ไม่ได้แกะโค้ด OO.o จริงนะครับ ใครที่รู้รายละเอียดช่วยยืนยันด้วย) จึงได้เริ่มพยายาม hack 'ccmp' GSUB rule ในฟอนต์ Garuda โดยอ่านเอกสารของ Fontforge แล้วตั้งสมมุติฐานแบบต่าง ๆ จนในที่สุดก็พบวิธีแก้ ด้วยการรวบ GSUB rule ที่จัดการสระอำทั้งหมดไว้ด้วยกัน เพื่อรับประกันว่าจะไม่มีกรณีซ้ำซ้อนและการเสี่ยงต่อลำดับก่อนหลังของการใช้กฎ ทดสอบกฎจนได้ผลแล้ว ก็ไล่แก้ฟอนต์อื่น ๆ ในชุดเดียวกันจนครบ ตอนนี้อยู่ใน CVS แล้ว แต่ยังมีปัญหาที่พบคือ ฟอนต์ที่ใช้ OpenType นี้ จะมีปัญหากับ OO.o เรื่องช่องไฟเมื่อมีการผสมสระอำกับวรรณยุกต์ในบางกรณี ซึ่งวรรณยุกต์ที่มีปัญหาจะต่างกันไปในแต่ละฟอนต์ แต่สำหรับ pango ไม่มีปัญหาอะไร ทำงานเรียบร้อยดี คงต้องพยายามทำความเข้าใจกลไกการจัดการ GPOS ของ OO.o เสียก่อน จึงจะเข้าใจปัญหา ถ้าทุกอย่างเรียบร้อย จึงจะ release ฟอนต์รุ่นใหม่ ออกมา
  7. ตามแปล debian-installer

    • I/O: alioth SVN
    • รายละเอียด: ไม่มีอะไรมาก เพียงแต่ได้รับแจ้ง message ใหม่ใน debian-installer (ที่จะใช้ใน etch CD) เล็กน้อย ก็เลยตามแปลเพิ่ม
    • รายละเอียด: เสร็จแล้ว ภาษาไทยครบ 100% ถึง level 4 เหมือนเดิม

ฟังดูเหมือนเยอะจัง แต่สนุกดีน่ะ การที่แต่ละโครงการที่ติดต่อต้องรอ check-in เราก็ใช้วิธี round robin สลับไปทำงานอื่นระหว่างรอได้ งานบางชิ้นก็เป็นการประสานงานเฉย ๆ อาศัยคนอื่นช่วย ซึ่งก็ทำให้ได้บรรยากาศ bazaar แบบย่อม ๆ ช่วงหมดฤดูรับจ้างใหม่ ๆ ผมเองก็ยังเครื่องไม่ร้อนเท่าตอนนี้ ต้องค่อย ๆ อุ่นเครื่องมาเรื่อย ๆ เหมือนกัน

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

hacker emblem