Theppitak's blog

My personal blog.

27 กุมภาพันธ์ 2549

FireFox + pango_break()

สุดสัปดาห์ที่ผ่านมา นั่งแกะ mozilla เพื่อหาทางแก้ให้ firefox ตัดคำด้วย pango หลังจากที่เคยเสนอทางเลือกไว้ใน tlwg-devel forum นานมาแล้ว แต่ไม่มีโอกาสได้ทำซะที จนอ๊อทมาถามเรื่องการใช้ pango_break เลยกลายเป็นการกระตุ้น ระหว่างหาโค้ดตัวอย่างให้เขาดู ก็เลยเกิดแรงบันดาลใจทีละนิดๆ ประกอบกับงานแปล GNOME ก็เริ่มชะลอตัวลงแล้ว มารู้ตัวอีกที ก็นั่งไล่โค้ดตัดคำเสียแล้ว โดยเริ่มจาก patch ของพี่สัมพันธ์ ที่ใช้ ICU ตัดคำ

patch ของพี่สัมพันธ์นั้น เป็นการขยาย LineBreaker ของญี่ปุ่น โดยมีการแยกสตริงเป็นภาษาๆ ก่อนจะเรียกกฎของภาษามาพิจารณาจุดแบ่งบรรทัด แต่ในเมื่อเราจะใช้ pango ซึ่งมีความสามารถในการวิเคราะห์สตริงยูนิโค้ดอยู่แล้ว คงไม่ต้องมาแยกก่อนอีก ไอเดียคือ พยายามเชื่อมรวม pango เข้ากับ layout code ให้ได้มากที่สุด ในระดับบนนั้น Gecko ใช้ NGLayout ไม่ใช่ PangoLayout อยู่แล้ว ก็คงต้องมองมาที่ระดับต่ำกว่านั้น คือเชื่อมเข้ากับโค้ดระดับกลางของ pango แทน ซึ่งงานที่ mozilla เขาทำไปก่อนแล้ว คือเรียกใช้ pango_shape() ที่เหลือก็คือ การใช้ pango_break() ในการตัดบรรทัด

ทำไปทำมา ได้ patch มาดังนี้ (เทียบกับ cvs HEAD 2006-02-26 snapshot):

  • source tree patch เพื่อให้มาใช้ nsPangoLineBreaker ถ้า --enable-pango
  • nsPangoLineBreaker.h และ nsPangoLineBreaker.cpp สำหรับ LineBreaker ที่เรียก pango เอาไปไว้ที่ไดเรกทอรี mozilla/intl/lwbrk/src ใน source tree

รายละเอียดติดตามได้ใน กระทู้ใน tlwg-devel

ปล. การทดสอบ ต้องใช้ pango-libthai และ libthai จากโครงการ LibThai นะครับ จึงจะตัดคำภาษาไทยได้

20 กุมภาพันธ์ 2549

LibThai, ThaiLaTeX

สุดสัปดาห์นี้ ละงานแปล แว้บไปทำงาน programming นิดหน่อย กับ libthai และ Thai LaTeX

สำหรับ libthai ก็เริ่มนับ รุ่นของไลบรารี ซึ่งตรงนี้ ต่างจากรุ่นของแพกเกจที่แบ่งเป็น major.minor.micro แต่เป็นรุ่นที่บ่งบอก ABI โดยเป็นตัวเลขสามตัวในรูป current:revision:age

  • current หมายถึงรุ่นของ API ปัจจุบัน
  • revision หมายถึงรุ่นของการเปลี่ยนแปลงรายละเอียดของโค้ด ภายใต้ API ที่คงที่
  • age หมายถึงจำนวนรุ่นที่ไลบรารี backward compatible

กล่าวคือ ถ้าไลบรารีมีการเพิ่ม ลด หรือเปลี่ยนแปลง API เลข current จะเพิ่มเสมอเมื่อมีการออกรุ่นใหม่ และเลข revision จะถูกเซ็ตเป็นศูนย์ ส่วน age จะเพิ่มถ้า API ใหม่ยัง backward compatible กับ API เก่าอยู่ (กล่าวคือ เป็นการเพิ่ม API ใหม่ โดยไม่แตะต้อง API ชุดเดิม) แต่ถ้ามีการตัดหรือแก้ API เก่า ค่า age จะต้องเซ็ตเป็นศูนย์ เพื่อบ่งบอกว่าไม่ backward compatible อีกต่อไป สังเกตว่า โดยนิยามแล้ว age จะมีค่าไม่เกิน current เสมอ

