分类目录归档:编程

pylucene使用的问题

    早就开始关注pylucene了,不过直到最近才真正开始用到。pylucene毕竟不是原生的python程序,使用起来多多少少还是有些不太顺的地方。
    pylucene使用gcj进行不同平台间的移植。windows平台还好,直接使用官方的pylucene编译版本就好。可是linux平台没怎么好了。官方有提供几个常用linux的编译版本,如果没有官方的编译版本那可就得自己费点心编译了。
    同样是gcj的问题。pylucene的线程必须由主线程或PyLucene.PythonThread、PyLucene.PythonThread的子线程创建,不然gcj无法对新建线程进行垃圾回收。本想在django中控制,pylucene。但django似乎为每个请求新开线程,在处理请求的时候无法创建pylucene线程。因此pylucene创建索引的过程只好单独做为一个程序跑了。
   

浅谈wiki的设计

    虽然网上现成的wiki一大票,不过对需要进行定制开发的时候这些wiki就未必适合了。由于只是想整个最基本的wiki功能,因此打算自己整一整。 也许是有些厌倦了java,也许是想更深入的体会一下脚本语言的魅力,我决定采用django来进行开发。而且使用django有个好处,支持python的虚拟主机比支持java的好找。
    虽然是重新开始整,但如果有现成的轮子当然是最好了。既然决定使用django,当然要到django的code目录去找找。diamanda,一个论坛+wiki的程序。功能很简单,但作为一个轮子还是一个不错的选择。wiki最大的特色就是版本控制,因此我对wiki的版本控制算法比较关心。看了一下版本控制部分,居然是每个版本都全部保存(我一直认为wiki应当是增量保存的)。这意味着即使是一个很小的改动也得重新保存一份。对于一篇很长的文章来说,冗余实在是大得惊人。想来也许是这个程序的问题,于是考虑去找些其他的wiki程序作为参考。除去django的项目,其他的python wiki项目也不错。反正算法什么的都可以直接用。(中途还down了个java的wiki,不过没耐心看)
    又去溜达了一圈,看中了moin,python里最知名的wiki项目之一。不熟悉moin的web处理模型,看得我似懂非懂。不过基本上可以确定,他也是每个版本保存一份。
    最后想想还是去看看mediawiki吧,世界上最大的wiki“基维”用的就是他。有些晕,这个也是使用全部保存的方式。想来“基维”有好几百w的数据,加上每条纪录都有多个版本,“基维”的数据库压力定是N大。不过到此我也不用去想搞啥增量算法了。众多wiki程序都是使用的全部保存模式,定是有些道理。增量算法即使有,也必定会有不少难点有待解决。
    下面看看mediawikiwiki的设计吧。
    mediawiki使用数据库来存储wiki数据。一张page信息表用于保存每个wiki页面的信息。可能是考虑到性能问题,真正的页面内容却没有保存在该表中,而是单独保存在text表中。表里的数据都是以blod方式保存,为什么这样做俺就不太清楚了,难道是效率更高?只有最新版本的数据才是需要索引的数据,因此单独出一张索引表,用来进行索引查询。文本内容在被索引前实现要进行一次过滤,过滤掉wiki标签等。
    由于加入了版本控制,数据库中数据表中的纪录数将是实际主题的好几倍。而且随着wiki内容的丰富和完善,数据库中纪录大小将迅速膨胀。数据库的压力不言而喻。
    为了减轻数据库的压力,有些wiki选用使用了更高效的办法,使用文件的形式存储wiki内容。其中moin就是这样做的。moin使用一定的规则将wiki纪录以文件的形式保存,并使用lupy(1)对文件进行索引,提供查询的支持。
    为了减少每个版本都全部保存一遍所带来的巨大冗余,不少wiki都支持分段编辑。即可以对每段进行单独的编辑,在保存的时候只保存做修改那部分的内容。

(1)lupy 一个lucene的python移植版。与pylucene使用gcj移植不同的是,lupy完全使用python对lucene改写。lupy的问题是支持lucene版本比较低,只支持到1.2。

JForum开发框架介绍

前言
    一直很懒,很少写些技术相关的东西。难得因为工作的需要有写些,帖上来吧。其实我对JForum也没太认真的研究过,所以如果里面有些什么不对的地方还请大家指出来。
 
