Computer and IT


วันนี้คุณเพื่อนมาขอความช่วยเหลือ บอกว่าเปิดไฟล์อะไรใน External HDD ไม่ได้เลย

พอเช็คอาการดู ก็พบว่า ไฟล์ทุกอย่างใน HDD ได้กลายร่างเป็น shortcut ไปหมดแล้ว!!! เจอเข้าไปแบบนี้ผมก็ฟันธงได้ทันทีว่า HDD คุณเพื่อนโดนไวรัสเข้าให้แล้ว หุหุ… (เพิ่มเติม…)

วันนี้ได้ไปงาน THINK Camp ครั้งที่สามมาครับ แนวคิดของงานในครั้งนี้คือ “เว็บสยามบุกโลก” ซึ่งหมายถึงว่า ทำอย่างไรเว็บไซต์สัญชาติไทยจึงจะสามารถตีตลาดโลกได้ แทนที่จะปล่อยให้เว็บต่างชาติตีตลาดไทยอย่างเดียว เช่น Facebook, Google

ก่อนหน้านี้ผมก็ไม่เคยไปหรอก แต่เห็นว่าคราวนี้แปลกกว่าทุกครั้ง เพราะนอกจากการบรรยายแล้ว ยังมีช่วงสุมหัว (Brain Storming) ด้วย (เหมือนเวลาเข้าค่ายตอน ม.ปลาย เลย) (เพิ่มเติม…)

ไม่กี่วันก่อนนึกขึ้นมาได้ว่าเรามี Voucher สอบ JAVA certificate ฟรี ที่ได้มาจาก Sun ตอนไปแข่ง Open Jive นี่หว่า ว่าแล้วก็ลาก @iMuping กับ @toffeetoffee มาคุยกันว่าจะเอายังไง เพราะ voucher มันจะหมดอายุสิ้นปีนี้แล้ว ก็ตกลงกันว่าไปสอบวันที่ 24 (วันนี้) เพราะเป็นวันที่ทุกคนว่างตรงกัน (วันอื่นๆ แต่ละคนก็ติดสอบกลางภาคกันหมด)

หลังตกลงกันได้ก็เข้าไปสมัครในเว็บ http://www.prometric.com/ ก็กรอกข้อมูลต่างๆ ไป พอถึงตอนกดยืนยันถึงได้รู้ว่า voucher ที่ถืออยู่ในมือนี่มูลค่า 9569 บาทเลยทีเดียว! (แพงจังวุ้ย)

เอาล่ะ สมัครเสร็จก็ต้องเตรียมตัวสอบสินะ แต่ว่าปัญหาคือ ผมกำลังอยู่ช่วงสอบกลางภาคนี่สิ 😕
แล้วจะหาเวลาไหนอ่านล่ะเนี่ย สรุปแล้วก็เหลือแค่เวลาเดียว คือคืนก่อนไปสอบ! คุณพระ! ปกติเค้าเตรียมตัวกันไม่รู้กี่เดือน กว่าจะไปสอบ ไอ้นี่อาจหาญมาจากไหน เตรียมตัวคืนเดียว เช้าไปสอบ

คืนก่อนสอบ (23 ธ.ค.) ผมกับ @imuping และ @toffeetoffee ก็นั่งสุมหัวกันตั้งแต่หนึ่งทุ่ม จ้องหน้าจอโน้ตบุ๊คที่กำลังเปิด e-book เตรียมสอบ JAVA cert. ความยาว 700-800 หน้าเห็นจะได้ นั่งอ่านกันไปแบบผ่านๆ แว้บไปกินข้าวแป๊บนึงก็มาอ่านต่อ กว่าจะจบก็ปาเข้าไปห้าทุ่ม หลังจากนั้นก็เปิดหาตัวอย่างคำถามตามอินเตอร์เน็ต ก็ตอบได้บ้างไม่ได้บ้าง ใจหนึ่งก็เผื่อไว้แล้วล่ะว่า พรุ่งนี้เจ๊งแน่ๆ (เพิ่มเติม…)

เมื่อวันศุกร์ที่ผ่านมา ผมได้มีโอกาสได้ไปร่วมงาน Sun Developer Days 2009 ที่โรงแรม Intercontinental ในฐานะทีมรองชนะเลิศอันดับหนึ่งจากการแข่งขัน Open Jive 2009 ซึ่งสิ่งที่ทีมผมต้องไปทำในงานก็คือไปตั้งโต๊ะนำเสนอผลงานที่ใช้ส่งเข้าแข่งขัน

คนมาร่วมงานเยอะมาก… ดูจากรูปได้ครับ
(เพิ่มเติม…)

