123
 123

Tue 29 July, 2008

Click here to bookmark this link.Channel Image21:12 程序员的成长从开窍开始系列 一、如何摆脱低级错误的困扰» Tinyfool的开发日记(blog)
原文:程序员的成长从开窍开始系列 一、如何摆脱低级错误的困扰

最近,有两位Google Maps API的初学者向我请教他们按照最简单例子写的程序为什么不能正常的运行。

其中一位用GTalk跟我交流,我仔细了看了他的代码,没看出问题,把代码保存在本地,打开Firefox的错误控制台,用Firefox打开他的页面。出错的那一行被清晰的显示出来,我再仔细端详那句话,原来有两个应该是英文逗号的地方,写上了中文逗号。

另一位,在我的论坛跟我交流他的Google Maps API中遇到的问题,我看他代码的时候也没有马上发现问题。然而,同样在用Firefox打开后,问题很明显的找到了,原来是一个方法openInfoWindow被他写成OpenInfoWindow了。

在我帮助别人解决的程序调试问题中,这是非常常见的。人人都可能打出中文逗号,人人都可能把大小写写错。但是在我帮助他们解决问题以后,他们总是感慨的说,谢谢我解决了这个问题,这个问题困扰了他们几个小时,甚至是几天。

这其实并不是只有初学者才会遇到的问题,我还帮助过些有非常丰富经验的工程师解决问题,有时候问题仅仅出自某个参数没有传递进来,或者是拼接字符串的时候少些了一个冒号,或者是拼接地址的时候漏掉了http:。我甚至帮助一些人调试一些我根本不懂的语言的程序,因为多半出现的问题,都和语言特性无关,不是程序员写错了字符,就是写错了逻辑,或者是错误理解了一个函数。

出问题是正常的,写程序是一个复杂的边思考边打字的过程,笔误和一时糊涂都是难以避免的。程序员一般把这种问题叫做低级问题,因为这类问题跟你的智商完全无关,任何人都可能犯。

但是,问题在于,有时候即使是很优秀的程序员,也会被一个低级错误困扰,可能会几天都解决不了。所以,关键在于,如何找到问题。

遇到问题的时候:
  1. 不要怨天怨地。出了问题,当然有可能是系统的bug,API的问题,但是那些几率往往比你犯低级错误的几率要低多了,先从自己身上找原因,是不是自己写错了。
  2. 要掌握工具。最低限度你要会写Log,最好是Log和调试器结合。好 的工具可以大大的提高效率。以前有人跟我说,Dll不能调试,我发现可以;有人说多线程不能调试,我发现可以;有人说COM不能调试,我发现可以;有人说 IE插件不能调试,我发现可以;有人说OE插件不能调试,我发现也可以。当然,你确实会遇到不能调试的时候,当年我们做东芝芯片的嵌入程序,一个组都没有 一个仿真器和调试器,但是至少可以用Log嘛,无非是麻烦点。
  3. 分析问题要有逻辑。遇到问题可以先把所有的可能性都列出来,然后一个一个分析,肯定能找到原因的。
  4. 要学会隔离问题。问题涉及到的代码越多,越难以理解,问题越难以解决。遇到这样的情况,可以利用Log或者调试器,一行代码一行代码的给它们洗清嫌疑,这样很快你就可以找到出问题的地方。如果代码特别长,程序特别复杂,可以用二分法来做,效率很高。
  5. 千万不要懒惰,不要事事求别人。一次复杂的调试过程就像一部侦探剧,如果你有非常好的逻辑性,那这部剧的主角就是福尔摩斯,剧情一定非常精彩。我说这个是有巨大风险的,说真的我帮人调东西挺上瘾的,很有意思。但是我还是要告诉大家,一次高难度的调试之后,你的满足感绝对不亚于写了一个伟大的程序。
要想不遇到问题,写代码的时候:
  1. 要对写出来的代码负责。我很佩服那些写代码写100行都不执行一次的 高手,如果他们最后不被低级错误困扰的话我就更加的佩服了。我写程序几乎是写一行两行就要执行一次,每句话我都要确保执行效果跟我的预期一致。没错这样写的时候 可能慢一些,但是调试的时候很轻松,我可以很简单的确定哪些代码绝对没有问题。所以我写代码整体速度比一般人高。很多人学习新东西的时候喜欢把例子抄一遍,运行一下,改改,再运行。我喜欢一句一句的抄例子,抄一句两句执行一次,这样可以把例子透彻的理解,而且很难会遇到出现了问题找不到原因的时候。
  2. 函数体功能块不要过长。我认为我的智商并不高,我很难接受一个程序的一个函数体或者一个功能块超越3屏(当然逻辑真的有那么复杂除外,你会发现越是简单的逻辑越是容易被人写的冗长)。很多人对面向对象耳熟能详,对封装继承看起来驾轻就熟。但是动不动就写出来个函数体超长的程序。这就像写本书从头到尾不点句号一样,会累死读者的。自己看的时候,估计也会被累的喘不过来气。这是我对基础教育的微词所在,他们连教会学生写函数都没教会,虽然表面上他们连面向对象这么高深的东西都教。
  3. 缩进要对。这点很重要,虽然大部分语言不是像Python那样用缩进来决定逻辑块的位置,但是人看到缩进的时候,总是会以为这些缩进位置跟逻辑相关。尤其是在有大量的ifelse或者for循环等等的嵌套逻辑的时候,如果缩进错了,可能会直接让人把程序的逻辑读错。所以我拿到别人的代码,第一件事情就是整理缩进。我见过一些比较优秀的页面工程师,他们会在div结束的位置用注释写上这个div的id,这样层级关系就一目了然了。
  4. 不断重构。随着程序的不断修改,有些部分会不断的增长,原来看着清晰的架构可能因为问题的复杂而慢慢模糊,也可能被修正bug的权宜之计弄的面目全非。不信你找一个经过多次修改的程序看看,是不是满目疮痍,是不是都很难认出是你自己的作品了。这在多人参与的项目中更加严重,每个人有不同的代码风格,经过多次杂交后,你肯定认不出你的代码是骡子是马,还是四不像了。随着程序的慢慢成长,原来有些函数体会慢慢膨胀,需要拆分;有些原来简单的功能块四处都需要,应该被提炼成函数或者方法,等等。现在不重构,未来等到代码复杂到无法控制的时候,重构的工作就会变得更加困难。我见过最强的案例是,一个几千行的电子辞典配套联机软件,经过无数次的改版,变成了一个几乎无法维护的主窗体的cpp有1万8千行的怪物。最后经过复杂的重构,才变成一个出新版本只需要新增一个驱动程序的可以维护的几千行的程序。这个故事详见:一个具体项目的重构(一)一个具体项目的重构(二)一个具体项目的重构(三)

Technorati technorati tags: , ,


add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:12 我最近关于Google Maps API的几篇文章» Tinyfool的开发日记(blog)
最近,因为做了一个讲座,感受到了大家对Google Maps API的热情,我又开始比较勤奋的更新我Google Maps Api中文非官方Blog,希望给对Google Maps API感兴趣的朋友更多帮助。

最近更新的文章有:
翻译的文章有:
也欢迎大家订阅Google Maps Api中文非官方Blog,订阅地址是http://feeds.feedburner.com/GoogleMapsApiblog

Technorati technorati tags:


add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:12 对Java处理XML性能的比较(DOM和SAX)» Tinyfool的开发日记(blog)
测试数据是结构很简单的一个20M的XML文档,里面的数据来自我的一个项目。测试程序很简单,就是读取这个XML文件,把里面的链接写入到一个文本文件。然后把数据原样重复了一遍,然后又测试了一次,下面是测试结果。

方法数据大小内存峰值
CPU峰值
耗时
SAX 20M
20M
30%
142秒
DOM
20M
152M
100%
171秒
SAX
40M
20M
30%
290秒
DOM
40M
345M
100%
376秒

表1 SAX和DOM的性能比较


结论:SAX的内存消耗稳定,CPU占用率低,耗时短,大数据量XML的简单处理一定首选SAX。DOM的性能受到内存的严重影响,内存消耗受到数据量的影响,大数据量XML的读处理最好不要用DOM。

Technorati technorati tags: , ,


