วันพฤหัสบดีที่ 27 พฤษภาคม พ.ศ. 2553

การเขียนสมการในเว๊บและในบล๊อก

การเขียนสมการในบล๊อกหรือในเว๊บโดยทั่วไป (HTML) นั้น ทำไม่ได้เลย (หรือได้?) เมื่อมหาวิทยาลัยมีนโยบายให้ผู้สอนจัดสร้างสื่อ e-Learning สำหรับนักศึกษา เราก็อยากจะจัดทำเว๊บหรือเขียนบล๊อกที่บรรยายเนื้อหาที่สอน

แต่เนื้อหาที่สอนไม่มีทางหลีกเลี่ยงสมการได้ เราจะเขียนสมการลงในเว๊บหรือบล๊อกของเราอย่างไร? โชคดีที่มีคนคิดแก้ปัญหานี้ไว้แล้วครับ นั่นก็คือจาวาสคริปต์เพื่อการสร้างสมการโดยแปลงรหัสสมการให้เป็นภาพแบบ svg สคริปต์ดังกล่าวก็คือ ASCIIMathML.js สคริปต์ดังกล่าวนี้เขียนขึ้นและดูแลโดยนาย Peter Jibsen จากมหาวิทยาลัย Chapman University ครับ

วิธีใช้ก็ง่ายมาก (สำหรับเว๊บที่คุณมีอำนาจเต็ม) นั่นก็คือ
    • ดาวน์โหลดสคริปต์ดังกล่าวจาก ASCIIMathML 
    • อัพโหลดสคริปต์นันไปที่โฮสต์ของเว๊บไซต์ของคุณ เลือกไดเร็คตอรีได้ตามใจตราบใดที่ยังเป็นไดเร็คตอรีที่เข้าถึงได้ทาง www สมมติว่าเป็น webroot/ASCIIMathML.js ก็ได้ (เมื่อ webroot หมายถึงตำแหน่งรากของเว๊บของคุณ ไม่ใช่ตำแหน่ง root ของระบบ)
    • เติมแท็กสคริปต์ลงในส่วนหัวของไฟล์ HTML ของหน้าเว๊บที่ต้องการแสดงสมการดังต่อไปนี้
    <script> type="text/javascript" src="ASCIIMathML.js" </script>
    ลงในระหว่างแท็ก <head> ... </head> ในแฟ้ม HTML นั้น ๆ ซึ่งส่วนนี้อาจอยู่ในแม่แบบของเว๊บ หรือจะเป็น HTML โดยตรงก็ได้ แล้วแต่เว๊บของท่าน
    •  ในส่วนเนื้อความ ท่านก็สามารถเขียนสมการโดยใช้รหัสที่มีความคล้ายคลึงกันกับ LaTeX (เป็นส่วนใหญ่) ได้ โดยให้ครอบรหัสของสมการด้วย a``math ... enda``math
      เช่น a``math x^{2}=\frac{1}{y} enda``math จะให้ผลเป็น amath x^{2}=\frac{1}{y} endamath
    สำหรับกรณีการการเขียนสมการลงบล๊อก (เฉพาะที่รู้จักคือ blogger.com เท่านั้น) จะยุ่งนิดหน่อยเนื่องจาก
    1. หาทางแทรกแท็ก <script>...</script> เข้าไปใน Blog และ
    2. ต้องหาที่สำหรับเป็นโฮสของจาวาสคริปต์อันนี้ 
    ปัญหาแรกนั้นมีทางทำได้ไม่ยาก ให้ไปที่เมนูรูปแบบ (Template) ของบล๊อกของคุณ และแก้ไขแม่แบบแบบ HTML ดังรูป การแทรกโค้ดให้แทรกในแท็กส่วนหัว (Head) ซึ่งในนั้นจะมีโค้ดอื่น ๆ อีกเยอะ ก็เลือกแทรกตรงใกล้ ๆ กับท้าย ๆ แท็กก็ได้ครับ


    ส่วนปัญหาที่สอง เนื่องจากผมไม่สามารถอัพโหลดสคริปต์ตัวนี้ เข้าไปไว้ใน Blogger ได้ ทางออกก็คือหาเว๊บอื่นสำหรับใช้เป็นโฮสของสคริปต์ตัวนี้ และให้เรียกสคริปต์ตัวนี้จากโฮสดังกล่าวในแท็ก
    <script> type="text/javascript" src="http://www.yourhost.com/ASCIIMathML.js" </script>
     ในส่วนหัว (<head>...</head>) ของแฟ้ม HTML ของคุณ สังเกตว่า src ของสคริปต์กลายเป็น URL ของเว๊บที่ใช้โฮสแล้ว ปัญหาคือผมไม่มีโฮสแบบนั้นเป็นของตัวเองนี่สิ ผมมีแต่ Google Site จะทำยังไงดี?

    ทางออกง่ายอย่างคิดไม่ถึงครับ คำแนะนำอันนี้ผมพบที่ SOSwitch Blog ซึ่งขั้นตอนมีดังนี้ครับ (อนุมานว่ามีบัญชี Google Site และเปิดไซต์แล้วนะครับ)
    • ดาวน์โหลดสคริปต์มาไว้ที่เครื่องตนเองก่อน
    • เปลี่ยนนามสกุลแฟ้มเป็น txt เสีย
    • ไปที่ไซต์ของตนเองใน Google Site 
    • สร้างหน้าเว๊บใหม่ขึ้นมาโดยใช้แม่แบบตู้เอกสาร (File Cabinet) หรือถ้ามีอยู่แล้วและใช้รวมกันได้ก็ไม่ต้องสร้างใหม่ ข้ามขั้นตอนนี้ไปเลย
    • อัพโหลดแฟ้มสคริปต์ที่เปลี่ยนนามสกุลแล้วขึ้นไป
    • คัดลอกลิงก์ที่ชี้มาที่แฟ้มนี้ในตู้เอกสาร เอาเฉพาะ URL ส่วนขยายอื่น ๆ เช่น ?attredirects=0&d=1 ก็ตัดทิ้งไป ลิงก์ที่คัดลอกมานี้แหละครับ นำไปใช้ที่ scr ในแท็ก <script> ข้างบน
    เมื่อเสร็จแล้ว ก็สามารถสนุกสนานกับการเขียนสมการเพื่อประกอบการสอนได้ดังนี้
    amath P_{3}^{0}=A_{0}(x-x_{0})^{3}+B_{0}(x-x_{0})^{2}+C_{0}(x-x_{0})+D_{0} endamath
    อยากเขียนเท่าไรก็เขียนไป เขียนกันให้สะใจไปเลย!

    วันอาทิตย์ที่ 9 พฤษภาคม พ.ศ. 2553

    การออกแบบวงจรโดยใช้โปรแกรม Opensource ตอนที่ 2/3

    หลังจากที่ได้ทดลอง KiCad ทำงานง่าย ๆ แล้ว ก็ถึงเวลาทดลองใช้ KiCad แบบจริงจัง คือมีชิ้นงานเป็นผลลัพธ์สุดท้ายได้ ความตั้งใจก็คือใช้ Opensouce โปรแกรม ในการออกแบบตั้งแต่ ลายวงจร (Schematic) จำลองวงจร (Simulation) ออกแบบแผ่นวงจรพิมพ์ และประกอบวงจรจริง ๆ โดยตั้งใจว่าจะแบ่งทำเป็น 3 ตอนคือ
    ตอนที่ 2 ออกแบบแผ่นวงจรพิมพ์โดยใช้ KiCad
    จากลายวงจรและการจำลองวงจรในตอนที่ 1 ในการทำงานจริงเราควรต่อวงจรลงบนโปรโตบอร์ดเพื่อให้มั่นใจเสียก่อนว่าวงจรทำงานได้จริง แต่เนื่องจากวงจรที่กำลังออกแบบอยู่นี้เป็นวงจรแบบง่าย จึงละไว้

    เมื่อจะออกแบบแผ่นวงจรพิมพ์ ก็มี 2 - 3 ประเด็นที่ทำให้ต้องไปปรับปรุงแก้ไขวงจรในตอนที่ 1 เสียใหม่ คือ
    • แม้ว่าในอุดมคติ วงจรนี้จะมีศักยภาพที่จะขับกำลังได้ถึง 1.5 วัตต์ ที่โหลด 8 โอห์ม แต่เมื่อทดสอบโดยการจำลองวงจรแล้ว พบว่ากำลังสูงสุดที่จ่ายได้คือ 0.25 วัตต์ ไม่ใช่ 0.5 วัตต์ ซึ่งถือว่าน้อย ปัญหาอาจเกิดจากการตั้งจุดไบแอสของทรานซิสเตอร์แต่ละตัว หรืออาจเกิดจากข้อจำกัดของตัวทรานซิสเตอร์ที่เลือกใช้ อาจปรับปรุงได้ในอนาคต
    • วงจรในตอนที่ 1 ไม่มีแหล่งจ่ายไฟ ก็เติมส่วนของแหล่งจ่ายไฟตรงแบบง่าย ๆ โดยใช้ไอซีเรกกูเลเตอร์เบอร์ยอดนิยม 7812 เนื่องจากกำลังสูงสุดที่จะขับได้ที่โหลด 8 โอหม์ คือ 0.25 วัตต์ หมายความว่ากระแสสูงสุดคือ 0.25 แอมแปร์ ไอซีขนาด 1 แอมแปร์ก็เกินพอ
    • วงจรในตอนที่ 1 มีช่องสัญญาณเดียว หากตั้งใจจะใช้กับเครื่องเล่น MP3 ก็ควรทำให้พร้อมสำหรับสเตอริโอ จึงได้เพิ่มวงจรลงไปอีกหนึ่งช่องสัญญาณซึ่งเหมือนกันทุกประการ
    • เมื่อไปซื้อวัสดุ พบว่าบางรายการไม่มีขาย จึงปรับแก้รายการวัสดุเล็กน้อย ทดสอบจำลองวงจรแล้วไม่มีปัญหา
    แก้ไขแล้วได้ลายวงจรดังรูป
    ก่อนจะสร้าง Netlist เพื่อนำไปทำแผ่นวงจรพิมพ์ จะต้องทำการ "เรียงเบอร์" (Annotate Schematic) เสียก่อน โปรแกรมจะทำการใส่เลขประจำตัวเช่น C1 C2 ให้กับอุปกรณ์แต่ละตัวโดยอัตโนมัติ เมื่อเรียงเบอร์เสร็จแล้ว ก็สามารถสร้าง Netlist ได้

    Netlist ที่สร้างขึ้นจะเป็นแฟ้มข้อความ ระบุการเชื่อมต่อระหว่างโนดต่าง ๆ ในวงจร ขั้นตอนต่อไปคือการระบุ Footprint ของวัสดุแต่ละตัว ตรงนี้ KiCad ระบุว่าเป็นจุดที่แตกต่างจากโปรแกรม EDA อื่น ๆ ตรงที่ วัสดุหนึ่งรายการในลายวงจร เช่น C1 เราสามารถเลือก Footprint ให้ C1 ได้อย่างอิสระ (ข้อดีคือเราไม่ต้องสร้าง Symbol ใหม่ เมื่อมี Footprint ใหม่ ข้อเสียคือเราอาจเลือกผิด) การผูกวัสดุเข้ากับ Footprint ให้ใช้โปรแกรม Cvpcb ซึ่งเรียกใช้ได้จากแถบเครื่องมือของ EESchema หรือจาก Project Manager ของ KiCad ก็ได้
    จากรูปหลักแรกคือลำดับที่ หลักที่ 2 คือชื่ออุปกรณ์ หลักที่ 3 คือค่าของอุปกรณ์ และหลักที่ 4 คือ Footprint ของอุปกรณ์ ซึ่งเราจะต้องเลือกเองให้ถูกต้องตรงกับวัสดุที่เรามี

    เมื่อผูกวัสดุเข้ากับ Footprint ได้แล้ว จึงเรียก pcbnew ขึ้นมา โดยจะเรียกจากแถบเครื่องมือของ EESchema หรือจาก Project Manager ของ KiCad ก็ได้เช่นเดียวกัน น่าเสียดายว่าตอนที่ดำเนินการออกแบบแผ่นวงจรพิมพ์นั้นไม่ได้เก็บรูปต่าง ๆ ไว้ จึงจะไม่เขียนละเอียด

    ข้อสังเกตสำคัญที่พบตอนที่ออกแบบก็คือ ค่าพารามิเตอร์ของลายเส้นของลายวงจรหรือแทร็ค (Track) จะไม่อยู่ในส่วนของ Preferences แต่จะอยู่ในส่วนของ Design Rule กว่าจะหาเจอก็งงไปนานเหมือนกัน การตั้งค่าความกว้างของแทร็ค และ Design Rule อื่น ๆ สามารถตั้งได้เองทั้งหมด ซึ่งน่าจะเป็นปัญหาสำหรับมือใหม่ หรือมือสมัครเล่น (เช่นผมเอง) เนื่องจากไม่ทราบเกณฑ์ต่าง ๆ ในการสร้างแผ่นวงจรพิมพ์ แต่ถ้าเราจะจ้างบริษัทให้กัดแผ่นวงจรพิมพ์ให้เรา ผมว่าบริษัทอาจมีเกณฑ์ Design Rule ที่เราขอทราบข้อมูลได้

    วงจรเล็กนิดเดียว พอรู้วิธีทำก็สามารถทำเสร็จได้ภายในเวลา 2 คืน หน้าตาเป็นดังรูป
    น่าเสียดายว่าไม่สามารถแสดงรูป 3 มิติของแผ่นวงจรพิมพ์นี้ได้ เข้าใจว่าเป็น Bug ของ KiCad เอง แต่ว่าไม่รู้ว่าจะรายงาน Bug อย่างไร เนื่องจากหน้าจอมันจะมืดไปเฉย ๆ ไม่มีข้อมูล เลยไม่แน่ใจว่าเป็น Bug ของ KiCad หรือของ Mesa หรือว่าของ X ไม่งั้นคงมีภาพ 3 มิติสวย ๆ มาอวดกัน


    หลังจากอัพเกรดและอัพเดต sid ล่าสุดพบว่ามีการอัพเกรด X หลายโมดูล เลยทดลองสร้างภาพสามมิติของ KiCad ดูอีกครั้งปรากฏว่าไม่มืดแล้วครับ แล้วก็ได้ภาพมาด้วย เลยขอเอามาอวดกันสักหน่อย
    ตอนนี้กัดปริ้นได้แล้วครับ แต่ยังเจาะไม่ครบเลยยังไม่ได้ลองประกอบดู หากประกอบเสร็จก็จะเอามาลง Blog เหมือนเคย อันที่จริง วงจรแค่นี้มันก็ถือว่าจิ๊บจ๊อยมากเมื่อเทียบกับงานของอีกหลาย ๆ ท่าน แต่ก็อยากเอามาลงไว้ในฐานะที่เป็นวงจรที่ (ตั้งใจจะ) ใช้ KiCad ในการสร้างจนใช้งานได้จริงเป็นชิ้นแรก หากผลงานออกมาดีจะเอาไว้ใช้ช่วยสอนในวิชาอิเล็กทรอนิกส์ด้วยเสียเลย

    วันอาทิตย์ที่ 25 เมษายน พ.ศ. 2553

    การออกแบบวงจรโดยใช้โปรแกรม Opensource ตอนที่ 1/3

    หลังจากที่ได้ทดลอง KiCad ทำงานง่าย ๆ แล้ว ก็ถึงเวลาทดลองใช้ KiCad แบบจริงจัง คือมีชิ้นงานเป็นผลลัพธ์สุดท้ายได้ ความตั้งใจก็คือใช้ Opensouce โปรแกรม ในการออกแบบตั้งแต่ ลายวงจร (Schematic) จำลองวงจร (Simulation) ออกแบบแผ่นวงจรพิมพ์ และประกอบวงจรจริง ๆ โดยตั้งใจว่าจะแบ่งทำเป็น 3 ตอนคือ

    วาดลายวงจร โดยใช้ KiCad และจำลองวงจรโดยใช้ gnucap ร่วมกับ gspiceui
    วงจรที่เลือกคือวงจรขยายเสียงคลาสเอบีขนาด 0.5 วัตต์ ไม่ใช้ออปแอมป์หรือไอซีขยายเสียงสำเร็จรูป ออกแบบตามตำราเป๊ะ ๆ ไม่พลิกแพลงใด ๆ วงจรแบ่งออกเป็น 3 ส่วนย่อยซึ่งคนที่ผ่านวิชาอิเล็กทรอนิกส์น่าจะสังเกตได้ คือ
    1. วงจรขยายแรงดันแบบอิมิตเตอร์ร่วม
    2. วงจรกันชน (Buffer)
    3. วงจรขยายกำลังคลาสเอบี
    ใช้ KiCad วาดลายวงจร โดยความตั้งใจแรกตอนที่วาดลายวงจรคือเพื่อสร้างแผ่นวงจร ลายวงจรจึงประกอบด้วยขั้วต่อสาย 3 จุด คือ ขั้วสัญญาณขาเข้า ขั้วสัญญาณขาออก และขั้วไฟเลี้ยง ดังรูป
    เมื่อได้ลายวงจรแล้ว เราจะให้ KiCad สร้าง Netlist สำหรับ gnucap ให้เราได้ ผลที่ได้จะเป็นแฟ้มข้อความนามสกุล CIR ซึ่งมีเนื้อหาดังนี้
    * EESchema Netlist Version 1.1 (Spice format) creation date: อา. 25 เม.ย. 2553, 18:45:25


    C1  14 3 1u
    P4  0 CONN_1
    P3  5 CONN_1
    P1  14 0 CONN_2
    C2  13 0 470u
    R2  3 0 42k
    R1  5 3 79k
    R5  13 0 39
    R3  5 12 430
    Q1  4 3 12 2N3904
    RV1  10 10 9 100
    R4  4 13 82
    Q2  11 12 5 2N3904
    R6  8 0 220
    D2  9 8 1N4148
    D1  11 10 1N4148
    C3  6 7 470u
    P2  7 0 CONN_2
    R8  6 15 1
    R7  2 6 1
    Q4  15 8 0 2N2907
    Q3  2 11 5 2N2222

    .end
    จากแฟ้มนี้ เราพบว่าต้องแก้ไขเพื่อให้จำลองวงจรใน gnucap ได้ 3 - 4 จุดด้วยกันคือ
    1. ขั้วต่อสัญญาณ Px ต่าง ๆ ไม่ต้องใช้ ก็ลบออก
    2. การเรียงลำดับของขาทรานซิสเตอร์ใน KiCad กับ gnucap ไม่ตรงกัน กล่าวคือ ใน KiCad จะเรียงลำดับเป็น E-B-C ในขณะที่ gnucap ต้องการให้เรียงลำดับเป็น C-B-E ก็แก้ไขลำดับของขาให้ถูกต้อง
    3. มีอุปกรณ์ตัวหนึ่งคือตัวต้านทานปรับค่าได้ ที่ gnucap ยังจำลองไม่ได้ ก็แก้ไขให้เป็นตัวต้านทานแทน ไม่ต้องปรับค่า
    4. อุปกรณ์เซมิคอนดักเตอร์ยังไม่มีโมเดล (.model) ในโปรแกรม gnucap นี้เราสามารถใช้โมเดลของ Spice ซึ่งหาได้จากบริษัทผู้ผลิตทั่วไปได้ทันที แต่โมเดลเหล่านี้ไม่ใช่ Opensource ผมจึงนำมาพิมพ์ไว้ตรงนี้ไม่ได้ หากใครสนใจให้ลองเข้าไปหาจากดาตาชีทของบริษัท หรือจากเว็บก็ได้ เมื่อโหลดมาแล้วก็เติมเข้าไปท้ายแฟ้ม ก่อน .end
    5. ไม่ได้กำหนดตำแหน่งไฟเลี้ยง และสัญญาณขาเข้า ก็ให้เพิ่ม VSupply กับ Vin เข้าไป ตามไวยกรณ์ของ gnucap
    จะได้
    * EESchema Netlist Version 1.1 (Spice format) creation date: อา. 25 เม.ย. 2553, 18:45:25


    C1  14 3 1u
    P4  0 CONN_1
    P3  5 CONN_1
    P1  14 0 CONN_2

    C2  13 0 470u
    R2  3 0 42k
    R1  5 3 79k
    R5  13 0 39
    R3  5 12 430
    Q1  12 3 4 2N3904
    RV1  10 10 9 100
    RV1 10 9 50
    R4  4 13 82
    Q2  5 12 11 2N3904
    R6  8 0 220
    D2  9 8 1N4148
    D1  11 10 1N4148
    C3  6 7 470u
    P2  7 0 CONN_2
    R8  6 15 1
    R7  2 6 1
    Q4  0 8 15 2N2907
    Q3  5 11 2 2N2222

    VSupply 5 0 12
    Vin 14 0 GENERATOR

    .model 1N4148 D (Is=5.84n...)*
    .model 2N3904 NPN (Is=6.734f...)*
    .model 2N2222 NPN (is=19f...)*
    .model 2N2907 PNP (is=1.1P...)*

    .end
    โมเดลที่ดอกจัน (*) ไว้ หมายความว่าจะต้องไปโหลดมาจากเว็บของผู้ผลิตเอง ซึ่งจะมีพารามิเตอร์ให้ครบสำหรับ Spice ในกรณีของเราซึ่งใช้ gnucap นี้ เมื่อรันโปรแกรมซิมูเลชั่นแล้วจะเกิด Error ขึ้นเนื่องจาก gnucap ไม่รู้จักพารามิเตอร์บางตัว ให้ลบพารามิเตอร์ตัวนั้นทิ้งได้ (อย่างไรก็ตาม ไม่สามารถรับรองผลการทดลองได้)
    เมื่อเตรียมแฟ้มเรียบร้อยแล้ว เราสามารถเลือกใช้ gnucap แบบบรรทัดคำสั่งก็ได้ หรือจะใช้ gspiceui เพื่อใช้ gnucap แบบ GUI ก็ได้ ในกรณีนี้เราเลือกใช้ gspiceui ซึ่งเรียกจากบรรทัดคำสั่งโดย
    > gspiceui &
    จะได้

    หลักการของ gspiceui ก็คือเราจะต้อง "สร้าง" (Create) การซิมูเลชั่นขึ้นมาเสียก่อน แล้วจึงจะ "รัน" (Run) ซิมูเลชั่นนั้น ๆ ได้ การ "สร้าง" ซิมูลเลชั่นก็คือการตั้งค่าต่าง ๆ ของการซิมูเลชั่น นั่นเอง เช่นการกำหนดประเภทของการซิมูเลชั่น (.op .dc .ac) การกำหนดโหนด (Node) ที่ต้องการสังเกต การกำหนดประเภทของตัวแปรที่ต้องการสังเกต (แรงดัน กระแส กำลัง ค่าความต้านทาน) ส่วนการ "รัน" ซิมูเลชั่นก็คือการสั่งให้ gnucap ทำตามที่สั่ง

    เมื่อทดลองใช้ดูพบว่าข้อความในแท็บ Netlist ไม่สามารถแก้ไขได้ ส่วนข้อความในแท็บ Simulation สามารถแก้ไขได้ นั่นหมายความว่าเราสามารถตกแต่งแก้ไขคำสั่งการซิมูเลชั่นที่ gspiceui ตั้งให้เราได้ ซึ่งมีจุดหนึ่งที่ต้องแก้ไขด้วยตนเองแน่ ๆ ก็คือ หากต้องการซิมูเลตแบบอื่น ๆ ที่ไม่ใช่ .op จะต้องสั่ง .op ก่อนเสมอ ไม่เช่นนั้นจะได้ผลเสมือนว่าวงจรไม่ได้รับไฟเลี้ยง

    เมื่อทดลองซิมูเลตแบบ Transient (.tr) gspiceui จะอำนวยความสะดวกในการตั้งค่าต่าง ๆ ให้เรา ที่ได้ทดลองคือ
    • ตั้งค่า Vin เป็น 0.5 V ความถี่ 1 kHz (ลอง 1.0 V แล้ว สัญญาณเพี้ยน)
    • Start Time = 0 ms
    • Stop Time = 10 ms
    • Step Time = 10us 
    ผลการทดลองเป็นดังนี้

    หลังจากลองผิดลองถูกมานาน ผัดวันประกันพรุ่งมาหลายหน ก็ทำได้เสียที ขั้นตอนต่อไปก็จะลองใช้ KiCad ออกแบบแผ่นวงจรพิมพ์สำหรับวงจรนี้

    วันพุธที่ 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 ซึ่งก็เป็นโปรแกรมง่าย ๆ

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

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