赵翔鹏的Blog Xiangpeng's Thinkpad

20十二/050

我常用的一些Web 2.0软件和网站

下面这些程序都极大的提高了我获取信息和处理信息的效率。按照我喜欢、离不开的程度排序:

  • Firefox. (Web OS! 下面是我目前常用的Firefox插件:)
    • Adblock
    • AI Roboform
    • All-In-One Sidebar
    • BetterSearch
    • Clusty Toolbar
    • CustomizeGoogle
    • FlashGot
    • Forecastfox
    • IE Tab
    • Nuke Anything Enhanced
    • PDF Download
    • ScrapBook
    • Tab Mix Plus
    • Greasemonkey (功能超强,有待学习!)

最近评选的一个Web 2.0十佳网站,收集了很多很好的网站。其中Netvibes, Openomy, CalendarHub, Basecamphq都值得我尝试一下!

18十二/050

wikipedia镜像!

哈,终于又可以访问wikipedia了!http://encyclopedia.tfd.com/
今天装firefox的dictionarysearch插件时发现的这个网站。

14十二/050

RBAC的形式化验证……

RBAC也算是个研究了很久了的东西了,有很多实际应用。但是角色一多,管理就会成问题,随之就可能带来一些安全漏洞。实验室的师兄做了一个描述逻辑的框架来形式化RBAC,提出了一组公理和推理规则,然后可以用一个叫Racer的工具来判定是否存在collision。

感想:

1. 基于描述逻辑(description logic)和constraint
solving的验证方法会求出所有的解,因此效率必然会成问题。基于时态逻辑(temporal
logic)和model-checking的验证方法只求出一个解(反例),所以效率应该高一点(虽然我也遇到了状态爆炸的问题)。

2. RBAC在不同的系统上的实施可能是很不同的。比如针对工作流上的RBAC和针对文件管理的RBAC,一个可能是动态的,一个只有静态的。因此一个通用的框架未必好用。比如在工作流的访问控制上也有人提出了Transaction logic

3. 今天师兄也提到WS-Policy比较弱,说XACML比较适合。不知道XACML是否可以理解为RBAC的XML描述。如果是的话,那么BPEL能否跟XACML结合在一起,从而实现访问控制和流程控制的分离?就这一点,还需要了解一下工业实践的具体做法。

11十二/050

关于计算机研究: 有用且有趣

做计算机相关研究的人在写第一篇论文的时候,一般会很简单,很多时候无非是A+B=C的工作罢了。然而在这个简单的A+B的过程中,我们至少理解了什么是
A,什么是B。如果随便拍着脑袋做一个D出来,十有八九是完全无用的东西——而计算机跟数学的本质不同是:计算机研究必需有用

学计算机跟数学不一样。数学家的重大贡献往往是在青年作出的,因为数学可以任意抛弃过去的已有知识体系,可以不考虑应用性,比较自由的创造。但计算机大牛
的博士论文往往不是他一生中最重大的成果。只有经历了一段时间,对自己的领域有了更深刻的把握,才能做作出深刻而有意义的工作。

当然,如果过于追求“有用”,把研究变成做项目的话就没意思了。有用且有趣,这是我对CS research的理解。

7十二/050

初学SOA总结

昨天才意识到,以前虽然看了不少web service的东西,却没有认真的看过SOA,至多是了解一些报纸杂志上的吹嘘而已。今天花了半天时间Google了一下SOA,写个小总结如下。

SOA是一种松散的体系架构。跟管道的、分层的、黑板式的体系结构相比,SOA更松散,它的模块(组件)只是一些service,然后可以任意的组合拼接
以获得新功能来满足新需求,如用BPEL。我觉得这更接近component的核心思想,即只要接口相符,组件是可以任意拼接的;因此SOA是非常
flexible的,具有更好的复用性和伸缩性。

不用说,flexibility是非常好的,“把公司转型为随需应变企业”,
满足各种不同需求,听起来多么诱惑啊~~但正因SOA非常flexible,它也增加了service的接口设计和组合的难度——不像管道结构在设计时只
要考虑两个组件之间怎么连接就可以了,在设计service时必需仔细考虑通用性,可复用性,等等。但跟可获得的好处相比起来,我想这个设计的代价就微不
足道了。JavaOne2004有篇文章Using SOA and J2EE to Ease Integration and Customization While Reducing Overall Implementation and Customization Costs,看题目就知道,SOA其实已经是企业实现customization的最捷径了。

SOA的另一个意义是保护已有投资,因为service只是对原有系统的封装,所以可以降低成本,但也同样可以起到消除信息孤岛和实现EAI(enterprise application integration)的作用。我觉得企业实现“随需应变”是SOA最终的目标,而EAI是实现目标的第一步。根据目前国内现状,我想EAI就已经很能满足大部分传统企业的需要了。

在Internet /
Intranet环境下,SOA比其他架构更适合:因为服务是基于XML的,从而解决了格式不兼容的问题;服务一般是无状态的,而且可以通过服务发现的形
式寻找合适的服务,从而可以降低系统的耦合度(提高可伸缩性),降低出错概率(因为调用都是异步的);……暂时只想到这几点,肯定还有别的优缺点值得讨论
吧。

问题:

服务是无状态的,但是有些时候组件里是有protocol,有状态的,比如哲学家进餐问题。BPEL,WS-CDL是否可以完全解决这个问题?或者说,为了保证基于Web的服务的易维护和易复用,我们是否必需放弃“状态”这一很有用的特征?

企业是否应该把服务发布给外部?发布服务会不会削弱企业的竞争力?卖书的公司把查询书价的service暴露出来之后,就造就了douban这样的网站,
从而导致卖书的公司要给douban交广告费。这要求不同公司之间的分工更细,单个公司必需把核心竞争力的东西做的更强才行。

自动服务发现真的能行吗?本质上,给定一个需求,寻找满足需求的组件是一个精化关系判定,这要求对需求(契约)的精确描述及实现自动的精化判定,而这二者都是非常难以做到的。

据说SOA可以更容易管理,但是现有的WS-Security, WS-Policy还是比较原始的,未必能满足需求。这方面倒是可以继续做一些研究。

最后,为什么在国内wikipedia还不能访问?不是说解封了吗?郁闷啊……

3十二/050

关于人工智能的思考

我们可以制造一种具有自复制性的机器,比如计算机病毒。除了会复制,病毒也可以做点其他的工作,比如收集你的个人密码,格式化你的硬盘之类。理论上,我们也可以制造一种机器,它可以当汽车用,但是还会自己制造自己——这样你就有了两辆汽车。然后……

但是计算机病毒似乎没有智能。它只会服从制造者的指示。或者说,它只会服从“本能”,没有独立的“意识”。所以我们可以加一个控制命令,保证那个自复制的机器不会弄得全世界都是汽车,大多数计算机病毒还会“发作”,虽然有时“发作”就等于自杀。

这么说来,生物与非生物的区别,动物与人的区别,是否就在于,非生物不会复制自己,而动物虽然会复制自己,会凭本能活着,却不能理解生命的“意义”呢?

写一个程序,它总是只会被动的执行,根本不知道为什么要执行,在执行什么。reflection就是给程序语言加了一点“自省”的能力,很有意思。但是这离主动思考还远着呢!

什么是agent?agent有一个估值函数,其行为就是试图最大化该函数的值。人工创造的agent可能会自适应,自学习,自组织,自进化,但
agent的根本目的是被估值函数所唯一确定的。——人生其实也是如此啊!虽然目的可能各不相同,但每个人都是为了实现自己的价值观而活着,不管是享乐主
义还是为人民服务。极端一点,自杀的人也只不过是有一个特别的估值函数罢了。

但是,人类的特别之处是可以修改自己的估值函数,机器、动物却似乎很难做到。进化论是否是正确的?如果进化论是正确的,那人类是否能够拥有创造有自主思想生物的能力呢?(人造人?)看看人工智能的发展,现在还是一片模糊。

再想想,人类是否是上帝创造的呢?也许上帝就是给了我们一个统一的估值函数“追求幸福”,然后人类就开始自动进化了。(也许“追求痛苦”的估值函数下造出的人都消灭了)而上帝现在到哪里去了?(会不会跟星际争霸一样,造物主被自己造出的虫族消灭了?)上帝又是谁创造的?

已经提了太多问题了。最后一个问题:人能认识自己吗?正如哲学中永恒的问题,“我是谁?”

1十二/050

tag的tag?

现在的tag包含了多种信息。以delicious为例,很多人在收藏一个网页时,会标记article, blog, programming,
ruby, ajax, tutorial等等。这里的几个tag有些是关于内容的,如ruby, ajax,
tutorial;有些是关于类别的,如article,blog。但tag本身只是一个单词而已,没有任何信息来描述tag。

那么,能不能给tag加上tag呢?如“content”,“category”等等。其实收藏者的名字就是一个带tag的tag;系统会自动把这个信息作特殊的处理。

其实我这个想法跟RDF也差不多。在semantic web中,“苹果是红色的”可以表示为apple ---(color)---> red,这里的color表示red之于apple的关系,亦即tag之tag。

一直以来人们都说semantic web太难实现,roadmap太大之类。但是我们仅仅借用其中的一个很弱的概念,如tag,就已经掀起了一场“web2.0”风暴。所以说,机会还是很多的……

Update:
ontology以前的想法是把什么都标准化,由某个标准组织制订一套ontology大家用。但这显然是不现实的,因为领域太多了,更新的速度也太快
了。我想标准组织能做的和要做的就是一层层的meta data下去之后的最底层的工作,如RDF语言标准,本体之本体之类的东西吧。

23十一/050

软件开发:怎样满足所有人的需求

想写出完美的软件,满足所有人的需求?好像不可能……因为每个人的需求都是不同的。但是用过firefox,emacs,eclipse之后,忽然觉得这也是可以部分做到的。解决方法就是可定制化,插件化。

但是!初学者是不管你的系统有多么可扩展的,比如我第一次下载firfox时,根本不知道还可以装“extension",还以为就是一个模仿IE的产品
呢。第一次用oracle之类注重功能而不考虑入门用户上手速度的软件,也是有点痛苦的。相比之下,vs.net的特色就是入门快,虽然用到细节之处就开
始发现问题多多……

不妨总结一下:1. beginner希望界面简单,容易上手;2. power user希望更多的功能,更多的插件。

按照这个原则,emacs违反了1. 这也解释了为什么网上有很多“预配置”好的emacs,比如easyemacs,"latex专用emacs"等等。

同样按照这个原则,为什么windows“好用”?因为它有大量的application可以用。对第一次使用linux的一般用户而言,常见的问题是:
有qq吗?有word吗?(什么?只有这么难看的gaim?只有这么难用的open
office?)还好,linux也在改进。windows以前的缺陷是高端服务器应用太差,不过,windows也在改进嘛~

如果windows和linux都有无数的application可以用,那时候才要看谁的内核更强了……在此之前,作这个比较常常是没有意义的。

Windows的成功除了因为有大量的application可以用外,m$开发了很多成功的典型应用也是很重要的,如office等。相比之下symbian的讨厌之处在于nokia总等着第三
方来写应用,默认的录像机程序竟然设成只能录1分钟,还只能录图像没有声音,吓走了很多初级用户。ipod,mac的成功也在于apple把最常用的功能都做的非常好用。

并不是每个人都有能力安装配置新的插件、应用;即使有能力,也未必有时间。预配置也是很重要的,不仅有利于吸引初级用户,也有利于高级用户迅速理解该系统
的能力究竟如何。为什么我们需要linux发行版,而不是下载所有的linux源代码自己编译?因此,可定制性和易用性的平衡一定要把握好,才能吸引更多的用户。(其实我也承认,完美的软件是不存在的……)

Update:
unix下的命令行小工具也是一种比较好的满足各种不同需求的方式,用户只要用脚本语言把他们连接起来就可以了。vba也是满足各种特殊定制需求的一个解
决办法。从这个意义上说,web service,soa也是一个很好的可扩展架构,用bpel就可以把web
service粘在一起,满足一种需求。再前卫一点的是http://www.ning.com

Update:
想了想,其实插件就是一种组件,准确的说插件就是基于黑板体系结构的组件,插件之间一般是没有互相的交互的。相比之下命令行工具、web
service就灵活得多,用户可以自己写一个connector把不同的组件连接起来。总而言之,组件技术还是非常实用的。

18十一/050

在ipod上装linux,让nano变video!

太神奇了,没想到ipod功能如此强大!如果不是亲手试一下,简直不相信那么小的ipod nano可以装上linux,然后看avi电影,玩俄罗斯方块、下国际象棋,查元素周期表,甚至编译c程序!(哈哈,现在已经出现了一个新词叫做ipod programming了~)

不仅是nano,几乎所有的ipod都可以装上这个叫做ipodlinux的系统,从而把你的ipod变成一个pda!装上之后,ipod就有了两套操作系统,启动时可以选择进入原先的apple系统或者新装的linux系统。

运行效果图

ipod nano的安装步骤:(其他类型的ipod看官方网站http://ipodlinux.org的说明即可)

http://ipodlinux.org/forums/viewtopic.php?t=3748
http://ipodlinux.org/forums/viewtopic.php?t=3766

linux装完后,可以选择安装这个floydzilla扩展包,包括各种字体,Doom、Gameboy模拟器等一堆游戏,还有输入法!(是的,用ipod的触摸按钮也可以输入英文,而且输入的效果还不错!)

http://dansfloyd.com/floydzilla.html]http://dansfloyd.com/floydzilla.html

我承认这个安装步骤超级麻烦……(开源项目的通病)不过为了能让ipod跑linux,还有什么好说的呢?

如果安装出了问题,不要紧张,可以重启进入disk mode,下载hp的usb格式化工具重格ipod,再用ipod updater把ipod恢复到出厂时状态。(这些操作都在ipodlinux的论坛上有,懒得给具体链接了)

根据ipodlinux.org的研究报告,ipod的cpu都是75Mhz的,带有32M的DRAM和少许的高速缓存,也就是说大概相当于一个486的PC了。所以,ipod的潜力还是无限的……^_^

(刚刚发现http://ipodlnxcn.ee67.com/,关于ipod linux的中文网站)

14十一/050

前途的困惑:China, Italy, Macao

China, Italy, Macao。Pku, Unipi, Unu-iist。
前途的困惑,又开始侵扰我本已平静下来的心。

如果将来打算一直做研究的话,早点出去是很好的;但如果想进入工业界,也许留在国内前途反而会更好。如此想想,国内和国外也是各有利弊,不相上下。

欧洲,一个向往已久的地方。如果留在国内,将来还会有长期呆在欧洲的机会吗?如果在学校任职,也许不难找到visiting的机会吧。但如果是公司的话,还会有很多时间吗?

回想一下环境的差异给我的不同影响。在澳门的日子里,时间永远都是不够用的;即使只是跟任何一个国家的同学吃顿午饭,也总有无尽的话题可以讨论,不管是学术还是生活——以至于感觉自己一个人吃饭简直是浪费了时间。回来之后,说到研究,基本上大家是各做各的;至于生活,大家似乎都有大量空闲的时间可以打打游戏之类的。是不是因为文化太相似,反而导致我们这些书呆子们没有什么话题了?也许这就是人的差异导致的不同吧……感觉北京还是个非常保守……甚至有点土的城市。(那么大的中关村,卖ipod的竟然很少!那么大的北大,知道ubuntu的人还是很少!)不过,这也很可能只是我的错觉,因为目前我的交流圈子还是太小了。有差异,才有比较和思考。

还有,在澳门最后一段日子里,一直都把纸笔放在床头,以备记录几乎每天都不时冒出来的灵感。回来之后,似乎……找不到这种感觉了……也许是太忙了的缘故吧。

其实,如果3年都能在欧洲,不回澳门,我也许就不用这么犹豫了。但是按照计划,还要在澳门呆两年。不妨假设(虽然可能性很小),如果Italy那边要留我,于是我又会面临这样的郁闷~

问题似乎又绕了回来:人生究竟应该追寻些什么?我很同意Scott的观点:一定要多尝试不同的city,不同的job,最终才能找到自己真正喜欢的。在没有去过广州、深圳、澳门之前,我怎么能知道北京上海才是最适合我的城市呢?在没有体验过公司工作之前,我怎么能知道研究和业界哪个更适合我呢?不过,我现在的难题是,在欧洲可以尝试不同的city,在北京可以尝试新鲜的job……哎,不可得兼啊。

有时,拥有的越多,负担似乎反而越多——因为不愿意轻易放弃。对大多数人而言,我面对的任何一个机会都已经是很好的了;然而我却为之烦恼如斯。还有两个星期的思考时间,发现自己就像头看着两堆稻草不知从何下嘴的驴子。Take it easy! 我对自己说。最近要做的,就是遍访前辈牛人们,尽量多的收集信息和建议了。

   下一页