Theppitak's blog

My personal blog.

13 มีนาคม 2550

On Mozilla Stuffs

มัวแต่ไล่แพตช์ iceweasel/xulrunner deb เสียนาน โดยไม่ได้ปรับแพตช์อะไรมากมายเลย ทั้งไม่ได้ไปตามดูซอร์สที่ mozilla trunk เลยด้วย ส่งงานชิ้นหนึ่งไปแล้ว เลยถือโอกาสกลับมาดูเสียหน่อย

อย่างที่เกิดกับผมหลายเรื่อง เรื่อง mozilla นี่ พอนานเข้า เรื่องที่ไม่เคยคิดว่าต้องทำก็ชักกลายเป็นเรื่องถาวร ต้องเตือนตัวเองเสียบ้าง ว่าเดิมผมไม่เคยคิดจะเข้ามาดู mozilla เลย เพราะเห็นว่ามีหลายคนทำอยู่แล้ว ทั้งพี่สัมพันธ์ พี่ฮุ้ย อ๊อท ก็ปล่อยให้เขาทำไป แต่ที่ต้องมาจับนี่ก็เพราะ Ubuntu Localisation Sprint ตั้งแต่รุ่น dapper นู่น บังเอิญผมเอาแพตช์ของอ๊อทไปใส่ โดยที่ต้องปรับแก้เพิ่มเติมด้วย

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

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

น่าจะถึงจุดที่ต้องหยุดทบทวนบ้างล่ะ ว่าจะทำยังไงต่อไปกับเรื่องนี้ การไล่ patch และ build ไม่ใช่สิ่งที่พึงปรารถนาแน่ ๆ

mozilla ใน trunk ซึ่งจะออกเป็น firefox 3 นั้น มีการปรับ API และโครงสร้างของตัวตัดคำพอสมควร ดูท่าจะทำงานได้เร็วขึ้น ไม่มีการเรียกรูทีนตัดคำแบบซ้ำซาก แต่ก็ยังไม่มีโครงสร้างสำหรับการต่อเติม engine ในแบบที่ pango ทำเลย จึงดูเหมือนยังไม่มีช่องทางให้เสียบเพิ่ม engine ภาษาไทยเข้าไปได้ง่าย ๆ

เท้าความถึงลักษณะปัญหาและ solution ต่าง ๆ เสียก่อน..

ใน mozilla นั้น มี interface สำหรับตัดบรรทัดคือ ILineBreaker ซึ่งขณะนี้ มี engine เดียวที่ implement interface นี้ คือ nsJISx4051LineBreaker ซึ่ง implement ตาม spec ตัวตัดคำของญี่ปุ่น โดยมีการวิเคราะห์พวกเครื่องหมายวรรคตอนพอประมาณ

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

ต่อมา หลังจากพี่สัมพันธ์ check-in โค้ดตัดคำด้วยพจนานุกรมเข้า ICU ได้แล้ว ก็ได้ทำ patch ต่อเติม nsJISx4051LineBreaker อีกครั้ง โดยมาเรียก ICU แทน แต่ปรากฏว่าเขาไม่รับ patch อาจจะด้วยเหตุผลเรื่อง license และขนาดของ ICU ที่ใหญ่มหึมาเกินไป

นั่นทำให้เกิดช่วงสุญญากาศ แล้วก็เกิด solution ต่าง ๆ เป็นดอกเห็ด แต่แพตช์ตัดคำทั้งหลาย ต่างก็อาศัยแพตช์ของพี่สัมพันธ์เป็นฐานทั้งนั้น อาจจะต่างกันที่ engine เช่น ของพี่ฮุ้ยใช้ cttex, ของอ๊อทและของผมใช้ libthai

ล่าสุด พี่สัมพันธ์ได้เสนอว่าจะทำเป็น extension แทน โดยสร้าง component ที่ register service ด้วย contract ID ของ ILineBreaker ซึ่งความหมายก็คือ จะเอาตัวตัดคำไปแทนที่ nsJISx4051LineBreaker นั่นเอง ไม่ใช่การต่อเติมอย่างเดิมอีกต่อไป

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

อีกทางเลือกหนึ่ง คือการพยายามดัน libthai patch ให้เข้าที่ upstream ให้ได้ เพื่อจะได้ไม่ต้องตาม patch ตาม build กันต่อไป ซึ่งวิธีนี้น่าจะเหมาะสำหรับไลบรารีเล็ก ๆ อย่าง libthai เพราะไม่ได้เพิ่มภาระให้กับโปรแกรมมากนัก อาจ check-in ง่ายกว่า แต่ปัญหาของ libthai คือ ยังไม่มีใช้ใน Windows จึงต้องการคน build installer ให้ด้วย ส่วนในลินุกซ์นั้น หลังจากที่ pango 1.16 ลิงก์กับ libthai ก็น่าจะทำให้ libthai เริ่มมีความสำคัญขึ้นบ้างใน distro ต่าง ๆ อย่างน้อยตอนนี้ก็มีใน Debian และ Ubuntu ละ ส่วน Fedora ก็เข้าใจว่าน่าจะมี

และทางเลือกที่สาม ที่ยังวนเวียนในความคิดนักพัฒนาอยู่เสมอ คือการใช้ API ตัดคำของ platform เช่น ใช้ pango บนลินุกซ์, ใช้ Uniscribe บนวินโดวส์, ใช้ ATSUI บน Mac ซึ่งก็ยังคงเป็นทางเลือกที่น่าสนใจ แม้จะประสิทธิภาพต่ำกว่าเพราะต้องเรียกใช้หลายทอด แต่การปรับปรุงโครงสร้างโค้ดใน mozilla เร็ว ๆ นี้ น่าจะช่วยบรรเทาได้บ้าง แต่เขาจะเลือกใช้หรือเปล่าก็ต้องขึ้นอยู่กับ architect ของ mozilla แล้วละ

สำหรับทางเลือก libthai patch นั้น ดูเหมือนขั้นตอนสำคัญที่ขาดอยู่ ก็คือ installer สำหรับ libthai บน Windows ซึ่งถ้ามีแล้ว คงทำให้ผลักดันอะไร ๆ ได้ง่ายเข้า

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

3 ความเห็น:

  • 13 มีนาคม 2550 เวลา 12:22 , Blogger Taniya แถลง…

    libthai installer บน windows ต้องการความสามารถอะไรบ้างครับ
    ผมลองดู installer ของ gtk มันแตกไฟล์ไปที่ Program Files\Common File s\GTK โดยโครงสร้าง directory ยังเป็น unix อยู่คือมี bin share lib etc เหมือนเดิม จากนั้นก็ไป set PATH เพิ่ม bin ของ gtk เข้าไป

    ตอนนี้ผมก็ยัง compile iceweasel บน mingw ไม่ผ่านเลย แต่ libdatrie libthai ผ่านแล้วครับ กำลังหาวิธีแก้ไขอยู่

     
  • 14 มีนาคม 2550 เวลา 22:08 , Blogger Thep แถลง…

    น่าจะใช้ระบบ install ที่คล้าย mozilla หรือ free software บน windows ทั่วไปครับ ตอนนี้คิดว่า NSIS ของ nullsoft น่าจะเหมาะครับ

     
  • 15 มีนาคม 2550 เวลา 10:36 , Blogger Taniya แถลง…

    ตกลง จะลองทำดู ใช้ NSIS อยู่เหมือนกันครับ

     

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem