Aug 26, 2013

Google Maps Linux เล่น 3D ได้แล้ว \(;w ;)/

เรื่องกราฟฟิกและเกม Linux ถือว่าเป็นลูกเมียน้อยมาตลอด จนกระทั่งต้นปีที่ผ่านมา Steam for Linux ได้ถือกำเนิด บวกกับระบบมือถือยอดนิยมอย่าง Android ที่ผู้ใช้ไม่น้อยซื้อไปเพื่อเล่นเกม สถานการณ์ก็เริ่มดูดีขึ้นมาบ้าง

ตอนนี้ก็มีอีกบริการหนึ่งที่รองรับการใช้กราฟฟิกบน Linux แล้ว ซึ่งก็คือ Google Maps ตัวใหม่นั่นเอง (ไม่แน่ใจว่ารองรับตั้งแต่เมื่อไหร่ เพราะจำได้ว่าช่วงแรกๆ ที่ปล่อยพรีวิว เวลาพยายามดูให้เป็น 3D มันจะฟ้องหา Google Earth Plugin ซึ่งไม่รองรับบน Linux) อันนี้ดูผ่าน Chromium รุ่นล่าสุด เข้าใจว่าพี่แกคงปลุกปล้ำกับ WebGL จนสำเร็จ


ซูมออกไกลสุด เห็นหมู่ดาวและแสงไฟในเมืองด้วย


โลกโค้งๆ กับปุยเมฆบนท้องฟ้า (ไม่แน่ใจว่าภาพเมฆเป็นแบบ live หรือเปล่า)


ซูมภูเขาเห็นเป็นภูเขาแล้ว


ส่วนตึกต้องเป็นเมืองที่รองรับ ตอนนี้ยังมีไม่มากเท่าไหร่ ส่วนใหญ่ก็เมกากับแถบยุโรป



ซูมใกล้สุด รายละเอียดไม่ได้ชัดเวอร์ขนาด backpack เที่ยวผ่านหน้าจอได้แฮะ (แต่ก็ดีกว่าไม่มีหละน่า)

Aug 24, 2013

DatePicker ตัวใหม่ของ Android?

ภายใต้มาตรฐานเดียวกัน (ISO 8601) การสื่อสารเรื่องวันที่ไม่ควรเป็นปัญหาระหว่างวัฒนธรรม และการป้อนข้อมูลผ่านคีย์บอร์ดโดยยึดหลักการนี้ก็ไม่ใช่เรื่องยากแต่อย่างใด

ในความเป็นจริงนั้น แต่ละวัฒนธรรมย่อมเลือกใช้สิ่งที่เหมาะสมกับตัวเองที่สุด เช่นประเทศไทยเราบอกปีเป็นพุทธศักราช อเมริกาใช้เดือนนำหน้าวัน อินเดียมีการนับวันในเดือนที่แตกต่างออกไป ไปจนถึงเหล่านักดาราศาสตร์ที่นับแค่วันเพียงอย่างเดียวบนปฏิทิน

อีกทั้งการป้อนข้อมูลผ่านคีย์บอร์ดยังไม่รองรับความผิดพลาดของข้อมูล ไม่ว่าทั้งการพิมพ์ผิด-ตกหล่น (syntactic error) หรือใส่วันที่เกินกว่าที่เดือนนั้นจะมีได้ (semantics error)

การบังคับป้อนข้อมูลด้วยวิธีการเฉพาะสำหรับข้อมูลนั้นๆ จึงเป็นสิ่งที่ควรทำเสมอ ดังตัวอย่างนี้



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



การป้อนวันเวลาในยุคแรกๆ ของ Android ผ่าน DatePicker (ฟังก์ชันมาตรฐานสำหรับป้อนข้อมูลวันเวลา) ที่ไม่ค่อยจะเป็นมิตรกับระบบสัมผัสซักเท่าไหร่ ด้วยปุ่มคลิกขึ้น/ลงที่ทำงานทีละขั้น หรือต้องกดค้างสำหรับการเลื่อนผ่านข้อมูลให้เร็วขึ้น (แบบเดียวกับนาฬิกาข้อมือเลย)


โชคดีที่ Android ยกเครื่องศัลยกรรมหน้าตาใหม่หมด (ช่วง Jelly Bean) ทำให้ DatePicker ตัวนี้ดูดีขึ้นมากภายใต้หน้าตาเดิมๆ (มีผลกับการปรับตัวของผู้ใช้ส่วนใหญ่) ด้วยการเลือกวันโดยใช้การเลื่อนขึ้น/ลงแทน แถมยังสามารถเลื่อนแบบมีแรงเฉื่อยเพื่อกระโดดข้ามชุดข้อมูลได้อีกด้วย


