Theppitak's blog

My personal blog.

31 พฤษภาคม 2547

ให้เธอสอน เธอจะสอนได้ไหม

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

  • สอนพิเศษฟิสิกส์ ม. ปลาย → เด็กทำคิ้วผูกโบอยู่ตลอด เด็กบางคนถึงกับหนีไป ไม่กลับมาเรียนอีกเลย บอกว่า เรียนไม่รู้เรื่อง
  • บรรยายคอร์สลินุกซ์ → เสียงตอบกลับคือ “เมื่อไหร่อาจารย์จะพาคลิก ทำไมสอนแต่คำสั่ง (command line)” แต่ครั้นพยายามจะสอนคลิก ก็เงอะงะ ไม่รู้จะสอนยังไง นักเรียนคลิกเองยังเร็วกว่า
  • เขียนเอกสาร open source สำหรับผู้เริ่มต้น → โดนตีกลับมาแก้แล้วแก้อีก บอกว่า “too technical,” “still too technical,” “hey, could you just ...” blah blah blah

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

ในอีกแง่หนึ่ง ความรู้สึกที่ว่า “an equation is worth a thousand words” ก็ทำให้เลือกวิธีอธิบายที่คิดว่าตรงสู่จุดหมาย ง่ายกว่าบรรยายแบบขี่ม้าเลียบเมือง แต่ปรากฏว่าผลที่ได้จะผิดความคาดหมายอยู่เนืองๆ

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

อ้อ.. ส่วนเรื่องคอร์สลินุกซ์ อันนั้นคงต้องไปหัดคลิกมาจริงๆ เอาไว้ใช้กับลูกค้าด้วย ตอบคำถามเรื่องโปรแกรม burn CD ว่า cdrecord เนี่ย โดนตะเพิดมาแล้ว (แต่จะทำใจหัดได้เร้อ เทพเอ๊ย..)

29 พฤษภาคม 2547

วันหยุด?

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

  • pango แตก branch แล้ว อะไรใหม่ๆ กำลังจะมา โฮ่ๆ
  • Owen ตอบรับ patch ใน GNOME Bug #142544 แล้ว → commit ใน HEAD และ pango-1-4 branch และ resolve bug → update blog สรุป GNOME Bug ด้วย → ขั้นต่อไปคือกลับมาเก็บรายละเอียด Pango OT ต่ออีกหน่อย แต่ไว้เสร็จงานก่อน
  • วันนี้ TOT-online เกิดการ block service ตอนสายๆ ทำให้เข้าเน็ตไม่ได้ทั้งวัน ก็เลยเก็บธุระต่างๆ รวบรวมไว้ ค่อยเข้ามาสะสางทีเดียว
  • มีอันต้องอดนอนมาหลายคืน วันนี้ง่วงมากๆ แต่งานก็เร่ง (เสียเวลากับการทำ Appendix ใน OO.o ไปเยอะ) เลยต้องถ่างตาทำ จนตอนบ่ายต้องยอมแพ้ให้อากาศ ฝนตกพรำๆ แต่ร้อนอบอ้าวชะมัด สรุปแล้ว บทความที่กะว่าจะเขียนก็ต้องเลื่อนไปก่อนละคร้าบ ☹

28 พฤษภาคม 2547

Appendix ใน OO.o

มันจะลึกลับซับซ้อนอะไรขนาดนั้น กะอีแค่จะทำภาคผนวกที่รันเลขบทต่างหากจากเนื้อหาปกติใน OO.o โจทย์ที่เจอคือ:

  • รันภาคผนวกเป็น A, B, C, ... หลังจากจบบทสุดท้าย
  • แสดงชื่อภาคผนวกในสารบัญ
  • ในเนื้อหา มี cross reference เข้าไปในภาคผนวก
  • หัวกระดาษแสดงหัวข้อเรื่อง

ปัญหาคือ OO.o ไม่สามารถ reset section counter พร้อมเปลี่ยน page style เหมือน \frontmatter, \mainmatter, \appendix และ \backmatter ง่ายๆ เหมือนใน LaTeX book class โดย OO.o อนุญาตให้มี outline numbering แค่ชุดเดียวเท่านั้นในเอกสาร

ลองมั่วไปมั่วมา ได้แค่ครึ่งๆ กลางๆ จนกระทั่งไปเจอ วิชามาร เข้า คราวนี้ได้หมดเลย สรุปคร่าวๆ (ดัดแปลงจากในแหล่งนิดหน่อย) คือ:

  • สร้าง style Appendix1, Appendix2, ... โดย based on Heading1, Heading2, ... และให้ Numbering เป็น None
  • ไปแก้ outline numbering ของเอกสารที่เมนู Tools/Outline Numbering โดยเลือกเอาชั้นท้ายๆ ที่ไม่ได้ใช้ (สำหรับผม เริ่มใช้ที่ชั้นที่ 6) ให้มี style เป็น Appendix1, Appendix2, ... ตามลำดับ โดยให้ในชั้นของ Appendix1 มี Numbering Style เป็น A, B, C, ... และ show sublevel แค่ 1 จากนั้น ชั้น Appendix2 เป็น 1, 2, 3, ... และ show 2 level ฯลฯ
  • cross reference → ได้ทันที!!
  • สารบัญ → แก้ style Content6, Content7, ... ที่ตรงกับ Appendix1, Appendix2, ... ให้เหมือน Content1, Content2, ... (ผมใช้วิธี link ไปเลย แล้วแก้ indent เอา)
  • หัวกระดาษ → ที่ Stylist เพิ่ม Page Style "Appendix" → แก้ style Appendix1 ตรง Text Flow ตั้ง Page break before, with page style "Appendix" จากนั้นก็แก้ header เอาเองตามสบาย จะไม่กระทบหน้าปกติ (ตอน Insert Field "Chapter" ก็เลือก Layer 6/7/... ที่ตั้งให้ใช้ Appendix ไว้)

ฟู่.. รอดตายไปหนึ่งเปลาะ.. ไหงมันซับซ้อนขนาดนั้นหว่า.. ความจริงน่าจะยอมให้มี Outline Numbering มากกว่าหนึ่งชุดได้นะ

Big Changes to sid

ตั้งหัวเรื่องล้อ TLE blog ซะหน่อย เหอๆ sid upgrade จาก LTN secondary mirror วันนี้ 85 MB -_-! เป็น GNOME 2.6.1 ที่ยังทยอยมาเรื่อยๆ บวกกับ XFree86 update แล้วก็ Mozilla มีแต่ยักษ์ๆ ทั้งนั้น อ่วมกันต่อไป

27 พฤษภาคม 2547

Venus Transit

ไม่ตามเรื่องนี้ไม่ได้แล้ว สื่อประโคมข่าวมากพอๆ กับตอนเกิดสุริยุปราคาเต็มดวงเลย คือดาวศุกร์จะเคลื่อนผ่านหน้าดวงอาทิตย์วันที่ 8 มิ.ย. นี้ สังเกตได้ที่ประเทศไทยตอนบ่าย กินเวลาประมาณ 6 ชั่วโมง

ที่โปรโมทกันขนาดนี้ก็สมควรอยู่ เพราะครั้งสุดท้ายที่เกิดปรากฏการณ์นี้ ก็คือเมื่อ 122 ปีที่แล้ว ตอนที่กัปตันเจมส์ คุก (James Cook) เดินทางมาสังเกตปรากฏการณ์ที่เกาะตาฮิติ แล้วเลยต่อมาเจอเกาะฮาวาย จนถึงออสเตรเลีย (สื่อบางคนถึงกับเขียนว่า ถ้าไม่ใช่เพราะ Venus transit ในครั้งนั้น ป่านนี้ออสเตรเลียอาจพูดภาษาฝรั่งเศสไปแล้วก็ได้ บ้างก็ว่า เป็นครั้งแรกที่ดาราศาสตร์ทำให้เกิดความร่วมมือทั่วโลก) 122 ปี ก็แปลว่า ไม่มีใครที่ยังมีชีวิตอยู่ได้เคยเห็นปรากฏการณ์นี้เลย

Venus transit เกิดขึ้นทุกๆ ประมาณ 120 ปี และจะเกิดคราวละสองครั้ง เป็นปรากฏการณ์คู่แฝด คือถ้าพลาดครั้งนี้ อีก 8 ปีข้างหน้าจะมีอีก ใน พ.ศ. 2555 แล้วก็รอไปอีก 105 ปี ถึงจะเกิดอีกครั้ง ใน พ.ศ. 2660 และ 2668 การคำนวณคาบการเกิด ก็คำนวณจากคาบการโคจรรอบดวงอาทิตย์ของดาวเคราะห์ทั้งสอง โดยดาวศุกร์โคจรรอบดวงอาทิตย์ใช้เวลาประมาณ 225 วัน ส่วนโลกประมาณ 365 วัน ซึ่งดาวศุกร์จะน็อกรอบโลกทุกๆ 225 / (365 - 225) ≈ 1.607 ปี แต่เนื่องจากระนาบวงโคจรของดาวศุกร์ เอียงทำมุมประมาณ 3 องศากับของโลก เศษ 0.607 ปีจึงทำให้จุดน็อกรอบไม่อยู่ที่จุดตัดระนาบ เลยไม่เกิด transit แต่เมื่อน็อกรอบกัน 5 ครั้ง จะทำให้เศษเหลือ 0.035 ซึ่งตำแหน่งที่ต่างระนาบยังไม่เกินขนาดดวงอาทิตย์ เลยเกิดปรากฏการณ์อีกครั้ง โดย transit ที่คนละส่วนของดวงอาทิตย์ การน็อกรอบ 5 ครั้งก็คิดเป็นเวลาประมาณ 5 × 1.607 ≈ 8 ปีนั่นเอง ต่อจากนั้นก็อีกหลายรอบกว่าจะมาน็อกรอบกันที่จุดตัดระนาบอีก

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

ครั้งนี้ ที่ที่สังเกตได้อยู่ในเอเชีย แอฟริกา และยุโรป หอดูดาวยุโรปซีกฟ้าใต้ (ESO) ร่วมกับอีกหลายๆ หน่วยงาน เลยจัดโครงการ VT-2004 (VT = Venus Transit) ให้นักเรียนทั่วโลกร่วมกันเก็บข้อมูลเพื่อคำนวณระยะระหว่างโลกกับดวงอาทิตย์ ในเมืองไทย โครงการการเรียนรู้เรื่องวิทยาศาสตร์โลกและอวกาศ ของ หอดูดาวเกิดแก้ว เป็นตัวกลางประสานงาน

โอ้ย อีก 12 วันแค่นั้น.. จะหาอุปกรณ์ทันไหมนี่? ไม่ได้อยากเก็บข้อมูลกับเขาหรอก แต่อยากร่วมดูอะ เดี๋ยวถามๆ แถว มข. ดีกว่า งานนี้เขาน่าจะตั้งกล้องล่ะน่า จะดูถ่ายทอดทางเว็บก็ไม่ไหว เน็ตอืดตายชัก ☹

26 พฤษภาคม 2547

Lagrangian Points

ไปค้นเอกสารจะทำงาน เลยไปเจอ print out เรื่องการพิสูจน์จุดเลอเกรนจ์ทั้งห้าที่ว่าจะหาอยู่ พิมพ์ออกมาจาก เว็บของ NASA นานมาแล้ว (พอดีตอนโน้นเคยหาข้อมูลเกี่ยวกับลิฟต์อวกาศ ซึ่งมาจากนิยายเรื่อง Fountains of Paradise ของ อาเธอร์ ซี. คลาร์ก โดยมี โครงการของ NASA ที่จะสร้างลิฟต์ที่ว่าโดยเริ่มที่จุดดาวเทียมค้างฟ้า (geostationary) แต่ก็ปรากฏว่ามีคนพูดถึง space tower ที่จุด L1 ของวงโคจรโลก-ดวงจันทร์ด้วย เลยได้ค้นต่อ)

