互联网应用平台的关口

我们现在的编程工具就处在一个关口

在这关口之前的二十年里,竖立着一个成功的编程工具:Microsoft Visual Studio(以及它的最初原型 – Visual Basic)。这个可视的集成化的编程工具把一代的程序员吸引到这个平台上面并且帮助微软确立了PC机世界的霸主地位。

而在今天的这个关口出现的时候,眼花缭乱的新工具冒泡一样的出现,但就剩最后一步,仅仅一步,就到了这个关口了。

比方说,我们看到了YUI (Yahoo! User Interface),它提供一些简单的控件 – 比如按钮, DataTable菜单。。。。

如果大家还有印象的话,当年的Visual Basic就是拉着程序员们的小手,从画第一个窗体,第一个按钮开始,一步步引领他们进入Windows的世界的。Java Applet最初不也就是这么几个控件吗?这个基础已经在那里了。Yahoo! 下一步需要的,就是一套更加简单的,图像界面的编程工具

在这个关口前,我们也看到了Google Web Toolkit。看看这个Hello World,看看这个完整的,再看看这个复杂些的,你会发现,基于Web的一个新的平台已经呈现,Google下一步需要的,就是一套更加简单的,图像界面的编程工具

再看看百花齐放的各种各样的Framework,比如这个script.aculo.us还有这些AJAX的,这些所有的创新,基本上已经把一个新的世界的样子描画出来了,他们作为一个整体需要的,就是一套更加简单的,图形界面的编程工具

如果还要我举出更多的征兆,就是Facebook的F8开发平台,Amazon的AWS开发平台,以及几乎所有Portal都有的Widget开发平台(微软的Google的…)就明白无误的告诉我们,一个新的以互联网为平台的已经逐步形成,给应用程序铺设的舞台已经开场,但是缺的,还是一个更加简单,图形界面的编程工具

所以,在这个关口,我相信在不久的将来(应该就在3个月以内),各大厂商一定会推出自己的类似Visual Studio的开发平台,或者成为集成开发环境(IDE),这个IDE会有以下特征:

  • 运行于互联网之上(就像它生成的其他任何程序一样)
  • 基于拖拽的控件(你可以把一个Button拖到网页正中间,并且双击它就可以编代码)
  • 所有的互联网服务都以控件的形式出现在IDE里面(比如搜索或者Fackebook, Flickr)
  • 最终生成的应用程序可以直接保存,运行在IDE厂商的平台上。(或者就是由IDE的厂商提供hosting 平台,大家可以通过URL来运行这个应用程序)
  • IDE市场的争夺战会异常激烈

谁赢得了这场IDE的争夺战,谁就有了下一代互联网霸主之争的入场券。

其实我很为微软扼腕痛惜。群雄纷起,都虎视眈眈的盯着微软最牢固的平台还有开发工具生意的时候,微软还没有做出像样的动作来。ASP.NET和C#真的是早出来7年,出来的太早了。当最近这些基于AJAX的控件把客户端和服务器端彻底连接成了一个密不可分的整体的时候,微软的开发工具就显得风韵犹存,又老态初现。风韵犹存的意思是,在7年前就已经把一个控件(比如button, Textbox, DataGrid)既当作客户端控件,又当作服务器端控件,在所有的编程思想中明显的处于有前瞻性,即便在今天也是了不起的思想,但我又说它老态初现的原因是,毕竟每一次客户端的操作,都需要HTTP的Post-Back一次,与异步的JavaScript+XML的架构相比,就显得如此的笨拙和不合时宜了。一个刚刚出现7年,还没有普及的产品就这样过时了,真的让人惋惜。

好久没有正儿八经的写程序了(最近都是sample code级别的)。最近也没有太多时间(想象一个刚刚当爸爸的我会有多么忙碌),但是我打算这个周末,花上两个小时,写一个这样的雏形出来,尝试一下这个互联网的IDE的想法。仅仅因为我相信,这样的产品,在三个月以内一定会隆重推出,至于是微软,还是Google,或是刚刚换了CEO的Yahoo!就不得而知了。

