เรื่องเล่าของ Windows Phone 8 ภาคคนพัฒนาแอพ

นั่งอ่านเรื่อง Windows Phone 8 ในเชิงการพัฒนาแอพบนนี้ โดยศึกษามา 3-4 วัน เพราะสมัครเป็น Windows Phone ISV เมื่อวันเสาร์ที่ผ่านมา

ผมขอสรุปคราวๆ ตามนี้

Windows Phone 8 (codename ชื่อ Apollo) เป็นรุ่นที่ใช้ Windows NT kernel ซึ่งเป็ย Kernel ชนิดเดียวกับ Windows 2000 (NT 5.0), XP (NT 5.1), Vista (NT 6.0) และ 7 (NT 6.1) แต่ปรับปรุงให้เล็กลงมากๆ และได้ใช้ core components ระบบที่แชร์การพัฒนาร่วมกับ Windows 8 โดยเอามาแทนที่ Windows CE Kernel ที่อยู่ใน Windows Mobile และ Windows Phone 7, 7.5 และ 7.8 ที่มีอยู่ตอนนี้ พูดง่ายๆ คือล้างไพ่ใหม่หมด จริงๆ ก็เสี่ยงมากนะ แต่คงต้องทำ ซึ่งเป็นวิธีคิดเดียวกับที่ Apple ทำ ก็คือ iOS ใช้ OS X Kernel ตั้งแต่แรก

จากการที่ใช้ NT Kernel ทำให้มันรองรับ multi-core CPUs มากถึง 64 cores ตั้งแต่เริ่มต้น (โหดสัส!!!)

ในตอนนนี้ยินยันว่ารองรับจอภาพ 3 ขนาดเท่านั้น คือ WVGA 800×480 15:9,WXGA 1280×768 15:9 และ HD 720p 1280×720 16:9 ทำให้การออกแบบ Apps จำกัดเพียงเท่านั้น ถ้าใหญ่กว่านี้จะถูกผนักให้ไปพัฒนาบน Windows RT หรือ Windows 8 Apps แทน โดย Windows 8 Apps รองรับการแสดงผล 2560×1440 pixel บนจอภาพ 27"!!!

โดยจากที่ไล่ดู conponents/api ส่วนใหญ่สามารถ port ตัว Windows 8 apps มา Windows Phone 8 ด้วย code behind ในบางส่วน (ออกแบบดีๆ ทำได้เลย) แต่เสียดาย Windows Phone 8 ไม่มี WinJS เลยลำบากหน่อย ถ้าใช้ผ่าน WebClient บน VB.NET แทน คือจะเขียนแบบ HTML5, CSS3 และ JavaScript แบบ Windows 8 Apps ล้วนๆ มันทำไม่ได้ต้องใช้ C++, C# หรือ VB.NET เขียน หรือถ้าใช้ติดต่อเว็บเยอะๆ ทำ Web View ก็ใช้ WebBrowser Control มาใส่ ถ้าจะติดต่ออะไรยากๆ เขียน JavaScript ผ่าน WinJS ไม่ได้ ต้องผ่าน WebBrowser.ScriptNotify Event และ WebBrowser.InvokeScript Method เพื่อส่งข้อมูลระหว่าง WebBrowser Control กับ VB.NET ที่เป็น Base Apps เพื่อให้มันไปทำงานต่อกับ H/W หรือ Call Network บางส่วนแทน ><" (กว่าจะหาวิธีได้)

ตัว Windows Phone 8 มี Internet Explorer 10 ที่เร็วมาก ไม่คิดว่ามันจะเร็วได้ขนาดนี้ มันความรู้สึกเดียวกับบน Windows 8 เลย คือกดปุ๊บมาปั้บ แบบร้องเฮ้ย! เปิด IE10 เร็วกว่า Chrome เป็นไปได้!

ระบบ Background multitasking อันนี้ประหยัดแบตด้วยเท่าที่เล่นมา ข้อเสียรู้สึกมันจะไม่ realtime ต้องรันเป็น schedule/polling เอา ถ้าอยาก realtime ต้องใช้ push services แทน (ต้องต่อ internet ร่วมด้วย) อันนี้จากที่นั่งไล่ระบบมานะ ผมยังไม่ได้ดูเยอะ เพราะยังไม่ได้เล่นอะไรขนาดนั้น

[เพิ่มเติม] ผมพัฒนา Project บน Project ที่ใช้ภาษา VB.NET + HTML5 ในการพัฒนา Apps เป็นหลัก แต่จะใช้ C++ หรือ C# พัฒนาร่วมกับ HTML5 ก็ทำได้ (แต่ต้องเลือกอย่างใดอย่างหนึ่งเวลาสร้าง Project)

 

