人体奥秘展

看到晚报上的报道,28 号开始在上海的人体奥秘展,将要展出闻名于世的人体胶化标本。记得最早是在欧洲展出的,不过由设在大连的一家工厂负责制作。好像还有科技频道的节目介绍过制作过程,有点艺术化。这次来沪,我是一定要去看看的。

地点在上海工人文化宫,西藏中路120号,三角形的房子,专门办一些品位不高的展销,展览,活动什么的。直上三楼,进了门口就是一具摆了造型的骨骼肌肉男。黄白色的骨头,间或附着着干牛肉一样的硅化肌肉,然后上了一丝丝略显肉红色。乍一看,很像外婆做的咸肉,腊肉。展品大多直接摆放在桌面上,有些盖着透明圆形的有机玻璃罩。主要是介绍一些骨骼肌肉的解刨形态。原来号召需要 400 名志愿讲解员,现场也只看到 4、5 位,两个中年人,三个大学生,来看展览的大都是老人和中年人,一边看,一边问,我这样的病是什么原因,怎么治疗。所以这场展览,更像是医疗咨询。出口的地方还有很多宣传吸毒和艾滋病的宣传画,让人觉得人体奥秘展似乎是个科教宣传展。抛开场馆中时不时矗立的各种造型的骨骼肌肉标本之外,其余的和我以前看到的那些普及人体基本常识的展览没什么区别:给你看一些正常的,病理的器官,告诉你各种系统的结构和大致的功能,生命的发育成长过程,甚至还有联体婴。大多是干货,浸泡在福尔马林中的实体标本几乎没有。宣传画中大多的说教基本上都在上学的时候看到过。值得一提的是,这些干货有些柔软,旁边一个老太用力按了下标本大腿,发现有些弹性,然后缩回手想了想,又将信将疑地伸手按了按,我简直觉得她在小菜场挑蹄膀!另外有个人还去拨弄了下脚筋,于是像根松了的弦荡悠悠。

快出口的地方,有三组标本,两个是“轴向失状切”,另一个是横向的。那么什么叫失状切呢,知道有一种切皮蛋的器具吧?中间一根根等间距的细钢丝,一夹皮蛋,钢丝就穿过皮蛋,然后剩下一个个切片。失状切就是类似的切成一片片。轴向就是从头到脚窃,横向就是从左到右切。看起来很恐怖,不过可以更加直观的观察人体构造。很多年前看过一部电影,叫做《the cell》,非常奇异迷幻,有个场景,一批健硕的马来到一间屋子,正在吃草,突然从天花板上快速掉落下来一个巨大的玻璃罩,里面等间隔的布满了薄而锋利的透明铡刀,立时将马切成一片片,然后每一片拉开间距,于是透过透明的铡刀,清晰的看到不同部位的脏器,甚至来不及出血,仍然在跳动的心脏!如此场景和现在看的如出一辙,只是切片不是鲜活的区别。

对于这样半专业半业余的展览,我觉得 50 块钱大洋贵了。我更愿意花上 80 元到科技馆一样的地方,看更鲜活具体的讲解和展示,以及亲自体验一些实验的展会。不过话说回来,这次还是挺有收获的,一些细节问题上有了更清晰准确地认识。出来的时候,看到人民广场满大街来来去去的人,我似乎看到了好多骨头和脏器,看到了这将昙花一现的场景。不禁黯然。

Google AdWords: 开始支持本地时区

看起来是个很简单的功能,Google 今天才宣称要在 5 月份开始逐步的邀请新老用户去设定自己所在的时区。事实上这并不简单。投放广告的统计数据原本是所有账号都在同一时刻计算而得的,不同的账户设定不同的时区之后,就会在不同的“当地时间”计算统计数据。当然,这里所说的是根据设定的时区作为计算数据段的边界。这是继 Google Analytics 推出设定时区之后的又一类似举措。

Google 真得很勤奋。对于 AdWords 来说,这段时间以来做了不小优化和改进。比较显著的就是界面上的变化,看源代码也会发现,比原来更加简洁和清晰。值得注意的是,AdWords 的 html 源代码并不符合 XHTML 的标准。其中充斥了大量的 table ,当然它也使用了一些基于 css 的布局定义。对于圆弧的边角,Google 并没有使用那些技巧性很强的 js 库,只是在 table 里面加了两个 div 来赋予不同的背景图。所以,像 alistapart.com 所追求的纯粹的 xhtml 技术和技巧之外,Google 的做法更加务实些:兼容性更好,更直观,开发成本更低。按照 Agile 的原则,能用就行,然后,也就是现在和将来,不断的逐步通过重构来抽象,完善。

Google 真的很不容易。

Google Ads

生老病死

外婆说,生老病死,只有第一件事情是开心的,剩下的,都是痛苦的。然而,人一出生,注定了是要老病死的。谁也逃不了。

外婆脑梗塞,导致听力急剧下降,左侧面部神经失去知觉,半个舌头麻木不知,食而无味,还经常咬伤自己的舌头。痛苦不已。老婆的外公刚刚得知自己的真实病情,那个混蛋医生竟然告诉他,没多少时间了,外公像孩子一样和我诉说,其实早就想开了,只要走的时候不那么痛苦就行,好歹也和外婆白头偕老了,只是看到外婆哭泣,心里就特别难受,想到这样,轻身的念头也有。最近外公面色苍白,严重贫血,昨天在医院晕倒,只得又开始住院。

想想人活着,能有多少快乐时光。童年最快乐,因为可以无忧无虑。长大了,背负的东西越来越多,到哪儿心都悬着,放不下来。母亲父亲开始慢慢变老,自己也快奔三,家里还有老婆,还会有孩子。现在的社会弄得人人都亚健康,我恐怕还比不上外公外婆。

一年前,曾有段时间,似乎闻到了死亡的味道,于是格外珍惜时间。每天都觉得自己在自己的头顶上看着自己来来去去做这做那,充实而忙碌,心中格外的踏实和安稳。是啊,天知道明天会发生什么。不如好好享受今天。

话说谷歌

昨天在轻轨上老婆还说,Google 怎么搞了这么个奇怪难听的名字。我说,Google 的目的就是要取这种怪名字,原因很简单,用打死别人别人都不会用的名字对 Google 来说,发生品牌冲突问题的几率和成本可以低到几乎为零。

不要管官方怎么给“谷歌”赋予什么或者怎样的寓意,都是表面文章。以其现今的影响力,这样一个怪名字用不了多久就可以让大家熟悉。此外,怪名字还有个好处,当大家都在抱怨或者说道如何不伦不类的时候,恰好帮助 Google 利用“病毒营销”浩浩荡荡地宣传了一下。估计现在只要经常用 Google 的人都知道这个怪名字,并且印象深刻 — 名字顺不顺口不是关键,关键是要让人印象深刻。通常这也是广告创意的一个基本原则。

所以我还是很钦佩 Google 的。

BTW: 最欣赏的还是 IKEA 宜家,无论音意,都恰到好处地贴合,赞。

Bellis 甜酒

老婆喜欢喝这种酒,我也喜欢,浓浓的巧克力混合着令人沸腾的酒精,入口细腻香甜。曾经到朋友公司喝过一小杯,难以忘怀,于是心里惦记着回头也买上一瓶。

半年前家乐福卖光了,缺货,现在有货了,却比以前贵上二十块钱。于是老婆说等搬到新房子的时候再买。

上回去 IKEA 吃东西,偷偷买了小瓶的绝对伏特加,柠檬味的,纯粹好玩。这种白酒够劲,又很香。昨天吃完中饭去超市逛了一圈,买了一包蒙牛的奶特浓情朱古力奶。回到楼上喝了一半,突然想起来,何不把这两样兑起来,不就成了 Bellis 了吗?

说干就干 — 喝上一小口,绝对 Bellis !

看来搬好新居后,要多备上这些简单常见的原料了,有朋自远方来,亲手配置 Bellis 甜酒,岂不乐哉? 

腱鞘囊肿

