Wednesday, October 31, 2007

伟大的墙壁防火墙在西安和上海有两个洞洞!

www.misstibet.com是被封的网站,但是流量统计http://www2.clustrmaps.com/counter/maps.php?url=http://www.misstibet.com显示有来自西安和上海的IP访问过这个网站,说明伟大的墙壁防火墙在西安和上海有两个洞洞!肯定是网警国安东厂西厂锦衣卫什么的在这个城市有办公室。这个办公室不设在北京,有点意外。

流亡藏族选小姐,不知道达赖喇嘛看到泳装藏妹儿扭来扭去会不会心烦意乱哦

第一次看见这么凉快的藏妹儿,我是受不了了!

Sunday, October 28, 2007

I am younger than that now

听到Bob Dylan唱I am younger than that now(技术细节:其实我是听到Ramones唱的),我就想起当年我读小学、中学的时候,像个傻子一样,让一群老师骑在头上拉屎拉尿,一点没有年轻人的精神面貌。从这个意义上讲,我也可以说这句话。

Baidu vs. Google, round 3

搜索“<歌曲名> 歌词”,在百度中几乎找不到歌词。因为几乎所有的音乐网站的几乎每一页上都有一个“歌词”按钮,所以百度结果指向的页面都包含是与指定歌曲相关的,且都有“歌词”二字,但没有歌词。Google的表现好得多,排头的结果里就有歌词。Google成功的过滤了背景噪音。Google胜。
注意:以上并非统计结果。只是对一二个case的个人感受。

Wednesday, October 24, 2007

我操你娘的Guanxi

中国社会和中国人最丑陋的地方之一,Guanxi,上了wikipedia了。在Amazon上也可以搜出好几本“Guanxi”的书。对Guanxi在后“改革开放”中国的意义,可以看以下文章:
  • 亚洲的病痛——剖析“裙带资本主义”,作者庄礼伟,出处不明,STFW
  • 疯狂的权贵资本主义――从四川省自贡市政府违法违规征地案说起,作者张祖桦(据说这哥们被逮进去关了一段时间又放出了监视居住),出处不明,STFW
  • 中国改革为何堕入了权贵资本主义泥潭?作者刘晓峰,出处不明,STFW

Friday, October 19, 2007

在F#语言中创建class

如果有人告诉你,某种语言有超过三种方法定义一个class,你肯定会觉得这是某个O-O狂人设计的超级“编程就是O-O,生活就是O-O”语言,但是他又告诉你,这实际上是一种functional programming语言,你肯定无语了。这种语言的确存在,它就是F#。下面列出三种定义class的方法,以抒发我强烈的感情(不知道是什么感情,就是很强烈)。所有的例子都是定义包括一个property和一个getter,一个setter的类。虽然“真的(O-O)猛士”,是不会写getter/setter的,而那些张口闭口framework,design pattern,却写出一对getter/setter来的人,根本就是没入门的伪O-O,我用这样的例子,只是为了方便。言归正传:

方法一,records of functions with local states:
#light
type EnvModelObj<'T> = { get: unit -> 'T; set: 'T -> unit }

let NewEnvModel initState =
let state = ref initState
{
set = (fun x -> state := x);
get = (fun () -> !state)
}

let o1 = NewEnvModel 1
o1.set 3
print_any (o1.get ())

这是在functional programming language中引入objects的经典方法。SICP中有讲述了用scheme实现这种套路,因此这种方法看上去更fp一些,但是有以下缺点:
  1. 先要定义一个代表这个类的界面的record type,然后定义一个返回这个record的函数,居然和C++定义class的方法十分像!两个定义中包含了重复的信息,违反了DRY原则。
  2. 所有的成员,因为必须使用ref变量,都必须box,效率受损。
  3. 这是一个F#类,其它.NET语言看不懂这个类。
方法二,records with member functions:

type RecordWithMemberFunction =
{ mutable state : int}
with
member this.get () =
this.state
member this.set x =
this.state <- x static member ctor initState =
{ state = initState }
end
let o3 = RecordWithMemberFunction.ctor 5
o3.set 6
print_any (o3.get ())
感觉有点怪异,不理解F#为什么要有这么一个feature,为了实践Perl的Many ways to do one thing哲学吗?

方法三:first-class .NET class
type Class<'T> = class
val mutable state: 'T
new initState as this =
{ state = initState }
then
print_string "initalizing "
print_any this
print_newline ()

member this.get () = this.state
member this.set x =
this.state <- x
end

