欢迎

我们自己的Blog,畅所欲言吧!

Powered By:

Syndication

统计信息

更新排行榜

最新随笔

自古成功在尝试

一直很庆幸自已是个幸运的人,成长的路上一直很顺利。

我一直觉得人生很短暂的几十年,应当过的潇洒无悔。

趁年轻做想做的事。

2009/6/30 10:55 by 胖头

无题

感觉是个易碎品,要小心轻放阿

“我已经对你没感觉了”闺蜜跟我诉苦分手时对方是这么告诉她的

更令人难以接受的是“其实,我早就对你没感觉了”

我也想告诉你,我好像貌似仿佛有点已经对你没感觉了,这话挺让人难以接受的,我自己也难以接受,说出来也怪不好意思得

我接受不了,所以我宁愿仿佛还在想你,还在亲近你,仿佛大家都和新的一样,天上的一天就是地上的一年,牛郎织女每天在天上午后时分就能相会,我们也只不过只离开了彼此若干天

2009/6/22 20:25 by yuan

sth.

在西藏中南部,喜马拉雅与唐古拉之间,琥珀众多,大大小小的星罗棋布,数以千计。稍微有点规模的,都被藏民视为圣湖,如果湖畔还有雪山,那就更是神圣得无以复加。这些湖的名字里都带个“措”字,比较著名的象什么“昂拉仁措”、“当惹庸措”、“纳木措”、“扎日南木措”等等,不胜枚举,每一个都有无尽的神秘传说,与一个同样神秘的名字。 

转山或者绕湖,是生活在世界屋脊这个特殊抵御的独有崇拜方式,是一种万物有灵的自然崇拜信仰,与藏族崇拜信仰,与藏族原始宗教观念一脉相承的表现形式,常规动作可以分成两种,第一种最普通,是徒步行走,还有一种更为虔诚的方式,双手套着木板,高举过头,然后收于胸前,全身扑倒,前额触地,五体投地,用自己的身体来一点点的丈量神山圣湖的周长,每绕一周,就会消减罪孽,积累功德,如果在绕湖的路上死去,将是一种造化。 

很多时候,之所以会功败垂成,不是智谋不足,也不是胆略不够,其实只不过是利益使人头脑发昏,虽然都明白这个道理,但设身处地,真正轮到自己的时候,谁也想不起来这个道理了。毕竟都是凡人。谁也没长一双能明见澈始澈终永恒的佛眼,而且我们以前也实在是太穷了。

以前王婆给西门庆上公关课,说想眠花卧柳,先得潘驴邓小闲。潘安貌,驴子的XX,邓通的钱,服软做小的脾气再加上闲。

东来顺的涮羊肉,烤肉季的烤羊肉,白魁烧羊肉,月盛斋酱羊肉,这四大家的涮、烤、烧、酱,把羊肉的味道真是做到绝顶了。

其实炒疙瘩和水楸片,都是老北京穷人吃的东西,可这炸酱面却是穷有穷吃法,富有富吃法,吃炸酱面要是讲究起来,按照顶上吃法,那也是很精细的。精致不精致主要就看面码儿了,这面码儿一要齐全,二要时鲜。青豆嘴儿、香椿芽儿,焯韭菜切成段儿;芹菜末儿、莴笋片儿,狗牙蒜要掰两瓣儿;豆芽采,去掉根儿,顶花带刺儿的黄瓜要切细丝儿;心里美,切几批儿,焯江豆剁碎丁儿,小水萝卜带绿缨儿;辣椒麻油淋一点儿,芥末泼到辣鼻眼儿。炸酱面虽只一小碗,七碟八碗是面码儿。

天坛的明月,长城的风,卢沟桥的狮子,潭柘寺的松,东单西单鼓楼前,五坛八庙颐和园,王府井前大栅栏,潘家园琉璃厂。

如今北京城的格局,是源于七百年前的元代大都城,由数术奇人刘秉忠设计,据说城址地下,藏有孽龙水怪,所以城池建造成八臂哪吒的形状,镇龙压怪,以保王气平安,城池的格局中,隐藏着三头六臂和两只脚,另外五脏六腑,一应俱全,这也是一种复杂的风水布局,背阴处埋了许多王公贵族。

Adolf Hitler  曾有个著名理论认为,大众的认知能力,不能靠解释来提高,只能通过简单的口号。

2009/6/14 18:40 by moody

姥爷走好

姥爷今天去世了,我觉得最难过的应该是我妈,很想安慰一下她、抱一抱她,可她从小就不喜欢看到我矫情的样子,只好把难过和矫情放在心中了

2009/6/12 14:14 by yuan

无题

我把满池的大便硬要yy成满天绮丽的繁星,这是大便的悲哀还是我的悲哀?

2009/5/26 21:19 by yuan

无题

这成千上万的、或胖或瘦的、或高或矮的、或有食物或没食物的蚂蚁群里的蚂蚁们对我来说有什么区别?

若干年后我仍会记得的是那些疼爱怜惜我的或为我怦然心动的蚂蚁

2009/5/21 0:05 by yuan

无题

<街角的祝福>

多少个秋多少个冬
我几乎快要被治愈好
但还是会只因为一个重覆的话题
就无心自扰
也曾想过
若真遇见我们应该如何是好
我想我还是会站在某一个街角
不让你看到
只因为我不想打扰
只因为怕你解释不了
只因为现在你的眼睛里
她比我还重要
我只好假装我看不到
看不到你和她在对街拥抱
你的快乐我可以感受得到
这样的见面方式对谁都好
我只好假装我听不到
听不到别人口中的她好不好
再不想问也不想被通知到
反正你的世界我管不了
若不想问若不想被通知到
就把祝福留在街角

2009/5/10 3:51 by yuan

味吉阳一的食堂

超厚炸猪排饭

寺泽大介是以画料理漫画而出名的漫画家,代表作品是《将太的寿司》还有《妙手小厨师》。和玄乎得完全不可能出现在真实世界里的《中华小当家》不同,出现在寺泽大介漫画中的料理是能够出现在寻常百姓家庭的,至少看起来能够。
  
《将太的寿司》看过一部分日剧,由日本当红的偶像小生柏原崇出演,那时好想试试那种包含着厨师满满心意的寿司,但在试吃日本料理的时候才发现自己对于生的肉类实在是排斥得不得了,于是只好望寿司兴叹。
  
《妙手小厨师》不同,主角味吉阳一继承了父亲留下来的大众食堂,凭着自己的手艺和用心博得了有味皇之称的村田老爷爷的赏识,然后就开始一步步进行厨艺比拼。作品也算是热血类的格斗系列,格斗的内容是料理而已。其实对阳一很有点不公平,因为挑战者总是拿自己最擅长的拿手作品来比,自己研究了数年的料理阳一却只有一个星期左右的时间来准备,在这么短的时间之内要作出更出色的作品,真的是颇有难度。
  
其实更让我感兴趣的是,寺泽大介这样画着料理类漫画,这些料理他都有没有亲手做过?是光凭想象的还是收集了足够多的素材的?但是经过一番浅浅的考察,我发现其中部分料理在实际操作起来颇有可行性,至少有些可以借鉴的地方。我不喜欢自己动手做饭做菜,但多看看也没有坏处,是吗?
  
(一) 超厚炸猪排饭
一出场时,阳一就靠这道料理吸引了味皇老爷爷和小跟班垂目的味蕾。材料的选取是超厚的猪肉排,遭到垂目的取笑。因为猪排一般都比较薄,虽然肉厚就有更多的肉汁,但太厚了用大火炸到外面刚好里面炸不透或者等里面熟了外面就焦黑了,如果用小火等里面熟的话外面的面衣又会不够脆,而且肉汁会完全流失,味同嚼蜡。但是阳一的炸猪排饭却大大超出了味皇和垂目的期望。
让他们吃惊的是,阳一的肉排厚而且熟,有大量的肉汁,又香又嫩,滑嫩爽口,外面的面衣也是又香又脆还不扎舌头,米饭很Q炒蛋味道也不错。关键是那个超厚的肉排,到底是如何处理的呢?
  
阳一的解释是用了两个锅,一个高温油锅,一个低温油锅,用高温锅炸十秒瞬间封住肉汁,再捞到低温锅用七、八分钟慢慢炸透。至于面衣的奥秘,就是阳一在面衣里试着加入了山药,把山药去皮磨碎后加入面粉和面衣,那样炸出的面皮就会特别脆。
  
山药的作用我不知道是否确有其事,但是高温油锅和低温油锅看起来还是很有道理的,是不是?

  (二)茄汁意大利面
  当然要知己知彼才能百战百胜,在阳一准备战胜对手之前肯定要先了解对手做了些什么,是怎么做的。第一战的对手是味皇总部的意大利料理部的丸井主任,这个丸井后来见到阳一妈妈之后沦为阳一亦师亦父的身份,当然这是后话。

  丸井最拿手的就是蔬菜核桃意大利面。做肉酱用的蔬菜就有好多种,洋葱、胡萝卜、大蒜、青椒、芹菜、香菇等等,切碎炒熟后加上肉末、调味料,加入蕃茄酱和红酒熬煮,核桃去壳,烫熟,用纱布包裹,揉擦去掉内皮,打碎后加入刚才熬好的酱中,完成肉酱。再把这肉酱淋上煮好的意大利面,就能完工。据漫画里说点睛之笔就在最后加入的核桃,在蔬菜与肉酱味道调和的基础上又突出的肉的风味。
  
     

  这个面一定要煮得恰到好处,太生的面无法吸收调味酱,太软的面又太烂没有咬劲。丸井说又要软又要有咬劲的面必须经过长期的学习积累经验才能煮得出来,可是阳一不以为然,他用了自己的方法煮出恰到好处的面。这个方法就是隔一段时间捞起一根面,放到太阳下看,直到看到中间有一根头发那么粗的芯时就是最好的火候。把丸井呛得不行,加上味皇对阳一另眼相看,引发妒嫉,所以要求比试。
   
  其实看到这里的时候,我也煮过面,当然只是普通的挂面,当时也装模作样地把面捞出来对着光看了看,对于圆形切面的面确实是四周煮软中间有一根芯的时候最为美味,又滑软又有韧性。当然这也是题外话,可以从侧面说明其实寺泽大介对于做料理还是有一套的,至少这漫画里的经验日常也能套着用。   

  为了战胜已经达到某一高度的蔬菜核桃意大利面,阳一也下足了功夫。他准备了各种各样的蔬菜准备打败核桃的香味。淘汰了芹菜、洋葱、胡萝卜、蕃茄、韭菜、玉米……之后,阳一把目光聚集到茄子上,茄子很软,又有一种独特的香味,很吸油,可以使肉酱更加嫩滑爽口。当然茄子之路也不是一帆风顺的,茄子少了味道突显不出来,茄子多了汁太多把肉的味道冲淡了。就在阳一快要放弃的时候,铛铛~~~

  
 

  他看到了包心菜卷,想到了用茄子来包意大利面的点子。这样不会有多的水来冲淡肉酱还能酱茄子的特殊香味完全融合进去,形成调合后的风味。还有因为小孩子用叉子卷意大利面很吃力,所以切断之后用茄子来包,直接用叉子叉起来就能吃,一举两得。看到阳一这样下功夫,尝过后觉得味道确实不错的丸井总算再次深刻认识到料理无止尽的真理,于是还没等投票就自动认输。    

  在肉酱的制作上,还卖了一个小小的关子。到底如何搭配才能美味可口,不油不腻又充满肉香呢?不止肥瘦要搭配,还有牛、猪肉的搭配,据说牛肉三、猪肉七最好。亲爱的漫友们,虽然大多数人不会去做意大利面,茄子和肉酱的搭配是否美味我们也不是很清楚,可是有没有欲望下次做饭时把牛肉和猪肉配合起来试试呢?

