วันพุธที่ 21 เมษายน พ.ศ. 2553

ตั้งค่าเครือข่ายไร้สาย

แต่ก่อนแต่ไรมา ไม่เคยสนใจจะใช้ระบบเครือข่ายไร้สายของมหาวิทยาลัยเลย สาเหตุเพราะว่าใช้ไม่เป็น :p และการตั้งค่าใน GUI มันใช้ไม่ได้ และเราไม่สามารถสืบทราบได้ว่าที่ใช้ไม่ได้ เพราะการตั้งค่าของเราไม่ถูกต้อง หรือว่าระบบเครือข่ายเองมีปัญหา

แต่เนื่องจากได้ร่วมกิจกรรม Thailand Mini DebCamp2010 และเขาทำให้เรามั่นใจว่าระบบเครือข่ายของเขาใช้ได้แน่นอน ก็เลยพยายามศึกษาและหาทางตั้งค่าระบบให้ใช้ได้ดูสักที

คราวนี้จะลองไม่ใช่ GUI ดู เพราะลองจากบรรทัดคำสั่งน่าจะเห็นผลลัพธ์และข้อผิดพลาดได้ดีกว่า คำสั่งที่ต้องใช้ก็คือ
  1. ifconfig
  2. iwlist
  3. iwconfig
  4. dhclient
เนื่องจากโน้ตบุ๊กของผมมี Ethernet Card อยู่ 2 ตัวคือ eth0 สำหรับแบบมีสาย และ eth1 สำหรับแบบไร้สาย ก็เลยอยากจะแน่ใจว่า Ethernet Card นั้นเปิดใช้งานอยู่ตัวเดียว จะได้ไม่งงเวลาเกิดข้อผิดพลาดขึ้น ก็ต้องปิด eht0 และเปิด eth1 โดย
> ifconfig eth0 down
> ifconfig eth1 up
จากนั้นก็ให้ระบบแสดงรายการของเครือข่ายที่เราจะใช้การได้โดย
> iwlist eth1 scanning
ระบบจะแสกนหาเครือข่ายไร้สายที่อยู่ในอาณาบริเวณที่ระบบจะรับสัญญาณได้ และแสดงรายละเอียดมาดังตัวอย่าง
eth1      Scan completed :
          Cell 01 - Address: xx:xx:xx:xx:xx:xx
                    ESSID:"YOURNETWORKNAME"
                    Protocol:IEEE 802.11bg
                    Mode:Master
                    Frequency:2.437 GHz (Channel 6)
                    Encryption key:on
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s
                              11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s
                              48 Mb/s; 54 Mb/s
                    Quality=93/100  Signal level=-35 dBm 
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (1) : TKIP
                        Authentication Suites (1) : PSK
                    Extra: Last beacon: 16ms ago

 สิ่งที่น่าสนใจในเวลานี้คือชื่อเครือข่ายของเรา ซึ่งจะอ่านจาก ESSID และเครือข่ายที่ว่านี้ต้องการรหัสผ่านหรือไม่ ซึ่งจะอ่านจาก Encryption key ถ้า on ก็แปลว่าเราต้องขอรหัสผ่านจากผู้ดูแลระบบ ถ้า off ก็แสดงว่าเปิดให้ใช้ฟรี (ที่ทำงานผมใช้แบบนี้) ข้อมูล 2 ประการนี้จะช่วยให้เราติดต่อกับเครือข่ายไร้สายได้ โดยใช้คำสั่ง iwconfig ดังนี้
สำหรับระบบที่ไม่ได้ตั้งรหัสผ่านไว้ ใช้คำสั่ง
> iwconfig eth1 essid YOURNETWORNAME key off

สำหรับระบบที่ตั้งรหัสผ่านไว้แบบตัวเลขฐานสิบหก ใช้คำสั่ง
> iwconfig eth1 essid YOURNETWORKNAME key xxxx-xxxx-xxxx-xxxx

สำหรับระบบที่ตั้งรหัสผ่านไว้แบบตัวอักษร (ระบบของทรูที่น้องชายใช้เป็นแบบนี้)  ใช้คำสั่ง
> iwconfig eth1 essid YOURNETWORKNAME key s:YOURPASSWORD
เราสามารถตรวจสอบได้ว่าระบบของเราเชื่อมต่อกับเน็ตเวิร์กสำเร็จหรือไม่โดยใช้คำสั่ง
> iwconfig eth1
หากเชื่อมต่อสำเร็จจะเห็นข้อมูลการเชื่อมต่อที่คอนโซล
eth1      IEEE 802.11g  ESSID:"YOURNETWORKNAME
          Mode:Managed  Frequency:2.437 GHz  Access Point: xx:xx:xx:xx:xx:xx  
          Bit Rate:54 Mb/s   Tx-Power=20 dBm   Sensitivity=8/0 
          Retry limit:7   RTS thr:off   Fragment thr:off
          Encryption key:xxxx-xxxx-xxxx-xxxx   Security mode:open
          Power Management:off
          Link Quality=95/100  Signal level=-32 dBm  Noise level=-91 dBm
          Rx invalid nwid:0  Rx invalid crypt:1  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:3