三个礼拜前,右手手腕处就像别筋一样,隐隐作痛,使不上力气。后来打了一场的羽毛球,当时就觉得力不从心。就这样隐隐小痛过了两周。大前天早上醒来,痛得要命了,稍一活动就痛,好像手掌要从小臂上掉落下来一般,仅靠一根线吊着。痛苦万分,移动鼠标,打字都极为困难。

和朋友一说,大致确定腱鞘囊肿 — 一种目前不明起因,尚无有效对策的病。听说如果运动员生了腱鞘炎或者囊肿,基本上职业生涯就到头了。本来想去医院确诊的,既然都说看了都没用,只好悻悻的回家贴辣椒膏。

现在好些了,不过依然不能使力,手腕也不能作大幅度的运动。Damn it.

AdWords API: 为什么 AdGroup 的费用远大于其中关键字的费用总和?

客户看到他的广告组中所有的关键字产生的费用的总和与在广告系列中看到的总计相比,出入达 50%,于是提出质疑。

我相信有果必有因,所以不用着急,我一定可以找到产生这个问题的根源。首先我认为不是我的计算错误。我的数据直接来自 API 。于是第一反应就是统计的时间范围不同,很快这个假设被排除。进而我仔细察看了 Google 界面中的数据,终于发现,从一个广告组的所有关键字取回的 StatsRecord 数据累加后等于“内容网站广告总计”,加上“搜索网站广告总计”中的数字,就完美等于广告组的 StatsRecord 返回的数据。也就是说:

AdGroup->StatsRecord = AdGroup->Criterions->StatsRecord + AdGroup->search_total_stats_record

问题是,API 不提供直接的操作取得搜索网站的统计数据。翻阅了它的讨论组,直到可以通过 Report 服务来提交一个 ReportJob 然后获取这些数据。不过我很不高兴这样做,麻烦。不符合 XP 的精神。所幸我只需要 clicks, impressions, cost 的数据就可以了,不需要 averagePosition(或者不提供给客户这个信息)。所以我完全可以通过相减的方式得到“搜索网站广告总计”的数据。

三下五除二,基本上完成了统计报告的更动。

至于为什么 Google 不提供这些,谁都不清楚,可能是系统演进过程中产生的问题。看到邮件组中还是有很多人抱怨 Google 没有提供更为良好的针对开发人员的文档 — 他们发现可以在目标 URL 中使用一些标签,Google 会替换这些标签为相应的关键字和站点 URL 。他们籍此发现即便是搜索网站中的广告,仍然是和特定的关键字相关联的,为何 Google 没有针对每个关键字纪录相应的展示点击行为,而放到了上一层次,也就是广告组的级别纪录总和。

《敏捷软件开发:原则、模式与实践》

从客户那儿回来,顺路去了博库书城,晃了一圈,本只想随便看看,不经意拿到一本《敏捷软件开发:原则、模式与实践》。前些天刚好听过相关的讲座,而且一直以来都很有兴趣,更何况我是个喜欢藏书(却未必能读完)的人。所以当即买下,59元,开了发票。在路上翻看起来。本来我打算报销,不过发现果然是本好书,于是我不打算报销了 — 好书必须自己拥有。

回来之后花了点时间仔细阅读,看了前四章,30 页。觉得好酷。记下若干心得。

首先,搞清楚了一些概念,敏捷,也就是 Agile ,是一种思想,用来指导软件的开发实施过程。而 XP 只是符合敏捷思想的一种具体的软件过程,除此之外还有许多其他类似而有效的软件过程(诸如 SCRUM,Crystal,FDD, ADP 等等)。原来听讲座的时候没有深刻领会它们之间的关系,模糊的混为一谈。

在看书的过程中,我意识到,其实除了软件开发应该做到敏捷之外,其实我们的其他活动也应当是敏捷的。比如我正在看这本书,也应当快速的,有详有略地理解和消化文字和要点。敏捷说到底是一种切乎实际的做事风格和态度 — 用最简单的方法快速的实现最重要的目标,其余的交给下一阶段的迭代。