และแบบใหม่ล่าสุด เจอใน Google Keep (อาจจะกลายเป็น official ถัดไป) ออกแบบมาอย่างสวยงาม แม้จะหน้าตาจะเปลี่ยนไปบ้าง แต่ก็ยังคงความง่ายในการใช้งานอยู่

บล๊อกตอนนี้ไม่มีอะไร เห็นของสวยเลยมาอวยเฉยๆ :P

Aug 5, 2013

ทำไมผมเกลียด JavaScript

ลองเปิด JavaScript Console ของ browser แล้วป้อนคำสั่งเหล่านี้ลงไปดูครับ ...

console> [] + []
""
console> [] + {}
"[object Object]"
console> {} + []
0
console> {} + {}
NaN

จาก @garybernhardt

ก่อนหน้านี้เคยคิดว่าการเปรียบ == ประหลาดพอแล้วนะ (ยังดีที่มี === ช่วยชีวิต) แต่พอเจอแบบนี้ก็ทำเอาเสียหลักเลยทีเดียว

  1. ด้วยเหตุผลที่ JavaScript ทำงานกับ HTML ซึ่งเป็น markup language ที่เน้นการแสดงผลด้วย string เป็นหลัก การเอา array (หรือ type อื่นใดที่ไม่ใช่ตัวเลข) บวกกับอะไรซักอย่าง จะได้ผลลัพท์เป็น string ทันที (คล้ายๆ กับที่ C ที่มองทุกอย่างเป็น pointer arithmetic) พอเอา array ว่างๆ มาบวกกันเลยได้ string ว่าง
  2. ในทำนองเดียวกัน เมื่อเปลี่ยนเอา array ไปบวกกับ {} (ถือว่าเป็น object ใน JavaScript) ก็ทำให้ได้ผลลัพท์เป็น string ที่บอกว่านี่คือ object นั่นเอง
  3. อย่างไรก็ตาม {} มีความหมายได้อีกอย่างคือ block (ที่ไม่ยอมทำหน้าที่เป็น variable scope ไปด้วยเหมือนภาษา C) ทำให้บรรทัดนี้มีค่าเทียบเท่ากับการเขียนเพียง +[] เครื่องหมายบวกเลยทำหน้าที่ทางคณิตศาสตร์อย่างเต็มที่ และมันเปลี่ยน array ว่างให้กลายเป็นค่า 0
  4. ส่วน object อื่นใดที่ไม่ใช่ array, string ว่าง จะมีค่าเป็น not a number เมื่อเอามาดำเนินการทางคณิตศาสตร์ครับ

เฮ้อ จะเขียน JavaScript แต่ละทีมันเหนื่อย (ใจ) จริงๆ

Aug 4, 2013

Puma คู่แรก

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

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

ถึงกระนั้น Puma ก็ยังเป็นรองเท้าที่ผมใฝ่ฝันมาโดยตลอด อันที่จริงแล้ว วันที่ซื้อ Converse คู่แรกนั้น ผมแวะไปยังโชว์รูม Puma ก่อนด้วยซ้ำ (เรียกว่าเป็น love at first sight เลยก็ไม่ผิด) ความเรียบง่ายลงตัวสไตล์ minimalism อันเกิดจากสีสันเพียงน้อยนิดที่ใช้ พร้อมลวดลายพื้นๆ คาดเดาได้ไม่หวือหวา เด้ดสุดคือตำแหน่งร้อยเชือกเยื้องข้างอันเป็นเอกลักษณ์ องค์ประกอบทั้งหมดรวมกันคงไม่ไกลจากคำว่า perfect เท่าไหร่ อย่างไรก็ตามราคาของมันก็นับว่าสูงไม่ใช่เล่นสำหรับเด็กมหา'ลัย (เทียบเท่าค่าขนมครึ่งเดือน) ก็ทำให้ผมต้องตัดใจจากมันเสียทุกคราเมื่อถึงเวลาปลดระวางรองเท้าคู่เก่า

โชคดีที่เจอช่วงลดราคา (โดยตั้งใจ -- ใครหละจะปล่อยโอกาส) เลยได้ฤกษ์พาเจ้าแมวล้ำยุคคู่แรกคู่นี้ออกไปผจญโลกด้วยกัน


Puma Future Cat M2 - ว่าแต่เห็นที่ไหนๆ เค้าก็ถ่ายมุมนี้กันแฮะ

และหวังว่านี่จะไม่ใช่คู่สุดท้ายจาก Puma ;)