เนื่องจากซื้อ Arduino UNO กับ Wifi Shield ของ Tony Labs เอาไว้คิดว่าน่าจะได้เอามาทำอะไรสนุกๆ แต่ทิ้งไว้นานมากจนลืม พอนึกได้ก็ลองเล่นสักหน่อย จะได้อยู่ในกระแส Internet of Things (IoTs) บ้าง ฮาร์ดแวร์ประเภท Embedded และ Linux Embedded มีอยู่หลากหลายค่าย ที่เป็นที่นิยมก็ได้แก่ Arduino, Raspberry Pi, Beagle Board เป็นต้น การประยุกต์ใช้งานสามารถทำได้หลายอย่าง ต่อเซนเซอร์เพื่อรับค่า หรือควบคุมอุปกรณ์ต่างๆ ได้ ถ้าเป็น Linux Embedded ก็สามารถติดตั้งโปรแกรมใน SD Card ได้ หรือติดตั้ง server service ต่างๆ ก็ได้ เป็นคอมพิวเตอร์ตัวเล็กๆ ให้ใช้งานได้เลย แต่ต้องมี package ใน Repository ให้ติดตั้งนะครับ Linux Embedded ส่วนใหญ่จะใช้ CPU แบบ ARM ฉะนั้นจะติดตั้งอะไรก็ดูสักนิดว่ามี package สำหรับ CPU Architecture ที่เราใช้หรือเปล่า

แต่สำหรับ Arduino UNO ต้องเขียนโปรแกรมฝังเข้าไปอย่างเดียว อย่าหวังว่าจะ apt-get install apache php mysql อะไรเข้าไปได้ ต้องเขียน service เหล่านั้นขึ้นมาเอง…น่าสงสาร แต่ Arduino เป็น Open Embedded Board ใช้แนวคิดโดยเพิ่มคุณสมบัติใหม่ผ่าน Shield จึงทำให้มีคนทำ Shield เพื่อมาต่อกับ Arduino เยอะมากขึ้น ตัวอย่าง เช่น Wifi Sheild, Ethernet Shield, Data Logger Shield, GSM Shield เป็นต้น เรียกได้ว่าอยากได้อะไรก็ซื้อ Shield มาเสียบ นอกจาก Shield แล้วก็ยังมี Module แบบปกติที่ใช้งานกันทั่วไปอีกด้วย

Continue reading

งาน Google I/O 2014 ที่ผ่านมาทาง Google เปิดโค้ดโครงการ Kubernetes ทำหน้าที่เป็น Orchestration, Health Monitoring, HA เบื้องต้นใช้กับ lmctfy ซึ่งเป็น container ของ Google เอง และ cAdvisor เป็น resources และ performance monitor ของ lmctfy เช่นกัน แต่สามารถใช้งานร่วมกับ Docker ได้ ก็ขอเอาเรื่องนี้มาเขียน Blog ไว้ก่อน ส่วน Kubernetes ค่อย Blog อีกทีครับ

cAdvisor หรือ Container Advisor ไม่ได้ทำหน้าที่ Lease Monitoring เหมือนกับ Haizea แต่ทำหน้าที่แต่ Resource / Performance Monitoring เท่านั้น สามารถบอกได้ว่า Docker ใช้ Resource ไปเท่าไร เช่น CPU, RAM, Network ฯลฯ และสามารถบอกรายละเอียดการใช้ resource ของแต่ละ Container ได้ การดูข้อมูลสามารถดูผ่านหน้าเว็บหรือใช้ REST API ดูได้ แนวทางของการใช้ cAdvisor จะเอาไปประกอบกับ Kubernetes เพื่อทำ HA ให้กับ Container ได้ หรือเอาไปทำ Performance Monitor ดูกราฟแบบ real time ได้ หรืออาจจะเอาไปประยุกต์ใช้ทำ Charge back ได้อีกด้วย เพราะสถิติการใช้ Resource เก็บไว้เป็นรายวินาทีทีเดียว
Continue reading

