Theppitak's blog

My personal blog.

30 ตุลาคม 2547

No More Google Ads

I'm not happy having incomprehensible Japanese ads in my blog. And I'm not willing to write blogs in English in order to have appropriate Google AdSense. So, I've done what I said before: removed Google Ads from my blog and replaced it with a more useful FireFox banner. However, Ads in my homepage are still kept, as majority of the contents there are already in English.

FOSS and Governments

วันนี้นั่งตรวจทาน Pango patch สำหรับภาษาลาวอีกรอบ นั่งปรับโค้ดอีกนิด พร้อมเพิ่ม comment แล้วทำ patch ใหม่ไปแทน patch แรกใน GNOME Bug #156781

พักนี้ชักมีข่าวเกี่ยวกับท่าทีของรัฐบาลต่างๆ กับ FOSS ถี่ขึ้น อย่างล่าสุด Linux Journal ก็มี รายงานข่าวจากอังกฤษ เกี่ยวกับการผลักดันใช้ลินุกซ์ในหน่วยงานภาครัฐ โดยสรุปออกมาเป็นหลักการทั่วไป ว่า UK จะไม่ล็อกสเปค เพื่อให้โอกาส OSS เท่าๆ กับ proprietary, จะพิจารณาความเข้ากันได้กับมาตรฐานเปิด, จะหลีกเลี่ยงการถูกผูกมัดกับผลิตภัณฑ์และบริการ proprietary, จะแสวงหาสิทธิอันเต็มเปี่ยมที่จะดัดแปลงซอฟต์แวร์ตามความต้องการ, และจะสำรวจความเป็นไปได้ที่จะใช้ OSS เป็นหลักในงานวิจัยและพัฒนาที่สนับสนุนโดยรัฐ

แต่ก็ได้พูดย้อนไปถึงเรื่องที่เกิดกับรัฐบาลอื่นๆ ทั่วโลก โดยมีเม็กซิโกเป็นตัวอย่าง (เก่า) ที่อื้อฉาวที่สุด เมื่อภาครัฐที่เคยประกาศสนับสนุน FOSS เต็มที่ ได้ยกเลิกแผนกลางคัน ทันทีที่ประธานาธิบดีคนใหม่ได้รับข้อเสนองบสนับสนุนเรื่อง E-library จากไมโครซอฟท์ ..ดูเหมือนว่า อาวุธเรื่องราคาที่ดูจะทรงประสิทธิภาพที่สุด (เพราะ convince คนที่ไม่ใช่นักพัฒนาได้เร็วที่สุด) ก็ถูกสยบอย่างง่ายดายด้วยการฟาดเงิน

ขณะเดียวกัน ก็มีอีกข่าวจาก LinuxToday เมื่อวันก่อน รายงาน ท่าทีจริงจัง ของรัฐบาลบราซิล จนกระทั่ง RMS ถึงกับพูด (ตามข่าว) ว่าความจริงจังของรัฐบาลอินเดียกับ free software จะเป็นรองก็แต่บราซิลเท่านั้น

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

อีกข้อเขียนหนึ่ง ที่รายงานโดยเว็บข่าวหลายแห่ง คือข้อเขียนจาก International Herald Tribune เล่าถึงรัฐบาลเอเชียทั้งหลาย ทั้งอินเดีย จีน ญี่ปุ่น เกาหลีใต้ มาเลเซีย และออสเตรเลีย ต่างก็มองเห็นช่องทางที่ประเทศจะได้รับประโยชน์จาก FOSS และว่าตลาดเกิดใหม่อย่างเอเชียนี่แหละ ที่ FOSS จะโตได้เต็มที่โดยไม่น่าแปลกใจอะไรเลย

อ่านข่าวพวกนี้ แล้วก็มองย้อนกลับมา ว่าเราควรจะเผยแพร่ FOSS กันยังไง? ลองลิสต์ประเด็นที่คิดถึงเป็นเรื่องๆ

  • Hype. การ convince ผู้ใช้เดิมจากระบบอื่นไม่ใช่เรื่องง่าย จึงมีการเพิ่มดีกรีของการโฆษณาถึงสรรพคุณของ FOSS แรกๆ อาจเป็นเรื่องจริง แต่นานไปอาจมีการตอกไข่ ทำให้เกิดความคาดหวัง และก็ผิดหวัง ดังนั้น การที่ Red Hat ออกมาพูดเมื่อปีก่อน ว่าลินุกซ์เดสก์ทอปยังไม่พร้อมนั้น ผมจึงไม่รู้สึกเคืองอะไร บางที ลดความคาดหวังของผู้คนลง เพื่อให้อากาศหายใจแก่นักพัฒนาบ้าง ก็เป็นความคิดที่ดีเหมือนกัน ความจริง FOSS desktop มีการพัฒนาอยู่เรื่อยๆ ค่อยเป็นค่อยไป จนบางทีผู้ที่ใช้ประจำก็อาจไม่รู้สึก แต่ลองทิ้งช่วงสักปีสิ จะรู้สึกได้เลย ลองนึกถึงการติดตั้งลินุกซ์ครั้งสุดท้ายที่กว่าจะรัน X ได้ก็หืดขึ้นคอในแทบทุกๆ เครื่องดูสิ มันผ่านมากี่ปีกันเชียว
  • Selling. ควรจะเอาไอเดียเรื่องลินุกซ์ไปยัดเยียดให้ผู้คนเหมือนเป็นหมอสอนศาสนาไหม? มันก็คงคล้ายๆ กับ hype น่ะแหละ ไปรบเร้าขู่เข็ญเขามากๆ ก็ทำให้เกิดความคาดหวัง แล้วก็ผิดหวัง ทั้งยังทำให้เกิดกระแสต่อต้านในบางครั้ง เราจะไปคาดหวังให้ทุกๆ คนไร้ทิฏฐิมานะคงไม่ได้ การวางท่าทีว่า "ไม่อยากใช้ก็อย่าใช้ ถ้าอยากใช้จะช่วย" คงจะดีกว่า เหมือนนิทานอีสปเรื่องลมกับพระอาทิตย์ที่แข่งกันทำให้คนถอดเสื้อน่ะแหละ
  • Enforce. เรื่องการบังคับใช้ คงเป็นดีกรีที่รุนแรงที่สุดของ Selling และนับว่าได้ล้ำเส้นเขตแดนของสิทธิเสรีภาพเข้าไปแล้ว ยิ่งจะทำให้ประเด็นเรื่อง freedom ใน free software ลบเลือนไปอีก

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

29 ตุลาคม 2547

ออกพรรษา, Lao Pango

