2006年09月18日

从我知道cvs那个东西开始,我就喜欢死这个东西了。只要你敢用,他比任何的备份工具都好。什么都能装,保证能同步,还能回溯到历史某一点。我大半文件都是用这个存的。其实解决同步问题,只要你给自己建一个cvs/svn的服务器,就都ok了。

说起来这个,是看到美人她爹tinyfool一干人等正讨论p2p的存储问题。

从tiny的叙述中,我们可以看到,他对存储的最大需求是“备份和同步”,没错,这正是存储服务的主流。如果仅仅是共享一些mp3,照片之类,随便找个p2p软件就能作到了(emule就很好)。用这种存储服务的意义并不太大。

这就回到了标题所说,每个人都需要个版本服务器。假设基础文件所有人都有,只保存更新信息,那么所需要存储的容量立刻就大规模下降了。如果采用这种 方式的话,我们需要的就不是一个类似社区的服务,而是一个类似email的工具类服务了。这里面,p2p的作用是进一步提高稳定性和降低成本。 allmydata提供的10:1的服务就很好 (提供10M硬盘空间给别人用,自己得到1M虚拟存储空间)这种交换模式,和过去的区别是“你帮助别人存储的文件 ”对于你自己是否有用。emule方式共享mp3或是电影,是对你本人有用的,而allmydata的方式,则对你自己未必有用。emule是p2p的方 式共享文件,而allmydata是共享空间。换个通俗的话来说,也就是,你并不知道别人在你共享出来的空间上放了什么,也基本上不可能去使用这些文件。

在这样的模式下,可以用这种10:1的方式达到大量冗余,多点存放的方式。如果再配合一些地理信息和统计学方法,就可以计算出来对于“你”所在的网络情况,谁的硬盘最适合存在你的资料,配合中央服务器,就更稳定了。这样一个基本的网络框架就算出来了。

综上所述,我得到2个结论:

1 这种存储不同于emule共享,文件本身对存储者不完全有意义。(有一些有意义,但大部分人可能没意义)
2 文件更新信息比文件本身更容易被频繁的读取。这些更新信息将是这个网络负担得主要流量。

最后说说我的希望:

google有足够的技术可以完成这个,无论是中央存储,还是同步工具,或是探测哪些机器适合保存你的资料(数据统计和挖掘技术)都是他的强项。

2006年09月15日

我写了很多年blog了,其中有几次较长的中断。最近这个月是一次。前年忙着搬家也中断过一次。这次说起来是因为工作忙,但其实,事实上,忙这个词永远就是个借口。一旦停下来不写,就再也懒得写了。

写blog还是不错的,现在回头看2003年的[空间被封,暂时无法访问],就发现,很多事情已经不记得了,需要去看blog才能想起来。文字的纪录是最有意义的。

2003年写blog最多的那些人,现在差不多都没什么动静了。可见要坚持一件事有多难。

其实blog这东西,只要写,就有意义,对自己有意义,对别人也有意义。哪怕通篇只有一句话有用,那也是有用。就算全没用,至少还提供了别人阅读的乐趣。

当然,最关键一个前提,是,你得持续的写。

2006年09月14日

其实donews通行证真是一个酝酿了太久太久的东西了。
早在2005年4月,刘老大就在blog里面提到了这事情:“Donews很快很上耶鲁大学开源的passport系统,我们力争不犯同样的错误。”

真正的构思比这还早。这里面提到了耶鲁大学的passport系统,已经是刘老大提出构想找了韩磊,韩磊让我去了解情况,做系统选型之后的结果了。

yale cas系统有很多问题,性能一般,没有和数据库接口,没有单点退出等等等,所有开源系统都这样,有一堆缺陷,但是也有很多好处。我花了些时间,改了一个版本出来,不过没有用在donews而是在05年10月份左右用于了365kit。也就是现在的sso.365kit.com。然后就是donews并入千橡,passport的事情也就暂时放下了。

随后又增加了my/free/inout等一堆服务,统一账号成了很迫切的事情。于是在我到donews工作之后,又重新开始这个项目。这次是千橡 互联网基础事业部基于cas系统改造的一套方案。性能好,稳定性也不错。接口协议完全不变,是比较好的版本。在这个基础上, login.donews.com诞生了。这活不容易干,各历史时期开发的系统,操作系统,语言,版本都不太一样,幸好所有的历史上所有参与开发的程序员 都大力协助,总算过了这关。