เนื่องจากมีหลายท่านสงสัยว่าอยากจะเรียนเขียนโปรแกรมต้องไปเรียนที่ไหน ซื้อหนังสือเล่มไหนดี ดูวิดีโอที่ไหนดี ทำไมมีแต่เรียนที่กรุงเทพ ต่างจังหวัดเดินทางไม่สะดวกจะเรียนยังไง ดูเหมือนมีปัญหาเยอะแยะ และผมก็ชอบบอกว่าให้ไปอ่าน ให้ไปดู เสียเป็นส่วนใหญ่ เห็นหลายท่านถามมากันเยอะก็เลยถือโอกาสรวบรวมลิงค์วิดีโอ คิดว่าเป็นประโยชน์สำหรับผู้เริ่มต้นและสำหรับท่านที่สนใจเรียนด้วยตนเองที่บ้าน วิดีโอที่รวบรวมมาให้ มีหลายคอร์ส เช่น การเขียนโปรแกรมภาษาต่างๆ, การใช้ Cloud Computing, Bootstrap 3, HTML5, CSS3, Mobile Application Development, Web Application Development เป็นต้น สำหรับผู้ที่สนใจ ก็อย่ารอช้าเข้าไปที่ http://thaiopensource.org/video ได้เลยครับ

หลังจากย้ายเว็บ ThaiOpenSource จาก Drupal มาเป็น WordPress นอกจากจะมีปัญหาเรื่องการย้ายข้อมูลจากเว็บเดิมเพราะไฟล์ import/export มี schema ไม่เหมือนกัน เรื่องที่น่าปวดหัวที่สุดคือเรื่อง URL เพราะ URL ของแต่ละหน้าเปลี่ยนไปทำให้การอ้างอิงหน้าเว็บเก่ามีปัญหา แต่ WordPress ก็ช่วยได้ระดับนึงเท่านั้น ไม่ได้ช่วยได้ 100% การกำหนด Redirect URL ใน htaccess ช่วยได้บ้าง หลังจากอัพเดทเว็บใหม่ทำให้ URL ที่เป็น Referer เกือบ 80% วิ่งไปที่หน้า 404 Not Found แต่ก็ใช้วิธีการให้ข้อมูลเพิ่มเติมในหน้า 404 นี้แทน กรณีที่ไม่รู้ว่าจะ Redirect ไปที่ไหนจริงๆ ซึ่งส่วนใหญ่คนที่เข้าเว็บมาจะเข้ามาดาวน์โหลดไฟล์หนังสือ Blender, GIMP ฟอนต์ไทย เป็นต้น

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

เรื่องถัดมาคงเป็นเรื่อง Theme และ Plugin เว็บ ThaiOpenSource เปลี่ยนแปลงตามกาลเวลา ตามสถานการณ์การเมืองและสถานการณ์การเงิน เนื้อหาที่ดูทันสมัยอาจจะไม่ค่อยมีแต่จะเป็นเรื่อง Blog และ How-To เป็นหลักซึ่งก็ได้ แรงบันดาลใจจากคำถามต่างๆ ที่อยู่ใน ask.thaiopensource.org นั่นเอง ในเรื่อง Theme ก็ยังคงอิง Bootstrap เช่นเคย เหมือนกับที่ใช้ใน Drupal ดังนั้นหน้าตาจะคล้ายๆ เว็บเดิม ส่วนที่เพิ่มลูกเล่นเข้ามาก็คงเป็น font face เพื่อให้ดูมีความแตกต่างเรื่องรูปแบบตัวอักษรบ้าง และเขียน Sub Theme เพิ่มขึ้นมาอีกนิดหน่อย