JForum开发框架介绍
    JForum是著名的开源论坛,支持多达数十种的多国语言,其中包括简体中文(管理界面没有完全汉化)。JForum功能强大,界面美观,加上代码结构清晰,而且采用的是BSD授权,不必担心不必要的版权纠纷。可以说JForum是论坛二次开发的绝佳选择
    JForum采用的是自己的MVC框架,因此在初次接触的时候可能会有些不习惯,但在熟悉后,该框架还是很容易使用的。在这里只是对JForum的框架进行简单的介绍以利于利用JForum进行二次开发,具体的细节请参考JForum代码。
    JForum的MVC框架有些类似Struts。
    先看请求的url地址/bbs/jforum.page?module=recentTopics&action=topRep_Topics_thisDay。
    首先在在web.xml中配置过滤器,将所有以.page的请求交给net.jforum.JForum统一处理转发。请求在交给JForum后,JForum要获取传递过来的一些参数从而决定由哪个模块来具体处理请求。参数module,决定由哪个模块来处理。model的名字和具体class的对应关心在配置文件modulesMapping.properties里进行配置。当前操作由具体的哪个函数处理由action参数指定。action就是要执行的方法名,在无法找到指定处理方法时执行list方法。在处理完请求后,调用this.setTemplateName(TemplateKeys.SSOEXT_TOPREPMSGS_PERDAY);方法设置返回页面。其中页面和页面名称的对应关系在templatesMapping.properties中设定。
    再简单的介绍一下JForum新增功能的开发流程。新建一个Action继承Command。在配置文件中modulesMapping.properties中增加新建立Action的对应关系。实现Command中定义的list方法,完成在未指定action情况下的默认操作。在templatesMapping.properties中增加返回页面的对应关系,在类TemplateKeys里增加返回页面和templatesMapping.properties配置文件里的对应关系。利用this.setTemplateName(TemplateKeys.RECENT_LIST);设置返回页面。
    JForum默认采用的是FreeMarker作为表示层,但如果对FreeMarker不熟也可以采用jsp做为表示层的实现。

Delphi中的自动垃圾回收器

    在传统的开发语言中,分配的内存必须手动释放。但在对象多处引用的时候要判断具体该什么时候释放还真不是件容易的事情。更有甚者不少程序员只创建对象但根本就不进行释放
    听朋友说C++有自动垃圾回收的库,据说用起来还不错。也曾找过Delphi的自动垃圾回收器,未果。最近在找Delphi的容器类的时候看到decal的介绍中有谈到,decal是商业类库SDL的简化版本,去掉了自动垃圾回收等特性。
    今天去下了decal的帮助来看,里面提到垃圾自动垃圾回收是由Boehm来实现的。Boehm?上网搜索一下,找到了《API for Boehm Garbage Collector DLL》。在Delphi中使用自动垃圾回收。下回来看了一下,使用的就是HP的垃圾回收器(GCJ使用的就是这个垃圾回收器)。在Delphi中使用只是写了几个接口文件,调用DLL中的函数而已。
    看了一下里面带的DEMO,再用内存泄露检查工具测试了一下,似乎还挺有效的。使用起来也很简单,只要将GC放到单元引用的第一个就可以了。
    有把她用到了公司的软件里。虽然上次修正过一次,但还内存泄漏问题还是挺严重的。希望加上自动垃圾回收后能有些作用

