脑洞大开,如何生成 2018 年度代码报告

80 篇文章 0 订阅
  • 收集信息

  • 分析

  • 图片处理

  • 成果

  • 小结

网易云音乐、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 +0800

    fix 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 基础,用起来很简单。

成果

然后就是成果展示了,有些地方抹花了,凑合看吧~

在此我向大家推荐一个架构学习交流群。交流学习群号:993070439 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系,还能领取免费的学习资源。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
圆周率π的计算历程可以追溯到公元前20世纪,当时古埃及人就已经开始研究圆周率的值。随着时间的推移,人们不断尝试各种方法来计算π的值,包括使用几何方法、概率方法、级数方法和积分方法等。下面列举一些主要的计算π的方法: 1. 几何方法:最早期的计算π的方法就是几何方法,即通过将圆的周长与直径相除来计算π的值。这个方法的精度不高,但是很简单易行。 2. 概率方法:蒙特卡罗方法是一种概率方法,可以用来估计π的值。这个方法的原理是,将一个正方形内切一个圆,然后随机产生大量的点,统计落在圆内的点的数量,以此来估算π的值。 3. 级数方法:利用级数公式可以计算π的值,比如莱布尼兹级数、欧拉级数和马刁尔级数等。这些级数公式的精度较高,但是计算量较大。 4. 积分方法:用积分公式来计算π的值,比如阿贝尔-普朗克公式和矩形公式等。这些方法精度较高,但是计算量也比较大。 此外,还有一些脑洞大开的估计方法,比如: 1. 用切片面积估计π的值:将一个圆形的切片放在一个正方形内,然后统计切片内部的面积占正方形面积的比例,以此来估算π的值。 2. 用抛物线估计π的值:将一个抛物线放在一个正方形内,然后统计抛物线内部的面积占正方形面积的比例,以此来估算π的值。 3. 用牛顿迭代法估计π的值:利用牛顿迭代法可以求出π的值,但是迭代的次数较多,计算量很大。 总的来说,计算π的方法有很多种,每种方法都有其优缺点和适用范围,选择何种方法取决于计算的精度要求和计算的时间限制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值