书中提到了一些观点。

“即使到了开发的后期,也欢迎改变需求”– 通常我总是会抱怨客户的需求不断变化,虽然可以通过技术上的一些措施可以快速响应客户一定范围内的需求变化,但我仍然十分不乐意。不过“他们认为改变需求是好的事情,因为那些改变意味着团队已经学到了很多如何满足市场需要的知识。”确实如此,站得更高便是这样。当然,这并不是说所有客户的需求都一味地接受,实践告诉我,我们应该去引导客户,和客户讨论并最终讨论得出应该的合理的实施方案。我需要坦然地接受并努力做到这样。

“人被认为是项目取得成功的最重要的因素” — 这在之前的演讲中,就是“以人为本”所要表达的意思。在这个原则下,所以需要宽敞无阻碍的办公环境以及随意性较大的白板等。人决定项目过程,而非项目流程决定人的工作角色和职责。此外,形式上的结对编程,目的是扩大知识的广泛传播,提高代码质量,降低开发人员的疲劳带来的负面影响。

“可持续的开发速度” – 这点很重要,就像长跑,一开始就疯跑的最后多半不是第一。XP 不鼓励甚至于不允许加班。为了把明天的一点工作提前到今天完成,带来的是更疲劳的今天和状态不佳效率低下的明天,这势必会产生恶性循环。所以上班时间高效并兴奋的工作,下班好好休息。不过有一个例外,在最终完成项目前的一周是可以加班的。看起来有些矛盾,其实都是符合同一个原则:最短时间内有效的持续的达成目标。

“总是尽可能寻找能实现目标的最简单的设计” — 什么时候用 SOAP 做接口,什么时候用数据库,什么时候实现 I18N ,都首先需要评估时间成本。成本最少的,我们就用它,直到不能满足要求的时候再换。这通常和程序员追求完美的心态相悖,所以到具体的时候很难把握和取舍。而这却是一定程度上决定是否足够敏捷的关键部分。

回想起来,原先作消安项目的时候,不经意间正是应用了一些 XP 的方法和原则,包括后来的 member.perlchina.org 站点的开发,也是在“最简化,能 run 就行”的指导原则下快速实现的。所以现在看来很有些共鸣。由此想来,敏捷软件开发的出现决不是偶然,这是客观要求(市场引导下)所产生的必然的结果,很简单,因为它更务实的符合软件开发的特点和需求。达尔文进化论的又一佐证。

BEA 上海聚会

收到一封垃圾邮件,邀请我参加 BEA 这次在上海的 User Group 活动。主题是 XP 。

大抵上,BEA 搞的是 Java 的东西,和我不太相干,所幸这次主题到并非和具体的语言相关,主要还是推广 XP 这种工作方法和思维方式。况且地点就在公司的马路对面。很久没有出去看看了,报名吧。隔天来了电话确认,周六欣然前往。

说好的 13:00 到 13:30 迎候,13:30 正式开始,我想 13 点准时到未免太浪费时间,于是 13:15 到场的时候,已经有一推人在里面坐好了听主持人说话中。我觉得不好,太没有时间观念了。主持人是个年轻的小伙子,挺开朗,叫 Yanger 。大致说了些边缘的东西,以及为这次主办方 BEA 做了些宣传。然后开始讲座。

这次共有三位演讲者。第一位,Shane – 段胜春。主要根据他的经历阐述了相关 XP 的实践和理念。表达能力有所欠缺,总觉得他含含糊糊,表达不清楚要说的东西。整篇演讲有些沉闷。不过还是要感谢他给我们分享了一些东西。第二位,陈卫俊,来自阿里巴巴的专门作 web 性能测试的,所以演讲主题也是这个方面。人很精神,也很严厉。演讲的时候总喜欢拎衣领,并不断从舞台前方折回讲台并有快速回身返回舞台。演讲的时候也习惯用提问甚至于质问的口吻,所以现场气氛不是很好。不过看得出来,是个有才的人,目标也很明确,非常务实的一个人。不过不是会演讲的那种人。容易让人产生高高在上的距离感。