คุยทางเมลช้านัก เมื่อวานเจอตัวเพื่อนชาวลาวทาง ICQ เลยจัดการถามแบบ interactive ซะ ได้ความเรียบร้อย ว่าจะมานั่งเขียนโค้ด pango ต่อ ก็บังเอิญแม่มาเตือน ถึงนึกขึ้นได้ ว่าชวนแม่ไปงานออกพรรษาไว้ เลยควงแม่เที่ยวก่อน กลับถึงบ้านพระจันทร์เกือบตรงหัวแล้ว

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

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

อย่างไรก็ดี เมื่อคืนกลับดึกเกินกว่าจะทำอะไรต่อ ไม่ว่าจะเขียนโค้ดหรือเขียน blog เช้านี้ตื่นขึ้นมาถึงได้ทำ pango ต่อ จนได้ patch แรกแล้ว file GNOME Bug #156781 คราวนี้ pango มีการตรวจสอบลำดับภาษาลาวตามแบบ วทท แล้ว (ใน screenshot มี error สองแห่งให้ดูเป็นตัวอย่าง)

Lao sample text

25 ตุลาคม 2547

Lao Pango Revisited

วันนี้ค่อยได้รู้สึกว่าเป็นโปรแกรมเมอร์หน่อย ตอนเช้านั่งแก้ GtkEntry กับ GtkTextView ให้ retrieve/delete surrounding โดยใช้ selection begin เป็นหลัก แทนที่จะใช้ตำแหน่ง cursor ล่าสุด ตามที่ post ใน LTN devel บ่ายกลับมาที่ pango อีกครั้ง เพราะเรื่อง Gtk IM ยังทำอะไรไม่ได้มากกว่านั้น ยังต้องรอคำตอบใน gtk-i18n list อีก

กลับมาทำ pango ก็ส่วนภาษาลาว จากเดิมที่เคย ทำแบบลวกๆ เพื่อทดสอบไอเดีย และได้ปัดกวาดเช็ดถูมอดูลไทยไปบ้างแล้ว ก็มา design เรื่องการต่อเติมเพิ่มภาษาลาว นั่งนึกไปนึกมาอยู่หลายแบบ ก็ไม่ได้แบบที่ลงตัว เพราะโค้ดเดิมค่อนข้างจะผูกกับภาษาไทยแน่น แต่ก็นั่งไล่ทีละประเด็น จนได้ทางออกครบทุกประเด็น (จะขาดก็แต่ ความสวยงามของโค้ด ☹) จบวันนี้ ได้มอดูลไทยที่ render ภาษาลาวได้ด้วย แต่ยังต้องแก้ตาราง วทท ของภาษาลาวอีก ไว้ทำวันหลัง และอาจต้องคุยกับเจ้าของภาษาก่อนด้วย

24 ตุลาคม 2547

กำเนิดแม่น้ำโขง

2-3 วันมานี้ วุ่นกับงานบ้านเพราะแม่ไม่อยู่ (เป็นงานไม่หนัก แต่ interrupt บ่อย) ตอนกลางคืนยังนอนหลับๆ ตื่นๆ ติดต่อกันหลายคืน วันนี้เลยมึนหัวเกินกว่าจะทำงานได้ ประกอบกับเป็นวันอาทิตย์ เลยนอนพักซะครึ่งวัน แล้วลุกมานั่งอ่านหนังสือเล่น

ตอนช่วงที่หนัง ๑๕ ค่ำ เดือน ๑๑ เข้าฉายนั้น กระแสบั้งไฟพญานาคบูมมากเลย ทำให้ผมไปได้ซีดีสารคดีบั้งไฟพญานาคมา เล่าคร่าวๆ ถึงตำนานต่างๆ ที่เกี่ยวกับพญานาค พร้อมการสำรวจสถานที่ในตำนาน รวมถึงเรื่องในพระไตรปิฎก เรื่องที่ดูแล้วทำให้สะดุด คือเรื่องตำนานพญานาคกับแม่น้ำโขง เพราะทำให้นึกไปถึงภาพวาดในผนังโบสถ์ของวัดแห่งหนึ่งในภาคเหนือ (จำชื่อวัดไม่ได้) เกี่ยวกับพระสุกจมน้ำ และไม่แน่ใจว่ามีเรื่องกำเนิดแม่น้ำโขงด้วยหรือไม่ แต่เรื่องนี้มาสะกิดให้อยากค้นคว้า

ก็บังเอิญไปได้หนังสือ "ตามรอยพญานาค" ของ อ. อุดม เชยกีวงศ์ มา วันนี้เพิ่งได้พลิกอ่าน ในนั้นมีเรื่องพญานาคในแง่มุมต่างๆ มากมาย ทั้งในตำนานไทย-ลาว ในพระไตรปิฎก รวมไปถึงประสบการณ์ของพระอริยสงฆ์ขณะธุดงค์ด้วย

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

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

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

เรื่องนาคอพยพ เป็นตำนานที่ชนพื้นเมืองหนองแสซึ่งกระจายถิ่นฐานลงมาตามลุ่มน้ำต่างๆ ทางสุวรรณภูมิจะเล่าขานกันอยู่เนืองๆ

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

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

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

ส่วนพญาสุวรรณ ก็พาบริวารสร้างแม่น้ำลงไปทางใต้ พญาสุวรรณเป็นนาคใจเย็น พิถีพิถัน พยายามสร้างแม่น้ำให้ตรง ซึ่งแม่น้ำนี้เรียกว่าแม่น้ำน่าน ซึ่งเปรียบกับแม่น้ำสายอื่นแล้ว ถือว่าตรงกว่าทุกสาย

ผลก็คือ พญาศรีสุทโธนาคสร้างแม่น้ำโขงถึงทะเลก่อน จึงได้ปลาบึกจากพระอินทร์ ซึ่งปลาบึกนี้ ปรากฏว่ามีที่แม่น้ำโขงเพียงแห่งเดียวในโลก จากนั้น พญาศรีสุทโธได้เหาะขึ้นไปเฝ้าพระอินทร์ ทูลขอทางขึ้นลงระหว่างเมืองบาดาลกับเมืองมนุษย์ เพราะนาคอยู่ในเมืองมนุษย์นานไม่ได้ พระอินทร์จึงโปรดให้ทางขึ้นลงไว้ 3 แห่ง คือ

  1. ที่พระธาตุหลวงนครเวียงจันทน์
  2. ที่หนองคันแท
  3. ที่พรหมประกายโลก (คำชะโนด)

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

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

ค้นเว็บดู มีแหล่งข้อมูลเพิ่มเติมอยู่สองแหล่ง

22 ตุลาคม 2547

Folding the Fire

มีสองงานที่เข้าร่วมแล้วมาพบกันวันนี้ เดิมผมรัน Folding@Home ซึ่งเป็นโครงการศึกษาการจัดเรียงตัวของโปรตีนก่อนทำงาน อันจะมีประโยชน์ต่องานวิจัยทางชีววิทยาและเภสัชศาสตร์ต่อไป โดยอาศัยเครื่องคอมพิวเตอร์ทั่วโลกช่วยกันวิเคราะห์ กับอีกโครงการหนึ่งที่เพิ่งเข้าร่วม คือ Spread FireFox ช่วยกันส่งเสริมการใช้ web browser ที่โอเพนซอร์ส มีการดูแลอุดช่องโหว่สม่ำเสมอ ทำงานโดยอิงมาตรฐาน WWW เป็นหลัก แต่มีลูกเล่นเรื่อง user interface แพรวพราวกว่า web browser ที่กินส่วนแบ่งตลาดมากที่สุดในขณะนี้ (เพียงเพราะมัน bundle มากับ OS แต่กลับไม่มีการพัฒนาที่ต่อเนื่อง) ผมส่งเสริมการใช้ browser ชนิดอื่น อย่างน้อยก็ด้วยความหวังว่า ความหลากหลายจะไม่ทำให้บริษัทใดบริษัทหนึ่งครอบงำเทคโนโลยี จนเว็บทั้งหลายแหล่ถูกออกแบบมาเพื่อใช้ส่วนขยายของ browser นี้เพียงอย่างเดียว (ดังกรณีตัวอย่างของ เว็บรัฐบาลไทย ที่ผ่านมา)

วันนี้ ผมสามารถเอางานแรกมาช่วยงานหลังได้แล้ว โดยก่อนหน้านี้ ผมรัน F@H โดยไม่มีทีมให้สังกัด แต่ก็มีการตั้ง ทีม Spread FireFox ขึ้นใน F@H เพื่อไต่อันดับให้คนที่เข้าร่วมได้สังเกตเห็น Spread Firefox ใน chart อันดับทีม ซึ่งขณะที่เขียน blog นี้ ทีม FireFox อยู่ที่อันดับ 662 มี 171 active CPU

สำหรับคนที่รันโปรแกรมอื่นอยู่ และอยากร่วมสมทบให้กับ FireFox ก็มีทีม FireFox ใน ClimatePrediction.Net (การคำนวณเพื่อพยากรณ์อากาศ) และใน SETI@Home (การตรวจจับสัญญาณจากสิ่งมีชีวิตนอกโลก --ผมก็รันอยู่ แต่อยู่ทีม Thai ไปแล้ว) ด้วยนะครับ

Get Firefox!

21 ตุลาคม 2547

จาก GAL ถึง GtkIMContext

MrChoke มารายงาน bug ในห้อง #tlwg เรื่องการคีย์ภาษาไทยใน widget บางแห่งของ evolution ผมบอกไปว่าขอโยนให้คนอื่น เพราะขนาดใช้ยังไม่เคยใช้เลย (เรื่องของเรื่องคือขี้เกียจ ฮ่าๆ) แต่ช่วงสองสามวันมานี้ หลังจากทำ pango ไปแล้ว เริ่มมาคิดหมกมุ่นกับ gtk-im นั่ง checkout gnome cvs ไปก็ อะ.. เอาซะหน่อย นั่งไล่ evolution จนไปถึง gal (GNOME Application Libraries) ก็เจอพฤติการณ์ซ้ำรอยเดิมกับที่เคยเจอและแก้ไปแล้วใน eel (Eazel Extensions Library) ซึ่งทำให้ Nautilus เปลี่ยนชื่อไฟล์ภาษาไทยคีย์สระบน-ล่างไม่ได้ กล่าวคือ library ทั้งสองทำ text widget เอง จึง handle signal ต่างๆ เอง แต่ดันทำไม่ถูกต้องตาม API ของ GTK+ แถมผิดแบบเดียวกันซะอีก ลอกการบ้านกันเห็นๆ หุๆ คิดว่าน่าจะเป็น gal ที่ลอก eel

แก้ gal แล้วก็เลย file Ximian Bug #68617 พร้อม proposed patch เรียบร้อย

แต่ขณะที่ทำ patch ก็เกิดเอะใจกับบางกรณีที่อาจจะมองข้ามมาใน widget ก่อนๆ คือการ return ตำแหน่ง cursor ในกรณีที่ text ถูกเลือกไว้ ไม่ใช่เป็น cursor เหมือนปกติ ซึ่งที่ผ่านมา จะ return ตำแหน่ง cursor ล่าสุดเสมอ แต่มันทำให้มีผลต่อการ edit text ภาษาไทย เช่น เมื่อคีย์ "นาวา" แล้วกด Shift-LeftArrow เพื่อเลือกสระอาตัวหลัง แล้วคีย์สระอี XIM ไทยจะยอมให้เปลี่ยนเป็น "นาวี" ได้ แต่ถ้าทำอีกแบบ คือเลื่อนซ้ายก่อน แล้วกด Shift-RightArrow เลือกสระอาตัวหลัง คราวนี้มันจะไม่รับสระอี เพราะตำแหน่ง cursor สุดท้ายอยู่ที่หลังสระอา และสระอีห้ามตามหลังสระอา

เรื่องของเรื่องคือ ตำแหน่งเคอร์เซอร์ล่าสุดมันไม่ได้สำคัญเท่า "ตำแหน่งเริ่มข้อความที่เลือก" ตรงนี้ ถ้า text widget แยกแยะก่อน return ก็จะทำให้ IM ตรวจลำดับได้เหมาะสม เช่นกรณีข้างต้น ถ้า return ตำแหน่งเริ่มเสมอ คือหน้าสระอา ไม่ว่าจะเลือกจากข้างหลังหรือข้างหน้า IM ก็จะพิจารณาได้ถูก ว่าจริงๆ แล้ว สระอีที่คีย์ต่อมานั้น จะแทนที่สระอา โดยตามหลัง ว แหวน ซึ่งสระอี ตามหลัง ว แหวนได้

ว่าแล้วก็เลย post ถาม gtk-i18n list ว่าถ้าตัดสินใจแก้โค้ดตามนี้จะควรไหม ไว้เดี๋ยวรอคำตอบ

20 ตุลาคม 2547

2 ศตวรรษพระจอมเกล้า

เมื่อ 18 ต.ค. ที่ผ่านมา เป็นวันครบรอบ 200 ปีแห่งพระราชประสูติกาลในหลวง ร.4 ความจริงแล้ว ที่ได้เรียนรู้ในประวัติศาสตร์มา ก็รู้สึกว่า ร.4 คือผู้วางรากฐานตัวจริงของการพัฒนาบ้านเมืองในสมัย ร.5 เพราะเรื่องที่จ้างแหม่มแอนนาให้มาถวายอักษรพระราชโอรส ก็เป็นการปูพื้น เตรียมพัฒนาประเทศ เรียนรู้เพื่อรับมือชาติตะวันตก หรือจะเป็นกุศโลบายแปลศิลาจารึกพ่อขุนราม เพื่อแสดงความเป็นอารยะ หรือการคานอำนาจฝรั่ง ทำให้รอดพ้นจากการยึดครองของฝรั่งล่าอาณานิคมมาได้ ฯลฯ ความจริงควรจะต้องให้เครดิตเรื่องการมองการณ์ไกลของพระองค์

