แสดงบทความที่มีป้ายกำกับ Tutorial แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Tutorial แสดงบทความทั้งหมด

วันพฤหัสบดีที่ 16 กุมภาพันธ์ พ.ศ. 2560

ใช้งานคำสั่ง screen และ tmux

เชื่อว่าใครที่ต้องทำงานผ่าน ssh ไปยังเครื่องแม่ข่าย (แหม.. ศัพท์วิชาการเชียว) บ่อยๆ ต้องเจอปัญหากวนใจเหล่านี้กันบ้าง

  • มีหน้าจอเดียว ต้องออกจากหน้าปัจจุบัน เข้าหน้านู้น ไปหน้านี้ แล้วกลับเข้าหน้าเดิม ดูเหนื่อย (งง ป่าว?)
  • ทำงานค้างอยู่ ยังไม่ได้ save เลย โชคร้าย ssh หลุด!!! กลับมาต้องมาเริ่มใหม่ เศร้า
  • ฯลฯ (ปัญหาใครปัญหามันละกันนะครับ)
เลยมีคนพัฒนา software ประเภท terminal multiplexer ขึ้นมาแก้ปัญหาเหล่านี้ ที่มีคนพูดถึงมากก็มี GNU Screen กับ tmux

คุณประโยชน์ที่ GNU screen และ tmux มีต่อเรา

  • เปิดหลายๆ shell ได้จาก ssh session เดียว (Multiple shell windows)
  • จอมันกว้างอยากแบ่งหน้าจอทำงาน
  • ไฟดับ เน็ตสดุด หลุดออกจาก ssh ก็ยังเก็บ Shell active ให้เราอยู่
  • ไฟมา เน็ตลื่น ต่อเข้า ssh ใหม่ก็เปิดเรียกงานที่ค้างอยู่มาทำต่อได้เลย
  • คืนนี้มีต้อง run process ยาวๆ ทิ้งเอาไว้ ก็ไม่มีปัญหา run เสร็จปิด ssh ไปดูต่อที่บ้านได้เลย
  • โชว์สาว เปิดหลายๆ หน้าจอ run นู้นนี้นั้นละลานตา ประหนึ่งเทพ Hacker หลุดออกมาจาก Matrix :)

GNU Screen


GNU Screen จัดได้ว่าเป็นรุ่นใหญ่ออกมาให้ใช้ตั้งแต่ปี ค.ศ. 1987 และมักจะติดตั้งมากับระบบ *nix ตลอดมาจนปัจจุบัน (กราบ) มาแนวแก่แต่เก๋า minimal เรียบง่ายแต่ทรงพลัง

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

เริ่มการใช้งาน GNU Screen ด้วยการสั่ง
$ screen
การใช้งานจะสั่งเป็นลักษณะ prefix key แล้วตามด้วย command key สำหรับ prefix key ของ screen คือ "Ctrl-a" (กด Ctrl พร้อมกับ a แล้วปล่อย) 

ลองคำสั่งแรกกันเลยดีกว่า กด "Ctrl-a" "?" (กด Ctrl พร้อม a แล้วปล่อย หลังจากนั้นกด ? ตาม) ถ้าไม่มีอะไรผิดพลาดน่าจะเจอหน้า help ของ screen แบบนี้กันนะครับ
จะเห็นว่าเรามี command key ให้ใช้งานอีกเยอะแยะเลย แต่โพสท์นี้จะเอาแค่ที่จำเป็นสำหรับใช้งานก่อนนะครับ ที่เหลือไปลองกันเอาเอง แฮ่.. :P

สร้าง Windows เพิ่ม
กด "Ctrl-a" "c"
สลับไปมาระหว่าง Windows (next, previous) กด
กด "Ctrl-a" "n" , "Ctrl-a" "p"
แบ่งหน้าจอ (Split window)
กด "Ctrl-a" "S" 
** แบ่งหน้าจอแบบแนวนอน (Horizontally) 
กด "Ctrl-a" "|"
** แบ่งหน้าจอแบบแนวตั้ง (Vertically) *** แบ่งหน้าจอแบบนี้มีแค่ screen บาง distro เท่านั้น
สลับไปมาระหว่าง split (หน้าจอที่โดนแบ่ง)
กด "Ctrl-a" "Tab"
** หลังการ split หน้าจอของ screen เราต้องทำการ สลับไปยัง split ที่ต้องการแล้ว สร้าง window ใหม่ภายใน split นั้นอีกครั้งนะครับ หรือจะ "Ctrl-a" "n" เรียก windows เก่าที่เคยสร้างมาแล้วไปแสดงแทนก็ได้

ยกเลิก split
กด "Ctrl-a" "X"

ต่อไปเป็นส่วนที่ทรงพลังของ screen นั้นคือการ Detach และ Reattach

Detach ออกจาก screen
"Ctrl-a" "d"
หน้าจอจะกลับมาที่ shell หลักปกติของเรา หลังจากนี้เราสามารถออกจาก ssh ได้เลยโดยที่งานที่อยุ่ใน screen windows ไม่หายไปไหน

Reattach กลับเข้า screen
$ screen -ls
เป็นคำสั่งสำหรับแสดง list ของ screen ที่เราได้ทำการ Detach เอาไว้ เช่น จากภาพ เป็นหน้าจอที่ Detach เอาไว้ 2 screen
$ screen -r <pid>  # screen -r แล้วตามด้วยเลขชุดหน้าของ session เช่น screen -r 1861
เป็นการกลับเข้าไปยังหน้าจอ screen ที่เรา Detach ออกมา โดยถ้าเราเปิด screen ค้างไว้แค่อันเดียวก็ $ screen -r อย่างเดียวก็ได้ครับ

หยุดการใช้งาน Screen
"Ctrl-a" "k"
จะมี message มาให้ confirm คำสั่งอีกทีนึงก่อนนะครับ เป็นการ kill screen นั้นทิ้งเลย ระวังกันด้วยต้องแน่ใจว่าทำงานเสร็จแล้วจริงๆ นะครับ

tmux


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

tmux ไม่ได้ติดตั้งมากับ distro อยากได้ต้องลงเองตามสะดวกนะครับ
แนวคิดของ tmux จะต่างจาก screen อยู่เล็กน้อยตรงที่ tmux จะเริ่มที่ session ใน session มี windows และ panes

หลักการใช้งานก็จะเหมือน screen เลยนั้นคือกด prefix key แล้วตามด้วย command key ดังนั้นสำหรับ tmux จะไม่ขออธิบายมากเอาเป็นสรุป key ที่คิดว่าต้องใช้บ่อยๆ และจำเป็นไปเลยละกันเนอะ (แบบว่าขี้เกียจแล้ว)

เปิดใช้ tmux
$ tmux
หรือ
$ tmux new -s <session name>
แสดง Session ที่มีอยู่
$ tmux ls
Reattach กลับเข้า Session
$ tmux a -t <session name>

รวมคำสั่งสำหรับจัดการ Session, Windows, Panes เมื่ออยู่ใน tmux