读《胡适留学日记》

门口有一家沐风书店,办了卡可以一次借两本书来读。

今天又去还书,把育儿的和金融的换掉(Wendy坐月子,出不得门,总托我帮她带写书回去,我就像信使一样,在书店和家之间跑)。

这次拿了本《胡适留学日记》。颇为惊奇。从一九一一年到一九一七年的时间,记日记的时候天天一篇,还有很多篇幅挺长,思想很深刻的。想来如果当时立刻公布,他算是最早的blogger了。里面还没有读,最主要是想看一下这位blogger前辈写些什么,想些什么。

在一九三六年日记出版的序言里面,胡适先生提到:

Expression is the most effective means of appropriating impressions

。这和我用写blog来逼迫自己每天都思考些东西有一样的初衷。

后记:看到在1911年胡适在康奈尔大学读书时的几乎每一篇日记都以“上课。”开篇,读给Wendy听。她说:如果小宝宝现在写日记,每天一定以:“吃奶。”开篇。

技术培训纲要

粗略的记录一下上一个月的技术培训纲要,以免过几年自己忘了。

本文档面向的读者:仅仅我自己。

技术的世界:

  • 代码基础层,就是PHP基础,面向对象基础
  • 数据层,就是封装数据访问对象,数据访问对象层等
  • 页面层,就是控件设计,Data-Aware Control,安全控制等等
  • 规则层,就是事件机制设计,异步处理机制设计,以及任务调度层
  • 表现层,主要包括CSS初步,JavaScript以及AJAX等
  • 架构层,就是高性能,高可用性网站架构及微调
  • 开发流程和团队协作,包括每日编译,代码控制,早例会,功能规格书,实现文档,Code Review等
  • 运营层,主要是运营的框架和流程。

其中代码层,主要参考MovableType的数据层的架构和众多OOP的思想。客齐集的核心数据层代码,用PHP写在200行以内。

页面层,最主要是对于页面的所有逻辑进行封装,比如URL,Page等。其中的控件层的设计可以参考ASP.NET。但是ASP.NET的Framework在它出来的时候,众多新的客户端,尤其是异步JavaScript调用还没有成为主流,所以postback的方式现在显得有些过时。所以我们写的Framework要改进ASP.NET的很多做法。但是,借鉴了ASP.NET team原来的一些思想。这一部分也控制在200行代码左右

还有CSS借鉴了YUI的reset->font->grid->control的四层架构。JavaScript层会借鉴Prototype和YUI的一些设计,但是会更加轻盈一些。

架构层主要是以LiveJournal.com的架构为框架,并且付诸于Flickr.com对于分布式文件系统的想法,在前层假设分布在6台机器上的分布式内存缓存,用统一的一个上G的内存当作主要数据存储区,降低数据服务器压力(理论上会降低到5%-10%左右)

开发流程最主要是采用简化版的MDMF(Microsoft Development Management Framework)(这个名字还是在2001年高鹏和我一起起的名字,前几天居然在很多资料上面看到大家提及这个框架)。这可能是我带过的第五个开发团队,这个流程已经很熟了。

运营层最主要借鉴Microsoft Operation Frakework (MOF)之事前文档,事后文档的架构。

最近看的一些文档在这里

坐月子的规矩

Wendy在做月子。中国的规矩中,坐月子的规矩算是比较多的。传统的不可见风,不可出门,不可下地,到南方的不可洗澡甚至不可喝水(只能喝粥),随便谁都可以列出一大堆。在这些即便本身都相互冲突的规矩中,何去何从是个棘手的问题。思前想后,对比研究,得出以下结论。

传统坐月子方法不能说错,但过于笼统

