July 17, 2010

如何使用Core Text计算一段文本绘制在屏幕上之后的高度

Core Text提供了一系列方便的函数,可以很容易的把文本绘制在屏幕上,对于一个Frame来说,一般并不需要担心文本的排列问题,这些Core Text的函数都可以直接搞定,只要给他一个大小合适的CGRect就可以。

但,在某些情况下,我们还希望知道这段文本在绘制之后,对应绘制的字体字号设置,在屏幕上实际占用了多大面积。举例来说,有文本段落a,屏幕大小rect,通常做法是以rect创建path,然后创建CTFramesetter,再然后创建CTFrame,最后用CTFrameDraw画出来,这时候,往往文本段落占用的实际面积会小于rect,这时候就有必要获得这段文本所占用的真正面积。

最理想的情况是使用

double CTLineGetTypographicBounds( CTLineRef line, CGFloat* ascent, CGFloat* descent, CGFloat* leading );

这是Core Text提供的函数,传入CTLine,就会得到这一行的ascent,descent和leading,在OSX上通常可以工作的很好,但是在iOS(iPhone/iPad)上这个函数的结果略有不同。

正常情况下,计算行高只需要ascent+descent+leading即可。在这个略有不同的情况下,leading的值会出现偏差,导致算出来的结果是错误的。如果不管行距,ascent+descent计算出来的Glyph的高度还是正确的。

这样就有了第一步

在创建用于绘图的CFAttributedStringRef时,除了设置字体,多设置一个CTParagraphStyleRef,其中特别应该确定行距kCTParagraphStyleSpecifierLineSpacing。在计算这里时,先逐行计算ascent+descent,累加起来,再加上一个行数*之前设置好的行距,这样算出来的就是这些文本的实际高度,CTLineGetTypographicBounds返回的结果是宽度,这样就可得到文本实际填充面积的Rect了。

但是这还是有问题,因为OSX上和iOS处理不同,所以事实上iOS的模拟器和真机的最终效果是不一样的,这样调试程序很麻烦。
于是还需要第二步

在最终往页面上绘制的时候,不再用CTFrameDraw来一次绘制全部,而是使用CTLineDraw逐行画,在画之前,先用CGContextSetTextPosition来设置好每行文本的位置。这样就保证了在任何平台上绘制效果一致。

问题就解决了。

CoreText在OS X和iOS上实现有很多细节区别,比如说,对CTRun的划分方式也不一样,在iOS上划分出来的Run数量比OSX上少很多,是按照字体划分的Run,按照文档出来,这是正确的,但OSX上是一个字一个Run这样划分的,和文档不符。iOS上的处理显然效率更好。

stackoverflow 上有一个类似的讨论,不过没考虑到iOS的区别

May 25, 2010

美国馆和他们的社会化媒体

周日,应邀参观世博美国馆,并参加东·西极客会

活动本身并不出奇,我算不得反对世博人士,但对于一个虚拟生活的倡导者(用通俗的话来说就是足够宅)的人来说,去现实中参加一场展览型的活动是毫无意义的,这类"信息"在虚拟世界一览无遗,我并不需要去美国馆才能获知美国精神,也不需要去日本馆才知道日本人玩什么。估计主办方也明白这事,花钱再多也很难让观众新奇,所以,大家不约而同选择了放电影(或称短片)的方式。

基于同样的原因,对于极客见面会也并无太多期望,当然能见到很多传说中的ID之后的人物也是非常有趣的。这次西方来的geek甚至有一个twitter id是两个字母的家伙。好玩之处是,西方的geek比东方健谈,他们似乎更愿意和人交流,而不象东方geek们随身带着各种数码装备,手机,笔记本,iPad一应俱全,随手拿出来就开始玩。不知道这种差别是什么造成的,但是想想"宅"这个词也是发源于东方,似乎也有点道理。

真正让我感觉震惊的是美国馆的社会化媒体。这是一个慢热的过程,最开始,一个非常中国化的ID @meiguoguan 出现在twitter上,那时候正逢"历史老师真假"事件时期,中文twitter圈子蔓延着怀疑一切的风气,对于这个ID,第一个问题就是真或假。当然,现在我们都知道这个ID是真的,而且是特意本土化的。

等我们参观回来,这个ID终于爆发出了神奇的一面,他竟然针对每个来宾,在twitter上定制化的一一发送了问候语,给我的是"感谢您的光临美国馆奇客日,期待你更多毛衣科技计划",所谓毛衣科技计划,是我一直在跟他们讲最近的流行词"毛衣"所致。看到这条推,我确实笑出来了。这种应用社会化媒体的方式确实很别致,至少是我第一次体验。大部分所谓的官方帐号,都是发布官方新闻而已。那种玩法其实根本不需要人,只要把一个rss源同步到社会化媒体即可,意义并不大。最令人惊喜的社会化媒体,是让人感觉帐号后面确实是一个人而不是程序,是可以交互的,对方是知道你,并且理解你的,这会令人印象深刻。美国馆场馆本身,与观众并无太多交互(其实这大概也是所有场馆的问题),现实中的交互很难,网上的交互则容易的多,需要转换的往往只是观念。世博刚刚开始,还有几个月的时间,可以供他们发挥,希望能看到更多有意思的互动发生。