หลังจากคราวก่อนพูดเรื่อง Mediator ไปแล้ว คราวนี้ก็จะพูดเรื่อง Observer บ้าง 😀

Observer คือ pattern หนึ่งของการเขียนโปรแกรมเชิงวัตถุ โดยให้วัตถุหนึ่งมีความสามารถในการรับรู้การเปลี่ยนแปลงข้อมูลในตัวแปรของวัตถุอีกตัวหนึ่งได้ แล้วจึงปรับเปลี่ยนการทำงานตามการเปลี่ยนค่านั้น

observer
จากตัวอย่างนี้ มีคลาส UserInterface ซึ่งทำหน้าที่รับ input จาก user ส่งไปให้คลาส XValue เพื่อคำนวณ(อะไรสักอย่าง) แล้วคลาส UserInterface ก็จะวาดกราฟจากผลลัพธ์ที่คำนวณได้

จาก diagram จะเห็นว่าคลาส XValue มีการ extends คลาส Observable มา ซึ่งเป็นคลาสที่มีมาให้ในจาวาแล้ว ส่วนคลาส UserInterface ก็ implements คลาส Observer ที่มีมาให้ในจาวาเช่นกัน

เมื่อ UserInterface ทำการส่งค่า input ไปให้ XValue ค่านั้นก็จะถูกนำไปคำนวณให้ได้คำตอบออกมา แล้วทำการเปลี่ยนค่า attribute ในคลาสตัวเองให้เป็นคำตอบใหม่ที่คำนวณได้ ตอนนี้เองที่ observer จะเข้ามามีบทบาท คือหลังจากที่ XValue ทำการเปลี่ยนค่า attribute แล้วก็จะต้องเรียกใช้ method ชื่อ notifyObservers() ที่ได้จากการ extends เพื่อเตือน Observer ทุกตัวว่ามีการเปลี่ยนแปลงค่าเกิดขึ้นแล้ว (รีบเข้ามาดูเร็วๆ) นั่นหมายความว่า Observer มีได้มากกว่าหนึ่งตัว (แต่ในตัวอย่างมีแค่ตัวเดียว)

หลังจากพวก Observer รับรู้แล้วว่ามีการเปลี่ยนแปลงค่า มันก็จะเรียกใช้ method ชื่อ update(Observable o, Object arg) โดยอัตโนมัติ ทีนี้ก็อยู่ที่เราแล้วว่าจะให้มันทำอะไรในนี้

ตัวอย่างอาจจะไม่ดีเท่าไหร่ เพราะมี observer แค่ตัวเดียว ซึ่งถ้าเป็นแบบนี้ก็ใช้วิธีเรียก method get/set เอาก็ได้ แต่ถามว่าถ้ามี object ที่การทำงานขึ้นกับค่า x ใน XValue สักยี่สิบตัวล่ะ จะเรียก get/set ยี่สิบรอบมั้ย… ก็คงจะไม่ นี่แหละที่ Observer pattern จะเข้ามามีบทบาท 8)

ข้อมูลเพิ่มเติม: http://en.wikipedia.org/wiki/Observer_pattern

หลังจากเรียนวิชา Object-oriented and design pattern มาได้ครึ่งเทอม ก็ถึงเวลานำสิ่งที่ได้เรียนมามาใช้สักที ถึงจะเป็นแค่การเอามาใช้ทำการบ้านก็เถอะ เพราะการบ้านที่อาจารย์ให้ทำมันไม่ได้ง่ายอย่างที่คิดเลย ไหนๆ ก็นั่งทำความเข้าใจเรื่องที่เรียนซะตั้งนาน (ไม่งั้นทำการบ้านไม่ได้) ก็ขอเอามาเขียนลงบล็อกซะหน่อยนะครับ (ฮา)

ตอนแรกกะว่าจะเขียนทีเดียวทั้ง Mediator และ Observer ซึ่งเป็น pattern สองตัวหลักๆ ที่ต้องใช้ในการทำการบ้านนี้ แต่ว่าดูท่าจะยาวเกินไป ก็เลยขอตัดเรื่อง Observer ไปเขียนเป็นเรื่องใหม่ดีกว่า 🙂

หลักการของ Mediator pattern พอสรุปได้ว่ามันคือรูปแบบการสร้างคลาสและออบเจ็กต์ โดยให้มีคลาสหนึ่งเป็นตัวกลาง (Mediator) ในการติดต่อคลาสอื่นๆ ในโปรแกรม

