脑洞大开,如何生成 2018 年度代码报告
昨天网易云音乐、B站等 APP 都放出了用户的 2018 年度使用报告,在朋友圈掀起了一股年度报告的热潮,我昨天在刷微博时看到”精分君”分享的《年度骂人报告》后,在被笑得眼泪都出来的同时,也在想我是不是也可以出一个《年度代码报告》呢?
收集信息
得益于今年工作的稳定,所有本地代码仓库都老实地放在各个 jetBean 软件目录下,而且代码版本控制工具上,工作用 Gitlab,业余用 Github,都属于 git 系列,所有的提交记录都可以从 git log 里查询到,极大地方便了我收集信息。
git log
使用 git log
命令可以很方便地查看 git 的提交记录,我们在 git 目录下,不带任何参数使用 git log 命令时,会像平常使用 less 等命令时,进入一个内容浏览界面,在这里,我们可以翻页从前到后查看所有的 git 提交记录。使用 >
内容重定向符可以把 git log 重定向到指定的文件中,这时候我们看到的信息如下:
commit ee66af2de2e0b11bb9c987969916fcf486c25f1e
Author: zhenbianshu <zhenbianshu@foxmail.com>
Date: Thu Dec 27 19:32:28 2018 +0800fix site base url;
可以看到,每一条提交记录都被拆分成了多行,而且如果 commit comment 有多行的话,日志会更不规则。git log 提供了 --pretty
参数可以帮助我们提取指定字段,并将它们集成到同一行。
pretty 参数的用法为 git log --pretty="FORMAT"
,如我们常用的 printf 函数一样,可以在 FORMAT 中指定需要字段的占位符,各个字段对应的占位符都可以在 Git 官方文档中查找到,这里我只需要 %h(短 hash)、%cd(完整提交时间)、%s(提交时的 comment)
。
此外,我们还可以通过 --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.log
添加信息
通过 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 用着真舒服~
脑洞大开,如何生成 2018 年度代码报告相关推荐
- 2018 年度代码报告
作者:枕边书 链接:https://zhenbianshu.github.io 最近,网易云音乐.B站等 APP 都放出了用户的 2018 年度使用报告,在朋友圈掀起了一股年度报告的热潮,我昨天在刷微 ...
- 程序员2018年度代码报告,句句戳心
编辑 | 小智 如果用一句话形容你的 2018,会是什么?如果用一句话预测你的 2019,又会是什么? 这一年里,你一共写下了 30 万行 CLI 命令, 你键盘上磨损最厉害的键位是 command. ...
- 我的2019年度代码报告
不知从何时起,年度报告总能在旧年将近.新年伊始的时候掀起朋友圈的热潮. 近日,网易云音乐.知乎等各大流行app也如期放出了其用户2019年的年度报告,我突发奇想,为何不为自己生成一个GitHub的年度 ...
- 解析《中国互联网软件测试行业2018年度调研报告》
之前收到了一份TesterHome的调查问卷邀请:2018年度中国测试行业问卷调研.最近问卷的汇总结果出来了,有2000+的测试童鞋参与了问卷调查. 从幸存者偏差角度来说,无论是覆盖率还是准确性,结果 ...
- 抖音2018年度数据报告
来源:字节跳动算数中心 抖音真正的做到了让用户爽. 最近,看到了抖音发布了<2018年度数据报告>,觉得有一定的参考价值,在此,分享给大家. 扫描下方二维码,及时获取更多互联网求职面经.j ...
- 《2018年度回顾报告》
Bit-Z发布2018年度回顾:全球成交额占有率5.41% 12月28日,Bit-Z发布2018年度回顾报告"Bit-Z这一年"(以下简称报告).报告显示,Bit-Z累计注册用户已 ...
- 飞猪2018年度旅行报告:小镇青年全球玩 没什么能够阻挡
中新网1月23日电 22日,阿里巴巴旗下旅行平台飞猪发布<2018年度旅行报告>,综合阿里经济体超6亿消费者的旅行及购物消费数据,呈现旅行新势力的崛起,解析中国旅行消费市场的新变化. 出境 ...
- 快!你的2018年GitHub报告还未领取
2018年,是我走入开源世界的一年,从悄无声息到积极参与,从免费获取到回馈社区 不记得敲击了多少次键盘,也不记得做出了多少次提交,只记得社区中彼此的问候与陪伴 你,还记得自己的2018么?感恩开源世界 ...
- 2018年度区块链安全报告
报告作者:区块律动 BlockBeats 本报告由区块链安全团队 PeckShield(派盾)全程提供数据与技术支持. 后台回复「PDF」,获得<2018 年度区块链安全报告>PDF 版本 ...
最新文章
- No service of type Factory available in ProjectScopeServices
- 面试之Hashtable和ConcurrentHashMap
- Java学习之do---while语句
- 执行多条SQL语句,执行数据库事务(可传入Sql参数)
- oracle 工单查so,查询工单列表
- Target runtime Apache Tomcat v6.0 is not defined.错误解决方法
- 白话科普系列——双十一,竟然是一场有“预谋”的DDoS攻击?
- yum 安装报Header V3 DSA signature: NOKEY 的错
- 获取虚拟账号列表失败啥意思_「图」Windows 10 Build 18963发布:可显GPU温度 支持重命名虚拟桌面...
- C++11并发之std::mutex
- js实现椭圆轨迹_javascript椭圆旋转相册实现代码
- 批量制作学校图书馆条码标签
- Introspective Distillation for Robust Question Answering 论文笔记
- 网易新闻详情页排版实现思路
- iptv增值服务_什么是IPTV,以及如何启动您自己的IPTV服务?
- Linux内核部件分析 设备驱动模型之driver ---mark 详细
- win7安装Cajviewer后,打开文档,目录注释乱码问题解决
- 一场 Chat 拥有自己的博客
- 游戏建模师要什么学历?
- axure生成的html不能用360浏览器打开