ไม่รู้จะอธิบายยังไง? “สิ่งที่ควรจะมีในใบเสนอราคาตอนรับทำเว็บ”

จากทวีตที่ได้ทวีตไป

ผมอยากทำเว็บแนว Facebook แต่ผมมีงบ 50,000 บาท คุณพอช่วยผมได้ไหม" #อยากเอาหัวโขกข้างฝาตาย ><"

คือถ้าคุณต้องการทำเว็บแนว Social Network หรือจริงๆ ก็อะไรที่มีคนเข้าเยอะๆ หลักหมื่นหรือแสนคนต่อวันขึ้นไป มันไม่ใช่แค่คุณมีเว็บที่เขียนด้วยภาษาโปรแกรมมิ่งอย่างเดียวแล้วจบนะ มันมีเรื่องของการออกแบบหน้าตาของเว็บ (ซึ่งหลังๆ มืออาชีพในสายงานนี้มักจะคิดราคาแยกต่างหากกันอยู่แล้ว) และระบบ Server/Infra ที่มารองรับการใช้งานตัวเว็บซึ่งอยู่เบื้องหลังอยู่อีก
โดยต้องบอกก่อนเลยว่า ยิ่งคนเข้าเว็บที่คุณสร้างขึ้นมาเยอะเท่าไหร่ คุณก็ต้องจ่ายออกไปเป็นค่าระบบที่เอามารองรับการเข้าเว็บมากขึ้นไปด้วย นี่ยังไม่รวมค่า b/w ที่คุณต้องจ่ายให้ IDC ด้วยนะ เพราะถ้าคุณฝากตัวระบบไว้ในประเทศไทย link ระหว่างประเทศของคุณจะมีค่ามากๆ โดยราคาหลัก 1 Mbps อยู่ที่หลักหมื่นบาทหรือหลายหมื่นต่อเดือน (Link ของ IDC ต่อ inter connection)
นี่ยังไม่รวมสิ่งที่ผมมักผมเจอบ่อยๆ กับคนที่อยากได้เว็บไซต์เป็นของตัวเอง แต่ไม่ทราบว่าต้องมีการจดชื่อเว็บ (Domain Name) และพื้นที่สำหรับฝากไฟล์เว็บที่จัดทำขึ้น (Web Hosting) ซึ่งมีค่าใช้ย้ายแบบเช่าใช้งานเป็นรายปี (หรือรายเดือน) ซึ่งเป็นราคาที่แยกต่างหากจากค่าเขียนระบบและงานออกแบบหน้าเว็บอีกด้วยนะ

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

จากที่บอกไป คงพอทราบภาพใหญ่ๆ แล้วว่าปรกติทำเว็บ 1 เว็บเนี่ยเรามีปัจจัยอะไรบ้าง (มันเยอะนะ แต่อันนี้ผมเอาแค่หลักๆ พอ)

