อยู่บนดิน

ผมไปอัดรายการวิทยุครั้งใหม่กับเจ้าของรายการคนใหม่ ปกติจะอัดรายการกับ อ.ภัทรา ซึ่งเราจะเล่นกับรายการได้เต็มที่ นำเสนอเทคโนโลยีใหม่ๆ ได้แบบสุดขั้ว ตั้งแต่ออกแบบแผงโซล่าเซลแบบใหม่ไปจนถึงยิงแสงเลเซอร์ผ่าจักรวาล แต่พอมาอัดรายการกับเจ้าของรายการคนใหม่ สิ่งตอบรับที่ได้คือ “เนื้อหาที่ออกไม่ใช่ว่าไม่ดี เป็นเทคโนโลยีใหม่ที่ควรรู้ แต่มันสูงเกินไป เหมือนคุณอนุชิตกับคุณศิระอยู่ชั้น 10 แต่คนฟังอยู่บนพื้นดิน อยากให้เป็นเนื้อหาเทคโนโลยีที่ทุกคนเข้าถึงได้” คำกล่าวของเจ้าของรายการคนใหม่ ซึ่งทำให้ผมต้องมานั่งคิดหนักว่าจะนำเนื้อหาแบบไหนไปอัดรายการวิทยุดี ที่ว่าจะเอาแบบเทคโนโลยีที่ผู้คนสัมผัสได้ แต่ห้ามเอ่ยชื่อแบรนด์หรือตัวสินค้าก็คงจะยากพิลึก สำหรับผมแล้วมันยากกว่าการจัดรายการทุกครั้ง เพราะทุกครั้งที่เตรียมเนื้อหาจะต้องพิจารณาแล้วพิจารณาอีกว่าเหมาะสมหรือไม่ สูงเกินไปมั๊ย เข้าใจยากเกินไปหรือเปล่า และลดละเรื่องของความเจ๋งของเนื้อหาหรือความเจ๋งของเทคโนโลยีไปบ้าง ~ ต้องอาศัยเวลาทำใจหน่อย T_T

มาเขียน Mobile HTML5 App กัน ตอน แสดงผลหน้าจอหลายขนาด

ผมมักจะเขียน HTML5 App แล้วทดสอบบน Tablet ซึ่งมีขนาดหน้าจอใหญ่โต 1280x720px ซึ่งมีพื้นที่เหลือเฟือในการแสดงผล แต่ถ้าหน้าจอเล็กๆ อย่าง 320px, 480px, 640px ล่ะจะทำอย่างไร? ซึ่งแน่นอนว่าการแสดงผล อย่างเช่น ภาพ ขนาดตัวอักษร ฯลฯ จะไม่เหมาะสม ตัวอย่างเช่น

จากภาพจะเห็นว่าเราอ่านการ์ตูน I am Petdo! ได้แค่ครึ่งเดียว ทีนี้ทำยังไงดี วิธีง่ายๆ คือการใช้ความสามารถของ CSS3 ครับ ใน CSS3 จะมีคำสั่งพิเศษชื่อว่า media ซึ่งคำสั่งนี้ใช้เพื่อกำหนดความเหมาะสมของ CSS ในแต่เหตุการณ์ เช่น หน้าจอมีขนาดเล็กบ้าง ใหญ่บ้าง เป็นต้น ทีนี้เราก็มากำหนด CSS ให้ I am Petdo! กันใหม่ เพิ่มคำสั่ง media เข้าไปดังนี้
@media screen and (min-width: 320px) {
img.imagefield {
width:280px;
height:auto;
}
}

@media screen and (min-width: 480px) {
img.imagefield {
width:400px;
height:auto;
}
}

@media screen and (min-width: 800px) {
img.imagefield {
width:563px;
height:auto;
}
}
จากโค้ดข้างต้น หากหน้าจอมีขนาดเล็ก 320px ให้ ภาพที่ใช้ class imagefield มีขนาดความกว้าง 280px ตามลำดับ เท่านี้คุณก็จะได้หน้าจอการแสดงผลที่ดูดีขึ้น ดังนี้


