วันพฤหัสบดีที่ 31 มีนาคม พ.ศ. 2559

Linux : alias

Standard
      วันนี้ต้องพิมพ์ path ยาวๆ หลายๆ ครั้งเลยตั้งใจจะหาวิธีทำให้พิมพ์ง่ายๆ สั้นๆ ตอนแรกจะไปใช้ shell script แต่ปรากฎว่ารันแล้ว path ไม่เปลี่ยน ก็เลยไปหาเหตุผลสรุปว่าปกติถ้าเราเรียก shell script linux จะสร้าง subshell ขึ้นมารันคำสั่งนั้น ทำให้ไม่มีผลกับ shell ปัจจุบัน ก็เลยนึกถึงคำสั่ง alias ขึ้นมา
คำสั่ง alias คือ shortcut นั่นเอง เช่น 
alias DOWN="shutdown -h now"
ถ้าเราพิมพ์ DOWN คือคำสั่ง  shutdown -h now แต่การ reboot ทุกครั้ง alias จะหายไป ดังนั้นต้องใส่ทุกครั้งที่เปิดเครื่อง
#vi my_alias

     #!/bin/sh

     alias OSXBBB="cd /media/psf/Home/Documents/BBB/"

แก้ไขไฟล์ vi ~.bashrc แล้วเพิ่ม  source script/init_alias.sh ไว้ที่ล่างสุดของไฟล์

วันศุกร์ที่ 19 กุมภาพันธ์ พ.ศ. 2559

การ Compile Driver ของ QHY CCD สำหรับ OSX

Standard
       พอดีย้ายโลกใหม่ ไปใช้ CCD ของ QHY (สำหรับการถ่ายภาพทางดาราศาสตร์) ปัญหาคือผมใช้ OSX แต่ในเว็ปของ QHY เองไม่มี Driver สำหรับ OSX มาให้ ไปดูใน forum ในส่วนของ linux developer มีคนทำ driver ของ linux มาให้ (แต่ก็ compile ใช้กับ OSX ได้)  วิธีการก็งานแสนง่าย แค่ไป download code จาก git hub
git clone https://github.com/qhyccd-lzr/QHYCCD_Linux.git
จากนั้นก็
cd QHYCCD_Linux
ใช้ cmake เพื่อสร้าง Makefile
cmake -DCMAKE_INSTALL_PREFIX=/usr .
ขั้นในตอนนี้ต้องลง libusb ด้วย (#sudo port install libusb)
make
sudo make install
แต่ถ้าเป็น El Capitan จะติด permission ไม่สามารถ copy ไฟล์ที่ไป /usr/xxx ได้ ต้องไปปิด security ตรงนี้ก่อน วิธีการคือ

  1. restart เครื่อง พร้อมกด cmd+r เพื่อเข้า Recovery Mode
  2. เมื่อเข้า  Recovery Mode ให้เปิด Terminal 
  3. ใน Terminal พิมพ์ #csrutil disable
  4. reboot



Ref


วันพฤหัสบดีที่ 26 พฤศจิกายน พ.ศ. 2558

Qt 5 Programming X : Call C++ Method

Standard
     สวัสดีครับ มิตรรักแฟนเพลงทุกท่าน ต้อนรับตัวเองในการกลับมาเขียน Blog เกี่ยวกับ Qt QML อีกครั้งหลังจากห่างหายไปนานถึง 2 ป๊ 555+ พอดีมีเหตุต้องใช้งานกัน เขียนล่าสุดตอนนั้น Qt ยัง version 5.0 อยู่เลย ตอนนี้ไป 5.5 แล้วเอาเฮย์ย์ย์ย์ย์ย์ พอดีต้องไปสอนพี่ๆ น้องๆ เขียน Qt ก็เลยต้องมานั่งอ่านนั่งทำ อันที่จริงวิธีการเเรียก Method ของ Class ใน C++ อันนี้ผมเคยเขียนโค๊ดไว้และตั้งใจจะจดไว้ใน blog แต่ว่าด้วยอะไรหลายๆ อย่างทำให้ไม่ได้ทำ วันนี้ได้ฤกษ์ดี จัดซะหน่อย มาเริ่มกันเลยครับ โดยครั้งนี้จะอธิบายจากตัวอย่างโปรแกรมที่เขียนขึ้นนะครับ เพราะว่าดูแล้วมันซับซ้อน อันที่จริงผมเขียนเอง ผมก็ยัง งง งง กับมันอยู่เลย เอาเป็นว่า มือใหม่ แนะนำมือใหม่กว่าแล้วกันครับ โปรแกรมที่ทำขึ้นเป็นตัวอย่างจะแสดงตัวอย่างการ get, set ผ่าน method และการ call method อย่างเดียว



Install opencv on OSX

Standard

  1. Download macport
  2. Install cmake
  3. Download opencv source
  4. cmake opencv source file
  5. cmake -G "Unix Makefiles"
  6. make opencv
  7. make -j8
  8. Install opencv
  9. sudo make install




Ref

วันอังคารที่ 2 มิถุนายน พ.ศ. 2558

ซ่อน Version ของ Nginx

Standard
          ปกติ HTTP Header ของเวลาที่เรา request ไป Web Server จะส่ง ชื่อและ Version ตามมาด้วย แต่การบอก เลข Version และ Web Server ที่เราใช้งานอยู่นั่นย่อมเป็นสิ่งที่ไม่ดี มันเสี่ยงต่อความปลอดภัย ยกตัวอย่างเช่น ถ้าถ้าเราใช้ NGINX Version 1.5.2 อยู่แล้วมีวันนึง ทาง NGINX ประกาศ exploit ของ Version 1.5.2 ออกมา สบาย Hacker เลย ฉะนั้นเราจึงควรซ่อน ชื่อและ Version ของ Web Server ที่เราใช้งานอยู่ แต่เนื่องจากการซ่อนชื่อของ NGINX จะต้อง Compile Code ใหม่ แต่การซ่อนเลขเวอร์ชั่นนั้นทำได้ง่ายกว่า คือ
แก้ไขไฟล์ /etc/nginx/nginx.conf ในส่วนของ Server เพิ่ม server_tokens off; เข้าไป 

ลองตรวจสอบดูครับ

Header Server ก่อนปิด Version 

Header Sever หลังปิด Version

วันอาทิตย์ที่ 10 พฤษภาคม พ.ศ. 2558

Arduino : ทำไมเราควรใช้งาน #define

Standard
       
      ก็ตอนแรกตั้งใจจะเขียน แต่คิดอีกที ลองพูดดูดีกว่า ลองดูตามคลิปเลยครับ



Code ตัวอย่าง 

วันพฤหัสบดีที่ 7 พฤษภาคม พ.ศ. 2558

Arduino : จัดการข้อมูลจาก Serial Port ด้วย State Machine

Standard
     State Machine แปลตรงๆ ก็คือสถานะเครื่องจักร ถ้าใครเคยออกแบบวงจร Digital ด้วย Logic gate ที่มีสถานะ อาจจะพอนึกภาพออกมันคือรูปวาดกลมๆ แล้วมีเส้นลากไปลากมา
     State Machine เหมาะกับเอามาใช้กับข้อมูลแบบ Stream ที่เรารู้รูปแบบของข้อมูลที่แน่นอนครับ ซึ่ง Serial Port ก็เป็นข้อมูลแบบ Stream ด้วย
     โจทย์คือ เราจะรับข้อมูลแบบ stream ในรูปแบบ <XXXXXX>  โดยที่
< คือไบต์เริ่มต้น หรือ Header
> คือไบต์สิ้นสุด หรือ Footer
XXXXX คือข้อความ

     การเริ่มตอนออกแบบ State Machine เพื่อให้เห็นภาพง่ายๆ ควรเริ่มจากการวาดรูปแผนภาพ

วันพุธที่ 26 พฤศจิกายน พ.ศ. 2557

Compile tomcat native lib for CentOS 6

Standard
      จดไว้กันลืมหน่อย ตอนแรกผมต้อง config tomat6 ให้ใช้งานบน https แล้วตอนลงมันไม่มี lib libtcnative-1.so มาให้เลยต้อง compile เอง ซึ่งวิธีก็ง่ายๆ ต้องลง pcakage ต่างๆ ตามนี้ก่อน
yum -y install apr-devel openssl-devel java-1.7.0-openjdk-devel
Download tomcat-native จาก http://tomcat.apache.org/download-native.cgi 
จะได้ไฟล์ tomcat-native-1.1.32-src.tar.gz จากนั้น unzip ด้วยคำสั่ง
tar -vxf tomcat-native-1.1.32-src.tar.gz
  จากนั้นเข้าไปที่ folder native
cd tomcat-native-1.1.32-src/jni/native

 บน CentOS 6 java home จะอยู่ที่ /usr/lib/jvm/java-1.7.0 จากนั้นใช้ configure  เพื่อสร้าง Makefile
./configure --with-apr=/usr/bin/apr-1-config --with-ssl=yes --with-java-home=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.71.x86_64  
โดยต้องระบบ path ของ APR, java home และให้ใช้งาน SSL  ใช้คำสั่ง make เพื่อ compile lib
make && make install

ซึ่ง libtcnative-1.so จะอยู่ใน  /usr/local/apr/lib

วันจันทร์ที่ 20 ตุลาคม พ.ศ. 2557

OSX : ssh to remote host without password required and auto mount when login

Standard
     หลังจากที่ทำ network drive ผ่านทาง ssh ด้วย macfuse และ sshfs  มีความต้องการให้ mount drive อัตโนมัติหลังจากที่ login ซึ่งจะต้องทำ 2 อย่างคือ

  1. การสร้าง authorized keys จาก OSX แล้วไปเก็บใน remote server เพื่อเวลาที่จะ connect ไปแล้วไม่ต้องการให้ remote server ถามรหัสผ่าน
  2. script สำหรับตรวจสอบว่า OSX สามารถเชื่อมต่อกับ remote server ได้ และ mount drive


OSX mount network drive ด้วย sshfs

Standard
      ปกติการใช้งาน OS ตระกูล UNIX หรือ Linux จะมี ssh server ติดตั้งมาให้อยู่แล้วและการใช้งานดังนั้นถ้าหากต่อ network drive ด้วย ssh น่าจะสะดวกกว่าโดยที่ไม่ต้องลง samba เพิ่มเติม
ติดตั้ง application สองตัวคือ osxfuse และ sshfs จากเว็ป osxfuse.github.io  เมื่อติดตั้งเรียบร้อยลองเรียกโปรแกรม sshfs จาก terminal
$sshfs -V

วันพฤหัสบดีที่ 16 ตุลาคม พ.ศ. 2557

แก้ปัญหา bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)