แล้วเวลาผมเสนองานต่างๆ ผมคิดโครงสร้างและแบ่งส่วนงานในการเสนอราคาเป็น checklist ดังต่อไปนี้

  1. Data ETL.
    เป็นค่าใช้จ่ายในการกรอกข้อมูลใหม่ หรือการแปลงข้อมูลเข้าระบบจากระบบหนึ่งมาที่ระบบที่พัฒนาใหม่ และรวมถึงการจัดระเบียบข้อมูลที่ลูกค้าส่งมาแล้วใส่ลงในระบบ อันนี้บางครั้งเราก็ไม่แน่ใจว่ามีข้อมูลตั้งต้นเยอะแค่ไหน บางครั้งเจอข้อมูลจำนวนมากๆ จนต้องจ้างคนมาช่วยใส่ข้อมูลให้ก็มี เพราะฉะนั้นต้องคิดถึงตรงส่วนนี้ไว้
  2. Translate UI
    กรณีที่ระบบมีหลายภาษา ก็ต้องมีการแปลหรือจ้างคนมาแปล และในหน้า UI ก็ต้องมาไล่แก้ไขภาษากันทุกๆ String ซึ่งใช้เวลาอยู่พอสมควร
  3. Theme and CSS Layout Design
    งานออกแบบหน้าเว็บและการตัดหน้ากราฟฟิกต่างๆ ของเว็บ โดยอาจจะมีราคา Font ที่ใช้ในการทำ Theme และราคาของรูปภาพต่างๆ ที่นำมาใช้ในตัวเว็บใส่เสนอมาด้วย ซึ่งบางภาพอาจจำเป็นต้องซื้อจาก Stock Photo ต่างๆ ซึ่งทั้งราคาของ Font และ Stock Photo นั้นจะถูกหรือแพงขึ้นอยู่กับการนำไปใช้ในสื่อใดบ้าง และในส่วนรูปภาพก็ราคาตามขนาดของรูปภาพและระยะเวลาในการนำไปใช้ (ในกรณีที่ไม่ได้ซื้อขาดมาเลย)
  4. General Implement
    การ Implement ระบบ ถ้ามีการ Custom ก็เพิ่มเป็น 3.1 – 3.n ไป แต้ถ้าแยกจนเป็นระบบใหม่ ก็เป็นข้อใหญ่ 4. – N. ไปซึ่งการแก้ไขงานในส่วนนี้ก็ต้องคิดเป็นราย issue ไป รวมไปถึงการปรับเพิ่ม-ลดระยะเวลาของงานนั้น ต้องตามความเหมาะสมในการแก้ไขงาน โดยการแก้ไขงานแต่ละครั้งต้องมีขอบเขตชัดเจนและมีจำนวนครั้งจำกัดหรือกำหนดระยะเวลาในการรอการ feedback เพื่อปิด issue ไม่งั้นเจอลูกค้าลากยาวจนลืม และเป็นการกำหนดกรอบเวลาให้ลูกค้าด้วยว่าต้องใส่ใจในการส่ง feedback กลับมา
  5. Domain Name
    ชื่อเว็บ ถ้ามีอยู่แล้วก็ไม่ได้คิดเงินเพิ่ม อะไร นอกจากลูกค้าจะมีเรื่องการย้าย หรือเรื่อง support อื่นๆ ถ้าไม่ได้เยอะก็แถมๆ ไป แต่ถ้าต้องดำเนินเรื่อง หรือย้ายมาให้เราดูแลก็คิดเงินไปตามเนื้อผ้า
  6. Web Hosting
    หรืออาจจะเป็น Dedicated server, Colocation server or Cloud server อันนี้ปรกติตอนแรกก็ต้องดู scale เล็กกันก่อน แล้วค่อยไปเล่น scale ใหญ่ ขึ้นอยู่กับวัตถุประสงค์ของงาน
  7. Training & Document
    ค่าทำเอกสารคู่มือ และอบรบการใช้งานต่างๆ ตรงนี้ต้องคิด เพราะมีค่าเดินทางและค่าสอนด้วย จำไว้เสมอค่าทำระบบไม่รวมค่าทำเอกสารครับ ไม่งั้นคุณต้องใช้เวลาทำเอกสารพอๆ กับทำระบบกันเลยทีเดียว (ยิ่งมีการแก้ไขระบบก็ต้องกลับมาแก้เอกสารด้วย)
  8. Maintenance
    ค่าดูแลและแก้ไขข้อผิดพลาดของระบบ ปรกติผมจะเน้นเรื่อง bug และ security เป็นหลัก ตรงนี้คิดเป็นรายปี ซึ่งไม่เกี่ยวกับ new feature ที่มันมาเพิ่มในข้อ 3. ด้านบน ตรงนี้ลูกค้าต้องจ่ายไม่อย่างนั้นก็ต้อง support ตัวเองไปหลังจากที่ระบบขึ้นไปแล้ว โดยปรกติผม Maintenance ให้แบบยังไม่คิดค่าใช้จ่ายในระยะเวลาหนึ่งเท่านั้น โดยเป็นช่วงหลังจากส่งมอบงานแล้วขั้นต่ำ 1 เดือน สูงสุด 3 เดือน

อันนี้คือคราวๆ ที่ผมคิดไว้นะ ซึ่งจะเห็นว่าจะมีครบตั้งแต่ input, process, output และ maintenance ส่วนตัวแล้วคิดว่าครอบคลุมในสิ่งที่ลูกค้าส่วนใหญ่ที่รับๆ มา และบางอย่างเป็นสิ่งลูกค้านึกไม่ถึง ซึ่งต้องบอกก่อนเลยว่า บางอย่างไม่คิดเนี่ยขาดทุนแน่ๆ ครับ

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

 

Zend Framework 2.0 ออกตัว Stable แล้ว!

หลังจากที่ Zend Framework ออก version 1.0 ออกมาเมื่อปี 2007 ผ่านมา 5 ปี วันนี้ก็ได้เวลาของ version 2.0 เสียที จาก Zend Framework 2.0.0 STABLE Released! และ Changelog: 2.0.0 ผมสรุปสั้นๆ ตามนี้

ใน Zend Framework 2 มีทีมพัฒนาจาก Google, Microsoft, StrikeIron และ partner ต่างๆ มากมายเข้าร่วมพัฒนาเพื่อสร้าง API ติดต่อกับ Web Services ของตัวเองให้ดีมากขึ้น

การเปลี่ยนแปลงใน Zend Framework 2 นั้นมีดังต่อไปนี้

  • สนับสนุน PHP 5.3 ขึ้นไป เพราะใช้ namely namespaces, late static binding, lambda functions และ closures มาพัฒนา เพราะฉะนั้นได้เวลาเรียนรู้กันแล้วครับ (จริงๆ มันควรจะเริ่มกันนานแล้วนะ)
  • 100% Object-oriented code และ Component designed (dependencies on other component) ตอนนี้แยกเดี่ยวๆ ได้ดีมากขึ้น
  • รองรับ Pyrus, Composer, PHPUnit และ Travis CI เพื่อช่วยพัฒนาตัวเว็บ

มี Key Feature ส่วนของ Component ใหม่คือ

  • ModuleManager
    This new module system is designed with flexibility, simplicity, and re-usability in mind
  • ServiceManager
    The Service Locator is a service/object locator, tasked with retrieving other objects.
  • EventManager
    Component designed for the following use cases
    – Implementing simple subject/observer patterns.
    – Implementing Aspect-Oriented designs.
    – Implementing event-driven architectures.

ได้เวลาลองของใหม่แล้วครับพี่น้อง!!!!

Read more

 

เมื่อ Web/Windows Developer จะกระแดะไปทำ iOS App ชีวิตมันก็ไม่ง่าย

เมื่อวันเสาร์ที่ผ่านมาไปงาน Bangkok Adobe Camp ได้พบทางอีกทางที่น่าจะโอเคสำหรับคนใช้ Windows แต่อยากทำ App บน iOS แน่นอนว่ามันต้องทำด้วย HTML5 + jQuery Mobile สิ่งที่ต้องการไม่มีอะไรมากมาย ให้มันทำงานได้บนนั้นและ call พวก native api ทั่วๆ ไปได้ เช่นพวกกล้องถ่ายรูป ฯลฯ พวก sync data ต่างๆ

ซึ่งผมก็รู้จักกับ Build.PhoneGap.com มาได้สักพักใหญ่ๆ แล้ว แต่ไม่ทราบว่ามัน Compile in the Cloud ได้ เพราะจำได้ตอนที่ได้ลอง PhoneGap ตอนแรกผิดหวังมารอบแล้ว เพราะว่ามันไม่สามารถ build บน Windows ให้เป็น ipa ได้ เพราะขาด SDK ของ iOS นั้นเอง

แต่เมื่อวันเสาร์พอทราบ ผมก็นั่งๆ ลองๆ หาข้อมูลต่อไป ซึ่งสุดท้ายแล้วการจะ Build ตัว iOS App บน Build.PhoneGap.com ต้องใช้ Signature Certificates ของ Apple ด้วย สุดท้ายวันอาทิตย์ตอนดึกๆ ก็เลยสมัคร Apple iOS Developer ไปซะเลย หมดไป $99 ซะอย่างงั้น (นี่มันลองของจริง เสียเงินแพงมาก!!!)

พอสมัครเสร็จรอ confirm อีเมล ตอนเช้ามาก็ได้ลองของ สิ่งที่ไม่คาดคิดก็เกิดขึ้น ขั้นตอนการสร้าง Certificates บางตัว ต้องใช้ Keychain Access บนเครื่อง Mac …. T_T

ผมก็เลยไปยืมเครื่องพี่ที่ทำงานเค้าทำให้แทน ขั้นตอนมันก็มีประมาณนี้

  • ไป generate ตัว Certificate Signing Request จาก Keychain Access บนเครื่อง Mac ก่อน เสร็จแล้วไป submit ในเว็บ Apple ที่ iOS Provisioning Portal เมนู Certificates
  • รอสักพักจะได้ developer_identity.cer ออกมา แล้วให้ import cert ตอนนี้เข้าเข้า Keychain Access แล้ว Export เป็น Certificates .P12
  • เสร็จแล้วกลับไปที่ เว็บ Apple ที่ iOS Provisioning Portal ก่อนหน้านี้
  • สร้าง Profile ของ Devices
  • สร้าง App ID จาก App IDs
  • สุดท้ายสร้าง Provisioning Profiles เพื่อให้ได้ mobileprovision ออกมา
  • แล้วเอาทั้ง Certificates .P12 และ mobileprovision จากเว็บ Apple ที่ iOS Provisioning Portal มา submit ที่ Build.Phonegap.com

พอได้ Certificates .P12 และ mobileprovision แล้วอะไรก็ไม่ยากแล้วครับ ^^/

เดี่ยวขอเวลาไปลองเล่นสักแป็บ ^^

 

วิถีแห่ง Developer vs Photographer #BCBK

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

สำหรับเรื่องอื่นๆ ที่ไม่กล่าวถึงใน blog นี้ถือว่า exclusive content ใน session แล้วกันนะครับ ;P

Developer

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

Photographer

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

ชมภาพผลงานผมที่ www.flickr.com/photos/fordantitrust/collections/

ทิ้งท้าย

Open your mind, make fun with your photos