ช่วยกัน patch Firefox บน Mac OS X กับ Windows มะ?

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

พอ post blog ได้ไม่นาน. ไม่นานจริงๆนะขนาดมา post blog นี้แล้วยัง download xcode ไม่เสร็จเลย. เก่ง.ws ติดต่อเข้ามาว่าอยากจะต่อ Firefox กับ ATSUI เหมือนกัน. เก่ง.ws กับผมเลยร่วมกันสร้างหน้าวิกิขึ้นมา เพื่อใจได้ share ข้อมูลกัน รวมถึงคำถามคำตอบด้วย. เพื่อมีใครสนใจอีกจะได้เข้ามามีส่วนร่วมได้ง่ายๆ ด้วย. หน้านั้นอยู่ที่ http://scratchpad.wikia.com/wiki/Firefox_Thai. นะครับ. ผมหวังว่าการ share น่าจะทำให้เราทำงานเสร็จได้โดยแต่ละคนไม่เหนื่อย และเหงา (มีปัญหาแล้วไม่รู้จะถามใคร … แล้วก็ถามตัวเองว่ามานั่งทำอะไรอยู่คนเดียว.) จนเกินไป.

http://openil.wordpress.com/2007/07/19/รวมการเฉพาะกิจเพื่อ-patch-firefox/

mk's picture

ทำสำเร็จแล้วก็พอมีทางเขียนโครงการหาตังย้อนหลังจาก SIPA/NECTEC ได้ด้วย ถ้าสำเร็จ (จริงๆ) เดี๋ยวผมจะหาทางช่วย

น่าดีใจที่มีคนคิดแบบนี้แฮะ

sugree's picture

ย้อนหลัง? มันจะมีปัญหารึเปล่า ดูมันแปลกๆ ยังไงก็ไม่รู้

แย่ละ ไม่มีทั้ง Mac OS X และไม่มี Windows ด้วย

veer's picture

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

เล่าให้พวกที่อยู่นอกวงการ(อย่างผม) ฟังบ้างสิ
veer กับ keng กำลังจะทำอะไร
รู้ว่าเกี่ยวกับตัดคำ
แต่อุปสรรค ปัญหา แนวทาง เป้าหมาย ที่กำลังจะจัดการ มันคืออะไร

veer's picture

Firefox มันจะตัดคำโดยเรียน API ของแต่ platform ครับ. สำหรับ GNU/Linux ป๋าเทพจัดการต่อกับ Pango ไปเรียบร้อยแล้ว แต่ว่าก็บาดเจ็บไปแล้ว. ทีนี้ของ Mac OS X กับ Windows ก็ต้องต่อกับ ATSUI และ Uniscribe ตามลำดับ แทนที่จะเป็น Pango. เราก็อยากเขียน code ที่จะมาต่อ ATSUI กับ Uniscribe ครับ. ทว่าแค่ build Firefox ผมก็ build ไม่ผ่านแล้ว. ผมก็ไม่ได้คาดหวังอะไรมากมาย พยายามเดินไปแล้วทิ้งรอยไว้ให้คนอื่นเดินต่อก็ยังดี. ต่อให้เรื่องนี้ไปใช้ได้ใน Firefox 4 ก็ได้มั้ง. รอออกพร้อม Perl6 lol. อย่างน้อยๆก็คงลงช่องว่างระหว่างป๋าเทพกับคนอื่นในชุมชนลงไปบ้าง.

บาดเจ็บ ยังไงอะ.

--
อานนท์

veer's picture

เจ็บตา

งง ครับ

----
อานนท์

veer's picture

ป๋าเทพแสบตา.

sugree's picture

ผมก็เป็น ทรมานมาก หมอบอก ลด ละ เลิก ถนอมมันหน่อย อนาคตตาบอดสถานเดียว

veer's picture

ผมก็เคยแสบ แบบติดเชื้ออะ.

mk's picture

ทีนี้ที่ผ่านมาการตัดคำที่มีคนทำ ใช้วิธีแตกต่างกันไป
- ของคุณฮุ้ย ใช้วิธียัด dict ตัดคำทั้งตัวลงไปใน Firefox แล้ว build ไฟล์ที่ได้ใหญ่เพิ่มขึ้นอีกเยอะ (~2M) ซึ่งวิธีนี้ทาง Mozilla ไม่มีวันยอมรับ เพราะเค้าต้องการออก Firefox เวอร์ชันเดียวที่ทุกคนในโลกใช้ได้
- ของคุณสัมพันธ์ ใช้ dict และตัวตัดคำใน ICU ซึ่งเป็นวิธีเดียวกับที่ OOo ใช้ ปัญหาคือ ICU นั้น cross platform ก็จริงแต่ไม่มีมาให้ในแพลทฟอร์มไหนเลย ก็เลยต้องบันเดิล ICU เข้ามาใน extension ด้วย ซึ่งคุณสัมพันธ์ทำเฉพาะบนวินโดวส์ และ extension นี้จะใช้ไม่ได้กับ Firefox 3 ด้วยเหตุผลที่ว่าไป
- ของคุณเทพที่ใช้บนลินุกซ์อยู่ทุกวันนี้ ใช้ libthai (ซึ่งจริงๆ แล้วคือเอาชุด dict ของคุณฮุ้ยมาทำให้เป็นเรื่องเป็นราว) แก้ปัญหาด้านการแจกจ่ายโดยผลักให้ Debian/Ubuntu มี libthai และมี Firefox เวอร์ชันของดิสโทรที่แก้ให้เรียก libthai
- ของ bact' ทำที่ javascript level ก็จะมีปัญหาด้านประสิทธิภาพ

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

วิธีที่ Mozilla เสนอ ก็คือใช้ตัวตัดคำของระบบปฏิบัติการ
- Uniscribe สำหรับวินโดวส์ (ตัวเดียวกับ IE)
- ATSUI สำหรับแมค (ตัวเดียวกับ Safari)
- Pango สำหรับลินุกซ์​ (ซึ่ง Pango จะเรียก libthai อีกที)
วิธีนี้จะเพิ่ม patch ใน Firefox อีกไม่กี่บรรทัดเท่านั้น ปัญหาคือ Firefox 2 มีระบบ text engine ที่ค่อนข้างเก่า (ตั้งแต่สมัย Netscape) และสนับสนุน i18n ไม่ดีนัก ซึ่งตัวใหม่จะเสร็จพร้อมใช้ใน Firefox 3

ตอนนี้ text engine ที่ว่าเสร็จแล้ว (เปิดใช้ใน Firefox 3 แล้ว) และพี่เทพจัดการ patch สำหรับ Pango เรียบร้อยแล้ว commit แล้ว เหลือเวอร์ชันบนวินโดวส์กับแมครอคนทำต่อไป

วิธีการก็ไม่ยากมากเพราะพี่เทพทำทางไว้ให้แล้ว เอา patch ของ Pango มาแก้ให้เรียก ATSUI/Uniscribe เท่านั้นเอง

เห็น firefox official มันรวมพวก zlib, libgtk, libglib, ไว้ใน source tree หมดเลย.
หยั่งงี้ก็ทำให้ firefox official binary for gnu/linux ไม่ depend on library อื่นๆ ให้วุ่นวาย,
ทำให้สามารถ download firefox official binary ไปติดตั้งได้ง่ายและทันที โดยไม่ติดปัญหาเรื่อง dependency อีก.
ทีนี้พอ link กะ pango share library แล้ว, ก็จะทำให้ firefox official binary ติดปัญหา dependency อีกรึเปล่า?
กรณีที่ user ใช้ distro ที่ใช้ pango ตัวเก่า ที่ไม่ compat กะที่ firefox build official มา, user ก็ต้องคอย upgrade pango อีกให้วุ่นวาย.
หรือ firefox จะไปใช้วิธีรวม pango ไว้ใน source tree อีก? ซึ่งจะทำให้ binary ของ firefox ใหญ่ขึ้นอีกรึเปล่า?

ปล. คุณ thep บอกว่า mozilla มี pango-lite อยู่ใน source tree ด้วย.

----
อานนท์

veer's picture

การเลือกตัดคำจาก API ท้องถิ่น เท่าที่เห็นมี Abiword ทำ ใช้ Pango กับ Uniscribe (แต่ ATSUI ไม่รู้เสร็จหรือยัง. บาง project ก็เลือกวิธีต่างออกไปเช่น OO.o ใช้ ICU แบบที่ mk บอก แต่ก็จะเห็นได้ว่า OO.o ใหญ่.

ขอเสริม ส่วนหนึ่งที่การใช้ ICU เหมาะ/คุ้มกับ OO.o แต่ไม่เหมาะ/คุ้มกับ Mozilla
คงเพราะ ICU มันค่อนข้างใหญ่ เพราะฟังก์ชั่นมันเยอะ ซึ่ง OO.o มันใช้ไอ้เยอะ ๆ พวกนั้น
เช่น collocate, unicode normalization/matching ฯลฯ นอกเหนือไปจากตัดคำ
ถ้า Mozilla จะใช้แค่ตัดคำ คงไม่คุ้ม ไปใช้ api ท้องถิ่นคงเหมาะกว่า
(พูดอีกอย่างก็คือ Mozilla ตอนนี้ สนใจแต่เรื่องแสดงผล แต่ ICU ให้เรื่องประมวลผลอื่น ๆ ด้วย)
(เคยมีคน icu-lite อะไรประมาณนี้เหมือนกัน แต่ก็ไม่มีใครทำ)

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

  1. ผลการแสดงผลบน GranParadiso Alpha 6 บน Tiger และ Leopard ให้ผลต่างกัน
    • บน Tiger เราได้การแสดงผลแบบวรรณยุกต์ไม่ลอย แต่
    • บน Leopard (9A466) วรรณยุกต์ลอยเหมือน BonEcho ปกติ (เท่าที่เห็นผ่านตาจากการฝากให้ผู้อื่นทดลอง)
  2. เนื่องจาก ATSUI เป็น Carbon API และ Leopard พยายามจะลดการสนับสนุน Carbon ลง (ล่าสุดคือ มีแต่ Carbon 32 ไม่มี Carbon 64) ดังนั้นคงต้องเริ่มมองทางเลือกอื่นๆ บ้างแล้ว

ผลไม่ได้มีความรู้ทางเทคนิตลึกในระดับที่จะ hack ในเรื่องนี้ แต่ก็อยากจะฝากไว้ให้ผู้พัฒนาพิจารณาประเด็นนี้ด้วย

veer's picture

Cocoa มี API ที่เอาไว้ตัดคำบ้างเปล่าครับ? มาต่อกันอาจจะใช้ Objective C++ ได้? ช่วยกันเอกสารมอง trend หาทางหนีทีไล่ผมว่าก็ช่วยมากแล้วอะครับ. ช่วยเติมเข้าไปใน wiki เลยยิ่งดี :-D.

mk's picture

ผมเคยดูในเอกสารของแอปเปิล จำได้ว่า Cocoa text system จะเรียก ATSUI อีกชั้นหนึ่ง (ในฐานะที่เป็นตัวจัดการด้าน i18n) ไม่แน่ใจว่าพอ deprecate แล้วจะจัดโครงสร้างกันใหม่อย่างไรนะครับ (ไม่รู้ว่าใน Core Text จะมี i18n service ใหม่อย่างไรเหมือนกัน)

ตอนนี้ทาง Mozilla เองก็ไม่ได้พูดเรื่องนี้กันแต่อย่างใด ใน Firefox เองก็มีส่วนที่เป็น Carbon เยอะ วิธีเรียกผ่าน ATSUI น่าจะยังอยู่ได้ในช่วงอายุ Firefox 3 และคงต้องมาคิดกันอีกทีตอน Firefox 4 ซึ่งจะย้ายไปใช้แพลตฟอร์ม Mozilla 2 (Gecko 2.0) อันนั้นก็ระยะยาวเลย

ยังไงก็ตามก็ขอบคุณที่เสนอปัญหา (ล่วงหน้า) มาให้

รู้สึกว่าการโพสรูปมันจะ break NDA นะ ดังนั้นไม่เอารูปมาแสดงในที่สาธารณะแล้วกัน

ผมเข้าใจว่า Safari จริงๆ ก็ไม่ได้ใช้ ATSUI (เพราะในเมนู Debug มันมีให้เลือกว่าเอา ATSUI แสดงผล แต่ก็ไม่ได้ถูกเลือกไว้) และเท่าที่เคยผ่านๆ ตา Safari ใน Windows ใช้ ICU ตัดคำครับฃ

จริงๆ กระบวนการทั้งหมด ผมคิดว่าควรเริ่มจากการศึกษา WebKit ครับ จะได้เห็นแนวทางว่ามันตัดคำไทยได้อย่างไร ผมก็ยังไม่เคยลอง WebKit นะว่าตัดคำออกมาแล้วเละขนาดไหน แต่โปรเจค Swift ที่มีคนเอา WebKit มา Build ใช้บน Windows แล้วเอา C# มาทำ UI ครอบไปอีกที (ก่อนที่จะเกิด Apollo และ Safari for Windows ตามลำดับ) ตัดคำไทยไม่ได้เอาเสียเลย

ปล. พอดีเปิด Google เจอเจ้านี่ Text Layout Programming Guide ไม่แน่ใจว่าจะใช้การได้หรือไม่

veer's picture

Webkit เรียกใช้ UCFindTextbreak ด้วย. แต่ว่าไม่รู้เรียกทำไม lol. กำลังจะไล่ KWQFindWordBoundary ที่เรียก UCFindTextbreak ถูกอะไรเรียกอีกที. แต่ว่า svn co มาแต่เช้าก็ timeout ไปแล้ว. ยัง download code ของ webkit เต็มๆไม่เสร็จซะที. -_-!

ตอนนี้เป็นเรียก Carbon (CoreService) ไม่ได้ใช้ ATSUI code

sirn's picture

บนแมค Camino Nightly (Trunk) ตัดคำไทยได้แล้ว ลองไปแอบๆ ดูโค้ดฝั่งนั้น น่าจะมีประโยชน์บ้างนะครับ

โหลดได้จากเว็บไซต์ของ Mozilla (2.0a1pre) นะ ไปโหลดที่อยู่ในเว็บ Camino (1.6a1pre) แล้วตัดเละเหมือนเดิม

veer's picture

เจ๋งๆ แอบดู Camino มั่งดีกว่า. แต่ว่าเข้า CVS ไม่ได้ T_T.
(comment จะเติมใน wikia เลยก็ได้นะครับ เผื่อคนอื่นที่ไม่ได้เข้า codenone อาจจะอยากอ่านด้วย.)

วันนี้ได้มีโอกาสดูผลทดสอบ Camino (Trunk) บน Leopard 9a466

ผลที่ได้คือ ตัดคำได้ แต่การแสดงผลเละครับ (วรรณยุกต์ลอย ไม่เหมือนบน Tiger ยังไม่ได้ดูผลกับฟอนท์ตัวอื่นๆ เพราะเครื่องที่ไปดูทดสอบมาเป็นเครื่องที่ไม่ได้ติดตั้งอะไรเป็นพิเศษ) ผมคิดว่าคงต้องดูแบบอย่างจาก Safari อย่างเดียวแล้วมั้งว่าทำอย่างไรจึงดึงวรรณยุกต์ลงมาได้

veer's picture

น่าแกะ Camino จริงๆ แต่สงสัยต้องใช้เวลาดูสักพักเหมือนกัน. (จริงๆผมใช้ Camino ไม่ได้ใช้ Firefox ด้วย lol แต่อ่านคู่มือแล้ว download menu framework หรืออะไรซะอย่างไม่เป็นเลย ยังไม่ได้ลอง build camino เลย.)

moz ที่ patch กับอยู่แอบมี nightly โดยคุณเก่ง.ws ด้วยนะครับ nightly build

mk's picture

nightly นี่แปลว่าต้องมาตาม build ทุกคืนนะ (รอดูคืนนี้) :P

veer's picture

แล้วแต่คุณเก่ง.ws ว่าง่วงแค่ไหน.

ตอนนี้ผมลองทำของ Windows โดยใช้ Uniscribe อยู่ครับ

ดูรายละเอียดจาก wiki ของคุณวีร์แล้ว

เห็นช่วงนี้เงียบๆ เขียนหน่อยแล้วกัน

ตอนนี้ GranParadiso Alpha 7 ก็ออกมาแล้ว และก็ยังไม่มีการกล่าวถึงการแก้บั้กการแสดงผลภาษาไทย สงสัยต้องรองวดต่อไปซะแล้ว

mk's picture

ขอก็อปมาจากในเมลที่คุยกับคุณ keng ละกันนะครับ


ผมลอง checkout fx3a8pre มาลอง build ดูปรากฎว่าบนแมค หน้าที่เคย crash ไม่ crash แล้วนะ test case ก็ตามนี้

ลองไปโหลดมาได้ครับ file (Naming ทุเรศไปหน่อย)

เก่ง

keng's picture

patch ยังไม่ check in เลย คงต้องรอหน่อยละมั้ง

ขัดจังหวะหน่อยครับ

รู้สึกว่าเท่าที่ผมเห็นการแสดงผลบน Leopard 9a499 มันเน่าได้ใจมากเลย ตำแหน่งวรรณยุกต์อยู่ผิดที่ผิดทาง เช่นคำว่า ที่ ผมเห็นสระอีไม้เอก ก่อน ท ไม่ทราบเหมือนกันว่าเกี่ยวกับที่เราทำๆ กันไหม

keng's picture

ขอ screenshot หน่อยครับ

เกรงว่าจะมีปัญหาเรื่อง NDA นี่ซิ เอาเป็นว่าเดี๋ยวผมหาทางให้ดูให้ได้แล้วกัน

หมายเหตุ: ปัญหานี้ก็เกิดกับ Camino 2 Nightly Trunk เหมือนกัน ที่แสดงภาษาไทยและตัดคำไทยได้สวยงามบน Tiger แต่แสดงผลเละบน Leopard (ยังไม่ได้ดูตัดคำไทยเท่าไร เพราะไม่ได้เอา url ของหน้าทดสอบไปลอง)

keng's picture

รบกวนลอง fx 3 nightly trunk หน่อยอ่ะครับ ว่าเป็นเหมือนกันหรือเปล่า

ถ้า crop เฉพาะส่วนมานี่ก็มีปัญหาเรื่อง NDA เหมือนกันหรือเปล่า?

ผมลองดูผลกับ nightly trunk ตัวเดือนสิงหาคมที่คุณเก่ง build กับตัว camino 2.0 nightly build (จำวันที่ไม่ได้ แต่เป็นสิงหาคม เป็นตัวที่ดู Silverlight ได้ แต่ยังไม่สมบูรณ์ แต่ก็ไม่ crash เหมือนตัวก่อนหน้านั้น)

เรื่อง NDA นี่ไม่แน่ใจจริงๆ แต่คิดว่า ถ้า crop มาเฉพาะรูปการแสดงผล Text มาให้ดูน่าจะไม่มีปัญหานะ

ถ้าจำกันได้ ของเดิม (9a466) มันวรรณยุกต์ลอย แต่พอมาเป็นตัวใหม่ (9a499) เราได้สระวรรณยุกต์ผิดตำแหน่งแทน

mk's picture

ตัว text engine ของ mozilla เองก็ยังไม่ stable มาก ของใหม่ check-in ทุกวัน ส่วน Leopard เองก็คงแบบเดียวกัน ถ้า file bug เข้าไป มันคงโบ้ยว่าเป็นความผิดของอีกฝ่าย

ตอนนี้ผมว่าคงทำอะไรไม่ได้ นอกจากรอ Leopard ออกตัวจริง แล้วค่อยคุยกับทาง Mozilla อีกที

โอเค รูปตามสัญญาครับ (ฝากในโฮสท์ไทยนะครับ) ผมไปขอ crop มาเฉพาะ Minefield นะ แต่สาระรูปของ Camino ก็เหมือนกัน แต่ตัว Safari กลับแสดงได้อย่างถูกต้องนะ (สงสัยคงเปลี่ยน API แหละ)

Minefield on Leopard 9a499

keng's picture

มันอาการหนักจริงๆ

แต่อย่าง mk ว่า gekco ตัวนี้ก็ยังไม่นิ่งอย่างมาก คงต้องรอไปอีกสักพัก ถึงจะชี้ได้ว่าใครผิด

mk's picture

รุ่นนี้เป็นเวอร์ชันตัดคำหรือเปล่าครับ หรือเป็นกับตัว nightly ด้วย

รูปที่นำมาแสดงเป็นรูปจาก build ตัดคำครับ ซึ่ง Camino Nightly Build ก็ให้ผลในลักษณะนี้เช่นกัน

mk's picture

Firefox Nightly (Grand Paradiso) เป็นไหมครับ

ฟ้องด้วยรูปเช่นเดิมครับ

GranParadiso on Leopard 9a499

ตัวนี้เป็น Alpha 7 ครับ

mk's picture

แบบนี้ก็คงเป็นกับตัว Gecko ลองแจ้งบั๊กเข้าไปทาง Mozilla ดูครับ

สรุปว่าตอนนี้บน Windows เป็นยังไงบ้างครับ

veer's picture

ยังไม่พบปัญหาอะไรนะครับ. แต่ว่าก็ยังไม่ได้ checkin เหมือนกัน lol. คุณ ob build แล้วเอา url มาปะใน wikia อยู่บ่อยๆ. :-)
---
http://openil.wordpress.com/

อันนี้ผมแถมให้อีกอัน เป็น BonEcho รุ่น cttex

BonEcho on Leopard 9a499

veer's picture

bugzilla นี่ bug เยอะไปหมดอ่านแล้วก็งงๆ ไม่รู้ใช่ที่เราจะแจ้งหรือเปล่า T_T.
---
http://openil.wordpress.com/

mk's picture

อันนั้นไม่ต้องเป็นห่วงครับ มันจะมีหน่วยล่า duplicate bug อยู่ ทำงานกันเร็วมาก อย่างดีก็เป็นแค่แจ้งซ้ำไป ดีกว่าไม่มีคนแจ้ง

keng's picture

patch ตัดคำ ผ่าน approve 1.9 ไปแล้วทั้งสองอัน

แล้วไงต่ออ่ะ...

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น