(三)拉面

  比过西式的意大利面之后又回到了中式的拉面,或者这个对于我们来说更有启发性吧。被卷入这场拉面比赛的原因是拉面店菜香田的小老板是学校棒球队的皇牌投手,可是家族企业被新来的甲来轩打压得快要破产,所以无心打球,于是为了学校的棒球队,加上强敌当前,阳一同学忍不住想要和甲来轩一决胜负。
  
  甲来轩的面号称是研究了十年的结果,每天排队吃面的人海了去了,到底有什么奥秘呢?
  
  

  
  甲来轩的汤是公认的好汤,清澈见底,味道香浓,每个去吃面的人都会忍不住把汤喝完。其中也没有太多秘密。首先,汤是以鸡骨配上猪骨熬的,加上一些蔬菜去腥,主要是包菜,大蒜,大葱,再加上一些姜之类。一般店选用的压味料是小鱼、虾米或者是海带,甲来轩就是选用的海带,而且使用的是海带最精华的部分——海带头。对了,汤要过滤才足够清澈哦!
  
  然后就是面。甲来轩的面特别细,细面配清汤,确实是很不错的搭配。但是这面不是普通的面,是大力揉过的,压面杖里加入了重重的铁条。我想这个大家都有经验,如果和面的时候不下力气,面是不会很Q很有咬劲的。突然想起以前学校门口的一个手工面摊,以前很好吃的,后来换了家里的老太太揉面,从此之后那QQ的面就再也吃不到了,默……
  
  这样看起来不张扬实际上用尽了心思的面其实也是我的所好哪,可是阳一却一定要做出打败这个面的更好的拉面。因为甲来轩的面汤清,所以他准备反其道而行之,那就是以浓汤取胜。改变以鸡骨为主的熬汤方式,大量采用猪骨,而且是砍断的猪腿骨,熬出味道浓厚同时也油腻的汤做为基础。剩下的功夫就是要想办法去除这种油腻感了。
  
  第一,在面上下功夫。面如果揉得不够力气,首先口感上就会大打折扣,阳一没有一个成年壮汉的力气,只好花心思在巧劲上,用布包了一大块石头去砸面,这样砸出来的面,至少在柔韧程度上和用铁块压出来的面不相仲伯吧!清汤配细面,浓汤就只好找宽面来配了。宽面吸油,细面反之,细面吸收汤水,宽面反之。同时在揉面的最后一道工序中加入椪柑皮磨成的汁(有谁知道这是种什么水果?),椪柑的清香会化解一部分浓汤的油腻。
  
  但是这样还不够,宽面和椪柑还不足以完全消掉浓汤带来的油腻感,于是阳一想出了最后一招,那就是葱。把大量的葱切碎,也烧热的滚油浇上去,把这样烧得香香的炸得焦焦的油葱厚厚的铺在面上一层。呃,这样真的会好吃吗……
  
  其实我们谁也不知道,漫画里的评委们在饱饱地吃完了甲来轩的拉面的时候看着阳一的油腻的面根本起不了食欲。但是工作是要做的,在第一个人小心翼翼地喝下第一口汤之后形势逆转。咬起来QQ的面吸收不了多少汤水,还飘着一股淡淡的水果香,炸过的葱也没有了生葱的臭味,香香的味道压下了全部的油腻。结果以一票之差阳一取胜。
  
  下面就是阳一精心做出的面,估计是什么都看不出来吧,笑~
  
  
  
  至少在这个故事里,我们知道了几点,第一,做手工面,一定要花大力气去揉才会好吃,千万不能图一时的轻松就随便和面,第二,用鸡骨加猪骨熬出的汤作汤头应该会很好味,第三,海带最精华的部分在海带头,任何植物最精华的部分都在根部,第四,清汤配细面,浓汤配宽面-_-!,第五,炸过的葱可以去除油腻感,第六,偶尔可以试着在面里加一些果汁之类的东西尝试一下……
  
  太多了,不写了啦,自己好好整理。如果以后有人试着这样做真的好吃,又开店赚了钱的话,请不到寺泽大介也要清我去吃一顿啦!

(4)——凤梨咖喱

  在这一场比试里,阳一碰到了可以称为终生对手的人,同样也是孩子的界一马。或许这样也不错,同样都是孩子,同样没有受到成年人的视野的局限性,知道接受新事物,了解新知识……比赛的理由之类不多做描述,反正大家知道的就是又有好吃的来了。话说回来,有多少人喜欢吃咖喱鸡?
  
  因为是比赛用而不是日常用,两者都在材料上狠下了一番苦功,结果最后选用了同样的材料。鸡肉要有弹性,就一定要脂肪少、肌肉发达,符合条件的就是鸡腿肉。老鸡一般来说比较符合条件,老鸡的肉会越煮越香,味道也会好。但是老鸡有个问题,就象人老了肌肉会萎缩,鸡老了肉一定也会萎缩。想来想去只有鸡中的运动员——斗鸡符合条件,又老又精神Orz。
  
  材料选好了,就要开始研究咖喱的配比了。咖喱要辣,入口要有强烈的感官刺激,但是又不能辣过头到不能吃。这一点阳一很下了点功夫,但是因为我也不懂咖喱,所以从简(不好意思哈)。他选用了西洋芥末Mustard(真巧,上周的口语课正好学到这个,还一直不知道是什么东西呢!日本芥末是水溶性,进了水辣味就消失了,所以这里不能用)的冲击力作为入口的开端,辅以辣椒维持辣味。这同样也是一马选用的配方。
  
  成分定好后,就要突出这种辣味,咖喱的量是一定的,到了极限之后就不能多加,到底该如何在成分一定的情况下来突出这个辣味呢?人的感觉经常是会骗人的,比如在一定的背景衬托下看两个相等大小的图形会觉得一个比另一个大,或者看到两条平行线觉得它们会相交一样,味觉也在一定程度上会被骗到。如果加入另一种衬托,就算是同样程度的辣也会感觉到明显的不同。阳一选用的衬托是与辣味相反的甜味,加入些许的甜味之后,辣味会被更加明显地被衬托出来。(这一点,在《将太的寿司》中也用到过,为了衬托醋饭的味道,在其中加入一点点盐)于是在这种观念的指导下,南瓜被华丽丽地看中了^_^,当然还有其它的蔬菜,比如茄子(又见茄子@_@),蕃茄、洋葱、苹果之类带甜味的蔬菜或水果。
  
  鸡肉和咖喱搞定之后就是米饭,花了那么多心思去构思肯定不能只用普通的白米饭了,阳一在做米饭时加入少许的奶油,然后把胡萝卜打成汁之后加进去。胡萝卜也带一些甜味,少量的奶油清除了胡萝卜的怪味,把甜味突显出来,而且胡萝卜的红色也有良好的视觉效果。
  
  结果一切都准备就绪发现一个超级重大的问题摆在面前,阳一事先完全没有想到,那就是鸡肉。鸡肉太硬,其它的材料全都煮得软软的时候,鸡肉还是煮不烂。最后到底怎么解决的我们就先卖个关子,先来看看一马。
  
  一马选用了36种香辛料来调配咖喱,包括鼠尾草、荷香、芥子(嘿嘿,想起《虹色辣椒》中的老三了,如果想知道点>>这里<<)、干辣椒、葛郁金、百里香、香菜、生姜……等等,这其中的配比,稍微想一想就觉得头疼,反正知道他用了很多配料就行了,使咖喱中加入了一种特殊的涩味和苦味,风味突出呀。为了解决鸡肉久煮不烂的问题,一马借用了酸奶,用酸奶浸泡鸡肉,其中的酸性可以软化鸡肉却不会损害它的弹性,而且鸡肉吸收的酸奶之后风味也会更好(想起酸奶就开始流口水呀)。至于饭,其中加入的就是咖喱的基本材料葛郁金(这到底是种什么东西呢?),然后用蕃红花稍微染了一下,所以饭也稍微带点红色。配料是咖喱的一部分,一马选择的三种是自制的,桔皮果酱,自制泡菜(看不出来到底是什么泡的),还有水果乳酪酱。OK,可以上菜了!
  
  

  
  阳一为咖喱准备苦涩味没有象一马那样准备几十种香辛料,而是选用了简单的替代品——咖啡,虽然简单,可是味道也不差,被他捡了个大便宜。可是在配菜上阳一疏忽了,根本就没有准备,于是只好从现有材料中找帮手,用强火干锅做了烧苹果片,裹了面粉的炸洋葱以及油炸南瓜片。最后在鸡肉的软化问题上,阳一动了点小心思,他选择了凤梨(也就是菠萝啦),把凤梨中间挖空,作为容器把鸡肉放进去放进烤箱烤。烤过的凤梨那种香甜的味道融进了鸡肉,酸味也使鸡肉入口即化。
  
  

  
  两边的咖喱都很好吃,最后阳一取胜的原因就是水。阳一的咖喱比一马的还要辣,可是那种辣入口之后就消失了,加上添加的各种甜味可以中和辣味,使得品尝咖喱的人一口水未喝就把咖喱吃个精光。而在吃一马的咖喱时不由自主地喝了几口水。如此而已。作为主角真的很有优势呢!
  
  看起来好象很麻烦,有没有人想着要做一次试试?遁走……

2009/5/9 9:10 by moody

还记得金三顺在公交站台读过后泪流满面的诗么?

《去爱吧》

——艾佛列德·德索萨

Love like you've never been hurt .

Dance like nobody's watching.

Sing like nobody's listening.

work like you don't need the money .

Live like it's heaven on earth.

--------Alfred D’Souza


去爱吧,就像不曾受过伤一样
跳舞吧,像没有人会欣赏一样
唱歌吧,像没有人会聆听一样
干活吧,像是不需要金钱一样
生活吧,就像今天是末日一样

to love, like never been hurt
to dance,like no one appreciate
to sing, like no one listen to
to work, like no need of money
to life, like today is the end.
——Alfred D’Souza

出处及原文:

We always convince ourselves that life will be better after we get married, have a baby, than another. Then we are frustrated that the kids arent old enough and well be more contet when they are. After that were frustrated that we have teenagers to deal with. We will certainly be happy when they are out of that stage. We always tell ourselves that our life will be complete when our spouse gets his or her act together. When we get a nice a car, and are able to go on a nice vocation. when we retire. The truth is, theres no better time than right now. if not now, when? Our life will always be filled with challenges. Its best to admit this to ourselves and decide to be happy anyway.

One of my favorite quotes comes from Alfred Souza. He said."for a long time it had seemed to me that life was about to begin-real life. But there was always some obstacle in the way, someting to be gotten through firest, some unfinished business, time still to be served, a debt to be paid. Then life would begin. At last it dawned on me that these obstacles were my life." This perspective has helped me to see that there is no way to happiness.

Happiness is the way. So treasure every moment that you have. And remember that time waits for no one. So stop wailting until you finish school, until you go back to school; until you get married, until you get divorced; until you have kids; until you retire; until you get a new car or home; until spring; until you are born again to decide that there is no better time than right now to be happy….

 

中文译文:

我们总是相信,等我们结了婚,生了孩子,生活会更美好。等有了孩子,我们又因为他们不够大而烦恼,想等他们大些时,我们就会开心了。可等他们进入青少年时期,我们还是同样的苦恼,于是又相信等他们过了这一阶段,幸福就会到来。