แต่หากเชื่อมต่อไม่สำเร็จ ตรงที่ระบบมาตรฐานการเชื่อมต่อ IEEE 802.11g จะระบุเป็น unassociate แทน

ในกรณีที่ผมเคยประสบมาด้วยตนเองทุกกรณี ระบบเครือข่ายไร้สายจะใช้ระบบ DHCP แจก IP ให้เรา เราสามารถร้องขอ IP จาก DHCP ได้โดย
> dhclient eth1
ระบบจะจัดการขอ IP และ DNS ให้เรา ถ้าไม่มีข้อผิดพลาดตอนนี้ก็ถือว่าเราเชื่อมต่อกับระบบเสร็จสิ้นแล้ว ในบางระบบ หากจะเชื่อมต่อกับอินเตอร์เนต ก็ต้องตั้งค่า Proxy ด้วย บางระบบระบุให้เชื่อมต่อโดยตรง ไม่ต้องผ่าน Proxy ก็มี ซึ่งจะแตกต่างกันไปตามแต่ผู้ดูแลระบบจะกำหนด

ในกรณีของผม DNS ที่กำหนดมาให้โดยเครือข่ายของทรูที่ระบบของผมรับได้จาก dhclient นั้น ไม่รู้จักเว็บไซต์บางเว็บเช่นเว็บของทรูเอง (ประหลาดดี) และผมไม่สามารถหาข้อมูลนี้ได้จากเว็บไซต์ของบริษัทได้ จึงต้องใช้บริการของ Google Public DNS ซึ่งก็สะดวกดี

วันอังคารที่ 16 มีนาคม พ.ศ. 2553

ผลพลอยได้จากการเข้าร่วมกิจกรรม Thailand Mini DebCamp 2010

จากที่เขียนไปก่อนหน้านี้ว่า โน้ตบุ๊กมีปัญหาหลังจากพยายามอัพเกรดให้เป็น sid แล้วทำไม่ได้ต้องแก้ระบบกลับคืน

อาการแรกก็คือ Gnome หาย เหลือไว้แต่ TWM อันนี้ไม่ยาก เพราะ wvdial ยังอยู่ apt-get ยังอยู่ ก็ต่ออินเตอร์เนตด้วย wvdial แล้วก็ Install Gnome โดยใช้ apt-get เสร็จไปอย่างหนึ่ง

วันรุ่งขึ้นยังคาใจ เลยพยายามอัพเกรดระบบให้เป็น squeeze ผลคือ Kernel เดิมมีปัญหากับ udev รุ่นใหม่ แล้วเราไม่รู้เรื่อง ก็เลยพาให้ X มีปัญหาตามไปด้วย อาการคือ X Window หายไปเลย เหลือแต่จอดำ ๆ เปล่า ๆ

เอาล่ะสิ จะ Install ใหม่ มันก็ได้อยู่หรอกนะ แต่ว่ามันน่าจะแก้ได้ใช่ไหมล่ะ ก็เลยคิดวิธีการแก้ไว้อย่างนี้
  1. หาทางให้ระบบบูตขึ้นมาใน Text Mode ให้ได้ก่อน ตอนนี้ระบบพยายามจะใช้ X แล้วใช้ไม่ได้อยู่
  2. ถ้าบูตเข้า Text Mode ได้แล้ว ค่อยหาทางใช้อินเตอร์เนตของที่ทำงานให้ได้เป็นรายการต่อมา เพราะต้องใช้ apt-get ลงแพคเกจอีกหลายตัว
  3. จากนั้นก็ค่อยอัพเกรด Kernel และ Firmware ให้เรียบร้อย
  4. ถ้าไม่มีปัญหา ก็จะได้อัพเกรดระบบที่เหลือทั้งหมด
บูตยังไงให้เข้า Text Mode
ด่านแรกคือทำยังไงกระบวนการบูตจึงจะหยุดอยู่ที่ Text Console ไม่ไปเรียก GDM ซึ่งรันอยู่บน X เข้าไปดูในอินเตอร์เนต เจออยู่หลายเว็บ แต่ไม่ได้ตอบคำถามที่อยากรู้เลย ส่วนมากจะบอกเพียงว่า จะต้องไปแก้ไขไฟล์ไหนเท่านั้น แต่ตอนนี้ระบบของเราเดี้ยงอยู่ เราจะเข้าไปแก้ไฟล์นั้นไฟล์นี้ได้อย่างไร

