分类目录归档:编程

全面转向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感到汗。

eXtremetable

    翻页天天写,忽然想,是不是该将翻页写成个jsp的标签。标签这东西从来就没写过,虽说写起来应当也不会难,但以懒人的原则出发,如果有现成的当然就用现成的了。
    DisplayTag,一个不错的翻页标签。可以说DisplayTag什么都好,就是性能很是个问题。DisplayTag每次查询都是将所有纪录都进行一次查询,这样对付小数据量的查询还可以,数据量一大就差不多可以挂掉了。
    ValueList也是一个比较常用的翻页标签。看了一下demo,感觉功能不错,就是默认的风格比较土。当然土不是问题了,只要稍微修饰一下就可以了。ValueList功能强是强,只是有些太强了。ValueList提供了从数据库提取数据到界面显示的全部流程。这样必将导致ValueList使用的复杂性,而且我更喜欢拥有更多一些的控制权。
    然后看到有人说eXtremeTable不错。看了一下demo感觉还不错,界面还挺漂亮的,而且可以在翻页的时候只取出当页的数据。不过问题还是有的(看来完美的东西都是不存在的)。翻页的风格无法修改,且翻页功能比较弱。只能实现 上一页、下一页、第一页、最后一页 这样的简单翻页,如果页数过多的话使用起来将很不方便。
    到官方论坛去看了一下,果然有人和我有相同的需求。不过作者暂时还不打算实现该功能。作者说该功能的需求比较小,还有更多更重要的特性要添加。不过作者也说了,如果需要可以自己对标签进行扩展。eXtremetable相比其他的翻页标签来说更关注的不是功能的实现,而是一个良好的扩展性。所以即使自己对eXtremetable进行扩展应当也不会是一件很麻烦的事情。
    今天在IBM中国看一个关于代码生成器的网站http://www.codegeneration.net/,里面有很多关于代码生成器的东西很全。如果你是一个代码生成器的编写者,在这里你可以找到很多关于代码生成器的知识。如果你只是想找个代码生成器用用,这里也不会让你失望,在里面你可以找到各式各样的代码生成器。

OOP程序设计实践

·简介(开发中)

前言
    phoenix,浴火重生的凤凰。和她的名字一样,这个版本的热键助手是一个全新的热键助手。虽然她“长得”和以前的版本差不多不过她已经实现了程序的全部重写。
    应当说phoenix版本是“热键助手”的降级版。在以前开发“热键助手”的时候,按照自己的喜好加了很多功能。然而在实现了这些功能以后,却发现真正使用这些功能的人其实并不多。这次开发的出发点是实现基本的功能,在用户需要时再根据具体情况添加。
OOP
    其实这次重写“热键助手”主要是对OOP的实践。在以前写程序的时候总是喜欢把不同的功能放到不同的单元中,把不同的功能放到不同的函数中……。当时感觉这样写程序就已经很帅了,但始终感觉没有摸到OOP的门。然而就在最近开始有点OOP的感觉了,于是决定将“热键助手”进行一次重写。
    重写的过程中问题还是不少的。
    在设计的过程中颗粒细度始终很难把握。因为是初次使用OOP的思想来做程序,在划分模块的时候经常“狠不下心”,老是希望把颗粒划分得比较细,舍不得将颗粒画粗点。不过根据XP的说法,不应当在程序设计的初期把程序设计得太“完美”,因为你的能力会在设计的过程中提高的嘛。一些东西以后做也许会做得更好,而且现在计划的很多东西在以后可能会变得毫无用处,为什么要浪费这么多的时间来做一些无意义的事呢?而且只要前期的设计不要做的实在太烂,在后期还可以比较方便的使用重构来改善程序结构以适应需求的变化。
