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

ระบบเก็บเงินรวมของ BTS/MRT/BMA

June 6th, 2010 Posted in My Idea | 1 Comment »

จำได้ว่าเคยมีไอเดียเกี่ยวกับเรื่องนี้ตั้งแต่ตอนที่อยู่ม. 4 ผ่านมาแล้ว 9 ปี มันก็ยังไม่คืบหน้าไปถึงไหน

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

pic_415t.jpg

ปัจจุบันนี้ ระบบขนส่งมวลชนในกรุงเทพนั้น ต่างคนก็ต่างเก็บค่าใช้บริการในระบบที่ต่างกัน กล่าวคือ BTS ใช้บัตรแม่เหล็กกับ RFID (Smart Pass) ส่วน MRT นั้นใช้แต่ RFID (Token + Value Card) แต่รถเมล์นั้นกลับรับแต่เงินสด ซึ่งจะเห็นได้ว่าหากเราเดินทางในกรุงเทพนั้น ถ้าต้องขึ้นรถต่อรถไฟฟ้าแล้วต่อใต้ดิน เราต้องพกทั้งเงินสดและบัตร RFID สองใบ ซึ่งมันก็ดูไม่สะดวกเอาซะเลย

ผมเลยคิดว่า จริงๆ แล้วเราน่าจะมีบัตรอะไรสักอย่าง ที่เราสามารถเติมเงินเอาไว้ แล้วใช้เดินทางกับระบบใดก็ได้ครับ

แล้วจะพัฒนาระบบได้อย่างไร

ตรงนี้ผมแยกเป็นสองส่วนครับ คือส่วนของระบบการเติมเงิน และระบบของการตัดเงิน

การเติมเงิน

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

charliecard.small.jpg

สำหรับตัวอย่างของการรวมตัว ก็เป็นเหมือนกับด้านบนนี้ครับ ซึ่งก็คือ Charlie Card เป็นบัตรเติมเงินที่เอาไว้ใช้สำหรับการใช้บริการรถโดยสารสาธารณะทุกอย่าง ทั้งรถไฟใต้ดิน และรถเมล์ โดยที่ทั้งสองอย่างนี้ถูกควบคุมโดยบริษัทคนละอันกันครับ

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

การตัดเงิน

สำหรับ MRT และ BTS นั้น ถ้าระบบร่วมของเราใช้ตั๋วโดยสารแบบ RFID ในคลื่นความถี่เดียวกัน ผมว่าสิ่งที่เหลืออย่างเดียวคือการลิงค์กันระหว่างระบบและดึงจำนวนเงินคงเหลือมาจากฐานข้อมูลกลางครับ (ซึ่งตรงนี้เข้าใจว่า MRT/BTS กำลังเชื่อมกันอยู่ และบอกว่าจะร่วมกันได้ภายในสิ้นปี 2554 ครับ)

แต่ในส่วนของรถเมล์นั้น คิดว่าคงจะยากแน่นอนครับ กับการที่จะเอาบัตร RFID ไปใช้ แต่ผมคิดว่ามันมีอยู่ 2 วิธีครับ ในการติดตั้ง

1. ติดตั้งไว้ที่เสาบริเวณประตูขึ้นลง

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

2. ติดไว้ที่กระป๋องเก็บค่าโดยสาร

ไอ้ที่กระเป๋ารถเมล์ชอบเขย่า แกร่กๆๆ นั่นแหละครับ ติดไปด้านบนหรือด้านล่าง ข้างในหลอดขนาดยาวสักประมาณ 10cm คงจะได้ มี simcard module และ removable battery พร้อมสรรพ สำหรับการส่งข้อมูลผ่านทาง EDGE (หรือ 3G พับผ่า !!) ไปยัง server แม่ข่าย เพื่อทำการเรียกยอดเงินและตัดเงิน

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

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

รู้สึกว่าจะฝันเฟื่องอีกแล้ว แต่ผมอยากให้เป็นจริง จริงๆ นะครับ เพราะจะได้เลิกพกบัตร 2 ใบ แล้วก็เลิกพกเหรียญย่อยๆ ไว้จ่ายรถเมล์สักที ;)

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

March 6th, 2010 Posted in My Idea | 3 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 | 2 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 | 2 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 | 1 Comment »

เมื่อหลายวันก่อน พอดีเปิด 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 | 6 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 | 1 Comment »

เจออะไรใน 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 | No 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 | No 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 | No 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 ไปอย่างแน่นอน