สุดท้ายก็ได้พบคำตอบจาก https://help.ubuntu.com/community/BootOptions ว่า ตอนที่เครื่องรัน Grub อยู่นั้น เราสามารถใส่ Boot Option ได้ โดยเลือก OS ที่เราต้องการ กด e เพื่อ Edit Boot Command ซึ่งถ้าเป็น Linux หน้าตาของ Boot Command จะคล้าย ๆ อย่างนี้
boot: /boot/vmlinuz-x.x.x-x root=/dev/hdax ro quiet
เราเติม option ว่า text ลงไปข้างท้ายบรรทัดที่ว่าจะได้
boot: /boot/vmlinuz-x.x.x-x root=/dev/hdax ro quiet text
พอแก้ไขเสร็จ กด b ระบบก็จะบูตและกระบวนการก็จะไปหยุดอยู่ที่ Prompt ไม่เรียก GDM ให้เครื่องเราเดี้ยงอีกต่อไป

จะใช้เน็ตเวิร์กยังไง
ด่านต่อมาก็คือ แต่ก่อนแต่ไรมาเราก็ต่อเน็ตเวิร์กตอนที่อยู่ใน Gnome ทั้งนั้น ไม่เคยต่อโดยใช้บรรทัดคำสั่งเลย แต่มันต้องทำได้สิน่า ลองหาดูก่อน ก่อนอื่นเลยคำสั่งแรก เคยใช้มาบ้างแล้วคือ ifconfig
sudo ifconfig
เพื่อแสดงรายการเน็ตเวิร์กดีไวซ์ของเราเสียก่อน เครื่องผมมี 2 ตัว พอดีทราบมาก่อนแล้วว่า eth0 คือเน็ตเวิร์กดีไวซ์แบบมีสายที่เราจะใช้นี่แหละ ก็ตั้ง ip ตามที่ admin เคยให้ข้อมูลมาเสียให้เรียบร้อยด้วย
sudo ifconfig eth0 xxx.xxx.xxx.xxx
sudo ifconfig eth0 up
อันที่จริง ไม่ต้องสั่ง up ก็ได้ มันจะ up ให้อัตโนมัติ ทดสอบว่าเชื่อมต่อกับเน็ตเวิร์กแล้วโดยการ ping ไปที่ gateway ซึ่งในระบบที่ผมใช้ admin เขาให้รายละเอียดมา ก็ไม่ต้องไปค้นหาให้ลำบาก ปัญหาต่อมาก็คือ เชื่อมต่อกับเน็ตเวิร์กแล้ว แต่ต่อออกข้างนอกไม่ได้เพราะยังไม่ได้บอกระบบว่า DNS ที่เราจะใช้อยู่ที่ไหน จากการค้นอินเตอร์เนตทำให้ทราบว่ารายชื่อของ DNS จะอยู่ในไฟล์ชื่อ /etc/resolve.conf ให้ใช้สิทธิ์ root ไป Edit ไฟล์นี้โดยให้แน่ใจว่ามีบรรทัดที่ระบุ DNS อยู่เช่น
nameserver xxx.xxx.xxx.xxx
ถ้ามี DNS มากกว่าหนึ่งตัวก็เติมเข้าไปในไฟล์นี้แหละ ทดสอบว่าระบบรู้จักกับ DNS แล้วหรือยังด้วยคำสั่ง
host google.com
ควรจะได้รายการ IP Address ของกูเกิลออกมา ถ้าได้มาก็แสดงว่าตั้งค่า DNS เสร็จแล้ว ต่อมาก็ต้องระบุ Proxy Server สำหรับ apt-get ให้เรียบร้อย ให้เปิดไฟล์ /etc/apt/apt.conf ดูด้วยคำสั่ง
cat /etc/apt/apt.conf
ก็ได้น่าจะเห็นอะไรคล้าย ๆ ข้างล่างนี้อยู่
Acquire::http::Proxy "http://proxy.server.name:PORT";
ถ้าไม่มีก็เติมเข้าไปให้ถูกต้อง ตอนนี้ apt-get ของเราก็พร้อมเชื่อมต่อกับอินเตอร์เนตแล้ว ถ้ายังไม่ได้กำหนด Reprository หรือไม่แน่ใจก็ให้ดูที่ /etc/apt/source.list ก็ได้ สำหรับ Debian ตอนนี้ Debianclub ประกาศ Reprository มาหลายที่เพื่อความสะดวกของผู้ใช้ ผมอยู่ขอนแก่นก็ใช้ Reprository ของคุณนิวตรอน ก็ให้แน่ใจว่ามีบรรทัดอย่างนี้อยู่ใน /etc/apt/source.list
deb http://neutron.debianclub.com/debian squeeze main contrib non-free
ตอนนี้ apt-get ก็พร้อมแล้ว เมื่อพร้อมแล้วก็ใช้ apt-get อัพเกรด linux-image และ firmware ที่จำเป็นให้เสร็จก่อน อาจใช้ wildcard ช่วย และเลือกจากรายการที่ apt-get แสดงให้ดู เมื่อเสร็จแล้วจึงอัพเกรดทั้งระบบ หรือจะเลือกอัพเกรดเฉพาะ X และ Gnome ก่อน ก็ได้ ต่อไปจะได้เข้าไปแก้ไขระบบใน Gnome ตามที่คุ้นเคยต่อไป