let o4 = new Class 7
o4.set 8
print_any (o4.get ())
这样定义的class是标准的.NET class,可以给其它语言使用,但是用F#定义这样一个class,也比其它语言省不了多少“笔墨”了。

末了,我要告诉大家,blogger.com把我的代码的缩进搞得一塌糊涂,简直无可救药,再次证明了我的理论:the (x)html web sucks sucks sucks。

Sunday, October 14, 2007

google vs. baidu, round 2

这次搜索“东汽红肠”,Google缴械投降,一个结果也没出来,百度出来的结果很不错。百度胜。你可能很好奇这是什么稀奇古怪的东西把Google都搞晕了,下面是百度出来的第一个结果:
“东汽红肠”的历史由来

  说起“东汽红肠”,大家首先想到的是它独特的风味和优良的品质,只知道它是东汽建厂初期从哈尔滨带过来的美味食品,但却很少有人能说出它的故事。

  “东汽红肠” 或“哈尔滨红肠”其原名叫“力道斯红肠”,语出俄语"立陶弗斯卡亚", 即“立陶宛肠”。它是从100年前,从俄罗斯传入中国的,原产于俄罗斯的立陶宛加盟共和国,所以它的谐音叫力道斯肠。因为红肠个头均匀,肠衣透明,肥肉凸出,瘦肉干缩,切片坚实,外观是漂亮的枣红色。所以哈尔滨人管它叫红肠。  

  没有历史的积淀,便没有浓郁的芳香。1898年由于中东铁路的修建,外国人大量进入哈尔滨,肉制品极为短缺,这种现象被从海参崴来寻觅发财机会的俄籍波兰人特洛穆义西耶尼科夫看准,认为是个绝好的发财之道。于是,他从海参崴招来十几名制作欧式肉食品的中国技师和工人,同时向中东铁路工程局申请在哈尔滨秦家岗(今南岗)坡上建一座带有门市的俄式板夹泥房,面积约有200平方米,并购置一些灌肠机器。1901年以"前店后厂"的形式开始营业,取名为"戛斯特洛诺穆灌肠工厂"。现已有近百年的历史,是哈尔滨著名的老字号。开业后,由于产品质量好,又是独家经营,当时产品供不应求,特别是军队需要量大,工厂就昼夜加班生产来满足市场的需要,一年就获利近10万卢布。另外由于秦家岗发展较快,铁路局办公大楼竣工,大批官员和技术人员搬迁到秦家岗。尼古拉大教堂建成后,不仅神职人员居住此地,广大信徒也拥向这里,秋林公司也从香坊搬迁到这里,建起营业大楼,秦家岗成了中东铁路的政治、经济中心。城市的繁荣给工厂带来了巨大利润。俄国"十月革命"后,世界帝国主义各国武装干涉苏俄革命,1918年哈尔滨成了协约国干涉军的转运站,许多干涉军驻扎哈尔滨等待开往苏俄,这使灌肠厂销售额直线上升,促使工厂迅速发展,到20年代就在原地建起砖造二楼,400平方米,店容店貌焕然一新,仍为前店后厂。前店为带酒柜的大商店,经营范围扩大一倍,除销售本厂生产的欧式肉制品外,还经营各种面包、世界名酒、香烟、饮料、罐头、乳制品、腌渍制品以及其它食杂商品等。厂店从业人员增加到40多人,全厂除经理、会计外全部任用中国人,又由海参威高新聘来高级灌肠技师傅书义,肉制品日产量也提高到500公斤。到了20年代以后,哈尔滨逐渐出现一批大大小小的灌肠厂、铺,其中秋林公司灌肠厂竞争力最强。因此,戛斯特洛诺穆灌肠工厂为了提高竞争能力,始终保持欧式传统配方,以优质取胜,以服务周到见长。这个厂有了名气,俄国在哈尔滨的上层人物,中东铁路局局长霍尔瓦特,白俄临时政府的首脑人物等都派人常来厂里购买各种欧式产品,就连沙俄财政大臣维特来哈尔滨视察中东铁路时所吃的肉制品,均由此厂供应。各种大型宴会都离不开这个厂的烤奶猪、馅鸡、馅鸭、馅鹅等产品,各时期驻哈领事人员也是这里的常客。从此这个厂不仅誉满哈尔滨,而且驰名国外。1940年,由于特洛穆义西耶尼科夫患脑膜炎不能工作,由大掌柜孙文山、二掌柜孙显廷等以伪币4万元把这个厂兑过来,并改变过去专为外国人服务的狭隘经营方向,面向中外顾客敞开服务,日产量上升到1000多公斤。1944年被迫停业,1945年日本投降后,戛斯特洛诺穆灌肠工厂立即重整旗鼓。股东们一致意见,商号应改为中国店名,于是取义在松花江之滨,把商号改为"松江号灌肠工厂",并召回全厂老职工,把厂房、机器修整一新,又添置一些新机器设备,到1945年全厂职工70多人,日产量高达3至4吨。主要品种有:马斯果斯(特制干肠)、茶依那(茶肠)、格拉布斯(哈尔滨肠)、力道斯(红肠)、意大连斯(松江肠)、乌克兰斯(环形肠)、老巴克(火腿)、安特果斯(外脊卷肉)、格吉得克(里脊卷肉)、古列金克(王花卷肉)等,此外还有熏鱼、烤奶猪和烤山兔等高档风味、野味制品.这以后又易名为“苏联侨民会灌肠厂”、“中国食品公司哈尔滨公司灌肠工厂”、“哈尔滨灌肠工厂”,“奋斗肉制品加工厂”,直到1981年恢复“哈尔滨灌肠工厂”厂名,今已实现工、商、服务一体化,成为多种经营的综合性企业。二十世纪六十年代,国家进行“三线”建设,由哈尔滨汽轮机厂和上海汽锅所等单位援建在大后方的东方汽轮机厂。一时间,怀着报效祖国赤诚知心的上万名汽轮机儿女,从祖国的四面八方来到汉旺这个有着悠久历史的小山镇,开始用他们的青春和智慧在十里荒山坡上雕琢出一颗璀灿的“东方明珠”。由于建厂初期,小镇无法满足上万名职工家属的生活后勤保障,企业办社会,自给自足的后勤福利系统逐步健全起来,哈尔滨红肠在那时也随着建设大军来到四川落户,工厂为了提高红肠制作水平,保持哈尔滨红肠的独特风味,请来了哈尔滨的老师傅传授制作工艺,还派人去哈尔滨学习制作技术,使来自北方的东汽人能随时品尝到家乡的美味。传统产品、名牌产品也不是一成不变的,虽然万变不离其宗,但也要随着时间的推移向更高的目标和需求不断发展,食品名牌总是随着社会的发展向着有利于消费者身心健康的方向不断的演变。东汽实业公司通过引进国内外先进设备和技术,不仅提高了肉制品的生产加工能力,而且也改变了多年来落后的肉制品加工工艺和技术,使用传统工艺融合现代生产技术制作的欧式风味产品,既保持了传统欧式风味,又改进了按旧工艺生产加工产品的弊端。保持了表面枣红鲜艳、光泽起皱、味美质干、易于保管、携带方便等特点。 

  据考察,目前国外甚至“力道斯”(红肠原译名)的发源地,原苏联立陶宛加盟共和国,原始的传统的生产加工工艺也早已绝迹。三十多年过去了,东汽生产红肠的工人换了一批又一批,设备也由原来的手工绞肉机变成了自动化生产线,但只有一点始终没变,那就是地道的欧式风味和以质取胜的企业灵魂! 东汽红肠不仅有着悠久的历史,现在又焕发出青春的活力,以它独特的美味吸引着广大消费者。

