เปลี่ยนมือถือ Android ให้เป็น Webcam

เราสามารถเปลี่ยนมือถือ Android ของเราให้เป็น Webcam ง่ายๆได้ด้วยโปรแกรมที่ชื่อว่า DroidCam โดยในตัวอย่างการติดตั้งผมจะทำบนเครื่อง PC ที่ติดตั้งระบบปฏิบัติการ Ubuntu 18.04 สำหรับบน Windows ก็น่าจะติดตั้งคล้ายๆกัน

สิ่งที่ต้องการ
- โทรศัพท์มือ Android
- เครื่องคอมพิวเตอร์
- ระบบ Network


1. ติดตั้ง App บนมือถือ 

สามารถ Download ผ่าน Playstore ได้ที่

https://play.google.com/store/apps/details?id=com.dev47apps.droidcam&hl=th


2. ติดตั้งโปรแกรมที่เครื่องคอม

สามารถ Download โปรแกรมได้ที่

https://www.dev47apps.com/

มีทั้ง Windows และ Linux

เปิด terminal รันคำสั่งดังนี้

sudo apt install linux-headers-`uname -r`
cd tmp
wget https://www.dev47apps.com/files/linux/droidcam_latest.zip
unzip droidcam_latest.zip -d droidcam && cd droidcam
sudo ./install

ดูว่าติดตั้งสำเร็จไหมด้วยคำสั่ง
lsmod | grep v4l2loopback_dc

3. เชื่อมต่อ Droidcam PC กับ มือถือ

PC กับ มือถือ ต้องอยู่ใน Wifi network เดียวกัน

เปิดโปรแกรมบน terminal ด้วยคำสั่ง

droidcam


- เปิดโปรแกรม Droidcam บน Android เพื่อดู IP Address



- นำ Wifi IP: มาใส่ในโปรแกรม Droidcam บนเครื่องคอม แล้วกด Connect



เสร็จสิ้นเรียบร้อย

ทดสอบ Code Highlight

ทดสอบ

import time
for i in range(10):
    print('Hello World')
    time.sleep(1)

Ubuntu 16.04 Mate Desktop Disable F12 drop-down terminal

Ubuntu 16.04 Mate Desktop Disable F12 drop-down terminal

killall tilda
- Remove tilda via apt

sudo apt-get remove tilda

F12 drop-downterminal

รีวิว KingSpec SSD 256GB mSATA Half size 256GB

ห่างหายจากการเขียน Blog ไปนาน วันนี้ผมจะมารีวิว SSD ยี่ห้อ KingSpec ขนาด 256GB แบบ Half size mSATA

เนื่องจาก Harddisk SSD (24GB) ใน Notebook  ที่ผมใช้งานมันกำลังจะเต็มจึงอยากจะเปลี่ยนให้มีขนาดที่ใหญ่ขึ้น ตอนแรกคิดว่า Notebook ใช้แบบ M2 แต่เพื่อความชัวจึงได้แกะเครื่อง (แกะยากมากต้องเอาการ์ดคอยกรีดคอยแงะ) ออกมาเผื่อดูว่าเป็นแบบไหน สรุปแล้วคือใช้แบบ mSATA Half size



ซึ่งพอไปหาดูราคา SSD ชนิดนี้ก็ค่อนข้างสูง จึงได้ลองไปค้นใน Aliexpress แล้วก็เจอยี่ห้อ KingSpec ซึ่งราคานั้นถูกมากเมื่อเทียบกับยี่ห้ออื่นจึงได้ลองจัดซื้อมาลองดู สำหรับเจ้าตัว 256GB แบบ mSATA Half size นั้นผมได้มาในราคา 50 USD หรือประมาณ 1,650 บาทเท่านั้น


ทำการเปลี่ยนจากของเดิม 24GB เป็น 256GB




ความเร็วในการเขียนข้อมูล

โดยผมลองสั่งให้เขียนไฟล์ขนาดประมาณ 10GB  ความเร็วในการเขียนไฟล์จะอยู่ที่ 560 MB/s



ความเร็วในการอ่านข้อมูล

หลังจากได้ทดสอบความเร็วในการเขียนข้อมูลไปแล้วก็มาถึงตาของการอ่านไฟล์ข้อมูลบ้าง ซึ่งผลทดสอบความเร็วในการอ่านก็จะอยู่ที่ 614 MB/s



ทดสอบด้วย hdparm



สรุป

โดยรวมความเร็วในการอ่าน-เขียนไฟล์ถือว่าเร็วมาก ประกอบกับราคาที่ถูกกว่าชาวบ้านแบบครึ่งต่อครึ่งก็ถือว่าคุ้มค่ามาก ส่วนระยะเวลาการใช้งานก็ต้องรอดูกันยาวๆว่าจะทนขนาดไหนตามสเปคในเวปของ Kingspec บอกว่าความอึดในการเขียนนั้นอยู่ที่ 8 ปี หากเขียนไฟล์ 100GB ต่อวัน

Ref:
https://www.aliexpress.com/item/KingSpec-SSD-256GB-Msata-Half-size-256GB-mSATA-Mini-SATAIII-SSD-Hard-Drive-for-ASUS-DELL/32827636951.html

http://www.kingspec.com/products_detail/productId=86.html


Python matplotlib Invalid DISPLAY variable

Fixed by