我们总是告诉自己,等夫妻间任一方肯于合作,等我们拥有更好的车,等我们能去度一次美妙的假期,等我们退休后,我们的生活一定会完美的。而事实的真相是,没有任何时刻比现在更宝贵。倘若不是现在,又会是何时?我们的生活每时每刻都会有挑战。最好是让自己接受这一事实,无论如何使自己保持快乐的心境。

我很欣赏艾尔弗雷德·苏泽的一段名言。他说:“长期以来,我都觉得生活——真正的生活似乎即将开始。可是总会遇到某种障碍,如得先完成一些事情。没做完的工作,要奉献的时间,该付的债,等等。之后生活才会开始。最后我醒悟过来了,这些障碍本身就是我的生活。”这一观点让我意识到没有什么通往幸福的道路。幸福本身就是路。所以,珍惜你拥有的每一刻,且记住时不我待,不要再作所谓的等待——等你上完学,等你再回到学校;等你结婚或离婚;等你有了孩子或孩子长大离开家;等你开始工作或等你退休;等你有了新车或新房;等春天来临;等你有幸再来世上走一遭才明白此时此刻最应快乐……


so,

我哭,因为有眼泪

我笑,因为牙齿美

我唱歌,因为有些话不能用说的

我跳舞,因为脚不愿意躺下来

我工作,因为那是人生一部份

我去爱,因为我是不可取代的

我活著,因为我的心还在跳动

2009/5/8 22:19 by moody

httphandler的怪问题

我维护的某个程序的某个httphandler需要作修改了,就是在出错三次后,需要增加图形验证码,图验正确后才继续往后台的服务发送验证信息。因为里面的逻辑比较复杂,所以我就增加了两个变量,一个是是否有图验,另一个是图验是否正确。三分钟就修改完了代码,自测了一把,一切OK,于是提交更新。过一分儿测试组的就传来消息,现在图验只出一次,以后再怎么错,就不再出图验了。

我首先怀疑是不是程序的代码不一致引起的,于是到环境上把DLL取下来,反编译,查看逻辑,一切都是一样的。

最后发现上面的IsReUseable 被置成了true.原来问题是出在这里。当这个属性被置成true后,所有的对象被创建的时候,就会放在一个对象池里,有新的请求的时候,就从池里面去取一个现成的来处理,只有当发现对象池的对象不够用的时候,才会继续创建新的对象。

2009/5/1 10:26 by 铁匠

奇怪的函数入口点找不到问题

系统又要升级了,编码,测试一切好像都很正常,正当准备要上线的时候,突然发现有一个功能不能用了。这个功能就是使用HTTPS去调别的服务的WebServices。根据程序记下来的日志发现了这样的一个错误:

Catched Exception: [System.Net.WebException]: "基础连接已经关闭: 接收时发生错误。" in <System.Web.Services>
System.Net.WebException: 基础连接已经关闭: 接收时发生错误。 ---> System.EntryPointNotFoundException: 无法在 DLL“security.dll”中找到名为“EnumerateSecurityPackagesW”的入口点。
   在 System.Net.UnsafeNclNativeMethods.SafeNetHandles_SECURITY.EnumerateSecurityPackagesW(Int32& pkgnum, SafeFreeContextBuffer_SECURITY& handle)
   在 System.Net.SafeFreeContextBuffer.EnumeratePackages(SecurDll Dll, Int32& pkgnum, SafeFreeContextBuffer& pkgArray)
   在 System.Net.SSPISecureChannelType.EnumerateSecurityPackages(Int32& pkgnum, SafeFreeContextBuffer& pkgArray)
   在 System.Net.SSPIWrapper.EnumerateSecurityPackages(SSPIInterface SecModule)
   在 System.Net.SSPIWrapper.GetVerifyPackageInfo(SSPIInterface secModule, String packageName, Boolean throwIfMissing)
   在 System.Net.Security.SecureChannel..ctor(String hostname, Boolean serverMode, SchProtocols protocolFlags, X509Certificate serverCertificate, X509CertificateCollection clientCertificates, Boolean remoteCertRequired, Boolean checkCertName, Boolean checkCertRevocationStatus, LocalCertSelectionCallback certSelectionDelegate)
   在 System.Net.Security.SslState.ValidateCreateContext(Boolean isServer, String targetHost, SslProtocols enabledSslProtocols, X509Certificate serverCertificate, X509CertificateCollection clientCertificates, Boolean remoteCertRequired, Boolean checkCertRevocationStatus, Boolean checkCertName)
   在 System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
   在 System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   在 System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   在 System.Net.ConnectStream.WriteHeaders(Boolean async)
   --- 内部异常堆栈跟踪的结尾 ---

 

在同一台机器上的旧版程序,相同的代码,确可以正常使用。也是用同一个应用程序池(asp.net的程序),可以排除权限的问题。最后突然想到系统加载security.dll的时候,会不会不是加载的是系统的那个?于是再看一下程序的bin目录下,发现有一个同名的DLL,把它改名后,发现问题依旧,于是到%windir%/microsoft.net/framework/下面的asp.net cache目录下面把临时文件清除后,解决问题。

让我们顺路看看程序加载一个DLL的查找顺序吧。我用程序去引用一个根本不存在的dll,然后用filemon去看文件句柄的查找顺序:

D:\PersonWork\ForTest\ConsoleApplication1\bin\Debug\ironsoftEncryp.dll
D:\PersonWork\ForTest\ConsoleApplication1\bin\Debug\ironsoftEncryp.dll
D:\PersonWork\ForTest\ConsoleApplication1\bin\Debug\ironsoftEncryp.dll
C:\Windows\System32\ironsoftEncryp.dll
C:\Windows\system\ironsoftEncryp.dll
C:\Windows\ironsoftEncryp.dll
D:\PersonWork\ForTest\ConsoleApplication1\bin\Debug\ironsoftEncryp.dll
C:\Program Files\Borland\Delphi7\Bin\ironsoftEncryp.dll
C:\Program Files\Borland\Delphi7\Projects\Bpl\ironsoftEncryp.dll
C:\Windows\System32\ironsoftEncryp.dll
C:\Windows\ironsoftEncryp.dll
C:\Windows\System32\wbem\ironsoftEncryp.dll
C:\Program Files\Microsoft SQL Server\80\Tools\Binn\ironsoftEncryp.dll   
C:\Program Files\Microsoft SQL Server\80\Tools\Binn\ironsoftEncryp.dll
C:\Program Files\Microsoft SQL Server\90\Tools\Binn\ironsoftEncryp.dll
C:\Program Files\Microsoft SQL Server\90\DTS\Binn\ironsoftEncryp.dll
C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\ironsoftEncryp.dll

可以总结一下查找顺序:

1. 可执行文件所在目录;

2.进程当前目录;

3.系统目录,%SystemRoot%/system32

4.16位系统目录;,%SystemRoot%/system

5.Windows目录,%SystemRoot%/

6.环境变量PATH中的目录;

2009/5/1 2:17 by 铁匠

无题

一只蚂蚁忘记另一只蚂蚁要多长时间?这件事情不用惊动天雷和地火,这件事情对这个客观的物质世界产生不了任何影响,这个物质世界于这只蚂蚁来说,也并不会因为忘不忘掉另一只蚂蚁而产生什么客观的变化,蚂蚁还是蚂蚁,世界还是世界,世界不会关注这只蚂蚁的心理变化,这只蚂蚁的心理变化对世界来说也接近于无意义

那这只蚂蚁干嘛还要忘掉另一只蚂蚁呢?

2009/4/26 2:03 by yuan

选择适合过一辈子的人zz

心理学家认为,判断男女两个人是否适合“牵手”,应考虑以下10个因素。 

第一、彼此都是对方的好朋友,不带任何条件,喜欢与对方在一起。 
第二、彼此很容易沟通、互相可以很敞开地坦白任何事情,而不必担心被对方怀疑或轻视。 
第三、两人在心灵上有共同的理念和价值观,并且对这些观念有清楚的认识与追求。 
第四、双方都认为婚姻是一辈子的事,而且双方(特别强调“双方”)都坚定地愿意委身在这个长期的婚姻关系中。 
第五、当发生冲突或争执的时候可以一起来解决,而不是等以后来发作。
第六、相处可以彼此逗趣,常有欢笑,在生活中许多方面都会以幽默相待。 
第七、彼此非常了解,并且接纳对方,当知道对方了解了自己的优点和缺点后,仍然确信被他所接纳。 
第八、从最了解你、也是你最信任的对方处得到支持的肯定。 
第九、有时会有浪漫的感情,但绝大多数的时候,你们的相处是非常满足而且是自由自在的。 
第十、有一个非常理性和成熟的交往,并且双方都能感受到,在许多不同的层面上你们是很相配的。             

爱情最常见的形式就是两性之间的捕捉与追逐。人际间的好感可以相互传达出强大的力量,以至于能够弥补客观条件的不足。是相似性而非互补性把人们结合到了一起。相似性主要包括三个方面的匹配度:价值观与人格、兴趣和经验、人际风格。其中,人际风格是最重要的关系预测指标。与和自己人际沟通风格有所差异的人交往会有挫折感,且较少有进一步发展的可能。 

爱情是追到手的吗?

不是。真正的感情根本不需要追的。两个人的默契,在慢慢将两颗心的距离缩短,在无意识中渐渐靠近彼此。从好朋友到情人,真正的感情是用不了多久的。从你喜欢上他的那一刻起,也许他也在那一刻喜欢上了你。同节奏的爱情往往能奏出最和谐最动听的乐章。 
真正的爱情需要什么?需要两个人在一起是轻松快乐的,没有压力。 

爱一个人就是毫无保留地付出吗?

不是。每一个人都是一个独立的人,我们首先是属于自己的,我们有思想,我们有个性,而不是把我们的全部都给对方。我们可以有保留,比如你不愿意说的隐私,有秘密的人才是成熟的,不是吗?有时候不说出来反而更好。 

外貌和个性哪个更重要?

男人年轻的时候往往喜欢漂亮的女子,25岁以后,会选择和自己性格合适的女子,能和自己一起过日子的人。 

喜欢一个人,太急切了,反而不好。一是因为越想得到的越得不到;二是得到了也很难珍惜,来得快去得也快。细水长流一些,爱情会更长久。 

相爱容易相处难。相处中最重要的是宽容和妥协,在信任和了解的基础上。没有宽容和妥协,任何两个人都无法相处。 

纯纯的爱也许只有一次,但是真爱未必只有一次。时间会抚平一切伤痕。 

我们其实是可以爱上很多人的。我们不是喜欢某个人,而是喜欢某种类型的人。先来的人和我们相遇了,于是我们幸福地走到了一起;对于后到的人,只能抱以歉意,同时,祝福他早日找到属于他自己的幸福。 

没有谁是我们一生非拥有不可的,爱一个人,很多时候实际上是习惯了这个人

现实和浪漫哪个更重要?

现实。没有现实为基础,浪漫就是空中楼阁。大学校园的爱情往往随着毕业而告终,大多是因为不现实,不在一个城市。 只有相互欣赏相互佩服各有所长的人,才会碰撞出最美丽的火花,也才会结出最甜美的爱情果实。 

分手后我们还可以做朋友吗?

最好不要。剪不断,理还乱。过去了就过去了,我们不是生活在过去,而是现在。爱情不等于生活,只是生活的一部分。

不要因为自己长相不如对方而放弃追求的打算,长相只是一时的印象,真正决定能否结合主要取决于双方的性格。我见过的帅哥配丑女,丑女配帅哥的太多了。 

