Categories
Technology

快速协同编辑

这两天,和早先学校一个实验室的同学准备周末的聚会,几届师兄师弟师妹们难得聚在一起,免不了要整理一份通讯录。于是我们把用Excel做好的空表格拷贝到了Google spreadsheet上,让大家一起在线协同编辑,免去一份.xls文件传来传去,不停整理的麻烦。刚开始用的还不错,多个用户登上去,可以同时修改,还能通过Web进行群聊,但很快就出现了问题:很多收到编辑邀请的同学没有真正获得编辑的权限,只是View only。调研后,发现Google spreadsheet的硬伤:

1. 通过E-Mail邀请别人来共同编写电子表格,接收方必须有Google Account(否则View only也不行),但不必需要有GMail帐户;

2. 接收邀请人的E-Mail地址必须与其Google Account里的电子邮件地址一致。

强制注册是驱赶用户的最佳手段,Google spreadsheet成功的做到了。

快速的在线共享、协同编辑系统(或者说敏捷的),应该可以支持临时的快速文档共享和群体编辑(像百度贴吧一样,弱化用户验证);无状态的在线协作,一群人来了就写,边写边聊,写完就散。整个协同周期可长可短,短的甚至1、2个小时就可以完成,基本不需要注册、登录,一个URL到底。

对于mission不critical,data不sensitive的小圈子,一般的编辑任务完全够用了。

高用户体验的系统,不仅本身要简单、直接,还能成功限制用户思维的扩散,给人一种“可以100%驾驭的优越感” 。

Categories
Technology

JavaScript IDE

Adobe Lab半个多月前放出了JSEclipse(从InterAKT Online收购获得) – 一个基于Eclipse的JavaScript环境,集编辑、代码辅助、语法检查与一体的集成开发环境。我曾在WTP的JavaScript editor上花了一点点时间(扩展过RAD 6的JSEditor),感觉一般般。Firefox有个名字拗口的插件 “Extension Developer Extension”,也提供了JavaScript的开发、测试环境,不过也是半专业的工具,小规模搞搞还行。

哪位达人有这方面经验,推荐一个主流的open source JavaScript IDE吧。

Categories
Technology

YesScript – A Firefox extension to allow blocking JavaScript for web sites SELECTIVELY

YesScript是我写的一个Firefox的扩展,允许用户有选择的屏蔽指定网站的JavaScript功能。虽然在Firefox选项对话框”Content”页面,用户通过选择”Enable JavaScript”打开或关闭JavaScript功能,但这种改变是针对所有网站,而不能选择性的屏蔽。

写YesScript的主要动力来自使用Google时的不便 – 用Firefox在登录Google后进行搜索,在返回的结果页面中,如果点击某个搜索结果的链接,Google会先把请求发送给自己(收集用户的选择偏好),然后再重定向到目的站点。由于在国内访问Google.com的不稳定性,常出现由于Google自身响应速度慢导致链接打开速度慢;实在慢的时候,我一般在搜索页面里面Copy & Paste 搜索结果链接到另外一个tab窗口中打开,跳过Google的用户反馈收集 – 这些都是Google页面中的JavaScript代码造成的。


Fig.1 Redirect URLs

好在Firefox提供了选择性过滤JavaScript的支持,它同时提供了“白名单”和“黑名单”的功能,分别针对指定网址有选择的开放和关闭指定网站的JavaScript功能,但此功能并未开放给用户直接使用。NoScript是一个Firefox插件,它实现了JavaScript“白名单”功能,即仅允许某些网站开启JavaScript功能,其余全部禁止。有关“黑名单”的插件,我在Web上搜了一下,没找到,才决心自己写一个。为了和NoScript的名称相对应,这个插件叫做YesScript 🙂

功能

YesScript是一个很简单的JavaScript“黑名单”插件,它的主要feature有:

  • 添加自定义“黑名单”,屏蔽名单中网站的JavaScript功能;
  • 功能开关,允许打开或者关闭YesScript,以便需要时临时恢复或者关闭JavaScript屏蔽功能;
  • 中、英文界面,根据Firefox语言版本自动切换。
  • 部署了远程更新RDF文件,供Firefox自动发现YesScript新版本并升级。

因为YesScript修改了Firefox的安全策略,所以任何改变,包括增加/删除黑名单上的站点;打开或者关闭YesScript都需要重启Firefox才能生效。

Fig.2 YesScript extension


Fig.3 Manage Blacklist

测试

我在Window XP (Firefox 1.5, 2.0)Ubuntu 6.1.0 (Firefox 2.0)上对YesScript进行了测试,均可正常工作。

考虑到公司知识产权相关规章制度,YesScript无法放到公网上下载,目前仅能开放给内部员工使用。

下载地址(IBM Internal)

YesScript Extension Installation

如有bug或者建议,可直接发mail找我 🙂

Categories
Technology

你有我没有

今天在公司下一个800KB的文件,花了40多分钟。回家上新浪才知道海底光缆断了。这个世界上最不怕断海底光缆的是美国人,自家网络上的数据包路由来路由去也没出国界;咱们不行,网一断,大家都要叫,MSN上不了,RSS读不成,软件下不来…我们既依赖国外的网络基础设施,也严重依赖国外的网络内容。中国人开发出了世界上最优秀的下载软件 – NetAnts, FlashGet, Thunder, Net Transport,和咱们的网络基础环境不无关系。

看来无论是靠网络做生意的还是普通网友,有必要制定一个B计划,至少:

1. 拥有一个QQ号;

2. 拥有一个国内邮箱;

3. 记住至少一个国内搜索引擎网站的URL。

光缆迟早要修好,备战备荒不能松,呵呵。

Categories
Technology

哪儿来的声音

近来发现我的T43在使用垂直滚动条对文档上下滚屏的时候,如果耳朵靠近显示屏可以听到细微的“滋滋”声(不是风扇声)。一开始还以为是鼠标的摩擦声,改用键盘上的小红点,情况依旧,只要翻动页面就有声音,鼠标停下来,声音消失。

不知道哪里来的声音,各位有IBM本本的帮助verify一下,看能不能reproduce 🙂

Categories
Technology

博客搜索、评价系统

从丁峰的blog上看到了这个帖子,里面还有对本人博客系统的机器评估。这个博客搜索、评估系统来自有道,看上去挺搞笑的。这个自动评价应该是用若干个模板拼接出来的,应该不算是机器智慧的那种;还有它的性别分析(对我的评价是:张岭 (Zhang Ling’s .(Zhang L.) 100.0%男性倾向,0.0%女性倾向),怎么算出来的?怕不是随便忽悠一个值然后套用一个评语吧。

号称现在网上流行自动写诗软件,有道大概感染了一点。好玩归好玩,要能好用、常用,还要继续努力。

时代周刊把“You”选定为2006年度风云人物,似乎是很有社会基础的。

Categories
Technology

ODF & OpenXML

Bob Sutor,IBM负责open souce的副总裁,他在自己博客上发表的文章”IBM votes NO on Open XML in ECMA“成了这周圈内最热门的讨论贴之一。无论来自哪里、持有什么样的观点,这些讨论总能给人带来更多的思考。

Categories
Technology

最佳实践 - 从GB2312编码的WordPress博客系统升级到UTF-8编码

本人博客网站在今年7月从blogchina移植到了租赁虚拟主机上的WordPress(WP)系统。在文章搬家的过程中,由于blogchina采用了GB2312编码,当时为了省事儿,直接写了程序自动导到WP上并把WP的缺省编码从UTF-8改成GB2312以正常显示中文字符,现在看来这个决定并不聪明。原因有3:

  • 由于GB2312页面无法混合显示多语言文字,在世界都开始变平的情况下,未能与世界接轨;
  • 在非中文环境的操作系统中,如英文版Windows/Linux下,显示页面为乱码,而这些系统通常对Unicode字符都可以正常显示(需要相应字体);

于是下决心把目前采用GB2312的”遗留系统“升级到UTF-8,并保持原有帖子正常读取、显示。 中间尝试过的方法、走过的弯路不必细说,今天该升级工作顺利完整,全部用户数据转成UTF-8,前台的PHP显示也完美支持。具体方法如下:

1. 备份全部博客文章

备份是所有系统升级前的必经之路,WordPress的备份功能好在不仅可以备份数据,它能连通DDL一起都保存在一个文件中,直接运行该文件中的SQL语句就能重新建表并导入数据。备份前必须前激活WP的备份插件,见图1:


图1 激活WP备份插件

2. 文章备份
我3年多的帖子纯文字部分总共才1M多一点,用HTTP方式直接下载就可以了,下载后得到一个.gz的压缩包文件,内有.sql文件一个,见图2、3:

图2 保存备份文章

图3 压缩的文章备份

3. 解压缩.sql文件并转码

用支持编码转换的文本编辑器打开(我用的是UltraEdit),把该文件转换成UTF-8编码。在Ultraedit中的做法是选择File- >Conversions->ASCII to UTF-8 (Unicode Editing),另存为。中文字符从GB2312转到UTF-8,存储由2个字节变成3个,所以文件将有所增大,见图4的比较(转换后的文件大了近 200KB):

图4 转码前、后备份文件大小比较

4. 修改备份文件建表语句中使用的缺省编码

把SQL建表的default encoding,从”latin1“改成“utf8”,注意utf和8之间没有横杠。本人系统中共11张表,11个表定义全部修改替换,如图5:

图5 修改表定义缺省编码

至此,数据准备工作完成。

5. 删除老表

登录到WP的数据库管理Web界面(http://mysql.yourname.com),点击当前blog数据库显示属性,见图6:

图6 删除全部数据表

依次删除全部11张表(点击红叉)。

6. 更改数据库编码

把当前数据库缺省的非UTF-8编码修改成”utf8_general_ci“,见图7:

图7 修改数据库编码方式

7. 执行修改后的SQL恢复数据
点击Web管理页面的”SQL” tab,从本地文本编辑器中copy整个备份文件并粘贴到SQL文本框内,点击Go执行SQL、导入数据。如果正确无误的话,会显示succesful。见图8:

图8 执行SQL重新建表恢复数据

8. 修改WP系统中的wp-db.php文件

在wp-db.php文件里,数据库建立连接的代码行后加入“mysql_query(“SET NAMES utf8”);”,这个重要环节的贡献源自此文。见图9:

图9 修改访问数据库的编码形式

9. 修改WP的缺省locale

OK,整个编码转换过程基本完成。重新登录系统(会发现表示乱码的”???”问号,不用管它),在”Options“->”Reading“选项中把原来的”GB2312″改成”UTF-8″,保存、属性,所有???问号字符变成正常的中文字符。

10. 收尾

如果对WP的header,sidebar等theme文件做过定制,进入相应管理选项手工删除其中的乱码文字,重新输入。至此,采用GB2312编码的WordPress系统顺利升级成UTF-8。

Categories
Technology

百度博客搬家服务

百度开出博客搬家服务,我一点不觉得奇怪,倒是它提供的无需密码验证的“搬家”让我觉得很新奇。

在我写了blogChina搬家到WordPress攻略不久,就收到百度工程师的邮件讨论博客搬家的话题。现在看来百度提供的对MSN Space和新浪博客搬家手段可能是完全基于HTML的extract和parsing,而不是blogger API(写入到百度自己的博客系统可以用blogger API或者直接写DB),这就能解释它不仅支持搬自己的家,连别人的家一样搬。来自百度空间的说明基本能证实这一猜测:

在搬家过程中有可能会有部分文章、评论丢失、文章格式发生变化。如有少部分文章丢失、格式变化,您可手工将其搬入空间内进行调整

百度的crawler这么强,到网上搬点东西实在易如反掌。我猜百度内部应该有一个generic的Web crawler和多份customized crawlers,各个instance独立运行。博客搬家crawler跑到MSN,Sina上下载页面,抽取页面,扔掉所有外部链接,用广度优先的方法递归爬行,然后导数据。搜索引擎就是这样用别人的数据给自己赚钱,当然前提是提供了内容增值(数据可访问性),不好说这样以披着搜索引擎的外衣拷贝博客文章到自家的做法外人有没有想法,不过过去的众多经验表明粘着点原罪的第一枪往往会成为成功的催化剂。

Categories
Technology

On-line transaction? forget Firefox.

虽然我自己是Firefox的忠实用户,但是如果要在网上进行交易、支付、财务相关业务时,尤其是基于目前国内网站对Firefox的支持水平,还是得老老实实回到IE,少给自己找麻烦。自打我在Chinapay上吃过苦头后,这个弦就一直绷的很紧,特别是各个银行的网银业务,基本是Firefox的禁区。

即使是IBM,已经基本实现了内部主要Web应用对Firefox的支持,偶尔也会出点兼容性的小毛病。比如出差申请系统,如果用Firefox填表,生成表单的ID号就是空的,除非换成IE。

今天在家里做了三笔网上交易,也都是用的IE:去上海移动网站把今年的2000分积分兑换成50块话费;在网上订阅了2007年度的程序员IT时代周刊。 这两本杂志在浦东的报亭里不太容易买得到,如果漏买了的话我一般去来福士对面福州路、西藏路口或者吴江路、南京西路地铁口旁边的两家大报亭补买。

这是dW上介绍从IE到Firefox移植的经验和技巧如何兼容两种浏览器的文章,希望更多的公共事业、金融服务网站能够更好的兼容新兴浏览器。

Categories
Technology

vertical->horizontal

Tom Friedman在IBM townhall meeting上的手势让人记忆犹新:世界正从vertical走向horizontal。

从垂直到水平的转变,还发生在处理器身上。《程序员》第11期的译文“The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software” ,讲了同样的事情。这篇有关处理器发展的文章传达的核心思想是:由于电气物理特性的限制,无限制提高CPU主频进而提高软件执行效率的时代已经一去不复返了;未来提高处理器性能的方式将是多核;CPU处理能力的扩展由纵向增长转变为横向扩张。对于软件开发者来说,简单依靠升级CPU方式提高性能(免费午餐)已经结束,如果在软件开发上不考虑多处理器、多线程、并发的话,你的软件运行速度将在未来的计算机硬件升级的道路上原地踏步。

ecosystem,这无疑会是处理器厂商们的法宝:必须打造一个大环境,围绕在多核CPU周围,从OS, 编译器优化, 平台软件优化, 应用开发工具包等等都需要提供完整的支持(自己做;第三方做;自己和第三方一起做),否则高难度的、支持并行处理软件开发的高门槛终将被CPU厂商的低出货率所吸收。

先修地铁再造房,轨道交通与房地产开发的和谐发展,应用在上述领域的原厂商身上可能表现为软硬结合、新业务、新部门的出现,并可以用来解释一些看起有点蹊跷的新产品线和新的战略部署。

程序员们要辛苦了。

Categories
Technology

Evolution of JBuilder

1997年3月,JBuilder 1.0;

1998年4月,Jbuilder 2.0;

2006年11月,JBuilder 2007.

颠峰时刻的JBuilder,曾经每半年发布一个新版本,搞的群众意见很大。在经历了这两年在两条IDE战线上的失利、调整和重组,这次Borland CodeGear在Eclipse IDE上的发挥,很值得关注。虽然无论它到底表现如何我都会继续使用Rational IDE,在开源平台上的创新和Borland这个让人尊敬的对手都会让这场比赛变得更好看。

Categories
Technology

Programmable gaming console

作为本周抢购风潮中把无数人挤的人仰马翻的主角 – 索尼PS3游戏机,携带了由索尼,东芝和IBM共同开发的CELL处理器。虽说纵观目前游戏机市场的CPU份额,IBM以100%占有率暂时无人能及,可要更好的普及多核的CELL处理器,为游戏开发商(也包括其他基于CELL的应用)提供高效便捷的运行库迫在眉睫。

在本周《三联周刊》特别报道中回顾了当年阻碍世嘉土星销售的原因之一是采用了双CPU的土星,软件开发很困难,导致游戏开发商拒绝跟入。

在中国,IBM开发中心和IBM研究院,新成立了相关开发部门从事CELL库的开发工作,并将与国内高校一起合作。此前,在alphaWorks和dW上已经公布了CELL Brandband Engine的开发工具和相关入门文章

Categories
IBM Technology

第二条命

IBM刚刚公布的10项创新计划中,其中一个是”3D互联网“。在昨天下午的员工大会上,首席执行官Sam利用3D技术和主管创新与科技的副总裁Irving进行了虚拟对话,而这个平台正是Linden Lab的Second Life

第一次听说Second Life是不久前在一本杂志上,文章作者代表此杂志进驻SL;第二次是在昨天下午的IBM townhall meeting;第三次是今天早上在IBM dogear social bookmark里;第四次是在今天晚上Irving的博客里。到处都是Second Life,逃也逃不掉。

在去SL注册前,我阅读了wikipedia上有关SL的描述,对理解这个虚拟社区很有帮助。而虚拟世界里的”L币“,一种可以和美元互换的虚拟货币,让人联想到咱们腾讯的Q币,还有它不久前惹上的那堆麻烦。

由于免费用户只能选择名,不能选择姓,于是选用了”Ling Iceberg”做用户名。登录后,除了可以四处行走外,SL里的居民还可以像鸟一样自由飞行(下班后在地铁公交里闭眼急车的人,忍忍吧,回家就能飞了。)

如果用关键词”IBM“搜索,能找到不少先期抵达的来自IBM的居民,里面还有我们的CEO 🙂

有部电影叫《The Thirteenth Floor》,说的是在玩虚拟游戏的人发现自己原来也是在虚拟世界里被操作的木偶 (嵌套式虚拟空间),就是咱们庄周梦碟的外国翻版。如果能在SL中下载SL客户端,创建ID,进入SL的SL,该会是什么样有趣的场景。

Categories
IBM Technology

本周大事

Sun open source Java under GPL v2 license (openJDK)是本周一最重要的事情。我阅读了Sun自己有关此事件的几乎所有报道,包括这份“来自世界各地的声音”(里面包括中科院和中国开源联盟的表态),仔细看了TSS, Javabobby等处的群众留言。IBM也在当日发表了一个相对平静的声明,阐述了自己的态度。至于Open source Java与Harmony的关系及影响,可以参考杨普的博客文章。这块石头入水的效力,或许在未来半年后开始显现。

周二,就是今天,IBM中国召开全体员工大会,IBM CEO Sam Palmisano在北京亲临现场。特邀嘉宾,The World is Flat的作者Tom Friedman的精彩演讲,让人折服。我想所有听了他演讲的人都记住了这句话:”What could be done, will be done. The last question: is it by you or to you?”

Categories
Technology

Web-based rich text editor

今天和几个同事讨论Blog,wiki在线编辑器的WYSIWYG的Copy & Paste的功能是如何实现的(在Word任意拷贝一段格式化的文字或者表格,可以粘贴到Web 的rich text editor里面,而且格式基本不变),是不是通过JS库自己写程序实现的格式化功能。仔细好像又不太想,JS要做这么复杂的rendoring工作,几十k的代码肯定不够。

花了点时间做了研究,确定是browser本身提供了可编辑的rich text功能。如下代码显示一个文本框,可以在里面粘贴rich text,该example适用于IE 6.0和Firefox 2.0。

Rich Text Editor Example (20行)

Categories
Technology

Make life easier: Mylar and Eclipse Spy

Mylar和Eclipse Spy是为了解决不同问题而独立开发的两个插件,相同的是它们使用了类似的方法达到最终目的。

Mylar可以用作一个Eclipse平台上用户行为分析的工具,它可以将用户与Eclipse交互的过程记录下来,进而分析在一段交互过程中用户的访问习惯和潜在模式,从而为优化workspace设计提供依据。Mylar的输出文件包括了交互过程中调用过的插件信息。 这篇文章介绍了用Mylar做用户使用习惯分析的过程。

虽然我没用过Eclipse Spy,从它的文档可以看出它想到Eclipse plugin开发者的心坎儿里去了。该插件把用户的交互行为所产生的插件调用细节做实时的输出。想知道如何写一个refactoring wizard,只需要跑一个样例然后看spy的输出就知道哪些插件被使用到了,在什么方法上,ID是什么,然后到Eclipse newsgroup上搜一下,开发效率大大提升。

无论产品还是开发工具,向用户隐藏一些细节是必要的;在用户真正需要细节的时候,可以高效、便捷的拿的出来也是很牛的本事。

从另一个角度看,API, 文档, sample project这些传统意义上提供的开发辅助资料,在系统变得日益复杂和庞大的时候(你几乎要成为一个哲学家才能在J2EE技术讨论会上插上话)显得粒度过细,要映射到用户要实现的实际问题,搭积木式搜索、组合、拼凑API显得过于耗时耗力。一些特殊的途径会显得与众不同,这些方法对快速解决问题颇有帮助,尤其是当你绝望的在搜索引擎结果里一页页点下去的时候。

Categories
IBM Technology

Mobile Sametime 7.5

继Sametime 7.5发表后,Mobile Sametime于昨天正式release,新版的移动Sametime可以在BlackBerry,Nokia和Windows Mobile设备上运行。我下载了一份Mobile Sametime for Windows Mobile 5.0 VGA版,装在了我的PDA上。

与Sametime桌面版不同,移动版本并没有使用基于Eclipse RCP/eRCP的架构,而是使用了标准的J2ME类库,所以不具备桌面版的插件扩展机制。考虑到移动设备的处理能力限制,这个设计并没有什么问题(用过Mobile Skype的大概都知道,这个native的WinCE程序速度有多么的慢)。

Mobile Sametime使用了J9 VM,携带了裁剪过的一些Java类库。连JRE带程序本身一共是2.5MB。下面是用Remote Display Control抓的几张截屏(因为RDC没有针对WM5优化,分辨率较低。正好屏蔽掉敏感个人信息,哈哈)。

  • 登录Mobile Sametime 7.5

  • 聊天窗口

  • Mobile Sametime安装文件和J9

  • 产品信息

Categories
Technology

刷机

和大多数人一样,我对刷机又爱又恨。爱的是通过升级固件,修复了bug,添加了新功能;恨的是升级过中老的设置信息往往会被无情的抹掉,刷完后不得不重新安装配置。

最近,刚把X51V的WM5的版本刷成A04,该升级修复了访问CF卡等一系列错误;为此不得不多耗费几个小时重新安装软件、配置网络,凭记忆让它恢复到以前的状态。

家里的无线路由器TP-Link WR542G似乎也该升级了,在经历了几次路由器固件升级之后,在没有特别新功能的情况下,我尽量避免刷路由器,因为重新配置的代价实在太高。而这次的新补丁不得不让我考虑再次升级:新firmware支持最新的花生壳动态域名协议;支持路由配置的导出、导入(意味着这将是我最后一次痛苦的升级?)。

刷吧刷吧,不是罪…

Categories
Technology

扩展Firefox 2.0的Feeds订阅功能

今天安装了Firefox 2.0,总的来说不太满意,安装时自动覆盖了我自己做的searchplugin(后来从备份的1.5的安装目录下拷贝回那些.src文件,可以在2.0下正常工作),很多add-on也不能用了。很像Eclispe 2.x升级到3.x时的样子。

2.0增加了一个Feeds订阅的功能,不过除了Live bookmark和本地安装的RSS reader程序,网络订阅缺省只有bloglines,My Yahoo和Google Reader三种,而且没有提供用户自定义功能。

花了点时间hack了一下,把抓虾订阅加了进去,具体方法如下:

1. 找到安装目录下\chrome\en-US.jar文件(英文版Firefox),用WinZip打开,提取压缩包中文件:\locale\browser-region\region.properties;

2. 用文本编辑器打开region.properties文件,修改如下:

# These are the default web service based feed readers
browser.contentHandlers.types.0.title=Bloglines
browser.contentHandlers.types.0.uri=http://www.bloglines.com/login?r=/sub/%s
browser.contentHandlers.types.1.title=My Yahoo
browser.contentHandlers.types.1.uri=http://add.my.yahoo.com/rss?url=%s
browser.contentHandlers.types.2.title=Google Reader
browser.contentHandlers.types.2.uri=http://fusion.google.com/add?feedurl=%s
browser.contentHandlers.types.3.title=抓虾
browser.contentHandlers.types.3.uri=
http://www.zhuaxia.com/add_channel.php?url=%s

3. 把修改后的region.properties文件重新打回到en-US.jar压缩包内,重启Firefox即可。如下图:


目前还没找到给新添加的在线订阅提供商分配图标的方法。