Saturday, October 13, 2007

A personal case study on search quality of Goolge and 百度

Google和百度在中国就谁的中文搜索质量高闹得不可开交,以前也没有留意比较,反正我的Google Toolbar 搜索框内既有百度又有Google。不过今天偶然以关键词“企业文化”对www.nanfangdaily.com.cn/jj 做了一次搜索,即搜索:
企业文化 site:www.nanfangdaily.com.cn/jj

发现百度和Google的结果有较大区别。
首先,百度的搜索结果前两页都是URL为www.nanfangdaily.com.cn/zm/.../jj/...的网页,而Google返回的都是www.nanfangdaily.com.cn/jj/...的网页。Google的结果更符合我的意图。
其次,我是想搜索含有“企业文化”的文章,但是百度出来的前几页都是网页脚上有“网站简介 / 广告服务 / 招聘信息 / 联系我们 / 企业文化”链接;而Google的“企业文化”在正文中。
仅从这个例子来看,Google的搜索质量比百度好。

Friday, October 12, 2007

为什么政府喜欢经济学

纵观现代国家,政府都很喜欢用经济学作为认知形势和制定政策的理性工具。虽然对中国来说,这已经比毛在世的时候凭个人好恶想当然任意一通胡作非为的方法有进步了,但是未经证明即假设正确还是让我有一丝不安。大家一天都在念叨着inflation, growth, investments, exchange rates,自然把使用经济学的合理性都当成理所当然的常识了,但常识有时经不住推敲。我不明白为什么人文学科,包括心理学,在指导政策方面没有经济学的地位,是因为经济学特别能定量吗?为什么大家都在研究什么样的社会形态会有什么样的经济表现,没有人考查一下什么样的社会中,人在更人性化的维度里会是怎样呢?比如人会彼此相爱还是彼此憎恨,彼此信任还是猜忌,急功近利还是考虑得长远等等?或者只是我没见识而已。

