Author Archives: Desmond Wu

howto create a line bot

1.go to line website[1],to create account.
Selection_021

2.Click right corner icon in dashboard and then select add new provider.
Selection_023
Or click create new provider of provide list in dashboard.
Selection_022

3.And then step by step to fill in what they want,name..etc.
Selection_015
Double confirm your setting and create.
Selection_016

4.Create your channel and choice what type of your bot.
Selection_017

Fill in what they want,app name,category ..etc.
Selection_018

Confirm you know LINE’s policy.
Selection_019

5.Set your channel.
Selection_020

Issue a access token that will be used later.
Selection_014
And to set your app location of website.
Selection_012
6.Download the simple example from github [2].
Selection_024
Put source code into your website folder which can be lunch by apache,lighttpd or nginx..etc.
Selection_011
Then modify channl access token and secrect of source code.
Selection_025

7.It will work like following:
Selection_007

reference:
1.https://developers.line.biz/en/docs/messaging-api/building-bot/
2.https://github.com/line/line-bot-sdk-php/blob/master/line-bot-sdk-tiny/

[HowTo]avoid message “remote host identification has changed" happen when using ssh to connect new host.

When ssh new host ,it will show following message as default.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
..blahblah

Of course you can choice YES to accept new host’s fingerprint key.
But that’s really annoying when connect to new virtual machine.
Here is my way to avoid this situation.
(My OS is Ubuntu 16.04)
To modify /etc/ssh/ssh_config as following:
Host *
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials no
Host 192.168.0.*
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
Host 172.16.*.*
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null

This change mean for all host is need to check fingerprint ,but it’s not to check for 192 and 172.

Use python with opencv to add border to your image

要暸解opencv 怎麼去分辨圖像的輪廓辨識,可以找 S. Suzuki [1]的論文研究,在這篇研究他主要提供了兩種方法,用來對已經二值化的圖做拓撲分析。詳細內容google可以找到不少中文簡說,因此在這就不賣弄了.

目前在python上用opencv,已經算是非常強大,3行程式碼就可以完成灰階及二值化,以往使用c/c++不依賴任何library,往往都要刻個好幾天,而且官方也提供了相關手冊[2]供使用者使用.

