loop_in_codes

低调做技术__欢迎移步我的独立博客 codemaro.com 微博 kevinlynx

用Lisp开发博客系统(WordPress马甲)

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


posted on 2011-08-05 16:43 Kevin Lynx 阅读(5242) 评论(4)  编辑 收藏 引用 所属分类: lisp

评论

# re: 用Lisp开发博客系统(WordPress马甲) 2011-08-06 00:01 饭中淹

good!  回复  更多评论   

# re: 用Lisp开发博客系统(WordPress马甲) 2011-08-06 09:37 kroody

不的不承认我受你影响 想尝试学习一下LISP这个古老而又高级的家伙  回复  更多评论   

# re: 用Lisp开发博客系统(WordPress马甲) 2011-08-08 16:14 他她女鞋

不错,学习一下。  回复  更多评论   

# re: 用Lisp开发博客系统(WordPress马甲) 2012-11-08 06:17 象道

很棒的程序!俺用racket写了个,模仿另一个用git做持久存贮的网志程序,直接序列化和反序列化结构数据,没用任何sql,支持perl正则表达查询。唯一不足的是响应线程经常退不掉,:-),暂时没法解决。  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理