就拿不可碰水为例。准确的说,产妇身体虚弱,不可见风的确是事实。无论中医说的“血不足,气亦虚”到西医说的“身体毛孔张开,温度调节功能不好”,都印证了的确不可以碰冷水。但是如果说绝对不可以碰水,不可以洗澡就过于笼统。准确的说,应该是不可碰冷水,而不是都不能碰水。

不过在这里打住,不可以碰冷水这句看似更准确一些的说法,也过于简单。就算可以碰热水,也有很多不同。我猜测不同的体质,对于水的要求也会有些不同,同样的体质,或许时间不同,要求也不同。总之,需要按照个案对待,而笼统地说一概不能碰水,就太“通用”话了。

口口相传的传统

传统就是传统。传统是口口相传的。口口相传的特点是,只有最简单,最笼统,最容易记住的才容易传播。我们常做的拷贝不走样的游戏就告诉我们,一句话从第一个人口里口耳相传到最后一个人耳朵里,一定走样。而且走样的方式,常常是丢掉其中的细节(比如条件了,形容词了),而仅仅留住最简单,最扩大话的那部分。

人们总想用简单的回答,比自然本身简单的多的回答,来应对复杂的自然。又要简单,又要正确,似乎唯一的答案就是扩大化。不能碰水绝不能说错,但是没有必要扩大化的给产妇增加了很多的限制和痛苦。

我们假设(仅仅是假设)自然规律是在中等的体质在产后23天里面不宜总计超过1分钟接触温度底于30摄氏度的水(仅仅是假设,实际上的公式和描述应该是有一本书来写),那么经过几百年流传下来,就一定会变成不可见水。所有的细节都丢失了,就变成“老规矩”了。

这好像我记得在100年前发现血有不同的类型之前,医生对人和人之间能不能输血的问题吵得不亦乐乎。有的输血可以救命,有的输血立刻死亡。如果不做更深度的分析研究的话,八成“决不可输血”就成了老规矩。而自然的真相是,血型相同可以输血,不同不可以输血。。。

大道虐行。自然界的规律,无论人认识还是不认识,都几万年不变的运行着。所有的人总结出来的规律,都是希望尽可能接近自然规律。而简单化是这种接近的天敌。

南浦大桥早上不是堵车

每天早上开车通过南浦大桥,要从杨高南路的转盘的引桥开始,到汇入龙阳路,直到进入南浦大桥得主桥面。这一路大约2公里,在过去的三年里面的每一个早上,几乎都是以10公里每小时的速度挪动。我和Wendy三年做了上千次梦,就是希望“南浦大桥今天不要堵车”,结果都是失望告终。

每天早上都没有任何交通事故,为什么就不能走得快一些呢?

这两天自己做了个简单的计算,得出结论,这不叫堵车。这个大桥就是这么设计的。

在主桥面上,有三根车道。而在浦东方向汇入主桥面的,有10根车道。分别是如下:

直走的,是三根龙阳路的车道(A)。从杨高南路南向北方向汇入一根车道(B)(实际早上一直是一条用作两条),从杨高南路北向南方向有两根车道(C)。C先和B汇成两条,再汇成一条,并且和A并入形成最后的三条。

之后,在前进不到一公里的主桥面上,从浦东南路北向南过来的两条车道先并成一条,浦东南路南向北方向的两条车道,也先并成一条,两条车道经过一个夸张的空中U字弯,在进入主桥面前再汇成一条车道(已经是4并一了)。

这时龙阳路上来的三条车道先并成两条,再和浦东大道过来的一条,一起成为南浦大桥桥面的三条车道。也就是说,来自龙阳路,浦东大道,杨高南路三条大道的10条车道,在主桥面变成3条车道。

再看一下主桥面的限速 – 60公里每小时。而在浦西方向的三个圈上面的限速是40公里每小时(当然,这个没有人遵守过)。我们以在主桥上面的60公里每小时的标准速度(多数时间还达不到)来计算,进来的10条车道的平均速度应该是 60*3/10 = 18公里每小时。再加上车辆汇聚时候的双发减速(这导致了南浦大桥上的车距明显过大,导致道路利用更加不足),在10条车道的速度,显然正常情况下还达不到18公里每小时。