การพิสูจน์แบ่งเป็นสามตอน

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

  • L1 เป็นจุดที่อยู่ระหว่างดาวทั้งสอง ซึ่งผลต่างระหว่างสนามโน้มถ่วงเท่ากับความเร่งสู่ศูนย์กลางพอดี ซึ่งจุดนี้ สำหรับวงโคจรดวงอาทิตย์-โลก เป็นจุดที่เหมาะจะวางดาวเทียมตรวจจับลมสุริยะก่อนถึงโลก (ปัจจุบันมีแล้ว)
  • L2 เป็นจุดที่อยู่ด้านนอกของดาวบริวาร ซึ่งสนามโน้มถ่วงรวมกันแล้วเท่ากับความเร่งสู่ศูนย์กลางพอดี จุดนี้สำหรับวงโคจรดวงอาทิตย์-โลก ก็ได้ตั้งดาวเทียมตรวจจับคลื่นไมโครเวฟไว้แล้ว พร้อมทั้งมีโครงการจะติดตั้งกล้องโทรทรรศน์อวกาศต่อจากฮับเบิลที่จุดนี้ด้วย
  • L3 เป็นจุดที่อยู่ด้านตรงข้ามกับดาวบริวาร ซึ่งสนามโน้มถ่วงรวมกันแล้วเท่ากับความเร่งสู่ศูนย์กลางพอดี จุดนี้อยู่ไกลเกินไป และไม่ค่อยเสถียร จึงไม่ค่อยน่าสนใจ
  • L4 และ L5 เป็นจุดที่น่าสนใจมาก เป็นความสมดุลที่เกิดจากระบบที่ประกอบด้วยวัตถุ 3 ชิ้น โคจรรอบจุดศูนย์กลางมวลด้วยอัตราเร็วเชิงมุมเท่ากัน เป็นระบบที่ค่อนข้างเสถียร เพราะไม่ตายตัวเหมือนสามจุดแรก จากการพิสูจน์ข้างต้น พบว่า ในระบบที่ทำมุมกันเป็นสามเหลี่ยมด้านเท่า จะเกิดสมดุลของการหมุนรอบศูนย์กลางมวล โดยไม่ขึ้นกับขนาดของมวลทั้งสาม จุดนี้ สำหรับวงโคจรดวงอาทิตย์-ดาวเคราะห์ มีการทำนายว่าน่าจะมีดาวเคราะห์น้อยถูกตรึงอยู่ ซึ่งมีการค้นพบแล้วในวงโคจรของดาวศุกร์ โลก ดาวอังคาร และดาวพฤหัส โดยเฉพาะสำหรับดาวพฤหัสที่มีมวลมากที่สุดในระบบสุริยะ จะพบมากกว่าเพื่อน และได้รับการขนานนามว่า Trojan Asteroids เพราะดวงแรกๆ ที่พบ ได้ชื่อจากนักรบในอิเลียด และได้มีการแบ่ง node เป็น Greek node ที่ L4 และ Trojan node ที่ L5 ดังที่พูดถึงใน blog วันก่อน และสำหรับวงโคจรโลก-ดวงจันทร์นั้น มีการเสนอให้เป็นจุดที่จะตั้งอาณานิคมอวกาศ (space colonies) ด้วย

เขียนเสร็จแล้ว save ไว้ ไปทำงานก่อน

25 พฤษภาคม 2547

GNOME 2.6 on sid

วันนี้ได้ฤกษ์คอมไพล์เคอร์เนล 2.6.6 ที่ดาวน์โหลดมาหลายวันแล้วเสียที ทางด้าน Debian sid ก็ปรากฏว่า วันนี้ apt-get เสียหน้ามืด GNOME 2.6.1 มาถึงแล้ว พร้อม OO.o อีกชุดใหญ่ (ใช้ secondary mirror จาก LTN ก็เลยมาช้ากว่า master site นิดหน่อย) เล่นเอาโมเด็มแทบไหม้

เรื่องงานที่รออยู่ ได้เริ่มเสียที รีบทำรีบเสร็จ จะได้มา hack GNOME ต่อ

ลิงก์วันนี้:

  • Owen Taylor เขียนบทความเทคนิคเกี่ยวกับ การ render text บน resolution ที่ต่างกัน นำเสนอวิธีทำ grid fitting ด้วยการปรับตำแหน่งอักขระคล้าย justification ทำให้ลดการพึ่งพา hint ได้ (นิดหน่อย) และลดการใช้ anti-aliasing ด้วย ดูทีท่าจะเอามาใช้กับ Pango รุ่นหน้าสักรุ่น
  • แอบไปเห็น GNOME bangalore blog ดูแล้ว GNOME hacker ของเขาเยอะดีจัง คุยกันโขมงโฉงเฉง
  • ได้รู้จัก Wiki เพิ่มอีกหนึ่ง คือ Wikibooks อีกแหล่งที่รวบรวมฐานความรู้ทางวิชาการ

Trojan Asteroids

รอจะเริ่มงาน แต่ทางนั้นดันหายต๋อม เลยเพลินบ้ากับ Iliad ต่ออีกหน่อย พยายามจะหาชื่อดวงดาวที่มีชื่อนักรบอิเลียด นั่งนึกดูก็นึกชื่อกลุ่มดาวไม่ออก มีใกล้เคียงที่สุดก็ พอลลักซ์ (Pollux) กับ คาสเตอร์ (Caster) ฝาแฝดที่เป็นพี่ของเฮเลนแห่งทรอย ไปอยู่เป็นกลุ่มดาวคนคู่ (Gemini) โน่น แต่สำหรับคนอื่น เช็กหนังสือแล้วก็ไม่มี เอ.. แล้วนักรบอิเลียดไปอยู่ตรงไหนบนฟากฟ้าล่ะเนี่ย..

ค้นเน็ตดู ในที่สุดก็เจอ ไปอยู่เป็นดาวเคราะห์น้อยนั่นเอง ไม่ใช่ในแถบดาวเคราะห์น้อยที่อยู่ระหว่างวงโคจรดาวอังคารกับพฤหัสนะ แต่เป็นดาวเคราะห์น้อยที่อยู่ตรงจุดลากรานจ์ (Lagrangian point) L4 และ L5 ของดาวพฤหัส โดยกลุ่มที่อยู่ที่จุด L4 จะได้ชื่อนักรบฝ่ายกรีก (เรียกว่า Greek node) และที่จุด L5 จะได้ชื่อนักรบฝ่ายทรอย (เรียกว่า Trojan node) โดยดวงแรกที่พบได้ชื่อว่า 588 Achilles อยู่ในจุด L4 แต่มีข้อยกเว้นเรื่องการตั้งชื่อสำหรับดวงแรกๆ ที่พบ เนื่องจากพบก่อนจะมีกฎการแบ่งฝ่าย คือดวงแรกที่พบในจุด Trojan node ได้ชื่อว่า 617 Patroclus ซึ่งเป็นฝ่ายกรีก และอีกดวงคือ 624 Hektor อยู่ในบริเวณ Greek node

ถ้าอ่านแล้วงง มีเว็บอธิบาย:

  • Trojan asteroid จาก Wikipedia
  • Earth Lagrange or Trojan Asteroids อธิบายทฤษฎีของดาวเคราะห์น้อยที่จุดลากรานจ์ของดาวเคราะห์
  • Lagrangian point จาก Wikipedia อธิบายเรื่องจุดลากรานจ์
  • Trojan asteroid tutorial ลงลึกอีกนิด เกี่ยวกับจุดลากรานจ์

เคยอ่านเรื่องการพิสูจน์จุดลากรานจ์ทั้งห้าจากเว็บไหนจำไม่ได้เสียแล้ว ไว้ไปค้น print out เจอแล้วค่อยมาเพิ่ม :-P

24 พฤษภาคม 2547

ศัพท์ Iliad

กลับมาที่เรื่องทรอยอีกสักหน่อย รวมคำศัพท์ที่มีที่มาจากมหากาพย์ Iliad:

Achilles' heel
น. เรื่องเล็กๆ แต่เป็นจุดอ่อนสำคัญของบุคคล
ธีทิส (Thetis) สมุทรเทวีปรารถนาจะให้ อะคิลลีส (Achilles) บุตรของนางอันเกิดกับ พีลีอัส (Peleus) ผู้เป็นมนุษย์ ได้เป็นอมตะเหมือนนาง จึงได้ชุบตัวอะคิลลีสในแม่น้ำ สติกซ์ (Styx) ในยมโลก แต่ในการชุบตัวนี้ มีส่วนข้อเท้าที่นางใช้มือจับที่ไม่ถูกชุบ ดังนั้น จุดนี้จึงกลายเป็นจุดอ่อนที่ทำให้อะคิลลีสถูกฆ่าในสนามรบ ด้วยน้ำมือของเทพอะพอลโล ผ่านการยิงศรโดยปารีส โดยเล็งที่ข้อเท้า
∴ การที่อะคิลลีส วีรบุรุษผู้เก่งกล้าที่สุดของฝ่ายกรีก ถูกฆ่าเพราะจุดอ่อนเล็กๆ นี้ คำว่า “ส้นเท้าอะคิลลีส” หรือ “Achilles' heel” จึงกลายเป็นสำนวนใช้เรียกจุดอ่อนเล็กๆ ของบุคคล ที่กลายเป็นจุดสำคัญให้เกิดความเสียหายใหญ่หลวงได้
Cassandra
น. ผู้พยากรณ์เหตุร้าย
คาสซานดรา (Cassandra) เป็นธิดาของกษัตริย์ พริอัม (Priam) และราชินี เฮกคิวบา (Hecuba) แห่งทรอย โดยเป็นฝาแฝดกับ เฮเลนัส (Helenus) โหรประจำกองทัพทรอย ความงามของคาสซานดราทำให้เทพอะพอลโลหลงรัก จึงได้ให้พรนางให้มีความสามารถในการทำนายอนาคตอย่างแม่นยำ โดยแลกกับการมีไมตรีตอบ แต่นางก็ได้ปฏิเสธเทพอะพอลโลในนาทีสุดท้าย โดยที่อะพอลโลไม่สามารถเรียกพรที่ให้ไปแล้วคืนได้ จึงได้สาปให้ไม่มีใครเชื่อคำทำนายของนาง ในสงครามกรุงทรอย คาสซานดราได้ทำนายล่วงหน้า ว่าทรอยจะแตก ขุนศึกจะถูกฆ่าฟันล้มตาย และนางเป็นคนหนึ่งที่คัดค้านการลากม้าไม้เข้าเมือง แต่ทุกคนหัวเราะเยาะและไม่มีใครเชื่อนาง จนกระทั่งกรุงทรอยแตกในที่สุด คาสซานดราก็ถูกอะกาเมมนอนกวาดต้อนกลับไปยังนคร ไมซีนี (Mycenae) และจบชีวิตที่นั่น
∴ ปัจจุบัน คำว่า Cassandra กลายเป็นคำเรียกผู้ที่มักทำนายหายนภัยล่วงหน้า เช่น นักเศรษฐศาสตร์ที่มักพยากรณ์เศรษฐกิจในแง่ร้ายเสมอๆ
hector
ก. ข่มขู่บังคับ
เฮกเตอร์ (Hector) เป็นราชบุตรองค์โตของกษัตริย์ พริอัม (Priam) และราชินี เฮกคิวบา (Hecuba) แห่งทรอย เฮกเตอร์เป็นวีรบุรุษที่เก่งกล้าสามารถที่สุดของฝ่ายทรอย นับเป็นบุคคลในอุดมคติที่สุดในเรื่องอิเลียด ในบุคลิกกล้าหาญ เสียสละเพื่อชาติ รักเกียรติศักดิ์ศรี ใจกว้าง เป็นพ่อและสามีที่ดี ในสนามรบนั้น ความห้าวหาญของเขาทำให้เขาได้ฉายาว่า จอมสยบอาชา (Tamer of horses) ใครได้เข้าใกล้เขาไม่มีใครไม่สะท้านกลัว แม้แต่อะคิลลีสเอง
∴ เมื่อ hector กลายเป็นคำกริยาในปัจจุบัน จึงมีความหมายว่า ข่มขู่ให้กลัว
laconic
ว. (คำพูด) สั้นห้วน ได้ใจความ
∵ คำนี้ไม่ได้มาจากอิเลียดโดยตรง แต่เกี่ยวเนื่องกับเมือง สปาร์ตา (Sparta) ที่อยู่ในแคว้น ลาโคนิกา (Laconica) หรือเรียกในภาษาโรมันว่า ลาโคเนีย (Laconia) คำว่า ลาโคนิกา มาจากคำกรีก Lakonikos แปลว่าการประหยัดถ้อยคำ มีเรื่องเล่าถึงการพูดน้อยต่อยหนักของชาวสปาร์ตาว่า ครั้งหนึ่ง กษัตริย์ฟิลิปแห่งมาเซดอน (Phillip of Macedon) บิดาของพระเจ้าอะเล็กซานเดอร์มหาราช ได้เคยส่งจดหมายข่มขู่ชาวสปาร์ตาว่า ถ้าบุกลาโคเนียได้ จะเผานครสปาร์ตาให้เป็นจุณ ชาวสปาร์ตาอ่านเสร็จก็ร่างจดหมายตอบไปสั้นๆ ว่า “ถ้า” (If) คำเดียว
∴ ความสั้นห้วน แต่ได้ใจความ จึงแทนด้วยคำวิเศษณ์ว่า laconic
myrmidon
น. ผู้ที่ปฏิบัติตามคำสั่งของผู้บังคับบัญชาอย่างเคร่งครัดโดยไม่สงสัย
∵ ทหารจากเมือง เธสซาลี (Thessaly) ที่ติดตามอะคิลลีสมารบทรอย เป็นชาว เมอร์มิดอน (Myrmidones) ซึ่งตามตำนานเกิดจากมด จึงเชื่อฟังคำสั่งนายทัพอย่างไม่สงสัย แม้การถอนตัวจากสนามรบของอะคิลลีสจะทำให้เพื่อนร่วมชาติล้มตายมากมายก็ตาม
∴ myrmidon จึงมีความหมายถึงผู้ใต้บังคับบัญชาที่มีลักษณะเช่นนี้ ตัวอย่างเช่น ทหารนาซีที่ปฏิบัติการฆ่ายิวตามคำสั่งฮิตเลอร์อย่างไม่สงสัย
nestor
น. ผู้คร่ำหวอดแห่งวงการ
เนสเตอร์ (Nestor) ราชาแห่ง ไพลอส (Pylos) คือผู้มีอาวุโสที่สุดในบรรดากษัตริย์ในกองทัพพันธมิตรกรีก ในวัยหนุ่ม เนสเตอร์เป็นนักรบที่เก่งกล้าสามารถ และความรอบรู้ในการศึกก็พัฒนามากขึ้นตามอายุ รวมทั้งชั้นเชิงด้านการพูดด้วย เขาจึงเป็นผู้ให้คำแนะนำที่รอบคอบแก่อะกาเมมนอนเสมอๆ ในอิเลียด โฮเมอร์บรรยายว่าเขาฉลาดยิ่งกว่า โอดีสซูส (Odysseus) ผู้ออกอุบายกลศึกม้าไม้เสียอีก
∴ คำว่า nestor ในปัจจุบัน จึงหมายถึงผู้คร่ำหวอดในวงการหนึ่งๆ ซึ่งสามารถให้คำแนะนำที่ดีแก่ผู้อื่นได้ แต่ก็ไม่จำเป็นต้องพูดเก่งเหมือนเนสเตอร์แห่งไพลอส
palladium
น. ธาตุอันดับที่ 46 สัญลักษณ์ Pd
พัลลัส (Pallus) คือชื่อสกุลของ พัลลัส อะธีนา (Pallus Athena) หรือ อะธีนา (Athena) เทพีแห่งนักรบและสรรพวิชาการ ธิดาแห่งมหาเทพ ซูส (Zeus) ที่เรารู้จักนั่นเอง ในสงครามกรุงทรอยช่วงท้าย หลังจากที่อะคิลลีสต้องศรตายในสนามรบ อะแจ๊กซ์คลั่งตาย และปารีสถูกศรเฮอร์คิวลีสที่ยิงโดย ฟิลอกทีทีส (Philoctetes) ตายแล้ว ทรอยก็ยังยืนหยัดอยู่ได้แม้ไร้เฮกเตอร์ ทัพกรีกสืบทราบมาว่า เป็นเพราะรูปสลัก พัลลาเดียม (Palladium) ของเทพีอะธีนานั่นเอง ที่ปกป้องคุ้มภัยทรอยอยู่ แม้อะธีนาเองจะโปรดปรานฝ่ายกรีกอยู่ก็ตาม ดังนั้น โอดีสซูส (Odysseus) และ ไดโอมีดีส (Diomedes) จึงอาสาลอบเข้าไปขโมยพัลลาเดียมออกมา จากนั้นจึงเริ่มวางแผนเผด็จศึกด้วยกลศึกม้าไม้
∴ เมื่อมีการค้นพบแถบดาวเคราะห์น้อยที่อยู่ระหว่างวงโคจรของดาวอังคารและดาวพฤหัสบดี มีการตั้งชื่อดาวเคราะห์น้อยแต่ละดวงด้วยชื่อเทพเจ้ากรีก (ในขณะที่ชื่อดาวนพเคราะห์จะใช้ชื่อเทพเจ้าโรมัน) และดวงแรกๆ ที่พบ และมีขนาดใหญ่เป็นอันดับสอง ก็ได้รับการขนานนามว่า พัลลัส (Pallus) ในปี 1803 และในปีเดียวกันนั้นเอง ก็มีการค้นพบธาตุใหม่ เป็นโลหะสีขาวมันวาว ก็เลยตั้งชื่อธาตุใหม่ว่า พัลลาเดียม (Palladium) เพื่อเป็นเกียรติแก่การพบดาวเคราะห์น้อยด้วย
spartan
ว. (ความเป็นอยู่) เรียบง่าย แต่เคร่งครัด และกระเบียดกระเสียน
∵ นคร สปาร์ตา (Sparta) ของกษัตริย์ เมเนเลอัส (Menelaus) นั้น ขึ้นชื่อในด้านความเป็นอยู่ที่เข้มงวดของชาวเมือง เพื่อเตรียมพร้อมกับศึกสงครามอยู่ตลอดเวลา มีการฝึกทหารไม่ขาด กินในโรงอาหารรวม เด็กก็เติบโตในโรงเลี้ยงเด็กรวม โดยไม่มีสิ่งอำนวยความสะดวกมากมาย
∴ คำว่า spartan จึงใช้บรรยายสภาพความเป็นอยู่แบบง่ายๆ ไร้สิ่งอำนวยความสะดวก แต่เคร่งครัดในวินัยเหมือนทหาร และบางครั้งใช้เรียกความเป็นอยู่ในคอมมูนในระบบคอมมิวนิสต์ด้วย
stentorian
ว. (เสียงพูด) กัมปนาท ดังก้อง
สเตนเตอร์ (Stentor) เป็นนักรบฝ่ายกรีกในสงครามกรุงทรอยที่มีเสียงดังเทียบเท่าทหาร 50 คนรวมกัน จึงได้รับเลือกให้เป็นผู้ส่งข่าวในกองทัพ (นอกเหนือจาก แอนทิโลคัส (Antilochus) บุตรชายของเนสเตอร์ ผู้มีฝีเท้าว่องไว) ในห้วงแห่งการศึก มีครั้งหนึ่งที่ฝ่ายทรอยกำลังเป็นต่อ เนื่องจาก อารีส (Ares) เทพเจ้าแห่งสงครามมาช่วยฝ่ายทรอยรบ เทพี ฮีรา (Hera) และ อะธีนา (Athena) เห็นสถานการณ์ฝ่ายกรีกไม่ดี จึงขอราชานุญาตจาก ซูส (Zeus) ผู้เป็นใหญ่ขอลงมาช่วยฝ่ายกรีกบ้าง ซูสก็อนุญาต ฮีราได้แปลงเป็นขุนศึกสเตนเตอร์เข้ามาในสนามรบ ตะโกนปลุกความฮึกเหิมแก่ทหารกรีก ส่วนอะธีนาก็ไปช่วยไดโอมีดีสรบกับอารีส จนเทพอารีสต้องหอกไดโอมีดีสบาดเจ็บล่าถอยไป กองทหารกรีกที่ฮึดสู้ขึ้นมาจึงตีทรอยถอยร่นไป จนในที่สุด เฮกเตอร์ต้องออกมาท้าดวลกับทหารกรีกตัวต่อตัวเพื่อให้ทหารได้พัก ซึ่งคนที่ออกมาดวลกับเฮกเตอร์ก็คือ อะแจ๊กซ์ (Ajax)
∴ คำว่า stentorian จึงใช้กับเสียงพูดที่ดังก้องกังวาน สามารถได้ยินแต่ไกล
Trojan horse
น. การโจมตีจากภายในโดยหลอกล่อให้นำเข้าไปเอง
∵ หลังจากตีกรุงทรอยถึงเกือบสิบปีก็ไม่แตก ในที่สุด โอดีสซูส (Odysseus) ก็เกิดพุทธิปัญญา เสนอกลศึกม้าไม้อันลือชื่อ ด้วยการสร้างม้าไม้ขนาดใหญ่ ข้างในกลวง ภายในซ่อนทหารกรีกไว้ แล้วให้กองเรือถอยไปซ่อนตามเกาะต่างๆ วันรุ่งขึ้น ทหารทรอยเห็นบริเวณที่พักทัพกรีกเหลือแต่ชายหาดโล่งๆ เรือก็ไม่เหลือสักลำ จึงมาสำรวจ พบม้าไม้ตัวใหญ่ตั้งอยู่โดดเดี่ยว และ ไซนอน (Sinon) ทหารที่โอดีสซูสทิ้งไว้พร้อมแผนการณ์หลอกล่อ ไซนอนถูกจับเข้าไปเฝ้า พริอัม (Priam) เขาสร้างเรื่องบอกว่าขอแปรพักตร์เข้ากับฝ่ายทรอย เพราะการขโมยพัลลาเดียมทำให้อะธีนาพิโรธ และลงโทษกองทัพกรีก โดยทางเดียวที่จะชดเชยความผิดได้ คือการบูชายัญมนุษย์ และเขาก็คือผู้ถูกเลือก แต่ได้หลบหนี ทำให้อะธีนาลงโทษอีก จนทัพกรีกต้องล่าถอยกลับบ้าน แต่เพื่อให้อะธีนาคลายพิโรธ จึงได้สร้างม้าไม้ไว้ถวาย แต่ได้สร้างให้ใหญ่โตสูงกว่าประตูเมืองทรอย เพื่อไม่ให้ทรอยชักลากเข้าไปได้ เพราะมิฉะนั้น อะธีนาจะคุ้มครองฝ่ายทรอยอีก ในทางตรงข้าม ถ้าทรอยทำลายม้าไม้ ก็จะทำให้อะธีนาพิโรธฝ่ายทรอยแทน พริอัมเชื่อสนิท และสั่งทหารชักม้าไม้เข้าเมืองโดยพังประตูเมืองเสีย แม้จะมีคำทำนายของ คาสซานดรา (Cassandra) ว่าทรอยจะพินาศ และมีนักบวช เลออคโคออน (Laocoön) มาทัดทาน แต่ก็ปรากฏว่า โพไซดอน (Poseidon) ราชันย์แห่งท้องทะเลผู้เข้าข้างทัพกรีก ได้ส่งงูมารัดเลออคโคออนและลูกชายจนตาย แล้วเลื้อยหายเข้าไปในวิหารอะธีนา ยิ่งทำให้พริอัมมั่นใจที่จะชักม้าไม้เข้าเมือง และเลี้ยงฉลองชัยชนะอย่างยิ่งใหญ่ จนเมื่อตกดึก ทหารและชาวเมืองต่างหลับใหล ทหารกรีกในม้าไม้จึงทยอยออกมา ส่วนหนึ่งวิ่งไปเปิดประตูเมือง และส่งสัญญาณให้กองเรือที่เคลื่อนออกจากที่ซ่อนมารอให้เข้าตี อีกส่วนหนึ่งก็เที่ยวจุดไฟเผาเมือง ฆ่าทหารและชาวเมืองเป็นว่าเล่น ทัพกรีกชนะทรอยได้ในคืนเดียว หลังจากรบในสนามรบมาเกือบสิบปี ความห้าวหาญของขุนศึกอย่างอะคิลลีส อะแจ๊กซ์ หรือไดโอมีดีส หาสู้ลิ้นของไซนอนคนเดียวไม่
∴ การโจมตีจากภายในโดยหลอกล่อให้นำเข้าไปเองในลักษณะนี้ จึงถูกขนานนามว่า ม้าโทรจัน (Trojan horse) เช่น โปรแกรมคอมพิวเตอร์ที่โฆษณาให้เชื่อในประโยชน์ ทำให้ผู้ใช้ดาวน์โหลดลงเครื่องด้วยตัวเอง แต่เมื่อทำงานแล้ว กลับสร้างความเสียหายแก่ระบบและข้อมูล โดยอาจเปิดประตูกลไว้ให้โปรแกรมส่วนอื่นเข้าโจมตีระบบทางอื่นได้อีกด้วย

อ้างอิง:

  1. Edith Hamilton. Mythology. Mentor, Penguin Books. 1969.
  2. นายตำรา ณ เมืองใต้ แปล. อัลเฟรด เจ. เชิร์ช เล่าความ. โฮเมอร์ แต่ง. อีเลียด (ILIAD). ดอกหญ้า. 2536 (1993).
  3. William Smith. Classical Dictionary. Wordsworth. 1996.
  4. Mary Wood Cornog. Merriam Webster's Vocabulary Builder. Merriam-Webster. 1994.
  5. Webster's Encyclopedic Unabridged Dictionary of the English Language. Merriam-Webster. 1989.
  6. นพพร สุวรรณพานิช. สันติ อิศโร. พจนานุกรม อังกฤษ-ไทย ฉบับตำนานคำ. สำนักพิมพ์มูลนิธิเด็ก. 2542 (1999).

22 พฤษภาคม 2547

Bug ในฝูง

ลองเช็กดูเสียหน่อย ว่า GNOME bug ที่ไฟล์เข้าไป มีโอกาส check-in แค่ไหน โดยดูจากจำนวน bug ที่เข้าคิวอยู่:

  • Pango มี 111 bug
  • GTK+ มี 824 bug
  • gtksourceview มี 48 bug (แต่ก็เป็นโครงการขนาดเล็ก ความ active ไม่สูงมาก)

เอาน่ะ.. ยังไงก็ดีกว่า nautilus

21 พฤษภาคม 2547

ข่าวคราว

  • SCO ส่งหมายศาลถึง FSF ลามปามไปเรื่อยแฮะ
  • Andrew Tanenbaum กับกรณีเจ้าของลินุกซ์ ออกโรงเองเลยครับท่านอาจารย์ ยังไม่ได้อ่านละเอียด เห็นแว้บๆ ตอนท้ายว่าปกป้อง Linus (แม้จะไม่ชอบหน้าก็ตาม)
  • ดาวเคียงเดือนเสี้ยว คืนนี้ ดวงจันทร์เคลื่อนผ่านดาวศุกร์ จะสังเกตต้องดูตอนหัวค่ำกับเช้ามืด ตามเวลาขึ้น-ลงของดาวศุกร์ แต่ตอนที่ผ่าน สังเกตได้ทางยุโรปโน่น
  • Asteroid Eaters โครงการ MADMEN แนวคิดใหม่ในการสู้อุกกาบาตชนโลก ด้วยการใช้ฝูงหุ่นยนต์เจาะแล้วพ่นมวลสารออกไปเพื่อเปลี่ยนทิศทาง
  • SETI@home ครบ 5 ปี เมื่อวันจันทร์ (17 พ.ค.) ที่ผ่านมา

Web Usability

web page แท้ที่จริงคือหน้าเอกสารอย่างหนึ่ง บางเว็บอาจจะมีปฏิกิริยากับผู้ใช้ได้บ้าง แต่เมื่อมีการใช้เว็บกันมากๆ เข้า นักพัฒนาเว็บก็ชอบเพิ่มลูกเล่นให้กับเว็บ ในบรรดาลูกเล่นเหล่านี้ มีลักษณะที่ไม่พึงประสงค์อยู่ด้วย เลยลองรวบรวมไว้ดังนี้

  • เกี่ยวกับการใช้ script
    • ใช้ feature พิเศษของบราวเซอร์บางยี่ห้อ เช่น ใช้ VBScript ซึ่งไม่ใช่มาตรฐานอินเทอร์เน็ต ถือเป็นการกีดกันผู้ใช้บราวเซอร์อื่นออกจากเว็บของคุณเอง
    • ใช้ pull-down menu ซึ่งกว่าจะหาลิงก์ได้ครบต้องใช้เมาส์เลื่อนสำรวจ
    • ทำ animation ที่ status bar ทำให้พื้นที่ที่แสดง URL ของลิงก์หายไป
  • เกี่ยวกับการประดับประดา
    • ใช้ graphics อย่างฟุ่มเฟือย → เปลือง bandwidth คนที่เข้าเว็บผ่านโมเด็ม 56K มักไม่สามารถรอโหลดเว็บเหล่านี้จนเสร็จ
    • ใช้ blinking text หรือ animated graphics → ค่อนข้างน่ารำคาญมากกว่าน่าดู โดยเฉพาะการใช้ภาพเคลื่อนไหวแบบต่อเนื่องความละเอียดสูง ซึ่งบริโภคพลัง CPU มาก บางครั้ง เมื่อเปิดหลายๆ หน้า ถึงกับทำให้บราวเซอร์ค้างไปเลย และแน่นอน วิธีแก้ที่ง่ายที่สุดก็คือ รีบปิดเว็บที่เป็นตัวการเสีย คุณอยากให้เป็นเว็บของคุณหรือ?
    • ใช้ flash → ถ้ามันไม่ใช่สาระของเว็บจริงๆ การรอโหลด flash เกินหนึ่งนาที ก็ทำให้ผู้เยื่ยมชมถอยห่างเช่นกัน
    • ใช้ pop-up → ถือเป็นการละเมิดพื้นที่หน้าจอของผู้ใช้ และ pop-up ส่วนใหญ่จะเป็นโฆษณาที่น่ารำคาญ บริโภค bandwidth โดยใช่เหตุ บราวเซอร์หลายตัวจึงมีความสามารถให้ห้ามเปิด pop-up ได้ ดังนั้น การสื่อสารข้อความสำคัญผ่าน pop-up จึงทำให้ข้อมูลสูญหายเสมอๆ
    • มีเพลงคลอ → คล้าย pop-up ตรงที่ เวลาเปิดหลายๆ หน้า แล้วจู่ๆ มีเพลงขึ้นมา ก็ไม่รู้หรอกว่ามาจากหน้าไหน แถมยังมารบกวนดนตรีที่กำลังเปิดฟังเพลินๆ อยู่ด้วย
  • เกี่ยวกับการออกแบบ
    • ใช้ frame ครอบทับ content จริง ทำให้ URL ที่แสดงใน location bar ไม่ใช่ URL ของ content และทำให้เอา URL ไปอ้างข้างนอกลำบาก
    • fix ความกว้างของ web page ซึ่งถ้ากว้างกว่าหน้าต่างปกติ ก็ทำให้ต้อง scroll ซ้าย-ขวาไปมา เวลาอ่านขึ้นบรรทัดใหม่ และถ้าแคบกว่าหน้าต่างปกติ ก็ไม่สามารถจัดการกรณีที่ข้อความล้นคอลัมน์ได้ (blog template ของ blogger.com หลายอันเป็นอย่างนี้ ซึ่งเป็นเหตุผลที่ผมดัดแปลง template เอง)
    • ใช้ javascript แทน HTML tag ในการทำลิงก์ ทำให้ควบคุมการเปิดลิงก์ไม่ได้ (เช่น จะเปิดใน tab ใหม่ผ่าน context menu ก็ไม่ได้)
    • ลิงก์ไม่แตกต่างจากข้อความธรรมดา ส่วนหนึ่งมาจากการไม่ขีดเส้นใต้ลิงก์ หรือไปขีดเส้นใต้ข้อความธรรมดา หรือการใช้สีในข้อความปกติที่เหมือนกับสีของลิงก์ (เกี่ยวกับเรื่องนี้ Jacob Nielsen แนะนำ ว่า ไม่ควรขีดเส้นใต้ข้อความธรรมดา และควรขีดเส้นใต้ลิงก์ พร้อมทั้งใช้สีที่แตกต่างจากข้อความธรรมดาอย่างเห็นได้ชัดด้วย)

เว็บแนะนำเกี่ยวกับ web usability

  • useit.com ของ Jakob Nielsen
  • Usability.gov ของ U.S. Department of Health and Human Services ค่อนข้างจัดเนื้อหาเป็นเรื่องเป็นราว
  • Usable Web รวมเว็บเกี่ยวกับ web usability
  • Real World Style รวม CSS layout

20 พฤษภาคม 2547

Business

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

กลับมาเช็กเมล์ มีเมล์มาทักทายว่าจะเริ่มงานต่อล่ะนะ สงสัยต้องหยุด hack GNOME ไว้แค่นี้ ขอไปทำมาหารับประทานก่อน ไว้งานทางโน้นเสร็จแล้วค่อยมาทำ OpenType font ต่อ

19 พฤษภาคม 2547

Back to the Net

ไม่ได้ตามข่าว/สำรวจเน็ตเสียหลายวัน

ขนส่งมวลชน