回到开头,做为一个虚拟生活的倡导者,我认为在这种场合,虚拟化会高于现实也是同样原因,更多的交互和更方便的获取信息,终究会替换掉平淡,笨重又消耗资源的现实游览。

April 5, 2010

写在ipad即将到来的时候

我的朋友jack,这几天恰好在夏威夷,于是我就非常幸运的拜他所赐,买到了一个ipad。这可能是国内比较早的一批ipad吧。很多人难以理解Apple到底是什么东西,很多人嘲讽ipad是个无用的产品,很多人对苹果的印象是贵,样子好看等等,不幸的是,他们不了解这个公司,也不了解这个产品。似乎一个好的产品总是拥有完全相反的两方意见。

2001年12月,苹果发布了ipod,那"只不过"是个音乐播放器,从此拉开了一个新时代的帷幕。这是一个把计算能力放在掌心和身上的时代。苹果曾经试图把计算能力放到每个桌面上,不过那一次失败了,开放的wintel联盟打败了封闭的苹果。最终我们看到,大部分桌面的计算设备是微软的操作系统和PC。

在PC尚未普及到所有桌面的时候,移动计算的时代就开始了。这场战争从传统的手机制造商开始,Palm和Nokia曾经如日中天,曾经人们担心微软会重复在PC端的垄断,再次垄断移动设备。但是没多少人注意到苹果的行动,苹果从移动音乐设备进入,起初的对手看起来是SONY之类的消费电子制造商,现在回头看来,这是一个正确的选择。移动音乐设备的拥有量甚至不低于手机。

等到苹果发布itouch的时候,局势就已经确定了。无论是SONY,微软,NOKIA...没有一个厂商可以做出来更好的产品。是的,苹果有很多缺点,但竞争对手的缺点更多。

做为开发者,我尝试了一些设备,包括很多人认为有望和苹果抗衡的Android。结果非常令人失望。到目前为之,苹果的产品仍然是对于开发者最友好的产品。

系统的封闭和开放,其实并不会改变产品的可用性,甚至产品是否开源,也并不改变产品的可用性。Android的开放性并没有带来太多好处,无论是对于最终用户还是开发者。而苹果,无论对于用户还是开发者,都是在目前条件下最好的选择。我用以下几点来论证我的观点:

1 对于用户来说,苹果用户的体验是平滑的,Android用户的体验有障碍(别的不说,就那一堆按键就足够烦人了)

2 对于用户来说,在appstore上获得的软件,无论免费还是收费,质量都高于android market

3 对于用户来说,主流Android手机和iphone的价格差距只有1/4

4 对于开发者来说,花费同样的精力可以在Cocoa平台上开发出更好的应用,因为其标准统一,不需要担心太多不必要的问题。

5 对于开发者来说,appstore完成了推广,收款代理,展示多个流程,只分30%的收益,实在超值,做共享软件的随便找个收款代理,分成比例都要至少20%这个,他们可只负责收款,你还要把更多的钱交给软件下载站,推广站...

6 对于开发者来说,Android的商用价值毫无意义,我不太可能跑去为一个汽车电子厂商工作,但我有可能业余时间写几个小程序放在appstore玩玩。

7 对于小型商业用户,平台是否封闭,许可证价格高低,对他们影响并不大,无论是WinCE还是iphone/ipad,有人能做出来好用的app才是关键(GPS导航基本都采用winCE,也卖的好好的,用户才不关心下面是CE还是Android,他们买的是导航仪)

8 对于大型商业用户,Android仍然不堪用,他们仍然要基于Linux自己开发。

9 对于所有人,Android未来并非毫无机会,但现在实在不值得投入。

我拿到ipad,会在上面做一些东西。我坚信ipad在教育,多媒体等等方面都会有非常突出的表现。原本需要买6000块钱的计算机的场合,现在用3000块钱的ipad就可以代替了,从价格上看,对大部分用户也是值得的。

Android尚且可以拿来和Cocoa平台比较,而悲剧的Symbian,甚至连被比较的价值都没有了。移动计算这个市场,距离nokia越来越远了。

english version

April 1, 2010

一次被钓鱼的实践和心得

今天我在twitter上说我的QQ一年都用不了几次,不如卖掉。 @cosbeta 说他做生意比较需要短点的QQ号,因为在twitter上有了不少了解,我就干脆送给他了。晚上回来给了他相关信息。这时候发生了好玩的事情,竟然有人为了得到这个QQ号,想通过"社会工程学"的方法钓鱼。我虽然不会上当,但是觉得具有一定欺骗性,所以分享出来,提醒大家注意。

邮件很短,截图在此

1. 图中这个邮箱注册的不错。有一定欺骗性。在此也提醒大家,这不是 @cosbeta 的邮箱。要识别是不是常用邮箱,有一个快捷的方法,就是用google搜索一下,看看以前的活动记录。如果没有活动记录,一般是刚刚注册的。

以往的活动记录,在互联网上相当于信用卡账单,这也是我一直劝大家不要太注意所谓隐私的原因之一。你需要给自己留下信用记录,以便别人查对。知道 @cosbeta 真正的邮箱的朋友也可以搜索一下,看看有多少结果。

google一下看活动记录,这个办法甚至可以应对精心搭建的带有反向解析域名相似的邮件服务器(可称为官方钓鱼)。是简单而有效的办法。

当然也有推友提到自己因为防止垃圾邮件,保护的很好,以致于没有任何搜索结果,这种情况是比较特殊的,可以通过其他方法验证,我下面也会提到。