วันจันทร์ที่ 15 มีนาคม พ.ศ. 2553

ได้เข้าร่วม Thailand Mini DebCamp 2010

ชาว debianclub ได้ร่วมกันเป็นเจ้าภาพ Thailand Mini DebCamp 2010 ซึ่งจัดให้มีขึ้น ณ สำนักนวัตกรรมการเรียนการสอน มหาวิทยาลัยขอนแก่น ในระหว่างวันที่ 13 - 19 มีนาคม 2553

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

วันแรก (13 มีนาคม 2553) ก็เป็นการบรรยายภาพรวมของการทำงาน ว่าจะประกอบด้วยอะไรและต้องทำอย่างไรบ้าง แต่เนื่องจากโน้ตบุ๊กของผมมันไม่ค่อยเสถียร เลยไม่กล้าหยิบเครื่องขึ้นมาทดลองทำตามที่เขาแนะนำ แต่ก็จดรายละเอียดไว้ เอาไว้มาอ่านจากอินเตอร์เนตประกอบด้วยในภายหลัง

วันที่สอง (14 มีนาคม 2553) ตามกำหนดการคือ BSP (Bug Squash Party?) ทั้งห้องเงียบมาก เรียกว่าต่างคนก็ต่างแก้บั๊กที่ตนอยากแก้ตั้งแต่เช้ายันค่ำ เงียบมากจริง ๆ

ส่วนผมน่ะหรือ? :p มัวแต่เซตอัพระบบเพื่อให้พร้อมใช้ Build แพคเกจต่าง ๆ ก็หมดไปหนึ่งวันแล้ว สาเหตุที่ใช้เวลานานก็คือ
  1. หาทางต่อระบบของตนเองเข้ากับเน็ตเวิร์กที่เขาเตรียมไว้ให้ นี่ใช้เวลาไปกว่าชั่วโมง
  2. ผมนึกว่าจะช่วยเขา Debug ได้ ระบบของผมต้องเป็น sid (ซึ่งมันต้องเป็นอย่างนี้จริง ๆ หรือเปล่าผมก็ยังไม่ทราบ) จึงอัพเกรดระบบของตนเองจาก lenny เป็น sid นี่ใช้เวลาไปอีกกว่าชั่วโมง
  3. เกิด Error ขึ้นระหว่างการอัพเกรด! จึงต้องหาทางทำให้ระบบกลับเป็นเหมือนเดิมนี่ก็อีกกว่าชั่วโมง
  4. พอย้อนระบบได้เหมือนเดิมปั๊บ ก็ลองทำตามที่เขาแนะนำทันที คือสร้างระบบ base system เพื่อทดสอบการ build แพคเกจโดยใช้คำสั่ง pbuilder ปรากฏว่า pbuilder ของผมมันจะมี error ที่คนอื่นเขาไม่มีกัน
  5. ก็นึกว่าเป็นเพราะการเซตอัพพวก configuration file ของเราไม่ดี ก็หาทางแก้ ลองผิดลองถูกอยู่เกือบครึ่งวันปรากฏว่า
  6. คนอื่นเขาใช้ pbuilder เวอร์ชั่นสูงกว่าที่เราใช้ ที่เราใช้เป็นเวอร์ชั่นจาก lenny ซึ่งค้นดูในอินเตอร์เนต เขาก็ระบุว่า ถ้าเป็นเวอร์ชั่นนี้ มันก็จะมี error อย่างนั้นแหละ -_- แต่เขามีวิธีแก้ (Work Around) ให้ด้วย ก็เลยใช้ pbuilder สำเร็จ ตอนที่ทุกคนกำลังเก็บของจะกลับบ้านนั่นแหละ
