巴别塔上的雇工


Sometimes Bug, Sometimes Comments
6月 25, 2009, 10:10 上午
Filed under: 工作心情
//Sometimes, something doesn't work, bla, bla, bla. So, we do something to workaround it.
 
/*
在写代码的时候,最怕看见上面这样的注释,sometimes到底是什么time?
看到这样注释就知道这段code上下有个hack,既然有hack,那就有可能带来新的bug,
或者会让我这样的后来人维护起来很痛苦。
*/
 
/*
写javascript代码,经常可以看见这些sometimes commments,这都是前人们fix一些sometimes bug的遗迹。
倒不是因为javascript不好,而是因为DOM is mess,非javascript之罪也。
*/
 
/*
虽然我很不喜欢这样的sometimes comments,但是至少还要感谢前人留了comments,要是连sometimes comments
都不留,那就更惨了。
*/
 
/*
不过,我还是希望处理sometimes bug时,尽量写清楚什么是sometimes,什么浏览器,什么操作系统上的sometimes
什么样的操作导致了这样的sometimes。当hack不可避免时,提供的信息越多,越有利于代码的维护。
*/


拍摄过程也要直播?
6月 21, 2009, 4:08 上午
Filed under: 电影电视

拍新版《红楼梦》,居然还要直播拍摄过程,这挺有意思。谚语说,喜欢吃香肠的人不要去了解香肠是怎么做出来的,不知道喜欢《红楼梦》的人应不应该看这个电视剧的拍摄过程。当然,这个活动就是一个公关宣传,俗称炒作,要不是这么一直播,谁还想得起来还有这么一个电视剧在拍呢。

直播我没看上 ,就看了几个貌似录播的场面,一个平移镜头扫过几个装模作样写毛笔字的角色的脸,演员是拿着毛笔在想象中的桌子上写字,当然拍摄镜头不能拍下这个“想象中的”桌子,为了光线充足,每个演员一出镜头,就要蹲下来让反光板推进。我不知道别人看了什么感受,我看了之后的感觉就是,原来这是演戏啊,下次真的看到这个镜头只会想到这就是演戏。



改变历史
6月 15, 2009, 11:54 上午
Filed under: 电影电视

看了《终结者4》,又思考了一下时间旅行中是否有可能改变历史的问题。

之前我说过有两种时间线观念,“可以改变过去”和“不可改变过去”。在《终结者》系列中,故事是“不可改变过去”的,但是故事中的人物(包括机器人)则是相信“可以改变过去”的,一方面无论天网派出多少生猛的机器人杀手,就是无法阻止反抗领袖的诞生,另一方面,人类则担心机器人的努力真的生效,不敢怠慢,所以也派保护者到过去。

按说,能够制造出时间机器,应该对时间理论有很深的理解,按照《终结者》的故事,时间机器应该是天网制造出来的,天网之所以做这样的努力,肯定是认准了时间机器是可以改变历史的,但是咋就不好使呢???也许天网对时间模型的理解还是有错误,有错误还能制造可以工作的时间机器,真是不容易。

也许一切都是命运,时间只是错觉,历史、现在和未来,都像一盒录制好的录影带一样,只是看你放映到哪里而已,一切主观企图改变历史的行为,只是让命运往既定方向发展而已,一切主观不作为的行为……一样让命运往既家定方向发展。这样想真让人悲观,好像没什么好努力的,反正一切都是注定的。在《终结者4》中,如果John Conner“勇敢”一点,故意不去救比他年纪还小的老爸Kyle,我想,就和《Lost》里一样,命运之手也不会让Kyle死掉的。



终结者4:谁来救赎这个系列电影
6月 13, 2009, 11:27 上午
Filed under: 电影电视

看完《终极者4:救赎》,又让我想起杜琪峰借刘德华之口说的那句台词:“再烂的电影,预告片都一样的精彩”,每次被预告片骗进电影院出来我都回想起这句话。

当年导演詹姆斯.卡梅隆生病发低烧的时候做了一个梦,未来的机器人通过时间机器穿越到现代来刺杀人类反抗军的领袖,于是就创作出《终结者》,当时这个故事给观众的震撼何其大。到了《终结者4》,已经不能靠故事情节震撼观众了,只能靠场面,情节则是千疮百孔一塌糊涂。

故事无论如何胡扯,只要情节安排足够紧凑,也总能让观众忽视故事中的漏洞。《终结者4》走的也是这条路线,蝙蝠侠从坠毁的飞机中爬出来抬头看核爆的蘑菇云,观众正想,为什么会有一次核爆呢?只剩下上半截的T600机器人就跳出来和蝙蝠侠一顿神打,让观众没时间去想蘑菇云这种小问题;当天网和马克思同学说,你成功诱骗John Conner上钩,以后和我混吧,观众又在想,如果天网一开始放马克思出去就是有企图的,那为什么不让他见到Kyle和John的时候就干掉他们呢?不过观众还是没有时间多想,已经改行当州长的终结者机器人又全裸出战,观众的注意力又被转移去猜想阿诺怎么有工夫拍电影。

