2016年7月29日 星期五

小心AdBlock

標題不知道怎麼下比較好,這是昨天遇到的問題
是這樣的,我的chrome有安裝AdBlock ,要訪問我放在linode上的項目時,發現網頁上有一張 ad_medium_01.jpg 的圖沒有顯示,但是單獨打開那張圖又可以,檢查chrome的console發現報錯
net::ERR_BLOCKED_BY_CLIENT

查了這一篇
原來是AdBlock把那張圖認為是廣告圖擋掉了

解法:
點AdBlock圖示 => 點擊 不要在這個頁面使用







2016年7月27日 星期三

正規表示式的 lookahead 和 lookbehind

起因:
要將email除了前三和後三字元屏蔽
ex.
TestEmail@google.com => Tes**************com

打開sublime,把 TestEmail@google.com 貼上去,用Find功能開始嘗試正則去匹配,只要用正則選取到除了前三和後三中間的字後,再用 preg_replace( '/regex/u', '*', $email )  去取代掉

先選取第三個字以後的字串
先說結論:
(?<=\S{3}).
如何實現的?
http://stackoverflow.com/questions/2973436/regex-lookahead-lookbehind-and-atomic-groups
使用了 positive lookbehind
Look ahead positive (?=)
Find expression A where expression B follows:
找有B接在後面的A
A(?=B)
ex.
TestEmail@google.com  // 正則搜尋 g(?=o)

Look ahead negative (?!)
Find expression A where expression B does not follow:
找沒有B接在後面的A
A(?!B)
ex.
TestEmail@google.com // 正則搜尋 g(?!o)

Look behind positive (?<=)
Find expression A where expression B precedes:
找有B接在前面的A
(?<=B)A
ex.
TestEmail@google.com // 正則搜尋 (?<=g)o

Look behind negative (?<!)
Find expression A where expression B precedes:
找沒有B接在前面的A
(?<=B)A
ex.
TestEmail@google.com // 正則搜尋 (?<!g)o

所以 (?<=\S{3}). 是 找三個( {3} )非空字元( \S )接在前面的任意字元( . ),就會選到
TestEmail@google.com

選取倒數地三個字以前的字串
先說結論:
.(?=.*\S{3})

使用了 Look ahead positive 
.(?=.*\S{3}) 是 找有 三個( {3} )非空字元( \S ) 接在後面的任意字元

把兩個合起來
(?<=\S{3}).(?=.*\S{3})

所以PHP 這樣寫
preg_replace('/(?<=\S{3}).(?=.*\S{3})/u','*','TestEmail@Google.com')  // Tes**************com

/u 是什麼意思?
http://stackoverflow.com/questions/12896985/regex-modifier-u-in-javascript
The /u modifier in PHP is for unicode support. This modifier is not supported in JavaScript.
/u 修飾符( modifier )是PHP的 unicode支持,javascript不支持

vim搜尋時如何做到 Look ahead negative

找沒有B接在後面的A
A(?!B)
在vim中是不作用的
https://stackoverflow.com/questions/21148467/is-there-a-way-to-do-negative-lookahead-in-vim-regex
https://stackoverflow.com/questions/34548988/match-a-pattern-not-followed-by-a-sub-pattern-in-vim
/\vA(B)@!
\v -  啟動very magic 解析模式
@! -  inverts the atom (B), so that the pattern matches when B is absent
@! -  倒轉原子(B),所以將會匹配沒有B的情況

:h \@! 可直接看vim解釋








2016年7月14日 星期四

xz壓縮

亞馬遜機器上有一個12G的純文字檔,現在因為亞馬遜的流出是按量收費的
所以把它壓縮後再下載,以節省流量

推薦使用 xz,壓縮比例很高(tar 不壓縮)
$ mysqldump -Aa -u root -pxxx   | xz > xxx.sql.xz

https://blog.gtwang.org/linux/linux-why-are-tar-archive-formats-switching-to-xz-compression-to-replace-bzip2-and-what-about-gzip/
$ tar -J => xz壓縮,tar 要新版才有 -J
$ tar -j => bz2壓縮
$ tar -z => gz壓縮
壓縮單檔直接用 xz

# time xz xxx.txt -T 4 --lzma2
--lzma2 => lzma2的算法
-T => muti threads,用top看 有幾棵CPU,想加快壓縮時間吃滿的話就指定線程數量
real    35m0.091s
user    134m59.372s
sys     0m6.908s
花了35分, 12G-> 746MB


解壓縮,速度比壓縮快很多,不能指定-T,只有單線程
$ time xz -d xxx.txt.xz
real    2m40.746s
user    1m12.542s
sys     0m9.335s