สำหรับเรื่อง Plugin ใน WordPress ใช้น้อยกว่าที่ใช้ใน Drupal มากๆ เพราะเว็บไม่มีอะไรมี Blog อย่างเดียว ตอนนี้ใช้ Akismet, Google Analytics Dashboard, Google XML Sitemaps, Related Posts via Taxonomies, Shareaholic, WP Super Cache, Youtube Channel Gallery มีเท่านี้ครับ

เผอิญมีปัญหาเกี่ยวกับเครื่อง Mac Book Air เกี่ยวกับ HDD ไม่พอใช้และใกล้จะเต็มแล้ว ก็เลยพยายามหาวิธีแก้ไขว่าจะทำยังไงดี ตอนแรกพยายามหา Mini Disk มาเสียบแต่ก็ได้แค่ 64GB เพราะ Mini SD Card มีขนาดความจุเท่านี้ และขนาด 128GB ยังไม่มีขายในราคาถูก ทางเลือกมีอยู่ไม่กี่ทางคือใช้ Time Capsule, NAS, External HDD ซึ่งก็ยังสงสัยในเรื่อง Time Capsule อยู่ว่าจะเล่นยังไง จะไปขอลองเล่นที่ iStudio เดี๋ยวจะโดนดุเอา ก็เลยหาวิธีลองทำ Time Capsule เล่นเอง หลักๆ ของ Time Capsule ไม่มีอะไรมาก แค่ใช้ afpd ผ่าน Nettatalk โดยทฤษฎี ถ้าเรามีเครื่องคอมพิวเตอร์ขนาดเล็กที่เสียบสาย LAN หรือต่อ Wireless ได้ เราก็น่าจะใช้ Time Machine สำรองข้อมูลและใช้เป็น File Server ได้ มาลองกันดีกว่า

ขั้นแรกติดตั้ง netatalk กันก่อน

sudo apt-get install netatalk

แก้ไข /etc/netatalk/afpd.conf ลบ comment บรรทัดสุดท้ายออกตรง

- -tcp -noddp -uamlist uams_dhx.so,uams_dhx2_passwd.so -nosavepassword

สร้าง backup ไดเรคทอรีที่เราต้องการ

sudo mkdir /backup/tm_backup

เพิ่ม group tmusers และเพิ่ม กลุ่มให้ผู้ใช้ของคุณ

sudo groupadd tmusers

sudo usermod -a -G tmusers username

กำหนดสิทธิ์ให้ กลุ่ม tmusers เขียนไฟล์ลงไปในไดเรคทอรีนี้ได้ กรณีที่ต้องการแยก directory ให้สร้าง directory tm_backup ลงใน home ของแต่ละ user

sudo chown -R username:tmusers /backup/tm_backup

sudo chmod 770 -R /backup/tm_backup

แก้ไขไฟล์ /etc/netatalk/AppleVolumes.default เพื่อกำหนดสิทธิ์ในการเข้าถึงของ apfd

:DEFAULT: cnidscheme:dbd options:upriv,usedots

เพิ่ม share directory ในส่วนท้ายไฟล์

/backup/tm_backup "Backup for username" allow:username cnidscheme:dbd volsizelimit:200000 options:usedots,upriv,tm

กลับมาที่เครื่อง Mac ของเรา บังคับให้ Time Machine เรียกใช้ Network Volume เปิด terminal แล้วใช้คำสั่งดังนี้

defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

จากนั้นเปิด Finder ขึ้นมากด Cmd+K พิมพ์ afp://ip-address ของเครื่อง Time Capsule หลอกๆ ของเรา

ใส่ชื่อ username/password ของเครื่องลงไป

เลือก volumes ที่เราต้องการ

เปิด Time Machine ขึ้นมา กด Select Disk… แล้วเลือก Volume ที่ต้องการใช้ รอสัก 2 นาที Time Machine จะทะยอยสำรองข้อมูลให้เรา และเราก็ใช้ Time Machine ได้แล้ว :)

