tech.

11th February
2010
written by KrzyCube

上周,Erlang Solutions的老板,同时也另一本Erlang书籍《Erlang Programming》的作者之一 Francesco Cesarini 先生来上海出差,得以有一次会面的机会。

早在CN-Erlounge-IV举办之前,就有Erlang Solutions(当时这家公司的名字叫做Erlang Training & Consulting)的员工Joanna Wlodarczyk联系到我,期望了解Erlang中国社区的情况, 当时本想邀请Francesco来参加Erlounge,无奈时机不巧没来成。这次他出发前联系我,问有没有可能见面聊一聊,自然就答应得非常爽快,只是日程未定,且他来这边事务繁忙,得临时决定会面时间及地点,也是我在此前没有往maillist里发邮件公告的原因。原计划老许T1(跟jackyz一起译了《Programming Erlang》)等ECUG社区在上海的头目都会同去,无奈到当天傍晚的时候一道令箭下来,說年底xx会议晚上召开,就都去不成了。我这个小喽罗瞬间升级为××代表,临时拉上专业车手老莫当司机,Team内的段博士和王硕士为我护航,就在夜幕中驶上上海可怕的高架桥往市中心去了。临出关机门前在IM上告知之前保持联系Erlang开发者的Alvaro Videla这一消息,据他后来跟我说的是:“得知这一消息我直接背起包就跟我公司的人挥手说拜拜了”。而他之后也写了一篇帖子记录(得翻墙),并且他说会写更多Erlang相关的帖子,希望给他转到Erlang社区中来。

Francesco背着印有大号Erlang字样的背包等在碰头点,相当好认。那一瞬间我很想也去搞个Erlang的背包风骚一下,脑海中同时浮现的还有Damien Katz拿到Erlanger of the Year的照片,那上边有个一样的Erlang Logo。

于上海第一百货中避风塘坐定聊天,聊及Erlang Solutions,才发现我一直没注意到它已经成立10年了。Francesco说他当年从瑞典到英国游荡的时候(他生在意大利,后来又跑到Uppsala上学,再后来就跑到爱立信搞Erlang了),有一些公司请他帮忙培训Erlang开发者并提供咨询,他觉着这生意有前途,就搞一公司干上了,如今Erlang Solutions在欧洲已经有相当规模的业务,且马上要在美国加州也搞一个,说起加州这家分店,Francesco一下爆了好几头社区名人要被拉过来的消息,搞得我跟Alvaro一阵唏嘘。而在他的伦敦总部,还有Ulf Wiger这等Erlang大牛养在手里,阵容是相当惊人。

问他你们的Solutions都用在哪些领域啊,他说咱啥都干啊,交通运输,食品生产, bla……bla……bla……,Erlang平台的稳定性出众,基于它开发企业应用是个快速且可靠的选择,bla……bla……bla……。Erlang Solutions目前有50人的规模,经济危机到来时一度减员,现在略有回升,大量使用现有开源的Erlang项目,他说:“ejabberd那是个好东西啊, 指哪打哪”。Alvaro是个Web developer,问了些开发网站的东东,聊了一会儿后大家都一致认为离到达西天取到真经还得不少时间来翻山这座山,游过那条河。又扯上Scala,Reia,LFE等话题聊了一把,没有什么有价值的结论,按下不提。

聊及Francesco此行的情况,他说目前来看要在中国企业推广Erlang的解决方案还是困难重重,前途很亮但中间有块玻璃。看到人一意大利帅哥这么悲情,咱只好安慰他一下,介绍了一下ECUG的的情况,说你看我们搞Erlounge,那可都是有大企业赞助的;目前国内有不少人以及商业公司内部使用Erlang做开发的,说打破一块玻璃那只是时机未到云云,方使得他眉开眼笑,大赞Erlang在中国有戏啊。这不废话嘛,经济危机咱也没当回事,房价照涨,GDP照增。然后他说咱搞点合作吧,我们那有大量成功案例的经验,加上你们这火辣辣的社区,引进生产肯定有戏……,我说那是不是得按大清国的老规矩送点什么的啊,他很爽快地说:“没问题啊,你跟我那美女秘书联系,能给的尽量给。” 我一想都这么大方了,以后想要点搞Solutions的资料没啥问题了,就赶紧先一轮吃喝填饱肚子再说,结果发现两件事: 1. Francesco筷子使得贼好,还鄙视了一把在中国呆了两年但不怎么会使筷子的Alvaro,且巨爱吃油麦菜。2. 段博士给他点一提拉米苏,他透露,没听过网上盛传的那个关于提拉米苏来源的意大利士兵和他妻子传说。