วันนี้เพิ่งได้อ่าน บทความของ ส. ศิวรักษ์ ในศิลปวัฒนธรรม เรียกว่าเป็นบทความเทิดพระเกียรติพระจอมเกล้าที่ให้ข้อมูลแน่นปึ้กเลย

19 ตุลาคม 2547

แอบดู Debian X Strike Force

ด้วยความสงสัย ว่า The X Strike Force ของ Debian กำลังทำอะไรอยู่ หลังจากที่บอกว่า จะไม่ใช้ XFree86 ที่ relicense แล้ว ซึ่งจากการตามอ่าน changelog ทุกครั้งที่ upgrade xfree86 package ใน Debian ก็พอจะรู้ ว่าที่ผ่านมา Debian maintain source tree เอง แล้วไปตามเก็บ patch จาก XFree86 CVS มาใส่ บวกกับ patch ที่มาจากแหล่งอื่น (ที่อาจจะ check-in ไม่เข้า) เมื่อบวกกับข้อเท็จจริงที่ว่า Debian กำลังจะ release stable version (sarge) เร็วๆ นี้ จึงพอเดาได้ว่า คำพูดที่ว่า "จะไม่ใช้ XFree86 ที่ relicense" นั้น ไม่ได้หมายถึงการย้ายไป X.org ทันทีทันใด จนกว่า sarge จะออก

แต่เมื่อเร็วๆ นี้ กลับเห็น changelog กล่าวถึง xorg patch บ้าง เลยทำให้อยากไปสอดแนมดู (เพราะไม่ได้ subscribe debian-x mailing list) ค้นไปค้นมา ก็เจอเมลที่ตอบคำถามเรื่อง X.org package roadmap โดยชี้ไปที่ FAQ ที่อ่านแล้ว จับใจความได้ว่า Debian จะเริ่มย้ายไป X.org หลัง sarge จริงๆ และยังมุ่งไปที่ modularized X ของ freedesktop.org อีกด้วย (จะเร็วจะช้า ขึ้นอยู่กับ fd.o ว่าพร้อมเมื่อไร)

แต่ทั้งนี้ X Strike Force ของ Debian ได้ เริ่มทำ xorg tree ล่วงหน้าแล้ว คาดว่าหลัง sarge ออกคงได้ใช้ (ซึ่งยังไม่มีกำหนดออกแน่นอน เพราะ "Debian releases when it is time." ครับผม)

จากการตามอ่าน เลยได้ของแถมติดมือมา เป็น เอกสารแนะนำ subversion โดย Branden Robinson ซึ่ง subversion เป็นระบบ revision control ที่เจ๋งกว่า cvs และใช้อยู่ใน X Strike Force และโครงการ FOSS อื่นๆ อีกหลายแห่ง ตัวเอกสารเป็น presentation อ่านรวดเดียวจบได้เลย สำหรับผู้ใช้ cvs ที่จะย้ายมา ☺

มี GNU Arch อีกตัว ที่เป็น "better cvs" ไว้ค่อยหาอ่านทีหลัง

Update: Linux Journal ฉบับพฤศจิกายนนี้ มีบทความเรื่อง Revision Control with Arch: Introduction to Arch พอดี

17 ตุลาคม 2547

อุ้มธุรกิจท้องถิ่น?

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

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

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

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

เกี่ยวกับมาตรการของเทศบาลนครขอนแก่น ที่ถึงกับจะออกกฎหมายท้องถิ่นมากัน WTO อีกชั้น เพื่อคุ้มครองธุรกิจท้องถิ่น ดูมันจะโหดเกินไป ถ้าไม่ปล่อยให้เชื้อโรคเข้ามาบ้าง สังคมก็คงไร้ภูมิคุ้มกัน ถ้าจะว่ากันตามตรง สำหรับตอนนี้ ธุรกิจข้ามชาติสมควรถูกกีดกันออกไปก่อน (แต่ก็ไม่ทันแล้ว) เพราะยังไงทุนเขาก็หนา สู้ไม่ไหวอยู่แล้ว อีกทั้งเงินทองยังรั่วไหลออกนอก แต่กับธุรกิจของคนไทยด้วยกันอย่างเซ็นทรัล ถ้าจะถูกกีดกันไปด้วย แล้วท้องถิ่นเองจะเอาแรงกระตุ้นที่ไหนพัฒนาตัวเอง? ทั้งผู้บริโภคเองก็จะไม่มีทางเลือกแบบนี้ไปอีกนานเท่าไร?

gtksourceview, Pango, libthai

ความคืบหน้าใน gnome ในช่วง 2-3 วันที่ผ่านมา:

  • GNOME Bug #141993 (backspace กับปัญหา undo buffer ของ gtksourceview) ถูกยกมาขึ้นโต๊ะใน GTK+ irc ดูเหมือนว่า bug นี้ทำให้โปรแกรมแครชในภาษาอื่นที่ใช้ preedit string (อาการหนักกว่าภาษาไทย) เลยถูกยก priority เป็น high และ severity เป็น critical ทั้งนี้ backspace patch ที่เสนอใน GNOME Bug #119891 (backspace ลบทีละอักขระใน GtkEntry และ GtkTextView) ถูก commit แล้วใน cvs และมีผลกับ GTK+ app ทั่วไป ถ้า bug นี้ผ่านอีก bug, เรื่อง backspace กับภาษาไทยใน gedit ก็จะสมบูรณ์เต็มที่
  • merge การเปลี่ยนแปลงทั้งหมดใน Pango cvs HEAD (ใช้ OpenType เต็มที่, จัดการสระลอยตัวด้วย dottedcircle พร้อม fallback, แก้ไขการ render ฟอนต์แมคและวินโดวส์, ทำความสะอาดโค้ด) มาที่ pango-1-4 branch แล้ว เพื่อให้มีผลใน GNOME 2.8.x ที่จะมี bugfix release ในช่วงต่อไปด้วย → สรุปว่า การเปลี่ยนแปลงทั้งหมด รออยู่ที่ 3 แห่งแล้ว คือ CVS HEAD, pango-1-4 branch, และ pango-libthai
  • release libthai 0.1.4 และ pango-libthai 0.1.4 ไปแล้วเมื่อวันเสาร์ รวมฟีเจอร์ที่กล่าวมาใน blog ก่อนๆ ทั้งหมด ส่วน gtk-im-libthai นั้น ยังไม่มีประเด็นให้แก้อะไร

