• Generate sequence numbers at mac

    | /

    需求

    產生 12 碼數字有序前面會自動補零的數字。

    實驗

    沒 Format 的狀況

    MacOS 預設是顯示科學數字真的是不合理,另外也沒有補零。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ seq -w 000003000000 000003000010
    3.000000e+06
    3.000001e+06
    3.000002e+06
    3.000003e+06
    3.000004e+06
    3.000005e+06
    3.000006e+06
    3.000007e+06
    3.000008e+06
    3.000009e+06
    3.000010e+06

    Linux 上就沒這種問題,可以自動補零,也可以等寬。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ **seq -w 000003000000 000003000010
    000003000000
    000003000001
    000003000002
    000003000003
    000003000004
    000003000005
    000003000006
    000003000007
    000003000008
    000003000009
    000003000010**

    Mac 上需要加上 Formater 的幫忙

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ seq -f "%012.0f" -w  3000000 3000010
    000003000000
    000003000001
    000003000002
    000003000003
    000003000004
    000003000005
    000003000006
    000003000007
    000003000008
    000003000009
    000003000010

  • [Note] Turn on/off MAC WIFI by Command line

    | /

    我的 MACbook 如果同時開放 WIFI 和 Bluetooth 時,如果離開 Bluetooth touchpad 會自動斷線。但如果這時候靠近時, Bluetooth 會怎麼樣都連不上,包括開關 Bluetooth ,感覺 Bluetooth & WIFI 會相衝。

    這時只剩下一個解法,就是把 WIFI 關掉,這時 Bluetooth 會馬上連上我的 touchpad 。

    但因為螢幕闔起來了,沒有滑鼠 or touchpad ,只剩下外接鍵盤可用。上網找了一下,發現下面的指令可以直接關掉 WIFI。

    1
    2
    3
    4
    5
    6
    $ alias wifioff='networksetup -setairportpower airport off' 
    $ alias wifion='networksetup -setairportpower airport on'
    $ wifioff
    airport is not a Wi-Fi interface. Turning off the only airport interface found: en0
    $ wifion
    airport is not a Wi-Fi interface. Turning on the only airport interface found: en0

    Reference:

  • Enable HTTPBuilder debug message

    | /

    在用 groovy & cucumber 寫 API test 時,如果發生問題只會噴個 error 的 body 而已,這樣非常難 debug 。

    而且有一些參數是設在 http header 上,如果把每個 API 的 header 都印出來,要到處塞 debug logger。如果是 https 的話,也沒辦法使用 tcpdump 來看。 這時可以用下列方法簡單的把 logger 設定打開,就可以直接噴在營幕上了,這樣比較好 debug。

    1
    $ mvn -B integration-test -Dcucumber.options="--tags @test_only" \ -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog \ -Dorg.apache.commons.logging.simplelog.showdatetime=true \ -Dorg.apache.commons.logging.simplelog.log.org.apache.http=DEBUG

    還有其他的參數可以參考後附的文章內容。

    reference

  • Backup HipChat messages by API

    | /

    簡單的 Script 來備份 HipChat 該房間所有的 messages。 Why? 因為我沒有 Admin 權限! 所以只好這樣幹。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/bin/sh 
    HOST=https://{your hipchat host}
    TOKEN={token}
    ROOM={room}
    DATE={start time}
    NUMBER_OF_DAYS=410
    OUTPUT_DIR=/tmp/backup
    for i in `seq 1 $NUMBER_OF_DAYS` ;
    do
    let DATE+=86400
    let END=DATE+86400
    if [ ! -f /tmp/backup/$DATE ] ;
    then
    response=$(curl -v "$HOST/v2/room/$ROOM/history?date=$END&end-date=$DATE&reverse=true&max-results=1000&auth\_token=$TOKEN" --write-out %{http\_code} -o $OUTPUT\_DIR/$DATE) test $response -ne 200 && sleep 60;
    fi
    done

    Reference:

  • 淺談TOTP(Time-based One-time Password)

    | /

    TOTP 是利用 Application and services 上時間是一致,拿二邊共同的 key ,並且作一樣的 Hash 後,結果會產生一樣的 token,即可拿來作驗證,常被使用來作二次驗證(two-step verification)。 因為這部份的演算法是 RFC6238,所以可使用任何的 apps 來協助驗證,例如:Google Authenticator, Duo 之類的。

    怎麼實作的

    PHP 有人作好了: otphp 跟據 wikipedia 裡的 Implementation 章節中,有一段描述如何產生 token:

    1. Calculate C as the number of times TI has elapsed after T0.
    2. Compute the HMAC hash H with C as the message and K as the key (the HMAC algorithm is defined in the previous section, but also most cryptographical libraries support it). K should be passed as it is, C should be passed as a raw 64-bit unsigned integer.
    3. Take the least 4 significant bits of H and use it as an offset, O.
    4. Take 4 bytes from H starting at O bytes MSB, discard the most significant bit and store the rest as an (unsigned) 32-bit integer, I.
    5. The token is the lowest N digits of I in base 10. If the result has fewer digits than N, pad it with zeroes from the left.

    如果覺得太復雜,我挖了一下 otphp,應該在 otphp/src/OTP.php 裡面的 protected function generateOTP($input) 中有實作。

    使用

    安裝 composer require spomky-labs/otphp sample code:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php require __DIR__ . '/vendor/autoload.php'; 
    use OTPHP\TOTP;
    $totp = new TOTP( "whatup.tw@gmail.com" // The label (string) );
    $google_chart = $totp->getQrCodeUri();
    $otpCode = $totp->now();
    echo "<img src='{$google_chart}'><br/>";
    echo "Current OTP: " . $totp->now() . "<br/>\n";
    echo "Current Secret: " . $totp->getSecret() . "<br/>\n";
    echo "Verify OTP: " . $totp->verify($otpCode) . "<br/>\n";
    ?>

    到 browser 執行後會產生下面畫面:

    totp example result

    接下來你就拿出你的 Google Authenticator 來掃這個條碼,就可以新增一組新驗證碼。

    Google Authenticator 預設是 30s ,所以 30s 後,這個 OTP 產生出來的 token 應該會無法使用。如果你的 application 可以看到 secret 的話,應該會看到 app & service 的 secret 應該要一樣。 剩下的可以參考 document 說的很清楚。

    限制

    • 其實無法防止 phishing 網頁用假的頁面來騙你資料,在你輸入 token 後,壞人在 30s 之內也可以同時登入。
    • secret key 如果被人拿走,別人也同時擁有通過二次驗證的能力。
    • app & services 之間的時間一定不能差太多,所以手機不能調整時間(有人喜歡看時鐘快五分鐘)。
  • 2016 美濃彩繪大地-美濃花海

    | /

    每年過年期間,美濃在中正湖附近會出現大片的波斯菊花海。 我覺得跟荷蘭的鬱金香花海和北海道的薰衣草花海有幾分相似,一大片的花海遍佈中正湖。 再加上冬天是高雄的乾季,不太下雨且天氣也沒有北部這麼冷,是個適合全家出遊的好天氣。 在中正湖邊有一個大大的 LOVE ,搭配著客家花布的色彩和整片的波斯菊花海,有不少人在這跟 LOVE 一起合照。 不過現在花還開的不夠盛大,尚有一小部份還是還是綠色底色。 Love! 從這裡往湖的方向望去,可以看到大片的花海搭配著中正湖中的涼亭,而遠方背景中的山是人字山。 美濃中正湖旁 搭配著冬天的金色的夕陽和整片的花海,感覺和冰冷的北部完全不一樣,整個人都暖了起來。 夕陽下的美濃花海 各種顏色的波斯菊看起來非常的壯觀。 夕陽下的美濃花海 紅色的波斯菊配上紫色的稻草人別有一番風味。 夕陽下的美濃花海 好幾個月沒放風了,難得放風的潔終於可以小小的出門走走了。 難得放風的潔 過年期間如果不知道要往哪跑可以來美濃賞花海啊,適合全家大小一起來拍照!

  • Let's Encrypt 免費讓你的網站升級成 SSL ready

    | /

    Our Commitment to Protecting Your Information by Marissa Mayer, Yahoo CEO

    2013 年底時,美國方面爆出政府直接拉線路進 Yahoo 機房偷取使用者資料,所以在2014 年初時 Yahoo 宣布全面使用 SSL 連線來保護連線資料。但買一個 SSL 憑證實在是太貴了,如果一堆 domain 的話,更是負擔不起。所以在自已用的小站通常都用 self-sigh 來解決這個問題,只是使用時會一直被 Browser 靠腰說你的 SSL 是不合法的。 時至今日, Internet Security Research Group (ISRG) 組織為了網路安全,提供了免費的 SSL 申請服務 - Letsencrypt ,主要有下列幾項特色:

    • Free: Anyone who owns a domain name can use Let’s Encrypt to obtain a trusted certificate at zero cost.
    • Automatic: Software running on a web server can interact with Let’s Encrypt to painlessly obtain a certificate, securely configure it for use, and automatically take care of renewal.
    • Secure: Let’s Encrypt will serve as a platform for advancing TLS security best practices, both on the CA side and by helping site operators properly secure their servers.
    • Transparent: All certificates issued or revoked will be publicly recorded and available for anyone to inspect.
    • Open: The automatic issuance and renewal protocol will be published as an open standard that others can adopt.
    • Cooperative: Much like the underlying Internet protocols themselves, Let’s Encrypt is a joint effort to benefit the community, beyond the control of any one organization.

    這項服務在 2015/12/3 已經 Open Beta 了,任何人可以直接使用,不需申請。

    Install

    使用方法也很簡單到 github 下載 letsencrypt client 後,直接執行 ./letsencrypt-auto --help all 就可以看到所有的說明和使用方法。

    Renew

    預設的 SSL 90 天後就會過期,所以我就排個 cron 每天去跑一次。 這個 Script 會刮出所有 apache2 底下有開 443 port 的 servername 去 renew SSL。其中 --renew-by-default--agree-tos 開啟後 CLI 介面不會問東問西的選項。 [shell title="Sample renew script"] #!/bin/sh /usr/sbin/apachectl stop /home/whatup/letsencrypt/letsencrypt-auto certonly -a standalone --renew-by-default --agree-tos `grep -ih servername /etc/apache2/sites-enabled/*|grep 44 3 | sed 's/:443//g' | sed 's/ServerName/-d/g' ` --email whatup.tw@gmail.com /usr/sbin/apachectl start [/shell]

    Rate Limit

    流量限制如下,自已要多加注意,要不然會被檔掉。

    • Registrations per IP is 10 registrations per 3 hour window.
    • Certificates per name is 10 certificates per 59 days.
    • Pending registrations per account is 300 per 1 week.

    Result

    看到綠色合法的 SSL Icon 就是開心! Screen Shot 2015-12-03 at 9.47.04 AM Screen Shot 2015-12-07 at 10.24.43 AM Screen Shot 2015-12-07 at 10.25.09 AM Screen Shot 2015-12-07 at 10.25.30 AM Screen Shot 2015-12-07 at 10.24.56 AM

  • [澳洲] 會有人生跑馬燈的 Skydive

    | /

    2012 年底的時候,我從像玉山一樣高度的地方往下跳,眼前除了美景之外,就是人生跑馬燈。為了完成了我其中一項夢想,每秒差不多燒了台幣100元。 跳傘高度可以分成 9000/11000/14000 英呎三種高度,當然價格也不一樣。 老爹說既然要嘗試跳傘,而且這輩子還不知道有沒有辦法再跳一次,當然要直接挑戰最高的地方往下跳。 本來我也不想買 DVD 的,但是老爹說,你不買要怎麼證明你這輩子有跳過傘。我就腦波很弱的也跟著買下去,但事後證明,如果不買 DVD 真的會後悔,要不然現在怎麼跟朋友炫耀。 而到現在,在天空中的每一秒鐘都深印在腦海裡。

    跳傘影片

    [embed]https://www.youtube.com/watch?v=t2kIQaz4mNY&feature=autoshare[/embed]

    在空中漂浮的當下

    跳傘當下

    在夕陽的時候往下跳,夕陽、城市、海灘都好美

    在夕陽的時候跳下,夕陽、城市、海灘都好美

    由空中往下望,腳下的城市

    城市

  • [自助蜜月旅行] 德義的二周 - 德國租車心得

    在台灣開車時總是受限於時速限制沒辦法開超過120公里,但聽說過在德國的高速公路是沒有時速限制的。當我擁有自已的車時,總是充滿著夢想有一天我可以用力的把油門踩到底,一路衝到最高時速。 蜜月時,租車這個想法一提出來後,老婆則是完全沒意見(應該不是我沒跟她說我到底要開多快),但是因為預算的關系也沒辦法開到德國的國產車 bmw 或是 benz 。另外此次的旅程又在冬天,手排車的不確定感讓我很不安心。 於是我們就開始在網路上一段找租車公司的過程。 在 ptt 的板上看到 mspc 大大可以幫忙代定 sixt 租車公司 (德意志奔馳 : 專業代訂德國租車,自駕遊行程規劃) ,當時怕自已的英文不太行,且到時如果少訂一些我想要的保險或是雪胎之類的會很麻煩,最後我就請他協助代訂。 mspc 大大也很熱心的給了一些建議和提供行前提醒的文件,這部份實在是非常的貼心。 雖然我已經開了很多年的車,但對於國外開車也只有一次的經驗,而且是在日本。所以我這次鎖定的目標是要有雪胎,全險,和自排車。全險和雪胎是因為我們全家上次在日本開車時遇到大雪,一家人被困在景點。自排車則是因為太久沒有開手排車了,又怕馬路太滑,我開不動,所以只好選擇他聰明我傻瓜的方式。

    事前準備

    • 台灣駕照
    • 台灣駕照譯本 - 備妥駕照、身分證、二吋照片兩張、申請費去監理所換即可 台灣駕照譯本
    • 護照
    • 租車公司訂單 - 我是把他全部印出來到時直接拿給租車公司
    • Garmin GPS + 德國地圖 - 這部份我是從台灣帶過去的,介面比較習慣,而且我比較相信 Garmin 的品質

    領車

    不太確定是因為我們保全險的關系,把資料拿給對方。對方確認一下還車地點和租借時間後,給我一張紙條,上面寫著車號,並且指著方向告訴我們說車子停在路邊,叫我們自已去找。 我以為這是歐洲人的浪漫,交車前都不用預先檢查哪裡有刮傷或是有沒有其他的問題。 如果沒有自備 GPS 的話,可以請服務人員幫你從德文調整成英文模式,應該導航系統會比較好用一點。

    他就這樣隨便停在路邊,而且車子超髒的

    他就這樣隨便停在路邊

    可能是小的租車所,所內空間不夠吧

    他就這樣隨便停在路邊另一個角度

    開車

    其實高速公路也不是全部沒有時速限制,通常要進入到市區前會有速限。所以只要照規定來即可,車子不要亂停,車不要開太快,遵守交通規則,其他的跟台灣沒有什麼差別。 德國人開車都很小心,即使沒有車子,速限是 60km ,所有人也是只開 60 km 。 我車子除了飯店有附免費的停車場之外,其他的全部都停在付費停車場裡。 停車場通常是預先繳費,然後將單子放在你的前玻璃上,就不會有被開單的危險。請記得一定要準備好零錢再下車,大部份好像都不吃鈔票。

    停在outlet 外面

    停在outlet 外面

    這應該是我這輩子最高時速了,旁邊還伴隨著老婆的叫聲XD

    這應該是我這輩子最高時速了

    還車

    找到還車地點後,把車子開進去,然後把鑰匙交給工作人員,還車的工作就結束了。沒人當面跟你檢查車況,也不會有人多說一句話。 不過我是把車子的前前後後都用相機拍過一輪,怕遇到什麼狀況時,還有照片可以自保。

    車子還車時就這樣隨便停

    車子還車時就這樣隨便停 過了幾個小時後,會收到一封標題為 Rücknahme FORD C-MAX 的信,是告訴你車子已經還了。而且把車子的所有狀況都列出來。 其中有幾個地方有藍點的就是有損傷的部份,不過這部份我回頭我的照片,發現車子太髒我也看不出來是否真的有問題。 不過也許是因為保全險的關系,最後也沒有被收費。

    車況文件

    車況文件 幾天後就會收到帳單。所以總共花費是 207歐 + 30 歐折價券,共 237 歐元。

    最後花費文件

    最後花費

    感想

    爽!第一次開到 184km ,只可惜沒有衝到 200km 的時速,因為 184km 車身就有點抖了。德國開車真的很方便和安全,冬天時可以前往比較冷門的地點,也不怕沒有大眾運輸工具,也不用在等車。安全方面,德國人都很守規矩,不會亂超車,也不會有人佔住超車道,這部份跟台灣比起來實在是好太多了。 如果有下次去德國的機會,我還是會想自駕遊德國!

  • [日本關西採買之旅] Day 0 國內線的商務艙?

    | /

    這次因為老婆懷孕所以取消了上次搶到超便宜的泰國曼谷威航機票,所以只好臨時計畫來大阪來消耗我的員工旅遊。但太晚買票,好像只有出發前不到一個月才開始買票,又卡在熱門的端午假期,完全訂不到機票和飯店。最後體恤老婆懷著大肚肚還要跟我出國,就買了(高貴)不貴的國泰航空的商務艙。但回程時機票還有經濟艙,還好老婆大人說沒關係,坐一次就好了,讓我不用花二倍的錢買來回機票。

    宅宅第一次不用跟人在那排隊直接 check in ,行李重量也可以掛到 30KG ,可惜的是我們去程就空箱子過去啊啊啊,為什麼不是回來是商務艙呢

    第一次不用跟人排隊直接 check in

    宅宅第一次進貴賓室,裡面有吃有喝還有休息的地方

    還送進入一次的貴賓室,對不起,我們是鄉巴老,沒來過這裡

    孕婦食量很強大,才下午三點多肚子就餓了,所以孕婦又點了一碗免費的牛肉麵填肚子

    孕婦食量很強大,才下午三點多,又可以吃一碗牛肉麵了

    也是第一次跟其他人走不同入口,而且一開放登機馬上就可以入場了,感覺身價上升百倍,臉上散放出金光

    也是第一次跟人走不同入口

    一上座就先問你要不要喝飲料,我點了一杯香檳,老婆點了一杯.....果汁,因為他除了這個其他什麼也不能喝

    一上座就先問你要不要喝飲料,我點了一杯香檳,老婆點了一杯.....水,因為他什麼也不能喝

    座位上有 USB 可以充電,但手機只放的下 Iphone 6 ,放不下我的 iphone 6 plus ,看來老舊一點的飛機沒思考到未來的人手機會跟臉一樣大

    有 USB 可以充電,但手機只放的下 Iphone 6 ,放不下我的 iphone 6 plus。

    飛機上的餐點,擺的滿好看的,但飛機餐不就哪樣嗎,份量小,且味道普通。(老婆說超難吃的)

    我的是雞肉 老婆的是牛肉

    最後用哈根大使來作個收尾,這大概是我在飛機上吃過最好吃的甜點了

    最後用哈根大使來作個收尾,還不錯的一餐 雖然位置有點小,飛日本但感覺好像在飛國內線的飛機大小和座位大小,不過至少有機票讓我到日本就好,而且老婆坐的舒服坐的滿意是最重要的。