donews passport和通常passport的统一账号方式不同。我们希望保留所有用户习惯,所以就用了绑定账号的方式,同样为了让过去的donews用户名 字不被抢注,我们采用了注册或从老账号激活的方式。用blog/my/365key/home的非中文账号都可直接作为通行证名字激活。

至于好不好用,就看用户反馈了。现在仍然是测试期,我们还在等待意见,继续修改。

2006年09月13日

朱辉龙在疑问,强大如google或微软,是否成了互联网的中心和黑洞,会不会阻碍商业和创新。

如果把互联网算作从TCP/IP开始,我们可以回头看看那个年代的互联网形势。 1969年,美国国防部委托开发了ARPANET的4个节点,分别>是加州大学洛杉矶分校,斯坦福研究院,加州大学圣巴巴拉分校,Utah大学。事实上,TCP/IP协议是分布式的,但互联网本身从来都是有明确中心的。1969年,这些高校就是中心。后来,netspace曾经是中心,aol曾经是中心,yahoo曾经是中心,与其说谁成为中心,不如说,信息聚集到哪里,哪里就是中心。

看看历史,就可以发现,所有时代都曾经有过以个看似能够扼杀一些的敌人,比如 曾经的IBM,曾经的苹果,曾经的AT&T,曾经的罗马帝国。然而,事实上,所有巨人都有回落成常人的那一天。除了随着他们成长的越来越大,自身的损耗也增加之外,社会制度也不允许出现那样的庞然大物,所以AT&T被分拆,微软被欧盟罚款。

曾经也有人疑问,我们是否真的可以制造出哥斯拉怪兽那么大的机械怪物,答案是,就算能造出来,大地也无法承受他的重量,地球上的能量也不够负担他的运动。

世界没有尽头,有关巨人,中心,黑洞这种事情也确实不用担心,你看,google也做rss reader,但是做的多么的差啊。没有一个巨人是万能的,而创新,更不是他们的专利。

朱辉龙在疑问,强大如google或微软,是否成了互联网的中心和黑洞,会不会阻碍商业和创新。

如果把互联网算作从TCP/IP开始,我们可以回头看看那个年代的互联网形势。 1969年,美国国防部委托开发了ARPANET的4个节点,分别>是加州大学洛杉矶分校,斯坦福研究院,加州大学圣巴巴拉分校,Utah大学。事实上,TCP/IP协议是分布式的,但互联网本身从来都是有明确中心的。1969年,这些高校就是中心。后来,netspace曾经是中心,aol曾经是中心,yahoo曾经是中心,与其说谁成为中心,不如说,信息聚集到哪里,哪里就是中心。

看看历史,就可以发现,所有时代都曾经有过以个看似能够扼杀一些的敌人,比如 曾经的IBM,曾经的苹果,曾经的AT&T,曾经的罗马帝国。然而,事实上,所有巨人都有回落成常人的那一天。除了随着他们成长的越来越大,自身的损耗也增加之外,社会制度也不允许出现那样的庞然大物,所以AT&T被分拆,微软被欧盟罚款。

曾经也有人疑问,我们是否真的可以制造出哥斯拉怪兽那么大的机械怪物,答案是,就算能造出来,大地也无法承受他的重量,地球上的能量也不够负担他的运动。

世界没有尽头,有关巨人,中心,黑洞这种事情也确实不用担心,你看,google也做rss reader,但是做的多么的差啊。没有一个巨人是万能的,而创新,更不是他们的专利。

2006年09月12日

如果你也被北京网通的域名劫持流氓行为困扰,那就来用<a href="http://www.opendns.com/">opendns</a>吧。

我从<a href="http://blog.cathayan.org/item/1440">blog.cathayan.org</a>看到的,赶快设置上用了一下,果然好了。

其实只不过是设置2个dns地址:
208.67.222.222
208.67.220.220

但是opendns网站上,有各种系统,各种路由器的设置方法,图文并茂,很贴心。对普通用户,应该也能应付自如吧。

电信级流氓。nnd。

2006年08月24日