Thursday, October 11, 2007

編程語言和範式(paradigm)-多多益善

剛剛把Programming Ruby看完,立刻就對Ruby陷入愛河。看Ruby的時候我在想,天呐,幸好我先學過了C/C++,如果我接觸的第一門編程語言是Ruby,我怎麽會去瞧C/C++一眼?我這一輩都是scriptor了!今天突然意識到一件事情:其實真正給人帶來愉悅的,不僅是某一個超級好用的編程語言,而更包括學習新語言,新範式的過程。要問我最喜歡的語言是哪個,不是C/C++,也不是Ruby,而是-下一個!如果學過Ruby再學C/C++,也一定能體驗到原始、粗獷、彪悍的美。編程語言和範式就像妻妾一樣,多多益善。
說到女人,Ruby還真有點傳說中溫柔體貼的日本女人味!

后续:这里有一篇文章,表达了和我一样的感受http://weblog.raganwald.com/2007/10/challenge-of-teaching-yourself.html,不过我是正面典型,哈哈。

后续:各种各样的paradigms甚至language features并不是好看不实用的花瓶。IBM developerWorks网站的"crossing borders"系列文章考查这些功能在实战开发时的作用:
http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=crossing+borders:

后续:Alan Perlis说:A language that doesn’t affect the way you think about programming, is not worth knowing. (出自 Epigrams on Programming)

后续:Computer Science Education: Where Are the Software Engineers of Tomorrow

后续:I find that every new programming language I learned increases my breath of knowledge, my breath of expressiveness and even if I don't write any more code in that new language it changes the way I think about writing code and languages I already know. So I found value in learning lots of different programming languages.
-Guy Steele

Monday, October 01, 2007

关于WYSIWYG,GUI vs. CUI

这是一系列带有宗教色彩的话题,而且时常显现。今天看Managing Projects with GNU Make的时候,我又想到了这个议题。事情是这样的,根据这本书的网上勘误表,有两个错误是把markup印了出来,像这样
The tags for the format "Replaceable" shouldn't be printed.
--directory=directory
should be:
--directory=directory
(2nd directory should be in italics)
可以推断,作者是用一个纯文本编辑器创作的,然后再编译,在此编译中semantic markup按预先设定的规则被转化成排版命令。我承认,Word sucks,但是用Word写的文档绝对不会出现这种错误。为什么呢?因为1. 在使用Word的时候,对文档的修改总是立即被执行了,Word没有分离的编辑-编译过程;2. Word用图形来传递信息,像“directory”应该显示成斜体而不是前后各有一个replacable标记这样的错误非常容易发现。以上两点正是WYSIWYG的特性,可见WYSIWYG并不是一无是处的。Word真正的问题,是它培养了大量PC用户在使用文档时,只注意文档外观、不理会文档组成元素semantics的习惯。我认为,基于GUI的WYSIWYG文档创作方式比起基于CUI的纯文本编辑-编译文档创造是有优势的。WYSIWYG文档编辑器立刻执行改变文档某一部分的semantic的命令,并使结果以图形方式,比如不同的字体,显现出来。这样做有以下好处:1. 编辑器理解文档的semantics,所以能提供更多的辅助用户创造的功能。2. 命令立刻执行,可以避免一些错误,比如markup拼写错误。3. WYSIWYG利用了更多的维度,如文字大小,颜色,可以传递更丰富的信息,更加符合人的认知习惯(本人的感觉)。
总结起来,文档创作工具是否支持semantics与是否WYSIWYG是两个完全独立的特性。现的两个主要的派别,一个不支持semantics的WYSIWYG,一个支持semantics的纯文本,使人产生两个特性间有因果关系的错觉。其实理想的工具,应该是支持semantics的WYSIWYG。似乎正要破壳而出的Intentional programming就包含这样的思想,我们拭目以待。