matplotlib.pyplot as plt
plt.switch_backend('agg') 
Ref:
https://github.com/matplotlib/matplotlib/issues/3466/#issuecomment-195899517

[Google Colab] ติดตั้ง Python Package เพิ่มแบบแฮกหน่อยๆ

หลังจากที่ได้ทดลองใช้งาน Google Colab (Jupyter Notebook ฟรีจาก Google) ตั้งแต่วันที่ 27 ตุลาคม เป็นต้นมา ก็ได้พบวิธีที่จะติดตั้ง Python Package เพิ่มแบบแฮกหน่อยๆ

หลักการ
1. Reverse Shell
2. pip install PACKAGE

สิ่งที่ต้องการ
1. Public Server ของเราเองเอาไว้ reverse shell

วิธีการ
1. Remote ไปยัง Public Server ของเรา
2. รันคำสั่ง netcat

nc -lv 13337
3. สร้าง Google Colab ใหม่มา 1 อัน นำคำสั่ง reverse shell ไปรัน (อย่าลืมแก้ IP Address กับ Port ให้ตรงกับ Server เรา และที่ netcat กำลัง listen อยู่)


4. เมื่อได้ Shell ก็สั่งติดตั้ง Package ที่ต้องการ

pip install PACKAGE

Proof of concept

1. ทดลอง import keras แต่ว่าไม่พบ module


2. เมื่อรันคำสั่ง Reverse Shell เพื่อที่ให้ Google Colab connect กลับมายัง Server ของเราที่ตั้ง netcat รอไว้ก็จะได้ Shell



3. สั่งติดตั้ง package keras ผ่าน pip เมื่อลองรันคำสั่ง import keras ใน  Colab อีกครั้งก็จะสามารถ import ได้


4. ทดลองใช้งาน keras package โดยการ Train MNIST CNN


Video



ตัว Google Colab นั้นจะสร้าง Docker container ขึ้นมาเพื่อให้แต่ละคนใช้งานโดยจะได้สเปคคือ RAM 12 GB และ CPU Xeon 2.2 GHz 2 core เมื่อเราไม่ได้ใช้งานตัว Container ก็จะถูกทำลายทิ้ง พอเรากลับมาใช้งานใหม่อีกครั้งก็จะสร้าง Container ใหม่ขึ้นมา

ปล. เราสามารถติดตั้งโปรแกรมอื่นๆใน Container ได้ด้วยนะ อิอิ
ปล2. ไม่ใช่ Google Security Bug

Follow me on Github: https://github.com/kittinan

Circle CI กับ Python

วันนี้จะเป็นบันทึกการทดลองเล่น Circle CI โดยจะให้เจ้า Circle CI นั้นเชื่อมต่อกับ Gtihub ในการรัน Test ซึ่ง Circle CI ก็จะมี Plan ต่างๆดังนี้ https://circleci.com/pricing/ ในที่นี้เราก็จะใช้ Free Plan

สิ่งที่ต้องการ
- Github Public Repo ที่มี Test อยู่แล้ว (ถ้าไม่มีก็เริ่มเขียน Test ซะตั้งแต่วันนี้)
- Circle CI (แค่ Login ด้วย Github User)

ทำการ Setup Project กับ Circle CI

- ทำการเพิ่ม Project ในเวป Circle CI จากเมนู Add Project ทางด้านซ้าย



- เลือก Operating System และ Platform ในที่นี้จะใช้เป็น Linux และ Platform version 2.0  (version 2.0 เราสามารถใช้ Docker image ในการรันได้)



- เลือก ภาษา ที่ใช้ ในที่นี้ผมลองใช้ Python ในการรัน

- เมื่อเลื่อนลงมาด้านล่างจะมีคำแนะนำให้สร้าง Folder .circleci และ ไฟล์ config.yml โดยจะมี Config เบื้องต้นให้เรานำไปใส่ในไฟล์ config.yml ได้เลย

- โดยผมมีการปรับแก้เล็กน้อยตรงคำสั่งในการรัน Test โดยผมแก้เป็น


python -m unittest discover ./tests/

ตัวอย่างไฟล์ .circleci/config.yaml

- ทำการ commit และ Push

- กดปุ่ม Start Building ใน Circle CI



- ระบบ  Circle CI ก็จะทำการ Setup Envoriment และตั้งค่าต่างๆตาม config.yaml ของเรา เมื่อมาดู Result ในการ run test ก็จะเห็นว่าสำเร็จเรียบร้อยดี





- เมื่อเรามีการแก้ไข code ของเราและ Push code เข้าไปใน github ระบบก็จะทำ Build และ Test ให้อัตโนมัติ พร้อมมี Email แจ้งเตือนอย่างสวยงาม



เป็นอันเสร็จสิ้นการทดลองเล่น Circle CI ในเบื้องต้น 

เราสามารถนำ Badge การ Build & Test มาแปะในหน้าเวปของเราได้โดยเข้าไปที่ Setting ของ Project ใน Circle CI และเลือก Status Badges



สรุป
จากความรู้สึกในการเล่น Circle CI ครั้งแรก มีความรู้สึกว่าระบบของ Circle CI build ได้รวดเร็วกว่าของทาง Travis CI สามารถดู Code ตัวอย่างได้ที่ https://github.com/kittinan/my-learn-circleci

Ref: