I'm a Ruby on Rails / jQuery web developer. Follow me at @sikachu

ความผิดพลาดกับระบบ ETC ของทางด่วนไทย (ตอนที่ 3)

March 6th, 2010 Posted in My Idea | Comments

บทความนี้คือตอนที่ 3 ของบทความ “ความผิดพลาดกับระบบ ETC ของทางด่วนไทย” ถ้าใครยังไม่ได้อ่านตอนที่ 1 และตอนที่ 2 สามารถไปอ่านได้ที่นี่ และที่นี่ครับ


ความผิดพลาดของ Easy Pass (ต่อ)

เมื่อตอนที่ 2 ผมได้กล่าวเอาไว้ว่าความผิดพลาดตรงนี้ มันมีทั้งในส่วนของตัวอุปกรณ์ Easy Pass, ระบบจัดการเงิน, การเข้าใช้บริการ และการส่งเสริมการใช้งานครับ วันนี้จะมาเขียนให้ครบครับว่ามีอะไรอีก

3. การเข้าใช้บริการ

post-15306-1265209491.jpgผมว่าคงมีหลายคนที่เคยใช้บริการทางด่วนตรงทางขึ้นดินแดงครับ ถ้าลองสังเกตดูจะเห็นได้ว่าช่องที่เป็น Easy Pass นั้นจะเป็นช่องตรงกลางของช่องทางทั้งหมด ก็เลยมีคำถามว่าแล้วถ้ารถมันติดยาวออกมาจากทั้งช่องทางด้านซ้าย และด้านขวา แล้วรถจะเข้าไปใช้บริการในช่องนั้นได้อย่างไรครับ?

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

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

ส่วนเรื่องสุดท้ายคือตำแหน่งของตัวอ่านเขียนข้อมูลครับ ถ้าได้ลองดู VDO ของระบบ ETC ในญี่ปุ่นเมื่อตอนที่แล้วนั้น จะเห็นได้ว่าตัวอ่านเขียนของเขานั้นจะถอยร่นลงมาจากตูผ่านทาง ทำให้ระยะทางระหว่างเครื่องอ่านเขียนกับที่กั้นนั้นมากขึ้น และทำให้ที่กั้นนั้นเปิดให้บริการทันกับความเร็วที่เหมาะสมในการใช้งาน (ประมาณ 30 กม./ชม.) เพราะที่เห็นอยู่ปัจจุบันนี้ผู้ใช้งานจะต้องขับรถเข้าไป “จอดรอ” ให้ที่กั้นเปิด … มันทำให้รถชะลอตัวมากขึ้นน่ะครับ

4. การส่งเสริมการใช้งาน

หลังจากที่เปิดให้บริการมา ทาง EXAT ได้มีโปรโมชั่นออกมาสองตัว นั่นคือการลดค่ามัดจำบัตรเหลือ 500 บาท และลดค่าผ่านทางให้ 5% สำหรับการเติมเงินก่อนวันที่ 28 กุมภาพันธ์

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

เพราะว่าปัจจุบันนี้ ระบบบัตรทางด่วนในรูปแบบของคูปองนั้น มีการส่งเสริมการขายโดยให้ส่วนลด 5% ในการซื้อคูปอง 1 เล่ม และเพิ่มมากขึ้นเมื่อซื้อในจำนวนมากๆ เนื่องจากการที่มีรถใช้คูปองมากๆ นั้น ทำให้พนักงานที่ตู้ไม่จำเป็นต้องเตรียมเงินเอาไว้สำหรับทอน สามารถระบายรถออกจากตู้เก็บค่าผ่านทางได้เร็วขึ้น แต่ในทางกลับกันนั้นระบบ Easy Pass ที่สามารถระบายรถออกได้เร็วกว่าการใช้คูปอง กลับไม่มีการส่งเสริมการขายหรือส่วนลดเพื่อเป็นการชักจูงคนเข้ามาใช้บริการเพิ่มเติมเลยครับ

ผมว่าลองคิดดูดีๆ ปรับเปลี่ยนนโยบาย แล้วพยายายามชักจูงให้คนมาใช้ Easy Pass กันเยอะๆ จะดีกว่าครับ เพราะลองคิดดูว่าถ้ารถทุกคันมีระบบ Easy Pass แล้วเขาสามารถ “วิ่งผ่าน” ช่องเก็บเงินไปได้เลย มันจะสะดวกและรวดเร็ว และเพิ่มความคล่องตัวให้กับทางด่วนได้ขนาดไหน

ก่อนที่จะสายเกินแก้

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

  1. จัดระเบียบช่อง Easy Pass ใหม่ ให้อยู่ในเลนที่สามารถเข้าใช้งานได้สะดวกขึ้น ไม่ต้องไปติดตามรถที่จ่ายเงินโดยระบบปกติ
  2. เพิ่มช่องทางแบบ “Easy Pass และเงินสด” เอาให้ได้ 50% ของด่านใหญ่ๆ และให้ได้ 100% ของด่านที่มีช่องทาง 2-3 ช่องครับ
  3. เพิ่มความยาวของช่อง Easy Pass เอาตัว Sensor ถอยออกมาให้ได้ระยะทางพอที่ที่กั้นจะเปิดให้บริการทันกับความเร็วของรถได้
  4. มีระบบการติดลบเงินค่าผ่านทาง โดยไปหักเงินจากค่ามัดจำของบัตรได้
  5. เพิ่มจุดเติมเงิน Easy Pass ในที่ต่างๆ เช่น 7-11, Counter Service, ผ่านช่องทางของ True Money เพื่อให้สามารถเติมค่าผ่านทางได้ล่วงหน้า ทุกที่
  6. จัดโปรโมชั่นลดราคาค่าผ่านทาง 1%-5% ให้สำหรับผู้ใช้งาน Easy Pass เพื่อให้ได้รับสิทธิประโยชน์เหมือนกับการใช้คูปอง และถือว่าเป็นการส่งเสริมการใช้งาน เพื่อลดปริมาณรถที่มาแออัดบริเวณหน้าด่านเก็บเงิน
  7. มีศูนย์บริการติดตั้ง Easy Pass พร้อมทั้งเครื่องมือตรวจสอบว่าสามารถอ่านเครื่อง Easy Pass ได้อย่างถูกต้องในตำแหน่งที่ติดตั้ง
  8. ทำแบบที่ญี่ปุ่น คือประสานงานกับค่ายรถ ติดเครื่อง ETC ให้กับรถยนต์ใหม่ที่ขายในกรุงเทพ เพื่อเพิ่มผู้ใช้งานใหม่ๆ

สุดท้ายที่อยากฝากไว้

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

ก่อนที่จะสายไป ผมเลยอยากให้ทาง EXAT ปรับปรุงระบบต่างๆ ให้ดีขึ้นมากกว่านี้ ก่อนที่ผู้ใช้ทางพิเศษจะ “ขยาด” กับระบบ ETC/Easy Pass แล้วทำให้การลงทุนที่ทำไปนั้นล้มเหลวไปครับ เพราะเอาเข้าจริงแล้วระบบ ETC จะมีประโยชน์มากที่สุดก็ต่อเมื่อผู้ใช้งานมากกว่า 50% นั้น หันไปใช้เครื่อง ETC แทนการจ่ายเงินค่าผ่านทางด้วยเงินสดครับ :)

ความผิดพลาดกับระบบ ETC ของทางด่วนไทย (ตอนที่ 2)

March 5th, 2010 Posted in My Idea | Comments

บทความนี้คือตอนที่ 2 ของบทความ “ความผิดพลาดกับระบบ ETC ของทางด่วนไทย” ถ้าใครยังไม่ได้อ่านตอนที่ 1 สามารถไปอ่านได้ที่นี่ครับ


หลังจากที่รู้จักกันไปแล้วว่าระบบ ETC และ Easy Pass นั้นคืออะไร คราวนี้เราลองมาดูต่อกันครับว่าระบบ ETC ที่ดีนั้นมันควรจะเป็นอย่างไร และทำไมผมถึงบอกว่า Easy Pass นั้นเป็นระบบแห่งความผิดพลาด

ระบบ ETC ของประเทศญี่ปุ่น

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

เอาเป็นว่า ถ้าอยากรู้ว่าระบบ ETC ที่ญี่ปุ่นนั้นเป็นอย่างไร ลองแว่บไปดู VDO ตัวนี้ดูครับ: ETC in Japan

fig10.jpg

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

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

แล้วทำไมผมถึงบอกว่า Easy Pass ผิดพลาด?

คำตอบส่วนใหญ่ของคำถามนี้ สามารถหาได้จากเว็บบอร์ดของ EXAT เองครับ

ความผิดพลาดตรงนี้ มันมีทั้งในส่วนของตัวอุปกรณ์ Easy Pass, ระบบจัดการเงิน, การเข้าใช้บริการ และการส่งเสริมการใช้งานครับ

1. ความผิดพลาดในส่วนของตัวอุปกรณ์

Easy Pass นั้นประกอบไปด้วยสองส่วน นั่นคือส่วนของตัว RFID Tag และส่วนของบัตรที่ใช้เติมเงิน

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

คำถามคือ นี่เท่ากับว่ากลับไปซ้ำรอยในเรื่องของปัญหาการใช้ TAG ที่เครื่องอ่านมันหา TAG ไม่เจอ อีกแล้วใช่ไหมครับ?

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

ถ้าลองดูในเว็บบอร์ดจะเห็นว่ามีแต่คำร้องเรียนในเรื่องของการที่ระบบนั้น “ตัดเงินเบิ้ล” หรือบางคนก็ “ระบบไม่ตัดเงิน” ก็มีครับ ซึ่งเป็นปัญหาของการที่ต้องทั้งอ่านและเขียนข้อมูลลงบนบัตร Easy Pass ครับ