Standard




     ปกติชอบใช้ Terminal ของ OSX ssh เข้า remote host แล้ว Default ของ Character encoding ของ Terminal เป็น UTF-8 ซึ้ง bash นั้นไม่รู้จักวิธีการแก้ไขง่ายนิดเดียว
vi /etc/environment

วันพุธที่ 15 ตุลาคม พ.ศ. 2557

Arduino : CPP and Assembly file

Standard
          Arduino ปกติตอนกด verify ของ arduino ตัว Arduino IDE จะแปลง code ที่เราเขียนขึ้นเป็นไฟล์ในรูปแบบ C++ แล้วมันอยู่ไหนล่ะ

วันพุธที่ 8 ตุลาคม พ.ศ. 2557

QT Creator : ERROR Could not resolve SDK path for 'macosx10.8'

Standard
     
     หลังจากการ upgrade OSX จาก 10.8 เป็น 10.9 ทำให้ QT ไม่เจอชุด SDK วิธีการแก้ไขคือ 
vi QT_ROOT_PATH/QT_VERSION/clang_64/mkspecs/qdevice.pri
แล้วแก้ไข บรรทัด
!host_build:QMAKE_MAC_SDK = macosx10.8
เป็น
!host_build:QMAKE_MAC_SDK = macosx10.9 
 

