วันอาทิตย์ที่ ๒๖ กุมภาพันธ์ พ.ศ. ๒๕๖๖

เครื่อง MacBook Pro ปัญหาตอนติดตั้ง Flutter

 เครื่อง MacBook Pro ปัญหาตอนติดตั้ง Flutter


ตอนใช้คำสั่ง    flutter doctor ที่ terminal 

ขึ้นข้อความว่า


"xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

Doctor summary (to see all details, run flutter doctor -v):

Failed to find the latest git commit date: VersionCheckError: Command exited

with code 1: git -c log.showSignature=false log HEAD -n 1 --pretty=format:%ad

--date=iso

Standard out: 

Standard error: xcrun: error: invalid active developer path

(/Library/Developer/CommandLineTools), missing xcrun at:

/Library/Developer/CommandLineTools/usr/bin/xcrun"



วิธีแก้ปัญหาคือ


ใช้คำสั่ง


  ~ sudo xcode-select --reset

  ~ sudo xcode-select --switch /Applications/Xcode.app

  ~ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer



อ้างอิง  


https://stackoverflow.com/questions/32893412/command-line-tools-not-working-os-x-el-capitan-sierra-high-sierra-mojave/32894314#32894314


https://tutorialhorizon.com/tips/xcode-select-error-tool-xcodebuild-requires-xcode-but-active-developer-directory-librarydevelopercommandlinetools-is-a-command-line-tools-instance/





วันพุธที่ ๑๑ ตุลาคม พ.ศ. ๒๕๖๐

การกำหนดให้ Application ที่เราเขียนให้ทำงานอัตโนมัติตั้งแต่การ Boot

จากที่ได้เขียนโปรแกรมลงใน Raspberry Pi และนำไปฝึกอบรมให้ผู้สนใจทำตาม จะมีคำถามที่น่าสนใจจากผู้เข้าอบรมอยู่คำถามหนึ่งคือ

"เมื่อเราจะใช้ Application เราไม่ต้องมาต่อเม้าส์ ต่อจอ และคีย์บอร์ด เพื่อมาคลิกให้ Application ทำงานทุกครั้งด้วยหรือ"

ขอตอบในเบื้องต้นว่า สมัยที่ยังไม่มีวินโดวส์ เราจะเจอไฟล์ประเภท autoexec.bat ที่เขียนขึ้นมาเพื่อให้มันทำงานทันทีหลังจาก boot DOS เสร็จ ฉันใดก็ฉันนั้น ใน Linux Raspbian ก็สามารถสั่งให้มันทำงานตั้งแต่ boot เลยก็ได้เช่นกัน และมีหลายวิธีด้วยกัน แต่วิธีที่ง่ายที่สุด และเหมาะสมกับงานควบคุม on-off อุปกรณ์ไฟฟ้า ได้แก่ การเขียนไฟล์เพิ่มลงไปใน crontab จะง่ายที่สุด เรามาเริ่มทำกันเลยดีกว่า

ที่ terminal ใช้คำสั่ง

1. sudo crontab -e

ให้เพิ่มคำสั่งต่อไปนี้ ในบรรทัดท้ายสุด

@reboot python /home/pi/iot-application.py &


สมมุติว่า โปรแกรมของเราชื่อว่า iot-application.py
และอยู่ใน path ของ /home/pi/

2. Save ด้วยการกด Ctrl+o แล้วกด enter
3. ปิดด้วยการกด Ctrl+x

4. ทดลอง Boot เครื่องใหม่เพื่อทดสอบว่าทำได้จริงหรือไม่ ด้วยคำสั่ง

sudo reboot

ถ้ามันทำงานถูกต้องทุกประการ ถือว่า ได้ตามวัตถุประสงค์ทุกประการ

ข้อสงสัย ให้ชวนคิด

สมมุติว่า เรามี Application หนึ่งสำหรับรดน้ำสวนเมล่อน อีก Application สำหรับรดน้ำในสวนมะเขือเทศ และต้องการให้ทำงานทั้ง 2 Application พร้อมกัน ตั้งแต่ตอน Boot คุณคิดว่า มันสามารถทำงานได้ไหม และจะเขียนคำสั่งอย่างไร



วันพุธที่ ๒๙ มิถุนายน พ.ศ. ๒๕๕๙

Internet of Things (IoT) ตอนที่ 5

ตอนที่ 5 ว่าด้วยเรื่อง Raspberry Pi กับการต่อ input ที่เป็น micro switch เข้าทาง GPIO

การต่อสัญญาณเข้าไปประมวลผลใน MCU ของ Raspberry Pi เปรียบเสมือนกับการที่เราใช้ keyboard ป้อนข้อมูลเข้าเครื่องคอมพิวเตอร์ เพียงแต่ Raspberry Pi ได้ออกแบบ GPIO สำหรับให้เราต่ออุปกรณ์อิเล็คทรอนิกส์ เช่น สวิทช์ เพื่อส่งสัญญาณไปบอก MCU ว่ามีการกด หรือส่งสัญญาณไป แล้วคำสั่งใน MCU จะไปประมวลผลเพื่อไปควบคุมเครื่องใช้ไฟฟ้า หรืออุปกรณ์อิเล็คทรอนิกส์อีกทีหนึ่ง

แต่การต่อไมโครสวิทช์ ที่เราจะต่อวงจรเองนั้น มีความซับซ้อนและมีปัญหาหลาย ๆ อย่าง ในกรณีที่จะนำไปใช้งานจริง จึงต้องทดสอบ และพิถีพิถัน ให้มากยิ่งขึ้น

วงจรการต่อสวิทช์

การต่อสวิทช์ที่เกี่ยวข้องกับงาน MCU นั้น มี 2 วิธี ได้แก่


  • การต่อให้ส่งสัญญาณไปยัง MCU เป็น  0 volt หรือ Active Low
  • การต่อให้ส่งสัญญาณไปยัง MCU เป็น 3.3 volt หรือ Active Hi

วงจรสวิทช์ที่ทำงานแบบ Active Low






กรณีที่เป็น 0 volt (active low) นั่นหมายถึง ปกติแรงดันไฟฟ้าที่รออยู่เป็นสถานะ Hi หรือมีแรงดันไฟฟ้าประมาณ 3.3 volt เพราะกระแสไฟฟ้าจะไหลจาก vcc 3.3v ผ่าน R1 ที่เป็นความต้านทานขนาด 10K และผ่าน R2 ขนาด 1K ไปยังขา GPIO IN 

แต่เมื่อเรากดสวิทช์ สถานะ Hi จะเปลี่ยน Low เพราะว่า ขากราวด์ (0 volt) จะไหลผ่านสวิทช์ ไปสู่ R2 แล้วไปสู่ขา GPIO IN  ในขณะที่ R1 มีความต้านทานสูงถึง 10 K มันจึงไม่สามารถไหลผ่านไปได้ ตามหลักการของไฟฟ้าที่กระแสไฟฟ้าจะไหลผ่านสิ่งที่มีความต้านทานน้อยกว่า

วงจรสวิทช์ที่ทำงานแบบ Active Hi



การทำงานของวงจรสวิทช์แบบนี้ จะทำงานตรงกันข้ามกับแบบแรก ให้พิจารณาที่สวิทช์และ R1 จะสลับกับภาพแรก ดังนั้น เมื่อกดสวิทช์แรงดันไฟฟ้า 3.3 volt จากขา Vcc จะไหลผ่านสวิทช์ผ่านไปยัง R2 แล้วไปยังขา GPIO IN ประมาณแรงดันที่ 3.3 volt หรือ Active Hi นั่นเอง


การเขียนโปรแกรมทั้งสองวิธีก็แตกต่างกัน แต่ในปัจจุบันอุปกรณ์ที่เป็น micro switch ที่ใช้ในงาน MCU มักจะทำมาขายสำเร็จรูปมีความต้านทานอยู่ภายในอยู่แล้ว จึงมีขาเสียบ 3 ขา คือขา Vcc, GND และขาต่อ GPIO 