14 ตุลาคม 2547

เก็บตก

เก็บตกข่าวน่าสนใจ:

  • Linux Kernel 2.6: It's Worth More! ไม่รู้ว่าเรื่องไปไงมาไง เห็นมีการประเมินต้นทุนการพัฒนา Linux kernel 2.6 จากศูนย์ ตามหลักคำนวณราคาในวิชา software engineering จะคิดเป็นต้นทุนทั้งหมด 612 ล้านเหรียญ! ถ้าตีเป็นมูลค่าการใช้งานออกมาคงมากกว่านั้นอีก เห็นตัวเลขแล้วก็น่าตกใจเหมือนกัน มูลค่าเหล่านี้ มาจากอาสาสมัคร รวมกับเงินลงทุนที่บริษัทต่างๆ ร่วมลงขัน การลงทุนของแต่ละคนอาจน้อยนิด แต่ผลที่มารวมกันมันมากมายขนาดนี้
  • ชนิดของ Bug Reporter blog ของฝรั่งคนหนึ่ง แยกแยะชนิดต่างๆ ของ bug report แบ่งเป็น ผู้คลั่งไคล้ (the enthusiast), ผู้หลงทาง (the anonymous clueless submitter), นักเก็บรายละเอียด (the rigourous), คนช่างรู้ (the clever submitter), จอมหาเรื่อง (the battler), จอมรบเร้า (the badger), คนไต้หวัน (the Taiwanese), และ นักซ่อมแซม (the patcher) คุณเคยรายงาน bug บ้างไหม? ถ้าเคย คุณเป็นประเภทไหน?
  • DebBlue ไม่มีอะไรมาก ไปเก็บตกจาก Debian Weekly News เจอคนทำ theme สำหรับ debian แบบครบชุด ตั้งแต่ GRUB menu, Bootsplash, GDM theme, Desktop splash ไปจนถึง Desktop background เป็นชุดเดียวกันทั้งหมด ดูแล้วน่าสนใจ เลย bookmark ไว้

13 ตุลาคม 2547

Google Ads

เพื่อลดภาระทางการเงินของตัวเองที่จะทำ FOSS รวมทั้งลดภาระของผู้ที่จะบริจาคอุดหนุน ก็เลยพยายามรีดเงินทุกเม็ดด้วยตัวเองออกมาจากสิ่งที่ทำ ไหนๆ ผมก็เขียน blog ทำเว็บเอกสารเกี่ยวกับ FOSS มาพอสมควร (ที่ homepage) ก็เลยนึกถึง Google AdSense ซึ่งเป็นวิธีโฆษณาที่ดีวิธีหนึ่ง เพราะมันจะเลือกเฉพาะโฆษณาที่เกี่ยวข้องกับเนื้อหาในเว็บเราเท่านั้น ผู้อ่านก็สามารถหาข้อมูลเพิ่มเติมได้ทันที ทำแบบ search ก็ได้นะ คือให้ใช้ google ค้นเนื้อหาในเว็บเราเอง แล้วจะมี ad แถมใน search result นิดหน่อยเท่านั้น

แนวคิดฟังดูดี แต่ปัญหาของมันคือ ยังไม่สนับสนุนภาษาไทย มันยังหาคำหลักจากเนื้อหาภาษาไทยไม่ได้ (ส่วนมากจะเจอแต่โฆษณาภาษาญี่ปุ่น) เลยใช้ได้แต่ที่ homepage ซึ่งผมเขียนเป็นภาษาอังกฤษโดยส่วนใหญ่อยู่แล้ว สำหรับใน blog คิดจะใช้ Ad Search แทน แต่ก็ปรากฏว่าที่แถบบนสุดของ blogger ก็จะมีช่องให้ search blog อยู่แล้ว แถมไม่มีโฆษณาอีกด้วย เลยไม่อยากให้มันซ้ำซ้อน แต่ยังหาทางออกดีๆ ไม่ได้ ก็จับ Ad Sense ใส่ก่อนละกัน อีกสักพักคงเอาออก

ดังนั้น ต้องขออภัยท่านผู้อ่าน ที่ผมต้องเอาโฆษณาใส่เว็บ แต่ก็คิดว่าโฆษณาแบบ google นี้ น่าจะยอมรับได้ อย่างน้อยมันก็เกี่ยวข้องกับเนื้อหา (โฆษณาใน homepage ผม ก็มีส่วนเกี่ยวข้องกับเนื้อหาพอใช้เลยแหละ) ผมพยายามเลือกแบบ text ล้วน จะได้ไม่เสียเวลาโหลดกัน และถ้าจะช่วยผม ก็ทำได้ง่ายๆ โดยคลิกโฆษณา พอได้ค่าโฆษณาครบกำหนด google เขาบอกว่าจะจ่ายให้

More LibThai Fixes

หลังจากแก้ libthai ให้สนับสนุนการ render บาลี-กุย (ที่ลืมทำไป) ก็ปรากฏว่ามีผลข้างเคียง เพราะมีโค้ดอื่นที่ใช้ฟังก์ชันนี้อยู่หลายที่ วันนี้เลยตามแก้ในส่วน normalization และ input validation รวมทั้งแก้กรณีที่ MrChoke บอกทาง ICQ ด้วย คือกรณีการป้อนสระอำติดๆ กัน ปรากฏว่า libthai ตรวจสอบหลวมไปหน่อย เลยไม่แยกคอลัมน์สระอำ วันนี้แก้และ commit เข้าไปแล้ว

Thai duplicated Sara Am case

ความจริง วทท ไม่น่าอนุญาตให้คีย์สระอำติดๆ กันได้ขนาดนี้ น่าจะต้องสังคายนากันบ้าง

12 ตุลาคม 2547

LibThai Patch for Pali and Kuy

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

Pali, Kuy sample text

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

อย่างไรก็ดี เมื่อมี OpenType เข้ามา ผู้สร้างฟอนต์มีอิสระเต็มที่ ที่จะกำหนดตำแหน่งการวางเครื่องหมายต่างๆ ทำให้ไม่จำเป็นต้องกำหนด PUA code point อีกต่อไป จึงอาจเป็นครั้งแรก ที่ TrueType-based platform จะสามารถทำกรณีทั้งสองข้างต้นได้ (ผมเคยเห็น Solaris ทำได้มาแล้ว แต่ใช้กับ X terminal โดยใช้ฟอนต์บิตแมป monospace)

