21 December 2011

\newcommand กับ Optional Argument

\newcommand ใน LaTeX เป็นคำสั่งสำหรับนิยามคำสั่งใหม่ โดยกำหนดให้เป็น macro ของคำสั่งเก่าผสมกัน อย่างเช่น เวลาผมจะเขียนตัวอย่างในเอกสารการสอน ผมจะใช้ \paragraph{Example} เสมอ แทนที่ผมจะพิมพ์แบบนี้ทุกครั้ง ผมก็นิยามคำสั่งขึ้นมาได้ โดยใช้
\newcommand{\example}{\paragraph{Example}}
ทำให้ได้คำสั่ง \example เอาไว้ใช้ได้ทุกครั้ง พิมพ์สั้นกว่าเดิม แล้วจะเปลี่ยนลักษณะรูปแบบก็ทำได้ง่าย ทีนี้คำสั่ง \newcommand ยอมให้เรากำหนด argument ได้ด้วย อย่างเช่น
\newcommand{\mypages}[1]{There are #1 pages in this note.}
เวลาใช้คำสั่ง \mypages{10} ก็จะได้ข้อความ "There are 10 pages in this note." ออกมา LaTeX ยอมให้เรากำหนด argument ได้ถึง 9 อัน แล้วเราก็สามารถระบุให้ argument อันแรกสุดเป็น optional argument ได้ด้วย โดยเราสามารถกำหนดค่า default ของ argument แรกได้เอง เช่น
\newcommand{\mypages}[2][note]{There are #2 pages in this #1.}
ถ้าเรียกใช้ด้วย \mypages{10} ก็จะได้ผลเหมือนเดิม แต่เราสามารถเรียกใช้โดยกำหนดค่าของ optional argument ได้ด้วย เช่น \mypages[examination]{10} ก็จะได้ผลเป็น "There are 10 pages in this examination."

17 October 2011

Dennis Ritchie

ช่วงสองสัปดาห์ที่ผ่านมา มีข่าวการเสียชีวิตของบุคคลที่มีความสำคัญในวงการคอมพิวเตอร์ 2 คน คนแรกคือ Steve Jobs ซึ่งข่าวการเสียชีวิตของเขาดังไปทั่วโลก อีกคนหนึ่ง เรื่องไม่ค่อยเป็นข่าวเท่าไหร่ คือ Dennis Ritchie ผู้ร่วมสร้างภาษา C และระบบ Unix
แม้ว่าจะไม่ค่อยมีคนรู้จัก ผมคิดว่า Dennis Ritchie เป็นบุคคลที่ทำให้เรามีเทคโนโลยีคอมพิวเตอร์ต่างๆ ใช้งานกันได้อย่างเพียบพร้อมและต่อยอดไปได้ไม่รู้จบ ภาษา C ที่เขาสร้างขึ้น เป็นภาษาพื้นฐานสำหรับพัฒนาซอฟท์แวร์แทบทุกประเภท ตั้งแต่ ระบบโทรศัพท์มือถือ ไปจนถึงเครื่องซุเปอร์คอมพิวเตอร์ ระบบ Unix เป็นระบบปฏิบัติการที่ดีที่สุด เป็นแนวคิดพื้นฐานของระบบปฏิบัติการแทบจะทุกระบบที่เราใช้อยู่ ไม่ว่าจะเป็น Windows, Mac OS X หรือว่า Linux รวมไปถึง Android และ iOS
ผมเชื่อว่า แนวคิดหลักที่ทำให้ภาษา C และระบบ Unix ทำงานได้อย่างดี ก็คือ "ความเรียบง่าย" และ "การลงมือทำด้วยตัวเอง" แนวคิดเหล่านี้ดูได้ ภาษา C เป็นภาษาที่โครงสร้างภาษาไม่มีอะไรซับซ้อน ถ้าเข้าใจโครงสร้างนั้น ก็จะสามารถเขียนโปรแกรมภาษา C ได้อย่างไม่มีปัญหา อีกอย่างหนึ่งคือภาษา C เป็นภาษาไม่มีข้อยกเว้น ไม่มีกรณีพิเศษ อย่างเช่น เราเห็นว่าฟังก์ชัน printf สามารถรับพารามิเตอร์ได้จำนวนไม่จำกัด เราก็สามารถเขียนฟังก์ชันแบบนั้นขึ้นมาใช้งานได้เช่นกัน ฟังก์ชัน printf ไม่ได้เป็นข้อยกเว้น หรือกรณีพิเศษของภาษา หลายคนอาจจะเห็นต่างจากผมว่าภาษา C นั่นยุ่งยากและซับซ้อน ผมเชื่อว่านั่นเป็นเพราะเราจำเป็นจะต้องเข้าใจหลักการทำงานของระบบปฏิบัติการ และระบบคอมพิวเตอร์บางส่วนก่อน จึงจะสามารถเขียนโปรแกรมภาษา C ได้อย่างเต็มที่
ส่วน Unix เป็นระบบปฏิบัติการที่ออกแบบมาให้ทำงานแบบเรียบง่ายเช่นกัน จะเห็นว่า Unix นั้นประกอบด้วยโปรแกรมเล็กๆ หลายโปรแกรม ซึ่งสามารถนำมาประกอบกัน เพื่อทำงานที่ต้องการได้ง่าย ด้วยเครื่องหมาย redirection และ pipe แถมยังเอาคำสั่งต่างๆ มาประกอบกันกลายเป็น script สำหรับทำงานที่ซับซ้อนได้ด้วย ดังนั้นเวลาเราจะสร้างโปรแกรมเพื่อทำงานอะไรสักชิ้น ก็เพียงแต่คิดว่าเราจะประกอบโปรแกรมที่มีอยู่อย่างไรให้ทำงานที่เราต้องการได้ ถ้าไม่มีส่วนประกอบบางส่วนก็เขียนส่วนนั้นเอง ไม่จำเป็นต้องคิดถึงโปรแกรมซับซ้อนที่เราต้องทำส่วนประกอบต่างๆ ทุกส่วน

19 April 2007

ย้ายบ้าน

แค่จะมาบอกว่าตอนนี้ย้ายไปเขียนที่บ้านใหม่ http://cholwich.org/ แล้ว

14 March 2007

Graphviz

Graphviz (http://www.graphviz.org) เป็นโปรแกรมสำหรับ visualize ข้อมูลกราฟที่พัฒนาโดย AT&T Bell Lab. ได้ยินชื่อมานานแล้ว แต่ไม่เคยได้ใช้สักที ช่วงนี้ต้องทำไดอะแกรมหลายๆ อัน เลยลองเล่นดู เพราะปกติจะวาดไดอะแกรมต่างๆ (ส่วนใหญ่เป็นทรี) โดยใช้ Omnigraffle ก็สะดวกพอสมควร แต่ก็จะเสียเวลาในการจัดวางตำแหน่ง เลยอยากได้เครื่องมือที่จัดตำแหน่งให้อัตโนมัติแบบง่ายๆ โดยไม่ต้องใช้เมาส์ ซึ่ง Graphviz ก็ทำงานได้ตามต้องการ โดยกำหนดเขียนไดอะแกรมเป็น DOT Language ก่อน ภาษานี้ี่เข้าใจได้ไม่ยาก เสร็จแล้วก็สั่งให้ Graphviz วาดไดอะแกรม และเก็บเป็นไฟล์แบบต่างๆ ได้ ยิ่งบน OS X ก็จะยิ่งสะดวก เพราะมีคนทำ frontend ให้เรียบร้อย ใช้งานได้ดีมาก โปรแกรมนี้ได้รางวัล Apple Design Award ด้วย

(พยายามจะใส่รูป แต่ไม่รู้ blogger มีปัญหาอะไร เอาไว้ก่อนล่ะกัน)

06 March 2007

คุมสอบ (บ่น)

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

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

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

21 November 2006

อุปนัย

ในฐานะที่ทำวิจัยเกี่ยวกับ supervised learning หรือการเรียนรู้แบบมีตัวอย่าง ที่เป็นเทคนิคที่อาศัยการอุปนัย ซึ่งก็คือ การสรุปหรือสร้างกฎเกณฑ์หรือโมเดลจากตัวอย่างที่พบซ้ำๆ ด้วยเหตุนี้จึงมักจะสงสัยอยู่บ่อยๆ ว่า มนุษย์เราต้องการตัวอย่างจำนวนเท่าไหร่เป็นอย่างน้อย จึงสามารถหาข้อสรุปเป็นกฎเกณฑ์สำหรับพฤติกรรมได้ เคยลองอะไรเล่นๆ กับนักศึกษาอยู่เหมือนกัน คือ ลองประกาศไว้ก่อนว่าจะมีการสอบย่อยเสมอๆ โดยไม่ระบุวันที่จะมีสอบย่อยจะสุ่มเอา แต่พอลองมีสอบย่อยสัปดาห์เว้นสัปดาห์อยู่หลายๆ ครั้ง ก็พบว่าคนส่วนใหญ่จะสร้างกฎขึ้นมาว่ามีสอบย่อยสัปดาห์เว้นสัปดาห์ ถ้าสอบติดกันเมื่อไหร่ก็จะมีคนบ่นว่าทำไมสอบติดกัน

หรือที่เพิ่งเจอ ก็คือ ส่งเมลไปบอกก่อนสอบย่อยครั้งแรก ว่าจะมีสอบย่อย แต่พอครั้งที่สอง ไม่ได้ส่งเมลไป ปรากฏว่ามีนักศึกษาบ่นเหมือนกันว่าทำไมไม่เห็นส่งเมลมาบอกเลย มีตัวอย่างแค่หนึ่งตัวอย่างเท่านั้น ก็สรุปได้แล้วหรือว่าจะส่งเมลไปบอกทุกครั้ง แต่คิดว่าเรื่องนี้คงเกี่ยวกับเนื้อหาของสิ่งนั้นๆ ด้วย เช่น ความสำคัญของการสอบย่อย หรือความพอใจหรือไม่พอใจ เอาไว้ค่อยหาทางลองใหม่ :)

08 November 2006

บัตรเอทีเอ็ม

ทำบัตรเอทีเอ็มหายมาได้เกือบสองเดือนแล้ว (ดีนะที่เงินไม่หายไปด้วย ^^!) ยังไม่มีเวลาไปทำบัตรใหม่เลย โทรไปถามก็บอกว่าทำใหม่ที่สาขาไหนก็ได้ แต่พอแวะไปที่สาขาแถวฟิวเจอร์ปาร์คจริงๆ เจ้าหน้าที่ที่นั่นบอกว่าบัตรเดิมที่หายไป เป็นบัตร visa electron ไม่สามารถทำใหม่ต่างสาขาได้ ต้องกลับไปทำที่สาขาเดิม โอเค งั้นไม่เอาแล้ว ขอทำบัตรธรรมดาล่ะกัน บัตรเดิมทำไปก็ไม่ได้ใช้ ปรากฏว่าไม่ได้อีกจะทำให้ได้ใหม่เฉพาะที่เคยทำบัตรแบบนั้นที่สาขาเดิมเท่านั้น สรุปว่าทำไม่ได้อีก เฮ้อ...อะไรจะยุ่งยากขนาดนี้ สรุปว่าจนบัดนี้ก็ยังไม่ได้ทำบัตรใหม่เลย

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

สุดท้ายนี้ขอบ่นหน่อยเถอะ ว่าเว็บธนาคารกรุงเทพ ส่วนที่ใช้ค้นหาสาขาของธนาคาร นี่ทำได้แย่มาก เผอิญช่วงนี้ใช้บ่อย เพราะเว็บผูกติดกับ Javascript ของ IE ต้องเปิด Windows เปิด IE เท่านั้นถึงจะใช้ได้ แถมยังจะต้องเปลี่ยนพวก locale ของ Windows ให้เป็นภาษาไทยอีก มิฉะนั้นก็จะอ่านไม่ออก เฮ้อ....เปลี่ยนให้หน่อยเถอะครับ ใช้อะไรที่มันเป็นมาตรฐานหน่อยนะ