ผมว่าหลายคนที่จัด RHEL 7 หรือ CentOS 7 โดยที่ไม่ได้ใช้ Fedora 20 และไม่ได้เป็นสาวก Fedora มาก่อนจะไม่ทราบว่าอีก release ถัดไปของ RHEL, CentOS, Scientifix Linux จะเจออะไรใหม่บ้าง เพราะของเล่นใหม่ๆ จะไปโหล่ใน Fedora ก่อนอย่างน้อย 2 ปี จึงจะย้ายเข้ามาใน RHEL จากนั้นถ่ายทอดไปยัง CentOS, Scientifix Linux และ Linux Distribution ที่พัฒนาต่อจาก RHEL หรือ CentOS ตามลำดับ การเปลี่ยนแปลงอย่างสายฟ้าแลบใน RHEL 7 ไม่ได้เกิดอย่างสายฟ้าแลบหรอกครับ เขาใช้กันมานานแล้ว สำหรับการเปลี่ยนแปลงที่รอมานาน คือ systemd ที่มาสดใหม่, Docker ที่คุม security ด้วย SELinux ทำให้ เรื่อง security บน Docker ที่หลายคนถากถางกันมาเกือบ 2 ปีนี้หยุดได้แล้ว เพราะนอกจากจะคุม syscall ได้แล้วยังคุมในระดับ SELinux ด้วย ส่วน feature อื่นๆ ไม่ค่อยได้สนใจมากครับ

การมาของ systemd เปลี่ยนวิธีการทำงานของ Linux Admin ไปโดยสิ้นเชิงเพราะ systemd มาจัดการ service และ run level ในระบบปฏิบัติการ คุณหนีมันไม่พ้น ก็ต้องมาเรียนกันใหม่ อ้อ init script ที่เรียนกันมาก็เปลี่ยนใหม่ด้วย เอาล่ะการที่จะเข้าใจ systemd ได้เร็วคือการหัดใช้งานมันครับ เรามาลองจัดการ service บน systemd คำสั่งที่เราใช้งานคือ systemctl

ลองใช้คำสั่ง systemctl กันดูครับ

systemctl

เราจะพบว่า systemctl จะแสดงรายการทุกอย่างที่ systemd ควบคุมได้ ทั้ง service, timer, mount, target, automount เยอะมาก

Continue reading

มีเรื่องตลกที่เกิดขึ้นกับตัวผมเองในช่วงที่ CentOS 7 ออกมาใหม่ๆ คือการเปลี่ยน hostname เนื่องจากว่าเคยชินกับการเปลี่ยนชื่อ host ก็ชอบไปเปลี่ยนที่ /etc/hostname แต่ใน CentOS 7 และ RHEL 7 ไม่ใช่แบบนั้น เค้ามีวิธีการเปลี่ยน hostname ได้น่ารักกว่า โดยการใช้คำสั่ง hostnamectl การใช้งานคำสั่งนี้ก็ง่ายมาก ถ้าต้องการดู hostname ก็ใช้คำสั่ง hostnamectl หรือ hostnamectl status ดังนี้

hostnamectl

จะได้ผลลัพท์ดังภาพ

Continue reading

ครั้งที่แล้วพาเล่น Digital Temperature Sensor DHT22 กับ Raspberry Pi เราสามารถอ่านค่า Temperature และ Humidity ออกมาได้ แต่ถ้าจะให้สนุกต้องเก็บข้อมูลและเอาไปใช้งานต่อได้ซึ่งก็มีอยู่หลายวิธี เช่น เก็บข้อมูลลงฐานข้อมูล เก็บข้อมูลลงไฟล์ เป็นต้น เนื่องจากเคย blog เรื่อง Xively กับ Arduino ไปแล้ว ครั้งนี้ขอไม่ blog เรื่องนี้กับ Raspberry Pi ก็แล้วกันครับ แต่จะขอให้ REST API ที่สร้างจาก StrongLoop แทนที่ blog ไปครั้งที่แล้ว ลองไปหาอ่านกันได้