เรียกว่าวันนี้ทั้งวัน นอกจากจะไปกินข้าวของเขาฟรี ๆ แล้ว (อร่อยมาก) ยังไปกินแบนด์วิดธ์ของเขาฟรี ๆ อีก บั๊กสักตัวก็แก้ให้เขาไม่ได้ ฮะ ฮะ ฮะ แต่ก็ได้เรียนรู้อะไรใหม่ ๆ ที่คงจะไม่มีโอกาสเรียนรู้ได้เองถ้าอยู่คนเดียวเยอะแยะ นับเป็นประสบการณ์ที่ดี

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

วันอาทิตย์ที่ 21 กุมภาพันธ์ พ.ศ. 2553

หัดเรียนไพธอน

ผมเคยได้ยินชื่อภาษาไพธอนมานานแล้ว แต่ไม่เคยสนใจเลยว่ามันคืออะไร ด้วยคิด (เอาเอง) ว่ามันเป็นภาษาสำหรับการเขียนโปรแกรมบนฝั่ง Server ของ Internet Application ซึ่งผมก็ไม่เคยคิดว่าจะต้องไปทำงานอะไรทางนั้น

แต่ที่ทำงานมีรุ่นพี่คนหนึ่ง เขาให้นักเรียนทำโปรเจ็คโดยใช้ภาษาไพธอน เราก็เลยลอง ๆ เลียบ ๆ เคียง ๆ ดูว่ามันคืออะไร ปรากฏว่าเป็นภาษาที่เรียนรู้ได้ง่ายและมีไลบรารีให้ใช้เยอะมาก

ผมเอง เขียนโปรแกรมครั้งแรกก็ตอน ปวช. เขียน p-robot เล่นกันเองในหมู่เพื่อนฝูง บัดนั้นจนบัดนี้เกือบ 20 ปีแล้วผมยังไม่เคยเขียนโปรแกรมที่รันบนลินุกซ์จริง ๆ จัง ๆ ได้เลยสักที ด้วยว่าอ่าน Tutorial แล้วปฏิบัติตามไม่ได้ เกิดปัญหาแล้วแก้ไขเองไม่ได้

แต่ไพธอนไม่ใช่อย่างนั้น ผมลองเขียนโปรแกรมตาม Tutorial สัก 2 วันก็เริ่มอ่านโปรแกรมออกแล้ว และเขียนโปรแกรมที่มันมีความหวังว่าจะใช้ประโยชน์ได้จริง ๆ จัง ๆ ไม่ใช่แค่ Hello World

พอเริ่มเขียนได้ ก็เลยนำไอเดียที่ติดค้างไว้มากว่า 2 ปี มาทดลองดู ผลงานรุ่นแรกก็อยู่ที http://sites.google.com/site/mkittiphong/my_life_with_linux/mahori ซึ่งก็เป็นโปรแกรมง่าย ๆ

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

เป็นความรู้สึกผสมผสานกัน ทั้งดีใจที่ได้เจอไพธอน และเสียใจที่เพิ่งได้เจอไพธอน

วันพฤหัสบดีที่ 17 ธันวาคม พ.ศ. 2552

Look! It's alive! (Debian-Live USB Part I)

เมื่อต้นเดือนที่ผ่านมา ห้างเซนทรัลพลาซ่าได้เปิดตัวที่ขอนแก่น ผมเองก็พยายามไปเซนทรัลในช่วงสัปดาห์แรกอยู่ 2 - 3 หนเหมือนกัน แต่ไปไม่เคยถึงที่สักที ต้องกลับรถก่อน พอดีว่าช่วงนั้นมีงานไหมพอดี รถติดชะมัดยาด

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

นอกจากร้านอาหารแล้วอีกอย่างหนึ่งที่ประทับใจก็คือร้านหนังสือ ก็ไม่เยอะหรอกนะ แต่ที่จะมารวมอยู่ที่เดียวกันหลาย ๆ ร้านอย่างนี้เดิมก็ไม่มีมาก่อน มีทั้ง ซีเอ็ดฯ ร้านนายอินทร์ B2S และ เอเซียบุ๊คส์ และที่ร้านเอเซียบุ๊คส์นี้เองที่ผมได้เห็นนิตยสารต่างประเทศ Linux Users Magazine (ผมอาจจะจำชื่อผิด - ขออภัย) ในฉบับนี้ท่านแถม DVD Easy Peasy Linux ก็สนใจขึ้นมา ก็นึก ๆ อยู่ว่าจะลองซื้อมาอ่าน แต่ราคาเกินที่จะจ่ายไหวครับ นิตยสารฉบับเดียวเกือบ 500 บาท ถ้าสัก 200 - 300 ยังพอซื้อไหว