2. ระบบการจัดการเงิน

card1.jpgระบบของ Easy Pass นั้น จริงๆ แล้วก็คล้ายคลึงกับระบบของบัตรรถไฟฟ้า BTS นะครับ นั่นก็คือต้องมีการเติมเงินเอาไว้ก่อน แล้วมีการหักค่่าผ่านทางออกไปเรื่อยๆ ซึ่งแน่นอนว่าต้องมีปัญหาในเรื่องของ “เงินไม่พอจ่าย” แน่ๆ ครับ

ในระบบของ BTS/MRT เขาแก้ปัญหาในเรื่องของเงินไม่พอจ่าย โดยการเรียกเก็บเงินค่ามัดจำบัตร 50 บาทไว้ตั้งแต่เปิดบัตร ซึ่งตรงนี้ถ้าเงินที่เติมไว้ในบัตรไม่พอจ่าย ระบบก็จะไปหักออกจากค่ามัดจำที่ได้เติมเอาไว้ ทำให้ในเวลาที่ “เร่งรีบ” จริงๆ ถึงเงินในบัตรเหลือ 5 บาท ผมก็ยังจะสามารถเดินเข้าประตูอัตโนมัติได้

คราวนี้กลับไปมองในระบบ Easy Pass คำถามคือถ้าเงินในบัตรของผมไม่เพียงพอสำหรับการจ่ายค่าผ่านทาง แล้วผมต้องทำอย่างไรหรือครับ?

[คู่มือการใช้บริการ หน้า 12]

6. การผ่านช่องอัตโนมัติจะต้องมียอดเงินคงเหลือในบัญชีสำรองค่าผ่านทางเพียงพอที่จะผ่านช่องอัตโนมัติตามที่การทางพิเศษแห่งประเทศไทยกำหนด

7. หากยอดเงินในบัญชีสำรองค่าผ่านทางไม่มี บัตร Easy Pass จะถูกระงับการใช้ (Black List) จนกว่าผู้ขอใช้บริการจะเติมเงินลงในบัญชีสำรองค่าผ่านทาง

[หน้า 19]

4.3 หากท่านได้ยินเสียง Beep สอง (2) ครั้งจากบัตร Easy Pass [..] หมายถึงบัตร Easy Pass ไม่อยู่ในสภาวะที่ใช้งานได้ [..] กรณีนี้ท่านจะต้องถอยรถยนต์ออกจากช่องทางเพื่อใช้บริการช่องเก็บค่าผ่านทางแบบเงินสดแทน ท่านสามารถติดต่อเจ้าหน้าที่ได้จากอุปกรณ์สื่อสาร

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

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

อย่าลืมครับว่าถ้าเป็น BTS/MRT เงินหมดเราเดินแทรกออกไปเติมเงินได้ง่ายๆ … มันไม่เหมือนกันครับ พื้นที่หน้าด่านมันมีจำกัดมากกว่านั้น …

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

เขียนไปเขียนมารู้สึกจะมันส์ไปหน่อย ยกยอดไปต่อตอนที่สามวันพรุ่งนี้นะครับ ;)

ความผิดพลาดกับระบบ ETC ของทางด่วนไทย (ตอนที่ 1)

March 4th, 2010 Posted in My Idea | Comments

เมื่อไม่กี่วันที่ผ่านมา ได้มีโอกาสต้องเข้าไปทำงานในเมืองครับ ทำให้ต้องใช้ทางด่วนสายรามอินทรา-อาจนรงค์ ที่มีการเปิดให้ใช้ระบบ Easy Pass หรือที่เมืองนอกเขาเรียกกันว่า ETC แล้ว แน่นอนครับว่าผมมีความสนใจที่จะซื้อไอ้ Easy Pass นี้เอามาใช้ในการเดินทางอยู่แล้ว เพราะคิดว่ามันจะต้องสะดวก รวดเร็ว และไม่ทำให้ผมต้องเสียเวลาในการควานหาเงินในกระเป๋า แต่หลังจากที่ทำการ Research เพิ่มเติมแล้ว … ผมคงต้องคิดหนักแล้วล่ะครับ ว่าจะใช้มันดีไหม

ระบบ ETC คืออะไร

ระบบ ETC (Electronic Toll Collection) คือระบบที่ใช้ในการเก็บค่าผ่านทางพิเศษอัตโนมัติ เพื่อเป็นการแก้ปัญหาการที่ต้องมาต่อแถวจ่ายเงินค่าผ่านทาง ซึ่งต้องเสียเวลาทั้งการรับเงินสด และการทอนเงิน