REST Client บน PyPi ไม่ใช่เรื่องยาก ขึ้นอยู่กับว่าเราเลือกที่จะใช้ Python Module ไหนมากกว่า ซึ่งก็มีอยู่หลายตัวให้เลือกใช้ ดังนี้

Continue reading

มิตรสหานท่านนึงแนะนำ StrongLoop มาให้เล่น เพราะเห็นทำงานซ้ำซากอย่างการเขียน RESI API บน Node.JS เป็นงานที่น่าเบื่อ ยิ่งทำบ่อยๆ อยู่แล้วก็ยิ่งจะต้องมีเครื่องมือเพื่อลดขั้นตอนการทำซ้ำซ้อนและข้ามไปทำในส่วนที่ต้องทำจริงๆ ได้เลย ถ้าใช้ Router ใน Express JS แล้วมาเขียนโค้ดในแต่ละ HTTP Request เอาเอง จะเข้าใจดีว่าเสียเวลาทำไปทำไม Strong Loop ออกแบบมาเพื่อลดขั้นตอนเหล่านี้ นอกจากขึ้นโครง REST API ได้เร็วแล้วยังมีเครื่องมือช่วยในการจัดการ Data Source ที่ REST API ของเราจะเชื่อมต่อไปด้วย เช่น Database Server, REST Server อื่น หรือแม่กระทั่งการทดสอบง่ายผ่าน DB Memory โดยไม่ต้องเชื่อมต่อกับ Data Source จริงๆ และเครื่องมือช่วยให้ชีวิตคุณสะดวกสบายมากขึ้นอีกมากมาย ไม่ว่าจะเป็น explorer, monitor, deploy, mobile service api และอื่นๆ อีกมากมาย สนใจรายละเอียดเพิ่มเติมก็เข้าไปดูกันที่เว็บ StrongLoop กันได้

เพื่อความเข้าใจมาทดลองกันเลย การติดตั้งและใช้งาน StrongLoop ต้องติดตั้ง Node.JS ให้เรียบร้อยก่อน จากนั้นก็มาติดตั้ง StrongLoop โดยใช้ Node Package Manager กันได้เลยดังนี้

sudo npm install -g strongloop

เท่านี้ก็เสร็จเรียบร้อย ใช้คำสั่ง slc เพื่อสร้าง REST API กันดังนี้

mkdir loopback-example

cd loopback-example

slc loopback

รอจนกระทั่งดาวน์โหลด module ที่ต้องใช้จนเสร็จ

Continue reading

Android 4.3+ มีความสามารถด้าน Debugging เพิ่มขึ้นมาคือ ADB Over Network หรือเรียกง่ายๆ ว่า Wifi Debugging หลักการคือคุณสามารถใช้ ADB ได้ทั้งแบบมีสายและไร้สาย ถ้ามี USB Hub เยอะหน่อยก็จะสะดวก แต่ถ้าไม่มีก็สามารถ Debug ผ่าน Wifi ได้ วิธีการง่ายๆ มีดังนี้

อันดับแรกต้องอยู่ในเครือข่ายเดียวกันเสียก่อน ดู IP Address อยู่ในวงเดียวกัน

เสียบสาย USB ที่มือถือเปิด terminal แล้วสั่ง

adb tcpip 5555

เอาสาย USB ออก ที่มือถือเปิดไปที่ Setting > Developer Options เลือก ADB Over Network ดู IP Address และ Port

สั่ง adb connect มาที่มือถือตาม IP Address และ Port ที่กำหนด

adb connect 192.168.88.248:5555

สั่ง adb devices จะพบมือถือของเรา Debug ผ่าน Network แล้ว ลองใช้ ddms ทดสอบดูได้

ถ้าท่านใดที่ต้องการทดสอบ ​Mobile App ในอุปกรณ์หลายๆ ตัวพร้อมกัน ADB Over Network เป็นเครื่องมือช่วยได้ดีครับ

ครั้งที่แล้ว blog เรื่องตั้งค่า HC-05 แต่ไม่ได้บอกว่าเอามาทำอะไร โปรเจคที่ใช้ Bluetooth ส่วนใหญ่จะใช้งานด้านการสื่อสารหรือส่งข้อมูลเป็นหลัก เพราะ HC-05 สามารถทำงานได้ 2 โหมด เป็น Server หรือ Client ได้ เราสามารถประยุกต์ใช้ Bluetooth Module มาเป็นช่องทางในควบคุมอุปกรณ์ระหว่างมือถือกับ Arduino โดยหลักการง่ายๆ ของการใช้ Bluetooth คือต้องมีการ pair อุปกรณ์เข้าหากัน หาก Arduino ของคุณต่อกับ Relay Board คุณก็สามารถสั่งงานผ่าน Mobile App ได้ ก่อนจะถึงการควบคุม Relay มาดูวิธีการสื่อสารแบบง่ายๆ กันก่อน ต่อ Bluetooth Module กับ Arduino ดังภาพ

จากนั้นสั่งอัพโหลดโค้ดดังนี้

โปรแกรมนี้ไม่ซับซ้อน แค่ต้องการตัวเลข 0,1 เพื่อเปิด/ปิด LED ที่ขา 13 เท่านั้น เมื่ออัพโหลดโค้ดแล้ว ให้เปิด Serial Monitor ขึ้นมา จากนั้นพิมพ์เลข 1 ลงไป

จะพบว่า LED ที่ขา 13 ติดขึ้นมาแล้ว :) การสื่อสารของ Bluetooth รับส่งข้อมูลแบบ serial ดังนั้นหากข้อมูลมีมากกว่า 0,1 คุณควรสร้าง pattern หรือเป็น pigyback ในชุดข้อมูลเพื่อให้สื่อสารเข้าใจตรงกันได้ และง่ายต่อการทำความเข้าใจ เช่น

  • *10|06|2# หมายถึง Digital PIN 6 = LOW
  • *10|06|3# หมายถึง Digital PIN 6 = HIGH
  • *11|03|100# หมายถึง Digital PIN 3 ค่า PWM = 100
  • *11|05|100# หมายถึง Digital PIN 5 ค่า PWM = 255

เรื่อง pattern ของข้อมูลแล้วแต่เราจะกำหนด ลองมาดูตัวอย่างเพื่อให้เข้าใจมากขึ้นจาก App ArduDroid  ให้ดาวน์โหลด App มาติดตั้งที่มือถือจากนั้น แก้โค้ด Arduino ของเรานิดหน่อยดังนี้

จากนั้นอัพโหลดโค้ดไปยัง ​Arduino จากนั้นเปิด ArduDroid แล้ว pair กับ Arduino ของเราให้เรียบร้อย

เปิด Serial Monitor ขึ้นมา แล้วลองกด Digital Write Toggle ON/OFF สักปุ่ม แล้วดูค่าใน Serial Monitor กัน ค่าที่ได้จะเป็นแบบนี้

กดปุ่ม 6 ค่าที่ได้คือ *10|06|3# คือ Digital Pin 6 = HIGH กดปุ่ม 6 อีกครั้ง ค่าที่ได้คือ *10|06|2# คือ Digital Pin 6 = LOW เป็นต้น จากโค้ดข้างต้น ถ้าจะใช้ App ArduDroid เพื่อทดสอบโดยใช้ pattern ของค่าที่ส่งมาจาก App ลักษณะนี้ มาเพิ่ม LED เข้าไปสัก 2 ตัวจะได้เห็นภาพมากขึ้นครับ

เขียนโค้ดในฝั่ง Arduino เพื่ออ่านค่าจาก ArduDroid ให้ถูกต้องดังนี้

อัพโหลดโค้ดไปยัง Arduino แล้วลองใหม่ครับ ลองกดปุ่ม 6 หรือปุ่ม 7 จะพบว่า กดครั้งแรก LED จะติด กดครั้งต่อไป LED จะดับ เป็น Toggle Switch เอาไปประยุกต์ต่อกับ Relay Board แทน LED คุณก็จะได้ระบบควบคุม Switch อุปกรณ์ไฟฟ้าแบบง่ายๆ ได้แล้ว :)

