Linux record audio command for Google Cloud Speech API

Command:

arecord -f S16_LE -V mono -r 8000 record.wav

API Request:

{
  "config": {
    "sampleRate": 8000,
    "encoding": "LINEAR16",
    "languageCode": "th"
  },
  "audio": {
    "content": "CONTENT_BASE64"
  }
}


https://cloud.google.com/speech/docs/sync-recognize#speech-sync-recognize-protocol

Ubuntu 14.04 Yubikey 4 U2F not work

I got Yubikey 4 today but U2F Feature not work on my Chrome.

Fix by

cd /etc/udev/rules.d
sudo wget https://raw.githubusercontent.com/Yubico/yubikey-personalization/master/69-yubikey.rules
sudo wget https://raw.githubusercontent.com/Yubico/yubikey-personalization/master/70-yubikey.rules

Unplug and insert Yubikey again

U2F will work


ส่ง Notification ผ่าน Line Notify ด้วย PHP

วันนี้จะมาแนะนำการส่ง Notification ผ่าน Line Notify ด้วยภาษา PHP กันครับ

โดย Line Notify นั้นมีความสามารถดังนี้
- ส่ง Notification มายังตัวเราเอง
- ส่ง Notification ไปยัง Line Group ที่เราอยู่ (เราต้องเพิ่ม Line Notify เข้ามาใน Line Group นั้นด้วย)
- ส่ง ข้อความ Text, รูปภาพ และ Sticker ได้

Add Line Notify เป็นเพื่อนเราก่อน

ก่อนอื่นเราต้องแอด Line Notify มาเป็นเพื่อนเราก่อน โดยค้นหาคำว่า Line Notify แล้วแอดเป็นเพื่อนดังภาพ



สร้าง Token สำหรับการ Notify

- ให้เรา Login เข้าในเวป https://notify-bot.line.me

- เมื่อ Login เสร็จเรียบร้อย ให้เข้า https://notify-bot.line.me/my/

- เลื่อนลงมาด้านล่างคลิกที่ Generate Token

คลิก Generate token

- ให้เราตั้งชื่อ Notify  (ชื่อนี้จะไปแสดงตอนส่งข้อความ)

เลือกตัวเราเองหรือ Line Group ที่ต้องการ

1-on-1 chat with LINE Notify คือจะส่งข้อความมาหาตัวเราเอง

นอกนั้นจะเป็น List ของ Line Group ที่เราอยู่ หากต้องการให้ส่งเข้า Line Group เราต้อง Invite Line Notify เข้าไปใน Line Group นั้นด้วย

- คลิก Generate token เราก็จะได้ Token เอาไว้ในการส่ง Notify ให้เราเซฟไว้ให้ดี เพราะเราจะเห็น Token อันนี้เพียงครั้งเดียว

Token จะแสดงใน Popup นี้เพียงครั้งเดียวเท่านั้น

ส่ง Notification ด้วย PHP

ในที่นี้เราจะใช้ PHP ในการส่ง Notification กันนะครับ หากต้องการส่งด้วยภาษาอื่นสามารถดู API ได้ที่เอกสารนี้ https://notify-bot.line.me/doc/en/

โดยผมได้สร้าง PHP Library ง่ายๆ สำหรับที่ใช้ในการส่ง Line Notify ไว้ที่ https://github.com/kittinan/php-line-notify โดยมี Requirement ดังนี้

 - PHP 5.5+

เริ่มกันเลย

- โหลด Library ผ่าน composer

composer require kittinan/php-line-notify
- ทดสอบส่ง Text Message ตาม Code ด้านล่าง


- ข้อความก็จะถูกส่งไปยังตัวเราหรือ Line Group ที่เรา Generate Token มา



- ทดลองส่งรูปภาพ ตาม Code ด้านล่าง


- รูปภาพก็จะถูกส่งไปยังตัวเราหรือ Line Group ที่เรา Generate Token มา


จบแล้วค้าบบ

ปล. ไว้มีเวลาจะอัพเดท Library ให้สามารถส่ง Sticker ได้นะครับ
ปล. API Line Notify มี Rate Limit อยู่นะครับ โดย Rate Limit จะอยู่ที่ 1,000 ต่อชั่วโมง

