การมาของ 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 มาใช้งานครับ

คำตอบเบื้องต้นของ "ใน iOS ที่บางทีเปิดใน Chat ข้อความมาแล้วแต่ใน Notification ไม่เตือนนี่มันคืออะไรครับ?"

เจอคำถามว่า “ใน iOS ที่บางทีเปิดใน Chat ข้อความมาแล้วแต่ใน Notification ไม่เตือนนี่มันคืออะไรครับ?”

ต้องอธิบายอย่างนี้ก่อนว่า ใน Modern Mobile OS สมัยนี้ตัว OS มีระบบช่วย App ทำงานด้านหลังได้โดยที่ App มันโดน OS kill ตัว process ไป โดยหลักๆ มี 2 ส่วนคือ Task Schedule กับ Notification ครับ

  1. ตัว Notification เป็นตัวช่วยให้ App เหมือนทำงาน แต่จริงๆ มันทำงานฝั่ง server แล้ววิ่งมาที่ client เพื่อบอก user ให้มาเปิดตัว App แล้ววิ่งไปที่ข้อมูลนั้นๆ โดยอาจจะโหลดข้อมูลมาพร้อมๆ กับตอนเปิด App กลับมาใหม่
  2. ตัว Task Schedule จะปลุกตัว App มาทำงานอาจจะทุกๆ 30 นาที แต่มีเวลาจำกัดให้ทำงานเพียง 10 วินาที อะไรแบบนั้น เพื่อใช้ในการโหลดข้อมูลมารอไว้ ฯลฯ เป็นการทำงานฝั่ง client ที่อาจจะวิ่งไปหา server

เหตุที่ใช้วิธีนี้กันเพราะทำให้ตัวระบบประหยัดพลังงานมากที่สุดเท่าที่ยังทำได้ครับ

ทีนี้ถ้าเปิด Chat แล้วข้อความมาแต่ Notification ไม่มา คงเป็นส่วนของ Notification มีปัญหาไม่ส่ง push มา (อาจจะเพราะ Server ส่งข้อมูลกลับมา Client แล้วไม่เจอ หรือมีปัญหา ฯลฯ) แต่ Task Schedule ยังทำงานอยู่มันเลยโหลดข้อมูลมาได้

อันนี้เป็นการเช็คปัญหาเบื้องต้นนะครับ อาจจะมีรายละเอียดปลึกย่อยแตกต่างไปแต่ละ platform ครับ ;)

เมื่อ Linux OS Virtual Machinces บน Windows Azure ไม่มี SWAP Partition แก้ไขยังไง?

โดยปรกติแล้ว ถ้าเราลง Linux โดยทั่วไปจะมีการตั้ง SWAP Partition ไว้เป็นปรกติอยู่แล้ว อย่างเช่นตัวอย่างที่ผมเอามาโพสก็คือ Ubuntu Server 12.04.2 LTS มีการติดตั้ง SWAP ไว้อยู่

การตรวจสอบทำได้ด้วยการใช้คำสั่ง shell ด้านล่าง ซึ่งจะได้รายการ SWAP ออกมาว่ามีอยู่หรือไม่ 

ford@ns1:~$ swapon –s

2013-03-02_190758

แต่ถ้าเป็นบน Cloud นั้น ตัว Image ของ Linux OS จะถูกปรับแต่งบางส่วนเพื่อไม่ให้สร้าง SWAP พวกนี้ ด้วยเหตุผลด้านพื้นที่ที่ต้องจองไว้และความไม่จำเป็นโดยทั่วไปของ Cloud อยู่แล้ว (ปรกติใช้ Cloud สำหรับ Compute ข้อมูลที่อาจจะไม่ได้ใช้หน่วยความจำเยอะ) เพราะไม่ใช่ทุกคนที่ลง OS ต้องได้ใช้ SWAP เสมอไป แต่ถ้าอยากลงก็มีทางให้อยู่

แน่นอนว่า Cloud ที่ผมใช้อยู่นั้น อยู่บน Windows Azure สำหรับใครที่ใช้ Amazon EC2 ก็คงต้องหาวิธี ซึ่งก็มีวิธีเช่นกัน (How to add swap to Amazon EC2 instance Ununtu 12.04 LTS?)

ตอนนี้ผมลองทำบน Virtual Machines ผมปัจจุบัน 1 ตัว ซึ่งเป็น Ubuntu Server 12.04.2 LTS โดยใช้คำสั่งข้างต้น ก็จะไม่เจอ SWAP แต่อย่างใด

2013-03-02_190129

อยากสร้างเรามีวิธี โดยจากคู่มือ Creating and Uploading a Virtual Hard Disk that Contains the Linux Operating System นั้นได้อ้างอิงตัว Windows Azure Linux Agent User Guide อีกทีครับ