เอาเข้าจริงแล้วระบบนี้ในกรุงเทพเรามีมานานแล้วครับ โดยที่เมื่อก่อนเราจะเรียกมันว่า TAG ทางด่วน ซึ่งใครที่พอมีอายุเช่นผมก็จะจำได้ว่ามันเกิดมาเพื่อให้ใช้กับทางด่วนขั้นที่หนึ่ง (ดินแดง-บางนา-ดาวคะนอง) และมีปัญหาในเรื่องของสัมปทาน (ถ้าผมจำไม่ผิดนะครับ) ทำให้ไม่สามารถขยายการให้บริการมายังทางด่วนขั้นที่สองได้ ทำให้สุดท้ายแล้วการทางพิเศษฯ (ชื่อเดิมของ EXAT) ต้องทำการพับระบบเดิมกลับไป แล้วเริ่มต้นทำระบบใหม่อีกครั้ง

การมาของ Easy Pass

45.jpg
Easy Pass เปิดตัวเองมาได้อย่างสวยหรูในกลางปี 2552 กับความรู้สึกที่ทำให้ผู้ใช้ทางพิเศษอยู่ทุกๆ วัน รู้สึกว่านี่เป็นทางเลือกที่ดี เพราะนอกจากความสามารถในการใช้งานบนทางด่วนขั้นที่หนึ่งแล้ว ยังรวมไปถึงการใช้งานบนทางด่วนสายใหม่ๆ เช่น รามอินทรา-อาจนรงค์ และทางด่วนขั้นที่สองอีกด้วย พร้อมทั้งคำกล่าวที่บอกว่าจะให้บริการบนทางด่วนขั้นที่หนึ่งภายในธันวาคม 2552 และทางด่วนขั้นที่สองภายในปี 2553

แต่สุดท้ายแล้วก็เกิดอาการเลื่อนในการให้บริการ ทำให้การเปิดใช้งานของ Easy Pass ต้องล่าช้าไปจนถึงสิ้นเดือน ม.ค. 2553 แต่สุดท้ายก็เปิดให้บริการจนได้ครับ

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

US iTunes Music Store มีเพลงไทย !!

February 23rd, 2010 Posted in Apple, My Life | Comments

เมื่อหลายวันก่อน พอดีเปิด iTunes ขึ้นมา แล้วปรากฎว่าไปเผลอกฎปุ่มลูกศรด้านข้างๆ ชื่อเพลง มันก็เลยลิงค์ไปที่ iTunes Music Store ของ US

ปกติแล้วมันก็จะบอกว่าไม่มีเพลงนี้อยู่ในระบบ แต่ปรากฎว่าวันนี้ … มันมีครับ!

Screen shot 2553-02-17 at 0.27.25-1.jpg

ตกใจเลยครับ สรุปว่ามีเพลงไทยใน iTunes Music Store แล้ว แต่เท่าที่เห็นมีอยู่ไม่กี่อัลบัมเท่านั้นเอง

แต่ว่าอย่างนี้ แล้วเมื่อไร iTunes Store ของไทยจะเปิด section Music บ้างหรอครับ? หรือว่าเขาตกลง deal กันไม่ได้ ปัจจุบันเราเลยเห็นแต่ต่างค่ายต่างก็ทำระบบโหลดเพลง ทำเว็บโหลดเพลงของตัวเอง ..

เมื่อปุ่มด้านหน้าลิฟต์มันไม่ได้มีแค่ 2 ปุ่มอีกต่อไป

February 19th, 2010 Posted in My Life | Comments

สัญญาไว้ว่าจะบล็อกเรื่องนี้ วันนี้เลยมาตามสัญญาครับ

เมื่อสองวันที่ผ่านมา ได้มีโอกาสไปที่ CS Loxinfo ที่ย้ายไปจากเสือป่ามาที่ตึก Cyber World ตรงข้ามกับ Robinson รัชดา (ตึกมันคือตรงที่เคยเป็นตึกร้างเก่าครับ)

เมื่อวันนั้นเข้าไปจอดรถที่ชั้นใต้ดิน ยามก็จะให้บัตรจอดรถที่เป็น RFID บวกกับกระดาษที่เอาไว้สแตมป์ 1 ใบ ก็เข้าใจว่าเป็นบัตรจอดรถธรรมดา ผมก็เอาใส่กระเป๋าไว้ แล้วก็เดินขึ้นไป ผ่านจุดตรวจในตึก ไปขึ้นลิฟท์ (ไม่ได้แลกบัตร เพราะไม่เห็นเขาเรียกครับ ๕๕๕)

ปรากฎว่า ไอ้ปุ่มด้านหน้าลิฟท์เนี่ย แทนที่มันจะมีแค่สองปุ่มอย่างนี้

Screen shot 2553-02-19 at 16.01.18.png

มันกลับกลายเป็นอย่างนี้ !!

Screen shot 2553-02-19 at 15.59.png