แต่ถ้าไลบรารีใหม่ไม่มีการแก้ไข API อะไร แต่เป็นการปรับปรุงแก้ไขในส่วน implementation เท่านั้น เลข current และ age จะคงเดิม แต่เลข revision เพิ่ม

ตรงนี้ เป็นข้อกำหนดของไลบรารีแบบ dynamic เพื่อให้โปรแกรมที่ลิงก์กับไลบรารีรุ่นต่างๆ ยังคงสามารถทำงานได้ โดยยอมให้ติดตั้งไลบรารีหลายรุ่นพร้อมกันในระบบ และใช้ตัวเลขสามตัวต่อท้ายชื่อไฟล์ libabc.so.x.y.z โดย x จะเป็นค่า current - age คือเป็นรุ่นที่เก่าที่สุดที่ backward compatible ส่วน y และ z ก็เป็นค่า revision และ age ตามลำดับ ส่วนเลข current, revision, age สามารถดูได้ในไฟล์ libabc.la ถ้าเป็นไลบรารีที่สร้างด้วย libtool

ส่วน thailatex ก็ update source ตาม tetex 3 ซึ่งใน debian ก็ได้มี NMU แก้ thailatex ให้ใช้ได้กับ tetex 3 ลองแกะดูแล้ว เลยได้ไอเดียมาแก้ source สองรายการ คือ

  • เรียก updmap-sys ถ้ามี แทน updmap ปกติ
  • ติดตั้งไฟล์ต่างๆ ลงในตำแหน่งใหม่ ตาม TeX Directory Structure (TDS) ใหม่

รายละเอียดที่เหลือ ดูได้จาก thread ใน tlwg-devel

14 กุมภาพันธ์ 2549

หลักแปด

อย่างที่จั่วหัวไว้ ขณะนี้ ภาษาไทยทำได้ตามเงื่อนไขของภาษาที่สนับสนุนใน GNOME อย่างสมบูรณ์แล้ว คือแปลข้อความได้เกิน 80% โดยเปอร์เซ็นต์แปลเมื่อวันเสาร์ (11 ก.พ.) ขยับมาอยู่ที่ 80.35% แตะหลักแปดเป็นครั้งแรก แต่หลังจากนั้น ก็เจอช่วง "ยัดทะนาน" (cramming) ของ GNOME ทั้งโครงการ คือการเร่ง commit แข่งกับ tarballs due ของ 2.14 beta 2 ในวันจันทร์ ซึ่งเส้นตายนี้ มีความหมายสำคัญ คือเป็นการเข้าสู่ช่วง string freeze ที่ห้ามเพิ่ม string ใหม่ในคำแปล ดังนั้น บั๊กทั้งหลายแหล่ที่ยังคั่งค้างอยู่ใน bugzilla โดยการแก้ไขจะต้องเพิ่ม string ก็เลยถูกเก็บกวาดขนานใหญ่ ทำให้มีการ commit ชุกชุมไปหมด อันเป็นเรื่องปกติของการทำงานช่วงใกล้เส้นตาย

ข้าพเจ้าฤๅจะพ้น (อันที่จริงเป็นความภูมิใจเล็กๆ ที่ได้มีส่วนร่วมในท่ามกลางความยุ่งเหยิงนี้) ก็เลยทยอยแปล string ใหม่ ยันเปอร์เซ็นต์ไว้ไม่ให้ตก แต่นอกจากนั้น ในระหว่างช่วง string notification ก่อนหน้านี้ ก็ได้ตามแก้บั๊กเล็กๆ น้อยๆ ที่เกี่ยวข้องกับการแปลไปด้วย เลยพาตัวเองเข้าไปร่วม "ยัดทะนาน" กะเขา เช่น Bug #328988 ซึ่งจากที่เป็นบั๊กที่ดูง่ายๆ ค่อยๆ ขยายขอบเขตการแก้ขึ้นเรื่อยๆ สนทนาใน bugzilla มีหวังไม่ทันเส้นตายแน่ เลยเข้า IRC ไปแช็ตเอาเลย โดยพ่วงเอา Bug #251062 ที่ kitty เคยส่ง patch ไว้นานแล้ว และ Mark มากระทุ้งผมไว้เมื่อเร็วๆ นี้ เข้าไปคุยด้วย สุดท้าย บั๊กตัวแรกไม่ทันเส้นตาย แต่บั๊กของ kitty ได้ commit บางส่วน ซึ่งทำให้ evolution สนับสนุน TIS-620 แล้ว (อย่างน้อยก็ในเมนู) แต่ส่วนที่เหลือ ยังต้องคุยกันต่อไป