程序具体结构(还没完成)
    下图就是程序的类图,因为还没真正完成所以在最终实现的时候应当还会做写修改。
    下面还是对程序的结构进行一些讲解吧。(其实类图提供的信息已经蛮详细了)
    TvxShortCut类对热键(TvxShortCut)进行统一管理管理。在TvxShortCut有一个TvxSettingMgr的引用,通过她来进行对设置文件的操作。TvxShortCut应当是一个抽象类(目前还不是),因为她没有和界面打交道的代码,她的界面相关部分将在子类中实现。
    TvxSettingMgr用于实现配置部分的功能。其实可以将其设计成一个接口。其具体实现可以由TvxXMLSettingMgr等实体类来实现。不过目前还没有采用其他配置方式的想法,所以先这样做吧,等到有必要的时候再考虑重构。
    TvxShortCut用于实现热键的注册和卸载等功能。TvxShortCut应用TvxScript执行热键操作。
    TvxScript对脚本进行分析,并调用TActionFactory来构造一个TvxAction接口的类来执行具体的脚本。(我觉得TvxScript这个类好像有点小问题,但具体怎么改还想不到,所以先这样用吧)
    TvxAction执行热键的具体操作。这是一个抽象类,她的具体实现在她的子类里实现。
    TvxMenuAction类,实现了IvxMenuInterface接口的Action类,可以将其添加到Menu上。这也是一个抽象类。
    TvxOpenFile类,TvxMenuAction的子类,用于具体实现打开文件的操作。
    IvxMenuInterface接口,添加到Menu的接口。
    TvxSubMenu类,有子菜单的菜单项目(分隔符也算到这里面,反正是和Action无管的菜单项)。
    TvxMenuMgr,具体将实现了IvxMenuInterface类的接口添加到菜单上。

    差不多就这样了。因为我也是OOP的菜鸟,设计方面还是很菜,而且自我感觉上面的类图还有不少问题,如果大家有什么好的建议欢迎指出来。
   

点击察看大图

类图(点击察看大图)

备注
    在设计的时候我也一直在象,我是不是将问题复杂化了。不过OOP的第一步始终要走出去的,所以就算是再硬的核桃也要将其砸扁。
    顺便祈祷这个程序可千万别夭折了,就算是再烂也还是写完先。(在接下来的一段时间里工作会很忙,不知道什么时候可以将程序写完)。

 

发表于 @ 2004年10月

//——————————————————————–

PS:

    很久以前的东西了。最初是放在我的个人主页上的,不过我的主页空间到期后就没有继续维护了(两年过得可真快啊)。这篇文章在CSDN也有,不过CSDN的blog在发完这个文章后就已经没有进行维护了。CSDN的blog上总共也就只有这一篇文章,差不多也算是废了。想想我还是很少写技术文章的(妖言惑众还是比较多的),这个文章虽然说写得不怎么样,但多少还是有点回忆吧。OOP走火入魔的回忆,当然这个走火入魔更多的带有一些刻意。 爱爱过才知情深,醉过才知酒浓。只有有过走火入魔的经历才能将问题看得更透彻。

    程序也早就完工了,不过最后的结构和上面的类图有些不同。

    程序的最新版本和以前的发布版本相比有些小改动,而且修正了一些内存泄露问题。只是中文版的程序在一次意外硬盘灾难中丢失了。E文版的还有,不过帮助只E文化了一半。现在程序的帮助还是一半E文,一半中文的。是否考虑那天将剩下的帮助也E文化后发布个E文版的?

    不知道怎么将MSN上传的图片插入到blog里,而且上传的图片会显示在“我的图片”里,不是很美观。所以文章中的图片是在网上拉的别人家,图片什么时候实效我就不清楚了。

