2006-12-03

小小的气愤

下午出门,到了临江门附近,因为时段,也因为路窄,感觉比较堵车。我坐在公车上,无聊地看着远处的车流。其实也不是完全堵死了,车行缓慢而已。临江门那里是个奇怪的十字路口,接受来自朝天门、解放碑的大量车流冲击,却没有立交,完全靠信号灯和人工指挥,所以流量相当有限。车流看起来是堵了,不过我觉得,等上两三个红灯,大概也就过了。
重庆路窄,这是没有办法的。连房子都不得不修在山坡上。地盘完全是挤出来的。眼下这条盘山路,能扩到双向四车道已经是很不容易了,再挖下去就要山体滑坡了。此时,我这个方向的两根车道已经全是车辆,对面的两根道还比较空,因为下坡比较快,前面又没有信号灯,一路畅通。
大家都没动,可视野中发现有一辆路虎在走。怎么回事?原来小样儿的在逆行!跑对面车道上去了。第一反应估计就是特权车辆。平时没怎么留心,今天实在是无聊,欠欠身望了一下车牌,还真是——成K 70011
很是看不惯这些所谓的“军车”。又不是战时,也没有什么紧急情况,就算是个军牌,又有什么权力倒行逆施?我们辛辛苦苦工作,缴些税给所谓国家,就养了这样一群败类?我们养军队,是要在别的国家面前耀武扬威的。现在倒好,只会在自己老百姓头上拉屎拉尿,作威作福!

等了两个红灯,公车挪动着来到了十字路口前。抬头一望,那军牌正好排在我们右前方。我觉得真是又好气来又好笑,没车你敢逆行,有种你冲红灯啊?看来丫不光欺压百姓,还TM孬种一个,欺软怕硬。我们就指望这样的军队来保卫我们的亲人啊?
绿灯来了,军牌头一扭,奔商业街区去了。不知道是不是赶着去“洗浴”啊?果然是颇有“占领军”的风范啊!

有人说,这有啥好气愤的?是,不该气愤,早该见怪不怪了,呵呵。

2006-12-02

凌晨时分的惊魂

  早上五点半,隐约听到爸妈回来的声音,还有炉子上天然气的火苗声,水声。突然,一切归于黑暗,爸妈的声音划破夜空,继而下楼远去。

  “抓贼,偷电线的贼……”

  喊叫声回荡在夜空中。还在睡梦中的我,心里大概也知道怎么回事了。上半年,我们这栋居民楼内的电线据说被人盗割了,因此停了一天的电。我虽然不在场,但是因为老爸在EMail中描述得很详尽,所以也就如同亲临了。被惊醒的我,犹豫着要不要起来,最后还是恨恨地骂了几声,然后又躺下了。
  水还在滴,火苗还在响。不一会,外婆起来了,把它们关掉了。四周一片漆黑,我在等待楼下的动静传来。

  ……
  没有动静。外婆大概按捺不住了,和隔壁的人搭上了话。我知道我该起来了,这么久都没有回来,我都不放心,别说她了。就算是为了安抚,也得出去看一趟。
  穿好衣服,带好钥匙、手机、电筒,刚出门,又回来抓了一把折刀防身。我心里盘算着,如果下楼找不到人,那么就朝派出所的方向去。希望不要下楼就看见楼下左躺一个右躺一个。呸呸!
  和外婆约定,我每隔十分钟打个电话回来。如果超过三十分钟没有电话,那么她就报110。打着电筒我下了楼,那个时候天色还真是黑啊,真的是伸手不见六指。在路上,我看到了被剪掉的电线,好粗!

  下到路边,老爸正站在出口。没事就好,我给外婆打电话报了平安。原来他们两个家伙追下楼没看到人,就让老母去联防队叫人。刚好老母也正好带着联防队员回来,于是让我把住楼梯口,他们一起去楼下看那贼有没有藏在什么地方。

  没有收获,只是在电线被剪断的下一层楼发现毛贼丢在地上的钳子,也是好大。好大一把,看来是逃跑的时候丢掉的。之前还猜测说会不会是楼内的租赁户干的,但是从逃跑时没有带钳子看来,应该是逃出去了。询问两侧街道上准备摆早点摊的人们,都说没有留意到有人跑出来,线索就此断了。
  打过电话给电业局之后,联防队员拎着钳子回去了。还好这次发现得早,没有让贼把线拖走,这样维修起来就不需要多少材料,会比较快一点。据我爸妈说,他们回来的时候,就发现线的PVC外壳被人剪开了。估计那个时候贼就躲在某处吧?等他们一走,又开始动手,这家伙胆也够大的!

  电业局中午才来人把线接好。据说是因为很多地方都有人盗割电线,忙不过来。看来,年底了,社会又开始不安全了!

2006-11-08

为什么要保卫国家?——《电影人生》

  《电影人生》,英文名《The Majestic》,由我喜欢的Jim Carrey主演。今晚无意在CCTV-6看到,被其颇为不错的编剧所吸引而看了下去。然而谢幕之后,感触最深的既不是演员的表演,也不是情节的构思,而是影片所要传达的精神——我们为什么要保卫国家?

  Peter是一个青年电影编剧,在麦卡锡时代因为无心之举遭到了政治迫害,丢了工作,也和女朋友分了手。郁闷之余,喝酒开车在桥上出了事故。车子翻入河中,好不容易挣脱出来,脑袋又撞在桥墩上。等后来一个老伯在海滩边捡到他时,貌似已经失忆了。
  老伯所在的小镇,因为二战,年青人很多都牺牲了,回来的不少也有伤残。而Peter正好很像电影院老板的儿子Luke,于是大家都把他当Luke。众望所归,不是也得是了,何况还失了忆。加上见到了美丽的Luke前女友Adele,估计爱慕之心也是有的,稀里糊涂之下,也就接受了这个新的身份。后来,自己也觉得自己就是Luke,帮助老爸把停业的影院装修一新,开始了全新的生活。
  某天,“Luke”突然回忆起了自己的过去,而巧合的是,老爸也突发心脏病。Peter没有告诉他真相,老人满意而去。在葬礼上,FBI找到了Peter,随后正式将其带回了原来的生活轨迹。Peter与Adele告别,Adele托父亲送给他一本美国宪法和一封Luke最后的信。
  在听证会上,审判方意欲让Peter宣读一份认罪声明,并指证诬陷别的人。然而Peter在看过Adele的赠物以后,经过激烈的思想斗争,奋起抗争“麦卡锡主义”,最终赢得了舆论,并获无罪释放。影片的最后,Peter回到小镇,本欲与Adele作一次诀别,不料小镇居民全体在车站欢迎他的到来,也因此他就留在了镇上,娶妻生子。

  借助“失忆”、双重身份的元素,剧情得以展开得非常的巧妙,让人兴趣盎然。不过,这毕竟是一部严肃题材的影片,就算演员是Jim Carrey,也无法让人轻松起来。到了结尾处,在法官的锤声中,Peter慷慨宣读宪法第一修正案的情景,让人过后许久也不能平静。

  我在问自己:我们为什么要保卫国家?
  Luke保卫了他的国家,因为那是他愿意为之付出生命的国家,是那自由、民主、人权,它们是美国的立国之本。Peter从一开始的软弱妥协,到后来觉醒反抗,也正是领悟到了这一点——Luke愿意为了保卫这样的国家而牺牲生命,镇上的年青人也是。但是如果Peter宣读了声明,诬陷了他人,这无异于在摧毁自由、民主、人权,或者说在宣告它们不存在。因此Peter的觉醒和反抗,同样是在保卫这样的国家。那些麦卡锡分子,打着爱国的旗号,实际上是在摧毁这个国家,在摧毁这个国家的立国之本。

  我们呢?我们的立国之本是什么?
  工农阶级?随便去街上拉一个人来问问,都知道工人和农民现在是社会上的两大弱势阶级。在这里我不愿意用“被剥削”或“受迫害”这样的词来形容,因为我还不愿意把目前社会的几个阶级放在对立面来谈问题。但是,我要说,即使用上了这样的形容词,也并不是多么言过其实的程度。
  人民民主专政?现在的情况是,立法、司法、行政这三方面的权力,都在向社会的上层群体,或者说,向既得利益集团在倾斜。行政自不消说,司法早已是富人玩的游戏,就连最标榜人民民主的人民代表大会制度,我们所谓的立法机构,也已经完成权贵化了。在这里我不想,也不需要举出若干证据来证明。本文只是我的感想,代表我一个草根的感觉。就凭我高中毕业之后,从来没有参加过任何一次无论何种级别的所谓“人大代表”的选举,甚至也从来没有被通知过参加这样的投票,我就知道他们代表不了人民。

  我曾经给自己找了一个保卫国家的理由:国破则家亡,为了家人,要保卫国家。
  粗看起来,的确是那么一回事。阶级斗争、共产主义的美好理想什么的,和我不搭界。但至少我的亲人,我的朋友需要我来保护。然而,我又问自己,如果国家在迫害我的亲人,我的朋友,那么,我要保卫谁?
  很明显,会出现这种悖论,就说明这种理论不是那么站得住脚。要保家,并不一定要卫国。卫了国,也不一定就保得了家。要避免这个悖论,就必须把国和家统一起来。国要由千万个有相同信念的家组成,而一旦你选择了在这个国度安家,那么就必须要认同这个国家的建国理念。这其实就是所谓的“社会契约”的一部分。这样的国度,才是人民都会去守护,会为之而献身也不惜的国家。

  那,我们的建国理念到底是什么?
  我找不出答案。难道就是现在的所谓“建设和谐社会”?一个看似很大同的理念,却空空泛泛。不死人,不闹事,有钱赚,有钱花,就是“和谐社会”?和谐社会是果,不是因,是用,不是体。这根本不是理念,这只是给穷人们画的一个饼。理念是会得到认同的,是要坚持的,要去捍卫的。而饼人人都会画,别的国家或许饼画得更好看,反正都是画出来的,凭什么吃你的不吃它的?
  我并不认为建国理念一定要一成不变。美国宪法也会有修正案,一开始决定的很可能不是最对的那个。但我不愿意见到自己竟生长在一个这样的国家,竟然让我找不到理由为之捍卫。我想这个问题一定普遍存在,所以才会有近年来民族主义逐渐的抬头。如果一个人找不到保卫国家的理由,那么他就只好转而去保卫自己的民族,那至少包含了和他比较相近的遗传基因。

  我一定要保卫我的家人,至少。所以,我会就这个问题好好的想一想。