add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:12 为自己设定一个极限是愚蠢的行为» Tinyfool的开发日记(blog)
最近一段日子的深夜或者凌晨,我总是在美剧的陪伴下仔细阅读和翻译《Google文件系统》的论文。翻译我做得不够完美,甚至谈不上好,但是这份工作带来的巨大的得道般的满足感一直支撑着我,让我不觉得疲倦。这本是我觉得自己不可能读懂的文档,但是真正深入的时候,我发现阅读它令我很快乐。

倒推10个月,在我和霍炬创办银杏技术咨询之前,我一直认为自己的性格不适合创业。但是现在我们用10个月良好的收入状况和日益增长的口碑,证明了我的论断是错误的。

再倒推到我的大学时代,我曾经认为自己会永远仅是一个VB高手。事实上后来,我轻松的学会了Asp,用它在大学赢了一个网站设计比赛,轻松学会BCB用它找了我职业生涯的前两个工作,轻松学会了Vc开发了365kit的outook插件,等等。而VB几乎已经7-8年没怎么用过了。

甚至,在某次刻骨铭心的恋爱失败后,6年中我以为自己会孤独一生,但我现在还是找到了相信可以步入结婚殿堂的人。

每次回想到这些,还有其他的一些另我自己唏嘘的往事,发现原来阻碍自己进步的,往往不是自己的能力和机遇,而是自己给自己设置的极限,而是自己以为的自己可以做到的最高点。

记得好像是李卫公同志哪篇blog提过龟兔佯谬,话说是只有学了极限才能最好的理解这个问题的实质。其实,这个有问题有个思维逻辑上面的解决方法,那就是你把过程抛弃,直接看N秒后,按速度×时间,很容易算出兔子一定在乌龟前面。

那么中间是怎么超越的呢,可以给出的一个简单的答案是,如果你太关心怎么超越的细节,你可能就真的很难超越了。So,把对手先隐去,跑吧!

所以,最好的对手是自己,最好的目标是无限远处……

Technorati technorati tags: ,


add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:12 Google、微软还是好耶的黑色幽默?» Tinyfool的开发日记(blog)
刚才要下载Mac版本的Mysql,所以去Google搜索Mysql,不过突然搜索结果右边的广告吸引了我。微软买了Mysql这个关键字,还要在广告里跟IBM的数据产品叫板多好玩啊。



可是,我点了之后,居然只看到一条错误信息:
Database not found!totaldb=0 dbname[1]=


我靠,难道是跟IBM比谁更幽默么?那估计微软要赢了。仔细一看地址是
http://mccannafa7.allyes.cn/main/adfclick?db=mccannafa7&bid=12680,6073,50&cid=6371,289,1&sid=12210&show=ignore&url=http://www.microsoft.com/china/sql/prodinfo/compare/default.mspx

原来问题出在好耶身上,微软的地址 http://www.microsoft.com/china/sql/prodinfo/compare/default.mspx 其实可以访问。

只是在宣传数据库的广告上,广告系统的数据库崩溃了,总让我觉得很有点黑色幽默。这更说明了数据库的重要性,不过好耶的数据库用的是谁家的,我还真是不太清楚,哈哈。

Technorati technorati tags: , ,


add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:12 DreamHost值得推荐吗?我看不值得!» Tinyfool的开发日记(blog)
之前有不少Blog用了DreamHost,还做了推荐,我的Blog一直在国外,所以也就没有凑热闹。

所以,头些日子听说DreamHost摆了一个大乌龙的时候,我自然可以幸灾乐祸一番。上次的乌龙不清楚的朋友,可以看看这篇文章《DreamHost 大乌龙事件及众生相》。大概过程就是DreamHost的联合创始人乔希·琼斯在对2007年欠费用户催缴时,写错了程序的参数,把2007写成了2008,这样本来不需要付款的无数用户就自动被扣了11个月的租用费,这是个 7,500,000 美元,甚至引发了些用户对网络服务自动扣款是否安全的讨论。

这当然是无心之失,虽然对很多客户损失重大(可能会造成一些客户信用卡透支),但是我认为还是可以原谅的,因为总归不是故意的,成熟商业社会里,只要生意还做得下去,估计没人会白痴到故意提前扣款,那么多用户,与其提前扣款赚一笔跑路,自然不如老老实实的服务客户,争取让客户多享受几年服务。

问题是这样的,头两天有个朋友告诉我他的blog被Google清出索引有些日子了,他怀疑是Google认为他的链接太多了。

我看了看链接其实不算多,而且也没有任何明显的作弊的迹象,这位哥们人品虽然谈不上值得称道,但是多半也是不会作弊的。

那么帮他申请个Google Sitemap,看看他的网站到底出了什么问题吧。谁知道,一确认,才发现GoogleBot报警说,无法访问他的网站,错误号是403。

网站访问毫无问题,那么看来这个403是专门针对GoogleBot的,你不让人家抓你,人家凭什么索引你呢,呵呵。

问问哥们,他说自己没做过任何的设置,那么多半就是空间服务商干的了。哥们说,他在用DreamHost,在Google一搜“dreamhost 403 googlebot”,马上就找到了两篇文章《Errors with .htaccess : Site Down with 403 Forbidden Errors》和《Is Dreamhost support stupid or am i missing something?》。

一看才知道,果然是DreamHost干的,他们刻意在一些客户的根目录的.htaccess文件中加入
<limit>
order allow,deny
deny from 66.249
</limit>
服务器有过多的GoogleBot访问造成压力,临时做些解决方案,暂时封锁GoogleBot倒是不稀奇的。但是,一来,做这个操作完全不通知客户,太不负责任;二来,我那哥们的blog已经很久不能被Google访问了,看来DreamHost的如意算盘是如果客户不知道,就这么一辈子节省流量,反正客户发现Google不收录,多半以为自己有什么操作过分了,或者直接以为Google抽风了。

So,DreamHost的行为是故意的,而且完全不考虑客户的利益和感受,十分卑鄙,值得鄙视,不值得推荐。另外,DreamHost中国人用得极多,容易被GFW,也不值得被推荐。

Technorati technorati tags: , ,


add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:12 10月27日Google Maps API讲座PPT下载» Tinyfool的开发日记(blog)
上周六,也就是10月27日,应CSDN之邀做了一个Google Maps API的简单讲座。讲得很粗,一方面是我的准备有点仓促(最近对Hadoop/Mapreduce太着迷,一天到晚的在研究),一方面是我对下面听众的JavaScript应用水平不甚了解,再有一方面,我觉得Google Maps API实际上太简单,而且概念少,代码多,讲座的形式不太好交流(下面的听众都说看不请投影的代码,这我可怎么办)。

但是还是承蒙很多听众的厚爱,写信跟我索要讲座的ppt,我本无藏私之念,只是总是觉得自己的东西写得太粗陋进不得高人的法眼,所以没有把ZMap开源。这次讲座,我把ZMap的核心代码全盘拖出,心中释然,丑已经丢了,就不畏惧开源了,这个事情总算可以放到议事日程里了。但是,诚心请求直接扒ZMap的JavaScript代码的朋友们,注意把我的Google统计代码去掉,这多让人啼笑皆非啊。

ppt的下载地址为:http://www.zmap.org/temp/ppt.zip

Technorati technorati tags: , , ,


add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:09 谷歌排序背后的技术» Google 黑板报 -- Google 中国的博客网志


在我上一篇文章里,我已经介绍了关于谷歌搜索排序的哲学。作为我们探讨搜索质量的努力的一部分,我要向大家介绍更多的谷歌搜索排序背后的技术。我们的排名系统的核心技术源于学术领域的情报检索学。情报检索学对搜索的研究已有近 50 年的历史了。它应用字符突出性的统计讯息,例如字符频率之类,来完成网页排序(可参照“现代情报检索: 概要介绍”来快速了解情报检索技术)。情报检索学为我们提供了一个坚实的基础,在此基础上我们应用最常访问链接、网页结构以及其他创新技术建立起了一个庞大系统。

在过去十年,搜索已经从“给我我所说的”发展到“给我我想要的”。用户对搜索的期望无疑已经提高。我们努力工作以达到每个用户的期望,为了这一点,我们需要更好的理解网页,理解查询,理解用户。在上个十年里,我们已经将理解以上三个部分(在搜索过程中)的技术推到一个全新的层次。

