วันอาทิตย์ที่ 12 ธันวาคม พ.ศ. 2553

3BB กับ Debain

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

สมัครเมื่อวาน ติดตั้งเสร็จวันนี้ เร็วทันใจดีจริง

แต่เอ...คู่มือที่ให้มามีแต่สำหรับ Window นะนี่ อ่ะ ไม่เป็นไรระบบพอจะคุ้น ๆ อยู่

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

ดังนั้นใช้ ifconfig ปลุก eth0 ให้ตื่นซะก่อน แปลงร่างเป็นผู้มีอภิสิทธิ์ในระบบซะแล้วก็

> ifconfig eth0 up

หลังจากนั้น ก็ให้ DHCP ของ 3BB (หรือว่าของเราเตอร์ก็ไม่รู้ล่ะ) กำหนด IP ให้เรา

> dhclient eth0

ตอนนี้ควรจะใช้การได้แล้ว จะลอง ping ลอง host ดูว่าเชื่อมต่อกับเน็ตเวิร์กแล้วหรือยังก็ได้เช่น

> host google.com

ถ้าแสดง IP ของ google.com มาได้ก็แสดงว่าใช้ได้แล้ว เคยถามที่จุดให้บริการเรื่อง proxy เขาว่าไม่ต้องใช้ ก็ให้เอา proxy ของ browser ออกซะ แล้วก็ลองใช้อินเตอร์เนตดู   

ทีนี้ล่ะ Debian ของผมมีปัญหา เข้าบางเว็บไม่ได้ แต่เครื่องของแฟนเข้าได้!!?? คิดไปคิดมา เฮ้ย เราเคยเจอปัญหาอย่างนี้มาหนหนึ่งแล้วนี่นา กับ True ของน้องชายไง สาเหตุอันเนื่องมาจาก DNS ที่เราใช้มันใช้ไม่ได้ หรือมันใช้ไม่ดี ยังไงก็ไม่ทราบ เอ้า! ลองเปลี่ยน DNS ดู

> vi /etc/resolve.conf

แล้วแก้ไข nameserver ให้เป็นค่าอื่นที่เราคิดว่าใช้ได้ เช่น DNS ของ กูเกิลเป็นต้น

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

ป.ล. ผมเองก็จะถามไปที่ 3BB เหมือนกัน แต่ว่าไม่ค่อยแน่ใจว่าเขาจะเข้าใจคำถามของผมหรือเปล่าน่ะสิ เขาอาจจะถามกลับมาเรียบ ๆ ก็ได้ว่า ก็แล้วทำไมพี่ไม่ใช้ Window ล่ะ (ไม่ฮา) 

วันจันทร์ที่ 8 พฤศจิกายน พ.ศ. 2553

กลับมาแล้ว แต่กว่าจะกลับมาได้ เฮ้อ...

คอมพิวเตอร์คู่ใจพังไปได้ 2 เดือนแล้ว...ก็เป็นคอมพ์เครื่องนี้แหละครับ ที่ลง Debian ไว้ ใช้เขียนเอกสารประกอบการสอนในวิชาคณิตศาสตร์วิศวกรรม 4 (สมการอนุพันธ์) และวิชากรรมวิธีเชิงตัวเลข โดยใช้ Beamer และใช้ทำงานอดิเรกบน Linux ต่าง ๆ ที่เอามาเขียนลงบล๊อก

ดังนั้นเมื่อคอมพ์เครื่องนี้หมดเวลาของมันลงไป ผมก็ห่างหายไปจากงานอดิเรกต่าง ๆ บน Linux

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

กล่าวคือ ติดตั้งจาก CD No. 1 ของ Debian โดยที่เครื่องไม่ได้ต่ออินเตอร์เนตไว้ครับ อันที่จริงในเว๊บเขาก็ว่ามันทำได้ไม่น่าจะยากนะ แต่พอผมติดตั้งเสร็จ ตัวเลือกตอนติดตั้งนั้นมีเพียงตัวเลือกเดียวที่บังคับให้เลือกเลยคือ Base System ซึ่งไม่มี X ไม่มี Gnome

พอติดตั้งเสร็จก็...เอาล่ะซิ เราไม่ได้คุ้นเคยกับ Command Line เสียด้วย ทำไงดี!

ปรากฏว่าพอพยายามลองรัน apt-get ดู เหมือน ๆ มันจะเรียกอ่าน CD แฮะ เลยเอา CD ใส่เข้าไปแล้วลองติดตั้ง gnome ดู ปรากฏว่ายังใช้ไม่ได้ คิดว่าสาเหตุเป็นเพราะผมเรียกชื่อแพคเกจไม่ถูก จำชื่อ แพคเกจที่จำเป็นไม่ได้

งั้นเอาใหม่ ใช้ apt-get ไม่ได้ ใช้ aptitude ก็ได้ (ฟะ) ตัว aptitude ก็ช่วยได้คือมันจะแสดงรายการ แพคเกจต่าง ๆ ให้ เราก็เลือกหลัก ๆ ก็มี gnome นี่แหละ แล้วก็เช็คให้มั่นใจว่าได้เลือกให้ติดตั้ง gdm3 เรียบร้อยแล้วหรือยัง ถ้ายังต้องเลือกด้วย เพราะตัวนี้จะพาเราเข้ามาใน gnome ได้

เมื่อติดตั้ง gnome จาก CD ได้ ต่อไปก็ลองพยายามติดตั้ง wvdial ดู ปรากฏว่าใน CD#1 ไม่มี wvdial ต้องใช้เครื่องแฟน โหลด .deb ใส่ usb-drive มา พร้อมกับแพคเกจอื่น ๆ ที่เว็บ Debian ระบุว่าจำเป็น แล้วเราเช็คจาก aptitude ของเราแล้วไม่มีอยู่เดิม ใช้ dpkg ติดตั้ง wvdial ให้ได้

พอติดตั้ง wvdial ได้แล้วค่อยใช้ wvdial ติดต่อกับอินเตอร์เนต แล้วใช้ apt-get (หรือ aptitude) ก็แล้วแต่ ติดตั้งแพคเกจอื่น ๆ ที่เห็นว่าจำเป็น ในกรณีของผมซึ่งต่ออินเตอร์เนตด้วย GPRS ของ Nokia 31 Classic ได้ความเร็วดาวน์โหลดไม่เกิน 24 kbps นี้ใช้เวลาดาวน์โหลดแพคเกจที่ผมคิดว่าจำเป็นรวมทั้งสิ้นประมาณ 14 ชั่วโมง!

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

วันอังคารที่ 31 สิงหาคม พ.ศ. 2553

การเขียนบันทึกข้อความ (หนังสือราชการภายใน) โดยใช้ Latex (เพิ่มเติม)

คราวที่แล้วเขียนคลาสขึ้นมา (อันที่จริงก็เรียกแพคเกจหลายแพคเกจมาช่วย) สำหรับบันทึกข้อความ พบข้อบกพร่องดังนี้
  1. ผมใช้คำสั่ง \tabular สำหรับส่วนหัวของบันทึกข้อความ ทำให้หาก "เรื่อง" หรือ "เรียน" ซึ่งอยู่คอลัมน์ที่หนึ่งมีความยาวมาก เบอร์โทรศัพท์ของหน่วยงาน และวันที่ จะตกขอบขวา เพราะมันอยู่คอลัมน์ที่สองทั้งคู่
  2. คราวที่แล้ว ผมลืมสร้างคำสั่งสำหรับเขียนคำลงท้ายลงตำแหน่งที่เหมาะสม เช่น ด้วยความนับถือ เป็นต้น
  3. การทำบันทึกข้อความข้ามหน่วยงานภายในที่ถูกต้อง จะต้องให้หัวหน้าหน่วยงานรับทราบด้วยทุกครั้ง โดยการ เรียน [ใครก็แล้วแต่ที่อยู่นอกหน่วยงาน] ผ่าน [หัวหน้าหน่วยงานของท่าน] ซึ่งหัวหน้าหน่วยงานจะต้องลงนามรับทราบด้วย ในคลาสเดิมมันไม่มีคำสั่งสำหรับการนี้
ปัญหาที่ส่วนหัวของจดหมาย
ปัญหาแรก แก้ได้โดยใช้แพคแกจ multirow ซึ่งเรียกใช้โดยเพิ่ม
 \RequirePackage{multirow}
