巴别塔上的雇工


颍州的孩子
2月 26, 2007, 2:35 下午
Filed under: 山河好大
今天,《颍州的孩子》获得第79届奥斯卡最佳纪录短片奖,看了网上几分钟的片断,眼泪都流出来了。

网上很多关于此片的文章将“颍”错写为“颖”字,这年头都用拼音输入法,“颖”在输入法里面比“颍”靠前,而且“颍州”实在是不知名(我也是安徽人,之前也不知道有这么一个地方),笔客在写的时候往往在输入法里面翻页的时候找到“颖”就不加思索的选中了,我们还是应该敬业一点,把汉字写对了。

此片是关于爱滋病问题,一开始我觉得颍州应该是在河南吧,原来是在安徽,细想也对,河南的爱滋问题虽然可能是最严重的,但是管制很严,连cctv都没法进村采访,外资想拍纪录片那根本就是不可能。

现在还没能看到整个影片,在网上找找看过的人说说,找到这样一篇Blog,博主貌似是很资深的记者,不过Blog被回帖炮轰得体无完肤,我想博主写得时候应该有种快意恩仇一吐为快得感觉,不过痛快的话说出来一般都会后悔。



群猪
2月 23, 2007, 5:38 上午
Filed under: 城市丛林
中关村家乐福店的广告牌,有各国装扮的猪。

从左至右,从上至下,依次是:
穿裙子的苏格兰猪猪;
斗牛的西班牙猪猪;
牛仔打扮的美国西部猪猪;
穿花裤衩拿帆板的夏威夷猪猪?
日本猪!校正:头戴橄榄枝穿长袍的希腊哲学猪猪,多谢帮主指点:)
踢足球的巴西猪猪;
打泰拳的泰国猪猪;
戴高帽子的英格兰猪猪;
做面包的法国猪猪;
最帅的中华猪猪;
戴花草帽的墨西哥猪猪;
高丽猪!



少包
2月 19, 2007, 2:35 下午
Filed under: 电影电视
看BTV-4的《少年包青天3》,我就有个疑问,记得周杰演过,陆毅演过,王学兵也演过,现在邓超演的应该是4才对,为什么是3呢?回顾了一下才明白,王学兵的那个,叫《壮志凌云包青天》,一样的造型和年纪,让人误以为就是《少包3》。

《少包》系列的模式都一样,一样的学习小日本的金田一少年事件簿,一样的包青天公孙策展昭外加若干个调皮妞的人物组合,一样的都是释小龙演展昭,一样的没个侦破故事只需要看最后一集就足够了;《壮包》似乎想改一下路线,别的不说,光是展昭演员的挑选就自杀式的失败,好比这年头演和绅不找王刚行吗?

关于《少包》情节都是“抄袭”金田一,网上很多人批评,我觉得没什么可厚非的,小鬼子高丽棒已经抄袭了我们不少东西了,现在我们回头抄袭抄袭他们,也算礼尚往来,嘿嘿:)



过年了
2月 17, 2007, 1:23 下午
Filed under: 山河好大
第一次在北京的春节,虽然燃放烟花爆竹的禁令已废,但是也没有老家那么喧闹,而且有暖气,还是很舒服:)

上BBS逛逛,才知道1979年2月17日,对越自卫反击战开始,居安不能不思危,枕戈待旦!