ผมก็ .. เอาฟระ จากประสบการณ์ที่เคยขึ้นลิฟท์มาที่ Central แจ้งวัฒนะ ก็ทำให้ผมเข้าใจว่ามันเป็นลิฟท์ที่ต้องกดชั้นก่อน แล้วมันจะบอกว่าให้เราไปที่ลิฟท์ตัวไหน ผมก็เลยจัดการกดเลขเข้าไป รอสักครู่ แต่แล้วมันไม่ยอมบอกลิฟท์ครับ แล้วขึ้นสัญลักษณ์อันกลมๆ (เหมือนกับที่อยู่บนแผ่นๆ) ตรง LCD แทน

เอาล่ะสิ มาสายก็มาสาย ดันขึ้นลิฟท์ไม่ได้อีก ผมเลยยืนอยู่แถวนั้น ทำเหมือนรอเพื่อน … แล้วในที่สุดก็มีเหยื่อโผล่มาครับ กดชั้น แล้วก็แตะบัตร แล้วมันก็บอกว่าให้ไปตัว B …

เห้ยยย สรุปว่ามันต้องแตะบัตรด้วยหรือนี่ !!

ผมก็เลยเอามั่งครับ เดินไปกดชั้นใหม่ เอาบัตรจอดรถ (คือเป็น RFID ใบเดียวที่เหมือนกับของคนนั้น) ไปแตะ แล้วก็ยืนรอว่ามันจะบอกให้ไปตัวไหน

ปรากฎมันบอกว่า Access Denied ครับ O_o

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

หลังจากนั้นหรอครับ? ผมก็เดินไปกดชั้น เอาบัตรไปเตะ มันถึงยอมให้ผมขึ้นครับ …

แล้วนี่มันคืออะไรละเนี่ย?

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

Screen shot 2553-02-19 at 16.36.47-1.jpg1. ระบบ Destination Control – ระบบนี้จะทำการเลือกลิฟท์ให้กับผู้โดยสาร โดยที่พยายามเอาผู้โดยสารที่มีจุดหมายปลายทางอยู่ชั้นใกล้เคียงกันมาอยู่ในลิฟท์ตัวเดียวกัน เพื่อให้ลิฟท์นั้นเคลื่อนที่ขึ้นไปให้ได้ระยะทางไกลที่สุด นั่นก็คือให้มีการหยุดระหว่างชั้นน้อยที่สุดครับ ซึ่งตรงนี้จะช่วยในเรื่องของการลดระยะเวลาเดินทาง (ตัดปัญหาว่าเราจะไปชั้น 7 แต่มีคนกดก่อนหน้าเราซะ 5 ชั้น แล้วเราต้องรอร๊อรอ … เจอตามศูนย์การค้าบ่อยๆ ครับ)

สำหรับระบบตรงนี้สามารถอ่านเพิ่มเติมได้ใน Wikipedia และ Website ของ Schindler ครับ

2. ระบบ Schindler ID – ระบบนี้เป็นการใช้ร่วมกับ RFID เป็นของบริษัท Schindler เองครับ ซึ่งเราสามารถที่จะให้ผู้เช่า พนักงาน หรือผู้มาติดต่อบริษัทต่างๆ ถือ RFID เอาไว้ แล้วให้แตะ RFID เพื่อเป็นการยืนยันตัวตนด้วย เวลาจะขึ้นลิฟท์ครับ

สำหรับตรงนี้ มีวิธีการนำไปใช้หลายหลากเลยครับ เช่น

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

หลังจากที่ลองศึกษาข้อมูลดูแล้ว ผมว่าข้อดีของมันนี่ดีจริงๆ นะครับ แต่มันก็ยังมี learning curve อยู่ดี เพราะว่าเราคงชินกับการกดขึ้น-ลง แล้วค่อยเข้าไปกดชั้นภายในลิฟท์ครับ

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

เจออะไรใน Rails 3: เพิ่มพลัง ActiveRecord#find (ตอนที่ 2)

February 12th, 2010 Posted in Ruby, Ruby on Rails | Comments

เจออะไรใน Rails 3 เป็นสกู๊ปพิเศษสำหรับนำเสนอสิ่งใหม่ๆ ที่จะมีเพิ่มขึ้นมาใน Ruby on Rails 3.0

หลังจากที่ผมนำเสนอเรื่องของการ deprecate options ทั้งหมดของ ActiveRecord#find แล้วเปลี่ยนเป็นเมธอดที่ทำหน้าที่คล้ายๆ กับ named_scope กันไปแล้ว ตอนนี้ผมไปเจอข้อมูลจาก @lifo ซึ่งพูดเพิ่มเติมในเรื่องของเมธอดที่จะถูก deprecated และเมธอดที่ให้ใช้แทนครับ

สิ่งที่จะถูกถอดออกไป

การเรียกใช้ #find โดยมี option hash นั้นจะ deprecated ออกไป

