2018 年度代碼報告

昨天網易雲音樂、B站等 APP 都放出了用戶的 2018 年度使用報告,在朋友圈掀起了一股年度報告的熱潮,我昨天在刷微博時看到」精分君」分享的《年度罵人報告》後,在被笑得眼淚都出來的同時,也在想我是否是也能夠出一個《年度代碼報告》呢?linux

轉載隨意,文章會持續修訂,請註明來源地址:https://zhenbianshu.github.io 。git

收集信息


得益於今年工做的穩定,全部本地代碼倉庫都老實地放在各個 jetBean 軟件目錄下,並且代碼版本控制工具上,工做用 Gitlab,業餘用 Github,都屬於 git 系列,全部的提交記錄均可以從 git log 裏查詢到,極大地方便了我收集信息。github

git log

使用 git log 命令能夠很方便地查看 git 的提交記錄,咱們在 git 目錄下,不帶任何參數使用 git log 命令時,會像日常使用 less 等命令時,進入一個內容瀏覽界面,在這裏,咱們能夠翻頁從前到後查看全部的 git 提交記錄。使用 > 內容重定向符能夠把 git log 重定向到指定的文件中,這時候咱們看到的信息以下:shell

commit ee66af2de2e0b11bb9c987969916fcf486c25f1e
Author: zhenbianshu <zhenbianshu@foxmail.com>
Date:   Thu Dec 27 19:32:28 2018 +0800

    fix site base url;

能夠看到,每一條提交記錄都被拆分紅了多行,並且若是 commit comment 有多行的話,日誌會更不規則。git log 提供了 --pretty 參數能夠幫助咱們提取指定字段,並將它們集成到同一行。編程

pretty 參數的用法爲 git log --pretty="FORMAT",如咱們經常使用的 printf 函數同樣,能夠在 FORMAT 中指定須要字段的佔位符,各個字段對應的佔位符均可以在 Git 官方文檔中查找到,這裏我只須要 %h(短 hash)、%cd(完整提交時間)、%s(提交時的 comment)less

此外,咱們還能夠經過 --after 各 --before 限制 git log 的時間範圍,在多人合做的項目中,還須要使用 --author限定提交的做者,最終完整的命令以下:編程語言

git log --after="2018-01-01" --before="2019-01-01" --author="zhenbianshu" --no-merges --pretty=format:"%h | %cd | %s" >> /tmp/git.logide

添加信息

經過 git log,我拿到像這樣的提交信息:81cb3a0bb | Fri Feb 9 10:25:12 2018 +0800 | fix bad smell;,因爲缺乏項目和語言信息,還須要完善一下這些提交信息。函數

首先,在上一步,我將各個項目的 git log 都保存在 項目.log 的文件裏了,一共有 20 個項目,意味着我去年向 20 個倉庫貢獻了代碼。 但這些倉庫使用的編程語言是無法自動識別的,我只好手動把這些倉庫都放到 編程語言 文件夾內,最終的文件目錄以下:工具

./C/rsync.log
./go/gotorch.log
./Java/story.log
./shell/video-simulation.log
...

接下來,再把各個文件的的路徑名填充到各行後整合到一個文件就好了。

這裏我使用了 find、 xargs 和 awk 命令,命令以下:

find . -name "*.log" | xargs -I {} awk -v file="{}" '{print file,$0 }' {} >> /tmp/raw.log

xargs 指定了 {} 做爲 find 查到文件的替代符,而後使用 awk 的 -v 選項將文件名做爲變量傳入每一行。

分析


shell 命令

分析其實挺簡單,就是把經常使用的 linux 命令揉合一下,無非是 awk、grep、sort、uniq、wc 等。

主要用到的命令選項是:

  • grep -e XX -e YY 搜索包含 XX 或包含 YY 的行;
  • grep -E 'regex' 按照正則搜索;
  • awk '{if(A){B}}' awk 裏的條件判斷語句。
  • sort -f '*' -kn 以 * 分隔每行後,按第 n 列排序;

分析命令

貼兩個所用的分析命令吧。

  • 提交代碼最多時段。

    我把一天的時間劃分爲四個時段: 0-6點凌晨、6-12點上午、12-18點午後、18-24點夜晚,對應命令是: awk '{if($6>="00:00:00" && $6<"06:00:00"){print "凌晨"};if($6>="06:00:00" && $6<"12:00:00"){print "上午"};if($6>="12:00:00" && $6<"18:00:00"){print "午後"};if($6>="18:00:00" && $6<="23:59:59"){print "夜晚"};}' git.log | sort | uniq -c 結果是:

    5 凌晨
     296 上午
     679 午後
     346 夜晚
  • 提交天數最多的項目。

    第二項是項目名,第五項是日期。 awk '{print $2,$5}' | sort | uniq | awk '{print $1}' | sort | uniq -c

圖片處理


數據分析出來以後,就是處理圖片了。

我是在網易雲音樂年度聽歌報告的基礎上改的(不用做商業,應該沒問題吧,有問題請私我),因此須要一個像 Photoshop 同樣的 P 圖工具,在 Mac 上推薦用 Pixelmator,功能上跟 Photoshop 沒什麼區別,但軟件大小才 100 多 M,比動轍 1G 多的 Photoshop 好多了。

軟件工具上,主要用了補丁、文字、選區、裁剪、取色、倒色、圖層等工具,以前有些 Ps 基礎,用起來很簡單。

成果


而後就是成果展現了,有些地方抹花了,湊合看吧~

        

小結


作些有意思的事,代碼寫起來更歡快了呢~

另外,shell 用着真舒服~

關於本文有什麼疑問能夠在下面留言交流,若是您以爲本文對您有幫助,歡迎關注個人 微博 或 GitHub 。您也能夠在個人 博客REPO 右上角點擊 Watch 並選擇 Releases only 項來 訂閱 個人博客,有新文章發佈會第一時間通知您。

相關文章
相關標籤/搜索