วันศุกร์, กรกฎาคม 09, 2010

ออกแบบ alert box

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

ยกตัวอย่างเช่น alert box ของโปรแกรม Thunderbird


รูปแสดง alert box ตอนกด offline

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

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

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

ดังนั้นเราควรให้โอกาสผู้ใช้ในการยกเลิกสิ่งที่กำลังทำอยู่ด้วย

สำหรับการออกแบบในกรณีของ alert box กล่องนี้ อาจจะใช้วิธีเพิ่มปุ่ม cancel เข้าไป เช่น


รูปแสดงการใส่ cancel เข้าไปใน alert box 

ดูตัวอย่างจาก dialog ของโปรแกรม textedit



มี alert box เกิดขึ้นเมื่อปิดโปรแกรมโดยไม่ได้ save

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

"คุณตัดสินใจไม่บันทึกใช่หรือไม่" แล้วให้เลือก "ใช่" หรือ "ไม่ใช่" เราต้องใช้ความคิดนิดหน่อย

แต่ถ้าเป็น

"คุณตัดสินใจไม่บันทึกใช่หรือไม่" แล้วให้เลือก "บันทึก" หรือ "ไม่บันทึก" อันนี้น่าจะใช้สมองน้อยกว่า

ดังนั้นเราลองเปลี่ยนปุ่มเป็นกริยาดู


เปลี่ยนปุ่มเป็นคำกริยา


ตาม HIG ของ Apple บอกว่าข้อความใน alert box ควรมีให้น้อยที่สุดเท่าที่จะทำได้เพราะกลัวว่าคนจะไม่อ่าน ผมมีหลักการง่ายๆ ที่เคยไปฟังจาก WWDC 2005 เค้าบอกว่าสิ่งที่ต้องมีใน alert box คือ

"ปัญหาหรือสิ่งที่เกิดขึ้น + ผลลัพทธ์ของปัญหา + ทางแก้ปัญหา"

ถ้ามีสองบรรทัด บรรทัดแรกให้เป็นข้อความที่ต้องการบอก (Message text) ส่วนบรรทัดที่สองเป็นคำขยาย (Informative text) หลังจากอ่าน HIG แล้วผมลองเปลี่ยนตาม HIG ของ Apple ดู



รูปหลังจากเปลี่ยนคำถาม

อันดับแรกผมตัดข้อความ "Download Message" ซึ่งไม่จำเป็นออก  สองคือเพิ่มคำขยายผลของคำถามเข้าไป และ สุดท้ายคือเพิ่ม icon ของโปรแกรมเข้าไปใน icon ของ alert ด้วย ก็ได้แต่หวังว่า version ต่อไปของ Thunderbird จะเพิ่ม Cancel เข้าไป :)

สำหรับ OSX จะประมาณนี้ หากสนใจเรื่องการเขียนข้อความใน Dialog ให้ลองอ่านใน HIG ของ Apple เพิ่มเติม แต่สำหรับ OS อื่นอาจจะมีวิธีการแบบของตัวเอง เราก็ควรจะเขียนโปรแกรมตามประสบการณ์ของ OS นั้นๆ ครับ ผู้ใช้จะได้ไม่รู้สึกแปลก

แนะนำให้ลองอ่าน HIG ของ Gnome,  KDE และ Windows ดูครับ

เพิ่มเติม 1

อีกหนึ่งตัวอย่างจาก chrome ที่ใช้วิธีใส่ข้อความยาวๆ บนปุ่ม และลดเหลือทางเลือกแค่สองทาง

วันพฤหัสบดี, พฤษภาคม 20, 2010

ติดตั้ง Parkplace Amazon S3 Clone บน Snow Leopard

มีปัญหากับการติดตั้ง Parkplace บน Snow Leopard นิดหน่อย แต่ไหนๆ ติดตั้งได้แล้ว ขอจดขั้นตอนไว้ที่นี่ละกัน

อันดับแรกให้ทำตามที่ Readme บอก

  • $ gem install camping mongrel --include-dependencies
  • $ gem install sendfile
จากนั้นติดตั้ง  SQLite3 ruby plugin (ตัว SQLite ไม่ต้องติดตั้งเพราะ Snow leopard มีอยู่แล้ว)
  • $ gem install sqlite3-ruby
หลังจากทดลอง run  bin/parkplace มันจะถามหา activesupport 2.2.0 ถ้าเราไม่มีก็ให้ลงซะ
  • $ gem install rails -s http://gems.rubyonrails.org -v 2.2.0
