Archive for July, 2006

city8更新

Saturday, July 29th, 2006

早上收到City8的回信,确认网站响应速度问题已得到解决。试了一下,果然快了很多,我搜了一下蓝村路,实景图的效果的确不错。

现在特别想知道city8如何进行数据采集,是不是像我在上个帖子说的,一帮人带着DC骑着助动车在上海大街小巷游走,每个人和直销公司一样划分一块负责的地域范围,然后拉网式拍摄?因为要把地图信息和照片映射起来,在拍照的时候还必须记录下当前地点的位置信息(如经纬度),然后才能按比例还原到电子地图上。莫不是带个GPS,每拍一张测一下,小本子里记录一下。(如果有带GPS的DC多好,拍的时候自动把位置信息叠加到照片上)。

Seaman如果有空的话,看能不能回一下,满足一下大家的好奇心:-)

另外,听同事说最近看到有人在公交站牌下拍照(公交线路),我第一反应就是又会有交通地图导航类网站诞生了。

附:蓝村路、杨高南路端实景图


手机定位

Thursday, July 27th, 2006

把严守一吓得一身冷汗的手机定位,现在已经完全可用了。大概1年前我试用过上海移动的手机定位,用短信就能知道当前位置和附近信息,当时玩过一、两次后就再也没碰过了。

晚上偶然发现这个手机定位网, 才知道移动已经把这个业务做的很完善了,包括我最感兴趣、也是最怀疑的隐私问题:我能定位陌生人吗?这个问题也有了明确的答案。这个网页列举出了有关手机定位的所需的所有信息,包括如何通过短信加好友列表(by default, 所有用户都被110加了好友^-^),允许好友们定位自己;如何取消授权、收费等等。

手机定位 + 地图服务“蕴藏着多少机会,不用多说了。举个例子,家人出去逛街,找不到某个专卖店。我可以在电子地图上立刻定位到家人的位置,于是在地图一个小人出现了。之后我沿着地图看,找到了那家专卖店(比如可以利用实景地图city8),用鼠标把家人的头像(可以集成IM服务,通过双击头像发MSN/QQ消息,对方手机接收)拖放到目的地。当然,这时候不会从天而降一个大手把人拖走,而是家人手机上出现完整路线导航信息(根据我的鼠标拖放自动生成)。

Command & Conquer式的控制 – 通过地图服务、无线定位、实时消息,从而达到辅助操作物理环境下实体移动的应用,会慢慢涌现出来。

站在大街上的人,觉得总有一千双眼睛在天上盯着自己 – 这算killer app吗,算蓝海吗,还是3.0? 对了,还忘记了交通协管员帽子上带3G的网络摄像头…

IBM修订软件定价策略

Wednesday, July 26th, 2006

我经常是在外网而不是公司内网了解到公司的最新消息,下面就是一则。

中文摘要:本周二,IBM公布新的软件定价策略,将根据CPU性能等方面对处理器进行评分,然后根据分数大小决定产品价格。CPU分值越高,价格越贵,反之越便宜。与软件行业常用的每处理器(per-processor)相比,新策略希望能合理的解决如Dual-core和虚拟机的问题。

新闻链接:http://news.yahoo.com/s/cmp/20060726/tc_cmp/191200389

Drive to achieve

Wednesday, July 26th, 2006

“Drive to achieve”是IBM fundamental competency的内容之一。核心思想是做很多事情(尤其是你希望发生的事情)都需要主动的推动才可能促使它发生并诱导结果向预期的目标发展,我把它比喻成“好男儿,站出来“。

Drive to archive的人,在其他人都带着钢盔躲避流弹顺手打冷枪的时候,会掀掉众人头盔,剥掉大伙的防弹衣,把人从壕沟里拽出来,“看准喽、瞄准开枪” ;当同伴中招的时候,也得振臂一挥,人手抓子弹。

不少事情的确像一个球,没有外力不动弹;稍微用点力,晃一下;使大力气,动起来停都停不下。

n-tier应用的profiling

Monday, July 24th, 2006

近来在分析一个三层架构Web应用的性能问题。由于应用响应速度慢,需要分析出耗时的瓶颈到达在哪里,所以在数据库起了监控服务、在Application server写了log、甚至还分析了HTTP server的log。因为性能瓶颈可能出现在1)浏览器到Application Server的网络连接;2)Application server的用户代码;3)Application server到数据库服务器的网络连接;4)数据库服务器上运行的SQL和各种存储过程、触发器等。

