<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1028543390559339996</id><updated>2026-02-23T08:21:44.140+07:00</updated><category term="php"/><category term="ubuntu"/><category term="android"/><category term="linux"/><category term="php5"/><category term="Genymotion"/><category term="apache"/><category term="facebook"/><category term="git"/><category term="github"/><category term="hhvm"/><category term="line"/><category term="mysql"/><category term="apache2"/><category term="bot"/><category term="continuous integration"/><category term="fix"/><category term="gitlab"/><category term="lamp"/><category term="netbeans"/><category term="php7"/><category term="phpmyadmin"/><category term="travis-ci"/><category term="trick"/><category term="ubuntu 14.04"/><category term="web"/><category term="#20yearsofphp"/><category term="/etc/php5/cli/conf.d/ming.ini"/><category term="11.04"/><category term="11.10"/><category term="Cannot register the hard disk"/><category term="CipherShed"/><category term="Cloud Machine Learning"/><category term="Colab"/><category term="Google Colab"/><category term="MITM"/><category term="android permission"/><category term="appserv"/><category term="asus k401ub"/><category term="ati"/><category term="audio"/><category term="bash"/><category term="bridge adapter"/><category term="bumblebee"/><category term="ci"/><category term="circleci"/><category term="code coverage"/><category term="code quality"/><category term="code standard"/><category term="color"/><category term="covid-19"/><category term="ctrl+space"/><category term="debug"/><category term="delete"/><category term="deprecated"/><category term="eclipse"/><category term="email"/><category term="evolution"/><category term="facebook bounty"/><category term="find friend"/><category term="ftp"/><category term="git-ftp"/><category term="gpu"/><category term="gradle"/><category term="hack"/><category term="hello world"/><category term="hidden friendlist"/><category term="history"/><category term="human read"/><category term="install"/><category term="installation"/><category term="iredmail"/><category term="joomla"/><category term="k401ub"/><category term="keras"/><category term="kingspec"/><category term="kittinan"/><category term="line bot"/><category term="line messenger"/><category term="line notify"/><category term="load"/><category term="localhost"/><category term="log"/><category term="mail server"/><category term="man in the middle"/><category term="ml-engine"/><category term="mtp"/><category term="ndk"/><category term="nginx"/><category term="oneiric ocelot"/><category term="packagist"/><category term="permission"/><category term="php compile"/><category term="php performance"/><category term="php standard"/><category term="php-7"/><category term="php-fig"/><category term="php-fpm"/><category term="php7alpha1"/><category term="php7dev"/><category term="phpunit"/><category term="pi"/><category term="point domain"/><category term="proxy"/><category term="psr-4"/><category term="python"/><category term="quizclash"/><category term="ragnarok"/><category term="raspberry pi"/><category term="review"/><category term="scrutinizer-ci"/><category term="security"/><category term="server"/><category term="ssd"/><category term="suggest"/><category term="terminal"/><category term="test"/><category term="testing"/><category term="tilda"/><category term="timezone"/><category term="touchpad"/><category term="truecrypt"/><category term="tzdata"/><category term="ubuntu 11.04"/><category term="ubuntu bluetooth headset"/><category term="ubuntuinstall"/><category term="unit test"/><category term="var_dump"/><category term="var_dump color"/><category term="var_dump()"/><category term="virtual host"/><category term="virtualbox"/><category term="vlc"/><category term="xdebug"/><category term="yubikey"/><category term="ติดตั้ง"/><category term="วิธีการติดตั้ง"/><category term="วิธีการติดตั้ง gitlab"/><category term="หมอชนะ"/><title type='text'>Kittinan</title><subtitle type='html'>tick tick﻿ tick, thats the sound of your life running out!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>93</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-5264626409958916985</id><published>2020-04-11T18:38:00.000+07:00</published><updated>2020-04-11T22:01:26.047+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="covid-19"/><category scheme="http://www.blogger.com/atom/ns#" term="หมอชนะ"/><title type='text'>ตรวจสอบแอพ &quot;หมอชนะ&quot; เบื้องต้น</title><content type='html'>เมื่อวันที่ 10 เมษายน 2563 ได้มีการเปิดตัวแอพ &lt;b&gt;&lt;a href=&quot;https://www.blognone.com/node/115736&quot; target=&quot;_blank&quot;&gt;หมอชนะ&lt;/a&gt;&lt;/b&gt; เพื่อเก็บประวัติการเดินทางของประชาชน และประเมินว่าบริเวณนั้นมีผู้ป่วย COVID-19 หรือไม่ ผมจึงทำการตรวจสอบว่ามีการส่งข้อมูลอะไรบ้างไปยัง Server&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvMMNqrRq4yXJfSS-K1aAyIBPdvfkMNTQf3wHk82dTCGLApcS0b1Zd-XF64TEDf39PG0aNPwXONO7_LKpImNQc3N-__1YpnX-hPt8c2ikO0nulDdoClINjnHjDB6EB1UB9Ka-lPp4CGrw/s1600/0568.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;435&quot; data-original-width=&quot;710&quot; height=&quot;392&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvMMNqrRq4yXJfSS-K1aAyIBPdvfkMNTQf3wHk82dTCGLApcS0b1Zd-XF64TEDf39PG0aNPwXONO7_LKpImNQc3N-__1YpnX-hPt8c2ikO0nulDdoClINjnHjDB6EB1UB9Ka-lPp4CGrw/s640/0568.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;รูปจาก&amp;nbsp;&lt;a href=&quot;https://www.prachachat.net/ict/news-447255&quot;&gt;https://www.prachachat.net/ict/news-447255&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
วิธีการตรวจสอบเบื้องต้นคือการทำ&amp;nbsp;Man In The Middle (MITM)&lt;br /&gt;
&lt;br /&gt;
โดยมีการเรียก API ต่างๆดังนี้&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.&amp;nbsp;/registerDevice&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
โดยมีการส่งข้อมูลเป็น JSON ดังนี้&lt;br /&gt;
&lt;br /&gt;
Request:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class=&quot;json&quot;&gt;{&quot;deviceId&quot;:&quot;XXXXXXXXXX&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
โดยค่าใน deviceId น่าจะเป็นค่า hash จากอะไรบางอย่าง&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class=&quot;json&quot;&gt;{&quot;userId&quot;:&quot;XXXXXXXXXX&quot;,&quot;anonymousId&quot;:&quot;XXXXXXXXXX&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;2.&amp;nbsp;/userdata&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
มีการเรียกใช้เมื่อทำแบบทดสอบ&lt;br /&gt;
&lt;br /&gt;
Request:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class=&quot;json&quot;&gt;{&quot;data&quot;:{&quot;questionaire&quot;:{&quot;one_uri_symp&quot;:[&quot;none&quot;],&quot;travel_risk_country&quot;:false,&quot;covid19_contact&quot;:[&quot;none&quot;],&quot;int_contact&quot;:false}}}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;3. /qr&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
เรียกเพื่อโหลด QRCode ของเรา โดยมีการส่ง anonymousId แนบไปกับ header ด้วย&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. /location&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
อันนี้จะส่งข้อมูลพิกัดที่เราอยู่ไปยัง Server&lt;br /&gt;
&lt;br /&gt;
Request:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class=&quot;json&quot;&gt;{&quot;locations&quot;:[{&quot;is_moving&quot;:false,&quot;uuid&quot;:&quot;XXXX&quot;,&quot;timestamp&quot;:&quot;2020-04-11T10:50:50.482Z&quot;,&quot;odometer&quot;:0,&quot;coords&quot;:{&quot;latitude&quot;:13,&quot;longitude&quot;:100,&quot;accuracy&quot;:25.9,&quot;speed&quot;:-1,&quot;heading&quot;:-1,&quot;altitude&quot;:-23.5},&quot;activity&quot;:{&quot;type&quot;:&quot;still&quot;,&quot;confidence&quot;:100},&quot;battery&quot;:{&quot;is_charging&quot;:true,&quot;level&quot;:0.38},&quot;extras&quot;:{&quot;triggerType&quot;:&quot;appState&quot;}}]}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5. /scan&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
หากพบ device อื่นๆผ่าน Bluetooth&amp;nbsp; หรือการ scan QRCode ก็จะส่ง API อันนี้&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class=&quot;json&quot;&gt;{&quot;meetId&quot;:&quot;XXXX&quot;,&quot;timestamp&quot;:&quot;2020-04-11T11:06:53.777Z&quot;,&quot;meetWithIds&quot;:[&quot;XXXX&quot;],&quot;location&quot;:{&quot;latitude&quot;:13,&quot;longitude&quot;:100,&quot;accuracy&quot;:24.2},&quot;type&quot;:&quot;bluetooth&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;6. https://raw.githubusercontent.com/codeforpublic/morchana-core/master/available&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
เป็น API Kill-Switch เอาไว้เมื่อเลิกเก็บข้อมูลผู้ใช้แล้ว ก็จะใช้งานแอพไมไ่ด้ ชอบตรงที่เก็บไว้บน Github&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcjbD35M4z3rBShEJb9CdaX_HMFU7DtOCKpZvqt_Jjwqvm8A2owoazip8drsVcNxdcX6m_B9bt5XuAJQ0kS38_DsKh5T_oftBcJfnZWnmUtEGsOROgzCYfYHUR1cvYKA8AkyBt3VR2ZPk/s1600/Screenshot_2020-04-11-14-57-40-973_com.thaialert.app.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;830&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcjbD35M4z3rBShEJb9CdaX_HMFU7DtOCKpZvqt_Jjwqvm8A2owoazip8drsVcNxdcX6m_B9bt5XuAJQ0kS38_DsKh5T_oftBcJfnZWnmUtEGsOROgzCYfYHUR1cvYKA8AkyBt3VR2ZPk/s640/Screenshot_2020-04-11-14-57-40-973_com.thaialert.app.jpg&quot; width=&quot;331&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;สรุป&lt;/b&gt;&lt;br /&gt;
- ไม่พบว่ามีการส่งรูปที่เราถ่ายขึ้นไปยังบน Server&lt;br /&gt;
- ไม่พบว่ามีการส่งข้อมูลอื่นๆนอกเหนือจากที่ประกาศไว้&lt;br /&gt;
- งั้นเรามาใช้แอพ หมอชนะ กันเถอะ&lt;br /&gt;
Appstore:&amp;nbsp;&lt;a href=&quot;https://apps.apple.com/th/app/allthaialert/id1505185420&quot;&gt;https://apps.apple.com/th/app/allthaialert/id1505185420&lt;/a&gt;&lt;br /&gt;
Play Store:&amp;nbsp;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.thaialert.app&quot;&gt;https://play.google.com/store/apps/details?id=com.thaialert.app&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/5264626409958916985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2020/04/morchana-app.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/5264626409958916985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/5264626409958916985'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2020/04/morchana-app.html' title='ตรวจสอบแอพ &quot;หมอชนะ&quot; เบื้องต้น'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvMMNqrRq4yXJfSS-K1aAyIBPdvfkMNTQf3wHk82dTCGLApcS0b1Zd-XF64TEDf39PG0aNPwXONO7_LKpImNQc3N-__1YpnX-hPt8c2ikO0nulDdoClINjnHjDB6EB1UB9Ka-lPp4CGrw/s72-c/0568.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-9156198425381175672</id><published>2020-04-03T20:59:00.000+07:00</published><updated>2020-04-11T18:39:55.001+07:00</updated><title type='text'>เปลี่ยนมือถือ Android ให้เป็น Webcam</title><content type='html'>เราสามารถเปลี่ยนมือถือ Android ของเราให้เป็น Webcam ง่ายๆได้ด้วยโปรแกรมที่ชื่อว่า&amp;nbsp;&lt;a href=&quot;https://www.dev47apps.com/&quot; target=&quot;_blank&quot;&gt;DroidCam&lt;/a&gt; โดยในตัวอย่างการติดตั้งผมจะทำบนเครื่อง PC ที่ติดตั้งระบบปฏิบัติการ Ubuntu 18.04 สำหรับบน Windows ก็น่าจะติดตั้งคล้ายๆกัน&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;สิ่งที่ต้องการ&lt;/b&gt;&lt;br /&gt;
- โทรศัพท์มือ Android&lt;br /&gt;
- เครื่องคอมพิวเตอร์&lt;br /&gt;
- ระบบ Network&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. ติดตั้ง App บนมือถือ&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
สามารถ Download ผ่าน Playstore ได้ที่&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.dev47apps.droidcam&amp;amp;hl=th&quot;&gt;https://play.google.com/store/apps/details?id=com.dev47apps.droidcam&amp;amp;hl=th&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. ติดตั้งโปรแกรมที่เครื่องคอม&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
สามารถ Download โปรแกรมได้ที่&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.dev47apps.com/&quot;&gt;https://www.dev47apps.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
มีทั้ง Windows และ Linux&lt;br /&gt;
&lt;br /&gt;
เปิด terminal รันคำสั่งดังนี้&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;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 &amp;amp;&amp;amp; cd droidcam
sudo ./install&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
ดูว่าติดตั้งสำเร็จไหมด้วยคำสั่ง&lt;br /&gt;
lsmod | grep v4l2loopback_dc&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. เชื่อมต่อ Droidcam PC กับ มือถือ&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
PC กับ มือถือ ต้องอยู่ใน Wifi network เดียวกัน&lt;br /&gt;
&lt;br /&gt;
เปิดโปรแกรมบน terminal ด้วยคำสั่ง&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;droidcam&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
- เปิดโปรแกรม Droidcam บน Android เพื่อดู IP Address&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVXjL4-8QFmI_nw0Dvg_y9ScX9qPLcTxrVpmuu_BlrH4Op0MQJJsJgpAEEGsHXn0OFbClykCbxAIEbvh3aHamiFbYuXfDzPExrgFWEo9tv73ix-cgBIIiW_Qan1ubWoNRrY82ThDhzcpA/s1600/Screenshot_2020-04-03-20-46-25-809_com.dev47apps.droidcam.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;802&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVXjL4-8QFmI_nw0Dvg_y9ScX9qPLcTxrVpmuu_BlrH4Op0MQJJsJgpAEEGsHXn0OFbClykCbxAIEbvh3aHamiFbYuXfDzPExrgFWEo9tv73ix-cgBIIiW_Qan1ubWoNRrY82ThDhzcpA/s640/Screenshot_2020-04-03-20-46-25-809_com.dev47apps.droidcam.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
- นำ Wifi IP: มาใส่ในโปรแกรม Droidcam บนเครื่องคอม แล้วกด Connect&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigE4sPl7sdzKhFY9B2Dx2jdjqWg-OPVuCo9JA8Aa9RN8IL8e67p03ZwC83lfWtOv1n6Ufki6TeEdISIULSKDaJSado1j3fsOfAFDYn3ukSQo7PLTNAwuuxNXx_MyuR2iF9AcEaIa9vOi4/s1600/Screenshot+at+2020-04-03+20-54-35.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;584&quot; data-original-width=&quot;895&quot; height=&quot;416&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigE4sPl7sdzKhFY9B2Dx2jdjqWg-OPVuCo9JA8Aa9RN8IL8e67p03ZwC83lfWtOv1n6Ufki6TeEdISIULSKDaJSado1j3fsOfAFDYn3ukSQo7PLTNAwuuxNXx_MyuR2iF9AcEaIa9vOi4/s640/Screenshot+at+2020-04-03+20-54-35.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
เสร็จสิ้นเรียบร้อย&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpGb1LtWpOYypw0rY5kPzkrBFa1GJKfkEHQVDqHMmdPhHPi-kWgYAp4ssgDZGVfTYwF45SuOgPgAtIq2iJhNIDqh9lCahYCEVW6C-TsPvoP8lCml3cXy5_8nyE8TVF1U4EhMPQMrRrRd8/s1600/Screenshot+at+2020-04-03+20-50-52.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;504&quot; data-original-width=&quot;1328&quot; height=&quot;241&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpGb1LtWpOYypw0rY5kPzkrBFa1GJKfkEHQVDqHMmdPhHPi-kWgYAp4ssgDZGVfTYwF45SuOgPgAtIq2iJhNIDqh9lCahYCEVW6C-TsPvoP8lCml3cXy5_8nyE8TVF1U4EhMPQMrRrRd8/s640/Screenshot+at+2020-04-03+20-50-52.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/9156198425381175672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2020/04/android-webcam.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/9156198425381175672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/9156198425381175672'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2020/04/android-webcam.html' title='เปลี่ยนมือถือ Android ให้เป็น Webcam'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVXjL4-8QFmI_nw0Dvg_y9ScX9qPLcTxrVpmuu_BlrH4Op0MQJJsJgpAEEGsHXn0OFbClykCbxAIEbvh3aHamiFbYuXfDzPExrgFWEo9tv73ix-cgBIIiW_Qan1ubWoNRrY82ThDhzcpA/s72-c/Screenshot_2020-04-03-20-46-25-809_com.dev47apps.droidcam.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-5411491921636099605</id><published>2020-03-28T23:16:00.000+07:00</published><updated>2020-03-28T23:16:06.137+07:00</updated><title type='text'>ทดสอบ Code Highlight</title><content type='html'>ทดสอบ&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;import time
for i in range(10):
    print(&#39;Hello World&#39;)
    time.sleep(1)
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/5411491921636099605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2020/03/code-highlight.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/5411491921636099605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/5411491921636099605'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2020/03/code-highlight.html' title='ทดสอบ Code Highlight'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-3430927866576096990</id><published>2019-01-26T07:06:00.001+07:00</published><updated>2019-01-26T07:06:37.100+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="terminal"/><category scheme="http://www.blogger.com/atom/ns#" term="tilda"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Ubuntu 16.04 Mate Desktop Disable F12 drop-down terminal</title><content type='html'>Ubuntu 16.04 Mate Desktop Disable F12 drop-down terminal&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
killall tilda&lt;/blockquote&gt;
- Remove tilda via apt&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sudo apt-get remove tilda&lt;/blockquote&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhpRCCj3TFjS621CiNgkzz-kI9Ac2GOA5IMM0G37UpgzMCGmOYFILKr_vs_L_t8d51Z8KHklA-nyBGKNm_ltJAWNAEP8m3-yEdfOpICT4i39brnnJij0teKIOpF-cc032w41DOl36pXkQ/s1600/Screenshot+at+2019-01-26+07%253A03%253A56.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;409&quot; data-original-width=&quot;1286&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhpRCCj3TFjS621CiNgkzz-kI9Ac2GOA5IMM0G37UpgzMCGmOYFILKr_vs_L_t8d51Z8KHklA-nyBGKNm_ltJAWNAEP8m3-yEdfOpICT4i39brnnJij0teKIOpF-cc032w41DOl36pXkQ/s640/Screenshot+at+2019-01-26+07%253A03%253A56.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;F12 drop-downterminal&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/3430927866576096990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2019/01/ubuntu-1604-mate-desktop-disable-f12.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/3430927866576096990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/3430927866576096990'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2019/01/ubuntu-1604-mate-desktop-disable-f12.html' title='Ubuntu 16.04 Mate Desktop Disable F12 drop-down terminal'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhpRCCj3TFjS621CiNgkzz-kI9Ac2GOA5IMM0G37UpgzMCGmOYFILKr_vs_L_t8d51Z8KHklA-nyBGKNm_ltJAWNAEP8m3-yEdfOpICT4i39brnnJij0teKIOpF-cc032w41DOl36pXkQ/s72-c/Screenshot+at+2019-01-26+07%253A03%253A56.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-6300186279948401082</id><published>2018-09-16T09:25:00.000+07:00</published><updated>2018-09-16T09:25:17.358+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="kingspec"/><category scheme="http://www.blogger.com/atom/ns#" term="review"/><category scheme="http://www.blogger.com/atom/ns#" term="ssd"/><title type='text'>รีวิว KingSpec SSD 256GB mSATA Half size 256GB</title><content type='html'>ห่างหายจากการเขียน Blog ไปนาน วันนี้ผมจะมารีวิว SSD ยี่ห้อ KingSpec ขนาด 256GB แบบ Half size mSATA&lt;br /&gt;
&lt;br /&gt;
เนื่องจาก Harddisk SSD (24GB) ใน Notebook&amp;nbsp; ที่ผมใช้งานมันกำลังจะเต็มจึงอยากจะเปลี่ยนให้มีขนาดที่ใหญ่ขึ้น ตอนแรกคิดว่า Notebook ใช้แบบ M2 แต่เพื่อความชัวจึงได้แกะเครื่อง (แกะยากมากต้องเอาการ์ดคอยกรีดคอยแงะ) ออกมาเผื่อดูว่าเป็นแบบไหน สรุปแล้วคือใช้แบบ mSATA Half size&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7igwUK-KvsohgE2GQIatDelbmueyhgEZOSoLaiiFXYMap-BBO9azL5fWT4P5N0SJr7AQjBJAuu-OQe3h2hFaRNCeuFK9wAbfJH3sbJgMwoLQrftK5gS4QbPVdpnxtIihrVqCgUxOs5Ck/s1600/IMG_20180913_220654.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;1600&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7igwUK-KvsohgE2GQIatDelbmueyhgEZOSoLaiiFXYMap-BBO9azL5fWT4P5N0SJr7AQjBJAuu-OQe3h2hFaRNCeuFK9wAbfJH3sbJgMwoLQrftK5gS4QbPVdpnxtIihrVqCgUxOs5Ck/s640/IMG_20180913_220654.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
ซึ่งพอไปหาดูราคา SSD ชนิดนี้ก็ค่อนข้างสูง จึงได้ลองไปค้นใน Aliexpress แล้วก็เจอยี่ห้อ KingSpec ซึ่งราคานั้นถูกมากเมื่อเทียบกับยี่ห้ออื่นจึงได้ลองจัดซื้อมาลองดู สำหรับเจ้าตัว 256GB แบบ mSATA Half size นั้นผมได้มาในราคา 50 USD หรือประมาณ 1,650 บาทเท่านั้น&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0yJkhv5D-lBFvfhPxJrgxBJbH8Qzd6QM37O9sklqkdPaTVAhVh3HOR80LJHqMGVb6oKxNhYm_u5jiCYX65vd7lV0VoYvd83_TkiJc6wVdFeWFjww1ozoAQzwaBRSCU2p-o3v9IQca-aU/s1600/IMG_20180913_211245.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;1600&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0yJkhv5D-lBFvfhPxJrgxBJbH8Qzd6QM37O9sklqkdPaTVAhVh3HOR80LJHqMGVb6oKxNhYm_u5jiCYX65vd7lV0VoYvd83_TkiJc6wVdFeWFjww1ozoAQzwaBRSCU2p-o3v9IQca-aU/s640/IMG_20180913_211245.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
ทำการเปลี่ยนจากของเดิม 24GB เป็น 256GB&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht6nmZvFHdXXFesIjMSiGxk7Pu0cNOJ9gbBc5vv5FkOXZIx2oQ_Rf3WENVWEe5ukszqdaSwTwgMLggwo5uPNizBTIntz3IzbGOmJfVSU2i-Do1HkuBPzhOEg65122KTp43f6QwGTJgUfE/s1600/IMG_20180913_220701.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;1600&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht6nmZvFHdXXFesIjMSiGxk7Pu0cNOJ9gbBc5vv5FkOXZIx2oQ_Rf3WENVWEe5ukszqdaSwTwgMLggwo5uPNizBTIntz3IzbGOmJfVSU2i-Do1HkuBPzhOEg65122KTp43f6QwGTJgUfE/s640/IMG_20180913_220701.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxOGoNAcKePFrd8a1Vz7lPdPdYMeV9BH0qh15lugIf8tmvJEdi7riBRm7P7nGj-vpur0MZIQTpY2OxXLZIv2Kura9ntb8Us284T8LNLvCIAsUhZroDiwVvfmU9mMDhVmhzxmnku491syA/s1600/IMG_20180913_220758.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;1600&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxOGoNAcKePFrd8a1Vz7lPdPdYMeV9BH0qh15lugIf8tmvJEdi7riBRm7P7nGj-vpur0MZIQTpY2OxXLZIv2Kura9ntb8Us284T8LNLvCIAsUhZroDiwVvfmU9mMDhVmhzxmnku491syA/s640/IMG_20180913_220758.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;ความเร็วในการเขียนข้อมูล&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
โดยผมลองสั่งให้เขียนไฟล์ขนาดประมาณ 10GB&amp;nbsp; ความเร็วในการเขียนไฟล์จะอยู่ที่ &lt;b&gt;560 MB/s&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2R6ZMlFg2C76IPjlKAi2Aip6nvIMaDiBRb_3TOcdjBcLJ1BdATF58wP58A8Po2TED5oodJterIsePWinDSacHmyAP6v1_qMn2Bm-ghQyPGY7kI2L_cT7zSVrdvnHGEOFhCjYFYOvlhtg/s1600/Screenshot+at+2018-09-16+08%253A22%253A30.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;510&quot; data-original-width=&quot;804&quot; height=&quot;404&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2R6ZMlFg2C76IPjlKAi2Aip6nvIMaDiBRb_3TOcdjBcLJ1BdATF58wP58A8Po2TED5oodJterIsePWinDSacHmyAP6v1_qMn2Bm-ghQyPGY7kI2L_cT7zSVrdvnHGEOFhCjYFYOvlhtg/s640/Screenshot+at+2018-09-16+08%253A22%253A30.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;ความเร็วในการอ่านข้อมูล&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
หลังจากได้ทดสอบความเร็วในการเขียนข้อมูลไปแล้วก็มาถึงตาของการอ่านไฟล์ข้อมูลบ้าง ซึ่งผลทดสอบความเร็วในการอ่านก็จะอยู่ที่ &lt;b&gt;614 MB/s&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrfO-O9UZGCO3aZaJ0m6WOeDC_XpQ3VEAKrM8gJWy1B0hJ64CLepgzqN8xYrtcwpri0LCXZQ5Fr0bTgycKXzGUkkf1lb1aoeIolZ0qNVjtQfcY0TLaIa0dxHZHVdPIIomlsL19kbPRNzQ/s1600/Screenshot+at+2018-09-16+09%253A13%253A33.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;534&quot; data-original-width=&quot;804&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrfO-O9UZGCO3aZaJ0m6WOeDC_XpQ3VEAKrM8gJWy1B0hJ64CLepgzqN8xYrtcwpri0LCXZQ5Fr0bTgycKXzGUkkf1lb1aoeIolZ0qNVjtQfcY0TLaIa0dxHZHVdPIIomlsL19kbPRNzQ/s640/Screenshot+at+2018-09-16+09%253A13%253A33.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;ทดสอบด้วย hdparm&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBKs7pJ7K6owPXGupkCtYv1aQxWP0x7Gow6HDSotjPGPdpc3YChmx8XVZemR8sR7L0VIjHnoez9BmIy9CoDUnBKaGkhW6OM3XjOQrDErp2AMyW_kjKC5f10EqKE964kmeLeD8BzTDeRo0/s1600/Screenshot+at+2018-09-16+09%253A15%253A29.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;534&quot; data-original-width=&quot;804&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBKs7pJ7K6owPXGupkCtYv1aQxWP0x7Gow6HDSotjPGPdpc3YChmx8XVZemR8sR7L0VIjHnoez9BmIy9CoDUnBKaGkhW6OM3XjOQrDErp2AMyW_kjKC5f10EqKE964kmeLeD8BzTDeRo0/s640/Screenshot+at+2018-09-16+09%253A15%253A29.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;สรุป&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;u&gt;&lt;br /&gt;&lt;/u&gt;
โดยรวมความเร็วในการอ่าน-เขียนไฟล์ถือว่าเร็วมาก ประกอบกับราคาที่ถูกกว่าชาวบ้านแบบครึ่งต่อครึ่งก็ถือว่าคุ้มค่ามาก ส่วนระยะเวลาการใช้งานก็ต้องรอดูกันยาวๆว่าจะทนขนาดไหนตามสเปคในเวปของ Kingspec บอกว่าความอึดในการเขียนนั้นอยู่ที่ 8 ปี หากเขียนไฟล์ 100GB ต่อวัน&lt;br /&gt;
&lt;br /&gt;
Ref:&lt;br /&gt;
&lt;a href=&quot;https://www.aliexpress.com/item/KingSpec-SSD-256GB-Msata-Half-size-256GB-mSATA-Mini-SATAIII-SSD-Hard-Drive-for-ASUS-DELL/32827636951.html&quot; target=&quot;_blank&quot;&gt;https://www.aliexpress.com/item/KingSpec-SSD-256GB-Msata-Half-size-256GB-mSATA-Mini-SATAIII-SSD-Hard-Drive-for-ASUS-DELL/32827636951.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.kingspec.com/products_detail/productId=86.html&quot; target=&quot;_blank&quot;&gt;http://www.kingspec.com/products_detail/productId=86.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/6300186279948401082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2018/09/kingspec-ssd-256gb-msata-half-size-256gb.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/6300186279948401082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/6300186279948401082'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2018/09/kingspec-ssd-256gb-msata-half-size-256gb.html' title='รีวิว KingSpec SSD 256GB mSATA Half size 256GB'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7igwUK-KvsohgE2GQIatDelbmueyhgEZOSoLaiiFXYMap-BBO9azL5fWT4P5N0SJr7AQjBJAuu-OQe3h2hFaRNCeuFK9wAbfJH3sbJgMwoLQrftK5gS4QbPVdpnxtIihrVqCgUxOs5Ck/s72-c/IMG_20180913_220654.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-4147360713038388428</id><published>2017-12-11T23:36:00.002+07:00</published><updated>2017-12-11T23:36:34.540+07:00</updated><title type='text'>Python matplotlib Invalid DISPLAY variable</title><content type='html'>Fixed by&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
matplotlib.pyplot as plt&lt;br /&gt;plt.switch_backend(&#39;agg&#39;)&amp;nbsp;&lt;/blockquote&gt;
Ref:&lt;br /&gt;
&lt;a href=&quot;https://github.com/matplotlib/matplotlib/issues/3466/#issuecomment-195899517&quot; target=&quot;_blank&quot;&gt;https://github.com/matplotlib/matplotlib/issues/3466/#issuecomment-195899517&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/4147360713038388428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2017/12/python-matplotlib-invalid-display.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/4147360713038388428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/4147360713038388428'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2017/12/python-matplotlib-invalid-display.html' title='Python matplotlib Invalid DISPLAY variable'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-4055111100906561169</id><published>2017-11-07T22:42:00.001+07:00</published><updated>2017-11-07T23:35:27.937+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Colab"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Colab"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>[Google Colab] ติดตั้ง Python Package เพิ่มแบบแฮกหน่อยๆ</title><content type='html'>หลังจากที่ได้ทดลองใช้งาน &lt;a href=&quot;https://colab.research.google.com/notebook&quot; target=&quot;_blank&quot;&gt;Google Colab&lt;/a&gt;&amp;nbsp;(&lt;a href=&quot;http://jupyter.org/&quot; target=&quot;_blank&quot;&gt;Jupyter Notebook&lt;/a&gt; ฟรีจาก Google) ตั้งแต่วันที่ 27 ตุลาคม เป็นต้นมา ก็ได้พบวิธีที่จะติดตั้ง Python Package เพิ่มแบบแฮกหน่อยๆ&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;
&lt;b&gt;&lt;u&gt;หลักการ&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
1. Reverse Shell&lt;br /&gt;
2. pip install PACKAGE&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;สิ่งที่ต้องการ&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
1. Public Server ของเราเองเอาไว้ reverse shell&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;วิธีการ&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
1. Remote ไปยัง Public Server ของเรา&lt;br /&gt;
2. รันคำสั่ง netcat&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
nc -lv 13337&lt;/blockquote&gt;
3. สร้าง Google Colab ใหม่มา 1 อัน นำคำสั่ง reverse shell ไปรัน (อย่าลืมแก้ IP Address กับ Port ให้ตรงกับ Server เรา และที่ netcat กำลัง listen อยู่)&lt;br /&gt;
&lt;br /&gt;
&lt;code data-gist-id=&quot;e2f56351c5937af5599734446059f5ab&quot;&gt;&lt;/code&gt;

&lt;br /&gt;
4. เมื่อได้ Shell ก็สั่งติดตั้ง Package ที่ต้องการ&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
pip install PACKAGE&lt;/blockquote&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Proof of concept&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1. ทดลอง import keras แต่ว่าไม่พบ module&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWpNKXMw9gXIGUCx5WqEuvfrYFoTTkM-k_A7nYFuxS2Hrox-uw3azLjRAwoZ8YTqfv0LTJ1SHDhtAGo3dDwcrdAdIu4EIlRm5AaD6-HuHNDuyS6EJUuW5u7lGQjZE8Ls_4cFqO9ngNugY/s1600/Screenshot+from+2017-11-07+22%253A13%253A38.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;279&quot; data-original-width=&quot;526&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWpNKXMw9gXIGUCx5WqEuvfrYFoTTkM-k_A7nYFuxS2Hrox-uw3azLjRAwoZ8YTqfv0LTJ1SHDhtAGo3dDwcrdAdIu4EIlRm5AaD6-HuHNDuyS6EJUuW5u7lGQjZE8Ls_4cFqO9ngNugY/s1600/Screenshot+from+2017-11-07+22%253A13%253A38.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
2. เมื่อรันคำสั่ง Reverse Shell เพื่อที่ให้ Google Colab connect กลับมายัง Server ของเราที่ตั้ง netcat รอไว้ก็จะได้ Shell&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirg5kmc3JEMDXC7KVXXedcwEypA9J7yX11kcwxukmJnjGCsBpRnT4clxlpfJQbwWUl3kbmSR0jkA8xixscXxbNymiFWXXyeNwdTQwHjwFAkHaKZ9pGA4iS7XyMhfqevA-HQgz3D2SLV2A/s1600/Screenshot+from+2017-11-07+22%253A15%253A50.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;824&quot; data-original-width=&quot;1579&quot; height=&quot;333&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirg5kmc3JEMDXC7KVXXedcwEypA9J7yX11kcwxukmJnjGCsBpRnT4clxlpfJQbwWUl3kbmSR0jkA8xixscXxbNymiFWXXyeNwdTQwHjwFAkHaKZ9pGA4iS7XyMhfqevA-HQgz3D2SLV2A/s640/Screenshot+from+2017-11-07+22%253A15%253A50.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
3. สั่งติดตั้ง package keras ผ่าน pip เมื่อลองรันคำสั่ง import keras ใน&amp;nbsp; Colab อีกครั้งก็จะสามารถ import ได้&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPohlPHvcv9uFijY6KotSRDVocWpO35LucEluBuC9JUm-iJNCc7qXWyuoagLZSzAx3NbEhBbV2J2mD7VhK7r9DLpO1g9KZQDnQtKpm2AyRM1bxw7BzbJagWjff5YOMndWhnKrTlFQF-vc/s1600/Screenshot+from+2017-11-07+22%253A16%253A33.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;94&quot; data-original-width=&quot;298&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPohlPHvcv9uFijY6KotSRDVocWpO35LucEluBuC9JUm-iJNCc7qXWyuoagLZSzAx3NbEhBbV2J2mD7VhK7r9DLpO1g9KZQDnQtKpm2AyRM1bxw7BzbJagWjff5YOMndWhnKrTlFQF-vc/s1600/Screenshot+from+2017-11-07+22%253A16%253A33.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
4. ทดลองใช้งาน keras package โดยการ Train MNIST CNN&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM7ai_-aj3LSiK1e4ZVUscjoiXFKk4FJ8t6JCmUYDeBaSNlpRxfAcnHCzDoakBC2fjoi_G8VUyPLtaWlJ1Ld1iB6DU4IkwwwXGBHvRFfaxyXwzlXVV4v5RhYaBDDk5bHz2SQ3A4pNOpdU/s1600/Screenshot+from+2017-11-07+22%253A21%253A29.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;728&quot; data-original-width=&quot;1532&quot; height=&quot;304&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM7ai_-aj3LSiK1e4ZVUscjoiXFKk4FJ8t6JCmUYDeBaSNlpRxfAcnHCzDoakBC2fjoi_G8VUyPLtaWlJ1Ld1iB6DU4IkwwwXGBHvRFfaxyXwzlXVV4v5RhYaBDDk5bHz2SQ3A4pNOpdU/s640/Screenshot+from+2017-11-07+22%253A21%253A29.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Video&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/AY1gplIcmpc&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
ตัว Google Colab นั้นจะสร้าง Docker container ขึ้นมาเพื่อให้แต่ละคนใช้งานโดยจะได้สเปคคือ RAM 12 GB และ CPU Xeon 2.2 GHz 2 core เมื่อเราไม่ได้ใช้งานตัว Container ก็จะถูกทำลายทิ้ง พอเรากลับมาใช้งานใหม่อีกครั้งก็จะสร้าง Container ใหม่ขึ้นมา&lt;br /&gt;
&lt;br /&gt;
ปล. เราสามารถติดตั้งโปรแกรมอื่นๆใน Container ได้ด้วยนะ อิอิ&lt;br /&gt;
ปล2. ไม่ใช่ Google Security Bug&lt;br /&gt;
&lt;br /&gt;
Follow me on Github:&amp;nbsp;&lt;a href=&quot;https://github.com/kittinan&quot; target=&quot;_blank&quot;&gt;https://github.com/kittinan&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/4055111100906561169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2017/11/google-colab-install-python-package.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/4055111100906561169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/4055111100906561169'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2017/11/google-colab-install-python-package.html' title='[Google Colab] ติดตั้ง Python Package เพิ่มแบบแฮกหน่อยๆ'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWpNKXMw9gXIGUCx5WqEuvfrYFoTTkM-k_A7nYFuxS2Hrox-uw3azLjRAwoZ8YTqfv0LTJ1SHDhtAGo3dDwcrdAdIu4EIlRm5AaD6-HuHNDuyS6EJUuW5u7lGQjZE8Ls_4cFqO9ngNugY/s72-c/Screenshot+from+2017-11-07+22%253A13%253A38.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-2215208996435253999</id><published>2017-10-15T11:39:00.000+07:00</published><updated>2017-10-15T11:59:09.625+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="circleci"/><title type='text'>Circle CI กับ Python</title><content type='html'>วันนี้จะเป็นบันทึกการทดลองเล่น &lt;a href=&quot;https://circleci.com/&quot; target=&quot;_blank&quot;&gt;Circle CI&lt;/a&gt; โดยจะให้เจ้า Circle CI นั้นเชื่อมต่อกับ Gtihub ในการรัน Test ซึ่ง Circle CI ก็จะมี Plan ต่างๆดังนี้&amp;nbsp;&lt;a href=&quot;https://circleci.com/pricing/&quot; target=&quot;_blank&quot;&gt;https://circleci.com/pricing/&lt;/a&gt; ในที่นี้เราก็จะใช้ Free Plan&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;สิ่งที่ต้องการ&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
- &lt;a href=&quot;https://github.com/kittinan/my-learn-circleci&quot; target=&quot;_blank&quot;&gt;Github Public Repo&lt;/a&gt; ที่มี Test อยู่แล้ว (ถ้าไม่มีก็เริ่มเขียน Test ซะตั้งแต่วันนี้)&lt;br /&gt;
- &lt;a href=&quot;https://circleci.com/&quot; target=&quot;_blank&quot;&gt;Circle CI&lt;/a&gt; (แค่ Login ด้วย Github User)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;ทำการ Setup Project กับ Circle CI&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
- ทำการเพิ่ม Project ในเวป Circle CI จากเมนู Add Project ทางด้านซ้าย&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL_BXwp4g_T88au2bYbutfKcd3DSDBH8NOaV1ZTiTY_RetcTroonv2cZ3XvAj2sqXQzFKyfKLKwMtiiIytbCmUfkBiUjbwXajUckSGpAR-YL6BhF6NPVWSNk9QYaQpi-876rbrSS1qvjo/s1600/Screenshot+at+2017-10-15+11-01-52.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;363&quot; data-original-width=&quot;1347&quot; height=&quot;172&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL_BXwp4g_T88au2bYbutfKcd3DSDBH8NOaV1ZTiTY_RetcTroonv2cZ3XvAj2sqXQzFKyfKLKwMtiiIytbCmUfkBiUjbwXajUckSGpAR-YL6BhF6NPVWSNk9QYaQpi-876rbrSS1qvjo/s640/Screenshot+at+2017-10-15+11-01-52.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
- เลือก Operating System และ Platform ในที่นี้จะใช้เป็น Linux และ Platform version 2.0&amp;nbsp; (version 2.0 เราสามารถใช้ Docker image ในการรันได้)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYAdYy755kFFd8-tgbgq-92pBTiUyqylQnd4lceYXWaVJ_7tiBsQ5Uat8mbxVa6u8LK5wedXTqXkij7IiNl5N0mfKI0PamW62N7lOqlCI9oQAWy8BZCmX0vBSZ8dwaK4fCFCkspDY__vQ/s1600/Screenshot+at+2017-10-15+11-03-20.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;633&quot; data-original-width=&quot;1193&quot; height=&quot;338&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYAdYy755kFFd8-tgbgq-92pBTiUyqylQnd4lceYXWaVJ_7tiBsQ5Uat8mbxVa6u8LK5wedXTqXkij7IiNl5N0mfKI0PamW62N7lOqlCI9oQAWy8BZCmX0vBSZ8dwaK4fCFCkspDY__vQ/s640/Screenshot+at+2017-10-15+11-03-20.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
- เลือก ภาษา ที่ใช้ ในที่นี้ผมลองใช้ Python ในการรัน&lt;br /&gt;
&lt;br /&gt;
- เมื่อเลื่อนลงมาด้านล่างจะมีคำแนะนำให้สร้าง Folder&amp;nbsp;.circleci และ ไฟล์&amp;nbsp;config.yml โดยจะมี Config เบื้องต้นให้เรานำไปใส่ในไฟล์ config.yml ได้เลย&lt;br /&gt;
&lt;br /&gt;
- โดยผมมีการปรับแก้เล็กน้อยตรงคำสั่งในการรัน Test โดยผมแก้เป็น&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
python -m unittest discover ./tests/&lt;/blockquote&gt;
&lt;br /&gt;
ตัวอย่างไฟล์ &lt;a href=&quot;https://github.com/kittinan/my-learn-circleci/blob/master/.circleci/config.yml&quot; target=&quot;_blank&quot;&gt;.circleci/config.yaml&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- ทำการ commit และ Push&lt;br /&gt;
&lt;br /&gt;
- กดปุ่ม Start Building ใน Circle CI&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0dgernLwLFuobBf0oAC1loNkcZIdczqdZgRSEaux_YGL1zsrPAtlClMFCGcNLUFHr4eiwcIyLBWK5TOZha5w2mv9opG85HKTWsQK679vUCP5D4VZ9VGFusid-fFXy78zbS3U2JAPsdaY/s1600/Screenshot+at+2017-10-15+11-20-21.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;352&quot; data-original-width=&quot;1241&quot; height=&quot;181&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0dgernLwLFuobBf0oAC1loNkcZIdczqdZgRSEaux_YGL1zsrPAtlClMFCGcNLUFHr4eiwcIyLBWK5TOZha5w2mv9opG85HKTWsQK679vUCP5D4VZ9VGFusid-fFXy78zbS3U2JAPsdaY/s640/Screenshot+at+2017-10-15+11-20-21.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
- ระบบ&amp;nbsp; Circle CI ก็จะทำการ Setup Envoriment และตั้งค่าต่างๆตาม config.yaml ของเรา เมื่อมาดู Result ในการ run test ก็จะเห็นว่าสำเร็จเรียบร้อยดี&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsYu8bAnzEaW5QFXPhc6S4MJN8bN7jpemSw4lz7fh9zQurHBnhTTzVti4BjilQFRqkMXn52G62ZxSI7kfPzkVggJbvyj7OP7in467FZCQRaa-17e4JkcvzHwCyCA0ZWHLo5Nt_HLuTvmg/s1600/Screenshot+at+2017-10-15+11-17-53.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;597&quot; data-original-width=&quot;1349&quot; height=&quot;282&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsYu8bAnzEaW5QFXPhc6S4MJN8bN7jpemSw4lz7fh9zQurHBnhTTzVti4BjilQFRqkMXn52G62ZxSI7kfPzkVggJbvyj7OP7in467FZCQRaa-17e4JkcvzHwCyCA0ZWHLo5Nt_HLuTvmg/s640/Screenshot+at+2017-10-15+11-17-53.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- เมื่อเรามีการแก้ไข code ของเราและ Push code เข้าไปใน github ระบบก็จะทำ Build และ Test ให้อัตโนมัติ พร้อมมี Email แจ้งเตือนอย่างสวยงาม&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkWKqvQL-ZSRTYi5Q1Ys-LsUUERu-oGl3w2lX9hGyvmzy2ZFc3b9YkyFSZaL2mFwNl16ewiP_pFWhgC8XBAfDNf_A-TYFpOjWObYhb0JZcmZJSV_USDLB2dOgZGBQm3Y-HUDijva6cFB0/s1600/Screenshot+at+2017-10-15+11-30-00.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;588&quot; data-original-width=&quot;594&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkWKqvQL-ZSRTYi5Q1Ys-LsUUERu-oGl3w2lX9hGyvmzy2ZFc3b9YkyFSZaL2mFwNl16ewiP_pFWhgC8XBAfDNf_A-TYFpOjWObYhb0JZcmZJSV_USDLB2dOgZGBQm3Y-HUDijva6cFB0/s1600/Screenshot+at+2017-10-15+11-30-00.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
เป็นอันเสร็จสิ้นการทดลองเล่น Circle CI ในเบื้องต้น&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
เราสามารถนำ Badge การ Build &amp;amp; Test มาแปะในหน้าเวปของเราได้โดยเข้าไปที่ Setting ของ Project ใน Circle CI และเลือก Status Badges&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ_Jg2XVQ9MCtF1GVD9nRbf8ZM_IsNY26hS_eL2Sib7rrULYffvRRa92HcICUNfgAAZ96mzuIYoMV9mHc1gjFJ2Bueu_52QkRALrmp3jswGkgi3eBCs_LDTb-gusPuhJbxCaX3Ik8zK38/s1600/Screenshot+at+2017-10-15+11-57-25.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;605&quot; data-original-width=&quot;768&quot; height=&quot;504&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ_Jg2XVQ9MCtF1GVD9nRbf8ZM_IsNY26hS_eL2Sib7rrULYffvRRa92HcICUNfgAAZ96mzuIYoMV9mHc1gjFJ2Bueu_52QkRALrmp3jswGkgi3eBCs_LDTb-gusPuhJbxCaX3Ik8zK38/s640/Screenshot+at+2017-10-15+11-57-25.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;b&gt;&lt;u&gt;สรุป&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
จากความรู้สึกในการเล่น Circle CI ครั้งแรก มีความรู้สึกว่าระบบของ Circle CI build ได้รวดเร็วกว่าของทาง Travis CI สามารถดู Code ตัวอย่างได้ที่&amp;nbsp;&lt;a href=&quot;https://github.com/kittinan/my-learn-circleci&quot; target=&quot;_blank&quot;&gt;https://github.com/kittinan/my-learn-circleci&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Ref:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://circleci.com/&quot;&gt;https://circleci.com&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://circleci.com/docs/2.0/&quot;&gt;https://circleci.com/docs/2.0/&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/2215208996435253999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2017/10/circle-ci-python.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/2215208996435253999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/2215208996435253999'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2017/10/circle-ci-python.html' title='Circle CI กับ Python'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL_BXwp4g_T88au2bYbutfKcd3DSDBH8NOaV1ZTiTY_RetcTroonv2cZ3XvAj2sqXQzFKyfKLKwMtiiIytbCmUfkBiUjbwXajUckSGpAR-YL6BhF6NPVWSNk9QYaQpi-876rbrSS1qvjo/s72-c/Screenshot+at+2017-10-15+11-01-52.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-6730020317432880890</id><published>2017-08-13T12:06:00.000+07:00</published><updated>2017-08-13T12:06:53.560+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Machine Learning"/><category scheme="http://www.blogger.com/atom/ns#" term="keras"/><category scheme="http://www.blogger.com/atom/ns#" term="ml-engine"/><title type='text'>Train Model บน Cloud ด้วย Google Cloud Machine Learning Engine</title><content type='html'>สวัสดีครับผมจะมาเล่าประสบการณ์ การทดลองใช้งาน&amp;nbsp;&lt;a href=&quot;https://cloud.google.com/ml-engine/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Google Cloud Machine Learning Engine&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #212121; font-family: &amp;quot;roboto&amp;quot; , sans-serif; font-size: 16px;&quot;&gt;&amp;nbsp;หรือเรียกสั้นๆ&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #212121; font-family: &amp;quot;roboto&amp;quot; , sans-serif; font-size: 16px;&quot;&gt;Cloud ML Engine&lt;/span&gt;&lt;span style=&quot;color: #212121; font-family: &amp;quot;roboto&amp;quot; , sans-serif; font-size: 16px;&quot;&gt;&amp;nbsp;โดยความสามารถของมันก็คือ การนำ Model Machine Learning ที่เราสร้างขึ้นมาโดย &lt;a href=&quot;https://www.tensorflow.org/&quot; target=&quot;_blank&quot;&gt;Tensorflow&lt;/a&gt; หรือ &lt;a href=&quot;https://keras.io/&quot; target=&quot;_blank&quot;&gt;Keras&lt;/a&gt; (Tensorflow Backend) ไป Train บน Cloud ของ Google นั่นเอง ซึ่งการใช้งาน Cloud ML Engine นั้นมีค่าใช้จ่ายคร่าวๆดังนี้&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #212121; font-family: &amp;quot;roboto&amp;quot; , sans-serif; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;


&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-_BivpQOZafwly91XrWYxmoMnpRSaQlXAFbsY1TiVRY82Vel3vMkLXDqR_YkkrGwRtELLhigsPAnGofGC22XuYnDKxq9iZ-rk9_hCudsqR3g2MucNq9IpxrzIVvzVqHhqknplePXv7JA/s1600/Screenshot+at+2017-08-10+19-08-14.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;562&quot; data-original-width=&quot;1308&quot; height=&quot;274&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-_BivpQOZafwly91XrWYxmoMnpRSaQlXAFbsY1TiVRY82Vel3vMkLXDqR_YkkrGwRtELLhigsPAnGofGC22XuYnDKxq9iZ-rk9_hCudsqR3g2MucNq9IpxrzIVvzVqHhqknplePXv7JA/s640/Screenshot+at+2017-08-10+19-08-14.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;color: #212121; font-family: &amp;quot;roboto&amp;quot; , sans-serif; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style=&quot;color: #212121; font-family: &amp;quot;roboto&amp;quot; , sans-serif; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt; วิธีการคำนวนราคาโดยละเอียดจะคิดเป็น ML training unit ซึ่งสามารถตรวจสอบได้ที่&amp;nbsp;&lt;a href=&quot;https://cloud.google.com/ml-engine/pricing&quot; target=&quot;_blank&quot;&gt;https://cloud.google.com/ml-engine/pricing&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
สำหรับ Account Google Cloud ใหม่ Google จะให้ Credit 300 USD ใช้ได้ 12 เดือน ดูรายละเอียดได้ที่&amp;nbsp;&lt;a href=&quot;https://cloud.google.com/free/&quot; target=&quot;_blank&quot;&gt;https://cloud.google.com/free/&lt;/a&gt; (ผมก็ใช้ไอตัว Free Credit เนี่ยแหละมาลองเล่น)&lt;br /&gt;
&lt;u&gt;&lt;br /&gt;&lt;/u&gt; &lt;b&gt;&lt;u&gt;สิ่งที่ต้องการ&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
- Account Google Cloud ที่ผูกบัตรเครดิตเรียบร้อย&lt;br /&gt;
- เครื่องที่ติดตั้ง&amp;nbsp;&amp;nbsp;Google Cloud SDK เสร็จเรียบร้อย (วิธีการติดตั้งดูที่ &lt;a href=&quot;https://cloud.google.com/sdk/downloads&quot; target=&quot;_blank&quot;&gt;https://cloud.google.com/sdk/downloads&lt;/a&gt;)&lt;br /&gt;
- Code Model ที่ต้องการ Train (ในที่นี้ผมจะ Train โดยใช้ Keras ที่มี Tensorflow เป็น Backend โดยใช้โปรเจค &lt;a href=&quot;https://github.com/kittinan/thai-handwriting-number&quot; target=&quot;_blank&quot;&gt;thai-handwriting-number&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;สร้างโปรเจค&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
- ทำการสร้างโปรเจคใหม่หรือจะใช้โปรเจคเดิมที่มีอยู่แล้วก็ได้&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdCfAqSSHYKmFa2GRMplBykaBeo4wYy2yKPIFnv5BaL0iS9QQTX9f1_X77mGIwNyKU1cLXW0rGsc8nosy1ISWVu0Z4_GazLMUwRPig4jtzkvsSnfS-JHI0JmWawoSRGWkggUTaRdGSNqo/s1600/Screenshot+at+2017-08-10+20-59-16.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;227&quot; data-original-width=&quot;465&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdCfAqSSHYKmFa2GRMplBykaBeo4wYy2yKPIFnv5BaL0iS9QQTX9f1_X77mGIwNyKU1cLXW0rGsc8nosy1ISWVu0Z4_GazLMUwRPig4jtzkvsSnfS-JHI0JmWawoSRGWkggUTaRdGSNqo/s1600/Screenshot+at+2017-08-10+20-59-16.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;สร้างโปรจคใหม่โดยใช้ชื่อ test-cloud-ml&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
- รันคำสั่งในเครื่องเราเอง&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
gcloud projects list&lt;/blockquote&gt;
&lt;br /&gt;
ก็จะขึ้นโปรเจคใหม่ที่เราสร้างขึ้นมาดังภาพ&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeGFQ6aI2oODV_3NHIzF6rsdy7-AKiEkY7ZyH5dcFMhz_j_MMTDWkAw1Wh_ppfhJTZJFTveSwra46cJ1a6M1mYW26LktFQp5ZGbqavZiPG3M2jvaAic0BzDBWRBCE8w7MOgSAv87fydqs/s1600/Screenshot+at+2017-08-10+21-06-31.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;462&quot; data-original-width=&quot;738&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeGFQ6aI2oODV_3NHIzF6rsdy7-AKiEkY7ZyH5dcFMhz_j_MMTDWkAw1Wh_ppfhJTZJFTveSwra46cJ1a6M1mYW26LktFQp5ZGbqavZiPG3M2jvaAic0BzDBWRBCE8w7MOgSAv87fydqs/s640/Screenshot+at+2017-08-10+21-06-31.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
ตั้งให้โปรเจค test-cloud-ml เป็นโปรเจคหลัก (ใช้ PROJECT_ID)&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
gcloud config set project test-cloud-ml-176413&lt;/blockquote&gt;
&lt;br /&gt;
เปิดการใช้งาน Google Cloud Machine Learning Engine ให้กับโปรเจคของเรา โดยเข้าไปที่ APIs &amp;amp; services &amp;gt; Library&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeZjebVRRAUUtZxL543SH2jPnLyHTOHQbMd0XZjVrY9oHIlfZXZFOdLo30lW1NA4H5a0dg5LYEFzF9ojanqWIEEzgoEGZiykZDZSvHK2drBZ51Cr1xeIxFEn59Zp0VxsoBG1OV7Ee8px8/s1600/Screenshot+at+2017-08-11+16-57-10.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;712&quot; data-original-width=&quot;867&quot; height=&quot;525&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeZjebVRRAUUtZxL543SH2jPnLyHTOHQbMd0XZjVrY9oHIlfZXZFOdLo30lW1NA4H5a0dg5LYEFzF9ojanqWIEEzgoEGZiykZDZSvHK2drBZ51Cr1xeIxFEn59Zp0VxsoBG1OV7Ee8px8/s640/Screenshot+at+2017-08-11+16-57-10.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;เลือก Machine Learning Engine API&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDUQWCZpmACgwuTY0z28Si2GAySR1YQ-V_RxPCZhpENakADdkLka-z11OyXjdEaixINVWMGqSwlhgsvQ25nQPrYq08rodIbQ5kL3iDyzMJGy6bjz9NkKWaJR6XorTBkcGJDfuRLpH8gy8/s1600/Screenshot+at+2017-08-11+16-57-33.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;372&quot; data-original-width=&quot;846&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDUQWCZpmACgwuTY0z28Si2GAySR1YQ-V_RxPCZhpENakADdkLka-z11OyXjdEaixINVWMGqSwlhgsvQ25nQPrYq08rodIbQ5kL3iDyzMJGy6bjz9NkKWaJR6XorTBkcGJDfuRLpH8gy8/s640/Screenshot+at+2017-08-11+16-57-33.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;กด Enable&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;span id=&quot;goog_1597001007&quot;&gt;&lt;/span&gt; &lt;u&gt;&lt;b&gt;สิ่งที่ควรรู้ก่อนการปรับปรุง Code เพื่อนำไป Train บน Cloud&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt; - &amp;nbsp;Cloud ML Runtime นั้นใช้ &lt;b&gt;Python 2.7&lt;/b&gt; สามารถตรวจสอบ Package ต่างๆและ Version ของ Cloud ML Runtime ได้ที่&amp;nbsp;&lt;a href=&quot;https://cloud.google.com/ml-engine/docs/concepts/runtime-version-list&quot; target=&quot;_blank&quot;&gt;https://cloud.google.com/ml-engine/docs/concepts/runtime-version-list&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- ข้อมูลที่เรา Read / Write ทั้งหมดนั้นต้องผ่าน &lt;a href=&quot;https://cloud.google.com/storage/&quot; target=&quot;_blank&quot;&gt;Google Cloud Storage&lt;/a&gt;&amp;nbsp; (เราควรจัดการ Dataset ที่จะใช้ Train ให้สะดวกในการใช้งาน ในที่นี้จะจัดการ Dataset ให้อยู่ใน format ของ pickle ซึ่งต้องใช้ protocol version 2)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;ปรับปรุง Code สำหรับ Train บน Cloud&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1. จัดการอัพโหลด Dataset ที่ใช้ในการ Train อัพโหลดขึ้น Google Cloud Stroage เสียก่อน ในที่นี้ผม Serialize ข้อมูลด้วย pickle แล้วเซฟเป็นไฟล์ไว้ โดยต้องใช้ protolcol version 2&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
pickle.dump(DATASET_VARIABLE, open(&quot;dataset.pkl&quot;, &quot;wb&quot;), protocol = 2)&lt;/blockquote&gt;
&lt;br /&gt;
1.1 จัดการสร้าง bucket ของ Google Cloud Storage โดยในที่นี้จะตั้งชื่อ bucket ว่า kittinan (bucket เปรียบเสมือนตู้คอนเทนเนอร์อันนึงที่เอาไว้จัดเก็บข้อมูลของเรา&amp;nbsp;&lt;a href=&quot;https://cloud.google.com/storage/docs/key-terms#buckets&quot; target=&quot;_blank&quot;&gt;https://cloud.google.com/storage/docs/key-terms#buckets&lt;/a&gt;) &amp;nbsp;โดยสร้าง bucket ด้วยคำสั่ง&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp;gsutil mb gs://kittinan/&lt;/blockquote&gt;
หรือเราสามารถสร้างในหน้าเวปก็ได้&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7O9-nY8X2qqYnq3mG9zAUyGe-BNAsrlcqNdLmJaCBwa4OJY89uWURj9FSrOsoUMks_oFZBHaLHg2NtCoVJ78Riu7sSwFwKMHHZarMycGLTUdtwWZkalp3jUgYm7YX3zOY0SkwIjLYm1U/s1600/Screenshot+at+2017-08-11+17-13-26.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;471&quot; data-original-width=&quot;1151&quot; height=&quot;260&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7O9-nY8X2qqYnq3mG9zAUyGe-BNAsrlcqNdLmJaCBwa4OJY89uWURj9FSrOsoUMks_oFZBHaLHg2NtCoVJ78Riu7sSwFwKMHHZarMycGLTUdtwWZkalp3jUgYm7YX3zOY0SkwIjLYm1U/s640/Screenshot+at+2017-08-11+17-13-26.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
1.2 อัพโหลดไฟล์ Dataset เข้า Google Cloud Storage ด้วยคำสั่ง&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
gsutil cp SOURCE gs:://BUCKET_NAME/&lt;/blockquote&gt;
ตัวอย่าง&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
gsutil cp src/thainumber_28.pkl gs://kittinan/&lt;/blockquote&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBIpbsVTeQ-OiJnB3QOGO3_g2LJ-ZqVAu7GbRQ-ZfK8qOJVaxb3Ru3KslDfBn1OhAT7CD3UK7ws03I9-9wqTNEeYilF6hqXgggaJ2YV7Z12beFsPFz3UDHQEA7yqTRKlLynP60rKqrVI0/s1600/Screenshot+at+2017-08-11+17-20-22.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;462&quot; data-original-width=&quot;738&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBIpbsVTeQ-OiJnB3QOGO3_g2LJ-ZqVAu7GbRQ-ZfK8qOJVaxb3Ru3KslDfBn1OhAT7CD3UK7ws03I9-9wqTNEeYilF6hqXgggaJ2YV7Z12beFsPFz3UDHQEA7yqTRKlLynP60rKqrVI0/s640/Screenshot+at+2017-08-11+17-20-22.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;ภาพเมื่ออัพโหลดไฟล์เสร็จ&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRm58ujE12_sJCx1MyK5KTEHzE5dPz1pVnQXydqmli2_ME6nYnE_Vx_mqvpiDcOGw9wRnIOks74VOzXrV7ekFuE1Z_hhjJyUbT3QQ6bJ-L1sTgJqzxJv3wf8JKGlazByX-t8oLwFb5yfs/s1600/Screenshot+at+2017-08-11+17-20-50.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;299&quot; data-original-width=&quot;1226&quot; height=&quot;156&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRm58ujE12_sJCx1MyK5KTEHzE5dPz1pVnQXydqmli2_ME6nYnE_Vx_mqvpiDcOGw9wRnIOks74VOzXrV7ekFuE1Z_hhjJyUbT3QQ6bJ-L1sTgJqzxJv3wf8JKGlazByX-t8oLwFb5yfs/s640/Screenshot+at+2017-08-11+17-20-50.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;ลองเข้าไปดูในหน้าเวป Google Cloud Storage ก็จะเจอไฟล์ที่เราเพิ่งอัพโหลดเพิ่มขึ้นมา&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
2. สร้าง Folder ชื่ออะไรก็ได้ (ในที่นี้จะใช้ชื่อ Folder ว่า cloud-ml-engine) โดยมีโครงสร้างไฟล์ดังนี้&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe15qSXLg_ibYCYrNAYGhZAxYhAVXXmOqKiIIxdGnYmbiNLS4Z2dDhypqSY6y_iA0GVuSmSwqvtxz21lIKv-K5Zmbu01nrjn7p708liBc79KHkx9AaXuF25tkBzDjmIXW5xKbryEFdpw8/s1600/Screenshot+at+2017-08-12+11-06-32.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;156&quot; data-original-width=&quot;194&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe15qSXLg_ibYCYrNAYGhZAxYhAVXXmOqKiIIxdGnYmbiNLS4Z2dDhypqSY6y_iA0GVuSmSwqvtxz21lIKv-K5Zmbu01nrjn7p708liBc79KHkx9AaXuF25tkBzDjmIXW5xKbryEFdpw8/s1600/Screenshot+at+2017-08-12+11-06-32.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;setup.py&lt;/b&gt;&lt;br /&gt;
ระบุข้อมูลต่างๆ และ require package ต่างๆ&lt;br /&gt;
&lt;a href=&quot;https://cloud.google.com/ml-engine/docs/how-tos/packaging-trainer#recommended_project_structure&quot; target=&quot;_blank&quot;&gt;https://cloud.google.com/ml-engine/docs/how-tos/packaging-trainer#recommended_project_structure&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code data-gist-id=&quot;7b3781e52defd992aecba6c7367635bf&quot;&gt;&lt;/code&gt;

&lt;br /&gt;
&lt;b&gt;config.yml&lt;/b&gt;&lt;br /&gt;
ระบุค่า parameter ต่างๆของการ Train ครั้งนี้ ในที่นี้ระบุว่าให้ใช้ scaleTiear ที่เป็น BASIC_GPU&lt;br /&gt;
&lt;a href=&quot;https://cloud.google.com/ml-engine/reference/rest/v1/projects.jobs#traininginput&quot; target=&quot;_blank&quot;&gt;https://cloud.google.com/ml-engine/reference/rest/v1/projects.jobs#traininginput&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code data-gist-id=&quot;378e2692598464134371ad2a91c8fbfc&quot;&gt;&lt;/code&gt; &lt;a href=&quot;https://www.blogger.com/goog_176462318&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;b&gt;trainer &amp;gt; __init__.py&lt;/b&gt;&lt;br /&gt;
ไฟล์เปล่าๆ ใช้สำหรับ setuptools ที่อยู่ในไฟล์ setup.py&lt;span style=&quot;background-color: white; font-family: &amp;quot;dejavu sans mono&amp;quot;; font-size: 11.3pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;trainer &amp;gt; model.py&lt;/b&gt;&lt;br /&gt;
- ใช้&amp;nbsp;argparse module ในการ parse argument ต่างๆ โดยใน code นี้จะทำการ parse argument ของ training data และ job directory (Google Cloud Storage Path)&lt;br /&gt;
&lt;br /&gt;
- Read / Write File ต่างๆ ด้วย&amp;nbsp;tensorflow.python.lib.io.file_io แทน&lt;br /&gt;
&lt;br /&gt;
&lt;code data-gist-id=&quot;3bd889df2a4199437162dbec85e6f7ff&quot;&gt;&lt;/code&gt;

&lt;br /&gt;
&lt;b&gt;ทดสอบรันบนเครื่องตัวเองก่อนด้วยคำสั่ง&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
gcloud ml-engine local train \&lt;br /&gt;
&amp;nbsp; --job-dir ./ \&lt;br /&gt;
&amp;nbsp; --module-name trainer.model \&lt;br /&gt;
&amp;nbsp; --package-path ./trainer \&lt;br /&gt;
&amp;nbsp; -- \&lt;br /&gt;
&amp;nbsp; --train-file ../thainumber_28.pkl&lt;/blockquote&gt;
--job-dir : directory หรือ Google Cloud Storage ที่ใช้ในการ Package ไฟล์ (ML Engine จะส่ง argument job-dir ไปยัง script โปรแกรมเราด้วย)&lt;br /&gt;
--module-name : module ที่เราต้องการรัน&lt;br /&gt;
--package-path : path ของ module ที่เราจะรัน&lt;br /&gt;
option ที่อยู่หลัง -- \ : คือ argument สำหรับ script โปรแกรมเรา&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQTYKF67TnguCaFqUC8Pacc7qjCAj5SKHIM1C7PRDzelFb0Q3YPUtmXLFboAjbeMbDnPPgMKu_ZXZv8n0ErZih5AjIcJ-vZd2AOSse9f1HBgJnDtLleGFK2kNppEgCU8RDwKxNWcuaq04/s1600/Screenshot+at+2017-08-12+11-49-31.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;462&quot; data-original-width=&quot;738&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQTYKF67TnguCaFqUC8Pacc7qjCAj5SKHIM1C7PRDzelFb0Q3YPUtmXLFboAjbeMbDnPPgMKu_ZXZv8n0ErZih5AjIcJ-vZd2AOSse9f1HBgJnDtLleGFK2kNppEgCU8RDwKxNWcuaq04/s640/Screenshot+at+2017-08-12+11-49-31.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;ภาพการรันบนเครื่องตัวเอง&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;b&gt;รันบน Cloud ML Engine&lt;/b&gt;&lt;br /&gt;
ผมสร้าง Shell Script ขึ้นมาชื่อไฟล์ start_train.sh เพื่อความสะดวกในการแก้ไขค่าต่างๆและการรัน โดยมีคำสั่งดังนี้&lt;br /&gt;
&lt;br /&gt;
&lt;code data-gist-id=&quot;8583eaa61b299ec3166e3255264b0b31&quot;&gt;&lt;/code&gt;

&lt;br /&gt;
export&amp;nbsp;environment variables ต่างๆดังนี้&lt;br /&gt;
BUCKET_NAME - ชื่อ Bucket Google Cloud Storage ที่เราใช้&lt;br /&gt;
JOB_NAME - ชื่อ job ของเรา&lt;br /&gt;
JOB_DIR - Path Bucket Google Cloud Storage&lt;br /&gt;
REGION - จะใช้ region ไหนในการรัน (ในที่นี้ใช้ US เพราะถูกกว่า)&lt;br /&gt;
&lt;br /&gt;
Option ต่างๆของ command gcloud ก็จะคล้ายๆกับการรันแบบ Local โดยที่มีเพิ่มเติมขึ้นมาดังนี้&lt;br /&gt;
&lt;br /&gt;
--runtime-version : จะใช้ runtime version ไหน (&lt;a href=&quot;https://cloud.google.com/ml-engine/docs/concepts/runtime-version-list&quot; target=&quot;_blank&quot;&gt;https://cloud.google.com/ml-engine/docs/concepts/runtime-version-list&lt;/a&gt;)&lt;br /&gt;
--region : จะใช้ region ไหน&lt;br /&gt;
--config : config yaml ไฟล์ ที่ระบุ training input ต่างๆ&lt;br /&gt;
--train-file : Argument ของ script ที่ระบุ Path Training Data ที่อยู่บน &amp;nbsp;Google Cloud Storage&lt;br /&gt;
&lt;br /&gt;
ลองรัน ./start_train.sh กันเลย&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiEq8xBQakdk211Zfo-_aiOq_yRQMXofi9aSqQCnSxgQK2XbMegAfzfkAQvW-Y8Aymvn6XtZkzAxlUCrvqriJoZit64szU8eUfq3Oh8ZJONYy53XKn_0B-DcNs20s64kXkOOVV886ub2E/s1600/Screenshot+at+2017-08-12+12-02-24.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;462&quot; data-original-width=&quot;738&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiEq8xBQakdk211Zfo-_aiOq_yRQMXofi9aSqQCnSxgQK2XbMegAfzfkAQvW-Y8Aymvn6XtZkzAxlUCrvqriJoZit64szU8eUfq3Oh8ZJONYy53XKn_0B-DcNs20s64kXkOOVV886ub2E/s640/Screenshot+at+2017-08-12+12-02-24.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
เมื่อเรารันสำเร็จ gcloud command จะแนะนำคำสั่งในการ stream log ให้เรา เมื่อลองรันดูก็จะเห็น log ในการรันบน cloud ต่างๆดังภาพ&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYuVbUzCIPoHu7BwNtdxvRO4dPG_9d-lvYaGXwQgoxiHM1V93fRzJ2B4OZ7hS9gqqwFmDEVFeOTzZeURAxHCXGirtcNQ3mcgstnhEaXIkW69rkuYbaU5S4518vr4yFdEsGRQaIvah8cZw/s1600/Screenshot+at+2017-08-12+12-02-42.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;462&quot; data-original-width=&quot;738&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYuVbUzCIPoHu7BwNtdxvRO4dPG_9d-lvYaGXwQgoxiHM1V93fRzJ2B4OZ7hS9gqqwFmDEVFeOTzZeURAxHCXGirtcNQ3mcgstnhEaXIkW69rkuYbaU5S4518vr4yFdEsGRQaIvah8cZw/s640/Screenshot+at+2017-08-12+12-02-42.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
เราสามารถเข้าไปดู Log ในเวปได้ด้วยนะ&lt;br /&gt;
&lt;a href=&quot;https://www.blogger.com/goog_176462400&quot;&gt;&lt;br /&gt;&lt;/a&gt; &lt;a href=&quot;https://console.cloud.google.com/mlengine/jobs&quot; target=&quot;_blank&quot;&gt;https://console.cloud.google.com/mlengine/jobs&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL6SkEQ6Fx8iMP4cal45FQbdvMI5GujSFLcf8ColiZhS-Uh-ZMR4iUL1wCFI9G8lMrqZhCG1PhiqI2cC0PBwcTjPLLwHfR3e6cp1qao3pmW1YfU2Y4jTSScyw39nNfg652H9KMrqgcl9k/s1600/Screenshot+at+2017-08-12+12-15-19.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;518&quot; data-original-width=&quot;552&quot; height=&quot;375&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL6SkEQ6Fx8iMP4cal45FQbdvMI5GujSFLcf8ColiZhS-Uh-ZMR4iUL1wCFI9G8lMrqZhCG1PhiqI2cC0PBwcTjPLLwHfR3e6cp1qao3pmW1YfU2Y4jTSScyw39nNfg652H9KMrqgcl9k/s400/Screenshot+at+2017-08-12+12-15-19.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG7dWKfNCDqVx5IWkCQfkZMnPzx6BO3372VW3NPboHWbBS9_gwgLYGLk-r1XE4ayowFVBezRUdY0Gzpa61vZs_19rO1HmtGGUiCff64ZDnc1hXsm0lnWgTI7JfWy2omH6FCALdjKaKtd4/s1600/Screenshot+at+2017-08-12+12-15-58.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;544&quot; data-original-width=&quot;778&quot; height=&quot;278&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG7dWKfNCDqVx5IWkCQfkZMnPzx6BO3372VW3NPboHWbBS9_gwgLYGLk-r1XE4ayowFVBezRUdY0Gzpa61vZs_19rO1HmtGGUiCff64ZDnc1hXsm0lnWgTI7JfWy2omH6FCALdjKaKtd4/s400/Screenshot+at+2017-08-12+12-15-58.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
หลังจากรันเสร็จลองเข้าไปดูใน &amp;nbsp;Bucket ของเราก็จะพบกับ folder ที่มีชื่อ job name ของเรา&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhprDevR8cl0hZptx2W1s5uLwpjfmlwoJmORy7gf8eW_wK_I2FEFIYFO1zd0OhDS_AykPJPJypJpCq21rTwi-e3BiflFp8i2Hz8BZDwedLrVp0wWS0XhgtwhDqnk2PXAZjlkY2_9JrN9qU/s1600/Screenshot+at+2017-08-12+12-17-52.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;286&quot; data-original-width=&quot;892&quot; height=&quot;205&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhprDevR8cl0hZptx2W1s5uLwpjfmlwoJmORy7gf8eW_wK_I2FEFIYFO1zd0OhDS_AykPJPJypJpCq21rTwi-e3BiflFp8i2Hz8BZDwedLrVp0wWS0XhgtwhDqnk2PXAZjlkY2_9JrN9qU/s640/Screenshot+at+2017-08-12+12-17-52.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
เมื่อเข้าไปใน folder ก็จะพบ model_weight.h5 ที่เราสั่งเซฟไว้ใน Code ของเราหลัง Train เสร็จ&lt;br /&gt;
&lt;br /&gt;
เป็นอันเสร็จสิ้นการทดลองเล่น Google Cloud Machine Learning Engine ครับผม&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;เพิ่มเติม&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
ทดลอง Download weight model มาลองรัน predict ดู&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4phzQeb2z_JKJi7IaUq6tyGhEAeM-tcD9b9Ma5H9UJKy6H4np7xkL_49KI4yC1NqnCAkAJy1nUgJIvaDI-8rW1p4ZDl2nuawDtRM7pcheMWz69l-_R4iir6YukNyEeYaUNzPmabHKdd8/s1600/Screenshot+at+2017-08-12+12-33-12.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;852&quot; data-original-width=&quot;1600&quot; height=&quot;340&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4phzQeb2z_JKJi7IaUq6tyGhEAeM-tcD9b9Ma5H9UJKy6H4np7xkL_49KI4yC1NqnCAkAJy1nUgJIvaDI-8rW1p4ZDl2nuawDtRM7pcheMWz69l-_R4iir6YukNyEeYaUNzPmabHKdd8/s640/Screenshot+at+2017-08-12+12-33-12.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;สามารถดู Code ทั้งหมดได้ที่&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/kittinan/thai-handwriting-number&quot; target=&quot;_blank&quot;&gt;https://github.com/kittinan/thai-handwriting-number&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/kittinan/thai-handwriting-number/tree/master/src/cloud-ml-engine&quot; target=&quot;_blank&quot;&gt;https://github.com/kittinan/thai-handwriting-number/tree/master/src/cloud-ml-engine&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;อ้างอิง&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://cloud.google.com/ml-engine&quot; target=&quot;_blank&quot;&gt;https://cloud.google.com/ml-engine&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/clintonreece/keras-cloud-ml-engine&quot; target=&quot;_blank&quot;&gt;https://github.com/clintonreece/keras-cloud-ml-engine&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/6730020317432880890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2017/08/train-model-on-google-ml-engine.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/6730020317432880890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/6730020317432880890'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2017/08/train-model-on-google-ml-engine.html' title='Train Model บน Cloud ด้วย Google Cloud Machine Learning Engine'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-_BivpQOZafwly91XrWYxmoMnpRSaQlXAFbsY1TiVRY82Vel3vMkLXDqR_YkkrGwRtELLhigsPAnGofGC22XuYnDKxq9iZ-rk9_hCudsqR3g2MucNq9IpxrzIVvzVqHhqknplePXv7JA/s72-c/Screenshot+at+2017-08-10+19-08-14.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-932855350952152780</id><published>2017-07-24T21:04:00.003+07:00</published><updated>2017-07-24T21:04:40.758+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="vlc"/><title type='text'>Ubuntu VLC 3.0 Fix subtitle not display</title><content type='html'>&lt;b&gt;&lt;u&gt;Solution&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #111111; font-family: Ubuntu, Arial, &amp;quot;libra sans&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;Tools &amp;gt; Preferences &amp;gt; Video &amp;gt; change the output field from Default to x11 video output (XCB).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #111111; font-family: Ubuntu, Arial, &amp;quot;libra sans&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #111111; font-family: Ubuntu, Arial, &amp;quot;libra sans&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEholrvI34_bKohj7TDHo56VNHn5JDKYQo6jCWhiG0aER0yi_toF1Yvs1FhBcaGIVoddlViA8nF12HbPRdVuDP-fuxVkIZNUNr-0_gSkmQ58_TAEd6xOWcy0d819O3PCu0hiN4ovQziGmwo/s1600/Screenshot+at+2017-07-24+21-03-12.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;707&quot; data-original-width=&quot;796&quot; height=&quot;568&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEholrvI34_bKohj7TDHo56VNHn5JDKYQo6jCWhiG0aER0yi_toF1Yvs1FhBcaGIVoddlViA8nF12HbPRdVuDP-fuxVkIZNUNr-0_gSkmQ58_TAEd6xOWcy0d819O3PCu0hiN4ovQziGmwo/s640/Screenshot+at+2017-07-24+21-03-12.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;background-color: white; color: #111111; font-family: Ubuntu, Arial, &amp;quot;libra sans&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #111111; font-family: Ubuntu, Arial, &amp;quot;libra sans&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #111111; font-family: Ubuntu, Arial, &amp;quot;libra sans&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;Reference:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-size: 15px;&quot;&gt;&lt;span style=&quot;color: #111111; font-family: Ubuntu, Arial, libra sans, sans-serif;&quot;&gt;&lt;a href=&quot;https://askubuntu.com/a/907164&quot; target=&quot;_blank&quot;&gt;https://askubuntu.com/a/907164&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/932855350952152780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2017/07/ubuntu-vlc-30-fix-subtitle-not-display.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/932855350952152780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/932855350952152780'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2017/07/ubuntu-vlc-30-fix-subtitle-not-display.html' title='Ubuntu VLC 3.0 Fix subtitle not display'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEholrvI34_bKohj7TDHo56VNHn5JDKYQo6jCWhiG0aER0yi_toF1Yvs1FhBcaGIVoddlViA8nF12HbPRdVuDP-fuxVkIZNUNr-0_gSkmQ58_TAEd6xOWcy0d819O3PCu0hiN4ovQziGmwo/s72-c/Screenshot+at+2017-07-24+21-03-12.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-3358107420073721749</id><published>2017-07-22T08:54:00.003+07:00</published><updated>2017-07-22T08:54:26.415+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="mtp"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Ubuntu 14.04 Connect Android Using MTP</title><content type='html'>&lt;br /&gt;
STEP 1&lt;br /&gt;
Firstly we&#39;re going to need to install some of the common MTP apps that will be needed. Open up a terminal and type the following two lines one after the other.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libmtp-common mtp-tools libmtp-dev libmtp-runtime libmtp9&lt;br /&gt;
&lt;br /&gt;
sudo apt-get dist-upgrade&lt;br /&gt;
&lt;br /&gt;
STEP 2&lt;br /&gt;
Then we&#39;re going to amend the fuse.conf file. FUSE is an application that aims to provide a secure method for non privileged users to create and mount their own file system implementations. This option overrides the security measure restricting file access to the user mounting the file system. So all users (including root) can access the files. This option is by default only allowed to root, but this restriction can be removed with a change to the aforementioned fuse.conf file as follows:&lt;br /&gt;
&lt;br /&gt;
At the terminal type&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/fuse.conf&lt;br /&gt;
&lt;br /&gt;
We want to remove the # from the below line of code for user_allow_other, like so...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#/etc/fuse.conf - Configuration file for Filesystem in Userspace (FUSE)&lt;br /&gt;
&lt;br /&gt;
#Set the maximum number of FUSE mounts allowed to non-root users.&lt;br /&gt;
#The default is 1000.&lt;br /&gt;
#mount_max = 1000&lt;br /&gt;
&lt;br /&gt;
# Allow non-root users to specify the allow_other or allow_root mount options.&lt;br /&gt;
user_allow_other&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now save the file by pressing Ctrl+x, press Y and then Enter.&lt;br /&gt;
&lt;br /&gt;
STEP 3&lt;br /&gt;
&lt;br /&gt;
We now need to set up some rules for our device that we plan on connecting, but before we do that we need to find out both the vendor and product id&lt;br /&gt;
&lt;br /&gt;
Connect your device via an available usb port and from terminal enter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lsusb&lt;br /&gt;
This should bring up an output similar to the following&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bus 002 Device 003: ID 0fce:01b1 Sony Ericsson Mobile Communications AB&lt;br /&gt;
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub&lt;br /&gt;
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
Bus 001 Device 006: ID 0461:4d65 Primax Electronics, Ltd&lt;br /&gt;
Bus 001 Device 005: ID 0846:9020 NetGear, Inc. WNA3100(v1) Wireless-N 300&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You need to look for your device, in this instance my Sony Tablet is at the top of the list, the vendor id is 0fce and product id is 01b1&lt;br /&gt;
&lt;br /&gt;
STEP 4&lt;br /&gt;
We&#39;re then going to amend the mtp udev rules as follows, from a terminal type&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo nano /lib/udev/rules.d/69-mtp.rules&lt;br /&gt;
&lt;br /&gt;
Then add the below line of code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Sony Xperia Z2 Tablet&lt;br /&gt;
ATTR{idVendor}==&quot;0fce&quot;, ATTR{idProduct}==&quot;01b1&quot;, SYMLINK+=&quot;libmtp-%k&quot;, ENV{ID_MTP_DEVICE}=&quot;1&quot;, ENV{ID_MEDIA_PLAYER}=&quot;1&quot;&lt;br /&gt;
&lt;br /&gt;
Remember what you&#39;re changing here is the device name next to the #, this can be whatever you want, the # comments out the code, but for clarity and reference later I would choose the name of your tablet/phone and also the vendor id and product id, they should match what was seen when you issued the lsusb command earlier.&lt;br /&gt;
&lt;br /&gt;
Once done, save the file.&lt;br /&gt;
&lt;br /&gt;
STEP 5&lt;br /&gt;
The next step would also be to add a line of code to the 51 android rules file, again from a terminal type&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/udev/rules.d/51-android.rules&lt;br /&gt;
&lt;br /&gt;
Then add the following line of code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ATTR{idVendor}==&quot;0fce&quot;, ATTR{idProduct}==&quot;01b1&quot;, MODE=”0666&quot;&lt;br /&gt;
&lt;br /&gt;
Remember what I have highlighted in red needs to be changed to your device product id and vendor id.&lt;br /&gt;
&lt;br /&gt;
Once that is done and the file is saved, remove any usb device currently connected and issue the following commands&lt;br /&gt;
&lt;br /&gt;
[B]STEP 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo service udev restart&lt;br /&gt;
&lt;br /&gt;
Then save any other remaining work you may have open and reboot the system.&lt;br /&gt;
&lt;br /&gt;
STEP 7&lt;br /&gt;
&lt;br /&gt;
sudo reboot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source:&amp;nbsp;&lt;a href=&quot;https://ubuntuforums.org/archive/index.php/t-2226702.html&quot; target=&quot;_blank&quot;&gt;https://ubuntuforums.org/archive/index.php/t-2226702.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/3358107420073721749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2017/07/ubuntu-1404-connect-android-using-mtp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/3358107420073721749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/3358107420073721749'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2017/07/ubuntu-1404-connect-android-using-mtp.html' title='Ubuntu 14.04 Connect Android Using MTP'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-1597256972558569935</id><published>2017-06-20T09:21:00.001+07:00</published><updated>2017-06-20T09:21:17.942+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="log"/><title type='text'>Linux 11 log file should know</title><content type='html'>/var/log/messages : General message and system related stuff&lt;br /&gt;
/var/log/boot.log : Services success/failures at boot&lt;br /&gt;
/var/log/secure or /var/log/auth.log : Authentication log&lt;br /&gt;
/var/log/utmp or /var/log/wtmp : Login records&lt;br /&gt;
/var/log/btmp &amp;nbsp;: Failed login records&lt;br /&gt;
/var/log/cron : Scheduler log file&lt;br /&gt;
/var/log/maillog : Mail logs&lt;br /&gt;
/var/log/xferlog : File transfer logs&lt;br /&gt;
/var/log/lastlog : Last login details&lt;br /&gt;
dmesg : Device driver messages&lt;br /&gt;
/var/crash logs : System crash dump&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ref:&amp;nbsp;&lt;a href=&quot;https://kerneltalks.com/errors/11-log-files-you-should-see-on-your-linux-system/&quot; target=&quot;_blank&quot;&gt;https://kerneltalks.com/errors/11-log-files-you-should-see-on-your-linux-system/&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/1597256972558569935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2017/06/linux-11-log-file-should-know.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/1597256972558569935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/1597256972558569935'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2017/06/linux-11-log-file-should-know.html' title='Linux 11 log file should know'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-5604400014917549115</id><published>2017-03-26T20:15:00.001+07:00</published><updated>2017-03-26T20:15:31.989+07:00</updated><title type='text'>Linux record audio command for Google Cloud Speech API</title><content type='html'>Command:&lt;br /&gt;
&lt;br /&gt;
arecord -f S16_LE -V mono -r 8000 record.wav&lt;br /&gt;
&lt;br /&gt;
API Request:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &quot;config&quot;: {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;sampleRate&quot;: 8000,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;encoding&quot;: &quot;LINEAR16&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;languageCode&quot;: &quot;th&quot;&lt;br /&gt;
&amp;nbsp; },&lt;br /&gt;
&amp;nbsp; &quot;audio&quot;: {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;content&quot;: &quot;CONTENT_BASE64&quot;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://cloud.google.com/speech/docs/sync-recognize#speech-sync-recognize-protocol</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/5604400014917549115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2017/03/linux-record-audio-command-for-google.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/5604400014917549115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/5604400014917549115'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2017/03/linux-record-audio-command-for-google.html' title='Linux record audio command for Google Cloud Speech API'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-52185142794678234</id><published>2017-02-02T21:29:00.003+07:00</published><updated>2017-02-02T21:29:58.396+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="yubikey"/><title type='text'>Ubuntu 14.04 Yubikey 4 U2F not work</title><content type='html'>I got Yubikey 4 today but U2F Feature not work on my Chrome.&lt;br /&gt;
&lt;br /&gt;
Fix by&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
cd&amp;nbsp;/etc/udev/rules.d&lt;br /&gt;sudo wget&amp;nbsp;https://raw.githubusercontent.com/Yubico/yubikey-personalization/master/69-yubikey.rules&lt;br /&gt;sudo wget&amp;nbsp;https://raw.githubusercontent.com/Yubico/yubikey-personalization/master/70-yubikey.rules&lt;/blockquote&gt;
&lt;br /&gt;
Unplug and insert Yubikey again&lt;br /&gt;
&lt;br /&gt;
U2F will work&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrzASTuX5x5FIZ-TTAlKYNQWV9ID1QQMZ4cHNjb2Ta3s5EdUHPiOCnXOviMO5KzDFi270rFVXYhkZpMDYJTuBOsK4-TvtPIAyama6QXbOLoMlz9Sqh-lUj7znV0KjJRBWHmdObbtLx3To/s1600/_IMG_20170202_200400.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;478&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrzASTuX5x5FIZ-TTAlKYNQWV9ID1QQMZ4cHNjb2Ta3s5EdUHPiOCnXOviMO5KzDFi270rFVXYhkZpMDYJTuBOsK4-TvtPIAyama6QXbOLoMlz9Sqh-lUj7znV0KjJRBWHmdObbtLx3To/s640/_IMG_20170202_200400.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/52185142794678234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2017/02/ubuntu-1404-yubikey-4-u2f-not-work.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/52185142794678234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/52185142794678234'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2017/02/ubuntu-1404-yubikey-4-u2f-not-work.html' title='Ubuntu 14.04 Yubikey 4 U2F not work'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrzASTuX5x5FIZ-TTAlKYNQWV9ID1QQMZ4cHNjb2Ta3s5EdUHPiOCnXOviMO5KzDFi270rFVXYhkZpMDYJTuBOsK4-TvtPIAyama6QXbOLoMlz9Sqh-lUj7znV0KjJRBWHmdObbtLx3To/s72-c/_IMG_20170202_200400.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-242867992025981991</id><published>2017-01-16T00:25:00.000+07:00</published><updated>2017-01-16T00:25:09.749+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="line"/><category scheme="http://www.blogger.com/atom/ns#" term="line notify"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>ส่ง Notification ผ่าน Line Notify ด้วย PHP</title><content type='html'>วันนี้จะมาแนะนำการส่ง Notification ผ่าน&amp;nbsp;&lt;a href=&quot;https://notify-bot.line.me/&quot; target=&quot;_blank&quot;&gt;Line Notify&lt;/a&gt;&amp;nbsp;ด้วยภาษา PHP กันครับ&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
โดย Line Notify นั้นมีความสามารถดังนี้&lt;/div&gt;
&lt;div&gt;
- ส่ง Notification มายังตัวเราเอง&lt;/div&gt;
&lt;div&gt;
- ส่ง Notification ไปยัง Line Group ที่เราอยู่ (เราต้องเพิ่ม Line Notify เข้ามาใน Line Group นั้นด้วย)&lt;/div&gt;
&lt;div&gt;
- ส่ง ข้อความ Text, รูปภาพ และ Sticker ได้&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;Add Line Notify เป็นเพื่อนเราก่อน&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
ก่อนอื่นเราต้องแอด Line Notify มาเป็นเพื่อนเราก่อน โดยค้นหาคำว่า Line Notify แล้วแอดเป็นเพื่อนดังภาพ&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHh9Gm8bLqe-yK3vxkQLHgAfVJ5-PhOe-gT4d7f94AuCbj1LsOOFKdSWlrzXHR8rbZZB_nCQyTEOW8wR7LGWs46RbgKYDtCNAVVDc0wCsLMz3c7kwx728GXlJsq9EXiAA0ponMC_1Rewc/s1600/Screenshot_20170115-234228.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHh9Gm8bLqe-yK3vxkQLHgAfVJ5-PhOe-gT4d7f94AuCbj1LsOOFKdSWlrzXHR8rbZZB_nCQyTEOW8wR7LGWs46RbgKYDtCNAVVDc0wCsLMz3c7kwx728GXlJsq9EXiAA0ponMC_1Rewc/s640/Screenshot_20170115-234228.png&quot; width=&quot;372&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;สร้าง Token สำหรับการ Notify&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
- ให้เรา Login เข้าในเวป&amp;nbsp;&lt;a href=&quot;https://notify-bot.line.me/&quot; target=&quot;_blank&quot;&gt;https://notify-bot.line.me&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
- เมื่อ Login เสร็จเรียบร้อย ให้เข้า&amp;nbsp;&lt;a href=&quot;https://notify-bot.line.me/my/&quot; target=&quot;_blank&quot;&gt;https://notify-bot.line.me/my/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
- เลื่อนลงมาด้านล่างคลิกที่ &lt;b&gt;Generate Token&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwpx8xbYwjGUCC9AekvoxEc9274TAsjTizbJrrGgCIgxQUR_-EuvDMH58UA70GvI6RckezsLiDYpbKYWklv52-2fcjslGDoOsFQmKycMOz-RvOdDUdsHA26_icNal0atDhilym7QlArcE/s1600/Screenshot+from+2017-01-15+19%253A44%253A34.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;219&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwpx8xbYwjGUCC9AekvoxEc9274TAsjTizbJrrGgCIgxQUR_-EuvDMH58UA70GvI6RckezsLiDYpbKYWklv52-2fcjslGDoOsFQmKycMOz-RvOdDUdsHA26_icNal0atDhilym7QlArcE/s640/Screenshot+from+2017-01-15+19%253A44%253A34.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;คลิก Generate token&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
- ให้เราตั้งชื่อ Notify &amp;nbsp;(ชื่อนี้จะไปแสดงตอนส่งข้อความ)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_8-_g6_loyGdxwAA61o8tlnxjgybo4zQ26d27qzYaaDecdoZaK2mY5V1OhyphenhyphenNRnB8nRFcUIVCjTiGN6eTRd9rXzuV8M8YsVLk_y4vOqIU7oeS06ZTaDFUwY6C9hIujLtfg7_1S2xyLlmM/s1600/Screenshot+from+2017-01-15+19%253A46%253A43.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_8-_g6_loyGdxwAA61o8tlnxjgybo4zQ26d27qzYaaDecdoZaK2mY5V1OhyphenhyphenNRnB8nRFcUIVCjTiGN6eTRd9rXzuV8M8YsVLk_y4vOqIU7oeS06ZTaDFUwY6C9hIujLtfg7_1S2xyLlmM/s640/Screenshot+from+2017-01-15+19%253A46%253A43.png&quot; width=&quot;434&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;เลือกตัวเราเองหรือ Line Group ที่ต้องการ&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
1-on-1 chat with LINE Notify คือจะส่งข้อความมาหาตัวเราเอง&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
นอกนั้นจะเป็น List ของ Line Group ที่เราอยู่ หากต้องการให้ส่งเข้า Line Group เราต้อง Invite Line Notify เข้าไปใน Line Group นั้นด้วย&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
- คลิก Generate token เราก็จะได้ Token เอาไว้ในการส่ง Notify ให้เราเซฟไว้ให้ดี เพราะเราจะเห็น Token อันนี้เพียงครั้งเดียว&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdK3dZjNnTI9bIvqjxp6AkGnAYEsjhkT7Z461B18lYuj8BEB0dK3j8J_5vZ-1nq7IF-A2bb1bbqK0uvo-zrh7_3290UHZpITsOc834omdJjkbz_OBtcWYpbqGyTVuG3cNJCWl1wDvqU6w/s1600/Screenshot+from+2017-01-15+19%253A51%253A52.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdK3dZjNnTI9bIvqjxp6AkGnAYEsjhkT7Z461B18lYuj8BEB0dK3j8J_5vZ-1nq7IF-A2bb1bbqK0uvo-zrh7_3290UHZpITsOc834omdJjkbz_OBtcWYpbqGyTVuG3cNJCWl1wDvqU6w/s1600/Screenshot+from+2017-01-15+19%253A51%253A52.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Token จะแสดงใน Popup นี้เพียงครั้งเดียวเท่านั้น&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;ส่ง Notification ด้วย PHP&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
ในที่นี้เราจะใช้ PHP ในการส่ง Notification กันนะครับ หากต้องการส่งด้วยภาษาอื่นสามารถดู API ได้ที่เอกสารนี้ &lt;a href=&quot;https://notify-bot.line.me/doc/en/&quot; target=&quot;_blank&quot;&gt;https://notify-bot.line.me/doc/en/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
โดยผมได้สร้าง PHP Library ง่ายๆ สำหรับที่ใช้ในการส่ง Line Notify ไว้ที่&amp;nbsp;&lt;a href=&quot;https://github.com/kittinan/php-line-notify&quot; target=&quot;_blank&quot;&gt;https://github.com/kittinan/php-line-notify&lt;/a&gt; โดยมี Requirement ดังนี้&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;- PHP 5.5+&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;-&amp;nbsp;&lt;a href=&quot;https://github.com/kittinan/php-line-notify&quot; target=&quot;_blank&quot;&gt;guzzlehttp&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;u&gt;เริ่มกันเลย&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
- โหลด Library ผ่าน composer&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
composer require kittinan/php-line-notify&lt;/blockquote&gt;
&lt;div&gt;
- ทดสอบส่ง Text Message ตาม Code ด้านล่าง&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;code data-gist-highlight-line=&quot;20&quot; data-gist-id=&quot;1d773c89f822f9683839d355cba7addb&quot;&gt;&lt;/code&gt;

&lt;br /&gt;
&lt;div&gt;
- ข้อความก็จะถูกส่งไปยังตัวเราหรือ Line Group ที่เรา Generate Token มา&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV4xUZeMDTGrAAYPxfn6_7PsFJv7dQnaaIu6a1PmcHKMEj3vtbc5NFSI8GrE34rRCBsR_YT_ss_BkacCCKBy4eLeMRCsYW8JHM8SDXuCe7nq-iG6X5bqkpV6qX6N2baEKwUaXrzbM3b58/s1600/Screenshot_20170115-235917.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV4xUZeMDTGrAAYPxfn6_7PsFJv7dQnaaIu6a1PmcHKMEj3vtbc5NFSI8GrE34rRCBsR_YT_ss_BkacCCKBy4eLeMRCsYW8JHM8SDXuCe7nq-iG6X5bqkpV6qX6N2baEKwUaXrzbM3b58/s640/Screenshot_20170115-235917.png&quot; width=&quot;372&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
- ทดลองส่งรูปภาพ ตาม Code ด้านล่าง&lt;br /&gt;
&lt;br /&gt;
&lt;code data-gist-highlight-line=&quot;20&quot; data-gist-id=&quot;a1a285f4553befb011027bc02d25767d&quot;&gt;&lt;/code&gt;

&lt;br /&gt;
- รูปภาพก็จะถูกส่งไปยังตัวเราหรือ Line Group ที่เรา Generate Token มา&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh22JC3houkRlgMIdix5pMYQ4-9gsrXiqE7nW-pHVTxgGv05z1fk_8s3LrlMkxBVzdjLWZ8mZyx2mcP7i54v14QOMKxaD365-a8u4OOKIEg8sEA_1lXhzniy5IJfSdvcv7TAz3WpO6Q6Bw/s1600/Screenshot_20170116-001302.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh22JC3houkRlgMIdix5pMYQ4-9gsrXiqE7nW-pHVTxgGv05z1fk_8s3LrlMkxBVzdjLWZ8mZyx2mcP7i54v14QOMKxaD365-a8u4OOKIEg8sEA_1lXhzniy5IJfSdvcv7TAz3WpO6Q6Bw/s640/Screenshot_20170116-001302.png&quot; width=&quot;372&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
จบแล้วค้าบบ&lt;br /&gt;
&lt;br /&gt;
ปล. ไว้มีเวลาจะอัพเดท Library ให้สามารถส่ง Sticker ได้นะครับ&lt;br /&gt;
ปล. API Line Notify มี Rate Limit อยู่นะครับ โดย Rate Limit จะอยู่ที่ 1,000 ต่อชั่วโมง&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/242867992025981991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2017/01/line-notify-php.html#comment-form' title='32 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/242867992025981991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/242867992025981991'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2017/01/line-notify-php.html' title='ส่ง Notification ผ่าน Line Notify ด้วย PHP'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHh9Gm8bLqe-yK3vxkQLHgAfVJ5-PhOe-gT4d7f94AuCbj1LsOOFKdSWlrzXHR8rbZZB_nCQyTEOW8wR7LGWs46RbgKYDtCNAVVDc0wCsLMz3c7kwx728GXlJsq9EXiAA0ponMC_1Rewc/s72-c/Screenshot_20170115-234228.png" height="72" width="72"/><thr:total>32</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-1071508170233958391</id><published>2016-11-17T22:08:00.001+07:00</published><updated>2016-11-17T22:13:57.403+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MITM"/><category scheme="http://www.blogger.com/atom/ns#" term="quizclash"/><title type='text'>แงะแอพ QuizClash แบบบังเอิญ</title><content type='html'>ช่วงนี้แอพ &lt;a href=&quot;http://www.quizclash-game.com/&quot; target=&quot;_blank&quot;&gt;QuizClash&lt;/a&gt; กำลังเป็นที่นิยมในหมู่เพื่อนฝูงจึงได้มีโอกาสโหลดมาเล่นบ้าง ด้วยความบังเอิญขณะนั่งทำ MITM โทรศัพท์ตัวเองอยู่เพื่อที่จะดูว่าแอพ Facebook มันยังใช้ Certificate Pinning อยู่รึเปล่า ปรากฎว่าแอพ Facebook ยังใช้ Certificate Pinning อยู่ แต่มีบางโดเมนที่ไม่ได้ใช้ (Facebook เริ่มใช้ Certificate Pinning ประมาณเดือนตุลาคมปี 2015) ซึ่งขณะที่นั่งทำ MITM อยู่ก็ได้กดเข้าไปเล่นเกมส์ QuizClash และก็ได้พบอะไรบางอย่างเกิดขึ้น . . .&lt;br /&gt;
&lt;br /&gt;
ย้อนกลับไปเมื่อตอนโหลดแอพ QuizClash มาเล่นในทีแรกก็เกิดข้อสงสัยคือทำไมแอพมันโคตรใหญ่จังเลยวะ&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=se.feomedia.quizkampen.uk.lite&amp;amp;hl=en&quot; target=&quot;_blank&quot;&gt;Android&lt;/a&gt; &amp;nbsp;~58 MB&lt;br /&gt;
&lt;a href=&quot;https://itunes.apple.com/app/quizclash/id684892946&quot; target=&quot;_blank&quot;&gt;IOS&lt;/a&gt; &amp;nbsp;~99 MB&lt;br /&gt;
&lt;br /&gt;
ในทีแรกก็คิดว่ามันคงยัดพวกคำถามกับพวกรูปภาพลงไปในแอพเลย ปรากฎว่า&lt;b&gt;ไม่ใช่&lt;/b&gt; มันโหลดคำถามและรูปภาพจาก Network ดังภาพ&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixEyPdDXv8mpJZKgLW1hNrk1A8LnjQSZRJu3DWXrHlL8Lu6zsud8U1fS3pHL1G7xfXYFsfiZw_3i8u2CXd5eucXTdv_AU4_JhiAJGKb-QnHvUxYEVPX2vgSQHtwCqWYrC7J2PSG4SkNSI/s1600/Screenshot-Burp+Suite+Free+Edition+v1.7.10+-+Temporary+Project.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;336&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixEyPdDXv8mpJZKgLW1hNrk1A8LnjQSZRJu3DWXrHlL8Lu6zsud8U1fS3pHL1G7xfXYFsfiZw_3i8u2CXd5eucXTdv_AU4_JhiAJGKb-QnHvUxYEVPX2vgSQHtwCqWYrC7J2PSG4SkNSI/s640/Screenshot-Burp+Suite+Free+Edition+v1.7.10+-+Temporary+Project.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
จากภาพก็จะเห็นว่ามีการใช้ Facebook SDK สำหรับการ Login (เพราะผม Login ด้วย Facebook ในการเล่น)&lt;br /&gt;
&lt;br /&gt;
ตัวเกมส์ก็จะทำการ Login ด้วย Token ของตัวเองด้วยดังภาพ&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJkTADK1emMSE6P15e2kVA98RYhX8t5c4uzNwldP2WHRe15viihGzZ_TUE9S6hYnWLvUrGB1TKCDLyah9lkQRjWvDbfHIco6xXx__i5bX_y5pxgOHaEbGSJy8BiBtUPXg8antYE8Wriqg/s1600/Screenshot-Burp+Suite+Free+Edition+v1.7.10+-+Temporary+Project-1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJkTADK1emMSE6P15e2kVA98RYhX8t5c4uzNwldP2WHRe15viihGzZ_TUE9S6hYnWLvUrGB1TKCDLyah9lkQRjWvDbfHIco6xXx__i5bX_y5pxgOHaEbGSJy8BiBtUPXg8antYE8Wriqg/s1600/Screenshot-Burp+Suite+Free+Edition+v1.7.10+-+Temporary+Project-1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
ที่น่าสนใจคือมีการใช้ HMAC ด้วย น่าจะใช้สำหรับเชคความถูกต้อง Request พูดถึง HMAC แล้วก็คิดถึง Ragnarok&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
และที่น่าสนใจที่สุดคือ Request นี้&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSi-4lv22VJ7gXq0mhy7HO5Y492IZk080RZmE6BvBrf1zhirJw0vwdc4hJtd6c8TEHzKeN7HW8ruohuWPdkdpG9qaWO1gqVcB1CaW0IlPK4wW-lx-NilVuMc48npACppqxcpf8lAv3_8w/s1600/Screenshot-12.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSi-4lv22VJ7gXq0mhy7HO5Y492IZk080RZmE6BvBrf1zhirJw0vwdc4hJtd6c8TEHzKeN7HW8ruohuWPdkdpG9qaWO1gqVcB1CaW0IlPK4wW-lx-NilVuMc48npACppqxcpf8lAv3_8w/s1600/Screenshot-12.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
มันคือ Request ในการโหลดคำถามและคำตอบของเกมส์ที่เราเล่นกับเพื่อนคนใดคนหนึ่ง ซึ่ง Response เป็น JSON มีขนาดประมาณ 75KB ตัวอย่าง JSON ก็ดังภาพด้านล่าง&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMFwH6hYtz9YhLoa1kxIpFy7NWqok11U_lnbxFIB1p5xvnVFMq-guFobjtsDpdv5QErm7JBRcM5KZrKWR91wlXk8xmRBA4uOtLTMtgYLtpMslos8tr0-Gfv6adJuWcQYhslknpOoZgt18/s1600/Screenshot-tun%2540null%253A+-tmp.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;457&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMFwH6hYtz9YhLoa1kxIpFy7NWqok11U_lnbxFIB1p5xvnVFMq-guFobjtsDpdv5QErm7JBRcM5KZrKWR91wlXk8xmRBA4uOtLTMtgYLtpMslos8tr0-Gfv6adJuWcQYhslknpOoZgt18/s640/Screenshot-tun%2540null%253A+-tmp.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
ซึ่งคำถาม - คำตอบจะไม่มีการเปลี่ยนแปลง ถ้าได้ JSON ไฟล์นี้มาก็จะสามารถตอบคำถามได้ทุกข้อล่ะ 555+&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
ส่วนแอพที่มีขนาดใหญ่นั้นเมื่อได้ลองแกะดูเบื้องต้นน่าจะมาจาก Resource ไฟล์ภาพนั่นเอง ซึ่งตัวแอพ support หลาย locale เลยต้องมีภาพเยอะตามแต่ละ locale ไปด้วย&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAPN4IRZIsajljTktTn9znxIYY1qce9K9ZSnAvxQq4Hs423CMmJY9zdMIzYWOOfRYD2IU718RoM16h6UEepD3jgzR_scAhf0p-3ljZYN4RRNhA-kMnSC0wXSGNnSzVJb_KAsLuWq91CMo/s1600/Screenshot-13.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;302&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAPN4IRZIsajljTktTn9znxIYY1qce9K9ZSnAvxQq4Hs423CMmJY9zdMIzYWOOfRYD2IU718RoM16h6UEepD3jgzR_scAhf0p-3ljZYN4RRNhA-kMnSC0wXSGNnSzVJb_KAsLuWq91CMo/s640/Screenshot-13.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
จบแล้วครับ&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
ปล. เพื่อการศึกษาเท่านั้น&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/1071508170233958391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2016/11/quizclash.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/1071508170233958391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/1071508170233958391'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2016/11/quizclash.html' title='แงะแอพ QuizClash แบบบังเอิญ'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixEyPdDXv8mpJZKgLW1hNrk1A8LnjQSZRJu3DWXrHlL8Lu6zsud8U1fS3pHL1G7xfXYFsfiZw_3i8u2CXd5eucXTdv_AU4_JhiAJGKb-QnHvUxYEVPX2vgSQHtwCqWYrC7J2PSG4SkNSI/s72-c/Screenshot-Burp+Suite+Free+Edition+v1.7.10+-+Temporary+Project.png" height="72" width="72"/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-9146761435072176220</id><published>2016-11-08T10:19:00.001+07:00</published><updated>2016-11-08T10:19:09.836+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Genymotion"/><title type='text'>Fix Genymotion 2.8 Ubuntu 14.04</title><content type='html'>Genymotion 2.8.0 thrown error on Ubuntu 14.04&lt;br /&gt;
&lt;br /&gt;
Error:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
CXXABI_1.3.8 not found&lt;/blockquote&gt;
&lt;br /&gt;
Solution to solve this problem&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATH&lt;br /&gt;export LD_LIBRARY_PATH&lt;br /&gt;sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install gcc-4.9 g++-4.9&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
Reference&lt;br /&gt;
&lt;a href=&quot;http://stackoverflow.com/questions/37817792/how-to-fix-genymotion-in-linux-elementaryos-with-error-cxxabi-1-3-8-not-found&quot; target=&quot;_blank&quot;&gt;http://stackoverflow.com/questions/37817792/how-to-fix-genymotion-in-linux-elementaryos-with-error-cxxabi-1-3-8-not-found&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/9146761435072176220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2016/11/fix-genymotion-28-ubuntu-1404.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/9146761435072176220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/9146761435072176220'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2016/11/fix-genymotion-28-ubuntu-1404.html' title='Fix Genymotion 2.8 Ubuntu 14.04'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-6809328468263354949</id><published>2016-10-29T12:05:00.002+07:00</published><updated>2016-10-29T12:06:17.844+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu bluetooth headset"/><title type='text'>Ubuntu 14.04 Bluetooth Headset problem</title><content type='html'>Connect blutetooth headset with &quot;Headset Service&quot; after than run&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;br /&gt;
pactl load-module module-bluetooth-discover&lt;/blockquote&gt;
&lt;br /&gt;
&amp;nbsp;If sound on headset not work perfectly change the profile of headset like in the picture below&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVe9ABiwBbyhCKMGWPP03giiJUh-PMa0tXLAtPZte2bx_8LguIiCJCXjpsQ19dqOXLUJEVFHoYg6TntR5SHRjMCbc7u2AiRBXSU9ijJiu8l2tx1yPCNv9egeCBQGBRFywdw72bgqAyjII/s1600/Screenshot-Sound+Preferences.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVe9ABiwBbyhCKMGWPP03giiJUh-PMa0tXLAtPZte2bx_8LguIiCJCXjpsQ19dqOXLUJEVFHoYg6TntR5SHRjMCbc7u2AiRBXSU9ijJiu8l2tx1yPCNv9egeCBQGBRFywdw72bgqAyjII/s1600/Screenshot-Sound+Preferences.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/6809328468263354949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2016/10/ubuntu-1404-bluetooth-headset-problem.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/6809328468263354949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/6809328468263354949'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2016/10/ubuntu-1404-bluetooth-headset-problem.html' title='Ubuntu 14.04 Bluetooth Headset problem'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVe9ABiwBbyhCKMGWPP03giiJUh-PMa0tXLAtPZte2bx_8LguIiCJCXjpsQ19dqOXLUJEVFHoYg6TntR5SHRjMCbc7u2AiRBXSU9ijJiu8l2tx1yPCNv9egeCBQGBRFywdw72bgqAyjII/s72-c/Screenshot-Sound+Preferences.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-3509976109490072992</id><published>2016-10-09T21:21:00.000+07:00</published><updated>2016-11-20T19:05:27.866+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bot"/><category scheme="http://www.blogger.com/atom/ns#" term="line"/><category scheme="http://www.blogger.com/atom/ns#" term="line bot"/><title type='text'>ทดลองสร้าง Line @ Bot แบบมั่วๆ</title><content type='html'>Line ได้ออก API สำหรับ Line @ และ Line Official มาได้สักพักนึงแล้วโดยใช้ชื่อว่า &lt;a href=&quot;https://developers.line.me/messaging-api/overview&quot; target=&quot;_blank&quot;&gt;Messaging Api&lt;/a&gt; ซึ่งวันนี้เพิ่งมีโอกาสได้ลองเล่น API แบบจริงจังเลยมาเขียนบล็อกแชร์ประสบการณ์การใช้งาน API ของ Line ในการสร้าง Chat Bot แบบขำๆขึ้นมา&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;สิ่งที่ต้องการในการสร้าง Bot&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
-&amp;nbsp;Server 1 ตัว (ใช้ Ubuntu 14.04)&lt;br /&gt;
- Nginx &amp;nbsp;(ใช้อะไรก็ได้แล้วแต่ถนัด)&lt;br /&gt;
-&amp;nbsp;HTTPS ที่ valid cert อันนี้ต้องมีไม่งั้น&lt;b&gt;ใช้ไม่ได้ &lt;/b&gt;ในที่นี้ใช้ &lt;a href=&quot;http://letsencrypt/&quot; target=&quot;_blank&quot;&gt;Let&#39;s Encrypt&lt;/a&gt; (ลองใช้ Cloudflare ที่ใช้ค่า&amp;nbsp;-&amp;nbsp;Default แล้วโดนบล็อกข้อมูลที่ส่งมาจาก Line เลยขี้เกียจหาวิธีแก้)&lt;br /&gt;
-&amp;nbsp;PHP 5&lt;br /&gt;
-&amp;nbsp;Python 3&lt;br /&gt;
-&amp;nbsp;&lt;a href=&quot;https://github.com/gunthercox/ChatterBot&quot; target=&quot;_blank&quot;&gt;ChatterBot&lt;/a&gt; (เอาไว้สร้าง Bot Chat)&lt;br /&gt;
-&amp;nbsp;&lt;a href=&quot;https://www.mongodb.com/&quot; target=&quot;_blank&quot;&gt;MongoDB&lt;/a&gt; (เอาไว้เก็บข้อมูลของ ChatterBot)&lt;br /&gt;
-&amp;nbsp;&lt;a href=&quot;https://github.com/kittinan/Sample-Line-Bot&quot; target=&quot;_blank&quot;&gt;Sample-Line-Bot&lt;/a&gt; (&lt;a href=&quot;https://github.com/kittinan/Sample-Line-Bot&quot; target=&quot;_blank&quot;&gt;https://github.com/kittinan/Sample-Line-Bot&lt;/a&gt;)&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div&gt;
ติดตั้ง Nginx, php และ config https ไว้ให้พร้อมใช้งาน&lt;/div&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;Line Messaging API Architecture&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
ขออนุญาติก็อบรูปใน &lt;a href=&quot;https://developers.line.me/messaging-api/overview&quot; target=&quot;_blank&quot;&gt;Line Developer&lt;/a&gt; มาให้ดู ซึ่งการทำงานก็ไม่มีไรมาก&lt;br /&gt;
เมื่อผู้ใช้ส่งข้อความมาที่ Line @ เรา Line ก็จะส่งข้อความนั้นมายัง Server ที่เราเซตเอาไว้&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCJp7qe010IA_x5ifyk2DolQ2NJtrRXknslHzMIy1BKG4qId7mt6FBJIUVE9xgE0srAlUOmNfuq_7SMAoYSRyeRPzkG2L671nW395_57xbT5oIDJlaYNIroOxdFQXeVxW7Tzhflxv-Fsg/s1600/bottrial-fig1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;265&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCJp7qe010IA_x5ifyk2DolQ2NJtrRXknslHzMIy1BKG4qId7mt6FBJIUVE9xgE0srAlUOmNfuq_7SMAoYSRyeRPzkG2L671nW395_57xbT5oIDJlaYNIroOxdFQXeVxW7Tzhflxv-Fsg/s640/bottrial-fig1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;สมัครใช้งาน Line Messaging API&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
ตาม Link นี้เลย&amp;nbsp;&lt;a href=&quot;https://developers.line.me/messaging-api/getting-started&quot; target=&quot;_blank&quot;&gt;https://developers.line.me/messaging-api/getting-started&lt;/a&gt; ค่อยๆอ่าน แล้วทำตามอย่าข้ามขั้นตอนเด็ดขาด ไม่งั้นปวดหัวสุดๆ&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;สร้าง Chat Bot ด้วย ChatterBot&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Install MongoDB&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
วิธีการตาม Link นี้เลย&amp;nbsp;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-14-04&quot; target=&quot;_blank&quot;&gt;https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-14-04&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10&lt;br /&gt;
sudo echo &quot;deb http://repo.mongodb.org/apt/ubuntu &quot;$(lsb_release -sc)&quot;/mongodb-org/3.0 multiverse&quot; | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install -y mongodb-org&lt;/blockquote&gt;
&lt;br /&gt;
เสร็จสิ้นการลง MongoDB&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Install Python 3&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
ใน Ubuntu 14.04 นั้นลง Python 3 มาไว้อยู่แล้ว โดยแค่ลงเพิ่มอีก 2 package คือ python pip กับ python&amp;nbsp;levenshtein&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sudo apt-get install python3-pip python3-levenshtein&amp;nbsp;python3-nltk&amp;nbsp;python3-setuptools&lt;/blockquote&gt;
&lt;br /&gt;
Install ChatterBot ผ่าน python pip&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sudo pip3 install chatterbot&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sudo python3 -m nltk.downloader -d /usr/local/share/nltk_data brown movie_reviews conll2000 punkt averaged_perceptron_tagger&lt;/blockquote&gt;
&lt;br /&gt;
เมื่อลง Package ที่ต้องการต่างๆเรียบร้อยแล้วให้ clone&amp;nbsp;&lt;b&gt;&lt;a href=&quot;https://github.com/kittinan/Sample-Line-Bot&quot; target=&quot;_blank&quot;&gt;https://github.com/kittinan/Sample-Line-Bot&lt;/a&gt;&lt;/b&gt; มายังเครื่อง เพื่อที่เราจะเริ่มทำการ train bot ให้ตอบแชทได้&lt;br /&gt;
&lt;br /&gt;
เมื่อ clone มาเสร็จแล้วให้ไปยัง folder python แล้วรัน&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
python3 trainer.py sample_conversation.json&lt;/blockquote&gt;
&lt;br /&gt;
โดย&amp;nbsp;&lt;a href=&quot;https://github.com/kittinan/Sample-Line-Bot/blob/master/python/sample_conversation.json&quot; target=&quot;_blank&quot;&gt;sample_conversation.json&lt;/a&gt; นั้นเป็นตัวอย่างข้อมูลการสนทนา ถาม-ตอบ ซึ่งอยู่ใน format json array โดยส่วนตัวผมใช้ข้อมูลการ Chat กับเพื่อนใน Facebook ในการ train model ของ chat bot&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij5A74L3oyxrnBqhahIAk-fUFTa1wsdf1ZSfd7v4k5pZfjdqa_sI1KXNzVMDwDFFntASbPDH_R0HvrI5PFQr9jhH3CJZ6fQZs-5oQoNr1mmMT-2fhJXhXGYBwOxU7ivUKvr4jQcmCu9X0/s1600/Screenshot-null%2540null%253A+%257E-git-Sample-Line-Bot-python-1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;427&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij5A74L3oyxrnBqhahIAk-fUFTa1wsdf1ZSfd7v4k5pZfjdqa_sI1KXNzVMDwDFFntASbPDH_R0HvrI5PFQr9jhH3CJZ6fQZs-5oQoNr1mmMT-2fhJXhXGYBwOxU7ivUKvr4jQcmCu9X0/s640/Screenshot-null%2540null%253A+%257E-git-Sample-Line-Bot-python-1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
เมื่อ train model เสร็จแล้วให้ทดสอบว่า chat bot ทำงานได้ถูกต้องโดยการรัน&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
python3 chat.py &quot;ดีครับ&quot;&lt;br /&gt;
python3 chat.py &quot;ชื่อไร&quot;&lt;/blockquote&gt;
&lt;br /&gt;
Bot ก็จะตอบมาดังภาพ&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWYZs8StiEKaifALgA-9w6ZIWTRPKIJ9BVoZZcD2j0fd5Rb4Wp-1dFrq__lkB1ERqbWKvJVnn0I0koxD91r8cYMzCjAO0zO29ZJxahgdjJaNSKtdjt0-t3Vj2OxBDtvMPgQLYk6v-s5mY/s1600/Screenshot-null%2540null%253A+%257E-git-Sample-Line-Bot-python-2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;428&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWYZs8StiEKaifALgA-9w6ZIWTRPKIJ9BVoZZcD2j0fd5Rb4Wp-1dFrq__lkB1ERqbWKvJVnn0I0koxD91r8cYMzCjAO0zO29ZJxahgdjJaNSKtdjt0-t3Vj2OxBDtvMPgQLYk6v-s5mY/s640/Screenshot-null%2540null%253A+%257E-git-Sample-Line-Bot-python-2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
ดูรายละเอียด &lt;a href=&quot;https://github.com/gunthercox/ChatterBot&quot; target=&quot;_blank&quot;&gt;ChatterBot&lt;/a&gt; &amp;nbsp;เพิ่มเติม ได้ที่&amp;nbsp;&lt;a href=&quot;http://chatterbot.readthedocs.io/en/stable/&quot; target=&quot;_blank&quot;&gt;http://chatterbot.readthedocs.io/en/stable/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;ประกอบร่าง &amp;nbsp;Line API กับ ChatterBot&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;
เข้าไป &lt;a href=&quot;https://business.line.me/en/&quot; target=&quot;_blank&quot;&gt;Line Business Center&lt;/a&gt; แล้วเข้า Messaging API Developer&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmeQjjsOOwZhNdA1Jjr-WruGKz6LpFrH2HeJqciLYhGwev7bC390k1HKf7dI_0yGDJb_Xj1KgQuKo_bAJ3xC3JByRxseyDBYZD-H8tZX72JOyvhDPVrGCB8-cTrdZ1hysjY3HFfbnJJx8/s1600/Screenshot+from+2016-10-09+21%253A26%253A09.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmeQjjsOOwZhNdA1Jjr-WruGKz6LpFrH2HeJqciLYhGwev7bC390k1HKf7dI_0yGDJb_Xj1KgQuKo_bAJ3xC3JByRxseyDBYZD-H8tZX72JOyvhDPVrGCB8-cTrdZ1hysjY3HFfbnJJx8/s1600/Screenshot+from+2016-10-09+21%253A26%253A09.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
ตั้งค่า Webhook URL ให้ชี้มายัง Domain Server ของเรา (Line บังคับให้ใช้ได้เฉพาะ https ที่ &amp;nbsp;valid เท่านั้น) ดังภาพ&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvLOC7Yy-Xr3CjJ5-Rwg_kKhRXxFSYAIeKLtXaye5Kqv_rAfa1JV7PYhG-Lcj9eOrw1tVpZuOZuURgyKzXb2uUT6l17E22PFwaPQV4AMCqJ7AmC_jnBIklJOFtXVI2AreYKAil3n_OhZk/s1600/Screenshot+from+2016-10-09+20%253A06%253A56.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;244&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvLOC7Yy-Xr3CjJ5-Rwg_kKhRXxFSYAIeKLtXaye5Kqv_rAfa1JV7PYhG-Lcj9eOrw1tVpZuOZuURgyKzXb2uUT6l17E22PFwaPQV4AMCqJ7AmC_jnBIklJOFtXVI2AreYKAil3n_OhZk/s640/Screenshot+from+2016-10-09+20%253A06%253A56.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
แล้ว Copy Channel Access Token มาใส่ในไฟล์ config.yml&lt;br /&gt;
&lt;br /&gt;
แล้ว Install&amp;nbsp;Dependencies ของ code php ให้เรียบร้อย ผ่านทาง &lt;a href=&quot;https://getcomposer.org/&quot; target=&quot;_blank&quot;&gt;composer&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
composer install&lt;/blockquote&gt;
&lt;br /&gt;
ลองไปคุยกับ bot ใน Line &amp;nbsp;bot ก็จะตอบข้อความเราตาม model ที่ train ไว้ดังภาพ&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR7AlySJctdwrLHbNAu4d1DyHvqX2jmmTFtAXJflJ20jQtNvA4XPlZVk8LSJB1RHA-tpJ2lxq31WjciqdXpdw1rECwJJEsnunsVvrN1NzcdVWZ2-rpe3XiKcU4tIQENBA584EwjhM7Zcs/s1600/Screenshot_20161009-205108.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR7AlySJctdwrLHbNAu4d1DyHvqX2jmmTFtAXJflJ20jQtNvA4XPlZVk8LSJB1RHA-tpJ2lxq31WjciqdXpdw1rECwJJEsnunsVvrN1NzcdVWZ2-rpe3XiKcU4tIQENBA584EwjhM7Zcs/s640/Screenshot_20161009-205108.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
ปล.&lt;br /&gt;
- กราบขออภัยที่ไม่ได้ลงลึกในรายละเอียดการติดตั้งในส่วนต่างๆ&lt;br /&gt;
- คราวหน้าเราจะมาสร้าง model ของ chatbot จาก ข้อความที่เราเคย chat กับเพื่อนใน facebook กัน&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/3509976109490072992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2016/10/line-bot.html#comment-form' title='57 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/3509976109490072992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/3509976109490072992'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2016/10/line-bot.html' title='ทดลองสร้าง Line @ Bot แบบมั่วๆ'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCJp7qe010IA_x5ifyk2DolQ2NJtrRXknslHzMIy1BKG4qId7mt6FBJIUVE9xgE0srAlUOmNfuq_7SMAoYSRyeRPzkG2L671nW395_57xbT5oIDJlaYNIroOxdFQXeVxW7Tzhflxv-Fsg/s72-c/bottrial-fig1.png" height="72" width="72"/><thr:total>57</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-2334537361261297351</id><published>2016-09-18T00:18:00.000+07:00</published><updated>2016-09-18T00:23:52.417+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="bot"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="ragnarok"/><title type='text'>วิธีเปิดบอท Rag บนโทรศัพท์ Android</title><content type='html'>วันนี้จะมาเล่าวิธีการเปิดบอท Rag ในโทรศัพท์นะครับ&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;สิ่งที่ต้องการ&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
- เครื่อง Android ที่ลง Linux เรียบร้อย วิธีลงดูได้จากบทความนี้ (&lt;a href=&quot;https://kittinanx.blogspot.com/2016/09/install-linux-android.html&quot; target=&quot;_blank&quot;&gt;วิธีการรัน Linux บนโทรศัพท์ Android&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
- Bot Openkore ที่สามารถรันได้ตามปกติบนคอมอยู่แล้ว ในที่นี้ผมใช้ของท่าน Unstle (&lt;a href=&quot;https://github.com/DunstleOS/openkore/&quot; target=&quot;_blank&quot;&gt;https://github.com/DunstleOS/openkore/&lt;/a&gt;) และใช้ Key ที่ท่าน&amp;nbsp;unknown-item แจกใน&amp;nbsp;&lt;a href=&quot;https://github.com/OpenKore/openkore/issues/221&quot; target=&quot;_blank&quot;&gt;tRO Mega Thread&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- &lt;a href=&quot;https://filezilla-project.org/&quot; target=&quot;_blank&quot;&gt;Firezilla&lt;/a&gt; (เอาไว้อัพไฟล์ Bot เข้า Android) หรือถ้าใครใช้ git เป็นก็อัพผ่าน git ก็ได้สะดวกดี&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;การติดตั้ง&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
ในที่นี้เลือกใช้ Linux Distribution : &amp;nbsp;Debian Jessie นะครับ&lt;br /&gt;
&lt;br /&gt;
เปิดโปรแกรม JuiceSSH (ที่ได้ลงไว้ในบทความ &lt;a href=&quot;https://kittinanx.blogspot.com/2016/09/install-linux-android.html&quot; target=&quot;_blank&quot;&gt;วิธีการรัน Linux บนโทรศัพท์ Android&lt;/a&gt;) และเชื่อมต่อให้เรียบร้อย&lt;br /&gt;
&lt;br /&gt;
เริ่มการติดตั้ง Package ที่ Bot ต้องการ โดยสามารถดูได้จาก&amp;nbsp;&lt;a href=&quot;http://openkore.com/index.php/How_to_run_OpenKore&quot; target=&quot;_blank&quot;&gt;http://openkore.com/index.php/How_to_run_OpenKore&lt;/a&gt; โดยผมได้รวบรวมเป็นคำสั่งเดียวดังนี้&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sudo apt-get install g++ libreadline6-dev libcurl4-gnutls-dev unzip make libncurses5-dev&amp;nbsp;-y&lt;/blockquote&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZmK8HFfHqVYtqHOL4UMXzCiJSQHT-BPQa6YSkfi0QYz4Z-Med7d0mx4OL-nCUsKmJMfsB43kNlg-1c3IrWXG2Jkp2YES9PVmzXaZ-OoYpTaBVEWLRDTCq_n-wQ-JMzjdZJZCrwCjmtWY/s1600/Screenshot_20160917-203202.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZmK8HFfHqVYtqHOL4UMXzCiJSQHT-BPQa6YSkfi0QYz4Z-Med7d0mx4OL-nCUsKmJMfsB43kNlg-1c3IrWXG2Jkp2YES9PVmzXaZ-OoYpTaBVEWLRDTCq_n-wQ-JMzjdZJZCrwCjmtWY/s640/Screenshot_20160917-203202.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;ภาพเมื่อลง Package ที่ Bot ต้องการเสร็จ&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
เมื่อติดตั้งเสร็จแล้วเราจะอัพ Bot เข้า Android&lt;br /&gt;
&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;
&lt;u&gt;&lt;b&gt;วิธีการอัพไฟล์ด้วย Filezilla&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
เราจะใช้ Filezilla อัพ Bot เข้า Android โดยไปที่ File &amp;gt; Site Manager กด New Site แล้วตั้งชื่อไรก็ได้ในที่นี้ตั้งว่า Android&lt;br /&gt;
&lt;br /&gt;
Host: ใส่ ip ของ Android&lt;br /&gt;
Port: 22&lt;br /&gt;
Protocol: SFTP&lt;br /&gt;
Logon Type: Normal&lt;br /&gt;
Username: android&lt;br /&gt;
Password: changeme (หรือตามที่ท่านตั้งไว้)&lt;br /&gt;
&lt;br /&gt;
เมื่อใส่ข้อมูลเรียบร้อยแล้วกด Connect แล้วจะมี dialog เด้งขึ้นมา ให้ติ๊ก Always trust this host แล้วกด OK แล้วให้เข้า Edit &amp;gt; Setting &amp;gt; Transfers ใส่ Maximum simultaneous transers เป็น 10 เพื่อเพิ่มความเร็วในการอัพโหลด&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIlvrPyGo4kfeL0H7aOYH1e96Rl0abtHYaqsBi-6wh0xAVtkzSb1x7c9OFETaTtN3AUcrywue9Q9q0oIk37oS6kqqdq9QeLN32G2peoOSU4F156jds8PDyMYVVd9XA3IRV4QFMa3aoUhU/s1600/Screenshot-Site+Manager.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIlvrPyGo4kfeL0H7aOYH1e96Rl0abtHYaqsBi-6wh0xAVtkzSb1x7c9OFETaTtN3AUcrywue9Q9q0oIk37oS6kqqdq9QeLN32G2peoOSU4F156jds8PDyMYVVd9XA3IRV4QFMa3aoUhU/s1600/Screenshot-Site+Manager.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL3dx4jb8AcEpLIo_T7Qn0QVhLujJedKDDoBbc81PBMD2TsPY_EOGqEjIIk9riLKFZ4TevsR3oNgLtqIKGoHuLQjIOvkoRy2OhuYeOCuLBHufjjsE1scgXpZAJJZcKMnrT0EkdISeYCKI/s1600/Screenshot-Unknown+host+key.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL3dx4jb8AcEpLIo_T7Qn0QVhLujJedKDDoBbc81PBMD2TsPY_EOGqEjIIk9riLKFZ4TevsR3oNgLtqIKGoHuLQjIOvkoRy2OhuYeOCuLBHufjjsE1scgXpZAJJZcKMnrT0EkdISeYCKI/s1600/Screenshot-Unknown+host+key.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirFVgenGRP2xPiFvs7aW-39YvBMc4_l8Ihrsb2-5c9vmbxFFZ5vgXdDKrtkNMhbiEpfgremUksgXLCppenyeBAenjzeVPi07dMHHBiZtzcR8gxjOU6PosTlJNzsuqksQaIAZQf9M36eZw/s1600/Screenshot-Settings.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirFVgenGRP2xPiFvs7aW-39YvBMc4_l8Ihrsb2-5c9vmbxFFZ5vgXdDKrtkNMhbiEpfgremUksgXLCppenyeBAenjzeVPi07dMHHBiZtzcR8gxjOU6PosTlJNzsuqksQaIAZQf9M36eZw/s1600/Screenshot-Settings.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
เสร็จแล้วลาก Folder Bot ฝั่งซ้ายมือไปยังฝั่งขวามือดังภาพ&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhba1qjUl1BZ3VT0FBVsFHNLBfpltd1qTHuq6xeaXPrxesFVklmacrHM9HcPAg4nQP41NoBSqcZkO3RoHgTMGWlZ_cjTJZaPjL6-S_VajSRjduJU7zpYOp4ct-4-LTMKtfiPoniNsRAACM/s1600/Screenshot-Android+-+sftp%253A--android%2540192.168.0.104+-+FileZilla.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;552&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhba1qjUl1BZ3VT0FBVsFHNLBfpltd1qTHuq6xeaXPrxesFVklmacrHM9HcPAg4nQP41NoBSqcZkO3RoHgTMGWlZ_cjTJZaPjL6-S_VajSRjduJU7zpYOp4ct-4-LTMKtfiPoniNsRAACM/s640/Screenshot-Android+-+sftp%253A--android%2540192.168.0.104+-+FileZilla.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
เมื่ออัพไฟล์ Bot เสร็จแล้วให้กลับมาที่โทรศัพท์ เพื่อสั่งรันบอท&lt;br /&gt;
&lt;br /&gt;
ls -l &amp;nbsp;&amp;lt;&amp;lt;&amp;lt; ดู ไฟล์ใน Folder ที่อยู่ปัจจุบัน&lt;br /&gt;
cd opk-unstle &amp;nbsp;&amp;lt;&amp;lt;&amp;lt; เปลี่ยน Folder ไปยัง Bot ในที่นี้ชื่อ folder คือ opk-unstle&lt;br /&gt;
perl openkore.pl &amp;lt;&amp;lt;&amp;lt; รันบอท รันครั้งแรกบอทจะ compile code ก่อน ก็รอสักพัก&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmwZt1sFX_0KZsypyUAnzsuB3CWlH6xqGlJaYtUjkZB10kKzLmIQ_8WboZR27DuWEYpJ_Fjvnsaq9IfhSTJv3g5rL0JD0j0YbNkDKJeCsNIPPG7scRyM82QfkQR69frTOa3flyAEKYFRA/s1600/Screenshot_20160917-211806.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmwZt1sFX_0KZsypyUAnzsuB3CWlH6xqGlJaYtUjkZB10kKzLmIQ_8WboZR27DuWEYpJ_Fjvnsaq9IfhSTJv3g5rL0JD0j0YbNkDKJeCsNIPPG7scRyM82QfkQR69frTOa3flyAEKYFRA/s640/Screenshot_20160917-211806.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJM1LTMb0ARPk849a3r3jbRBbJPPt4hwAkbrJXbKM1ehhOWwvehp01rV_-d3Uf5Mu6sHy7wh4VNqVgiRnycR0_wGR1O9f-0X9NNP0AnosLjIPanhm4D64IJiIfcDjoFPa39gkgM9SSi9g/s1600/Screenshot_20160917-235914.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJM1LTMb0ARPk849a3r3jbRBbJPPt4hwAkbrJXbKM1ehhOWwvehp01rV_-d3Uf5Mu6sHy7wh4VNqVgiRnycR0_wGR1O9f-0X9NNP0AnosLjIPanhm4D64IJiIfcDjoFPa39gkgM9SSi9g/s640/Screenshot_20160917-235914.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;ภาพ Bot ขณะ Compile&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
เมื่อ Compile บอทเรียบร้อย Bot ก็จะทำงานแล้วดังภาพ&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUejEErFTvG7wfXl1pXQyW34IplYIWNE4iSC0BISI9HNLpkIhZFZaeU5NrZ6-_XDXZUvsFIT6QlScAos7165UUMVOuw9fmBYRiyjKOJM4K4Tnup6ErZ3OW6Cne6tBW9hazunV6KRAbAd4/s1600/Screenshot_20160918-000637.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUejEErFTvG7wfXl1pXQyW34IplYIWNE4iSC0BISI9HNLpkIhZFZaeU5NrZ6-_XDXZUvsFIT6QlScAos7165UUMVOuw9fmBYRiyjKOJM4K4Tnup6ErZ3OW6Cne6tBW9hazunV6KRAbAd4/s640/Screenshot_20160918-000637.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
เสร็จสิ้นการ Bot บน Android&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/2334537361261297351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2016/09/bot-ragnarok-android.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/2334537361261297351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/2334537361261297351'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2016/09/bot-ragnarok-android.html' title='วิธีเปิดบอท Rag บนโทรศัพท์ Android'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZmK8HFfHqVYtqHOL4UMXzCiJSQHT-BPQa6YSkfi0QYz4Z-Med7d0mx4OL-nCUsKmJMfsB43kNlg-1c3IrWXG2Jkp2YES9PVmzXaZ-OoYpTaBVEWLRDTCq_n-wQ-JMzjdZJZCrwCjmtWY/s72-c/Screenshot_20160917-203202.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-8471193173003343172</id><published>2016-09-17T13:20:00.002+07:00</published><updated>2016-09-17T13:21:25.038+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><title type='text'>วิธีการรัน Linux บนโทรศัพท์ Android</title><content type='html'>&lt;b&gt;&lt;u&gt;สิ่งที่ต้องมี&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
- โทรศัพท์ Android ที่ root แล้ว (ซึ่งแต่ละรุ่นวิธีการ root ไม่เหมือนกันต้องไปหาวิธีกันเอง)&lt;br /&gt;
&lt;br /&gt;
- พื้นที่เหลือในเครื่องสักประมาณ 4 GB &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;วิธีการติดตั้ง&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
- ติดตั้ง แอพ &lt;a href=&quot;https://play.google.com/store/apps/details?id=ru.meefik.linuxdeploy&quot; target=&quot;_blank&quot;&gt;Linux Deploy&lt;/a&gt; (&lt;a href=&quot;https://play.google.com/store/apps/details?id=ru.meefik.linuxdeploy&quot; target=&quot;_blank&quot;&gt;https://play.google.com/store/apps/details?id=ru.meefik.linuxdeploy&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
- ติดตั้ง แอพ &lt;a href=&quot;https://play.google.com/store/apps/details?id=ru.meefik.busybox&quot; target=&quot;_blank&quot;&gt;BusyBox&lt;/a&gt; (&lt;a href=&quot;https://play.google.com/store/apps/details?id=ru.meefik.busybox&quot; target=&quot;_blank&quot;&gt;https://play.google.com/store/apps/details?id=ru.meefik.busybox&lt;/a&gt;) ต้องเป็น BusyBox ตัวนี้นะ ตัวอื่นจะใช้ไม่ได้ครับ&lt;br /&gt;
&lt;br /&gt;
- ติดตั้ง แอพ &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.sonelli.juicessh&quot; target=&quot;_blank&quot;&gt;JuiceSSH&lt;/a&gt;&amp;nbsp;(&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.sonelli.juicessh&quot; target=&quot;_blank&quot;&gt;https://play.google.com/store/apps/details?id=com.sonelli.juicessh&lt;/a&gt;) ไว้สำหรับ Remote เข้า Linux&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;br /&gt;&lt;/u&gt;
&lt;b&gt;&lt;u&gt;หลังจากติดตั้งแอพด้านบนครบแล้ว&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ติดตั้ง BusyBox&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
- เปิดแอพ BusyBox กด Install แอพ BusyBox มันจะขอ สิทธิ์ root ก็ให้มันไป&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhu0zf4j3OLI1CXQGRvqHs8em1JYJ_oqSOmffQ-hf9Wu4L4yvAO0drbco6bReHy62B6_doC3x9_JtuFCT7D2d7h3JEiv_PkTpMX_hLgMXnOVCnn2YYN_hwS-4ehrvfcsYqsuIx1wD-0KE/s1600/Screenshot_20160917-111934.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhu0zf4j3OLI1CXQGRvqHs8em1JYJ_oqSOmffQ-hf9Wu4L4yvAO0drbco6bReHy62B6_doC3x9_JtuFCT7D2d7h3JEiv_PkTpMX_hLgMXnOVCnn2YYN_hwS-4ehrvfcsYqsuIx1wD-0KE/s640/Screenshot_20160917-111934.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ติดตั้ง Linux&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
- เปิดแอพ Linux Deploy แล้วกดตรงรูป Download ตามรูป&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- เลือก Distribution ที่ต้องการ ในที่นี้เลือกใช้ Debian ครับ Distribution suite ก็คือ version ของ Distribution นั้นๆ ผมเลือกใช้ Debian Jessie ส่วน Architecture ก็เลือกเป็น armhf ดังรูป&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_4WCsseeCx5kg1173V00yfTmXgpWR6IyUF9e0R6fZxkcCEC53D2vSOoqlwXuoyTtAmKwLkjKO2VjGBdLMMSFJw67PE8QPPdGo5cLsjnF38WVIzlQpH0G4zhREKzomjTWkRN-du2hCE28/s1600/Screenshot_20160917-112858.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_4WCsseeCx5kg1173V00yfTmXgpWR6IyUF9e0R6fZxkcCEC53D2vSOoqlwXuoyTtAmKwLkjKO2VjGBdLMMSFJw67PE8QPPdGo5cLsjnF38WVIzlQpH0G4zhREKzomjTWkRN-du2hCE28/s640/Screenshot_20160917-112858.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
- กด Install แล้วก็รอสักพักใหญ่ ตัวแอพมันจะไปโหลด Package ต่างๆมาลงให้ (รอนานมาก ขึ้นอยู่กับเน็ตและความเร็วเครื่องแต่ละคน)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg72oM7NDINjTb-Rk21-gI8F23KjNJSY5y8c3Bob98B2IlM437XgfigdVhqAPvl3HYoSMF4ZZfOObyk5vnYdpEZwKSiwRqboG9rB2FfkLIrh7r0KbEad3-QkKeL7tunCkO-hN6q23Fp64A/s1600/Screenshot_20160917-112907.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg72oM7NDINjTb-Rk21-gI8F23KjNJSY5y8c3Bob98B2IlM437XgfigdVhqAPvl3HYoSMF4ZZfOObyk5vnYdpEZwKSiwRqboG9rB2FfkLIrh7r0KbEad3-QkKeL7tunCkO-hN6q23Fp64A/s640/Screenshot_20160917-112907.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
- ถ้าเกิด Error แล้วลงไม่สำเร็จต้องลงใหม่ โดยการกด STOP แล้วเข้ารูป Download ไปกด Install ใหม่ครับ&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivh0qjMUxoXlv-DskAbkJWfxpQxhyphenhyphen_S2bQByvKKqsfCcjuau90VDJWkasIROm6NCFtX-U3Oe3OEBK6ump_0d0s6gBUU2Sbsav7JCmQZviRpgJShlExinZJ1QVq6ihmV66dOnhBW2X2q6Q/s1600/Screenshot_20160917-113707.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivh0qjMUxoXlv-DskAbkJWfxpQxhyphenhyphen_S2bQByvKKqsfCcjuau90VDJWkasIROm6NCFtX-U3Oe3OEBK6ump_0d0s6gBUU2Sbsav7JCmQZviRpgJShlExinZJ1QVq6ihmV66dOnhBW2X2q6Q/s640/Screenshot_20160917-113707.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;ภาพโหลดไฟล์ไม่สำเร็จ ต้องกดลงใหม่&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
- เมื่อติดตั้งเสร็จแล้วให้กด START เป็นอันเสร็จสิ้นแล้ว เราก็สามารถ remote ไปยังตัว Linux ที่เราลงได้ผ่านทาง SSH หรือ VNC ครับ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;การ Remote SSH บนมือถือ&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
ผมใช้แอพ JuiceSSH ในการเชื่อมต่อครับ วิธีการใช้งาน JuiceSSH ก็ง่ายมากแค่เซต host, user, password มาเริ่มกันเลย&lt;br /&gt;
&lt;br /&gt;
- เปิดแอพ JuiceSSH เข้า Connections แล้วกด ปุ่ม + ขวาล่าง&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfWPgUAze6HEvLXbdC_FF3XZDDDr9ad-Vz6ff171gBVfnFO08LgKuAfebT7zSG2NBgVQMnKGf0eHV-8xTIWDWMTVX8jMNCX4-kfpTgD8GBJPq1DhokHl5EOhurUyAxXiKI2agOchlLi3I/s1600/Screenshot_20160917-114500.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfWPgUAze6HEvLXbdC_FF3XZDDDr9ad-Vz6ff171gBVfnFO08LgKuAfebT7zSG2NBgVQMnKGf0eHV-8xTIWDWMTVX8jMNCX4-kfpTgD8GBJPq1DhokHl5EOhurUyAxXiKI2agOchlLi3I/s640/Screenshot_20160917-114500.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Nickname : แล้วแต่เราจะตั้ง&lt;br /&gt;
Type: SSH&lt;br /&gt;
Address: localhost&lt;br /&gt;
Identity: จิ้มเข้าไปกด New&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Nickname: แล้วแต่เราจะตั้ง&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Username: android&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Password: changeme&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeVfjvY9PCmt9cc8nGfThyphenhyphenXQxsdTsExhNkZMjvEi1jPDlK7xZ5aMejFrsGIf2getVfSlo8s3FLhSrzAkZNQcQ9qvoem36waNz4DMnGpOqxl1m1yUrKXWUHzpHdY4_nnE51-UrptWfeyco/s1600/Screenshot_20160917-114714.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeVfjvY9PCmt9cc8nGfThyphenhyphenXQxsdTsExhNkZMjvEi1jPDlK7xZ5aMejFrsGIf2getVfSlo8s3FLhSrzAkZNQcQ9qvoem36waNz4DMnGpOqxl1m1yUrKXWUHzpHdY4_nnE51-UrptWfeyco/s640/Screenshot_20160917-114714.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;เมื่อจิ้มไปที่ Identity เลือก New&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8H2Jgy0UpHghZOZwYGCYC_7oSJeouP9NDYes-5MSqaaJsplFNgfuFKpfWPF2bn3ZvCPQXL7ed-OrwBDncotstvUcx6oIrLj3CsQrRA_-8kr2EZ9tPG_Y680I4-BJg3smN0KlObVCnW0c/s1600/Screenshot_20160917-114858.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8H2Jgy0UpHghZOZwYGCYC_7oSJeouP9NDYes-5MSqaaJsplFNgfuFKpfWPF2bn3ZvCPQXL7ed-OrwBDncotstvUcx6oIrLj3CsQrRA_-8kr2EZ9tPG_Y680I4-BJg3smN0KlObVCnW0c/s640/Screenshot_20160917-114858.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;ภาพเซต Identity เสร็จ (ในภาพพิมพ์ localhost ผิดนะ)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
กด เครื่องหมายถูกขวาบนเพื่อเซฟ แล้วก็สามารถ Connect เข้าไปยัง Linux ที่เราลงไว้ได้เลยดังภาพ&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWoj7JmrhVdSp8ntH0XiAm9mLmrTzZZAbgNNXDbd7R1H5i-7t0bfa5hB4hVsyZOGEz9kspWYuAwUYe2zoP4jATIuCLFpZyTOROop8PauPKnkiNuw4w8xkzuNYJlQ-Tedel0PVuWazDAaQ/s1600/Screenshot_20160917-131514.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWoj7JmrhVdSp8ntH0XiAm9mLmrTzZZAbgNNXDbd7R1H5i-7t0bfa5hB4hVsyZOGEz9kspWYuAwUYe2zoP4jATIuCLFpZyTOROop8PauPKnkiNuw4w8xkzuNYJlQ-Tedel0PVuWazDAaQ/s640/Screenshot_20160917-131514.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/8471193173003343172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2016/09/install-linux-android.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/8471193173003343172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/8471193173003343172'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2016/09/install-linux-android.html' title='วิธีการรัน Linux บนโทรศัพท์ Android'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhu0zf4j3OLI1CXQGRvqHs8em1JYJ_oqSOmffQ-hf9Wu4L4yvAO0drbco6bReHy62B6_doC3x9_JtuFCT7D2d7h3JEiv_PkTpMX_hLgMXnOVCnn2YYN_hwS-4ehrvfcsYqsuIx1wD-0KE/s72-c/Screenshot_20160917-111934.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-4597329375599877720</id><published>2016-04-03T16:07:00.000+07:00</published><updated>2016-05-10T05:56:25.932+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="asus k401ub"/><category scheme="http://www.blogger.com/atom/ns#" term="audio"/><category scheme="http://www.blogger.com/atom/ns#" term="bumblebee"/><category scheme="http://www.blogger.com/atom/ns#" term="k401ub"/><category scheme="http://www.blogger.com/atom/ns#" term="touchpad"/><title type='text'>How to install Ubuntu 14.04 on Asus K401UB</title><content type='html'>I lost a few days for install Ubuntu 14.04 on my new laptop &lt;a href=&quot;https://www.asus.com/Notebooks/K401UB/&quot; target=&quot;_blank&quot;&gt;Asus K401UB&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.asus.com/Notebooks/K401UB/&quot; target=&quot;_blank&quot;&gt;Asus K401UB&lt;/a&gt; have Hard drive 1 TB and 24 GB SSD, So i install partition like this&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
/dev/sda is 1 TB Hard drive&lt;br /&gt;
/dev/sdb is 24 GB SSD&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXdcqQNU0bd4NB7D6XzAxtpzSQ1B5aVcIPbINt9sd2VXc1ktMdIBW7jqSh5oDrvYo-Jdg60-aJQyegmYQLNPeN-E48ByBQwIo17aSlOtfTnxqo3_cSXXczZN5gBza4tLEXB9p2Koaan5s/s1600/Screenshot-root%2540tun-laptop%253A+-tmp.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;456&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXdcqQNU0bd4NB7D6XzAxtpzSQ1B5aVcIPbINt9sd2VXc1ktMdIBW7jqSh5oDrvYo-Jdg60-aJQyegmYQLNPeN-E48ByBQwIo17aSlOtfTnxqo3_cSXXczZN5gBza4tLEXB9p2Koaan5s/s640/Screenshot-root%2540tun-laptop%253A+-tmp.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
mount /boot on SSD (256MB)&lt;br /&gt;
mount / on SSD (Remain SSD)&lt;br /&gt;
mount /home on 1TB Hard drive (200 GB)&lt;br /&gt;
mount /var on 1TB Hard drive (50GB)&lt;/blockquote&gt;
&lt;br /&gt;
After i installed Ubuntu 14.04 i got many problem out of the box&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
Problem:&lt;/h4&gt;
- Audio not work&lt;br /&gt;
- Touchpad not work&lt;br /&gt;
- Wifi not work (Network Manager show locked by hardware lock)&lt;br /&gt;
- Some of Function Key not work (Airplane mode, Brightness, Touchpad Enable/Disable) not work&lt;br /&gt;
- Hybridge Video Graphic Card (Intel &amp;amp; Geforce 940M)&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
&lt;/h4&gt;
&lt;h4&gt;
Solve the problem:&lt;/h4&gt;
&lt;div&gt;
&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;
&lt;u&gt;Audio &amp;amp; Touchpad&amp;nbsp;&lt;/u&gt;&lt;/div&gt;
Audio &amp;amp; Touchpad solved by install newer kernel &amp;nbsp;(&lt;a href=&quot;https://wiki.ubuntu.com/Kernel/LTSEnablementStack&quot; target=&quot;_blank&quot;&gt;https://wiki.ubuntu.com/Kernel/LTSEnablementStack&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sudo apt-get install --install-recommends linux-generic-lts-wily xserver-xorg-core-lts-wily xserver-xorg-lts-wily xserver-xorg-video-all-lts-wily xserver-xorg-input-all-lts-wily libwayland-egl1-mesa-lts-wily&amp;nbsp;&lt;/blockquote&gt;
&lt;br /&gt;
After install &amp;amp; reboot Audio and Touchpad work fine.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Wifi&lt;/u&gt;&lt;br /&gt;
I found 2 choice to solved wifi work.&lt;br /&gt;
&lt;br /&gt;
1. fn + F1 to sleep laptop, when laptop wake up wifi will work&lt;br /&gt;
2. Uninstall Network Manager and install wicd instead&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sudo apt-get install wicd-gtk&lt;br /&gt;
sudo apt-get purge&amp;nbsp;network-manager-gnome network-manager&lt;/blockquote&gt;
&lt;br /&gt;
reboot your laptop, wifi will work&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Function key&lt;/u&gt;&lt;br /&gt;
i can&#39;t solve this problem but i found shell script to disable and enable Touchpad&lt;br /&gt;
&lt;br /&gt;
- Find Device id from command (in this case device is ELAN1000:00 04F3:0401)&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
xinput list&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigSfNcOt0ROUfhjmgMIH3bgOj8GE1jVGS7R1JLSZm8lrUNsdm4Fy3XhnR6ntP_EKBfDHQSw-21cKExS_tXYpktHx5ktf1xF2wbzdnD0sri2tIer20rBA2tfJhZ0pLbUTBKBHGmFr0e3fU/s1600/Screenshot-tun%2540tun-laptop%253A+%257E-1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;456&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigSfNcOt0ROUfhjmgMIH3bgOj8GE1jVGS7R1JLSZm8lrUNsdm4Fy3XhnR6ntP_EKBfDHQSw-21cKExS_tXYpktHx5ktf1xF2wbzdnD0sri2tIer20rBA2tfJhZ0pLbUTBKBHGmFr0e3fU/s640/Screenshot-tun%2540tun-laptop%253A+%257E-1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
id = 12&lt;br /&gt;
&lt;br /&gt;
Download this shell script&lt;br /&gt;
&lt;br /&gt;
&lt;code data-gist-id=&quot;43df9e5ed3afd8f616df22dddea8a0e7&quot;&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Replace id with your Touchpad id in this case is &amp;nbsp;12, this script will toggle your Touchpad Enable/Disable&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Video Graphic&lt;/u&gt;&lt;br /&gt;
&lt;u&gt;&lt;br /&gt;&lt;/u&gt;
I try many solution to solve VGA swiching but nothing work. I decided to use Bumblebee to run Geforce 940M when i need it&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://wiki.ubuntu.com/Bumblebee&quot; target=&quot;_blank&quot;&gt;https://wiki.ubuntu.com/Bumblebee&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Update 2016-04-06&lt;br /&gt;
fn key + brighness down/up (F5 &amp;amp; F6) will work when edit config grub&lt;br /&gt;
&lt;br /&gt;
Edit this file&amp;nbsp;/etc/default/grub&lt;br /&gt;
&lt;br /&gt;
Find this line:&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&quot;quiet splash&quot;&lt;br /&gt;
&lt;br /&gt;
Change to&lt;br /&gt;
&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&quot;quiet splash pcie_aspm=force acpi_osi=&quot;&lt;br /&gt;
&lt;br /&gt;
Ref:&lt;br /&gt;
&lt;a href=&quot;https://wiki.ubuntu.com/Kernel/LTSEnablementStack&quot; target=&quot;_blank&quot;&gt;https://wiki.ubuntu.com/Kernel/LTSEnablementStack&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://ubuntuforums.org/showthread.php?t=2141992&quot; target=&quot;_blank&quot;&gt;http://ubuntuforums.org/showthread.php?t=2141992&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://askubuntu.com/&quot; target=&quot;_blank&quot;&gt;http://askubuntu.com/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://wiki.ubuntu.com/Bumblebee&quot; target=&quot;_blank&quot;&gt;https://wiki.ubuntu.com/Bumblebee&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PS. I&#39;m using Mate Desktop for Desktop Environment.&lt;br /&gt;
&lt;br /&gt;
Hopefully this blog can help you.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/4597329375599877720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2016/04/how-to-install-ubuntu-1404-on-asus-k401u.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/4597329375599877720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/4597329375599877720'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2016/04/how-to-install-ubuntu-1404-on-asus-k401u.html' title='How to install Ubuntu 14.04 on Asus K401UB'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXdcqQNU0bd4NB7D6XzAxtpzSQ1B5aVcIPbINt9sd2VXc1ktMdIBW7jqSh5oDrvYo-Jdg60-aJQyegmYQLNPeN-E48ByBQwIo17aSlOtfTnxqo3_cSXXczZN5gBza4tLEXB9p2Koaan5s/s72-c/Screenshot-root%2540tun-laptop%253A+-tmp.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-8156507167305732840</id><published>2016-04-03T13:33:00.000+07:00</published><updated>2016-04-03T13:33:19.760+07:00</updated><title type='text'>How to compile aircrack Ubuntu 14.04</title><content type='html'>&lt;h3&gt;
Install Dependencies&lt;/h3&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;br /&gt;
sudo apt-get install build-essential libssl-dev libnl-3-dev libnl-genl-3-dev dpkg-dev g++ g++-4.8 libc-dev-bin libc6-dev libstdc++-4.8-dev zlib1g-dev debian-keyring g++-multilib g++-4.8-multilib gcc-4.8-doc libstdc++6-4.8-dbg glibc-doc libstdc++-4.8-doc libalgorithm-merge-perl libssl-doc libalgorithm-diff-xs-perl&lt;/blockquote&gt;
&lt;h3&gt;
&lt;br /&gt;Download and compile&lt;/h3&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
cd /tmp&lt;br /&gt;
wget http://download.aircrack-ng.org/aircrack-ng-1.2-rc4.tar.gz&lt;br /&gt;
tar xfz aircrack-ng-1.2-rc4.tar.gz&lt;br /&gt;
cd&amp;nbsp;aircrack-ng-1.2-rc4/&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo&amp;nbsp;airodump-ng-oui-update&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCi_6DUknPJrCk8voaESVxeIDxFcdJyAYQwKU7K3CBVweRLEoza5dsP4JvR2CftieKfXNh85z9mMzZ4zFynHUA64XguJtmO5HcoG9sHZkYVgAGWfscRBl84Lbfq5mmtrMGdHPkZ4wSvac/s1600/Screenshot-tun%2540tun-laptop%253A+%257E.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCi_6DUknPJrCk8voaESVxeIDxFcdJyAYQwKU7K3CBVweRLEoza5dsP4JvR2CftieKfXNh85z9mMzZ4zFynHUA64XguJtmO5HcoG9sHZkYVgAGWfscRBl84Lbfq5mmtrMGdHPkZ4wSvac/s1600/Screenshot-tun%2540tun-laptop%253A+%257E.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/8156507167305732840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2016/04/how-to-compile-aircrack-ubuntu-1404.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/8156507167305732840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/8156507167305732840'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2016/04/how-to-compile-aircrack-ubuntu-1404.html' title='How to compile aircrack Ubuntu 14.04'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCi_6DUknPJrCk8voaESVxeIDxFcdJyAYQwKU7K3CBVweRLEoza5dsP4JvR2CftieKfXNh85z9mMzZ4zFynHUA64XguJtmO5HcoG9sHZkYVgAGWfscRBl84Lbfq5mmtrMGdHPkZ4wSvac/s72-c/Screenshot-tun%2540tun-laptop%253A+%257E.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-6407870155957000713</id><published>2016-03-12T19:57:00.000+07:00</published><updated>2016-03-12T19:57:02.753+07:00</updated><title type='text'>Install Raspbian packages directly from Ubuntu with chroot to Raspbian file system (on SD card)</title><content type='html'>update or install package directly from ubuntu on raspbian sd card&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sudo apt-get install qemu proot&lt;br /&gt;sudo proot -q qemu-arm -B -r /mnt/path/to/raspbian/&lt;/blockquote&gt;
&lt;br /&gt;
source :&amp;nbsp;&lt;a href=&quot;http://raspberrypi.stackexchange.com/questions/23675/install-raspbian-packages-directly-from-ubuntu-with-chroot-to-raspbian-file-syst&quot; target=&quot;_blank&quot;&gt;http://raspberrypi.stackexchange.com/questions/23675/install-raspbian-packages-directly-from-ubuntu-with-chroot-to-raspbian-file-syst&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/6407870155957000713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2016/03/install-raspbian-packages-directly-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/6407870155957000713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/6407870155957000713'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2016/03/install-raspbian-packages-directly-from.html' title='Install Raspbian packages directly from Ubuntu with chroot to Raspbian file system (on SD card)'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1028543390559339996.post-4597918196917365513</id><published>2016-03-06T18:36:00.002+07:00</published><updated>2016-03-06T18:38:40.460+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><title type='text'>[GIT] Specify git author and email</title><content type='html'>go to your project path&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;git config user.name &quot;YOUR_NAME_ON_PROJECT&quot;&lt;br /&gt;
git config user.email &quot;YOUR_EMAIL_ON_PROJECT&quot;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div&gt;
Done.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://kittinanx.blogspot.com/feeds/4597918196917365513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kittinanx.blogspot.com/2016/03/git-specify-git-author-and-email.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/4597918196917365513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1028543390559339996/posts/default/4597918196917365513'/><link rel='alternate' type='text/html' href='http://kittinanx.blogspot.com/2016/03/git-specify-git-author-and-email.html' title='[GIT] Specify git author and email'/><author><name>Tun</name><uri>http://www.blogger.com/profile/12567542792616045291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>