恋爱的时间能长尽量长。这最少有两点好处:一,充分、尽可能长的享受恋爱的愉悦,二,两人相处时间越长,越能检验彼此是否真心,越能看出两人性格是否合得来。 

想知道一个人爱不爱你,就看他和你在一起有没有活力,开不开心,有就是爱,没有就是不爱 
爱情不是感动,你不是他心目中的理想伴侣,即使一时接受你,将来碰上他心仪的那一位,一样会离开你。有些人情绪容易大起大落,这样的人是很难维持一段长久的关系的。  
    
浪漫是什么?

是送花?雨中漫步?楼前伫立不去?如果两人彼此倾心相爱,什么事都不做,静静相对都会感觉是浪漫的。否则,即使两人坐到月亮上拍拖,也是感觉不到浪漫的。 

是否门当户对不要紧,最重要应该是兴当趣对,不然没有共同语言,即使在一起,仍然会感觉到孤独。 

持久的爱情源于彼此发自内心的真爱,建立在平等的基础之上。任何只顾疯狂爱人而不顾自己有否被爱,或是只顾享受被爱而不知真心爱人的人都不会有好的结局。

爱情既是风险投资,难免有去无回,失恋是再正常不过的事情。爱过,就够了。既然不能在一起,总有不能在一起的理由。不能因为别人负了你,就不负责任地游戏、报复或是堕落,自己演的戏,总要自己收场的。何况,他不爱你,你做什么他都不会在乎。 

如果爱上,就不要轻易放过机会。莽撞,可能使你后悔一阵子;怯懦,却可能使你一辈子后悔。没有经历过爱情的人生是不完整的,没有经历过痛苦的爱情是不深刻的。爱情使人生丰富,痛苦使爱情升华。 

你可能习惯与现在的恋人,明明不太喜欢,但在一起久了,习惯使人不太愿做新的选择。人生会面临无数次选择。当给你机会选择时,你一定要谨慎;一旦你做出了选择,就永远不要后悔;拿得起,放得下,该断则断,该忘记的,就把它忘记;该珍惜的,就要把它珍惜 

我们总说:“我要找一个很爱很爱的人,才会谈恋爱。”但是当对方问你,怎样才算是很爱很爱的时候,你却无法回答他,因为你自己也不知道。 

没错,我们总是以为,我们会找到一个自己很爱很爱的人。可是后来,当我们猛然回首,我们才会发觉自己曾经多么天真。假如从来没有开始,你怎么知道自己会不会很爱很爱那个人呢?其实,很爱很爱的感觉,是要在一起经历了许多事情之后才会发现的。或许每个人都希望能够找到自己心目中百分之百的伴侣,但是你有没有想过,在你身边会不会早已经有人默默对你付出很久了,只是你没有发觉而已呢? 

所以,还是仔细看看身边的人吧,他或许已经等你很久了。当你爱一个人的时候,爱到八分绝对刚刚好。所有的期待和希望都只有七八分,剩下两三分用来爱自己。如果你还继续爱得更多,很可能会给对方沉重的压力,让彼此喘不过气来,完全丧失了爱情的乐趣。 

所以请记住,喝酒不要超过六分醉,吃饭不要超过七分饱,爱一个人不要超过八分。如果你也正在为爱迷惘,或许下面这段话可以给你一些启示:爱一个人,要了解也要开解;要道歉也要道谢;要认错也要改错;要体贴也要体谅;是接受而不是忍受;是宽容而不是纵容;是支持而不是支配;是慰问而不是质问;是倾诉而不是控诉;是难忘而不是遗忘;是彼此交流而不是凡事交代;是为对方默默祈求而不是向对方诸多要求。可以浪漫,但不要浪费,不要随便牵手,更不要随便放手。 

浪漫的人这样描述与爱人的相逢:千万人当中,在时间的无涯的荒野里,没有早一步,也没有晚一步,刚巧赶上了。两个人好着的时候,你不妨就这样想吧。如果不好了,你要明白是否和某人在一起,不过是一个再简单不过的概率问题。数千个擦肩而过中,你给谁机会谁就和你有缘分,纵没有甲,也会有乙。别傻等那种想像中的木石前盟般的缘分了,生活中哪有那么多传奇。别醒着做梦了,难道你忘了艺术虽然来源生活,却还高于生活吗

2009/4/22 20:27 by yuan

无题

<小小>

回忆像个说书的人
用充满乡音的口吻
跳过水坑绕过小村
等相遇的缘分
你用泥巴捏一座城
说将来要娶我进门
转多少身过几次门
虚掷青春

小小的誓言还不稳
小小的泪水还在撑
稚嫩的唇在说离分
小小的感动雨纷纷
小小的别扭惹人疼
小小的人还不会吻

我的心里从此住了一个人
曾经模样小小的我们
那年你搬小小的板凳
为戏入迷我也一路跟
我在找那个故事里的人
你是不能缺少的部分
你在树下小小的打盹
小小的我傻傻等

当初学人说爱念剧本
缺牙的你发音却不准
我在找那个故事里的人
你是不能缺少的部分
小小的手牵小小的人
守着小小的永恒

2009/4/7 23:10 by yuan

《西游记》里的爱情

被虏的朱紫国娘娘,朝思暮想着皇帝陛下,在妖洞里面愁眉不展,孙悟空化妆成小妖在娘娘跟前现身,承诺救其出去。娘娘一片欢欣,赶紧告诉他妖怪有个要命的宝贝――铃铛。两人商量一番,计上心来。孙悟空变成的娘娘,一反常态,让小妖把大王叫过来。大王一听说消息,一边走一边整理衣冠,原著里描述的是“一则羞,二则慌”好像打入冷宫的妃子如今受了宠幸,喜不自禁,欣喜异常。

看到这里,只觉得妖怪很可爱,一心一意,用情专一,做妖也是为了你,身家宝贝都给你,宠着你,爱着你,心里只有你。可是,可是他却不知道,一直对你热情的人突然有一天变得冷漠是因为有了外遇,而一直对你冷漠的人突然有一天嘘寒问暖那是要对你不利。武大郎就是没悟出道理,被潘金莲灌了砒霜。果不其然,制胜的宝贝被人家调包,奋斗多年的事业一瞬间一败涂地,从一个逍遥自在的大王,变成行动受限、不得翻身的座骑,看着别人成双成对,自己匍匐在地,过着寂寞无爱的日子。

2009/3/14 20:50 by moody

网络生活

以前,一个朋友说,网络真的有价值的是电子邮件,这个改变了传统的通讯方式。后来又加了IM,因为它相对于邮件来说更快,更加高效。

现在我觉得网络真的渗透到生活的每个角落:电话费,给手机充值,水费等等这些正常的市政相关的费用都可以在网上来交,省去了去银行排队的痛苦和麻烦。现在网上可信任的网店也越来越多了,想买书,如果不知道哪本书好,可以去图书大厦转转,看看哪本书是想要的,记下名字,然后到网上的书店去下单,很实惠。甚至各种电器也可以在网上下单,不但便宜,还省去了和店里的销售磨嘴皮子的功夫。

网络真的是一个好东西。

2009/3/9 14:11 by 铁匠

找个地方,把时间放慢

我们心事重重又形色匆匆,从公交到地铁,从一个地方跑到另一个地方。人潮人海中,我们完全没留意到夕阳的余光正缓缓地晒在我们的身上,只希望能跑得快点快点再快点。

其实去哪里不重要,只要把心放慢,你会感觉到时间慢慢地静静地流逝。这时,必然能看到最美的风景。

2009/2/27 18:07 by moody

白水煮蛋的做法

把蛋放在冷水里煮,盖上盖子,水开以后,听见蛋滚动的响声,马上捞起,放在清水里泡冷后,再煮,两三滚,再捞起。此时鸡蛋的蛋黄不生不熟,晶莹剔透,放进嘴里,自己就滑了下去。经过喉咙时,就像一个轻吻,有余温,有回味。

2009/1/22 2:06 by moody

编程实现avi文件的流播放

有时候会碰到一些比较BT的需求,比如说想要实现avi的在线播放。有时候会发现一些工具能实现,但是发现总是不够稳定。原因在于协议,如果播放器写得好,可以一边下载,一边分析下载的流,来实现播放。但是想要实现快进,或是拖动这些的就不容易了。

要解决这些问题,只有一点,那就是自己来实现这套流协议,然后作播放器来播放。为了实现这些东西,偶作一下分析,可以简单地把技术点分为三个:

1.流服务器的实现

2.流播放器的实现

3.注册客户端,来实现播放器的关联(这样点击网页上的链接时,可以自动弹出我们的播放器来播放)

接下来让我们详细地看看具体的实现分析吧。

一、流服务器的实现

我们可以通过分析AVI的文件格格式,以及播放时的需要,可以弄出来一个很简单的流协议。并且为了方便使用,我还是基于标准的HTTP协议上来扩展实现。在这里,我把这个协议分成了两大块:媒体摘要和媒体块。

媒体的摘要:根据我们在播放AVI的时候的要求,我们的摘要里面要含有这些信息:宽,高,帧率,解码器类型,流的数量(音频和视频),推荐的缓冲大小,总帧数,如果有音频流,那还得指定音频的采样频率,位数等信息,以及每一帧的索引。

媒体块:在这里面,我们就是真正的下载数据了,每次请求的帧数,这个可以根据我们的应用环境综合考虑了,主要要考虑以下几点:下载尽量快,请求数尽量少。

有了服务器的这些支持,我们就可以实现我们的客户端了。

二、流播放器的实现

具体的播放实现我在这里就不多写了,对于媒体播放器来说,无非就是拿到一帧数据,然后调用对应的解码器解成位图数据,然后把它画在界面上。

在这里主要讲流播放器数据的请求和快进的实现:

我把程序划成两个线程:一个线程负责下载数据,另一个线程负责把内容绘在界面上。

第一步获得媒体的摘要。得到这个摘要后,我们就可以得到媒体的大概信息了。然后再顺序地把索引表发送到服务器上去请求数据。为了更好的播放性能,我们可以把下载下面的媒体块保存在临时文件里面,然后再加一个索引位置来标明每一帧的起始位,以及长度。当播放时,如果发现该帧还未下载。就给那个下载线程发个请求,让它下次下载的时候,就从这个位置开始。所以快进这些的实现就变得很简单了,如果没有下载,只要很短时间的buffer就可以继续播放了。

三、注册客户端

为了更好的体验,偶们可以注册新的协议,这样用户在点击浏览器上的链接的时候,就可以自动打开我们的播放器来播放,偶暂把这个协议定为:ivp(Ironsoft Video Protrol).注册协议很简单,只要把以下的注册导入就可以了,当然我们也可以编程实现生成这些注册表:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\IVP]
@="IVPProtocol"
"URL Protocol"="\"C:\\Program Files\\IronSoftPlayer\\player.exe\""

[HKEY_CLASSES_ROOT\IVP\DefaultIcon]
@="\"C:\\Program Files\\IronSoftPlayer\\player.exe\",1"

[HKEY_CLASSES_ROOT\IVP\shell]

[HKEY_CLASSES_ROOT\IVP\shell\open]

[HKEY_CLASSES_ROOT\IVP\shell\open\command]
@="\"C:\\Program Files\\IronSoftPlayer\\player.exe\" \"%1\""

?

好了,avi的在线流播放就可以很轻松地实现了。嘿嘿,偶一共是用三个工作日左右就全部实现了。

2009/1/12 17:16 by 铁匠

在asp.net下面使用Ironsoft的FlashCapture

IronSoft的FlashCapture可以说是当前已知的一个唯一的可以实现flash抓图的组件,可惜它是在asp才能使用。现在跟着我来看看,如何在asp.net下面去调用它。