User.find(:first, :where => {:status => "suspended"})

แต่อย่างไรก็ตาม #find method จะยังคงอยู่ โดยคุณสามารถใช้มันเพื่อหา record ตาม ID ได้แทน เช่น

User.find(1)
User.find(3,4,5) # ให้ argument เป็น array ได้แล้ว

การใช้ #find(:first), #find(:all) จะถูกแทนที่ด้วยเมธอด #first, #all

User.find(:first) # => deprecated
User.first # use this

และการใช้เมธอดสำหรับการคำนวณทุกอันนั้น ก็จะไม่รับ argument ที่เป็น hash แล้วเช่นกัน

User.count(:id, :conditions => {:status => "suspended"}) # => deprecated
User.where({:status => "suspended"}).count # use this

แต่ยังคงยกเว้น #count ที่ยังคงรับตัวเลือก :distinct อยู่

นอกจากนั้นการกำหนดค่า named_scope โดยใช้ option hash และเมธอด #scoped_by_xxx และ #default_scope ก็ถูกถอดออกเช่นกัน

# all lines here are deprecated
named_scope :suspended, :conditions => { :status => "suspended" }
default_scope :conditions => "status != 'deleted'"
User.scoped_by_status("suspended")

เมธอดใหม่ทั้งหมด

ActiveRecord ใน Rails 3 นั้น จะมีการเพิ่มเมธอดเหล่านี้

  • where
  • having
  • select
  • group
  • order
  • limit
  • offset
  • joins
  • includes
  • lock
  • readonly
  • from

เมธอดทุกอย่างนั้นสามารถ chain เข้าหากันได้ เพราะฉะนั้นคุณก็จะสามารถทำอย่างนี้ได้

User.where(:status => "suspended").includes(:event_log).limit(15).order(:name)
User.where(:name => "john_doe").joins(:profile)

และเนื่องจาก result ของมันเป็น lazy-loading หมด ทำให้คุณสามารถนำมันไปเก็บในตัวแปร หรือว่าเพิ่ม condition เข้าไปทีหลังได้ โดย SQL จะถูกส่งไปยัง server เมื่อคุณเรียกใช้ #each, #first, #all เท่านั้น

suspended_users = User.where(:status => "suspended")
latest_suspended_users = suspended_users.order("id DESC").limit(5)
 
User.where(:status => "suspended") # ยังไม่ query
User.where(:status => "suspended").all # query แล้ว!

เพราะฉะนั้นถ้าคุณไม่สนใจในเรื่องของการ lazy loading และต้องการจะโหลดข้อมูลลงมาเก็บไว้ใน array ก่อน คุณก็เพียงแค่ใช้ #all ตามหลัง query ของคุณเท่านั้นเอง

suspended_users = User.where(:status => "suspended").all # ข้อมูลถูกเก็บใน suspended_users

named_scope ยังเปลี่ยนไปเป็น scope อีก

นอกจากที่กล่าวมาข้างต้นนั้น ยังมีการเปลี่ยนชื่อเมธอดของ named_scope ให้เป็น scope และรองรับการใช้เมธอดใหม่ของ finder เพราะฉะนั้นจากโค้ด

named_scope :suspended, :conditions => { :status => "suspended" }

ก็ต้องเปลี่ยนไปเป็น

scope :suspended, where({ :status => "suspended"})

นอกจากนั้นยังมีการเพิ่มเติม with_scope และ with_exclusive_scope ซึ่งโค้ดในบล็อกที่ให้มานั้นจะมี scope ตามที่ระบุไว้แทน

with_scope(where( :status => 'suspended')) do
  ...
end
with_exclusive_scope(User.online) do
  ...
end

แล้วเมื่อไรจะต้องเปลี่ยนละเนี่ย …

คุณไม่จำเป็นต้องรีบเปลี่ยนโค้ดในส่วนของการใช้ finder เพราะใน Rails 3.0 นั้น ทุกอย่างยังคงจะใช้ได้ตามปกติ โดยที่มีกำหนดการว่าเมธอดเก่าๆ นั้นจะถูกนำออกไปใน Rails 3.2 ครับ เพราะฉะนั้นคุณก็ยังคงสามารถใช้โค้ดเก่าๆ ในการ query ข้อมูลมาได้ แต่ผมแนะนำว่าค่อยๆ ไล่เปลี่ยนไป ก็จะทำให้โค้ดของคุณพร้อมสำหรับการ upgrade ไปยัง version ใหม่ๆ ครับ ;)

เจออะไรใน Rails 3: เข้ารหัส cookie และสร้าง cookie ที่ไม่มีวันหมดอายุอย่างง่ายๆ

February 11th, 2010 Posted in Ruby, Ruby on Rails | Comments

เจออะไรใน Rails 3 เป็นสกู๊ปพิเศษสำหรับนำเสนอสิ่งใหม่ๆ ที่จะมีเพิ่มขึ้นมาใน Ruby on Rails 3.0