ลองเอาไปประยุกต์ใช้กันดูได้ครับ อ้อและอีกอย่างนึง อย่าลืมกด Like ให้ ThaiOpenSource นะครับ

มาเขียน Mobile HTML5 App กัน ตอน หน้าจอหลายขนาดทดสอบยังไง

นักพัฒนา Mobile Web หลายท่านมักจะมีเครื่องไม้เครื่องมืออย่าง Emulator, มือถือ, tablet หลากหลายขนาดเพื่อใช้ทดสอบว่า Mobile Web หรือ HTML5 App ที่พัฒนาขึ้นมานั้นแสดงผลในหน้าจอขนาดต่างๆ เป็นอย่างไร จะต้องแก้ไขหรือปรับปรุงในส่วนใดบ้างเพื่อให้การแสดงผลถูกต้องและลงตัวมาก ที่สุด ครั้งนี้จะมาแนะนำ Emulator บน Browser เพื่อที่จะช่วยทดสอบ HTML5 App ได้ง่ายมากขึ้น เครื่องมือนี้ชื่อ Ripple แห่งค่ายฮิปโปจิ๋ว (tinyhippos)

ripple จะเปลี่ยน Browser ของคุณให้กลายเป็น Mobile/Tablet Emulator พร้อมฟังก์ชั่นที่เชื่อมต่อกับ JavaScript Framwork ต่างๆ ไม่ว่าจะเป็น PhoneGap, WebWork, WebWork TabletOS, Mobile Web เป็นต้น คุณสามารถทดสอบ App ที่ใช้การเชื่อมต่อ Internet, GPS, Accelerometer ได้ง่ายๆ

สำหรับท่านที่สนใจก็ลองทดสอบดูได้ที่ http://ripple.tinyhippos.com ครับ

อัพเดท Android 4.0 ให้ Asus Transformer TF101

เมื่อวันเสาร์ที่ผ่านมา (25 กุมภาพันธ์) ตื่นขึ้นมาตอนเข้า เกิดเอะใจอะไรบางอย่างเลยเข้าเว็บ XDA Developer พบว่ามี ICS Rom แบบ Custom ออกมาเยอะมาก (เยอะจนผิดปกติ) ก็เลยคิดว่า ICS น่าจะมาแล้ว เลยลอง Update ผ่าน OTA ดู พบว่ามาแล้วจริงๆ ด้วยครับ ตอนนี้ผมใช้ Android 4.0.3 บน Asus Transformer เรียบร้อยแล้ว หากไม่นับ Tablet จีน Tablet ของ Asus ถือว่าเป็นค่ายแรกที่ใช้ Android 4.0 ICS ครับ 🙂 เอาภาพ Screenshot มาฝาก














 

มาใช้งาน dotCloud กัน

dotCloud เป็น Platform as a Services (PaaS) ซึ่งให้บริการ Application Stack ที่หลากหลายไม่ว่าเป็น Java, PHP, Python, Ruby อีกทั้งยังสนับสนุน Database อีกหลายตัว เช่น MySQL, MongoDB, PostgreSQL เป็นต้น สำหรับการใช้งานมีเครื่องมือ CLI ที่รองรับทั้ง Windows, Linux และ Mac

สำหรับวิธีการใช้งานก็ง่ายมาก ขั้นตอนมีดังนี้

  • สมัครสมาชิก dotCloud
  • ติดตั้ง Command Line Interface Client (CLI)
  • สร้าง App จาก CLI กำหนด platform ที่จะใช้ เช่น static html, php, ruby ฯลฯ
  • สั่ง Push Application ขึ้นไปที่ dotCloud