首先,在asp.net下添加FlashCapture的引用:

选中网站的项目,然后右键,选择“添加引用”,在弹出来的框里面选择”COM”这个选项卡,往下拉,找到”Ironsoft Library”,然后点击确定,这时候可以看到在bin目录下面添加了:Interop.IronSoft.dll.

其实就是添加代码:

FlashCaptureClass fc = new FlashCaptureClass();
fc.FileName = Server.MapPath("test.swf");
fc.CaptureFrame = 1;
fc.Save(Server.MapPath("test.jpg"));

这时候你会发现图片是抓出来了,可是是一片白的。这是因为asp和asp.net的线程模型不一样了,所以出现了这样的问题,这时候我们要设置asp.net的这个页面的Asp兼容模式:AspCompat 为"true"。也就是写在asp页面的顶上,如:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FlashCapture.aspx.cs" Inherits="FlashCapture" AspCompat="true" %>

这下子抓出来的图片里面就有内容了(IronSoft的其它组件调用如果有类似的问题,也都可以这样处理)。

最后,如果你用VS自带的服务器功能来调试的时候,会发现系统的状态栏上多了一个图标。这说明这时候FlashCapture组件并没有被释放掉。可以用以下代码来实现释放:

System.Runtime.InteropServices.Marshal.ReleaseComObject(fc);
GC.Collect();

这样就轻松实现了在asp.net下面实现Flash的抓图功能了。

2009/1/8 5:42 by 铁匠

开发Office的一些应用部署后出现找不到程序集的解决方法

有时候开发一些应用,需要用到Office的一些组件,比如说在线生成Excel,或是Word文档。在自己的机器上跑得满好的,可是部署的时候,发现报错,如:“未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。系统找不到指定的文件。 ”。这个最常规的办法就是在服务器上安装一个Office。不过这太大了,而且有时候并不一定需要真的Office在上面运行。为了解决这个问题,微软发布了Office的一些更新包:Redistributable Primary Interop Assemblies.

下载地址是:

Office2003: http://www.microsoft.com/downloads/details.aspx?FamilyId=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD&displaylang=en

Office2007:http://www.microsoft.com/downloads/details.aspx?FamilyId=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD&displaylang=en

 

不过微软不建议我们这样来用Office。上面写了,如果把它放在asp.net或是windows服务中,Office会变得不稳定或是没有响应。这也就是为啥有时候服务器上会多很多Office相关的进程,因为没有办法正常地关闭它。

2009/1/7 14:22 by 铁匠

再来一杯

飘在空中好多的酒杯,你的脸蛋红的像草莓

今夜大家不醉就不归,明早太阳是我的棉被

再来一杯...

2008/12/25 2:52 by yuan

获取其它进程的启动参数

当我们使用ProcessExplorer的时候,发现它可以得到各个进程的启动参数(也就是在查看一个进程的属性里,在commandline里面显示的内容)。但是翻遍了MSDN也没有对应的API可以去作这样的事情,最开始的时候很无奈,只好先用内存查看器,看一下commmandline在内存啥位置,然后再用ReadProcessMemory去读一个尽可能大的块出来,虽然简单,但是不可靠,而且有时候读出来的东西后面是一堆无用的数据,影响美观。

经常不断的搜索,终于找到了方法:

1.先用OpenProcess 打开目标进程的进程空间,得到句柄

2.使用NtQueryInformationProcess这个API去读取进程里面的PE块的基地址也就是:PebBaseAddress

3.继续使用ReadProcessMemory,从这个PebBaseAddress,开始读取PEB(PE Block),这时候可以得到ProcessParameters,进程的参数地址

4.继续使用ReadProcessMemory,从这个ProcessParameters,开始读取PROCESS_PARAMETERS,这时候可以得到CommandLine.Length和CommandLine.Buffer,也就是启动参数的长度和启动参数的地址。

5.最后再使用ReadProcessMemory,根据记动参数的地址和长度去读取启动参数。特别要注意的事情是,如果在unicode的系统中,这时候读到的启动参数也是unicode的,所以得定义对应的字串类型去读取,不然打印出来的字串只有第一个字母(比如说参数是:abc,如果用ansi的字串,结果就是:a\0b\0c\0,\0这个就表示字串的结束了)。

最后,如果发现在第2步的时候出现读取错误,这时候应该是程序没有debug的权限了,可以用以下方法来提升程序的权限:

1.先用LookupPrivilegeValue来查看能否拥有:SeDebugPrivilege这个权限

2.如果可以,就用以下代码来提升权限:

Privileges.Privileges[0].Luid:=DebugNameValue;
Privileges.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
Result:=AdjustTokenPrivileges(TokenHandle,False,Privileges,SizeOf(Privileges),nil,RetLen);

2008/12/22 5:50 by 铁匠

招行的网银专业版提示:无效用户,请重新输入#21 的解决办法

最近突然发现招行的网银不好使了,输入密码后,提示:无效用户,请重新输入#21。于是以为是恢复的证书坏掉了,把用户删掉重新恢复。经过几天痛苦的尝试,终于把恢复问题的答案给答对了。重建了帐户,再次登录还是这样的错误。

最后没有招了,google一下,发现原来这是招行网银的一个防盗策略:如果里面的密码不是本机的键盘输入的话,就作出这样的提示。偶在本本的外挂键盘下输入的密码,所以不成功。改用本本自己的键盘输入就没有问题了。

2008/12/12 10:11 by 铁匠

string.format()是否应该多用?

前一阵子,项目中的一个页面每秒只能处理300次,而这个页面的逻辑也不复杂,就是根据条件拼出一个字串然后输出。开始以为这里面逻辑太复杂,所以有问题。不过后面发现了vs里面带了性能分析工具,于是抱着试试看的想法,作了一下性能分析。最后的结果让人大吃一惊:string.format这个操作竟然用掉了一半的时间,为啥它会这么费时间呢?为了真相,我用.net reflector查看了string的实现:

public static string Format(IFormatProvider provider, string format, params object[] args)
{
    if ((format == null) || (args == null))
    {
        throw new ArgumentNullException((format == null) ? "format" : "args");
    }
    StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
    builder.AppendFormat(provider, format, args);
    return builder.ToString();
}


很让人吃惊,string.format竟然是调用了StringBuilder的AppendFormat来实现的。再继续根下去(这个源码只是通过IL得来的,可能和原始的不太一样,但是差不多了),注意里面的红色的那句:

public StringBuilder AppendFormat(IFormatProvider provider, string format, params object[] args)
{
    int num3;
    if ((format == null) || (args == null))
    {
        throw new ArgumentNullException((format == null) ? "format" : "args");
    }
    char[] chArray = format.ToCharArray(0, format.Length);
    int index = 0;
    int length = chArray.Length;
    char ch = '\0';
    ICustomFormatter formatter = null;
    if (provider != null)
    {
        formatter = (ICustomFormatter) provider.GetFormat(typeof(ICustomFormatter));
    }
Label_004E:
    num3 = index;
    int num4 = index;
    while (index < length)
    {
        ch = chArray[index];
        index++;
        if (ch == '}')
        {
            if ((index < length) && (chArray[index] == '}'))
            {
                index++;
            }
            else
            {
                FormatError();
            }
        }
        if (ch == '{')
        {
            if ((index < length) && (chArray[index] == '{'))
            {
                index++;
            }
            else
            {
                index--;
                break;
            }
        }
        chArray[num4++] = ch;
    }
    if (num4 > num3)
    {
        this.Append(chArray, num3, num4 - num3);
    }
    if (index == length)
    {
        return this;
    }
    index++;
    if (((index == length) || ((ch = chArray[index]) < '0')) || (ch > '9'))
    {
        FormatError();
    }
    int num5 = 0;
    do
    {
        num5 = ((num5 * 10) + ch) - 0x30;
        index++;
        if (index == length)
        {
            FormatError();
        }
        ch = chArray[index];
    }
    while (((ch >= '0') && (ch <= '9')) && (num5 < 0xf4240));
    if (num5 >= args.Length)
    {
        throw new FormatException(Environment.GetResourceString("Format_IndexOutOfRange"));
    }
    while ((index < length) && ((ch = chArray[index]) == ' '))
    {
        index++;
    }
    bool flag = false;
    int num6 = 0;
    if (ch == ',')
    {
        index++;
        while ((index < length) && (chArray[index] == ' '))
        {
            index++;
        }
        if (index == length)
        {
            FormatError();
        }
        ch = chArray[index];
        if (ch == '-')
        {
            flag = true;
            index++;
            if (index == length)
            {
                FormatError();
            }
            ch = chArray[index];
        }
        if ((ch < '0') || (ch > '9'))
        {
            FormatError();
        }
        do
        {
            num6 = ((num6 * 10) + ch) - 0x30;
            index++;
            if (index == length)
            {
                FormatError();
            }
            ch = chArray[index];
        }
        while (((ch >= '0') && (ch <= '9')) && (num6 < 0xf4240));
    }
    while ((index < length) && ((ch = chArray[index]) == ' '))
    {
        index++;
    }
    object arg = args[num5];
    string str = null;
    if (ch == ':')
    {
        index++;
        num3 = index;
        num4 = index;
        while (true)
        {
            if (index == length)
            {
                FormatError();
            }
            ch = chArray[index];
            index++;
            switch (ch)
            {
                case '{':
                    if ((index < length) && (chArray[index] == '{'))
                    {
                        index++;
                    }
                    else
                    {
                        FormatError();
                    }
                    break;

                case '}':
                    if ((index < length) && (chArray[index] == '}'))
                    {
                        index++;
                    }
                    else
                    {
                        index--;
                        if (num4 > num3)
                        {
                            str = new string(chArray, num3, num4 - num3);
                        }
                        goto Label_0253;
                    }
                    break;
            }
            chArray[num4++] = ch;
        }
    }
Label_0253:
    if (ch != '}')
    {
        FormatError();
    }
    index++;
    string str2 = null;
    if (formatter != null)
    {
        str2 = formatter.Format(str, arg, provider);
    }
    if (str2 == null)
    {
        if (arg is IFormattable)
        {
            str2 = ((IFormattable) arg).ToString(str, provider);
        }
        else if (arg != null)
        {
            str2 = arg.ToString();
        }
    }
    if (str2 == null)
    {
        str2 = string.Empty;
    }
    int repeatCount = num6 - str2.Length;
    if (!flag && (repeatCount > 0))
    {
        this.Append(' ', repeatCount);
    }
    this.Append(str2);
    if (flag && (repeatCount > 0))
    {
        this.Append(' ', repeatCount);
    }
    goto Label_004E;
}

发现里面会有new string,这时候会有新的内存分配出现,也就是说string.format会产生很多临时的string对象,这个会费时间,同时也会使GC的工作量增加.既然这里面调用了stringbuilder来实现的,那为啥不直接调用stringbuilder.append来实现。于是我就把原来的实现改成了stringbuilder的append,同时设置它初始容量为我们预期的大小,通过测试,这部分的性能提高了十倍。于是性能问题解决了。

最后,我觉得如果程序的性能很重要,而在这里面又经常有string.format的时候,还是改用stringbuilder.append来实现,虽然麻烦一些,代码也不好看,但是效果还是会很明显的。

2008/12/8 3:06 by 铁匠

离真相总是一步之遥------终于完成了AVI文件格式的解析