mediator1
จากตัวอย่าง สมมติว่าเป็นโปรแกรมระบบข้อมูลสักอย่าง ซึ่งข้อมูลถูกเก็บอยู่ใน DataEntity (ไม่ใช่ database นะ) แล้ว user จะทำการแก้ไขข้อมูลที่เก็บไว้ใน DataEntity ผ่านทาง GUI ที่สร้างขึ้นใน UserInterface

จากแผนภาพจะเห็นได้ว่าตัวที่ทำการ implement พวก Listener มาใช้ หรือก็คือตัวที่ตอบสนองต่อเหตุการณ์ต่างๆ ที่เกิดจากผู้ใช้ก็คือคลาส Mediator ไม่ใช่ UserInterface

คลาส UserInterface เป็นเพียงตัวสร้าง component ต่างๆ เช่น drop-down list หรือปุ่มกดต่างๆ

เมื่อ Mediator รับรู้ถึงเหตุการณ์ที่เกิดจาก user (ซึ่งก็คือผู้ใช้กรอกข้อมูลเพื่อแก้ไขข้อมูลเดิมใน DataEntity) Mediator ก็จะไปทำการแก้ไขข้อมูลใน DataEntity

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

สามารถศึกษาข้อมูลเพิ่มเติมได้จาก http://en.wikipedia.org/wiki/Mediator_pattern (มีตัวอย่างโค้ดด้วย :D)

ยังจำกันได้ไหมครับ เมื่อประมาณสองปีก่อน ช่วงรัฐบาลที่นำโดยพลเอก สุรยุทธ์ จุลานนท์ ช่วงนั้นเป็นช่วงที่รัฐบาลเอาจริงเอาจังกับการกวาดล้างเว็บไซต์ที่มีเนื้อหาไม่เหมาะสม กระทบความมั่นคงของชาติ หมิ่นเบื้องสูง ฯลฯ

ซึ่งผลของนโยบายดังกล่าวคือ กระทรวงเทคโนโลยีสารสนเทศ หรือ ICT ได้ทำการบล็อคเว็บไซต์ทั้งในและต่างประเทศไปมากมายหลายเว็บไซต์ ซึ่งรวมถึงเว็บไซต์ชื่อดังอย่าง youtube และ wikipedia ที่มีเนื้อหาบางส่วนเข้าข่ายการดูหมิ่นเบื้องสูง

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

เมื่อเวลาผ่านไป ทุกอย่างก็กลับคืนสู่ภาวะปกติ เว็บไซต์ต่างๆ กลับมาใช้งานได้อีกครั้ง (ไม่นับบางเว็บไซต์ที่ถูกสั่งปิดไป) ทุกคนก็กลับมาอยู่บนโลกออนไลน์อย่างเป็นสุข จนอาจจะลืมไปว่า เราเคยเจอกันอะไรมา

แต่ผลของการกระทำครั้งนั้นมันยังเหลือตกค้างเป็นเศษซากอารยธรรมของกระทรวง ICT มาจนทุกวันนี้ สิ่งนั้นก็คือ veoh.com

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

หากคุณเข้าไปที่หน้าเว็บไซต์ veoh คุณก็จะพบข้อความว่า

“Veoh is no longer available in THAILAND. If you are not in THAILAND or think you have received this message in error, please go to veoh.com and report the issue.”

บางคนอาจจะไม่รู้สึกอะไร อยากบล็อคก็บล็อคไป แต่สำหรับผม ผมรู้สึกเหมือนว่ามันเป็นคำพูดประชดคนไทย ในเมื่อคุณบล็อคเราได้ เราก็บล็อคคุณได้เหมือนกัน แม้ว่าจะผ่านมาประมาณสองปีแล้ว แต่ veoh ก็ยังคงบล็อค IP address จากประเทศไทยต่อไป…

ปล. ผมยังจำช่วงเวลานี้ได้ดี เพราะตอนนั้นเป็นช่วงที่อนิเมะเรื่อง You’re Under Arrest ภาคใหม่ (Full Throttle) เริ่มออกอากาศที่ญี่ปุ่น ซึ่งผมก็อาศัย veoh เป็นช่องทางในการดูอนิเมะเรื่องนี้ จนกระทั่งเว็บไซต์ถูกบล็อค ผมก็ต้องเลิกดูไปโดยปริยาย (ว่ากันว่าเว็บไซต์ถูกบล็อคเพราะมีการ์ตูนโป๊ ซึ่งผมก็ไม่เคยเห็น เลยไม่อาจทราบได้ว่ามีจริงหรือเปล่า) แต่ยังไงซะมันก็ยังมีช่องทางอื่นให้ดูอยู่ดีล่ะนะ

หน้าต่อไป