Category Archives: Blog

Guest House Ratchaburi

พุธ-พฤหัสที่ผ่านมา มีเพื่อนจะไปราชบุรีเพื่อถ่ายรูปสำหรับประชาสัมพันธ์เกสต์เฮาส์ราชบุรี (เจ้าของเดียวกับ ISP ที่ฝาก belldandy ไว้) เลยได้ติดรถแวะไปดูเครื่องที่เอามาใช้แทนด้วย (Gateway 2000 G6-266 P-II 266 MHz 192 MB RAM – HDD ตัวเดิม 8 + 20 GB) .. ไหนๆ ก็ไหนๆ ไปถ่ายรูปที่เกสต์เฮาส์ด้วยเลยก็แล้วกัน .. ปลายปีนี้กีฬาแห่งชาติจัดที่ราชบุรี ใครผ่านก็แวะไปพักได้ รับรองว่าสะอาดและสะดวกสบายกว่าโรงแรมอื่นๆ ในตัวจังหวัด และแน่นอนว่ามีอินเทอร์เน็ตให้ใช้ทุกห้อง :)

[nggallery id=23]

Scribus 1.2 ออกแล้วตั้งแต่ราวๆ ปลายสัปดาห์ก่อน มีข่าวว่าสำนักพิมพ์ในต่างประเทศเอามาใช้งานจริงๆ จังๆ กันแล้ว (สูตร: Scribus + Inkscape + GIMP) .. ส่วนภาษาไทยภาษาไทยแสดงผลได้ดีขึ้น วรรณยุกต์ สระบน-ล่างไม่เยื้องเหมือนแต่ก่อนแล้ว ถ้าแก้สระลอยกับตัดคำไทยได้ก็สวยเลย :)

Philips-based Webcam Driver

เมื่อไม่นานมานี้ ลินุสได้ตัดสินใจถอดไดรเวอร์ Philips-based USB webcam ออกจากลินุกซ์ เคอร์เนลเวอร์ชันถัดไปอาจจะไม่สนับสนุนเว็บแคมที่ใช้ชิปของ Philips แล้ว … เรื่องนี้ส่งผลกระทบต่อผู้ใช้เต็มๆ เลยกลายเป็นเรื่องที่วิพากษ์วิจารณ์กันเยอะทีเดียว

เรื่องของเรื่องก็คือไดรเวอร์ตัวนี้มันไม่โอเพ่นซอร์ส หรืออาจจะเรียกว่ากึ่งโอเพ่นซอร์ส .. ไดรเวอร์นี้ประกอบด้วยสองส่วนคือ PWCX ที่เป็นโค้ดของไดรเวอร์ พัฒนาโดย Nemosoft Unv. โค้ดส่วนนี้ไม่ได้โอเพ่นซอร์สเพราะติด NDA (Non-Disclosure Agreement) ทาง Nemosoft จึงจำต้องเผยแพร่เป็นไบนารีเพียงอย่างเดียว เมื่อเปิดเผยไม่ได้ PWCX จึงไม่สามารถอยู่ในเคอร์เนลได้ .. เพื่อแก้ปัญหาเรื่องนี้จึงมีโค้ดส่วน PWC ทำหน้าที่เป็นจุดเชื่อม หรือ ‘hook’ ให้กับ PWCX โดย PWC เผยแพร่ด้วย GPL และอยู่ในเคอร์เนลของลินุกซ์ .. โค้ด PWC เป็นไดรเวอร์ทำงานด้วยตัวมันเองได้ แต่จำกัดมากๆ และในความเป็นจริง PWC ไม่ได้เขียนเป็นไดรเวอร์ แต่ใช้เพื่อเป็น hook โดยเฉพาะ .. การทำ hook สำหรับไดรเวอร์แบบไบนารีในเคอร์เนลถือเป็นเรื่องที่ยอมรับไม่ได้ เพราะทำให้เคอร์เนลไม่ ‘สะอาด’ จริง .. เมื่อเป็นเช่นนั้น Greg Kroah (USB maintainer) จึงตัดโค้ดส่วนของ hook ใน PWC ออก (เน้น: ตัดโค้ดของ hook .. ไม่ใช่ตัด PWC) ทำให้ต่อไป PWC จะไม่สามารถโหลด PWCX มาใช้งานได้ .. Nemosoft เห็นเช่นนั้นก็มีท่าทีที่ไม่พอใจเท่าไหร่นัก จึงตัดสินใจหยุดพัฒนาไดรเวอร์นี้ทั้ง PWC/PWCX และขอให้ถอด PWC ออกจากเคอร์เนล .. และลินุสก็ทำตามประสงค์ของ Nemosoft

ผลที่ตามมาคือผู้ใช้/แฮกเกอร์หลายคนพากันไม่พอใจการตัดสินใจของลินุส การถอดโค้ดออกจากเคอร์เนลถือเป็นเรื่องใหญ่พอสมควร เพราะมีผลกระทบกับผู้ใช้ ปกติแล้วลินุส หรือ maintainer ทุกคนจะไม่ถอดโค้ดออกจากเคอร์เนลถ้าไม่มีเหตุผลเพียงพอ ถึงแม้นักพัฒนาหยุดพัฒนาโค้ดนั้นไปแล้ว ไม่มีใครสานต่อ โค้ดก็จะยังอยู่ในเคอร์เนล และจะได้รับการดูแลเป็นครั้งคราวโดยลินุส หรือ maintainer ที่รับผิดชอบด้านนั้นๆ เพื่อให้สามารถทำงานภายในเคอร์เนลต่อไปได้ ในกรณี PWC/PWCX ลินุสตัดสินใจถอดออกจากเคอร์เนล เป็นเพราะ

  1. PWC เรียกว่าเป็น hook-only for binary-only driver ซึ่งทำให้เคอร์เนลไม่เสรี/โอเพน
  2. ไม่มีคนรับดูแล PWC ต่อจาก Nemosoft และ
  3. ลินุสถือว่า Nemosoft เป็นเจ้าของโค้ด PWC/PWCX เมื่อเจ้าของไม่ต้องการให้โค้ดอยู่ในเคอร์เนล ก็ถือว่าเป็นเรื่องใหญ่และควรจะให้เกียรติทำตามความต้องการ ถึงแม้ว่าในความเป็นจริงแล้วไม่มีใครเป็นเจ้าของโค้ดนี้ตั้งแต่แปะคำว่า GPL ..

เหตุผลที่ลินุสเน้นย้ำที่สุดคือข้อ 3 นี่แหละ ..

ใครถูกใครผิดก็ไม่รู้เหมือนกัน สำหรับผม เรื่องโอเพนซอร์สมีความสำคัญเหนือกว่าเรื่องเอาใจผู้ใช้เสมอ ไม่ว่าน้ำหนักผู้ใช้จะกดดันขนาดไหน แต่ถ้าทำให้โอเพนซอร์สไม่สะอาดเมื่อไหร่ คำว่า ‘โอเพน’ หรือ ‘ฟรี’ (as in free speech) จะไม่มีความหมายอีกเลย หากหลักการนี้ล้ม ปัญหาจะตามมาหลังจากนั้นอีกเยอะมาก ไม่เพียงเรื่องแนวคิดของโอเพน/ฟรีจะเสียไป แต่ในแง่เทคนิคก็จะเสียไปด้วย การที่มันโอเพน/ฟรีทำให้ลินุกซ์ก้าวไปได้เร็วและมั่นคง เพราะทุกคนเห็นซอร์ส ทุกคนสามารถช่วยกันแก้ไข ทุกคนสามารถช่วยปรับปรุงให้มันดีขึ้นได้ การปกปิดซอร์สทำให้ไม่สามารถคงสภาพการทำงานแบบนี้ได้อีก เสถียรภาพ และความปลอดภัยย่อมลดน้อยลง หากเกิดขึ้นกับเคอร์เนลก็คงไม่ใช่เรื่องดี

ทางออกสำหรับเรื่องนี้ ให้สวยที่สุดคือพัฒนาไดรเวอร์ที่เป็นโอเพนซอร์ส ถ้าทำไม่ได้จริงๆ ก็ย้ายส่วนไบนารีไปอยู่นอกเคอร์เนล หรือทำไดรเวอร์โมดูลที่ไม่ต้องใช้ hook ในเคอร์เนล ..

.. สุดท้ายจะออกมายังไง คงต้องติดตามดูกันต่อไป

PHP 4.3.8 on FreeBSD

เมื่อวานสั่ง portupgrade -a บน belldandy เสร็จแล้ว restart apache ขึ้นมาปรากฏว่า http://kitty.in.th เปลี๊ยนไป๋ .. feed ก็เจ๊งไปด้วย .. งงไปพักนึงก่อนจะหาเจอว่า แพ็กเกจ PHP บน FreeBSD หันมาแยกโมดูลเป็นส่วนๆ แล้ว โดยแยกไปไว้คนละที่กันเลย .. ใน ports ของ FreeBSD ตัวหลักยังเป็น lang/php4 หรือ www/mod_php4 (conflict กัน เลือกลงตัวเดียวพอ) .. จากนั้นต้องการอะไรเพิ่มเติมก็ต้องตามไปติดตั้งเอาเอง เช่น ต้องการเชื่อมกับ MySQL ก็ต้องลง databases/php4-mysql (หรือ php3- / php5- ) จะใช้ iconv ก็ต้องลง converters/php4-iconv หรือ จะใช้ zlib ก็ต้องลง archivers/php4-zlib ..

อืม ภาระเพิ่มขึ้นอีกนิด ถ้ารู้แล้วก็ไม่ใช่เรื่องยากอะไร .. ทำแบบนี้ก็ดีเหมือนกัน จะใช้อะไรก็คอมไพล์ติดตั้งเฉพาะโมดูลนั้นๆ โดยไม่ต้องเสียเวลาคอมไพล์ PHP ใหม่ทั้งหมดหมด จะถอดโมดูลออกก็ง่าย :)

Pentium III optimized packages

ค้างเรื่อง optimization packages ไว้นาน นั่งหาข้อมูลเพิ่มเติมแล้วก็เจอว่า โปรแกรมที่ optimize ไม่เหมือนกันอาจมี running time ต่างกันได้ถึง 20 – 30% .. เท่าที่รู้คือ default optflag ของ Red Hat/Fedora Core และ TLE ตั้งไว้ที่

-O2 -g -march=i386 -mcpu=i686

ซึ่งมีเสถียรภาพที่ดี และการันตีว่าใช้งานกับซีพียู x86 >= i386 ได้ทุกรุ่น แต่เรื่องประสิทธิภาพยังอัดได้อีกเยอะ อย่างแพ็กเกจที่ผม build ทั้งหมด (*.kit.{i386|i486|i686}.rpm) ตั้ง optflags ไว้ที่

-O3 --march=i386 --mcpu=i686 --pipe --fomit-frame-pointer

ก็จะเร็วขึ้นอีกนิด .. เมื่อวานอยากทำแพ็กเกจสำหรับ Pentium III มาใช้กับ Peorth (P-III 1 GHz) เลยซัด optflag ของ Pentium III ซะเต็มๆ (เอ่อ จะว่าเต็มๆ ก็ไม่ใช่แฮะ จะใส่มากกว่านี้ก็ได้ถ้าจะยอมลดเสถียรภาพ)

-O3 -march=pentium3 -pipe -fomit-frame-pointer
-fforce-addr -falign-functions=4 -fprefetch-loop-arrays

ที่จริงแล้วถ้าขยายออกมาจะยาวกว่านี้ เพราะ flag บางตัวจะ imply ตัวอื่นด้วย เช่น -O3 จะใส่ –finline-functions กับ -frename-registers เป็นต้น .. อุวะ .. ท่าทางเรื่องมันจะยาว ไว้จะเขียนมาให้อ่านอีกที .. กลับมาที่เรื่องแพ็กเกจก่อน เมื่อวานที่ optimize ไปแล้วคือ (ยก src.rpm มาให้ดูละกัน)

freetype-2.1.8-1.bci.1.pentium3.kit.src.rpm
glib2-2.4.5-1.pentium3.kit.src.rpm
gtk2-2.4.4-1.pentium3.kit.src.rpm
libgnome-2.6.1-1.pentium3.kit.src.rpm
metacity-2.8.1-2.1.pentium3.kit.src.rpm
nautilus-2.6.3-1.pentium3.kit.src.rpm
pango-1.4.1-2.pentium3.kit.src.rpm
qt-3.3.3-1.pentium3.kit.src.rpm
xorg-x11-6.7.0-2.1.pentium3.kit.src.rpm

เท่าที่ใช้งานจนถึงตอนนี้เสถียรภาพก็ถือว่า ok ยังไม่เจออะไรแปลกๆ .. ส่วนเรื่องประสิทธิภาพ ยังไม่รู้จะวัดยังไง ไม่มีเครื่องมือเลย .. ที่จริงพยายาม optimize glibc ด้วย แต่ไม่สำเร็จ ได้ binary มาไม่ครบ งงไปเลย (- -‘) .. ถ้า optimize glibc ได้ล่ะก็ ถึงจะใช้ทะเลประสิทธิภาพการทำงานก็ไม่ห่าง Gentoo เท่าไหร่แล้ว :)

หลังจากนี้ก็จะเป็นคิว optimize Athlon XP … ฮุๆๆ

Belldandy upgraded

ระยะหลังเซิร์ฟเวอร์หลัก (belldandy.kitty.in.th) เริ่มมีอาการไม่ค่อยดี วันนี้เลยได้รบกวนให้ทาง ISP ย้ายฮาร์ดดิสก์ มาไว้อีกเครื่องนึงที่ว่างๆ อยู่ .. ตอนนี้ belldandy เปลี่ยนมาใช้เครื่อง P-II 266 MHz เป็นการชั่วคราว ระบบทำงานได้ราบรื่น แต่ปัญหา segfault ยังอยู่เหมือนเดิม memtest หลายรอบแล้วก็ปกติ ซีพียูก็ไม่น่าใช่ ถ้าไม่ใช่ฮาร์ดแวร์ก็เหลือแต่ซอฟต์แวร์แล้วเนี่ยะ .. ยังไง ตอนนี้ต้องทนใช้ไปก่อน พร้อมกับหาสาเหตุไปด้วย

และเพราะเหตุนี้ เมื่อวานเลยสำรองข้อมูลเกือบทั้งหมดไปไว้ที่ขอนแก่น (skuld – mirror/backup ของ kitty.in.th) .. ถ้าเครื่องหลักเจ๊งจริงๆ ก็ยังมีเครื่องสำรองไว้บริการ .. :P

Gaim / Auto Identify with NickServ

หลายคนอาจจะพอทราบแล้วว่าการรับส่ง IM ที่เป็น 8-bit ใน gaim นั้นมีปัญหาเพราะเขา assume ว่า 8-bit เป็น ISO-8859-1 เสมอ .. ผมเคยแฮ็กตรงนี้ไปแล้วโดยให้ assume ตาม locale ของระบบแทน (เช่น th_TH จะเป็น TIS-620) แล้วก็ตรวจสอบผู้รับด้วยว่าสามารถรับ UTF-8 ได้หรือไม่ ถ้าไม่ได้ก็จะส่งข้อความโดย encode ตาม locale เช่นกัน .. ผมส่งแพตช์นี้ไปให้ gaim ตั้งแต่สมัยเวอร์ชัน 0.6 กว่าๆ ทีมพัฒนาเขาเคยปฏิเสธไปทีนึงแล้ว แต่ระยะหลังเริ่มมีคนเจอปัญหาแบบเดียวกันนี้ในภาษาอื่นๆ เลยมีแรงสนับสนุนให้แก้ปัญหามากขึ้น ท้ายที่สุดปัญหาการแสดง IM ที่ยังรับ-ส่งเป็น 8-bit อยู่ก็ได้รับการแก้ไขแล้วใน CVS โดยตั้ง encoding สำหรับการรับส่งข้อความ 8-bit ได้ที่ preferences .. ต่อไปก็ไม่ต้องแพตช์เองแล้ว :D .. (อาจจะได้แพตช์เพื่อตั้ง default encoding เป็น TIS-620 แทน :P)

อีกเรื่องนึง เกี่ยวกับ gaim เหมือนกัน .. ผมใช้ gaim เข้า IRC เป็นประจำ เพราะปกติก็จะ online IM ด้วย gaim ตลอดอยู่แล้ว สำหรับ IRC จะน่ารำคาญนิดหน่อยตอน login เพราะผม register nickname ไว้กับ NickServ ของ irc.freenode.net เวลาเชื่อมเข้าเซิร์ฟเวอร์เลยต้อง identify ตัวเองด้วย .. ทำบ่อยๆ เข้าก็เลยคิดว่าหาวิธีให้มัน identify อัตโนมัติดีกว่า .. ก็พอดีว่า gaim มันสามารถตั้งให้ส่งข้อความเวลามี buddy sign-on, online, ฯลฯ เลยใช้วิธีนี้แหละง่ายดี .. วิธีการก็คือ

  1. เพิ่ม NickServ เข้ามาเป็น buddy ก่อน วิธีที่ง่ายๆ คือส่ง “/msg NickServ help” ไปทีนึง พอ dialog ของ NickServ ปรากฏก็เลือกเมนู Conversation » Add .. ทำตามขึ้นตอนเพิ่ม buddy จนเสร็จ
  2. คลิ๊กขวาที่ชื่อ NickServ ที่ปรากฏใน Buddy List จะปรากฏเมนูขึ้นมา ให้เลือก Add Buddy Pounce แล้ว gaim จะแสดง dialog New Buddy Pounce
  3. ตั้งค่าดังนี้
    • Account: เลือก irc account
    • Buddy Name: NickServ – ถ้าทำตามขั้นตอนมามันควรจะขึ้นเป็น NickServ อยู่แล้ว ก็ไม่ต้องไปแตะมัน
    • Pounce When: เลือก Sign on อย่างเดียว
    • Pounce Action: เลือก Send a message แล้วพิมพ์ข้อความ IDENTIFY ตามด้วยรหัสผ่านที่ใช้
    • เลือก Save this pounce after activate
    • กด Save

ทีนี้เวลาเข้า irc มันก็จะ identify เองอัตโนมัติ ไม่ต้องพิมพ์เองแล้ว :)

Added: gaim 0.82 เพิ่งรีลีสตะกี้ .. account ICQ ตั้ง default encoding ได้แล้ว :)

Some Kernel Trees :P

เมื่อวาน blog เรื่องเคอร์เนลแพตช์ของ mm และ ck ไปแล้ว ยังมีแพตช์เคอร์เนลอีกหลายตัว แต่ละตัวก็ maintain tree ของตัวเอง มีจุดประสงค์ในการใช้ต่างๆ กันไป สรุปมาให้อ่านกัน:

  • aa tree ของ Andrea Arcangeli เน้นเรื่อง VM เป็นหลัก .. aa tree merge เข้าเคอร์เนลตั้งแต่ 2.4.10 .. VM ของเคอร์เนล 2.6 ก็มีพื้นฐานมาจาก aa tree
  • ac tree ของ Alan Cox .. Alan เป็น kernel maintainer ตั้งแต่ปลาย 2.0 2.2 เลยมาถึง 2.4 ช่วงต้นๆ ทุกคนยกย่องให้เป็นมือขวาของ Linus .. หลังวางมือ Alan ก็ยังมีส่วนช่วยงานเคอร์เนลอยู่อย่างต่อเนื่อง โดย maintain ac tree ที่มีฟีเจอร์ใหม่ๆ ที่ไม่อยู่ในวานิลลา .. ac tree ยังนับเป็นการทดสอบ bugfix และฟีเจอร์ ก่อนจะส่งให้ Marcello Tosatti (2.4 kernel maintainer ต่อจาก Alan) อีกทีด้วย .. ac patch หายร่วมปีแล้ว เพราะ Alan หยุดงานเคอร์เนลชั่วคราวไปเรียนต่อด้านบริหาร
  • bk tree เป็น snapshot จากโค้ดล่าสุดที่ merge เข้าเคอร์เนล .. ชื่อ bk มาจาก BitKeeper ซึ่งเป็นซอฟต์แวร์ SCM ที่ใช้ในการจัดการโค้ดของเคอร์เนลทั้งหมด คล้ายๆ CVS, SVN .. ลินุสเลือกใช้ BitKeeper เพราะสะดวกในการจัดการ changeset มากกว่าตัวอื่น .. BitKeeper เป็น commercial software แต่โครงการโอเพนซอร์สใช้งานได้ฟรี (as in free beer)
  • ck tree ของ Con Kolivas .. Con รวบรวมแพตช์เพื่องานเดสก์ท็อป/interactive/low latency เป็นหลัก และยังแฮ็ก scheduling ในเคอร์เนลให้เหมาะกับงานเดสก์ท็อป สมัยนึง ck tree เป็นแพตช์เซ็ตที่ทำงานเร็วกว่าวานิลลาจนรู้สึกได้
  • mm tree ของ Andrew Morton .. ตอนจะรีลีส 2.6 Linus ชวนให้ Andrew มาช่วย maintain kernel แต่ Andrew ก็แบ่งรับแบ่งสู้ สุดท้ายแล้ว Linus เลยเป็นคน maintain อย่างเป็นทางการ ในขณะที่ Andrew ช่วยรวบรวมแพตช์และแยก mm tree ไว้เพื่อให้ทดสอบกันในทำนองเดียวกับ ac tree / 2.4

นอกจาก tree ยอดนิยมข้างบนนี้ ก็ยังมี patch/patchset อีกเยอะนะ :

  • mjb ของ Martin J. Bligh (Scalability)
  • wli ของ William Lee Irwin (VM)
  • lsm ของ Chris Wright (Linux Security Modules)
  • osdl ของ OSDL (database/enterprise-level hacks)
  • dj ของ Dave Jones (I/O AGP)
  • rmap Rik van Riel (reverse mapping vm)

me:

[kitt@peorth web]$ uname -a
Linux peorth.kitty.in.th 2.6.8.1-ck4 #4
Tue Aug 24 21:30:27 ICT 2004 i686 i686 i386 GNU/Linux

Kernel Patches

mm4 patch สำหรับ 2.6.8.1 รีลีสแล้ว เร็วดังคาด .. แพตช์ตัวนี้มี experimental code ชุดใหม่เข้ามา ยังไม่ได้ทดสอบในวงกว้าง ใครอยากทดสอบหรือชอบเสี่ยงก็ ดาวน์โหลด ไปใช้ได้

ck4 patch ของ Con Kolivas รีลีสแล้วเหมือนกัน .. แพตช์/จูนสำหรับเดสก์ท็อปเช่นเคย มีแพตช์ workaround kernel กับ cdrecord ไว้แล้วด้วย ใครใช้งาน CD/DVD Writer เอาแพตช์นี้ไปใช้ก่อนระหว่างรอแก้ไขในเคอร์เนลจริงๆ อีกที ในแพตช์เซ็ตมี Reiser4FS ด้วย ว่ากันว่าเร็วโคตรๆ ..

CK แนะนำว่า เคอร์เนล 2.6 ไม่จำเป็นต้องใช้ kernel preemptible ก็ได้ จะ enable หรือ disable ก็ไม่รู้สึกอะไร เพราะ latency ของ 2.6 ถึงไม่มี preempt ก็ต่ำ(กว่า 2.4)อยู่แล้ว การ enable kernel preemptible อาจจะทำให้โปรแกรมบางโปรแกรมทำงานเพี้ยนอีกด้วย ผมก็เจอบ้างเหมือนกัน เช่น NVIDIA ถ้าภาระงานหนักๆ โมดูลจะทำงานอืดอย่างเห็นได้ชัด ALSA เองก็จะกระตุกๆๆ เท่าที่มีการรายงานบางจังหวะแย่ถึงขนาด latency เกิน 50 msec ก็มี ..

เพื่อแก้ปัญหานี้ Ingo Molnar กับ Arjan van de Ven (@ Red Hat) เสนอโมเดลและแพตช์ชื่อ “Voluntary Kernel Preemption” มาเสริมการทำงานของเคอร์เนล 2.6 .. วิธีการคือดึงเอาจังหวะ might_sleep() ในเคอร์เนลมาใช้ + แก้ไขโค้ด จัด schedule ใหม่ (ผมเดาว่า การใช้ might_sleep() คงเป็นที่มาของคำว่า voluntary – เพราะจุดที่เรียก might_sleep() แปลว่ามันอาสาที่จะ sleep แล้ว) .. การทดสอบ voluntary kernel preemption โดยตัว Ingo เองได้ latency ออกมาไม่ถึง 1 ms แม้จะอัดภาระงานเข้าไปเต็มๆ แล้วก็ตาม .. ตัวเลข 1 msec นี่ถือว่าเทียบเท่าหรืออาจจะดีกว่าเคอร์เนล 2.4 + low latency patch ของ Andrew Morton ที่กลุ่ม Linux Audio นิยมใช้กันเสียอีก :)

อย่างไรก็ตามแฮ็กเกอร์บางคน (i.e., Christoph Hellwig, Andrea Arcangeli) ก็ไม่ค่อยจะเห็นด้วยกับการใช้จังหวะ might_sleep() มา reschedule / preempt เพราะโดยหลักการแล้ว might_sleep() มีนิยามในการทำงานของมันเอง และถ้าจะทำอะไรกับ scheduling ก็มี cond_resched() API ให้ใช้อยู่แล้ว .. Ingo ก็ยอมรับว่ามันมีผลดีผลเสียที่ต้อง tradeoff กันอยู่ ที่เสนอให้ใช้ might_sleep() ก็เพราะมันได้ผลที่ดี ประหยัดกว่า และปลอดภัยกว่า .. จะใช้หรือไม่ก็ตัดสินใจเอาเอง โดยสรุป voluntary kernel preepmtion จะเหมาะกับเครื่องที่ต้องการ latency ต่ำๆ ต้องการการตอบสนองที่ดี เช่น digital audio/video workstation แต่อาจจะไม่เหมาะกับเซิร์ฟเวอร์ที่ต้องการทรูพุตสูงๆ .. voluntary kernel preemption สามารถ enable/disable ขณะที่เครื่องทำงานอยู่ได้ตลอดเวลาผ่านทาง /proc ..

ระหว่างนี้ Ingo กำลังทำแพตช์อีกตัวนึงเพื่อปรับปรุง kernel preemption โดยแพตช์ที่จะออกตามมานี้จะจูน preemption ในระดับ per-task ได้เลย :)

Aowthai: KDE 3.3 released / Kitty Extras: All packages re-linked

วันเสาร์เอา Peorth ไป Acer Service อีกที เปลี่ยนคีย์บอร์ดมาแล้วเรียบร้อย พร้อมกับได้ฮาร์ดดิสก์ 2.5 นิ้ว 20 GB ตัวใหม่มาอีกตัว .. จ่ายค่าช่างไป 800 + 7% บาท .. นะ ประกันสามปี อะไหล่ฟรีตลอดระยะประกันมันก็ดีอย่างนี้นี่เอง :D

อ่าวไทยเพิ่ม KDE 3.3 เข้ามาแล้ว .. apt-get + re-link กันได้ :P

Kitty Extras re-link กับ อ่าวไทยครบแล้ว ฝากทดสอบใช้งานกันหน่อยครับ (เมลมาก็ได้ หรือถ้าสะดวกที่ #tlwg ก็ได้ ผมอยู่ที่นั่นเกือบตลอดเวลาที่ตื่น).. Kitty Extras ชุดนี้ผมตัดแพ็กเกจออกจาก repo ไปหลายตัว เหตุเพราะ maintain ยากเหลือกเกิน บางตัวเปลี่ยนเวอร์ชันทีต้องใช้เวลาแก้ทั้งวันกว่าจะได้ binary rpm เพราะมันเปลี่ยนวิธีการติดตั้งอยู่เรื่อยๆ .. เจอบ่อยๆ เข้าก็เซ็ง เอาเวลาไปทำอย่างอื่นดีกว่า .. ช่วงนี้ todo ค้างบานเลย อยากเอาเวลาไปเขียนหนังสือ บทความ โปรแกรม แฮ็ก ฯลฯ .. เฮ่อ ..

Setting Up Thai Domain Names

ไม่นานมานี้ THNIC เปิดบริการโดเมนเนมภาษาไทยฟรีให้กับเจ้าของโดเมน .th ทั้งหมดโดยที่ THNIC ให้ขอชื่อโดเมนภาษาไทยสำหรับโดเมนภาษาอังกฤษที่จดไว้กับ THNIC แล้ว หากผ่านการพิจารณาแล้ว THNIC จะทำการแม็ปชื่อโดเมนภาษาไทยกับโดเมนภาษาอังกฤษให้อัตโนมัติ โดยเซิร์ฟเวอร์ที่ THNIC จะเป็น DNS server สำหรับโดเมนภาษาไทยทุกตัวที่ขอจดไป .. อย่างไรก็ตามหากเราต้องการรัน DNS server สำหรับโดเมนภาษาไทยเองก็สามารถทำได้เช่นกัน

Internationalized Domain Name (IDN)

โดเมนภาษาไทยนี้จะต่างไปจากบริการของนิภาหรือบริการชื่อไทยอื่นๆ ก่อนหน้านี้ที่อาศัยการแฮ็กและติดตั้งซอฟต์แวร์เสริม (ที่ไคลเอ็นด์ และ/หรือที่ ISP).. สำหรับโดเมนภาษาไทยที่ THNIC ให้บริการคือระบบโดเมนหลายภาษา เป็นมาตรฐานที่ร่างโดย Internationalized Domain Name Working Group ของ IETF .. วิธีการของ IDN ปัจจุบันใช้การเก็บข้อมูลโดเมนเนมภาษาต่างๆ ในรูปแบบที่เรียกว่า punycode (กำหนดไว้ใน RFC 3492) ซึ่งสามารถบันทึกเก็บในฐานข้อมูลของ DNS เป็น ASCII ธรรมดาได้ .. เมื่อฐานข้อมูลเก็บเป็น punycode การ query จึงเป็น punycode ด้วย ตอนนี้ resolver ใน OS เกือบ/ทั้งหมดยังไม่สนับสนุนการแปลงโดเมนภาษาต่างๆ เป็น punycode ดังนั้นแอพพลิเคชันจึงต้องทำเอง (วิธีการที่ให้แอพพลิเคชันแปลงเป็น punycode เองนี่เรียกว่า IDN in Application หรือ IDNA – RFC 3490) .. ข่าวดีสำหรับลินุกซ์คือ บราวเซอร์ยอดนิยมทั้งหลาย i.e., Mozilla, Firefox, Opera จะแปลงโดเมนเนมใน URL เป็น punycode ให้อัตโนมัติ ผู้ใช้งานลินุกซ์จึงใช้งานโดเมนภาษาไทย หรือภาษาอื่นๆ ได้ทันที … ส่วน IE ต้อง ดาวน์โหลดปลั๊กอิน มาติดตั้งด้วย

Server Side

ฝั่ง DNS server ไม่จำเป็นต้องเปลี่ยนแปลง/แพตช์อะไรเลย เพราะ punycode ก็คือ ASCII ธรรมดาเหมือนโดเมนภาษาอังกฤษทั่วๆ ไป .. หากต้องการรัน DNS server สำหรับโดเมนภาษาไทยหรือภาษาอะไรก็ตาม วิธีการก็เพียงแค่สร้าง zone ใหม่สำหรับโดเมนนั้น โดยที่แปลงชื่อโดเมน หรือชื่อซับโดเมน หรือโฮสต์เนมในภาษานั้นๆ เป็น punycode ก่อนเท่านั้นเอง ยกตัวอย่างเช่น โดเมน kitty.in.th มีโดเมนภาษาไทยชื่อ แมวเหมียว.th

ขั้นแรกก็แปลง “แมวเหมียว” เป็น punycode ก่อน โดยแปลงที่ http://josefsson.org/idn.php ก็ได้ หรือจะเอาซอร์สจาก RFC 3492 หรือ http://www.gnu.org/software/libidn มาคอมไพล์ก็ได้ ..

แมวเหมียว = xn--y3cadscv5e5dg

สร้าง zone สำหรับ แมวเหมียว.th โดยใช้ punycode

zone "xn--y3cadscv5e5dg.th" {
        type master;
        file "sandbox/kitty.in.th-idn";
        allow-update { none; };
};

สร้างฐานข้อมูลในไฟล์ kitty.in.th-idn (หรืออะไรก็ตามที่ระบุไว้ใน zone) .. ข้อมูลที่ใส่ก็เหมือนฐานข้อมูลของโดเมนภาษาอังกฤษ เพียงแต่แปลงโฮสต์เนมเป็น punycode ก่อน แล้วค่อยเก็บลงไป

โดเมน = xn--l3ckx7ji

เว็บ = xn--r3cz4e3a

ไฟล์ = xn--w3cm5g8a

เมล = xn--y3ci3f

        IN      NS      ns.kitty.in.th.
        IN      MX      5       mail.kitty.in.th.

@               IN      A       203.152.18.6
xn--l3ckx7ji    IN      CNAME   ns.kitty.in.th.
xn--w3cm5g8a    IN      CNAME   ftp.kitty.in.th.
xn--r3cz4e3a    IN      CNAME   www.kitty.in.th.
xn--y3ci3f      IN      CNAME   mail.kitty.in.th.

รีสตาร์ทเนมเซิร์ฟเวอร์

# named.restart

ติดต่อ THNIC เพื่อขอให้ชี้ primary/secondary DNS server สำหรับโดเมนภาษาไทยมาที่เซิร์ฟเวอร์ของเราแทน

.. เสร็จแล้ว !