Wakatime – 現在幾點了,你在做什么呢
前面提到了一個用來QS自己的工具Clarify。這次介紹一個專門給程序員用的工具。
大家都知道一萬小時定律,但我究竟寫java寫了多久了呢?WakaTime知道。估計很多人都知道RescueTime,我也是用RescueTime來記錄我的工作時間。但它無法記錄更具體的行為(也許實際也做了),比如我寫了多久javascript,多久objective-C。Waka就可以啦,因為它提供了幾個主要的IDE的插件,只需要安裝對應的插件,Waka就能自動記錄你在IDE里的行為。
WakaTime
Waka的基本設計和rescuetime類似。每個人注冊完將獲取一個key,裝一個客戶端,把key輸進去(登陸是同一個道理),然后它就把本地的所有行為帶個key扔給服務器來統計,一段時間之后給你個報表。不過Waka做的真的很精准,精確到每一個文件用了多少秒,每一種語言用了多少時間。


據說Waka還能知道你在每個branch用了多久,這還真是一個量化程序員的好辦法。如果有項目管理會用這種工具,相信也能更精准的把握開發進度,控制每一次開發嘗試的代價。
作為一個付費用戶狂人,登陸以后做的第一件事當然是搜Pricing~對比一下,付費用戶的功能就是無限期數據查看和原始數據導出。想了想…算了這次…還有團隊版本哦~
工作原理
Waka讓我覺得好玩的是他的plugin都是開源的,而且在他的開源項目列表里看到了一個叫wakatime的核心項目,python寫的,說是大家基本不需要直接使用的。基本可以確定是每個plugin都會去調用的核心庫。
從queue.py里看出所有的log都會被放到~/.wakatime.db下,那我們就去看看它存了啥。打開以后發現是空的…想必是Waka把log都傳走了以后就刪掉了本地的。於是,斷網,假裝寫代碼,再看看。

可以看到它記錄了我在哪個文件,什么時間,什么項目下,寫了什么語言,甚至在哪一行下都記錄下來了。如果這個數據結合版本管理,動態的展現出來,將會是多酷啊~
Anyway,由於我很想用koding這樣的WebIDE來工作,這樣就又沒發用Waka了,所以我需要知道發送記錄的具體API是什么。
這也叫API文檔
Wakatime是覺得代碼是最好的文檔么,居然在API文檔里沒有寫出這些log是如何被打進數據庫的…文檔里只有認證,獲得統計信息,和當前用戶信息的接口…
好吧,那我們直接去剛才那個python的repo里看吧。首先,這里面肯定有個代碼文件是包括http和wakatime.com的。那就搜吧,找到了init.py里一個函數叫send_action。很明顯這是用來發log的。
那先讓我們用curl模擬一下這個請求吧(看起來也不用太多域)。
$ curl -d '{"time":"1414688349","file":"/root","lines":"123","language":"javascript","is_write":"0","project":"manhattan"}' -H "User-Agent: space" -H "Content-Type: application/json" -H "Authorization: Basic ODMwOTliYjMtZGUwZS00NWFkLThhODItZmY4OWUwYzxxxxxxx" https://wakatime.com/api/v1/actions
{
"data": {
"id": "83682870-8306-4d12-b4a9-e0ba5f6cc295"
}
}
把Key base64一下,用date +%s拿一下當前的timestamp,就可以往Waka里扔數據啦。扔完了以后看看Dashboard~好啦,我們的曼哈頓項目出現啦~

如果你願意可以把它改成各種SDK(當然browser里會出現跨域的問題,所以你可以找個中間服務器做這事兒)。
在未來做點兒事兒
剛才看到了有個timestamp來表示時間,如果改成以后呢。估計waka不會蛋疼到做這個檢查吧…往2015年1月1日扔幾個action,等一小會兒,看manhattan項目的URL,改成https://wakatime.com/project/manhattan?start=2014-12-26&end=2015-1-3。就能看到我在未來寫javascript了~
擴展的waka
所以其實wakatime是一個特別基礎的action記錄和統計平台。如果它願意開源(其實這真的還不如一個logger分析平台…),完全可以搭建成一個QS小服務。比如晚上9點連續發出20分鍾加速度變化數據,然后就停止了10分鍾…