แงะแอพ QuizClash แบบบังเอิญ

ช่วงนี้แอพ QuizClash กำลังเป็นที่นิยมในหมู่เพื่อนฝูงจึงได้มีโอกาสโหลดมาเล่นบ้าง ด้วยความบังเอิญขณะนั่งทำ MITM โทรศัพท์ตัวเองอยู่เพื่อที่จะดูว่าแอพ Facebook มันยังใช้ Certificate Pinning อยู่รึเปล่า ปรากฎว่าแอพ Facebook ยังใช้ Certificate Pinning อยู่ แต่มีบางโดเมนที่ไม่ได้ใช้ (Facebook เริ่มใช้ Certificate Pinning ประมาณเดือนตุลาคมปี 2015) ซึ่งขณะที่นั่งทำ MITM อยู่ก็ได้กดเข้าไปเล่นเกมส์ QuizClash และก็ได้พบอะไรบางอย่างเกิดขึ้น . . .

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

Android  ~58 MB
IOS  ~99 MB

ในทีแรกก็คิดว่ามันคงยัดพวกคำถามกับพวกรูปภาพลงไปในแอพเลย ปรากฎว่าไม่ใช่ มันโหลดคำถามและรูปภาพจาก Network ดังภาพ



จากภาพก็จะเห็นว่ามีการใช้ Facebook SDK สำหรับการ Login (เพราะผม Login ด้วย Facebook ในการเล่น)

ตัวเกมส์ก็จะทำการ Login ด้วย Token ของตัวเองด้วยดังภาพ


ที่น่าสนใจคือมีการใช้ HMAC ด้วย น่าจะใช้สำหรับเชคความถูกต้อง Request พูดถึง HMAC แล้วก็คิดถึง Ragnarok

และที่น่าสนใจที่สุดคือ Request นี้


มันคือ Request ในการโหลดคำถามและคำตอบของเกมส์ที่เราเล่นกับเพื่อนคนใดคนหนึ่ง ซึ่ง Response เป็น JSON มีขนาดประมาณ 75KB ตัวอย่าง JSON ก็ดังภาพด้านล่าง 



ซึ่งคำถาม - คำตอบจะไม่มีการเปลี่ยนแปลง ถ้าได้ JSON ไฟล์นี้มาก็จะสามารถตอบคำถามได้ทุกข้อล่ะ 555+

ส่วนแอพที่มีขนาดใหญ่นั้นเมื่อได้ลองแกะดูเบื้องต้นน่าจะมาจาก Resource ไฟล์ภาพนั่นเอง ซึ่งตัวแอพ support หลาย locale เลยต้องมีภาพเยอะตามแต่ละ locale ไปด้วย



จบแล้วครับ

ปล. เพื่อการศึกษาเท่านั้น

Fix Genymotion 2.8 Ubuntu 14.04

Genymotion 2.8.0 thrown error on Ubuntu 14.04

Error:

CXXABI_1.3.8 not found

Solution to solve this problem

LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9 g++-4.9


Reference
http://stackoverflow.com/questions/37817792/how-to-fix-genymotion-in-linux-elementaryos-with-error-cxxabi-1-3-8-not-found

Ubuntu 14.04 Bluetooth Headset problem

Connect blutetooth headset with "Headset Service" after than run

pactl load-module module-bluetooth-discover

 If sound on headset not work perfectly change the profile of headset like in the picture below




ทดลองสร้าง Line @ Bot แบบมั่วๆ

Line ได้ออก API สำหรับ Line @ และ Line Official มาได้สักพักนึงแล้วโดยใช้ชื่อว่า Messaging Api ซึ่งวันนี้เพิ่งมีโอกาสได้ลองเล่น API แบบจริงจังเลยมาเขียนบล็อกแชร์ประสบการณ์การใช้งาน API ของ Line ในการสร้าง Chat Bot แบบขำๆขึ้นมา

สิ่งที่ต้องการในการสร้าง Bot