มีหลายท่านถามเรื่อง Bluetooth เข้ามาไม่ได้เกี่ยวข้องกับการใช้งานเลย แต่เป็นเรื่องของชื่อ Bluetooth HC-05 เพราะค่ามาตรฐานใช้ชื่อว่า HC-05 ถ้ามีโปรเจคที่ใช้ Bluetooth มาก เวลาจะ pair อุปกรณ์ คุณก็จะเห็นชื่อ HC-05 เต็มไปหมด และไม่รู้ว่าจะต้อง pair HC-05 ตัวไหนกันแน่ วิธีการเปลี่ยนชื่อของ Bluetooth Module นี้ง่ายมาก เพียงแค่ส่งค่า HIGH ไปยังขา Key เพื่อบอกอุปกรณ์ให้เข้าสู่ Setting Mode จากนั้นก็สั่งงานผ่าน Serial Monitor เท่านั้น สำหรับคำสั่งต้องใช้คำสั่ง AT Command เท่านั้น ถ้าใครสนใจก็สามารถหาข้อมูลเพิ่มเติมได้ มาลงมือกัน Bluetooth Module กับ Arduino ตามรูป

ให้เอาสาย VCC ของ Bluetooth Module ออกก่อน จากนั้นอัพโหลดโค้ดข้างล่างเข้าไป

จากนั้นเสียบสาย VCC เข้าที่เดิม ให้สังเกตดูว่าไฟที่ Bluetooth Module กระพริบช้าลงประมาณ 2 วินาทีต่อครั้ง แสดงว่าเข้าสู่ Setting Mode แล้ว ให้เปิด Serial Monitor ขึ้นมา แล้วพิมพ์ AT กด Send จะได้ผลลัพท์เป็น OK ดังภาพ ถ้าไม่ได้ให้ดูการต่อวงจรใหม่อีกรอบ

เอาสาย VCC ออกแล้วเสียบเข้าไปใหม่ จากนั้นสั่งเปลี่ยนชื่อเป็น ARDUINO HOME ด้วยคำสั่ง AT+NAME=”ARDUINO HOME” จากนั้นเอาสาย VCC ออก เอาสาย Key ที่ Digital PIN 9 ออกแล้วเสียบสาย VCC เข้าไปใหม่ ไฟที่ Bluetooth Module จะกระพริบถี่ขึ้นเข้าสู่โหมดการใช้งานปกติ เปิด Bluetooth Manager ดูว่าชื่อเปลี่ยนไปหรือยัง

ชื่อเดิม

ชื่อใหม่

แก้ไขชื่อเรียบร้อยแล้วแบบนี้ก็ไม่หลงแล้วครับ :)

ครั้งที่แล้ว blog เรื่อง Raspberry Pi B+ ที่ซื้อมากองไว้ แต่ช่วงนี้คงได้หยิบเอามาเล่นบ่อยมากขึ้น เพราะเด็กฝึกงานที่สำนักงานฯ ทำโครงงานสหกิจศึกษาเกี่ยวกับ Raspberry Pi ก็เลยมีแรงสนใจขึ้นมาบ้าง โดยส่วนตัวแล้วไม่ค่อยชอบ Raspberry Pi นัก เพราะมันเป็น computer ขนาดเล็กมากกว่า เอาเป็นว่าหยิบมาเล่นแล้วก็ลองมาทำอะไรสนุกๆ กันดูบ้าง ผมมี DHT22 เป็น temperature + humid sensor ในตัวเดียวกัน และที่สำคัญเป็น digital sensor ใช้งานกับ Raspberry Pi ได้โดยตรง ไม่ต้องแปลงข้อมูลอะไรมากนัก เรามาลองอ่านค่าจาก DHT22 กัน

DHT22 ใช้ไฟ 3.3-5V DC มี 4 ขา เราจะใช้ ขาที่ 1,2 และ 4 โดยต่อวงจรดังภาพ

จากภาพเราจะอ่านค่า temperature จาก GPIO4 ของ Raspberry Pi และเราจะใช้ Python Module สำหรับอ่านค่าจาก DHT22 ไว้ของ Adafruit Industry ก่อนอื่น compile python module นี้กันก่อน

