这些天我在GitHub上玩什么?

其实很早就知道了GitHub,我看网站上的注册时间,竟然追溯到2010年的7月,那个时候,对Git很陌生,对GitHub更陌生,就知道是一个写代码的社区。连写代码,都可以弄个社区出来,实在是佩服老外的想象力。

随着Git的使用的深入,深深的喜欢上了这套版本控制系统,也明白了Git相对于SVN的一些优劣。并且日渐喜欢上了GitHub这个平台。简洁清新,现代化的设计风格,通俗移动的图表和功能,最后还有吉祥物。比起风格土气的Google Code,实在强大了太多。

终于,决定将我的项目都渐渐搬迁到GitHub上来。首选当然是我的各种WordPress插件了,这些WordPress插件,都写成于两三年前,其实早就疏于维护了,但是移动到了GitHub,我又有了一种冲动,去更新,去完善。

所以,我在GitHub这些天主要做的事情,就是在重写一款我维护的插件。Better Extended Live Archive,这个插件可是有些历史了,首创是2005年,而且是在别的插件的启发下,微创新而出的,当然不是我,见我前面的文章,我是08年才开始玩WordPress的,等我接触到这个插件的时候,其实原作者早就已经停止更新了。那时候WordPress又经历了几次重大的版本升级,涉及到了DB结构的变更,终于让这款插件彻底崩溃。

网上流传着各种修复办法,在我看来,根本不彻底或者不得要领。很多博客为了这个插件,竟然就憋着不升级,简直令人发指。我怎么可以容忍这个呢, 于是从官方网站下载了最后一个版本的源代码,发奋图强,将其所有无法执行通过的部分,都进行了修复,终于复活。那时候,应该是08、09年的事情了。然后我还把插件发到了官方网站上,可惜我发现,已经没人喜欢这个插件了,又或者,没宣传,根本没人会注意到这个插件。

这让我非常伤心,但是也很不甘心。因为我很欣赏这个插件,虽然代码写得一团糟,不论PHP还是JS写得都很糟糕,各种Warning和Notice,很不友好,常量满天飞,冗余,啰嗦等等,但是这个插件背后传递的思想是非常牛逼闪闪的。我硕士到了后期,主要学习的方向是信息检索,虽然我自认为很翔,但是我还是了解点皮毛的。

当我阅读分析了插件的全部源代码,我发现,这个插件根本就是做了一个小型的信息检索系统,从WordPress的所有文章中,根据指定的字段,创建了倒排索引,然后将倒排索引排序,来索引文章,形成了所谓的Live Archive,中文怎么说?实时归档?蛋疼的名字,其实就是Blog Index,叫这个来的好点。这种索引,从三个维度上,创建了博客文章的索引,极大方便了读者对博客的检索,博主自己看着也会有很好的成就感。

插件的主要问题是,使用tag为依据建立索引的时候,速度非常慢,大概性能瓶颈在500个tag左右,就会严重拖慢blog文章的发布速度。因为这个索引是动态更新的,每当博客文章变化时候,就会自动更新索引,平时直接读的是磁盘索引文件,所以这个东西本质上速度很快,但是当文章变更,就麻烦了。

我一直有个想法,就是彻底优化这个插件的tag部分和全部索引生成的SQL,事实上我也做了,维护了一段日子,索引建立部分,已经优化了很多了,从之前修复全部bug,到后来一次性能优化,至少减少了上百条的SQL调用。但是实质上,并没有提升太多的性能,因为我发现瓶颈还是tag的那部分,多个连表查询,怎么都快不起来的。

于是开发彻底停止了。我甚至写了一个专门建立倒排索引和正排索引的插件,叫wordpress-content-index,原因是当时想写个文章,讲述编写WordPress插件的时候如何使用数据表,需要一个实例,没有,怎么办,创建一个呗,正好想试试倒排索引和正排索引的问题,于是写了。但是写了个半吊子,最后文章好像也没写-_-#

所以说,有时候,人懒惰得出奇,没常性得出奇,又有时候,有些念想就是挥之不去。我总是为了一件事情,做另一件事情,最后原来要做什么就忘记了。

以上都是背景,绕回GitHub。我喜欢GitHub社区,所以我就想点亮个人页面上的提交图谱的所有绿色小方格,这算占有欲?还是洁癖?于是,我必须每天提交代码,我又不屑于写一个字母就提交的弄虚作假。为了点亮绿色小方格,我必须提交代码,为了写代码,我必须找点事情做,于是回归那个念想,接着动这个插件,但是没得动,因为代码太乱,太垃圾,看得痛苦,为了能更好地动代码,我就必须重构这个插件,我觉得点亮小绿灯很有意思,于是需要写篇文章,但是为了说明我到底干了什么,又不得不说一堆背景,你看人这个东西,是多么地蛋疼和奇妙啊~

扯远了。