2 注意前面的cosbeta cosbeta,他确实设置了用户名,但正常人是不会这样写名字的。肯定是姓名的形式,就算用昵称,也很少有人重复两遍。碰上这种情况,至少应该注意提高警惕了。这不正常。

3 注意判断对方书写习惯。这封邮件在这方面也略显粗糙。比如 @cosbeta 虽然在成都,但说话利索,很少在后面加"咯"这样的语气词。他的标点都是全角,一般不出现半角。这是由输入法的习惯和键盘布局决定的,也是类似指纹的标记,如果不换机器或输入法,通常不会有太大变化。

4 还有一些其他细节线索可以判断一个邮件是否是钓鱼。这方面大家可慢慢思考,不多说。而我们需要做到的原则是,不要在不能确认身份的情况下说重要的东西。

确认身份的方法包括但不限于:和对方谈一些细节问题,比如谈谈@cosbeta的具体业务,看看对方是否知道。我今天和@cosbeta第一次直接聊天的时候,也聊了不少话。这些对话都可以从细节中确认对方身份。

当然,如果能打个电话问一下,可能会更容易点。对方的声音和说话习惯,是更难伪造的。在电话中多说几句,还可以注意到对方所处环境,是否局促,是否紧张,是否反应速度慢,这些迹象都代表了有异常发生,要特别注意。

最好的方法还是双方都使用OTR签名,这是判断身份和保护信息安全的重要手段,虽然麻烦,但非常有效。当然送个QQ号这种小事就不用麻烦 @cosbeta 专门装个OTR了,我通过对话已经能确认他的身份了。具体做法很多,可以以此为基础,推导出来更多的办法。

一个基本的原则是,要至少通过两个渠道来确认。比如 在twitter上dm一下,然后在gtalk上说一下,在网上说一下,电话说一下。让不同渠道说的内容相关,这样就可以确认出两边是否是一个人。这个思路可以举一反三。


总结一下必须具备的意识: 1 理解重要信息可能被泄露,必须具有安全意识 2 保证安全是繁琐的,但很重要。所以请用多种渠道确认对方身份,这是最基本的一步。 这两点非常基本,但是如果可以深刻理解,确实可以解决很多问题。


技巧说完了,我总结一下教训: twitter上坏人还是存在的,一个QQ号都值得这样做。其他的信息想必也有各种人,出于不同的目的而感兴趣。所以,用不明来源的第三方上推的推友,请记得改密码,没准你的密码早被存下了。我非常非常非常相信,有人曾经用某个第三方或是某个api收集了大量twitter帐号的密码和信息,在某些时候会使用的。

安全意识必须常常记在心中,在关键问题上谨慎对待。注意,邮箱地址是可以伪造的,gmail难一些,但仍然有可能伪造。所以千万注意分寸,什么东西会让你丢钱,什么东西会让你送命。考虑好后果,做事就会谨慎。


有一些不让人反感的确认信息小办法,可以分享。比如我要给别人汇款,对方短信过来一个帐号,怎么确认呢?礼貌起见,可以跟对方说:麻烦您能把具体金额再给我确认一下吗?对方如果能发出来细目,一般就差不多。第一次联系的人可以当作寒暄说一些往事,等等。

一般来说,安全是非常难达到的目标,我们可以默认自己的行为是不安全的,然后通过一系列的手段来降低不安全的概率,最终达到一个比较好的平衡。本文列出的是一些简单,易于实施的办法。深刻理解这些原则,未必可以保证绝对安全,但至少可以应付大部分麻烦。

March 24, 2010

五毛的末日

Google走了,对于我来说,这是意料之中的事情。

我在2个月前的一篇文章里面清楚的阐明了观点,说明了这个星球最大的信息传播者和最大的信息阻碍者之间的矛盾是如何的不可调和。所以Google走是必然的,也是好的。

信息审查本来是一个藏着掖着的事,这次被直挺挺的扔到了公众面前。就算新华社的通稿也不得不说:Google不愿在中国运营"受到审查的互联网搜索引擎"。而,这篇官方通稿,只敢提要遵守法律,不敢提具体条款。他们当然不敢,因为根本没有条款。

我相信,有条款,就算荒唐,也可以执行,没有条款就不可能执行。所以这篇官方通稿只不过是慌乱之中的掩耳盗铃。

我们看到了四处一面倒的舆论,这没什么大不了的,宣传机器全开,加上大量的威胁和金钱利诱,确实能看上去一片欣欣向荣,好像那四万亿扔下去的公路。可惜过 一段时间之后,潮水退去,下面是金子还是沙子,有目共睹。

某党被亿万人念诵其名,是大神,这没错。但Google被更多的人念诵其名,是超越大神的神。这故事,刚刚有了个开头。

不客气的说,整个互联网行业最近几年,是被Google照亮着道路。没有Google的时代,很快会看出来败向。而墙外的野草会得到更多的养料。

温室内的花朵会逐渐萎缩。那时候,就是五毛的末日,他们只剩下和自己玩了。

March 15, 2010

"原理小解"读后感

强烈推荐阅读youxu这篇原理分析的文章,写得相当好懂,读的过程中解答了我两个疑问,读完想明白了,写这里做笔记了。

一 墙是不是经过简单升级就可以对付西厢