2006-11-07

我与香烟的故事

  众所周知,我不吸烟的。而且若遇见别人喷出的烟雾,则是捏鼻就躲。这般的程度,其实全“归功”于小时候的一个事件。

  小时候的自己,无论大人怎么教育,总是对吸烟抱着一种好奇的态度。虽然知道那不是好东西,但是那么多大人都吸,吸得津津有味,电视上的叔叔也吸,吸得酷酷地很有型,因此自己总是想去亲身尝试一番。于是,有一天,我和表妹约定,去偷偷捡一支烟头来尝一下看到底是什么感觉?
  记不清是哪一年,不过既然我表妹会走路也会说话,那至少也是我四岁以后的事情了。要拉上还不太懂事的小表妹,自然是有着很卑劣的想法——若是因此被大人责怪,至少还有个垫背的。表妹那时还唯我马首是瞻,所以乖乖地和我一起躲在电线杆后面,等待着那烟屁股的出现。当时我和她商量好,我先吸,若是不错,就她再来。
  来了……来了,我看见一个家伙吸着烟经过我家门前。手一扬,烟头扔在了路边。扔在石板上,干燥的石板,因此烟头很“新鲜”——我是这样认为的。长度也还不错,起码离过滤嘴还有那么一截。于是我飞也似地跑了过去,把它捡了起来,当然,还有小表妹跟在后面。

  沉住气,学大人们的样子,含在嘴上一吸……

  到底是什么样的滋味?其实今天的我,已经不十分记得了。只记得那是一种很难受的味道。郁闷!难道我谋划了这么久,处心积虑想要尝尝的就是这个怪味?!呲牙咧嘴的我,一把将它扔进了阴沟。表妹看见我这般模样,当然也是打消了想要尝试的念头。
  而我自从那时起,对于香烟这种东西,也就完全没有了半点好感。也许这就是一种心理“免疫”吧?或者要说“一朝被蛇咬,十年怕井绳”也未尝不可。总之我这辈子也不可能再去学会吸烟了。

  并且,也许也从那时起,我就不再对所谓的宣传当真了。亲眼看着那么多人吸,吸得那么爽。电视里有人吸,亲人中也有人吸。但这“香”烟却居然是这个狗屁味道!这种事情尚且如此,那么其它的宣传更没必要去相信。
  我也不再因为好奇而犯险了。若是小时候被烧伤过,一辈子都会记得玩火很危险。从某种意义上,我要感谢我的这次经历。因为它,我一辈子都不可能成为烟民,不可能去碰毒品,不会去玩那些濒死游戏,也不会去搞传销。
  嗯,再次感谢!

2006-10-07

《黑猫馆手记》读后感

前言

  有一段时间对侦探小说比较着迷。不是对故事,而是对“侦探小说”本身。还曾经买了一本《世界侦探小说史略》来读。
  对侦探小说有点研究的读者,应该都比较清楚。在世界侦探小说中,日本的侦探小说,或者说——推理小说,其风格独树一帜。而对日本推理小说稍有研究的朋友,应该都知道,日本的推理小说,主要分为两大流派:“本格派”和“变格派”。我读的这本《黑猫馆手记》,就属于本格派的作家绫辻行人的“馆系列”作品中的第六部
  这本书是去年在“光合作用”书屋用优惠券进行年底大采购的成果。当时并没有买到这“馆系列”的全部六本,只收集到了2、3、4、6。比较可惜,因为有一点点剧情和人物是有一些贯穿的。
  2、3已经在去年买回来之后就很快读过了。不过在读4的时候,因为某个事件打了岔,于是进程就耽搁了下来,一直到现在。今天心情不错,终于在四周黑暗包围的,柔和的黄色灯光下,拿起了这本《黑猫馆手记》……

内容简介

  (以下斜体文字出自此书的引子)
  “我是鲇田冬马,黑猫馆的管理员。1989年8月1日以前,我以为我会平静地隐居在此地。但,做梦也没想到,四个男孩的来临让黑猫馆仿佛受到了诅咒!先是男孩们邂逅的陌生女子横死,接着是地下室的无名骨骸……我急着想查出凶手是谁,没想到8月4日又有人在浴室上吊了,表面上看是自杀,事实上,我知道这百分之百是密室杀人案!”
  这是一本我拼死保住的手记上写的,至于黑猫馆到底隐藏了什么秘密?凶手到底动机何在?老实说,我“现在”完全不知道,因为,我已经丧失全部记忆了……

特色

  叙事的风格比较独特。一章交待现实的事件经过,一章展现手记中记载的从前的内容。情节交替发展,最后汇集到同一点,真相大白,却出乎读者的意外。
  最后的结果当然和所有的推理小说都类似。但这种两条线索交替进行的风格,倒是横沟正史这位“变格派”的祖师比较喜欢使用的手法。以第一人称在手记或日记中进行叙事,也是横沟老先生干过的事情,只是在本书中作者并未在手记中欺骗读者。虽然也隐藏了部分内容,但在手记中记述的文字已经露出了足够多的马脚,让细心的读者可以捕捉到背后的真相。

破绽

  手记中的破绽,我觉得有些过于多了,多到不自然。大概作者实在不想通过隐瞒内容来使读者无法猜到结局吧?不过,我始终觉得,有谁在写日记的时候,会把“我把手放在了胸口”这种文字特意突出一下是“左手”呢?除非他真的想通过这种方式让别人知道他是一个右心人。
  两条线索,也显得份量差别过大。非常明显的,手记为主,现实为辅。主要是因为当事人已经失忆,因此基本只能当一个旁观者,现实中的角色以揭开真相为目的的行动,方向目标均很明确,使得这个事件比之那种不停变化,一波未平一波又起,假设不停被推翻,推想不停被否定的事件,要来得更加平静,更加平面化。读者可以在了解到足够多的细节之后,坐下来好好推想真实的情况,因此同作者的斗智,要相对容易,也相对没有刺激性。

感言

  我对于推理,并不是很在行。侦探小说也读得不算很多。不过我还是在中段就猜到了那个失踪的教授的下落。可以说,这本《黑猫馆手记》,的确是一本难度比较低,基本可以算作小品的推理小说。
  为了吸引读者,作者居然加入了一场性宴的情节,哈哈。虽然不是直接描写,不过在以往的书中,可是不需要这样的场面的喔!果然是情节不够,女人来凑。除了性滥以外,还有毒品LOLI的戏份,光这几个词往搜索引擎上一摆,估计就能引来不少流量呢。
  15元的价格,对于消遣来说并不算贵。对于中村青司感兴趣的家伙,可以试试,呵呵。

2006-10-06