หลังจากที่ได้บทสรุปค่อนข้างชัดเจนเรื่อง OpenType font กับ fontforge แล้ว ก็เริ่มทำใน thaifonts-scalable CVS แต่ก่อนจะเริ่มทำก็มีประเด็นให้คิด ว่าจะเก็บฟอนต์แบบเก่าไว้สำหรับระบบที่ไม่สนับสนุน OpenType ด้วยดีหรือเปล่า หรือจะเพิ่ม OpenType table ลงไปเลยโดยไม่ต้องตัดอะไรออก (เพราะ OpenType table ทำให้สามารถลด alternate glyph กลุ่มหนึ่งออกไปได้) ว่าแล้วก็เลยเขียนสรุปและ post ถามความเห็น จากกลุ่มก่อน

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

อ.นิธิ ก็มาย้ำอีก ว่าถ้าจะแก้ปัญหาจราจร ต้องไม่ใช่แก้ด้วยเทคโนโลยี เช่น ตัดถนน ทำสะพานข้ามแยก เจาะอุโมงค์ ฯลฯ แต่ควรแก้ที่ต้นเหตุ คือวัฒนธรรมการใช้รถยนต์ส่วนบุคคล ซึ่งตรงนี้ ปล่อยให้แต่ละคนคิดอ่านกันเองไม่ได้ เพราะมันเป็นงูกินหาง รถเมล์น้อย คนก็ซื้อรถ เพิ่มรถเมล์ ถนนก็ยิ่งแน่น คนก็ซื้อรถ ทำยังไงก็จะซื้อรถว่างั้นเหอะ แต่ต้องมีมาตรการลงมาเลย ว่าห้ามให้รถยนต์ส่วนบุคคลเข้ามาในกรุงเทพฯ ในช่วง ๐๖.๐๐ - ๑๘.๐๐ น. แล้วถนนก็จะโล่งขึ้น พอให้รถเมล์ได้รับส่งคนอย่างมีประสิทธิภาพ รถแท็กซี่ก็บริการผู้โดยสารที่ไม่อยากขึ้นรถเมล์ได้รวดเร็วขึ้น ไม่ต้องติดแยกไฟแดงนานๆ ให้มิเตอร์วิ่งเล่น อากาศดีขึ้น คนที่เดินได้ก็อยากเดินมากขึ้น ทุกคนแฮปปี้ (ผมนึกภาพถึงถนนในกรุงเทพฯ ช่วงวันสงกรานต์ออกเลยอะ)

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

18 พฤษภาคม 2547

OTF Revisited

อ่านอิเลียดรอบสองจบจนได้ มันพะย่ะค่ะ ฝากโอดีสซีย์ไว้ก่อนเถอะ รวมทั้งหนังสือเกี่ยวกับกรีกบนชั้นหนังสืออีก ยังเสียดายอยู่เนี่ย ว่าตอนไปประชุมที่กรีซคราวที่แล้ว มีเวลาเที่ยวน้อยไปหน่อย แถมลุยเองแบบไม่มีไกด์ด้วย แต่ได้เดิน Acropolis ก็ถือว่าคุ้ม จำได้ว่า ตอนลงมาซื้อเสื้อข้างล่าง คนขายพูดภาษาอังกฤษไม่คล่อง แต่เสื้อสวย เลยพยายามถามเขาว่า ไอ้ที่เขียนที่อกเสื้อว่า Ομερος น่ะ หมายถึงอะไร เขาก็พูดได้แค่บางคำว่า เฟมัส เฟมัส อ๋อ มีชื่อเสียง แล้วก็บอกว่า โอดีสซีย์ แล้วเอามือปิดตา แล้วก็ทำท่าเขียนยิกๆ ที่ฝ่ามือ ฟังไปฟังมาค่อยเริ่มเก็ต ว่าก็คือ Homers นั่นแล (เสียงสระของภาษากรีกมีหลายคำขึ้นต้นด้วยเสียง H เช่น Ελλας ก็คือ Hellas ชื่อประเทศเขา) อืมม์..

แล้วก็กลับมาดูเรื่องฟอนต์ต่อ คราวนี้ลองแกะไฟล์ .ttx ที่ดัมพ์มาจาก OTF ด้วย fonttools/ttx บวกกับลองแก้ ttx เล่นๆ ไปมา ก็เริ่มเข้าใจว่า คำว่า “feature” ใน OpenType ที่แท้มันก็เป็นแค่ป้ายฉลาก ไม่ควรไปซีเรียสกับมันเกินเหตุ ตราบใดที่มันสามารถชี้ไปยัง lookup table ได้ก็เป็นใช้ได้ ว่าแล้วก็เลยเปิด fontforge มาแก้ฟอนต์ โดยแทน 'calt' ด้วย 'ccmp' ด้วยการคีย์ลงไปตรงๆ → segfault ก๊าก T_T เลยใช้ editor ที่เก่งที่สุดในโลก™ (vim) เข้าไปแก้ .sfd เอาเอง แล้วเข้า fontforge ใหม่ gen OTF ออกมา จากนั้น ลองแก้ Pango ใหม่ ไม่ให้อ่าน 'calt' (ให้เหมือนกับ Uniscribe) ทดลองเปรียบเทียบระหว่างฟอนต์เก่าที่ใช้ 'calt' กับฟอนต์ใหม่ที่ทับด้วย 'ccmp' แล้ว ปรากฏว่าฟอนต์เก่าใช้ไม่ได้ แต่ฟอนต์ใหม่ใช้ได้ → สรุปว่าได้ทางออกที่ทำให้ฟอนต์ OpenType ใช้งานได้ทั้งกับ Pango และ Uniscribe แล้ว ด้วยการข่มขืน fontforge เย่!! ☺

ปัญหาที่ยังเหลืออยู่ ก็คือกรณี “ป่ำ” ที่ fontforge gen GPOS class ของนิคหิตให้ไม่ครบ ทำให้วรรณยุกต์ไม่เลื่อนตามนิคหิตไป อันนี้ถ้าจะแก้แบบ manual ด้วย fonttools/ttx ก็พอได้อยู่ แต่จะให้เข้าระบบ build อัตโนมัตินี่ ต้องคิดหนัก ไม่แก้ fontforge คงไม่ได้แล้ว

อ๋า.. อ่าน blog อ.กิตติ์ เกี่ยวกับ swsusp แล้ว พอเข้าใจสถานการณ์ละ ต้องขอบคุณหลายๆ ครับ

17 พฤษภาคม 2547

Troy Fever

พิษจากหนังเรื่อง Troy ทำให้วันนี้ไม่เป็นอันทำอะไร ไปรื้อ Iliad มาอ่านอีกรอบ ประกอบกับ Mythology ของ Edith Hamilton โอ้ย.. ปารีสไม่ได้โดนไดโอมีดีสฆ่านี่หว่า แต่โดนศรเฮอร์คิวลีสที่ยิงโดย ฟิลอคทีทีส (Philoctetes) ที่ขุนพลกรีกไปพาตัวมาตามคำทำนายที่คาดคั้นเอาจาก เฮเลนัส (Helenus) ต่างหาก เฮะๆ ไม่ได้ตะลุยอ่านจนตาแฉะแบบนี้นานแล้ว รู้สึกดีเหมือนกัน

ลองอ่านๆ เฉลิมไทยดู ว่าใครวิจารณ์ Troy ยังไงมั่ง จนไปเจอกระทู้เด็ด: เทพนิยายประกอบภาพ TROY จาก Iliad และ Odyssey โดยคุณ คลื่นแทรก โหะๆๆ นับถือๆ ข้อมูลที่ได้นี่เทียบเท่ากับอ่าน Mythology หลายฉบับประกอบกันเชียวนะนั่น

Troy

คำเตือน: อย่าเพิ่งอ่านถ้าคุณเข้ามาเห็นโดยที่ยังไม่ได้ดูเรื่อง Troy ถ้าไม่อยากเสียอรรถรสของหนัง

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

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

เรื่องของการเปลี่ยนเนื้อเรื่อง อย่างแรกคงเป็นการรวบรัดสงครามที่ยาวนานเกือบสิบปีให้เหลือประมาณไม่กี่เดือน โดยไม่ได้เท้าความ แต่ที่ตกใจมากคือ ให้ เมเนเลอัส (Menelaus) ตายตั้งแต่ต้นเรื่อง อ้าว.. แล้วอย่างงี้ ใน Odyssey จะให้ เทเลมาคัส (Telemachus) ไปถามข่าวพ่อกับใครละเนี่ย เรื่องนี้นับว่าพลิกบทอย่างร้ายแรง อาจจะเพื่อเน้นความบ้าอำนาจของอะกาเมมน็อน ว่าที่รบๆ เนี่ย ไม่ใช่เพื่อชิงเฮเลนคืนอีกต่อไป แถมยังย้ำโดยให้เฮกเตอร์เตือนเฮเลนตอนพยายามหนีอีกด้วย ความจริง ฉากต่อสู้ระหว่างปารีสกับเมเนเลอัส ถ้าจะมีการเปลี่ยนก็พอนึกได้อยู่ เพราะใน Iliad ฉากนี้มีเทพเจ้าเข้ามาแทรกแซงถึงสององค์ คือ อะโฟรไดตี (Aphrodite) กับ อะธีนา (Athena) และคนที่ทำร้ายเมเนเลอัสก็ไม่ใช่เฮกเตอร์ด้วย แต่ถ้าจะเอาตามนั้น เรื่องจะซับซ้อนเกินไป แต่ถึงกับแก้ให้เมเนเลอัสตายเนี่ย น่าตกใจมาก

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

ส่วน อะกาเมมน็อน (Agamemnon) ก็ให้ถูกฆ่าตอนท้ายเรื่อง ทั้งๆ ที่ต้องมีชีวิตรอดกลับไปอย่างผู้ชนะ

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

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

ทำไมน้อ.. สงครามมหากาพย์อันลือลั่นทั้งหลาย ไม่ว่าจะเป็นสงครามกรุงทรอย มหาภารตะ รามายณะ ล้วนแล้วแต่มีอิสตรีเป็นชนวนทั้งสิ้น

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

16 พฤษภาคม 2547

แมงกับแมลง

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

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

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

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

หึๆ อาจจะเชื่อมโยงไปถึงเรื่องที่นักชีววิทยาออกมาบอกสื่อให้เรียก ปลาวาฬ ว่า วาฬ เรียก ปลาหมึก ว่า หมึก ได้ด้วยนะ ☺

15 พฤษภาคม 2547

สรุป GNOME Bug

file และ follow up GNOME bug ไปเยอะๆ แล้ว ชักอยากสรุปไว้ให้เป็นเรื่องๆ หน่อย จะได้ติดตามได้ง่าย

14 พฤษภาคม 2547

Pango OT Revisited

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

ค่อยๆ ติดเครื่องด้วยการเปิดเพลงฟังเล่นด้วย VLC แบบจริงๆ จังๆ โดยลองโหลด play list แบบผสม ogg, wma file แล้วก็ audio CD (ความจริงจะเล่น video clip สลับฉากด้วยก็ได้ แต่แค่อยากจะฟังเพลงคลอเฉยๆ) โหะๆๆ สมควรแล้ว ที่เคยได้ opensource award เล่นทุกอย่างได้ในหนึ่งเดียว ไม่ต้องแยก mp3, VCD, audio เป็นคนละ application นี่ยังรับทีวีดาวเทียม, กระจายเสียงทางเน็ตได้ด้วย ไว้วันหลังค่อยลองกระจายเสียงผ่าน Wi-Fi ดู

VLC screenshot

