重构blog
同事Tin前几天写了一篇非常棒的blog 《重构我的blog》 ,讲的是通过把树形结构的category分类转换成扁平结构的tag分类来更好地组织自己blog的内容,并方便外界订阅和查询。这篇文章给我了很多启示。联想到自己这段时间在使用blog时遇到的一些问题,我觉得是时候把自己管理blog的方式来重构一下了。
问题
既然是重构,那么肯定是要解决现实的问题。我在管理自己的blog的时候遇到的主要一些问题是:
- 本地编辑:我现在发布blog的方式是先在本地把内容写好,然后再通过Wordpress的在线编辑器进行简单的编辑,对一些比较细的效果用html直接编码,预览满意后就发布出去。不过,我一直很不习惯使用在线编辑工具,一方面是因为我是个狂热的vim/gvim用户,很难接受在线编辑工具的简陋和低效;另一方面,在线编辑受到的限制实在太多,稍一不慎就会session超时或者内容丢失,让人抓狂。因此,我希望能把编辑这一部拿到本地用vim/gvim来做。
- html转换:大家可以看到,我blog上面所用的格式并不复杂,基本上也就是加一些链接,分几个小节,或者引用一下代码等等。这些都可以用非常简单的html代码来搞定。但即使是简单,我也不太习惯每次写完以后都要手动地添加html代码。程序员的本能使我希望自己只用一种表达形式把blog写出来,然后让格式转换交给工具去做。
- 同步:我在本地有一个专门的目录用于存放blog,用git来管理。每一篇blog都先在本地以文本格式写好,然后再发布出去。在发布之后,我常常需要做一些细节上的修改,比如说改错别字等。通常我就随手在线修改了,而这就意味着在线的版本和我本地的版本不一致,本地再使用版本管制工具也就失去了意义。我要求blog的创建和后续修改都只在一处进行,其它位置的更新都应该通过同步来完成,这个过程一定要自动化。
- 集成:Cruise的工作背景让我要求把上面这些步骤都自动化起来,除了写blog要由人来亲自做以外,其它的工作都是重复性的,应该交给机器去做。最理想的情况下是在本地写好blog文本,然后运行一个rake/ant命令,在瞬间完成格式转换和远程同步。
解决办法
- 对于blog内容我肯定会用vim/gvim来编辑,现在的问题是我还需要一个能运行在Linux上的Wordpress客户端来编辑其它的blog metadata(如tag,分类等)。目前我google的结果是 drivel 。我会在最近花一些时间来试用并且把试用结果写出来。
- 对于html转换,我最初的想法是用xml来写blog,然后用xslt把xml转换成html。这个过程可以用rake来自动化。昨天我按这个方式试了试,感觉很不好。一方面是我要自己定义一套blog的schema,感觉很轮子;另一方面是我很讨厌写那些方括号,因为我不直接用html来写blog的原因之一就是想避免写那些没什么意义的方括号。所以就把这个方案放弃了。第二套方案是用texile来写blog,然后用现有的texile library来转换成html。这种技术现在已经非常成熟了,如果用Ruby的话就有Redcloth可用,两行代码就能搞定问题。再写几行rake代码就可以很方便地把整个过程集成起来,感觉非常爽。这两天我就要抽时间把它做出来。
- 同步方面,我初步的想法是学一下Wordpress的Xml-rpc API,然后写脚本来调用。这方面技术应该已经非常成熟了,所以我对实现这一点很有信心。
- 上面这几个方案都是用脚本来自动化的。这样我就很容易用rake把整个过程串起来,实现一键发布的目的。
总结
这是我第一次尝试用自己平时工作中的一些技术(比如写脚本)和思路(比如消除重复和进行自动化)来改善自己管理blog的方法。有一些东西也许看上去必要性不是很大,不过想一想这么做还是挺有意思的。而且更让我感兴趣的是延着这个思路下去还会有什么更有意思的事会发生。:)