西厢其实并没有对墙做任何事,只是巧妙的利用了TCP协议的规则。正如墙利用了三次握手的不校验这个特点(这不是漏洞,而是特点)强行插入reset包一样,西厢也利用了这个特点,让客户端和服务器发送出了墙希望看到的数据包。这里的强大之处在于,一切都是在规则之内的。所以说,如果我们从更高的角度看来,墙和西厢是一种东西,TCP协议如果进行了校验,那就不会有西厢,同样也不会有墙。如果没有墙,也不会有西厢这种用法。

二 墙能用什么办法来对付西厢

TCP协议的三次握手而不校验,留下了可以被强行插入包这个弱点,产生了墙。这个地方这样处理的原因主要是为了性能。TCP是一种高性能协议,所以必须以信任为基础,不能做太多的干涉,否则性能就会大大下降。所以我们目前采用的TCP协议都不对包做什么校验。如前面所说,西厢同样利用了这个特点来获得所需要的数据包。墙如果想知道那些连接是真的断开,哪些是被西厢模拟断开,就必须维护连接状态,进行深度包检测。这样一来效率就会大大下降。众所周知,如果一个系统中存在一个点,可以令系统性能大大下降,会出现什么结果

三 其他系统是否有移植机会

从现在的情况看来,代码并不复杂。整个系统的难度其实在于对TCP协议的深入了解,对墙工作原理的深入了解。这些部分完成之后,原理并不复杂。

可以把目前的alpha版本看作一份用代码写成的论文,其中是详细的论证过程。从代码的wiki看来,原作者据说不继续开发了,不过没关系,论文写完了,其实也就不需要他们那么nb的人来写产品了。您总不指望着科学家来做产品吧?

至于最终的产品,就期待别人了。熟悉网络开发的人,估计很快就可以写出来各种版本了。期待。

不知道我说的对不对,欢迎大家讨论。

March 6, 2010

修正Quicksilver的Trigger"无法保存"问题

Quicksilver 是 OS X上的神器。如果没有这个工具,OS X对我的吸引力至少降低1/3。强烈推荐给所有新用户使用,并且去youtube上看看其他用户使用这个工具
的视频,绝对大开眼界。

我推荐给笑来这个软件的时候,他说自定义的Trigger无法保存,一退出就没。我就试了一下,发现果然如此。这实在让人受不了。于是从svn拿了代码debug(这么强大的软件竟然是开源的)

很容易就在QSTriggerCenter.m找到了writeTriggers方法,其中performSelector的时候竟然是afterDelay:10.0,也就是说延迟10秒运行。这样创建了一堆触发器,如果没等够10秒退出了Quicksilver就不会保存了。

这地方的处理很奇怪,这地方保存的数据量和开销都很小,没必要延时。我就给改成了0,编译了一个版本出来。不一定适合所有人,所以也没向Quicksilver提交patch。

有兴趣自己修改的,可修改:
Quicksilver/Code-QuickStepCore/QSTriggerCenter.m

第144行

- (void)writeTriggers {
[self performSelector:@selector(writeTriggersNow) withObject:nil afterDelay:10.0 extend:YES];
}

把10.0修改成0.0就是立刻保存了,用XCode编译,然后把之前使用的Quicksilver中的Plugins目录( Quicksilver.app/Contents/PlugIns/ )复制过来,就可以正常使用了。

不想自己动手的可以下载我这个做好补丁,放入了基本的Plugi的版本 for 10.6 i368 http://dl.dropbox.com/u/3181901/Quicksilver.zip (请自行翻墙)

February 28, 2010

android手机HTC Hero如何使用vpn

大家都知道,官方的HTC hero目前是android 1.5,所以没有vpn功能。据说将来会出android 2.1,就能够支持了。但是默认的pptp vpn还是不怎么好用,在任何平台上,我都比较喜欢openvpn。

android 1.5是有办法使用openvpn的,并不复杂,我的手机已经成功了。方法和解释如下:

原理:

TUN/TAP是做虚拟网络的基础驱动,没有这个,就不会有vpn,无论pptp还是openvpn。而使用tun设备又需要root权限。

所以我们需要:
1 在手机上获得root权限
2 补上缺少的驱动。

整个做法非常安全,基本不会出问题。如果担心的话,可以搜索其他备份方法,很多论坛都有,我这里就不多说没用的了,只说跟openvpn有关的。

具体步骤:

1 把recovery image刷到手机上,好升级rom。

按照这个帖子进行 http://android.modaco.com/content/htc-hero-hero-modaco-com/291486/06-jan-installing-the-patched-recovery-image-on-your-device/

其实大部分人买到的机器,应该已经被刷过了,可以试试关机,然后按住 home键开机,看看是否会进入一个绿色文字的recovery菜单界面,如果已经有了,那就不用刷这个了。但上面那个帖子里面的压缩包仍然值得下载,里面有adb/fastboot等等一系列工具,这些东西本来是在android sdk里面的,如果你不想下载上百兆的SDK,不妨下这个几兆的包。里面有win/linux/mac版本。

2 合适的rom

先看看自己的rom有没有tun.ko模块。方法是用usb连上手机,用上面说的压缩包中的adb shell看看 /system/lib/modules/tun.ko 是否存在。大部分rom是不存在的。

