Modular, Modulo, and Remainder

ตอนเขียนโปรแกรมสมัยแรกๆ เคยจำว่า modulo คือฟังก์ชันการหาเศษจากผลหาร แต่พอใช้ไปสักพักแล้วเริ่มรู้สึกแปลกๆ ตอนที่เวลาตัวตั้งหรือตัวหารเป็นค่าติดลบ ซึ่ง modulo ให้ผลเป็นค่าติดลบได้ อย่าง -5 mod 2 = -1 (เพราะ -2 * 2 + -1) .. เอ่อ .. ถ้า modulo ใช้สำหรับหา ‘เศษ’ ของการหาร ทำไมเศษมันเป็นติดลบได้ล่ะ ? เศษมันควรจะ >= 0 หรือเปล่า ? .. เรื่องนี้อาจจะต้องย้อนกลับไปไกลหน่อย

ที่มาของ modulo หรือ mod มาจาก modular arithmetic ซึ่งนิยามโดย คาร์ล เฟดริก เกาส์ เมื่อสองร้องกว่าปีที่แล้ว ตามนิยามที่เกาส์เขียนไว้คือ จำนวนเต็ม a, b จะเป็น congruent modulo ของจำนวนเต็ม n ถ้า (a – b) หารด้วย n ลงตัว หรือเขียนได้เป็น

a ≡ b (mod n)

ถ้าคิดย้อนกลับก็จะได้ว่า a หารด้วย n จะได้เศษเป็น b .. ใน modular arithmetic ค่า b เป็นจำนวนเต็มบวกหรือลบก็ได้ ดังนั้นผลลัพธ์ของ modulo จึงเป็นค่าติดลบได้ .. ค่า b บางทีเรียกว่า residue หรือ remainder แยกเป็นสองแบบคือ minimal residue มีค่าเท่ากับ b หรือ b – n ขึ้นกับว่าค่าสัมบูรณ์ของตัวไหนน้อยกว่าก็เอาตัวนั้น และอีกแบบคือ common residue ซึ่งคือเศษของการหาร โดย b ต้องเป็นจำนวนเต็มที่น้อยกว่า n และ b >= 0

ดังนั้นค่าของ ฟังก์ชัน หรือ โอเปอร์เรเตอร์ modulo ในโปรแกรมหรือภาษาสำหรับเขียนโปรแกรมทั้งหลายจึงไม่ได้ให้ผลลัพธ์เป็นเศษของการหารซะทีเดียว .. อย่างไรก็เรายังสามารถหาเศษของการหารโดยใช้ modulo ได้ โดยกรณีผลลัพธ์เป็นค่าติดลบ ให้บวกตัวหารเข้าไปอีกที เช่น ตัวอย่าง -5 mod 3 = -2 จะได้เศษของการหารคือ = -2 + 3 = 1

TIS-620 in Evolution

เคยแจ้ง bug นี้ พร้อมกับส่ง patch ไปตั้งแต่สมัย Evolution 1.4.x .. จากนั้น ximian (ในสมัยนั้น) ก็เงียบๆ ไป .. ต่างคนต่างเงียบ กระทั่งเกือบสองปีต่อมาถึงเริ่มมีการเคลื่อนไหวอีกครั้ง ล่าสุดช่วงนี้ gnome 2.14 ก็จวนแล้ว ทาง Andre Klapper ที่กำกับดูแล patch เริ่มก็มาตามจี้ให้ทัน Evolution 2.6 พี่เทพเลยมาช่วยสานต่อและกระตุ้นให้ช่วยกันดันให้ผ่าน .. ปรากฏว่า พี่เทพเจอบั๊กอีกตัวที่ทำให้ทดสอบ gnome cvs ไม่ได้ .. ส่วนผมเอาแค่ checkout ตัว cvs ออกมายังได้ไม่ครบด้วยซ้ำ (- -‘) … เลยได้แค่รายงาน based on evolution 2.4.1 ไปว่าปัญหามันเกิดขึ้นเพราะอะไร

เรื่องของเรื่องก็คือ header ของเมลจะมีการระบุว่า content ใช้ charset อะไร .. กรณี header ระบุเป็น TIS-620 หรือ UTF-8 แล้วใช้ตามนั้นจริงๆ จะไม่มีปัญหา .. แต่จะมีเมลภาษาไทยจำนวนไม่น้อย (เท่าที่มีอยู่ใน box ก็ ประมาณ 30-40%) ที่ encode เป็น TIS-620 แต่ header กลับระบุว่า charset เป็น ISO-8859-1 กรณีนี้โปรแกรมอ่านเมล (แทบ) ทุกตัวจะพยายามแสดงผลเป็น ISO-8859-1 ทำให้เมลภาษาไทยแสดงเป็นภาษาขอม .. ถ้าจะให้แสดงผลถูกต้องก็ต้องบังคับ character encoding ซึ่งโปรแกรมอ่านเมลที่นิยมใช้กันจะเลือกจากเมนูได้ .. ที่ผ่านมา เมนู character encoding ของ evolution จะไม่มีภาษาไทย (TIS-620) ให้เลือก .. patch ที่ผมทำก็แค่ enable ให้มันมีให้เลือกเท่านั้นเอง

พอแจ้งไป Andre ก็เลยอยากให้ช่วยส่งตัวอย่างเมลไปให้ทดสอบ ท้ายที่สุดสถานะของ bug #251062 ปรับเป็น fixed/resolved เรียบร้อย .. เช็คจาก gnome cvs ก็เห็นว่ามี TIS-620 แล้ว .. ก็ค่อนข้างแน่นอนว่า Evolution 2.6 จะมี TIS-620 ให้เลือกในเมนู character encoding … สบายละ .. ต่อไปก็ไม่ต้อง maintain patch + build evolution เองแล้ว :)

Google Earth on Linux

ในที่สุด Google Earth ก็เริ่มใช้งานบนลินุกซ์ได้แล้วเอาตัวที่ใช้งานบนวินโดว์สนั่นแหละมาติดตั้ง หลังจากดู howto ของหลายๆ สำนักมาลองผิดลองถูกบน Ubuntu 5.10 Breezy Badger .. ได้วิธีที่ง่ายสุดคือลง WINE 0.9.8 จาก WINE HQ ที่

deb http://wine.sourceforge.net/apt binary/

เซ็ต WINE เป็น Windows XP แล้วก็ติดตั้ง Google Earth โดยสั่ง

wine GoogleEarth.exe

ตัวติดตั้งอาจจะบ่นอะไรบ้าง กด OKๆ ไปก็แล้วกัน … เสร็จแล้วก็สั่งรันได้ละ

WINEDLLOVERRIDES="ole32,usp10,msvcrt=n" wine /path/to/GoogleEarth.exe

อาจจะมีเพี้ยนๆ บ้าง (ก็มันไม่ใช่ Windows จริงๆ นี่หว่า) .. ปัญหาเรื่องฟอนต์ยังหาทางแก้ไม่ได้ ส่วนพาเนล/เนวิเกเตอร์ผลุบๆ โผล่ๆ สั่งปิดไปเลยก็ได้โดยเลือกจากเมนู หรือไม่ก็ Ctrl+1, Ctrl+2 เอา

Synaptics Touchpad and Linux Kernel >= 2.6.15

ตั้งแต่ใช้ Linux Kernel 2.6.15 มา เจอปัญหานิดหน่อยกับ Synaptics Touchpad ตรงที่มันทำงานได้แค่ pointer กับคลิ้ก พวกฟีเจอร์ drag หรือ scroll ใช้ไม่ได้ซะงั้น .. ลองไล่เช็คดูก็พบว่า Xorg มันไม่โหลดไดรเวอร์ synaptics เพราะว่ามันหา device ไม่เจอ เช็คชื่อ device จาก /proc/bus/input/devices แล้วก็ตามไปดูใน /dev/input มันก็ไม่มีจริงๆ .. ก็เลย mknod ขึ้นมา

# mknod /dev/input/mouse0 c 13 32
# mknod /dev/input/event1 c 13 65
# chmod 660 /dev/input/mouse0
# chmod 660 /dev/input/event1

แล้วลอง restart X11 ดู .. ก็ยังไม่ได้ เช็คจาก Xorg.0.log มันบอกว่าไม่ได้ใช้ SHMconfig .. เลยไปโหลดไดรเวอร์ synaptics touchpad ตัวใหม่มาคอมไพล์ติดตั้งเข้าไป แล้วก็แก้ /etc/X11/xorg.conf นิดหน่อย

....
Section "InputDevice"
        Identifier      "Synaptics Touchpad"
        Driver          "synaptics"
        Option          "AlwaysCore"
        Option          "Device"     "/dev/input/mice"
        Option          "Protocol"   "auto-dev"
        Option          "SHMConfig"  "on"
EndSection
...

… restart X11….

ใช้ได้ ! โหะๆ เดาจริงๆ :D … ได้ตามนั้นแล้วก็เก็บกวาดอีกนิดหน่อย เอาคำสั่ง mknod ใส่ลง rc.local บูตคราวหน้าก็จะได้ใช้งานได้เลย :D

News News

ข่าววันนี้ จาก /. Oracle เทคโอเวอร์ Sleepycat ที่ทำ Berkeley DB ไปอีกหนึ่งราย .. หลังจากเมื่อปลายปีที่แล้วก็เทคโอเวอร์ Innobase ไป และเพิ่งจะลอยแพพนักงานไป 2000 ตำแหน่ง … Oracle กำลังจะทำอะไรอยู่ ? นึกหน้า Larry Ellison แล้ว คิดอะไรในแง่ดีๆ ไม่ค่อยออก (- -‘)

Google จะเอา Picasa ลง Linux แต่ไม่ได้เป็น native .. จะใช้ Picasa บน Win มาใส่บน (modified version of) WINE (- -‘)

ควันหลง St. Valentine’s Day:

“I am not a smart man, but I know what love is”
– – Forrest Gump :)

ซายากะ สาวน้อยนักสืบ ตอน กระเป๋าสะพายใบเล็กสีเขียวอ่อน

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

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

ซายากะ สาวน้อยนักสืบ เป็นหนังสืออีกชุดที่ประสบความสำเร็จอย่างมากของ อาคากะวา จิโร นักเขียนผู้แต่งชุด มิเกะเนะโกะ โฮล์มส์ นั่นเอง เรื่องจึงมีบุคลิกของคล้ายๆ กับมิเกะเนะโกะ และยังคงแฝงมุกตลกเหมือนเคย ใครที่ชอบมิเกะเนะโกะ ก็น่าจะชอบซายากะด้วยเหมือนกัน .. ชุดซายากะ จะดำเนินเรื่องเล่มละหนึ่งปีของตัวละคร เริ่มเล่มแรกตอนซายะกะอายุสิบห้า เล่มสองอายุสิบหก ปัจจุบันชุดซายากะภาษาญี่ปุ่นว่ากันว่าถึงเล่ม 17 ซึ่งซายากะมีอายุ 31 ปี … ช่างคิดซะจริงๆ

Logitech Quickcam® Orbit

ได้ webcam ของ Logitech รุ่น Quickcam® Orbit มาลอง ..

Quickcam® Orbit และ webcam ของ Logitech อีกหลายรุ่น ใช้ไดรเวอร์ PWC ที่สร้างปัญหากับเคอร์เนลเมื่อปีก่อนโน้น .. ตอนนี้ปัญหาก็ผ่านไปแล้ว อย่างน้อยที่สุด PWC ก็โผล่มาให้เห็นตั้งแต่ เคอร์เนล 2.6.12(.2) .. มีไดรเวอร์ในเคอร์เนลแล้วก็จริงแต่ที่ลองดูปรากฏว่ามันทำงานเพี้ยนๆ เลยลองเอา ไดรเวอร์ใหม่ มาคอมไพล์แยกดู ผลคือใช้งานได้ดีเกินคาด .. ขนาด grabdisplay ก็ยังได้ 320×240 ที่ 30 fps หรือ 640×480 ที่ 15 fps :D … เรื่องรับภาพมาแสดงผลก็ผ่านไปได้

ทีนี้เจ้า Quickcam® Orbit มันสั่งให้กล้องหมุน ซ้าย-ขวา-ก้ม-เงย ได้ บนวินโดว์สก็คงสบายไปเพราะมีโปรแกรมแถม … สำหรับบนลินุกซ์ลองกูเกิ้ลก็เจอว่ามีคนทำโปรแกรมควบคุมกล้องบนลินุกซ์ให้แล้วเหมือนกัน .. โปรแกรมที่ว่าคือ OrbitView คอมไพล์ แล้วรัน ก็ควบคุมกล้องได้โดยใช้เมาส์คลิ้ก :D

สงสัยจะได้ถอยมาใช้สักตัว … :P

Updated: Quickcam® Orbit ใช้กับเคอร์เนลของ ubuntu ได้เลยแฮะ แต่ทำงานช้ากว่าไดรเวอร์ตัวใหม่ของ PWC … hmm (- -‘)

อาร์ทิมิส ฟาวล์ ตอน โอปอลตลบหลัง

หนังสือมาอีกแล้ว …

งานหนังสือคราวก่อนโน้น ร้านหนังสือเอาอาร์ทิมิส ฟาล์ว ตอน รหัสลับนิรันดร์มาขายบอกว่าเป็นเล่มจบของชุด

อาร์ทิมิส ฟาวล์ เป็นเด็กชายอายุแค่ 13 – 14 ปี แต่เป็นอัจฉริยะและมีนิสัยเจ้าเล่ห์ แถมยังเป็นลูกของมหาเศรษฐี อาร์ทิมิส ตามรอยและในที่สุดก็รู้แน่ชัดว่าโลกนี้ไม่ได้มีเพียงมนุษย์ แต่มีสิ่งมีชีวิตอื่นๆ ที่เรียกว่าแฟรี่อาศัยอยู่ แต่ด้วยเทคโนโลยีล้ำยุคของชาวแฟรี่ทำให้มนุษย์ทั่วไปไม่สามารถรับรู้ถึงการมีอยู่ของชาวแฟรี่ .. ในเล่มแรกอาร์ทิมิสวางแผนล่อแฟรี่ให้ติดกับได้สำเร็จ เขาเลยกลายเป็นตัวอันตรายของชาวแฟรี่ แถมแฟรี่สาวที่โดนจับได้นั้นเป็นตำรวจแฟรี่ซะอีก .. ในเล่มสองอาร์ทิมิสต้องการความช่วยเหลือจากชาวแฟรี่เพื่อช่วยพ่อของเขา .. เล่มสามเกิดวิกฤตในเมืองใต้พิภพของชาวแฟรี่ และคนที่มีมันสมองฉลาดพอจะแก้วิกฤตินี้ได้ก็มีเพียงอาร์ทิมิสคนเดียว อาร์ทิมิสช่วยแก้วิกฤตได้สำเร็จ เขาเกือบจะเป็นเพื่อนกับแฟรี่หลายคน ทั้งตำรวจสาว และเซ็นทอร์อัจฉริยะประจำกรมตำรวจแฟรี่ แต่ท้ายที่สุดอาร์ทิมิสก็โดนลบความจำทั้งหมดที่เกี่ยวกับแฟรี่ .. แต่อาร์ทิมิสฉลาดพอที่จะวางแผนไว้ล่วงหน้าแล้ว .. ตรงนี้เองที่น่าสงสัยว่าจะมีเล่มสี่ (- -)

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

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

Linux Kernel 2.5.15

blog ช้าไปหน่อย .. better late than never :P

stable kernel ตัวแรกของปี ออกเมื่อวันที่ 3 มกราคม 2549 ที่น่าสนใจสุดคงเป็นเรื่อง shared subtree ที่จับรวมเข้าไปอยู่ใน VFS เรียบร้อย แรงผลักของ shared subtree อย่างแรก มาจาก files-as-directories ซึ่งเป็นฟีเจอร์นึงใน Reiser FS สำหรับสร้าง hardlink ไปยังไดเรกทอรี่ได้ แต่เอาเข้าจริงๆ การใช้งานของ Reiser FS เกือบทั้งหมด disable ฟีเจอร์นี้ ไว้เพราะมีปัญหาใหญ่เรื่อง deadlock ก็เลยต้องหา solution กันอยู่ แรงผลักอย่างที่สองคือ per-user namespace ซึ่งเป็นฟีเจอร์ที่ทำให้ผู้ใช้แต่ละคนเสมือนกับมี namespace บนระบบไฟล์ของตัวเอง ออกจะคล้ายๆ mount -o bind แต่เรื่องสิทธิของไฟล์หรือไดเรกทอรี่ที่แชร์อยู่ด้วยกันจะซับซ้อนกว่า shared subtree สนับสนุนการ mount ได้หลายแบบ เช่น แบบ shared slave private และ unbindable กำหนดได้ว่า mount จะ forward / receive propagation หรือไม่ก็ได้ ฯลฯ รายละเอียดค่อนข้างยาว ไว้ว่างๆ ค่อยมาเล่าให้ฟังเพิ่ม

เปรียบเทียบกับ 2.6.14

  • Optimize for size (CC_OPTIMIZE_FOR_SIZE) ใช้ -Os แทน -O2 .. คอมไพเลอร์บางตัวอาจจะได้ broken code (- -‘)
  • เลือก default I/O scheduler ได้สี่แบบ Anticipatory (DEFAULT_AS), Deadline (DEFAULT_DEADLINE), CFQ (DEFAULT_CFG), No-op (DEFAULT_NOOP)
  • Legacy Power Management API (PM_LEGACY) สำหรับ pm_register()
  • Connector unified userspace – kernelspace linker (CONNECTOR)
  • สนับสนุน Resident Flash Disk ในระดับ Flash Translation Layers (RFD_FTL) อยู่ใน embedded system บางระบบ
  • สนับสนุน OneNAND flash devices (MTD_ONENAMD)
  • สนับสนุนการทำ (U)DMA บนชิปเซ็ต AMD CS5535 (BLK_DEV_CS5535)
  • ไดรเวอร์ iSCSI สำหรับทำงานบน IP network (ISCSI_TCP)
  • ไดรเวอร์ SCSI สำหรับ Pacific Digital ADMA (SCSI_PDC_ADMA)
  • ไดรเวอร์ SATA สำหรับ Silicon Image 3124/3132 (SCSI_SATA_SIL24)
  • ไดรเวอร์ Dummy ATM (ATM_DUMMY) เอาไว้ทดสอบ หรือพัฒนา
  • ไดรเวอร์ปุ่มพิเศษของ x86 Wistron laptop, e.g., Acer, Fujitsu, ..(INPUT_WISTRON_BTNS)
  • สนับสนุน compression/encryption สำหรับ Microsoft Point-to-Point Tunneling Protocol (PPP_MPPE)
  • ไดรเวอร์สำหรับ Omnikey Cardman 4000 (CARDMAN_4000) และ 4040 (CARDMAN_4040)
  • ไดรเวอร์สำหรับ telecom clock ของ MBPL0010 ATCA SBC
  • ไดรเวอร์ real-time clock สำหรับ Xicor X1205
  • ไดรเวอร์ Digital Broadcast Video/ATSC ที่ใช้ชิพ Brooktree/Conexant BT878 (VIDEO_BT878_DVB)
  • ไดรเวอร์ Digital Broadcast Video ที่ใช้ชิพ Philips SAA7134_DVB (VIDEO_SAA7134_DVB_ALL_FRONTENDS)
  • ไดรเวอร์ระบบเสียงของ Philips SAA7134 สำหรับ ALSA (VIDEO_SAA7134_ALSA) และ OSS (VIDEO_SAA7134_OSS)
  • ไดรเวอร์ Digital Broadcast Video ที่ใช้ชิพ CX2388x (VIDEO_CX88_DVB_ALL_FRONTENDS)
  • ไดรเวอร์ USB video capture สำหรับ Empia EM2800/2820/2840 (VIDEO_EM28XX)
  • สนับสนุน console rotation สำหรับ Framebuffer (FRAMEBUFFER_CONSOLE_ROTATION)
  • ไดรเวอร์ CDMA Wireless สำหรับ USB AnyData devices (USB_SERIAL_ANYDATA)
  • สนับสนุน RDMA SCSI protocol บน Infiniband (INFINIBAND_SRP)
  • สนับสนุน JFFS2 summary (JFFS2_SUMMARY)
  • สนับสนุนการเก็บสถิติเพิ่มเติมสำหรับ CIFS (CIFS_STATS2)
  • สนับสนุนกลไก upcall สำหรับ CIFS ติดต่อ userspace helper utilities (CIFS_UPCALL)
  • trap address และ callback ภายในเคอร์เนล สำหรับ kernel debugging (KPROBES)
  • ออปชันสำหรับ debug ระบบ virtual memory (DEBUG_VM)

นอกเหนือจากนี้ก็มี CPU hotplug เดิม enable/disable ได้ ตอนนี้เพิ่มจำนวนได้ .. page table จัดการใหม่ช่วยให้ระบบ multiprocessor มี scalability ดีขึ้น ค่าปริยายคือ enable เมื่อ CPU >= 4 ตัว แพตช์นี้ข้อดีคือใช้งานกับ CPU จำนวนมากๆ ได้ดีขึ้น แต่อาจจะทำให้มี latency มากขึ้นอีกนิด .. ที่ต้องพิจารณาอีกอย่างคือ 2.6.15 re-structure ของ driver core ใหม่ทำให้ทำ nested structure ได้ ผลกระทบคือต้องใช้กับ udev >= 071 .. เท่าที่ใช้กับ udev 062 ก็ยังปกติดี YMMV