徐总点了,也说说我读的书。这里先说一个原则,就是正面评 价中不出现畅销书。我认为一本书如果存在了5年以上,那么是具有一定阅读价值的,低于5年,则不必浪费那个时间,至少目前不用。世上好书多的是,根本读不 完,何必读那么多新鲜的。若无心读书,不如去看看电影,打打游戏,咱又不是最赚钱的书商,捧什么畅销书的场?

1. 一本你不只读了一次的图书
不说专业书的话,应该是《三国演义》。这书我无聊就会拿出来看看,战争是人的天性,自古至今,描写战争的书,无出其右。

2、一本你如果身在沙漠时想读的书

不知道干嘛去沙漠,总的来说,如果到沙漠觉得无聊,那也太矫情了,我觉得正常人大概就2种表现,一种是欣赏这没见过的美景,另外一种就是想想怎么活 下去。第一种应该是主动去旅游的,第二种大概就是被动的不幸进了沙漠。 既然去了,无论是不是想去的,都有必要读一下 《生存手册》。据说这是英国特种部队的教程,能救命。

3. 一本让你发笑的书

《青铜时代》。我认为幽默是人的第一要素。我轻易不评价一个人好不好,只评价是否有趣。有趣的可以做朋友,无趣的就算是好人,恐怕也话不投机。王小波就是个足够幽默的人,他的书其实可以算作黑色幽默,但是,我真的笑了。

4. 一本让你哭的书

好像没什么书让我哭过。如果说悲惨,那么小说永远没有现实荒谬,现实都不能令人落泪,还有必要看三国掉眼泪--为古人担忧吗?

5. 一本你希望是自己写的书

〈围城〉。钱锺书,鲁迅,王小波,是我最喜欢的三个中文作家。〈围城〉虽然只是钱先生“写着玩的”,但是已经令我无比佩服了。无论文字,结构,还是那淡淡的幽默……这要是我写的,得多好啊。

6. 一本你希望从未写就的书
太多了。最恨那些带人跑偏的书。偏偏畅销书中这种书尤其多。这也是我看不起畅销书得原因。就选〈没有任何借口〉吧。洋鬼子给人洗脑的书,竟然被很多人奉为 经典。当我看到路上施工的工地上都挂着“没有任何借口”的大条幅的时候,我就想,tnnd,这种垃圾书真是根本不该存在。

7. 一本正在读的书
〈摩根帝国〉,一本讲摩根银行历史的书,很厚,很值得看。

8. 一本读来有意味的书
不知道什么叫有意味,应该也是夸奖吧。选〈2001: A Space Odyssey〉吧。A.C.克拉克作品,是一部史诗般的科幻小说。那飞船上的叛乱,那黑色的巨石,一切都意味深长,难道这就是文明的起源和终结?

9. 一本改变你一生的书
〈易经〉。读易经时间不长,但是对我影响很大。世界早已注定,一切事情历史上都发生过。易经高度归纳了历史,形成了方法论,其实所有事情,都可以照此推论出来如何做对自己最有利。所谓算命也大概就是如此。当然,我还没读透,而且,如果读透了,人生不是会变得很无聊?

10 点名

1 李卫公
2 bonycamel
3 大鱼

就点三个吧。其他想点的都有别人点过了。

2006年07月28日

发于程序员2006年5月,有删节和修改。今天突然想起来,觉得还值得拿出来看看,就贴blog 上了,有一些和tiny讨论获得的较新鲜的观点,欢迎拍砖。

让我们倒退到60年代末,那个计算机的上古洪荒年代。这时,微处理器诞生了不到10年,这个年代的计算机开始大量使用集成电路,小型机开始替代古老的大家伙们。1年后,UNIX才出现在实验室中,而C语言,还需要等待4年才会出现。

那个年代,这块神奇的大陆上活跃着那些计算机语言呢?他们是否早已如史前恐龙一般灭绝了?FORTRAN,LISP,COBOL,Simula,BASIC,PL/I,Ada,SQL…..我们惊奇的发现,这些语言到现在仍然好好的生存着,这时候还没有静态语言,所有语言都是带有动态特性的函数语言。

1972年,往往被认为是现在这个年代的开端,这一年中,C语言诞生,Intel 8008微处理器诞生,ARPANET诞生,Internet的大幕拉开了。随后的10多年中,C++,pascal之类的静态语言依次登场,逐渐成为主流开发语言。