มีหลายท่านถามเรื่อง Data Encryption บน OwnCloud ว่าทำยังไง ผมก็มักจะตอบว่าทำ FileSystem Encryption ครับ แบบประมาณว่าครั้งเดียวจบ ไม่ต้องมาหาวิธีว่าทำ Data Encrytion ยังไง แต่ก็มีคนถามเข้ามาเยอะ ก็แนะนำวิธีง่ายๆ ให้ก็แล้วกันครับ ใน OwnCloud มี Application เสริมตัวนึงชื่อ Encryption กด Enable ได้ที่หน้า Application ได้เลย ดังนี้

ลอง ​Sync ไฟล์ขึ้นไปดูครับว่าเป็นยังไง

ไฟล์จะเก็บใน server แบบนี้

ถ้าเราดูจากหน้าเว็บ

ถ้าเรา cat ไฟล์ตรงๆ จะได้แบบนี้

จะพบว่าเนื้อไฟล์ถูก encrypt ไปแล้ว วิธีแบบนี้ก็ดูสนุกดีครับ สนใจอ่านข้อมูลเพิ่มเติมที่ ownCloud Administrators Manual

เนื่องจากทดลอง Android Wear มาสักระยะผ่านทาง Emulator โดยการเชื่อมต่อกับโทรศัพท์มือถือผ่าน Debug Mode ทำให้รู้สึกถึงความรำคาญของ Notification ของ App แทบทุกตัวที่ยิงเข้าไปที่ Emulator สำหรับนักพัฒนาที่พัฒนา Wear App หรือส่ง Notification ไปที่ Android Wear โดยส่วยตัวผมไม่ชอบ Notification เยอะๆ สักเท่าไร ลองนึกถึง GMail Notification ที่เป็น Stack ซ้อนๆ กันสัก 5 อันก็สยองแล้ว นี่ยังไม่รวม Facebook, Line ฯลฯ ทำให้คิดว่าน่าจะต้องหาทางปิด Notification ที่ไม่อยากให้ไปโผล่ใน Android Wear วิธีแก้ไขก็ง่ายมาก ตั้งค่าใน Android Wear App ดังนี้ครับ

เปิด Android Wear App ขึ้นมาก่อน

กดไปที่ Setting รูปเฟือง

เลือก Mute app notifications แล้วเลือก App ที่ต้องการไม่ให้แสดง Notification ไปยัง Android Wear ง่ายๆ แค่นี้ครับ

 

ช่วงนี้ใน Google Play Store เริ่มมี App Watch Face มาให้ดาวน์โหลดกันเยอะขึ้น มี Watch Face ใหม่ๆ แทบจะทุกสัปดาห์ มีทั้งแบบฟรีและเสียเงิน ก็เลยคิดว่าถ้าจะเขียน Watch Face ในแบบที่ต้องการบ้างจะทำอย่างไร ซึ่งเท่าที่ลองค้นหาข้อมูลก็พบว่า Watch Face เขียนคล้ายกับ Launcher บน Android คือเขียน Wear App ปกติแต่ไปกำหนดใน AndroidManifest ว่าให้ทำหน้าที่เป็นอะไร ซึ่งถือว่าง่ายมากๆ ลองมาทำเล่นกันครับ

สิ่งที่ต้องมี

  • Android Studio รุ่นล่าสุด
  • Android SDK Rev 20
  • Android Wear System Image

อันดับแรกสร้าง AVD ขึ้นมาก่อนตามนี้

จากนั้น Start AVD เอาไว้ สำหรับท่านที่ใช้ Intel HAXM การทำงานของ Emulator ก็จะเร็วขึ้นมาบ้างนิดหน่อย T_T

สร้าง Project ขึ้นมาใหม่ เลือกเป็น Mobile และ Wear App เลือก Blank Activity ทั้งคู่

จากนั้น แก้ไข Android Manifest ที่ Wear Module เพิ่ม user permission ดังนี้

<uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