虽然被电影的紧凑场面耍得团团转,当电影结束之后,观众还是会想,Kyle是John他爹,所以终结者要干掉他,从而John也就不会出现,但是我们都知道John肯定是收编了Kyle之后(在2018年此片故事之后)才有机会派他去上世纪保护自己的母亲(同时让自己的母亲生下自己),那么天网怎么可能在此片中(2018年)知道Kyle就是John他爹,从而要寻找并杀死他呢?

据说此片最早的构思是,马克思同志一直听John的无线广播,深知John是人类反抗军的精神领袖,所以在最后关头,John死了,他将John的遗体做成人皮面具,化成John的模样继续领导人类反抗天网,Oh,卖糕的,领导人类反抗机器人的领袖居然自己就是一个机器人!如果此片按照这个构思拍,给观众带来的震撼要远大于现在的故事情节。



国家的Content Filtering
6月 10, 2009, 12:32 下午
Filed under: 技术体会
cc20090609005

我在Microsoft的Content Filtering项目工作期间,和同事们经常唏嘘,同样都是做内容过滤的,人家“金盾”要没有顾忌得多,既不用考虑法律问题,也不会被错误得屏蔽投诉骚扰。不过人家金盾说到底还是在服务器和网关上进行过滤,没有侵入每个用户自己的电脑无关,好歹还是给Content Filtering留了点生存空间:-)

不过时过境迁,现在已经有国家级的Content Filtering填补这一领域的空白,这就是“绿坝”,第一次听说还以为是“绿霸”。对这个软件产品现在颇有争议,我无法不判定其是好是坏,只是说说以前做Content Filtering的情况吧。

Microsoft的Content Filtering(下面简写为CF)一开始就明确原则不是为了“堵”小孩上不良网站,而是防止小孩“无意中”浏览不良网页,所以客户端实现是相当的松。CF没有绞尽脑汁做一个让小孩无论如何都没法绕过的客户端,因为这样没有多大用处,而且有可能会激发小孩的逆反心理,和小孩斗,往往就是个输。我不大清楚“绿坝”这方面怎么样,据说可以卸载,但是我想卸载肯定也是需要权限的,家长和老师可以选择不卸载,这样小孩还是在“坝”内。

据说“绿坝”将自带一个不良网站列表,不知道是不是明文方式在客户端存贮,如果是,那这个“绿坝”倒是成了想上不良网站人士的指路灯。成魔还是成佛,就在一念之间。

不管是CF还是“绿坝”,到底有没有积极意义呢?我开始干CF的时候已经非常成年了,一开始也无法想象一个十岁左右小孩看到Playboy会不会被毒害,这个问题之后同事们也讨论过,从历史案例看来,不良内容的确有将小孩引入歧途的先例,所以进行内容过滤还是恰当的。所以CF有一条不成文的原则,宁可错杀一千,不可使一各黄色网站漏网,一些著名的国内门户网站,主页上都是一些打擦边球的暧昧文字,被CF无情地判为不良网站,这样保护了不少天真的孩童。我希望“绿坝”对这些门户网站也一样不要手软,不然所谓保护小孩就是一句假话。



Natal真是酷
6月 7, 2009, 4:14 上午
Filed under: 技术体会

看Microsoft的Project Natal,虽然现在还没有正式公布发布日期和价格,但是一旦发布,肯定是一个UI控制的革命。Microsoft为了在家庭客厅抢占一席之地而不断投入XBox/360,从亏了很多钱到终于赚钱,到现在可以引领潮流,就连竞争对手Google的Blog上也介绍了这个项目,不得不说是非常有远见的坚持。



6月6日
6月 6, 2009, 12:04 下午
Filed under: 八卦杂谈

今天和老婆出门,看到有不少娶新娘子的花车,老婆问我:“今天难道是什么好日子吗?这么多人结婚。”我掐指一算,今天是6月6日,啊哦,今天非但是黄道吉日,而且实际上还是我俩结婚三周年。我俩居然都忘记了,相视大笑。



别让ToString函数改变对象的状态
6月 6, 2009, 12:59 上午
Filed under: 技术体会

几天前在Debug的时候碰上一件让人抓狂的事情,为了分析一个bug,我用Visual Studio连上目标进程,在一个函数上设了断点(breakpoint),然后按F10一行一行地看程序状态,很快就发现程序状态不正确,但是又看不出来状态怎么突然不对了。将Visual Studio和目标进程断开,程序状态就恢复正常了,奇怪!难不成薛定锷的猫理论又出现了?Debugger会影响到程序的行为,但是我没有通过Debugger做任何改变程序状态的事情啊。

重复操作了一遍,还是这个现象,只要用Debugger去看一眼,就会出错,但是没有Debugger就没事,这几乎要让人疯掉了!