虽然AVI的文件格式很熟悉了,根据RIFF file refence里面的说明生成的AVI拿mpc一类的播放器可以正常播放,但是windows media player却死活也播放不了。用偶的程序生成的AVI文件在目录里面也没有预览,也读不出文件里面的信息,搞得偶好郁闷。有时候甚至想把自己写的这个上千行的avibuilder删了,换成系统自带的avi相关的API来实现,不过看着那么多的API自己感觉很复杂,也没有办法支持压缩的格式,所以只好放弃。

今天无聊了,又拿起了visual dub来看avi的格式,突然我发现我生成的avi文件和正常的avi文件的文件头的差别了(左边是错误的,右边是正确的,黄颜色背景的那个):

捕获

一个极小的失误,费了好长的工夫。只怪当时看文档的时候没有多想想,怎么可能会把header的标识放到了stream上面。

修改完了后,偶的avibuidler生成的AVI终于和正常的一样了。

2008/12/3 16:52 by 铁匠

詹姆斯,走向王座的道路

那一天黄昏,一个贩卖紫罗兰的人来到这个城。他说得出花粉的种类,能辨认酒的年份。他卖的紫罗兰浸在水中也不会褪色。人们相信他的话,相信他做出的断言和论证。临走前,他对一个孩子伸出食指,神色安静,用莫测高深的语调宣称:

“有一天,他会是王。”

1604年——东印度公司成立第5年,我国万历32年——英王詹姆士六世下令重新审订和翻译《圣经》,他要求出一本既忠于原来的希伯莱文和希腊文、又能成为新教的权威的《圣经》。詹姆士指定成立了一个54个人的翻译班子(实际参加工作的只有四十人),其中有教授、《圣经》学者、牧师和语言学家。翻译工作进行了三年。这部《圣经》于1611年出版。
此本称为《KING JAMES BIBLE》,是历来最为权威的一版圣经。
某个舞文弄墨的记者在21世纪初的某日灵机一动。本来,在此之前,圣文森特-圣玛利高中的勒布朗,绰号是“SUPER J”。但显然,“KING JAMES”更为响亮雄浑。

在那之前,他是一个单亲家庭的孩子。他是圣文森特-圣玛利亚高中的天才球员。高一,他带领球队23胜1负;高二,26胜1负。他进入《今日美国》评选的全美第一队,他成为俄亥俄州的篮球先生。在橄榄球场上,他还作为外接手进入全美一队——那一季,他冲出了700码。他奔驰起来如风似电,不可阻挡。

父母不是占卜师,可能起错名字,把一个圣洁的称号安放在一个二十年后吃喝嫖赌的孩子身上;幸而绰号是骗不了人的。行走江湖,名字或者是一个符号,但绰号像伤痕,记下你的所做所为。比如,你不会把一个叫“天行者”的汤普森,错认成一个叫“甲虫”的哈达维。
只有勒布朗·詹姆斯是例外的:KING这个名头,没等他在NBA加冕,就已被早早刻上他的额头。

他成为天择之子的过程,并非来自神赐的谶语,而是21世纪的媒体。四十年前的世界,人们口口相传堪萨斯大学的张伯伦,红衣主教必须亲自坐破旧的客机去美国另一端,看一个传说中大学生的水准。互联网时代使神话可以肆意传播。他是国王,他是天择之子,是CHOSEN ONE。他是魔术师+乔丹。他穿上了23号。他模仿乔丹的神情为《SI》做了封面照。他的形象已被框定,注定无法再作为平凡的球员存在了。

城里的人相信了紫罗兰贩子的预言。他们议论纷纷,思考如何让他成为王。他们翻出各种故旧典籍来教导,把已逝的王者们一一抬出,教导这个孩子如何做一个王。他们每天在摇篮边告诉他,你将来会成为一个王,这就是你的命运……孩子慢慢长大了。他每学会一套剑术、每多读一本书,人们就满心欢喜。为了避免他学坏,人们把他眼界内的淫亵诗集、肮脏饮食全部收走。当他走在阳光大道上时,有人会提前提醒他,别去走那些幽深的林荫道。那里有女妖的歌声,会勾引少年走错歧途。“你是王,没有别的选择。你的每一步都应该是准确的。”人们说着,扶正他的衣冠,惟恐他说错哪一句话。

高三时,勒布朗最后一次展示了他的杰出橄榄球才能。52次接球,超过1000码,15次达阵。但在季后赛,他的左手中指受伤,这迫使他开始大量使用右手。于是,2003年他参加选秀时,很少人注意到,他是左撇子。

由于他的受伤,母亲禁止他参加橄榄球——“你不能因为橄榄球而错失进入NBA的机会。”球鞋厂商在他门前堆起的价码已经直指千万美元。他的高四毕业之年,来看他打球的观众规模可与NBA相比。他抛向观众席的球衣都可以拍出800美元的高价。全美第一队。俄亥俄篮球先生。各类杂志的封面。声望、金钱互相堆积,终于把他垫到青云之上。对他的期待如此轰烈,以至于他已经不可能再打NCAA。2003年,克里夫兰骑士获得状元选秀权时,全城欣喜若狂。经理说:“我得练习勒布朗的发音……如果我不小心在选秀大会上念错了我们所要的人,我会被杀掉的。”

他成了2003年状元,开始打他的第一场NBA。萨克拉门托国王队,比赛前他在板凳上坐着,摄像机的光芒像一片烂漫银河。他上场,得到25分、9次助攻、6个篮板、4次抢断。在一次快攻中,他把扣篮机会让给了比他资历更老的里基·戴维斯。在赛后,当他被问及他想成为什么样的球员时,他说:“我想成为杰森·基德。他是如今独一无二的控卫。他的传球技巧当今无双。”而就在当季与基德对垒的比赛中,他得到赛季最高的41分,成为联盟史上得40分的最年轻球员——这只是他漫长的“最年轻记录”的开始。

有多少人期待他成为帝子巨擘,就有多少人期待他成为又一个堕落流星。21世纪的媒体把每个巨星的生活放大至前所未有。他是KING,于是,他理应规避所有的错误,每一步都踏在正确的轨道上——非常幸运,在他的第一战,他便表现出了人们希望他表现的那一切。无私、沉稳、早熟、天分。他的风车扣篮,他的宽广视野,他对基德的赞美。一切都符合人们的理想。

于是,世界也习惯了他的中规中矩。他走在了一条光芒万丈的路上,于是他必须一直走向前去。世界为他设计了一条传记片似的路径。他应该像已退役的那位23号,他应该像魔术师,他应该像张伯伦,或者他应该独一无二……总而言之,他的生涯犹如电子游戏。他应当满足你所有的幻想。因为他的年轻,因为他的无限可能性。

人们把未来的王扶上了马,指给他一条大道,告诉他千万不可走错。人们翻阅古代的典籍,窃窃私语说:“古书里说,王不应该一马纵横天下。他应当有一批忠诚的卫士,还有一位美丽的公主……只要他吻醒了那位公主,世界就会顺理成章成为他的啦。”他们为未来的王找来一批青年,充当卫士;告诉王前方的路上,有位公主在等他。你要无私的对待卫士,要温柔的对待公主。这是作为王的责任。

 

2005年夏,拉里·休斯签下那著名的5年6000万合同。他去到克里夫兰,成为世界眼里“勒布朗的皮彭”、“蝙蝠侠的罗宾”。他,连同伊尔戈斯卡斯、德鲁·古登、达蒙·琼斯、帕夫洛维奇们,成为勒布朗的随从。

2005年11月,骑士打出壮美的8连胜。休斯成为组织者,勒布朗充当得分箭头。11月10胜4负,勒布朗东部月最佳。

2005年12月,休斯更多做无球跑位,勒布朗开始掌握球权,发挥其大局观和组织能力。对雄鹿败北一局拿到52分。然而开月即1胜5败。斯诺和休斯电话交流后确定新防守布局,骑士外围防守体系在对掘金时发生变化,休斯和斯诺换防。随后是6连胜,包括破热队和2005年最后一天力克活塞。

2006年1月,拉里·休斯伤退,琼斯升任首发,随即卢克·杰克逊、帕夫洛维奇等人一一试手。骑士外围溃不成军,华丽的客场6连败。勒布朗得分和命中数全部上升,但效果不佳。对爵士,勒布朗51分,成为史上最年轻的5000分球员,然后是带队的7连胜。在对开拓者一战中,勒布朗最后一投选择传给空位的斯诺,引发媒体口诛笔伐。

2月,罗纳德·穆雷到来。

3月,穆雷到来之后,骑士4连败,随后是华丽的18胜4负。最后以50胜收尾,战绩稳定在东部前四。勒布朗连续三周东部最佳,然后是3月最佳。常规赛MVP选票仅次于斯蒂夫·纳什。

2006年1月的那次传球,引发了他职业生涯最突如其来的一次置疑。当骑士战绩一路下滑时,人们期待他像西海岸的科比一样,用连续的50分、60分或81分来挽回球队。而他在与波特兰决生死的时刻,还是选择了相信队友。在过去,这种行为总是会引来一片赞扬之声——无私、成熟、大局观。但在这一次失手后,媒体选择了对他大肆抨击。他理应自私,他理应在关键时刻独断专行,他理应接过领袖的责任。这一切加上他以往极低的绝杀成功率,促成了他的罪状:他早熟过度,以至于缺乏杀手才能。

这就是世界的真相:周遭并不因为你的优点而赞美你,他们只在胜利的时候把你的特点塑造为优点,在失败时则将之贬低为缺陷。2006年的失败初春,勒布朗·詹姆斯初次显示出他的问题:他做出判断是基于自己阅读比赛的能力,而非他自己的热爱——他把某些原则贯注进血液里。在助手短缺的2006年春,他被迫尝试每一件事——在媒体的眼里,他理应熟悉任何一件事:掌握更衣室,做出合理判断,投中压哨球,展现全面技术和华丽动作。诸如此类。媒体不会在意你是一个刚满21岁的少年。你必须善待你的罗宾,善待你的队友,信任他们,然后取胜——但如果输了,信任队友也可以成为罪状。

在远征的路上,未来的王吻了一个姑娘,然后把她作为王后载在马上;他遇见了第一个对手,并与之交战。当他取胜之后,人们便欢欣鼓舞。但在下一个对手面前,他倒下了。人们面面相觑,开始怀疑他的伟大。而当那个姑娘光着脚逃走时,卫士们才发现:原来那根本不是注定的公主。他们回过头来对未来的王说:

“也许您得试着重新吻一个女人……”

2006年4月,他的第一场季后赛。与此前所有的“第一次”一样,人们等待着结果,以便决定把他奉上天堂或踩进地狱。第一场,勒布朗拿下三双。第三场,他得到41分。第五场,他得到45分。第六场,他助攻达蒙·琼斯绝杀奇才。你很难找到更完美的季后赛处子征程。

东部半决赛,卫冕东部冠军活塞。第一场结束,活塞暴风骤雨似的三分球像是在宣布这个系列赛的提早结束;第二场,骑士在完场前一分钟追到7分之差,但随即败北,你可以理解为强弩之末不能穿鲁缟。第三场,骑士整季停掉50场的休斯又去奔丧。
听上去像是横扫的序幕,山雨欲来,走兽奔散?

勒布朗·詹姆斯在第一轮变成了得分利器,场均36分击败奇才。第二轮,回到主场,他却奇怪的变回了另一个自己。第三场,三双,最后一节15分,把大分扳回一场。逆鳞,拉希德龙颜大怒,NBA生涯以来第五次发誓——他之前发誓过四次,全中——这将是骑士最后一次主场比赛。
然而,勒布朗赢了。

第四场,然后是第五场。他甚至把活塞放到了悬崖边缘。这像极了滑铁卢之战威灵顿与拿破仑的对局。活塞等于威灵顿:准确,预见,循规蹈矩,谨慎,先谋退步,预留余力,头脑顽强冷静,步骤坚定,战略上因地制宜,战术上部署平衡,进退有序,攻守以时,绝不怀侥幸心理,有老将的传统毅力,绝对缜密周全;勒布朗则类似于拿破仑:个人才华,新想法,用奇兵,有超人的本能,料事目光如炬,一种说不出的如同鹰视雷击般的能力,才气纵横,敏捷,自负,心曲深沉,鬼神莫测,狎玩命运,川泽、原野、山林似乎都想去操纵,迫使服从。

但命运不打算让他直接过去。

第六场,活塞胜出2分,让勒布朗的32分11个篮板断送。第七场,活塞上半场以轮转扼杀了骑士所有龙套的手感,下半场则围剿勒布朗。如你所知:在没有节奏感和依靠防守的时刻,活塞无疑是联盟最好的。

2006年5月,被活塞4比3淘汰之后几天,其兄弟刚去世的拉里·休斯在网络上出了一次名:他和某位脱衣舞女郎在某张照片上甜蜜合影,让人以为他想继承桑普拉斯那位不成器的太太,将体育巨星与色情业这两种让热血沸腾的活动继续融合。

2006年季后赛结束时,勒布朗的形象开始向80年代末的乔丹靠近。又一个所向无敌、却败在活塞铁桶阵下的23号,又一个没找到罗宾的蝙蝠侠。从那之后,关于他个人能力的置疑,从此消失。他的个人能力毫无疑问的成为联盟顶级之列。于是,这样一种形象出现了:

由于他的不朽表现,每个人都相信了、默认了他未来的伟大成就。当世界对其他巨星的升与降叨叨不休时,却从来默认他,勒布朗·詹姆斯,未来的伟大图景。那图景如此确实,以至于他此后所走的路程,都似乎将远远通向辉煌。这是一出已经预知了结尾的戏剧,悬念只在于,勒布朗如何走通这条路,在这条路上要走多久,要经历怎样的悲欢离合,要怎样找到自己的公主。

在喧嚷的非议声中,卫士们认为,未来的王理应迁就他们,培养他们,使他们成为王的随从。他们找来了无数年轻的姑娘,让王一一试吻,看她们是否会成为公主与新娘。于是,王摘下衣冠,跨下马背,开始担任随从、马弁、杂役、卫士和清洁工。世界对此习以为常:他们认为,既然要成为一个宽仁大爱的王,就理应容忍所有的错误。因为他注定要成为王,任何困难都是暂时的。王的力量是无限的,他理应承当一切,而且毫无怨言——包括一一吻过那些乡村姑娘。

2006-07季,克里夫兰继续忍受着拉里·休斯,忍受着他们那奇怪的阵容——已经老到只会15英尺风车勾手的伊尔戈斯卡斯、只会跳投和前场篮板的德鲁·古登、选秀位低到可以忽略不计的帕夫洛维奇、和教练差不多岁数的斯诺,以及命中率绕39%反复盘桓的拉里·休斯。2006年夏天,骑士选中了香农·布朗和丹尼·吉布森。勒布朗对布朗谈不上喜爱,但他在12月就早早宣布他对吉布森的热情。“这孩子很锋利。我会把他放在翼下保护的。”

这个孩子一度打过首发,他第一次首发的那场勒布朗上半场就送出9次助攻,大多是给他的。当然,那一场韦德23次罚球41分击败了骑士。于是 休斯成为了首发控卫。

2006-07季,又一个变动不休的赛季。勒布朗在球队的动态进攻中随波逐流,担任过翼侧空切得分手、组织者、低位轴心等各种角色。直到最后,如比尔·西蒙斯所说,“骑士总得折腾很久,最后才发现,‘既然这个家伙无所不能,为什么我们不索性由他包干一切呢?’”总是如此。2006-07季,又一年悄然流逝。
便是如此,勒布朗却丧心病狂的认为这支队伍能够夺冠。从2006年秋开始,每次赛前赛后,勒布朗都要牵着大家的手,一起吼:
“1,2,3 ,冠军!!!!YEAH!!!!!!!”

外人看去,完全是癞蛤蟆想吃天鹅肉的痴心妄想。

当记者不断重提那个敏感话题“当关键时刻到来时队友有空挡,你还是会分给他们吗?”他会不厌其烦的回答:“一个人盯我,我就强攻。被包夹,我就传球。只要被包夹,我一定会传球,无论什么状况。”
克里夫兰媒体总结道,勒布朗始终在传递这样一种信息:“你们是我计划的一员,我负责一部分,你们负责另一部分。你们会有份分享到的。”
直到2007年东部半决赛第一场,当活塞领先比分进入最后一次进攻时,勒布朗切入篮下,分球给右侧底角的东尼·马绍尔,远射,投失,败北。这一晚之后,他的团队意识遭受到了空前的抨击。

他的2006-07季是艰难的。2006年季后赛的失败证明了两点:他的所向无敌与队友的羸弱反差巨大;但他必须依靠这批队友因为单打独斗必然遭致失败。他从来没有像同龄人一样堕入到一个自私者的声名中。相反,他总被赞誉过于无私。很少有人认识到,他没有任何成功轨迹可以遵循。克里夫兰没有冠军经验,没有胜利背景,他们一无所有,一个22岁的青年是这里所有人的领袖。

即便15年来,骑士首次进入东部决赛全是他的功劳,但在马绍尔射失之后,他承当了一切罪责。他的成功是理所当然的,他的失败是不可饶恕的。人们期待他不断做出绝杀,期待他做出传奇电影里那些不断呈现的戏剧性。他的生活已经不只是一场场篮球比赛了。他的高价合同、伟大名誉和被预先承诺的未来,都注定他必须做一个伟大的人。无论他做的选择是否合理,总而言之,只有胜利才能延续他的光芒。

当他摆出未来王者的架子时,路边的乡民朝他吐口水,说他不过是个冒充的王者。当他像个孩子一样脱去靴子,在溪边洗脚时,路过的人们朝他指点,嘲笑他毫无王者风范。当又一批敌人涌来的时候,他回过身,看着吃麦饼的卫士:“我应该怎么办?”卫士们边喝酒边说:“王者理应懂得自己做出选择。”

于是他拔出了剑,一往无前的杀入敌阵。剑光闪耀如雷霆飞舞。敌人完全没料到,这个脾气温和的少年会忽然嗜血如狂。残缺的鳞甲飞舞之中,他发现他最初吻的那个少女已经吓到尿了裤子,而一个乡野间来的少女却勇敢的在他身旁,陪他并肩驰骋。他在百忙中伸出溅满鲜血的手,拍了拍那个少女:

“你会是我未来的妃子吗?”

然后是我们都知道的故事:0比2落后,他扳回两城,在第五场,他得了48分。东部决赛,天王山,对手是常规赛场均丢91.8分的豪强,是2004年夺取过冠军的魔鬼外线,是奥本山宫——上一个季后赛在这里取下50分以上的人是1961年的埃尔金·贝勒,那时勒布朗的妈都还没有出生。忽然之间,他就出现了。包括最后连取25分。马夫·阿尔伯特宣称,这是史上最伟大的表演之一。当他一反常态、独自扛起球队,以不断的切入和远射轰垮奥本山时,他的名字已被书写入历史,和弗雷泽的1970年第七场、康宁汉的1967年第六场、魔术的1980年第六场、大鸟的神偷、张伯伦1972年手指僵硬后所做的一切,并列在一起的故事,多年以后会成为传说。第六场,当活塞包夹他时,他又找到了他信任已久的吉布森,助攻他得到了职业生涯最高的31分。克里夫兰的球迷见证了历史:那个22岁的年轻人独自把球队提到了历史最高,提到了总决赛。

也许,那一晚,勒布朗忽然之间明白了,“我不能允许自己失败。”于是,他展现出了乔丹般的执拗。直到最后时刻,活塞恍然大悟:他不打算传球,他打算一个人解决一切。可是在双人包夹中他还是投进了那些奇怪的远射和最后的上篮。

忽然之间,2006年秋天他宣扬的“1、2、3,冠军”就近在眼前。他像一个狂热的巫师,足以改写命运,克里夫兰人信任他,信任他所描绘的纸醉金迷的未来。即便2007年总决赛被马刺横扫,世界对他的信赖只会比2006年更甚一筹——他会创造不朽,他不会令人失望。

在又一次战败后,未来的王倦了。他抬头问卫士:“究竟要吻过多少姑娘,我才能找到公主?”卫士们面面相觑,默然无语。年轻人继续追问:“为什么你们就相信我能够找到公主呢?为什么我应当是王呢?”卫士中一个上年纪的人答道:“因为那个贩子曾经这样指认过呀……”

——“也可能,是我们太需要一个王了……”

 

2007-08季,又一个伟大的赛季,得分王、全面的数据、MVP选票第四、第一阵容。人们习以为常,谈论的焦点则只在他的搭配者身上。在许多场合,他都在赞扬他最初的偶像基德。“每个人都知道基德会对我们有多大帮助。他来是否意味着我们会冠军?当然,事实就这么简单。”而在2008年2月,当基德去了小牛,而他迎来另一批队友时,他还是在赞美队友,一如他当初赞美吉布森:“我们加入了一些优秀的球员,这让人感到不可思议,当今天来到更衣室,一切都是新的!”

2007-08季,骑士换了21次先发阵容,缺阵球员累计183人次。在季后赛,故事回到了2006年:与联盟顶级防守球队交战,和2006年活塞对骑士一样,这是一场先期判决的死刑。贵人们在斗兽场包厢高坐,手指往下一按就宣布了猛兽或角斗士的死亡。然后,一如2006年的剧本走向。先声夺人,反振两局,纠结,死斗,进入第七战。勒布朗VS皮尔斯,联盟最具爆炸性的小前锋VS联盟技艺最娴熟的小前锋——他们在重演1988年的拉里·伯德VS威尔金斯。(在那个著名的第五战里威尔金斯砍落47分,而大鸟第四节得到了20分)看完这场比赛的人将能够把第四节的对战记下,以便多年后用来吹嘘。那不是战术意义上分配任务似的得分,纯粹是单挑:皮尔斯两次后撤步跳投和勒布朗回的两个三分,已经到了随性而为的地步。有多少年你没看到皮尔斯这样恣肆了?(“我放开了。勒布朗放开了。我们都不想输。”)或者,季后赛,第七场,上一次出现这样惨烈的对决是什么时候?然后你才能明白这一战的意义。

但是,勒布朗还是败北了。像1988年的威尔金斯,像1986年的乔丹。2006年败于活塞,2007年败于马刺。又一次:个人的孤绝走到最后,被强大的团队击败。

2008年3月9日,他在纽约麦迪逊拿下了50分10次助攻。纽约人倒戈为他欢呼,希望他作为救世主,来到篮球圣地、世界最大都市,成为万王之王。他潇洒的谈论流言:“纽约状态很差,他们在找一个力挽狂澜的人,而我在纽约有许多朋友……”
骑士当然不会交换他,令世界依然幻想不止的,是他2006年签下的那纸合同:2010年夏季球员选项,使他有自由选择的可能。
他戴着纽约扬基队的棒球帽出席各种场合,和网队的小老板、歌星Jay-Z过从甚密,而对克里夫兰又言语谨慎,不露锋芒的表达自己的意向——“我们需要基德”或“我们需要外围选手”,但又对每个队友赞不绝口。在队上内线安德雷·瓦雷让因合同问题被克里夫兰球迷痛恨时,他又与巴西人携手出场,以示支持。各个方面,他都没有得罪。似乎他对克里夫兰的忠诚无可怀疑,但却又似乎飘摇不定。也许,他比所有人都清楚:他只是一个凡人。把一支弱队带成传奇的队伍,似乎并非他能力所及——但是,似乎他又不愿意放弃创造传奇的可能性。