เมื่อก่อนนี้ ถ้าหากเราต้องการที่จะทำ cookie ที่ไม่มีวันหมดอายุ (เช่น remember me) เราจำเป็นที่จะต้องกำหนดเวลาหมดอายุของ cookie เอง เช่น

cookies[:authorization_key] = {
  :value => @user.authorization_key,
  :expires => 20.years.from_now.utc
}

แต่หลังจาก commit ของ DHH อันนี้ ทำให้เราสามารถเขียนใหม่ได้เป็น

cookies.permanent[:authorization_key] = @user.authorization_key

นอกจากนั้น เพื่อเพิ่มความปลอดภัยให้กับ Cookie เราก็ยังสามารถที่จะจับมัน signed หรือพูดง่ายๆ ก็คือเข้ารหัสมันไว้ได้ โดยการใช้เมธอด signed

cookies.signed[:user_id] = @user.id

ที่เยี่ยมไปกว่านั้นคือ การที่ทั้งสองเมธอดนั้นสามารถเชื่อมต่อกันได้ เพราะฉะนั้นตัวอย่างข้างต้นสำหรับ remember me นั้น เราก็สามารถแก้โค้ดให้เป็น

cookies.signed.permanent[:authorization_key] = @user.authorization_key

ซึ่งจะทำให้ cookies[:authorization_key] นั้นถูกเข้ารหัสก่อนที่จะส่งไปยัง web browser

แล้วมันเข้ารหัสกับอะไรล่ะ?

เป็นคำถามที่ดีครับ! Application ใหม่ๆ ที่ถูกสร้างมานั้นจะมีไฟล์ชื่อ cookie_verification_secret.rb อยู่ใน config/initializer ซึ่งมันจะมี key ที่ใช้ในการเข้ารหัสเมื่อใช้คำสั่ง cookies.signed อยู่ เพราะฉะนั้นถ้าเป็น application เก่า สิ่งที่คุณต้องทำก็แค่สร้างไฟล์นี้ขึ้นมาแล้วเพิ่มบรรทัดนี้

ActionController::Base.cookie_verification_secret = 'z3cret';

อย่าลืมเปลี่ยน token ของคุณให้เป็นข้อความยากๆ ที่เดาไม่ได้นะครับ :D

แล้วถ้ามีการแก้ไข cookie ที่ถูกเข้ารหัสละ?

มันก็จะ verify cookie ไม่ผ่าน แล้วก็จะโยน exception ActiveSupport::MessageVerifier::InvalidSignature มาครับ

ยังมีอะไรอีกเพียบเลยครับที่ยังเหลือให้เขียนถึง อย่าลืมติดตามอ่านตอนต่อๆ ไปนะครับ :D

Unbox หูฟัง iPhone

January 25th, 2010 Posted in Apple | Comments

พอดีผมได้มีโอกาสได้ไปซื้อหูฟังของ iPhone ใหม่ เนื่องจากความโก๊ะของตัวเอง เอาไปโรงพยาบาลแล้วทำร่วง เลยมาถ่ายรูป Unbox หน่อยดีกว่า

เนื่องจาก iPhone ที่ใช้อยู่นั้นเป็น 2G มันไม่ยอมรับหูฟังแบบอื่นนอกจากแบบที่หัวมันเล็กๆ ทำให้ต้องไปซื้อหูฟังของ iPhone มาใช้ … แต่ผมว่ามันก็เหมาะที่สุดแล้วนะ เข้ากับเครื่องดี :D

มาดูรูปกันเลยดีกว่าครับ

The Box.

กล่องของมัน รูปลักษณ์ชัดเจนว่าเป็น remote แบบใหม่ ราคา 1090 บาทครับ

Inside.

แกะออกมา มีซองด้านซ้ายใส่หูฟัง (ต้องตัดออกมาอย่างเดียว) พร้อมกับ manual และเอกสาร warranty

Headphone.

ตัดซองออกมา ก็จะเจอกับหูฟัง พันเหมือนกับอยู่ในกล่อง iPhone เลย

สุดท้ายแล้วก็ได้หูฟังใหม่ครับ แต่มันก็มีปัญหาอยู่นิดนึงว่าหูฟังที่ซื้อมาใหม่นี่เป็น version สำหรับ iPhone 3GS/iPod Touch 2 gen ซึ่งมีตัว control volume ใน Remote .. แต่ถ้าเอากลับไปใช้กับ iPhone 2g มันก็จะกดขึ้นลงไม่ได้ … ซึ่งจริงๆ มันก็น่าจะทำให้ support ใน firmware ได้นา …

Apple จ๋า … update firmware iPhone โหน่ยยย 555+

เจออะไรใน Rails 3: ใส่ flash message ลงไปใน redirect_to ได้เลย