ระหว่างทดสอบ pango-libthai ที่ backport OpenType support แบบเต็มสตีมจาก patch ที่ commit เข้า Pango ไป ก็พบว่ามันจัดการกรณีทั้งสองไม่ถูกต้อง (ใน Pango upstream นั้น ถูกต้องแล้ว) แกะไปแกะมา พบว่า libthai เองลืมทำกรณีนี้ไปเสียสนิท! วันนี้เลยแก้ libthai จนได้ screenshot ข้างบนออกมาจาก pango-libthai

commit ไปเรียบร้อย ท่าทางจะได้รีลีส libthai ตัวใหม่พร้อมๆ กับ pango-libthai ตัวหน้าซะละมัง

11 ตุลาคม 2547

รวมมิตรเครื่องมือคิดเลข

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

  • Abacus - The Art of Calculating with Beads แนะนำทุกอย่างสำหรับผู้สนใจ รวมทั้งเรื่องราวการแข่งขันระหว่างลูกคิดกับเครื่องคิดเลขอิเล็กทรอนิกส์ (ซึ่งลูกคิดชนะ!) และการปะทะกันระหว่าง Richard Feynman กับเซลส์ขายลูกคิด
  • Soroban Abacus Handbook สอนใช้ลูกคิด บวก ลบ คูณ หาร ถอดรากที่สอง!
  • Abacus-Online-Museum พิพิธภัณฑ์ลูกคิด กับลูกคิดแบบต่างๆ ทั่วโลก
  • Abacus - From Wikipedia จะไม่อ้างสารานุกรมฉบับนี้ก็กระไรอยู่

จากหน้าวิกิพีเดีย มีลิงก์ไปยังเครื่องคำนวณชนิดอื่นๆ อีก เช่น Slide rule, Nepier's bones ซึ่งกระดูกเนเปียร์นี่แหละ ผมเคยใช้เป็นเครื่องมือคิดเลขสมัยมัธยม (ซึ่งต้องคูณทุกอย่างด้วยมือ ห้ามใช้เครื่องคิดเลข) คนอื่นมาดูกระดาษทดผมก็จะงงๆ เพราะไม่ได้ตั้งคูณเลขเหมือนชาวบ้าน แต่ตีตารางแล้วบวกเลขแนวเฉียงเอา พบว่าคูณได้เร็วและพลาดน้อยกว่าการตั้งคูณธรรมดา ส่วน slide rule นั้น เกิดไม่ทัน เห็นแต่ของพ่อ พ่อเคยสอนใช้นิดหน่อยเหมือนกัน แต่ตอนนั้นเด็กมาก เลยจำไม่ค่อยได้ จำได้แต่การคูณ-หารเลขเท่านั้น อย่างอื่นพวก sin cos tan นี่ ยังไม่ได้เรียน พอได้เรียน พ่อก็ไม่มีโอกาสสอน

Pango-LibThai Back Ports

วันนี้จัดการ back port การเปลี่ยนแปลงทั้งหลายที่ทำใน Pango upstream กลับมาที่ pango-libthai บ้าง สรุปการเปลี่ยนแปลงทั้งหมดก็:

  • ถ้าฟอนต์มี OpenType table สำหรับภาษาไทย ใช้ OpenType เต็มที่ โดยปิดการใช้ PUA glyph
  • ตัด ISO10646 fontset ที่ไม่จำเป็นออก (เพราะเท่ากันทุกประการกับ tis620-0 อยู่แล้ว)
  • แก้ glyph table ของ tis620-1 เพื่อให้ shape ฟอนต์แมคโดยใช้ PUA ได้จริง
  • จัดการสระลอยตัวอย่างชัดเจน โดยตรวจหา dottedcircle (U+25CC) ก่อน ถ้าไม่มีจึงขยายความกว้างของเครื่องหมายให้เท่า ink rect
  • ตัด dottedcircle glyph ออกจากตาราง tis620-2 ทำให้ shape ฟอนต์วินโดวส์ที่ไม่มี dottedcircle และ OpenType table ได้อีกครั้ง

ทั้งหมดนี้ commit เข้า CVS ไปแล้ว รอทดสอบสักพักคงรีลีสเวอร์ชันใหม่

10 ตุลาคม 2547

Abacus