เข้าไปในคลาส แล้วแก้ไขคำสั่ง \opening เป็น
\newcommand{\openning}{%
\noindent \parbox{0.2\textwidth}{\raggedright{\includegraphics[width=20mm]{Tra-Khrut.eps}}} \hfill {\Large\bf บันทึกข้อความ} \hfill \parbox{0.2\textwidth}{\qquad}
\begin{tabular}{@{}ll}
{\bfส่วนราชการ} \@officeunit & {\bf โทร.} \@telephonenum \\
{\bfที่} \@unitid / \@memoreg & \@date \\
\multicolumn{2}{@{}l}{{\bfเรื่อง} \@title} \\
\multicolumn{2}{@{}l}{{\bfเรียน} \@letterto}
\end{tabular} % เว้นหนึ่งบรรทัดข้างล่างนี้ห้ามลบ

}
โปรดสังเกตคำสั่ง \multicolumn{2}{@{}l}{ข้อความที่จะใส่ในตาราง} ที่บรรทัดที่ 4 และ 5 จากบรรทัดสุดท้าย เลข 2 หมายถึงข้อความนี้อยู่ใน 2 คอลัมน์ พารามิเตอร์ {@{}l} หมายถึงชิดซ้ายโดยไม่เว้นขอบตาราง

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