第三位来的比较晚,加长的灰色休闲西装,臃胖的身材,近乎光头的短发,非常沉稳,乍一看有些像和尚。黄海波,北京一家软件公司的总经理,主题也是 XP 。黄先生的演讲非常有意思,沉着冷静,娓娓道来,且不失幽默。从他当年开始不经意接触 XP 方法讲起,形象生动,令人印象深刻。特别是后来总结一些 XP 的思维模式的时候,深深觉得那几句简短的话是如此精辟,命中要害。特别的,XP 在脱离了 pair 编程这种形式之后对人的后续持久而深刻的影响力,让我意识到,XP 的本质是要改变作为程序员的人的思维方式,使之更为科学和高屋建瓴。形式上的结对编程等等只不过是一种手段,这就如同练瑜伽,极端的身形都是形式和媒介,由此达到更高的目标。在后来的问答中,有些不太聪明的问题和争论,黄先生都能看得很清楚且中肯而坚定的给出了让我非常满意的回答。黄先生不仅是个睿智的人,也从他的 XP 导师和伙伴身上学到那种平易近人不骄不躁的气度,令人赞叹。我在聆听和思考的同时,也在想我还缺少些什么,该如何改进。我觉得黄先生的这个讲座让我不虚此行,受益匪浅。虽然之前买过几本 XP 书籍,却从未仔细钻研。虽然我自己的实践中,有些环节和 XP 的要求极为相近,但终归没有系统化理论化,希望能有时间好好消化一下。

总的来说,这次聚会还算不错,多听些,多看些总是有好处的,开卷有益么。

台灯

昨天去 IKEA 买了盏台灯。59 元,白色半球的底座,两根电视天线一般的支架,一个可以调节角度的小半白球灯头。只有开关两种状态,不能无极调明暗。做工有些粗糙。就目前而言,IKEA 为数不多的工作台灯中这是唯一最适合我的一款。

很多年没有用台灯了。大约 9 年前,刚进大学的时候,在寝室里,除了被褥热水瓶搪瓷碗之外,每个人还分到一盏台灯。合起来是个白色立柱体,打开是两个半梯形。白色的节能灯。寝室里每个人一张床之外,还有一小块书桌,虽然都是连体的,上面摆放书籍,碗筷,杂物,下面一小隔间,在台灯的辉映下,就是晚自习的全部世界。多少个日日夜夜,在这样的台灯下,抄了无数的作业,看了无数的杂书,消磨了无数的时光。

就这样用了两年,然后到延长路的寝室。这时候灯下读书已经不是生活的全部。从静谧的嘉定到繁杂的延长路,心绪已经不像以往那样可以轻易沉淀下来。慢慢的,我的那盏编号 510 的白色台灯不知何时去往何方。而我,毫不在意这些,并且继续欢快的享受着新的生活。

大学毕业 5 年后,结婚 1 年半后,我又买了一盏属于我的台灯。选择白色的时候并未想起曾经的那盏,只是比较下来不喜欢同款式黑色的,而且一向比较欣赏 Apple 的风格。

本来我是不需要台灯的。可是有很多工作要做,老婆要睡觉,不能开灯,我又不会盲打,家里有一盏奶黄色灯座,装饰用的台灯,不合我用。在将就了无数个夜晚和痛苦的盲打无数个夜晚之后,我终于决定,该去为自己买一盏台灯了。

夜晚,人已静。小台灯从容地斜立在边上,探过头来照着笔记本的键盘。于是我眼前的工作平台被包裹在温暖明亮的光晕中,自信且饱满。这时候,烦杂的心绪得以安宁。我可以不慌不忙的沉下心来一件一件事情去解决,去完成。一晃到了凌晨 4 点,我暗自感叹时间消逝得匆忙,如果我有大把的这样的时间就好了。

夜深的时候,不会有电话进来,因为大家都在睡觉;不会有电视,广播,喧嚷,因为大家都在睡觉。我喜欢沉寂的夜,可以让我有时间有空间去思考,去探索,去进步。