4月份的时候基于nuclblog写过一个简单的博客系统,但是因为写得丑,代码耦合度高,又有很多硬编码。当然nuclblog本身就写得不怎么样,所以6月分的时候就用Lisp写了新版的ext-blog。支持自定义主题,套个马甲上去像模像样。
ext-blog是一个使用Common Lisp编写的博客系统。基于之前基于nuclblog修改的经验,新的ext-blog最大程度地将博客本身的逻辑与前台渲染分离开,并且添加了对主题 (theme)的支持。制作新的主题可以随便找一个WordPress的主题,然后将php代码翻译成Lisp代码即可。
ext-blog底层代码非常少,其实基本的博客系统功能本来就不多。大部分功能都是在6月初完成。那个时候公司每天加班,下班回去后还写点Lisp代码。后来越整越累,就实在没那完善它的心情,一拖就拖到7月底,功能都还不算完善(至少还得加个rss导出吧?)。
关于主题开发
ext-blog主要有几个页面派发,对每个页面都派发给具体的主题模块,让其完成渲染。编写一个主题本质上就是生成html页面。在Lisp的世界中有很多库可以生成html。ext-blog的主题也不限制你使用哪一个html生成库。目前我自己移植的2个WordPress主题,使用的都是google的closure-template的Lisp移植版本,即cl-closure-template。closure-template会从模板产生出 Lisp函数,这一点是比同类库中的html-template方便一点。当然,作为一个模板语言,内置判断、循环则是必须的。
关于网络框架
世界上很多流行的语言都有流行的Web开发框架。Lisp方面,我最开始选用的是Weblocks,我甚至用它为公司写了个简单的订餐系统(这让一个程序员颇有自豪感)。但终究觉得Weblocks太难用,复杂,但没有实际功能。我甚至阅读了它80%的源代码,但依然获取不到如何更好使用它的思想。然后恰好我看了些Rails例子,虽然我不懂Ruby语言(依然可以看到很多语言特性有Lisp的影子),但看懂例子还不是大问题。后来我决定自己写个 Web框架,因为其实我主要需要的就是一个url派发(route),就像Rails那样。我甚至为此做了些详细设计,结果后来不幸发现Lisp里已经有一个类似的框架了,这就是Restas。ext-blog基于Restas。
关于后台管理
后台管理这东西其实可要可不要。就算没有后台管理,也可以通过增强RPC来实现。但并不是每个人都是Lisper,相信想了解ext-blog的人很大一部分都是想学习Lisp的人。综合来看,拥有一个后台管理功能,提供更友好的操作界面,也是非常有必要的。但我确实不擅长做前台美化的工作。幸运地是我将渲染和逻辑分离开了,后台管理也算是主题的一种。然后,我抄了emlog博客系统的后台管理,如前所说,也就是把php代码(虽然我也不懂php)翻译成lisp代码。
关于开源
ext-blog是完全有理由发布到common-lisp.net上的,甚至还可以加入到quicklisp的库列表里。但前提是排除尽可能多的 bug,写一系列英文文档,以及最重要的,对其进行长期维护。不幸的是我目前没有这个时间和精力。所以,只能暂时在这里发布下了。
要围观效果的请移步至我的独立博客:http://codemacro.com。关于ext-blog更正式的介绍请移步此篇:http://codemacro.com/view/8。
ps,之前订阅我独立博客的TX麻烦更换下rss地址:http://codemacro.com/feed,而博客主页也最好换成http://codemacro.com。