在1972年之前,所有的语言都是为了某种专业用途而开发的,FORTRAN为了工程计算,LISP用于人工智能,COBOL用于处理商业逻辑……这些语言的用户往往不是程序员,而是各领域的工程师或科学家。在那个年代,他们使用这些语言就像今天使用word,excel,autocad之类的软件一样。如同我们今天不会认为C比excel更适合财会人员使用,当年的科学家也不会认为C比LISP更友好。至于C所带来的性能提升,并非他们关注的要点。

C的诞生是为了编写UNIX操作系统,这是第一个可以用来写操作系统的高级语言。在此之前,所有的语言都可以看作计算机科学家贡献给其他学科的,C语言是给计算机科学领域自己的礼物。C和UNIX一起开始流行,程序员开始用C编写各种各样的工具和软件,计算机的黄金年代开始了。

在70年代那个内存要以K计,主频仅有几mhz的年代,硬件极其昂贵,操作系统和软件对于性能的需求很高,操作系统是计算机的基础平台,与专业领域的应用不可同日而语。为了性能,程序员们宁愿使用汇编,但考虑到移植性,C还是成了他们最喜欢的语言。

1950年全世界只有100台计算机,1990年的计算机是普通的办公用品。计算机性能越来越高,硬件成本反而逐年下降,企业成了软件市场的最大客户。

企业应用解决的是复杂的商业逻辑和时常变化的业务模型,对于企业应用,性能方面不再像30年前那样重要。企业的发展是动态变化的,在不同阶段,管理方式和业务模式都会发生变化。企业对于灵活性和弹性的要求非常高,用来开发企业应用的语言也相应的需要具有极强的灵活性。互联网的发展让这种趋势变的更加明显。不同于企业应用,互联网应用频繁变化,甚至没有明显的阶段。

软件发展到这个阶段的时候,单机的性能早已不是最重要的因素,多台服务器的并行处理和分布式处理是解决性能问题最重要的方法。从语言层面上速度快一点,节约几M内存对于整个系统不会有太大影响。比起逻辑,开发难度和开发维护成本,性能问题是最不重要的。动态语言优势在于灵活,易于开发和学习,劣势在于性能较低。在高性能服务器和并行处理的设计思路下,动态语言的优势如此耀眼,完全掩盖了劣势。完成同样的功能,用python或是ruby之类的动态语言,所需的代码量往往只有java的1/10,相比C/C++差距更大。

系统软件和应用软件之间的区别也越来越明显,开发系统软件仍然需要静态语言,而应用软件和服务的开发越来越适合采用动态语言。编写操作系统之类的系统软件仍然要“压榨”计算机的性能,对于应用软件,缩短开发周期显然更加重要。

动态语言除了具有语法简洁的优点,大量的程序库也降低了动态语言的开发难度。这好像一个鸡生蛋,蛋生鸡的问题,成熟的程序库降低了动态语言的开发难度,开发难度低反过来又吸引了更多的程序员开发程序库。一个C++程序员,往往经过了几年的训练仍然不能开发出可用的程序库,动态语言的程序员经过几个月的训练已经可以编写可复用的代码了。这些代码往往以开源的形式发布,容易被使用和学习。

程序库往往决定了一种语言应用难度,纵观历史,凡是具有优秀程序库的语言生命力都很顽强,反之则多销声匿迹。目前几种流行的动态语言,都具有丰富的程序库,在python中,不仅具有诸如网络应用,多线程,图像处理,科学运算之类的库,甚至还拥有多套不同量级的Framework来辅助Web开发。事实上,任何需要的功能几乎都能找到相对稳定的库,大部分程序员仅仅需要组合这些库就能编写出强大的应用——这也正是动态语言开发程序代码量较少的原因之一。

动态语言程序员有几乎无尽的库资源可用,比起其他语言的开发者,这是莫大的幸运,可惜郁闷往往环绕在幸运周围。前面说过,任何需要的功能都能找到相对稳定的库,而且不仅是一个,而是多个。哪个库好用,哪个库适合你的项目,每个库的特点是什么?要搞清楚这些问题也要颇费一番时间。至于要决定用哪个,不用哪个,往往让人左右为难。幸好,在开源社区,有众多参与者的项目往往不会太差,代码和文档齐备的代码都值得一试。