然后开始聊书,他的书《Erlang Programming》的中译版即将出版,但还不知道卖什么价,说道价钱又聊到计算机书本在中国的价钱和在欧美的价钱,感叹,中国的书真便宜啊。又给我看了中译版的封面,紧接着又发到我邮箱,说可以放心大胆地贴出去给大家看看,那我就贴在下面啦:

erlang_prog-cmp还说会让中文编辑给送基本样书过来瞧瞧,给提提意见,不过貌似人编辑都回家过年了 ,到现在也没消息。

总的来说,这头一回匆忙的见面,是一个开始,Francesco表示他很快会再来,期望到时候能见到更多中国的Erlang开发者,并有进一步的讨论和合作,下回,我会提早约好事前,并尽早告诉大家的,甚至邀请他来开坛讲道也是有可能的。

吃得差不多,还掏出手机拍两个照片留念,见到帅哥其实比见到美女更难,所以一定要留念。

IMG_0105IMG_0103

2nd February
2010
written by KrzyCube

几个钟头之前twitter上开始了一个精彩的讨论,一开始关注了一会儿,等到 @tinyfool 号称要去炒菜填肚子了,我也就转移注意力干别的去了,直到 @longshanksmo 在gtalk上跟我提及这个话题,我又转回来了,结果发现这话题已经增长得比较庞大了。可恶的是这群人居然没有打个hashtag,看得我晕头转向。到后来 @jeffz_cn 问有没有办法线索化记录下来时,几个人都没辙了。

我反正闲着也是闲着,就傻乎乎地动手将我能看见的参与人员的相关发言给copy了下来,看看能不能整理,后来想想没什么现成的办法,就祭出notepad++ 开始人肉整理,到现在(离午夜还有5分钟),算是将主要的线索理出来了,但是没有排版,ID无链接(这个我抽时间replace一下就能搞定了),可读性非常差。

我对排版向来很不在行,也不熟悉前端页面的编写,就先直接从编辑器里导出了用tab缩进的HTML页面,丢在blog的某目录下。有同学对这个比较在行且愿意帮忙的,可以给我支支招,或者愿意帮忙处理的,可以从下面获取HTML和我手工整理的TXT格式文本。

虽然这一晚上又傻愣愣地干了件笨到家的事,不过我有时候会沉迷在这种傻劲里。即便我所认定的这种专注因为效率太低最终不能成就什么,但偶尔能干件好事。

下面是这个精彩讨论的初步整理版链接:

HTML版

TXT版 (在notepad这种纯纯的编辑器里会完全不可读)

15th January
2010
written by KrzyCube

昨晚在Twitter上转推得还不够尽兴, 早上起来又读一遍。 动手写了几行代码之后想想还是把本blog第一个转载献给了 @virushuo 的雄文。 原文出处在下方, 并提醒各位往原文链接浏览大量有意思评论!

—–
Google百度和谷歌的那些事
作者:virushuo 发表于 2010-01-14 22:01 最后更新于 2010-01-15 00:01
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
http://blog.devep.net/virushuo/2010/01/14/blog56google_blogtinyfool_1_go.html

很久不在这个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

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

