Wednesday, March 11, 2009

ปีสองทำอะไรไปบ้าง?

ทำไมเวลา 1 ปีมันผ่านไปเร็วจัง?

ลองมานั่งนึกดูว่า 1 ปีที่ผ่านไป เราได้ลองทำอะไรบ้าง?

นอกจากเรียนหนังสือไป 1 ปี ก็นึกออกว่าได้ลองทำอะไรหลายอย่างเหมือนกัน:

- ลองเขียน Nontri Internet autologin

เป็น Firefox Extension (ตัวแรกในชีวิต)ที่ช่วย login เข้าเน็ตอัตโนมัติ
เขียนเสร็จ ปล่อยลงเน็ตปั๊บ สบค. (คนรับผิดชอบระบบ login สำหรับคนใช้เน็ตมหาลัยเกษตร) เขาก็แก้ระบบ login ให้ extension เราใช้ไม่ได้(ไม่กี่นาทีหลังจากปล่อย extension)

- ไปแข่ง TESA Topgun Rally 2008

(ผลการแข่ง)
เป็นครั้งแรกที่ได้ลองเขียนโปรแกรมบน Microcontroller (ในงานใช้ dsPIC33) โจทย์ของการแข่งคือ สร้าง ECU สำหรับรถยนต์ โดยใช้ Real-time OS ได้เรียนเกี่ยวกับ Real Time OS นิดนึงด้วย
แต่ไปงานนี้คิดว่าเราได้เฉพาะบรรยากาศเขียนโปรแกรมบน embedded system เพราะคนอื่นๆ ในทีมเคยเขียนมากันหมดแล้ว (เรา noob สุดๆ) ไปเกาะเขานั่นเอง อิๆ... ได้ไปช่วยๆ นึก state machine/อัลกอริทึมที่ใช้ detect pulse, กับ คำนวณเวลายิง pulse
ในงานแข่งครั้งนี้ได้ใช้ SVN ด้วย (รู้สึกได้ประโยชน์จาก SVN สุดๆ ก็งานนี้แหละ)

- ลองเขียนโปรแกรมตัดคำที่ "ขึ้นกับบริบท"

(แข่ง BEST 2009)
จำได้ว่าตอนอยู่มัธยม พยายามทำ Chatbot เลยค้นรายงานเกี่ยวกับระบบตัดคำภาษาไทยมาอ่าน แล้วก็ได้แต่อ่าน... ไม่สามารถเขียนออกมาเป็นชิ้นเป็นอันได้ เพราะ ใช้ Regular Expression ไม่เป็น (และในรายงานนั้นก็เป็นการตัดคำโดยใช้กฎที่เป็น Regular Expression)
มาตอนปีสองนี่... ลองเขียนหลายอย่างมาก ทั้งแบบ Longest matching (ลองอันแรกเลย ง่ายสุด ฮะๆ), Maximal Matching (ตัดแบบให้จำนวนคำน้อยสุด),.... จนมาถึงตัวตัดคำที่ขึ้นกับบริบท(ที่ใช้แข่ง)
"ฉัน|นั่ง|ตาก|ลม|อยู่|ริม|หน้าต่าง|"
กับ
"เด็ก|ผู้|หญิง|มี|ดวง|ตา|กลม|โต|แวววาว|"


- เขียน Twitnest



เป็นโปรเจคที่คิดว่าจะทำส่งเป็นการบ้านวิชา Practicum ตอนเรียน อ. @jittat สั่งให้ทำ Web App ด้วย Google App Engine ตอนนั้นเราก็ยังไม่มีไอเดียทำโปรเจคอะไรเลย แต่ได้รับแรงบันดาลใจจากท่านภาคย์ ว่าจะทำโปรแกรมประมาณ "เชื่อม social network" ทั้งหลายเข้าด้วยกัน

ทีนี้ท่านภาคย์ อยากให้แสดงผลคล้ายๆ family tree พอคุยไปคุยมา... ก็อยากได้เป็นกราฟ แล้วตอนนั้นก็เพิ่งเริ่มเล่น twitter ใหม่ๆ (เหมือนจะโดนชักชวนโดยเพื่อนๆ CPE21 ที่โดน @jittat ชักชวนอีกที)

เลยหันมาสนใจ Flash เพราะดูโปรแกรมทำกราฟอื่นๆ ที่เขียนด้วย javascript แล้วไม่ประทับใจเท่าไหร่ นั่งบ้าอ่าน Essential Actionscript 3.0 (เป็น text ที่ผมชอบนะ อ่านง่ายดี) อยู่นานมาก... แล้วก็ใช้ FlashDevelop เขียน

ก่อนหน้านี้ไม่เคยสนใจ Flash เลย เพราะรู้สึกงง กับ Timeline, Frame, Keyframe, ฯลฯ รู้สึกว่ามันเป็นโปรแกรมที่เหมาะกับ Designer มากกว่า แต่พอใช้ FlashDevelop แล้วสร้าง Flash ด้วยโค้ดล้วนๆ แล้วรู้สึกสบายใจกว่า :D

โปรแกรม Twitnest นี่เสียเวลากับส่วน Auto-group (จัดกลุ่มคนในกราฟอัตโนมัติ) มากที่สุด แต่เป็นคิดว่าเป็นความสำเร็จแรกในการ อ่าน paper ด้วยตัวเอง แล้วพยายามเขียนโปรแกรมออกมาจนเสร็จ (และคิดว่าได้ผลลัพธ์ถูกต้อง)

- Wordle Clone


ไปเจอ Wordle แล้วก็พบว่ามันสร้าง Wordle สำหรับตัวอักษรภาษาไทยไม่ได้ (เลยอยากสร้างเองให้แสดงภาษาไทยได้)