很需要一个工具可以简单的从浏览器发出请求后,一路钻到web server,application server和database server里面,看看分别在各处消耗了多少时间,在路上花了多少时间,并且能图示化的显示请求和响应一来一回的profiling的全过程。

在不插入定制代码的情况下,要实现这样的功能难度很大。在DB这端可以在JDBC上加层wrapper捕获对数据库的请求;在application server这端可以在container级别捕捉到对DB的请求,然后分别记录并跟踪。“捕捉”似乎有些AOP的意思,如果对资源的访问都可以映射到有限的API上的话,AOP应该是个合理的解决方法。

如果有人知道有这样的整合式profilier,能免去那些debug的”System.out”和在应用、数据库服务器各处设置的绊马索,就太好了。

不喜欢的两则电影广告

Sunday, July 23rd, 2006

这里“电影广告”其实指的是在电影开演前放的广告。因为我几乎不去除柯达影城以外的电影院(手里长年有公司的优惠券),对那里的电影广告算是很熟悉的。

第一个是雀巢,一个小姑娘拿着丁字尺在图书馆跳舞。我也说不出为什么不喜欢这则广告,背景音乐算一个因素(说不出的烦躁),更主要的是这个广告实在太老了;

第二个是柯达。这则广告对我来说基本上算是扰民,“叮叮咚咚”的背景音乐,大红大绿的快速切换,还有那个在外滩涂满颜料的家伙。我简直想要按手里的遥控器了(如果有的话)。

这两个祖母级的广告长期盘踞在柯达影城,不过为了能看优惠电影,咬咬牙,能挺过去。

最近,我最喜欢的广告是“第一财经”的形象广告,精致的一塌糊涂,尤其是那个裁缝、司机、空乘一层套一层的广告,可称完美。

收编sysinterals

Wednesday, July 19th, 2006

微软收购Wintenals后没多久,大家都意识到由Winternals支持的Sysinternals的免费工具软件可能会出现某种变化,纷纷开始了全民大下载行动。我刚试了一下,结果:

HTTP Error 500-13 – Server too busy
Internet Information Services

Sysinternals上的工具都属于瑞士军刀级别的,我一直用它的TCPView和ProcessView,尤其是TCPView几乎是每次排查网络问题的必用工具。商业的Winternals工具可以和Virtual Server合并成微软环境下的基础设施软件包;免费的Sysinternals工具可以并入Vista Resource Kits或者是网上需Genuine Windows认证的免费下载。

开源或者免费软件经收编或其他商业活动,导致产品性质改变的例子一把一把。 著名的VNC, Berkeley DB都是先放再收,要么就是多版本并行开发。不管怎样,至少这些软件项目的孵化已经取得了成功。

city8

Monday, July 17th, 2006

现在的新兴互联网公司,被技术问题卡住壳的,应该不多了。今天刚开张的city8似乎就出了点小问题。

必须承认city8的想法很好,你有卫星高科技,我有廉价劳动力单车DC族环游上海玩实拍。3D实景地图搜索,比那个3D仿真地图更近了一步。不过速度慢的出奇的Java applet让这个地图几乎无法使用,而Firefox显然也不在设计者的考虑之内。

幻想一一实现,什么时候可以24小时实时网络现场直播全上海的角角落落(让每个交通协管员帽子上戴个摄像头,上GPRS/CDMA/3G网络和移动电信分成?)

折腾人的.flv视频

Saturday, July 15th, 2006

近期.flv格式的视频文件忽然多了起来,热门视频分享网站6roomsyoutubeGoogle video等都在使用这种格式提供在线视频播放服务。我没看出.flv有特别多的优点,对播客网站来说就是增加了用户下载的难度,把老百姓之间的私下共享尽早的扼杀在摇篮中。

前两天为了从Google Video下载一个”The Science and Art of User Experience at Google“的视频,在研读了网上最佳实践后折腾了半天才当下来。即使下载到本地,因为.flv格式的文件无法拖放到浏览器内嵌的Flash Player播放,所以用户还必须下载Flv的播放器…

好了,是需要更简便方法的时候了。为了更多受众,还是分享一下在IE里下载在线播放.flv视频的下载方法。

