2007年6月13日星期三

WEB系统设计-从无休止的BUG泥潭中解脱!

项目现在遇到了一个问题--BUG好像永远也改不完!每当改完一个BUG之后,就会发现有其他的BUG冒出来。好像无论如何努力,BUG数也无法降低下来--无法看到BUG被完全消灭的一天吗?这个令人恐惧的预兆将极大打击项目成员对项目的信心。

最根本的原因是系统的设计有问题--系统的框架并没有实现好的模块间耦合隔离,那么,模块间互有依赖,改动一个模块就会影响另外一个模块--这样改BUG经常这头刚按下去一个,那边又冒出来两个。

还有一个原因是项目组织管理的问题--由于采用契约制社员来开发,不能保证自始至终由相同的人负责固定的模块,改BUG的时候,程序员总是面对一堆别人的代码(要命的是,项目的大多数代码没有做CODE REVIEW,注释很少,设计书也言之不详,困难可想而知),多数情况下,眼光只局限于BUG出现的那几行代码,所谓头痛医头,脚痛医脚,对整个功能设置整个模块会造成什么影响,就无法顾及了。

那么,如果你是项目经理,你会做什么呢?比如,以上的两点根本原因你都无法改变的话,是否就要缴械投降呢?幸好,你还有最后一颗子弹,从技术上着手,你可以很大程度上改善这种困境。

这颗子弹就是持续集成(以及与之联合的BUG管理系统)[to be continued]

Safari 冲入Windows阵地


拥有Max OS X上一样的迷人外表,页面装入和显示的速度是IE7的两倍,比FireFox2快1.6倍。近日Apple的Safari 3.0同时发布了在Windows上的版本。听起来激动人心哦!

(关于速度的描述摘自Apple.com上的原文,不知道是否有笔误,这样不是意味着IE7比FireFox快--这恐怕不对。另外这样明目张胆拿对手的产品来比较,难道不会有麻烦吗?)

下载Beta2来看看,安装文件很小,只有7M左右,开始还以为是在线安装程序呢。想想IE7一百多兆的体积,不知道M$在里面都放了一些什么呢?在日文版Windows XP Pro上无事安装成功。界面和Mac下几乎没有差别,不过用一下马上就发现没有在Mac下的感觉。估计是显示引擎的原因,本来在Mac上很优雅的菜单和对话框动画的动作显得很不自然。另外整个应用程序的稳定性有待提高,程序异常退出的情况比比皆是,这么频繁的错误对于一个Beta2版,有点说不过去。

苹果近一段对于操作系统市场采取了一些积极的对策,改用Intel处理器并支持Windows XP/Vista,希望扩大操作系统的市场份额。针对数量巨大的Widnows用户,发布支持windows的软件,不失为一个很好的策反策略。毕竟绝大部分Windows用户(特别在中国)没有用过Mac OS,让他们了解Mac和Apple是第一步棋。(iTunes的Windows版本做得就不错)

不过,理想与现实之间,有很长的路要走。第一,Windows和Mac OS毕竟是不同的平台,他们没有共同库文件作支持,同时发布两个平台上的软件差不多意味着要写两个软件。而且,Windows上的表现和Mac上的表现会有差别。如果处理不善,就无法把Mac OS软件稳定,简洁,优雅的特征传达给Windows用户,相反会造成Mac OS上软件不如Windows软件稳定的印象。第二,渠道所限,Apple对这些软件推广的效果有待考察。现在能看到的是在下载站点的连接和介绍(苹果在中国基本没有大排场的市场活动好像),我想,这是远远不够的。

2007年6月8日星期五

完美世界

游戏《完美世界》的主题曲之一,第一次只听歌唱,没有看到歌词,有种“沧桑历遍,激情和向往如初”的感觉,很好听。今天特意找了歌词,水木年华的歌。略感失望的是歌词没有雕琢,内容单薄,不过念在是网络游戏的主题曲,旋律好听已经很不错。

游戏是国内不可多见精细之作。




不知日落夜深多少个夏秋
不知我已这样奔跑了多久
我从出生就注定一生的寻求
远方那完美世界的爱和自由

Fly with me
In the perfect world
Go with me just like a bird
没什么能阻挡自由的天地
这样沉默爱你不知有多久
我愿付出我的生命和所有
我要你不顾一切跟我走
去向那完美世界的爱和自由

Fly with me
In the perfect world
Go with me just like a bird
没什么能阻挡我们在一起

Fly with me
In the perfect world
Go with me just like a bird
没什么能阻挡自由的天地

Fly with me
In the perfect world
Go with me just like a bird
没什么能阻挡我们在一起

2007年6月5日星期二

再见了,Gaim!

Gaim Icon

开源IM的盟主Gaim,5月4日开始改名为Pidgin,并正式发布2.0版,主页移动到www.pidgin.im,新主页上Lasted News(也是唯一的一条News)上简单带过--
Following a legal settlement with AOL, Gaim has been renamed Pidgin and its 2.0.0 release is now available...(根据和AOL诉讼的裁定结果,Gaim改名为Pidgin,现在2.0版本可以使用),不由令人浮想联翩。

从项目名称来说,Pidgin这个词可比Gaim差多了,发音拗口不响亮,外形也不好,说到词义,Pidgin这个词让我产生嘀嘀咕咕喋喋不休的联想(我不是不喜欢鸽子哦)。Gaim招牌易手,和我一样,我想不少的Gaim使用者要扼腕叹息吧。