ผมลง rails ทั้งยวงเลยเผื่อมันอยากได้อย่างอื่นด้วย เช่น activerecord จะได้มีพร้อม มาดูใน code ตอนหลังพบว่ามันต้องการสองตัวนี้

gem 'activesupport', '~> 2.2.0'
gem 'activerecord',  '~> 2.2.0'

หลังจากนั้นมันจะมีปัญหากับการเชื่อมต่อ SQLite อีก แต่ไม่ได้เป็นเพราะ activerecord ครับ แต่เป็นเพราะ package camping  มันทันสมัยไปหน่อย ให้ลบ version 2.0 ออก แล้วให้ลง 1.5.180 แทน
  • $ gem  uninstall camping
  • $ gem install camping -v 1.5.180
หลังจากนั้นสามารถเปิด parkplace ได้เลย
  • $ ./bin/parkplace

วันอังคาร, พฤษภาคม 18, 2010

เขียนเกมส์บน iPhone ด้วยภาษา Lua

หลังจากได้ข่าวว่าสามารถเขียนเกมส์บน iPhone ได้ด้วย script language ก็รีบกระโดดเข้าไปอ่านทันทีครับ


ภาษาที่เค้าใช้คือภาษา Lua ซึ่งเป็นภาษาที่ใช้ในการเขียนเกมส์อยู่แล้ว อย่างเช่น Monkey Island หรือ  Grim fandango หรือแม้แต่ Civilization V ก็ใช้ภาษานี้ ดังนั้นมันเลยเหมาะเอามากๆ สำหรับการนำมาเขียนเกมส์ และยิ่งเหมาะมากที่จะเขียนเกมส์บน iPhone เพราะการเขียนด้วย Objective-C เป็นงานที่ยากขึ้นมาทันทีเมื่อเทียบกับ Corona-Lua

(ที่เรียกว่า Corona-Lua เพราะว่ามันขี่อยู่บน Library ของ Corona ครับ ยังมีคนอื่นที่ใช้ Lua เขียนโปรแกรมบน iPhone อีกแต่เป็น Library คนละชุดกัน)

การทดลองเล่นก็ไม่ยาก ให้เอา xcode มาลงก่อน จากนั้น download corona จากเว็บไซต์ เมื่อแตก dmg ดูใน folder จะเห็น  folder ชื่อ example อยู่ด้านใน ในนั้นจะมีตัวอย่างง่ายๆ ไว้ให้ทดลอง ให้เราเอา simulator ที่อยู่ใน folder นอกสุดเปิดดู ไม่ต้องห่วงเรื่อง compile หากทดลองแก้ไข code ก็กด refresh (command+r) ได้เลย

จากการทดลองเขียนโปรแกรม "ยานร่อนลงดวงจันทร์" เขียน code ไม่ถึง 100 บรรทัด เจอของง่ายแบบนี้แค่คิดว่าต้องเขียน Objective-C ก็เริ่มท้อซะแล้ว


เกมส์นี้ง่ายๆ คือตัว module ของเราจะตกลงมาตามแรงโน้มถ่วง เราต้องคอยกดไอพ่น (ปุ่มสีแดง) ให้ยานชลอความเร็วลง ถ้ากดไอพ่นมากไปยานจะหลุดหน้าจอไปเลย แต่ถ้ากดน้อยไป ยานก็จะตกด้วยความเร็วทำให้ยานพัง ลองดู code สั้นๆ ได้ที่นี่ครับ code and graphic

ทาง Anscamobile เค้ายืนยันว่าสามารถอยู่บน app-store ได้แน่นอน เพราะสุดท้ายแล้ว code ถูก compile เป็น native ไม่ได้ทำงานอยู่บน virtual machine และเค้าบอกว่า version สำหรับพัฒนาบน Linux และ Windows กำลังจะออกมาเร็วๆ นี้

ที่สำคัญที่สุดเราสามารถเขียนโปรแกรมทีเดียว ทำงานได้ทั้ง iPhone, iPad, Android เลยครับ น่าเสียดายไม่มี BB

Reference


Lua Programming Gems  Beginning Lua Programming (Programmer to Programmer)

วันอังคาร, เมษายน 27, 2010

ข้อเสียของ Cloud Computing