百度同样有右侧广告(类似Adsense)和左侧排名。左侧排名就是所谓的竞价排名,这是百度的”创新”。竞价排名是百度收入的主要来源(注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的原因。

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

Tags:
9th November
2009
written by KrzyCube

题为Erlounge-IV, 但因为家乡狗肉节的巨大诱惑以及一些众所周知的不可抗因素,我实际并未能现身于设在杭州的会场。从大会召开前一晚我尚在回乡的火车上开始, 直到大会结束后的周一(即到目前为止),一直有朋友对我的缺席表示强烈的谴责,令我深感歉疚。为了以后游荡至各处时不被乱棍打死,下班后回到住处, 关灯关电视, 在Dark Room中打开LightRoom开始尽心处理现任ECUG的CPO 老莫同学 ( @longshanksmo )拍回的现场图片, 争取尽快share给社区及其他朋友。

上海地区 “今夜风疏雨骤”,而我则“欲浓睡不可求”。不过浏览一遍为数不多的照片, 舍去这浓睡还是值得的。

本次大会期间适逢杭州马拉松,听闻各位参会群众都饱受堵车之苦。不过我猜大家考虑到现场会有才貌双全的ppmm出现(在照片中仔细找),堵车就不是障碍了。

亦有传奇故事,例如TrustNo1大侠的presentation一如既往地摄人心魄,以至于现场有MM无视T夫人就在旁边,追至楼梯口与T大侠言谈甚欢!个人认为这足以使T大侠加封本届最佳讲师!我知道大家都赞成,不用举手了。

办一次大会也是相当的辛苦, 大当家老许 ( @xushiwei ) 在大会期间休息时间很少,以致连周一的午觉一起睡完才出现在办公室,在此致敬。这下我又多一个理由来说服他跟我一起做肉食动物了。

本次大会的所有讲稿在正式召开之前就已经可以下载, 这也是Erlounge的特色。现场视频则敬请期待其他贡献者的劳动成果。讨论相关的话题可参见erlounge-iv邮件列表,以及twitter中搜索关键字#ecug, #erlounge-iv, #cn-erlounge-iv 等

点击此处查看相册,请各位广为传播!赶在零点来临之前完成任务,各位不要再谴责我了, 555~~

26th October
2009
written by KrzyCube

先叹一声:太忽悠了!

2009年10.21晚,乘国内航班经国际到达通道进入帝都,囧!到22日凌晨才入住巨偏远的温都水城,SD2C大会的会场特色就是,没有最偏僻,只有更偏僻。

22日头一天, 安排了一整天的keynote,就是赞助商广告日,猛然发现蒋总裁和M$那人的讲稿跟不久前在上海的CSDN 英雄会上用的基本一样嘛,我当场就傻逼了。听了一早上受不了了,午饭后小憩一会儿奔赴SNDA在帝都的子公司, 参观中见识了一堆相当好玩的硬件设备。

当晚于五道口那家传说中其实是卖酸梅汤的“麻辣诱惑”同#TopLanguage的几只名人见面,见识到了#TL总舵主等人。不得不提及体型比我更大只的@tinyfool,最近他以著名的“雪计算”又火了一把。为啥这家伙会叫tiny呢,我囧啊囧。

23日我早早起床跑去会场占位置,准备近距离聆听Bill Venners讲Scala。结果没听到我想听的内容,囧了。其实他就是做了个介绍顺便推介他的书,当然,就介绍一个语言来说,他讲的还是很有料的。

介绍的主题是: Scala是个相当productive的语言,也更容易测试.

  • functional;
  • static type (Static Type itself can be read as docs)
  • many useful lib & directly import and use jave’s infrastructure
  • amazing testsuite (RSpec Style)

其实我这么积极地跑去听这堂课,是期望听到Scala在并行开发方面的内容的, Scala的线程模型用的是Actor。作为一个Erlang的Fans,我很关注这东西。不过Bill貌似不太care这东西,前面有兄弟问及,他只说Actor以库的方式在语言里提供了。不过貌似要以Actor方式方便地写代码,是需要在语言的语法上提供一些设施的,这个就跟设计之初的目的有关了。于是回来去翻Scala的介绍,果然, 在介绍(http://www.scala-lang.org/node/25)的The Conception of Scala一节写道:

“…But for the full vision of scalable concurrent programming to be achieved he saw that the basic Java syntax would need to change. You simply couldn’t get there from here. But a deceptively simple shift in syntax gained better uniformity to the object-oriented aspects of Java, and this in turn enabled a natural fusion with functional programming concepts which are critical for tackling concurrency….”

虽然没有谈及我关心的话题,不过因为听得相当用心,倒也有些别的体会,以后再谈。我继续期待下午邓草原的课程,他在Erlang和Scala上都有实际项目应用的实践, 理解很深,而且还是NetBeans Scala IDE 的开发者。

无奈,草原也没有谈及我最care的内容。

接下来在同一会场有蔡学鏞的DSL和云风的Lua+CPP开发,在这两个之前还夹了一个不知所谓的应用程序调试(windows),听了一半我就睡着了,为后面的两场储备了充沛的精力。

晚上跟老许混到讲师预留席吃饭,期间草原聊到他开发Scala的IDE的痛苦经历,瞻仰之。饭后就欢快地接受了云风的勾引, 拉了一帮人在房间玩桌:《现代艺术》。除云风外都是刚接触桌游的,但玩得很high。自称没有经商头脑的雪愚同学还在最后一盘赚得了骇人的财富。不得不说桌游是用来结交朋友的好工具,拉到一起玩游戏,什么交流障碍都没了。桌游诱惑太大,于是放弃了本来打算去的刘江组织的沙龙,不过从这里看貌似还是,嗯,蛮明智的选择

第三天(24日)的课程内容达到了忽悠的巅峰,早上我就倒在那膜拜了。下午的“云计算workshop”是amazon推广它的服务,发了些实验帐号给大家玩。于是雪愚同学又发飙了,一开始三下五除二就顺利登录,开始建instance,搞得那印度讲师连竖大拇指。刚过了一会儿,阿三同学就傻眼了,雪愚同学迅速地搞出了10个instance,震得阿三兄直说少开点,少开点。助理也跑来说:“Save me some money!”,看来实验用的资源并不很充足。另外就是会场的网络实在太慢,本来雪愚同学应该可以建出100个的.

参会最大的几点体会:

1. 水货太多,干货太少

2. 桌游很好,很强大

3. 意外发现喜洋洋的剧本非常好

4. 意外发现自己的英文听力水平有进步,虽然还是不太跟得上Shelldon(The Big Bang Theory)那种速度

参会最大的几点体会:
1. 水货太多,干货太少
2. 桌游很好,很强大
3. 意外发现喜洋洋的剧本非常好参会最大的几点体会:
1. 水货太多,干货太少
2. 桌游很好,很强大
3. 意外发现喜洋洋的剧本非常好
14th October
2009
written by KrzyCube

这回连iTweet也阵亡了,也试用了HootSuite. 同时又想起那个一直在持续改进的Tweet.IM,将它跟IM相连. 以前不用它的时候只能直接block它,现在可以用tm off来关闭接受。如今它已经具备了很多功能,敲个“help”就能看到:

———————————————————–

Welcome to Twitter Instant Messaging Gateway

You are signed in as ‘krzycube’

Talking To Friends
——————
@username message – Public reply/send a message to this person.
d username message – Sends a direct message to this person.
f username – Follow this person.
u username – Unfollow this person.
p username – Show profile of this person.
ers – Show the followers list.
ing – Show the followings list.
ss – Show saved searches.
sd search_name – Delete saved search.
sa query – Save a search query.
ts – Show your current tweet mode: on, off or auto.
tm mode – Set tweet mode where mode is:
on – always receive tweets;
off – never receive tweets;
auto – receive tweets depending on your current status.

To update your own Twitter timeline just text or IM whatever is on your mind.

Questions? Visit http://www.process-one.net/ Contact us at info@process-one.net

Version $Rev: 445 $

————————————————–

Tags: ,
11th October
2009
written by KrzyCube

以null为标题,一是内容确与它有关,二是内容其实也没什么分量

前两日读CouchDB: The Definitive Guide, 边读边想起两个东西:null与关系型数据库,当年刚接触它们的时候,我就有奇怪的反应

  • null

刚开始学c语言的时候,一看到null,我脑子里第一个出现的发反应是“冗余”。就觉得这玩意是多余的,someVar = null, 这么一个毫无意义的东西为什么要存在呢, null的存在本身就是个冗余。后来才发现null所表示的意思与冗余(redundancy)并不相同,只是对null的奇怪感觉就此种下。

  • 关系数据库里的表

当初学如何设计一张数据库的表的时候,就觉得把数据提取再结构化成一张张表是很奇怪的行为。提取意味着丢弃了一些数据,有表意味着以后会有不少改变,特别是在听到软件工程课的老师讲需求变化的时候,更觉得把数据阉割了存起来简直就是灾难。而且创建一个字段的时候还有“是否可为null”这种诡异的东西,让我又一次诡异地想起了诡异的null。

好嘛, 如今CouchDB火了。 人家说了:

1. 不存在的东西,咱就没有,不会有xx=null这种东西

2. 咱是文档型数据库,真的数据库,不阉割

3. 关系不这东西,多不稳定啊,时不时你来看一下当前的情况就好了嘛,于是CouchDB有了强大View引擎

null这玩意丢开了(我有我可以啊),不用害怕阉割了,关系不再是僵死的了(随时可以脚踏n条船啊),太鼓舞人了。

Tags: ,
24th August
2009
written by KrzyCube
从2006年到2009年初,虽然WINX的作者就在我身边,不过我一直对这东西兴趣缺缺。当然我的懒惰占了95%以上的原因,另外%1是因为一直在做后台,所以首先想到WINX,即便偶尔写个小工具我也会对比以后放弃ManyFunctionClass选择WTL。剩下那4%嘛,这东西缺乏文档一直让我耿耿于怀,而作者号称由于他没有漂亮的秘书mm,所以一直没空弄文档。WINX代码库并不仅仅是GUI界面库那么单调,其中还包含了一个彪悍的库stdext,不管写后台还是前端,这东西都是一等利器。(stdext中allocators相关的代码已经进入BOOST的Sandbox,因此名字空间里会看到BOOST相关的信息)
如今我跟它的作者再聚首一起干活,大量使用stdext,不过这东西还是没文档,注释也基本没有,虽说有活字典在身边,不过还是挺让我抑郁的。考虑到招漂亮一时半会儿的是实现不了了,只好自己来造文档,从号称最核心最有价值的地方开始,内存管理 — Allocators关系图.
图1:普通的SystemAlloc Policy版本, SystemAlloc本身是对标准分配器的封装,但在这里组合使用时,表现得更像是个Policy。
图2:BlockPool Policy版本,这里BlockPool实现上继承自SystemAlloc,由它表现为Policy。有了BlockPool的最大优势在于,allocators可以是scoped了。
更多的关于这些分配器的资料,可以参见作者blog里的内存管理系列。不过由于版本变化,那些文章实际上已经不与最新代码对应,只是表意。

WINX这东西缺乏文档一直让我耿耿于怀,而作者(@xushiwei)号称由于他没有漂亮的秘书mm,所以一直没空弄文档。不过WINX代码库并不仅仅是GUI界面库那么单调,其中还包含了一个彪悍的库stdext,不管写后台还是前端,这东西都是一等利器。(stdext中allocators相关的代码已经进入BOOST的Sandbox,因此名字空间里会看到BOOST相关的信息)

如今我跟作者再聚首一起干活,大量使用stdext,不过这东西还是没文档,注释也基本没有,虽说有活字典在身边,不过还是挺让我抑郁的。考虑到招漂亮秘书一时半会儿的是实现不了了,只好自己来造文档,从号称最核心最有价值的地方开始,内存管理 — Allocators关系图.

图1:普通的SystemAlloc Policy版本, SystemAlloc本身是对标准分配器的封装,但在这里组合使用时,表现得更像是个Policy。

Stdext Allocators Graph

图2:BlockPool Policy版本,BlockPool实现上是来自SystemAlloc的组合

typedef block_alloc<NS_BOOST_MEMORY_POLICY::sys> block_pool;

由它表现为下面其他组合出来的Allocators的Policy。有了BlockPool的最大优势在于,allocators可以是scoped了。

Stdext Allocators Graph 2

这两个图已经添加至Stdext的代码库中,可以在此目录下看到。更多的关于这些分配器的资料,可以参见作者blog里的内存管理系列。不过由于版本变化,那些文章实际上已经不与最新代码对应,只是表意。

6th August
2009
written by KrzyCube

昨晚从会议室出来,发现有几位在金山时的同事(@HanTuo , @lidaobing , @hangzhupeng , @wangdong)在twitter上讨论关于接口注释的问题,整理如下,相应回复的紧贴一起,就省去了twitter中多级RT吧:

HanTuo: 实在不喜欢代码里面有太多注释。函数注释太多说明实现的太复杂,接口注释太多说明接口太复杂。
HanTuo: 其实我说的也没道理。个人习惯吧。反正我就是不喜欢。看着特别难受。

lidaobing: 我觉得接口注释是非常必要的, 用来定义你这个接口的行为, 比如抛异常还是返回null, 这种很难猜中的。函数注释我同意你的观点。
HanTuo: 接口注释我比较喜欢搞一个API文档。唉,个人习惯吧。我看到代码里有一大段绿色的就浑身难受,有生理反应,一点不夸张。
lidaobing: 调一下配色吧, 比如 xp 蓝?

wangdong: 没错,能用代码说清楚的事儿非要连篇累牍整注释,痛苦的很
hanzhupeng: 在编辑器里面屏蔽掉注释就好了


看到以上内容,我想大多数程序猿都心有戚戚焉,近来正好在这上面有个的经历不妨一说。先来理理上面提到的需求:

  • 1. 核心:代码里不能有太多注释
  • 2. 接口还是需要注释的,例如API文档
  • 3. 函数头顶上飘太多绿色不行,这颜色会触发心理及生理反应
  • 4. 尽量用代码来说清楚设计意图,实在不行编辑器里屏蔽注释
  • 然后开始讲故事了,小朋友们请坐好,陪同的家长在这方面有深刻认识的,可以去外面抽根烟消磨时间,不用在这里掺和了。
    4月初入职的时候,要加入的项目已经有了一版设计稿。看懂了之后不得不说,那是个很棒的设计,你要知道那作者可是头大牛。不过,对我这个没有参加最初设计的人来说,这个这个……为了不让某人说我有夸张的嫌疑以及被鄙视阅读能力,就不啰嗦:

  • 那一上来20多页的设计文档--满篇的文字
  • 概念化的描述--实际系统中却是遍布网络的消息
  • 代码还没开始写呢--接口描述也就先放里边吧
  • 基本读了后面忘了前面,理解能力备受打击--深入理解一下脑袋就有打结倾向
  • 等等这些问题了。我想说的是,其实我一直不知道除了设计者之外,有几个人真的静下心来深入理解了这些设计稿了呢。说“这些”是因为不止是咱这项目吧,估计有项目的地方就有这故事,这玩意儿实在不怎么好读。因为它真不是什么好写的东西,就跟代码里头的注释一样,写粗了不行,写详细了更郁闷。要么就跟高爷爷说的那样,咱上Literate Programming,写程序跟写小说似的,还用专业的Latex加自创字体排版。读者贼快乐,从头顶爽到脚底。放心,这些工具几十年前就bugfree了,不会有印刷错误,绝对不带勘误表,那什么改了代码忘了更新注释的事情,明显不会存在的嘛。另外我们的情况更特别,其实这Team至今也还是只有两个人,于是那个写第一稿设计的人就不言而喻了,有兴趣参加设计稿阅读比赛的同学赶紧报名,前32位报名费优惠。

    接着俺们就准备开工了。在实现这个设计稿中描述的系统之前,觉得有必要先有一个底层的库来搞定消息传递的问题,这东西基本顺利搞定,称之为CERL,是模仿实现Erlang Style Concurrency。可直接在这个库之上就来写一堆的消息处理,在C++ 这种某某标准一拖再拖继而不知道拖到猴年马月的质朴语言里搞序列化,又实在是会挠光头发的事情;要知道这些未进化完成的程序猿每天受的辐射量巨大,发根可不怎么稳固。于是就想着,要不搞个xx语言,来描述一下服务进程,然后让xx工具来生成底层代码?一合计,这玩意儿不错啊,于是先定义了一个描述语言,贼简洁,什么返回值啊,异常描述啊,基本一行搞定。然后搜罗出一堆语言啊,库啊,工具啊就开始准备给这个刚怀上的孩子造儿童专用自行车–编译器了。就跟吃火锅那么简单,反正见到什么菜啊肉啊,花椒啊大蒜啊就往里面加点。什么C++库当底裤,PHP处理做缎子,JSON表达当化妆,Erlang风格作亮相……,能用的全给它用上,什么流行、够酷就用什么。大牛同学随随便便翻翻以前的代码,找了个文本处理库,三下五除二写了个暂时只会:

      “报告,失败了”
      “败在哪了?”
      “忘了!”

    的前端分析器。接着俺又临时学了学PHP,处理了JSON就捣鼓出来一个Code Generator,这个东西会报点错。于是号称Server Description Language的山寨语言出品了。写个描述文档,没几行,通常文件大小不超过2k,装到那儿童车编译器里这么一跑,直接从Erlang样式的接口描述,生成服务器进程的底层代码,什么同步/异步调用,消息封包/解包之类的脏活累活,能干的全替你干了,你只要往空白的函数实现体里填几行代码,这孩子立马从小班升大班,眼看就能上小学。Erlang里头管这玩意儿叫啥来着,噢,gen_server。

    不好意思,刚才走岔道上去了,咱接着说设计稿的话题。搞完了底层库,俺这边又弄完了山寨语言。那边立马就出了一个简单DEMO了,要不怎么说瞬间升级到Beta版呢。可我一看傻眼了啊,仨东西:一个设计稿;一个SDL文件,不带注释的,倍儿纯洁;几个代码文件,同样纯洁得跟小白花一样。因为大家都觉得这代码要是满篇注释吧,那真不是人看的,要是需要在代码里连载注释当小说看的,那更不是好代码。要不说设计是设计,实现是实现,一上来愣没理解顺溜了,不知道这消息哪跟哪。耗了不少力气对应上了,脑袋里走了走流程,接着往下写功能呗。写着写着不行了,再牛的设计,总会有点缺陷,那就改改吧。这下痛苦来了,一个结构缠绕的设计稿,人家费好大心思才弄得看起来不那么累了,那是能随便动的啊。这一改设计,引入几个新概念,立马就多掉几根头发。此处说个不该出现在这种讲故事场合的“语重心长”: “千万别轻易决定在系统里引入一个新概念,会被同胞们寄明信片悼念的!”

    眼看着键盘缝里的头发比饼干屑还多了那么一点点的时候,悟了,这不咱造了个山寨版SDL么,那不是一般的山寨啊,乍一看名字就是直接盗版“卖哭了软水果公司”那iDL似的,跟M8啦,HiPhone啦,那还是可以拼一下的。
    来试试写个都市剧本。弄张纸简单一概括,就画几个框,列一下都有哪些角色,然后用点虚虚实实的线条表示跟这几个MM之间的暧昧关系,再弄几个附录把各种琼瑶式对话一列,都市情感纠葛的剧本大纲就算出来了。

    roles

    故事初期,啥都抽象朦胧的时候挺美好,不闹心。可这摸摸小手的初级阶段一直下去,再持续就一百年过去了。就要仔细考察各个人物,挑一个准备来点实质性转变了。这下这彪悍抄袭外国设计大陆厂商制造的SDL文件就派上用场了,用来描述下她们是如何迎来送往,以及这些角色MM们每季度什么时候要向Master交税(发送某些状态消息)之类的,那是最适合不过。

    module tv;

    code invalidaccount = 0x11;
    code accountexception = 0x12;
    code unregistered = 0x13;
    code cut = 0xff;

    type BillNumber = UInt32;
    type ExceptionMessage = String;
    type BillArray = UInt32[];
    type Locale = String;
    type PayStatus = ok|unregistered|{false,ExceptionMessage notenough};

    server RoleBoyA
    {

    RoleBoyA(Locale lc);
    //
    // From: Director
    // Brief: ' xxxx '
    // Arguments: "none" - 'xxx'
    // Exception: "cut" - ' xxxx '
    // Remark: ' xxxx'
    // Note: ' xxx '
    //
    [id=1] are_you_ready() -> ok | false;
    [id=2] actionTalk(String msg) -> ok | {cut, ExceptionMessage};
    [id=0x81, async] recvTalk(FirstArray something);

    }
    server RoleGirlA
    {

    ……
    [id=0x81,async] payDuty(BillArray bills);
    [id=ox82,async] payResult(PayStatus status);

    }

    选好了之后就要跟对方亲戚朋友来来回回扯皮了。家庭关系,那是讲究辈份的的。重要问题,你不能先找人家小表妹谈,更不能找人家表姐刚出生的孩子谈,这得有个流程。画个流程图把这先先后后的关系理顺,这关就算过了,这后边的事情,多少彩礼、摆多少桌(这不就是空间使用吗)那都是不含糊的,一路顺畅无比。
    要说这画流程,不比那传统大红双喜剪纸艺术简单。用Visio这等超级牛力工具,不是像我这样刚放牛还没爬上牛背的牧童能轻易搞定的,老牛则更是嫌这草太老,口味不佳。于是翻山越岭,跋山涉水,到那遥远的西天求得一部梵语经文,手拈兰花,念完梵文,这流程图它就出来了。不信?那就看看咱的修行成果:
    从这个:

    Director -> RoleBoyA: are you ready?
    activate RoleBoyA

    RoleBoyA -> RoleBoyA: prepare something.
    RoleBoyA -> Director: ok
    deactivate RoleBoyA

    RoleGirlA -> RoleBoyA: Hello, xxx

    activate RoleBoyA
    RoleBoyA -> RoleGirlA: Hi,xxxx
    Director -> RoleBoyA: cut,xxxx
    deactivate RoleBoyA

    变成这个:

    cdraw

    也想画图? 访问这个:http://www.websequencediagrams.com/

    要不今天咱就到这?
    “等等,不是听说西天是金光万丈,五彩孔雀漫天飞的吗?你这些东东怎么净是黑白两色这么凄惨?”
    哟,不说还给忘了,说道这个颜色问题,在SDL这山寨产品诞生的时候,就考虑过怎么推广。也得给它整两广告啊,就想着给它写个啥emacs-mode啥的,差不多就是天朝台黄金时间的广告级别了。可现在看街边免费赠送八卦小报的比看新闻播报的多。不过咱不能啥报纸都上,那得选专业的!重要的是免费,比如那什么上海地铁里发的那一时代报知道不,那发行量,那是相当的大。上班随手取一份,方便;还能读到夹页广告。申请一笔经费出去一考察”烟酒”,发现这Notepad++不错,发行量大,方便好用,随便装插件,跟往里边夹一广告那么简单,关键还免费。可这人家也没有现成的SDL高亮规则,自己整一个还挺累,看有没有现成近似的盗版一个算了,咱的口号是:“山寨货,不求更真,但求更假”。

    试了半天,Notepad++崩溃了N次,看来这规则解析还有些漏洞,最终选定了Smalltalk,几个好处:
    1. 首字母大写为类型,高亮之
    2. 首字母小写为atom, 不高亮
    3. 字符串后紧缀一冒号,立马变色
    4. 双引号跟单引号那颜色还不重复。
    SDL一看到这SmType的“色x小说”语法规则,那真是干柴烈火,谈好价钱(注释规则)就立马勾搭上了。从此山寨喽罗和贵族美妇生活在五彩斑斓的世界里了:

    SDL

    故事讲完,回头看需求:
    1. 代码真没注释嘿
    2. 真有API文档嘿
    3. 配上流程图一看就明白
    4. 生活五彩斑斓,但绿色不多

    Tags: ,