ในบอร์ดของ Arduino อาจต้องต่อวงจรแบบนี้ แต่สำหรับ Raspberry Pi แล้ว เขาออกแบบมาให้สามารถต่อวงจรไม่ต้องใช้ R ทั้ง 2 ตัวเลยก็ได้ ดังนี้



จากวงจรสวิทช์ที่ต่อใน breadboard นั้น เราสามารถต่อขาจาก Vcc 3v3 จาก GPIO มาเข้าขาเข้าสวิทช์ ส่วนขาออกสวิทช์ก็สามารถต่อไปยัง GPIO input ได้เลย แต่เราต้องกำหนดใน setup เป็นดังนี้


GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

มาดู Source code ในการเขียนคำสั่งเพื่อรับ input จาก switch กันเลย

--------------------------------------------------------------------
import RPi.GPIO as GPIO
import time
green = 18
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False) 
GPIO.setup(green,GPIO.OUT) 
GPIO.setup(17,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
i=0
while True:        
        if (GPIO.input(17)==1):        
                i+=1        
                print "button pressed: ", i
--------------------------------------------------------------------
จาก code นี้เพื่อแสดงให้เห็นถึงปัญหาจากการกดปุ่ม ในกรณีที่เขียนโปรแกรมแบบ poll หรือเข้าไปสอบถาม มันจะลูปซ้ำกันหลายครั้งในระยะที่เรากดครั้งหนึ่ง  นี้คือผลลัพธ์ของการกดปุ่ม 1 ครั้ง ด้านล่างนี้
จะเห็นว่ากดหนึ่งครั้งมันจะลูปประมาณ 1801 ครั้ง หากมีการกดสวิทช์ตัวถัดมา หรือตัวอื่น ๆ อาจจะมีปัญหา โดยเฉพาะมีการ delay ด้วย ดังนั้น raspberry pi จึงได้จัดให้มีคำสั่งสำหรับการเขียนแบบ ตรวจสอบการทำงานของปุ่มกดที่ขอบขาขึ้น และขอบขาลง คำสั่งดังตัวอย่างต่อไปนี้
--------------------------------------------------------------------
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM) GPIO.setup(17, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
i=0 while True: GPIO.wait_for_edge(17, GPIO.RISING)
i+=1 print "button pressed: ",i
-----------------------------------------------
ผลลัพธ์ที่ได้ จะแสดงข้อความว่า
     button pressed:  1
เพียงครั้งเดียวต่อการกด 1 ครั้ง เมื่อเรากดอีกครั้ง ข้อความจะเพิ่มเป็น
     button pressed:  2
แต่กรณีเราออกแบบให้มีสวิทช์หลายตัว เช่น ระบบจราจรที่กำลังจะทำให้ดูเป็นตัวอย่าง หากเขียนให้รอการกดปุ่มตามลำดับแบบนี้ ถ้าหากผู้ใช้กดปุ่มไม่เป็นไปตามลำดับก็จะมีปัญหา
มาดูวงจรของการทำสวิทช์ 4 ตัวเพื่อควบคุมจราจร 4 แยก ที่มีการกดปุ่มไฟเขียนตามลำดับ ดังนี้
----------------------------------------------------------
import RPi.GPIO as GPIO import time
ch1g = 21
ch1y = 20 
ch1r = 16
ch2g = 25
ch2r = 24
ch3g = 27
ch3r = 17
GPIO.setmode(GPIO.BCM) GPIO.setup(ch1g,GPIO.OUT) GPIO.setup(ch1y,GPIO.OUT) GPIO.setup(ch1r,GPIO.OUT) GPIO.setup(ch2g,GPIO.OUT) GPIO.setup(ch2r,GPIO.OUT) GPIO.setup(ch3g,GPIO.OUT) GPIO.setup(ch3r,GPIO.OUT)
GPIO.setup(05,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(06,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(13,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(19,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
def ch1():          
            GPIO.output(ch1g,GPIO.HIGH)          
            GPIO.output(ch2r,GPIO.HIGH)          
            GPIO.output(ch3r,GPIO.HIGH)          
            GPIO.output(ch1r,GPIO.LOW)
            GPIO.output(ch1y,GPIO.LOW)
            GPIO.output(ch2g,GPIO.LOW)
            GPIO.output(ch3g,GPIO.LOW)
def ch2():
            GPIO.output(ch2g,GPIO.HIGH)
            GPIO.output(ch3r,GPIO.HIGH)
            GPIO.output(ch1r,GPIO.HIGH)
            GPIO.output(ch1g,GPIO.LOW)
            GPIO.output(ch1y,GPIO.LOW)
            GPIO.output(ch2r,GPIO.LOW)
            GPIO.output(ch3g,GPIO.LOW)
def ch3():
            GPIO.output(ch3g,GPIO.HIGH)
            GPIO.output(ch2r,GPIO.HIGH)
            GPIO.output(ch1r,GPIO.HIGH)
            GPIO.output(ch3r,GPIO.LOW)
            GPIO.output(ch1y,GPIO.LOW)
            GPIO.output(ch2g,GPIO.LOW)
            GPIO.output(ch1g,GPIO.LOW)
while True:
               GPIO.wait_for_edge(05, GPIO.RISING)
               ch1()
               print "channel 1: "
               GPIO.wait_for_edge(06, GPIO.RISING)
               ch2()
               print "channel 2: "
              GPIO.wait_for_edge(13, GPIO.RISING)
               ch3()
               print "channel 3: "
----------------------------------------------------------------------------
ผลลัพธ์การทำงานของโปรแกรมดังแสดงในคลิป ด้านล่างนี้


วันพฤหัสบดีที่ ๒๓ มิถุนายน พ.ศ. ๒๕๕๙

Internet of Things (IoT) ตอนที่ 4

จากตอนที่ 1 ว่าด้วยหลักการ ความเป็นมา และอนาคตของ Internet of Things ซึ่งได้โน้มน้าวให้ผู้อ่านได้เห็นถึงความสำคัญ ให้อยากที่จะศึกษา อยากทดลองทำดู เผื่อว่าจะได้นำไปประยุกต์ใช้ในชีวิตประจำวัน หรือสร้างเป็น start up ดังที่เขาฮิตกัน

งาน Internet of Things นี้ขอบอกเลยว่า งานที่ยากที่สุด คือ ไอเดีย หรือความคิดสร้างสรรค์ หรือจินตนาการที่จะผลิตหรือสร้างอะไร ดังนั้น ทุกคนสามารถสร้างงานออกมาได้ โดยเฉพาะในด้านเทคนิควิธีการ เราสามารถหาอ่านเอาได้จากอินเทอร์เน็ต หรือดูจาก youtube

ตอนที่ 2 ได้เขียนถึงภาพรวม การทำงานของ Internet of Things มีองค์ประกอบอะไรบ้าง มันทำงานสัมพันธ์กันอย่างไร ถ้าให้ครบวงจรการทำงานของมันจะต้องใช้อะไรบ้าง

ตอนที่ 3 ได้เขียนถึง คำสั่งเพื่อทดสอบการทำงานของบอร์ด และได้ทดสอบโปรแกรม รวมทั้งการต่อวงจร LED เพื่อดูผลลัพธ์

มาตอนที่ 4 จะเป็นการเขียนโปรแกรมเพิ่มความซับซ้อนขึ้นมานิดหนึ่ง โดยจะจำลองเป็นการสั่งงานให้เปิดปิดไฟจราจร 3 สี แต่ทดลองทำเพียงด้านเดียวก่อน ถ้าต้องการทำหลายด้าน ก็สามารถทำได้โดยการเขียนคำสั่งให้พอร์ตอื่น ๆ ทำงานตามต้องการ

มาดู code กัน


#---------------------------------------------------------------------
#source code: traffic.py
import RPi.GPIO as GPIO
import time
red = 18
green = 23
yellow = 24
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(red,GPIO.OUT)
GPIO.setup(green,GPIO.OUT)
GPIO.setup(yellow,GPIO.OUT)

#function
def blink(pin, stime, count):
      for i in range(count):
              GPIO.output(pin,GPIO.HIGH)
              time.sleep(stime)
              GPIO.output(pin,GPIO.LOW)
              time.sleep(stime)

#main program
while True:
       #stop state
       GPIO.output(red,GPIO.HIGH)
       time.sleep(10)
       blink(red,0.25,5)
       GPIO.output(red,GPIO.LOW)

       #go state
       GPIO.output(green,GPIO.HIGH)
       time.sleep(10)
       blink(green,0.15,10)
      GPIO.output(green,GPIO.LOW)

      #stop ready
      GPIO.output(yellow,GPIO.HIGH)
      time.sleep(3)
      GPIO.output(yellow,GPIO.LOW)
      time.sleep(0.5)
#-------------------------------------------------------------
Save file กำหนดชื่อ traffic.py
เมื่อสั่ง Run โปรแกรมที่ terminal ด้วยคำสั่ง
$ sudo python traffic.py 

จะได้ผลลัพธ์ดังนี้



หากผู้อ่านได้ทดลองเอาคำสั่งของโปรแกรมนี้ไปใช้ ท่านต้อง 
ต่อขา 18 เป็น LED สีแดง
ต่อขา 23 เป็น LED สีเขียว
ต่อขา 24 เป็น LED สีเหลือง

ได้ทำเสนอแนะเกี่ยวกับการกระพริบของไฟเขียวและไฟแดง ไว้ในตอนท้าย เพื่อให้ผู้ขับรถเตรียมตัว หรือระมัดระวัง เอาไว้ด้วย

ในตอนต่อไปจะได้เขียนโปรแกรมเพิ่มฟังก์ชันให้ตำรวจจราจร กดปุ่มเพื่อปล่อยรถในแต่ละแยกได้ตามต้องการ

แล้วตอนถัดไป จะเขียนโปรแกรมให้มีการเก็บข้อมูลการกดปุ่มของจราจร เพื่อนำไปใช้ในการวิเคราะห์ (analysis) เพื่อใช้ในงาน internet of things ได้ครบวงจรต่อไป

โปรดคอยติดตาม......

วันจันทร์ที่ ๒๐ มิถุนายน พ.ศ. ๒๕๕๙

Internet of Things (IoT) ตอนที่ 3

ในระหว่างที่รอบอร์ด MCU ของ arduino เพื่อไม่ให้เสียเวลา ตอนนี้เรามาดูการเขียนโปรแกรมกับบอร์ดของ Raspberry Pi 2 Model B กันก่อนครับ

มาดูหน้าตาของ raspberry Pi 2 Model B กันก่อน




การต่อสาย power, keyboard, mouse, HDMI และสายต่าง ๆ จะไม่ขอกล่าวในที่นี้ เพราะคนที่จะทำตามนี้ได้ ต้องมีพื้นฐานด้านคอมพิวเตอร์มาบ้างแล้ว

ในส่วนของการติดตั้ง OS Respbian ก็ขอให้ศึกษาได้จาก web ของผู้ผลิตได้เลย ตามลิงค์ด้านล่างนี้

https://www.raspberrypi.org/documentation/installation/installing-images/README.md

ในขั้นต้นสมมุติว่า ได้ติดตั้ง OS Respbian เรียบร้อยแล้ว (ซึ่งมันก็คือ linux นั่นเอง)

ต่อไปเป็นการเตรียมความพร้อมที่จะใช้ภาษา python และ ติดตั้ง library ของ GPIO ตามขั้นตอนดังนี้

1. $ sudo apt-get update
2. $ sudo apt-get upgrade

ทั้ง 2 คำสั่งนี้เพื่อทำซอฟต์แวร์ OS และที่เกี่ยวข้องให้เป็นปัจจุบัน

เนื่องจาก ภาษา python นั้น Raspberry Pi ได้ติดมาแล้ว จึงสามารถใช้ได้เลย

และคาดว่า library GPIO จะได้ติดมาแล้วกับการติดตั้งหรือ upgrade OS

ต่อไปเป็นการทดสอบ import GPIO module ของ python

เริ่มด้วย  Menu --> เขียนโปรแกรม --> Python 2 (IDLE)




พิมพ์คำสั่งนี้ แล้วกด Enter

>> import  RPi.GPIO as GPIO

ถ้าหากไม่แสดงผล error ออกมาแสดงว่า Raspberry Pi ของเรามี library GPIO เรียบร้อยแล้ว

ถัดจากนั้นให้สร้างไฟล์เพื่อเขียนโปรแกรมกันเลย

โดยการเลือกรายการ File --> New File

จากนั้นลงมือเขียนโปรแกรมทดสอบการทำงานของ GPIO ก่อน

วันอาทิตย์ที่ ๑๙ มิถุนายน พ.ศ. ๒๕๕๙

Internet of Things (IoT) ตอนที่ 2

ในตอนที่ 2 นี้จะแสดงให้เห็นถึงความหมายโดยรวมของ IoT ว่ามีลักษณะอย่างไร เหมือนหรือแตกต่างจากสมองฝังตัว (embedded) อย่างไรบ้าง ก่อนอื่นให้พิจารณาภาพต่อไปนี้อย่างละเอียดเสียก่อน





IoT ที่ครบถ้วนสมบูรณ์ควรประกอบด้วยองค์ประกอบที่สำคัญ ๆ ดังนี้


1. Input unit

หน่วยนำเข้าข้อมูล ได้แก่ Sensors ที่มีทั้งแบบ analog และแบบ digital

Sensors ที่เป็น analog ได้แก่ เครื่องวัดแสง เสียง อุณหภูมิ  ความชื้น ความเร็วลม กระแสการใช้พลังงานไฟฟ้า ความตึง น้ำหนัก ค่าออกซิเจนในน้ำ ความหวาน ความเค็ม ความเผ็ด ค่าความเป็นกรด ด่างในดินหรือน้ำ (ph) และคุณสมบัติการนำไฟฟ้า (electrical conductive : EC) เป็นต้น

Sensors ที่เป็น digital ได้แก่ switch ประเภทต่าง ๆ เช่น micro switch, push button switch, toggle switch, rotary switch, selector switch, slide switch, DIP switch, proximity switch, op-to switch, สวิทช์วัดแสง, remote control, limit switch, pressure switch, reed switch, switch ลูกลอย วัดระดับน้ำ  ฯลฯ

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

2. MCU : Micro controller unit หรือ Microcomputer Unit

ทำหน้าที่ประมวลผล ที่ต้องเขียนคำสั่งให้ไปเก็บเอาไว้ในหน่วยความจำก่อน เพื่อทำหน้าที่ควบคุม ทั้ง input และ Output ซึ่งชุด MCU จะมีทั้ง Arduino และ Raspberry Pi
จากภาพจะเห็นว่า จะมีตัว Arduino 2 ตัว เพื่อแสดงให้เห็นว่า ในการใช้งานจริงอาจจะมีอุปกรณ์ที่ต้องรับเข้า (sensor) หลายชนิด หรือหลาย ๆ ตัว หรืออาจจะติดตั้งอยู่ในระยะที่ไกลกัน จำเป็นต้องใช้การสื่อสาร WiFi เพราะว่าบอร์ด arduino รุ่นใหม่มี WiFi อยู่ภายในบอร์ดแล้ว ในขณะที่ราคาถูก 300-500 บาทเท่านั้น

ตัว MCU จะทำหน้าที่เก็บโปรแกรมที่เราเขียนเอาไว้แล้ว มาประมวลผลรับเอาอินพุทมาแล้วส่งต่อไปยัง output เช่น สมมติว่า ระบบเซ็นเซอร์อุณหภูมิภายในห้องแช่แข็งเก็บอาหาร หากอุณหภูมิภายในห้องน้อยกว่า 3 องศาให้ตัดการทำงานของคอมเพรซเซอร์ แต่หากอุณหภูมิสูงกว่า 10 องศาให้คอมเพรซเซอร์ทำงาน เป็นต้น การเขียนโปรแกรมก็เพียงเข้าไปสอบถามว่า อุณหภูมิจากอินพุทเท่าไหร่ ถ้าน้อยกว่า 3 ก็จะส่งให้ output port ส่งสัญญาณดิจิทัล off ไม่ให้ relay ทำงาน ในทางกลับกันหากอุณหภูมิ มากกว่า 10 ก็ส่งให้ขา output port ทำหน้าที่ on ให้รีเลย์สวิทช์ทำงานเพื่อให้เครื่องคอมเพรซเซอร์ทำงาน

ในชุด IoT จะมี MCU ทั้งตัวเล็ก เช่น arduino ที่เป็น micro controller ขนาดเล็ก และ Raspberry Pi ที่ถือได้ว่าเป็นทั้ง Micro controller และ Microcomputer เพราะข้างในนั้นสามารถลง OS และ application ได้มากมาย แม้แต่ลง LAMP (Linux, Apache, MySQL, PHP) ก็ยังได้ จัดทำเป็น Server ขนาดเล็กก็ยังได้

ในภาพจะเห็นว่า ตัว arduino ยังส่งข้อมูลไปหา Raspberry Pi ได้ด้วย ดังนั้น ในตัว arduino จัดว่าเป็นตัว input หนึ่งของ raspberry Pi ด้วย แต่ในกรณีที่รับอินพุทจำนวนไม่มากนัก เราสามารถใช้เฉพาะ raspberry Pi เพียงตัวเดียวก็ได้ เพราะในตัว raspberry Pi มี IO ที่เรียกว่าขา GPIO มีจำนวนมากพออยู่แล้ว  แต่ถ้าสำหรับใช้ในโรงงานขนาดใหญ่เราจำเป็นต้องมีให้ครบชุด เพื่อการใช้งานเป็นระบบอินเทอร์เน็ตสมบูรณ์แบบ

3. Output 
     ตัว output จะเป็นขาออกของพอร์ตในตัว arduino และ raspberry Pi ขา output เหล่านี้จะต่อไปขับวงจรอิเล็คทรอนิกส์เพื่อไปควบคุม relay หรือ วงจรอื่น ๆ ให้ทำหน้าที่ on หรือ off ในขณะที่เป็น analog จะไปเร่งหรือหรี่กระแสไฟฟ้าได้ เช่น เร่ง LED ให้สีสว่างเข้ม หรือลดความความสว่างของ LED ลง หรือการผสมสีของ LED ประเภทผสมสีได้ คือ Red Green Blue ผสมเป็น 16.7 ล้านสีได้

output ที่นำไปใช้งานส่วนใหญ่จะเป็นงานทางด้าน on-off เครื่องใช้ไฟฟ้า มอเตอร์ไฟฟ้า การขับเคลื่อนกลไก ต่าง ๆ อุปกรณ์ประเภท driver เหล่านี้จะมีชุดสำเร็จขายเรียบร้อยแล้ว มีสายขั้วต่อที่ออกแบบมาพร้อมกับชุดเพื่อทดสอบการทำงานเบื้องต้นได้ เช่น

มี LED ทดสอบการทำงาน on-off
มี relay ทดสอบการ on-off พร้อมมีเสียง และต่อวงจรไฟฟ้า 220 volt ได้เลย
มี solid state relay หรือ transistor drive สำหรับขับมอเตอร์แบบ stepping เป็นต้น

   4. Internet 

  แน่นอนว่า internet of   things จำเป็นจะต้องมี internet หากขาดสิ่งนี้ไป มันจะเป็นเพียง embedded หรือระบบสมองฝังตัว เท่านั้น

ดังนั้น การเชื่อมต่ออินเทอร์เน็ต ส่วนใหญ่มักจะใช้ WiFi ที่มีอยู่ในตัวของ arduino และ raspberry pi (โดยเฉพาะ version 3 มี WiFi/ Bluetooth มาด้วย) เข้ากับ Access point ที่เรามีอยู่แล้วก็ได้ หรือสามารถให้ raspberry pi config ให้เป็น access point ได้ด้วย ดังนั้น เราสามารถเขียนโปรแกรมให้เป็น web server ให้ผู้ใช้สามารถมองเห็นสถานะการทำงานของ arduino หรือ raspberry pi ผ่านทาง browser ในอินเทอร์เน็ต หรือจาก application ใน smart phone ได้ และเราสามารถสั่งงานผ่านทางโปรแกรมเว็บ application ได้โดยตรงด้วย

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

นอกจากนี้ MQTT protocol ยังมีให้ใช้ใน cloud computing จึงถือได้ว่า IoT มีความสมบูรณ์แบบที่สุดในขณะนี้ สามารถนำไปใช้กับทุก ๆ วงการ เช่น ธุรกิจ logistics, smart factory, smart room, smart classroom เป็นต้น

สุดท้าย ถ้าหากเราเก็บข้อมูลสถานะการทำงานของแต่ละอุปกรณ์ไว้ในฐานข้อมูล เราก็สามารถนำเอาข้อมูลเหล่านั้นมาวิเคราะห์เพื่อใช้เป็น decision support system หรือทำเป็น data warehouse, data-mart, หรือ big data ได้

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

ในตอนที่ 3 จะได้ลองเขียนโปรแกรมเพื่อสั่งงานอุปกรณ์เครื่องใช้ไฟฟ้าให้ดูเป็นตัวอย่าง โปรดติดตาม

วันพุธที่ ๑๕ มิถุนายน พ.ศ. ๒๕๕๙

Internet of Things (IoT) ตอนที่ 1

Internet of Things: IoT แปลเป็นภาษาไทยได้ว่า อินเทอร์เน็ตของสรรพสิ่ง หนังสือบางเล่มจะเขียนในลักษณะ internet of (every) things เพื่อให้ผู้อ่านได้เข้าใจโดยตรงทันที ไม่ต้องมีคำอธิบายความหมายก็เข้าใจได้ว่า ทุกสิ่งทุกอย่างที่ผลิตขึ้นมาตั้งแต่นี้เป็นต้นไปต้องให้สามารถเชื่อมต่อกับอินเทอร์เน็ตให้ได้”

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

ทิศทางที่แล้วมาและในอนาคตของ IoT

SRI เป็นองค์กรที่ให้คำปรึกษาด้านธุรกิจได้เก็บข้อมูลและทำนายไว้ว่า นับตั้งแต่ปี 2000 มีการใช้ RFID ในธุรกิจ supply-chain ในระยะ 10 ปีต่อมาก็มีการนำมาใช้กับธุรกิจ การรักษาความปลอดภัย สุขภาพอนามัย การขนส่ง อาหารปลอดภัย และคาดว่าในปี 2020 จะมีระบบติดตามตัว ทราบตำแหน่งที่อยู่บุคคลได้ และคาดว่าต่อไปภาคหน้าจะเป็นยุคของ physical-world web ไม่ใช่ world wide web อีกต่อไปแล้ว

Gartner เป็นองค์กรที่สำรวจด้านกิจการต่างของวงการอินเทอร์เน็ต ได้พบว่า 10 ลำดับของเทคโนโลยีในปี 2016 นี้ มีดังนี้
10. ได้แก่ สถาปัตยกรรมและแพลตฟอร์มของ IoT
9. ได้แก่ App ที่เชื่อมโยงกัน และสถาปัตยกรรมบริการ (service architecture)
8. ได้แก่ ระบบสถาปัตยกรรมขั้นสูง (advanced system architecture)
7. ได้แก่ สถาปัตยกรรมความปลอดภัยที่ปรับตัวเองได้ (adaptive security architecture)
6. ได้แก่ ระบบชาญฉลาดอัตโนมัติ
5. ได้แก่ การสอนให้เครื่องจักรกลเรียนรู้ได้ในขั้นสูง (advanced machine learning)
4. ได้แก่ สารสนเทศของทุกสรรพสิ่ง (information of everything)
3. ได้แก่ 3-D printing
2. ได้แก่ ประสบการณ์การใช้งานของบุคคล
1. ได้แก่ อุปกรณ์ที่เชื่อมต่อถึงกัน

มาดูกันว่าเขากำลังทำอะไรกันอยู่กับเทคโนโลยีในปัจจุบัน

องค์กรที่ชื่อว่า Eclipse foundation ได้สำรวจ พบว่าเทคโนโลยี IoT มากที่สุด และลำดับต่อมาดังภาพ




จะพบว่าลำดับ 1 ซอฟต์แวร์สมองฝังตัว ทิ้งห่าง Web และ Big data และอื่น ๆ

แนวการประยุกต์ใช้ในงาน IoT ได้แก่  

การขนส่ง  อาคารที่อยู่อาศัย สำนักงานฉลาด ๆ  เมืองฉลาด ๆ การใช้ชีวิตประจำวัน  เกษตรกรรม โรงงานอุตสาหกรรม ห่วงโซ่อุปทานในธุรกิจส่งสินค้า งานด้านฉุกเฉิน สุขภาพ อนามัย ปฏิสัมพันธ์กับผู้ใช้งาน เป็นต้น

แล้วท่านผู้อ่านมีความคิดจะเอา IoT ไปทำอะไรให้โลกนี้น่าอยู่ น่าอภิรมณ์ บ้างครับ


---------------------------------------





วันเสาร์ที่ ๓ พฤษภาคม พ.ศ. ๒๕๕๗

การเลี้ยงหมูหลุม

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

หมูหลุม เป็นชื่อที่บ่งบอกถึงวิธีการเลี้ยง หรือบอกถึงลักษณะโรงเรือน โดยการทำโรงเรือนให้มีความลึก โดยการขุดพื้นดินลงไปตั้งแต่ 70-90 ซม. การเลี้ยงแบบนี้ เป็นวิธีเลี้ยงหมูของคนเกาหลีใต้ ซึ่งมีวัตถุประสงค์เพื่อลดต้นทุนของเกษตรกรที่ต้องการให้ครบวงจร นั่นคือ การนำเศษพืช หรืออาหารเหลือใช้มาเป็นอาหารหมู ในขณะเดียวกันของขับถ่ายของหมู จะถูกหมักเพื่อทำเป็นปุ๋ยหมักเพื่อนำไปเป็นปุ๋ยอินทรีย์ปลูกพืชต่อไป ในขณะที่เราสามารถขายหมูได้กำไรแล้ว ยังลดต้นทุนค่าปุ๋ยเคมีได้ทั้งหมด เช่น ถ้าเลี้ยงหมูหลุม 5 เดือน จำนวน 10 ตัว จะได้ปุ๋ยอินทรีย์ถึง 50-60 กระสอบทีเดียว รายละเอียดต่าง ๆ มีดังนี้


  • การสร้างโรงเรือน
โรงเรือนจะต้องหาพื้นที่ที่สูง ไม่มีน้ำขัง อากาศปลอดโปร่ง ปลูกโรงเรือนทิศตะวันออก-ตก เพื่อไม่ให้แสงแดดส่องถึงตัวหมู

ความกว้าง ยาวที่เหมาะสมสำหรับการเลี้ยงหมู
จำนวนหมู 10 ตัว กว้าง 3 เมตร ยาว 6 เมตร 
จำนวนหมู 4 ตัว กว้าง 2 เมตร ยาว 3 เมตร ในกรณีที่มีพื้นที่จำกัด แต่หากต้องการเลี้ยงแม่พันธุ์ จะใส่หมูเพียง 1 ตัวเท่านั้น
หากต้องการเลี้ยง 20 ตัวควรแบ่งเป็น 2 คอก เพราะหมูจะแออัดแย่งอาหารกัน

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

เสาโรงเรือน ควรเป็นวัสดุที่คงทน เช่น ไม้เสาเนื้อแข็ง เสาปูนคอนกรีต เป็นต้น

การขุดหลุมภายในโรงเรือน ควรขุดลึก 70-100 ซม. ถ้าต้องการปุ๋ยคอกจำนวนมาก ควรลึก 1 เมตร 
ด้านขอบหลุมทั้งสี่ด้าน ให้ก่ออิฐบล็อกจากขอบบ่อขึ้นไปถึงระดับดิน โดยเพิ่มอิฐบล็อกอีก 1 แผ่น ก่อให้แข็งแรง อย่าให้ดินทรุดลงมาทำลายบล็อกซีเมนต์ได้ พื้นล่างสุดไม่มีการเทปูนรองใด ๆ ทั้งสิ้น ให้เป็นดินอย่างเดียว

การสร้างผนังกั้น มักนิยมใช้แผ่นไม้ที่เหลือใช้มากั้น หรือใช้กิ่งไม้ใหญ่ ๆ ตีเป็นช่อง ๆ ให้ลมผ่านได้ เช่น ทางใบตาล (ภาษาใต้เรียกว่า ทางโหนด) หรือ ไม้สน แต่ถ้าต้องการคงทน ทำเป็นอาชีพ เขาแนะนำให้เป็นซีเมนต์บล็อก มีช่องอากาศรูใหญ่ ความสูงประมาณ 1 เมตร 

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

  • การเตรียมการเลี้ยง
วัสดุที่ใส่ในหลุมประกอบด้วย แกลบ ขี้วัว หรือวัสดุสำหรับทำปุ๋ยหมัก เช่น หยวกกล้วยที่หั่นแล้ว จำนวน 1 ส่วน  รำ และเกลือแกง น้ำหมักจุลินทรีย์

ขั้นตอนการเตรียมหลุม
  1. ใส่หยวกกล้วย เศษพืช หญ้าแฝกรองพื้นในชั้นแรก หนาประมาณ 30 ซม. ราดด้วยน้ำจุลินทรีย์
  2. ใส่แกลบที่ผสมด้วยขี้วัว ขี้หมู ในชั้นที่ 2 หนา 30 ซม. เช่นกัน 
  3. ชั้นที่ 3 ใส่แกลบ 10-15 กระสอบ ผสมรำหยาบ 15 กก. เกลือแกง 1 กก. หนา 30 ซม. ราดด้วยจุลินทรีย์และน้ำจนชวก ทิ้งไว้ 10-15 วัน หรือจนกลิ่นแก๊สหมด หากปล่อยหมูทันที จะทำให้หมูดมกลิ่นแก๊ส จนตายได้
  • การคัดเลือกพันธุ์หมู
ควรเลือกพันธุ์ที่ดี อายุ 1-1.5 เดือน น้ำหนัก 10-15 กก. 

  • การให้อาหาร 
ใช้อาหารสำเร็จรูป 25 % ใช้พืช เช่น หยวกกล้วย ผัก 75 % หรือเศษอาหารจากโรงอาหารแทนได้ ควรผสมน้ำหมักจุลินทรีย์เล็กน้อยด้วย
ให้อาหารวันละ 2 ครั้ง เช้า เย็น
การให้น้ำ แบบอัตโนมัติที่หมูสามารถกินเองได้ หาซื้อที่ร้านอุปกรณ์การเกษตรหรือร้านขายอุปกรณ์ประปาขนาดใหญ่ จะมีขาย

ควรราดน้ำหมักจุลินทรีย์สัปดาห์ละ 2 ครั้ง


วันพุธที่ ๒๗ พฤศจิกายน พ.ศ. ๒๕๕๖

บันทึกไว้เป็นประวัติศาสตร์ให้ลูก หลานได้อ่าน

วันที่เขียนบันทึกครั้งนี้คือ วันพุธที่ 27 พฤศจิกายน พ.ศ. 2557
วันนี้เป็นวันที่คณะผู้ประท้วงรัฐบาลนายกยิ่งลักษณ์ ตั้งชื่อว่า วันมวลมหาประชาชนล้มระบอบทักษิณ โดยคณะแกนนำผู้ประท้วงมี 3 กลุ่มด้วยกันได้แก่ นายสุเทพ เทือกสุบรรณ ซึ่งได้ยอมลาออกจาก ส.ส. มาเป็นแกนนำ กลุ่มที่ 2 ที่ได้ประท้วงกันมานานกว่ากลุ่มคุณสุเทพ คือ กลุ่มของนายไทกร พลสุวรรณ ที่ได้สวนลุมเป็นสถานที่จัดตั้งม็อบ เลยเรียกว่า ม็อบสวนลุม ส่วนกลุ่มที่สาม โดยแกนนำ นายอุทัย ยอดมณี ผู้นำนักศึกษารามคำแหง ร่วมกับนายนิติธร ล้ำเหลือ (ทนายนกเขา) ได้ปักหลักประท้วงอยู่ที่ถนนอุรุพงษ์ จึงเรียกว่าม็อบอุรุพงษ์


ม็อบสวลุมพินี
ที่มา: ไทยรัฐ ฉบับวันที่   http://www.thairath.co.th/content/region/361478


ม็อบอุรุพงษ์
ที่มา ไทยโพสต์ ฉบับวันที่ 10 ต.ค. 2556 http://www.posttoday.com/media/content/2013/10/10/0BBED83EE761473ABCCA0768DC5A5D73.jpg



ม็อบสามเสน
ที่มา สำนักข่าวทีนิวส์ วันที่ 4 พ.ย. 2556 http://www2.tnews.co.th/userfiles/image/1(435).jpg


สาเหตุของการประท้วงในครั้งนี้ มาจากหลายสาเหตุด้วยกัน ยกตัวอย่างเช่น จากการตรวจสอบของฝ่ายค้านในเรื่องการทุจริตโครงการจำนำข้าว โครงการเงินกู้โดยออกกฎที่ฝ่ายค้านไม่สามารถตรวจสอบได้ และที่มวลประชาทุกคนยอมรับไม่ได้มากที่สุดคือ ความอหังการ ของ ส.ส.รัฐบาลเพื่อไทยในการออก พรบ.นิรโทษกรรมให้นายทักษิณ ชินวัตร พี่ชายนายกยิ่งลักษณ์ และแกนนำเสื้อแดง ซึ่งก่อนหน้านั้น ได้กระทำผิดกฏหมายจนถูกศาลอาญานักการเมืองได้ตัดสินลงโทษให้ติดคุก 2 ปี แต่ได้หลบหนีไปอยู่ต่างประเทศเสียก่อน

การออก พรบ.นิรโทษกรรม มีการยื่นในวาระแรกเพียงต้องการจะช่วยเหลือประชาชนผู้หลงผิดเข้าร่วมประท้วงในสมัยนายอภิสิทธิ์ เป็นนายก ในครั้งนั้นมีการทำผิดถึงขั้นเผาตึก ยึดถนนราชประสงค์ประท้วงนานหลายเดือน ทำร้ายทหาร และผู้ประท้วงโดยกองกำลังชายชุดดำ แต่เมื่อในขั้นตอนการตั้งกรรมการร่วมยกร่างมีการสอดแทรกข้อความให้มีการยกเลิกไม่เอาผิดกับการกระทำทุกสิ่งทุกอย่าง ที่ นช.ทักษิณ ได้กระทำเอาไว้ ตั้งแต่ ปี 2547-2556 เช่น การฆ่าตัดตอน (ยาเสพติด) คดีการประท้วงของชาวบ้านที่ อ.ตากใบ จนมีคนเสียชีวิต 78 คน เป็นต้น และได้นำผลการแก้ไขในขั้นกรรมาธิการมาพิจารณาในสภาเสร็จสิ้น สามวาระในวันเดียวในเวลาตีสี่ ด้วยเสียงท่วมท้น 310 เสียง ทำให้เกิดความไม่พอใจให้กับประชาชนผู้รักความเป็นธรรมทุกคน ซึ่งเห็นว่าเป็นการกระทำที่พวกมากลากไป และคิดว่ามีคนชักนำที่เป็นทักษิณควบคุมอยู่เบื้องหลัง กลุ่ม ส.ส.ที่ทักษิณ ซื้อตัวมาจำเป็นต้องยกมือ ตามคำสั่งเจ้านาย จึงถูกขนานนามว่า สภาทาส


บรรยากาศการประชุมสภา พรบ. นิรโทษกรรม
ที่มา เดลินิวส์ http://www.dailynews.co.th/imagecache/670x385/cover/315276.jpg

ความคับข้องใจดังกล่าว จึงได้มีแกนนำการประท้วงดังกล่างข้างต้น และเชิญชวนให้ประชาชนคนไทยที่รักความเป็นธรรมออกไปเดินขบวน ในอาทิตย์วันที่ 24 พ.ย. 2556 ผลการเชิญชวนในครั้งนั้น มีผู้เข้าร่วมประชุมนับล้านคน ในขณะที่ CNN รายงานข่าวว่ามีประชาชนประมาณ สองล้านคน เข้าร่วมเดินขบวน


ความไม่พอใจของประชาชนทุกกลุ่มต่อ พรบ. นิรโทษกรรม

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


ม็อบราชดำเนิน ที่มา: เดลินิวส์ http://www.dailynews.co.th/imagecache/670x385/cover/475224.jpg

ในวันที่ 25 พ.ย. 56 จึงได้เปิดยุทธการดาวกระจาย แยกกลุ่มคนออกเป็น 13 กลุ่ม ด้วยกัน ได้แก่ กลุ่ม 1 นำโดยนายสุเทพ เทือกสุบรรณเคลื่อนขบวนไป สำนักงบประมาณ กระทรวงการคลัง กลุ่ม 2.ไปกองบัญชาการทหารสูงสุด แจ้งวัฒนะ 3.กองบัญชาการกองทัพอากาศ ดอนเมือง 4.กอบทัพบก หา ผบ.ทบ. 5.กองบัญชาการกองทัพเรือ หา ผบ.ทร. 6.สำนักงานตำรวจแห่งชาติ 7. กองบัญชาการตำรวจนครหลวง 8.ช่อง3 9.ช่อง5 10.ช่อง7 11.ช่อง 9 mcot 12. ช่อง 11 กรมประชาสัมพันธ์ และ 13.กระทรวงมหาดไทย ทั้งนี้เป็นยุทธศาสตร์เพื่อหาแนวร่วมจากกลุ่มข้าราชการ พนักงานรัฐวิสาหกิจ ส่วนในกลุ่มสื่อสารมวลชนเพื่อให้ประชาชนสอบถามว่าองค์กรเหล่านั้นทำงานเพื่อใคร ส่วนสำนักงบประมาณก็มีวัตถุประสงค์เพื่อให้พนักงานหยุดการทำงาน ปิดการใช้เงินของรัฐบาล และในวันนั้นเองนายสุเทพ ได้ปักหลักนำกลุ่มมวลชนพักค้างคืนที่นั้นอีกแห่งหนึงต่อไป

วันที่ 27 พ.ย. 56 ได้ดาวกระจายไปยังกระทรวงทุกกระทรวง ให้เจ้าหน้าที่หยุดการทำงาน และรณรงค์ให้ชาวบ้านที่อยู่ต่างจังหวัดให้ไปรวมตัวกันที่ศาลากลางจังหวัดเพื่อให้มีการหยุดการทำงาน ปรากฏว่ามีหลายจังหวัดที่ประชาชนได้ทำตามที่นายสุเทพพูด เช่น จังหวัดสงขลา พัทลุง สตูล สุราษฎร์ฯ ภูเก็ต รวมทั้งจังหวัดในภาคอีสาน และภาคเหนือ ในวันนั้นเองตำรวจได้ขอให้ศาลอนุมัติออกหมายจับนายสุเทพ ข้อหากบฎ และร่วมกันทำความผิดฐานยุยงให้เกิดการหยุดงาน มั่วสุมกันตั้งแต่ 10 คนขึ้นไป ในขั้นต้นศาลได้ไม่อนุมัติในข้อหากบฏ แต่อนุมัติในข้อหาอื่น

อย่างไรก็ตามเมื่อมีประชาชนเพิ่มขึ้นเป็นจำนวนมาก แต่ทางรัฐบาลก็ยังไม่ยอมลาออกหรือยุบสภา และยังคงทำงานต่อไป ทั้งนี้ในวันที่ 26 และ 27 พ.ย. 56 มีฝ่ายค้านได้เสนอยัติไม่ไว้วางใจนายกรัฐมนตรี และรัฐมนตรีว่าการกระทรวงมหาดไทย 

ความคืบหน้าจะเป็นอย่างไร สุดที่จะพยากรณ์ได้ 


วันพฤหัสบดีที่ ๑ สิงหาคม พ.ศ. ๒๕๕๖

ระบบสารสนเทศเพื่อการบริหารและการตัดสินใจ

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

Executive information System : EIS หรือ Executive Support System : ESS เป็นระบบสารสนเทศประเภทหนึ่งของระบบสนับสนุนการตัดสินใจของผู้บริหารระดับสูง โดยวิธีการได้มาซึ่งข้อมูลที่เก็บเอาไว้อย่างเป็นระบบในฐานข้อมูล นำมาประมวลผล แล้วแสดงผลออกมาให้ผู้ใช้เข้าใจได้ง่าย รวดเร็วในการตัดสินใจ เช่น การแสดงผลเป็นกราฟ แผนภูมิต่าง ๆ ในกระบวนการประมวลผลอาจนำข้อมูลเก่า ๆ มาใช้ฟังก์ชั่นเพิ่มเติม เช่น การวิเคราะห์แนวโน้ม (trend analysis) การพยากรณ์ แล้วนำผลลัพธ์มาช่วยในการวางแผนกลยุทธ์  ใช้สำหรับติดตามสถานการณ์ปัจจุบัน ยกตัวอย่างในกรณี นำ EIS มาใช้ในมหาวิทยาลัย เช่น 

  1. ผู้บริหารอยากทราบสถานการณ์จำนวนนักศึกษาทั้งหมด ณ เวลานั้นจริง ๆ จำแนกตามคณะ จำแนกตามเพศ จำแนกตามภูมิลำเนา
  2. ต้องการหาแนวโน้มว่านักเรียนที่สนใจจะสมัครเข้าเรียนในมหาวิทยาลัยมีคณะใดบ้าง สาขาใด ได้รับความนิยมในปีหน้า หรือปีต่อไป
  3. ผู้บริหารอยากทราบว่าจำนวนห้องเรียนที่มีอยู่จะรองรับนักศึกษาที่รับเข้ามาใหม่ได้หรือไม่
  4. ผู้บริหารอยากทราบว่าอาจารย์จะรองรับกับจำนวนนักศึกษาหรือไม่ อาจารย์สาขาใดมีภาระงานเกินที่จำเป็นต้องรับเพิ่ม หรือสาขาใดมีภาระงานน้อย
  5. ตึกหรืออาคารที่สร้างขึ้นใหม่จำเป็นหรือไม่ที่จะต้องมีห้องน้าผู้หญิงเท่ากับจำนวนผู้ชาย ในเมื่อแนวโน้มน.ศ. ผู้หญิงมีอัตรามากกว่าผู้ชาย และการใช้เวลาทำธุระไม่เท่ากัน 
  6. ผู้บริหารอยากทราบว่าการใช้งบประมาณเป็นอย่างไร เป็นไปตามเป้าหรือไม่ จะต้องติดตามการใช้งานโครงการใดบ้าง
  7. ผู้บริหารอยากทราบค่าใช้จ่ายสาธารณูปโภค จำแนกแต่ละชนิด เพื่อจะได้นำไปลดค่าใช้จ่ายในด้านใดบ้าง
  8. ผู้บริหารอยากจะให้ความดีความชอบ เลื่อนขั้นเงินเดือน กับพนักงานในแต่ละคนได้ถูกต้อง ไม่มีข้อครหา เพราะระบบฐานข้อมูลเก็บข้อมูลภาระงาน การลา การขาด การประเมินบุคลากรเอาไว้หมดแล้ว
  9. ฯลฯ

ระบบสารสนเทศมันสามารถช่วยเรื่องเหล่านี้ได้ 

ลักษณะของ EIS 

EIS ที่ดีจะต้องเข้าถึงข้อมูลที่เป็นปัจจุบัน และเป็นจริง ที่เรียกว่า Data warehouse หรือ data mart ที่ถูกบันทึกอยู่ในระบบฐานข้อมูลหมดแล้ว

การประมวลผล ในเชิงลึก หรือการพยากรณ์ ต้องใช้ฟังก์ชันที่ถูกต้อง มีความน่าเชื่อถือสูง

การแสดงผล ควรแสดงเป็นแผนภูมิ กราฟประเภทต่าง ๆ ให้ตรงกับงาน ในขณะเดียวกันหากผู้บริหารอยากทราบรายละเอียด ก็สามารถคลิกดูรายละเอียดในเรื่องนั้น ๆ ได้

ระบบที่ดีควรตอบสนองทุก ๆ อุปกรณ์ที่เป็นไอที เช่น เครื่องสมาร์ทโฟน แท็บเบล็ต โน้ตบุ๊ค และพีซีทั่วไป และจะต้องรองรับเครือข่าย WWW 

ทั้งหมดนี้มหาวิทยาลัยราชภัฏสงขลาของเรานับว่าเป็นความโชคดีของเราที่มีฐานข้อมูลระบบ MIS ได้จัดทำไว้เรียบร้อยแล้ว หากทุกหน่วยงานนำข้อมูลบันทึกเข้าสู่ระบบทุก ๆ ฝ่าย การพัฒนาระบบ EIS ก็จะง่ายมากขึ้น





วันพฤหัสบดีที่ ๒ พฤษภาคม พ.ศ. ๒๕๕๖

เมื่อต้องการทำลิงค์ Read more ให้เป็นปุ่ม ใน Wordpress

จากบทความที่แล้ว สร้างลิงค์ Read moreให้เปลี่ยนเป็นสีน้ำเงิน เพื่อให้สวยงามขึ้นอีกขั้นหนึ่ง จึงทำเป็นปุ่มแทนลิงค์ มีหน้าตาคล้ายกับปุ่มของ Facebook การแก้ไขก็แก้ที่ css file เช่นเดิมคือ style.css มีขั้นตอนดังนี้

  • login to server
  • # cd  /var/.../..../wordpress/wp-content/themes/tarski/
  • # nano style.css
แก้ไข ส่วนของบรรทัดสุดท้ายจากเดิมที่เคยทำลิงค์สีน้ำเงินเอาไว้

.entry-content a,
.entry-summary a{/* CONTINUE READING */
color: #0000FF;
font-weight:bold;
text-decoration: none;
font-size: 15px;

}

.entry-content a:hover,
.entry-summary a:hover{/* CONTINUE READING */
color: #FF00;
text-decoration: underline;
}

เอาคำสั่งตัวสีแดงออกใช้คำสั่งนี้ต่อไปนี้แทน

        -webkit-box-shadow:rgba(0,0,0,0.0.1) 0 1px 0 0;
 -moz-box-shadow:rgba(0,0,0,0.0.1) 0 1px 0 0;
 box-shadow:rgba(0,0,0,0.0.1) 0 1px 0 0;
 background-color:#5B74A8;
 border:1px solid #29447E;
 font-family:'Lucida Grande',Tahoma,Verdana,Arial,sans-serif;
 font-size:12px;
 font-weight:700;
 padding:2px 6px;
 height:28px;
 color:#fff;
 border-radius:5px;
 -moz-border-radius:5px;
 -webkit-border-radius:5px;
  • Save ด้วยการกดปุ่ม Ctrl+O
  • ทดลอง refresh หน้าจอ wordpress
อ้างอิง http://graemeboy.com/css-buttons/

วันศุกร์ที่ ๒๖ เมษายน พ.ศ. ๒๕๕๖

Customize Read more link in Wordpress

การแก้ไขสีและขนาดตัวอักษรของลิงค์ Read more ของ Wordpress มีคนแนะนำวิธีการทำหลากหลายวิธี แต่สำหรับวิธีที่ใช้กับธีมของ Tarski มีดังนี้


  • login to server
  • # cd /var/..../..../wordpress/wp-content/themes/tarski/
  • # nano style.css
  • พิมพ์คำสั่งต่อไปนี้ต่อท้ายบรรทัดสุดท้าย

.entry-content a,
.entry-summary a{/* CONTINUE READING */
color: #0000FF;
font-weight:bold;
text-decoration: none;
font-size: 15px;
}

.entry-content a:hover,
.entry-summary a:hover{/* CONTINUE READING */
color: #FF00;
text-decoration: underline;
}



  • Save Ctrl + O, > Enter
  • Refresh Website
อ้างอิง:
http://wordpress.org/support/topic/changing-font-sizecolor-of-continue-reading

วันศุกร์ที่ ๒๒ มีนาคม พ.ศ. ๒๕๕๖

การออกแบบฐานข้อมูล กรณีศึกษา การส่ง SMS ชิงโชคของอิชิตัน

วันนี้ได้เห็นฝาขวดกรีนทีของอิชิตัน เขียนว่า ส่งรหัสมั่ว ซ้ำเกิน 3 ครั้ง ถูกตัดสิทธิ์!!!
 สืบเนื่องมาจากการอิชิตันส่งเสริมการขายมีนโยบายให้ส่งรหัสใต้ฝาผ่าน SMS เพื่อชิงโชค แล้วอาจเกิดมีคนทดลองส่งข้อมูลมั่ว ๆ เพื่อหวังให้ได้โชคทองเป็นล้าน หรือไอโฟน5

ปัญหาเหล่านี้จะแก้ไขได้ถ้าผู้ผลิตฝาขวด และนักวิเคราะห์และออกแบบฐานข้อมูลคอมพิวเตอร์ ของระบบรับ SMS ชิงโชคดังกล่าว มีความรู้ที่ถูกต้อง



1. การแก้ปัญหารหัสมั่ว ผู้ผลิตจะต้องมีมาตรฐานในการสร้างรหัสโดยสร้างหลักสุดท้ายสำหรับตรวจสอบที่ได้จากการคำนวณหลักต่าง ๆ มาบวก ลบ คูณ หาร กัน (แล้วแต่ผู้สร้างจะกำหนด ซึ่งปกติเขาจะไม่แจ้งสูตรให้คนทั่วไปทราบ) แล้วได้ผลลัพธ์มาหนึ่งค่าแล้วมาหารเอาเศษ (modulus)  ด้วย 10 ซึ่งผลที่ได้จะมี 0-9 ดังนั้นเมื่อใครก็ตามที่ส่ง SMS มาก็จะต้องประมวลผลหาหลักสุดท้ายก่อน ถ้าตัวเลขหลักสุดท้ายถูกต้อง ก็แสดงว่า ผู้ส่ง SMS มาจากฝาจริง แต่ในทางกลับกันถ้าผิดแสดงว่าส่งรหัสมั่วมา คนเขียนโปรแกรมรับ SMS ก็ไม่ต้องบันทึกข้อมูลเข้าสู่คอมพิวเตอร์ แบบนี้สามารถแก้ปัญหาจากลูกค้าส่งรหัสผิดพลาดที่เกิดจากมองตัวเลขไม่ชัดได้  และปัญหาที่เกิดจากผู้ส่งต้องเก็บฝาเอาไว้เป็นหลักฐานก็ไม่ต้องมาดูอีก

2. ในการแก้ปัญหาการส่งรหัสตัวเดิมซ้ำ แก้ได้โดยออกแบบฐานข้อมูล ให้กำหนดรหัสใต้ฝาเป็น Primary Key ในตารางที่รับข้อมูลจาก SMS ออกแบบมาอย่างน้อยต้องมีลักษณะดังต่อไปนี้

-------------------------------------------------
รหัสฝา                                          PK            
-------------------------------------------------
หมายเลขโทรศัพท์
-------------------------------------------------

บทสรุป ตามหลักทฤษฎีของฐานข้อมูลแล้ว เมื่อไรก็ตามที่เรากำหนดให้ฟิลด์ใด ๆ เป็น Primary Key
ฟิลด์นั้นจะไม่สามารถบันทึกข้อมูลนั้นซ้ำเข้าสู่ตารางได้เลย

หวังว่า แนวคิดง่าย ๆ แบบนี้คงมีประโยชน์สำหรับผู้ที่ยังแก้ปัญหาเหล่านี้ไม่ได้

สำหรับนักศึกษาสาขาคอมพิวเตอร์ ที่ทำโปรเจ็คแล้วมีข้อผิดพลาดจากการออกแบบ ขอให้พึงหลีกเลี่ยงข้อผิดพลาดง่าย ๆ แบบนี้ ที่มิอาจยอมให้ผ่านได้


วันศุกร์ที่ ๒๕ มกราคม พ.ศ. ๒๕๕๖

นโยบายและแนวทางการบริหารโปรแกรมวิชาคอมพิวเตอร์

สวัสดีครับ พี่น้องชาวคอมพิวเตอร์ที่รักทุกคน

ขอขอบคุณที่พี่ ๆ น้อง ๆ ให้เกียรติให้ผมได้ทำหน้าที่เป็นประธานโปรแกรมวิชาอีกครั้งหนึ่ง

ทุก ๆ ตำแหน่งหน้าที่ ผมคิดว่า ต่างก็มีความสำคัญไม่แพ้กัน เพียงแต่เรามีความคิดว่าทุกหน้าที่ของเราจะทำให้ดีที่สุด จะทุ่มเทกำลัง ความคิด เวลา ทุกสิ่งทุกอย่างที่พึงมีให้แก่งานนั้น ๆ แม้แต่งานสอนในห้องในแต่ละคาบก็ตาม

ในการบริหารงานโปรแกรมก็เช่นกัน ผมได้ปรารภแสดงความเห็นกับพี่ ๆ น้อง ๆ หลายคนว่า เราควรไปในทิศทางใด ก็ได้รับฟังความเห็นและแลกเปลี่ยนกันไป เป็นการพูดคุยกันอย่างไม่เป็นทางการ

ในบล็อกนี้ก็เป็นการสื่อสารอย่างไม่เป็นทางการเช่นกัน ซึ่งในครั้งนี้จะได้พูดถึงนโยบายโดยรวมของผมที่จะเกิดขึ้น

ผมตั้งโจทย์เอาไว้ไม่กี่ข้อ แต่ต้องการจะทำมากๆ นั่นคือ


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

 จริง ๆ แล้วมีหลายข้อ แต่ถ้าตั้งไว้หลายอย่างอาจไม่ประสบผลสำเร็จเลยสักอย่างเดียว
ดังนั้น จึงอยากจะตั้งเป้าหมายเอาไว้ในแต่ละด้านว่า


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

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