จากนั้นกำหนดให้ Activity ฝังเป็น background ดังนี้

android:allowEmbedded="true"

เพิ่ม meta-data ลงไป เพื่อให้แสดง preview ตอนเลือกเปลี่ยน watch face ทำภาพขนาด 320×320 ใส่ลงใน res/drawable-hdpi

<meta-data
android:name="com.google.android.clockwork.home.preview"
android:resource="@drawable/ic_preview" />

ในส่วน intent-filter เพิ่ม category เพื่อกำหนดให้แสดงผลเป็น Background

<category android:name="com.google.android.clockwork.home.category.HOME_BACKGROUND" />

ตัวอย่าง Android Manifest

ทีนี้มาทำ Watch Face กัน แบบง่ายๆ แก้ไข layout ในไฟล์ rect_activity_wear.xml และ round_activity_wear.xml เพิ่ม ImageView และ TextClock ลงไปดังนี้

ใครอยากได้ภาพ Background ก็ทำภาพสวยๆ ขนาด 320x320px ใส่ลงไปได้ใน ImageView จากนั้นมาลองทดสอบ Wear App กัน วิธีการทดสอบทำได้ง่ายๆ สั่ง Run App บน AVD ที่เราสร้างขึ้น App จะ Run ขึ้นมาปกติ ให้เลื่อนขวา แล้วกดค้างที่หน้าจอ เพื่อเปลี่ยน watch face คุณก็จะเห็น watch face ของคุณขึ้นมา

วิธีการทำ Package สำหรับเผยแพร่ใน Play Store เนื่องจาก Wear Device ไม่สามารถเชื่อมต่อกับ Play Store ได้โดยตรง จำเป็นต้องใช้ Mobile App เป็น Payload ถ้าสั่งติดตั้ง Mobile App ที่มี Wear App อยู่ด้วย ตัวมือถือจะ Sync App ไปยังนาฬิกาให้อัตโนมัติ วิธีเพิ่ม wear apk ลงไปใน Mobile App ซึ่งก็มีอยู่ 2 วิธี คือ

  • Sign Package ของ Wear App แล้วเพิ่มเข้าไปใน Mobile App เอง
  • Sign Package ของ Wear App แล้วเพิ่มเข้าไปใน Mobile App แบบอัตโนมัติ

ก็เลือกอย่างหลังจะง่ายที่สุดครับ ให้ดู build.gradle ใน Mobile Module ว่าตั้งค่า WearApp เป็น dependencies แล้วหรือยัง (ถ้าเราสร้าง project มาพร้อมกัน Android Studio จะเพิ่ม WearApp เป็น dependency ให้อยู่แล้ว) จากนั้นสั่ง Generated Sign APK ที่ Mobile Module ได้เลย คุณก็จะได้ APK ที่เป็น Mobile App และมี Wear App อยู่ข้างใน ทีนี้ก็เอา Apk ที่ได้ เอาไปทดสอบกัน

วิธีการสร้าง Custom Watch Face นี้อาจไม่ถูกต้องนัก ทำสอบจาก Emulator มีผลข้างเคียงในเรื่องของการแสดงผล Notification และอาการ Screen Flick ซึ่งบนนาฬิกาจริงๆ ไม่รู้ว่ามีอาการแบบเดียวกันหรือไม่ ถ้าใครมี LG G Watch หรือ Gear Live ก็ฝากลองด้วย :P เอาไว้ถ้ามีวิธีการที่ดีกว่านี้ หรือ Google ปล่อย Watch Face API ออกมาแล้ว เดี๋ยวจะมาอัพเดทกันอีกรอบ :)