มาลองสร้าง PHP App กันดูครับ ให้คุณสมัครสมาชิกกับ dotCloud ให้เรียบร้อย จากนั้นเริ่มติดตั้ง CLI กันได้เลย ให้ติดตั้ง easy_install กันก่อน ดังนี้
sudo apt-get install python-setuptools
จากนั้นสั่งติดตั้ง CLI ดังนี้
sudo easy_install pip && sudo pip install dotcloud
เมื่อติดตั้งเสร็จคุณ คุณจะได้ CLI Client สำหรับใช้งานชื่อ dotcloud ให้คุณเรียกใช้คำสั่ง dotcloud ขึ้นมาดังนี้
dotcloud
โปรแกรมจะให้คุณกรอก API Key ให้คุณดู API Key ของคุณที่ http://www.dotcloud.com/account/settings หลังจากตั้งค่า API Key เรียบร้อยแล้ว ให้ลองสร้าง App กันครับ
ให้คุณสร้างไดเรคทอรี่สำหรับ App ของคุณก่อน เช่น hellophp เป็นต้น จากนั้นก็เข้าไปที่ไดเรคทอรีที่คุณสร้าง
mkdir hellophp
cd hellophp
จากนั้นให้คุณสร้างไฟล์ index.php ใส่โค้ดลงไปดังนี้
<?php phpinfo(); ?>
จากนั้นสร้าง Cloud App โดยใช้คำสั่ง
dotcloud create hellophp
จากนั้นสร้างไฟล์ dotcloud.yml (DotCloud Build File) เพื่อบอกให้ dotCloud เตรียม Application Platform ที่เราต้องการ เช่น ตอนนี้เราใช้ PHP ดังนั้น dotCloud จะต้องเตรียม instance ที่ติดตั้ง PHP ให้เรา เขียน DotCloud Build File ได้ดังนี้
www:
type: static
จากนั้นก็สั่งให้เอา App ของเราขึ้น dotCloud โดยใช้คำสั่ง dotcloud push ดังนี้
dotcloud push hellophp
จากนั้น dotCloud ก็จะติดตั้ง platform ที่เราต้องการและ sync ไฟล์ เมื่อ sync ไฟล์เสร็จ dotCloud จะแจ้ง public url ให้เราทราบ ดังนี้
Deployment finished. Your application is available at the following URLs
www: http://hellophp-anoochit.dotcloud.com/
ลองเข้า URL ตามที่ระบบแจ้งมาจะได้ผลลัพท์ดังนี้

ในส่วน Dashboard ของ dotCloud ยังให้ข้อมูลรายละเอียดการใช้งานของ App แต่ละตัวด้วย

สำหรับท่านที่สนใจลองดู Video เพิ่มเติมข้างล่าง สำหรับเอกสารคู่มือการใช้งานและ Tutorial ดูได้ที่หน้าเอกสารของเว็บ dotCloud ครับ

มาเขียน HTML5 App แบบ คลิ๊ก คลิ๊ก คลิ๊ก

ผมพอจะเข้าใจได้เลยว่าการเขียน HTML5 Application เป็นแนวทางอีกแนวทางหนึ่งในการเขียน Application บน Mobile ซึ่งต้องขอบคุณ Apple เพราะกระแสความก้าวล้ำทางด้านเทคโนโลยีของ Webkit ทำให้เกิดแรงผลักดันมาตรฐานที่ควรจะมีให้เกิดขึ้นอย่างรวดเร็ว ทั้ง JavaScript Engine, Local Storage, Local Database และอื่นๆ และอุปกรณ์อย่าง iPhone, iPad ก็รองรับ Mobile (Web) Application ได้อย่างลงตัว โดยการสร้าง Wedget ลงในอุปกรณ์ให้สามารถเรียกใช้ได้เหมือนกับ Application ตัวหนึ่งในเครื่อง จากการพัฒนาดังกล่าวจึงเกิดบริการใหม่ เพื่อช่วยให้นักพัฒนาซอฟต์แวร์และเจ้าของบริการสามารถสร้าง HTML5 App ได้อย่างง่ายๆ เรียกว่า อยากได้อะไร คลิ๊กเอาได้เลย ในครั้งนี้จะมาแนะนำ บริการ SaaS เพื่อช่วยสร้าง HTML5 App กัน 2 ตัวดังนี้
Widget Box
ตัวอย่างการใช้งาน Widget Box Mobile App สร้าง App การ์ตูน IamPetdo จาก RSS Feed

กำหนด Feed URL

กด Save เราก็ได้ HTML5 App มา 1 ตัวใน 3 ขั้นตอน