อย่างไรก็ดี ด้วยเขตเวลาที่ต่างกัน เข้าไปในห้อง ผมง่วงตาจะปิดแล้ว เพราะเลยเที่ยงคืนไปแล้ว แต่พวกท่านยัง good morning กัน รอ developer ที่ยังไม่มา มา review patch ให้ ก็เลยได้คุยกันนิดเดียว รีบไปเข้านอนซะ จะได้ตื่นมา good evening กับพวกท่าน แต่ตื่นมา ก็พบว่า evo ตัวใหม่ tag for release ไปเรียบร้อย T_T

พูดถึง IRC ผมโดนแบนที่ห้อง #tlwg ด้วยปัญหาเรื่อง proxy แต่เข้าไปแช็ตกับ gnome.org ได้ ไม่มีปัญหาแฮะ

ส่วนเปอร์เซ็นต์แปลของ GNOME ล่าสุด ตอนนี้ proposed package ทั้งหลายถูกคัดเลือกเข้ามารวมเรียบร้อยแล้ว ที่ได้เข้ามาก็มี deskbar-applet, fast-user-switch-applet, gnome-screensaver, pessulus, sabayon ส่วนที่ตกไป คือ atomix เขายังหาวิธีรวมเข้ากับ gnome-games อยู่, gnome-power-manager ยังทำงานซ้ำซ้อนกับ battstat applet อยู่ และยังไม่เชื่อมรวมกับ GNOME สนิทเท่าที่ควร, nautilus-actions นี่ ไม่ค่อยเห็นพูดถึงกัน อาจจะเห็นว่ายังสมควรอยู่ใน extras ต่อไป ทั้งหมดนี้ ทำให้เปอร์เซ็นต์แปลหลังรวมของภาษาไทย (บวกกับที่แปลเพิ่มจากวันเสาร์ด้วย) อยู่ที่ 80.42%

อ้อ ข่าวร้ายสำหรับคุณหน่อย.. GNOME เขาแก้เรื่องการ cancel config กลับแล้วแฮะ เพราะการให้กด OK/Cancel เป็นผลมาจากความช้าในการเปลี่ยนพื้นหลัง ซึ่ง HIG กำหนดให้ไม่เปลี่ยนทันทีที่คลิกในกรณีอย่างนี้ แต่เขาแก้ปัญหาเรื่องความช้าได้แล้ว ก็เลยย้อนกลับไปเป็นเหมือนเดิม แต่ทำงานเร็วขึ้น

07 กุมภาพันธ์ 2549

คืบคลาน

งานแปล GNOME วันนี้ทำไม่เยอะ แค่ร้อยเศษๆ แต่ commit สนุกสนานมาก เพราะได้ PO จาก Mark มาถึง 4 รายการ คือ rhythmbox, banshee, muine และ tomboy ซึ่งทั้งหมดนี้อยู่ในกลุ่ม extras (หน้าสำรอง) ซึ่งไม่นับรวมใน official GNOME และจากพี่ปลาอีก 1 รายการ คือ nautilus-actions ซึ่งอยู่ในกลุ่ม proposed (หน้าสำรอง)

4 รายการแรก ไม่ได้มีผลต่อสถานะ supported language แต่ก็เป็นส่วนที่ผู้ใช้จะใช้งาน และความจริง โปรแกรมกลุ่มนี้ ภาษาไทยก็ยังแปลน้อยมาก ถ้าใครคิดว่า GNOME ไม่มีงานให้แปลแล้ว อาจจะดูที่นั่นก่อน เพราะ official มันแค่ยอดภูเขาน้ำแข็ง :-)

ส่วน nautilus-actions ถ้าได้เข้าใน official ก็จะมาบวกเพิ่มเปอร์เซ็นต์แปลที่ใช้ประเมินสถานะ แต่ตอนนี้ยังก่อน