ว่าแล้วก็กลับมาหา Pango OT ที่ ยังไม่สมบูรณ์ คราวนี้ลองตั้งข้อหากับ Pango ดู เพราะใช้ fonttools/ttx dump OpenType table ออกมาดูแล้ว ก็เรียบร้อยดี ใช้เวลาช่วงเย็นแกะไปแกะมา dump โน่น dump นี่ จนพบว่า โหะๆ OTL layer ของ Pango มันคำนวณ coordinate แบบโตขึ้นทางบนขวา แต่ PangoGlyphGeometry มันใช้ screen corrdinate ซึ่งโตลงล่างขวา ตอนที่ generate glyph string ก็เลยจัดการกลับเครื่องหมาย (ตาม patch) แล้ว file GNOME Bug #142544 ..เอาน่ะ คิดว่าแก้ถูกจุดแล้วหละ ☺

Gedit screenshot

13 พฤษภาคม 2547

eXtensible Programming

เดี๋ยวนี้ อะไรๆ ก็ XML จริงๆ แฮะ มีแม้กระทั่งจะใช้ XML เก็บซอร์สโค้ดแทน plain text ดังที่เสนอในบทความ Extensible Programming for the 21st Century ซึ่งเสนอแนวคิดของการสร้างโปรแกรมในยุคใหม่ ว่าจะไม่ใช่การกำหนด syntax และ library มาตรฐานอีกต่อไป แต่จะให้ไวยากรณ์ extensible เหมือน XML และใช้ active framework แทน passive library

บทความเริ่มจากกล่าวถึงระบบการเขียนโปรแกรมที่ยืนยงคงกระพันที่สุด คือยูนิกซ์ ซึ่งอาศัยโปรแกรมเล็กๆ หลายโปรแกรมทำงานร่วมกัน แทนที่จะเป็นโปรแกรมใหญ่โปรแกรมเดียว โดยมีรูปแบบง่ายๆ ของการส่งข้อมูลระหว่างกันด้วย text stream แต่แล้ว ก็มีระบบใหม่ที่จัดการปัญหาได้ยืดหยุ่นและมีประสิทธิภาพไม่แพ้กัน คือ Component Object Model (COM) ซึ่งสามารถส่งข้อมูลโครงสร้างได้โดยตรง และสามารถใช้องค์ประกอบเล็กๆ ทำงานร่วมกันได้ และโปรแกรมในยุคหน้าจะใช้ Framework ในการประสานงานระหว่าง component ต่างๆ เหล่านี้ แทนการสร้าง library function ให้เรียกใช้อย่างเดียว

นอกจากนี้ การขยาย syntax ด้วย preprocessor ที่เคยใช้ใน C/C++ จะกลายมาเป็นการขยายขอบเขตตามแบบของ XML ทำให้ใครๆ ก็สามารถกำหนดโครงสร้างของภาษาเพิ่มเติมเองได้ แทนที่จะให้อยู่ในมือของคณะกรรมการกลุ่มเดียว และมีสมมติฐานว่า ระบบตลาดเสรีจะทำให้โครงสร้างภาษาที่ได้รับการยอมรับแล้วเท่านั้น ที่คงอยู่

การแทนโปรแกรมด้วย XML ยังหมายถึงการกำหนดโปรแกรมด้วย โครงสร้าง ของโปรแกรมจริงๆ โดยไม่ขึ้นกับไวยากรณ์ของภาษาที่ใช้ ว่าจะเป็นวงเล็บปีกกาแบบ C หรือวงเล็บแบบ LISP ทั้งนี้สามารถใช้ XSL stylesheet แปลงให้เป็นซอร์สโค้ดในภาษาที่ต้องการได้ และเครื่องมือเขียนโปรแกรมพื้นฐาน จะกลายเป็น XML editor แทน text editor โดยมีการ integrate เข้ากับระบบการพัฒนาทั้งหมดแบบ IDE ที่มีทั้ง editor, compiler, debugger ซึ่งนักพัฒนาสามารถเพิ่มโมดูลย่อยเข้าไปได้เรื่อยๆ เหมือนกับที่สามารถเขียน macro ใน text editor ได้ นอกจากนี้ การใช้ XML ยังช่วยให้สามารถเพิ่ม document หรือ diagram แบบ SVG เข้าไปในโปรแกรมได้เลย โดยไม่กระทบกับตัวโปรแกรม ซึ่งเท่ากับทำให้แนวคิดเรื่อง literature programming ของ Knuth เป็นจริงด้วย

ว้าว! ฟังดูหรูจัง แต่กว่าจะไปถึงตรงนั้นได้ คงต้องฝ่าด่านต่างๆ อีกมากมาย ซึ่งที่ท้ายบทความก็ได้เตรียมคำตอบไว้แล้ว (ลองเช็กดูก็ได้ ว่าคำถามของคุณจะถูกตอบแล้วหรือยัง)

กึ๋ย.. อ่านแล้วก็เลยเกิดความคิดที่จะลองใช้ Conglomerate ดูบ้าง หลังจากที่ผัดผ่อนมาเรื่อย ว่าข้ายังมี vi อยู่ว่ะ ☺

12 พฤษภาคม 2547

สิ่งที่ชอบ-สิ่งที่ควร

อ่าน blog ของ Mk เรื่องสายวิทย์-สายศิลป์แล้ว เลยเกิดแรงบันดาลใจอยากเขียนเกี่ยวกับสิ่งที่ชอบ-สิ่งที่ควรทำ ในมุมมองของผมเอง

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

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

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

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

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

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

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

11 พฤษภาคม 2547

Linux Empowerment

เมื่อวานไปเสวนาที่งาน Linux Empowerment เพิ่งได้รู้จักคุณมิตรที่เป็นเจ้าของลิเบอร์ตา อีกคนคือตัวแทนจาก Quick Linux ที่เหลือเป็นหน้าเก่าที่เคยพบมาแล้ว ไม่ว่าจะเป็นคุณไพฑูรย์จาก GrandLinux, คุณประคัลภ์จาก Ice Solution (คนนี้เพิ่งได้พบเป็นครั้งที่สอง) แล้วก็กำธรเจ้าเก่า แต่ที่น่าสนใจกว่า คือได้พบคนอื่นๆ ในงาน เจอลุงอิดแล้วนึกถึง The Passion of the Christ เจอโต้ง คุณโด่งอ่ะ (คนนี้คิดถึงมาก ไม่เจอกันนานเชียว ทั้งตัวจริงและบนเน็ต) คุณทัชชี่ (นี่ก็ได้คุยเรื่องฟอนต์สนุกสนาน) คุณณุ (ยังคงละเลง GIMP และ multimedia ต่อ เลยเสนอว่า ครั้งหน้าน่าจะมี multimedia session ด้วย) คุณชาญวิทย์ (ลาออกจาก GrandLinux แล้ว) ก๊วนคุณหน่อย sf_alpha คุณอาคม กับซุ้ม Linux Clinic (อันนี้ได้ชักชวนผมมาแจม แต่รู้สึกผิดเหมือนกันที่เบี้ยว แฮะๆ) เจอคุณเชษฐ์ ลิเบอร์ตาด้วย (เห็นพี่โดมพูดถึงบ่อยๆ เพิ่งเจอตัวจริง) แวะคุยกับคุณกานต์อีกนิดนึง แล้วก็มาที่ซุ้มทะเล เห็นตั้งจอฉายหนังครึกครื้นเชียว พอเข้ามาในห้องประชุม เจอมาร์คเข้ามารายงานตัว (เขาว่าอย่างนั้นจริงๆ) แต่ที่เซอร์ไพรส์คือเจอไอ้บัติ วิศวคอมพ์ จุฬาฯ โหะๆๆ เคยเจอเพื่อนร่วมรุ่นในงานลินุกซ์บ้างเหมือนกัน แต่ก็ไม่ได้เจอนานแล้ว

ตอนค่ำ หลังเลิกงาน มีประชุมแบบไม่เป็นทางการต่อ คุณบุญเลิศชวนตัวแทนแอปเปิลสิงคโปร์มาแจมด้วย ก็เล่าถึงโครงการโอเพนซอร์สของแอปเปิล ว่าใช้ไลเซนส์แบบ Artistic เป็นหลัก เพื่อรับ contribution แล้วเขาก็ถามไถ่ถึงสภาพตลาดลินุกซ์ไทย กิจกรรมการ localize (แต่ พอ อ.วิรัช แปลเป็นไทย ทำไมคำถามมันไกลกว่าเดิมหว่า..) แล้วก็ถามถึง LUG พอแกไป ก็เลยกลายเป็นประเด็นแรกที่ค้างให้คุยกันต่อ แต่ก็ไม่ได้พูดถึงแนวโน้มของ TLUG มาก (อาจให้เป็นการบ้านของเนคเทค) แล้วก็ย้ายมาพูดเรื่องสิ่งที่ลินุกซ์เดสก์ทอปขาดอยู่ คุณอาคมเสนอว่า backoffice เป็นสิ่งที่ควรมี ถ้าจะให้คนใช้ลินุกซ์จริงจัง แล้วก็มาถึงการพัฒนา database application มีทั้งคนใช้ MySQL และ PostgreSQL เลยถกกันเล็กน้อย ผมเลยเสนอเครื่องมือพัฒนา front end สองตัว คือ gnome-db และ rekall (พอดีนึกออกแค่นั้น)

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

คุณทัชชี่ยกเรื่องฟอนต์ขึ้นมาถก ว่าคุณภาพของ hint ยังแย่อยู่ และพูดถึง VTT ของไมโครซอฟท์ (อันนี้รู้จักนานแล้ว แต่ปัญหาคือมันต้อง register และใช้ได้บน Windows เท่านั้น) และพูดถึงปัญหาเรื่องฟอนต์บน gedit อีกนิดหน่อย

แล้วกำธรก็เล่าเรื่องงานแปลที่ opentle ทำอยู่ พูดถึง web interface ที่ อ.กิตติ์ พัฒนาขึ้น และเชิญชวนให้มาร่วมกันแปล โดยอาจชักชวนคุณโด่งอ่ะมาร่วมด้วย จะได้แลกเปลี่ยนทรัพยากรกันระหว่าง GNOME และ KDE

น่าจะครบนะ นี่เขียนจากความทรงจำ พอดีไม่ได้บันทึกไว้ (เห็นกำธรจดยิกๆ อยู่ ไม่รู้จะเอาลง blog หรือเปล่า) จากนั้น ก็แยกย้ายกันกลับบ้าน

กลับมา ว่าจะมาเขียน blog แต่เน็ต totonline โทรติดยากชะมัด busy ตลอด แล้วก็หลุดง่ายชะมัด เลยไม่ได้บันทึก

10 พฤษภาคม 2547

Wiki

วันนี้ได้รู้จัก Wiki เพิ่มอีกสองแห่งที่น่าสนใจสำหรับนักพัฒนา

  • WikiLearn สำหรับการเรียนรู้ FOSS programming เริ่มมีเนื้อหาเยอะบ้างแล้ว มีการเจาะโครงการเป็นตัวๆ เลยด้วย
  • XFree86 Wiki ของทีม XFree86 เอง

Blogger interface ใหม่

โหะๆ ว่าจะบ่นอยู่หลายวันแล้ว กับ usability ของ blogger.com interface เกลียดมากคือหน้าแรกที่มีสามคอลัมน์ โดยช่องล็อกอินอยู่ขวาสุด ต้องรอโหลดข่าวของพี่ท่านให้เสร็จหมดก่อน น้องถึงจะเริ่มล็อกอินได้ เปลือง bandwidth ใช่ย่อย รวมไปถึงหน้าเลือก blog ก็เหมือนกัน อยู่ขวาสุดหมด