วันจันทร์ที่ 16 มิถุนายน พ.ศ. 2557

Arduino : ขับ Step Motor ด้วย Module THB7128

Standard
     ชุดขับ Step Motor ในปัจจุบันมีให้เลือกมายมายหลายแบบ แต่หลักๆ แล้วจะมี 2 แบบด้วยกันคือการขับด้วยชุดขับพวกวงจร H-Bridge เช่น L298 และชุดขับสำหรับ Step Motor โดยเฉพาะ เช่น THB7128 ซึ่งข้อแตกต่างของชุดขับ 2 ชนิดนี้คือ ราคา และ ความยากง่ายในการควบคุม ซึ่งแบบ H-Bridge นั้นจะมีราคาที่ค่อนข้างถูกว่า ชุดขับ Step motor โดยตรงแต่ก็มีความซับซ้อนกว่าในส่วนการควบคุม ซึงในบทความนี้ผมจะมาแนะนำการใช้งานชุดขับ Step Motor THB7128


วันพฤหัสบดีที่ 12 มิถุนายน พ.ศ. 2557

วันพฤหัสบดีที่ 5 มิถุนายน พ.ศ. 2557

อยู่ๆ ก็ไม่สามารถ Start service vboxweb-service

Standard



     Php-virtualbox อยู่ดีๆ ก็ไม่สามารถใช้งานได้ ลองใช้คำสั่ง Start ก็ Failed ลองไล่ไปไล่มา เจอว่า service vboxdrv ไม่ได้ start พอดู status ของ vboxdrv ด้วยคำสั่ง
$/etc/init.d/vboxdrv status

วันอังคารที่ 27 พฤษภาคม พ.ศ. 2557

Arduino : การเข้าถึงข้อมูลระดับบิตด้วย struct union

Standard
      พอดีมีโอกาสได้เขียน Arduino (รวมถึงภาษา C โดยทั่วไป) แล้วจะต้องจัดการข้อมูลในระดับบิต ซึ่งปกติก็ใช้การ shift bit แล้ว AND กับ 1 เพื่อดูว่าบิตในตำแหน่งที่สนใจเป็นค่าอะไร
(data >> BIT_INDEX) & 1 == ?

วันจันทร์ที่ 26 พฤษภาคม พ.ศ. 2557

Solaris : การทำ auto run script ตอนเครื่อง startup

Standard
     วิธีการทำ autorun script สำหรับตอนที่เครื่อง startup

  1. สร้างไฟล์ไว้ที่ /etc/init.d/FILE_NAME , chmod 755  แล้วใส่ script ตามนี้ 
  2. case "$1" in
        start)
            /usr/local/bin/EXECUTE_SCRIPT
            ;;
        stop)
            kill -9 /usr/local/bin/EXECUTE_SCRIPT.pid
            ;;
    esac

Solaris : การทำ Active - Standby บน Network Interface Card ด้วย IPMP

Standard
     การทำ Active - Standby ที่ขา Interface ของ Solaris 10 เพื่อกันกรณีที่ Link มีปัญหาหรือขาดแล้ว Server ไม่สามารถทำงานต่อได้โดยใช้ IP เดิม

   

วันศุกร์ที่ 16 พฤษภาคม พ.ศ. 2557

Atom : ปัญหาการ install package term แล้ว '/usr/include/util.h' file not found

Standard
     หลังจากใช้ Atom มาซักพักรู้สึกว่าสะดวกดี เลยอยากลองหา Package เพื่อช่วยอำนวยความสะดวกมาใช้ ก็เจอตัวนึงชื่อ term ซึ่งตัวนี้คือการใช้งาน Terminal ผ่านทาง Atom การวิธีใช้งานทำได้โดยไปที่เมนู Packages > term ซึ่งปัจจุบัน terminal สามารถจะอยู่ข้างขวา ซึ่งวิธิติดตั้งก็แต่ serach ใน package manager ชื่อ 'term' หรือใช้คำสั่ง apm install term ใน command line