有这个模块的rom是modaco的,其实这也是我觉得最好的一个rom,相当的稳定。搜索 3.1-update-hero-modacocustomrom-core-signed.zip 四处都有下载。然后就是改成update.zip 传到sd卡,关机,按住home开机,进入recovery菜单,选择用update.zip刷机。很多地方都有教程,不细说。

3 让openvpn生效

到 http://sourceforge.net/projects/tunneldroid 下载 openvpn-binary.zip 这个包,解压,用adb上传到手机上。这时候又用到了第一步下载的那
个包了。

先备份一下手机上的的文件

adb remount

adb shell

cd /system/lib

cp libcrypto.so libcrypto-orig.so

cp libssl.so libssl-orig.so

exit

然后上传文件

adb remount

adb push libcrypto.so /system/lib/

adb push liblzo.so /system/lib/

adb push libssl.so /system/lib/

adb push openssl /system/bin/

adb push openvpn /system/bin/

adb shell chmod 4755 /system/bin/openssl

adb shell chmod 4755 /system/bin/openvpn


可以在adb shell中测试一下,直接运行openvpn命令,看看是否能运行,就行了。

4 把vpn证书传到sd卡上。
把xxx.ovpn这个配置文件和证书之类的东西都放在 /sdcard/openvpn目录下,如果没有就自己创建。


5 去market装TunnelDroid
装上就可以看的到刚才放的配置文件,点连接就可以用了。

其他怪问题可以参考这个讨论: http://android.modaco.com/content/software/291919/openvpn-on-android/

在vps上架设openvpn服务的方法,可参考:

http://www.douhua.im/2010/01/06/ubuntu-server-install-openvpn-server/

如果能取得ip,不能连出去,一般是iptable的问题,
试试运行一下

/sbin/iptables -p FORWARD ACCEPT

一般就能行了。

如果正常,看到手机的ip就是vpn的ip了...我们通过购买vpn的形式交了一笔上网税之后,终于享受了正常的手机功能。

January 24, 2010

搜索世界的两端

这是给FTChinese写的稿子,发表于 http://www.ftchinese.com/story/001030941

所谓搜索世界的两端,一端是美国,一端是中国,一端是Google,一端是百度。如果眼下这些乱七八糟的事情继续坏下去,两端都会继续背离,越走越远。

另外,我并非专业写评论的,只是个程序员。班门弄斧,博大家一笑。

------------------------------------------------------------------------------------------

在蒸汽机出现之前,就算用鞭子拼命抽打坐骑,也不能让速度变快一倍。机械时代开始之后,一切都变得不同,从铁路到航空,速度变快了数倍。在今天这个时代,现实中的运动速度已经基本到达上限。科技再发展10年,也未必能让飞机的速度再提高一倍。但网络可以。从第一次工业革命到现在,"变快"一直是人类经济活动的重要部分。

网络传递的是数据,而非实体物质。在网络普及之前,传递一份文件尚可通过传真,但传递一段声音,一段影像,除了传递存储介质之外,别无他法。当网络把一切都数字化--电子邮件,电子文档,音频流,视频流之后,这些都变得简单了。人们发现,越来越多的东西无需传递实体物质,仅传递信息即可。简单来说,我们手写一封信通过邮局投寄,需要传递给对方的只是信的内容,并非信的实体。对方只要获知了信中的内容,并不需要拥有信封信纸之类的实体物质。网络通过让信息快速移动的方式,再次让人类的活动"变快"。

互联网如同高速公路,四通八达。要想快速移动,只有路是不行的,还需要足够好的车。对于互联网来说,搜索引擎就是这辆车。搜索引擎帮助人们快速找到需要的东西,换言之,缩短了人和信息之间的距离。即使在互联网的时代,人们也从来没有这么方便过,一般来说,大部分需求,用不了半秒钟都可以得到满意的答复。搜索引擎缩短了人到信息的距离,广告也就接踵而来。这种广告也和以往大不相同,既然已经"知道"人需要的东西,于是便可毫不干扰用户的插入对应的广告。这种经过整理的广告,甚至可以被认为成信息的一种。你在找Macbook的价格?Google不仅告诉你价格,还告诉你哪在出售。这就是Google在前面10年中的主要工作。

Google有个响亮的口号,叫做"整合全球信息",其意图非常明显,只需获取更多的信息,进行整理,等着人们来使用,把广告放在合适的位置,其收入就会持续增长。Google根据页面之间的关系,创造了PageRank的排名方法,根据这种算法排序搜索结果,绝不允许被人工干扰,广告和搜索结果有严格明确的区分,放在搜索结果右侧,绝不混淆。Google尽量去选择并提供用户可能需要的,绝不干扰用户原本的筛选行为和结果。对应到现实世界,就好像建设覆盖更广的高速公路,帮助更多的人到达目的地,同时在路边树立广告牌。不干扰用户,只给用户需要的东西,无论是信息还是广告。对于这样一家公司,信息越多,流动越快,人们就越需要Google来整合信息,使用Google的次数也就越多。这也就意味着广告可以被展示更多,进而带来更多的点击,创造更多的利润。这家公司几乎是最近10年来信息流动最大的推动者,他们甚至希望把用户接入网络的ISP费用都免掉,以便让信息流动的更快。Google不仅"不作恶",而且"无需作恶"。事实上,任何作恶行为(比如改变用户的搜索行为和结果)都会阻挡信息正常流动,最终受损害的不仅是用户的利益,更是Google的利益。