apt-get update

sudo apt-get install build-essential python-dev

git clone https://github.com/adafruit/Adafruit_Python_DHT.git

cd Adafruit_Python_DHT

sudo python setup.py install

จากนั้นลองทดสอบ อ่านค่าอุณหภูมิดู

cd example

sudo ./AdafruitDHT.py 22 4

เราจะได้ค่าอุณหภูมิและความชื้นมา

Temp=30.8*C Humidity=66.7%

ลองเขียน code กันดูบ้าง

จากนั้นลอง run ดูจะได้ผลลัพท์ดังนี้

ผมใช้ Azure มาครบปีแล้วแต่ยังไม่เคย blog เรื่องการใช้งาน Azure ผ่าน command line สักที ในช่วงแรก Azure ออกเครื่องมือที่เรียกว่า azure-cli แต่ใช้งานได้ในบางระบบปฏิบัติการเท่านั้น ตอนนี้่ Azure หันมาใช้ Node.js ในการพัฒนาเครื่องมือ Command Line Interface ใหม่ชื่อ Azure Cross Platform Command Line Interface หรือ xplat-cli ทำให้การใช้งาน Azure บน Command Line ใช้ได้ในทุกระบบปฏิบัติการและใช้งานได้สะดวกมากขึ้น สำหรับการติดตั้ง xplat-cli ก็ง่ายมาก สามารถติดตั้งผ่าน Node Package Manager ได้เลย ดังนี้

npm install azure-cli -g

ง่ายมั๊ย :) จากนั้นก็สั่ง import account ของเราเข้ามาดังนี้

azure account download

azure-cli จะให้ url เรามา 1 อัน ให้ browse เข้าไป browser จะ download ไฟล์ .publishsettings มาให้ จากนั้นก็สั่ง import ดังนี้

azure account import my-account-file.publishsettings

ในกรณีที่เรามี Subscription หลายอัน ให้ดูว่าตอนนี้เราใช้ Subscription อะไรอยู่ก่อน เดี๋ยวจะตกใจว่ามี service ทำงานอยู่แต่สั่ง service list แล้วทำไมไม่เห็น

azure account list

หากต้องการเปลี่ยน Subscription ก็ตั้งค่าได้ดังนี้

azure account set

จากนั้นลองใช้คำสั่งกันได้เลย :)

Azure เป็นบริการ Cloud Computing ของ Microsoft ปัจจุบันมีการบริการที่หลากหลายมากขึ้น ไม่ว่าจะเป็นเรื่อง Big Data ผ่าน HDInsight, CND, Scheduler, API Management, Traffic Manager เรียกได้ว่ามีบริการเพิ่มขึ้นกว่าเดิมมาก นอกจากจะมีของเล่นเพิ่มแล้ว Azure ยังสนับสนุน นักพัฒนาที่ไม่ได้ใช้เครื่องมือของ Microsoft มากขึ้นด้วย โดยเฉพาะ Azure Web Site ซึ่งในช่วงแรกบังคับให้ใช้ Visual Studio เพื่อ Deploy App ซึ่งในปัจจุบันไม่จำเป็นอีกต่อไปแล้ว เพราะคุณสามารถ Deploy App ที่พัฒนาจาก .Net, Java, PHP, Python หรือ Node.js ได้จาก Git, Github, Bitbucket หรือแม้กระทั่ง Dropbox เรียกได้ว่าเปิดกว้างกว่าเดิมมาก นอกจากนี้ Azure Website สามารถตั้งค่า Auto Scaling ได้แล้ว อยากรู้ต้องลองดู :)

มาลองสร้าง Azure Web Site กันครับ login เข้าไปที่ Azure Dashboard จากนั้นกดปุ่ม + New ข้างล่าง เลือก Web Site > Quick Create ใส่ชื่อ URL ที่เราต้องการ เลือก Region ที่ต้องการจากนั้นกด Create Web Site ได้เลย

เข้าไปดูรายละเอียด Web Site ของเราครับ

จากนั้นดูที่ Integration source control คลิกที่ Set up deployment from source control ตั้งค่า source control ที่เราต้องการ กรณีนี้ผมเลือก Local Git repository