เหมือนรู้ใจ วันนี้เข้ามา เจอ interface ใหม่ ย้ายช่องล็อกอินไปไว้ข้างบน แถมเข้ามาปุ๊บ สามารถ post blog ได้ในหน้าถัดมาเลย แถมสั่ง publish ได้ทันทีโดยไม่ต้อง preview อีก ถูกใจ๊ถูกใจ ☺

Blogger.com staffs, I love the usability of the new interface so much. Thanks for the great work. ☺

09 พฤษภาคม 2547

C99

พอดีดูดบทความเรื่อง C99 จาก IBM developerWorks ลงปาล์มไว้ เพิ่งได้เอามาอ่าน ก็รีวิวสิ่งที่ ISO C ได้กำหนดเพิ่มเติมจาก ANSI C ที่เคยใช้กันพอควร โดยดึงเอาฟีเจอร์หลายๆ อย่างมาจาก C++ แต่หลายอย่างที่เพิ่มเข้ามาอีก ก็ทำให้ C99 นี้ ไม่ compat กับ C++ อีกต่อไป

สิ่งที่เพิ่มขึ้นมา เช่น

  • C++ comment โดยใช้ //
  • การประกาศตัวแปรปนกับโค้ดได้แบบ C++
  • for loop ที่ประกาศตัวแปรได้:
        for (int i = 0; i < 10; i++)
          ...
    
  • variable length array สำหรับตัวแปรแบบ auto สามารถใช้ตัวแปรกำหนดขนาด array ได้
  • structure with flexible array: ประกาศ struct ที่มี array ไม่ระบุขนาดได้ ใช้กับการ allocate struct แบบ dynamic (โดย array ต้องเป็น member สุดท้ายเท่านั้น)
        struct flex {
          size_t len;
          unsigned char data[];
        };
    
        struct flex *p = malloc (sizeof (flex) + 100);
        flex.len = 100;
        unsigned char c = flex.data[99]; // OK
    
  • designated initializer
        struct xyz { int a; int b; int c[99]; };
    
        struct xyz x = { .b = 99, .a = -99 };  // c[] are zero-filled
        struct xyz y = { .b = 99 };  // a, c[] are zero-filled
        struct xyz z[20] = { [3].a = 99, [3].c[2] = 88; };
    
  • compound literal แนวคิดคล้าย intermediate object ของ C++
        int *p = (int []) { 1, 2 };  // p points to unnamed array of int[2]
        int *q = (int []) { 1, foo() };  // OK
        select (0, 0, 0, 0, & (struct timeval) { .tv_usec = n });
    
  • ชนิด _Bool เป็น boolean type มีค่า 1 (จริง) และ 0 (เท็จ) และมี <stdbool.h> heeader ที่กำหนดชนิด bool มีค่าเป็น true และ false เหมือน C++ ด้วย
  • ตัวแปรชนิด long long และตัวแปร integer แบบกำหนดขนาดตายตัว (int32_t, int_least8_t)
  • inline function!
  • __func__ macro แทนชื่อฟังก์ชันปัจจุบัน ช่วยในการ debug นอกเหนือจาก __FILE__ และ __LINE__
  • ฯลฯ

ปัจจุบันมีคอมไพเลอร์หลายตัวสนับสนุน C99 กันแล้ว (ความจริงแล้ว หลายอย่างใน C99 ก็มาจาก extension ของคอมไพเลอร์ทั้งหลายนั่นแหละ) รวมทั้ง gcc ด้วย แต่ดูเหมือนยังไม่ครบ จึงขึ้นอยู่กับวิจารณญาณของนักพัฒนา ว่าจะเลือกใช้ฟีเจอร์ใหม่เพื่อความชัดเจนของโค้ด แลกกับ portability ที่เสียไปหรือไม่

ลิงก์ที่น่าสนใจ

08 พฤษภาคม 2547

Readings & News

  • อ่าน Cairo Tutorial [PDF] แล้ว น้ำตาไหลพราก T_T นึกถึงวันเก่าๆ ที่เคยสนุกสนานกับ CG (computer graphics, computational geometry) ก่อนจับพลัดจับผลูมาทำภาษาไทย (senior project ใช้ Minkowski sum ด้วย)
  • Fontconfig and Fixed Sized Fonts fontconfig ก็รู้จัก unscalable นะ สิบอกให้ (พอดีคุณวีร์ถามเรื่องนี้เมื่อวันก่อน)
  • Fancy unicode symbols made easy ของเล่นใหม่ กับ GNOME charpick applet มีลิงก์ไปยังบทความที่น่าสนใจด้วย
  • Longhorn to Mozilla: Can't We All Get Along? MS แอบตีท้ายครัวเฉยเลย แต่คิดว่าคงเป็นผลดีต่อ Mozilla ในส่วนสำหรับ Windows platform?

07 พฤษภาคม 2547

ลินุกซ์วันนี้

  • A first look at Progeny Debian 2.0 รีวิว componentized Linux ครับ มาดู Debian sarge ที่ใช้ Anaconda เป็นตัวติดตั้งกัน (รีวิวแต่ตัวติดตั้งจริงๆ เรื่องแนวคิด conponentization ให้ไป อ่านเอาเอง) :-P
  • Open source group says monoculture breeds worms อีกเสียงหนึ่งที่ยืนยันว่า ความหลากหลายทำให้อยู่รอด หลังจากที่กลุ่มของ Dan Geer เคย นำเสนอ ไปแล้วเมื่อปีก่อน โดยเปรียบเทียบกับความหลากหลายทางชีวภาพ จนโดนไล่ออกจาก @Stake โทษฐานนำเสนอสิ่งที่กระทบกระเทือน Microsoft ที่เป็นพันธมิตร อีกเสียงหนึ่งที่ออกมาเสริมกันคือ Gartner บอกว่า Worms Jack Up the Total Cost of Windows ออกมาชนแคมเปญ TCO ของ MS โดยเฉพาะ
  • บันทึก XDevConf อีกวันหนึ่ง มีความเห็นที่น่าสนใจเกี่ยวกับ Cairo และมุมมองของ Owen Taylor ในฐานะผู้พัฒนา toolkit

วันสุก

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

กำลังจะไปสั่งก็มีอีกปัจจัยหนึ่งเข้ามา คือระหว่างคุยกับร้านแรก ก็มีโทรศัพท์จากงาน Linux Empowering เข้ามา บอกว่าจะขอยืนยันการเข้าร่วมบรรยายอีกครั้ง เมื่อวานเย็นๆ เจ้าหน้าที่คนเดียวกันได้โทรมาแล้วครั้งหนึ่งเพื่อ "คอนเฟิร์ม" ทำเอางง เพราะไม่เคยติดต่อมาก่อน แต่มาขอยืนยัน ผมเลยขอรายละเอียดของ session เพิ่มเติม ซึ่งเจ้าหน้าที่ก็รับปากว่าจะเมลมาให้ แต่จนแล้วจนรอดก็ไม่มีเมลมา นี่โทรมาขอยืนยันคำตอบอีกครั้ง ก็เลยตอบไปว่า คงไปได้มังครับ โดยลืมไปว่า งานจะเริ่มอีกสองวันนี่แล้ว ยังไม่ได้ซื้อตั๋วรถทัวร์เลย แถมเสาร์-อาทิตย์ คนเดินทางเยอะด้วย เที่ยวรถส่วนใหญ่จะเต็มถ้าไม่ได้จองล่วงหน้า เรื่องที่จะพูดก็ยังไม่เตรียม ก็เลยพยายามติดต่อขอยกเลิก แต่เขาก็ยืนยันว่ายกเลิกไม่ได้ เพราะได้แจ้งวิทยากรท่านอื่นไปแล้ว แต่เสนอให้ขึ้นเครื่องมาเลย โดยทางผู้จัดงานจะออกค่าตั๋วเครื่องบินให้ อะ.. เอาก็เอา.. อิดออดมากเดี๋ยวโดนหาว่าไม่ให้ความร่วมมือ มีเวลาอีกสองวันนั่งคิดเนื้อหา ส่วนเรื่องสั่งปั๊มลมก็เลื่อนไปก่อน ไว้กลับมาค่อยจัดการต่อ.. ไปจองตั๋วเครื่องบินปรากฏว่าวันอาทิตย์เต็มแล้วทุกเที่ยวบิน ต้องเลื่อนมาเป็นวันเสาร์แทน.. สุกอีกเรื่องครับ.. สุกเอาเผากิน -_-!

ส่วนเรื่องงาน วันนี้ลอง checkout + compile mensis ปรากฏว่ายังขาดอีกเยอะ กว่าจะใช้งานได้ หลายตารางยัง hex dump อยู่เลย สรุปว่าคงข้ามตัวนี้ไปก่อน ไปลอง fonttools/ttx แทน สำหรับวันนี้สรุปว่าวุ่นวายกับเรื่องอื่นจนไม่ได้งานอะไรมาก

06 พฤษภาคม 2547

มะม่วงหาว

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

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

ความที่นอนหลับๆ ตื่นๆ มาหลายคืน ก็เลยรู้สึกอ่อนเพลีย วันนี้ครึ่งเช้าเลยแวะงีบพักก่อน พอให้หายมึนหัว ลุกมาหาอะไรรองท้อง

  • กลับมาดู bug เรื่อง undo ใน gedit ที่เจอเมื่อวันก่อน อันเป็นผลมาจาก backspace patch ไล่โค้ด GtkSourceView แล้ว พบว่า undo manager ของ text insertion มัน strict ความยาว string เกินเหตุ เลยไม่ยอมสร้าง undo record สำหรับ text ที่ส่งไปให้ คิดไปคิดมา จะแก้ patch เราก็ได้ แต่คิดว่ามันน่าเป็นความผิดของ GtkSourceView มากกว่า --> file GNOME Bug #141993
  • พยายามหาสาเหตุการวางสระอุผิดที่ใต้ ฎ ต่อ ว่าผิดที่ font หรือ pango/freetype หลังจากไล่โค้ด pango ดูก็ไม่เห็นอะไรผิดปกติ เลยมุ่งมาดูที่ฟอนต์อีกครั้ง
  • พบเครื่องมือ edit opentype table: FontTools/TTX และ Mensis ซึ่งตัวหลังนี่เป็น companion ของ FontForge.. แหม อยากได้ debian package จัง :-D (fonttools มีแล้ว)
  • มีคำตอบจาก Owen ให้ commit patch ใน GNOME Bug #141931 (pango_break) ได้ --> commit และ close bug

05 พฤษภาคม 2547

ข่าวคราว

  • Revealed: how Fedora and the community interact จาก LWN อ่านแล้วก๊าก.. แต่ชักเป็นห่วง TLE/TLC ที่กำลังจะเปิดอยู่เหมือนกัน ถ้าจะให้เดา สถานการณ์คงไม่ต่างกันมาก กับองค์กรขนาดใหญ่ที่มีหลายฝ่าย
  • What should LUGs do? จาก NewsForge ไม่ได้อธิบาย แต่จุดประกาย
  • magic bike :: wireless internet "I am like the ice cream man, but with no music and I deliver free wireless access and not ice cream." - Yury Gitman ว้าว ดูหลักการแล้วเป็นไปได้เลย นึกภาพแก๊งจักรยาน กระจายตัวไปในเมือง ส่งต่อ packet กันเป็นทอดๆ จนถึงแหล่งที่ไม่มีเน็ตหรือโทรศัพท์ใช้ (ที่มา: /.)
  • City-Sized Asteroid to Pass Earth this Fall อุกกาบาต Toutatis จะเข้ามาเฉียดโลกในระยะใกล้จนสังเกตได้ด้วยตาเปล่า (เขาย้ำว่าไม่ชนโลกจ้ะ) ปลายกันยานี้ มีข่าวที่ /. ด้วย