在南浦大桥引桥方向压力不大的情况下,还可以保证有效通行(通行能力的要求随着车距增加而减少),但是一旦早高峰10条车道中的多数或全部开始有车辆积压(就是饱和情况),就会出现我们早上出现的“堵车”状况。其实,这不叫堵车,而仅仅是饱和状况的设计时速而已。

注:如果更加刨根问底一下,假设多车道交汇的时候平均分配通行能力,并且主桥面60公里每小时的话,浦东大道上来的引桥的设计时速是:60/4 = 15km/h,而龙阳路应该是 60*2/3*2/3 = 26.6km/h,而我过来的杨高南路南向北方向就应该是:60*2/3/3 = 13.3km/h。换言之,从设计角度,通行速度最快的应该是龙阳路方向,其次是浦东大道方向,最慢的就是我走的杨高南路方向了。这和实际情况大体相符。

注:本来还想翻一下MIT OCW的关于道路交通设计的资料,后来想了想,就自己一个外行瞎想一下,让大家来看看就算了。

生孩子这件事

当了爸爸,自然有很多细腻的感情上的变化,感触颇多,晚些再分享了。在这里和我的那些还没有当爸爸的老友们分享一下“后勤”上面的事情。一次经历下来,经验不算多,至少还是澄清了我以前的一些错误想法。

1. 生孩子很辛苦,但不用太担心。

这个当然是替劳苦功高的老婆说的(我倒是没干什么)。十月怀胎,瓜熟蒂落,是非常完美的事情,绝没有很多人口口相传的那样,越描述越恐怖。这或许仅仅是我们的个人体验 — 顺产相对简单些。我很自豪可以从24小时全程陪护在Wendy身边。这是难得的美好的体验。在此以前以为生孩子就是持续n个小时的疼痛,实际上是一阵一阵的几分钟一个周期的,而多数电影里面仅仅是描述这最小部分“典型”的场景。

2. 孩子出生后立刻像天使一样。

我以前总想不通胎儿从不呼吸(完全靠脐带供养)出生以后到转到用肺呼吸,一定是个痛苦无比的过程。结果小家伙从妈妈肚子里出来,哇哇的哭了几声,随后就安静的躺在自己的小床上,看起来幸福得让我都乐出声来。睡一会,手脚挥舞一会儿,有时嘴里还发出吮吸的声音(就是我们吸手指的声音)。小胳膊小腿儿,都完美无瑕,不像长啊长的,过了20-30岁就开始出现各种各样不好看的斑点或者皱纹。而且小宝宝出生的时候,竟是干干净净,身上没有什么血迹。

3. 生孩子的时间问题。

原来生孩子,并不是仅仅有一个样板场景:就是电视或者小说里常说的,一边是不断惨叫的待产妇,一边是手忙脚乱的家人,还有横冲直撞的救护车。当然这样的状况还是很多的,但是我们看到的(还有我们),都是在产房里的说说悄悄话,安静的等待孩子的到来。Wendy在打过些麻药以后,还在小宝宝出生前熟睡了了个小时。

4. 孩子的生活环境

小宝宝生活在羊水里面。羊水就像自来水一样清澈(如果最后没有胎粪进入的话)。小宝宝就在这干净清洁的环境里面生活。孩子和母体之间除了这清清的羊水之间没有任何其他的连接。胎儿的脐带是连在胎盘上面的,而胎盘和宝宝一样是漂浮在羊水里面的。妈妈的营养,还有氧气,都是通过羊水到达胎盘(像内脏一样的器官),然后再通过脐带传输到宝宝的体内的。就是这样一个过程。别笑我,以前我还真的没有这么仔细的思考这个问题。呵呵。

5. 带孩子的苦和乐