A Bug of .Net?
2月 16, 2007, 10:41 上午
Filed under: 技术体会
使用.Net的HttpWebRequest/HttpWebResponse来crawl网页,发现即使设了Timeout,对有些超级大的网页(比如http://wx.msn.com)访问也会相当的慢,Debug跟进一下就发现,其他的一切都正常,问题出在调用HttpWebResponse.Close会消耗相当长的时间,怎么会这样?
 
用Network Monitor嗅探一下进出的网络包,发现就在程序还挂在Close调用上不返回的时候,从http://wx.msn.com来的TCP包还是源源不断,难不成HttpWebResponse.Close()还不能立刻中断一个Http请求?自己架一个超级大的网页试试,用perl写个脚本产生一个几百兆大的html网页,部署在另外一台机器的IIS上,同样的code去抓这个网页,居然没有问题,看样子另有隐情
 
还是分析嗅探到的网络包吧,可以看到访问自己的超大网页,在调用HttpWebResponse.Close的时候,有一个给服务器端的TCP包的RESET flag被置为1,Server端可能还会再发几个TCP包过来,但是最多也就几个,因为连接都被Reset了嘛;但是访问http://wx.msn.com的话,发给服务器端的TCP包全部都是ACK,不会有RESET,所以服务器源源不断地继续发送TCP包,为什么client端就没有Reset连接呢?一个显著的区别就是,http://wx.msn.com的HTTP response是Chunked Encoding,而我自己做的那个网页就是一个静态HTML,不是Chunked Encoding,可能就是这个原因哦
 
做一个ASP页面,动态产生一个巨大无比的http response,而且是Chunked Encoding。
<%@ Language = "JScript"%>
<% Response.Buffer=false /* This is to make sure the response is in Chunked encoding*/ %>
<html>
<body>
<%
 for (i =1; i<10000000; ++i)
 {
  prod = 1;
  for (j=1; j<9999; ++j)
  {
   prod = prod * j;
  }
%>
 <p><%=i%> <%=prod%>This is to make it large.This is to make it large.This is to make it large.This is to make it large.This is to make it large.This is to make it large.This is to make it large.This is to make it large.This is to make it large.This is to make it large.This is to make it large.This is to make it large.This is to make it large.This is to make it large.</p>
<%
 }
%>
</body>
</html>
 
再去访问这个ASP网页,果然又出现了HttpWebResponse.Close运行巨长无比时间的问题。
 
要看.Net怎么实现的,也不是很难,可以用Reflector看反编译之后的源代码,不过这样没有注释,而且反编译的源代码有些地方和真实的源代码还是有差异,直接看Rotor就好多了。追踪溯源,罪魁祸首在_connectstream.cs文件中的ConnectStream.DrainSocket中,调用HttpWebResponse.Close最终会调到这里,作用是处于礼貌把Socket上最后一点福根给清理了,但是对Chunked的情况处理不足,
            //
            // Now drain the socket the old, slow way by reading or pasing Chunked stuff
            //
            m_Draining = true;
            int bytesRead;
            for (;;) {
                try {
                    bytesRead = ReadWithoutValidation(s_DrainingBuffer, 0, s_DrainingBuffer.Length, false);
                    GlobalLog.Print("ConnectStream#" + ValidationHelper.HashString(this) + "::DrainSocket() drained bytesRead:" + bytesRead.ToString() + " bytes");
                    if (bytesRead<=0) {
                        break;
                    }
                }
                catch (Exception exception) {
                    if (NclUtilities.IsFatal(exception)) throw;
                    GlobalLog.Print("exception" + exception.ToString());
                    bytesRead = -1;
                    break;
                }
            }
            GlobalLog.Leave("ConnectStream::DrainSocket", true);
            return bytesRead > 0;
 
怎么想也想不出为什么对Chunked Encoding需要把内容都下光了才能关闭Socket,我觉得这是实现的程序员的失误。
 
 
 


Perl GC
2月 15, 2007, 1:33 上午
Filed under: 技术体会
Perl的Garbage Collection很简单,用reference counting,每个object记录一个reference它的个数(count),运行时,只要这个count为零,表示不再有人用它了,也就可以释放这个object了。问题是,如果若干个object互相reference成了一个环,这种方法就没法起到GC的作用了,所以,用Perl还不能够像用Java和C#一样随心所欲,有时候必须手工做一些事情清理垃圾,比如,对HTML::Element类型,每个对象代表HTML中的一个元素,但是为了表示一个HTML的树形结构,每个元素都要reference它的子元素和父元素(如果有的话),每对父子元素之间就形成了一个小环,这样永远都不会被GC,所以对不用的Element,要调用HTML::Element->delete去显示的删除。



2月 14, 2007, 1:23 上午
Filed under: 八卦杂谈
同事们陆续都请假回家过年了,办公室里冷清的很。
今天爸妈来北京过年,我终于可以不用搏票回老家,看同事们辛辛苦苦的为票奔走,觉得自己真是幸运:)
有个窝真好。


乱叙
2月 10, 2007, 1:24 下午
Filed under: 电影电视
有语文课的时候,老师说叙述事情有三种方式,顺叙,倒叙,乱叙。顺叙就是按照时间顺序讲事情,倒叙就是先讲结果再讲怎么导致这个结果,乱叙,就是时间完全错乱地讲故事,老师接着说,这招比较罕见,而且可能写出来很难懂,没有一定功力不要随便乱玩,既然老师都说不要乱玩,那我不学这招也罢。
 
上了大学,没了语文课,但是看电影成为了学习语文的延续。看昆汀的《低速小说》(Pulp Fiction),总算见识了一把“乱叙”,之后看《记忆碎片》(Memento),我也觉得相当不错,但是同学们普遍反映该片“不知道在胡说写什么”,看样子乱叙的确容易让人难懂,不得不暗自庆幸当年没有钻研“乱叙”,要是不小心钻研了一把而且在升学考试上用一把,而且赶上阅卷老师看不懂倒叙,也许我连大学也没读上现在只能卖盗版光盘为生呢,蝴蝶效应,谁知道呢:)
 
今天看吴镇宇地新作《茶舞》(也叫《血门徒》),才算真地领教了“乱叙”的威力——难懂!
 
《低速小说》的乱叙,也就是三个小故事之间的顺叙打乱,每个小故事看下来都不成问题,观众智商一般都没问题;《记忆碎片》虽然是几十个片断倒叙加上黑白镜头作为衔接,乱则乱而,好歹有点规律,耐着性子看到结尾,不行看两遍看懂应该没问题;《茶舞》就猛了,几十个片断,剪辑顺叙乱得没什么规律,虽然有些小道具暗示了故事发生顺叙,但是情节中不讲清楚时间,剪辑的时候又故意误导观众思路,似乎就怕观众一次看懂了,反正我看第一遍是没看懂。看第二遍,加上网上的分析评述,终于理清了故事情节,觉得导演构思还不错,但是,还是觉得怪怪的,有一种被耍弄的感觉,这样的乱叙实在是矫柔造作,为了让玩晕观众而打乱情节,实在是过了。
 
 
 
 
 


年度最佳
2月 9, 2007, 2:36 下午
Filed under: 八卦杂谈
年度交替之际,各媒体都开始评“年度最佳XXXX”,大多数评选很无聊,废话一堆一堆的。
只有“年度最佳新闻照片”还有点看头,因为光看就行,不需要文字和语言。


闪动
2月 7, 2007, 1:39 上午
Filed under: 工作心情
昨晚去公司在海洋馆举行的“闪动2007”新年晚会
寻宝游戏让人回想童年快乐:)
看海豚海狮表演,真精彩啊:)
和以往一样,抽奖我又没中:(
散会后和顺道同事步行回家