niyue

Archive for 2005年4月|Monthly archive page

一些有趣的搜索引擎

In other on 4月 29, 2005 at 12:22 上午
Kayak.com
Dion Almaer的blog上看到的,在这个搜索引擎中能够搜索关于航空或者旅行的一些信息,有意思的是它的用户界面,它不象一般的搜索引擎,如Dion所述:

Go ahead and do a search for a flight, and you will see that instead of the usual:

“I am searching, be back in a minute”

you get:

  • I have done x out of y
  • Here they are
  • Feel free to stop me at any time if you have enough info
  • Oh, and I am done now so here is everything

The funky changing display on the left is fun too. This is a lot nicer for me the user. I get feedback at the right time (when available), and I am engaged.

Mutiply
这个搜索引擎也不象一般的搜索引擎,它不是在整个Internet上面进行搜索,而是在你的Social Network中进行搜索,在大家加入这个搜索的network后,人们可以搜索到与自己相近的人搜索的内容, it’s really very cool and interesting

Yagoohoo!gle
一个YahooGoogle的合体,^_^,不过不是meta搜索引擎,只是用户界面上面的集成

EasyRGB

搜索Color,可以帮你找出一系列相关的颜色,有特点

Koders
Searching 190,006,436 lines of code.
帮助你搜索代码^_^
Speegle
The worlds first talking search using PanaVox Speech Technology
大致看了一下,不过也没搞太懂这个到底干嘛用的,使用这个搜索引擎搜索之后,搜索引擎会将搜索结果朗读给用户,满有特点的,不过这个特点感觉不是那么实用,似乎并不能给用户带来多大的效率提升,只是用户体验会稍许有不同.
Amazon Diamond Search
Amazon用来搜索钻石的一个搜索引擎,大量使用了Ajax的技术,界面非常酷
Iokio Camera Finder
和上面的Amazon的Diamond Search有几分相像,都是类似过滤器式的搜索,用户一下就能够看明白结果,不过这个不是靠Javascript而是靠flash来完成的.这只是该公司的一个demo,他们有一个产品Iokio Feature Finder, coming soon目前,再等等看
A desktop application for creating a lightweight Flash™ file allowing users to browse and filter information in a simple and intuitive manner.
Acronyma
专门用来查询单词缩写的搜索引擎,有英语、西班牙语、法语、德语、荷兰语、意大利语、葡萄牙语这些语种的服务,基本把欧洲的大语种都包括了。可惜我只懂英语,没试过其他语种的缩写查询。
gataga
名字不知道怎么念,不过功能确满实用的.主要是针对了现在很热的tag服务,像del.icio.usfurl等等,通过该搜索引擎可以对这些服务的tag进行搜索.

iBatis多键值查询

In javaprogramming on 4月 27, 2005 at 10:04 上午
摘自iBATIS SQL Maps 开发指南
Clinton Begin 著
刘 涛 译
Map类型输入参数
假如没必要写一个Java Bean作为参数,而要传入的参数又不只一个时,可以使用Map类(如HashMap,TreeMap等)作为参数对象。例如:
<statement id=”insertProduct” parameterClass=”java.util.Map”>
select * from PRODUCT
where PRD_CAT_ID = #catId#
and PRD_CODE = #code#
</statement>
可以注意到mapped statement的形式完全没有区别!上面的例子中,如果把Map对象作为输入参数去调用mapped statement,Map对象必须包含键值“catId”和“code”。键值引用的对象必须是合适的类型,以上面的例子来说,必须是Integer和String。Result Map(参见以下章节)也支持使用Map类型作为结果参数。要获得更多信息,请参见“Result Map”和“使用SQL Map API编程”部分。
Map类型也可以使用别名。例如,可以用“map”来代替“java.util.Map”。这些别名参见下面的“支持Parameter Map和Result Map的数据类型”表格。

复杂类型集合的属性
Result Map还可以装入代表复杂类型对象集合(List)的属性,用以表示在数据库中相互关系为多对多或一对多的数据。拥有集合属性的类作为“一”的一方,而在集合中的对象作为“多”的一方。用来装入对象集合的mapped statement和上面例子一样。唯一的不同是,让SQL Map架构装入复杂类型集合(List)的业务对象的属性必须是java.util.List或java.util.Collection类型。例如,如果Category拥有Product对象的List,mapped-statement就像下面的例子(假设Category类有一个叫productList的属性,类型是java.util.List):
<resultMap id=”get-category-result” class=”com.ibatis.example.Category”>
<result property=”id” column=”CAT_ID”/>
<result property=”description” column=”CAT_DESCRIPTION”/>
<result property=”productList” column=”CAT_ID” select=” getProductsByCatId”/>
</resultMap>
<resultMap id=”get-product-result” class=”com.ibatis.example.Product”>
<result property=”id” column=”PRD_ID”/>
<result property=”description” column=”PRD_DESCRIPTION”/>
</resultMap>
<statement id=”getCategory” parameterClass=”int” resultMap=”get-category-result”>
select * from CATEGORY where CAT_ID = #value#
</statement>
<statement id=”getProductsByCatId” parameterClass=”int” resultMap=”get-product-result”>
select * from PRODUCT where PRD_CAT_ID = #value#
</statement>

各种键盘布局

In other on 4月 26, 2005 at 12:30 上午

早就听说电脑键盘有着不同的布局,不过一直没有见识过,今天在看Matt Raible的Raible Designs时,看到他讲到了Dvorak键盘布局,于是忽然兴起,上网搜了一下相关的一些内容^_^摘自www.pconline.com.cn

键盘的历史

键盘非常悠久,早在1714年,就开始相继有英、美、法、意、瑞士等国家的人发明了各种形式的打字机,最早的键盘就是那个时候用在那些技术还不成熟的打字机上的。直到1868年,“打字机之父”――美国人克里斯托夫・拉森・肖尔斯(Christopher Latham Sholes)获打字机模型专利并取得经营权经营,又于几年后设计出现代打字机的实用形式和首次规范了键盘,即现在的“QWERTY”键盘。

为什么要将键盘规范成现在这样的“QWERTY”键盘按键布局呢?这是因为最初,打字机的键盘是按照字母顺序排列的,而打字机是全机械结构的打字工具,因此如果打字速度过快,某些键的组合很容易出现卡键问题,于是克里斯托夫・拉森・肖尔斯(Christopher Latham Sholes)发明了QWERTY键盘布局,他将最常用的几个字母安置在相反方向,最大限度放慢敲键速度以避免卡键。肖尔斯在1868年申请专利,1873年使用此布局的第一台商用打字机成功投放市场。这就是为什么有今天键盘的排列方式。

QWERTY的键盘按键布局方式非常没效率。比如:大多数打字员惯用右手,但使用QWERTY键盘,左手却负担了57%的工作。两小指及左无名指是最没力气的指头,却频频要使用它们。排在中列的字母,其使用率仅占整个打字工作的30%左右,因此,为了打一个字,时常要上上下下移动指头。

1888年全美举行打字公开比赛,法院速记员马加林按照明确的指法分工展示了他的盲打技术,错误只有万分之三,使在场人惊讶不已,据记载马加林的奖金是$500元, 从这以后很多人效仿这种盲打,在美国也开始有了专门培养打字员的学校。

由于盲打技术的出现,使得击键速度足以满足日常工作的需要,然而在60年后(1934年),华盛顿一个叫德沃拉克(Dvorak)的人为使左右手能交替击打更多的单词又发明了一种新的排列方法,这个键盘可缩短训练周期1/2时间,平均速度提高35%。DVORAK键盘布局原则是:1、尽量左右手交替击打,避免单手连击;2、越排击键平均移动距离最小;3、排在导键位置应是最常用的字母。

比DUORAK键盘更加合理、高效的是理连・莫尔特(Lillian Malt)发明的MALT键盘。它改变了原本交错的字键行列,并使拇指得到更多使用、使“后退键”(Backspace)及其他原本远离键盘中心的键更容易触到。但MALT键盘需要特别的硬件才能安装到电脑上,所以也没有得到广泛应用。

到了20世纪中期,键盘又多了一个用武之地――作为电脑的基本输入设备。另一方面,至今,“QWERTY”键盘仍然是使用的最多的键盘布局方式,这是一个非常典型的“劣势产品战胜优势产品”的例子。

摘自www.microsoft.com:

德沃夏克键盘布局

摘自www.mwbrooks.com:

Introducting to the Drorak Keyboard

小提示

亲自试用DVORAK键盘吧!
Windows中已经内置了对它的支持,打开“控制面板→键盘”,进入“输入法区域设置”选项卡,接着单击“添加”按钮,将“输入法区域设置”设置为“英语(美国)”,并在“键盘布局/输入法”栏内找到“美国英语-DVORAK”。确认后,按键位置全变了。现在你完全有资本提升自己的英文打字速度了。当然在成功前仍需花时间重新适应新的系统并进行耐心训练。

在线拼音输入法–从本地到web

In other on 4月 22, 2005 at 11:07 上午

现在越来越多的本地的软件开始往web上转移了,最一开始是一些很自然能想到的东西,比如在线的所见即所得的编辑器;后来的一些似乎也可以想象,比如文件系统向web的转移(现在有很多的网上的文件存储服务,如mofile );渐渐的有一些本地的应用也开始往web上面转移了,比如翻译软件和字典软件(例如金山词霸在线,在线游戏就不算了^_^);再后来发展到有一些不那么容易想到的东西,比如收藏夹也开始往web上转移(例如现在很流行的网络书签,del.icio.us等);到现在,随着RIA的发展,web的用户界面越来越强,已经是什么本地应用都可能在web上出现了,今天甚至看到了web上的拼音输入法.再接下去会是什么呢,不久的以后是不是整个os都会搬到web上呢?那时的浏览器岂不是成了超级app-killer,所有的应用集其一身?难怪Google要拉拢Firefox了就.

很酷的Google Talk

In other on 4月 21, 2005 at 3:21 下午

Google Talk

Use Google talk by entering three or four words below. The system will search for this sentence at Google, find the next word and print that. Than it will remove the first word of the search string, add the found word and repeat. The result seems to be meaningfull sometimes. Other times it is giblish. But always fun.

Google talk a Google Hack by Douwe Osinga

In the examples below, the seed text in bold, what Google returns is not. You can use Google Talk as an oracle by starting sentences and have Google Talk finish them. For example:

You want to know what a good programmer is, so you type: a good programmer is.
Google Talk answers: A good programmer is a lazy programmer
Or, you want to know how to better the world
Better the world by consolidating character in societies, families, and individuals

Also, you can find out who stars in a movie by typing the name of the movie followed by starring:
The Godfather starring Marlon Brando Al Pacino James Caan, Robert Duvall, Arthur Hill, Bo Hopkins, Mako, Gig Young. Dir. Sam Peckinpah. Folded Price
It starts to trash after while

Or have Google Talk write your contracts:
not plagiarized from any other source. for any reason. whatsoever. including but not LIMITED to the following: A.

Use Google Talk to find out where the bad guys hide:
Saddam Hussein hides in the cellars under the main house and the Carriage house
Osama bin Laden hides in the latticed caves of Afghanistan, he has been able to help them in their efforts to implement the principles of the Arcane School

Java界技术名人堂

In javaother on 4月 18, 2005 at 12:30 上午

Java界技术名人堂

上次在某个blog上面看到过一个关于Java人仕的综合介绍,人列了不少,不过讲的比较没有规律并且不是很全.今天在赛迪网上看到了这些资料,但是阅读起来很不方便,这里为其修改了其链接上的错误并将原来分散的资源做了一个综合.想知道更多的人还可以看看TheServerSide上面的这篇文章: Who’s Who in the Enterprise Java World? Make your opinion known! 里面断断续续的也讲了不少人^_^

A



Adrian Colyer

IBM的AspectJ DeveloperJava研究项目负责人,同时也是Eclipse上AspectJ项目的领导者。AspectJ项目起源于帕洛阿尔托(Palo Alto)研究中心(缩写为PARC)。该中心由Xerox集团资助,Gregor Kiczales领导,从1997年开始致力于AspectJ的开发,1998年第一次发布给外部用户,2001年发布1.0 release。为了推动AspectJ技术和社团的发展,PARC在2003年3月正式将AspectJ项目移交给了Eclipse组织,因为AspectJ的发展和受关注程度大大超出了PARC的预期,他们已经无力继续维持它的发展。

AspectJ是用于实现面向方面编程(AOP)的Java语言扩展。通过分离各种正交问题,AspectJ使得开发者能够更轻松地解决大型软件系统中常见的一些棘手问题,如日志记录、错误处理之类。

AspectJ项目经过近十年的发展,对于AOP的具体实现已经相当成熟,但其仍存在诸如过于复杂、破坏封装、需要专门的Java编译器等缺点。在接收了AspectJ项目之后,Eclipse项目组已经把AspectJ集成在Eclipse Java开发环境中。通过这样的集成,Eclipse IDE将可以提供对AOP的支持,并弥补AspectJ本身的一些不足之处。


B



Ben Galbraith

AOP活跃人士,其在TSSJS2005(全称:The ServerSide Java Symposium)上关于“AJax Toy”的演讲被与会者认为颇有新意。AJAX是Asynchronous JavaScript + XML的缩写,而且AJax可以很好的和JSF的Component结合起来,开发者不需要成为AJax方面的专家。


Benjamin Renaud

BEA的副CTO。BEA是企业级平台中间件的领导厂商,其2002财年收入达到9.34亿美元,在全球拥有超过15,000家企业用户。1995年,BEA收购Tuexdo联机事物处理监视器[Tuxedo online transaction processing(OLTP) monitor],并由此而进入平台中间件市场。1998年又收购了WebLogic,而WebLogic技术随后在1999年成为Java应用服务器领域中的领导者。


Bill Burke

JBoss组织首席架构师,EJB 3.0专家组里的JBoss代表。JBoss是一个用纯Java编写、开放源代码、遵循J2EE规范的应用服务器软件,它遵循LGPL开放源码协议。JBoss起初只是一个EJB容器,后来逐步发展成为一个具有复杂功能的应用服务器。现在,最高的版本是4.0。它从创建到现在,经历了4年的发展历程。JBoss组织是一家位于美国亚特兰大的商业服务组织。他们为JBoss应用服务器提供技术支持和顾问咨询。


Bob McWhirter

Groovy和Drools的开发者。Groovy是一种敏捷开发语言,完全以Java编程API为基础,于2004年3月底获得批准。Groovy还是与JRE兼容的一种脚本语言,使用了Java开发人员最熟悉的功能和库(将它们放到了一个敏捷开发框架中)。Groovy具有使开发人员不用编译、允许动态类型、使合成结构容易、脚本可在普通Java应用程序中使用、提供shell解析器等特性,这使其成为一种特别容易学习和使用的语言,不管是有经验的Java开发人员还是刚接触Java平台的人,都可以快速掌握。有些人说它可能会永久性地改变开发人员看待和使用Java平台的方式。

Drools是Bob McWhirter开发的开源项目,是Charles Forgy Rete算法的一个增强的Java语言实现,放在The Codehaus上。Rete算法是Charles Forgy在1979年发明的,是目前用于生产系统的效率最高的算法(除了私有的Rete II)。Rete是唯一的、效率与执行规则数目无关的决策支持算法。Rete应用于生产系统已经有很多年了,但在Java开源软件中并没有得到广泛应用。

除了应用了Rete核心算法、开源软件和100%的Java实现外,Drools还提供了很多有用的特性。其中包括实现了JSR94 API和创新的规则语义系统,这个语义系统可用来编写描述规则的语言。目前,Drools提供了三种语义模块,即Python模块、Java模块和Groovy模块。


C



Cedric Beust

EJB 3专家组的成员,也是其他一些流行的开源项目(例如EJBGen和Doclipse)的创造者。目前是BEA的Weblogic架构师。EJBGen是一种EJB 2.0原始码生成器,它能够从一个EJB bean类生成本地界面/远端界面、本地主界面/远端主界面、主键类和部署描述符。

Doclipse是一个Eclipse下的JavaDoc插件。

Java中的包(Package)其实指的就是目录,它是为了更好地管理Java类(Class)和接口(Interface)。Java语言的包可以被另一个Java开发包所使用。

EJB是SUN公司倡导的基于JAVA的组件构架,是J2EE中的主要技术之一。EJB定义了一个集成的编程模型和标准的API接口,是实现服务器端应用服务的组件。



Cliff Schmidt

Cliff Schmidt,标准和开源策略产品经理,也是Apache蜂巢项目负责人。蜂巢计划(Project Beehive)是一个基于 WebLogic Workshop应用框架的用于 J2EE&SOA 应用的开源项目。该框架本身是独立的,但要依靠WebLogic来运行。 在2004年5月,BEA宣布该框架以后的所有开发都是开放源码的,这就是Apache蜂巢项目,名为Beehive。


Craig McClanahan

Craig McClanahan目前是SUN公司的高级工程师,主要从事J2EE的WEB层的工作。主要参加的开放源码有:

1.Catalina Servlet Container:主要的开发人员,该Servlet Container是Apache软件基金的Jarkarta 中的TOMCAT 4.x和5.x版中的核心部分。

2.Struts: 发起人和主要的开发人员,2000年该项目转为Apache软件基金的Jarkarta项目,该框架目前成为采用Java Servlet 和JSP技术构件Web应用的最流行的框架。

3.Digester:发起人和主要的开发人员,本来该项目是为Struts中处理配置文件的一些功能类,后来觉得不错,就转成Apache软件基金的Jarkarta项目的Common中的一个组件项目。

4.JavaServer Faces(JSR-127), 和SUN公司的Ed Burns一起负责该标准。

著作:《Struts in action》


D



David Nuescheler

Day Software的CTO,也是Java Content Repository(Java内容录仓库)JCR 170专家组负责人。Java Content Repository是一个寻址内容仓库的标准化API建议。2002年2月,该建议提交到JCR(Java Community Process),JCR专家组于2003年下半年完成最终草案。


Dion Almaer

TSS主编、中间件公司首席架构师、JDO专家组成员。Middleware Company (www.middleware-company.com)即中间件公司是领先的EJB/J2EE和B2B技术培训机构之一。Middleware Company还构建和维护一流的在线J2EE社区TheServerSide.com。


Doug Cutting

TSS的CEO、MiddleWare公司CEO、《Mastering EJB》作者。他是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎(Apple的Copland操作系统的成就之一)的主要开发者,后在Excite担任高级系统架构设计师,目前从事于一些INTERNET底层架构的研究。他贡献出的Lucene的目标是为各种中小型应用程序加入全文检索功能。Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。早先发布在作者自己的www.lucene.com,后来发布在SourceForge,2001年年底成为APACHE基金会jakarta的一个子项目:http://jakarta.apache.org/lucene/

E



Erich Gamma

经典书籍《Design Patterns(设计模式)》(Addison-Wesley,1995)的四位作者之一,Eclipse的总设计师,并且是EclipseJava开发工具(JDT)项目的领导人。


Edward Burns

JSF 1.2规格主导者。SPEC是System PerformanceEvaluation Cooperative的缩写,是几十家世界知名计算机大厂商所支持的非盈利的合作组织,旨在开发共同认可的标准基准程序。

SPEC基准程序是由SPEC开发的一组用于计算机性能综合评价的程序。以对VAX11/780机的测试结果作为基数,其他计算机的测试结果以相对于这个基数的比率来表示。SPEC基准程序能较全面地反映机器性能,有一定的参考价值。

SPEC版本1.0是1989年10月宣布的,是一套复杂的基准程序集,主要用于测试与工程和科学应用有关的数值密集型的整数和浮点数方面的计算。源程序超过15万行,包含10个测试程序,使用的数据量比较大,分别测试应用的各个方面。

SPEC基准程序测试结果一般以SPECmark(SPEC分数)、SPECint(SPEC整数)和SPECfp(SPEC浮点数)来表示。其中SPEC分数是10个程序的几何平均值,SPEC整数是4个整数程序的几何平均值,SPEC浮点数是6个浮点程序的集合平均值。

1992年在原来SPECint89和SPECfp89的基础上增加了两个整数测试程序和8个浮点数测试程序,因此SPECint92由6个程序组成,SPECfp92由14个程序组成。这20个基准程序是基于不同的应用写成的,主要测量32位cpu、主存储器、编译器和操作系统的性能。

参加这个组织的主要成员有:IBM,AT&T,BULL,Compag,CDC,DG,DEC,Fujitsu,HP,Intel,MIPS,Motorola,SGI,SUN和Unisys等。1995年,这些厂商又共同推出了SPECint95和SPECfp95作为最新的测试标准程序。


F



Floyd Marinescu

《EJB Design Patterns》作者。他架构、建置并执行了TheServerSide.com(知名J2EE社区)。他写了无以计数的文章并且经常在Java研讨会上发表演说。

G



Gavin King

Hibernate的作者,EJB3.0专家委员会成员,JBoss核心成员之一,也是《Hibernate in Action》一书的作者。Gavin King 1974年出生于澳大利亚,现在居住在澳大利亚默尔本市。Hibernate 是Java平台上的一种流行的、容易使用的开放源代码对象关系(OR)映射框架。Hibernate诞生在2001年11月,在短短的两年多时间就发展成为Java世界主流的持久层框架软件,令人侧目。Hibernate是一个雄心勃勃的项目,它的目标是成为Java中管理持续性数据问题的一种完整的解决方案。它协调应用与关系数据库的交互,让开发者解放出来专注于手边的业务问题。Hibernate是一种非强迫的解决方案。


Gregor Hohpe

《Enterprise Integration Patterns》作者,目前在ThoughtWorks工作。


Gregor Kiczales

人称AOP之父,是其领导了开发AOP和AspectJ的PARC团队。他是知名的AOP传教士,并且致力于建立同时给实践者和研究者服务的社区。他在开发高级编程技术并把这些技术传授给开发者方面有二十年的经验,是ANSI CLOS设计团队的成员,同时还是CLOS参考实现的作者,以及《The Art of Metaobject Protocol》(MIT出版社,1991)的作者之一。他现在是British Columbia大学软件设计方面的Sierra System教授。


Graham Hamilton

Sun副总裁,J2SE1.3、1.4、5.0项目领导人。

H



Hani Suleiman

OSWorkflow开发者,BileBlog的作者。osworkflow是一个轻量级的又极为灵活的工作流引擎,较容易和其它架构做整合。


Howard Lewis Ship

HLS的Blog:http://howardlewisship.com/blog/Tapestry和Hivemind的开发者,《Tapestry in Action》作者。

Tapestry是类似WebForms机制的Java Web Framework,Hivemind是一个微内核的IoC容器,Tapestry和Hivemind都是Apache Foundation Software旗下的软件。


J



James Strachan

Geronimo的发起者之一,Jakarta项目管理委员会成员,N多JSR expert group的成员。Geronimo是Apache软件基金会为了创造一个兼容J2EE的容器,而整理出来的一个新成果。

Jakarta是一个Sun公司支持的开源项目。它的最终目标是创造一个质量达到了那些商业解决方案要求的免费J2EE服务器端解决方案。Tomcat应用程序是整个项目的主要部分,并且在很多人看来,它几乎就等同于整个的Jakarta项目。



Jason Careria

Webwork2,Xwork核心的开发者。WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了XWork1和WebWork2两个项目。


Jason Hunter

Apache基金会管理员,《Java Servlet Programming》作者,Xquery,Jdom等的开发者。


John Crupi

Sun Java Center系统架构师,目前专著于SOA。


Jonathan Bruce

JDBC规格主导人。


Joshua Bloch

《Effective Java》作者,前java平台核心开发者,目前在google。


Jon Tirsen

Nanning的首席开发者,PicoContainer和NanoContainer活跃开发者,目前在ThoughtWorks工作,Damage Control的项目领导者之一。


Juergen Hoeler

Juergen Hoeler是SpringFramework的共同作者之一,与Rod Johnson共同发起和创造了SpringFramework。SpringFramework中Hibernate相关的API是由Juergen Hoeler完成的。对于喜欢使用Spring/Hibernate架构的程序员来说一定对这部分非常熟悉。Juergen Hoeler也是《J2EE Development without EJB》一书的共同作者之一。

K



Kent Beck

设计模式的开创者之一。XP[eXtreme Programming(极限编程)]和TDD的创始人,xUnit的开发者。是《The Smalltalk Best Practice Patterns》、《Extreme Programming Explained》和《Planning Extreme Programming(与Martin Fowler合著)》等书的作者。

L


Linda DeMichiel

EJB 3.0规格主导者,在SUN工作。

M



Marc Fleury

博士,1968年生于巴黎。马克原先在太阳微视(法国)从事过销售工作。毕业于法国声名显赫的Ecole Poly技术学院的他,同时也是伞兵队的前任上尉。后来,马克从巴黎高等师范学校获得理论物理专业的硕士和博士学位。在从事物理方面的研究过程中,他也在麻省理工学院做过X射线激光器方面的访问学者。目前,马克是JBoss公司,即一个坐落在亚特兰大郊外的、提供优质服务的公司的总裁。JBoss公司,由Marc Fleury领衔的、由世界范围内100多位开发者组成的公司。他们分发各种用途的J2EE工具,并且致力于将JBoss发展为J2EE平台中的主流企业Java应用服务器。


Mark Hapner

Mark Hapner不仅是J2EE 1.4规范的主导者,还是Web Service协同工作组织中Sun公司的代表。简而言之,他是Sun驱动J2EE技术趋势的关键人物。Mark于1996年加 入Sun的Java软件公司,参与JDBC API的开发。接着,他撰写了EJB规范和JMS规范。


Martin Fowler

从80年代开始,他就一直从事软件开发的工作。他写过四本软件开发方面的书。《分析模式》是对他商业建模的经验的收集回顾,其中有很多重要的商业对象开发模式。《UML Disilled》是对UML符号、语意以及迭代式开发过程的概览,在1998年获得软件开发生产力奖金,现在已经出到了第二版。《Refactoring》描述了如何以可控的、快速的方式改变现有软件的设计。他最近与Kent Beck合写的《Planning Extreme Programming》则描述了如何进行XP设计。这四本书被全世界的软件开发者奉为经典,尤其是后两本,让软件开发者们看到了快速、灵活的软件开发的可能性。他所描述的重构技术和基于重构的XP方法,被称为“软件开发史上的一次风暴”。Martin Fowler在许多软件开发的国际性会议上做过演讲。他还是OOPSLA、软件开发委员会、UML世界、XP2001、TOOLS等几个协会的会员。同时,他还是“分布式运算”杂志的专栏作家。现在,他又为“软件开发”杂志做顾问,同时还为“IEEE软件”写一个设计专栏。目前是ThoughtWorks(系统集成及顾问公司)的CEO。


Matt Raible

1997年毕业于Denver大学,获得俄语、国际商业和经济学位。《Spring live》一书的作者。


Mike Cannon-Brookes

OpenSymphony及Atlassian的开发者,《Java Open Source programing》一书的作者。

P



Pat Lightbody

Webwork的开发者。


Patrick Linskey

JDO活跃人士,JDO2.0,EJB3.0专家组成员。

R



Rick Ross

Javalobby公司创建人。


Rickard Oberg

Xdoclet及Webwork的开发者,Jboss的前架构师,目前主要研究AOP。Oberg是瑞典Java编程竞赛“Software Reuse Cafe”的两度折桂者,这使得他成为瑞典最好的Java程序员之一。


Robin Roos

JDO2.0活跃人士,《Java Data Object》一书的作者。


Rod Johnson

Rod Johnson在2002年出版了一本非常畅销的J2EE书籍《Expert One-on-One J2EE Design and Development》,阐述了J2EE开发的方方面面的经验和设计,同时他根据本书的思路,开发了SpringFramework。如今SpringFramework是最流行的轻量级Java IoC容器。Rod本人也是Servlet2.4和JDO2.0专家委员会成员,他同时也是一位经验丰富的技术咨询专家。Rod开了一家咨询公司,提供SpringFramework的技术支持和培训。Rod Johnson也是反EJB方面一个代表人物,他创建的Spring的最终目标是取代EJB。

S



Scott Ambler

Scott W. Ambler是Ronin International的总裁,该公司是一家专门提供面向对象过程指导、体系结构建模和Enterprise JavaBean(EJB)开发的咨询企业。他自己著作了或者与其他人合著了几本有关面向对象开发的书籍,包括最近出版的《The Object Primer 2nd Edition》。可以通过scott.ambler@ronin-intl.com与他联系,他的网站位于www.ambysoft.com。


Sergey Dmitriev

Jetbrains公司CEO,Intelij IDEA的开发者。Sergey Dmitriev认为,我们今天把领域问题映射成通用编程语言如Java、C#,就像把C语言用汇编代码表达出来一样如在石器时代。所以我们需要可以随意制造贴近问题域的DSL。

T


Ted Neward

Ted Neward是Manning出版社元老级的作者,Manning最早出版的书正是Ted Neward的《Core OWL》与《Advanced OWL》(一本入门,一本进阶)。有趣的是,当Ted Neward的OWL这两本书快出版时,Borland居然宣布停止开发OWL。Ted Neward花了这么多心血,居然换来这样的结果。OWL本来市场就很小,又被Borland宣布死刑,Ted Neward的这两本书卖得奇惨。后来,Ted Neward转向Java,在Manning出版了一本很受好评的《Effective Enterprise Java》。接着,Ted Neward开始和O’Reilly合作,出版了好几本与他人合著的.NET书,包括了《C# in a Nutshell》、《VB.NET Core Classes in a Nutshell》、《C# Language Packet Reference》、《Shared Source CLI Essentials》。其中,《Shared Source CLI Essentials》一书是剖析Rotor的第一本书,2003年三月底出版。

V



Vincent Massol

Vincent Massol是Jakarta Cactus测试框架的创建者,也是Maven和MockObjects开发团队的活跃参与者。他是Pivolis的CTO,还是一位敏捷软件开发专家。《Junit in action》一书的作者。

RSS自动发现

In semanticweb on 4月 17, 2005 at 1:53 下午

如果你的Blog提供了RSS源

More on RSS discovery

用RSS来整合内容以满足不同的需要

jBpm2中的sample分析

In java on 4月 10, 2005 at 2:08 下午

jBpm的文档不是很多,所以真正开始coding的时候就想起来“书到用时放恨少”这句话了。前面大概看了一下jBpm2自带的那个请求加薪的例子,感觉写的实在不是一个好例子。因为既然是一个样例,就应该写的清晰易懂,这样初学者看起来才能够迅速上手,结果就那个例子我就分析了几个小时才大概看清一个头绪。这里稍微总结一部分,主要是关于其中的表单定义的。

从用户的观点来看,很希望工作流管理系统能够提供表单的定制,最起码我感觉这个对于开发人员来说是很贴心的一项功能,当然相对与工作流引擎来说,这可能不是那么核心的一个问题。在jPdl中甚至没有包括对于应用的接口的参数或者表单参数的这种定义的能力,感觉XPDL在这方面要强大很多(不过似乎jBpm3要支持BPEL了,那时候肯定这方面的能力会得到加强)。由于jPdl中没有关于这些表单的参数定义,开发人员就要自己在其他的地方定义这些参数。在jBpm2的样例中,它是定义在forms.xml这个文件中的。

<forms>

<form>
<file>forms/request.form</file>
<state-name>request a payraise</state-name>
<task-name>request a pay raise</task-name>
<variable name=”reason” />
<variable name=”amount.asked” format=”org.jbpm.web.formgen.format.DoubleFormat” />
</form>

<form>
<file>forms/evaluating.form</file>
<state-name>evaluating</state-name>
<task-name>evaluate a pay raise</task-name>
<variable name=”requester” />
<variable name=”reason” />
<variable name=”amount.asked” format=”org.jbpm.web.formgen.format.DoubleFormat” />
<variable name=”amount.granted” format=”org.jbpm.web.formgen.format.DoubleFormat” />
<submitbutton value=”Approve Pay Raise” transition-name=”approve” />
<submitbutton value=”Disapprove Pay Raise” transition-name=”disapprove” />
</form>

<form>
<file>forms/treat.form</file>
<state-name>treating collegues on cake and pie</state-name>
<task-name>treat collegues</task-name>
</form>

<form>
<file>forms/update.erp.form</file>
<state-name>updating erp asynchronously</state-name>
<task-name>update the erp system</task-name>
<variable name=”requester” />
<variable name=”amount.granted” format=”org.jbpm.web.formgen.format.DoubleFormat” />
</form>

</forms>

在这个表单定义文件中,定义了所有表单的信息,包括表单对应的html显示、表单在流程中的哪个状态使用、表单的action、以及表单中使用的参数。

这个表单定义文件的使用主要有以下几步:

(1)在HomeAction中,调用Form类的静态方法initialiseForms对可能用到的表单信息进行初始化,这其中包括了:1. 用户当前正在进行的这一工作流定义的表单 2.所有的最新版本的工作流定义需要的表单

(2)在initialiseForm方法中,读取forms.xml这一定义文件,并实例化新的Form对象,在Form类的构造函数中解析这一xml文件的各个元素,并调用initializeSubmitButtons方法将button和解析出的变迁建立map,调用initializeVariableFormats方法将变量与变量类型建立map。

(3)循环将该流程中所有的状态名与解析完成的form实例建立map,而后将该流程id与前面建立的map再建立map allForms(静态成员变量)

(4)在其他的Actionz中通过Form类的方法getForm访问allForms map以得到各个表单中的参数信息

Workflow Patterns

In programming on 4月 4, 2005 at 4:24 上午

网上找资料的时候发现了这个网站www.workflowpatterns.com,对工作流模式进行了很详细的介绍,很帅的是对于很多工作流模式都有动画演示,十分通俗易懂.

Welcome to www.workflowpatterns.com the workflow patterns page. This site serves as a repository for workflow modeling patterns. These patterns can be used to examine the expressive power of a workflow server that you intend to work with or they can serve as a set of ideas how to implement given business requirements having some workflow server already deployed in your organization.

jBpm中的泳道

In javaprogramming on 4月 3, 2005 at 1:09 下午

在jBpm的邮件列表上的一些关于jBpm泳道的信息:
2 posible transitions for 2 different roles

Hello,
i’m reading the docs but i can’t see if, being in 1 state and having 2 possible actions (transitions to make), it’s possible to be performed by 2 different roles.
For example :
<state name=”evaluating”>
<transition name=”approve” to=”fork”/>
<transition name=”disapprove” to=”done”/>
</state>
The approve transition can be made by role 1 (swimlane) and the disapprove transition can be made only by another role(swimlane).

Can i do that?… Or how can i represent that scenario..

Thanks a lot.

You are right, it can’t. A state is acted on by one role. (think in states, not in activities!!!!)

You can ofcourse write your own gui and have additional roles there and only allow one actor to submit one transition and vise versa, but that is not what you (and I) want.

Can you explain a little What do you want to achieve? The first to act wins? IF I know a little more detail, I can maybe give you a good answer.

Ronald

jbpm does not do authentication. this should be done by the environment. (e.g. the webapplication environment or the ejb environment).

in one of the previous versions, we had the most generic organisation module possible. turned out not te be generic enough. so we eliminated any dependency from within the jbpm code. Your organisation model should only be used from within your AssignmentHandler implementations. jBPM only stores references to actors as text so they can represent people, groups or systems in your context.

regards, tom.

from one state to two different swimlane ?

Hi,
I have a use case:
– a user can submit a request
– a user can cancel a request
– a manager can approve/reject a request

So I think I need to define two swimlanes, one for requester, and one for manager. However, I donot know how to transition from ‘evaluating’ state to two states which are for different swimlanes:
<!– START-STATE –>
<start-state name=”request”
swimlane=”requester”>
<transition to=”evaluating”/>
</start-state>

<!– NODES –>
<state name=”evaluating”>
<assignment swimlane=”owner” />
<transition name=”approve” to=”done”/>
<transition name=”reject” to=”done”/>
</state>

How do I define the ‘cancel’ state for the requester ? thanks
li xin

How to assign swimlanes properly?

Thanks for your replies…

I used the following state definition:

<state name=”life”>
<assignment swimlane=”human” authentication=”verify” />
<transition to=”death” />
</state>

The test code:

try {
executionService.endOfState(token.getId());
fail(“Task is closed by unauthorized user.”);
} catch (ExecutionException e) {
e.printStackTrace();
}

Now the code passed the test.

As much as I understand from the documentation and your replies, authentication is not part of the primary responsibilities of Jbpm. But we should use getTaskList method in order to assign the tasks to the correct user.

openExecutionService(actorId) method mislead me. I thought that executionService is bound to the actorId. Thus it is responsible of authentication of the endOfState method. However the actorId parameter is passed to the executionService for logging purposes. Thus it is optional.

Thank you very much for your help…

Best regards,

Mert Nuhoglu