- Server 1 ตัว (ใช้ Ubuntu 14.04)
- Nginx  (ใช้อะไรก็ได้แล้วแต่ถนัด)
- HTTPS ที่ valid cert อันนี้ต้องมีไม่งั้นใช้ไม่ได้ ในที่นี้ใช้ Let's Encrypt (ลองใช้ Cloudflare ที่ใช้ค่า - Default แล้วโดนบล็อกข้อมูลที่ส่งมาจาก Line เลยขี้เกียจหาวิธีแก้)
- PHP 5
- Python 3
- ChatterBot (เอาไว้สร้าง Bot Chat)
- MongoDB (เอาไว้เก็บข้อมูลของ ChatterBot)
- Sample-Line-Bot (https://github.com/kittinan/Sample-Line-Bot)

ติดตั้ง Nginx, php และ config https ไว้ให้พร้อมใช้งาน

Line Messaging API Architecture


ขออนุญาติก็อบรูปใน Line Developer มาให้ดู ซึ่งการทำงานก็ไม่มีไรมาก
เมื่อผู้ใช้ส่งข้อความมาที่ Line @ เรา Line ก็จะส่งข้อความนั้นมายัง Server ที่เราเซตเอาไว้



สมัครใช้งาน Line Messaging API

ตาม Link นี้เลย https://developers.line.me/messaging-api/getting-started ค่อยๆอ่าน แล้วทำตามอย่าข้ามขั้นตอนเด็ดขาด ไม่งั้นปวดหัวสุดๆ

สร้าง Chat Bot ด้วย ChatterBot

Install MongoDB

วิธีการตาม Link นี้เลย https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-14-04


sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
sudo echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org

เสร็จสิ้นการลง MongoDB

Install Python 3

ใน Ubuntu 14.04 นั้นลง Python 3 มาไว้อยู่แล้ว โดยแค่ลงเพิ่มอีก 2 package คือ python pip กับ python levenshtein

sudo apt-get install python3-pip python3-levenshtein python3-nltk python3-setuptools

Install ChatterBot ผ่าน python pip

sudo pip3 install chatterbot
sudo python3 -m nltk.downloader -d /usr/local/share/nltk_data brown movie_reviews conll2000 punkt averaged_perceptron_tagger

เมื่อลง Package ที่ต้องการต่างๆเรียบร้อยแล้วให้ clone https://github.com/kittinan/Sample-Line-Bot มายังเครื่อง เพื่อที่เราจะเริ่มทำการ train bot ให้ตอบแชทได้

เมื่อ clone มาเสร็จแล้วให้ไปยัง folder python แล้วรัน

python3 trainer.py sample_conversation.json

โดย sample_conversation.json นั้นเป็นตัวอย่างข้อมูลการสนทนา ถาม-ตอบ ซึ่งอยู่ใน format json array โดยส่วนตัวผมใช้ข้อมูลการ Chat กับเพื่อนใน Facebook ในการ train model ของ chat bot


เมื่อ train model เสร็จแล้วให้ทดสอบว่า chat bot ทำงานได้ถูกต้องโดยการรัน

python3 chat.py "ดีครับ"
python3 chat.py "ชื่อไร"

Bot ก็จะตอบมาดังภาพ


ดูรายละเอียด ChatterBot  เพิ่มเติม ได้ที่ http://chatterbot.readthedocs.io/en/stable/

ประกอบร่าง  Line API กับ ChatterBot

เข้าไป Line Business Center แล้วเข้า Messaging API Developer


ตั้งค่า Webhook URL ให้ชี้มายัง Domain Server ของเรา (Line บังคับให้ใช้ได้เฉพาะ https ที่  valid เท่านั้น) ดังภาพ

แล้ว Copy Channel Access Token มาใส่ในไฟล์ config.yml

แล้ว Install Dependencies ของ code php ให้เรียบร้อย ผ่านทาง composer

composer install

ลองไปคุยกับ bot ใน Line  bot ก็จะตอบข้อความเราตาม model ที่ train ไว้ดังภาพ



ปล.
- กราบขออภัยที่ไม่ได้ลงลึกในรายละเอียดการติดตั้งในส่วนต่างๆ
- คราวหน้าเราจะมาสร้าง model ของ chatbot จาก ข้อความที่เราเคย chat กับเพื่อนใน facebook กัน