带孩子苦不苦?这苦是说出来的苦,乐是心里的乐。同样的事情,说出来的确听起来挺苦的,但实际上完全不是那么回事。就像打网络游戏从旁观者看起来,好似比坐办公室苦的多似的。:-) 小宝宝的成长,就是一个有魔力的事情,让人不忍离开。

6. 二人世界还是三人世界

在二人世界结束的时候,不免充满留恋。我们在产房里面,宝宝出生前还做过简短的告别二人世界的仪式呢。不过三人世界显然是一个更幸福的世界。自己爱的人,从一个变成了两个,不是更幸福吗?在小宝宝出生的第一个小时,我们两个就欢欣鼓舞的伸出双手拥抱我们幸福的三人世界了。以前担心的有了宝宝不能出远门,变成了现在的热切的期望:“宝宝,等你长到两岁,我们一起去xxx好不好?”

呵呵。就这么点仅仅是”后勤“上面的事情,和大家分享一下。一个大男人,真的还远不能理解这个过程,相对于有经验的妈妈来说有些班门弄斧。这就算是作为过来人,为后来的新爸爸们交个“作业”吧。

注:小宝宝现在8斤两,开始经常微笑,有的时候都能笑出声来。

起名字 – 第二部分

呵呵。谢谢大家的关心,一个名字有这么多人参与。我大概的统计了一下,这是上一篇还有英文的blog的对这几个名字的统计。

王乐凡 ++++++++++++++++ 16
王逸凡 ++++++++++++++   14
王子欣 +++++++++++      11
王天哲 +++++++           7
王纳言 0

还有一些建议的名字。。。

王健君
王安若
王子凡
王诚博
王范天哲
王逸鑫
王亦鑫
王茁壮
王怀思
王建铭
王思远
王硕豪
王帷哲
王逸帷

让我们再想一想。其实,每个想出来的名字后面都是有些故事的,不过晚一些再分享给大家。

后注:这几天小家伙变化很大,洗澡的时候不哭了,还开始更加活泼起来,面部表情也非常丰富,真有趣。

起名字

小宝宝叫个什么名字?什么事情,越是觉得重要,越是做的慢,难以有一个最终选择。这两天想名字,有了以下几个候选,还在斟酌。大家给出出主意?

王乐凡
王子欣
王纳言
王天哲
王逸凡

更新 2007年8月5日

上周给宝宝报了户口,名字就叫王逸凡。从众多的名字里面选出来,感谢大家的关心。

现在来解释一下这个名字和原来想的的几个名字。

其一:王乐凡

这是宝宝出生以前和他妈妈一起起的名字。孩子的名字多数反映了父母的期望。我们老实说不想给他太大的压力。我门对他的人生没有我们自己的规划,而希望由他自己的兴趣和好奇心引领,去自己发现。我们唯一的希望,就是希望他能够智慧和快乐。(其实快乐需要极高的智慧才可以获得。)只要他能快快乐乐,我们就非常开心。

至于凡字,其实就是平凡。我希望他懂得,快乐在平凡之中,获得也在平凡之中。至于名或着利,还有所谓的成功,其实都是过眼烟云,而只有每天用心的过的日子,才是人生最真实的部分。我们希望他懂得平衡的道理。小说里的,回忆录里的精彩的人生,在经历的时候,同样的东西就是是酸甜苦辣,甚至有时是百无聊赖。我希望他理解,平凡是人生的本质,而其他的喧嚣仅仅是装饰而已。

最后,因为乐是一个多音字,无论如何,只好不做考虑。

其一:王天哲

在我看来,这个世界上最美好的无外乎两者:其一曰自然,其二曰人文。自然是万物,所有我们看到的部分,给人美好的感觉的树,山,还有水。人文是人的内心世界,从几千年前的岩石壁画到现在的文学,艺术,科学等等。这个世界的美妙之处,逃不出自然(物的世界)和人文(精神的世界)两者。

