<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener("load", function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <iframe src="http://www.blogger.com/navbar.g?targetBlogID=7355927&amp;blogName=Poonlap%27s+Linux+blog&amp;publishMode=PUBLISH_MODE_BLOGSPOT&amp;navbarType=BLUE&amp;layoutType=CLASSIC&amp;searchRoot=http%3A%2F%2Fpoonlap.blogspot.com%2Fsearch&amp;blogLocale=en_US&amp;homepageUrl=http%3A%2F%2Fpoonlap.blogspot.com%2F" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" height="30px" width="100%" id="navbar-iframe" allowtransparency="true" title="Blogger Navigation and Search"></iframe> <div></div>
 Poonlap's Linux blog  ใช้ซอฟต์แวร์เสรี, มีทางเลือก, ประเทืองปัญญา, พึ่งพาตนเอง.
 
      « Home

เนื้อหาที่ผ่านมา

ลาก่อน blogspot
ใช้ ange-ftp กับ emacs
บันทึกด้วย script
ปีใหม่แล้วเวลาช้าลง 1 วินาที
เปรียบ Java กับ Ruby (ด้วยความหนาของหนังสือ)
แปลคำศัพท์ด้วย Longdo dictionary จาก Firefox
Object Oriented ใน ruby
พวกคำย่อ
ruby เบื้องต้น
del.icio.us/poonlap
 
      เนื้อหาในอดีต
06/01/2004 - 07/01/2004
07/01/2004 - 08/01/2004
08/01/2004 - 09/01/2004
09/01/2004 - 10/01/2004
10/01/2004 - 11/01/2004
11/01/2004 - 12/01/2004
12/01/2004 - 01/01/2005
01/01/2005 - 02/01/2005
02/01/2005 - 03/01/2005
03/01/2005 - 04/01/2005
04/01/2005 - 05/01/2005
05/01/2005 - 06/01/2005
06/01/2005 - 07/01/2005
07/01/2005 - 08/01/2005
08/01/2005 - 09/01/2005
09/01/2005 - 10/01/2005
10/01/2005 - 11/01/2005
11/01/2005 - 12/01/2005
12/01/2005 - 01/01/2006
01/01/2006 - 02/01/2006
02/01/2006 - 03/01/2006
03/01/2006 - 04/01/2006
 
      เชิ่อมโยง

รูปประกอบ (Flickr)
โค้ด
รูปประกอบ (อดีต)
deli.icio.us/poonlap

Thai Linux Working group
TLWG Planet
Blognone
Home at LTN
Bact's blog
Hui blog
Theppitak's blog
Noi's life & thoughts
Kitty.in.th
Sf-alpha
Vee blog
too - blogin'
Mk's blog
Pok's blogger
Vmlinix blog
Sothorn's Web log
คุณอุทัย
DrRider's Blog
Donga's memories

This page is powered by Blogger. Isn't yours?

Creative Commons License

ธนาบุตรโฟโต้บุ๊ค
อัดรูปดิจิตอล ทำสมุดภาพของคุณเอง
รอรับได้. ท่องเที่ยว แต่งงาน ฯลฯ
www.tanabutr.co.th/photobook

ลองฟอนต์ Pladao

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

ช่วงนี้เรื่องของ Openoffice ภาษาไทยคึกคักเป็นพิเศษเพราะคุณสัมพันธ์กับคุณเจมส์ คลากส์ช่วยเข้ามาดูบั๊กเพื่อรวม OfficeTLE และ Pladao เข้าไปใน Openoffice. ทำให้ผมรู้ว่ามีฟอนต์ทรูปไทป์ใหม่ๆที่ผมไม่รู้จักได้แก่ (ข้อมูลจากคุณ bact' อีกทีหนึ่ง)
  • OOAnnop ฟอนต์ขนาดอักขระเท่ากันทุกตัว, รูปทรงคล้าย "Arial".
  • OONaksit ฟอนต์ขนาดอักขระเท่ากันทุกตัว, สำหรับใช้แทน "Courier".
  • OORatchada ฟอนต์ทรง Serif สำหรับใช้แทน "Angsana" และ "Browallia".
  • OOSawasdee ฟอนต์ทรง Sans Serif สำหรับใช้แทน "Cordia".
  • OOThanakrit ฟอนต์ทรงเหลี่ยม (?) 'Squared'-style.
  • OOThaiSymbol ฟอนต์รวมสัญลักษณ์ไทยๆเช่นครุฑ.
ฟอนต์เหล่านี้มีหนังสืออนุญาตแบบ LGPL/SISSL โดย (C) Sun Microsystems (Thailand) Ltd. ต้องขอบคุณ Sun Thailand จริงๆ. ได้ยินมาจากคุณ bact' ว่าทางซันไทยแลนด์ให้บริษัทอัลกอริทึมสร้างให้อีกต่อหนึ่ง.

ติดตั้งฟอนต์ภาษาไทยใหม่ในลินุกซ์ (แบบ fontconfig)

ดาว์นโหลดฟอนต์ปลาดาว (oo-fonts.zip) แล้วก็อปปี้ไฟล์ต่างๆไว้ที่ ~/.fonts.
$ cd ~/.fonts
$ unzip [ไดเรกทอรีที่ดาว์นโหลดไฟล์ไว้]/oo-fonts.zip
$ fc-cache -fv
คำสั่ง fc-cache เป็นคำสั่งอัปเดทฐานข้อมูลของฟอนต์. ตัวเลือก -f บังคับให้ทำงานในกรณีที่ตัวโปรแกรมอาจจะไม่ทำงานเพราะฐานข้อมูลที่มีอยู่เป็นตัวล่าสุดอยู่แล้ว. ตัวเลือก -v ให้แสดงผลต่างๆทางหน้าจอ. หลังจากนั้นใช้คำสั่ง fc-list ดูชื่อฟอนต์ที่ใส่เข้าไปใหม่.
$ fc-list | grep OO
OONaksit:style=Italic
OOThanakrit:style=Italic
OOAnnop:style=Regular
OORatchada:style=Regular
OONaksit:style=Bold Italic
OOAnnop:style=Bold Italic
OOThaiSymbol:style=Regular
OORatchada:style=Italic
OOThanakrit:style=Bold
OONaksit:style=Bold
OOThanakrit:style=Regular
OOThanakrit:style=Bold Italic
OOSawasdee:style=Bold
OOAnnop:style=Italic
OOSawasdee:style=Regular
OORatchada:style=Bold Italic
OOSawasdee:style=Bold Italic
OOSawasdee:style=Italic
OONaksit:style=Regular
OOAnnop:style=Bold
OORatchada:style=Bold
ลองใช้คำสั่ง xfd ดูอักขระต่างๆเช่น xfd -fa OONaksit

เท่าที่สังเกตด้วยตา, ฮินต์ของฟอนต์ไม่ค่อยดีเท่าไหร่ทำให้ฟอนต์เล็กๆดูเส้นขาดๆไม่สวย. คิดว่าเอามาใช้งานแสดงบนหน้าจอไม่ค่อยดีนัก. ตอนแรกว่าเห็นว่าฟอนต์ OOAnnop กับ OONaksit เป็นฟอนต์ fixed-width ก็อยากจะเอามาใช้กับเทอร์มินอล. แต่ใช้ TlwgMono จะดูดีกว่าเลยเปลี่ยนความคิดไป.

ฟอนต์ที่พิเศษหน่อยและชอบคือฟอนต์ OOThaiSymbol, เป็นเครื่องหมายต่างๆดูดีทีเดียวครับ.

ภาพประกอบข้างบนใช้โปรแกรม gnome-font-viewer ดูและระบุไฟล์ฟอนต์เป็นอาร์กิวเมนต์.

ลองฟอนต์ Pladao - Friday, February 25, 2005 -

ดูโปรแกรมมาตรฐานเก่าๆในระบบ X วินโดว์อีกครั้ง

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

"ไม่มีคำว่าสายสำหรับการเริ่มต้น"

จะว่าผมล้าสมัยก็ได้, วันนี้เพิ่งดูอย่างจริงจังว่าหลังจากที่ X ใช้ Xft/fontconfig (ซึ่งก็นานแล้ว) มีตัวเลือกเกี่ยวกับฟอนต์ -fa เพิ่มขึ้นมาสำหรับโปรแกรมมาตรฐานในระบบ X วินโดว์. คือปรกติใช้แต่ -fn แล้วระบุชื่อฟอนต์แบบ XLFD ซึ่งเข้าใจยากเช่น

$ xfd -fn -nectec-fixed-bold-r-normal--18-180-72-72-c-90-tis620-0
ตรงนี้ก็มีทางหนีทีไล่คือไปสร้างไฟล์ fonts.alias เขียนชื่อสั้นเป็นนามแฝงให้กับชื่อฟอนต์แบบ XLFD. ถ้าใช้ตัวเลือก -fa จะเป็นการระบุฟอนต์แบบ fontconfig คือชื่อตามที่แสดงด้วยคำสั่ง fc-list.
$ fc-list
Luxi Serif:style=Regular
LucidaBright:style=Italic
Utopia:style=Bold Italic
Nimbus Sans L:style=Regular Italic
...
คราวนี้เอาชื่อฟอนต์สไตล์ fontconfig มาใช้เช่น
$ xfd -fa TlwgMono &
$ xfd -fa TlwgMono:style=Bold &
$ xfd -fa TlwgMono-10 &  ( หรือ xfd -fa TlwgMono:size=10 )

นอกจากโปรแกรมมาตรฐาน X วินโดว์ xfd แล้วเท่าที่รู้มี xterm ใช้ตัวเลือก -fa ได้ (เคยเห็นในบล็อกของพี่ฮุ้ย). แล้วจะรู้ได้ยังไงว่าโปรแกรมไหน (อาจจะ) ใช้ตัวเลือก -fa ได้ก็ใช้คำสั่ง ldd ซึ่งเอาไว้ดูว่าโปรแกรมใช้แชร์ไลบรารี (shared library) อะไรบ้าง. ถ้ามี libXft* อยู่ก็น่าจะใช้ตัวเลือก -fa ได้ด้วย. อันนี้ผมหมายถึงโปรแกรมมาตรฐาน X วินโดว์เก่าๆนะ.
$ ldd `which xfd` | grep Xft
        libXft.so.2 => /usr/lib/libXft.so.2 (0x40040000)
$ ldd `which xedit` | grep Xft (ใช้ตัวเลือก -fa ไม่ได้)
เลยทำการสำรวจโปรแกรมที่อยู่ใน /usr/X11R6/bin ทั้งหมดซะเลย
$ for i in /usr/X11R6/bin/*; do  if (ldd $i | grep Xft > /dev/null); then echo $i; fi; done
ldd: error: you do not have read permission for `/usr/X11R6/bin/X'
ldd: error: you do not have read permission for `/usr/X11R6/bin/Xorg'
ldd: /usr/X11R6/bin/lesstif: No such file or directory
/usr/X11R6/bin/x11perf
/usr/X11R6/bin/xclock
/usr/X11R6/bin/xditview
/usr/X11R6/bin/xfd
/usr/X11R6/bin/xlogo
สรุปว่ามีไม่กี่โปรแกรมที่ใช้ libXft* และรู้สึกจะมีแค่โปรแกรม xfd ที่ใช้ตัวเลือก -fa เท่านั้น. ส่วนพวก xclock เลือกฟอนต์ (-face) ตอนที่แสดงเป็นนาฬิกาดิจิตอล. xlogo ไม่เห็นมีให้เลือกฟอนต์แต่ใช้ Xft ? ขึ้เกียจคิดต่อว่ามันเอาไปใช้ตรงไหน.

ดูโปรแกรมมาตรฐานเก่าๆในระบบ X วินโดว์อีกครั้ง - -

IP forwarding บนวินโดวส์ XP และลินุกซ์

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

วันนี้ที่ทำงานมีความจำเป็นต้องทำให้เครื่องวินโดวส์ XP เป็น router, คือทำให้มันส่งผ่าน IP ทราฟฟิกข้ามเน็ตเวิร์กให้ได้. เคยจำได้ว่าพี่ฮุ้ยเคยเขียนในบล็อกว่าแก้ใน registry, วันนี้ไปหาข้อมูลมาได้เอกสารของ Microsoft kb315236 (kb = knowledge base). ในนั้นบอกว่าให้แก้ registry. แก้แล้วเครื่องนั้นก็ยังไม่ยอมทำ IP forwarding ให้. ไปอ่านเจอในเน็ตบอกว่าต้องรีบูตเครื่องด้วย. พอรีบูตเครื่องแล้วก็ใช้ได้ (แล้วทำไมในเอกสารไม่เขียนบอกให้รีบูตเครื่องด้วยหนอ).

เทียบกับลินุกซ์ถ้าจะทำอะไรที่เหมือนกับในกรณีนี้ก็แค่

# echo 1 > /proc/sys/net/ipv4/ip_forward
ก็เรียบร้อย. /proc เป็นระบบไฟล์ (proc file system) พิเศษที่จำลองข้อมูลภายในเคอร์เนลให้แสดงอยู่ในรูปของไฟล์และไดเรกทอรี, อำนวยความสะดวกดูค่าหรือปรับค่าต่างๆของเคอร์เนลได้ทันที. ในกรณีนี้เป็นการแก้ไขค่าพารามิเตอร์ชั่วคราว, ถ้ารีบูตแล้วค่านั้นจะหายไปต้องตั้งใหม่. ดังนั้นจึงต้องหาสคริปต์ที่รันตอนบูตไว้ตั้งค่าเหล่านี้. เช่นเขียนคำสั่งนั้นไว้ที่ /etc/rc.d/rc.local สำหรับดิสโทรตระกูล Red Hat, ไฟล์ /etc/conf.d/local.start สำหรับ Gentoo, สำหรับ Debian ไม่มีไฟล์ rc.local ก็ให้ไปเขียนเป็น init script แยกไว้หรือเขียนแก้ไฟล์ /etc/inittab เลย.

แต่การแก้ไขค่าพารามิเตอร์ที่เกี่ยวกับเคอร์เนล, นอกจากจะทำผ่าน /proc แล้วยังใช้คำสั่ง sysctl ได้ด้วย.

# sysctl -a
sunrpc.tcp_slot_table_entries = 16
sunrpc.udp_slot_table_entries = 16
sunrpc.nlm_debug = 0
sunrpc.nfsd_debug = 0
sunrpc.nfs_debug = 0
sunrpc.rpc_debug = 0
...
ตัวเลือก -a จะแสดงชื่อพาราติเตอร์ต่างๆและค่า. หรือถ้าจะเปลี่ยนค่าก็ใช้ตัวเลือก -w
# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
ในตัวอย่างจะให้ผลเหมือนกับการแก้ไขไฟล์ /proc/sys/net/ipv4/ip_forward โดยตรง.

โดยปรกติแล้วเวลาบูตเครื่องจะมีการรันคำสั่ง sysctl ด้วยเพื่อตั้งค่าพารามิเตอร์ต่างๆ. ถ้าอยากจะปรับแต่พารามิเตอร์ของเคอร์เนลอะไรแบบถาวรก็เขียนไว้ในไฟล์ /etc/sysctl.conf จะดีที่สุด.

เขียนถึง IP forwarding ตอนแรกแต่ดันกลายมาเป็นแนะนำคำสั่ง sysctl ไปซะแล้ว.

IP forwarding บนวินโดวส์ XP และลินุกซ์ - Thursday, February 24, 2005 -

ทยอยแจก Gmail

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

เพิ่งเห็นว่าเดี๋ยวนี้ Gmail มีโควต้าให้ผู้ใช้เชิญชวนคนอื่นที่ยังไม่มีแอกเคานต์เพิ่มมากขึ้น. ตอนนี้มีเยอะมากพอควร, ไม่ได้ใช้อะไรเอามาแจกที่นี่แล้วกันครับ.

คำเตือน:
กรุณาอย่าโลภมาก, ถ้าใครมี Gmail ก็อย่าเอานะครับ. สำหรับคนที่ต้องการมีแอกเคานต์ก็อย่าเอาเกินหนึ่งอันนะครับ.

  • http://gmail.google.com/gmail/a-3c4d81138e-f7190937d5-3c0beafc0c
  • http://gmail.google.com/gmail/a-3c4d81138e-b5f7aa7f7b-52ec489cd7
  • http://gmail.google.com/gmail/a-3c4d81138e-2543b24606-700f22a06b
  • http://gmail.google.com/gmail/a-3c4d81138e-fe968bbdf0-ea59367ccd
  • http://gmail.google.com/gmail/a-3c4d81138e-7e5d77a58c-a2262e36e8

ที่ผมได้ใช้ gmail ก็ได้รับมาจากพี่ฮุ้ยนี่แหละ (ขอบคุณครับ). และก็ไปขอที่ gmail swap ครับ. อีกอย่างหนึ่งคือ, ที่เริ่มเขียนบล็อกตอนแรกก็เพราะอยากได้ Gmail นั่นแหละครับ.

ทยอยแจก Gmail - -

อ้างอิงเผื่อต้องการสร้าง blog เอง

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

ถ้าพูดถึง blog software ที่เห็นเว็บแอพพลิเคชันแนวหน้าคงหนีไม่พ้น Movable Type ซึ่งได้รับความนิยมมากจากหมู่นักดีไซน์. สวยงาม, มีคุณสมบัติพีเจอร์ต่างๆ. แต่ Movable Type ไม่ใช่ซอฟต์แวร์เสรีถ้าจะเอาไปใช้ในบริษัทต้องจ่ายค่าใช้งาน (อันนี้ไม่แน่ใจให้ไปอ่านหนังสืออนุญาตเองครับ). ถ้าพูดถึง blog software ที่เป็นซอฟต์แวร์เสรีก็มีมากมายเหลือเกิน. คนใน TLWG ก็ใช้กันหลากหลาย. ตัวผมเองไม่เคยใช้อย่างจริงจังแต่เห็นคนอื่นใช้แล้วได้ความรู้ว่ามันเป็นอย่างไรกันบ้าง. นอกเหนือจากนี้มีเว็บที่เขียนเปรียบเทียบ Blog ต่างๆไว้. เก็บเป็นลิงก์ไว้คราวหน้าถ้าต้องการสร้างบล็อกเองจะได้มาดูอ้างอิงทีหลัง.
อ้างอิงเผื่อต้องการสร้าง blog เอง - -

Mydoom ตัวแสบ

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

วันนี้งานหลักคือปราบไวรัส w32/Mydoom.be@mm . ตั้งแต่เช้ามีหลายคนที่ทำงานได้รับเมลที่มีชื่อเรื่องว่า "Returned mail: Data format error" บอกว่าเมลส่งไม่ได้บ้าง, "Mail System Error - Returned Mail" บ้างหลอกให้คนอ่านเปิดดูไฟล์ที่แนบมาด้วย. แล้วผู้ใช้ทั่วไปก็หลงกลตามที่คาด, ดันไปเปิดไฟล์ที่แนบมาเป็นไวรัส. ไวรัสอันนี้ตอนเช้ามีความอันตรายระดับต่ำแต่ตอนนี้เริ่มเปลี่ยนระดับเป็นปานกลางแล้ว. ข้อมูลตอนเช้าก็ยังมีไม่มากทำให้ต้องดูเองว่าน่าจะแก้ไขอย่างไร. แถมไฟล์ DAT ที่ใช้ได้จริงๆตอนเช้าก็ยังไม่ออกเลยต้องลุยแก้ไขด้วยตัวเอง (ทางอเมริกาคงหลับอยู่).

หลักการสำรวจว่าเครื่องมีไวรัสหรือไม่มักจะคล้ายๆกัน. ในกรณีนี้ได้แก่

  • ใช้ Task manager ดูโปรเซสที่แปลกปลอม. เห็นมาโปรเซสชื่อ java.exe (ไม่ได้รัน java แต่มีโปรเซส java), services.exe, letter.exe, instruction.com แล้วแต่กรณี. โปรเซสพวกนี้รันโดยยูสเซอร์. ฆ่าโปรเซสพวกนี้ทิ้งซะแล้วหาว่าไฟล์นั้นอยู่ที่ไหนเพื่อที่จะลบออกจากระบบต่อไป. โปรเซสที่ไม่แน่ใจก็อาจเอาค้นหาในกูเกิ้ล, จะมีไซด์ที่แนะนำชื่อโปรเซสสำคัญๆในวินโดวส์ให้อยู่แล้ว.
  • เปิดหน้าต่างพรอมต์แล้วลองรัน netstat หรือ netstat -a ดูจะเห็นว่าเครื่องตัวเองพยายามติดต่อกับเว็บไซด์ search engine, ติดต่อกับ smtp ไหนต่อไหนเพียบ. หลังจากที่โปรเซสแปลกปลอมตายไป, connection ก็น้อยลงเป็นลำดับ.
  • เปิด regedit หาชื่อโปรเซสเช่น java.exe (โปรเซสแปลกปลอม) ก็จะไปเจอว่าถูกบันทึกให้รันตอนเริ่มต้นทุกครั้ง. อันนี้เป็นเทคนิกประจำที่พวกไวรัสชอบทำกัน. ลบทิ้งซะ. ดูด้วยว่าไฟล์โปรแกรมอยู่ที่ไหนแล้วก็ไปลบซะ.
คิดว่าถ้ามีไวรัสออกมาอย่างนี้บ่อยผู้ใช้ทั่วไปน่าจะฉลาดขึ้นและรู้เสียทีว่า email header และเนื้อหามันปลอมกันได้ง่ายแค่ไหน.

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

$ netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 *:32768                 *:*                     LISTEN
tcp        0      0 *:6881                  *:*                     LISTEN
tcp        0      0 *:wnn6                  *:*                     LISTEN
tcp        0      0 *:997                   *:*                     LISTEN
tcp        0      0 *:sunrpc                *:*                     LISTEN
tcp        0      0 *:6000                  *:*                     LISTEN
tcp        0      1 192.168.11.5:32994      8.Red-80-32-30.po:49152 SYN_SENT
tcp        0      0 192.168.11.5:32992      12-216-17-189.clie:6881 ESTABLISHED
tcp        0      0 192.168.11.5:32990      128.238.9.251:www       TIME_WAIT
tcp        0      0 192.168.11.5:32996      p83.129.79.3.tisdi:8996 ESTABLISHED
tcp        0      1 192.168.11.5:32995      ip68-106-218-95.o:12648 SYN_SENT
tcp        0      0 192.168.11.5:32993      did75-1-81-57-21-3:6889 ESTABLISHED
ตัวเลือก -a คือดูข้อมูลสถานะทั้งหมด, -t คือเลือกเฉพาะโพรโทคอล tcp. สมมติว่าสงสัยว่าโปรเซสอะไรที่ใช้พอร์ต 32768 อยู่ก็ใช้คำสั่ง fuser เข้าช่วย.
$ fuser -vn tcp 32768
here: 32768
 
                     USER        PID ACCESS COMMAND
32768/tcp            poonlap   14875 f....  kinput2
ตัวเลือก -n tcp ระบุว่าอาร์กิวเมนต์ 32768 เป็นพอร์ตที่เกี่ยวกับโพรโทคอล tcp. -v ให้แสดงรายละเอียดจะได้รู้ว่าโปรเซสที่ใช้พอร์ตนั้นมีชื่อว่าอะไร, ไม่เช่นนั้นจะแสดงค่าโปรเซส ID.
Mydoom ตัวแสบ - Monday, February 21, 2005 -

Typespeed Thai - คุณพิมพ์ไทยเร็วแค่ไหน?

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

เคยได้ยินชื่อโปรแกรม typespeed มานานพอควรแล้วแต่ไม่เคยลองใช้ดู. วันนี้ไม่รู้นึกอย่างไรลอง emerge ดูลองเล่นดูแล้วชักมันส์. ตอนแรกนึกว่าเป็นโปรแกรม GUI แต่พอรันดูเป็นโปรแกรมที่ใช้ ncurse เล่นบนเทอร์มินอลแถมมีการใช้เน็ตเวิร์กแข่งกันด้วย (ยังไม่ได้ลอง).

ชอบตรงที่ใช้เทอร์มินอลคือเล่นได้สะดวกดี, มีให้วัดการพิมพ์คำสั่งยูนิกซ์ต่างๆ, ภาษาอังกฤษ, สเปน แต่ไม่มีภาษาไทย. เลยลองเพิ่มภาษาไทยซะเลย.

ใน Gentoo ไฟล์รหัสต้นฉบับที่ดาว์นโหลดมาจะอยู่ที่ /usr/portage/distfiles ก็เลยเอามากระจายที่โฮมไดเรกทอรีดู.

$ ls
BUGS      README  misc.c       typespeed.h  words.fin         words.unix
COPYING   TODO    network.c    words.dos    words.portuguese
Changes   file.c  typespeed.1  words.dut    words.prog
Makefile  menu.c  typespeed.c  words.eng    words.spanish
ดูไปดูมาปรากฏว่าถ้าเอาไฟล์รายการคำศัพท์ภาษาไทยมาชื่อ words.thai มาวางไว้ก็น่าจะใช้ได้เลย. ปัญหาต่อมาคือจะสร้างไฟล์ศัพท์ภาษาไทยอย่างไร?

สร้างไฟล์คำศัพท์

จำได้ว่าใน cttex จะมีไฟล์คำศัพท์อยู่เลยไปกระจายรหัสต้นฉบับ cttex ดูและใช้ไฟล์ riwords.txt เป็นจุดเริ่มต้น. ในไฟล์นี้มีคำศัพท์เยอะมาก, คำศัพท์บางตัวมีเครื่องหมาย - อยู่ด้วย, หรือมีช่องไฟ. คำศัพท์พวกนี้ไม่อยากได้จะเลือกทิ้งครับ. อีกอย่างอยากจะได้คำศัพท์ที่เกิดจากอักษร 3 ตัวขึ้นไปเท่านั้นเลยทำอย่างนี้.
 
$  grep -v ' '  riwords.txt | grep -v -- - | grep '...' > words.thai
เสร็จแล้วที่บรรทัดแรกเขียนภาษาอังกฤษไว้ว่า
Thai words
เป็นอันได้ไฟล์คำศัพท์ภาษาไทยสำหรับใช้กับ typespeed ครับ.

ปัญหา

หลังจากทดสอบแล้วปรากฏว่ามีการแสดงผลผิดพลาด, เช่น "ล" กลายเป็น "ๅ". เลยไปดูซอร์สโค้ดแล้วน่าจะเกิดจากโค้ดส่วนที่แปลงอักษรตัวใหญ่ให้เป็นตัวเล็กเลยแก้ไฟล์ misc.c ไม่ให้แปลง. ตรงนี้อาจจะมีผลกับคำภาษาอังกฤษ.
   102  int clower(int lchar)
   103  {
   104          /*
   105          switch (lchar) {
   106          case -60:
   107                  lchar = -28;
   108                  break;
   109          case -59:
   110                  lchar = -27;
   111                  break;
   112          case -42:
   113                  lchar = -10;
   114                  break;
   115          default:
   116                  lchar = tolower(lchar);
   117                  break;
   118          }
   119          */
   120          return lchar;
   121  }

คอมไพล์

ผมรวบไฟล์ศัพท์ภาษาไทยและตรงที่แก้แล้วไว้เป็น typespeed-thai-0.4.4.tar.gz. ดาวน์โหลดแล้วกระจาย, คอมไพล์แบบนี้ครับ.
$ wget -nd http://linux.thai.net/~poonlap/code/typespeed-thai-0.4.4.tar.gz
$ tar xzvf typespeed-thai-0.4.4.tar.gz
$ cd typespeed-0.4.4
$ make
rm -f typespeed *.o high.*
gcc  -O -D_GNU_SOURCE -Wall   -c -o file.o file.c
gcc  -O -D_GNU_SOURCE -Wall   -c -o menu.o menu.c
gcc  -O -D_GNU_SOURCE -Wall   -c -o misc.o misc.c
gcc  -O -D_GNU_SOURCE -Wall   -c -o network.o network.c
gcc  -O -D_GNU_SOURCE -Wall file.o  menu.o  misc.o  network.o -o typespeed typespeed.c -lncurses
$ ./typespeed
สั่งคำสั่ง ./typespeed แล้วเล่นได้เลยครับ. คำศัพท์ที่โปรแกรมสุ่มมาแสดงก็เข้าท่าดีครับ. บางคำก็ตลกดี.

เกี่ยวกับเทอร์มินอลที่ใช้

ผมใช้ gnome-terminal กับฟอนต์ TlwgMono ที่สร้างเอง. จากเมนูบาร์ให้เลือก "Terminal" > "Set Character Encoding" เลือก Thai (TIS-620). ส่วนเซ็ตฟอนต์ของเทอร์มินอลก็ให้เซ็ตที่ "Edit" > "Profiles" ครับ. หรือถ้าไม่ใช้ gnome-terminal ก็ใช้ xiterm+thai ก็ได้.


เพิ่มเติม 1

แก้รหัสต้นฉบับโดยเพิ่มตัวเลือก --thai ให้กับโปรแกรม. ในกรณีที่ใช้ตัวเลือกนี้จะไม่เรียกใช้ฟังก์ชัน tolower(). และเพิ่มคำภาษาไทยเป็นสามชนิดได้แก่.
  • คำศัพท์ทั่วไปจากไฟล์ riwords.txt (ri ย่อมาจาก Royal Institute, ราชบัณฑิตยสถาน)
  • อักษรภาษาไทยพื้นฐาน (ไม่รวม ๎ ฺ ฿ ๛ ๏ ๚) สำหรับฝึกพิมพ์ภาษาไทยเบื้องต้น
  • คำศัพท์ทั่วไปที่ใช้บ่อย. จาก Keywords and frequencies listing tool (new corpus). เลือกเอาเฉพาะคำที่มีความถี่มากกว่า 10,000.
ในหน้าจอเลือกคำที่จะใช้เป็นแบบนี้ครับ.
                                                                                
                                                                                
     Choose a wordfile (UP/DOWN/ENTER):
                                                                                
     Unix commands
 ->  Thai common words (need --thai option)
     Thai basic characters (need --thai option)
     Thai words (needs --thai option)
     Spanish words
     Programming functions
     Portuguese words
     Finnish words
     English words
     Nederlandse zut
     Dos commands
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
--------------------------------------------------------------------------------
 >                   < Rank: None     Score: 0   tCPS: 0.00 cCPS: 0.00 Misses:0

แพชและไฟล์ต้นฉบับ

วิธีสร้างและใช้งาน
$ wget -nd http://linux.thai.net/~poonlap/code/typespeed-0.4.4.tar.gz
$ wget -nd http://linux.thai.net/~poonlap/code/typespeed-0.4.4-thai.patch
$ tar xzvf typespeed-0.4.4.tar.gz
$ cd typespeed-0.4.4
$ patch -p1 < ../typespeed-0.4.4-thai.patch
$ make
$ ./typespeed --thai
ต้องใช้เทอร์มินอลภาษาไทยแบบลงรหัส (encoding) TIS-620 ครับ.
Typespeed Thai - คุณพิมพ์ไทยเร็วแค่ไหน? - Thursday, February 17, 2005 -

8 ปีที่แล้วกับหนังสือเก่าๆเล่มหนึ่ง

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

ไปลื้อค้นมาจากข้อมูลที่เคยแบ็กอัปไว้, เลยเอามาแปะไว้ที่นี่ครับ. นึกไม่ถึงว่าผ่านไปแล้ว 8 ปี.

[รูปขยายใหญ่] [ดาว์นโหลด]

หนังสือเล่มนี้เป็นหนังสือเล่มหนึ่งในชุด "รายงานการประชุมประชาคมไทยในญี่ปุ่น" เป็นหนังสือประกอบการประชุมเชิงปฏิบัติการเรื่อง "พหุภาษาโลกาภิวัฒน์: การปรับระบบคอมพิวเตอร์ให้สนับสนุนการทำงานหลายภาษา". การประชุมนี้จัดโดยสมาคมนักวิชาชีพไทยในญี่ปุ่น (สวทญ.) สนับสนุนโดยสำนักงานที่ปรึกษาด้านวิทยาศาสตร์และเทคโนโลยี ประจำสถานเอกอัครราชทูตไทย ณ กรุงโตเกียว ระหว่างวันที่ 12-14 กันยายน 2540.

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

หนังสือเล่มนี้เป็นหนังสือรวมบทความที่เขียนโดยบุคคลหลายคน. เรียนเรียงโดย LaTeX บนระบบปฏิบัติการ Linux. ใช้ LaTeX style สมัยเริ่มต้นและได้รับคำแนะนำและความช่วยเหลือจากคุณวุฒิชัย (พี่ฮุ้ย).

Download:

8 ปีที่แล้วกับหนังสือเก่าๆเล่มหนึ่ง - Wednesday, February 16, 2005 -

multixterm - หน้าต่างเดียวควบคุมทั้งหมด

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

จำได้ว่าแต่ก่อนเคยใช้ Sun cluster จะมี cluster console สำหรับควบคุมโฮสแต่ละตัวจากเทอร์มินอลอันเดียว. ในลินุกซ์เคยหาโปรแกรมแบบนี้ไว้ใช้แต่ไม่ค่อยเจอเท่าไร. วันนี้กันลืมเลยขอเขียนถึงโปรแกรม multixterm ซึ่งทำอะไรได้คล้ายๆกับ sun cluster console.

multixterm เป็นโปรแกรมสคริปต์เขียนด้วยภาษา expect. และเจ้าภาษา expect นี้จริงๆแล้วก็แตกแขนงมาจาก Tcl/Tk อีกทีหนึ่ง. multixterm สามารถดาว์นโหลดได้จากเว็บไซด์ของ expect. หลังจากที่ดาว์นโหลดไฟล์มาแล้วต้องแก้ไขบรรทัดแรกของไฟล์ให้ชี้ไปที่ full path ของโปรแกรม expect.

โปรแกรม multixterm จะแสดงหน้าต่างเล็กๆมีปุ่มให้สร้าง xterm. ถ้ามี xterm มากกว่าสองตัวและต้องการสั่งคำสั่งส่งให้ xterm ทั้งหมดพร้อมๆกันก็พิมพ์ตรงหน้าต่างหลักที่เขียนไว้ว่า stdin window.

โปรแกรม multixterm มีประโยชน์ในกรณีที่ต้องการสั่งคำสั่งบางอย่างทีเดียวให้กระทำการในคอมพิวเตอร์หลายเครื่องพร้อมๆกัน. ผู้ใช้สามารถล็อกอินแต่ละโฮสจาก xterm ที่สร้างไว้. แล้วคำสั่งทีเดียวที่หน้าต่างหลัก. เนื่องจากตัวโปรแกรม multixterm เองเป็นสคริปต์, ผู้ใช้สามารถเขียนสคริปต์เช่นล็อกอินเข้าใช้โฮสต่างๆตามที่เตรียมไว้ได้ด้วย.

multixterm - หน้าต่างเดียวควบคุมทั้งหมด - -

ทำไมถึงมีรางวัล Nobel

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

ถ้าพูดถึงรางวัลโนเบล (Nobel prize) คุณนึกถึงอะไร?

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

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

เลยนึกได้อีกเรื่องคือ Thomas Edison. แต่ก่อนก็เคยรู้จัก Edison ในแง่นักประดิษฐ์อัจฉริยะ. ใครๆก็นิยมชื่นชอบ. แต่หลังจากที่ได้รู้ว่าเขาเป็นคนอย่างไรแล้วเลิกนับถือได้เลย. ใครที่เคยคิดไว้ว่าอยากเก่งเหมือน Edison โอเคครับแต่อย่าเป็นคนแบบ Edison. ต้องไปรื้อฟื้นความจำแล้วจะมาเขียนถ้ามีโอกาส.

หมายเหตุ
เรื่องของ Alfred Nobel ที่เขียนวันนี้เขียนจากความจำ, อาจจะมีข้อผิดพลาด.


幸福を得ようとする者は幸せを得られないが、人に幸せを与える者はそれを得る
ผู้ที่ต้องการความสุขยากที่จะได้ความสุข, ถ้าต้องการความสุขต้องเป็นผู้ให้ความสุขกับผู้อื่น
ทำไมถึงมีรางวัล Nobel - Friday, February 11, 2005 -

สร้างออฟฟิศทะเลไว้ใช้ใน Gentoo

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

ปรกติไม่มีโอกาสใช้โปรแกรมออฟฟิศกับเขาเท่าไหร่เลยไม่เคยใช้ Office TLE หรือ Office Pladao เลย. ถ้าใช้ก็เพียงแค่เปิดดูเอกสารเวิร์ดที่เป็นภาษาอังกฤษเท่านั้น. คิดไว้นานแล้วว่าอยากจะคอมไพล์เองดูซะหน่อย. ไปดูที่ FTP ของ Linux TLE มีแพชแยกไว้ให้อย่างดี (ต้องขอบคุณทีมงานอย่างยิ่ง) เลยดาว์นโหลดมาทั้งหมดแล้วอ่านวิธีสร้างจากรหัสต้นฉบับ. ปรากฏว่าเกิดข้อผิดพลาดกลางทางเลยทำใจใหม่, ใช้ ebuild สร้างดีกว่า.

เปลี่ยนไปใช้วิธี Gentoo

  • กระจายรหัสต้นฉบับ OO 1.1.3 ซึ่งทะเลก็ใช้อันนี้เป็นต้นแบบ.
    # cd /usr/portage/app-office/openoffice
    # ebuild openoffice-1.1.3.ebuild unpack
    
  • แพชภาษาไทยที่ดาว์นโหลดมา
    # cd /var/tmp/portage/openoffice-1.1.3/work/OOo_1.1.3_src
    # for i in /mnt/hda/OfficeTLE/OOTLE_1.1.2_patch/ootle112_*
    > do 
    >patch -p0 -b < $i
    >done
    
    ในที่นี้กระจายแพชที่ดาว์นโหลดมา OOTLE_1.1.2_patch.tar.gz ไว้ที่ /mnt/hda/OfficeTLE
  • เสร็จแล้วคอมไพล์.
    # cd /usr/portage/app-office/openoffice
    # ebuild openoffice-1.1.3.ebuild compile
    
เห็นในเอกสารบอกว่าใช้เวลาประมาณ 4 ชั่วโมงจึงจะเสร็จ. วันนี้คงนอนโดยไม่ปิดเครื่องครับ. อธิฐานให้ตื่นขึ้นมาไม่มีข้อผิดพลาดแล้วกัน. พรุ่งนี้จะรายงานต่อครับ.

เพิ่มเติม 1
ยังไม่ทันข้ามคืนรันไปได้ 50 นาทีก็เกิดข้อผิดพลาดเสียแล้ว. หาไฟล์ interface.h ไม่เจอ! แล้วมันไปเกี่ยวอะไรกับ cmdtools/win32 ล่ะเนี่ย.

------------------------------
Making: ../../../unxlngi4.pro/bin/setofficelangui.bin
unx
cat ../../../unxlngi4.pro/misc/setofficelangui.cmd
gcc -z combreloc -z defs -Wl,-rpath,'$ORIGIN' -Wl,-export-dynamic 
-Wl,--noinhibit-exec -L../../../unxlngi4.pro/lib -L../lib 
-L/var/tmp/portage/openoffice-1.1.3/work/OOo_1.1.3_src/solenv/unxlngi4/lib 
-L/var/tmp/portage/openoffice-1.1.3/work/OOo_1.1.3_src/solver/645/unxlngi4.pro/lib 
-L/var/tmp/portage/openoffice-1.1.3/work/OOo_1.1.3_src/solenv/unxlngi4/lib 
-L/opt/blackdown-jdk-1.4.1/lib -L/opt/blackdown-jdk-1.4.1/jre/lib/i386
 -L/opt/blackdown-jdk-1.4.1/jre/lib/i386/client 
-L/opt/blackdown-jdk-1.4.1/jre/lib/i386/native_threads -L/usr/lib -o 
../../../unxlngi4.pro/bin/setofficelangui.bin 
../../../unxlngi4.pro/obj/setofficelangui.o ../../../unxlngi4.pro/obj/interface.o 
-Wl,--whole-archive -lsalcpprt -Wl,--no-whole-archive -lsal -lcppu -lcppuhelpergcc3 
-Wl,--export-dynamic -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm 
-lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
 -Wl,-Bdynamic -lXext -lX11 -ldl -lnsl -ldl -lpthread -lm -Wl,-Bdynamic -lstlport_gcc
 -lstdc++
-rwxr-xr-x    1 root     root       139962 Feb 10 00:07 
../../../unxlngi4.pro/bin/setofficelangui.bin
-------------
/var/tmp/portage/openoffice-1.1.3/work/OOo_1.1.3_src/configmgr/source/cmdtools/win32
dmake:  Error -- `interface.h' not found, and can't be made
---* TG_SLO.MK *---
 
ERROR: Error 65280 occurred while making /var/tmp/portage/openoffice-1.1.3/work/OOo_1.1.3_src/configmgr/source/cmdtools/win32
 
!!! ERROR: app-office/openoffice-1.1.3 failed.
!!! Function src_compile, Line 367, Exitcode 1
!!! Build failed!
!!! If you need support, post the topmost build error, NOT this status message.
 
 
real    49m38.028s
user    25m37.163s
sys     5m43.341s

เพิ่มเติม 2
แก้ไฟล์ที่สำหรับใช้ build.lst ข้ามไม่คอมไพล์ win32. ไม่รู้จะเวิร์กหรือเปล่า. ต้องลองดูครับ. ตอนนี้คอมไพล์ต่อไปได้แล้ว.

เพิ่มเติม 3
รู้สึกว่ามีปัญหากับ freetype. เดี๋ยวลองไบนารีแพ็กเกจดีกว่า.

/var/tmp/portage/openoffice-1.1.3/work/OOo_1.1.3_src/vcl/source/glyphs/gcach_ftyp.cxx
:1101: warning: converting to `int' from `double'
/var/tmp/portage/openoffice-1.1.3/work/OOo_1.1.3_src/vcl/source/glyphs/gcach_ftyp.cxx
: In member function `virtual ULONG FreetypeServerFont::GetKernPairs(ImplKernPairData**) const':
/var/tmp/portage/openoffice-1.1.3/work/OOo_1.1.3_src/vcl/source/glyphs/gcach_ftyp.cxx
:1582: warning: comparison is always false due to limited range of data type
dmake:  Error code 1, while making '../../unxlngi4.pro/slo/gcach_ftyp.obj'
---* TG_SLO.MK *---
 
ERROR: Error 65280 occurred while making /var/tmp/portage/openoffice-1.1.3/work/OOo_1.1.3_src/vcl/source/glyphs
 
!!! ERROR: app-office/openoffice-1.1.3 failed.
!!! Function src_compile, Line 367, Exitcode 1
!!! Build failed!
!!! If you need support, post the topmost build error, NOT this status message.
 
 
real    34m4.168s
user    19m29.652s
sys     4m0.845s

เพิ่มเติม 4
ยังไม่ได้กลับบ้านแต่ลองที่ที่ทำงานแล้ว, ใช้ไบนารีแพ็กเกจสบายกว่ากันเยอะ. อาจจะดาวน์โหลด OpenOfficeTLE1.1.2_Linux.tar.gz แล้วรัน setup หรือ install. หรือใช้แพ็กเจก rpm, office-tle-1.1.2-3.i386.rpm ก็ได้.

เปลี่ยนอินเทอร์เฟสภาษาไทยให้เป็นภาษาอังกฤษใช้คำสั่ง setofficelangui.bin ที่อยู่ในไดเรกทอรี program. ส่วนจะเพิ่มฟอนต์ทรูไทป์ก็เอาไปใส่ไดเรกทอรี share/fonts/truetype ที่อยู่ใต้ไดเรกทอรีติดตั้งครับ.

ส่งท้ายด้วยคำคมภาษาญี่ปุ่นขออนุญาตไม่แปลแล้วกัน. :)


四季の心

人に接するには春のように暖かい心で
仕事をするには夏ように燃える心で
物思うときは秋のように澄んだ心で
己を責めるときは冬のように厳しい心で


สร้างออฟฟิศทะเลไว้ใช้ใน Gentoo - Wednesday, February 09, 2005 -

ความเข้าใจผิด 10 ประการ

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

จำได้ว่าเคยไปเที่ยวบ้านเพื่อนญี่ปุ่นคนหนึ่งเมื่อ 5-6 ปีที่แล้ว. ที่ตู้เย็นมีปะกระดาษซึ่งเป็นกลอน(ไม่เชิง)ติดไว้หัวข้อว่า 「つもり違い十カ条」 (ความเข้าใจผิด 10 ประการ) อ่านแล้วชอบมากถามว่าเอามาจากไหน. ปรากฏว่าเป็นกระดาษห่อขนมพ่อของเพื่อนอ่านแล้วชอบก็เลยเอามาปะไว้ที่ตู้เย็น. วันถัดมาผมเลยขอให้ส่งเป็นเมลมาให้หน่อย. วันนี้เห็นพี่ฮุ้ยเขียนถึงชื่อใน MSN เลยได้ลื้อฟื้นพวกคำคมกัน. จริงๆแล้วจำชื่อหัวข้อไม่ได้หรอกแต่จำเนื้อหาได้บางส่วนเลยใช้เป็นคีย์เวิร์ดหาได้หลายอัน.

ได้ความมาว่า 「つもり違い十カ条」 เป็นคำกลอนที่อยู่ตรงทางเดินเข้าวัด 高尾山薬王院 (เคยไปแต่ไม่เคยสังเกตุเห็น). มีเนื้อหาดังนี้.

一、高いつもりで低いのは教養。
二、低いつもりで高いのは気位。
三、深いつもりで浅いのは知識。
四、浅いつもりで深いのはの皮。
五、厚いつもりで薄いのは人情。
六、薄いつもりで厚いのはの皮。
七、強いつもりで弱いのは根性。
八、弱いつもりでも強いのは。
九、多いつもりで少ないのは分別。
十、少ないつもりで多いのは無駄
ความหมายลึกซึ้งแต่ก็พอมีคนตีความในความหมายของตัวเองไว้.

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

ตรงข้อ 10 ทำให้นึกถึงคำของ Benjamin Franklin นักคิด, นักเขียนที่ผมชื่นชอบ. ในหนังสือ Poor Richard's Almanack เขาเขียนไว้ว่า.

 The Poor have little, Beggars none;
the Rich too much, enough not one.
ความเข้าใจผิด 10 ประการ - Tuesday, February 08, 2005 -

FireFox smart search + Google feature

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

เคยเขียนเรื่องเกี่ยวกับการใช้ FireFox smart search สำหรับใช้หาคำศัพท์จากพจนานุกรม longdo เมื่อปีที่แล้ว. วันนี้จะประยุกต์ใช้ smart search กับความสามารถการค้นหาของ Google ที่เรียกว่า domain search.

ท้าวความของปัญหาคือปรกติเวลาเขียนโปรแกรมด้วยไลบรารี Qt จะมีโปรแกรม assistant เป็นเบราเซอร์ช่วยหา API ให้สะดวกดี. แต่บางครั้งรู้สึกว่าสิ่งที่ต้องการยังไม่เพียงพอ, เช่นอยากจะหาวิธีแก้ปัญหาที่เกิดขึ้นจากเว็บไซด์เช่น lists.trolltech.com ก็ทำได้โดยการเปิด google (หรือช่องที่ให้หาคำใน FireFox) แล้วใส่สิ่งที่ต้องการหาเป็น "site:lists.trolltech.com keyword". วันนี้เลยผสม smart search กับ Google feautre เข้าด้วยกันซะเลยจะได้ไม่ต้องพิมพ์ "site:..." ให้เสียเวลา.

  • เปิด FireFox ไปที่ http://www.google.com. ชี้พอยเตอร์ไปที่ช่องที่หาคำแล้วกดคลิ้กขวา, เลือก "Add a Keyword for this search".

  • ตั้งชื่อ bookmark อันนี้เป็น Trolltech list, คีย์เวิร์ดที่ใช้กับ smart search เป็น "tlists".

    อันนี้จะเป็นการสร้าง bookmark เหมือนปรกติ, จะเก็บไว้ตรงไหนก็ได้แล้วแต่สะดวก.
  • เปิด Properties ของบุ๊คมาร์กอันนั้นเพื่อปรับแต่งให้ใช้ความสามารถของ google.

  • ตรง Location ต้องแก้ไขจาก
    http://www.google.com/search?q=%s&hl=en
    
    ให้เป็น
    http://www.google.com/search?q=site:lists.trolltech.com+%s&hl=en
    

    ตรงนี้คือจุดสำคัญว่าจะใช้ความสามารถของ google แบบไหนสามารถใส่คำอื่นๆแทน site:URI เช่น
    • define: สำหรับหาอภิธารศัพท์
    • filetype:pdf สำหรับหาเอกสารแบบ PDF เป็นต้น
  • เวลาใช้ก็เพียงแต่พิมพ์คีย์เวิร์ดที่ตั้งไว้ได้แก่ "tlists" ตามด้วยคำที่ต้องหาใน address bar. เมื่อกดคีย์ Enter แล้ว FireFox ก็จะใช้ google หาคำที่ต้องการที่อยู่ในเว็บ lists.trolltech.com เท่านั้น.

    เพื่อความรวดเร็ว, เวลาต้องการใช้สามารถกดคีย์ Ctrl+l กระโดดไปที่ address bar แล้วพิมพ์ "tlists keyword", กด Enter ได้เลย. เร็วกว่าใช้เมาส์.

FireFox smart search + Google feature - Friday, February 04, 2005 -

สร้าง FireFox ตัดคำภาษาไทยจากรหัสต้นฉบับ

ที่อยู่ใหม่ของ Poonlap's Linux blog : http://mm.co.th/poonlap

เขียนเรื่องเกี่ยวกับ FireFox ไปก็หลายครั้งแล้ว, ว่าจะไม่เขียนแล้วเพราะกลัวว่าจะซ้ำกับของเก่า. ต้องกล่าวนำก่อนว่าเนื้อหาอันนี้เป็นการแนะนำวิธีการคอมไพล์ FireFox จากรหัสต้นฉบับแบบทั่วไปและไม่ยึดติดกับดิสทริบิวชันที่ใช้อยู่.

เตรียมรหัสต้นฉบับ

ก่อนอื่นต้องดาว์นโหลดรหัสต้นฉบับ FireFox มาจากเว็บไซด์ของ mozilla.org โดยตรงจากลิงก์ต่อไปนี้

เมื่อกระจายรหัสต้นฉบับด้วยคำสั่ง tar jxvf firefox-1.0-source.tar.bzแล้วจะได้ไดเรกทอรีชื่อ mozilla. ขั้นตอนต่อไปคือดาว์นโหลดแพช (patch) ภาษาไทยต่างๆจากลิงก์ต่อไปนี้. สมมติว่าดาว์นโหลดแพชทั้งสองมาไว้ในไดเรกทอรีปัจจุบันเรียบร้อยแล้ว.
$ ls 
firefox-1.0-source.tar.bz2
firefox-1.0-thai-env.patch
mozilla/
mozilla-1.7.3-firefox-1.0-thunderbird-0.9-icuthai.patch

แพชของ FireFox

ตามที่คุณสัมพันธ์บอกไว้ทาง tlwg-devel ว่าในบางระบบอาจจะมีปัญหาเกี่ยวกับไลบรารี freetype รุ่นใหม่ๆทำให้เอาซอร์สมาคอมไพล์ดื้อๆจะไม่ผ่าน. ต้องไปเอาแพชของ FireFox มาแพชก่อน. ผมไปดูมาที่ bugzilla เอาแพชมาแพชแล้วแต่แพชไม่ได้. สุดท้ายเลยใช้แพชที่มากับ Gentoo ที่อยู่ในเครื่องครับ. ดาว์นโหลดเก็บไว้กับที่เดียวกันกับแพชอื่นๆ.

ตรวจสอบไลบรารี icu

แพชที่ใช้ในครั้งนี้ต้องการไลบรารี icu. ให้ลองสั่งคำสั่งต่อไปนี้.
$ icu-config --version
3.2
ถ้าตัวเลขที่แสดงมากกว่า 3.0 เป็นอันว่าใช้ได้. ถ้าไม่มีคำสั่งนี้แสดงว่าอาจจะไม่ไลบรารี icu ในระบบ.

แพชภาษาไทยอีกตัวหนึ่งซึ่งเป็นคนละตัวกับตัวอย่างในที่นี้ไม่ใช้ไลบรารี icu คือ firefox-cttex-wbr-b3.patch.gz . แพชนี้สร้างโดยคุณวุฒิชัย, ส่วนแพชแบบใช้ไลบรารี icu สร้างโดยคุณสัมพันธ์. ถ้าไม่อยากใช้ไลบรารี icu ก็ให้แพชของคุณวุฒิชัย.

แพชรหัสต้นฉบับ

คำสั่งที่ใช้ในการแก้รหัสต้นฉบับคือคำสั่ง patch. คำสั่งนี้จะรับข้อมูลจากข้อมูลนำเข้ามาตรฐานและใช้ตัวเลือก -pN บอกความลึกของโครงสร้างไดเรกทอรีที่ต้องการแพช. ตัวเลือก -b ใช้ให้สร้างไฟล์สำรองเก็บเนื้อหาก่อนเปลี่ยนแปลง.

$ cd mozilla
$ patch -p0 < ../mozilla-firefox-1.0-4ft2.patch
$ patch -p2 -b < ../mozilla-1.7.3-firefox-1.0-thunderbird-0.9-icuthai.patch
patching file config/autoconf.mk.in
Hunk #1 succeeded at 196 (offset 12 lines).
patching file intl/lwbrk/src/nsJISx4501LineBreaker.cpp
patching file intl/lwbrk/src/nsJISx4501LineBreaker.h
$ patch -p1 -b < ../firefox-1.0-thai-env.patch patching file toolkit/locales/en-US/chrome/global/intl.properties
Hunk #2 succeeded at 16 with fuzz 2.
patching file toolkit/locales/en-US/chrome/global-platform/unix/intl.properties
patching file browser/base/locale/unix/navigator.properties
patching file xpfe/browser/resources/locale/en-US/navigator.properties
Hunk #2 succeeded at 33 with fuzz 2.
patching file gfx/src/gtk/fontEncoding.properties
Hunk #1 succeeded at 175 with fuzz 2.
patching file modules/libpref/src/init/all.js
Hunk #12 succeeded at 1499 (offset 5 lines).
Hunk #13 succeeded at 1593 (offset 5 lines).
Hunk #14 succeeded at 1633 (offset 5 lines).
Hunk #15 succeeded at 1648 (offset 5 lines).
Hunk #16 succeeded at 1666 (offset 5 lines).
Hunk #17 succeeded at 1688 (offset 5 lines).
Hunk #18 succeeded at 1760 (offset 5 lines).

คอมไพล์

สำหรับวิธีการคอมไพล์ FireFox จะแตกต่างจากธรรมดาเล็กน้อย. อ้างอิงจากคู่มือวิธีคอมไพล์, ให้สร้างไฟล์ .mozconfig ไว้ในไดเรกทอรี mozilla. แล้วเขียนเนื้อหาตามตัวอย่างเช่น

. $topsrcdir/browser/config/mozconfig
ac_add_options --enable-optimize
ac_add_options --disable-debug
ac_add_options --disable-tests
ac_add_options --enable-default-toolkit=gtk2
ac_add_options --enable-xft
ac_add_options --enable-ctl
รันคำสั่ง ./configure แล้ว make ตามครับ.
$ ./configure
creating cache ./config.cache
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking build system type... i686-pc-linux-gnu
...
$ time make
ในตัวอย่างจะใช้ตัวเลือก --enable-ctl ซึ่งเป็นตัวเลือกเฉพาะสำหรับการสร้าง FireFox ให้จัดระดับสระและวรรณยุกต์เพื่อแก้ปัญหาสระลอย. การแสดงผลจะสวยขึ้นกว่าไม่ใช้, แต่ยังมีปัญหาเวลาพิมพ์ข้อความเช่นใน textarea เคอร์เซอร์จะเลื่อนไม่เป็นปรกติ. ถ้าไม่สนใจเรื่องสระลอยจะไม่ใช้ตัวเลือกนี้ก็ได้. สำหรับตัวเลือกอื่นดูได้จากการสั่งคำสั่ง ./configure --help แล้วเอาไปเขียนในไฟล์ .mozconfig.

make เป็นคำสั่งที่ใช้สร้างโปรแกรมโดยจะดูกฏต่างๆที่เขียนไว้ในไฟล์ Makefile. ส่วน time เขียนเพิ่มเข้าไปให้จับเวลาดูว่าใช้เวลาเท่าไรในการสร้างโปรแกรมนี้. คาดว่าน่าจะนานประมาณหนึ่งชั่วโมงสำหรับเครื่องธรรมดาๆ.

ติดตั้งในระบบและรัน

เปลี่ยนยูสเซอร์เป็น root, และเปลี่ยนไดเรกทอรีไปที่ mozilla.

$ su -
password:
# cd "ไดเรกทอรี mozilla"
# make install
โปรแกรม firefox จะติดตั้งไว้ในไดเรกทอรี /usr/local/bin. ให้ตรวจสอบให้แน่ใจว่าคำสั่ง firefox ที่เรียกใช้คือ /usr/local/bin/firefox ไม่ใช่ /usr/bin/firefox.
$ which firefox
/usr/local/bin/firefox
$ firefox &
หรือ
$ /usr/local/bin/firefox &
ถ้าในระบบมี FireFox ที่ติดตั้งจากแพ็กเกจของดิสทริบิวชันอยู่แล้วก็จะเป็น /usr/bin/firefox.

โปรแกรม Thunderbird และ mozilla ก็สามารถสร้างให้ตัดคำภาษาไทยได้เช่นเดียวกัน. ดูลิงก์ที่เกี่ยวข้องด้านขวามือครับ.

สร้าง FireFox ตัดคำภาษาไทยจากรหัสต้นฉบับ - Wednesday, February 02, 2005 -


 
Search this blog:


Google Home - Blogger - Blogger Templates

© 2005 Poonlap's Linux blog