1. 下载ieHTTPHeaders软件。这是一个IE插件,可以记录当前浏览器和服务器的全部对话内容。安装后,在IE“查看”->”浏览器栏”里可以看到”ieHTTPHeaders v1.6″的选项,选中后IE底部出现监控窗口;

2. 正常使用IE时,可以在下面窗口看到动态的HTTP request和response。一旦看到IE里.flv视频文件加载完成,就可以把监控窗口中的内容copy到记事本里然后搜索”.flv”就能找到这段视频文件真正的URL地址了(需要和当前浏览器URL地址拼接成绝对URL地址)。

下图是IE在播放6rooms里“中国队勇夺世界杯冠军”.flv视频时捕获到的URL地址:

CSDN论坛stylesheet的路径问题

Saturday, July 15th, 2006

FF访问CSDN论坛遇到困难,XML数据无法被render(见下图)。IE访问一切正常。

View source后看到XML中对XSLT的引用是这样写的:href=’/expert/Xsl/2.xsl’

FF无法正确解释相对URL,IE则没问题。把两个文件下载到本地,修改href为绝对地址FF正确render出XML。

用FF访问CSDN的人按说很多啊,怎么就没修复呢?

PS: 现在美女作家都已经渗透到程序员的队伍中了(一直听说孙卫琴的名字,以为是个阿姨呢)

http://www.dearbook.com.cn/2006/javaobjectcoding/index.htm

推荐一个Open Source/Harmony/Java相关的博客

Saturday, July 15th, 2006

我的同事杨普在CSDN上的博客:http://blog.csdn.net/paulex/ 。里面IBM Java相关分类被aggregate到在CSDN IBM专家群中。

Paulex,你的URL已经加在我的”圈子Link”中了:-)

Alcatel-Lucent Shanghai Bell Co,.Ltd

Friday, July 14th, 2006

这可能是阿尔卡特与朗讯合并后上海贝尔-阿尔卡特有限公司的新英文名称:Alcatel-Lucent Shanghai Bell Co,.Ltd. 名字长了一点。

说到公司名称长度,想到好几年前的一个故事(未经证实),有人研究了Windows 3.1的安装文件,确认如果微软把自己的名称从Microsoft改成Mic,Windows 3.1所需要的11张1.44寸软盘可以减少到10张,就是说有1兆的数据都是公司名称字符串在各种程序文件、帮助文件等的不停重复产生的 – 听上去很夸张。

再由上说到程序容量,Windows 3.1 20MB不到,而现在腾讯QQ的安装文件都有超20MB了,什么IM、聊天室、浏览器、邮件客户端、工具栏插件,能装的都很它都给装进来,你别嫌多,还都一分钱没要呢。

说到钱,我上个月创了小记录,单月手机花费低于20元,刚刚16块出头。 自从动感地带以后,很少要过3位数的月手机费了,语音业务的确是越来越便宜了 - 感谢大、小灵通、感谢skype、感谢互联网。

拨号上网

Thursday, July 13th, 2006

家里的FTTB宽带出了故障,上不了网了。还不知道问题出在哪里,99%是小区线路问题。

好在电话也能上网,刚想拨16300的上海热线,忽然想到公司VPN拨号器除宽带外也支持拨号网络的。于是在选项里找到了IBM上海地区电话号码,拨过去认证、连通,公网、内网都能上了(速度很慢)。

生了病,睡个觉早上起来往往有质变(病好了或者加重了);网断了不能再坏了,所以希望明天早上网络恢复正常。

CSDN IBM专家群

Tuesday, July 11th, 2006

今天看到自己的blog已经出现在CSDL IBM专家群博客中了。昨天提交的URL,今天就有了更新,CSDN的响应速度很快。

“专家群”这个词太有威慑力了,很吓人,我自己都有点被吓倒了。希望访问者别因为这个名头有所保留,把这个小团体想象成“QQ群”,楼主和火星人就好了。

IBM的人都很nice,在这里借CSDN一方宝地和开发者、技术人员进行双向交流,彼此沟通、促进发展,是很有益的事情。希望自己能贡献微薄的力量(傅群主要多照顾照顾了:-)。

博客网(bokee/blogchina)至WordPress搬家攻略

Monday, July 10th, 2006

摘要

Web内容集成曾经是最困难的工作之一,感谢XML/Web services,在Web 2.0的时代终于可以比较容易的实现了。目前绝大部分blog系统都支持两种方式的内容输入:标准的基于Web的方式,即用户登录、发贴;另外就是通过API利用客户端软件发贴。这两种方式可以简单的想象成WebMail和基于SMTP邮件客户端。本文实现了基于半结构化内容抽取和异构XML目标数据的集成。

实现方法

现在常用的Blog API有Blogger API, MetaWeblog API, Movable Type API等,这些API都采用了XML-RPC进行数据包装和传输。 blogchina.com目前仅支持早期的Blogger API 1.0(而且是部分支持),而WP同时支持这三种API。

为了把http://zhangling.blogchina.com 里过去两年的文章完整的搬到新系统中,我首先尝试了用Blogger API去读取blogchina里的文章,但碰到了问题。

用Java开发,我用了Apache的XML-RPC包。经尝试,发现blogchina仅支持blogger.getUserInfoblogger.getTemplateblogger.getUsersBlogs等几个有限的方法,对于关键的抽取文章内容的函数则完全不支持。这意味着所有的内容无法通过编程的方法获得,工作量一下上升了很多。

于是我在浏览器分别打开04-06年的文章列表,用下载工具将页面里所有博客文章进行批量下载(还好这个过程的工作量不是很大),然后在本地磁盘上根据年份和文章分类建立多层子目录,把对应的文章放在不同目录下面。现在的问题变成如何从HTML页面中把文章标题、内容、发贴日期和评论分别抽取出来作为XML-RPC参数发送给WP系统自动建立新文章。仔细研究了这些HTML文件,发现它们都具有相同的结构和布局,仅仅是内容上的变化,其他如布局和风格几乎完全一样。接下来就需要分析HTML代码找到文章标题、内容、日期、评论部分的特征标签以进行内容抽取。比如就标题来讲,所有的标题前都有”diaryTitle”标签;所有发贴日期都符合正则表达式”年\\S*月\\S*日.*星期\\S\\s\\d\\d:\\d\\d”,等等这些信息都对内容的正确提取提供了保证。

根据分析得到的特征标签,写了4个Java class(TitleExtractor, ContentExtractor, DateExtractor和CommentExtractor) 。对300多篇文章进行测试,抽取成功率100%(当然还写了一些字符串处理函数解决一些有变数的字串)。于是,数据源的问题得到的解决。

花费最多时间的倒是对WP的数据写入部分。我用了MetaWeblogAPI,使用XML-RPC中的XmlRpcClient类,构建好参数列表,测试发现中文出现问题。Java程序送出的XML数据包在WP系统上显示为乱码。经调试确认XML-RPC使用的是UTF-8编码,而WP也是配置成UTF-8。在调试多次失败后,我用Ethereal(已经改名成WireShark)捕获了发出去的HTTP数据包,发现Apache的XML-RPC实现把中文字符进行HTML转义,导致WP无法识别。为了验证,我装了Zoundry并尝试发贴,在捕获的HTTP请求包中,Zoundry把“中文标题”四个汉字编码成“\344\270\255\346\226\207\346\240\207\351\242\230”,而且WP正确的接受并成功显示!接下来,我下载了Apache commons codec包,尝试了里面多个编码器,始终没能成功,不得不考虑使用其他Java实现。

最终我找到了合适的包Redstone XML-RPC,它顺利的把我GB2312编码的文章上传到WP上(需要把WP缺省编码改成GB2312),于是剩下的事情就是一个for循环对目录里的所有文件做一次内容提取、参数组装和网络调用。为了简单,我把评论部分附加在正文末尾(因此可以在新博客老帖子的正文部分里看到很多老系统的影子,如黑色的头像:)

结论

虽然一些商业系统开始提供博客搬家服务(如blogbus和讯),由于可用性的限制要实现完整的系统搬家难度还是非常大(我在blogbus尝试10篇文章的搬家未获得成功)。因此,如果懂软件开发的话,自己写点搬家程序会更容易、更便捷。

参考文献

1. Apache XML-RPC: http://ws.apache.org/xmlrpc/
2. WordPress API: http://codex.wordpress.org/XML-RPC_Support
3. Ethereal Bug 894: http://bugs.ethereal.com/bugzilla/show_bug.cgi?id=894
4. PHP和JAVA的XML-RPC中文问题解决办法: http://fanqiang.chinaunix.net/program/php/2005-09-06/3586.shtml

附录(部分代码)

XmlRpcClient client = null;
try {
client = new XmlRpcClient(new URL(“http://www.zhangling.org/blog/xmlrpc.php”), true);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

for (int i = 0; i < files.length; i++) { try { filename = folder.getAbsoluteFile() + "\\" + files[i]; FileInputStream fileInput = new FileInputStream(filename); InputStreamReader reader = new InputStreamReader(fileInput,"GB2312"); BufferedReader bufferReader = new BufferedReader(reader); while (bufferReader.ready()) { content = content + bufferReader.readLine() + "\n"; } } catch (Exception e) { System.err.println(e); }

title = titleExtractor.getTitle(content);
description = contentExtractor.getContent(content)
+ commentExtractor.getComment(content);
datestring = dateExtractor.getDate(content);
content = “”;

Vector v = new Vector();
v.add(“1”);
v.add(“AAAA”);
v.add(“********”);
Hashtable hashtable = new Hashtable();
hashtable.put(“title”, title);
hashtable.put(“description”, description);
Date date = new Date(datestring);
hashtable.put(“dateCreated”, date);
String category[] = new String[1];
category[0] = “技术”;
hashtable.put(“categories”, category);
v.add(hashtable);
v.add(“true”);
try {
Object result = client.invoke(“metaWeblog.newPost”, v);
System.out.println(“received: ” + result);
} catch (Exception e) {
Logger.writeLog(filename + “:” + e);
System.out.println(e);
}

}

}

本人新博客网站架构简介

Monday, July 10th, 2006

本系统用的是dreamhost的虚拟主机服务(多谢丁峰推荐),20GB空间,支持FTP, Telnet, 可安装WordPress(当前我使用的blog系统)和其他PHP论坛等服务器端软件。服务费是一年90美元,用了网上贴的coupon code后实际第一年费用22美元。

zhangling.org是01年左右我在万网注册的,一直没怎么用,这次博客搬家派上了作用。只需要在万网的国际域名管理中把DNS服务器指向dreamhost的DNS就可以了。

现在的WordPress(WP)系统比博客网的blogdriver提升了一大步,好比Eclipse和Symantec VisualCafe的区别 。作为最流行的blog系统之一,WordPress有众多的插件(我安装了“流量统计”和“最新评论”插件。由于导致IE显示问题,“最新评论”插件尚未激活)和多种API支持。绝大多数blog client对WP都有很好的支持。

在稍微学习了WP的管理之后,更新了一些系统配置和部分页面模板;在sidebar增加了照片、日历、最新文章等内容。

博客网搬家动因

Monday, July 10th, 2006

1. 博客网(bokee.com, blogchina.com)系统不稳定,经常出现无法发贴的情况。写评论会出现多次提交的相同评论内容。最近出现的无法回复英文字符的情况,让人无法接受;

2. 博客网不支持分类的RSS,一个博客只有一个总的RSS。因为需要向CSDN Blog导出部分分类,这直接导致更换系统;

3. 博客网登录后session有效期过短,稍微长一点的帖子需要不停备份到临时打开的notepad里以免丢失;

4. 缺乏内容管理功能。内容易进不易出,提供对外的编程接口极有限。

博客搬家成功

Saturday, July 8th, 2006

自己写了程序,把博客网上(http://zhangling.bokee.com)三百多篇文章搬到了本网站上,老贴的标题、内容、时间、评论和贴图都完整的保存下来。

写Java搬家程序花了1天半,最终的乾坤大挪移花了10分钟。

稍后介绍一下博客搬家的实现方法和技术细节。

IBM System Journal – MDD

Wednesday, July 5th, 2006

即将发布的新一期IBM System Journal (上图外文期刊阅览室有订阅)的一组Model Driven Development的文章:

http://www.research.ibm.com/journal/sjpip.html

毛新生在CSDN上SOA访谈

Saturday, July 1st, 2006

毛新生是我们CDL(中国软件开发中心)SOA设计中心主任,IBM中国本土成长起来的第一位STSM (Senior Technical Staff Member)。我和新生有过不多的聊天,他是一个真正的thinker,视野广阔,思维活跃。

这里是毛新生的博客:http://mxs.blog.ccidnet.com

还有这段CSDN的SOA访谈录像:mms://61.186.252.133/CSDN_Live_13/CSDN_Live_13_A.wmv