Archive for the ‘IBM’ Category

Web 2.0及未来

Saturday, October 18th, 2008

这个星期我在北京参加了IBM中国开发中心创新开放日(暨北京开发中心环宇大厦的启用仪式)。15日下午,我和同事一起做了”Web 2.0及未来“的报告和演示,概要的介绍了IBM(主要是Lotus)在Web 2.0方面所做的工作、战略前瞻和趋势。其中用了40分钟的时间给参加会议的来宾演示了一个整合了绝大多数Lotus产品的一个应用范例 – 这个21分钟的演示是北京、上海Lotus团队集体协作的成果。该演示中的产品包括Lotus Notes/Domino, Sametime, Quickr, Connections, Mashup, Symphony和Portal,应用场景则包含了协作、文档、流程、社区、集成等。

有兴趣的朋友可以在此下载此演示文档(不包括demo):Web 2.0及未来

请下载安装Lotus Symphony以打开此文件。

多谢北京各位同事对我的招待,净吃白食了 🙂

奥运同事

Wednesday, September 10th, 2008

北京奥运会女子马拉松第33名,Lisa Weightman,IBM澳大利亚分公司员工。

http://www.athletics.com.au/fanzone/athleteprofiles/lisa_weightman

新书:全球化软件开发最佳实践

Monday, September 8th, 2008

全球化软件开发最佳实践》一书是IBM软件开发中心上海全球化团队的集体之作。在来Lotus项目组之前,我曾在该集体工作过三年,这本书的确是大伙多年在软件全球化上积累的成果总结,里面引用到的几个例子项目现在还历历在目。

自去年开始,在负责开发Connections Blogs的同时,我担任了Lotus Connections 2.0的globalization architect,负责产品的全球化支持。过去做全球化项目的经验,对我担任该角色起了很大帮助。书中提到的内容,基本都在产品开发中涉及到了。

有关软件国际化、本地化的技术书籍不多,有中文版的除了这本外,还有这本稍微老一点的《国际化软件开发》。

在此祝贺诸位老友的大作问世。

阶段性升级

Saturday, September 6th, 2008

这周我把Symphony升级到1.1;Sametime升级到8.0.1,然后装了新的浏览器。对于Notes,刚发布的8.0.2版本在如下方面有了提高:内存使用量减少20%,内置MS Office 2007文件阅读器;支持iPhone。这是Notes 8.0.2的性能比较表

下次Notes升级打算直接上8.5了。

ibm.com新社区

Sunday, August 24th, 2008

ibm.com的新社区将基于Lotus Connections,提供博客、书签、活动、人员、社区和利用mashup的整和主页。目前Connections提供的这6个服务已经部署上去,ibm.com在其上做了UI和功能上的定制。

目前该服务还没有正式推出,不过可以从下面几个URL窥探一下基于社会软件的新社区:

https://www.ibm.com/homepage

https://www.ibm.com/profiles

https://www.ibm.com/communities

https://www-951.ibm.com/blogs

https://www.ibm.com/dogear

https://www.ibm.com/activities 

Lotus Connections 2.0发布

Wednesday, June 18th, 2008

在经历了6个月的辛勤工作后,我们的成果Lotus Connections 2.0终于面世了。多语言版(24种语言)将在几周内随即发布。我在Beehive上的签名也该改掉了:-)

2.0的功能与特色,相信很快会有相关文章出来。上周在波士顿的演示会上2.0版得到了非常好的评价。

作为开发者,在抒发了小小的成就感后,立刻就要投入到下个增强版的开发中,相信再过几个月会再给大家来汇报的。

Sahana赈灾管理系统

Monday, May 26th, 2008

今天了解到,由IBM帮助实施定制和部署的赈灾管理系统Sahana在中国民政局捐助中心上线内部测试:http://www.ccdic.org/。CDL的许多同事参与了Sahana的汉化和定制工作,短短几天内组成了开发团队并搭建了开发、测试环境。Bug tracking目前使用的是和Lotus Connections同一套基于Notes的系统。

本人没有直接参与到项目的开发工作,今天利用一些空闲时间试用了一下Sahana系统,同时开了3个bug。 Sahana的基础软件很简单,都是开源系统,它本身是一个基于Web的系统,界面平实简单,导航一目了然。根据文档描述,Sahana可以放在USB闪盘中运行,很适合各种条件下的使用。

毛新生的博客上,有关于这个系统更多的信息和细节。

Sahana汉化版截图:

sahana

Lotus Connections 2.0 Beta

Friday, March 14th, 2008

经过5个多月的努力,Lotus Connections 2.0 Beta版已经出炉。这段时间本人博客销声匿迹,全拜它所赐。

距离正式发布还有几个月,要抓紧时间,只争朝夕。

全球化在IBM并非浪得虚名

Friday, March 14th, 2008

这是三月份《商业周刊》中文版专栏文章“管理全球劳动力”里的一篇。这篇文章主要以巴西为背景,罗列了IBM最近在全球化上一系列举措。其中一张插图是在IBM中国开发中心,我的二线老板和北京Lotus Symphony团队部分成员的合影(不得不说,照片上后面四位同事表演的成分是重了点儿,哈哈)。

文章里还提到了IBM的内部社交网络Beehive和SmallBlue,用来解决全球沟通的挑战。Lotus在上海的团队参与了SmallBlue的开发工作,成功帮助SmallBlue孵化成为IBM Atlas for Lotus Connections.

Lotus Connections的安全性

Saturday, November 17th, 2007

Lotus Connections的安全性包括以下几个方面:

1. 传输层安全。Connections在用户登录时强制采用SSL,用户也可以修改配置实现整个应用的SSL保护。上周我们根据一个国外客户的需求,通过定制web.xml和HTTP Server的rewriterule实现了Web访问的强制SSL保护和feed内容的强制basic authentication。

2. 认证安全。Connections的认证包括form based authentication(j_security_check)和basic authentication。前者是在使用浏览器访问5个模块的时候用户认证方式,后者是feed reader使用的。在Connections 1.0.2中,强制要求feed reader在做post等写操作的时候使用basic authentication over SSL,其他读feed的操作无需认证。

3. 第三方安全产品的支持。1.0.2增加了对Tivoli Access Manager (TAM)的支持。看似和应用无关的安全支持实际上影响了不少的代码。而为了支持AJAX, JSON等调用,TAM的配置也是很不同。举例来讲,我们尝试过的一个TAM配置会在返回的页面的末尾添加一段JS代码,这会break我们的JSON调用,必须用其他配置形式绕过。

4. 对Web内容的过滤。Connections使用了ACF对用户提交内容进行检查,去除掉一些会危害Web访问安全的代码,如Cross-site scripting (XSS)。Blogs还会根据用户配置对上传的文件进行检测,最大程度上减少XSS的可能性。Activities甚至还提供了对CSRF的防范功能。

天下没有免费的午餐,增加了诸多的安全性机制,会在某种程度上对系统性能产生影响,比如HTTPS相对HTTP会降低约40%的性能(仅在登录是使用可以忽略);ACF的HTML解析的代价。好消息是大部分安全机制都是可以由用户修改配置来enable或者disable,有相当的灵活性。

Connections 1.0.2 edge server配置

Wednesday, November 14th, 2007

这几天在帮助Connections的客户配置edge reverse proxy,下面是目前使用到的全部配置列表(安装了Blogs,dogear和Activities):

ServerInit C:\Progra~1\IBM\edge\cp\lib\plugins\mod_rewrite\mod_rw.dll:modrw_init Transmogrifier

Transmogrifier C:\Progra~1\IBM\edge\cp\lib\plugins\mod_rewrite\mod_rw.dll:modrw_open:modrw_write:modrw_close:modrw_error

SSLEnable On

SendRevProxyName yes

Enable PUT
Enable DELETE

Map /blogs/* /connections/blogs/*
Map /dogear/* /connections/dogear/*
Map /activities/* /connections/activities/*

JunctionRewrite on

Proxy /connections/* http://wasserver/* :80
Proxy /connections/* https://wasserver/*:443

ReversePass http://wasserver/* http://myserver.com/connections/*
ReversePass https://wasserver/* https://myserver.com/connections/*

JunctionReplaceUrlPrefix http://wasserver/* http://myserver.com/connections/*
JunctionReplaceUrlPrefix https://wasserver/* https://myserver.com/connections/*

MaxContentLengthBuffer 5M

KeyRing C:\Progra~1\IBM\key.kdb

KeyRingStash C:\Progra~1\IBM\key.sth

最后两项的key database文件需要利用ikeyman导入WebSphere for IBM HTTP Server (IHS) plugins的证书以建立edge server和IHS之间的SSL连接。

此文专为搜索引擎供稿。

奔2

Sunday, November 4th, 2007

过去的三个星期,是Lotus Connections 1.0.2和2.0并行开发的三周,一边解bug,一边考虑实现新功能,ClearCase里面两条stream来回切换,不亦乐乎。1.0.2到这个周末算正式结束,进入最终release。1.0.2 Blogs除了修复了从1.0里遗留的30多个bug外,在性能方面也做了诸多调整;另外根据客户反映,恢复了MetaWeblog API的支持(与ATOM API共存)。Connections整体功能方面则支持Tivoli Access Manager,强制的ATOM basic authentication over HTTPS (写入部分,读取依然保持HTTP);增加了AIX平台和MS SQL Server数据库的支持等一系列的改进。

目前正紧锣密鼓开发的Connections 2.0将基于Java 5构建,此前1.0.x基于JDK 1.4,虽然包含了部分1.5的代码,但使用了retroweaver保证这些1.5的代码运行在1.4的VM之上。2.0版的Blogs会在1.0.x基础上增加新的功能,UI方面也会有相当程度的改进与提高,这些工作目前都在紧张的进行中,不久就能看到阶段性成果。

Lotus Connections 1.0.1发布

Friday, August 31st, 2007

Lotus Connections 1.0.1昨日发布,最主要功能是增加了多语言支持,另外的feature见Ted的博客

需要提到一个特别的小插曲,是有关产品名称的翻译问题。在Connections 1.0.1的翻译测试进入尾声的时候,有关Connections中五大模块的翻译问题还在讨论之中。当看到到简体和繁体中文的参考翻译后,我们觉得有必要和翻译中心的同事进行沟通,原因是”Profiles”的中文翻译在简、繁体下分别被翻译成了“概要文件”和“設定檔”。这是因为在其他IBM产品中,“profile”基本上是配置、参数管理的意思,但作为一个产品名的翻译,“概要文件”和“設定檔”没有反映出产品的真实功能。IBM翻译中心使用了translation memory进行语汇管理,以保证产品文档翻译的前后统一,但从产品推广和帮助用户理解的角度出发,这次是有必要做出修改的。

最终我们选择了”人员”和“人員資訊”作为Lotus Connections Profiles的中文翻译。另外,对”feed“的翻译也做了修改,从“馈源”改成了”订阅源“(这个翻译是本人的贡献,呵呵)。而“Dogear”最终保留了原名,其实个人觉得用“共享书签”会更好。

蓝莲花

Monday, August 20th, 2007

上周五(8月17日),IBM正式发布了Lotus Notes/Domino 8.0。至此,从今年4月份至今,IBM Lotus品牌下连续发布了Lotus Sametime 7.5.1, Lotus Connections 1.0, Lotus Quicker 8和Lotus Notes/Domino 8四个重要的产品升级(其中Connections 1.0是全新产品)。

Lotus产品线也启用了一套全新图标,下面是来自Alan Lepofsky (IBM)博客上的Lotus产品logo:

从左到右分别是:Notes, Sametime, Quickr, Connections

成立已满25年的Lotus软件,在融入IBM 12年后其产品线已经随着时代进步发生了多次重大调整。从98年并购Ubique获得Sametime的早期雏形;到实现从Lotus 1-2-3向IBM Productivity Tools的迁移;到进入企业社会软件市场。作为最近10年间产品转型的技术推动力,Web, Java/J2EE, Eclipse等技术和开放标准是促进Lotus产品升级换代的重要因素。

reverse proxy配置中的路径转换问题

Thursday, August 9th, 2007

reverse proxy(逆向代理)一般位于Web应用程序的前端,对用户屏蔽了后台的应用服务器。除了请求转发,动态负载平衡和缓存也是reverse proxy的主要功能。在配置逆向代理的时候,一个普遍存在的问题是URL转换。

比方说有一台应用服务器,它的访问地址是http://appserver:9080/app,该地址并不直接暴露和用户,而是由reverse proxy配置成一个对外可见的URL,如http://revproxy/home/app,它是用户最终在浏览器输入的地址。当reverse proxy收到这个请求后,把它转换成应用服务器地址后,将该请求(连同HTTP request header中的参数)转发给后台的应用服务器;应用服务器返回的内容再经reverse proxy,最后回到用户浏览器。

一个常见的问题是如果应用服务器返回的HTML页面包含了在该应用服务器上有效的绝对或者相对路径时,reverse proxy该如何处理?如果是绝对路径的话,那么用户在点击页面上这个链接的时候就会跳过reverse proxy直接连到应用服务器上;如果是相对路径,如”/app” 的话,那么如果reverse proxy自己的URL前面又填加了新的目录名,如上面提到的“/home”,那么这个URL到用户那里就会成为”http://revproxy/app”,同样也是错误的。

reverse proxy的一个重要功能是地址转换,在WebSphere Edge Components(早先的 Edge Server)里可以通过配置一些地址转换规则来解决这个问题。它的工作原理大致是这样:在reverse proxy收到从应用服务器返回的HTML内容后,对其进行内容扫描,如果发现如”href”, “src” 等之类包含URL链接的标签时,根据预先设定的规则把它们替换成对外可用的地址。这样原来页面中的绝对、相对地址经转换后成为最终用户可以访问的地址。需要注意的是,reverse proxy对HTML的扫描是有一定限制的,如果这个绝对或者相对的URL是嵌入的JavaScript里,通过在浏览器端解释动态生成,或者存在于其他一些非链接性质的标签中,reverse proxy是没有办法对这些URL进行转换的。这样漏网的URL将直接暴露给用户。

解决页面中无法被翻译的绝对地址,似乎必须要修改应用程序;而对于无法被翻译的相对地址,可以在reverse proxy通过URL映射来解决。URL映射的原理是当reverse proxy接收到来自用户的HTTP 请求后,如果该URL满足预先定义的模式,则进行替换。比如在WebSphere Edge Components 中可以设定如下的地址转换规则:

Map /app/* /home/app/*。

如此一来,URL地址的转换问题基本得到解决。现在,还剩下两个问题需要考虑:

1. 当后台的应用服务器通过HTTP 301/302进行地址重定向的时候,reverse proxy必须也对该地址进行翻译。在edge中,可以使用下面的命令实现:

ReversePass http://appserver:9080/app/* http://revproxy/home/app/*

2. Cookie的作用域

当用户在应用服务器上登录后,往往会得到一个或多个cookie。在J2EE环境下,服务器端的session变量会产生一个名为”JSESSIONID“的cookie变量送给浏览器,同时指定该变量的作用域,如”path=/”或者”path=/app”。如果是前者那样的根目录,则没有问题,但如果是后者的话,如果reverse proxy原封不动的将该cookie值转发给用户浏览器的话,那么当用户再次发出如”/home/app”,这样的URL请求时,此cookie是不会放在HTTP请求头部中的,因为这个请求的作用域是“/home”,而不是”/app”。cookie作用域失效往往表现为用户的”伪登录“,即在后台服务器上已经登录但通过reverse proxy的话还是出现无法正常登录的情况。

在edge components里,可以使用下面的配置方案解决cookie作用域修改问题:

JunctionRewriteSetCookiePath /app/* /home/app/*

不过由于WebSphere Edge Components 6.1里的一个bug,该功能存在故障,需要获取指定的补丁更新方可使用。

另外,在应用服务器这端,如果可以指定cookie的path永远为根目录,会减少很多麻烦(在Lotus Connections 1.0/1.0.1里,cookie的path为根目录”path=/”以实现多个功能模块的单点登录SSO)。我在Tomcat下测试时发现,Tomcat生成JSESSIONID时,缺省的path就是当前webapp的context root,而不是根目录。如要强行指定Tomcat生成的cookie的path,需要在其”server.xml”配置文件中的”Connector“段中加入‘ emptySessionPath=”true” ’。

有关reverse proxy,如edge components中还有很多复杂的问题这里尚未涉及,如SSL连接、证书等网络安全相关配置。希望此文可以给reverse proxy,尤其是IBM WebSphere Edge Components的用户一点帮助。

PS:有关edge 6.1的配置,目前最完整的官方文档在此

Redbooks: WebSphere Application Server V6.1: Classloader Problem Determination

Tuesday, July 24th, 2007

这本昨天发布的红皮书在我最近的阅读列表中。Container环境下的classloading是无数诡异问题的根源。以Lotus Connections 1.0.1来说,我们用了icu4j来提供一个时区列表,icu4j本身自带了这些列表的翻译,比JRE自带的要全。但在测试的时候发现WAS 6.1.0.3下的时区列表繁体中文的显示有问题,混入了大量简体中文字符。其原因在于WAS自带了一份icu4j并且早于webapp下的lib被container加载,而这份icu4j自带的时区翻译存在问题。

对于长期从事WAS应用开发的IT工作者,这是本必读书。

projectzero.org

Tuesday, July 3rd, 2007

projectzero.org是IBM在Radical Simplification驱动下最重要的一个项目,旨在提供一个简化、高效的运行时和Web开发框架。在过去的一、两年中一直处于内部开发状态,近日对外开放给公众。

曾经看过北京CDL开发的mashup zero的一个demo,使用Web IDE构建mashup  widget并生成XML fragment供runtime对多个数据源进行获取和内容整合。

关系

Wednesday, June 27th, 2007

Greater IBM是IBM最新发布的(由xing.com提供服务),供现任IBM职员、已离职员工、退休员工、实习生等建立关系网的场所。关系是个好东西,尤其当我们需要的时候。

再过一天,Lotus Connections 1.0就要正式发布了,最近一周出台的Greater IBM和Web 2.0 Goes to Work为Lotus Connections的发布做足了铺垫。

部落格

Friday, June 22nd, 2007

下午在对Blogs新收到的语言包进行压缩、编码转换并用CHKPII工具检测后(PII是IBM专用词汇,即Program Integration Information的缩写,意指需要和程序一起build的语言资源,不包括帮助文件等),放到local build里跑了一圈,验证一下Group 1里面9种语言的显示界面。在切换到繁体中文的时候,看到了“部落格”。

这是台湾对“blog”的翻译,挺生动,让我联想到了“四四格”。

从上面的截图看,Blogs多语言的支持除了语言包外,还有不少细节需要处理,如上面那个“18 5月”的格式化问题。

Telelogic goes to IBM Rational

Monday, June 11th, 2007

我对Telelogic的了解来自《程序员》杂志里的广告和专栏文章,虽然我从来没用过Telelogic的产品。

这次并购是ALM市场的一次小规模洗牌,Rational + Telelogic,又要让一堆人忙活了。