未来的王坐在了草地上,对一个新认识的姑娘吻了一下,开始诉说往事。他对她说,也许他会被迫离开这支冗长的队伍,去过一个正常人的生活。“我不知道要吻过多少女孩,才能找到我的公主……或者,我根本不是王,做不了那些匪夷所思的事情……我只能做我能力所及的事。但是,我想,我还是得最后试一下……也许,命运就打算在我打算放弃时,给我一个机会呢?”

2008年7月,《时代》杂志问他:

“有信心率领美国队在奥运会夺冠吗?”

“绝对。”

“是否意味着你许下诺言,务必拿到金牌?”

“毫无疑问。”

他实践了诺言,然后是2008年秋天,一如既往,他宣称他要带领团队夺冠。莫·威廉姆斯到来,成为他的新帮手?他照例施以夸奖:“莫对我们很有帮助,听说他能来我们队,我十分兴奋。他是联盟里最被低估的后卫之一,他是个很好的球员。我们比以前更强了。”一如此前2008年情人节,被问及竞选MVP可能性时,他满口“只能是科比。他当选之前,我毫无希望。”

2008年的秋天,一切都滴水不漏。每个队友都很好;他对未来很有信心。甚至对新总统奥巴马的当选,他的发言也很得体:“这是一件你可以告诉孩子听的事:一切皆有可能。你不一定要当一个篮球手,你有可能成为美国总统。”

莫·威廉姆斯和德隆特·韦斯特的后场……拉里·休斯、里基·戴维斯、达蒙·琼斯们之后,他似乎终于吻对了一个公主,虽然那也许还不是他命中注的伴侣……但只要还在胜利的路途中,一切就似乎概无问题。他的持球、时间、得分、助攻,所有数据都在朝2006-07季——他近三年的常规赛低谷期——下滑,但他的命中率和失误却在向职业生涯最好的念头迈进。纽约在等候他,全世界在等候他,在他25岁那年夏天。

他不放弃克里夫兰,也许只因为,在这里成就冠军将是神话,而去到纽约意味着他对命运的屈服。他究竟是不是上帝的宠儿?也许这两个赛季将决定他的命运。在25岁时如万众所期待一样成为万王之王,或者成为一个普通的巨星,这就是命运。

而实际上,回过头来审视他所走过的路:世界预先为他设定好了高达云天的轨迹,而神奇的是,至今为止,他很少令世界失望。一如德鲁·古登给他起的绰号“电子游戏”,他所做的许多事,他的命运,只有在电子游戏里才能做到……如今,一个冠军才可能使他的神话不至于破灭。但是,没有人敢断言,他无法做到。

2007年,为他颁东部冠军奖时,比尔·拉塞尔说:“你比我做到这一步还年轻呢。”

也许他命中注定不是王,于是这神话终将破灭;但也许他真的是王,只是需要吻更多的女孩,才能找到公主……重要的是,在过往的年代中,那些断言过勒布朗做不了这个、做不了那个的人,好象都已经失望了。

2008/12/2 23:53 by moody

《怎样忘记他》—张小娴

失恋后,我们总爱问:
“我怎样可以忘记他?我很想忘记他,但我就是没法忘记他。”
如果没法忘记他,就不要忘记好了。
为什么要那么痛苦地去忘记一个人?时间自然会让你忘记他。
现在,我请你干万别想着一头粉红色的大笨象。
请问,你想到的是什么?
你立刻就想到一头粉红色的大笨象了。
你愈努力想去忘记,你愈是无法忘记。
仍然爱着他,忘不了他,是理所当然的事,不必觉得惭愧。
有些人明明忘不了,却自欺欺人说:
“我已经忘了他。”
然而,只要别人一提起他,她就无法控制自己。
有一天,你会忘记他的。
真正的忘记,是不需要努力的。
有一天,你从浴室洗了一个澡出来,扭开唱机听听自己喜欢的音乐,你忽尔想起,你曾经爱过一个人,啊,原来你爱过这个人,那仿佛是很遥远的事,你已经一点感觉也没有了。这就是忘记。
有一天,别人提起某某,你才猛然想起,你曾经爱过这个人,现在已经不记得了。这就是忘记。
如果时间不可以令你忘记那些不该记住的人,我们失去的岁月又有什么意义?

2008/12/2 19:27 by yuan

为骑士精神干杯 芝华士的文案

茫茫人海中,每个人都为了自己而四处奔波,

难道,这就是我们唯一的前进方向么?

不!

让我们为荣耀干杯!

为绅士风度得以长久流传,为心怀他人并乐于伸出援手,为恪守承诺干杯!

为我们中的勇士,为真正懂得何为人生财富,

为共同拥有这种行为方式在世俗中脱颖而出干杯!

为我们干杯!

男人,活出骑士风范。

做男人,就要做这种。

荣耀。绅士风度。手足情义。勇气。


[骑士风范]

在这个唯我主义时代,个人利益高于一切。但是,有一条迥然不同的路。
以信念为盾,积极成就梦想,完美彰现荣耀、绅士风度、勇气与手足情义,
领悟时间和友谊才是生命中最珍贵的财富,为这群捍卫另一种生活方式的绅士们干杯
这就是骑士风范。



[荣耀]
何为荣耀?光明磊落,成就非凡!
坚持心中所想,不为世俗所动,
在积极进取的成功过程中,造就每一次卓越,令同伴、甚至对手心生敬意。
这就是荣耀所在,这就是骑士精神。



[绅士风度]
何为绅士?心怀他人,关切备至!
分享成功、阅历与快乐,伸出援手,随时随地。
不肆张扬,不为炫耀,却收获友情、信任与尊敬。
这就是纯粹的分享,这就是绅士的宽阔胸襟与慷慨风度,这就是骑士风范!



[手足情义]
何为手足?志趣相投,真性真情!
欢乐,互相分享,承诺,彼此恪守,观点,直言不讳……
你我的手紧握在一起,没有世俗间的距离,心中所想,不为我,只为我们。
这就是我们,这就是手足间的真情义,这就是骑士风范!



[勇气]
何为勇气?坚定信念,义不容辞!
心中无畏,只为信仰值得捍卫,满怀信心,
做该做的事,敢承担,敢抗争,更敢成功!
这就是我们中的勇士,这就是英勇气概,这就是骑士风范!

2008/11/30 12:13 by moody

自己安装温控器

首先看一下所有的材料和工具
按此在新窗口浏览图片
费了半天的劲,终于把接收器的线装好了
按此在新窗口浏览图片
看个详细点的(里面的文字写错了,接收器应该是控制器--!!!)
按此在新窗口浏览图片
看看壁挂炉原来的控制器
按此在新窗口浏览图片
换上温控器后的效果图
按此在新窗口浏览图片
测试可以使用后,再把它们固定到墙上
按此在新窗口浏览图片
最后看看完成后的效果图
按此在新窗口浏览图片

2008/11/8 6:25 by 铁匠

路径依赖理论

路径依赖的定义
  一旦人们做了某种选择,就好比走上了一条不归之路,惯性的力量会使这一选择不断自我强化,并让你不能轻易走出去。

  第一个明确提出“路径依赖”理论的是美国经济学家道格拉斯·诺思。他由于用“路径依赖”理论成功地阐释了经济制度的演进规律,从而获得了1993年的诺贝尔经济学奖。

  诺思认为,路径依赖类似于物理学中的“惯性”,一旦进入某一路径(无论是“好”的还是“坏”的)就可能对这种路径产生依赖。某一路径的既定方向会在以后发展中得到自我强化。人们过去做出的选择决定了他们现在及未来可能的选择。好的路径会对企业起到正反馈的作用,通过惯性和冲力,产生飞轮效应,企业发展因而进入良性循环;不好的路径会对企业起到负反馈的作用,就如厄运循环,企业可能会被锁定在某种无效率的状态下而导致停滞。而这些选择一旦进入锁定状态,想要脱身就会变得十分困难。

路径依赖的实验
  有人将5只猴子放在一只笼子里,并在笼子中间吊上一串香蕉,只要有猴子伸手去拿香蕉,就用高压水教训所有的猴子,直到没有一只猴子再敢动手。 然后用一只新猴子替换出笼子里的一只猴子,新来的猴子不知这里的“规矩”,竟又伸出上肢去拿香蕉,结果触怒了原来笼子里的4只猴子,于是它们代替人执行惩罚任务,把新来的猴子暴打一顿,直到它服从这里的“规矩”为止。试验人员如此不断地将最初经历过高压水惩戒的猴子换出来,最后笼子里的猴子全是新的,但没有一只猴子再敢去碰香蕉。起初,猴子怕受到“株连”,不允许其他猴子去碰香蕉,这是合理的。但后来人和高压水都不再介入,而新来的猴子却固守着“不许拿香蕉”的制度不变,这就是路径依赖的自我强化效应。

路径依赖的事例
  在现实生活中,路径依赖现象无处不在。一个著名的例子是:现代铁路两条铁轨之间的标准距离是四英尺又八点五英寸,为什么采用这个标准呢?原来,早期的铁路是由建电车的人所设计的,而四英尺又八点五英寸正是电车所用的轮距标准。那么,电车的标准又是从哪里来的呢?最先造电车的人以前是造马车的,所以电车的标准是沿用马车的轮距标准。马车又为什么要用这个轮距标准呢?因为古罗马人军队战车的宽度就是四英尺又八点五英寸。罗马人为什么以四英尺又八点五英寸为战车的轮距宽度呢?原因很简单,这是牵引一辆战车的两匹马屁股的宽度。

  有趣的是,美国航天飞机燃料箱的两旁有两个火箭推进器,因为这些推进器造好之后要用火车运送,路上又要通过一些隧道,而这些隧道的宽度只比火车轨道宽一点,因此火箭助推器的宽度由铁轨的宽度所决定。所以,今天世界上最先进的运输系统的设计,在两千年前便由两匹马的屁股宽度决定了!

  人们关于习惯的一切理论都可以用“路径依赖”来解释。它告诉我们,要想路径依赖的负面效应不发生,那么在最开始的时候就要找准一个正确的方向。每个人都有自己的基本思维模式,这种模式很大程度上会决定你以后的人生道路。而这种模式的基础,其实是早在童年时期就奠定了的。做好了你的第一次选择,你就设定了自己的人生。

  在国际IT行业中,戴尔电脑是一个财富的神话。戴尔计算机公司从1984年成立时的1000美元,发展到2001年销售额达到310亿美元,是一段颇富传奇色彩的经历。戴尔公司有两大法宝:“直接销售模式”和“市场细分”方式。而据戴尔的创始人迈克尔·戴尔透露,他早在少年时就已经奠定了这两大法宝的基础。

  戴尔12岁那年,进行了人生的第一次生意冒险--为了省钱,酷爱集邮的他不想再从拍卖会上卖邮票,而是通过说服自己一个同样喜欢集邮的邻居把邮票委托给他,然后在专业刊物上刊登卖邮票的广告。出乎意料地,他赚到了2000美元,第一次尝到了抛弃中间人,“直接接触”的好处。有了第一次,就再也忘不掉了。后来,戴尔的创业一直和这种“直接销售”模式分不开。

  上初中时,戴尔就已经开始做电脑生意了。他自己买