后来终于想明白是怎么回事,原因就是某个类的作者让ToString()函数改变了对象的状态,这,编译器是容许的,但是相当不应该的,是一个Worst Practice

   1: class Foo
   2: {
   3:     private string _msg;
   4:  
   5:     public int ToStringCount
   6:     {
   7:         get;
   8:         set;
   9:     }
  10:  
  11:     public Foo(string msg)
  12:     {
  13:         _msg = msg;
  14:     }
  15:  
  16:     public override string ToString()
  17:     {
  18:         ++ToStringCount;
  19:         return _msg;
  20:     }
  21:  
  22: }
  23:  
  24: class Program
  25: {
  26:     static void Main(string[] args)
  27:     {
  28:         Foo foo = new Foo("foo");
  29:         Console.WriteLine(foo);
  30:         Console.WriteLine(foo.ToStringCount);
  31:         Console.ReadLine();
  32:     }
  33: }

 

上面的code,在Visual Studio里面按Ctrl+F5直接运行,输出是

foo

1

这在意料之中,但是如果你在Main函数第一行设上断点,F5进入Debug状态,然后一行一行走,走后的结果是什么?这取决于你的Locals Debug Window有没有打开,如果Locals打开了,每Step Over一次,Debugger都会去调用Local Variable的ToString()函数,这样ToString()函数调用的次数就比没有Debugger的调用要多。这就是我碰到问题的根源。

也许你会说,只要不用Debugger不就没问题了吗。但是,从一个类的角度来说,它并不知道自己的实例会在什么场合下如何使用,它也没发知道,所以必须保证自己public出去的方法不管怎么折腾行为都是正确的,让ToString()改变对象的行为违背了这个原则。很可惜C#并没有强制一个函数不能改变对象状态的语法,所以只能靠程序员自己注意了。



Live这把是真的要Dead了吗
6月 2, 2009, 12:40 下午
Filed under: 工作心情

这次微软推出Bing搜索引擎,普遍反映是——至少不差,可以一用。我已经把浏览器的缺省搜索引擎设为Bing,试用几周看看怎么样,目前看来还比较让我满意。

虽然之前官方说法说6月4号Bing才会正式上线,但是至少中国地区Bing已经迫不及待地替换了Live了,访问live.com会redirect到http://cn.bing.com上去。于是,就有人说Live商标被微软放弃了,要改为树bing的大旗了。

就我所知,微软在线业务虽然经历了很多的re-org,但是事实上还是清晰地分为三大部分:

  • MSN,虽然国人一说MSN都首先想到的是一款聊天工具(也就是Live Messenger),实际上现在MSN只管内容相关的东东。
  • Live Search,搜索业务,只不过现在换了个马甲叫Bing。
  • Windows Live,除了搜索之外的一切在线服务,包括聊天的Live Messenger、管理图片的Live Photo Gallery,还有我现在正在写这篇文章的Live Writer,还有其他很多东西。

这么一看就很清楚,光是带Live的品牌就不是只有搜索才有,Live Search被Bing替代了,Live还Live着。

有说Bing是Bing Is Not Google的缩写,但是官方的说法是,Bing就是一个拟声词,表示搜索中了的那灵光一现。所以,我想Windows Live也不打可能改名为Windows Bing。



Bing一下吧
6月 1, 2009, 9:58 上午
Filed under: 工作心情

大佬Steve Ballmer宣布推出Microsoft新一代搜索引擎Bing,使用一下,感觉还不错,至少感觉中文搜索比以前好多了。

当你试用一个搜索引擎的时候,第一个想输入的关键词是什么?肯定是你觉得最能考验这个搜索引擎索引能力的词,打开Bing.com之后,我随意输入的是以下关键词:

  • {我的中文名}          —— 搜索结果和我完全没有关系
  • 江泽民                    —— 搜索结果比Google要和谐多了,bing可以根据访问者区域进行内容调整
  • 胡景涛                    —— 这个也很和谐
  • 巴别塔上的雇工    —— 可以搜索到这个Blog,不错,至少比号称检索内容比google还强的cuil.com要好
  • Morgan Cheng      —— 和搜索中文名相反,这个搜索结果和我相当相关
  • 猪流感                    —— 对时事的搜索结果也不错
  • {我故乡的县城}      ——也能搜到,而且有相关新闻和政府门户网站,组织得不错

整体看来,Bing还真不错,有求“必应”。

不过这些搜索都不是很有挑战性,来试试更生猛的吧。昨天看一个帖子说到有一个美国电影的中文字幕中有类似这样的话:“孔夫子说过:在你决定报复之前,先挖好两个坟墓”,我也想不起来孔夫子说过这样的话,所以,google一下吧,啊,不是,bing一下吧。搜索“孔夫子 要报复别人 准备两个坟墓”,结果依然不错。

以后有什么问题还是Bing一下吧。