"Dark side of the cloud" แม้ว่าปัจจุบันเราอาจจะยอมรับข้อเสียเหล่านั้นได้ไปแล้ว แต่สำหรับภาคธุรกิจ มันคือสิ่งที่เราต้องคำนึงถึงและหาทางรับมือไว้ล่วงหน้า

  1. ทุกอย่างขึ้นกับ Internet ทั้งโปรแกรมและเอกสาร ทุอย่างอยู่บน cloud หมดนะครับ แค่ Internet ช้าก็ไม่ต้องทำงานกันแล้ว
  2. Feature น้อย เมื่อเทียบกับ Desktop Application เพราะเครื่องมือในการพัฒนาบน Web เมื่อเทียบกับ Desktop แล้วยังถือว่าแย่มาก (ด้วยข้อจำกัดของ Browser) และจะยังไม่ดีขึ้นจนกว่าจะถึงยุคของ HTML5 (ต้องมี Framework ที่ทำให้เราใช้ HTML5 ได้เต็มที่)
  3. Security เรื่องความปลอดภัยเป็นทั้งจุดออนและจุดเข็งในเวลาเดียวกัน เราต้องยอมรับความจริงว่า ข้อมูลของเราฝากไว้กับคนอื่น ต้องแน่ใจว่าคนนั้นไว้ใจได้ถึงจะเลือกใช้ cloud ของเค้า
  4. ที่อยู่ของ Server เนื่องจากเป็น cloud เราเลยบอกที่อยู่แน่ๆ ของข้อมูลไม่ได้ ยิ่งเป็นบริการที่มี server อยู่ในหลายประเทศ การจะบอกว่าข้อมูลอยู่ในประเทศไหนก็ทำได้ยากขึ้น ทำให้เกิดข้อจำกัดขึ้นทันที เพราะรัฐบาลอย่างประเทศไทย หรือแคนาดา ห้ามไม่ให้เก็บข้อมูลของรัฐไว้ในต่างประเทศ เพราะถ้าข้อมูลอยู่ใน server ของสหรัฐ ด้วยกฏหมายของเค้า จะทำให้ US Government สามารถเข้าไปดูข้อมูลได้ทันที
  5. ย้ายผู้ให้บริการได้ยาก ปัจจุบัน ยังไม่มีมาตรฐานในาการทำ cloud หากเราต้องการย้ายไปใช้ cloud ของที่อื่น บางทีอาจจะต้องเขียนโปรแกรมขึ้นมาใหม่เลยทีเดียว
Cloud computing ไม่ได้ทำแค่เรื่อง computing อย่างเดียว ไว้ตอนหน้าเรามาคุยว่าเค้าแบ่งมันเป็นกี่ประเภท