在這個範例裡,就是簡單的對一張圖做加邊效果,利用findContours找出二值圖像的邊,再用drawContours畫上顏色,雖然是簡單的範例,但是這裡可以延伸許多應用,像是把QR 碼的邊掃出來,在丟到 ZXing (“Zebra Crossing")的library,就可以取得QR碼的資訊.

https://github.com/DesmondWu/pywork/blob/master/boder/image.py

Selection_470

或是把攝影機的每個frame截取下來,對每個frame去取框,就可以延伸出移動偵測等應用.
https://github.com/DesmondWu/pywork/blob/master/boder/cam.py

[1]S. Suzuki, ”Topological structural analysis of digitized binary images by border following,” Computer Vision, Graphics, and Image Processing,vol. 30, no. 1,1985., pp.32-46

[2]Mordvintsev, Alexander, and K. Abid. “Opencv-python tutorials documentation."Obtenido de https://media.readthedocs.org/pdf/opencv-python-tutroals/latest/opencv-python-tutroals.pdf (2014)

Mathematica 上實作SVD奇異值分解

SVD的相關原理可以參考SVD原理[3],而SVD具有以下形式:

A=UƩVT

其中 U 是 m x m 階,V 是 n x n 階,Ʃ 是 m x n 階。方陣 U 和 V 是實正交矩陣,Ʃ 是 (類) 對角矩陣,
UVƩ的相關算法可以參考[1][2].
雖然這類的程式,Mathematica等,都已經有相關函式可以使用,
也許在這資訊發達的年代,站在巨人的肩榜很重要,
但如果時間允許去撰寫這樣一個程式可以幫助暸解其原理,
也許會因此而有所收獲也不一定.

在這次試驗用了A.txt的矩陣,最後結果如下:
Selection_400
reference:
[1]http://web.mit.edu/be.400/www/SVD/Singular_Value_Decomposition.htm
[2]http://people.revoledu.com/kardi/tutorial/LinearAlgebra/SVD.html
[3]https://ccjou.wordpress.com/2009/09/01/%E5%A5%87%E7%95%B0%E5%80%BC%E5%88%86%E8%A7%A3-svd/

相關程式碼可以參考:
https://github.com/DesmondWu/mathematica/tree/master/svd

Mathematica PCB模擬

在電路設計,layout完後,要如何知道其layout的線徑是否合理,是否是機器可以達成,
其實可以使用Mathematica 或Matlab做模擬測試,

原理很簡單,概如下圖,將 layout 圖分割為 i*j 個小方塊,其中一個小方塊假設為 13×13 pixel,當計算其平均值小於假定值 0.25,則不做任何動作,大於則把 雷射beamspot 中心假定為26×26的 位置加到其值,使其 overlap 達約 50%.
image.VNME2Y

按照此一概念,可以撰寫程式如下流程圖運作
Selection_398
實際使用Mathematica跑完可以得到如下結果
Selection_397
相關程式碼可以參考:
https://github.com/DesmondWu/mathematica/tree/master/pcb

如何建立一個自己domain的Hackfoldr

大家都知道hackfolder的好用了,但是怎麼建立一個自已domain下呢?
就簡略用圖來紀綠下自已建立的過程囉~

首先,跑到 https://github.com/hackfoldr/hackfoldr-2.0-forkme 把這個專案fork到自已的repo下,
Selection_676

然後把branch切到gh-pages.
Selection_677

修改CNAME這隻檔案,這裡直接點入連結.
Selection_678

被點選的CNAME後會長這樣子,這時點右上角的鉛筆編輯.
Selection_679

填入自已想用的 domain如紅框處,記注要保持只有1行,
然後執行commit.
Selection_680

接著跑到https://ethercalc.org 建立一個自已的sheet,
如紅框ininder.
sheet的內容可以參考default的範例
Selection_682

然後在剛fork,github的專案gh-pages這個branch下,
修改裡面的index.html裡的第三行裡的值改成跟ethercalc建的一樣.
https://ethercalc.org/hackfolder_template
Selection_681

 

reference:https://github.com/hackfoldr/hackfoldr-2.0-forkme/blob/master/docs/Hosting%20your%20own%20Hackfoldr%202.0.md

How to add workspace on ubuntu 14.04

在換掉惱人的unity desktop environment 後,

因為工作的需求想要開超過default的4個workspace時,

發現在原來的系統列裡沒有了增加workspace的方法,

google後雖然有提到可以透過ccsm …etc去達成,

但是都沒有下面這個方法來的直覺,

其實方法很簡單,簡述如下:

1.在你右下角的workspace按下右鍵,就會出現preference.
Selection_635
2.點選preference後會出現修改參數的視窗,改成你想要的即可.
Selection_636

Use ubuntu to setup OpenCL/Hashcat on Lenovo X230

近期一再被翻上科技版面的大事之一,不外乎就是Dropbox 在2012年漏出來的密碼,
由於檔案目前變成人人輕手可得,也因此引來了國外許多人試著研究,
其中目前最吸引我注意的莫過於16年8月 Troy的這篇文"The Dropbox hack is real"[1],
文中他試著從網路上載到的檔案解回了他的密碼,並提醒大家可以到Have I been pwned (HIBP),
這個網站看看自已是否已經成為受害者,那麼現在就要稍微講解Troy做了什麼.

因為Hashcat是使用OpenCL來達到Crack的目的,在介紹Hashcat之前,必需先講解下OpenCL,
這邊借用[2]的連結來解釋:
基本上,程式透過 OpenCL API 取得 OpenCL 裝置(例如顯示晶片)的相關資料,並將要在裝置上執行的程式(使用 OpenCL 程式語言撰寫)編繹成適當的格式,在裝置上執行”,
也就是說OpenCL是個可以依賴GPU去執行程式的API,當然也可以用cpu/fpga就是,
這邊先有個認知他是透過GPU就好.

安裝OpenCL還蠻簡單的,網路上也有不少文章介紹[3],
在這篇文將用X230 搭Ubuntu 14.04 64bit做範例如下:

1.到Intel官網載OpenCL的套件,然後解壓.
selection_160

wget http://registrationcenter-download.intel.com/akdlm/irc_nas/9418/intel-opencl-2.0-2.0-54425.tar.gz
tar -xvzf intel-opencl-2.0-2.0-54425.tar.gz

selection_172

2.解壓完後進到opencl的目錄,解壓intel-opencl和intel-opencl-devel.

cd intel-opencl-2.0-2.0-54425
tar -xvf intel-opencl-r2.0-54425.x86_64.tar.xz
tar -xvf intel-opencl-devel-r2.0-54425.x86_64.tar.xz

3.然後把解壓後的etc,opt複制到根目錄下.

cp ./etc/ ./opt/ / -r

4.接著下載測試OpenCL的程式.

curl https://codeload.github.com/hpc12/tools/tar.gz/master | tar xvfz -

5.修改裡面的Makefile,把include和library指到Intel的opencl目錄
selection_173
6.使用make compile.
selection_174
7.然後就可以用print-device/cl-demo來測試.
selection_169
selection_171

基本上OpenCL能安裝成功,用tool-master裡的cl-demo可以跑出GOOD,
那麼在使用Hashcat應該不會有什麼大問題,因此這邊就不贅述hashcat的過程.

最後,假設你的密碼複雜度夠的情況下,也不用太擔心自己的密碼會被陌生人破解,
因為按照[1]的方法去暴力破解我自已的密碼,用x230至少也得跑10年.
selection_161

不過如果是想知道自已是那組密碼漏出去,你可以把自已所有密碼弄成字典檔來試,
那很快就可以看到成果.
selection_175

reference:
[1]https://www.troyhunt.com/the-dropbox-hack-is-real/
[2]http://www.kimicat.com/opencl-1/opencl-jiao-xue-yi
[3]https://wiki.tiker.net/OpenCLHowTo

Connect PN532 to Raspberry pi 3 (二) – mfoc

由於某次做捷運時不小心把悠遊卡弄丟,
偏偏上面綁了很多服務(圖書館借書證,門禁..etc),
因此藉著上次架好的環境,來複製這張卡片.
1.使用git下載mfoc的原始碼.
git clone https://github.com/nfc-tools/mfoc
selection_016
2.按照[1]的方法,生出configure及makefile.
autoreconf -vis && configure
selection_015
selection_017
3.在make install完後,就可以使用mfoc.
selection_018
4.接著放置要複製的卡片在天線上,然後輸入:
sudo mfoc -P 500 -O des_dk.dmp
selection_019
5.再來放置要空白的卡片在天線上,然後輸入:
sudo nfc-mfclassic w b des_dk,.dmp blank-chiness.dmp
selection_020

reference:
[1]https://firefart.at/post/how-to-crack-mifare-classic-cards/
[2]https://gist.github.com/alphazo/3303282

Versioning a Native C/C++ Binary with Visual Studio

在煩惱怎麼對程式做版本控管時,除了在程式加入version print的函式外,
如果是寫windows程式,這邊其實還有個方法,也就是加入資源檔,

1.在visual studio專案上加入資源.
selection_114
2.點選version.
selection_115
3.調整相關版本資訊.
selection_116
4.在build好的檔案按右鍵,查看內容就可以看到相對應資訊.
selection_117

[1]http://www.zachburlingame.com/2011/02/versioning-a-native-cc-binary-with-visual-studio/