ThaiOpenSource เปลี่ยนมาใช้ WordPress เรียบร้อยแล้ว แต่เนื้อหาบางส่วนจะทะยอย import เข้าไปเรื่อยๆ มาใช้ WordPress เขียน Blog เรื่อง WordPress CLI สักหน่อย เมื่อปีที่แล้วงาน WordCamp San Francisco 2013 Mike Schroder เปิดตัว WP-CLI หรือ WordPress Command Line ซึ่งน่าสนใจดี สามารถทำงานได้หลายอย่าง เช่น

  • ดาวน์โหลดและติดตั้ง WordPress เวอร์ชั่นล่าสุด
  • อัพเดท WordPress
  • ติดตั้ง, อัพเดท Theme, Plugin
  • จัดการเนื้อหา Blog, Page และอื่นๆ

เรียกได้ว่ามากความสามารถเลยทีเดียว การติดตั้ง WP-CLI ทำได้ง่ายๆ ดังนี้

ก่อนติดตั้งควรมี PHP Cli ก่อนนะครับ ดาวน์โหลดและติดตั้ง PHP ให้เรียบร้อย จากนั้นดาวน์โหลด WP-CLI มาดังนี้

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

ตรวจสอบว่าไฟล์ที่ได้มาทำงานได้ถูกต้อง โดยใช้คำสั่ง

php wp-cli.phar --info

ถ้าไม่มี Error อะไร ก็สั่ง chmod และย้ายไฟล์ไปยัง /usr/local/bin ดังนี้

chmod +x wp-cli.phar

sudo mv wp-cli.phar /usr/local/bin/wp

จากนั้นลองใช้คำสั่ง wp –info ดูว่าทำงานหรือเปล่า

เมื่อติดตั้งได้แล้วมาลองใช้งานกัน เริ่มจากติดตั้งและตั้งค่า WordPress ผ่าน WP-CLI

cd /var/www

wp core download

wp core config --dbname=wordpress_db --dbuser=db-username --dbpass=db-password

จากนั้น browse ไปที่เว็บและเริ่มตั้งค่า wordpress ต่อได้เลย ทีนี้มาลองติดตั้ง theme กันบ้าง

wp theme install the-bootstrap

จัดการ activate theme เพื่อเรียกใช้งาน

wp theme activate the-bootstrap

ประมาณนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับ WP-CLI ได้ที่ wp-cli.org

สำหรับท่านที่มี Smartwatch ที่ใช้ Android Wear สามารถเปิด ADB Debuging  บนนาฬิกาได้และสามารถสั่งงานผ่าน ADB ได้ สามารถ Debug Application ได้ และสามารถแสดงหน้าจอนาฬิกาผ่านโดยโปรแกรม Droid@Screen หรือใช้ Android Screen Monitor ได้ วิธีการเปิด ADB Debugging มีขั้นตอนดังนี้

  • เปิดหน้าจอนาฬิกา
  • เลือก Settings
  • เลือก About
  • กด Build Number ไป 7 ครั้ง
  • เลือนขวากลับไปหน้า Setting เลือก Developer Options
  • เลือก ADB Debugging
  • เลือกเปิด ADB Debugging

ตัวอย่างหน้าจอ เปิดหน้าจอหลักตัวนาฬิกา

แตะไปที่นาฬิกาเพื่อเลือกเมนู มันจะขึ้นเป็น Google Voice ไม่ต้องพูดอะไรครับ :P เลื่อนขึ้นเลือกเมนู Setting

เลื่อนขึ้นเลือกเมนู About

เลื่อนขึ้นเลือกตรง Build Number แตะไป 7 ครั้ง ตัวนาฬิกาจะบอกว่าเปิด Developer Option แล้ว

เลื่อนขวากลับไปหน้า Setting จะพบว่ามีเมนู Developer Options ขึ้นมาแล้ว

แตะเลือก Developer Options เลื่อนไปเลือกตรงเมนู ADB Debugging

จะขึ้นหน้าจอถามว่าจะต้องการเปิด ADB Debugging มั๊ย กดปุ่มสีเขียวได้เลย

ปล. ท่านที่ใช้ Emulator ไม่ต้องกดตามนะครับ :P