全面转向Eclipse了

    很长的一段时间里我都是在用eclipse开发,然后再用jbuilder进行调试。原因很简单,eclipse的web开发套件我用的是WTP。WTP这东西有的地方实在是做的太差了。如果你想重头开始个web项目那还好,直接用WTP的向导生成个WEB工程就可以了。但如果是现有的项目,那就没这么方便了。WTP没有提供一个很方便的功能来对已有工程增加wtp的支持,你只能手写。
    以前进行过一次wtp的配置,很不幸,失败了。因此一直懒研究,照旧用JB调试程序。
    最近因为研究springside的原因又研究了一下wtp的配置。呵,发现挺简单的,直接新建一个wtp工程,然后将配置文件改改就可以了,配置文件里属性的含义也都还算清楚。真有些不明白当初怎么会配置不成功。
    在java构建中可以添加文件名过滤功能,WTP却似乎没有相关功能,web目录下的所有文件都被复制到发布目录。
    eclipse的校验真的很讨厌。在工程建好后老是要校验个半天。今天是让它校验了N多遍也没成功完成过一次校验,简直要将人被逼疯,最后将校验关闭后才顺利搞定。
     eclipse的升级也很是个问题。虽然可以在线升级,但在线升级的速度….,小点的插件倒没什么问题,如果插件稍大点那就不知要下后哪年哪月去。而且eclipse的插件在升级后,旧的插件还在,当然,一般eclipse会帮你自动设置为不启用,你只要在插件管理界面卸载就可以了。很不幸,不少插件不能被自动卸载,你得手动去删。
    ………………
    要发牢骚,还可以说一堆eclipse和eclipse插件的坏话。
    既然eclipse以及eclipse的免费插件有这么多的缺点那你为什么还要用?有人说玩开源玩的就是自虐,痛并快乐者。自由免费的代价是,你似乎永远也拥有不了(虽然eclipse也挺商业的,而且已经做的很不错了。)使用商业软件的舒适与便捷。商业软件如果有了什么问题你可以去找厂商,但是免费的东西就没有这么好说话了。既然用免费的东西那就全用免费的吧,慢慢的习惯受虐,不然还真不如去用那些商业软件。反正都要用D版。
    开源?开源首先是种商业模式。这两天一直在想这个问题。也许哪天有兴趣来写写吧。

在jbuilder中集成vim和explore

    昨天说到jbuilder的外部工具,本来想将jbuilder中集成vim和explore的方法贴一下,只可惜机器上没安jbuilder,现在来贴一下吧。
    主菜单Tools->Configure External Tools…
    打开外部工具管理窗口。然后要做的就是add外部工具了。
    Title:外部工具添加后显示在jbuilder菜单上的名称。
    Program:要运行的程序。
    Paremeters:外部工具的运行参数。
   
    对于vim的配置,标题就去取gvim吧。程序,当然就直接填写入vim的完整路径了。下面就是参数了。对参数的设定,jbuilder提供了不少环境变量。这里我们需要的是当前文件的文件名($FilePath)。
    要集成资源管理器,在程序栏目填写上explorer,参数当然就选当前文件的路径了($FileDir)。

Jbuilder的外部工具设定 and netbeans

    在Eclipse下安装好Easy Explore后,后可以实现从Eclipse中的文件树到资源管理器的跳转。在要对文件进行操作的时候这个功能特别实用。

    因为我同时使用eclipse和jbuilder所以一直很想找个jbuilder下的类似插件,一直未果。因为想吧vim集成到jbuilder中,去找了一下相关的资料。发现通过jbuilder的外部工具设置可以很方便的将vim集成到jbuilder中。然后又试验了一下将资源管理器集成到外部工具栏的设置,发现还不错

    具体怎么设置?

    等我明天先到公司去看一下哈,我自己的机器上没安Jbuilder

netbeans

    以前也安装过netbeans不过安装过程中失败了。结果不但不让我重安,而且卸又卸不掉。所以对netbeans的感觉一直不太好。今天去down了个netbeans的5.0 beta2。发现这东西其实还不错。速度还不错,且内存的占用率也不是很高。jdk5.0出来的时候宣称swing的速度有30%的提升,就我的感觉这个30%的提升还是有一定的说服力的。

    eclipse的最大好处就是插件,最大的问题也是插件。eclipse的插件不少,不过免费又好用的倒不多,好用的多半要收费。netbeans在默认情况下不用安装任何插件就可以直接进行j2ee的开发了。而且还默认集成了tomcat5.5不用做什么设置就可以直接对web程序开发调试了。netbeans提供了对swing RAD开发的支持。不过具体效果怎么样,我就没太试过了。

    最后不得不说的是,一直觉得sun的ui做得太差了。尽管netbeans采用的windows风格的界面,但看上去还是有些丑。当然这很大程度上是因为swing的原因,但swing也是sun的东东。也许是因为sun主要是做unix下的东东的吧,难以满足我们这些windows用户的胃口。