除了众多的程序库,动态语言本身的种类也远远大于静态语言,同样,每种语言也各具特点。Python,Ruby,Lua,Perl是四种颇具代表性的语言,按照一般的看法,这些语言适合用来黏合不同的系统和模块,素有“胶水”的之称。现当然,后来人们发现胶水不仅仅能粘合其他模块,本身也具有强大的功能,在性能问题不那么重要的场合,动态语言看起来无所不能了,无论是网站还是应用程序,都能看到动态语言的身影。动态语言成了不可小看的一股势力。对这个时代的程序员来说,掌握一种动态语言很有必要,虽然你不一定能够靠单单一种动态语言找到一份喜欢的工作,但适时的采用动态语言,一定可以让你的工作变的简单许多。

了解动态语言和常用的程序库的特点,是开始动态语言编程的第一步。下面我们将介绍Python ,Ruby,Lua和Perl四种典型动态语言的程序库。

Python不仅在所有主流操作系统上都能运行,而且得到了很多工业控制和嵌入系统的支持,除了各种unix-like的系统,Python还能运行在Palm,索尼的游戏机PSP,nokia的手机操作系统Symbian,风河的嵌入操作系统VxWork上。Python被称做最强的脚本语言,无论开发web应用还是普通应用程序都十分方便。Python诞生了10多年,积累了大批忠实用户,也存在了众多成熟的应用成功案例。

Ruby语言特点类似Python,但发展相对较慢。Ruby最近因为Rails框架而成为了最炙手可热的动态语言,Ruby on Rails适合企业应用,大量java用户对Rails产生了浓厚的兴趣,他们甚至认为Ruby on Rails会对java造成冲击。

Lua小而快速,目前多用来编写游戏引擎所需要的脚本。Lua代码精巧,比起Python或Ruby,Lua小的多。暴雪的著名网络游戏魔兽世界的配置脚本和插件都是采用Lua编写的,这也令Lua开发者迅速增加。

Perl是最古老的动态语言,强于数据分析和计算,也是unix平台上可以用做shell script用做的语言之一,系统管理员都很喜欢这个出色的工具,虽然近年风头被python抢去很多,但拥有CPAN程序库的Perl,仍然是最强大的语言之一。

按照现在的一般开发需求,我们需要的程序库通常是这样几类:web开发框架,GUI界面库,其他辅助工具,至于XML解析,字符串处理函数之类大路货,已经随处皆是,不值得开篇专门介绍了。

1 web开发框架

web如此流行,不仅仅是网站,企业信息化软件和部分个人桌面网站也采用了web界面。web界面成了和普通GUI并行的一种选择。如此众多的应用,使web开发框架变的如此重要,几乎所有语言都有了不错的web开发框架,而且还不止一套。

python的web开发框架多的足以让人挑花眼,比较有名的就有类似 Ruby On Rails的django 和TurboGear,模仿tomcat的webware,轻量级的Quixote,karrigell,更轻量级,用apache模块实现的mod_python和vampire。所有框架都各有特点,当然这也可以换个角度看作个有缺陷。总之,要挑选适合的框架,就要先仔细读文档,看成功案例,对比自己的项目需要,仔细找。

Ruby简单的多,Ruby on Rails风头正劲,甚至已经让人说不清是Ruby成就了Rails还是Rails成就了Ruby,总之,用Ruby开发web应用,非Ruby on Rails莫数。无论是整个框架的结构还是界面的Ajax支持,Rails都是水到渠成了。事实上,也确实没有相同成熟度的项目可以选择了。

Perl的MASON名气很大,也很成熟,不过开发起来的思想和Perl原本的思路差距很大,如果能适应,这倒是个不错的选择。其实perl本身就很适合做web开发,只要有fastcgi,利用CPAN库,大部分应用都能轻松解决了。

Lua用来做web开发有点怪,毕竟不是为了这个目的设计出来的。但是也有一个叫做Kepler的项目提供了web框架,用起来也方便。不过Lua最好的用途还是写脚本,何必用来做web呢?

2 GUI界面库

能够跨平台的GUI界面库,比较成熟的大概只有两个,wxWidgets或是GTK。wxWidgets的可用性和美观程度都优于GTK,很受欢迎。

wxPython,wxLua,wxRuby ,都是不同的语言下对wxWidgets的封装,虽然成熟程度不一,但是无一例外的受到了开发者欢迎。