在谷歌,当我们讨论查询关键词的时候,我使用方括号[ ]来标记最开始和最后的查询词(请参考 Matt Cutts 的“如何输入查询关键词”),在本文中我将自始至终使用这一标记。(网页和搜索结果频繁变化,因此,本文举例的解释也许与即时查询的结果不一样。)

理解网页:多年来我们在抓取和索引系统上投入了大量精力。因此,我们拥有一个非常庞大、更新及时的索引。除了规模和更新,我们还用其他方法改进索引。我们用于理解网页的核心技术之一就是理解这个网页要表达的相关的重要概念的能力,即使这个概念在网页中并没有处于明显的位置。比如,即使伦敦 Sprovieri Gallery 的官方网页中没有出现 London 或 Londra 的字眼,但是我们依然能够在搜索结果中给意大利语查询 [galleria sprovieri londra] 提供 Sprovieri Gallery 的官方网页。在美国,一个用户搜索 [cool tech pc vancouver, wa],将找到 www.cooltechpc.com 主页,即使这个网页没有在任何一个地方提到他们在 Vancouver,WA。我们开发的另一些技术比如在网页中区分重要与次重要字符以及信息的新鲜程度。

理解查询关键词:理解我们的用户在寻找什么(而不仅仅是几个查询词)非常关键。在这一领域我们取得了几个值得注意的进步,包括最优拼写建议系统,先进的同义词系统,以及强大的概念分析系统。

绝大多数用户已都曾经用过我们的拼写建议系统。当有人输入 [kofee annan] 时我们便会知道他实际在搜索 Mr. Kofi Annan,系统会立即提示:Did you mean: kofi annan;但是,有人搜索 [kofee beans] 实际上就是在搜索咖啡豆。在全球范围里都做到很高的精确度是困难的,但我们做得不错。

同义词是我们理解查询词的基础。这也是我们正在为谷歌解决的最困难的问题之一。虽然有时对人们来说是很容易理解的词,但对于自动语言处理系统来讲却是尚未解决的难题。作为一个用户,我不想为我的查询中使用什么词汇考虑太多。通常我甚至不知道正确的词是什么。这就是我们的同义词系统发挥作用的时候。我们的同义词系统可进行精密的查询修正,例如,我们的系统知道,单词“Dr”在查询 [Dr Zhivago] 时代表医生,但在 [Rodeo Dr] 中代表驾驶。一个用户查询 [back bumper repair] 时得到的结果是后保险杠修理。对于 [Ramstein ab],我们会自动查询 Ramstein 空军基地;输入 [b&b ab],我们会搜索加拿大阿尔伯塔的住宿加早餐旅馆。我们已经开发了能够理解差不多 100 种不同语言的这一级别的同义词查询,对此我引以为傲。

概念识别是我们应用于搜索排序系统的另一项技术。识别查询中关键概念帮助我们提供更相关的搜索结果。例如,在我们的算法能够理解在 [new york times square church] 查询中,用户正在搜索时代广场上著名的教堂,而不是在纽约时报上搜索文章。我们不会仅仅停留在识别概念阶段;我们会进一步用正确概念强化查询,比如,有人查询 [PC and its impact on people],实际上是在查询计算机对社会的影响,或是有人输入 [rainforest instructional activities for vocabulary],实际上是搜寻雨林教案。我们的查询分析算法包含许多诸如此类的技术,而且,我们在全球范围为差不多每一种语言上提供这一服务。

理解用户:我们努力理解用户的意图,目的在于反馈人们真正想要的,而不仅仅是他们在查询中所说的。这项工作开始于一项全球范围的本土化系统,在这个系统中增加了我们的先进的个性化技术,以及我们在理解用户方面取得进步的几项技术,例如整合搜索。

我们的明确的目标是“ 为全球用户提供相关性最强的本土搜索服务”,这反映在我们的本土化进程中。在不同国家输入同样的查询可能产生完全不同的搜索结果。一位用户在美国输入 [bank] 应该搜到美国的银行,而在英国的用户或许搜到银行授信额度或英国金融机构。在其他说英语的国家,比如澳大利亚、加拿大、新西兰、南非,对此查询的搜索结果应该是当地的金融机构。当人们在一些非英语国家如埃及、以色列、日本、俄国、沙特阿拉伯、瑞士输入这一查询时,事情就变得非常有趣了。同样,查询 [football] 在澳大利亚、英国、美国是指完全不同的体育项目。这些例子告诉我们如何正确获得一个同样的概念的本土化版本。不管怎样,同样的查询在不同国家会有完全不同的结果。举例说明,[Côte d'Or] 是法国的一个地理区——但是在邻近的讲法语的比利时,它却是一家很大的巧克力生产商的名字。同样地,我们给出了正确的搜索结果:-)。

个性化是我们的搜索系统的另一个强项,即为各个用户定制搜索结果。在搜索时已经登录以及标记了网页历史记录的用户将得到比一般的谷歌搜索更贴近意图的结果。例如,一名大量查询足球相关搜索的用户输入 [giants] 时会得到更多与足球有关的搜索结果,而其他用户可能会得到与棒球队相关的搜索结果。同样,如果你倾向于一家特定的购物网站的信息,在你搜索商品时,你会更有可能得到来自这个网站的搜索结果。我们的调查显示,获得个性化搜索结果的用户会发现这些结果比非个性化搜索结果相关性更强。

理解用户意图的另一个例子是查询 [chevrolet magnum]。Magnum 实际上是道奇制造而非雪佛兰。所以我们在搜索结果集中给出了道奇 Magnum 的搜索结果。

我们在整合搜索领域所做的工作也是我们如何解读用户意图,给予他们真正需要的结果的另一个例证。当有人搜索 [bangalore] 时,他们将不仅获得重要的页面,他们同样将获得一个班加罗尔的地图,一段展示街道生活的视频,城市交通等等——观看那段视频时,我几乎觉得自己就在那里:-)——在写作的时候,还会有有关班加罗尔的新闻以及相关的博客。

最后让我简要介绍一下我们在搜索技术上的最新进展:跨语言信息检索。它允许用户首先搜索到非本国语言的信息,然后使用谷歌翻译技术将页面翻译过来,我们使得这些信息很容易获得。我把这一创新叫做:给我我想要的任何语言的答案。一个正在俄国搜索托尼•布莱尔个人传记的用户输入俄文 [Тони Блэр биография],在我们的英文搜索结果底端将显示:
    


同样地,一个在埃及搜索迪斯尼电影歌曲的用户输入 [أغاني أفلام ديزني] 将获得在英文页面中的搜索结果。让我们兴奋的是,跨语言信息检索让我们离我们的目标更近,让我们能够组织全球信息,真正达到信息在世界范围内的互通与可用。

我将继续展示我们为了尽可能地优化搜索排序系统而开发的的堪称艺术品的技术,但事实上,搜索还远不是一个已经解决的问题。许多谷歌查询仍然没有得到满意结果,而每一个这样的查询都是改进我们的排序系统的机会。我很自信,我们的团队已经开发了许多技术,我们将在不久的将来使我们的排序算法取得更大进步。

我希望,我的关于谷歌搜索排序的两篇文章已经清楚地显示,我们为搜索而生,我们比以往更充满热情。我们为全球用户服务的热情是前所未有的。我们为自己在运转一个非常好的搜索排序系统而自豪,我们将每天努力工作,让它变得更好。
add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:09 谷歌排序的介绍» Google 黑板报 -- Google 中国的博客网志


今年 5 月,我们的副总裁乌迪•曼博曾撰博介绍谷歌搜索质量小组,这个组主要负责谷歌搜索结果的排序工作。尤迪介绍了这个“质量”小组的不同团队,包括核心排序团队、国际搜索团队、用户界面团队、网络作弊以及其他团队。在这篇文章中,我希望向你重点介绍他们其中的一员:负责核心排序的团队。

首先让我介绍我自己:我的名字是 Amit Singhal,谷歌首席工程师,负责谷歌的搜索排序团队。1990 年,作为计算机专业的毕业生,我开始了解搜索,至今在这一领域工作了 18 年。在学术界,搜索被称作是信息检索。我先是作为信息检索研究员工作了 10 年,2000 年,我进入谷歌,一直从事谷歌搜索排序工作到现在。