一个伟大的事业,不会只有一种盈利方法。在中国,其竞争对手百度,找到了另外一条道路。起初,百度和Google类似,也整合信息,缩短人和信息之间的距离。在百度的模式中,可以将一些付费的内容放在搜索结果页面中比较靠前的位置。这是一个相当有趣的平衡,百度同样希望缩短人和信息之间的距离,百度也需要用户点击他们提供的广告来获得盈利,他们比google走得远得多:他们将广告直接置入搜索结果,以鱼目混珠式的点击获得更快捷的盈利。这听起来有点像高速公路上的收费站。收费站当然不希望让高速公路完全拥堵,车辆仍然会在那里堵上个几分钟,缴纳过路费。甚至,他们只在乎过路费,并不太在意人们最终是否能够到达目的。几年前,百度特别热门的关键词搜索结果前几页都是付费广告,且没有任何标记,在这种情况下,人们很难利用百度找到有用的信息。一旦百度开始左右用户的搜索结果,就很难停下来,因为一旦停止,利润就会快速下跌。百度也在力图改变这个微妙的平衡,经过几年的努力,现在搜索结果中的广告会被标明"推广",而且最热门的关键词,也只有半页的付费结果了。

好的利润和坏的利润并不那么区别明显,何况,百度也在力图让自己的搜索结果更有用。但这仍不可避免的令公司陷入很多麻烦事中,前面的几年中,我们看到广告主,网站站长,代理商等各种角色对百度发泄过不满。百度是一家不错的公司,但他们确实很难和Google一样宣称自己"Don't be evil",他们显然也并不相信这个。对于Google来说,IPO只是一个起点,甚至到今天,Google仍然还远远没有到达巅峰,对于这家伟大的公司来说,这颗星球上还有太多的信息需要被整合,下至传统出版物,上至人们随身携带的移动设备。这些都将逐渐成为Google广阔帝国的一部分,Google仍然在关注如何缩短人和信息的距离,让信息流动的更快。至于这些地方是否被树立上广告牌,那并非第一优先考虑的事情。但对于百度,利润永远是第一的,百度的平衡仍然会继续下去,他们将走向另外一种模式。也许再经过5年的时间,我们可以看到"中国的Google"变得和Google截然不同。

January 14, 2010

Google百度和谷歌的那些事

很久不在这个blog上写和技术无关的东西了,尤其不想写跟业界有关的东西,觉得太空,太忽悠,对别人没价值。但这次,我想写写这5,6年对google和百度的一些观察心得。这里面,这里面存在大量的个人推论,我并不能担保完全正确,请只当作是一次思想的碰撞。

这篇blog主要由我完成,Tinyfool提出了大量修改意见,亦有重要贡献。

1 google,不作恶,信息流动

众所周知,google的目标是"整合全球信息"。从另外一个角度看来,这可以看作加快信息流动。信息流动变快是有巨大的经济价值的。加速,始终是人类经济活动的主线,快即是价值。从蒸汽时代到现在,每一次让移动速度加快的方式都造成了人类巨大的变化,只不过,在蒸汽和机械的时代,加快的是人和货物的移动,信息时代加快的是信息的流动。

仔细观察,可以发现,很多事情不再需要实体物质的流动。比如,我们不再需要人去送一封信,而只需传递一封电子邮件。我们也不那么需要去订阅一份报纸送上家门,而只需要浏览门户网站。这是信息时代带来的改变。而Google所做的,是继续加快这种信息流动的速度,让人们需要的东西更快的呈现在眼前。

Google始终坚持Pagerank排名,除了惩罚作弊者,并未干预过任何排名。这是因为,信息的正常流动才会加速,加速信息是Google的价值,也带来巨大的经济价值。Google绝对不允许把广告插入到搜索结果中。否则搜索结果质量会下降->用户不满意->搜索量降低->广告点击降低,最终仍然造成收入下降。(后面我们会讲到百度完全不同的做法)

投放过Adwords的同学会发现,并非价格越高越好,就算单价非常高,如果匹配度很低,广告点击率就会很低。这样Google仍然会降低这种匹配的出现频率。这样就避免了在A在B的搜索结果中投放"我是B"的广告来误导用户。

在这个体系下,有用的东西就是有用的,信息流动会变快,Google会推动这种信息变的更快,没用的东西就是垃圾,会阻碍信息流动,Google就让他变的更慢,直到被放弃。

Don't be evil 这句口号,可以理解为东欧出生的布林对人生的追求,也可以理解为Google商业利益的准则。因为,越是不作恶,越是让信息有序,正常的流动,给Google带来的实际利益也就越大。很多人认为这只是一句作秀的口号,事实上这是商业和个人追求的双重准则。


2 baidu,竞价排名,Google

百度显然看到了搜索的巨大价值,于是挤进了这个市场。我们且不论搜索质量,先看百度的利润来源。

百度同样有右侧广告(类似Adwords)和左侧排名。左侧排名就是所谓的竞价排名,这是百度的"创新"。竞价排名是百度收入的主要来源(注1)。

前面说过,竞价排名会干扰用户搜索体验,这大家都深有体验,某些热门关键词,百度前几页的结果都是竞价结果。那么为什么Google不敢这样做,而百度这样做就赚翻了呢?

昨天我在twitter上说过一句话:"adsense是促使信息有序流动并盈利,竞价排名是破坏信息流动并盈利。也难怪两个公司的人看问题截然不同。"