ส่วนงานแปลของผมวันนี้ นอกเหนือจากการ review PO ก่อน commit ก็แปล evolution-data-server เพิ่มนิดหน่อย ผลสรุปเปอร์เซ็นต์แปลวันนี้ยังไม่ update แต่สำหรับของเมื่อวาน ภาษาไทยอยู่ที่ 79.05% ยังครองอันดับ 39 เป็นหัวขบวนของกลุ่ม partially supported ดันอีกนิด ก็จะขึ้นทำเนียบ supported อย่างสมบูรณ์แล้ว ^_^

05 กุมภาพันธ์ 2549

On to GNOME 2.14

กลับมาดู GNOME ต่ออีกครั้ง วันก่อนได้คำแปล evolution-data-server มาจากพี่ปลาที่เนคเทค เลย commit เข้า CVS ไป ด้วยคำแปล 600 ถ้วนๆ ทำให้เปอร์เซ็นต์แปลของไทยพุ่งขึ้นอีก 2% แซงรวดเดียวสามอันดับ คือภาษาเบ็งกาลี เอสโตเนีย อิตาลี ขึ้นมาอยู่อันดับ 39 โดยเปอร์เซ็นต์แปลอยู่ที่ 77.51% ใกล้หลุดพ้นสถานะ partially supported อย่างสมบูรณ์แบบเข้าไปทุกที (หลังจากที่ได้สถานะ supported มาแบบฉิวเฉียดใน GNOME 2.12)

สองวันนี้เลยนั่งแปล e-d-s และ evolution เพิ่มอีก กำลังรอสรุปเปอร์เซ็นต์แปลรอบหน้า คาดว่าจะเพิ่มขึ้นอีกประมาณ 1% นอกจากนี้ ยังได้ปรับปรุงคำแปลเกี่ยวกับการรายงานอากาศอีกระลอก (หลังจากปรับไปครั้งหนึ่งแล้วใน GNOME 2.12) ทั้งใน evolution และใน gweather applet โดยอ้างอิงข้อมูลจาก กรมอุตุนิยมวิทยา ซึ่งดูจะมีการปรับปรุงเนื้อหามากมาย นับจากการเข้าใช้บริการครั้งก่อน

สำหรับ GNOME 2.14 beta 1 ที่ออกไป มีการ commit อีกเยอะแยะก่อน UI freeze ความเปลี่ยนแปลงอย่างหนึ่ง ที่ทำให้นึกถึง คุณหน่อย ก็คือว่า ตอนนี้ gnome-control-center สามารถปรับแต่งเดสก์ท็อปโดยสั่ง cancel ได้แล้ว (คุ้นๆ ว่าแกเคยบ่น)

นอกจากนี้ ก็มีการย้ายเมนูนิดหน่อย เช่น การจับ screenshot ได้ย้ายไปที่ Applications > Accessories แล้ว หลังจากที่ gnome-screenshot ถูกย้ายออกจาก gnome-panel มา gnome-utils แล้วตั้งแต่ GNOME 2.12 คราวนี้ก็ย้ายเมนูด้วย

เมนูออกจากระบบ ก็มีให้เลือก logout หรือ shutdown ตั้งแต่ใน panel เลย และด้วย fast-user-switch-applet ที่เพิ่มเข้ามา ก็ทำให้สลับผู้ใช้ไปเป็นผู้ใช้อื่น (ในอีก display หนึ่ง) ได้ด้วย

รุ่นนี้มี deskbar-applet ที่เป็น applet สั่งการครอบจักรวาล คือจะเป็น mini-commander เรียกคำสั่ง shell ก็ได้ จะ searh google หรือเช็กเมล-ส่งเมลก็ได้ ฯลฯ จนกระทั่งหาคำแปลให้ไม่ถูก ได้แต่ทับศัพท์ไปก่อนว่า "เดสก์บาร์"

(ทั้ง f-u-s-a และ deskbar ยังอยู่ใน proposed list อยู่ โดยยังไม่ได้รวมกับ GNOME อย่างเป็นทางการ แต่ก็เป็น candidate ที่ยังไม่มีใครคัดค้าน กับอีกตัวที่มีแนวโน้มจะได้รวมแน่ๆ คือ Sabayon โปรแกรมบริหารโพรไฟล์ผู้ใช้ สำหรับพวก locked-down machine เช่นตู้เกม)