谷歌的搜索排序是一整套的算法,用于寻找相关程度最高的文档以满足每个用户查询需求。我们每天在海量的网络信息中用这套算法处理数亿次的查询,每一个用户的查询我们都会应用这套算法。我们的网页搜索是访问量最高也是最知名的搜索服务,这套算法也用在其他的谷歌搜索服务,包括图片搜索、资讯搜索、YouTube、谷歌地图、谷歌图书等等,在这些搜索中谷歌的排序算法有所修改。

关于谷歌排序,我最常听到的问题是:“你们怎么做搜索排序?”当然,我需要很多篇幅来介绍建立像谷歌一样的一个堪称艺术品的排序系统,我将在后续的文章中做更深入的阐述。现在,我很高兴与你分享谷歌搜索排序算法的哲学:

1、为全球用户提供相关性最强的本土搜索服务
2、简单易用
3、从不人为干预

关于第一点显而易见,因为我们对搜索服务的热情,我们绝对想确保每个用户查询都获得相关度最高的搜索结果。我们把这一点称作“不放过任何一个有瑕疵的查询”原则。无论何时,无论是来自哪个国家的何种语言的查询,只要我们没有给出理想的搜索结果——尽管我们确信这种不完美在搜索中依旧存在,搜索才刚刚开始,我们都用这一原则激励我们改进服务。

第二点看起来也很明显。哪个系统架构师不希望他们的系统简单易用?不过,因为我们必须对多种语言的各种各样的查询做出回应,我们的搜索系统也随着查询服务的发展而变得越来越复杂。我们非常努力地保持系统的简单易用,同时保证搜索质量没有降低。这是一项长期的工作,但这一切值得我们去努力。我们每周做十次搜索排序算法的改进,简单易用是我们做每一次改进时重点考虑的事情。我们的工程师很清楚地了解针对一个既定查询一篇网页应该如何排序。这个简单易懂的系统可以让我们快速实现创新。“简单易用”的原则非常有效。

关于谷歌排序一个不可避免但总是有些被误导的话题就是“谷歌是否人为干预搜索结果?”请允许我用谷歌算法的第三点原则来回答:从不人为干预。我们认为,互联网是人类共同建立的。你们就是网页的创建者和链接者,我们用我们的算法将人类的贡献利用起来。搜索结果的最终排序应该取决于我们对互联网大社区的总体贡献的运算结果,而不是我们的人为干预的结果。我们相信,对于任何个人的主观判断只是一个主观结果,而通过我们的算法,将充满着庞大的人类智慧的网页和链接提炼出来,其结果优于任何人为的主观判断。

我们反对人为调整搜索结果的第二个理由,就是我们认为,一次失败的查询意味着我们的搜索排序算法的一次改进。而算法的改进将不仅仅提高一次查询的服务质量,它可以提高类似查询的整体搜索服务质量,而且通常是对多种语言搜索服务质量的提高。不过,我还要补充一点,谷歌对于所推荐的网页有明确规定,如果出现违反我们的规定的网站,例如非法、儿童色情、病毒或恶意软件等等,我们将采取行动。

请继续关注我的下一篇文章,我将详细讲解我们的搜索排序技术,并且举出排序技术的几个实例。让我用一句话总结这个博客:我们对于搜索的热情比以往更为强烈。作为一个搜索研究员,我拥有这个世界上最好的工作:-)
add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:09 谷歌地球式的夏令营!» Google 黑板报 -- Google 中国的博客网志


上个星期,18 位谷歌员工带着他们的几个 9 到 12 岁的孩子们来到我们山景总部,这些孩子花了一个星期来学习谷歌地球以及其他地理工具。一周的培训结束后,这些“地理训练营”的小参与者们已经知道如何使用谷歌地球、谷歌地图、Docs,以及如何使用这些工具研究环境课题,虚拟游览星际与太空,他们还一起合作做了一次全球动物栖息地的演讲。
    


我不确定到底谁玩得更快活——是老师还是这些孩子!当一周的时间快结束时,我们要求全体参与人员如实反映他们学到了什么,我必须与大家分享一下他们的答复:

我从不知道我能用谷歌地球....
- 飞行(Matt,6 年级)
- 看见迪斯尼乐园所有的马车(Gwen,4 年级)
- 了解了那些快要灭绝的动物(Aditya,7 年级)

我看到的最酷的地方是....
- 太空梭酒店(Jack,7 年级)
- 帝国大厦(Jake)
- 整个宇宙(Andrew,6 年级)

当我长大后,我会用谷歌地球...
- 找一个度假场所(Nick,5 年级)
- 与其他人分享关于不同国家的看法(Esha,9 年级)
- 关注其他星系,看那里是否有交通堵塞(Aditya,7 年级)

如果我在地理团队工作,我会...
- 用SketchUp制作更多建筑(Erik,5 年级)
- 发明一个航海模拟器,使你可以成为一艘船的船长(Ashna)
- 设计一个模拟驾驶功能,人们可以假装他们正在路上驾驶车辆(Warren,7 年级)
add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:09 谷歌员工如何调换座位» Google 黑板报 -- Google 中国的博客网志


我会以尽量平静的心情来描写如何在谷歌公司调换座位,因为这个事情真的是很难让人平静,起码对于上周的 AdSense 部门来说,是这样。

我刚从美国回来的时候,同学们就纷纷表达了“怨恨”之情,说大家很早就喊着要调位置了,就是因为你没有回来才一直等着拖着,我错了,大家多吃我带回来的巧克力。

后来我的老板安妮(名称全部使用化名,我现起的)忍不住了,在周三的时候跑到了这次负责换位置的小安前面,说你本周五之前必须搞定,不然……

小安是个广东银,我们部门的技术大拿,很快他就出炉了他的座位调整方案,偶滴神啊,做技术的果然是很好很强大,大家请看:

--------------------------------------------------------------
尊敬的领导、同仁及同学,

非常抱歉拖了这么久都没有换位置,但是现在终于要换了,这次位置调整采取的是大家曾经非常熟悉的高考志愿填报方法。

方案如下:

大家根据喜好,填报座位志愿。但是为了保证能达到让同事互相了解,不要产生扎堆的现象。故我将所有座位划分成了 4 个区域,在填报志愿的时候,请你们务必在每个区都挑一个位置。

如果有出现在同一个区域挑 2 个或以上位置的,该项志愿无效。

请访问 http:/*************,按一下那个抽签的按钮,系统会生成一个随机数,这个就是你的成绩,将决定你那个志愿可能录取。

将你选好的座位号和你的成绩,填写到下列的表格中即刻提交。

最后座位的安排是综合根据你填报的志愿优先顺序和你的成绩决定。先看志愿,如果有多个人选择同样的位置,再根据成绩决定。如果你运气不佳,4 个志愿都没轮上,只能服从组织分配了。不填写表格的,默认为服从分配。

PS:

附件是座位的分区表和座位编号,请在表格中填写座位编号。

目前实习生的位置是不可选的,还有 trakken admin 的位置也是不可选的(我打不过 robot )。

如果你发现下面的表格无法使用,你可以使用以下链接
https://spreadsheets.google.com/viewform?key=*************************

最后,本次活动不禁止使用线下的力量,如果你可以利用你的人格魅力,让全团队的人都不选择你喜欢的位置,那么你即可顺利获得该座位。
--------------------------------------------------------------------

这个邮件发出来以后,真的是激起了 AdSense 大院的千层浪,群众沸腾了,我不得不再次平复一下我那砰砰乱跳的小鹿,用平静的语气再次真实的还原那个现场:

1. 首先是随机生成分数。这个分数的区间是从 0 到 1000,同样是广东籍的加拿大帅哥“有劲”首先让我们叹为观止,人家直接拿了一个 970 多分,然后很低调地说,读个 MBA 看来还是有一些作用的。最低的是海先生,居然只有 68 分,连人家的零头都不到,鄙视一下……

2. 随着分数的陆续出来,大家首先对分数是否代表人品这个问题进行了激烈而友好的讨论,最后这个问题被我和王姐所代表的 200 分俱乐部不了了之,当然,海先生也是我们的坚定的支持者之一。(题外话,小安的分数生成页面完全是他的风格,上面巨大的字写着“不至于吧,换座位而已!”而且那个分数和你的电脑 IP 相连,你不管这么刷新都是那个可怜的 235 分,我当时脑中回响的就是那熟悉的广东腔调普通话,后来大家表示均有同感,此处按下不表)。

3. 蛇有蛇路,鳖有鳖路。分数高的肯定是指点江山,意气风发,像“有劲”同学就基本不用考虑什么战略和战术的问题,爷想坐哪里就是哪里,其他的高分俱乐部成员也是经过了友好的协商,看来高考报考留下的经验还是有一定作用的,大家不要抢同一个座位就好了。比较可怜的是我们这些低分的兄弟姐妹,一边怒骂小安的这个机制不合理,说要加上第一和第二志愿的加权影响,另外还要低眉顺眼的去打探“有劲”之流选的位置,同时还要暗中斗智斗勇,因为你只要确保大家第一志愿都不选你要的那个位置,你也可以低分读上一流的大学啦。像王姐长袖善舞,左右逢源地选到自己的座位,我就只能拍着桌子虚张声势的大喊谁抢我的位置我跟谁急了。(这个过程之激烈啊,我只能不停摇着扇子要自己冷静下来了)。

4. 分数不同的众生相。和我一样的低分低能的小颗粒同学也是到处协商沟通,这几天随时都能听到他那爽朗的笑声,估计又是谁答应不坐他的破位置了(后来得知,人家傍上了 trakken robot 这颗大树,说生是 robot 的人,死是 robot 的鬼,就贴着那台电脑坐,别人不要妄想了);须臾同学更绝,700 多分的高分拿出来当作选秀权进行交换,不停的引诱我拿点东西跟他交换,可怜我囊中羞涩实在是不能多贡献一包奶粉给他的大胖小子啊;人品一直没话说的 SK 同学也只有 100 多分,每天对着电脑百思不得其解。

5. 老板选位置。在谷歌当老板很惨,开复也就分了一个电话亭大小的房间。我们的老板罗伊也是,一直坐在路边,人来人往打扰不说,还东冷夏热,这几年一到夏天就打开一个小的电风扇不停地吹,我们也不敢在他面前抱怨公司空调太大了,这个电风扇当年 Facility 几次要借去给开复,堪称谷歌第一抢手电风扇。其实我们也不是虐待老板,当年也分了一个大的会议室给他当办公室,但是老板说还是要和群众在一起,于是我们就分了一个大家都不要的位置给他了,还说是抓阄剩下的……其实也就是抓阄剩下的,因为那个位置没有参与我们之前抓阄的过程……

6. 机关算尽的我。鉴于我桌上的东西太多太乱,我的第一目标就是保住这个位置,不停的进行外交活动,详细介绍我的位置的种种不好,说我边上虽然就是山景(抬头可见海淀的山景),但是这里的空调有问题,冬天热夏天冷,整个让你四季失调。这番游说很成功,人民群众都很给我面子没有去选这个位置。但是很不成功的地方在于,我的老板们都不在场,这就导致了一个后果——两个老板都选了我背后的位置,从此以后我后面就有了两大护法,左罗伊,右安妮,一般的牛鬼蛇神估计是不敢过来捣乱的了。大家对此的一致评论是:从此以后我们将看见一个无比勤奋的小廖……

谷歌内部对人对事有一个评价的标准:一个事情办的好不好,还要看这个人或者这个事情是不是 “Googley”,对于这个公司内部的评价标准,我想这次的换座位事件应该能算有 “Googley”。

以上为个人感受,感谢观赏。
add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:09 浪潮之巅 第十章 短暂的春秋——与机会失之交臂的公司(二)» Google 黑板报 -- Google 中国的博客网志


第一节 太阳公司 1.1 昔日的辉煌

1.2 错失良机

在太阳公司,至少有两个人从中吸取了教训,就是后来成为 Google CEO 的施密特和太阳现在的 CEO 强纳森•施瓦茨(Jonathon Schwartz)。施密特当时是太阳公司主管软件的副总裁,他从太阳失败的教训中总结出了反摩尔定理,我们已经介绍过。施密特认识到依靠硬件的利润是不断下降的,而 IT 服务业的利润则是恒定的(并随着通货膨胀而略有增加)。如果说施密特是理论家,施瓦茨则是实践家,后者着手太阳公司从硬件制造商到IT服务的转型。遗憾的是,当时马可尼里领导的太阳公司没有看到、也很难看到这一点。

事实证明,微软虽然是IT史上最可怕的对手,但是并非无懈可击。历史上甲骨文 (Oracle)、Intuit(Turbo Tax)、Adobe 和 Yahoo 以及今天的 Google 都在自己的领域打败了微软。微软虽然有世界上最好的计算机科学家和软件工程师,但是,它的产品在技术上很少领先于竞争对手,它更多的是靠商业优势取胜。上述公司看到了它们和微软竞争的关键所在,利用技术优势固守自己的领域,不给微软可乘之机,并最终胜出。九十年代时,Unix 相比 Windows NT 在中小企业的业务上占优势。各种版本的 Unix,包括开源的 Linux 都有自己稳定的客户。

太阳应该做的第一件事便是利用它在 Unix 上的主导地位,或联合、或兼并其它 Unix 服务器厂商共同对付微软并稳守中大型企业市场。它至少可以在操作系统上和微软分庭抗礼。至今,Windows 的服务器在很多业务上还无法取代 Unix 的位置。但是太阳公司当年带头在 Unix 阵营里窝里斗,根本没有把精力转到和微软的竞争上。

太阳公司该做的第二件事就是改变商业模式开源 Solaris,从卖操作系统变成提供服务。要知道,一份 Solaris 操作系统不过两三百美元,但是 IT 领域一小时的服务就能收这么多钱。但是,太阳公司以硬件业务(而不是服务业务)为主的商业模式使得它不可能开源 Solaris,因为它主要的钱来自于硬件。(正是这个道理,苹果也不可能把它的 iPhone 操作系统开源。)我在前面的章节中经常提到基因决定的理论,有些读者认为我是宿命论。但事实证明绝大部分公司包括很多伟大的公司都很难逃脱这个宿命。(也有一些例外的,以后我们会介绍这些例外的公司,比如通用电气 GE 公司和 3M 公司。)而相反,以服务为主的 IBM 公司倒反而比较早地加入了开源 Linux 的行列。2000 年以后,由于高档微机已经达到了工作站的计算速度,价钱又便宜很多,IBM 靠开源 Linux 服务器从对太阳公司的价格劣势变成了价格优势。等到 2004 年,太阳公司明白了这个道理,将 Solaris 开源, IBM 已经抢到了先机,成为 Unix 市场的最大服务商。

马可尼里非常重视研发,太阳公司先后开发出 Sparc 系列处理器和工作站、Solaris 操作系统,这些产品为太阳公司带来了可观的利润。但是太阳公司最有意义的发明是至今没有给太阳公司带来什么经济效益的 Java 程序语言。太阳公司第三个遗憾之处就是没有能将 Java 间接地转化成利润。

让我们来简要地回顾一下 Java 诞生的背景。九十年代以前,世界上的计算机要么不联网,要么在企业内部自己联网。可以被公众共享的内容和资源是很有限的。每个单位内部的计算机系统只要自己统一就好了。当互联网蓬勃发展起来的时候,不同计算机之间共享信息和资源的需求就产生了。这时,需要一种跨不同硬件和不同操作系统的新型平台 (Platform),在这个平台上实现人机交流。一九九五年五月太阳公司发表了 Java 高级程序语言,由于它不需要和硬件相关的编译器,正好适合这个需求。(注释:大多数高级语言的程序在运行前需要根据不同的计算机进行编译,然后才能运行。Java 的程序不需要编译,而是在运行时边解释边运行。这样 Java 的程序就不受计算平台限制,在互联网兴起后,特别适合在互联网上编程。)可以说 Java 诞生的时机非常好,它给太阳公司提供了一个取代操作系统公司(主要是微软)主导计算机领域的可能性。下面这张附图表示在网络时代以前,操作系统公司如何通过操作系统来统一不同的硬件,控制用户。这时的计算机工业的皇冠属于操作系统公司。
    


而这张图,则是在互联网时代通过跨操作系统的平台控制用户的新构想。这时,控制跨操作系统平台的公司有可能成为新的王者。
    


马可尼里看到了这一点。在 Java 出来以后,太阳公司便赔钱作了大力推广,仅三个月后,网景公司就决定采用 Java。由于 Java 是新一代的面向目标 (Object Oriented) 的程序语言,并且有不受操作系统限制、对网络功能有很强的支持、可以在本地计算机上运行远程程序的优点,加上对终端用户是免费的,Java 一下就推广开了。很快甲骨文公司、Borland 公司、SGI 公司、Adobe 公司、IBM 公司、AT&T 公司和英特尔公司也加入了 Java 的同盟军。

但是,太阳公司通过 Java 实现跨操作系统平台的梦想至今没有实现。用华尔街的话讲,就是 Java 是赔钱赚吆喝。赚到吆喝后怎么挣钱,太阳公司至今不知道。我接触过太阳公司的很多人,他们大多抱怨 Java 这种免费的东西无法挣钱。我觉得主要还是看人,设想如果 Java 当初掌握在盖茨手里,他一定能玩出无数的名堂。

事实上,微软很眼馋 Java 这个宝贝,1996 年它不得不向太阳公司购买 Java 的授权(License)。太阳公司当初的想法是通过微软推广 Java,合同也是这样签的。但是,微软有自己的算盘,并没有依照合同向用户提供用 Java 开发的产品,而是通过太阳的技术,搞自己的类似产品。更有甚者,根据后来法庭的判定,微软误导 Java 开发者、阻碍他们开发兼容太阳公司 Java 技术的产品,以达到打压 Java 的目的。为了满足在互联网上建立网站和开发应用程序的需求,太阳搞出了相应的基于 Java 的 JSP 开发环境,微软则争锋相对,搞出了基于自己的 Visual Basic 的 ASP 技术。鉴于微软利用它在操作系统领域的垄断地位打压太阳公司,后者不得不于 1997 年 10 月向美国加州地方法院起诉微软,指控后者违反了两公司就Java技术所签定的合同,并要求微软公司停止侵犯Java兼容标准。这场官司后来升级,又和微软的反垄断官司扯到一起。2001 年,太阳公司打赢了这场旷日持久的官司,获得微软公司高达十亿美元的赔偿。但是,微软已经获得了更大的市场占有率。

虽然 ASP 和 JSP 的授权费本身对双方的直接收入并不重要,但对计算机服务器市场格局的影响却是很大的。在九十年代末,全世界计算机服务器市场以前所未有的速度发展。这一方面是受美国和中国经济发展的带动(在过去的近二十年里,这两个国家贡献了全球 GDP 净增值的一半),另一方面,是靠全世界互联网的兴起。几乎每一个公司都必须有自己的网站,都必须购买运行网站的服务器,或者租用专业数据中心的服务器。不论是自己维护网站,还是租用数据中心,都会刺激服务器市场的极速发展。全世界网站对外的接口基本上非 ASP 即 JSP,前者使用的操作系统就是微软的操作系统,使用的服务器是 Dell 和 HP 等微机厂商的服务器;后者对应的操作系统主要是 Unix,使用的服务器则是太阳、SGI 和 IBM 等工作站和服务器厂商的产品。2000 年以前,整个服务器市场不仅发展快,而且似乎看不到饱和的迹象,甚至发生过 IBM 公司购买太阳公司服务器的荒唐事。由于两种服务器市场都能得到发展,太阳公司的业绩和 ASP 与 JSP 之争无关。但是 2000 年后,网络泡沫破碎,绝大多数不盈利的 .com 公司都关门了,存活下来的公司也急刹车似的停止了采购。服务器市场突然低迷,服务器市场成了一个零和的游戏。Windows 的服务器多卖一些,太阳公司的硬件产品销路就不畅。这样,太阳公司在短短一年间便从巅峰跌到谷底。下图是太阳公司股票在 2000 年前后的走势。
    


太阳公司与微软公司的操作系统和互联网平台之争失败的后果至此才看出来。更可怕的是,即使在 Unix 服务器市场,以IBM为首的基于开源 Linux 的廉价服务器超过了太阳公司的 Solaris 服务器。太阳公司前门拒狼、后门驱虎,苦不堪言。在 2003 年,Windows 服务器的市场占有率和 Unix 的服务器基本上平分秋色(当然,销售额还是后者大一些)。这一年,太阳公司亏损高达三十四亿美元,人们甚至怀疑它是否能作为一个独立的公司生存下去。太阳公司终于意识到通过开源提高 Solaris 服务器市场占有率的重要性,但是为时已晚。2006 年,在太阳公司工作了二十多年的创始人,硬件出身的马可尼里辞去了 CEO 的职务,软件出身的舒瓦茨接任。舒瓦茨进行了大规模裁员,并且卖掉了不少房地产,终于将太阳公司扭亏为盈。同时他将太阳公司从硬件制造商转变成软件开发商和服务商。太阳公司服务业收入从 2001 年的 16% 上升到 2007 年的 37%。舒瓦茨是太阳公司里面开源的创导者,在他担任第二把手 COO 时就开放了 Solaris。这些举措使得太阳公司市场占有率有所回升,同时 IT 服务给太阳公司带来了强劲的现金流。现在,太阳公司生存是没有问题了,但是它已经沦为一个二流公司,永远地失去了与微软和 IBM 分庭抗礼的机会。
add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:09 浪潮之巅 第十章 短暂的春秋——与机会失之交臂的公司(一)» Google 黑板报 -- Google 中国的博客网志


奥地利著名传记作家茨威格在他的《人类的群星闪耀时》一书中写道“一个真正的具有世界历史意义的时刻--一个人类的群星闪耀时刻出现以前,必然会有漫长的岁月无谓地流逝而去,在这种关键的时刻,那些平时慢慢悠悠顺序发生和并列发生的事,都压缩在这样一个决定一切的短暂时刻表现出来。这一时刻对世世代代作出不可改变的决定,它决定着一个人的生死、一个民族的存亡甚至整个人 类的命运。”

“在人类在命运降临的伟大瞬间,市民的一切美德——小心、顺从、勤勉、谨慎,都无济于事,它始终只要求天才人物,并且将他造就成不朽的形象。命运鄙视地把畏首畏尾的人拒之门外。命运——这世上的另一位神,只愿意用热烈的双臂把勇敢者高高举起,送上英雄们的天堂。”(节选自“三联版”舒昌善译本)

在二十世纪八九十年代,就是一个科技工业史上群星闪耀的时代。在以前 AT&T 和 IBM 的时代需要半个世纪才能发生的事,可能在这十年里一下就发生并结束了。在这个大时代,有很多公司原本有可能成为信息工业的王者,但是却最终与机会失之交臂。这些公司,不论当初多么辉煌,当它开始走下坡路时,被人遗忘的速度比它衰落的速度更快。今天,我们不妨回过头来看一看这些失落或者已经消失的争霸者,毕竟他们曾经在信息产业呼风唤雨过。这里,我们将介绍太阳公司(Sun Microsystems)、Novell 公司、网景(Netscape)公司和 Real Networks 公司。其中关于太阳公司的篇幅最长,因为它相对的影响力最大。网景公司的知名度曾经也很大,但是由于它和微软的浏览器之争的历史已广为人知,我们只是简要回顾一下这段历史,重点探讨一下它是否存在胜出微软的可能。Novell 公司和 Real Networks 公司的名气要小些,但是它们的的确确有过成为IT行业巨头的可能性和机遇,只是因为一些原因和命运失之交臂。

第一节 太阳公司 (Sun Microsystems)

1.1 昔日的辉煌

从斯坦福大学孵化出的高科技公司首推太阳公司(Sun Microsystems),它也是最早进入中国市场并直接与中国政府开展技术合作的计算机公司。在 2001 年的高峰期,太阳公司在全球拥有五万雇员,市值超过两千亿美元,不仅是它今天市值的三十多倍,而且远远超过今天市值排名第二的 Google 的一千七百亿美元、和排名第三的 IBM 的一千六百亿美元。它的办公面积超过五十个足球场(四十五万平方米),并且还有十几个足球场大小的办公楼正在建设中。太阳公司不仅打败了包括 IBM 在内的全部工作站(Work Station)和小型机(Mini Computer)公司,而且依靠它的 Solaris(一种Unix)和风靡世界的 Java 程序语言,成为在操作系统上最有可能挑战微软的公司。太阳公司不乏能人,它不仅为 Google 培养了 CEO 埃里克.施密特和首任工程部副总裁韦恩.罗森(Wayne Rosen),并且在一定程度上奠定了今天 Google 工程部门的基础。

但是,今天的太阳公司,不仅人数规模、市场股值、办公面积远不能和当年相比(能人都走了,办公楼也卖了,股票一落千丈),而且彻底退出了 IT 领域霸主之争。太阳公司从 1982 年成立到 2000 年达到顶峰用了近二十年时间,而走下坡路只用了一年,足以令经营者为戒。

太阳公司名称的由来很多人不知道,它其实是斯坦福大学校园网(Stanford University Network)的首字母缩写。当安迪.贝克托森 Andy Bechtolsheim (我们以后介绍 Google 时还会提到他)还是斯坦福大学研究生时,他设计出一种“三个百万”的小型图形计算机,称作图形工作站(Graphic Work Station)。这“三个百万”是指每秒一百万次的运算速度(现在微机的万分之一)、一百万字节的内存(今天 PC 的千分之一)和一百万象素的图形显示器(比今天的微机显示器低、比手机高)。但是,这在当时已经是很先进的了。贝克托森采用了摩托罗拉 68000 处理器,并用了一种当时很先进的内存管理器芯片来支持虚拟内存。和一般微机不同,网络功能是其必选项。贝克托森开发出原型机 Sun-1 后,便于 1982 年和斯科特.马可尼里(Scott McNealy)等斯坦福毕业生从学校出来创办了太阳公司。马可尼里担任了公司的 CEO,直到两年前退休。半年后,公司便盈利了。这是我知道的最快实现盈利的科技公司。四年后的 1986 年,太阳公司在纳斯达克挂牌上市,当时的股票代号是 SUNW,即太阳工作站的缩写,而不是今天的 JAVA。

太阳工作站早期采用摩托罗拉公司的中央处理器。1985 年,太阳公司研制出自己的 SPARC 减指指令(RISC)处理器,将工组站性能提高了一大截,并且保证了工作站在对 DEC 和 HP 小型机的竞争中最终胜出。在九十年代前很长的时间里,太阳公司的竞争对手是小型机公司和 SGI 等图形工作站公司,虽然在具体的商业竞争中,太阳和 DEC 等公司互有胜负,但是太阳总的来讲是无往不利。太阳公司的胜利,实际上是基于 Unix 服务器和工作站的系统对传统集中式中小型机(以DEC、HP 为代表)和终端系统的胜利。前者淘汰后者是计算机和网络技术发展的必然趋势。

但是,太阳公司远没有当年 AT&T 和 IBM 那样的好运气,后者一个主流产品可以销售十几年。而太阳公司崛起的时候正是信息革命的大时代,一切技术革命的周期都被大大地缩短了。九十年代以来随着微机的发展,基于微机的网络系统占领了中小企业很大的市场。虽然早在 80 年代,3Com 和 Novell 就在推广它们基于微机的以太网系统,但是他们的业务和太阳没有太大的重复,因此不会威胁太阳公司的发展。到九十年代后期,情况发生了根本性的变化。在硬件上,高端微机在计算速度上已经不逊色于低端工作站,但价钱便宜了很多。在软件上,微软公司推出 Windows NT 后,有了企业级(enterprise)的网络操作系统解决方案。这样,高端微机取代低端工作站和小型机进入企业级市场的时机就成熟了,企业级的霸主的争夺战就在微软和太阳之间展开了。

太阳公司的位置非常像微机争霸战中的苹果公司。它有自己成套的硬件和操作系统,但是它缺乏应用软件。太阳的 Star Office 至今恐怕除了它自己没有其它象样的公司在使用。而微软只做软件,而且只做操作系统(Windows NT),数据库 SQL Server 和办公软件(Office)等少数但同时是至关重要的软件。这三种软件是一个企业必不可少的。

这次争霸对微软来讲比它和苹果的竞争要轻松的多,首先,1995 年的微软已经不是八十年代初的小公司了,它当时已经成为历史上罕有的高成长、高利润公司。有了钱,一个有雄心的企业家就能找到自己想要的人。比如盖茨甚至为了照顾那些不愿意搬家的数据库专家,在他们现有的城市设立研发办公室。这是微软早期在和苹果竞争时根本做不到的;其次,微软已经在微机领域形成了垄断,并且它很善于将垄断的优势扩展(Leverage)到其它领域—非计算机专业的用户接受微软的 Windows NT 操作系统比接受太阳的 Solaris 要容易得多,因为大家在自己家的微机上使用和NT没有什么区别的 Windows 3.1 和 Windows95;第三,在应用软件开发上,微软更多地依靠第三方,而太阳和苹果一样,经常不得不自己开发。(苹果公司也曾面临同样的问题。)我们知道,一种操作系统是否能推广,关键看上面有多少应用软件可用。微软 Windows NT 上的应用软件比太阳 Solaris 多得多。最后,也是最关键的,就是人的因素。我们不能不承认,微软的管理团队是当时世界上 IT 领域最好的,比尔盖茨当年也是最棒的工业界领袖。

反观太阳公司,它的操作系统 Solaris 在技术上比 Windows NT 有明显的优势。我们在这里跳过技术上的细节,因为把它讲清楚需要花很大的篇幅。事实证明,包括 Solaris 在内的各种 Unix 操作系统比 Windows NT 能更好地利用计算机资源,尤其是当计算机系统庞大、用户数量巨大增加时。1997 年,微软买下了 Hotmail 后,花了很大力气想把后者的电子邮件服务系统从它原有的两种 Unix(FreeBSD和Solaris)操作系统移植到微软自己的 Windows NT 下,居然没有成功,因为 Windows NT 管理这么多服务器和用户并不方便。但是,这件事微软又必须做,否则它无法说服企业级客户购买自己的操作系统。于是,微软花了更大的力气,终于把 Hotmail 移植到 NT 后来的版本 Windows 2000 上。但是据说其中某些功能仍然由 Unix 来完成。太阳公司版的Unix,即 Solaris 是所有商业版中最可靠最完善的版本。太阳和微软之争,其实就是企业级的操作系统之争。对太阳来讲,取胜的关键在于是否能将它在 Unix 上的技术优势转换为市场优势。

马可尼里领导的太阳公司在很长时间里甚至没有看出决战操作系统的重要性,这样太阳公司和微软公司的竞赛还没有开始就先输了第一回合。这倒不是马可尼里无能,而是马可尼里等人的“思维”锁定在卖硬件上了。虽然太阳公司的工作站当年每台要上万美元、服务器要十万美元,但是比 DEC 的小型机和 IBM 的大型机便宜多了。在九十年代末由于互联网的兴起,太阳公司的服务器和工作站销路太好了、太挣钱了。虽然太阳公司的中小企业市场份额不断被微软/英特尔联盟侵蚀,但是它也在不断占领原来 DEC 和 HP 小型机的市场并有足够的处女地可以开发。因此,它的整体业务还在不断扩大。这很像十六世纪的西班牙王国,虽然它的无敌舰队已经被英国人打败了,并失去了海上霸主的地位,但是由于世界上可殖民的处女地仍然很多,支撑着这个海上老二繁荣了两个世纪,直到十九世纪全世界再无殖民地可开拓时,西班牙早期埋下的危机才表现出来。当然,衰落要比繁荣来得快,在很短时间内,西班牙从欧洲的富国沦为穷国。太阳公司也是如此。从 1986 年到 2001 年,太阳公司的营业额从 2.1 亿美元涨到 183 亿美元,成长率高达平均每年 36%,能连续十五年保持这样高速度发展,只有微软、英特尔和思科曾经做到过。在这种情形下,很少能有人冷静地看到高速发展背后的危机。太阳公司当时不自觉地满足于捏 SGI、DEC 和 HP 这些软柿子、并沉溺于在硬件市场上的胜利,忽视了来自微软的威胁。但当 2000 年互联网泡沫破碎时,它以服务器和工作站为主的硬件业务便急转直下。2002 财政年度(到 2002 年六月),它的营业额就比前一年跌掉了三成,并且从前一年盈利九亿美元跌到亏损五亿美元。太阳公司找不到稳定的利润来源和新的成长点,从此太阳公司便江河日下,一下从硅谷最值钱的公司沦为人均市值最低的公司。
add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image21:09 使用网站管理员工具申请重新审核» Google 黑板报 -- Google 中国的博客网志

Requesting reconsideration using Google Webmaster Tools


如果您的网站没有出现在
Google搜索结果内,您可能会有一点担心。在这里,我们收集了一些信息,帮助您确定何时及如何为您的网站提交一份申请重新审核的请求。

您可以按照Bergy(我们的视频资料中example.com网站的管理员)的做法,在片中他试图确定是否需要为自己的古罗马政治博客提交一份重新审核的申请。当然,并非所有网站管理员的问题可以追溯到Wysz (-:,但下面列出的简单步骤可以帮助您根据自己的情况找到正确的解决方案。


检查可访问性方面是否存在问题

您可能希望检查您的网站是否存在任何不能正常访问的问题——您可以登录到您自己的网站管理员工具账户,完成这项检查。在概述页面上,您可以看到Google机器人上次成功抓取到您网站主页的时间。另一种方式是检查您网站主页的快照日期。如需了解有关Google机器人如何抓取您网站的更详细信息,可以查看抓取速度图示(您可以选择:工具>设置抓取速度)。

在概述页面上,您还可以查看是否发生过任何抓取错误。例如,当我们试图访问您的网站时,如果您的服务器处于正忙或无法使用的状态时,您就会看到一个"网址无法访问"的错误讯息。另外一种可能是,您网站中有些URLrobots.txt文件屏蔽了。您会看到"网址受 robots.txt 限制"的字样。如果列出的网址中有些是您不希望被抓取的,您可以打开"工具",并选择"分析robots.txt" ——在这个选项中,您可以确认自己的robots.txt文件使用了正确格式,并且仅屏蔽您的网站上不希望被Google抓取到的部分。

除上述例子以外,还有其他几种类型的抓取错误——例如HTTP错误和URL超时错误等。尽管在这里我们并没有单独强调它们,但您仍能在网站管理员工具账户内的概述页面上看到所有这些错误的警示。

检查是否有未读消息

如果Google访问您的网站时没遇到任何问题,请查看网站管理员工具账户的消息中心内是否有未读消息。在这里Google会就有关您的网站管理员工具账户以及您所管理的网站等重要信息与您沟通。如果我们注意到您的网站出现了某些问题,我们可能会向您的消息中心发送消息,详细说明一些您需要修正的问题,使您的网站符合网站管理员指南的要求。

阅读网站管理员指南

如果您在消息中心内没有看到任何消息,那么请检查您的网站是否有哪些地方违反了网站管理员指南。您可以通过我们的"帮助中心"获得更多信息。

修复您的网站

如果您的网站违反了网站管理员指南,而且您认为这可能会影响Google对您网站的收录,您最好及时提交一份申请重新审核的请求。但在此之前,请修改您的网站,使它符合我们指南的要求。

提交重新审核的请求

现在您可以提交一份重新审核申请。请登录到您的网站管理员工具账户。在"工具"界面上点击"请求重新审核"并完成后续步骤。请务必解释清楚您认为您的网站的问题出在哪儿,以及您已经采取了哪些步骤来修复。

一旦您提交了请求,您将会在消息中心收到由我们发出的邮件,确认我们已收到请求。然后,我们将审核您的网站是否符合网站管理员指南的要求。

我们希望这篇文章能帮助您了解何时及如何申请重新审核。如果您不能确定Google为什么没有收录您的网站,我们的网站管理员支持论坛是一个寻求帮助的好地方。在那里,您会遇到许多既有丰富经验又很友好的的网站管理员和Google员工,他们会很乐意查看您的网站,并为您提出如何修复网站的建议。您可以在google.cn/webmasters/上找到指向帮助中心和网站管理员支持论坛的链接。


add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image14:29 搜狗推出卫星地图服务» 月光博客

  据搜狐网报道,搜狗地图正式发布“搜狗卫星影像地图”服务。据了解,这是目前国内第一个应用了最新数据的卫星图片产品,首次发布21个城市的高清晰影像服务,其中涵盖全部七个奥运城市。

  据搜狐网介绍,使用搜狗卫星影像地图无需下载,打开网页版搜狗地图即可自由切换。通过搜狗地图提供的卫星影像服务,使用者可以清楚地看到地面上的建筑、汽车、树木,甚至是道路上的标线,据知情人士介绍,“最高分辨率达到了0.5米/像素,已经是世界商用卫星图片服务的极限。”通过这项服务,网民甚至可以轻易地分辨出地上的小汽车是二厢车还是三厢车,更可以快速寻找到自己家的屋顶。在搜狗卫星影像服务中,用户依然能够进行地图搜索的相关操作,诸如放大缩小图像、对位置进行临时标注、测距、截图,还可以随时与传统地图切换,使用公交、自驾线路查询等基本功能轻松指引出行路线。

 搜狗推出卫星影像地图

  根据我的使用观察,搜狗卫星地图的数据实际来自DigitalGlobe,在其地图上有DigitalGlobe的标志。DigitalGlobe是高分辨率影像领域的全球商业化领导者,同时也是Google Earth的卫星影像提供商,DigitalGlobal拥有3颗成像卫星:Worldview I、Worldview II 和 QuickBird。这些卫星能够搜集高分辨率的商业地球影像,比其他所有的商业化卫星都能提供最大尺寸、最大在线存储量和最高分辨率的影像。Google Earth卫星地图的影像就是由DigitalGlobe的QuickBird等卫星拍摄,其图像清晰度非常高。这次搜狗推出的卫星地图,我估计也是通过购买DigitalGlobe的卫星图像来实现的。搜狗卫星地图和Google Earth所不同的是,搜狗直接在地图上标记了部分街道、桥梁、楼宇的名称,但目前没有发现用户交互式标记的功能,预计搜狗也不会开放这样的功能给大众。

  目前我浏览的过程中发现,搜狗卫星地图只支持中国主要大城市的地图,偏远地区(例如某些敏感的军事基地)不提供卫星地图,也不提供中国以外国家的卫星地图,属于一个自娱自乐的和谐版卫星地图。

继续阅读《搜狗推出卫星地图服务》...

分类: 卫星地图 | 添加评论(15)

相关文章:

web countersite statsSite Meter


add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl
Click here to bookmark this link.Channel Image12:47 Google Calendar开始官方支持iCal同步» 月光博客

  据读者riverscn发给我的邮件报道,Google Calendar开始官方支持iCal同步。iCal是苹果电脑自带的日历软件,和其他苹果软件一样简洁而容易上手,是许多苹果用户首选的日程工具。Google Calendar是Google推出的在线日历工具,具有良好的便携性和可移植性,更有强大的协同能力。一直以来这两个软件之间的结合都比较麻烦,要么是单向的同步,要么需要收费的服务。那么现在好了,Google Calendar开放了CalDAV支持,无需任何第三方软件,就可以和iCal无缝连接了。

  原文可以参考Google Help Center。下面是操作方法。

  打开iCal,选择菜单[iCal]-[偏好设置]-[帐户]

  点一下左边列表框的小“+”号,分别填入你的Google Calendar用户名和密码,在服务器选项里输入这个地址(注意是https) https://www.google.com/calendar/dav/你的注册邮箱地址/user

  主界面就会多出一个Google Calendar的项目,和网上的日历是同步的,效果如下图所示

  目前Google Calendar还不支持使用CalDAV与其它日历软件同步。

继续阅读《Google Calendar开始官方支持iCal同步》...

分类: 搜索引擎 | 添加评论(6)

相关文章:

web countersite statsSite Meter


add to del.icio.us add to del.icio.us. look up in del.icio.us.   add to furl.net add to furl

Mon 28 July, 2008

Click here to bookmark this link.Channel Image16:48 Photo Album: 秋意三清山» Wesley's blog
Click here to bookmark this link.Channel Image16:45 Photo Album: 风情南加州» Wesley's blog
Click here to bookmark this link.Channel Image16:30 Photo Album: 恋恋墨西哥» Wesley's blog
Click here to bookmark this link.Channel Image