Theppitak's blog

My personal blog.

04 เมษายน 2550

Multitasking

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

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

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

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

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

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

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

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

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

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

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

3 ความเห็น:

  • 4 เมษายน 2550 13:35 , Blogger Mk แถลง…

    เผอิญหลังๆ ไม่ได้ตามเรื่องของ ROC สงสัยว่าตัว textframe ใหม่นี่เปิดช่องสำหรับ Pango เฉพาะบน *nix? ถ้าเป็นวินโดวส์กับแมคเค้าเตรียมช่องสำหรับ uniscribe/atsui ไว้ด้วยหรือเปล่า

     
  • 4 เมษายน 2550 14:00 , Blogger Thep แถลง…

    ไม่ใช่เขาเปิดช่องเฉพาะ pango เขา abstract ผ่าน nsILineBreaker interface เหมือนเดิมนั่นแหละ ซึ่งเดิมมันมี implementation เดียว คือ nsJIS4051LineBreaker แต่ผมเสนอ pango implementation เสียบเข้าแทน ถ้ามีใครช่วยทำ uniscribe/atsui เสียบเข้าไปอีก ก็จะครบสูตร platform line breaker solution ละ

     
  • 4 เมษายน 2550 14:08 , Blogger Thep แถลง…

    เพิ่มเติม: solution เดิมที่เราเสนอกัน คือแก้ nsJIS4051LineBreaker ให้ออกมาเรียก engine ภาษาไทย (ICU/cttex/libthai) แต่ล่าสุดพี่สัมพันธ์เสนอ replace nsJIS4051LineBreaker ด้วย ICU เลย แต่ทำในรูป extension ผมเลยได้ไอเดียว่า ก็แค่ replace ด้วย pango ใน upstream source ไปเลยก็สิ้นเรื่อง ในเมื่อตอนนี้ pango ก็ link กับ libthai แล้ว ตอนแรกเรื่อง pango นี่ เป็นแค่ทางเลือกสุดท้าย แต่ตอนนี้ textframe ใหม่เร็วขึ้นมาก จน pango ก็มีความเป็นไปได้ ซึ่งก็จะได้ความสามารถเรื่องการจัดการภาษาต่าง ๆ ของ pango ซึ่งสมบูรณ์กว่า nsJIS4051LineBreaker มาใช้ด้วย

     

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

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

hacker emblem