很多人有体验,如果你的搜索结果比较靠前,百度会有销售来找你做竞价排名,如果不做的话,很快你的搜索结果就骤减。这种"巧合"正好说明了阻碍信息流动也是可以盈利的。换言之,帮助别人照看孩子可以赚钱,威胁别人家孩子来收保护费也可以赚钱。

那么,按照前面的说法,阻碍信息流动的应该会被用户抛弃,在百度这边为什么情况相反呢?

搜索引擎的结果好坏实际很难评价,通常来说,"好10%"是完全没有意义的。这在这个市场上反复被证实,仅仅让搜索结果比对方好10%,或差10%,不会对用户体验影响太大。第二梯队中的搜狗,有道,搜索结果未必真的比百度差多少,但无论如何也无法翻身。同样的竞争也发生在了Google,Bing,Yahoo之间。换言之,搜索引擎产品是一种先入为主的产品。

在百度起家的年代,Google遭遇了最严重的屏蔽。大家应该都有体验,在大公司内基本无法正常访问Google。我们且不去讨论这种屏蔽的始作俑者是否是百度(无论百度是否加快了这种行为,最终的结果也必然发生)。那几年,又正好是中国互联网用户增长最快的年代(注2)。大量的新互联网用户直接成为了百度的用户。

搜索引擎市场上,"获得第一批用户"是至关重要的。

比较百度和Google的产品和收购策略,百度通常收购能带来巨大流量的产品,包括hao123,天空软件站等等。而Google收购的通常是具有独特的技术,可产生独特数据的产品,比如Analytics,blogger。

百度的主要企业运营行为是围绕"获得第一批用户"的。这些方法包括:工具条,hao123,和软件下载站合作等等。Google被屏蔽看作这种行为的反向手法,无论是否百度造就的,至少这个结果导致了百度获得了更多的第一批用户。

在一个基本没有竞争对手的市场上,百度可以"挟流量以令诸侯",这时候,他破坏一部分信息正常流动也不会造成太严重的后果。因为用户毫无比较。

Google的铁杆用户分为两类。一类是早期用户,这部分用户用过Google,也用过百度。有明确的比较和鉴别能力。他们最终选择了Google。另外一类是专业用户,他们真的发现百度找不到他们需要的东西。这时候Google对比百度的优势大大增加,到达了用户满意程度的临界点,于是这部分用户也选择了Google。

在中国互联网上,大部分用户偏重娱乐。这些用户很难分辨Google和百度的区别。甚至他们会觉得百度更好一些,因为百度提供了方便无比的MP3搜索。他们一旦先尝试了百度,那么就会留下,继续成为百度的用户。这就是我们今天看到的样子。


3 谷歌做了什么

2006年,Google决定开设中国办公室,并命名为谷歌。这是Google创始以来,最大胆,也是最小心的尝试。他们从来没有过试图进入一个需要过滤某些内容的国家(如前所述,这是阻碍信息流动,同时也背叛了Google的价值观)。

我们可以从一些细节看到Google的小心翼翼。比如,Google.cn是没有Google Account的。用户不能注册,也就没有密码,因此也就没有泄密之忧。后来有人嘲笑谷歌音乐可以用各种帐号登录,但就是不能用Google Account登录。所有需要登录的Google服务都没有进入中国。包括Gmail,Gtalk,Blogger等等等。

Google从进入中国那一天,就给自己设置好了底限。这种底限,就是李开复所说的"总部压力"。

李开复的谷歌,是谷歌,绝不是Google。是一个像百度的外企。

3个字可以来概括谷歌几年的工作:"倒流量"。倒流量的工作由一系列的合作(迅雷,sina,天涯,265)完成。这和Google的传统做法完全不同,Google几乎不去主动谋求流量,产品质量会解决所有问题。但谷歌必须谋求流量,一个急进,喜欢去大学讲座和写书的职业经理人,不会有创始人那样的耐心慢慢的守着一个市场。这让谷歌越来越像百度。

众所周知,用和对手一样的手段不可能打倒对手。

谷歌推出的最重量级产品,是谷歌音乐。这显然是看到了百度在MP3搜索上获得的好处,意图获得以娱乐为主的用户。当然,鉴于Google全球的品牌,这些音乐需要有版权。我不评价这个产品的好坏,但这显然和Google总部习惯格格不入。难道Google不知道去做一个音乐下载产品吗?难道Google不能去做一个下载站吗?总部不去做,只不过是因为这和价值观不符。

同样的价值观不符,还包括和天涯合作的来吧。之前说过,除了独特的数据,Google不会主动创造内容。以Google的胸怀,可以去索引百度贴吧和知道,并放在结果的显著位置,但没必要自己去模仿一个贴吧出来。这种竞争的水平太低了。

甚至,谷歌把中国访问Google.com的流量"劫持"到了Google.cn,以便提高自己的"占有率"。这件事让很多Google老用户恼火,Zola曾经在某个李开复参与的活动中举手提问,如何才能在中国正常的访问Google.com。

"倒流量"之后,谷歌的市场占有率有所上升。这是应该的。不过,新上升的占有率中,有多少是真正的搜索流量就不得而知了。正如百度搜索和贴吧等产品的比值是个秘密一样。

百度跟在Google后面,而谷歌跟在百度后面。

除了倒流量,谷歌也在"抓收入"。

投放过Adsense的朋友,大概会记得,Adsense的匹配质量越来越差,医疗方面的内容也越来越多。之前经常有人因为作弊被封掉帐号,后来再也没人说过自己的帐号被封。

我07年的两篇blog提到了这件事:
对不起,这是谷歌,不是google
去掉了blog上的google adsense

这两个特点都不是Google Adsense应有的特性。Google Adsense应该是匹配准,不干扰用户,且提供有用信息。时常读英文内容的人会时常看到Adsense广告的匹配相当精确,时而有点击的必要。

离开了这两个特点,可以把谷歌的广告看作一个大的广告联盟。这和拿了很多小网站的Banner的流量去找广告主谈价本质是一样的。在这种广告销售策略下,不需要匹配,不需要杜绝点击欺诈。最舍得花钱投这种广告的,无非是医疗,美容几类。

这几类是最赚钱的部分。不仅对于谷歌,对于百度,甚至对电视台都是一样的。

关于Adsense的故事,可以看看Tiny这篇文章 :我和Google Adsense那点故事

在这5年中,最常被记者们提起的"谷歌困境"就是"总部压力"。在我列出的这些部分,都已经触及到了Google价值观,所以Google必然不满。

有兴趣的同学可以对比一下2005~2010这5年,Google做了什么,谷歌做了什么。你会看到截然不同的项目。虽然结果看起来似乎都是:"市场份额增加,收入增加",Google在这几年,砸实了搜索的基础,扩大了搜索的内容来源和范围,把索引伸向了非数字内容,完成了地图/卫星图/Earth/街景等一系列重要产品,完成了在移动和3G方面的布局。谷歌做了什么呢?音乐,热榜,还有一个抄袭的输入法。

从谷歌存在的那天,我就写过一篇文章,核心意思是:要么把中国当作研发基地,投资,研发,但不运营,要么就干脆去印度开分公司。不幸言中。

4 孙云丰的观点

从商业价值和经济利益方面考量,都可以看出Google的不作恶,并不是作秀的口号。对于一个靠信息有序化赚钱的公司,必须要不作恶才行。百度正好相反,必须要作恶才行。

Google是幸福的,可以把商业价值建立在一个正确的价值观之上。这确实是可遇不可求的机会。很不幸,百度不行。

孙云丰的言论是无法自圆其说的。一方面,他认为Google不是人权斗士,只是个为了利润的市侩分子。另一方面,他又高举社会公平的大旗,宣称百度的道德感。这两者之间有明确的冲突。如果Google只为了利润,那么百度同样不应该有道德可言。

一方面,他宣称自己观点毫无错误,另一方面,他又删掉了自己的文章。有人说删贴未必是他自己的意愿。那么,作为宣称"有道德感"的百度员工,他不应该屈从别人的意见删掉自己认为正确的东西。作为百度高管,不应该允许百度公关去打电话要求别人删贴。

今天有一些百度员工为孙云丰辩护,这些说法同样无法自圆其说。试图证明百度是一家很好的公司,并不能证明孙云丰说的正确。正如纳粹德国有一支很有战斗力的军队,并不能证明希特勒是正义的。他们甚至自相矛盾,认为孙云丰对竞争对手恶言相对是正确的,其他人骂孙云丰是错。如果孙云丰代表自己骂了一家公司,该公司的用户有权回击。如果孙云丰代表百度,那他严重的缺乏职业道德。从任何角度,我也得不出百度员工和前员工的那些结论。

当然,我从来也没认为过百度是一家很糟糕的公司,甚至很多次认为百度正在逐渐变成一家有责任感的公司。遗憾的是,从高管到员工,似乎都没和这家公司一样完成这种转变。

不要以为这次事件打击了Google在中国的份额就幸灾乐祸,事实上,中国的互联网市场消失了。这和市场份额无关,和宏观形势有关。这个国家温情脉脉的互联网时代就此结束,就好比IT精英们看不起的那些传统生意人一样,慢慢被兼并,重组,消亡,剩下的那一点,会被扫倒利润微薄的边边角角。就好比,你家楼下菜市场那个可怜的菜农,守着那一点点收入,还要担心城管。这是这个行业中每个人的悲剧。

Tinyfool说:百度的矛盾在于,Google的成功是他在全世界资本市场受宠的原因,但他们可能无时无刻不想google死掉会更好。在全世界范围内,这是不可能出现的,现在在中国出现了,他们真的会高兴吗?

Google给我们的最大价值,除了信息流动加速,就是信息永存。当我写完这篇blog,发布在我的blog上,按下"发布"之后的几分钟,各种蜘蛛就会蜂拥而至,把这篇文章复制若干次,存在这世界的各个角落。这文章即永存。无法被某个组织控制或删除,也无法阻止其流动。公关公司不行,某个国家政府也不行。孙云丰的言论,和百度其他员工的言论,也将和这篇文章一样,被永存,成为历史的一部分。这是我们热爱Google的原因。

现在,我要按下发布按钮了。

about me:
me.jpg

抓虾
订阅到有道阅读

Subscribe in NewsGator Online
Add to Google
Subscribe in Bloglines
CC License. Some rights reserved.
署名·非商业用途·保持一致
本站之所有未作特别说明的内容均使用 创作共用协议.
POWERED_BY_MT_3.2