กลับบ้านมาก็เลยเข้ามาค้นดูว่าเจ้า Easy Peasy Linux นี้คืออะไร ก็ได้ความว่าเป็นอนุพันธ์ของ Ubuntu ที่จัดให้เล็กลงเพื่อให้ลงใน Netbook ได้ ชื่อเดิมของมันคือ Ubuntu Eee พอรู้จักเจ้าตัวนี้ก็เกิดสนใจดิสตริบิวชั่นจำพวกขนาดเล็ก (Minimalist) และพวก Live ขึ้นมาเพราะที่บ้านแฟนใช้วินโดว์อยู่ หากจำเป็นต้องใช้เครื่องของเขาเราก็ไม่อยากจะไปแตะฮาร์ดดิสก์ของเขา เผื่อพลาดพลั้งขึ้นมาข้อมูลเขาหายไปด้วยจะลำบาก ถ้าใช้แบบ Live ก็ไม่ต้องลงโปรแกรม ไม่ต้องยุ่งกับฮาร์ดดิสก์เขา และเนื่องจากผมใช้ Debian อยู่ ตัวเลือกแรกสำหรับผมก็คือ Debian-Live นี่เอง

แหล่งข้อมูลที่ค้นเจอเรียงตามลำดับที่พบคือ Pendrivelinux.com แต่เป็นการสร้างอิมเมจของเดเบียนบนวินโดว์ซึ่งยังไม่ใช่สิ่งที่ต้องการ แต่ก็มีประโยชน์มาก แหล่งถัดมาซึ่งจริง ๆ น่าจะพบก่อนด้วยซ้ำก็คือเว็บไซต์โปรเจ็คของ Debian-Live เองซึ่งมีคู่มือพร้อม เมื่อมีข้อมูลแล้วก็เริ่มลองผิดลองถูกกันได้

สิ่งที่ต้องมี
  1. เครื่องที่จะใช้สร้างอิมเมจของ Live นี้เรียกว่าโฮสต์ โฮสต์จะต้องมีแพคเกจ live-helper ติดตั้งอยู่ ถ้ายังไม่มีก็ใช้ Synaptic ช่วยในการติดตั้งก็ได้
  2. เนื่องจากการสร้างจะต้องโหลดแพคเกจทั้งหลายจาก Repository ดังนั้นระบบจึงจะต้องติดต่อกับอินเตอร์เนตได้
  3. พื้นที่ในฮาร์ดดิสก์เพื่อใช้เก็บไฟล์ที่จำเป็นในระหว่างการสร้างอิมเมจและตัวอิมเมจเอง จากที่ทดลองทำผมต้องใช้พื้นที่ไม่น้อยกว่า 3 GB สำหรับการสร้างอิมเมจแบบน้อยที่สุดที่ผมรับได้ขนาด 700 MB
  4. และแน่นอน ตัว USB Drive ความจุไม่น้อยกว่าขนาดของอิมเมจที่สร้างได้
  5. (ถ้ามีก็ดี) แพคเกจ qemu พร้อมกับตัวเร่งความเร็วของมัน (ถ้ามี) และ RAM ไม่น้อยกว่า 128 MB สำหรับการทดลองบูตอิมเมจที่สร้างได้ในอีมูเลเตอร์ (Run Linux within Linux) จะได้ไม่ต้องรีบูตเครื่องเพื่อทดสอบบ่อย ๆ
สิ่งที่ต้องทำ (แบบคร่าว ๆ)
  1. สร้างไดเร็คทอรีสำหรับสร้างและเก็บอิมเมจและไฟล์อื่น ๆ ที่ live-helper จะสร้างขึ้นมา และเข้าไปในไดเร็คตอรีนั้น
  2. แปลงร่างเป็น root เสีย ผมคิดว่าระบบของท่านจะใช้อะไรก็น่าจะได้ ไม่ว่าจะเป็น su sudo หรือว่า fakeroot แต่ที่ผมใช้คือ su ซึ่งที่มาของมันจริง ๆ ก็คือผมใช้ sudo ไม่เป็น ฮ่า ฮ่า ฮ่า
  3. เรียกคำสั่ง lh_config -b usb-hdd -p gnome-core ขึ้นมา คำสั่งนี้จะสร้างไดเร็คทอรีและไฟล์ที่ตั้งค่าต่าง ๆ ขึ้น ตัวเลือก -b usb-hdd เป็นการระบุว่าอิมเมจที่เราต้องการนั้นจะเป็นอิมเมจสำหรับ usbdrive ซึ่งชื่อของมันจะเป็น binary.img โดยอัตโนมัติ และตัวเลือก -p gnome-core จะใช้ Gnome Desktop แบบเฉพาะตัวหลัก (ตัวเลือกอื่น ๆ ขอบันทึกทีหลัง)
  4. เรียกคำสั่ง lh_build ขึ้นมา คำสั่งนี้จะโหลดแพคเกจที่จำเป็นต่าง ๆ มาและสร้างระบบไฟล์ของลินุกซ์ขึ้นและแปลงระบบไฟล์เป็นอิมเมจในที่สุด ขั้นตอนนี้อาจใช้เวลาค่อนข้างนานเพราะ script จะโหลดแพคเกจจาก Repository มา จะใช้เวลานานเท่าใดก็แล้วแต่ความเร็วในการติดต่อนั่นแหละครับ หลังจากโหลดแพคเกจมาแล้วก็ยังต้องใช้เวลาสร้างไบนารีอิมเมจอีก ระบบของผม (Pentium M 1.5 GHz + LAN Connection) ใช้เวลารวมประมาณ 2 - 3 ชั่วโมงครับ เคยลองรัน lh_build ตอนต่อกับโมเดมที่ความเร็ว 480kbps ก็ใช้เวลาข้ามคืนครับ
  5. เมื่อได้อิมเมจมาแล้ว เราสามารถลองบูตอิมเมจนี้ได้โดยไม่ต้องรีบูตเครื่องโดยใช้ qemu binary.img ผลที่ได้เป็นดังรูป