HTML5 App ที่สร้างขึ้นมาจะอยู่กับ Widget Box หากต้องการติดตั้งลงในอุปกรณ์ต่างๆ เช่น iPhone. iPad, มือถือ Android หรือ Tablet Android ต้องสมัครสมาชิกซึ่งมีค่าใช้จ่ายอยู่นิดหน่อย สำหรับท่านที่สนใจก็ลองไปใช้งานกันดูได้ที่ http://www.widgetbox.com
Tiggzi
Tiggzi (บริการเดิมชื่อ Tiggr) เป็นบริการสำหรับสร้าง Mobile Web และ Mobile App ที่น่าสนใจอีกตัวหนึ่ง ซึ่งตัวระบบให้คุณสามารถวาง Widget เพื่อกำหนดรูปแบบและหน้าตาของ Mobile App ของคุณได้ อีกทั้งยังสนับสนุนการเขียนโค้ดเพื่อควบคุม Widget เหล่านั้นได้อีกด้วย จะคล้ายกับการเขียนโปรแกรมจากเครื่องมือบนระบบปฏิบัติการทั่วไป แต่ตากกันตรงที่เราเขียนและพัฒนาบนเว็บแทน สำหรับ App ที่ได้สามารถใช้งานได้กับ iPhone, Android ได้เลย สำหรับท่านที่สนใจก็ลองทดสอบได้ที่ http://tiggzi.com ครับ

มาใช้งาน HP Cloud กัน

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

  • HP Cloud Compute
  • HP Object Storage

นอกจากนี้คุณยังบริหารจัดการผ่านทาง Web Management Console หรือใช้งานผ่าน REST APIs ได้อีกด้วย สำหรับท่านที่เปิดใช้งานจะได้รับ HP Compute 2 ชุด และ Object Storage 1 ชุด สำหรับท่านที่ต้องการ Activate เพื่อใช้งาน โปรดเตรียมบัตรเครดิต กรอกข้อมูล Payment Method ให้เรียบร้อยแล้วเปิดใช้งานได้เลย ข้อมูลเพิ่มเติมดูได้จาก Video ข้างล่าง

HP Cloud Services: Getting Started from HP Cloud on Vimeo.

มาเขียน Mobile HTML5 App กัน ตอน ท่อน้ำมหัศจรรย์

หลังจากที่ได้แนะนำแนวทางการเขียน HTML5 App และใช้เครื่องมือหลายตัวไปบ้างแล้ว ครั้งนี้ผมจะมาแนะนำเครื่องมือท่อน้ำสุดมหัศจรรย์ ชื่อเป็นทางการเรียกว่า Yahoo! Pipes เครื่องมือนี้ช่วยให้คุณตัดต่อ เชื่อมโยงข้อมูล ผสมข้อมูลต่างๆ ที่มาจากหลากหลายเว็บได้ และที่สำคัญสามารถส่งออกผลลัพท์ได้หลากหลายรูปแบบไม่ว่าจะเป็น RSS, JSON, KML และรูปแบบอื่นๆ

การใช้งาน Pipes ง่ายมากเพียงเลือกเครื่องมือให้เหมาะสมแลัวลากเส้นเชื่อมโยงข้อมูลตั้งค่า ตามต้องการจากนั้น Pipes ก็จะทำงานให้คุณพร้อมผลลัพท์ที่น่ามหัศจรรย์ จากตัวอย่างผมต้องการเชื่อมโยงข้อมูลจาก 3 เว็บไซต์เข้าด้วยกัน และใช้ keyword คำว่า Ubuntu ในการ filter ข้อมูลพร้อม เรียงลำดับเหตุการณ์ และหยิบเอาเฉพาะ 10 รายการล่าสุดมาใช้ เขียน Flow ได้ดังภาพ

เมื่อเชื่อมโยงข้อมูลต่างๆ เข้าด้วยกันได้เรียบร้อยแล้ว คุณจะได้หน้า Publish ของคุณขึ้นมาพร้อมลิงค์เพื่อ export ข้อมูลต่างๆ ที่สามารถใช้งานต่อได้ เช่น เพิ่ม Widget ลงใน Google, เพิ่ม Widget ลงใน Yahoo!, Export ข้อมูลเป็น RSS, JSON หรือแม้กระทั่งซอร์สโค้ดภาษา PHP 🙂

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