ลองเขียนเองดูบ้างด้วย Python + Python Image Library (PIL) ได้ผลลัพธ์ดังนี้

เป็นรายชื่อเพื่อนๆ ใน เว็บบอร์ดรุ่น โดย ขนาดของชื่อจะใหญ่ตามจำนวนโพสต์ในบอร์ด (ยิ่งใหญ่ยิ่งปั๊มนั่นเอง)

ตอนนั้นรู้สึกอยากเอา Wordle Clone นี้ขึ้นให้บริการบนเน็ตด้วย ดังนั้นโปรแกรมต้องทำงานเร็ว แต่โปรแกรมที่เขียนตอนแรกมันทำงานช้าไป ความยากอยู่ตรงที่ต้องเขียนวิธีเช็คว่า ข้อความที่เรากำลังจะปะลงไป มันจะซ้อนทับของเดิมรึเปล่า (2D Collision Detection)

ก็เลยบ้าไปนั่งอ่าน text เกี่ยวกับ Computational Geometry เรื่อง Hierarchical Bounding Volume เพื่อที่จะเอามาใช้เช็ค "Collsion ของ ข้อความ" อย่างรวดเร็ว (นั่งงงอยู่นาน) สุดท้าย implement ออกมาได้ (ดีใจสุดๆ)

แต่ก็เจอกับปัญหาว่าการจัด layout ที่ได้มันยังไม่สวยพอ (ไม่สวยเท่าของ wordle) มันยังหลวมๆ ไป... เราก็เลยพับโปรเจคนี้ไว้ และเก็บไว้ใน D:\projects\ ต่อไป เพราะต้องไปทำอย่างอื่นต่อ

- Webpage Language Identification


ทำระบบ ช่วยระบุภาษาหน้าเว็บเพจอัตโนมัติ ทำการระบุในระดับ byte-stream (ดังนั้น encoding จะมั่วก็ไม่เป็นไร)
โปรเจคนี้ทำกับ Mike lab@CPE.KU ใช้ visible Markov-model มาเรียนรู้ลำดับ byte ในเอกสารภาษาต่างๆ... แล้วก็เอาโมเดลที่เรียนรู้แล้วของแต่ละภาษามาระบุภาษาของ unknown อัตโนมัติ (ตอนทำมีภาษา ไทย ญี่ปุ่น ลาว อังกฤษ)

- IR Repeater



วงจรซ้ำสัญญาณรีโมท UBC (ขอเรียกว่า UBC แทน True Vision ละกันสั้นดี)
คือที่บ้านมีเครื่องรับ UBC อยู่ชั้นบน แต่ต่อออกทีวีทั้ง ชั้นบนและชั้นล่าง... ไปๆ มาๆ อยากดู UBC ชั้นล่างบ่อยขึ้น พออยากเปลี่ยนช่อง ก็ต้องวิ่งขึ้นไปชั้นบน จิ้มรีโมทเปลี่ยนช่อง (เหนื่อย)

เลยอยากได้ IR Repeater เอาไว้ใช้รับสัญญาณรีโมทจากชั้นล่าง แล้วยิงซ้ำเข้าเครื่องรับ UBC ชั้นบน

พอได้แรงบันดาลใจจากวิชา Practicum (อีกแล้ว) ที่ได้นั่งประกอบชุด kit เลยทำให้เราอยากประกอบวงจรอีก ค้นๆ ในเน็ตเจอ IR Repeater เขาแจกวงจร (schematic) ด้วย... :D ตอนนี้ก็มีใช้แล้ว ตามภาพครับ

สรุป



ใช้เวลาปีสองได้คุ้มค่ารึเปล่าเนี่ย?.... รู้สึกว่าทำหลายอย่าง แต่ไม่ได้เกาะติดกับเรื่องไหนนานๆ ลึกๆ... เลยรู้สึกเหมือนเป็นเป็ดเลย (บินได้ ว่ายน้ำได้ เดินบนบกได้... แต่ทำได้อย่างละนิดอย่างละหน่อย)

รู้สึกว่า พออยู่ปีสองได้เรียน "พื้นฐานที่จำเป็น" หลายๆ อย่าง ทำให้เราทำ "สิ่งเคยอยากทำแต่ทำไม่ได้ตอนเด็ก" ได้ :) (แต่ก็มีอีกหลายอย่างที่ยังทำไม่ได้นะ)

เฮือก...เขียน blog ได้ยาวมาก (หมักไว้ไม่ได้มาเขียนนาน)

ปิดเทอมใหญ่นี้ ไม่ลงเรียน summer แน่นอน... ยังค้นหาเรื่องที่อยากทำต่อไป (จริงๆ ก็มีค้างอยู่หลายเรื่อง) แต่อยาก up skill อื่นๆ นอกจากคอมฯ บ้าง :)

ปล. ถ้าผมเขียน blog ได้น่างงงวย ช่วยบ่นด้วยการ comment ด้วยครับ :D จะได้เอาไปปรับปรุงสำหรับ blog ถัดๆ ไป

2 comments:

  1. ไม่รู้จะเป็นเหมือนกันรึเปล่า แต่พอโตขึ้น มันจะมีเวลาทำอะไร เล่นๆ น้อยลง งานเยอะขึ้นอะ

    เพราะฉะนั้น อยากทำอะไรก็ทำเลยนะคร้าบบ อย่ารอว่าจะมีเวลาว่าง

    ReplyDelete
  2. ได้ทำอะไรเยอะมากเลยนะ อ้ออย่าลืมหาเวลาสนุกกับเื่พื่อนๆ พี่ๆ น้องๆ ด้วยหล่ะ

    ReplyDelete