Connection Established

วันนี้อุทิศให้กับ pango หลังจากค้างคาใจเรื่องที่ pango-libthai shape engine ทำงานได้ แต่ language engine ทำงานไม่ได้ แถมทำให้โปรแกรมหลายตัว crash โดยเฉพาะวันนี้ทำให้ login เข้า gnome session ไม่ได้เลย ต้องไป disable pango-libthai ทิ้งถึงจะได้ เลยตั้งใจว่า ต้องหา bug ให้เจอให้ได้

หลังจากตรวจตราดูจนแน่ใจ ว่าไม่ได้โค้ดอะไรเฟอะฟะ โดยเปรียบเทียบกับ shape engine ไปด้วย ก็ลงมือ debug ด้วยวิธีที่สะดวกที่สุด คือ printf ยังไงก็ไม่มีไอเดียว่าผิดตรงไหน เลยลงมือไล่ pango อืมม์.. auto bi-di ในเวอร์ชันนี้ ทำให้โค้ดดูแปลกตาไปพอสมควร บวกกับวิธีจัดการ module ใหม่ด้วย ไล่ไปไล่มาจนพบว่าค่า pointer to function script_shape() มันมั่ว แต่ก็นั่งเดาอยู่นาน กว่าจะสังเกตได้ว่า มันเรียก macro เพื่อ cast type ผิดตัว! โย่วๆ ในที่สุดก็เจอซะที พอแก้เสร็จ build ใหม่ ทุกอย่างราบรื่น!

file GNOME Bug #141931 แล้วก็มานั่งคิดว่า นี่จนป่านนี้ bug นี้มันหลุดรอดสายตามาได้ยังไง แสดงว่า ไม่มีใครทำ pango language engine อีกแล้วนอกจากภาษาไทยเลยหรือไง ฮือๆ เดียวดายยิ่งนัก

04 พฤษภาคม 2547

ที่เห็นและเป็นไป

  • GTK+ 2.4.1 และ GLib 2.4.1 ออกแล้ว แก้ไขเพิ่มเติมใน GtkFileChooser, GtkComboBox, GtkEntryCompletion เป็นส่วนมาก สำหรับภาษาไทย รุ่นนี้เชื่อมต่อกับ XIM เพื่อตรวจแก้ลำดับการคีย์แล้ว
  • Xtreme Programming and Open Source Software Development เปรียบเทียบสอง approach
  • คืนนี้จะมีจันทรุปราคาเต็มดวง สามารถมองเห็นได้ที่ประเทศไทย ถ้าท้องฟ้าปลอดโปร่ง เมื่อกี้ออกไปแหงนดูฟ้า เมฆหนาทึบไปหมด -_-! สงสัยมีเมฆุปราคาอีกชั้น :-P

แอบไปเห็น blog ของ Tony จากลิงก์ใน blog อ.กิตติ์ ขอต้อนรับสมาชิกใหม่ :-) ส่วนของ neverblog นี่ผมยังโหลดไม่ได้อยู่ดี -_-!

Reconnection

ระหว่างที่รอ patch check-in ก็มาเชื่อม pango-libthai ใหม่อีกครั้ง กับ API ที่เปลี่ยนไป

  • แวะดู patch คุณวีร์ที่เสนอเข้ามาเรื่อง word break ด้วย trie ใน libthai, คอมเมนต์ผ่าน irc
  • tag pango-libthai CVS เพื่อแตก branch pango-1-2-branch และเริ่มทำ module ตาม API ใหม่ใน HEAD
  • Shaper:
    • รวบ libthai-xft, libthai-ft2 เข้าเป็น libthai-fc
    • ตัด libthai-x และ XTIS font support ออกจากกองมรดก (ตาม pango mainstream)
    • เขียน module entry ใหม่ ตาม API ใหม่
  • Language Engine:
    • logic เดิม เขียนแต่ module entry ใหม่ ตาม API ใหม่
  • ผล: Shaper ผ่านแล้ว แต่ LangEngine ไม่ถูกเรียก --> ยังหาสาเหตุไม่พบ

อื่นๆ

  • เจอ bug ใน gedit เมื่อกด backspace ลบ combining mark จะมีปัญหาเรื่อง undo buffer ซึ่งจะทำให้การ redo ครั้งต่อมามีอักษรเกินมา --> อาจต้องแก้ลอจิกที่ทำใน GtkTextView ใหม่
  • BloGTK งอแง คาดว่าเป็นปัญหากับ pango ที่ยังทำครึ่งๆ กลางๆ อยู่

03 พฤษภาคม 2547

Patch Patch Patch

วันนี้ปลาหางนกยูงในตู้ทำตัวแปลกๆ แฮะ.. เมื่อก่อนว่ายใครว่ายมัน วันนี้ว่ายเกาะกันเป็นฝูง ยังกะปลาทะเลในโฆษณาทีวีสี เลยนั่งดูอยู่เป็นพักๆ เผื่อจะเก็ตอะไรเกี่ยวกับ complex system มั่ง เหอๆ ^_^

เพิ่ม blog ของ MrChoke และ neverlock (หุๆ ระบาดหนัก คึกคักดีแท้)

วันนี้ hack GTK+ อย่างเมามัน ปั่น patch ออกมาได้ 3 patch

  • แก้ GtkEntry ใหม่อีกครั้ง ตามคอมเมนต์ของ Owen ใน GNOME Bug #119891 โดยใช้วิธีเพิ่ม signal ใหม่สำหรับ backspace เลย แทนที่จะขยายวิธีลบข้อความแบบใหม่เอา อืมม์ แบบนี้ก็ดีเหมือนกัน โค้ดไม่ต้อง generalize มาก.. อีกเรื่องคือต้องไม่ assume ว่า text ได้ normalized มาแล้วด้วย (คือต้องช่วย normalize ด้วย) สรุปว่าได้ patch มาแล้วก็ follow up bug
  • ไหนๆ ก็ไหนๆ แก้ GtkTextView เพิ่มซะเลย ได้มาอีก patch ก็ follow up bug เดิมอีก
  • ระหว่างทดสอบ GtkEntry ก็เจอ bug ที่ไม่สามารถเลื่อนเคอร์เซอร์ด้วยปุ่มลูกศรข้ามเซลล์สุดท้ายได้ ถ้ามี combining mark อยู่ นั่งไล่โค้ดดู โฮะๆ ไม่ยาก เพิ่งไล่โค้ดแถวๆ นี้มาหยกๆ เลยได้มาอีกหนึ่ง patch เล็กๆ และ File GNOME Bug #141728
  • แวะไปเพิ่ม keyword "PATCH" ให้กับ GNOME Bug #141541 (Pango OT ไทย) จะได้เตะตาหน่อย

ตอนบ่ายแวะเข้าไป chat #TLWG อีกที คราวนี้เข้าได้ เลยได้รู้ว่าเป็นความเฟอะฟะของผมเอง ที่ครั้งก่อนๆ เข้าไม่ได้ หุๆ เอาน่า.. เคย chat กะชาวบ้านเขาที่ไหน.. วันนี้โดนถามเรื่อง cairo กับ pango โหะๆ บ่ฮู้ดอกเด้อ ไม่ได้ไปเที่ยวเล่นโซนนั้นเลย แต่ได้คุยเรื่องฟอนต์ เลยเพิ่งรู้ข่าว สิบฟอนต์ ของ ชมรมจัดพิมพ์อิเล็กทรอนิกส์ไทย เลยเกิดคำถามว่า เขาได้ conform ตาม spec ของฟอนต์แห่งชาติหรือเปล่า คงจะดี ถ้าโครงการฟอนต์แห่งชาติมีกิจกรรม certification ด้วย

02 พฤษภาคม 2547

Debian DFSG

ตาม ผลโหวต แก้ไข social contract ของ Debian ซึ่งจะขยายขอบเขตของคำว่า "free" ให้ไปครอบคลุมอย่างอื่นที่ไม่ใช่ "ซอฟต์แวร์" เช่น เอกสาร, firmware ด้วย จากนั้น ก็มีการลบไฟล์หลายไฟล์ที่ไม่ free ออก รวมทั้งใน xfree86 ด้วย จาก Debian Bug #242865 ทำให้แพกเกจ xfree86 ตัวล่าสุดใน unstable เขยิบจาก 4.3.0-7 เป็น 4.3.0.dfsg.1-1 มีการตัดไฟล์ออกไปหลายอยู่ ทั้งฟอนต์ ทั้ง firmware และเอกสาร ฯลฯ (จริงๆ แพกเกจอื่นก็มีการตัดมาก่อนแล้ว แต่ X มันใหญ่หน่อย) แล้วแบบนี้ จะมีปัญหากับฮาร์ดแวร์มั่งไหมเนี่ย

Debian update ช่วงนี้เลยมีเรื่อง DFSG เสียเยอะ แหง็ก

ข่าว /. วันก่อนบอกว่าอาจทำให้ sarge ต้องเลื่อนกำหนดออกไปปีหน้า แต่ที่ debianplanet พยายามบอกว่าอาจไม่ถึงขนาดนั้น

01 พฤษภาคม 2547

ว่าด้วยเรื่องเมืองขอนแก่น

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

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

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

ยังมีอีกเยอะ ที่น่าสนใจเกี่ยวกับประวัติเมืองขอนแก่น รวมทั้งตำราเกี่ยวกับวรรณคดีพื้นบ้านที่ตีพิมพ์ออกมา ทั้งโดยนักวิชาการขอนแก่นและอุบลฯ หาซื้อได้ตามร้านหนังสือ เช่น ศึกษาภัณฑ์ขอนแก่น รวมทั้งแผงหนังสือที่สนามบินขอนแก่นด้วย และก็ยังมี โฮงมูนมัง ซึ่งแสดงนิทรรศการเกี่ยวกับเมืองขอนแก่นอีกด้วย โฮงมูนมัง อยู่ตรงลานเอนกประสงค์ ข้างบึงแก่นนคร เปิดทุกวันเว้นวันจันทร์ ตั้งแต่ ๙.๐๐ - ๒๐.๐๐ น. ค่าเข้าชม เด็ก ๑๐ บ. ผู้ใหญ่ ๒๐ บ. (เก็บถูกจัง จะพอค่าแอร์ ค่า VDO มั้ยนี่) เวิร์กจริงๆ เทศบาลชุดนี้ คนขอนแก่นอ่านกันแล้ว เมือบ้านกันเถาะ ^_^

Hong Mun Mang

UV Protection

วันเสาร์ว่าจะไม่ทำงานแล้วเชียว แต่วันนี้แดดแรงเกินกว่าจะออกไปไหน จะออกไปหาปั๊มลม วันนี้ก็วันแรงงาน ร้านรวงปิดกันหมด งั้นนั่ง hack GTK+ เพลินๆ ก็ได้ฟะ เย็นๆ ค่อยออกไป โฮงมูนมัง

  • File GNOME Bug #141541 เรื่อง Pango Thai OT
  • hack ให้ GtkEntry widget ใช้ 'backspace_deletes_character' logical attribute ใหม่ของ Pango ในการดำเนินการปุ่ม backspace (ซึ่งในภาษาที่ไม่ใช่ละติน, กรีก, ไซริลลิก ควรจะลบทีละอักขระ ไม่ใช่ทั้งเซลล์) ได้ patch นี้ ออกมา
  • Follow up GNOME Bug #119891 เกี่ยวกับเรื่อง backspace_deletes_character พร้อมตั้งคำถามเรื่องวิธีกำหนด flag ใน pango_default_break()

hacker emblem