开始有些熟悉VIM了

    这两天有看一些VIM,还做了一些相关的设定,感觉我已经开始习惯VIM了。
    VIM默认是wrap模式的。我主要用VIM看代码,代码wrap后就几乎没法看了。set nowrap设置成不进行主动换行模式。
    vim在默认情况下底部的滚动条是不显示的。在自动换行的时候这倒没什么关系,现在被我该成了非自动换行模式,这个问题就变得尤为突出了。修改设定文件,set guioptions+=b,添加底部滚动条。
    vim中的tab和自动缩进都是8字符,相对我的习惯来说这实在是有些夸张。修改配置文件,将自动缩进都改成4。set ts=4;set sw=4。
    vim的默认字体实在是难看,还是换成比较常用的Courier New吧。set gfn=Courier_New:h10。配置文件中如果带了空格将无法解析,需要将空格替换成“_”。
    vim的语法高亮也是个问题。不知道是不是linux的习惯,在语法高亮都喜欢用粉红色,以前的那个jedit也是这样。不知道是不是大多数人都习惯这样,反正我是习惯不了。将默认的配色文件都试验了一下,没有哪个比较满意的。darkblue还不错,不过里面还是有用到粉色。还是自己动手修改一下吧。在\Vim\vim64\colors下找到darkblue,修改PreProc的颜色为00ff00(深绿色)。
    基本设定差不多了,然后还去找了几个插件。我还是比较习惯IDE,用vim来直接写代码的机会应该不多,不过找插件对我来说差不多是必须备行动了。以后偶尔要用到也说不定啊。
    安装了taglist.vim和intellisense.vim。
    差不多就这个样子了。看网上不少有人帖自己的vim配置文件,我也学学,帖了玩玩。
    用vim带的2html功能转的。呵呵,大家正好可以看一下我使用的配色方案。
 

set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin
let Tlist_Ctags_Cmd = 'D:\Program Files\Vim\vim64\ctags.exe'
set autochdir
set nois
set tags=tags
set nowrap
set guioptions+=b
set ts=4
set sw=4
set gfn=Courier_New:h10
colors vxdarkblue
………vim自带的这一部分就不帖了
endfunction

vim

    最近忽然又有些想玩玩Linux了。
    我总是觉得做JAVA开发如果不懂Linux,实在有些说不过去。
    以前就在论坛听人说suse不错,朋友也说这东西好像不错的样子。
    呵呵,3.6G。慢慢下。只要不要再象上次一样下了一半就挂了就好。
 
    昨天去下了个号称地球上第二强的编辑器,Vim(最强的是emacs)。Vim好像不算太糟糕的样子。有中文界面,而且还可以下到中文的使用手册。
    其实我对编辑器的要求很低。启动速度快,有查找功能和语法高亮就差不多够了。只是最近忽然想BT一下,也当是熟悉Linux下的工作环境吧。(为什么不用emacs?我还不够BT
    最初是用NoteXpad。这东西功能和windows的Notepad差不多,主要是多了个工具栏,使用起来比较方便一点。NoteXpad号称全汇编写的。不过好像汇编不太值钱,程序的问题还不少。估计没有使用内存映射,打开稍大点的东西就有点吃力。还好,一般没谁会起用写字板打开太大的文件。
    NoteXpad最初的版本不带语法高亮,在后来的版本中加入了语法高亮,不过bug比较严重。不是几乎,而是根本就没法使用。
    后来朋友推荐用Notepad++。这东西很早就见过,不过当时没太注意。这东西用C++开发的,启动速度还不错,而且语法高亮的默认配色方案比较适合我的胃口。NotepadX就这样逐渐的被我给淘汰掉了。
    现在是Vim。Vim强归强,但对于象我这样习惯了windows下开发的人来说多少还是有些不习惯的。打算先看看手册,将Vim配置得符合点我的习惯再说吧。
    Vim,有些期待。直接在编辑器里写些简单的脚本,实现文本的格式化。我还是有这样的需要的。

appfuse generator的编码规范

一些IDE生成的注释没有删除就把东西发布出来,这我都可以原谅。但代码居然连最基本的缩进都没做。你写代码的时候不愿意话时间去规范代码也就算了,难道你连给代码做个格式化都不愿意?
真为appfuse generator感到汗。