โปรแกรม GNOME ในรุ่นนี้มีการเขียนใหม่แทบทั้งตัวอยู่หลายตัว นอกจาก gedit ที่เคยเล่า ก็ยังมี gnome-dictionary ที่จัดโครงสร้างใหม่ และสามารถเพิ่ม custom dict ได้ด้วย (เลยไปเลียบเคียง longdo ว่าไม่เปิด DICT service [RFC 2229] มั่งเหรอ จะได้ submit เข้า gnome-dictionary stock dict สำหรับภาษาไทยซะเลย เอ.. หรือว่าทำที่ LEXiTRON จะง่ายกว่า?) ส่วน gnomemeeting ก็เปลี่ยนชื่อเป็น Ekiga เรียบร้อย โดยในรุ่นใหม่ดูจะเพิ่มความสามารถมาเยอะอยู่ แต่ผมก็ได้แค่อ่านๆ ไม่ได้มีโอกาสได้ลอง โหะๆ

พอละ ยาวละ ไว้นึกอะไรได้ค่อยเขียนเพิ่มอีก เอาเป็นว่า GNOME 2.14 เป็นรุ่นที่คุณไม่ควรพลาดละกัน :-)

04 กุมภาพันธ์ 2549

พักหายใจ

ไม่ได้เขียน blog เสียสามอาทิตย์เศษ วุ่นวายกับหลายเรื่องพอสมควร

  • ไปญี่ปุ่น ประชุมกับกลุ่ม OpenPrinting ในญี่ปุ่นแบบไม่เป็นทางการ เพื่อเล่าลักษณะปัญหาและสถานะปัจจุบันของการพิมพ์เอกสารภาษาไทยด้วย FOSS (เอกสาร) แล้วก็คุยธุระเพิ่มเติมนิดหน่อยกับคนอื่นๆ เช่น เจอคนทำ IIIMF เลยเสนอเรื่องการ retrieve context ที่ยังขาดหายในโพรโทคอล เจอโปรแกรมเมอร์พม่า เขาเล่าเรื่องปัญหาของภาษาพม่าในยูนิโค้ด ซึ่งฟังดูแล้ว จะมีปัญหาคล้ายกันในตัวเขียนล้านนาที่ใช้ในไทยภาคเหนือด้วย เลยรับเรื่องมาประสานกับคนไทยที่อาจจะทำงานกับยูนิโค้ดเรื่องตัวล้านนา ว่าควรรวมกลุ่มกันทำงาน (หรือเขาอาจจะคุยกันอยู่แล้วก็ได้)
  • กลับมาถึง มี string ใหม่ใน GNOME กองพะเนินให้แปล เนื่องจากเป็นช่วงก่อนออก beta 1 ซึ่งจะเริ่ม UI freeze ก่อนจะ string freeze เขาเลย commit CVS กันเป็นว่าเล่น (ใครบางคนเรียกว่าเป็นช่วง string rush) ลุยแปลสามวันสามคืน (โดยมีงานอื่นแทรกมาขนานกันเป็นระยะๆ) ก็แซงภาษาเปอร์เซียขึ้นมาได้
  • ที่โรงเรียน มีปัญหาในเครือข่ายให้แก้และทำเพิ่มนิดหน่อย บวกกับปัญหาไวรัส (ทำให้ต้องแปล GNOME ไปคุยไป)
  • งานอีกแห่งหนึ่งที่ต้องเข้าประจำ ตั้ง internet server เครื่องใหม่ โดยทดลองมาตรการป้องกันไวรัสด้วยการสแกนไวรัสที่ transparent proxy ก็ใช้ HAVP ประกบกับ squid แบบแซนด์วิช แล้วก็มีงานโปรแกรมมิงปกติ

ทั้งหมดทั้งสิ้น ทำให้วันนี้เพิ่งมีโอกาสได้พักหายใจ นั่งลงเขียน blog ดังนี้แล

ปล. ช่วงนี้ ไปไหนก็เจอแต่ปัญหาไวรัส (ของชาว Windows) ให้แก้ ใครว่าใช้ลินุกซ์แล้วจะเป็นอิสระจากปัญหาไวรัส โหะๆ

hacker emblem