เมื่อมั่นใจว่าอิมเมจที่สร้างใช้ได้ ก็เขียนลง UsbDrive ได้เลย แต่ต้องเป็น UsbDrive ที่ว่าง ๆ นะครับ ข้อมูลสำคัญให้สำเนาเก็บไว้ให้เรียบร้อยก่อน เพราะข้อมูลมันจะถูกลบทิ้งไปทั้ง Drive เลย

เขียนอิมเมจลงไดรว์โดยใช้คำสั่ง
#dd if=binary.img of=/dev/sdx
เมื่อ /dev/sdx คือดีไวซ์ของ UsbDrive ของเรา ในกรณีของผมคือ /dev/sda ในกรณีของท่านอื่น ๆ อาจจะต่างกันไป เช่น /dev/sdb เป็นต้น กระบวนการนี้อันตรายมากสำหรับคนที่ไม่แน่ใจว่าตนกำลังทำอะไรอยู่ เพราะหากเป็นระบบที่ใช้ Serial HDD บางทีฮาร์ดดิสก์ของท่านอาจจะเป็น /dev/sda ก็ได้ แล้วคำสั่งข้างบนก็จะไปทำลายข้อมูลในฮาร์ดดิสก์ของท่านจนหมด กู้ไม่ได้ เพราะฉะนั้นขอให้ทำด้วยความระมัดระวังนะครับ

เราอาจจะทราบดีไวซ์ของ UsbDrive ของเราได้โดยใช้คำสั่ง
#fdisk -l
ภายใต้สิทธิ์ของ root ให้มองหาดีไวซ์มีความความจุเท่ากับ UsbDrive ของเรา อันนั้นน่าจะเป็นอันที่ถูกต้อง ถ้ายังไม่แน่ใจ ให้เอา UsbDrive ออก แล้วสั่งใหม่ ดีไวซ์ไหนหายไปดีไวซ์นั้นคือ UsbDrive ของเรานั่นเอง เมื่อบันทึกลง UsbDrive ได้แล้วก็ลองรีบูตเครื่องและบูตจาก USB ดู น่าจะเข้าสู่ live boot ได้
.
.
.
ในระหว่างการลองผิดลองถูกครั้งนี้ก็ได้เรียนรู้อะไรน่าสนใจหลายอย่าง บางอย่างลองแล้ว แต่มันยาว เลยยังไม่บันทึก บางอย่างก็ไม่ยาวนักแต่ยังไม่ได้ลองก็เลยยังไม่บันทึก หากมีเวลาจะกลับมาบันทึกเรื่องน่าสนใจเหล่านั้นในเร็ว ๆ นี้

วันเสาร์ที่ 5 ธันวาคม พ.ศ. 2552

การใช้ KiCad ครั้งแรก

ผมมีความต้องการจะใช้โปรแกรมออกแบบลายวงจรในลินุกซ์มานานแล้ว แต่ก่อนผมพยายามจะใช้ geda แต่ขอเรียนตามตรงว่าความสามารถผมไม่ถึงจริง ๆ ผมว่า geda ใช้ยากนะ

ผมเห็น KiCad ใน Reprository มานานแล้ว แต่ไม่ได้จะใช้ด้วยความคิดแบบไร้เดียงสาว่า ตัว K เกี่ยวข้องกับ KDE และจะต้องลง KDE ทั้งชุดซึ่งผมไม่อยากทำ