3 其他辅助工具

此类的库实在太多,每个程序员都有自己喜欢的一套工具。这里只列举一些比较有特点的程序库。

Python的RPC库Pyro,类似C++ ACE库的Twisted,本地编译工具Psyco

Ruby的图形处理库Rmagick,类似于tomcat的Mongrel

Perl仍然不得不提起CPAN,这个库太庞大,无所不包,以至于任何其他的程序库都显得黯然失色。

Lua中调用COM的LuaCOM,JIT 编译器LuaJIT

2006年07月22日

老华讲的非常精彩,都是非常基本的软件开发管理。

基本是基本,可惜在软件公司能做到的也不多。

一个现实的问题,就是管理成本的问题。如果donews采用这种开发管理方法,那么,立刻,人员要增加到3倍左右,效率要降低到目前的一半左右。

软件工程保证的是可复用性和安全性(这个安全,说的是发布后修改成本极大,所以必须要保证发布版尽量稳定)。而互联网要求的是速度,甚至,甚至极端情况可以放弃复用。

两种思维的冲突,从最后tiny问老华关于gtalk升级的问题中可以明显体现出来,同样来自大型软件公司的老白打断了tiny的问题,将gtalk升级的模式归结为版本发布频率。实际上并非如此。这就是软件到互联网产品的观念转化过程。老白代表了传统软件行业的观念,tiny代表了互联网的观念。软件公司与互联网公司的区别可见一斑。

可惜,由于时间关系,我最希望听到的微软项目管理实践的部分未能讲到。同样是最后tiny问的问题,微软产品为何delay。这个问题没有能被详细解答,实在遗憾。微软delay的原因我认为就是软件工程模式的现实问题。一个精巧,无误的系统是不存在的,完美如微软的开发管理体系,仍然难以应付复杂的现实,因此,delay总是出现。但,什么让这个精密的机器运转不那么灵了,微软又是如何处理的?这个问题从2000年我读过《微软项目生存》这套书之后,就一直存在。6年中,我经过了无数项目,有建筑也有软件,有成功也有失败,但我仍然无法回答这个问题。希望下次能有机会再听到老华讲述这些东西,帮我解惑。

互联网开发如何做?我也仍在探索。时间,成本,和速度,如何取得平衡,这是一个难以说清的问题。从敏捷编程(XP)中我们得到很多,或许我们能从开源软件的项目管理中获得更多。事实上世界上最大的项目,不是微软的,而是开源软件的。

总之,互联网开发模式,这应该是个新课题,一切都刚刚开始,行业中所有人,都需要为此而努力。感谢老华给我们这堂精彩的课。

ps: 下周准备开始实践采用Trac的管理系统。

2006年07月18日

昨天给tiny看了一个关于python和c效率的文章。tiny兴致大发,又优化了几个版本,效率有不同程度提高。

其实这个比较,并非在于比较到底python和c那个快。和当初特流行的比较java和c那个快一样,没意义,也无法作到公平的比较。

这事情让我感到震惊的是,python用的是最简单的方式,可以说,学过1天python的程序员就能写的出来。后面的优化也不是什么大不了的算 法,都是非常基本的语句换来换去。C就不然了。C的那几段程序,就算是最低效的那个,也不是学1,2个月的c程序员能写出来的。后面的优化版本更是需要不 浅的功底。

开发效率,这是核心问题。在这个例子中,初级程序员的初级代码,超过了中级程序员的中级代码。到了高级程序员的话,比较这些基本功已经没意义了,那时侯自然另有一番比法。
脚本语言,早已不是过去所谓的:“开发灵活,简单,但效率较低”能概括的了。不得不承认,脚本语言经过了10年的发展,已经正式登上了这个舞台。

语言的魅力在于库,有好的程序库,一种语言就会变的威力无穷。python的标准库已经非常成熟了。似乎可以说,python的标准库是一套非常好 的实现。在python实用主义的思想主导下,快速应用的思想发挥的淋漓尽至于。而实用主义的思想,又导致了python的公用程序库越来越多。有标准库 的扎实基础,扩展出来的程序库质量也不会太糟糕。一种语言就这样成熟了起来。

这时候,正如java在企业开发领域推倒C++一样。脚本或称为动态语言成为主流的时刻不远了。