那么,Gaim为什么要拱手将这个开源和跨平台IM老大的金字招牌拱手让给AOL呢?实际上,Gaim和AOL针对Gaim所有权的争端从Gaim项目开始不久就浮出水面了。

当时AOL Instant Messenger如日中天,Gaim项目为了推广取名GTK AOL Instance Messenger之意,这成为AOL以后诉求的重点。(此事和ICQ控告当初取名叫OICQ的QQ如出一辙,结果是OICQ被迫改名QQ,不过现在QQ赚得盆满钵满,而当年的老大ICQ却已经是垂垂老声势日微矣,扯远啦)数年后,AOL取得AIM商标的所有权,再次表示GAIM侵犯了其商标权,不过未见有任何公开的行动。

直到Gaim 2.0Beta发布之后(记得是2006年吧),AOL开始放出狠话,威胁要将GAIM的开发者告上法庭。不过此次双方并未大动干戈,庭外和解了事,至于和解的条件,就不得而知了。只是Gaim的Fans要知道以后没有Gaim,要用嘀嘀咕咕的Pidgin了。

2007年4月16日星期一

WEB系统设计-SQL上要写一些什么?

1.SQL要写到什么程度?
这个系统的SQL语句不少写得比较复杂。比如:

SELECT
decode( ?, 0, '(オーダー入力)', '(オーダーキャンセル)' ) TITLE,
decode(a.FAX_HATCHU_FLG, '1', '', a.JUCHU_NO ) JUCHU_NO,
....
FROM
SUE_INC a,
SS_MASTER b,
...
WHERE
a.SS_CODE(+) = b.SS_CODE
...


甚至还有在SELECT句上含有IF/ELSE分支选择语句的(这是我第一次知道ORACLE支持这种语法)。在一个多层WEB MIS系统上,SQL写得过于复杂,是不好的设计。

带来的坏处是:
导致系统业务逻辑分散分布在SQL语句和BO(Bussiness Objects)上。违反了分层设计的初衷,阅读和理解代码变难,系统维护和升级的工作也复杂了。

举例来说,以上的功能模块,进行维护或升级工作的技术人员必须兼顾JAVA和数据库,在这两个方面都要不错才可胜任工作,要不然就需要两个技术人员。

就上面的SQL语句来说,
1.要避免使用DECODE解码语句。将常量和字典的映射写在SQL上是很笨的,首先SQL的设计者必须记一堆编码映射表不要搞错,很多系统有很大的映射参照表,SQL设计者们要经常查阅这个表。另外试想有一天常量的名称需要改变时,需要修改所有有关的SQL语句。(当然我们还有文件批量查找和替换工具可以用,不过那实在是不太优雅的招数)

2.要避免在SQL上使用外联接来查询字典表。联接查询字典表不能算是大的问题,事实上很多系统都一直这么做的,毕竟比起上述的把字典解码直接写到SQL上要进步很多了,它实现了字典数据的集中管理。但我认为,对于系统运行过程中不会改变的全局字典表(SYSTEM MASTER表,比如《邮政编码映射》,《业务分类》,《顾客分类》等字典表)来说,最好的办法是在系统初始化的时候就将其加载到全局内存中,并在JAVA层提供查询的接口。这样可以减少不少SQL句的复杂度,而且对使用频繁的字典表的访问减少到最低,数据库的负荷也减轻了。

按照分层设计的原则,理想的状态,SQL语句因该是纯粹的最简单的SELECT/UPDATE/DELETE语句,不要包含任何逻辑。存储过程和触发器应该避免使用。

但是,世上的事情总是没有那么简单。不可避免地,我们要遇到一些有关性能的问题,比如,需要对大量的记录的每一条进行一些复杂运算,然后更新这些记录。这时候,在JAVA层面上对每一条记录进行循环,做运算,然后写回数据库,效率可能无法满足要求。此时可以考虑存储过程或复杂的批量UPDATE语句。必须记住的是,在整个系统设计中,这是极端状态下的特例,不能以性能为理由来破坏分层设计的原则。(Hibernate有持久对象缓存机制,另外好像在关注批量更新的性能问题,不知现在应付这类任务性能如何。

WEB系统设计-前言

这一段在做一个系统的代码验收,一家石油零售商的WEB MIS系统,开发周期长达数年。进入这个小组1个月有余,除了编程的问题外,发现设计上存在不少的瑕疵,问题是存在的,不过现在已经进入验收阶段,只要影响不大,也就没有改的必要了。日本的Team会做代码重构吗,会,在他们被系统的问题逼到墙角的时候就会。
一直很关注Web系统设计,在技术问题上一直是吹毛求疵的我(哈),看到这些问题,不免心下痒痒,随便拿几点指摘一下系统的设计吧。

Facts About Me

Software I use:
Mac OS X, Ubuntu, Opera, Google Family, Eclipse, Java, Sure, the M$ family -- Windows and Office

Hardware I use:
IBM T41, Toshiba A20, Mac Book G4, iPod, Palm Zire, Treo,Sony Clie

If I won 1 million dollars, I would:
E..E...E.....Exicted to die, so better in times. :)

If I were a super hero I would:
Super hero, really? ...Could I have a dozen of GFs ? It may be a hard job to handle with so much, but trust me, I will try a super hero's best. :D

I wish I could:
Have a two-months vacation, one for piggy sleep, one for staying with family !