ตัวเลือก Local Git repository นี้ Azure จะไปสร้าง Git repository ให้ใน Web Site ของเรา เวลาจะอัพโหลดไฟล์จะใช้งานผ่าน Git แบบนี้สะดวกมาก เมื่อเลือกแล้ว Azure จะสรุปข้อมูลให้เราว่าจะ commit file ขึ้นไปที่ Git repo ได้ยังไง

เราจะมาลองสร้าง Node.js App กัน เพราะ Node.js ใช้ module ตามที่นักพัฒนาต้องการ จุดเริ่ม App ไม่จำเป็นต้องเป็น server.js เราจะมาลองดูกันว่า Azure ฉลาดพอที่จะ deploy Node.js App ได้หรือไม่ เริ่มกันเลย สั่ง express generator สร้าง Express App ขึ้นมาดังนี้

express --ejs azure-node

จากนั้นสั่งติดตั้ง module ที่ต้องใช้งาน

cd azure-node && npm install

ลอง run ดู

DEBUG=azure-node ./bin/www

เราจะพบว่า webserver ทำงานที่ port 3000 เราจะไม่แก้ไขอะไรนอกจาก index.ejs เพิ่ม bootstrap เข้าไปเพื่อความสนุก จะได้มีอะไรให้ดูเป็นชิ้นเป็นอันหน่อย :)

ผลลัพท์ที่ run ได้ที่เครื่องเราก็ออกมาสวยงามแบบนี้

ทีนี้มาลอง deploy ไปที่ Azure กันครับ เริ่มจาก init repository ที่เครื่องเราก่อนดังนี้

git init

จากนั้น เพิ่ม .gitignore เข้าไปเพื่อกันไม่ให้ push node_modules เข้าไปด้วย ดังนี้

echo "node_modules/*" > .gitignore

จากนั้น add commit ใน local repo ของเราก่อน

git add .

git commit -m "init"

เพิ่ม remote repository ของ Web Site เราดังนี้

git remote add azure https://redblogwp@node11.scm.azurewebsites.net:443/node11.git

สั่ง push code เราขึ้นไปที่ remote repositoty

git push azure master

git จะทะยอย push ไฟล์ของเราขึ้นไปที่ remote repository กลับไปดูที่ Azure Web Site เราจะพบว่า Azure รับไฟล์และเริ่ม deploy Node.js App ให้เราแล้ว

หากดูขั้นตอนการ deploy Azure รู้ว่าเราต้องใช้ modules อะไรเพิ่มเติม ก็จะทะยอยดาวน์โหลด module ที่เราต้องใช้มาให้ด้วย พร้อมแก้ไข port 3000 เป็น 80 ให้เราอัตโนมัติ ลอง browse เว็บดูได้เลย

เพื่อความชัวร์และไม่ได้มั่ว เปิดดู operation log เทียบดูได้ครับ :)

ถัดมาเป็นเรื่อง Auto Scaling ซึ่งเพิ่มเข้ามาในส่วน Web Site แล้ว เรียกได้ว่าไม่ต้องกังวลหากมีคนเข้าชมเว็บไซต์เราเยอะแล้วจะ scale out ไม่ได้ สามารถตั้งค่าได้ แต่มีข้อแม้ว่า Web Hosting Plan Mode ต้องเป็นแบบ Shared ขึ้นไป ในกรณีที่เราต้องการกำหนดในรายละเอียดของการ scale เพิ่ม เช่น Schedule, Scaling Metric ต้องเลือกเป็นแบบ Standard เท่านั้น

จากภาพเลือก Standard ขนาดของ Instance แบบ Small ไม่ใช้ Schedule ในการ Scale แต่ใช้ปริมาณการใช้งาน CPU เป็นตัวกำหนด คือ Scale ได้มากที่สุด 3 Instance และถ้าใช้ CPU มากกว่า 60%-80% จะทำ Auto Scaling ให้อัตโนมัติ ถ้าอยากรู้ว่า Auto Scaling จริงหรือเปล่าก็ลองทำ load test ได้ครับ ;)