最近诸事不顺,却也理所应当。
晚间时段迷上写字和画画,大概是因为之前看《Cashback》印象太深刻,觉得这些是美好遗失前力挽狂澜的技艺。
除开纸上涂鸦,还用机器画了不少鸡零狗碎的东西:我想用 python 画点儿 T 恤图案,印出来送给大家,给大伙儿同时也给自己打打气。
最开始接触 Graphviz 是因为django-extensions项目用它来画 django model 的关系图。我们用它冒充 ER 图,拿去跟那些喜欢看文档但其实又不专业的官僚客户们交差。
Snakefood 更进一步,通过分析你的代码依赖,从而得出你代码的「复杂度」。
「复杂度」其实是用「代码行数」衡量码农工作效力被普遍吐槽之后,大公司发明出来折腾工程师的诸多 metrics 里面还算有点儿用的一个:至少你可以让要接手的人看看这项目大概是个什么规模,以及,大概要挠破几寸头皮才能看懂。
当然,Snakefood 这种基于文件依赖的复杂度分析其实不算特别靠谱,这可不是什么Cyclomatic complexity,更像是开飞机的时候边排查「事故征兆」边驾驶的辅助工具。作者自己是这么说的:
Producing pretty graphs is fun, but I found the most leverage of it when I try to make my code simpler, I generate the graph and inspect unexpected dependencies and try to refactor my code to simply the dependency graph as much as possible.
下面是本座心目中永远的”优雅 Python 代码第一名”Requests的分析结果:
再来看看Django的最新版分析结果:
结论
首先,本座挺喜欢 Snakefood 那种 Unix 范儿的:所有的命令都可以给其他命令来一管,比如:
sfood ./src | sfood-graph -p | dot -Tps | pstopdf -i -o ./1.pdf
其次,本座开始计划是给每个人生成一个他们自己写的模块的依赖图,印到衣服上让大家自己穿。但试了之前几个项目之后,Hmmmm…有的同学大概是不会愿意的吧…
最后,T 恤计划也没这么就打住:后来又发现了nodebox这种真正是拿来搞艺术的玩意儿,于是要生成一点儿敢往自己胸口放的东西变得方便多了,过两天如果公司没有倒闭,就把东西放出来让大家看看。