สรุปง่ายๆ คือ เข้าไปแก้ไข Windows Azure Linux Agent Configuration ซึ่งอยู่ที่ /etc/waagent.conf (sudo ตัวเองเป็น root ก่อนแก้ไข)

เมื่อเปิดไฟล์ขึ้นมาจะตัวตั้งค่าอยู่พอสมควร ให้หาส่วนที่ขึ้นต้นด้วย ResourceDisk ซึ่งจะมีอยู่ทั้งหมด 5 ตัวครับ

ResourceDisk.Format=y
ResourceDisk.Filesystem=ext4
ResourceDisk.MountPoint=/mnt/resource
ResourceDisk.EnableSwap=n
ResourceDisk.SwapSizeMB=0

ผมจะปรับให้ใช้ SWAP ขนาด 2GB โดยปรับค่า 2 ตัวดังนี้

#เปิดการใช้ SWAP
ResourceDisk.EnableSwap=y

# 2GB หน่วยเป็น MB
ResourceDisk.SwapSizeMB=2048

เมื่อปรับแต่งตัวตั้งค่าทั้ง 2 ตัวแล้ว ก็ Save ตัวไฟล์แล้วออกจากตัว editor เสร็จแล้วสั่ง Deprovision ด้วยคำสั่งด้านล่าง

azureuser@fordantitrust:~$ waagent –force –deprovision
azureuser
@fordantitrust:~$ export HISTSIZE=0

เมื่อสั่งรันคำสั่งจบก็ exit ออกมา

แล้วไปที่ Windows Azure Portal สั่ง Restart ตัว Virtual Machines รอสัก 3-4 นาทีโดยประมาณ ระบบจะบูทกลับมาใหม่ แล้วพิมพ์คำสั่ง swapon –s อีกรอบ จะเจอไฟล์ SWAP ของระบบอยู่ที่ /mnt/resource/swapfile

2013-03-02_192724

เพียงเท่านี้ก็จบกระบวนการ การสร้าง SWAP บน Cloud แล้วครับ

คอมไพล์เลอ ต้องมังกร & โอเอส ต้องไดโนเสาร์ หนังสือที่อ้างอิงและศึกษาได้ดี

ทำไม !! คอมไพล์เลอ ต้องมังกร และ โอเอส ต้องไดโนเสาร์

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

Operating System Concepts


by Abraham Silberschatz, Peter Baer Galvin, and Greg Gagne


ถือเป็นหนังสือที่เอาไว้ศึกษาหลักการ Operating System ได้ดีมาก ๆ เลยทีเดียว ที่ผมเรียนตอนปี 3 ก็ใช้เล่มนี้สอนเป็นหลัก แต่เนื้อหามันเยอะมาก เลยเรียนไม่หมดเล่ม ด้วยความอยากรู้เลยไปซื้อที่ CU Book ที่ม. ตอนนั้นมี Wiley Asia Sutdent Edition ขายพอดีราคาเลยถูกกว่าเล่มที่วางขายทั่วไปพอสมควร (เล่มในรูปซื้อมาประมาณ 600 – 700 ไม่เกินนี้ จำราคาไม่ได้นานแล้วอ่ะ -_-‘) เอาไว้ศึกษาพวก thead, memory management แล้วก็พวก deadlock ต่าง ๆ จริง ๆ อ่านเล่มนี้ทำให้เราเขียนโปรแกรมให้มีประสิทธิภาพสูงได้เลยหล่ะ ได้แนวคิดเยอะมาก ๆ จริง ๆ คนที่เขียนพวกซอฟต์แวร์ที่ใช้ thead หรือพวก control session ต่าง ๆ สมควรอ่านอย่างยิ่งเลย เล่มที่ได้มานี่ 7th Edition ถือน่าจะใหม่เกือบที่สุดแล้วในตอนนี้ (เห็นใน amazon มี with Java ด้วย อันนี้น่าจะใหม่กว่านิดหน่อย) แต่เนื้อหาหลัก ๆ ถือว่าควบถ้วนครับ ซึ่งเล่มถ้าจะอ่านต้องมีพื้นในด้าน Hardware พอสมควร แนะนำให้เปิดหนังสือเล่มนี้อ่านพร้อม ๆ กับพวกวิชา Introductrory to Computer หรือ Computer Organization and Architecture ไปด้วยจะดีมาก ๆ


Compilers: Principles, Techniques, and Tools


by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman


เล่มนี้ถือว่าหายากมากในไทย แถมเป็นเล่มที่ Classic ของคนเรียน Computer Science (ออกตั้งแต่ปี ค.ศ. 1985-1986) เห็นว่าเดือนนี้ (สิงหาคม 2006) จะออก Edtion ที่สองแล้ว แต่ว่าเล่มนี้นี่ ผมก็ไม่รู้ทำไม ที่มหาวิทยาลัยก็ไม่มี ในหอสมุดก็เพิ่งจะเอามาลงเมื่อปลายปี 2548 นี้เอง จริง ๆ ดูราคาแล้วก็แพงมหาโหดมาก ราคาจาก US -> Thai นี่เกือบ ๆ 4,000 บาทได้ เลยต้องยืมของหอสมุดมาถ่ายเอกสารเอา เพราะว่าหาซื้อไม่ได้ แถมแพงอีก ยิ่งแล้วใหญ่เลย (ถ่ายยังราคาเกือบ ๆ 500 บาทได้) โดยภายในหนังสือสอนแนวคิดก่อน และก่อนจะอ่านเล่มนี้จริง ๆ ต้องมีพื้นหลายอย่างมาก่อนแล้วทั้ง Computationnal Thoery หรือพวก Regular Expression wi POSIX/Perl ไม่งั้น อ่านลำบากมาก เพราะด้านในนี้แทบจะหา code โปรแกรมน้อยมาก ส่วนใหญ่จะออกแนวสัญลักษณ์ Computationnal Thoery เยอะ แถมต้องแม่น Data Structure และ Programming Language พอสมควรอีก ถ้าใครคิดจะอ่านเล่มนี้ต้องหาหนังสือเล่มอื่น ๆ อ่านประกอบไปด้วยไม่งั้นนึกภาพตามไม่ออกจริง ๆ ขนาดเราว่าเราแม่น ๆ หลายวิชาแล้วนะ ยังอ่านแล้วอ่านอีก เพราะว่าอ่านยากจริง ๆ แต่ถ้าอ่านแรกเข้าใจนะ โห … สุด ๆ อ่านแล้วนี่ Optimize Code ที่เราเขียนห่วย ๆ ตอนปี 2-3 ได้สบาย ๆ เลย เหมาสำหรับคนที่ออกแนวชอบ Optimize Code หรือพวกชอบงานแนว ๆ Code Quality
เล่มต่อมาเป็น

Languages and Machines
An Introduction to the Theory of Computer Science (3rd Edition)



by Thomas A. Sudkamp

อันนี้ไม่พูดอะไรมาก ราคาไม่แพงพอ ๆ กับ Operating System (เพราะว่ามันเป็น International Edition มันเลยถูก ;) ) เอาไว้อ่านประกอบ Compilers ด้านบนนั้นแหละ แต่บางอย่างอาจขัดแย้งกันในบางเรื่องกับ Compilers คงต้องเลือก ๆ อ่านสักหน่อย แต่ถือว่าช่วยให้อ่านเจ้า Compilers ได้เยอะ

ปิดท้ายด้วย หนังสือสำหรับคนที่ชอบการออกแบบ Database

Database Management Systems

by Raghu Ramakrishnan and Johannes Gehrke

เล่มนี้เอาไว้เรียนวิชา Database และมันเป็นแหล่งอ้างอิงที่ดีในการทำ Database Tuning ด้วย คงไม่บรรยายอะไรมาก หาอ่านเอาแล้วกัน เล่มนี้ Concept แน่นดีมาก ๆ

ว่าง ๆ จะหาหนังสือดีมาแนะนำอีกนะ ไปก่อนหล่ะ แว็บบบบบบบ

Update ตัวแก้ปัญหาการใช้พลังงานจาก Battery สำหรับ Laptop ที่ใช้ Windows XP SP2

จาก Knowledge Base Article : KB918005 : Battery power may drain more quickly than you expect on a Windows XP SP2-based portable computer

Download the Update for Windows XP (KB918005) package now.

เป็นปัญหาที่ Windows XP SP2 ควบคุมการใช้พลังงานจาก Battery ผิดพลาดนั้นเอง

  • The portable computer cannot enter the deeper Advanced Configuration and Power Interface (ACPI) processor idle sleep states.

    This occurs when the USB 2.0 driver leaves the asynchronous scheduler component running continuously. This prevents the processor from entering the deeper ACPI processor idle sleep states, or C-states. C-states save power when the processor is not busy. These states range from C0 to C3 or C4. Typically, an idle portable computer uses the C3 and C4 states to preserve battery power. If an idle portable computer cannot enter or maintain the C3 or C4 states, the battery power drains more quickly. This problem is fixed by installing the download that is available in this article.

  • The USB host controller is unable to turn off.

    This typically occurs when devices are removed from a nested USB hub that is attached to the host controller. The host controller does not recognize the device removal. Therefore, the controller is never turned off. This prevents the processor from entering the ACPI processor idle sleep states. This problem is not fixed by installing the download that is available in this article.

  • The USB host controller uses the periodic scheduler for USB 2.0 devices.

    This typically occurs when devices that rely on the periodic scheduler are attached to the host controller. These may be isochronous (Isoch) devices such as audio devices. Alternatively, they may be interrupt devices such as mouse or keyboard. This problem is not fixed by installing the download that is available in this article.