Cloud Application Architectures: Building Applications and Infrastructure in the Cloud (Theory in Practice (O'Reilly)) Cloud Computing, A Practical Approach

วันจันทร์, เมษายน 26, 2010

ทำไมต้อง Cloud computing

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

ทำไมต้องใช้ Cloud



สำหรับลูกค้า

  1. ราคาถูก บริการที่อยู่บน cloud ควรถูกมากๆ ยกตัวอย่างเช่น gmail เป็นบริการฟรี ในขณะที่เก็บข้อมูลได้มากกว่า 7G หรือ Google App Premier Edition ราคาเพียง 50$ ต่อคน ต่อปี ซึ่งถือว่าถูกมากเมื่อเทียบกับ การซื้อ และดูแล Microsoft Exchange ในระดับ Enterprise
  2. ใช้ง่าย เพราะจ่ายอย่างเดียวครับ ไม่ต้องติดตั้งระบบ ไม่ต้องจ้างผู้เชียวชาญมาดูแล
  3. ใช้ได้หลาย platform มีแค่ Net book มือถือ หรือเข้าไปใช้ Net cafe ก็สามารถใช้บริการได้แล้วโดยไม่จำกัดว่าใช้ OS อะไร ที่สำคัญบริษัทไม่ต้องเสียเงินซื้อเครื่องใหม่ หรือเครื่องแพงๆ มาใช้ด้วย
  4. ไม่จำกัดสถานที่ เนื่องจาก cloud ไม่ได้เก็บข้อมูลไว้ที่ใดที่หนึ่ง แต่ข้อมูลจะลอยอยู่ตรงกลาง ดังนั้นผู้ใช้สามารถเข้าถึงข้อมูลเดี๋ยวกันได้จากหลายที่
  5. จ่ายเท่าที่ใช้ เพราะไม่ต้องลงทุนอุปกรณ์ไปก่อน จึงไม่มีค่าใช้จ่ายเริ่มต้น เลือกใช้เมื่อไหรก็ได้เหมือนการเช่า และอาจจะดีกว่าเพราะบางครั้งไม่ได้เช่าตามเวลา แต่เช่าตามการใช้งานจริง
  6. ทำงานร่วมกันง่าย เพราะ Internet เปิดอยู่ตลอดเวลา และเอกสารไม่ได้อยู่ในเครื่องของคนใดคนหนึ่งทุกคนเข้าถึงได้พร้อมๆ กัน
สำหรับผู้ประกอบการ
  1. ราคาถูก ในทางธุรกิจ การไม่ต้องจ่ายเงินลงทุนไปก่อนเป็นเรื่องที่ดีมากๆ เพราะทำให้สามารถตั้งใจ ใส่ใจ กับธุรกิจของตนเองได้ทันที (เวลาเป็นต้นทุนที่สูงสุด)
  2. เพิ่มโอกาศทางธุรกิจ ตัว cloud เองไม่ใช่ธุรกิจใหม่ แต่ cloud เปิดโอกาสให้เราสามารถสร้างบริการที่สู้กับบริษัทใหญ่ๆ ได้ โดยไม่ต้องลงทุน หรือลงแรงศึกษา สร้างระบบพื้นฐาน
  3. ปริมาณ เป็นปัญหาของธุรกิจเสมอ ทั้งตอนเริ่มต้นที่ขนาดเล็กเกิดไปลงทุนไม่คุ้ม หรือตอนที่ขนาดใหญ่ขึ้นจนขยายไม่ออก ตัว Cloud แก้ปัญหานี้ไปแล้ว
  4. อัตโนมัติ และปลอดภัย ค่าระบบอัตโนมัติ และค่าความปลอดภัยเป็นของแพงครับ แต่สองสิ่งนี้จะได้มาพร้อมกับ Cloud เพราะ Cloud เป็นของขายดังนั้นมันจึงต้องมี API ให้เราสร้างระบบอัตโนมัติได้
Cloud ไม่ได้มีแต่ข้อดี มันมีข้อเสียที่ร้ายกาจอยู่ด้วย แต่ตอนนี้ยาวแล้วไว้เขียนต่อตอนหน้าละกัน

Cloud Computing For Dummies SOA Design Patterns (The Prentice Hall Service-Oriented Computing Series from Thomas Erl)

วันพฤหัสบดี, มีนาคม 25, 2010

Apple Land vs Google Empire

ผมพยายามหาทางใช้ของดีของ Apple และใช้บริการฟรีๆ ของ Google มานาน จนตอนนี้เริ่มไม่ไหวแล้วครับ คงต้องเลือกทางใดทางหนึ่งซะที


Picasa เทียบ iPhoto ไม่ได้เลยครับ ทั้งในด้าน UX Map และ Sync โดยเฉพาะภาษาไทยของ Picasa บนเครื่อง Mac เรียกว่าอ่านไม่ได้เลยทีเดียว ส่วนบริการ Online storage ของ dot mac ก็สวยกว่า picasaweb มากๆ จะมีดีกว่าก็คือตัว gmail ที่ทำให้สามารถทิ้ง mail.app ได้เลย 

สำหรับ Mobile device เจ้า iPhone มี Usability ที่เข้มข้นกว่า Android ทั้ง Application ของ Apple เอง และของ Developer ทั่วไป ผมเทียบกับ HTC Magic (Sense) ที่ใช้อยู่ ดังนั้นแม้ว่าจะต้องจ่ายแพงกว่าเท่าตัว ถ้ามีเงินผมคิดว่าคุ้มครับ

แต่เมื่อไม่ค่อยมีตัง ดังนั้นผมจึงเลือก Google ครับ



วันอังคาร, มีนาคม 23, 2010

ความเป็นมืออาชีพ ของคนกวาดพื้น

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

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

วันนี้ไม่ต้องไปยกตัวอย่างไกลๆ ผมนั่งรถมอเตอร์ไซต์เข้าซอย ไปเจอ innovation ของคุณป้ากวาดถนน


ด้านซ้ายเป็นที่ตักผงทั่วไป ด้านขวาเป็นที่ตักผงที่ดัดแปลงแล้ว

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

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

ขอคารวะคุณป้า ท่านเป็น Professional ด้านการกวาดพื้นถนนจริงๆ

ที่มา ซอย ถนนสุขุมวิทย์ 26 (7:30)

ปล. รูปวาดด้วยโปรแกรม omnigraffle ครับ

Omnigraffle 5 Professional