打算再玩一个月的Delphi

    总是觉得JAVA实在是有些枯燥。面对JAVA,你需要不短的去熟悉那些所谓的新技术和那些所谓的框架。一通百通?通了有个鸟用。熟悉很多时候不是通不通的问题,差不多是纯粹的苦力活。反正我是试图慢慢的让自己专注起来,不再去过多的关注那些所谓的新技术,把关注的焦点放到框架的整合上面。
    APPFUSE是个不错的东西,他引入了不少新技术,而且做了一个还算不错的整合,而且还提供了一个简单的代码生成器。不过如果直接使用APPFUSE进行开发还是会存在一些问题的。比如在APPFUSE中的权限控制部分和框架整合的过于紧密。但对公司目前的项目来说APPFUSE带的权限控制模块还不是很符合要求。在页面的表现部分,APPFUSE是用CSS对页面进行装饰来实现表现层和功能的分开。技术是不错,不过着对CSS的要求有点高。要实现所有页面都使用CSS进行装饰技术难度有多少?呵,我对CSS不熟不好估计,而且我从来都对脚本语言存在着一些偏见。表现层这一块肯定是要进行剥离的。除此之外APPFUSE在一些问题的处理上本来就不是很好,需要进行部分的修改。
    APPFUSE带了一个代码生成器,还算是简单实用的。不过在我看来从VO提供的信息毕竟不够完备,如果从VO开始实现一个完备的代码生成过程似乎还存在着一些问题。在我看来,进行代码的生成最好的办法就是从自定义的XML文档开始。因为文档是自己定义的,所以需要哪些信息你可以自由的进行添加。
    代码生成器,在以前玩python的时候写过一个简单的。完成了从配置文件生成VO、文档、以及数据库安装脚本。再由XDOCLET生成hibernate的配置文件。不过由于在开发的过程中遇到了点小问题,加上对python的兴趣减退(开发这个主要是为了玩python)就没继续开发了。
    代码生成器的理想情况是可以由模版生成页面,数据库脚本在生成后可以选择自动安装。程序的相关代码也是完备可以用的。程序的相关配置文件也是要全部配置好的。总之就是写好配置文件,然后你就不用动手了。呵呵,听上去似乎有些恐怖。不过对于简单的添加删除操作来说,编程本来就是一个体力活而不是技术活。
    YY了这么多东西,不过就目前而言我还有几个简单的问题都没有处理完。比如spring和hibernate整合的事物控制。hibernate的那几个对应关系等(感觉对应关系的处理不会很难,但一旦没处理好,很容易出性能问题)。
    虽然JAVA方面还有怎么多问题没有解决,但我还是打算先再玩一个月的Delphi了。在公司一天到晚的对着JAVA难免有些厌烦。况且我本来就更倾向于Delphi。如果从刚接触Delphi开始算起已经有超过4年的时间了。虽然Delphi已经有日暮西山,虽然Delphi已经开始win32向.net转变,不过我依然喜欢用delphi进行win32下的开发。不知道是不是用久了就成了一种习惯?
    呵,虽然delphi玩了蛮久的,不过在工作中用delphi开发的时间却不算长。
    不管怎么说,再玩一个月的Delphi,把那些该解决的问题解决(本来早就该解决了的,计划不如变化啊)。

推荐个项目管理工具dotproject

    将来,老是上网到处溜达,一点正事没做。所以决定找个项目管理软件给自己安排项目计划。找了不少,却一直没有找到合适的。

    XPlanner在sourceforge上活跃程度不错,不过我不是很喜欢JAVA的项目(工作中用多了,所以有点烦JAVA),而且界面也不是很帅。

    去找了一下一些PHP的项目管理软件。在好友的推荐下关注了一下EGroupWare.这东西的界面不错,不过功能太强大了。对于我来说我不需要这么强大的功能,功能过于强大只会增加使用的难度。

    看到cnpack用的CVSTrac,觉得不错.不过我用subversion做版本管理,去找一下发现CVSTrac有subversion的版本教Trac.Trac这东西用python写的,需要服务器支持python,好像安装会有点麻烦.而且后来发现这个东西只提供里程碑和bug管理不提供项目管理。

    这时候发现了dotproject。看名字还因为和.net有什么关系。但其实这东西是用PHP写的。dotproject提供了项目管理,bug追踪,而且还提供了一个论坛提开发人员交流。dotproject功能不错,简单好用,且界面很友好,十分符合我的要求。dotproject安装起来十分方便。在第一次使用的时候会自动弹出配置界面方你配置。dotproject有中文语言包.