Help me
"Ctrl-b" "?"
คำสั่งจัดการ Session
"Ctrl-b" "s"   // แสดงรายชื่อ session ที่มี สามารถใช้ ลูกศรเลือกไปยัง session นั้นๆ
"Ctrl-b" "$"   // ตั้งชื่อ Session ใหม่
"Ctrl-b" "d   // detach session ออกมาที่ shell หลัก
คำสั่งจัดการ Windows 
"Ctrl-b" "c"   // สร้าง Windows ใหม่
"Ctrl-b" ","   // ตั้งชื่อ Windows
"Ctrl-b" "w"   // แสดงรายชื่อ Windows ที่มี สามารถใช้ลูกศรเลือกไปยัง Windows นั้นๆ
"Ctrl-b" "n" , "p"   // สลับไปมาระหว่าง Windows
"Ctrl-b" "0-9"   // สลับไป Windows ตามหมายเลขกำกับ
คำสั่งจัดการ Panes
"Ctrl-b" "%"  // split Vertically Panes
"Ctrl-b" """   // split Horizontally Panes
"Ctrl-b" "{" , "}"  // โยกย้ายสลับ Panes
"Ctrl-b" "o"  // สลับไปมาระหว่าง Panes
"Ctrl-b" "!"   // ส่ง Panes ไปเป็น Windows
"Ctrl-b" "z"   // ขยาย/ย่อ Panes เต็มจอ (ต่างกับ "!" ตรงไม่ได้ขยายไปเป็น Windows
"Ctrl-b" "Ctrl-ลูกศร"   // ปรับขนาด Pane
"Ctrl-b" "x"   // ยกเลิก Panes
"Ctrl-d"   // ยกเลิก Panes (จริงๆ พิมพ์ exit ก็ได้เหมือนกัน)

เอาเท่านี้นะครับ เหนื่อยแล้ว - -"

สวัสดีครับ

วันพุธที่ 8 กุมภาพันธ์ พ.ศ. 2560

วิธีทำให้ USB Audio ใช้งานได้กับ Raspberry Pi 3

เคยบ่นเรื่องคุณภาพเสียงที่ออกมาทางช่อง 3.5mm audio jack ของ Raspberry Pi 3 ไปตั้งแต่ตอนเขียนเรื่องการติดตั้ง Raspbian แล้ว คราวนี้ถึงเวลากำจัดจุดอ่อนซะที :)

** บทความนี้น่าจะใช้ได้ทั้ง Raspbian และ RetroPie

เตรียมตัว

  • Raspberry Pi 3 ที่ลง Raspbian หรือ RetroPie แล้ว
  • จัดการเสียบ USB Audio (บ้านเราเรียก USB Sound Card) เข้ากับ Raspberry Pi ซะ ผมซื้อมาจากในเน็ตราคา 90 บาท ยังไม่รวมส่ง หน้าตาประมาณนี้ (ภาพประกอบจาก Internet)
    • จริงๆ จะใช้รุ่นอื่นก็น่าจะไม่มีปัญหาอะไร (แบบว่าอันนี้มันถูกสุดแล้วไงเลยจิ้มเอามาลอง)
    • ข้อดี คือมันกินไฟน้อย ราคาถูกมาก และเห็น review บน youtube ไปในแนวทางที่ดี 
    • ข้อเสีย ของรุ่นนี้คือ มันใหญ่เทอะทะ พอเสียบเข้าช่อง USB ด้านหลัง Raspberry Pi แล้วจะไปขวางช่อง USB อันอื่นๆ หมด โชคดีที่บ้านมีสายพ่วงมาต่ออีกที เลยรอดไม่ต้องออกเงินเพิ่ม - -"
  • เสียบๆ นู้นนี้นั้นครบแล้วก็ Boot Raspberry Pi ขึ้นมาเลย จากนั้นจะทำหน้าเครื่องหรือ ssh ก็แล้วแต่เลย

Setup

  • ลองตรวจสอบว่า Raspberry Pi ของเรามองเห็น USB Audio ที่เราเสียบเข้าไปแล้วหรือยังด้วย 

    • $ lsusb
  • หลังจากนั้นก็เช็คให้แน่ใจว่า USB Audio เราได้รับการ detected จาก os แล้ว
    • $ cat /proc/asound/modules
    • หน้าตา output น่าจะออกมาประมาณนี้
      • 0 snd_bcm2835
        1 snd_usb_audio 
    • เจ้า snd_bcm2835 ก็คือ built-in sound card นั้นเอง
  • ต่อมาจัดการบอก OS ให้มาใช้งาน snd_usb_audio โดยการสร้าง config file ดังนี้
    • $ sudo vim /etc/modprobe.d/alsa-base.conf
      จากนั้นก็ใส่ code พวกนี้ลงไป
      options snd_usb_audio index=0
      options snd_bcm2835 index=1
      options snd slots=snd-usb-audio,snd-bcm2835
  • เสร็จแล้วก็ Save และ reboot Raspberry Pi ซะก่อน
  • หลังจาก Reboot เสร็จแล้วลองตรวจสอบดูว่าตอนนี้ OS ใช้ Device ตัวไหนอยู่
    • $ cat /proc/asound/modules
    • หน้าตา output จะต้องออกมาประมาณนี้
      • 0 snd_usb_audio
        1 snd_bcm2835
  • จากนั้นก็ลองทดสอบดู
    • เปิด youtube เสียงต้องออกและคุณภาพเสียงต้องดีกว่าเดิม
    • สำหรับ omxplayer ต้อง redirect output ไปที่ alsa
      • $ omxplayer -o alsa video.mp4

จบ. :D

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

วิธีทำ Raspberry Pi ให้เป็น Print Server

เตรียมตัว


  • Raspberry Pi 3 ลง Rasbian และเปิด ssh เรียบร้อยแล้ว (ในบล็อกนี้เป็น Jessie with PIXEL)
  • Printer เสียบปลั๊กจ่ายไฟเปิดเครื่องให้เรียบร้อย (ในบล็อกนี้เป็น HP Deskjet Ink Advantage 2060 K110)
  • ต่อ Printer กับ Raspberry Pi ให้เรียบร้อยก่อนแล้วค่อยเปิด Raspberry Pi ขึ้นมา
  • ssh เข้าไปที่ตัว Raspberry Pi
    • $ ssh pi@192.168.x.x
  • ลองตรวจสอบดูว่า Raspberry Pi เห็น Printer ที่เราเสียบผ่าน port USB แล้วหรือยัง
    • $ lsusb

Setup Printer บน Raspberry Pi


ตอนนี้เรา ssh เข้าไปทำงานที่ Raspberry Pi แล้วนะครับ ขั้นแรกต้องลง driver ของ printer ที่เราใช้อยู่ก่อน ในบล็อกนี้เป็น printer ของ HP มี package สามารถติดตั้งผ่าน apt-get ได้เลย

ติดตั้ง driver printer HP
  • $ sudo apt-get update
  • $ sudo apt-get install hplip
ติดตั้ง CUPS
  • $ sudo apt-get install cups
เพิ่ม user pi เข้าไปใน group lpadmin
  • $ sudo usermod -a -G lpadmin pi
เสร็จแล้วก็ restart Raspberry Pi ก่อนนะครับ
  • $ sudo reboot
รอซักพักค่อย ssh เข้าไปที่ Raspberry Pi ใหม่ แล้วลองตรวจสอบดูว่า เราเข้าไปอยู่ใน lpadmin group แล้วหรือยัง
  • $ groups
ถ้าเห็นมีชื่อ lpadmin โผล่ขึ้นมาก็แสดงว่า pi อยู่ใน lpadmin group แล้ว

แก้ไข CUPS configuration file

เข้าไปแก้ไขไฟล์ /etc/cups/cupsd.conf (อย่าลืม copy file ต้นฉบับ backup เอาไว้ก่อน)
  • $ sudo vim /etc/cups/cupsd.conf
แก้ไขให้เครื่องอื่นๆ ภายใน network เดียวกันสามารถเข้าถึง CUPS ได้ก่อน
  • หาบรรทัด Listen localhost:631
  • แก้เป็น (ทำ comment ด้วย # ก็ได้)
  • Port 631
  • เพิ่ม 2 บรรทัดนี้เข้าไป
  • BrowseRemoteProtocals CUPS dnssd
  • BrowseAddress @LOCAL
ต่อมาหา # Restrict access to the server... แก้เป็น

<Location />
    Order allow, deny
    Allow all
</Location>

ต่อมา # Restrict access to the admin pages...

<Location /admin>
   # ลบออกให้หมดหรือ comment ไว้ก็ได้
</Location>

ต่อมาหา <Location /admin/conf> ให้ไปลบ (หรือ comment) บรรทัด Order allow, deny ออกไป หลังจากนั้น save file แล้วสั่ง reload service
  • $ sudo service cups reload
จบขั้นตอนบน ssh ต่อไปสามารถทำงานต่อผ่าน Browser ได้แล้วจะทำบนเครื่องหลักหรือจะ remote เข้าไปทำที่หน้าเครื่อง Raspberry Pi เลยก็ได้ 
  • เปิด Browser
  • ถ้าทำงานผ่านเครื่องอื่นๆ อยู่ก็ http://192.168.x.x:631
  • ถ้าทำงานอยู่หน้าเครื่อง Raspberry Pi หรือจะ VNC Remote เข้าไปก็ http://localhost:631
ถ้าขึ้นหน้านี้มาก็แสดงว่ามาถูกทางละ


ไปที่ tab Administration หน้าตาจะเป็นแบบนี้


ต่อไปกดปุ่ม Add Printer ครั้งแรกจะโดนถาม username, password (default คือ pi, raspberry) ในขั้นตอนนี้ถ้าเรากรอก username, password ถูกแล้วแต่ไม่ผ่าน ให้ไปลองเช็คขั้นตอนการ add user เข้า lpadmin ดูอีกครั้ง ถ้าผ่านจะมาพบหน้าเลือก printer ให้เลือกชื่อ printer ที่เราต้องการเพิ่มแล้วกด Continue


หน้าต่อไปให้ check เลือก Share This Printer แล้วกด Continue ต่อไป


ต่อไปสำคัญมากคือเลือก Model printer ให้ถูก แล้วกดปุ่ม Add Printer

(รูปนี้ cap มาตอน setup เสร็จแล้ว จริงๆ ปุ่ม Modify Printer ต้องเป็นปุ่ม Add Printer)
ขั้นตอนต่อไปขี้เกียจ cap รูปแล้วกดปุ่ม Set Default Options ให้มันจบๆ ไป เสร็จ....

ถ้าไม่มีอะไรผิดพลาดเราก็จะสามารถ Add Printer ได้ (ตอนพิมพ์ก็เลือก printer ให้ถูกก็พอ)



Tips การสั่งพิมพ์ผ่าน command line

  • ssh เข้าไปเครื่อง Raspberry Pi ก่อน
  • Print file (มี Printer เครื่องเดียว)
    • $ lp filename
    • หรือ
    • $ lpr filename
  • กรณีที่ Add Printer ไว้หลายตัว
    • $ lpstat -p -d  # ตรวจดูว่ามี printer ชื่ออะไรบ้างที่เชื่อมต่ออยู่
    • $ lp -d printer filename
    • หรือ
    • $ lpr -P printer filename
    • เช่น
    • $ lp -d HP_Deskjet_Ink_Adv_2060_K110 helloworld.c
    • $ lp -P HP_Deskjet_Ink_Adv_2060_K110 helloworld.c
  • Set Default Printer
    • $ lpoptions -d printer
    • เช่น
    • $ lpoptions -d HP_Deskjet_Ink_Adv_2060_K110
    • ต่อไปเวลาสั่ง $ lpr filename ก็จะเท่ากับ $ lpr -P printer filename แล้ว
  • เอา lp หรือ lpr ไปต่อ pipe ได้นะ
    • $ program | lp
    • $ program | lpr
    • $ program | lp -d printer
    • $ program | lpr -P printer

น่าจะหมดแล้วสำหรับการทำ Raspberry Pi ให้เป็น Print Server

สวัสดีครับ :)

วันอาทิตย์ที่ 6 พฤศจิกายน พ.ศ. 2559

ติดตั้ง Raspbian ด้วย Mac OS

ต้นเดือนได้ของเล่นมาใหม่เป็น Raspberry Pi 3 เลยมาบันทึกวิธีติดตั้งด้วย Mac OS เอาไว้ซักหน่อย

โพสท์นี้เขียนหลังจากติดตั้งเสร็จเรียบร้อย แล้วอยากทดสอบเขียนบล็อกบนเจ้า Raspberry Pi ซะหน่อย โดยรูปในส่วนของ Mac OS ทำการส่งเข้ามาลงไว้บน Raspberry Pi ด้วย scp

บน Mac OS

Download Raspbian Images แบบ ZIP file จาก https://www.raspberrypi.org/downloads/raspbian/ ผมเลือกตัว Images with PIXEL desktop หลังจาก Download เสร็จแล้วก็แตกไฟล์ images ออกมา ตอนแตกไฟล์แนะนำให้ใช้พวกโปรแกรมเช่น The Unarchiver เป็นตัวแตกไฟล์ จะได้ไฟล์ .img 

ต่อมาเป็นขั้นตอนการเขียน Images ลง Micro SD Card

ทำการ format Micro SD Card โดยเลือก Format: MS-DOS (FAT), Scheme: Master Boot Record


เสร็จจาก Format แล้วลองตรวจสอบดูว่าตัว Micro SD Card ชื่อ Disk อะไร



หลังจากนั้นให้ทำการ unmount partition disk2s1 (เลือกที่ชื่อ Micro SD Card ในขั้นตอนนี้ถ้าชื่อไม่ขึ้นให้ Eject ตัว Card ออกไปก่อนแล้วเสียบเข้าไปใหม่)


เสร็จแล้วเปิด Terminal ขึ้นมาพิมพ์ command line

$ sudo dd bs=1m if=path_of_your_image.img of=/dev/rdiskn
ตรง /dev/rdiskn ให้แทน n ด้วยเลข Disk ที่เราได้มาก่อนหน้านี้ ในรูปคือ disk2 หลังจากใส่ password กด enter แล้วก็รอ....เสร็จ


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

บน Raspbian

เชื่อมต่อ internet ให้เรียบร้อย (จะ Lan หรือ Wifi ก็แล้วแต่) แล้วจัดการ update OS 
  • sudo apt-get update
  • sudo apt-get upgrade
ต่อมา Enable SSH และ VNC โดยเข้าไปที่เมนู Raspberry Pi Configuration


บนเครื่อง Mac ให้ Download และติดตั้งโปรแกรม VNC Viewer จาก https://www.realvnc.com/raspberrypi/
เอาไว้สำหรับ remote desktop ส่วน SSH ก็ทำผ่าน command ได้แล้ว

การส่งไฟล์ไปมาระหว่าง Mac กับ Raspberry Pi ใช้ scp ไปก่อน

ต่อไป ไปที่ tab Localisation ทำการ set ค่าต่างๆ ดังนี้
  • Locale:
    • Language: th(Thai) (จริงๆ เลือกภาษาได้ตามถนัด)
    • Country: TH(Thailand)
    • Character Set: UTF-8
  • Timezone:
    • Area: Asia
    • Location: Bangkok
  • Keybaord: English (US, with euro on 5) เพื่อให้ไม่มีปัญหากับปุ่ม # \ | (แต่ยังไงก็ขึ้นอยู่กับ keyboard layout ที่เราใช้กันด้วยนะครับ)
  • WiFi Country: TH (Thailand)
ส่วนการพิมพ์ภาษาไทย ให้เปิด Terminal แล้วใช้คำสั่ง
  • sudo raspi-config
    • เลือกหัวข้อ Internationalisation Options >> Change Keyboard Layout
    • แล้วค่อยเลือก keyboard layout ไทย หลังจากนั้นก็ option อื่นๆ ตามใจ
  • *** ต้อง set ใหม่ทุกครั้งที่เปิดตัว Raspberry Pi ใหม่ ยังหาวิธีทำให้พิมพ์ได้แบบถาวรไม่เจอ T^T
ต่อมาก็ลงโปรแกรมเสริมอื่นๆ ที่คิดว่าจำเป็น
  • sudo apt-get install vim  # ขาดเธอฉันตายดีกว่า
  • sudo apt-get install gimp  # เอาไว้แต่งรูป
  • sudo apt-get install scrot # เอาไว้ capture screen (ต้องทำผ่าน command line)
    • วิธีใช้
      • $ scrot  #capture ทั้งหน้าจอ ภาพจะ save ที่ home เป็น default
      • $ scrot -d 10 image.png  #รอ 10วิ แล้ว save ไฟล์ชื่อ image.png เอาไว้ซ่อนหน้าจอ Terminal ก่อน capture
      • $ scrot -cd 10 image.png #มีการนับถอยหลังให้ด้วย
      • $ scrot -s  #เลือกหน้าต่างที่จะ Capture 

การ Backup SD Card

หลังจากลงนู่นลงนี้ไปแล้วก็ต้องทำการ Backup SD Card เอาไว้ ครั้งหลังมาจะได้ไม่ต้องมานั้ง setup ใหม่อีก ก็ใช้ command dd เหมือนตอนเขียน img เลยแค่สลับ input , output เช่น จากด้านบน sd card เราอยู่ที่ disk2 คำสั่ง Backup บน Mac OS ก็ต้องเป็น
sudo dd bs=1m if=/dev/rdisk2 of=backup-file-name.img

ประสพการณ์การใช้งาน Raspberry Pi 3 Raspbian with PIXEL เป็น Desktop PC

จากการที่ทดลองใช้แทนคอมพิวเตอร์เครื่องหลักมาได้ 2 วันบนสภาพแวดล้อม PIXEL ถือว่า Raspberry Pi 3 สามารถทำงานทดแทนได้ดีในระดับใช้งานธรรมดาๆ เท่านั้น เช่น งานเอกสาร เล่นเน็ต เขียน Code แต่ถ้าทางด้านความบันเทิงอื่นๆ ยังคิดว่าไปไม่รอด  เช่น 
  • เรื่องเสียง ถ้าต่อผ่าน HDMI ออกลำโพงทีวี คุณภาพเสียงออกมาชัดแจ่มไม่มีปัญหาเลยครับ แต่ถ้าต่อลำโลงหรือหูฟังตรงๆ เสียงที่ออกมาจากช่อง 3.5mm audio jack คุณภาพเสียงต่ำมากๆ เอาแค่พอฟังได้ แต่ฟังให้เพราะ ไปหาวิธีอื่นฟังเอาดีกว่า อาจต้องหา DAC มาต่อเพิ่ม
  • การเล่นไฟล์ Video เรียกว่า มันไม่ใช่งานของมันเลยดีกว่าครับ แต่เห็นมีคนเอา Raspberry Pi ไปทำเป็น Media Center กันได้ อันนี้เดี๋ยวถ้าว่างจะลองไปศึกษาดูว่าเค้าทำกันยังไง
  • การเปิด youtube จะเจอกระตุกบ้างที่ความละเอียดเกิน 480p (อันนี้เชื่อมต่อผ่าน WiFi นะครับยังไม่ได้ลองต่อสาย LAN ตรงๆ จากตัว Router)
แต่ก็ว่าไม่ได้นะครับ เพราะ เจ้าตัว Raspberry Pi มันไม่ได้ออกแบบมาเพื่อจุดประสงค์เหล่านั้นซะหน่อย

สวัสดีครับ :)

วันพุธที่ 15 เมษายน พ.ศ. 2558

เริ่มต้นเรียนเขียนโปรแกรมอีกครั้ง

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

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

กติกา
  1. เริ่มใหม่แต่ต้น
  2. เขียนโปรแกรมเป็นงานอดิเรก อย่างน้อยต้องได้โปรแกรมเล็กๆ 1 โปรแกรมทุกๆ วัน โดยไม่กระทบกับงานหลัก (งานร้าน และ งานนอกที่รับมา)
  3. เก็บไฟล์ไว้บน Github ด้วย
  4. ต้องมาเขียนเผยแพร่ลงบล็อคเพื่อแสดงว่าตนเข้าใจแค่ไหน
  5. อัดคลิปลง Youtube ได้จะดีมาก
เครื่องมือ
  1. เริ่มต้นด้วยภาษา C
  2. Compiler ใช้ gcc ผ่าน command-line
  3. ใช้ Linux
  4. ใช้ Vim
  5. ใช้ Git
OK เริ่ม

วันจันทร์ที่ 23 มีนาคม พ.ศ. 2558

IBM Model M บน Mac

ด้วยว่าวันนี้เพิ่งได้ Keyboard มาใหม่เป็น IBM Model M สำหรับคนที่รู้จักกิตติศักดิ์ของมันดีย่อมรู้ว่านี้คือสุดยอดคีบอร์ดแห่งยุค 90 และเป็นที่ต้องการของบรรดาเหล่า nerd ทั้งหลาย ในที่สุดกระพ้มก็ได้มาครอง วะฮาาๆ วะฮาาๆๆ (บ้าไปแล้ว)


ด้วยว่าเจ้า Model M ตัวนี้เป็นคีย์บอร์ดตั้งแต่ปี 1989 (พลิกดูสติกเกอร์ด้านหลัง) สมัยนั้นชาวโลกยังไม่รู้จัก OS ที่ชื่อว่า Windows ซะด้วย ดังนั้นปุ่ม Windows ที่เราเห็นจนเป็นปกติ (จริงๆ ก็ไม่ค่อยได้กดนัก) จึงไม่มีใน Model M ตัวนี้แน่นอน

ในการใช้งานถ้าใช้บน Windows คงไม่มีปัญหาอะไรมาก แต่บน Mac ปุ่ม Windows จะใช้แทนปุ่ม Command นั้นเอง ดังนั้นเราต้องมาจัดการเปลี่ยนปุ่มกันนิดหน่อย

สำหรับ Mac OS X ก็ไปที่ System Preferences เข้าไปที่ “Keyboard” จากนั้นกดปุ่ม “Modifier Keys…” ที่อยู่ด้านล่าง (เจ้า Macbook Pro ของผมมันมอง Model M เป็น Barcode Reader ซะงั้น แต่ก็ไม่ใช่ประเด็น)

จัดการให้

ปุ่ม "Cap Lock" เป็นปุ่ม "Ctrl" (Control)
ปุ่ม "Ctrl" (Control) เป็นปุ่ม "Alt" (Option)
ปุ่ม "Alt" เป็นปุ่ม "Command"

ตามรูปครับ


เท่านี้เราก็ใช้งาน Model M Keyboard บน Mac ได้แบบไม่มีปัญหาแล้วครับ :)


สวัสดีครับ

วันอังคารที่ 16 ธันวาคม พ.ศ. 2557

Free Ebook หัดใช้ Command-line Interface เถอะ

แจกฟรี ebook สอนใช้งานคอมพิวเตอร์ผ่าน Command-line Interface ครับ เป็นหนังสือที่เขียนเป็นเรื่องเป็นราวเล่มแรกในชีวิตเลยก็ว่าได้ครับ

คลิกที่รูปปกเพื่อ Download ได้เลยครับ หรือจะอ่านฟรีบนบราวเซอร์ก็ตามลิงค์ล่างนี้เลยครับ


คลิกเพื่อ Download ฟรี ebook หัดใช้ Command Line Interface เถอะ
คลิกที่รูปเพื่อ Download ฟรี ebook "หัดใช้ Command Line Interface เถอะ"

ผมเขียนหนังสือเล่มนี้ขึ้นมาเพื่อเป็นจุดเริ่มต้นสำหรับผู้ที่สนใจใช้งานคอมพิวเตอร์ผ่าน Command-line Interface หรือที่เรียกกันแบบย่อๆ ได้ว่า CLI

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

ใครที่เหมาะกับหนังสือเล่มนี้?

หากคุณมีคุณสมบัติดังนี้

  1. เป็นคนที่ใช้งานคอมพิวเตอร์อยู่ก่อนแล้ว หมายรวมถึงสามารถลงโปรแกรมเองได้ แก้ปัญหาคอมพิวเตอร์เบื้องต้นได้
  2. รู้จักและใช้ CLI มาก่อนเล็กน้อยหรือไม่เคยใช้มาก่อนเลย
  3. กำลังสนใจและตั้งใจที่จะเรียนรู้การใช้งาน CLI

หนังสือเล่มนี้เหมาะสำหรับคุณครับ :D

วันอาทิตย์ที่ 12 ตุลาคม พ.ศ. 2557

ใช้ Vim เป็น Password Manager ของเรา

วันก่อนมีปัญหาต้อง login เว็บไซต์หนึ่งจากเครื่องชาวบ้าน ต้องยอมรับกันตามตรงว่า "จำพาสเวิร์ดไม่ได้" (แน่แหละ มีเป็นหลายเว็บหลายแอพฯ แต่ละอันก็ตั้งไม่เหมือนกันอีก) ปกติจะเก็บเอาไว้ที่เครื่องส่วนตัวโดยใช้โปรแกรม "password pad lite" อีกทีหนึ่ง เวลาไปใช้เครื่องคนอื่นทำให้มีปัญหามากๆ

เลยมาลองดูว่ามีทางออกไหนให้กับตัวเองบ้าง โดยตั้งเงื่อนไขไว้ ตามนี้
  1. ฟรี
  2. ต้อง "ง่าย" และ "ปลอดภัย"ในระดับดี
  3. อยู่ที่ไหนก็ดูได้ไม่เกี่ยง Device ไม่ว่าจะเป็นมือถือ หรือ คอมฯ
หวยเลยมาออกที่ Vim text editor หน้าตาโบราณๆ แต่ทรงพลังนี้แหละครับ :D

โดยตัว Vim ตั้งแต่ version 7.3 ขึ้นไปจะสามารถเซตให้เข้ารหัสด้วย Blowfish Algorithm ได้ โดยเข้าไป config ในไฟล์   `~/.vimrc`
set cryptmethod=blowfish
และเพื่อเพิ่มความปลอดภัยอีกระดับหนึ่งไฟล์   `~/.vimrc` ควรเพิ่ม config ดังนี้ลงไปด้วย
autocmd BufReadPost * if &key != "" | set noswapfile nowritebackup viminfo= nobackup noshelltemp history=0 secure | endif
เท่านี้เราก็สามารถเข้ารหัสไฟล์ที่เก็บพาสเวิร์ดของเราได้อย่างปลอดภัยแล้ว ด้วยคำสั่ง
$ vim -x <filename>
หรือ ที่ Vim command mode พิมพ์ :X

มาถึงโจทย์ข้อ 3 ผมเลือกใช้ Dropbox เป็นตัวเก็บไฟล์ โดยตั้งชื่อไฟล์ให้ดูธรรมดาๆ ไม่เป็นที่สังเกต

เท่านี้ผมก็สามารถดูพาสเวิร์ดผ่านมือถือ Android ของผมด้วยแอพฯ Vim Touch ได้แล้วครับ โดยที่ Vim Touch ก็ให้ทำการ config .vimrc เหมือนด้านบนด้วย

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

Vagrant + puPHPet, ติดตั้ง Web Server สำหรับนักพัฒนาเว็บ ง่าย…ง่ายจริงๆ!!!

จะว่าไปแล้วนักพัฒนาเว็บยุคสมัยนี้โชคดี มีทางเลือกหลายๆ ทางในการที่จะจำลองเครื่อง Web Server ขึ้นมาสำหรับการพัฒนาเว็บฯ ไม่ว่าจะเป็นการ ติดตั้งบนเครื่องตัวเองด้วย package สำเร็จรูปอย่าง XAMPP, MAMP ฯลฯ หรือ จะลงบนเครื่อง VM (Virtual Machine) แทน กรณีนี้ก็ต้องออกแรงติดตั้ง package ต่างๆ เองอีก
แล้วถ้าเป็นนักพัฒนามือทองที่ต้องพัฒนาหลายๆ โปรเจคเข้าไปอีก แต่ละโปรเจคอาจต้องการ Dev Environments ที่ไม่เหมือนกัน ก็ต้องมานั้นเซต ปิดนู้น เปิดนี้ กันให้ปวดหัว (ในกรณีลงบน Local)
ทางออกก็เลยต้องหนีไปพัฒนาบน VM แทน แต่มันก็ยังไม่สะดวกสบายนักอยู่ดี เพราะนักพัฒนาก็ต้องมานั้นเซตนู้นนั้นนี้เองอยู่ดีนั้นแหละ เราเลยต้องใช้ Vagrant เข้ามาช่วยอีกแรง

Vagrant คืออะไร?

Vagrant เป็น tool ที่ช่วยให้เราสามารถติดตั้ง Virtual Machine บนเครื่องของเราได้อย่างง่ายดาย ตัดขั้นตอนที่นักพัฒนาต้องทำเองไปหลายอย่าง เช่น download iso ติดตั้ง OS ฯลฯ แถมยังสามารถ sync folder ในการพัฒนาให้เอง (ไม่ต้องเสียเวลา upload file ขึ้นเครื่อง VM)

โดยก่อนการใช้งาน Vagrant ในเครื่องเราต้องลง VirtualBox เอาไว้ก่อนแล้ว (จริงๆ Vagrant รองรับ VMWare ด้วย แต่ VirtualBox มันฟรีครับ) สามารถ Download VirtualBox ได้ที่ https://www.virtualbox.org/wiki/Downloads และอ่านวิธีติดตั้งที่ https://www.virtualbox.org/wiki/Documentation
หลังจากนั้นก็ Download Vagrant ที่ http://www.vagrantup.com/downloads.html
เมื่อติดตั้ง Vagrant ลงเครื่องเราเรียบร้อยแล้ว อยากให้อ่านและลองทำตามขั้นตอน ในหัวข้อ Getting Started ที่ทางเว็บ Vagrantup.com เตรียมเอาไว้ให้ก่อนนะครับ เป็น tutorial ที่ดีเลยทีเดียว
เมื่อลองเล่นจนเกิดความชำนาญ เราสามารถไป add boxes จากที่ http://www.vagrantbox.es/

puPHPet คืออะไร?

เป็น Web ที่ช่วยในการสร้างไฟล์ Vagrantfile script สำหรับติดตั้ง package ต่างๆ ที่จำเป็นสำหรับการพัฒนาเว็บ

โดยเข้าไปที่ https://puphpet.com/ แล้วจัดการเลือก option ตามที่เราต้องการ เสร็จแล้วก็ download ,จัดการแตกไฟล์ แล้ว นำไฟล์ และ โฟลเดอร์ที่ได้ ไปวางไว้ที่โฟลเดอร์ ที่เราต้องการจะติดตั้ง (ถ้าได้ลองทำตาม Getting Started มาจะเข้าใจดี) จากนั้นก็แค่สั่ง vagrant up แล้วก็รอๆๆ จนมันติดตั้ง และ อัพเดท ให้เราจนเสร็จ พร้อมใช้งาน
โพสท์นี้ขอแบบสั้นๆ ไม่ละเอียดนะครับ ช่วงนี้ไม่ว่างจริงๆ ^^’

สวัสดีครับ

วันพฤหัสบดีที่ 23 มกราคม พ.ศ. 2557

ปรับแต่งหน้าตา Prompt ให้ Mac Terminal

โพสท์นี้เกิดจากความคันมือจากการไปดู tutorial ต่างๆ ของฝรั่งเขาแล้วเห็นหน้าตา Terminal หรือ Shell ที่เขาใช้มันดูโก้หรูดู Geeky มาก เลยอยากได้อยากมีกับเขาบ้าง… ด้วยความเป็น Mac OSX ที่ถือว่าเป็นญาติสนิทของ Unix ก็ว่าได้ ดังนั้นการปรับแต่งย่อมไม่ยาก
ดังนี้
** บทความนี้ใช้ได้ทั้ง Unix และ Mac

เปลี่ยนหน้าตา Command Prompt

ลำดับแรกเรามาเปลี่ยนหน้าตา Prompt กันก่อน โดยปกติหน้าตา prompt ของ Mac จะหน้าตาประมาณรูปด้านล่าง พอลอง echo $PS1 ออกมาดูก็จะ output แปลกๆ อันนี้เรียกว่า “prompt escapes”

เราสามารถเปลี่ยนรูปแบบ prompt escapes ได้เลยโดยใช้คำสั่ง export PS=”รูปแบบ prompt escapes ที่ต้องการ”
?
1
$ export PS1="\n\u ~> [\w]\n\$ "
จากตัวอย่าง ผมต้องการให้มีการ ขึ้นบรรทัดใหม่ (\n) เสมอเมื่อคำสั่งแสดงผลเสร็จ และ แสดงชื่อ user (\u) ที่ login จากนั้นก็แสดง path ที่ทำงานอยู่ ณ ปัจจุบันแบบเต็ม โดยให้อยู่ใน “[" "]” ([\w]) หลังจากนั้นก็ขึ้นบรรทัดใหม่และแสดง prompt เพื่อรับคำสั่งต่อไป (\n\$) หน้าตาก็จะได้อย่างรูปด้านล่าง

ตารางด้านล่างเป็น prompt escapes ทั้งหมดที่สามารถกำหนดได้ เราสามารถกำหนด prompt ของเราได้อย่างอิสระ

เปลี่ยนสีให้ Command Prompt

เพื่อให้แน่ใจว่า Terminal เปิดการใช้งาน ANSI colors อยู่หรือไม่ ให้เข้าไปดูที่ Terminal > Preferences… ตรง tab “Text” ให้เราไปเปิด Display ANSI colors ก่อน โดยการเลือกถูกด้านหน้า
สำหรับรูปแบบในการกำหนดสีของฝั่ง Mac และ ฝั่ง Linux จะต่างกันนิดหน่อยนะครับ
รูปแบบกำหนดสี prompt ของ Mac จะเป็น
?
1
\[\033[COLOR_CODE_HERE\]PROMPT_ESCAPE_OR_TEXT_HERE\[\033[0m\]
ส่วนฝั่ง Linux จะเป็น
?
1
\e[COLOR_CODE PROMPT_ESCAPE\e[0m
หากลองสังเกตดูจะเห็นว่ามี tag เปิด = \[\033[COLOR_CODE\] และ tag ปิด = \[\033[0m\] ชัดเจน
สำหรับตารางรหัสสีที่สามารถใช้ได้มีดังนี้

** TIP **
  • เราสามารถ แก้ค่า 0; เป็น
    • 1; สำหรับตัวหนา
    • 4; ขีดเส้นใต้
    • 5; ตัวอักษรกระพริบ
    • 7; reverse เอาสีตัวอักษรมาเป็นสีพื้นหลัง
  • เราสามารถกำหนดรูปแบบได้หลากหลายโดยใช้ ; ขั้น เช่น \[\033[1;4;31;33m\] = ตัวอักษรหนาขีดเส้นใต้สีแดงบนพื้นหลังสีเหลือง
หลังจากปรับแต่งรูปแบบและสีกันจนหนำใจแล้วก็อย่าลืม เอาไปเก็บไว้ในไฟล์ .bash_profile กันด้วยนะครับ

หลังจากนั่งมั่วเอาจนเหนื่อย command prompt ของผมก็ออกมาลิเกอย่างที่เห็นนี้แหละครับ อิอิ

สวัสดีครับ

วันอาทิตย์ที่ 12 มกราคม พ.ศ. 2557

วิธีติดตั้ง phpMyAdmin บน Mac OSX 10.8+

หลังจากติดตั้ง MySQL เสร็จไปแล้วก็มาลง phpMyAdmin กันต่อครับ โดยก่อนที่จะทำการติดตั้ง phpMyAdmin เราต้องทำการ fix mysql 2002 socket error กันก่อนนะครับ วิธี fix ให้กลับไปดูที่
เรียบร้อยแล้วไปต่อกันเลยครับ…

เตรียมพร้อมก่อนการติดตั้ง phpMyAdmin

ดาวน์โหลด phpMyAdmin

ไปที่หน้าดาวน์โหลดของ phpMyAdmin จัดการเลือกไฟล์ที่ต้องการ

เตรียมก่อนการติดตั้ง

หลังจากดาวน์โหลดเสร็จแล้วก็ทำการแตกไฟล์ออก แล้ว เปลี่ยนชื่อโฟลเดอร์เป็น “phpMyAdmin” หลังจากนั้นก็ย้ายโฟลเดอร์ไปที่ Web root ของเรา


เตรียมการสำหรับ phpMyAdmin config

สร้างโฟลเดอร์ config และทำการแก้ไข permission
?
1
2
$ mkdir ~/Sites/phpMyAdmin/config
$ chmod o+w ~/Sites/phpMyAdmin/config

เริ่มขั้นตอนติดตั้ง

เปิด browser ที่ address bar เรียก url ดังนี้
localhost/~username/phpMyAdmin/setup/
** username คือ account ของเรา

ต่อมาคลิกที่ปุ่ม “New server” หลังจากนั้นเลือก tab “Authentication” ตรงช่อง Password for config auth ให้ใส่ password root ของ MySQL ในขั้นตอนติดตั้ง MySQL หลังจากนั้นก็ คลิก“Apply” ด้านล่าง
จะกลับมาหน้าจอก่อนหน้าและจะเห็นอะไรประมาณนี้เพิ่มขึ้นมา

ตรง Configuration file ให้ทำการเลือกภาษาที่ต้องการ

หลังจากนั้นกดปุ่ม “Save”
ถ้าไม่มีอะไรผิดพลาดเราจะได้ไฟล์ชื่อ “config.inc.php” อยู่ในโฟลเดอร์ “config” ที่เราสร้างไว้ก่อนหน้านี้
ให้ย้ายไฟล์ “config.inc.php” ออกมาไว้ในโฟลเดอร์ “phpMyAdmin” แล้วก็ลบโฟลเดอร์ “config”ทิ้งไป
ต่อมา…
ตรวจสอบให้แน่ใจว่า mysql เรา start แล้วหรือยัง ถ้ายังก็สั่ง start ก่อน
จากนั้นกลับไปที่ browser แล้วเรียก
localhost/~username/phpMyAdmin/

เย้.. เสร็จแล้วครับผม

อ่านต่อ