สรุปสั้นๆ งาน Microsoft Build 2013 keynote

เริ่มเวลา 9:00 ของวันที่ 26 มิถุนายน 56 ตามเวลาท้องถิ่น หรือ 23:00 ของวันที่ 26 มิถุนายน 56 ตามเวลาประเทศไทย

งาน Build เป็นงานของฝั่ง Microsoft ที่พูดถึงการพัฒนาซอฟต์แวร์ หรือทิศทางการพัฒนาด้าน IT จาก Platform ของ Microsoft โดยจัดที่ San Francisco

ในปีนี้ใน Keynote วันแรกได้พูดถึงหัวข้อหลักๆ ที่เก็บๆ จาก tweet เท่าที่จะสรุปได้คือ

  • Windows 8.1 preview (Windows 8.1 Preview: คำถามที่ถามบ่อย #ภาษาไทย)
  • The Windows 8.1 Preview is here!
  • Windows 8.1 Preview Product Guide for Developers
  • ในเดือนนี้จะมี Apps กว่า 100,000 บน Windows Store และ Apps อย่างเป็นทางการ (Official) จาก Facebook, Flipboard และ NFL Fantasy Football จะมาใน Windows 8 เร็วๆ นี้
  • Mail app ตัวใหม่บน Windows 8
  • Xbox Music หน้าตาใหม่ เพิ่มความสามารถ Radio บน Windows 8.1
  • SkyDrive app ตัวใหม่บน Windows 8.1
  • Picture editor บน Windows 8.1
  • Windows 8.1 สนับสนุน 3D printing มาในตัว
  • 2-in-1 tablet combination ของ Windows 8 เป็นสิ่งที่ตลาดต้องการ
  • Gestures เพียบ! Windows 8.1 คงต้องฝึกพอสมควร แต่ถ้าเป็น สะดวกมากจริงๆ
  • สรุป Start button บน Windows 8.1 คือปุ่มเรียก Start screen ไม่ใช่เรียก Start menu ตามที่หลายๆ คนอยากได้กัน
  • เพิ่ม “Booting into the desktop” เป็นค่าที่ตั้งได้เริ่มต้นโดยไม่ต้องเข้าหน้า Start screen ตลอดทุกครั้งที่บูทเข้าเครื่องใน Windows 8.1
  • ใน Windows 8.1 สามารถเปิด apps ได้หลายๆ monitors และ multitask ได้มาก app ขึ้น
  • เปิดตัว Visual Studio 2013 developer preview และ .NET Framework 4.5.1 developer preview
  • ใน Visual Studio 2013 รองรับ async debugging และเชื่อมต่อกับ Azure mobile service เพื่อพัฒนา app ได้ง่ายมากขึ้น
  • Web GL และ MPEG dash สนับสนุนบน Windows 8.1
  • สามารถใช้ Web GL ใน IE11 และใน Apps ได้
  • Windows 8.1 รองรับ “high-density displays” (full DPI support and scaling)
  • เปิดตัว Bing as a platform โดยชูโรงว่า Facebook Search, Yahoo Search และ Apple Siri ใช้ Bing
  • Windows 8.1 Maps app มาพร้อมกับ 3D Maps
  • Bing จะอยู่ใน Windows, Windows Phone และ Xbox แน่นอนว่านักพัฒนาทั่วไป ที่กำลังพัฒนา app จะใช้งานร่วมได้ด้วย โดยเปิดตัว Bing platform for developers
  • เปิดตัวมือถือ Windows phone 8 รุ่นใหม่ HTC 8XT และ Samsung ATIV S Neo
  • พูดถึงทิศทางของ Xbox ผ่านทาง Project Spark เป็นเรื่องของการใช้ Smart Glass บน Xbox One, Xbox 360 และ Windows 8 ในการเล่นเกมร่วมกัน ด้วยการใช้ remote rendering

ความโหดของงาน Build 2013 ปีนี้คือ ทุกคนในงานจะได้ Surface Pro พร้อม Type Cover และ Acer Iconia W3 ในงาน!!!

หัวข้อหลักๆ ตามนี้

  • Windows 8.1
  • Windows 8 app
  • Windows phone 8
  • Visual Studio 2013 และ .NET Framework 4.5.1
  • Bing platform
  • Xbox platform

ทิ้งท้าย “The future of Windows is very, very bright.” Ballmer

ข้อมูลบางส่วน และติดตามจาก Live from the Microsoft Build 2013 keynote

2013-06-26_000023

ลาก่อน MySQL สวัสดี MariaDB

จากข่าว “MySQL อาจไม่ใช่ซอฟต์แวร์เสรีอีกต่อไป” ทำให้ผมนั้นได้เวลาเปลี่ยนแปลงมาใช้งาน MariaDB แบบจริงจังเสียที เป็นการตัดสินใจที่คิดมานานแล้ว วางแผนมาพอสมควรแตไม่ได้ทำ

MariaDB คือ MySQL ที่ถูกนำมา fork ออกมาจากต้นสาย MySQL ที่ถูก Oracle ซื้อพ่วงไปกับ Sun และโดนดองไว้ไม่มีการพัฒนาที่มีทิศทางที่ชัดเจนมาสักพักใหญ่ๆ แล้ว

โดย Michael Widenius ซึ่งเป็นผู้ก่อตั้ง MySQL เดิม ได้ fork ตัวโครงการออกมาใหม่ได้สักพักใหญ่ๆ หลายปีแล้ว และทำงานภายในชื่อบริษัท Monty Program AB

สำหรับผมนั้นใช้งาน MySQL Server ที่ทำงานกับ blog นี้ที่เป็น MySQL 5.5 อยู่แล้ว การย้าย (migrate) จึงไม่มีอะไรยุ่งยาก เพราะ MariaDB ได้ชื่อว่ารองรับการทำงาน MySQL ได้เต็ม 100% จนได้ชื่อว่า “MariaDB is a binary drop in replacement for MySQL” เลยทีเดียว

ข้อมูลเบื้องต้นก่อนทำการติดตั้งและทำการย้าย

MariaDB นั้นมี 2 รุ่นคือ 5.5 เป็นรุ่น Stable version (GA) และ 10.0 ที่เป็นรุ่น Development version ก่อนติดตั้งเช็คดีๆ ก่อนนะครับ ซึ่งแน่นอนก่อนการย้าย backup ข้อมูลทั้งหมดไม่ว่าจะเป็น data และ user account ก่อนกันพลาดนะครับ

สิ่งแรกที่ต้องทำคือ ตั้งค่า Repositories (sources.list) ให้ MariaDB รู้จักใน APT Repositories เสียก่อน

โดยเข้าไปที่ https://downloads.mariadb.org/mariadb/repositories/

โดย Server ผมนั้นใช้ Distro ที่ชื่อ Ubuntu Server รุ่น 12.04 LTS ก็เลือกตามรายการ ตามด้วย MariaDB version 5.5 และเลือก Mirror เป็น National University of Singapore เพราะ VM Server ผมอยู่ใกล้ที่นั้นที่สุด เสร็จแล้วตัวเลือกก็จะสร้างคำแนะนำมาให้

ก็รันคำสั่งต่อ 2-3 ตัว

1. เพิ่ม sign key ของ MariaDB deb packages ลงไปก่อน

  1. sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

2. เพิ่ม apt-repository ลงไปใน sources.list

  1. sudo add-apt-repository 'deb http://download.nus.edu.sg/mirror/mariadb/repo/5.5/ubuntu precise main'

หรือจะเข้าไปแก้ไขไฟล์ /etc/apt/sources.list เองก็ได้ โดยการใส่ข้อมูลด้านล่างนี้ลงไป

  1. # MariaDB 5.5 repository list - created 2013-06-19 04:24 UTC
  2. # http://mariadb.org/mariadb/repositories/
  3. deb http://download.nus.edu.sg/mirror/mariadb/repo/5.5/ubuntu precise main
  4. deb-src http://download.nus.edu.sg/mirror/mariadb/repo/5.5/ubuntu precise main

3. สั่งดึงข้อมูลจาก MariaDB repository มาก่อน

  1. sudo apt-get update

4. ติดตั้ง mariadb-server

  1. sudo apt-get install mariadb-server

5. คำสั่งก็จะมีแสดงรายการว่ามีการเอาอะไรออก และใส่อะไรเพิ่มเติมลงมาบ้าง

  1. The following extra packages will be installed:
  2. libmariadbclient18 libmysqlclient18 mariadb-client-5.5
  3. mariadb-client-core-5.5 mariadb-common mariadb-server-5.5
  4. mariadb-server-core-5.5 mysql-common
  5.  
  6. Suggested packages:
  7. tinyca mailx mariadb-test
  8.  
  9. The following packages will be REMOVED:
  10. mysql-client-5.5 mysql-client-core-5.5 mysql-server mysql-server-5.5
  11. mysql-server-core-5.5
  12.  
  13. The following NEW packages will be installed:
  14. libmariadbclient18 mariadb-client mariadb-client-5.5 mariadb-client-core-5.5
  15. mariadb-common mariadb-server mariadb-server-5.5 mariadb-server-core-5.5
  16.  
  17. The following packages will be upgraded:
  18. libmysqlclient18 mysql-common

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

ก็ตอบ Y เพื่อยืนยันการติดตั้ง

รอสักพักไม่นานเกินไป ทุกอย่างก็เรียบร้อย

  • MySQL จะถูกหยุดการทำงาน และถูกถอนการติดตั้ง แต่ข้อมูลในฐานข้อมูลยังอยู่ (แต่แนะนำให้ backup ไว้กันพลาด)
  • ตัว MariaDB เมื่อติดตั้งเสร็จจะให้ตั้งรหัสผ่านของ root ใหม่อีกครั้ง เพื่อใช้ในการทำงานร่วมกับ MariaDB
  • MariaDB จะทำการตรวจสอบไฟล์ ตารางต่างๆ และฐานข้อมูลทั้งหมดเพื่อทำการย้ายและอัพเกรด
  • เมื่อ MariaDB เริ่มรันตัวเองขึ้นมาจะบอกว่าทุกอย่างทำงานได้ครบ 100% หรือไม่ ต้องปรับแต่ไฟล์ /etc/mysql/my.cnf อะไรเพิ่มเติมหรือเปล่า

ตรวจสอบด้วย mysql -v จะขึ้นว่า

  1. Server version: 5.5.31-MariaDB-1~precise mariadb.org binary distribution
  2.  
  3. Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

จากการย้ายครั้งนี้ไม่ต้องใช้ข้อมูลที่ backup ไว้แต่อย่างใด ตัวคำสั่งจะถอนการติดตั้ง MySQL และติดตั้ง MariaDB ลงไป ตัว MariaDB จะย้าย และทำตัวเป็น MySQL แทนที่ทันที port ที่เชื่อมต่อก็ 3306, ไฟล์ config และ path ต่างๆ ทั้งหมด รวมไปถึงคำสั่งต่างๆ ยังใช้ mysql command เดิมทั้งหมด

สำหรับการเชื่อมต่อของ PHP กับ MariaDB นั้น ทำงานได้ผ่าน mysqlnd extension ตัวเดิมๆ ได้ทันที

ตอนนี้ blog ที่ท่านอ่านอยู่นี้ก็ใช้งานผ่าน PHP 5.4 และฐานข้อมูล MariaDB เชื่อมต่อกับ WordPress ตัวล่าสุด และทำงานได้อย่างดีครับ

url-attack-on-titan

การมาของ iOS 7 หลายๆ แอพอาจงานเข้า!

นั่งอ่าน iOS 7 UI Transition Guide, Designing for iOS 7 และ UIKit User Interface Catalog ของ iOS 7 แล้วต้องบอกสั้นๆ ว่า “ทำเอพใหม่อาจง่ายกว่ามั้ง” จริงๆ ผมถืองานพัฒนาตัว iOS App ไว้อยู่ตัวนึง และที่กำลังคิดว่าจะออกอีกหลายตัว (ผมมี account ตัว iOS Developer และเป็นคนสั่งเค้าทำอีกทีมากกว่า) แต่ดูท่าคงต้องได้รื้อทำหน้าตาใหม่ให้สอดคล้องกับแบบนี้ด้วย แต่ดีว่าไม่มากนัก เพราะใช้ Native UI เป็นหลัก ><~

สำหรับหน้าตาคงไม่เอามาโพสซ้ำ หาได้ทั่วไปตามเว็บข่าวต่างๆ ค้น Google หน้าจะเจอ

โดยผมขอขยายความของปัญหาจริงๆ นั้นแบ่งเป็น 3 ส่วนหลักๆ

  1. การเปลี่ยนตัวควบคุม (Control UI) เป็นปัญหาในการออกแบบหน้าตาให้สอดคล้องกับ iOS 7 ในแอพตัวเก่าๆ โดยปัญหามักจะเป็นพวกแอพที่สร้างตัวควบคุมและหน้าตาของ UI ที่ไม่ได้ใช้ชุด UI แบบ Native หรือใช้ปนๆ กัน จะมีปัญหาด้านความต่อเนื่องสูงมาก
  2. แนวทางออกแบบในการใช้ตัวอักษร (font) ปัญหาเรื่องของ system font ที่มีการเปลี่ยนแปลง โดยปัญหาหลักคือ spacing ระหว่างตัวอักษรของ system font ใน iOS 7 ที่อาจจะมีปัญหากับแอพเก่าๆ ทุกตัวที่ใช้การแสดงผลชุด label ที่ใส่ข้อมูลพอดีกับขอบของแอพ ซึ่งอาจทำให้แอพต่างๆ ต้องทำ auto switch theme (layout) เพื่อทำให้การแสดงผลสอดคล้องกับ iOS 7 และตัวก่อน iOS 7 ไม่งั้นงานเข้ากันทั่วหน้าแน่ เพราะคำและกลุ่มคำจะตกขอบตัว label ซึ่งแน่นอนว่าคนจะด่าแอพเหล่านั้นกันทั่วหน้าแน่ๆ (ไม่ด่า Apple หรอก ลอยตัวเหนือปัญหาแน่ๆ)
  3. ในส่วนของ transition และ motion design อาจต้องเลี่ยงการใช้ gesture ชุดเดียวกับ system gesture บางส่วน เช่น ปัดนิ้วจากล่างขึ้นบนเพื่อเรียก Control Center หรือปัดในทิศทางอื่นๆ ที่เป็น system gesture ตัวใหม่ๆ ในอนาคต การพลิบและการเลื่อนเปลี่ยน App Page ไปมา อาจต้องไล่กำหนดใหม่เพื่อให้สอดคล้องกับ Control UI และรูปแบบ gesture ด้วย

โดยทั้งหมดทั้งหมดใน 3 ส่วนนี้ต้องมานั่งแก้ไขกันอีกเยอะแน่ๆ ครับ (ยังมีอะไรด้านหลังอีกหลายส่วนที่คาดว่าอาจมีการปรับใหม่อีกหลายรอบ) ซึ่งตอนนี้สำหรับนักพัฒนาใน iOS 7 และคนที่ดูแลโครงการพัฒนา App บน iOS คงต้องไล่อ่านคำแนะนำ UX/UI บน iOS ในหน้า developer site ของ Apple แล้วเอามาวางแผนแก้ไขให้แสดงผลได้อย่างถูกต้องใหม่ ซึ่งหากไม่ทำแบบนั้น จะทำให้ UX/UI ของแอพใน iOS 7 มีปัญหาหนักเมื่อเอาแอพจากตัวเก่าๆ ที่ไม่ได้ปรับแต่งการแสดงบน iOS 7 มาใช้งานครับ

เริ่มต้นเขียนโปรแกรมง่ายๆ กับ QBASIC สำหรับคนไม่เป็นมาก่อน

เป็น slide สอนน้องๆ ปี 1 ตอนเป็น TA ช่วยอาจารย์สอนอยู่ที่มหาลัย (เมื่อเกือบๆ 7 ปีก่อน) ใครเรียนเกี่ยวกับคอมพิวเตอร์ปี 2-4 แล้วอ่านไม่เข้าใจพิจารณาตัวเองได้แล้วนะครับ เพราะ slide นี้สอนเด็กคณะแพทย์, สหเวช, เภสัช, เกษตร ฯลฯ อีกเยอะที่ไม่เกี่ยวกับคอมแล้วเค้าทำ Lab ภาคปฏิบัติและทำข้อสอบได้มาแล้ว (อย่าอ้างว่าเขียนไม่ได้ อาจารย์ไม่สอนนะเด็กภาคคอมฯ)

แก้ไข “call_user_func_array() expects parameter 1 to be a valid callback, non-static method XXX:init() should not be called statically” ใน plugin “Jetpack for WordPress”

จากปัญหา

The following errors were reported: call_user_func_array() expects parameter 1 to be a valid callback, non-static method xxx::init() should not be called statically

ใน plugin “Jetpack for WordPress” ซึ่งเกิดจากการเขียนโค้ดไม่ตรงกับ Strict standards ใน PHP ที่อยู่ๆ ก็มีการเขียนไป call ตัว static method ใน method ที่ไม่ใช่ static ทำให้เกิดข้อผิดพลาดดังกล่าว

ปัญหานี้จะเกิดกับ Class ของ module ใน plugins “Jetpack for WordPress” ทั้งหมด 4 ตัว (ณ ตอนนี้ที่ไล่หาดู) โดยมี Class ดังต่อไปนี้

  • Jetpack_Notifications
  • Jetpack_Post_By_Email
  • Jetpack_Subscriptions
  • Jetpack_Likes

การแก้ไขก็ง่ายๆ ไม่มีอะไรซับซ้อน (ถ้าเข้าใจ)

โดยเพิ่ม “public static” ไปหน้า function &init() ให้เป็น public static function &init() ในไฟล์ subscriptions.php, post-by-email.php, notes.php และ likes.php ซึ่งอยู่ใน wp-content/plugins/jetpack/modules

เพียงแค่นี้ก็จบปัญหาครับ