ปัญหาเรื่องคำลงท้าย
ก็เพิ่มคำสั่งเข้ามาเลย เหมือนคำสั่งอื่น ๆ คือสร้างคำสั่งเพื่อรับคำลงท้ายจากเอกสาร tex เข้ามา
\newcommand*{\closingphrase}[1]{\def\@closingphrase{#1}}
แล้วก็กำหนดตำแหน่งให้เขียนในตำแหน่งที่ตรงกับการลงนามท้ายหนังสือ
\newcommand{\closing}{%
\vskip 0.5em
\parbox{0.3\textwidth}{\qquad}\parbox{0.7\textwidth}{\centering \@closingphrase}
}
ในอนาคต อาจเก็บตัวเลข 0.3 0.7 ที่เห็นข้างบนนี้ เป็นตัวแปร แล้วกำหนดค่าตัวแปรทีเดียวที่ต้นคลาสเลยก็น่าจะทำได้



ปัญหาที่การลงนามของหัวหน้าหน่วยงาน
เพิ่มคำสั่งเพื่อรับชื่อและตำแหน่งของหัวหน้าหน่วยงานโดย
\newcommand*{\approvalperson}[1]{\def\@approvalperson{#1}}
แล้วนำไปเขียนใต้ชื่อผู้ลงนามเอกสาร ให้ตำแหน่งตรงกันกับผู้ลงนาม เหมือนกับคำลงท้าย
\newcommand{\approvalsigned}{%
\vskip 3em
\parbox{0.3\textwidth}{\qquad}\parbox{0.7\textwidth}{\centering \@approvalperson}
}
ในส่วนของหัวหน้าหน่วยงานนี้เป็นตัวเลือก ถ้าไม่เรียกคำสั่ง \approvalsigned ก็ไม่มีอะไรเกิดขึ้น

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

วันเสาร์ที่ 14 สิงหาคม พ.ศ. 2553

การเขียนบันทึกข้อความ (หนังสือราชการภายใน) โดยใช้ Latex

จากเดิมที่เคยทดลองใช้ fig2sty ไปเมื่อคราวก่อน พบว่าอาจเป็นปัญหาสำหรับคนที่ไม่ได้ใช้ xfig เป็นปรกติ (และอันที่จริง ก็ยังทำในส่วนของการลงนามไม่เสร็จด้วย) นอกจากนี้ ด้วยความที่ยังไม่เข้าใจระบบ margin ของเอกสารก็ทำให้ต้องทำ hardcode ในส่วนของการจัดตำแหน่งด้วย ซึ่งไม่น่าจะเป็นวิธีที่ดีเท่าไร

หลังจากได้อ่านเอกสารเกี่ยวกับการเขียน Latex Class ไปเมื่อคราวที่แล้ว เมื่อย้อนกลับมาดูปัญหาเดิม คือการเขียนบันทึกข้อความ (หนังสือภายใน) ก็พบว่าสามารถใช้ความรู้นั้นมาดัดแปลงได้ และแนวทางการแก้ปัญหาก็จะเป็นกรณีทั่วไปมากกว่า โดยเฉพาะไม่ต้องมีการลง hardcode ในเรื่องของตำแหน่งข้อความ (มากนัก)

สิ่งที่ต้องใช้ก็มี
  • การกำหนดตำแหน่งของส่วนหัวของบันทึกข้อความ ทำได้โดยคำสั่ง \parbox
  • การรับค่าต่าง ๆ เช่น เรื่อง เรียน ฯลฯ จากบันทึกข้อความมาสร้างส่วนหัว ทำได้โดยการสร้างคำสั่งใหม่
  • การใส่ภาพครุฑลงในเอกสาร ทำได้โดยใช้แพคเกจ graphicx
  • หากไม่ได้กำหนดไว้เป็นอย่างอื่น ให้ใช้ค่าปริยายของคลาส article ทั้งหมด
ทำให้ได้แฟ้มคลาสดังต่อไปนี้
%----------------------------------------
% officialmemoth.cls
% Official Internal Memo
% 2010-Aug-14 Kittiphong Meesawat ktphong (at) elec.kku.ac.th

% --- Class structure: identification part
% ---
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{officialmemoth}[2010/08/14 version 0.1 Official Internal Memo]

% Package ที่เรียกใช้งาน
\LoadClass[12pt,a4paper]{article}
\RequirePackage[left=25mm,right=25mm,top=25mm,bottom=25mm]{geometry}
\RequirePackage{graphicx}

% ตั้งค่า ย่อหน้า (Indent) ค่าขึ้นย่อหน้าใหม่ (Indentskip) และไม่ให้มีเลขหน้า (pagestyle)
\setlength{\parindent}{3em}
\setlength{\parskip}{1.5em}
\pagestyle{empty}

% คำสั่งเพื่อรับค่าต่าง ๆ ของบันทึกข้อความ
\newcommand*{\officeunit}[1]{\def\@officeunit{#1}}
\newcommand*{\unitid}[1]{\def\@unitid{#1}}
\newcommand*{\telephonenum}[1]{\def\@telephonenum{#1}}
\newcommand*{\memoreg}[1]{\def\@memoreg{#1}}
\newcommand*{\letterto}[1]{\def\@letterto{#1}}

% คำสั่ง \openning เพื่อสร้างส่วนหัวของบันทึกข้อความ
% ตำแหน่งต่าง ๆ เปลี่ยนแปลงได้ ถ้าทราบว่ามีข้อกำหนดตายตัวไว้อย่างไร
\newcommand{\openning}{%
\noindent \parbox{0.2\textwidth}{\raggedright{\includegraphics[width=20mm]{Tra-Khrut.eps}}} \hfill {\Large\bf บันทึกข้อความ} \hfill \parbox{0.2\textwidth}{\qquad}
\begin{tabular}{@{}ll}
{\bfส่วนราชการ} \@officeunit & {\bf โทร.} \@telephonenum \\
{\bfที่} \@unitid / \@memoreg & \@date \\
{\bfเรื่อง} \@title & \\
{\bfเรียน} \@letterto &
\end{tabular} % เว้นหนึ่งบรรทัดข้างล่างนี้ห้ามลบ

}

% คำสั่ง \undersigned เพื่อสร้างที่สำหรับเซ็นชื่อของผู้เขียนบันทึกข้อความ
% ตำแหน่งต่าง ๆ เปลี่ยนแปลงได้ ถ้าทราบว่ามีข้อกำหนดตายตัวไว้อย่างไร
\newcommand{\undersigned}{%
\vskip 3em
\parbox{0.3\textwidth}{\qquad}\parbox{0.7\textwidth}{\centering \@author}
}
%----------------------------------------  

เวลาใช้งานในแฟ้มเอกสาร Latex ก็เรียกใช้ class officialmemoth ดังนี้
%----------------------------------------  
\documentclass[12pt,a4paper]{officialmemoth}
\usepackage[thai]{babel}
\usepackage{thswitch}
% ใช้แบบอักษรกินรี ซึ่งเชื่อว่าคล้าย อังศณา มากที่สุด (ทำไมต้องเป็นอังศณาด้วยนะ?)
\usefont{LTH}{kinnari}{m}{n}

% ชื่อเรื่องหนังสือ
% ชื่อหน่วยงาน
% รหัสหน่วยงาน
% หมายเลขโทรศัพท์หน่วยงาน
\title{ทดสอบบันทึกข้อความ}
\officeunit{คณะวิศวกรรมศาสตร์ ภาควิชาวิศวกรรมไฟฟ้า}
\unitid{{\bf ศธ} 0514.4.1.4}
\telephonenum{12142 -- 44 ต่อ 712}

% เลขส่งหนังสือ (ปรกติมักเว้นว่างไว้ นอกเสียจากเราจะทราบเลขแน่นอน)
% วันที่ออกหนังสือ
\memoreg{}
\date{วันที่ 14 สิงหาคม 2553}

% ผู้รับหนังสือ และ
% ผู้เขียนหนังสือ (พร้อมตำแหน่ง โดยขึ้นบรรทัดใหม่ ถ้ามี)
\letterto{หัวหน้าภาควิชาวิศวกรรมไฟฟ้า}
\author{นายกิตติพงษ์ มีสวาสดิ์ \\ อาจารย์ประจำภาควิชาวิศวกรรมไฟฟ้า}

\begin{document}
% คำสั่ง \openning จะทำการสร้างส่วนหัวของบันทึกข้อความขึ้นมา
\openning
ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า

ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า

% คำสั่ง \undersigned จะทำการเขียนชื่อผู้เขียนบันทึก และตำแหน่ง (ถ้ามี)
\undersigned
\end{document}
%----------------------------------------  

และผลที่ได้จะมีหน้าตาแบบนี้ 

สิ่งที่ยังเป็นปัญหาอยู่ มีอยู่ 2 - 3 ประการด้วยกันคือ
  1. ผมไม่ทราบว่าตำแหน่งต่าง ๆ ในส่วนหัวของบันทึกข้อความ มีระบุไว้แน่นอนชัดเจนหรือไม่ เท่าที่เห็นใช้ Word Processor เขียนกัน ก็ใช้ Tab กะ ๆ เอา ตอนนี้เลยใช้ tabular environment ซึ่งทำให้ "วันที่" กับ "โทร." นั้นตรงกัน ถ้าไม่มีข้อเสนอแนะเป็นอย่างอื่น ก็จะคงไว้อย่างนี้
  2. ผมไม่ทราบว่าตำแหน่งของการลงชื่อท้ายบันทึกข้อความ มีระบุไว้แน่นอนชัดเจนหรือไม่ เท่าที่เห็นใช้ Word Processor เขียนกัน ก็ใช้ Tab กะ ๆ เอา ตอนนี้เลยใช้ parbox ช่วยกันพื้นที่ไว้ ถ้าไม่มีข้อเสนอแนะเป็นอย่างอื่น ก็จะคงไว้อย่างนี้
  3. รูปครุฑที่ใช้ เป็นรูปจาก wikipedia ซึ่งมีข้อความอธิบายว่า กฏหมายกำหนดไว้ว่า ตราครุฑ เป็นผลงานอันไม่มีลิขสิทธิ์ เนื่องจากเป็นส่วนประกอบของ ระเบียบ ข้อบังคับ คำสั่ง ฯลฯ ของราชการ แต่ถ้าผมทราบว่าใครเป็นผู้สร้างรูปนี้ขึ้นมาก็คงจะดีกว่านี้
  4. ในระบบของผม (ใช้ debain/lenny) อยู่ ไม่สามารถใช้ latex กับ UTF8 ได้ ดังนั้นแฟ้มทั้งหมดที่สร้างขึ้นนี้ จึงเป็น TIS-620 ทั้งหมด แต่สำหรับท่านที่ต้องการนำไปใช้ หากคัดลอกจากเว็บ ก็สามารถใช้ UTF8 ได้ทันทีโดยเติม \usepackage[utf8]{inputenc} ไว้ที่ส่วน preemble ของเอกสาร ก็น่าจะได้
  5. ในระบบของผม ไม่สามารถใช้คำสั่ง \includegraphics กับ GIF ต้นฉบับได้ (ยังหาสาเหตุไม่ได้) จึงต้องแปลง GIF เป็น EPS แทน ซึ่งการทำเช่นนี้มีจุดอ่อนคือ อาจใช้กับ pdflatex ซึ่งเป็นเครื่องมือหลักของ latex ในวินโดว์ ไม่ได้
  6. คนบางคนในหน่วยราชการบางหน่วย อาจไม่เข้าใจเรื่องแบบอักษร ทำให้ยึดติดอยู่กับแบบอักษรตระกูล Angsana หรือ Browallia หรืออื่น ๆ อันเป็นผลงานที่มีลิขสิทธิ์และมีราคา ไม่มีใช้ในระบบโอเพนซอร์ส และไม่ยอมรับแบบอักษรที่ทางรัฐบาลเป็นผู้สนับสนุนให้สร้างเอง เช่น กินรี นรสีห์ และอื่น ๆ ถ้าเป็นเช่นนี้ก็ช่วยไม่ได้จริง ๆ คงต้องทำใจอย่างเดียว
หลังจากนี้จะรอรับคำชี้แนะเพื่อแก้ไขและปรับปรุงสัก 1 - 2 สัปดาห์ เมื่อแก้ไขและปรับปรุงแล้วจะนำแฟ้มเอกสารต่าง ๆ มาเผยแพร่ต่อไปครับ

วันศุกร์ที่ 13 สิงหาคม พ.ศ. 2553

ประสบการณ์การสร้าง Template ของ Latex สำหรับการเขียนบทความวิจัย

จากที่เป็นเพียงผู้ใช้ Latex มานาน ในที่สุดผมก็มีความต้องการออกแบบเอกสารใหม่มากเพียงพอที่จะก้าวข้ามระดับ "ขั้นต้น" ไปสู่ "ขั้นกลาง" ซึ่งก็คือการทำ Customize Latex และการสร้าง Class ไฟล์ ที่ผมใฝ่ฝันที่จะทำให้ได้มานานแล้วนั่นเอง

สำหรับท่านที่ยังไม่ทราบขออธิบายตามความเข้าใจของผมเองสักนิดว่า Class File (xxx.cls) คืออะไร ในระดับที่ผมเข้าใจ Class File คือไฟล์ที่กำหนดพฤติกรรมของคำสั่งต่าง ๆ ของ Latex พฤติกรรมเหล่านี้อาจรวมถึง ขนาดกระดาษ กั้นหน้า กั้นหลัง แบบอักษร ฯลฯ หลายคนก็เรียก Class File ที่ทำหน้าที่เหล่านี้ว่า Template (แต่ผมคิดว่าไม่ใช่ชื่ออย่างเป็นทางการในวงการ Latex)

บางคนก็อาจสงสัยว่า ที่ผมว่าผมใฝ่ฝันที่จะทำเป็นมานานนั้น ทำไมมันนานนัก? มันยากนักรึ? คำตอบคือมันก็ไม่ยาก แต่มันก็ไม่ง่ายครับ แต่ที่ทำไม่ได้สักทีเพราะ
  • แต่เดิมนั้นผมยึดติดกับ Syntax ของ Latex มากเกินไป พอมี Syntax แปลก ๆ เราก็ปิดกั้นสมองเลย ไม่พยายามทำความเข้าใจ
  • อันที่จริงมันก็ไม่ยากมาก แต่ผมไม่อ่านรายละเอียดที่เขามีให้อ่าน เอาแต่อ่านผ่าน ๆ หวังจะเจอ Quick Solution ตอนนี้เริ่มเข้าใจแล้วว่าโลกนี้ไม่ใช่มาม่า ไวไว ไม่มีอะไรง่ายกว่าที่มันควรจะเป็น
ตอนนี้มีความต้องการสร้าง Class File มาก ก็เลยไม่เสียเวลาหา Quick Solution แล้วลุยตามคำแนะนำในอินเตอร์เนตเลย จากการค้นดูพบเอกสารที่สำคัญ 3 รายการด้วยกันคือ
บทความที่ควรอ่านก่อนสำหรับผมก็คือบทความแรก บทความนี้นำเสนอแนวคิดว่า Latex มีคนเขียน Package ต่าง ๆ เยอะแล้ว ถ้าต้องการปรับแต่งเอกสาร ทำผ่าน Package พวกนี้โดยไม่ต้องไปเขียน Code หน้าตาแปลก ๆ ก็ได้ เพราะงานส่วนใหญ่ที่เราอยากทำนั้น เราไม่ใช่คนแรกแน่ ๆ เช่นการตั้งกั้นหน้า กั้นหลัง มันต้องมีคนเขียนโปรแกรมเพื่อจัดการงานเหล่านี้ไว้แล้ว สิ่งที่เราต้องทำก็คือ รู้ให้ชัดว่าเราต้องการอะไร แล้วก็หาโปรแกรม (Package) ที่สอดคล้องกับความต้องการของเรามาใช้งาน

บทความที่สองจะช่วยเวลาเราไม่รู้ว่าคำสั่งนี้ทำงานอย่างไร บทความที่สองจะมี Code ที่สำคัญของ Class article ให้อ่านพร้อมอธิบายผลของมัน ทำให้เข้าใจกลไกการทำงานของ Class มากขึ้น

บทความที่สาม อืม...อันที่จริง ผมยังไม่ค่อยได้อ่านบทความที่สามนี้เท่าไรนะ

เอกสารอีกฉบับเป็นหนังสือเลยคือ The LaTeX Companion
หากไม่มีอธิบายในเอกสาร 3 ฉบับข้างต้น ผมจะมาไล่ดูใน Index ของหนังสือเล่มนี้ (แน่ะ! Quick Solution อีกแล้ว - แหมหนังสือมันหนาตั้ง 1090 หน้าเชียวนะครับ)

ตอนนี้ผมต้องการสร้าง Class File สำหรับการเขียนบทความวิจัยสำหรับการประชุมวิชาการทางวิศวกรรมไฟฟ้า (Electrical Engineering Conference - EECON) สิ่งที่ต้องทำจึงประกอบด้วย
  1. เรียกใช้ Class proc ซึ่งมีอยู่แล้ว จากนั้นจึงปรับแก้พารามิเตอร์ต่าง ๆ
  2. ตั้งค่าขอบกระดาษ ทำได้โดยใช้ Package geometry
  3. ตั้งค่าแบบอักษรเป็นแบบ Times Roman ทำได้โดยใช้ Package mathptmx
  4. ตั้งค่าระยะห่างระหว่างชื่อบทความกับชื่อผู้แต่ง ทำได้โดยใช้คำสั่ง renewcommand กับ maketitle
  5. ตั้งค่าระยะห่างระหว่างชื่อผู้แต่งกับเนื้อบทความ ทำได้โดยใช้คำสั่ง renewcommand กับ maketitle
  6. สร้างคำสั่งที่จะผูกชื่อผู้แต่งกับสถาบันไว้ด้วยกัน
  7. สร้างคำสั่งที่จะบังชื่อผู้แต่งกับสถาบัน สำหรับฉบับที่จะส่งให้ Reviewer อ่าน
  8. สร้างคำสั่ง Keyword
  9. ตั้งค่าระยะห่างระหว่าง หมายเลขหัวข้อกับชื่อหัวข้อ ทำได้โดยใช้ Package titlesec
  10. ทำให้ย่อหน้าแรกหลังจากหัวข้อ มีย่อหน้า (Indent) ทำได้โดยใช้ Package indentfirst
  11. จัดการกับระบบอ้างอิง
  12. สร้างคำสั่งเติมรูปและประวัติผู้เขียน
ตอนนี้ทำส่วนที่ง่ายเสร็จไปบางส่วนแล้ว หากทำได้ทั้งหมดก็จะนำมาแบ่งปันประสบการณ์กันต่อไปครับ

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

หากสามารถสร้าง Class File สำหรับ EECON ภาษาอังกฤษได้ ต่อไปจะพยายามทำ Class File สำหรับ EECON ภาษาไทยดู อันนี้ดูจะยากกว่าทั้งในเรื่องต้องมี Title 2 หัว คือทั้งภาษาไทยและภาษาอังกฤษ ต้องมีทั้งบทคัดย่อภาษาไทย และ Abstract ภาษาอังกฤษ ต้องจัดการระบบอ้างอิงเอกสารภาษาไทยปนกับภาษาอังกฤษด้วย ก็จะค่อย ๆ ลองทำไป ใครมีคำแนะนำอะไรก็ยินดีเรียนรู้และขอขอบคุณล่วงหน้าครับ

วันพฤหัสบดีที่ 3 มิถุนายน พ.ศ. 2553

ใช้ Latex เขียนหนังสือราชการ

ผมใช้ Latex มานาน แต่ก็มีความเชี่ยวชาญ Latex เพียงระดับธรรมดา คืออ่านคู่มือออก ใช้งานได้ แต่ไม่เก่งกาจถึงขนาดออกแบบเอกสารเองได้ ใช้เป็นเพียงคลาสหรือแพคเกจที่มีคนออกแบบไว้ให้แล้วเท่านั้น ดังนั้นปัจจุบันจึงใช้ Latex เขียนเพียงเอกสารประกอบการสอนโดยใช้แพคเกจ Beamer ช่วย (และใช้สไตล์และธีมสำเร็จรูปที่มากับแพคเกจ)

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

ก็นึกได้ว่าเคยเห็นแพคเกจหนึ่งในรายชื่อแพคเกจของ Synaptic คือ fig2sty ซึ่งมีคำอธิบายว่าเป็นโปรแกรมช่วยออกแบบเอกสารสำหรับ Latex ด้วย xfig จึงลองอ่าน man page ดู พบว่าใช้งานง่าย จึงทดลองใช้ fig2sty ช่วยออกแบบหนังสือราชการดู

การใช้งาน fig2sty มีหลักการง่าย ๆ ก็คือ
  1. สร้าง Layout ของเอกสารด้วย xfig โดยสร้างเป็นแฟ้มรูปภาพ fig โดยตำแหน่งต่าง ๆ ระบุด้วยกรอบสี่เหลี่ยม
  2. ในแทรกแท็กข้อความ (อ่านความหมายของพารามิเตอร์ข้อความจาก man page) เช่นชื่อ type ของข้อความในตำแหน่งนั้น ๆ
  3. เรียกใช้คำสั่ง > fig2sty yourlayout.fig ท่านจะได้แฟ้ม yourlayout.sty มา
  4. เขียนแฟ้ม tex โดยเรียกใช้แฟ้ม sty ในแฟ้มนี้
  5. เรียกใช้คำสั่งของ Latex ตามขั้นตอนปกติ
สร้าง Layout ด้วย xfig และแท็กต่าง ๆ


การเรียกใช้แฟ้ม sty จากแฟ้ม tex

\documentclass{article}
\usepackage[thai]{babel}
\usepackage{figtosty} <----- เรียกใช้แพคเกจนี้
\usepackage{yourlayout} <--- เรียกใช้ yourlayout แล้วแต่ว่าตั้งชื่อไว้ว่าอย่างไร

\begin{document}
\begin{officialmemo}
\begin{figframe}{header}  <--- ชื่อแท็กตาม Layout ที่ออกแบบ

\begin{center} 
{\Large {\bf บันทึกข้อความ}} <--- หัวกระดาษ
\end{center} 
\end{figframe} 

\begin{figframe}{headtag} <--- ชื่อแท็กตาม Layput ที่ออกแบบ
\noindent {\bf ส่วนราชการ} คณะ... ภาควิชา... \\ 
ที่ ศธ xxxx.x.x/xxxx \\            \
{\bf เรื่อง} ขอความอนุเคราะห์      |
\\ {\bf เรียน} หัวหน้าฝ่าย         |
\\ \indent {\bf โทร} xxxxx, xxxxx  >--- รูปแบบส่วนหัวของหนังสือราชการที่ผมใช้
\\ วันที่ 2 มิถุนายน 2553\\        |
\\                                 |
\\                                 /
\end{figframe} 

\begin{figframe}{body} 
\indent เนื่องด้วยอะไรสักอย่าง...  <--- เนื้อความ

\hspace*{8cm}ด้วยความนับถือ \\     <--- คำลงท้ายหนังสือ
\\ 
\\ 
\hspace*{9cm}อาจารย์นั่งฟัง ตั้งใจสอน 
\\ 
\hspace*{9cm}อาจารย์ประจำภาควิชาฯ 
\end{figframe} 
\end{officialmemo} 
\end{document}

ในโค้ด Latex ผมละส่วนที่เกี่ยวกับการจัดกั้นหน้า กั้นหลังไว้ เนื่องจากไม่แน่ใจว่าหากไปทดลองที่เครื่องอื่นแล้วจะได้ผลแน่นอนเหมือนกันหรือไม่

ผลลัพธ์ที่ทดลองได้
ปัญหาที่พบ
หากไม่ตั้งค่ากั้นหน้า กั้นหลัง และออฟเซ็ตต่าง ๆ เอกสารจะกินขวา ผมแก้โดย preemble นี้

\pagestyle{empty}
\setlength{\hoffset}{0pt}
\setlength{\marginparwidth}{0pt}
\setlength{\oddsidemargin}{0pt}
\setlength{\textwidth}{17cm}

\setlength{\voffset}{0pt}
\setlength{\topmargin}{0pt}
\setlength{\headheight}{0pt}
\setlength{\headsep}{0pt}


ปัญหาถัดมาคือตัวหนังสือที่คอลัมน์ซ้ายกับคอลัมน์ขวาของส่วนหัว (เรื่อง เรียน ฯลฯ) ไม่ตรงบรรทัดกัน ผมแก้แบบถึก ๆ โดยเติมแท็ก offset ลงในกรอบขวา ค่อย ๆ ปรับจนตรงกัน

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

เรื่องตลกที่สุดของงานนี้ก็คือ แฟนผมมาเห็นเข้าว่าผมกำลังทำอะไรอยู่ พออธิบายให้ฟัง เธอก็แซวว่า
"ถ้าเป็นเรานะ เราคงใช้ Latex ทำในสิ่งที่ Word ทำไม่ได้ ถ้าทำแค่นี้เราใช้ Word เร็วกว่า"
คิดไปคิดมา เออนะ มันก็จริงของเขา แต่เอาเถอะ ผมว่าผมทำ Layout ไว้อย่างนี้ สบายกว่าที่จะไปหงุดหงิดกับกั้นหน้ากั้นหลังอะไรนั่นของ Open Office อยู่บ้างหรอก

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

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

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