สุดท้ายก็ตัดสินใจลง KiCad จนได้ ความประทับใจก็คือมันใช้ง่ายมากเลยครับ ทำให้เรียนรู้ได้ง่าย ไม่จำเป็นต้องเป็นคนที่รู้เรื่องกระบวนการ EDA มาก่อนก็ได้

Tutorial ชุดแรกที่ผมอ่านคือ Mini Tutorial - KiCad ซึ่งผลงานชิ้นแรกผมทดลองทำ Instrument Amplifier แบบที่ใช้ OpAmp 3 ตัว ผลงานก็แสดงดังรูปครับ






วันพุธที่ 14 ตุลาคม พ.ศ. 2552

การสร้างและเพิ่มไลบารีให้ xfig

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

แต่ก็มีสิ่งหนึ่งที่สร้างความไม่สะดวกมาตลอด ก็คือสัญลักษณ์ทางไฟฟ้าและอิเล็กทรอนิกส์ที่มีให้มากับ xfig นั้นมันจัดขนาด โดยเฉพาะขั้วต่อภายนอกไม่ตรงกับ Snap และ Grid คือมันจะเหลื่อมกันทำให้ต้องวาดสัญลักษณ์สำหรับไดอะแกรมใหม่เสมอ (ผมทำ Copy & Paste ข้ามไฟล์ใน xfig ไม่เป็น T_T)

จนบัดนี้จึงได้มาพบกับวิธีสร้างและเพิ่มไลบารีให้กับ xfig จาก http://www.xsteve.at/prg/xfig/

เว็บไซต์ของสตีฟระบุขั้นตอนไว้อย่างนี้ครับ
  1. สร้างสัญลักษณ์ที่จะใช้ขึ้นมา Save ในชื่อสัญลักษณ์นั้น ๆ เอง เช่นสร้าง NPN BJT ขึ้นมาก็อาจ Save ในชื่อ npn_bjt.fig ก็ได้
  2. สร้างสัญลักษณ์อื่น ๆ ที่สามารถจัดเข้าอยู่ในกลุ่มเดียวกันขึ้นมา และเก็บไว้ในไดเร็คตอรีเดียวกัน เช่นในกรณีตัวอย่างเป็นสัญลักษณ์ในวงจรอิเล็กทรอนิกส์ อาจเก็บไว้ใน ~/myxfiglib/electronic ก็ได้
  3. สร้าง Symbolic Link ในไดเร็คตอรีไลบรารีของ xfig ลิงก์มาที่ไลบราลีของเรา (ผมเข้าใจถูกไหมนะ) โดยใช้คำสั่ง

    ln -s ~/myxfig/library/electronic / /usr/X11R6/lib/X11/xfig/Libraries/nlogic

  4. เมื่อเรียก xfig ขึ้นมาและเปิดไลบรารีควรจะเห็นไลบรารี electronic ของเราอยู่ในรายการด้วย
แต่สิ่งที่สตีฟบอกไว้มันใช้กับระบบของผมไม่ได้โดยตรงแฮะ ทั้ง ๆ ที่ใช้ Debian 5.0 ตอนที่เป็น Stable Release แล้วและไม่เคยเข้าไปแก้ไขอะไร แต่พอเข้าไปใน /usr/X11R6 แล้วมันไม่เจอ lib มันมีแต่ bin ก็เลยเดาเอาว่าสงสัยเป็นเพราะโครงสร้างของ X11 ว่ามันเปลี่ยนไปนานแล้ว เคยได้ยินใครในอินเตอร์เนตนี่แหละ เล่าให้ฟัง ก็เลยค้นหาดูในระบบแฟ้ม ว่ามีอะไรที่คล้าย ๆ อย่างนี้ไหม ปรากฏว่าเจออยู่ที่

/usr/share/xfig/Libraries

ก็เลยลองทำสร้างลิงก์ไว้ในไดเร็คตอรีนั้นแหละ โดยใช้คำสั่ง

ln -s ~/myxfiglib/electronic /usr/share/xfig/Libraries/electronic

เมื่อเสร็จแล้ว หากไป ls ดูใน /usr/share/xfig/Libraries ก็เจอลิงก์มาที่ ~/myxifglib/electronic แล้วก็ลองเรียก xfig และเปิดไลบรารีดู ก็พบผลงานของตัวเองอยู่ในไลบรารีเรียบร้อยพร้อมใช้งาน :)

หมายเหตุ: มีข้อควรระวังนิดหน่อยว่าไม่ควรตั้งชื่อไลบรารีของตัวเองซ้ำกับไลบรารีที่ติดมากับ xfig อยู่แล้ว ผมไม่รู้หรอกว่าจะเกิดอะไรขึ้น แต่คิดว่าคงจะมีปัญหาแหง ๆ