问我如何看待克隆人

  因为一个游戏的缘故,在网上不小心看到了一场关于如何对待克隆人的争论。

  我不理解为什么有人会说出“应该把克隆人当奴隶来用”这样的话。这些人是不是觉得,只有爹娘呼哧呼哧搞出来的才算是上等人,而克隆出来的就是下等人呢?我相信这样的人必定是现实中那些在某些方面自认为优越感十足的人。
  我是对于克隆人持无所谓的态度的。我不会像某些人那样,因为某些原因鼓吹克隆技术,但也不觉得克隆有什么大不了的。也许是我没有“深入”地去思考里面的什么伦理、社会问题吧?但是态度这种东西不是本来就是一种感觉吗?喜欢什么不喜欢什么,要说理由的话,其实都是后来找的。喜不喜欢,其实感觉最重要。
  一个人是爹娘干出来的,还是细胞克隆出来的,我不觉得这是一个很重要的问题。以前我们不是还讲什么阶级出身吗?现在套上一个科技的外衣,就变成了对克隆人的身份歧视,其本质还是一样的。我不会因为一个人是农民出身还是工人出身而差别对待,自然也就不会歧视克隆人。
  但是,不能说我不会给人差别待遇。我会,但是其根据不是出身,也不是克隆或非克隆。这些是每个人都无法选择的,用这些做理由是不公平的。我会因为某个人道德水平低下或者表现出了令我厌恶的品质而鄙视他,但是这不能成为给某类人打上一个标签的依据。这一点,无论是对于克隆的问题,还是农民工的问题,都是一样的。

  有的人,大概是看过《第六日》的朋友,可能会害怕突然出现自己的克隆人把自己给取代了。不过,如果真的出现了这样的担心,那只能说明你科学素养太差了。会出现《第六日》中的情况,必须解决两大科学难题:
  1.记忆要可以移植,并且可以通过人工方式进行选择性的修改;
  2.克隆的胚胎要进行快速发育,这样才可能得到和本体同样年纪的副本。
  基本上,第一个问题还算是有可能解决,第二个问题的难度就太大了。那相当于加快某个范围内的时间流动,如果真解决了这个问题,那么时光机的问题已经解决了一半了。所以,对克隆人会带来这样的担心完全是多余的。

  也有的人,从伦理学上,担心克隆出来的人不知道该被称为谁。是本人?还是本人的弟弟?或者是本人的儿子?
  其实完全没有这个必要。现在包N奶的大款多的是,我觉得与其操心克隆人该如何称呼,还不如把N奶(及其子)之间的称呼先理顺了再说。现实中的伦理问题本来就很多,也没有看到谁大呼小叫。放在克隆人身上,呵,就成了大问题了?

  更多的专业一点的朋友,担心的是基因的安全。一来担心自己的基因泄密,二来担心人类的基因被肆意改造,三则害怕滥用基因技术做出什么怪怪的生物。
  这些担心,我认为是相对正常且合理的。但是,这和克隆人没有什么关系了。这是基因工程带来的问题,即使不克隆人,一样会出现这些问题。

  无所谓的态度,就是说,没有也没关系,有也没关系。总之,大家都是一样的,不是吗?谁没有一颗心呢?有时候很向往《阿猫阿狗》的那个小世界。木桶镇的居民们,知道电器行的老板是UFO,却因为其秃头而不愿意公开谈论这个,怕伤了他的自尊,多么善良的人们啊!

2006-09-29

也谈咱们首猪的暂住证

在网上看新闻,看到北京又要搞暂住证大突击了。说是要防止犯罪,还要对房东也进行“惩罚”。感觉回到了封建时代,这不是连坐么?

看过之后,更多的是感到好笑,也许这就是所谓的“黑色幽默”吧?办个暂住证就能制止犯罪么?身份证都可以造假,区区一个暂住证算什么?办个暂住证要多少钱呢?

更好笑的是,居然公安局、派出所们要去管公民的民事行为。——没有暂住证的房客要当场退房,房东要罚款要受教育。各位觉得这乌龟屁股可能被执行吗?大不了咱们以后不用房东、房客相称了,你是我朋友,我是你哥们。你有房空着,送我住一段时间,咱们交情深,我有钱爱送给你。这交友也犯法?朋友送礼也犯法?你公安民警管得着吗?笑话!

本来暂住证这种东西就是狗屁,都是拿来整人用的,防止犯罪?我看促进犯罪还差不多。流动人口问题是多,但不是这样子管理的。这样子只会肥了某些人腰包,坏了我们可爱的Unique执政Party的形象。联想到国庆快到了,不知道是不是某些单位过节费还没着落,出来敲诈来了吧?

2006-09-19

RealPlayer又让我失望了

早上起来,收到RealPlayer消息中心发来的消息,说有新版本可供升级了。抱着试试看的心理进行了升级,首先跳出一个页面,说新的中文版有许多新的功能,然而,RealPlayer Plus在这个版本中是不可用的。

郁闷,RealPlayer Plus我可是花了美元来买的啊!算了,先试试看,大不了版本回退了。接下来更郁闷,因为它被捆绑了CNNIC中文上网这个垃圾中的垃圾(默认为安装它),著名的流氓软件。这样的官方渠道,还有漂亮的页面给它做宣传,看来大名鼎鼎的RealPlayer在中国也避免不了沦为流氓软件的走狗,真是令我感到十分的悲哀

启动之后,下面的浏览器标签确实多了不少,以前记得只有四个,现在是满满一排了。最醒目的变化是音量控制器上出现了一个计数器。
计数器?一个媒体播放器要它来做什么?好奇地把鼠标移过去,Real积分,原来是这个。点击之后,打开了我的Real帐户管理的页面。以前的Real帐户一般都直接去英文页面,而且也没有什么实际用处,——除了激活RealPlayer Plus。不过现在有Real积分,似乎还会有游戏大厅等绑在一起的东东了。比以前是像样不少,但是也不应该因此而牺牲RealPlayer Plus的功能啊?这不等同于擅自变更合同么?!

试了试均衡器,果然退化成普通RealPlayer的样子了。不由得对这个所谓的新版相当失望!看来应该是需要回退版本了,毕竟我是用它来播音乐而不是玩游戏或赚什么积分用的。

2006-09-11

小议CBA赛程更改

具体情况我也不是特别的清楚,也懒得去搞清楚,反正除了几个官僚,大家都反对。那么就是和足球那次世界杯预选赛出线时的搞法基本类似了。
会整垮CBA联赛,这几乎是一定的。就好像现在的所谓中超,没人去看了。95、96年的甲A联赛我可是每支队名都可以背出来,甲B都几乎可以,但是现在根本懒得去理睬到底中超是个什么东西了。前些日子,突然听说什么厦门有了个什么足球队,老板还准备在那上面搞些名堂。我脸上的苦笑都快变成冷笑了……
据闻,不是篮协的人想这样做。他们好歹还是靠这个吃饭的。这也是他们的脸面,人们一提到CBA,首先想到的自然是他们。联赛垮了,他们也是受害者。
要这样胡来的,据说是真正的国家干部,是体育总局那帮狗官。为了在奥运会上赌出自己的仕途,于是就这样开始了祸国殃民。怎么感觉搞得跟100年前老佛爷手下那帮贪官污吏似的?!难道历史就是以这样的方式来轮回的吗?
我想,日后若某某官员成为政坛上的一个红人,普通老百姓也很难去把他的老底给翻出来。很大的可能他就是某某事件的祸首、罪人,或者起码是帮凶。一将功成万骨枯,正常,然而,不能总是这样!
但,谁又能让大家知道这些呢?我们的媒体可以做到吗?报道几起矿难,仅仅只触动一下这些狗官们养的几条看门狗,就已经困难重重了。我要对记者们致敬,然而,我无法对他们抱有多大的希望。

记得Growing Pains里面Jason对Magie说:“如果我们实在没办法教育好Mike,那也就只好让他去搞政治了。”也许,当我们把“当官”视为一种下九流的职业的时候,一切可能会有一个变化。

2006-08-28

C随机函数的正确用法

  看到有同事在用rand()%100+1这样的方法试图获取一个1~100的随机数。虽然rand()出来的确实是一个整数,而且确实会大于100,但是要缩到1~100的区间可不是这样的。在C中正确的取随机数做法如下:

  首先,包含以下的头文件:

#include <time.h>
#include <stdlib.h>

  然后就可以声明并使用以下的随机数发生函数了,好好享受吧:

// 初始化随机数序列
void randomize(void)
{
srand((unsigned)time(NULL));
return;
}
// 获得一个0<=x<1之间的随机数(双精度)
double randf(void)
{
return (double)(rand()/(double)RAND_MAX);
}
// 获得一个0<=x<number之间的随机数(整数)
int random(int number)
{
return (int)(number/(float)RAND_MAX * rand());
}

  random之前别忘了先用randomize进行初始化,否则每次出来的随机序列可是一样的。呵呵,用时间值进行初始化也不一定保险,特别是用在博彩系统中,曾有人根据系统启动时间推算出随机数种子的例子。有必要的话,建议各位加上别的因素(比如对鼠标进行采样等)进行随机数种子的初始化工作。

2006-08-24

Linux上FTP客户端实现自动登录

这是在制作服务器虚拟主机自动备份脚本的时候遇到的一个小插曲。

原本想使用输入重定向简单实现FTP客户端自动登录的,因此制作了一个文本文件进行实验:

a.txt

open www.某某.com
aaa
bbb
ls
exit

其中,aaa和bbb分别是FTP的用户名和密码。没想到在ftp < a.txt的时候,仍然让我输密码。看来输入密码的地方无法使用输入重定向来实现,得考虑另外的办法了。

翻阅ftp命令的在线帮助,发现它有auto-login功能。办法是在本用户(本例中是root)的用户根目录(如本例中root用户就是/root)下建立一个名为.netrc的文件,注意这个.可不能省。然后,在它里面存放一张FTP帐户列表,简单格式如:

machine www.某某.com login aaa password bbb
……(可以多行)

然后再直接ftp www.某某.com,就会发现ftp客户端直接以.netrc中设定的aaa用户名和bbb密码进行登录了。当然,系统在使用这张自动登录列表的时候,会根据FTP站点的名称进行核对的。如果没有发现指定的站点名,那么也不会应用这个自动登录功能的。

服务器虚拟主机自动备份功能

自己写了个脚本,来实现对我服务器上PHP+MySQL虚拟主机的自动备份。虽然目前只有我一个人在使用,但是即使这样,我也不希望数据因为意外事故损坏掉。

备份的原理,就是把Apache和MySQL先停掉,然后用tar打包HTML目录和MySQL的数据库目录,恢复MySQL和Apache服务之后,再慢慢通过FTP客户端传到我的一台远程FTP服务器上(其实是我在网上买的一个虚拟主机空间)。

备份周期完全由自己决定,我目前把它丢在/etc/cron.weekly下面让它每周运行一次。备份的文件会以备份日期自动命名。以后等我有了比较大的FTP空间之后,我就设置为按日备份。再在自己工作站上做一个按周归档,那就万无一失了。

脚本文件如下(隐去部分敏感信息):

#!/bin/sh
HOME=/root
# Stop the services
/etc/init.d/httpd stop
/etc/init.d/mysqld stop
# Tar the html bag
cd /var/www
tar -czf /tmp/html.tar.gz html
# Tar the mysql/data bag
cd /usr/local/mysql
tar -czf /tmp/mysql_data.tar.gz data
# Start the services
/etc/init.d/mysqld start
/etc/init.d/httpd start
# Build the ftp script
DATESTRING=$(date +%Y%m%d)
echo "open www.某某.com" > /tmp/ftp_$DATESTRING.txt
echo "put /tmp/html.tar.gz /wwwroot/vhostdatabackup/html_$DATESTRING.tar.gz" >> /tmp/ftp_$DATESTRING.txt
echo "put /tmp/mysql_data.tar.gz /wwwroot/vhostdatabackup/mysql_data_$DATESTRING.tar.gz" >> /tmp/ftp_$DATESTRING.txt
echo "exit" >> /tmp/ftp_$DATESTRING.txt
# Connect the backup FTP site and upload these files
ftp < /tmp/ftp_$DATESTRING.txt
# Clean temp files
rm -f /tmp/ftp_$DATESTRING.txt
rm -f /tmp/html.tar.gz
rm -f /tmp/mysql_data.tar.gz

增补于2006-09-10
如果想在cron中运行,在脚本中FTP登录之前还要加上HOME=/root,否则无法实现自动登录。原因……是crond运行脚本时的环境变量太过“干净”了。

2006-08-16

《铁甲威龙》观后感

  很久以前就看过这片子了,改编的FC游戏也通关了很久了,还曾经制作成了录像。但是这些天突然又老夫聊发少年狂,一口气下了铁甲威龙系列的所有片子。慢慢观赏,又重新找回了那种曾经有过的感觉。

  墨菲是一名青年警官,而且确实是金发碧眼——不过和某些文字的描述有所差别的是,他有老婆有孩子,男孩还不小了,所以虽然样子看起来还算年轻,但应该算是35左右的准中年了吧。他长得也算不上英俊,不过变成RoboCop,戴上头盔只露出下半张脸之后,却不知怎么的变得非常帅。我这才知道演员为什么会选他而不选别的小生。
  墨菲耍枪的动作很酷,比某些国产片强多了。曾经看过一部国产片,警察拿手枪射驾车逃窜的匪徒,打了几枪居然是把手一松让枪往后转。还曾有一个穿警服的MM,转枪用了三个指头,花了三秒钟,丢脸哦!RoboCop耍枪也很酷,而且枪的托架从大腿中伸出,动作真是酷毙了!当年我也想在大腿上安一个枪架来着。
  墨菲变成RoboCop之后,有一段时间致力于维护公共安全。记得印象最深的,就是那透过裙子的跨下一枪。很解气啊,解除了那男人犯罪的根源。我看已经不需要把他抓走了。
  很快地,他的记忆复苏了。毕竟他的大脑、小脑等神经中枢都还在。他回忆起了自己被杀的情景。按理来说,作为RoboCop是不应该公报私仇的。但是,妻离子散,家破人亡,这使得他自行出动解决仇人。不过他最大的失误就是没有一枪把那个匪徒头子给打死,否则他的搭档后来就不会受伤了。
  OCP的自保措施——RoboCop不能对OCP高级雇员下手,使得后台Boss逃过一劫。我疑心安置这种自保的Rule应该是OCP的习惯之一,因为负责RoboCop这个项目的人可是该后台Boss的死对头,他没理由让这个家伙知道这些的。可惜那可怜的ED209不是设计用来城市作战的,于是在楼梯间扭了脚。
接下来避难废弃工厂内。路易丝帮墨菲校正瞄准系统的那一幕真的很温馨,同时RoboCop也终于取下了面罩露出了他的真正面目。我现在还是想不通那画面效果是怎么拍出来的?头盔的话,似乎难度高了点。
  那桶有毒废料不知道是什么东西,把一个匪徒变成了怪物。然后他又被车子撞成肉酱,真是可怜,看来连骨头都酥掉了。总之,可怜的匪徒,就算有火箭枪,也只是给墨菲送装备去而已。
  接下来就轮到Boss了。那个场景在电影和游戏中同样经典。老板的一句“You are fired!”,接着就是那RoboCop专用枪的强大火力在身上打出的四个洞,然后就是摔窗而出。OCP的人似乎蛮喜欢从楼上飞下去的感觉……

  本集中RoboCop不是受损最重的,但是在外表上是被打得最惨的。胸甲全烂了,一度用手护着脸暴露在N支轻火力之下。我在想,当时的警察如果装备的不是9mm的MP5,而是用的.50重机枪,说不定连机体都给打成筛子了。

2006-07-20

银行感言(一)

Chapter One

  越来越多的银行用上了排队叫号系统。这应该是一种进步。在它面前,国人那乱插队的劣根性会稍稍地收敛一点。
  然而,也常常有人不知道如何用它,因此,一名称职的保安或大堂经理是必须的。否则如果取号机和业务柜台离得比较远,那柜员就得费上一番口舌了。
  我在想,在取号机的号码单上印上广告,应该是比较有效果的。百无聊赖地等待叫号的顾客,在坐在座位上呆呆地无事可做的时候,翻看手中那张小纸条是很正常的事情。进而地,在顾客位置的对面贴上广告,应该也是不错的选择。
  退一步讲,在号码单上印上公益广告、名言警句,甚至一则小笑话,应该都会对客户关系起到很不错的效果。可惜,似乎没有人这样去想啊。
  我想到了,可是我无意去落实。还是交给有心有力的人去完成吧。

Chapter Two

  写叁,却不小心写成了参,被退回,好生脸红。
  写圆,却被告知不必大写,元即可,别园就好。

Chapter Three

  去中国银行打印存折,发现有两笔0.30的很奇怪的支出。想了半天,突然想起那杀千刀的“跨行查询手续费”。
  细细想来,果然是它。我还以为是四大银行的ATM上查别人的卡会被收,没想到它们的卡拿到别人的机器上也会被收。是被抵制了吧?
  我也要开始抵制了。仗着自己垄断胡作非为,多行不义必自毙。决定了以后不到万不得已不去办四大银行的卡了。

2006-07-19

RedHat Linux 7.3下编译libxml2 2.6.24遇到的问题和解决方法

  单位的测试服务器是很早以前装的RedHat Linux 7.3。说是“测试服务器”,但由于种种原因,在上面已经跑了很多应用,再也离不开了,所以也没有办法把操作系统更新成比较新的版本。
  大概是昨天或今天早上的某个时候,这台机器被人重启了(或者是自己重启了),然后就死在了启动过程中。下午有人找我报告,才发现这个情况。再次重启之后,机器是没有问题了,但是又再一次体验了那满屏幕的问号。——老毛病了,每次自动启动的时候Apache+PHP的应用访问Oracle得到的多字节字符编码总是不对,重启一次Apache就好了。一直不知道是什么原因。
  心念一动,正好趁这个机会把这台服务器上的Apache+PHP+MySQL,以及周边的那些,如OpenSSL、libpng、libiconv等等,给重新整理一遍,应用上最新(或者说可用的最新)版本。
  OpenSSL、libiconv+gettext、libjpeg、libpng……,都很顺利。原本以为这些版本很新的东西会在不完全符合ANSI C++规范的2.96版GCC编译器上出问题,没想到居然一路绿灯。不过,好景不长,在libxml2-2.6.24上卡住了。
  错误信息包含下面几句:
……
xmlIO.c: In function `xmlCheckFilename':
xmlIO.c:619: syntax error before `struct'
xmlIO.c:621: `stat_buffer' undeclared (first use in this function)
……
  这种语法错误,不像是编译器版本的问题。我先试着跳过这一步,继续下面的安装。不过在编译PHP 5.1.4的时候,configure报告说需要libxml2的2.6.11以上版本,而我这台机器上以前的libxml2的版本只是2.6.7。显然,这个问题是无法回避了。
  拿错误信息去查,只有FreeBSD的技术支持站点上有一条bug报告的记录。不过可喜的是,报告中也附上了修正方法。经测试,该方法对于我的RedHat Linux 7.3也同样有效。
  以下转自该文:
Fix:
*** xmlIO.c.DIST Sat Apr 29 09:44:16 2006
--- xmlIO.c Sat Apr 29 09:44:35 2006
***************
*** 616,621 ****
--- 616,622 ----
}
#else
#ifdef HAVE_STAT
+ {
struct stat stat_buffer;
if (stat(path, &stat_buffer) == -1)
***************
*** 625,630 ****
--- 626,632 ----
if (S_ISDIR(stat_buffer.st_mode))
return 2;
#endif /* S_ISDIR */
+ }
#endif /* HAVE_STAT */
#endif /* WIN32 */
  想要修复这个错误的朋友,若看不懂上面的意思,就注意那两行标了加号的地方。原来的xmlIO.c,是没有这两行的,找到它们的位置后把它们补上,就可以通过编译了。行号人家也标出来了,在原xmlIO.c文件的616~621行附近。
  若看到这里还不明白,那就只好委屈了……

2006-07-14

单字符链接在某些手机上的问题

关于WAP浏览器的由来已久的一个问题,出现在Nokia6260上。
我做了一个WAP网站,其中有些页面是类似这个样子:

标题1
标题2
标题3

1 2 3
返回上一页
返回首页

在公司的那台破"测试机"N6260的WAP浏览器上,这下面的1、2、3这些翻页的链接,常常无法把输入焦点移到它们上面。屏幕在卷动,焦点就是不动。在我的QD上却不会这个样子。

测试了多种情况,最后发现是因为这些链接的字数太少的缘故。只有一个字符的时候,就有时候会出现这个怪毛病,特别是当这些单字符链接出现在接近滚屏的位置上时。我把链接的<a></a>标签中的内容加了一个&#x20;,即一个空格,就不会有上述问题发生了。

写在这里,作为一个疑难杂症的处理笔记。

2006-07-05

关于表格内文字换行的再研究

通常,搞Web开发的都会遇到这个问题,就是苦心设计的表格被讨厌的一连串英文字符给撑破了。最常见的是自己开发的论坛或留言板,如果有一个情绪激动的家伙打了百来个英文的感叹号,那往往就会出现内容在这些感叹号上不换行,结果让表格撑破,页面变得乱七八糟。

解决这个问题的办法,相信很多朋友都知道了。通过CSS中指定几个样式,可以比较满意地解决这个问题。一个是word-break:break-all,一个是word-wrap:break-word,表格中的文字则还有一个是table标签的table-layout:fixed样式。这三个样式给定之后,就不会再遇到表格被文字顶破的问题了。

稍稍解释一下上面三个样式。word-break:break-all是让英文单词中部的换行成为可能,比如
beau
tiful
word-break样式还有另外两个取值。一个是normal,就是通常默认的,对中文断字而对英文单词不断的情况。另一个是keep-all,是对中文,准确地说是亚洲文字也不断字。然而,和字面上的理解意思不同,keep-all并不能让一个英文句子不被换行。要做到这一点的方法,稍后我会谈到。

word-wrap:break-word是让连续的符号(如!号)之间进行断字成为可能。这是解决那种一大串感叹号造成的问题的一个关键。没有这个样式的话,对连续符号的断字不会发生。

另一个关键是table-layout:fixed。它指明说表格不要去试图自己计算宽度,就按照HTML中定义的宽度来显示就好。只有当table-layout:fixed和word-wrap:break-word同时指定时,针对连续符号的断字才会正确发生。缺少table-layout:fixed,断字不会发生,表格仍被撑大。缺少word-wrap:break-word,则表格不会被撑大,但断字不会发生,超过显示区域的内容将被hide。


好了,知道了如何让所有内容都断字换行之后,另一个问题来了:如何让所有内容都不断字换行?

我们知道,即使指定word-break:keep-all样式,也无法阻止一个英文句子在空格处不被换行。而且汉字中的某些标点符号,浏览器也会很“智能”地把它给换行掉(起码IE会,这就足够了)。然而,一个好消息是,虽然要求不断字的情况远比要求断字要少见,但它的实现方法却相当简单。你只要把内容用<nobr></nobr>标签对括起来就行。被<nobr></nobr>标签对括起来的内容,浏览器绝对不会对它进行换行。只要记住这一点就很好办了。

不过,想让内容不换行的同时,通常并不希望表格宽度因此而变得不确定。因此,常常也需要指定一个table-layout:fixed的样式。这样,就可以让表格宽度维持设计时的大小不变,或者通过指定相对宽度来维持一个固定的比率,而并不受单元格中内容的任何影响。在设计自适应屏幕宽度的标题列表表格时,这个技术也许会有些用处。

2006-06-30

关于fstream.open()中使用in|out|app模式打开文件总是失败的问题


  其实是以前找到的一个问题了,不过今天提到了编译器的版本,突然想起了它。在国内的网站上似乎很难搜索到关于这个问题的报告,因此写出来供分享。

  事情的起因是服务器版本的升级。以前我们的程序都是在一台RH 7.3的内部服务器上编译的。编译之后的程序拿到正式服务器(RHEL AS 3.0)上使用非常正常,因此一直以来都是采取的这样的方式。
  后来新增了一台服务器,是x86_64的CPU,我们就打算安装最新的RHEL AS 4.0 Update 3 for x86_64版本,以获取最新的技术带来的优势。虽然最终因为短期内Oracle中的数据和设计无法升级到预计的10g Release 2 for x86_64版本,而导致升级计划暂时搁置,但在升级过程中,就发现以前的代码出现了许多问题。
  当然,2.96的编译器和3.4.x的编译器之间,肯定是有着不小的差别,因此代码会有问题这早就在我们的预料之中。大部分的错误都是容易发现和容易排除的(另文介绍),但其中有一个棘手的问题,就是本文要说到的,fstream.open()的打开模式问题。

  在以前的代码中,我们一直使用in|out|app的模式来进行日志文件的打开。采用这种模式,如果文件不存在,那么系统会创建它,如果文件存在,那么打开它并从最后面开始写信息,同时也可以从中读信息。可以说,针对那种以当前日期命名的日志文件,这种打开模式组合是再合适不过了。
  然而,编译器升级之后,我们发现这样的打开模式再也打不开任何的文件了。文件既不会被创建,也不会被打开,即使是这个文件已经存在也不行。去掉app或去掉in,都可以正常打开文件,但是这样就牺牲了追加或是读取文件的能力。相比而言,out|app的打开模式对于我们的日志类来说应该是可以接受的,但是为了了解这个问题的根源,我们还是花了不少力气。

  还是google好用。当我们发现这个问题确实是编译器的升级带来的,与操作系统内核、文件系统读写权限、路径/文件名等因素无关之后。我们很快就在google上搜索到了这篇文章:
  http://gcc.gnu.org/ml/gcc-bugs/2002-04/msg01055.html
  这位老兄发现了和我们类似的问题,并上报给了gcc那边。当然,他的工作比我们要做得细致得多。他仔细测试了多种打开模式的组合,并在多种平台、多种编译器版本上做了测试,并得到了结果。没有耐性点开帖子看或无法访问国外站点的用户可以看看下面这个测试结果:

GCC 2.95.2 i686-pc-linux-gnu
open("ios::in", O_RDONLY|0x8000)
open("ios::out", O_WRONLY|O_CREAT|O_TRUNC|0x8000, 0664)
open("ios::in|ios::out", O_RDWR|O_CREAT|0x8000, 0664)
open("ios::in|ios::ate", O_RDONLY|O_CREAT|0x8000, 0664)
open("ios::out|ios::app", O_WRONLY|O_APPEND|O_CREAT|0x8000, 0664)
open("ios::out|ios::ate", O_WRONLY|O_CREAT|0x8000, 0664)
open("ios::out|ios::trunc", O_WRONLY|O_CREAT|O_TRUNC|0x8000, 0664)
open("ios::in|ios::out|ios::app", O_RDWR|O_APPEND|O_CREAT|0x8000, 0664)
open("ios::in|ios::out|ios::ate", O_RDWR|O_CREAT|0x8000, 0664)
open("ios::in|ios::out|ios::trunc", O_RDWR|O_CREAT|O_TRUNC|0x8000, 0664)
GCC 2.95.2 sparc-sun-solaris2.8
open("ios::in", O_RDONLY)
open("ios::out", O_WRONLY|O_CREAT|O_TRUNC, 0664)
open("ios::in|ios::out", O_RDWR|O_CREAT, 0664)
open("ios::in|ios::ate", O_RDONLY|O_CREAT, 0664)
open("ios::out|ios::app", O_WRONLY|O_APPEND|O_CREAT, 0664)
open("ios::out|ios::ate", O_WRONLY|O_CREAT, 0664)
open("ios::out|ios::trunc", O_WRONLY|O_CREAT|O_TRUNC, 0664)
open("ios::in|ios::out|ios::app", O_RDWR|O_APPEND|O_CREAT, 0664)
open("ios::in|ios::out|ios::ate", O_RDWR|O_CREAT, 0664)
open("ios::in|ios::out|ios::trunc", O_RDWR|O_CREAT|O_TRUNC, 0664)

GCC 3.0.4 i686-pc-linux-gnu or sparc-sun-solaris2.8
open("ios::in", O_RDONLY)
open("ios::out", O_WRONLY|O_CREAT|O_TRUNC, 0666)
open("ios::in|ios::out", O_RDWR)
open("ios::in|ios::ate", O_RDONLY)
open("ios::out|ios::app", O_WRONLY|O_APPEND|O_CREAT, 0666)
open("ios::out|ios::ate", O_WRONLY|O_CREAT|O_TRUNC, 0666)
open("ios::out|ios::trunc", O_WRONLY|O_CREAT|O_TRUNC, 0666)
open("ios::in|ios::out|ios::ate", O_RDWR)
open("ios::in|ios::out|ios::trunc", O_RDWR|O_CREAT|O_TRUNC, 0666)

Sun CC 5.0 sparc-sun-solaris2.8
open("ios::in", O_RDONLY)
open("ios::out", O_WRONLY|O_CREAT|O_TRUNC, 0666)
open("ios::in|ios::out", O_RDWR)
open("ios::in|ios::ate", O_RDONLY)
open("ios::out|ios::app", O_WRONLY|O_APPEND|O_CREAT, 0666)
open("ios::out|ios::ate", O_WRONLY|O_CREAT|O_TRUNC, 0666)
open("ios::out|ios::trunc", O_WRONLY|O_CREAT|O_TRUNC, 0666)
open("ios::in|ios::out|ios::app", O_RDWR|O_APPEND|O_CREAT, 0666)
open("ios::in|ios::out|ios::ate", O_RDWR)
open("ios::in|ios::out|ios::trunc", O_RDWR|O_CREAT|O_TRUNC, 0666)

  他得到了几乎所有有用的fstream.open()打开模式组合所对应的实际操作。可以看到,编译器版本的影响确实很大。
  可以注意到,gcc 3.0.4与2.95.2的测试结果相差不小。而且,最重要的是,有效的测试结果中,没有in|out|app这种组合。作者在最后发问,这种打开模式组合没有出现,是bug还是别的原因?可想而知,所谓“没有出现”,就是指这种打开模式组合总是会失败,相当于无法使用。就和我们遇到的情况一样。

  再次的搜索,发现一年之后gcc那边出现了这样的帖子:
  http://gcc.gnu.org/ml/gcc-prs/2003-04/msg00771.html
  这是gcc开发组的人(应该是吧)发的,具体地说,是paolo@gcc.gnu.org。帖子大概是针对一个bug报告的回应,内容就是说in|out|app这种打开模式组合根据ISO标准是非法的,无效的,因此这个bug报告可以close了。ISO标准,应该就是gcc 3.x所遵循的C++标准了。

  至此,真相水落石出。我们也就安心改用out|app模式来写日志了。

不同版本G++编译器的差异真是让人吃惊

  做了一个程序,测试用的,在一台RHEL AS 4.0的机器上做编译。编译完之后瞄了一眼文件大小,1837684。吓了一跳,因为我记得以前类似程序都在2M以上的,怎么这次小了这么多?难道我漏了几个模块?
  去正式服务器上找程序一对,果然,大小差了不少。正式服务器上的程序是在一台RH 7.3的机器上编译的。为了验证到底是源代码有不同还是编译器的差别,我把刚才编译的代码上传了一份到RH 7.3的机器上,用同一个Makefile编译,编译完的大小是2617012。
  对比了一下两边编译器的版本,RH 7.3这一台是2.96,RHEL AS 4.0那台是3.4.3。版本差别的确比较大,但编译的结果差别也真的不小。除开链接的库,单单看这个程序的.o文件,大小竟然差了一倍多。以前没有在这方面比较过,确实有点惊人。

  我又去找来了upx,2.00 for linux i386版本。用默认选项压缩的结果,更令我吃了一惊。RHEL AS 4.0这台上,压缩之后的大小是535802,而RH 7.3那台上的较大的那个执行程序,压缩之后只有384610,反而拥有较大的压缩比和较小的压缩后尺寸。
  不好解释了,也许是2.96的编译器生成的代码中,垃圾比较多,而有用的部分反而比较少吧。和内核的系统调用也许也有关系吧?两台机器的内核差别也挺大的,一个是2.4一个是2.6。

  记录下这个情况,以供参考。

2006-05-30

《间接伤害》观后感

又看了一部,这是以前没有看过的。讲消防员为报妻儿之仇,深入哥伦比亚找恐怖分子算帐的故事。

还算是阿诺的风格,虽然不是杀人无数,但也是强悍依旧。在被恐怖分子拿住关起来的时候,一个人戴着手铐力敌三个持械悍匪,看得我也是捏拳叫好。

不爽的地方,在于整部片子没有什么女主角——又是典型的阿诺风格。算得上女主角的人,最后居然摇身一变成了反派,而且还死了——我最讨厌这样了。你个烂导演,就是让她好好活着,不需要搞那些接吻床戏爱情男女之类的也可以。我最讨厌杀女人了。

学到一招,油可以让粘胶带或橡皮筋慢慢出问题,所以可以用来制作简易的延时装置,呵呵……

2006-05-29

《魔鬼总动员》观后杂感


  很老的片子了,但是在阿诺的片子里面算新的。中学时曾看过一次,最近在看阿诺全集,因此也连带一起再看了一遍。这部片子(连带小说)是以现实世界和虚拟世界变来变去,让人摸不着头脑而著称。上次看的时候,年代太早,加之当时很可能理解能力还不够,因此心中有不少疑惑,这次也一并准备寻求答案。

  阿诺还是一如既往的猛,万人敌,杀不死,何况这次连大伤都没有受。不过场景明显不够气魄,一看就知道只有一点点地盘,很可能就在摄影棚内搭的。总之,那个什么维纳斯城,还有那个什么酒店,要说是一个小镇上的建筑还凑合,要说是一个行星上的著名地点,打死我也不信。

  最大的疑问,莫过于“到底哪个是梦”。这次看完之后,我分析了一下,还是觉得主情节是一个梦境。理由如下:
  1、女主角确实是阿诺在睡倒之前选的那个头像。要说梦中梦到的是她,我信。但要说瑞可的电脑里面刚好也存的她,我可不信。
  2、剧情确实和瑞可安排的情节是一致的,包括两周的行程,去维纳斯城,住酒店。
  3、阿诺在选旅行的附加情节的时候,是偶然选中“情报员”这个角色的。虽然可以解释说是偶然中的必然,性格使然,但是也未免巧合太多了一点。
  4、阿诺从瑞可回来之后,马上就有四个人要杀他。但杀他的理由只是他去过了瑞可,参与了火星之旅。若要此时杀他,干吗不一开始就杀掉?出现这样的突然变化,合理的解释只能是他此时已经在梦境中了。
  5、按照后来在火星的交代,是阿诺以前的自己安排他经历这场冒险的,目的是为了找到反抗军首领。但一路上下的杀着,似乎不是只是为了逼真而已。
  6、出租车司机的转变也过于戏剧化。要知道,阿诺选中他是很偶然的,当时还有不止一个出租车司机在。而这个出租车司机偏偏是个内鬼。
  7、最重要的一点:如果安排他火星历险,是为了找到反抗军首领,那根本就不应该出现那个自称瑞可的人和他老婆到火星试图带走他的情节。带走了就不会达到他们一开始的目的了吧?若是真想让他回去,那根本就不应该让一开始那四个人去杀他。若按照原来的生活,他不会得到那个箱子的,因此也就不会去火星。要把他洗脑,和要安排他去火星,这两个行为本来就是矛盾的,出现在此处,只能解释为这些情节是故意强制安排的。
  还有不少有疑点的地方。主线索出现如此多的疑点,由此可见,只有梦境可以解释这一切。瑞可的那个梦境是用来冒险的,因此适当安排一下就很正常了。若是换作真实情节,怎么说也过于巧合和不可思议了。

  最后,来评论一下女演员。我还是比较喜欢莎朗·斯通,相比之下,女主角就不够出彩了。我可是真没看出来哪里“既放荡又端庄”,难道一个耳光接一个热吻就算是?

2006-05-15

关于职场性骚扰

这次想说的,是一个老头的故事。

这老头,是我们公司的一个客户。因为工作关系,我和他有时候来往也甚密。为什么说“有时候”呢?因为他在福州,每半年时不时来厦门一趟。每次他下来的时候,就是我忙的时候。
他有一个多年的助手,小T。女孩子,眼镜,模样一般,年龄不算小了,但喜欢表现得像小女生一样。以至于公司里有人称之为「爱装小的老女人」。我是不太喜欢这种说法的。虽然她年纪不算小,但也应该还不到30岁。虽然嗲声嗲气的,但也还不算做作。这样称呼别人,狠了点。
对了,还没有描述老头:快退休的年纪,一副呆子模样,特别是那高度近视的眼镜,一圈一圈地,真的就像漫画上的那种啤酒瓶底眼镜,不知道有几千度了。平时给人的感觉,是话多,啰嗦,认死理儿,倒是比较细心的人。

去年夏天,他又带助手小T来厦门找我们公干。他每次来都搞得很急,很忙,不能拖的样子,于是我就只有晚上陪他们加班了。很晚了,公司里面别的同事都走了,要锁门了。我把值班同事的钥匙要了过来。这下,公司就只剩我们三个了。
我坐在比较靠后的位置,老头和小T呆在前面的隔间。公司的隔间,都是用比坐着时眼睛稍高一点的高度的隔板隔开的。不过上半部分是几乎透明的,因此我还是能够一眼望到前面甚至更前面的座位上发生的事。

接下来我就吃惊了一次。
老头叫小T过来看电脑上的一个东西。他坐着,小T站在他旁边。大概是嫌小T站得不够近,他那手就伸出来了,一把搂住小T的大腿。我擦——这不就是传说中的「咸猪手」吗?居然会发生在这个呆子老头身上,这可与他之前给我们的印象差得太远了。我正在怀疑,丫是不是太过专注于工作而不小心把手放到了这个位置的时候,我清楚地看见,小T躲了一下。似乎是在避开他的手,就和电视上演的一模一样。然而他又一把揽住,而且力度十足,仿佛在说:「你躲什么躲!」,动作的「语气」,似乎不容置疑。我终于确信自己没有看错了!

几秒钟之后,我看见他把手拿开了。不知道是不是他突然想起,后面的我可能会看到?我还真是凑巧看到这一幕。不过也许他平时就揩了小T不少油,只是因为我和他们的关系并不是很密切,所以无从得知而已。但是,无论如何,他的这一把,就将他在我心里的形象击了个粉碎,然后重新组合起来,分明是一个色老头的模样。

后来,小T慢慢出现得少了。我倒是一直经常听到老头教训小T,而且是当着我们的面教训,说什么你要转成正式编制,就得好好干。言外之意,不言自明。我很惊讶小T居然还不是什么正式编制,她都可以进她们单位的机房去折腾了。当然,对于什么公务员、聘任制、事业单位编制,这些莫名其妙的名词,我那个时候还不知道到底是怎么回事情。但是,有一点是可以肯定的,小T有求于老头,所以才对他默默顺从。「咸猪手」事件之后,我觉得那不是顺从,而是忍辱负重了。然而,既然看起来是各取所需,我也就不好说些什么。

再后来,老头又带来了一些别的助手。数目慢慢多了起来,姿色也更好了。我实在是无兴趣揣度那背后的故事。我相信,老头应该就只限于占占便宜而已,闹大了他也玩不起。这种事情,在他们那种政府机关,应该多如牛毛才对。也许,只是我这个技术宅大惊小怪罢了。那可是潜规则盛行的地方,藏污纳垢,正常得很,实在是没必要激愤。我也很理解:他们那种监察部门,不可能去找小姐,也不可能去包二奶。因此,来点轻微的职场性骚扰,相比起某些政府官员,已经是很克制了。

只是,如鲠在喉,不吐不快。

2006-05-10

陆纯初事件感想

事件本身不想再贴了。可以去翻翻网上的新闻。在这里,只想发表一下自己的意见而已。

就事而言,我支持女秘书的做法。解气不解气是一方面,那个新加坡白痴既然把事情做到这一步,明摆着就是要逼她走嘛,走也要拉个垫背的。至于她现在找不到工作的情况,我赞同一位网友的说法——她暂时可能会找不到工作,但一旦找到,一定是一位优秀的老板。

很多职场内的人,评价说她做事情太冲动,太不留余地。那个新加坡白痴就不冲动吗?他不仅冲动,而且愚蠢!自己忘带钥匙,居然捅出这么大一件事情。劣马,不可用也!秘书小姐只是性子烈。好马哪有性子不烈的?是你自己驾驭不了而已。

有的人说,身为秘书,就是应该随叫随到,就是应该忍辱负重。说这种话的,都是中国人吧?也难怪,当了上千年的奴才了,当然脱不了奴性。人就是生来平等的,谁给予你压迫别人的权力的?别人顺从你,无非是看在工作和薪水的份上。那现在既然你要把别人逼走,要断了别人的财路乃至生路,别人不反击还算是人吗?我为国人能有这样的人才而自豪。

还有人说,她可以把事情处理得更好一点,更圆滑一点,不要把事情闹大,自己也有条好的退路。我还是那句话:人,要为自己而活着!薪水算什么?工作算什么?如果本身个性能够处事圆滑,成熟稳重,当然好。如果个性刚烈,为了保全工作,乃至名声,却要强迫自己去委曲求全。我不认可这种做法。

每个人,都有自己独特的性格。身为管理者,用人者,就应该人尽其用,扬其长而避其短。我记得有个故事,说有个兵,很胆小,一上战场就逃跑。别人都不要他,可一个团长偏偏指名点姓要他。要来做什么呢?用他来当侦察兵。团长说,这种胆小的人,一遇到敌人,第一个想到的就是跑回来通风报信。如果用胆大勇猛的人,可能就和敌人硬干,从而耽误了军机了。由此可见,没有绝对的长处和短处,关键在于你会不会用人!

这世界上,并不是每个管理者都是合格的。那些说秘书这样不对那样不对的人,好好检讨一下自己吧!

2006-04-07

遭遇小偷事件

真是「万幸」,总算让我遇见了一次小偷。

下班之后,有气无力地走到了文灶,实在是不行了,直接进麦当劳补充能量。脑力劳动真是消耗体力!今天也就是比平时忙点,就饿成这样。
抓了一份Big Mac的中号套餐,我找了一个单排的位置坐了下来。几口吃掉了巨无霸,然后稍稍休息一下,开始啃薯条。前面的那张桌子上,一个身高还不错,但气质和长相都在中等以下的男人也坐了下来,没吃东西,大概要等人吧。
啃着啃着,他的女朋友来了。个子也蛮高的,好像比我都要稍高。于是,男人去排队买吃的,女的等。不过,他们似乎对吃什么还有疑问,于是经常离开座位去看菜单。男人似乎对座位上的东西还稍有点在意,几次回头看,女人几乎不管。最后,男人定下心排队,女人大概是太饿了,站起身来朝着收银台那边,翘首以盼。

我自顾自地啃着薯条。一个穿浅色衣服的男人从我们的桌子边走过,看起来是要去收银台或是从那边的店门离开,或者也有可能是去上洗手间。然而,在经过他们的桌子时,那个男人迟疑了一下,抬起头往四周扫了一下,就向他们的桌子靠了过去。我还以为这个男人是他们的熟人,靠过去是想打个招呼。没想到他直接走向那个女人背后,拿自己的衣服稍做遮挡,手就冲着放在桌子上的手机去了。
那个时候,我的脑子里面已经有一部分清醒地意识到了:这个家伙是个小偷。但我不敢相信的是,他居然敢当着我的面这么干。我的眼睛一直在跟着他的行动。我离他很近,不到两米的距离。我也一直抬着头,而不是低头盯着手机看。我不知道他为什么居然敢这么大胆?
得手以后,小偷立刻若无其事地离开了。出手在我看来不算干净,因为被我看得一清二楚,但是相对于其他木偶来说,已经时间短得可以忽略不计了。我在心里考虑了一下应该怎么办。不管它?因为它不关我事?念头甫一闪过,又立刻被否定了。这家伙在我面前这样做,显然完全不把我放在眼里!我不理睬?那我岂不是成了他的同伙?狗屎!我立刻弹了起来。

和以前做白日梦时的想法不同,我这次是迅速拍着那位小姐,指着那件特别显眼的浅色衣服,告诉她那个家伙拿了她的手机。她花了两秒钟的时间弄明白情况,然后就追了上去。先提醒事主是必须的,如果自己先冒冒失失地跑上去抓小偷,搞不好倒被栽赃当作小偷打。
然后,我在考虑要不要跟上去。小偷并不知道我这么快就提醒了事主,还在以比普通人稍快的步速走着,而没有跑。一跑起来,就完全暴露了,他大概有这个考虑。那么,现在马上追,都不用冲刺就可以追上。但是,我的笔记本包还在这里呢。要背上它跑,就追不上了,要扔下它?得了,放弃这个念头吧!想都不用想的。那里面的数据,可不是钱能买得到的。
正好,有个麦当劳的工作人员从我身边走过。我马上拉住他,要他跟上去。要向他解释情况,可就和提醒事主不同了。我花了将近五秒钟的时间,才让他迷迷糊糊地向那方向走去,不过半途中,就看见那位小姐手里拿着手机回来了。那个男人完全不知道整件事情,不过看他那事后诸葛亮的口气,稍微有点反感呢。

一声谢谢是应该得的,不过我也不想要别的什么感谢了。说不定那家伙还在门外等着我呢。啃完薯条,喝光可乐,背起包包,说声拜拜。我朝着平时不常走的另一条路出发回家了。

2006-02-08

Windows2000关机慢故障一例

  欲快速查阅解决方案的朋友点击这里

  春节期间,从电脑城新买来的一台Celeron 4的电脑。拿回家先装上了Windows 2000的操作系统,然后是Office XP、Symantec AntiVirus 10(CHS)。新装的系统,一切都没有什么大问题,启动也很快。可惟独就是关机的时候(包括重启系统、注销)速度相当慢。每次都要在“保存系统”处停留数十秒,和以往装过的系统相比,明显是有问题。
  用超级兔子优化系统,屏蔽了注销时整理页面,也尝试过禁止系统关机时保存设置参数,但几乎没有效果。检查了开机时运行的程序,去掉了所有不必要的程序,仍然在关机时有近一分钟的延迟。最后决定查看系统日志,终于发现了问题所在。

  根据系统日志显示,在关机的时候,Userenv.dll出现了EventID为1000的错误。从错误的注释看,是在注销用户时出现了对文件无访问权限的情况。在网络上查找EventID:1000的troubleshooting,根据众人的说法,除了Windows本身的bug,最大的嫌疑就是AV(AntiVirus)软件。有不少的报告显示,安装了Symantec/Norton AntiVirus或McAfee的用户就经常遇到这个问题。据说是因为在注销用户时,要访问的文件被这些杀毒软件给锁定掉了,因此导致了Userenv.dll在60秒内一直尝试。
  另外,Office XP/2003似乎也在里面扮演了某种角色,不过这个没有得到我的验证。得到我的验证的是,当我把Symantec AntiVirus服务停掉之后(或Kill掉Rtvscan.exe进程),关机就不会出现延迟了。我另一台电脑上的Symantec AntiVirus 7.6(ENG)没有出现这个问题。而根据一个帖子所述,在停掉Symantec AntiVirus 8.x的文件实时防护之后,问题也不出现了。但在我的10版本上,这样做没有效果,必须停服务,因此我觉得这个问题也和Symantec的版本有关。

  不可能让系统在没有防毒软件的保护下运行啊!而我又不想把Symantec AntiVirus 给降级。因此只有考虑在关机时先停掉Symantec AntiVirus服务。反正那时候也不可能有文件型病毒侵袭了。为此,准备好一个批处理程序stopav.bat,内容如下:
@net stop "Symantec AntiVirus"
  然后,直接运行gpedit.msc,打开“用户配置”->“Windows设置”->“脚本 - (登录/注销)”->“注销”。添加那个批处理程序stopav.bat。在这之前,最好把该文件放到C:\WINNT\system32\GroupPolicy\User\Scripts下面。
  现在,关机之前,会先运行这个注销脚本。由于要先停一个服务,大约需要两、三秒,关机速度没有别的机器快,但起码也可以接受了。

后记
  ……
  说实话,我不相信国内没有人遇到这个问题,也不相信没有人解决过。但是我在中文网站上搜查的结果,除了寥寥可数的几个发问帖之外,没有什么有价值的信息。最有用处的信息,还是有人在google论坛上转贴的一份英文的讨论长帖。虽然在英文网站中做搜查时,第一页就可以找到这份讨论帖的原稿,但我还是想对这位仁兄致敬!
  用Userenv.dll搜查,倒是出来很多网页。对我没有什么帮助,但是它们的内容却都是几乎一模一样的,明显源自一处。真不知道什么时候国内的IT才能不那么浮躁。

  再后记
  ……
  时光飞逝,日月如梭。这件事情转眼间过去一年多了。我要承认当时的我还是不够成熟,所以写下了上面这些文字。虽然在文章中我准确地抓住了问题的本质,但是给出的解决方案并不是最优的。有时候,直来直往并不一定是最短路径,直接针对问题本身进行修改,也不一定是最好的选择。更好的解决方案如下:
  运行gpedit.msc,打开“计算机配置”->“管理模版”->“系统”->“登录”(WindowsXP系统在“用户配置文件”中)->“卸载和更新用户配置文件的最大重试次数”,把这个配置项启用,并设置为“1次”(默认是60次)。这样,当Userenv.dll卸载失败第一次以后,就不再重试,也就不需要等待60秒了。
  这个解决方案并没有解决故障的原因本身。它采取了绕过、回避的办法。然而,不解决故障的原因并没有什么明显的负面效应,反而节省了前面那个解决方案在停止服务时所需要消耗的两、三秒的时间,所以在实际效果上反而更优。
  其实,我知道这个办法已经很久了。在本文前面部分载出后不久,就有国内的朋友指出了刚才提到的这个更好的解决办法。而自己一直以来也都采用了这种更为简便高效的处理方法解决问题。但是我并不想把整篇文章全部改掉。我还是觉得,由此可以看出国内外技术人士在思维和处事方面的不同之处。无意去评论这之间的优劣,仅作记念吧。

2006-02-05

家里新买了台电脑

昨天晚上一查回厦门的飞机票。嗬,乖乖,只有7号的才有卖了,还是全价。于是多了两天时间出来,决定还是要去买电脑。虽然家里原来那台电脑似乎就这样就被修好了,这些天里再也没有出毛病。但是我还是不是很放心。万一我要是刚回厦门,这家伙又不听话了,那这次回来花的两张全价机票钱岂不是很亏?

在家里和父母商量好了,电脑钱肯定是他们出,只买能满足他们的要求的档次就行。上网、看电视、看碟、听歌、看电子书、Skype、MSN、Foxmail……,要满足这些要求倒是花不了什么钱。现在这年头买电脑,除了象平面设计、3D设计这样的工作之外,也就数玩游戏需要烧点钱了。

来到电脑城,临时决定再买一个宽带路由器。如果两台机器了,如果还按照目前的网络结构,就必须要拿一台开着做服务器,另一台才能上网。虽然这样也成,但原来那台服务器现在已经让我觉得不那么可靠了。万一它挂了,那还要拔网线,还要更改网络设置,这些我父母两个如何搞得定?一打听,原来现在低端货的行情才百来块钱了,也行,先弄个用用。

给电脑报配置的MM蛮激动的,不过我的要求大概多少有点让她失望。低档配置不容易赚到钱的,不过我还是应她的意思用了她们店里代理的显示器和主板。优派的显示器我是比较喜欢的,而且反正这次也是用CRT,我也是轻车熟路。老爸老妈要用它当电视用,LCD如何胜任得了这个工作?

主板是华擎的板子,我其实不太喜欢的。以前看到过一篇软文,就是华擎找人写的。作者水平极差,配出来的配置狗屁不通。别的不说,居然用AGP的板子上PCI-E的显卡。不知道是不是它的对头搞的鬼——我倒觉得这很可能,不过,总是给我落下了极不好的印象。好在今天看过东西之后,觉得做工和设计还行。想想人家的利润也就在这里头,如果硬抠的话,要不报高价,要不就耍花样,还是算了。

CPU最后决定用Celeron 4的。原本我是打算用Celeron D,可一看现在到处都卖64位的Celeron D。要买478pins的Celeron D吧?夹在中间感觉有点不伦不类,而且似乎Celeron 4就足以对付我的需求了。可要真买64位的片子,又觉得心有不甘——抢最新是永远不可能的,却说不定只是给别人当免费测试员。不过,无论如何,心里还是有点别扭。半年多前配的机器,就在用Celeron D,今天却比它的配置还要低,仿佛时光倒转呢。

内存肯定是512M了。我甚至动过上512M×2的念头,可惜因为节后条子涨价只好作罢。如果以后要加,可能就直接加1G或更高的容量了。我对于内存的容量对系统性能的影响,是有着深刻的认识的。因此两年前给别人配机器时就硬要求一定要512M。当时条子也还算便宜,但是大多数人都觉得没必要用512M的,能省则省嘛。现在效果出来了。那时配的256M的机器,现在跑着XP干点重活就吃力。512M的机器就Happy多了,而且它以后还可以至少再加到一个G去,再扛两年应该都没太大问题。

硬盘我一张口就要了160G。MM叫起来,“这么大干嘛?”真的会大吗?我家里现在就是40+80了。两年前配的电脑也是80G的硬盘。而现在笔记本都流行60G了,我难道还守着80G不放?我知道,现在DVDRip的文件都是个顶个的大。人人都追求画质,以前那种一张CD放满周星驰的全部电影的时代已经慢慢远去了。

电视卡便宜得出乎我的意料。不过很快又能理解了。原因同上。现在都是在追求SDTV、HDTV的时代了,那种电视卡才会稍微贵一点。现在这种三百来线清晰度的节目,谁还希罕啊?卖个一百块算不错了。

DVD-RW也变得这么便宜了,我也是没有料到。才四百块不到,不过估计是比较低端的品种。不过我是没有那种需求,在家里偶尔刻刻CD就行了。现在买DVD-RW,价格不便宜,别人还不一定能用,还只能自己收着。等哪天大家的电脑上至少都是DVD光驱了,再说吧。

最后算下来,3720。我把计算器推到MM面前,说今天我们存心要买,让她报个最终价格。她不肯,我笑着告诉她,我是老手了,这是老规矩了咋不懂呢?最后报了3680,才那么一点点,我以为会报3650呢。一天算10块钱,还蛮好玩的嘛。也罢,这么点钱,懒得和她砍七砍八。成交!