วันนี้วันอาทิตย์ ตั้งใจจะงดทำงานให้ได้ เพราะไม่ได้ปรับสมองไปหาเรื่องอื่นที่ไม่ใช่คอมพิวเตอร์มานานแล้ว ก็เลยไปเดินศึกษาภัณฑ์ (ขอนแก่น) แถวๆ แผนกอุปกรณ์ ตั้งใจจะหาลูกคิดญี่ปุ่นสักราง แต่ระหว่างนั้น ก็เดินดูอุปกรณ์อย่างอื่นไปด้วย เดินผ่านแผนกอุปกรณ์ฟิสิกส์ ก็เหมือนได้กลับไปหาของเล่นเก่าๆ สมัยเรียน มีรถทดลอง ผงตะไบเหล็ก แผ่นโพลารอยด์ กระจกเว้า ฯลฯ รู้สึกเหมือนตัวเองกำลังดูดซับความรู้สึกของ "โลกกายภาพ" หลังจากอยู่ใน "โลกเสมือนจริง" มานานเกินไป งานที่ทำก็อยู่แต่กับตรรกะ ไม่ใช่สิ่งที่จับต้องได้แบบนี้ ยังแปลกใจตัวเองเหมือนกัน ที่ถึงแม้ฟิสิกส์ โดยเฉพาะกลศาสตร์ จะเป็นวิชาโปรดสมัยเรียน และมีชุดคิทอิเล็กทรอนิกส์เป็นของเล่นยามว่าง แต่พอเจอคอมพิวเตอร์เข้า กลับกระโดดจับเรื่องซอฟต์แวร์อย่างเต็มที่ ไม่สนฮาร์ดแวร์แม้แต่น้อย (Programmers don't do hardware.)

กลับมาที่เรื่องลูกคิด เดิมผมมีลูกคิดจีนที่บ้านอยู่แล้วรางหนึ่ง ไม่ได้เอาไว้คิดบัญชีอะไรหรอก แต่เอาไว้ฝึกบวกเลขแก้เซ็ง (พ่อเคยสอนคูณเลขนานมาแล้ว ลืมสูตรไปเรียบร้อย) ลูกคิดจีนมันจะมีหลักละ 7 ลูก บน 2 ล่าง 5 ซึ่งถ้าใช้สูตรเป็น มันจะใช้แค่ 5 ลูกเท่านั้น คือลูกบนสุดกับล่างสุดจะไม่ต้องใช้เลย แค่ลูกบน 1 ล่าง 4 ก็เพียงพอจะแทนเลข 0 ถึง 9 แล้ว และนั่นก็เป็นเหตุผลที่ลูกคิดญี่ปุ่นเขาตัดสองลูกที่ไม่จำเป็นออก

พูดถึงเรื่องการตัดสิ่งไม่จำเป็นของญี่ปุ่นเนี่ย รู้สึกเหมือนเป็นลักษณะหนึ่งของวัฒนธรรมเขา อย่างขลุ่ยญี่ปุ่นที่เคยเห็น ก็จะมีแค่ 6 รู (ของไทยมี 8 รู ถ้านับรูที่นิ้วโป้งซ้ายสำหรับเสียง C สูงด้วย) ตัด 2 รูบนซึ่งเป็นเสียง C, C# สูงออก เพราะสามารถเป่าได้ด้วยเสียงสูงของ C ปกติอยู่แล้ว (แต่ผมว่าไม่น่าตัด เพราะมันทำให้เล่นเสียงโหยหรือเสียงรัวตรงรอยต่อ ลา-ที-โด ไม่ได้ แต่เพลงญี่ปุ่นเดิมอาจไม่มีการเล่นเสียงพวกนี้ก็ได้) หรือถ้าเป็นภาพวาดพู่กัน ก็ดูจะใช้จำนวนเส้นน้อยที่สุด แต่ยังสื่อความหมายครบถ้วน คล้ายกับว่า ต้องรวบรวมสมาธิ วาดภาพไว้ในใจก่อน แล้วจึงตวัดพู่กันทีเดียวเสร็จ จะไม่มีการมาลังเลว่า เอ.. น่าจะเพิ่มตรงนั้นอีกนิด ตรงนี้อีกหน่อย ผมว่า คำพูดโยดาที่สอนลุคว่า "No. Try not. Do, or do not. There is no try." ก็คงบรรยายความเป็นญี่ปุ่นตรงนี้ได้ดี

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

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

จบหนึ่งวัน กับของเล่นพักสมองของผม ไว้ว่างๆ มาหัดต่อ

09 ตุลาคม 2547

Pango with Thai Dangling Vowels

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

มีปัญหาหนึ่งใน pango Thai module ที่รู้มานานแล้ว คือตั้งแต่ตอนที่จัดการสระบน-ล่าง ที่ผิดลำดับ วทท โดยเอา dotted circle มาวางเป็นฐานนั้น ได้ทำให้ฟอนต์ถูกบังคับให้ต้องมี dottedcircle glyph (U+25CC) โดยปริยาย มิฉะนั้นจะไม่ shape (นอกจากจะมี OpenType table) ซึ่งตรงนี้ ทำให้คุณภาพการ render กับฟอนต์ของ Windows ตก เพราะฟอนต์ Windows ปกติจะไม่มีทั้ง dottedcircle glyph และ OpenType table สำหรับภาษาไทย เรื่องนี้ ตอนแรกๆ ที่ถูก assign เป็น maintainer ของ Pango Thai module ใหม่ๆ ยังไม่กล้าแก้โค้ดมาก แต่ก็เก็บไว้เป็น wish list ส่วนตัวเรื่อยมา

ช่วงนี้เลยได้โอกาสทำความสะอาดโค้ด โดยเขียนโค้ดส่วนสร้าง base สำหรับสระลอยตัวเหล่านี้ให้ชัดเจน แทนที่จะไปแฝงไว้ใน glyph table เหมือนก่อน (ซึ่งทำให้เกิดผลข้างเคียงที่ไม่ดีดังที่กล่าวไป) คราวนี้ Pango จะพยายามหา dottedcircle ในฟอนต์ก่อน ถ้าหาไม่เจอ ก็จะใช้วิธีขยายความกว้างของสระ ให้เท่ากับ inkrect (คือจากขอบซ้ายสุดถึงขอบขวาสุดของ glyph) ซึ่งจะทำให้สระลอยตัวถูกแยกออกมาจากเซลล์เดิม ผลคือ shaper ไม่จำเป็นต้อง require dottedcircle ในฟอนต์อีก ทำให้สามารถ shape ฟอนต์จาก Windows ได้อีกครั้ง ดังตัวอย่างของฟอนต์ Angsana New:

Dangling Vowels witn Angsana New

เทียบกับฟอนต์ Kinnari จาก thaifonts-scalable ซึ่งมี dottedcircle และ OpenType table สำหรับภาษาไทย:

Dangling Vowels witn Kinnari

commit เข้า CVS (HEAD) ไปแล้ว ฟีเจอร์ทั้งหมดที่กล่าวมาใน blog รอพบใน GNOME 2.10 ตรุษจีนปีหน้าเด้อ (หรือถ้า distro ไทยไปจิ๊ก patch มาจาก CVS ก็คงได้ใช้ก่อน)

ว่าแต่ว่า เมื่อไรฟอนต์ไทยบน Windows จะมี OpenType table ให้ล่ะเนี่ย? หรือว่าต้องรอ Longhorn?

08 ตุลาคม 2547

Pango for Mac Fonts

เมื่อวานนี้เน้นนอนพักเป็นหลัก ไม่ได้ไปหาหมอเพราะรู้สึกดีขึ้นบ้างแล้ว ประมาณว่าถ้าได้พักผ่อนเพียงพอก็น่าจะหาย แต่จะให้นอนทั้งวันมันก็ไม่ใช่เวลานอน เลยลุกขึ้นมาทำงานเบาๆ สลับบ้าง โดยทำแค่ลบโค้ดใน Pango ส่วนที่ไม่ได้ใช้แล้วออกเท่านั้น (ช่วยลดขนาดโค้ดลงนิดนึง) แต่ระหว่างนั้น ก็ทำให้คิดถึงตาราง tis620-1 ที่ไม่เคยได้ใช้เลย ก่อนคิดว่าจะลบทิ้งไปด้วย ก็ลองประกาศขอยืมฟอนต์แมคมาทดสอบเสียหน่อย โดยเข้าไปคุยในห้อง #TLWG ก็มีผู้ใจบุญให้ยืมฟอนต์มา และยังชี้ไปยังแหล่งฟอนต์ฟรีของแมคให้ด้วย คิดว่าน่าจะมีประโยชน์ถ้าจำเป็นต้องใช้เป็น test case ใน bugzilla

แต่ก็ขอฟอนต์มาเฉยๆ ยังไม่ลงมือแกะ เพราะกลัวไข้จะกลับมาอีก เลยวางทิ้งไว้แล้วไปนอนต่อ ปรากฏว่า ความที่ค้างคาไว้ เลยทำให้เมื่อคืนฝันแต่เรื่องฟอนต์กับโค้ดส่วน OpenType ดีที่ได้หลับแต่หัวค่ำมาก่อนแล้ว ไม่งั้นคงแย่ ตื่นขึ้นมาปรากฏว่าไข้หายแล้ว เลยจัดการนั่งแกะฟอนต์แต่เช้า แก้ไปแก้มาจน shape ฟอนต์แมคได้ และก็เลยได้แก้การตรวจสอบชนิดฟอนต์ให้ถูกต้องยิ่งขึ้นด้วย

ก่อนจะ commit ก็เกิดเอะใจว่า ฟอนต์ที่ทดสอบนี้เป็นฟอนต์ Unicode แล้ว แต่ยังอยากสร้างตาราง glyph ที่ใช้ภายในให้คล้ายกับฟอนต์ 8 บิตเดิม ก็เลยเข้าห้อง #TLWG มาขอฟอนต์แมค 8 บิตอีก คราวนี้ไม่ได้ฟอนต์ 8 บิต แต่ได้ฟอนต์บน Panther มาแทน เทียบกับฟอนต์ที่ได้เมื่อวานซึ่งเป็นของ Jaguar ก็ทำให้รู้ว่า แท้ที่จริงแล้ว การเพิ่ม glyph ที่ขาดในแมค คือ ญ ฐ ตัดเชิง, สระอุ อู และพินทุต่ำ นั้น น่าจะยังไม่มีการกำหนดเป็น PUA มาตรฐานของ Apple เพราะฟอนต์ใน Panther ไม่ได้ assign ค่า Unicode ให้กับ glyph เหล่านี้เลย ก็เลยจำต้องตัด PUA glyph ชุดนี้ออกจากตาราง glyph ใน Pango shaper ดังนั้น เมื่อบวกกับ glyph อื่นๆ ที่ขาดหายไปจากฟอนต์แมคแล้ว ก็เลยทำให้ฟอนต์แมคขาด feature เมื่อเทียบกับฟอนต์ Windows ดังนี้

  • ไม่มียามักการ (◌๎) ฟองมัน (๏) อังคั่นคู่ (๚) และโคมูตร (๛) เพราะไม่มีในฟอนต์แมคปกติ
  • ไม่ตัดเชิง ญ ฐ เมื่อประกอบกับสระล่าง เช่นในคำว่า กตัญญู ทิฏฐุชุกรรม
  • ไม่เลื่อนสระล่างลงต่ำเมื่ออยู่ใต้ ฎ ฏ เช่นในคำว่า กฎุมพี

ทั้งนี้ การ shape ทั้งหมดนี้ ตั้งอยู่บนข้อสมมุติของการใช้ PUA glyph ซึ่งยังใช้ใน Jaguar แต่สำหรับฟอนต์ของ Panther นั้น Pango ไม่สามารถเข้าถึง PUA glyph ได้ จึงไม่สามารถ shape ได้เลย จนกว่า Pango จะสนับสนุน AAT

จบวันนี้ commit เข้า Pango CVS แก้ไปสองเรื่อง คือการ shape ฟอนต์แมค (ด้วย PUA glyph) และการตรวจสอบชนิดของฟอนต์ที่ถูกต้องยิ่งขึ้น

06 ตุลาคม 2547

เปื่อย

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

02 ตุลาคม 2547

Pango OT Episode II

ก่อนจะ generalize Pango มอดูลไทย เพื่อเพิ่มภาษาลาว ก็ขัดสีฉวีวรรณก่อนเสียหน่อย เกี่ยวกับ OpenType support ที่ขยักแรกมีผลไปแล้วใน Pango 1.6.0 และ 1.4.x (รุ่นไหนจำไม่ได้) เป็นการใช้ OpenType table เสริมท้ายเข้าไป หลังจากทำ PUA substitution (คือการใช้ glyph ใน Unicode Private Use Area [PUA] แทนที่ glyph ปกติ) เพื่อจัดการสระ-วรรณยุกต์หลบหางพยัญชนะหางยาว ซึ่งตารางหลักที่จะมีผลคงเป็น GPOS เพราะงานของ GSUB นั้น โดน shaper ทำไปหมดก่อนแล้ว

ทีนี้ หลังจาก thaifonts-scalable ที่มี OpenType ได้กระจายออกไปให้ทดสอบใช้กับ GNOME 2.8 กันระยะหนึ่งแล้ว ก็เริ่มขยักที่สอง คือให้ OpenType table ได้ยืดเส้นยืดสายเต็มที่ โดยลดการใช้ PUA ลงเป็นตัวเลือกสำรองสำหรับฟอนต์ที่ไม่มี OpenType table เท่านั้น โดยได้จัดโครงสร้าง thai-ot ใน Pango Thai module นิดหน่อย แล้ว file GNOME Bug #153927 ไว้อ้างอิง โดยได้ปรึกษาปัญหาใน gtk-i18n-list ด้วย ก็ได้คำชี้แนะจาก Owen เกี่ยวกับทางเลือกต่างๆ จนถึงบางอ้อ ว่าเราควรแบ่งหน้าที่ของ shaper กับ OpenType table ที่ตรงไหน

สรุปโดยย่อสำหรับผู้สนใจ: pango shaper จะแบ่งข้อความเป็น cluster ก่อน แต่ละ cluster ก็คือหน่วยย่อยที่สุดที่สามารถวิเคราะห์การเรียงอักขระได้ เช่น “ที่แม่น้ำน่าน” ก็จะแบ่ง cluster เป็น “ที่|แ|ม่|น้ำ|น่|า|น” จากนั้น ส่ง clusterized text ให้ GSUB ไปประมวลผล ซึ่งในฟอนต์ก็จะเลือกชุดวรรณยุกต์สูง-ต่ำ (ในฟอนต์ OpenType จะคงเหลือ glyph วรรณยุกต์สองชุด คือชุดเล็กไว้วางบนวรรณยุกต์ กับชุดใหญ่ไว้วางบนพยัญชนะ ชุดที่ใช้หลบหางถูกตัดทิ้งไป เพราะจัดการด้วย GPOS ได้ และเหตุที่ไม่เหลือชุดเดียวไปเลย เพราะวรรณยุกต์จำเป็นต้องมีสองขนาด ไม่งั้นวางแล้วไม่สวย) ตัดเชิง ญ ฐ ถ้ามีสระล่าง ฯลฯ จากนั้นจึงใช้ GPOS จัดการเรื่องการวางตำแหน่งสระ-วรรณยุกต์ให้สวยงาม (ผมเคยร่าง spec ของ Thai OpenType font ไว้ แต่ยังไม่ใช่ฉบับสุดท้าย อาจมีการแก้ไขอีก)

นอกจากนี้ ยังแจ้งบอกใน TLWG devel forum ให้ช่วยทดสอบกัน ผลปรากฏว่า ไม่มีใครรายงานว่าพบข้อผิดพลาด ก็เลยถือว่าไม่มี bug แล้ว วันนี้เลย commit patch เข้าไปใน CVS แล้ว ใครเจอ bug ก็ไป reopen bug เอาละกันนะคร้าบ

hacker emblem