@Lenciel

How complex your python project is?

最近诸事不顺,却也理所应当。

晚间时段迷上写字和画画,大概是因为之前看《Cashback》印象太深刻,觉得这些是美好遗失前力挽狂澜的技艺。

除开纸上涂鸦,还用机器画了不少鸡零狗碎的东西:我想用 python 画点儿 T 恤图案,印出来送给大家,给大伙儿同时也给自己打打气。

一开始看中了基于GraphvizSnakefood

最开始接触 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.

Martin Blais

下面是本座心目中永远的”优雅 Python 代码第一名”Requests的分析结果:

requests dependencies

再来看看Django的最新版分析结果:

django dependencies

下面是本座最近撸完的一个项目,印到衣服上感觉还好吧: yawp dependencies

结论

首先,本座挺喜欢 Snakefood 那种 Unix 范儿的:所有的命令都可以给其他命令来一管,比如:

    sfood ./src | sfood-graph -p | dot -Tps | pstopdf -i -o ./1.pdf

其次,本座开始计划是给每个人生成一个他们自己写的模块的依赖图,印到衣服上让大家自己穿。但试了之前几个项目之后,Hmmmm…有的同学大概是不会愿意的吧…

最后,T 恤计划也没这么就打住:后来又发现了nodebox这种真正是拿来搞艺术的玩意儿,于是要生成一点儿敢往自己胸口放的东西变得方便多了,过两天如果公司没有倒闭,就把东西放出来让大家看看。

偶然事件

Don't touch me

葛明走了之后,我们去火葬场送他。

他在关好门窗的卧室里点燃了一盆木炭,静悄悄走掉了。

最先发现他的是跟他住一起的他母亲。她说,一圈木炭排在火盆里,大头向上,小头向下,整整齐齐。另外,他还专门喝了安眠药,所以没有一般烧炭者因为气促造成的痉挛表情。

这就是他的风格,做什么都计划详实,控制精准,旁人既无法预知,更无法阻挡。

「他不但表情很安详,而且碳氧血红蛋白让他全身都变成了樱桃红色,看起来就像刚出生那天一样。」

「阿姨,你……」,我听到他妈妈这样说的时候有些不知道该怎么接话。

「别怕,我没疯」,她抹了一把眼泪,「只不过阿姨我退休之前是个法医。」

那天的确有很多眼泪,大家说的最多是,这太突然。

但我觉得不奇怪。的确,葛明是我们中间最幽默的人。不过,活到我这把年纪,已经明白那些让别人发笑的人,不过是把这技能当成保护自己内心世界的硬壳而已。和大多数动不动就要哭死在你面前的朋友相比,他们心门紧锁,难以真正亲近。

即便是像我们这样的关系,他也只说起过几次他的烦恼。

一次是他请我去他家吃饭,说想让我帮忙。

「我在找方便好用的热敷袋。要求很简单,一个人操作起来要很方便,什么部位用起来都很方便,什么时候想用热起来要很方便,还有,不要太丑」。

「最后一个要求表明,你是要送人吧?」

他只是笑,带我去看书房里面满屋子奇形怪状的物件。

「别人都说淘宝上什么都有得卖,但是我买回来试了好多,都没有特别满意的。」

我看了看,基本都还是进口货。

「如果说有热敷袋里的战斗机,那你这里也已经是一个军事机场了,所以,感觉帮不上什么忙了。」

「我已经大概决定哪几个比较好了,我是要你帮忙把我不要的带走几个。」

后来我听说,葛明给我们这帮人每人送了几个热敷袋。我们现在也不知道,他满意的那些究竟和我们手上的这些有什么不一样。

我最后一次见到他,是在商场碰巧遇见他在挑榨汁机。他拿着说明书,对导购小姐说:

「你看,上面写着:使用后立即清洁,就容易清洁。」

「是的,先生。」

「然后后面几页,它又写着:榨汁后应立即饮用。如果汁液在空气中暴露一段时间,就会变味并失去营养价值。」

「是的,先生。」

「那我每次榨完汁,究竟应该立即去清洗,还是应该立即去饮用果汁呢?」

他问完这个问题,我和导购小姐都笑了。