自然界最大,最广博的,无外乎为“天”;(它比海更大,更深邃)
人文中至精华,智慧者,称之为“哲”。(它比文学更智慧,更恒久)

所以天哲希望小宝宝能够集自然和人文的最精华部分。

后来,我们还是放弃了。看着小宝宝熟睡的脸,以及睡梦中挥舞的小胳膊小腿儿,觉得不想给这个小蚕豆一样的精灵这么大的压力,起超过它能承受的名字。于是,后来还是回到了乐和凡的道路上。(还有的原因就是我们不喜欢这个名字的发音)

其一:王逸凡

逸也有快乐的意思在里面。同时,希望小宝宝对于很多的事情,不要那么在乎,只要自己快乐,并且知道自己要的东西,就好了。最后,我们觉得我们喜欢这个名字的读音,还有那种达观的生活态度。大家都说我和文峰都是那种挺上进的名字,为什么宝宝的名字不够上进。还有人说“男取《论语》,女取《诗经》”,应该有点论语里的那种感觉。我恰恰不喜欢孔子的思想,而更喜欢老子。来自的是大的道理。所谓“大道虐行”,而人自己的君君臣臣,父父子子的,仅仅是小道。在起名字的时候,我手里面一直拿的是老子-庄子的书。我总觉得老子和庄子是有大智慧的人。

注:还偶然间看到嘉庆年间,乾隆年间,还有1993年的王氏族谱的影印件。按照族谱规定,最近的王氏几代名字中的第二个字应该是:思 – 重 – 源 – 本。也就是我的名字按族谱应该叫王重硕(王氏第二十世),而宝宝应该叫王源凡(王氏第二十一世),而他的孩子在明朝的时候都已经规定了叫王本x(王氏第二是十二世)。。。而代数是从明太祖朱元璋时期的洪武二十三年(1380年)从山西洪洞大槐树迁徙至洛阳的那一代作为族谱的第一代。不由感叹历史的“源远流长”。不过后来放弃了按照族谱起名字的想法。

宝宝照片

看看我们家宝宝的照片。

你看,他笑了。

有的时候他就这么小心翼翼的看看周围的世界,不知道他在想些什么。

他最喜欢呆在自己的小世界里面,就是他的那张小床(对他来说,已经是一个大世界了)。

看这张!

看他困了。他真喜欢睡觉!只要他吃饱了,就会很快的沉入梦乡。每天早上和晚上有一小段时间和我们玩,然后又乖乖的睡觉了。这个表情就是说,再过两分钟他就要睡着了。

就像这个样子。睡得好香呀。

有些时候他会自己玩。挥舞着小胳膊小腿儿,好像这个世界的其他的烦心事儿都和他无关(不过看起来也的确是这样的)。

如果有些他不喜欢的事情发生,他也会哭。现在这样的事情倒是不多。洗完澡擦干的时候,他就不喜欢。你看他哭的。不过只要你给他穿上衣服,他就立刻开心的像个天使一样,给你个灿烂的笑容。

我的小宝宝,你真是完美的不得了。我们三个手拉手,走进我们幸福的三人世界。

这里还有更多照片,希望Flickr解封以后大家可以看到。

shanghai-baby-galary.png

宝宝已经回到家中

昨天(六月3号)母子已经出院,现在在家里开始新生活了。

在这里代表Wendy和小宝宝感谢大家的关心和祝福。

小家伙的前几天就像一个黑洞一样把我们的注意力吸引过去,几乎没有一点点的遗漏。大量的祝福,还没有来得及回复;还有大量需要通知的朋友,都还没有发通知,望大家原谅。不知不觉,我已经把这个降临在自己家中的小生命看的比什么都重要了,只想一家三口多呆在一起一些时间。

趁着母子两个都睡着了,过来发一个感谢。看小家伙的时候时间过的飞快,不舍的离开。名字还没有最终确定,还正在推敲呢,有什么建议吗?我只想给他一个简简单单的名字,让他做一个轻轻松松,快快乐乐的人就足够了。