มาเขียน Mobile HTML5 App กัน ตอน การ์ตูนสุดสนุกแห่งยุค

ผมคลั่งการ์ตูนออนไลน์เรื่องหนึ่งมาก ถ้าคุณมีพฤติกรรมที่ออกจะดูแย่ๆ จนคนรอบข้างรับไม่ได้ คุณจะถูกขนานนามว่าเป็น “Petdo!” ใช่ครับ การ์ตูน I am Petdo! เป็นการ์ตูนสร้างสรรค์มากในยุคนี้ หากใครไม่ได้อ่านเชยมากๆ ครับ ในครั้งนี้ผมจะมายกตัวอย่างการเขียน HTML5 + jQuery + jQuery Mobile + YQL กัน เว็บไซต์การ์ตูน I am Petdo! มีช่องทางให้คุณอ่านการ์ตูนผ่านทาง RSS Feed ได้ ซึ่งคุณสามารถใช้ RSS reader ตัวไหนก็ได้ในการอ่านการ์ตูนเรื่องนี้ โดยไม่ต้องเข้าเว็บและเราก็สามารถเขียน HTML5 App ในการ Feed เนื้อหาจาก RSS ได้เช่นกัน เครื่องมือที่จะมาแนะนำเพิ่มเติมวันนี้คือ YQL
YQL หรือ Yahoo! Query Language เป็นเครื่องมือคล้ายกับคำสั่ง SQL ใช้ในการ query, filter, join ข้อมูลข้ามเว็บเซอร์วิส คุณสามารถใช้ YQL ในการสร้างชุดข้อมูลที่คุณต้องการได้ง่ายเลยทีเดียว

จากภาพจะเห็นได้ว่าเราสามารถใช้คำสั่ง SQL เพื่อ filter ข้อมูลจาก RSS Feed ได้ YQL มีคุณสมบัติอีกอย่างคือสามารถ แสดงผลลัพท์ในรูปแบบ XML หรือ JSON ได้ ในที่นี้เราจะใช้ผมลัพท์จาก JSON ส่งต่อให้ jQuery ประมวลผล คุณสามารถใช้ Query URL เอาไปใช้งานได้เลย ตัวอย่างเช่น
http://query.yahooapis.com/v1/public/yql?q=select%20title%20from%20rss%20where%20url%3D%22http%3A%2F%2Frss.news.yahoo.com%2Frss%2Ftopstories%22&format=json&diagnostics=true&callback=cbfunc
ผลลัพทที่ได้จะเป็นข้อมูลในรูปแบบ JSON เมื่อได้ข้อมูลมาแล้วก็เขียน jQuery ผ่านทาง jsfiddle เช่นเคย ปรับแต่ง CSS ตามใจชอบ

ตอนนี้เราก็ได้ jQuery ในส่วนที่จำนำไปใช้งานกันแล้ว จับใส่ jQuery Mobile อีกนิดหน่อยเราก็จะได้ HTML5 App สำหรับ Mobile กันแล้ว

มาเขียน Mobile HTML5 App กัน ตอน ภาพสวยใน Flickr

บริการคลังเก็บภาพถ่ายอย่าง Flickr มีช่องทางสำหรับนักพัฒนา App สามารถที่จะเรียกใช้งานได้ซึ่งมีมาตั้งนานแล้ว ผ่านทาง Flickr API ซึ่งแน่นอนว่าสามารถอัพโหลดภาพผ่านทาง API ได้ และดึงข้อมูลภาพเอามาแสดงผลได้เช่นกัน วิธีการก็ง่ายมากครับ

  1. ต้องสมัคร Flickr API กันก่อน
  2. เลือกช่างกล้องที่เราชื่นชอบ ผมชอบงานถ่ายภาพของนักพัฒนาซอฟต์แวร์ท่านหนึ่ง คือ คุณFordAntiTrust ครับ
  3. ดู Flickr API ที่เราสามารถเลือกใช้ได้ http://www.flickr.com/services/api

มีแค่นี้ครับ ผมเลือกใช้ Method ที่ชื่อว่า flickr.photosets.getPhotosค่าตัวแปรที่ต้องใช้งานกับ Method นี้คือ API_KEY และ PhotoSet ID ให้เราลองสร้าง REST Request เพื่อให้ได้ข้อมูลเล่นๆ บน Browser กันก่อน ดังนี้

http://api.flickr.com/services/rest/?&method=flickr.photosets.getPhotos&api_key=YOUR-KEY&photoset_id=YOUR-PHOTOSET-ID&format=json&jsoncallback=?

เปลี่ยนค่าตามค่าที่คุณต้องการ ก็จะได้ค่า JSON กลับมาแบบงงๆ อย่างนี้

jsonFlickrApi({"photoset":{"id":"72157626549802465", "primary":"5523106788", "owner":"14143570@N00", "ownername":"Ford AntiTrust",
"photo":[{"id":"5523106788", "secret":"ff8af2e14e", "server":"5057", "farm":6, "title":"dear - cu-cheer-66 (2)", "isprimary":"1"},
{"id":"5522518723", "secret":"b006460b92", "server":"5292", "farm":6, "title":"dear - cu-cheer-66 (6)", "isprimary":"0"},
{"id":"5522517811", "secret":"a3e3900d7f", "server":"5252", "farm":6, "title":"dear - cu-cheer-66 (4)", "isprimary":"0"},
{"id":"5522518261", "secret":"e4c4373a3f", "server":"5219", "farm":6, "title":"dear - cu-cheer-66 (5)", "isprimary":"0"},
"page":1, "per_page":500, "perpage":500, "pages":1, "total":"29"}, "stat":"ok"})

เรียกได้ว่าสุดมึน คำถามคือ “ภาพอยู่แห่งหนใด” แล้วจะเอามันออกมาโชว์ได้ยังไง? ต่อให้ Parse JSON ได้แลัวภาพอยู่ไหนอ้ะ T_T วิธีการแปลข้อมูลอยู่ที่ Flickr Photo Source URLs ซึ่งข้อมูลจะใช้ REST เช่นเคย ในการแสดงข้อมูลภาพ งงไหม REST ซ้อน REST ไม่ต้องสนใจก็ได้ครับ มันเป็นเรื่องของโครงสร้างการจัดการข้อมูล เอาเป็นว่าโครงสร้าง URL ที่เราจะใช้กันมีดังนี้

http://farm{farm-id}.staticflickr.com/{server-id}/{id}_{secret}_[mstzb].jpg

ค่าที่เราจะเอามาใช้จาก JSON ข้าต้นได้แก่ farm-id, server-id, id, secret และ option ภาพที่เราต้องการ แบ่งเป็น

  • s ภาพขนาด 75×75
  • t ภาพ thumbnail 100px
  • m ภาพขนาด 240px
  • z ภาพขนาดกลาง 640px
  • b ภาพขนาดใหญ่ 1024px
  • o ภาพต้นฉบับ

จากตัวอย่าง JSON ข้างต้น เราลองมาหาภาพแต่ละขนาดกันครับ
แทนค่าสมการกันดีกว่า http://farm6.staticflickr.com/5057/5523106788_ff8af2e14e_z.jpg เราจะได้ภาพดังนี้



เอาล่ะเริ่มมีกำลังใจกันแล้วใช่มั๊ยครับ เราก็ใช้ http://jsfiddle.net ในการเขียนโค้ดและทดสอบโค้ดกัน

เมื่อได้ทดสอบ jQuery Code และ CSS กันอย่างพอใจแล้ว ก็มาประกอบร่างกันใน jQuery Mobile แล้วไป Build ต่อโดยใช้ PhoneGap Build เราก็จะได้ HTML5 App สำหรับ Mobile ในค่ายต่างๆ ได้แล้วครับ ตัวอย่างพอหอมปากหอมคอ

คิดว่าน่าจะเป็นแนวทางในการพัฒนา HTML5 App ผนวกกับ APIs ของบริการต่างๆ บน Cloud ได้ครับ ตัวอย่างในครั้งต่อไปยังนึกไม่ออกครับ คิดว่าคงมีโอกาสมาเขียนอีกครับ 🙂