January 20th, 2010 Posted in Ruby, Ruby on Rails | Comments

เจออะไรใน Rails 3 เป็นสกู๊ปพิเศษสำหรับนำเสนอสิ่งใหม่ๆ ที่จะมีเพิ่มขึ้นมาใน Ruby on Rails 3.0

ความเป็นมา

ปกติแล้วใน Rails 2 ถ้าเราต้องการที่จะตั้งค่า flash message ก่อนที่จะทำการ redirect เราจำเป็นทีจะต้องตั้งค่ามันก่อนที่จะเรียก redirect_to เช่น

class UsersController < ApplicationController
  def create
    @user = User.new(params[:user])
    if @user.save
      flash[:notice] = "User has been successfully created."
      redirect_to users_path
    else
      render :action => "new"
    end
  end
end

เพิ่ม flash message ใน redirect_to

ใน Rails 3 นั้น คุณสามารถใช้ :flash ในการตั้งค่า flash message ได้เลย เช่น

redirect_to users_path, 
    :flash => { :notice => "User has been successfully created." }

และเพื่อเพิ่มความสะดวกในการตั้งค่า flash message ที่ใช้บ่อยๆ เช่น flash[:notice] และ flash[:alert] ทาง Rails ก็ได้เพิ่ม options ขึ้นมาอีกสองตัวคือ :notice และ :alert ทำให้เรายังสามารถเขียนโค้ดด้านบนได้เป็น

redirect_to users_path, 
    :notice => "User has been successfully created."

จะเห็นได้ว่า options ที่เพิ่มเข้ามานี้จะช่วยทำให้ความซ้ำซ้อนของโค้ดนั้นลดไปได้อีกจุดหนึ่ง และทำให้เราเขียนโค้ดได้สบายขึ้นนั่นเอง

ปล. โดยส่วนตัวแล้วผมใช้ flash[:notice] และ flash[:error] แต่คิดว่าหลังจากได้เห็น feature นี้ ทั้ง flash[:notice] และ flash[:alert] คงจะกลายเป็น convention ของ Rails ไปอย่างแน่นอน

เจออะไรใน Rails 3: เพิ่มพลัง ActiveRecord#find

January 2nd, 2010 Posted in News, Ruby, Ruby on Rails | Comments

เจออะไรใน Rails 3 เป็นสกู๊ปพิเศษสำหรับนำเสนอสิ่งใหม่ๆ ที่จะมีเพิ่มขึ้นมาใน Ruby on Rails 3.0

ความเป็นมา

หลายคนนั้นคงจะรู้จักกับฟีเจอร์ named_scope ที่ได้เปิดตัวออกมาพร้อมกับ Rails 2.1 ทำให้เราสามารถที่จะเขียน scope แล้วนำ scope นี้ไปใช้ได้ใหม่เรื่อยๆ เป็นไปตามหลักของ DRY เช่น

class Post < ActiveRecord::Base
  named_scope :published, :conditions => { :status => :published }
  named_scope :latest, lambda { |limit| { :order => "id DESC", :limit => limit }}
 
end
 
# Use in the code
Post.published # => all published posts
Post.latest(5) # => Latest 5 posts
Post.latest(10).published # => Latest 10 published posts

ซึ่งการเพิ่มฟีเจอร์นี้ให้กับ Rails นั้น ทำให้มี plugin ต่างๆ เพิ่มขึ้นมาอีกมากมาย ที่เป็นการเพิ่ม scope ให้กับ model

หลังจากที่ named_scope นั้นถูกใช้กันอย่างแพร่หลาย คาดว่า @lifo คงเห็นสมควรแก่เวลาแล้ว จึงได้เวลา deprecate method #find เดิม แล้วให้ทุกคนเปลี่ยนไปใช้ syntax แบบใหม่ซึ่งคล้ายคลึงกับ named_scope แทน

Syntax แบบใหม่

สำหรับ syntax แบบใหม่นั้น ดูได้จาก snippet ด้านล่างนี้ครับ (เอามาจากที่นี่)

posts = Post.where("status = 'published'")
posts = posts.order("created_at DESC").limit(10)
posts.each{ |post| puts post.title }

จะเห็นได้ว่ามีการเพิ่ม scope where, order และ limit เข้ามาเป็นมาตรฐาน แล้วก็จะเหมือนกับ named_scope คือการ execute query นั้นจะเกิดขึ้นเมื่อจะทำการเข้าถึง object (บรรทัดสุดท้าย) เท่านั้น ทำให้สามารถ chain scope ได้

เนื่องจาก snippet ที่ได้มานั้นมีนิดเดียว แต่เป็นไปได้ว่าเราคงจะเห็น method อื่นๆ เช่น group, select, include เพิ่มมาเป็นแน่แท้ … อันนี้ก็คงต้องรอดูต่อไปนะครับว่าจะมีอะไรเพิ่มขึ้นมาบ้าง :D