少年听雨歌楼上,红烛昏罗帐.壮年听雨客舟中,江阔云低断雁叫西风. 而今听雨僧庐下,鬓已星星也! 悲欢离合总无情,一任阶前点滴到天明。

2004年12月4日星期六

生命一刻

这周我们学校有一个人自杀了。
深夜从教学楼七楼跳下,摔到二楼的平台上。不过现在还没有死。跳下的那间教室就是我经常上课的教室。

生命是脆弱的,也是无助的。但是我还是不明白我们大家面对死亡的这种态度,特别是面对自杀的人。每个人都可以选择死亡的方式,就像有生的权利一样。对于我们这些旁观者来说,说到自杀一部分是带着恐惧,但是过后自杀居然成为调侃的话题。我们笑着,是的,别人的死亡,别人的惨烈却引发了整个校园的笑,各种不同的笑。有你,有我。每个人都脱不了干系。

鲁迅说的好,我们还是习惯当旁观者。

2004年11月13日星期六

自由战士

阿拉法特死了。

其实知道他去巴黎以后,我就知道他已经慢慢离开了我们。不知道为什么,我从小都有一种对政治的敏感,同时也有一种对英雄的敏感。是的,我崇尚英雄。阿拉法特是英雄吗?是的,我觉得。

很小的时候就知道阿拉法特,知道他的名字很久以后才知道了犹太人、阿拉伯人、巴勒斯坦、以色列。在我眼里,阿拉法特永远是那么刚毅,那么坚定。说实在的,我了解阿拉法特并不多,从某种意义说,我从本质上不太喜欢中东的那些东西,太多的利益博弈,太多的渊源和错乱。可是对于阿拉法特,我是敬重的。他是整个阿拉伯世界的一种象征,他标志着“一直都在斗争中”。为自由,为自己的家园,阿拉法特应该说是战斗到了最后一刻。别的国家的领导人换了一个换了两个,他的敌人、朋友走了一个走了两个,可是他,永远坚守在自由斗争的最前沿。这是一种精神,一种理念,很难说这样做有多么大的意义。因为对于一个民族来说,一个人有时显得太渺小,对于整个种族来说,一个人的力量又是多么有限。不过阿拉法特终究成为了英雄。试想多少年以后,以色列的这些人和中东的这些人有谁会被记住?阿拉法特会被记住,拉宾会被记住。

向自由致敬,向为自由而战的英雄致敬,向阿拉法特致敬!!!

2004年11月7日星期日

李云迪的新专辑

一直以来都期待着李云迪的新专辑,当然一方面是因为对李云迪的喜爱,另一方面的确是很想听一下那种纯正的肖邦。距离上一次李云迪的李斯特专辑已经一年多了,这期间,中国的另一个钢琴家朗朗推出了两张CD,分量都很重,一张是柴可夫斯基的钢琴协奏曲第一号,另一张是卡内基音乐厅的现场录音。光从CD的选择上来看,朗朗的曲目更宽广些,而李云迪相对来说窄一些,不过这也仅仅是表面现象而已,比如李云迪在现场音乐会上经常演奏的格里格钢琴协奏曲和李斯特的钢琴协奏曲就还没有列入录音的曲目中,这也可以看出李云迪录音的慎重性。这又是免不了去把朗朗和李云迪拿来对比一番,确实让人很伤脑筋,可大凡人们说到这些都会这样,也就不免俗套。

李云迪的肖邦应该说十分正统。当然,所谓正统是指非常符合肖邦本身的那种气质。这里就让我马上想到了另一位钢琴家,波哥雷里奇。这位钢琴大师所演奏的四首肖邦Scherzo是我十分喜爱的诠释。但是,总归说来,不太像肖邦,多了许多叛逆和暴力。同样的问题也出现在我心中的大师普列特涅夫身上,那更是一种拉赫玛尼诺夫的诠释,让人觉得造型感过于重了,少了自然和超脱。这里就稍微多说一点,个人认为,俄罗斯的很多钢琴家的肖邦都过于凝重了,就是色彩太深。法国的演奏沙龙味道又太重,比如弗朗索瓦演奏的肖邦圆舞曲。所以,从肖邦钢琴比赛走出来的钢琴家往往能够更加准确的去表达肖邦。这里面不得不提一下越南的邓泰新。这个1980年肖邦比赛的金奖得主无疑是有一点遭到埋没,不过客观来讲,如果你要听见最健康最阳光的肖邦的话,我会推荐你去听听他的演奏。这是一种唯美的享受。

所以带着这些心情去听见了李云迪的演奏后,心里十分信服,一方面是感到了肖邦的真实而梦幻的本来面目,另一方面是对李云迪深思熟虑的演奏感到钦佩。比如,其中的第一首Scherzo并不好演奏,对比过于强烈是很多钢琴家的毛病,特别是中段的民歌更是成了滥情的标本,不过李云迪对情感的控制很好,几乎用白描的方式勾勒出内心的涌动,而最后的爆发同样是透彻淋漓,一点不拖泥带水。相比之下,我觉得波哥雷里奇的演奏也是十分到位的。第三首也是李云迪的独到之处,全曲7分多,比Pletnev和Pogorelich都要快,可是听起来却没有这种感觉。中间大段的宣叙调,李云迪处理得很果断,而天女散花般的下行音阶又那么点点入心。不过就效果而说,Pletnev的无疑是最有欣赏价值的,因为,对强烈,极富戏剧性。

总之,感觉李云迪的演奏正在不断地提高,我也听过2000年他参加比赛的时候演奏的Scherzo No.2,的确不如今天成熟和自然,做作的地方很多。虽然比起当今的很多乐坛新人来说,李云迪的脚步也许慢了一些,不过,我个人还是十分赞成这种精品路线的。期待李云迪能够早日录完肖邦全集:)

2004年11月3日星期三

宗教:上帝(一)

我为什么要去质疑上帝,难道仅仅因为我不信上帝?这也许是部分原因,但更深层次的原因却不是这个。在我展开讨论之前,我觉得很有必要列出一些问题。
1.上帝是无所不能(全能)的吗?2.上帝是无所不知(全知)的吗?
还有两个假设,第一:上帝是对于个人而言的(假设一);第二:上帝是对于人类而言的(假设二)。于是就产生了另外两个问题:
3.上帝关心你吗?拯救你吗?(对于假设一)4.上帝关心人类吗?是否拯救人类?(对于假设二)
最后是一个关于相信的问题:相信上帝存在和信仰上帝是不是等同的?
下面进入我要说的第一点:
上帝是针对谁而言的上帝针对谁而言之有两种解释,不是针对个人就是针对人类(当然也就包括了个人)。既然从某种意义来说,上帝是个人唯心的产物,那么上帝也许就是针对个人而言的,换个角度说就是,每个人的上帝是不同的。这可能很好理解。但是这就带来了一个潜在的问题,每个人的上帝不同,又如何去界定什么是上帝呢?就好比,我说苹果是香蕉,你说梨子是香蕉,而事实上香蕉也可能不是香蕉。换句话说,上帝不稳定,有没有上帝仅凭个人意志,那就无法去解释宗教,因为宗教如果作为上帝的一种集体意识的话,就不可能存在。试想每个人信奉的上帝都不一样,怎么可能统一到一起去信奉一样的上帝?如果一个宗教里面的信徒所指代的上帝不同的话,那么又如何做到宗教的精神控制?所以,上帝是针对个人而言这个论题就有问题。而且,上帝果真是对于个人而言的话,一个信徒遭遇险境的时候,上帝会不会因为你的祷告而来救你呢?就算来救你了,你知道那就是上帝吗?没有救你,那对于你而言这个全能的上帝又有什么意义呢?当然这里牵扯到了上帝的功能,我后面再说。下面说如果上帝是针对全人类而言的。关于这一点有很明白的解释,那就是宗教。宗教就是上帝的集体意识。通过宗教,上帝和普通人之间搭上了联系。或者说,宗教就是上帝的载体。注意,世界上没有一个人的宗教,也不可能有几个人的宗教。换句话说,宗教是一种集体行为,这一点也就说明了,在这个集体里面,上帝是等同的,大家都信奉的是一个上帝。可是这一点又带来一个新的问题,上帝是针对全人类而言的,那么人类的苦难,为什么上帝不予解救?如果包容人类的恶算作上帝善的一面的话,我不禁要问,上帝的善对于我们又有什么用?难道一个杀人犯逍遥法外就是因为上帝的宽容?从这个新的问题扩展开来就是,上帝已经上升为集体意识了的话,对于一个独立的个人而言,上帝会来关心你,拯救你吗,或者说上帝会来影响你吗?比方说,在一个宗教里面,一个信徒杀死了另外一个信徒,这个叫什么?难道死去的那个信徒不是信奉的同一个上帝?为什么上帝都不关心一下自己信徒的生命?如果上帝像一个皇帝,管理不过来那么多繁琐的事情。那么对于一个普通人来说,相信上帝又有什么用?很多朝代的臣民其实并不关心自己的皇帝是谁,事实上对于广大的老百姓来说,统治者是谁不重要,相不相信统治者也与日常生活无关。可是上帝就不一样,一个信徒不可能因为上帝不直接关心他就不相信上帝了。这就是矛盾之处,普通信徒对于上帝这个统治者一方面虔诚无比,希望自己得到某种恩宠,希望上帝拯救自己,另一方面又对上帝漠不关心自己毫不在乎。这怎么可能?如果是一个有意识的人,不可能去做到奉献自己的一切不求任何回报,而且还把自己的这种一无所获叫做“上帝对自己的善”。事实上,任何一个信奉上帝的人都潜在希望上帝对自己的某种意义的拯救,否则不可能有集体意识的宗教存在,因为正是这种希望普遍存在,所以才有了宗教。
(未完)

2004年10月29日星期五

秦皇岛游(三)

第三天的日程是从看日出开始的。早在第一天来的时候,就打听到北戴河可以看到海上日出。应该说,我和她从来都没有看过日出,更别说海上的了,所以还是很兴奋的。头天晚上打听怎么去看日出,才发现看日出要起的相当的早。起早倒不是问题,关键是担心没有车。因为看日出的地方离住地也有一段距离,在“鸽子窝公园”。问了住处的服务员,才知道肯定有车。

早上4点过起来,天还是漆黑的,我记得除了多年前去天安门广场看升旗,还从没有这么早起过。沿着住处的小路,走到了大街上。大街上没有一个人,一个车,我们走在路中间。快到一个十字路口的时候,发现了一辆出租车,应该说,出租车发现了我们。迅速坐上车,原来这些师傅都知道会有人去看日出,已经都在外面等了一阵子了,开了没多久,又有一个人招手,于是这个师傅就又拉了一个客同我们一起去“鸽子窝”。到了“鸽子窝”门口,发现有不少车和人了。这个公园似乎就赚早上的钱。票价15!看日出的代价果然不菲。摸着黑来到海边的一个高处等待。这时候的还分不清楚哪里是天,哪里是海。远处的海上有几处灯光。的确就像很多次想象中的那样,天边慢慢红了起来。当然,一开始不可能那么红,非常暗红的颜色。隐隐中透出一种非常冲动。站在那里,很难说出太阳究竟会从哪里升起来。这时候,天空变成暗紫色和黑色的混合体。这时候,可以看见海鸥在天空中飞来飞去。周围的人渐渐多起来,不少人都开始拍照。下面的海滩也呈现出一点点轮廓。天边的红色逐渐多了起来,不过一大片,很难看出哪里更亮一些。基本上看得清楚周围的东西了,一些停泊在岸边的渔船,纷纷起程出海了。海面慢慢淡了。我和她最终从这个海边的小山上走了下去,来到了清晨的海滩边。这个“鸽子窝”公园的海滩边有不少的石头,站在石头上,顶着有一些刺骨的海风,寻找着日出的迹象。快要6点过了,却还是一片红色,似乎天都大亮了,仍然没有什么结果。我和她都在商量,是不是再等一等就可以走了。就在我们大家要离开的时候,太阳从最不经意的地方慢慢爬了起来。开始一个非常光亮的小点,顿时发出万丈的光芒。海滩上立刻沸腾起来。太阳升高的速度非常快,火红的圆球从海平面上托起。海水淡蓝淡蓝的,十分宜人,同时金色的阳光把任何东西都染成了同样的金黄。朝阳果然美丽。整个日出的过程也就5、6分钟。很快,太阳就恢复的本来面目。我们也决定回住的地方,补一下睡眠。

等到我们再次出门,已经都是将近10点了,其实今天本没有什么计划。来之前,觉得像“老虎石”、“碣石”这样的公园肯定是要去的,但是头天晚上看了夜幕下的“老虎石”以后,就没有打算进入这些公园了。不过,既然来了,我们还是打算到这些公园边走走,看一看,毕竟也没有什么特别紧张的事情做。白天的海滩自然沸腾不少,不少人坐在太阳伞下,还有很多人在戏水。不过这种类似度假村的海滩景象却着实很让人恶心。那种在海边自由自在的感觉消失了,更何况人很多,怎么去享受自我呢?沿着北戴河的海滨路,慢慢的散步。阳光照着人懒懒的。本来说去寻找一下“碣石”公园,走了很远却还是没有发现。再一看地图,才知道已经走过了。原来,刚才那个随便可以进入的海滩就是碣石公园了。没有办法,本来的目标已经消失,所以,我们就打算到第一天的“野海滩”去坐着,享受一下大海。于是就开始往汽车站走,顺便准备买点吃的东西。来到了一个小超市,超市老板娘特别热心,看着我们没有垫在地上的类似报纸的东西,于是就让我们拿了他们搞方便面宣传的海报。东北人很是直爽。坐着34路,又来到了“狼牙山”,下了车就直奔到海边。

海岸比第一天来这里的时候要高很多,不过已经处在退潮期了。我们在靠近海的地方铺上了我们的塑料纸,把吃的东西都摆了出来,很有野餐的感觉。有时候都觉得这种场景怎么会发生在真实的世界中呢?但事实却是发生了。非常的惬意和自由。看着碧蓝而深邃的大海,我们靠在一起,吃这东西,说着我们的亲密的语言,心在空中飞翔。海风很大,太阳也有一点毒辣,晒在皮肤上给人一种灼烧得感觉。我们都把衣服套在脑袋上。一下午的时间很快,天渐渐暗了下去。没有出现我们期待的晚霞,不能说不是一种遗憾。太阳一下去以后,温度迅速将了下去,甚至都有一点冷了。原以为能看见晚霞,所以带了比较多的胶卷,哪知没看见,所以就开始很随意的拍着各种照片。海滩上有三三两两的人在捡着贝壳。海上有一艘停着的渔船,暗蓝色的大海摇曳着,荡漾。我们等天完全暗下去以后,便往回走。对于我们来说,3天的假期就快要结束了。走在滨海的公路上,没有任何行人,只有不停呼啸而过的汽车。橘黄的路灯伸向远方,就像是把梦境和现实在远处交汇。

晚上去夜市买了一些东西,就回住的地方了。尽管回来发生了一些小的意外,但是,什么都不能掩盖这次旅行的自由和幸福。

(完)

2004年10月23日星期六

Pletnev的普罗柯菲耶夫第三钢琴协奏曲

我从没有怀疑过Pletnev的大师级水准。事实上,有些人说Pletnev的演奏多少有一点刻意雕琢,是的,从雕琢这点来说,俄罗斯派的很多钢琴家都有这样的“问题”。关键在于,这种雕琢其实是图画了乐曲,是一种形象艺术。最早从霍洛维兹到里赫特再到现在的Pletnev,这种演奏风格得以延续。

以前不是太喜欢普罗柯菲耶夫的《第三钢琴协奏曲》,主要是普罗柯菲耶夫的那种调侃的风格。很多人都认为普罗柯菲耶夫是20世纪的莫扎特。事实上也是,他的作品很少参杂当时的个人情感和环境的影响,纯粹的音乐。这种风格让他不如拉赫玛尼诺夫浪漫,也不如肖斯塔科维奇深刻,但是这只是一种普遍的看法。事实上,作为20世纪音乐曾经的先锋人物,普罗柯菲耶夫的音乐具有鲜明的特点。作为他的《第三钢琴协奏曲》也是一部伟大的作品,可以说是20世纪钢琴文献中的精品。

Pletnev在处理上很注意交响化,使得这部作品听起来不是那么钢琴性,这一点正是Pletnev作为指挥家一面所展现出来的独特能力。同时,这种能力带来的是全曲的把握,对高潮的把握,对比的把握。另外,很多地方都呈现出了特有的色彩感,整部作品听起来很丰满。

作为另一个作品,拉赫玛尼诺夫的《第三钢琴协奏曲》,经典的版本太多了。说实话,Pletnev的这个演奏让我听不出有什么特别的地方。很普通,当然也很正统。

2004年10月22日星期五

数值计算:对称正定矩阵的平方根法解法

这也是一个解方程组得。对象是对称正定矩阵。

(该程序在Visual C++.Net 2003 Windows Server 2003下调试成功)


还是没有检查根的存在性。


//对称正定矩阵的平方根法解法


#include "stdafx.h"

#include "conio.h"

#include

#include




#define M 3 //The Size of Matrix


int _tmain(int argc, _TCHAR* argv[])

{


//Definitions


double A[M][M];


double b[M];


double L[M][M];


double y[M];


double x[M];


int i;


int j;


int k;


double Temp;


//Input the Matrix A


std::cout<<"Please Input the Matrix A:\n";


for (i=0;i


{


for (j=0;j


{


std::cin >>A[i][j];


}


}


//End Input


//Input the Matrix b


std::cout <<"Please Input the Matrix b:\n";


for (i=0;i


{


std::cin >>b[i];


}


//End Input





//Calculate Matrix L


for (j=0;j


{


for (i=0;i <=j;i++)


{


Temp=0;


if (i==j)


{


for (k=0;k <=j-1;k++)


{


Temp=Temp+L[j][k]*L[j][k];


}


L[j][j]=sqrt(A[j][j]-Temp);


}


else


{


for (k=0;k <=i-1;k++)


{


Temp=Temp+L[j][k]*L[i][k];


}


L[j][i]=(A[j][i]-Temp)/L[i][i];


}


}


}


//End Calculate


//Calculate Matrix Y


for (i=0;i


{


Temp=0;


for (k=0;k <=i-1;k++)


{


Temp=Temp+L[i][k]*y[k];


}


y[i]=(b[i]-Temp)/L[i][i];


}


//End Calculate


//Calculate Matrix X


for (i=M-1;i>=0;i--)


{


Temp=0;


for (k=i+1;k


{


Temp=Temp+L[k][i]*x[k];


}


x[i]=(y[i]-Temp)/L[i][i];


}


//End Calculate


//Output Results


for (i=0;i


{


std::cout <<"\nX"<<<"="<<<"\T";


}


//End Output


getch();


return 0;

}

数值计算:高斯列主元消元法

这是一个解方程的程序。用的是高斯列主元消元法。


(在Visual C++.Net 2003 Windows Server 2003下调试成功)


目前没有检查是否有根。


// Gauss.cpp : 定义控制台应用程序的入口点。

//

//高斯列主元消元法

//2004-10-14


#include "stdafx.h"

#include "stdio.h"

#include "conio.h"

#include "math.h"


#define M 3 //The Size of Matrix


int _tmain(int argc, _TCHAR* argv[])

{


//Definitions


double A[M][M];


double b[M];


double m[M][M];


double x[M];


int i;


int j;


int k;


int r;


double Temp;


double Max;


//Input the Matrix A


printf("Please Input the Matrix A:\n");


for (i=0;i


{


for (j=0;j


{


scanf( "%lf",&A[i][j]);


}


}


//End Input


//Input the Matrix b


printf( "Please Input the Matrix b:\n");


for (i=0;i


{


scanf( "%lf",&b[i]);


}


//End Input





//Solve the Matrix A


for (k=0;k


{


//Choose the Main Item


Max=abs(A[k][k]);


for (i=k;i


{


if (abs(A[i][k]) >Max)


{


Max=abs(A[i][k]);


r=i;


}


}


//End Choose


//Change the Row r and Row k


for (i=0;i


{


Temp=A[k][i];


A[k][i]=A[r][i];


A[r][i]=Temp;


}


Temp=b[k];


b[k]=b[r];


b[r]=Temp;


//End Change


//Calculate m


for (i=k+1;i


{


m[i][k]=A[i][k]/A[k][k];


A[i][k]=m[i][k];


}


//End Calculate


//Calculate Others


for (i=k+1;i


{


for (j=k+1;j


{


A[i][j]=A[i][j]-m[i][k]*A[k][j];


}


b[i]=b[i]-m[i][k]*b[k];


A[i][k]=0;


}


//End Calculate


}


//End Solve


//Solve the Result


x[M-1]=b[M-1]/A[M-1][M-1];


for (i=M-2;i >=0;i--)


{


Temp=0;


for (j=i+1;j


{


Temp=Temp+A[i][j]*x[j];


}


x[i]=(b[i]-Temp)/A[i][i];


}


//End Solve


//Output the Result


printf( "\nThe Result Matrix is:");


for (i=0;i


{


printf( "X%d=%lf\t",i+1,x[i]);


}


//End Output


getch();


return 0;

}

2004年10月11日星期一

人工智能点滴

怎样才能实现人工智能?似乎是一件很难的事情。从本质上讲,计算机的所有功能都是通过硬件和软件来实现的。关于这一点,至少到目前为止是无需置疑的。那么抛开硬件不说,软件的基础是什么?是程序。而程序的基础是什么?是算法。所谓算法就是一种数学或者是逻辑的方法。方法,就是某种规则。那么如何用有限的规则去实现几乎是无限的智能?用算法去模拟人的思维,这是可行的。问题就在于,这种模拟仅仅是模拟。在某个特定的区域内,我们可以把规则看成数学中的定理,把我们人的归纳规则的能力看成是数学中的公理。公理有某种潜在的能力去暗示定理,定理也有某种潜在的能力去暗示新的定理。但是,定理是没有潜在的能力去暗示公理的。关于这一点,歌德尔定理说得很清楚,我这里不详细说。也就是说,在某个体系下,所有的定理不能去完备自身。 不可能用某个体系下的定力去解释这个体系下另一个定理的正确性和完备性。比如A->B->C,我们就不能用C去证明A。说这个的目的在于,智能的表现,我认为是在公理上。我们人可以从自然去总结不能够证明的东西。当然,这里我没有限定什么是证明。我假定这里的证明就是我们通常意义的证明。那么,公理就是某个体系的边界,定理在其中。定理再多也不可能达到边界。

说回来,计算机可以进行非常复杂的逻辑运算,前提是在某种算法下。那么计算机可不可能自己产生算法呢?算法从何而来?是一种归纳。也许,某些算法,计算机可以自己产生。我这里没有仔细考虑,但是我感觉类似数学归纳法之类的东西,很有规律性,计算机应该可以产生。其实在这里,数学归纳法本身就是一种算法,一种很程式的东西。数学归纳法去做也就是从算法到算法,不能说明问题。在这里我想起了一个简单的例子,这个例子我是从书上看的,很深刻,很简单。比如,让一个人从1做加法,每次加1。再笨的人,经过一段时间也会发现自己的这个工作没有什么意义,不会有结束的时候。而计算机不会,只要你让它做加法,它会一直做下去,直到停止的命令。问题出在哪儿?问题就在于,人可以跳出现在自己的工作来审视自己的工作,而计算机不会跳出自己的工作去审视自己。换句话说,人是内省的,而计算机没有神经。

这些就是我一时的想法,关于人工智能的。当然,我手上有一本关于数学、计算机、音乐、人工智能的好书,很难,我没看完,所以我也只能说点我自己的看法,很浅薄。

也许,人工智能只能等到生物计算机。

2004年10月9日星期六

秦皇岛游(二)

经过了一天的休整,我们第二天的目标是山海关景区。所谓山海关景区其实就是连同山海关在内的一系列景点,包括“天下第一关”的山海关、长城开端的“老龙头”、孟姜女哭长城的“孟姜女庙”、角山长城等。本来,每个住的地方都有这种山海关一日游的车,但是经过我和她的权衡,觉得还是自己走要方便一些,于是我们还是很“勇敢”地选择自助出行。

早上七点过起来,吃了点头天晚上超市买的饼干。天气还可以,尽管没有第一天那么晴朗,但是阳光还是很灿烂。坐上34路,觉得心情不错。她却似乎睡眠不足,靠着我睡着了。到了四道桥汽车站,基本没有什么等待,我们就上了去山海关的33路汽车。车上学生很多,大多都是去旅游的,不过看来都是当地的学生,比如燕山大学。差不多半个小时的车程,来到了期待的山海关。下了车,感觉和一般的小县城没有什么区别。走了不远,就来到了“天下第一关”。票价令我们都很吃惊,30元一张,有两种票,一种是包括“哈尔滨冰雕艺术展”,另一种是包括“王家大院”。踌躇半天,我们不得已选择了“王家大院”。说到这里,我不得不多说两句。任何一个人来看山海关,相信都是看这个历经沧桑的城楼和长城的,哪个人会来山海关看哈尔滨冰雕?至于什么王家大院,给我的感觉就是为了开发旅游资源而硬开发出来的东西,很难说有什么特色。走上了山海关城楼前的长城上,看不出来这里和一般的长城有什么不同。卖各种小商品的,卖海鲜海类产品的、照相的使山海关上有一种集市的感觉。关上有很多古人的雕塑,都是为山海关的建设做出了贡献的人。不过,这种很粗燥的雕塑难说有什么实用价值,更别说什么艺术价值了。从城墙上看下去,周围的城市显得十分恶心,紧紧得把这个历史古迹包围在中间。为什么就不能还历史真实的颜色呢?说实话,像山海关这样的地方,本就不该去发展城市,好端端的名胜古迹就弄成了公园,而且是一个走过场的公园,实在是痛心。在“天下第一关”的城楼前面照了几张相,时间也接近正午了。我们本打算去所谓的“王家大院”,可惜走了好远,还是没有找到,好不容易找到以后,才发现我们所在的那个门没有开,而我们也没有劲头继续走下去,于是就决定去老龙头。

在来之前,研究地图得知,去老龙头可以坐27路公共汽车。可是真正到了才发现,公共汽车并不好坐,原因是车站不好找,而且也不知道要等多久才能等到一辆。商量半天,决定坐小摩的(摩托车)。结果先开始问了一个摩的,他问我们买票没有,然后就不愿意拉我们去了,弄得我们莫名其妙的。后来再问了一个人,才弄清楚了,原来老龙头就是一个靠海的城楼。当然,这我们来之前就知道了。问题就是,拉车的人给我们说,爬这个城楼没什么意思,还有55元的门票,不如去做快艇,价钱比门票便宜(33元),关键是可以在海上看见老龙头的全景。于是,我和她就决定去坐快艇了。坐着摩的,来到了海边,这个摩的师傅把小摩托车当成了赛车开,车几乎都要散架了。海滩上已经堆了不少的人,总共就两个码头,有几个人在水里面主持着快艇的游客的上下。看了几分钟,我们终于弄明白是怎么回事情了。原来,所谓的这个坐快艇的项目就是当地人自己开展的私人旅游项目,然后和这些出租车司机、摩的司机勾结起来,把游人都“骗”到这里。我这里所谓“骗”,是指这些私人的项目,根本就不存在管理。两个小码头,几艘船在水里,好几个人在水里面吆喝着。本来,要是游人排队上下船,很快,大家就都能走,问题就是在水里面主持的人根本没有一个次序的概念,而这些“拖”也是尽快地想让自己的乘客坐上船,于是一群人就在争抢,游客争抢、司机们在争抢,沙滩上一片混乱。到最后,完全就是看谁更蛮横,谁更没有道理。我们的这个师傅因为人缘不太好,因为脾气不够蛮横,于是我们就只能等。哪知这种等待一等就是两个小时。到了接近一点钟,我们终于上了快艇。这中间还有一段插曲就是,为了上船,游人还得不是被背着上游艇就是自己脱了鞋子趟水上船。我就是自己趟水上的船,她却是被背上去的。坐上快艇,感觉还是可以,开得轻飘飘的,速度很快。到了老龙头附近的水面,快艇停了下来,让我们拍照。于是我们就开始照相,毕竟这些个照片是付出了不小的时间代价的。大约15分钟的时间,我们就坐着快艇回到了刚才的码头。又是自主回到了岸上,我背她上的岸。
等到我们上了岸,安顿好准备去所谓的“孟姜女庙”的时候,才从摩的师傅那里打听到“孟姜女庙”早已经没有通公共汽车了,而且很远,现在所谓的孟姜女庙的地方就是老龙头附近的“娘娘庙”。我们到了“娘娘庙”门口,感觉这个地方也就是一个很普通的庙而已,没有什么特殊的地方。于是只能决定不去这个“娘娘庙”了。

孟姜女庙未果,只能寄希望于最后一个景点--角山长城。打听半天,有各种说法,比如很远,要一个小时的车,比如不太远,二十分钟就到了,等等。终于到了27路车站,附近的旅游咨询人员居然告诉我们没有车,因为人少,车在山上还没有下来。真是不能想象这是一种什么思维。没有办法,只能打车去,花了10块钱来到了角山山脚下。应该说,角山还是一个标准的长城公园。听说要全部爬完要三个多小时,当然,我们没有那么多时间,于是只能爬一部分。不过就是这一部分,也让人很自在。山还是比较陡峭的,爬了一段以后就能很开阔地看见四周的景色,宽广的平原。我们本来就带了吃的东西,原考虑是在外面玩儿肯定没有时间去找吃的,现在看来这种考虑是正确的。终于,在角山上,我们坐了下来,打开我们吃的东西吃了起来。坐在长城上,塞上的风果然厉害。但是心情却是很舒畅。这种闲适和坦然恐怕是我以前少有的。我们最终只走到了一个比较大的烽火台。这个烽火台十分陡,上下都是一个梯子,要一步一步慢慢爬上去。很多人爬着都十分困难,不过我们还好,上下都挺轻松的,毕竟是年轻人嘛。

大约快5点的时候,我们就往回走了。又坐了出租车到了33路车站,好不容易挤上了车。开了半个小时多的时间,到了秦皇岛火车站,又坐上34路赶往北戴河。她一路上都靠着我睡着,是的,一天的时间全在外面跑,累得很。回到北戴河已经是晚上了,宁静的小镇。我们在一个小馆子随便吃了一点东西逛了一下夜市,决定去看看晚上的海。哪知才走了几步就到了海边,并且发现了我们第三天的目标--老虎石公园。这种公园式的沙滩着实很没有意思,所以我们当时就决定看第二天的情况,如果人太多,我们就不去老虎石了,又去第一天看上的那段野海滩。随便逛了一下,就回去休息了。

秦皇岛游(一)

我自己都不清楚是否发现了旅游的乐趣,但是事实上我现在十分喜欢来自大自然的那种闲适和自由。这次去秦皇岛,应该说是计划已久。第一,是我从来没有看见过大海,第二,是和心爱的人利用假期放松放松的确是一件非常快乐的事情。秦皇岛位于河北境内,其间最著名的景点莫过于北戴河和山海关了。这两个景点都是慕名已久。山海关应该说是小时候心中的一种历史情结的延续,因为吴三桂带清兵入关的事件我自己还是很熟悉的。至于,北戴河,恩,了解也就限于是一个旅游度假的好去处而已。看过很多北戴河的介绍,说的都是老一辈的人如何如何把这个地方变成一个官方的旅游度假村的,心里不是很喜欢这种都市化的旅游景点。

火车是早上7点50分的。离开学校却是早上5点过的事情了。为了能够赶上火车,头一天已经给门房说了帮我开门的事情,基本收拾好了东西。晚上看下载的电影,看到很晚,大概有1点过。早上4点40起来,洗漱,收拾一下东西。然后就披着夜空离开了宿舍。她已经在银行门口等我了。第一次在这种漆黑的夜晚走在路上,心里怦怦的跳。来到919汽车站才发现,这么早居然还有不少的人等车。可能国庆期间大家都出去玩儿吧。车一边开,外边的天也就渐渐亮了起来。地铁里面的人也不少,看来都是旅游的。不过,整个行程还算顺利就到了北京火车站。这个时候,天已经大亮了,大概也有六点五十了吧。在候车大厅里面坐了一会儿,我们就进站了,蛮快的。这次去秦皇岛的车是特快,有点旅游专列的性质,双层,软座,挺舒适的。说到这里,我还要提一下我们这次带的行李。她和我各带了一个书包,大多都是装的衣服,她是两件毛衣,我则带的比较多,一件外套,一件毛衣和一条裤子。唯一没有带的就是牙膏。火车准点出发,沿途看见的还是很典型的北方农村的样子,灰扑扑的,干燥。

两个多小时的火车,快要到秦皇岛的时候,我们参考了列车员的建议,没有在我们预先设想的秦皇岛站下车,而是在北戴河站下车了。原因有这么两点,第一,秦皇岛只是一个工业城市,没有什么旅游所能住得旅馆;第二就是秦皇岛并没有什么景点,而北戴河的景点多一些,住在那里药方便许多。在北戴河站下车以后,我们马上就到售票大厅去买返程的票。售票大厅里面已经挤满了人,看来大家都是有备而来。除了很多买票的游客以外,还有许多的拉客的“拖”。这个是最令我厌恶的,任何人都觉得这是一种类似抢劫的行为,本来好好的心情有时候都拿给这些人给弄糟了。和她商量半天,发现如果买三号的车票回来的话,很可能北戴河的景点就玩儿不了什么,于是就打算住三天,第四天早上再走。买了火车票,钻进了一个出租车,因为火车站离北戴河市区还有几公里的路程,而公共汽车的确又不方便。

出租车沿途都是各种别墅宾馆,不知怎么的,觉得很不舒服。感觉整个北戴河都是一个腐化堕落的场所。出租司机很“热心”,给我们介绍各种档次的住处。听了一些介绍才发现,十一期间,北戴河的旅游状况其实并不好。因为,这里本来就是一个海滨旅游圣地,自然,游泳是一个很重要的项目。可是,到了十月份,天气的确已经不允许下海游泳了,游客量当然也就上不去了。我们也的确发现没什么人。但是就是这种情况,问了好几家地方,价格都不菲。稍微便宜一点的地方基本就没法住,而看得顺眼的地方又是承受不起。当地的人都想着十月二号、三号也许会来很多人,所以都不愿意象我们这样住三天却不愿付高价的人。找了半天,经过讨价还价,终于在一个叫“电子工业部疗养院”的地方安顿下来,一天80块钱。服务员一再问我们开不开发票,是不是个人消费,足可见这里借公费旅游的人一定不少。还不到12点,不管怎么样,旅游的最大问题--住的问题已经解决了。心里面一块石头落地了。

稍微整理了一下,就和她拿出地图来研究行程。发觉秦皇岛的“秦始皇求仙拜海处”这个景点很孤立,不好安排,于是就决定当天下午就去这个地方。这里稍微说一下,秦皇岛、北戴河和山海关这几个地方的地理位置。秦皇岛是河北省的一个市级城市,北戴河和山海关分别是秦皇岛的区。北戴河在秦皇岛西面约10多公里的地方,山海关则在秦皇岛的东面20余公里。其间都有公交车,很是方便。从北戴河的汽车站坐34路,很快就行驶在了去秦皇岛的路上。大概出了北戴河没多远,就到了北戴河的一个野生动物园。我和她感兴趣的倒不是这个野生动物园,而是面对着这个动物园的海滩。是的,那么靠近公路的海滩,人也很少。我和他当机立断就决定等会儿从“求仙拜海”处回来以后就到这里的野海滩走一走。大约四十分钟,来到了秦皇岛市区,应该说和昌平之类的小县城没有太大的区别。这中途还有一个小插曲,我们不知道在哪里坐去“求仙拜海”处的公共汽车,于是就问34路车的售票员。令我们惊讶的是,售票员居然不知道。最后还是我们自己研究地图研究出来的。出门在外,最能依靠的就是自己。坐着8路车,就来到了所谓的“秦始皇求仙拜海”处。其实就是一个很普通的公园,票价不菲,30元。根本就没几个游人。实话说,作为公园的标准来说,这里的环境还是不错的。公园里面还有一个战国城,总觉得有一点牛头不对马嘴。用很闲适的心情在公园里面走着,心里面还小心翼翼避免很快就看到所谓“求仙拜海”的碣石,以防太快就把主题给看了。可是没有半个小时,我们还是不经意就来到了碣石面前的一个大殿。大殿是秦朝的风格。门口有两面大鼓,我们用瓶子去敲击这两面鼓,发出沉闷的声音。登上这个大殿,可以看见几百米外的大海。应该说,我心里还是挺激动的,毕竟看见了久违的大海。湛蓝色,非常平静,非常辽阔。碣石其实就是我们非常熟悉的曹操的“东临碣石,以观沧海”那里面描写的碣石。只是,基本以走马观花的速度参观了碣石博物馆,才发觉现在的这些石头都是八十年代重新修的,而那几块破石头,无论如何也让我无法相信这就是秦始皇年代的东西。和所有的旅游一样,照了很多标志我们来过此处的照片以后,我们离开了“求仙拜海”处。来到了公园前面的一点的海滩。应该说这块海滩并不怎么好,有很多的岩石,但是还是有很多人在这里玩耍。我看到了海带,贝壳。虽说以前都见过,但是看到这么原生状的东西,还是很让人兴奋。远处就是秦皇岛码头,看得见装货的吊车,以及大型货轮。这些景象终于实在的映射到了我的脑海里面,再也不是图画。在这个海滩玩儿了一会儿以后,我们决定去那个来的路上看好的野海滩。

坐着同样的车,我们又离开了秦皇岛,准备在一个叫“狼牙山”的地方下车。售票员显得很惊奇,因为可能觉得这种地方应该没有乘客下车才对。当我们来到“狼牙山”的时候,这种想法终于得到了证实。的确,这个车站很是偏僻。周围什么都没有。跳下公路,没走100米,就来到了这片野海滩。这片未经开发的海滩位于秦皇岛和北戴河之间。没有任何人工的痕迹。沙滩,海鸥和贝壳,一切都那么自然。站在海面前,人觉得无比的渺小。是的,内心似乎得到了洗礼,私心杂念都得到了清除。在这样的蔚蓝的大海边,你还能想到什么呢。因为天气不是很暖和,我们只能稍微的去触摸一下海水。不过,这样已经都能感受到了海的博大。我们在沙滩上长久得驻足。是的,海是看不够的,特别对于我这样内陆的孩子来说更是如此。天慢慢的暗了下去。天边的云彩逐渐的成了紫红色,海水也分成了几层,深色,浅色。有时候美景让人深深的被震撼。我和她在海边就这么看着这些云和水,慢慢等着太阳落下去。一些小渔船和白色的海鸥点缀着这一切。这片野海滩真的让人感到了愉快和自由。等到太阳完全下去了以后,我们才沿着这片海滩走了一段路,然后乘坐34路回到了北戴河。

回到住的地方,一天没吃东西,我吃了一包方便面,她则趁这个功夫洗了一个澡。我们又出来找晚饭吃。路上根本没什么人,气温却是惊人的低。好不容易找了一个馆子,发现里面的人不少。原指望这里的东西便宜一些,结果却是非常贵,一条烤鱿鱼25元!本来,她很喜欢吃这些烧烤的海鲜,结果只能弄了一条鱿鱼和一条比目鱼吃,就这样,当天晚上还是花了50多元,关键还是没吃饱,吃了以后,我又去买了一包方便面。看来,海边的海鲜不一定都很便宜。她说去年她去青岛的时候,这种鱿鱼是1元1条。根据我的估计,因为,青岛是一个渔业很发达的地方,自然这些水产品就要便宜很多,而北戴河本来就不是什么渔业城市,旅游附带的这种小数量的渔业不足以让价格降下来。我们决定后面几天都不吃海鲜了。

累了一天,回到住的地方,她很快就睡着了。我也吃了面,看了一会儿电视就睡了。

2004年10月5日星期二

假期归来

虽说国庆假期还没有结束。但是我的假期安排却已经结束了。这次和她到秦皇岛玩儿了四天。应该说很高兴。同时还是有很多收获。也有一些意外。

我会陆续把这次经历写成游记的。我的朋友们都可以看到。

另外,计算机竞赛的事情有了一些眉目。我们学校从这学期开始准备去参加计算机编程大赛了,也就是所谓的ACM。我联系了我们班主任,虽说主要是大三的同学参加,但仍然不排除有好的大二的同学能够参加。我对自己还是很有信心的,毕竟我以前有这方面的成绩和经验。

网络中心的事情现在还是很多,我自己感觉正在一个上升的阶段,具体的情况我会有时间说的。

2004年9月18日星期六

设计模式

最近开始看所谓的很富有魅力的书《设计模式》。感觉比较难,但是也有很多体会。有一句话非常引人深思:“面向对象编程是面向借口的编程。”
越来越体会到,设计在软件构建中所占的比例是多么的重要。可以说设计就是软件的核心。

2004年9月5日星期日

有些事情真的很难料

下面是给CrendKing的一封信,就当作最近这些事情的一个概述了吧

这些天的遭遇真的让我是一辈子都忘不了,也给你说说,让你也知道社会的某一个方面。我上个星期被学校召回。开始我不知道是什么目的,因为召我的那个马老师说是已经给我分配了任务。于是我星期五到了北京,应该说开局非常不利,在车站把手机弄丢了,当时就十分气愤,但是也没有办法,折腾半天到了学校。宿舍没有电,热水器也是坏的,当然这些只是一些客观的条件问题。我休息了一下,就去找管乐团的肖老师,因为马老师在电话里说让我联系这个老师。我以前也只是听说过这个老师,吹唢呐的,水平还可以,现在负责我们学校那个管乐团“鼓号队”。我找到这个老师,一个年轻小伙子,比我大不了多少。我问他给我安排的是什么任务的时候,他说出了我这辈子可能都不可思议的话,学校安排我学中音号!意思很明确,学校不需要钢琴,然后又觉得把我放在一边可惜了,于是就想出来让我是不是能去学学中音号,按照这个肖老师的意思就是,现在管乐团缺少的是旋律声部,考虑到我是弹钢琴的,就让我去学中音号。我给他说,我不适合去学中音号,他就说,那就圆号吧,我说,这也差不多,真的不适合我,然后我就说了一句,就算要学,也要学双簧管之类的,他马上就说,我们乐团不需要双簧管,一个乐团不要双簧管,我第一次听说。他有一点不高兴了,就问我,那我学什么。我说,我是钢琴特长生,其他东西不是我特长,所以,我不能去学,关键是我也学不好,如果非要学,我想学指挥。他很蔑视的说,就你学指挥?那把我放到哪里?意思说,你肯定学不会指挥。我说,我也没说我非要学指挥,但是是你自己问我想学什么的,不学我也无所谓。说了半天,大家不欢而散。我回宿舍就觉得很气愤,为什么非要我去学这些乐器?弹不成钢琴我一点意见也没有,说实话,我就没指望我们学校能够用上钢琴,但是我自己练我的,也没什么,可你不能强迫别人去学其他东西吧?

晚上我给那个马老师打了一个电话,她的态度非常蛮横。第一,学校根本就不需要钢琴特长生,就算需要,也就需要一个,供合唱团伴奏用,现在已经有人了。第二,她没有明说,但是也就是这个意思,那就是我的水平很差,够不上去弹独奏。第三,学校现在需要的是合唱和管乐团,所以必须有人要去。第四,就是每一个艺术特长生必须要有一个安置,不管是什么位子。现在的意思就是,让我不要搞钢琴了,改学其他的。当时,我给那个老师说,我不太适合这样的不符合我特长的事情。结果,这个老师极其轻蔑的说,你们艺术特长生就是学校要你们怎么样就怎么样。后来我实在没办法,就给那个老师说我再考虑一下,她根本就不容我多考虑。说什么我们学校请最好的管乐老师来教我们,三个月就能够如何如何。我当时就给那个老师说,我不相信任何一个领域三个月能够学出来,她马上也觉得自己说错了,所以也就说,当然,三个月的意思就是说有一点点感觉了,我想,废话,三个月没有感觉那也就是在是太有问题了。她又给我说,我们学校管乐团和合唱团的很多同学都不懂五线谱,现在不照样在里面吗?似乎不懂五线谱还是什么光荣的事情。我觉得简直在开玩笑。但是我觉得跟这样的老师也没什么说的了。 当天晚上我还联系了一个小提琴的特长生。学校让她改学长笛,她相当不愿意,但是也没办法。还有她说,那个管特长生的老师给她说的,说她和我的水平都很差,学校拿我们没办法,所以还是改学其他的比较好。这个问题相当奇怪,我从来没有在学校公开演奏过。而且这个管我们艺术特长生的老师是学声乐的,她怎么会知道钢琴的好坏,况且就算我演奏水平很低,你也可以当面给我指出来,为什么不当面给我说?哪里弹得不好,哪里处理有问题,我都可以改正。可是她不当面给我说,背地里说我,这是什么意思?而且这些老师对待人的态度真是有侮辱人的性质。当时我的打算是第二天再去找一下第一次的那个姓肖的老师,看能不能有解决的办法。 第二天,我和那个小提琴的特长生一起去找那个肖老师。那个老师正在看着那些学打鼓的人,这些都是学二胡的特长生(也真有我们学校想得出来的)。哪知还是和这个老师没法沟通,我说我不适合学这些,他就老问我想学什么。弄得我都不知道回答什么了。说到最后根本没法再继续谈话,所以我也就从他的办公室出来。哪知我和那个小提琴没走两步,这个肖老师就追出来,先问那个拉小提琴的去还是不去吹长笛,然后就指着我问我打不打鼓。我说我不是那个意思,他根本就不听,就问:“你到底打不打这个鼓?”我从来没有见过这样逼迫别人干什么事情的人。于是,我很理所当然的说,我不打。他说我们不需要你,然后就用一种很侮辱的口气说,你是特长生我要你干什么就要干什么。说得我立马就火了,你也知道我根本不可能在外面发火吵架的,但是那天确实是忍无可忍。终于和老师吵了起来。最后他说,我不要你。我说,我根本就没有想过要来你的什么破管乐团,我的钢琴水平再差也比里面吹一两个月的号要强很多。说完我就走了。 当天我觉得实在是没什么意思,就回我姨妈家了。说实话,我到今天也搞不懂学校为什么要这样安排特长生。中午我母亲给那个马老师打了一个电话,出人意料的是,她的态度发生了一百八十度的转弯。说什么不是不需要,而是暂时人多了,因为毕竟有了三个弹钢琴的,位子就只有一个。而且她还说她很喜欢我,一直就想我去合唱团唱歌。什么话都说得出来,这老师也是绝了。后来我妈看她态度有所缓和,就让我晚上给马老师打一个电话。我想也是,没必要给学校弄那么僵。晚上我给她打电话,也是,态度出奇得好,从来没见过她态度那么好。可能她觉得害怕把这件事情给闹大。她最后说,安排我一个伴奏的事情做。我一想,虽然伴奏不怎么样,不过比吹号要好很多了。于是我还谢谢她。打完电话一个多小时后,她给我发短信,让我去我们学校城里的校区去听一下合唱团。我想,听一下也无妨,于是就答应了。

第二天,我早早的就来到了我们学校城里面的校区。意外的是,马老师一来就恢复了本来的面目,说,考虑半天,还是让我在合唱团里面唱歌算了。由于早上人很多,所以,我也不好和她理论,但是我相当不情愿。就这样,我在合唱团待了一上午。别人都在分声部了,都在练习,我根本不知道唱什么,唱哪里。我傻呆着待了一上午。中午去找了我们网络中心的老师,看能不能帮我解决一下问题,他人很热情地帮我解决了部分问题。但是他建议我还是在合唱团待下去。我下午又去了合唱团。马老师非要我唱,我也就给他唱了,的确,当时我的抵触情绪非常大,对音乐,对唱歌。我当时就决定,我不管发生什么事情,都不能再在这个合唱团待下去了。马老师也知道我想走,非要我住在学校本部,不让我走。大有一种“绑架”的味道。实在想不出来,我既然呆在合唱团对大家都没有好处,干嘛还让我在那里。事实上,她也无非就是想让我呆在里面,好展示她把我给安置了。 终于,我第二天请了一个病假,我不去了。不管有什么处分,我都不怕。本来这件事情就是她无理取闹。我完全就是占着道理,尽管我知道有可能我最终会被她处理。但是我不怕。 当然,这也就是一个大概,具体还有很多情况。不过也都差不多了。我觉得你可以看看,这个社会有很多不公平和想象不出来的事情。

2004年8月12日星期四

Fantasie Beta

第一主题很明了地放在了那里。问题是如何过渡到第二主题呢?按照一般的规则就是写一个连接部。可是这个连接部是怎么样的呢?

我现在所做的就是构思了一个很“暴力”的连接部。所谓暴力就是说很炫耀技巧的音群。而且很肖邦、李斯特式。

拿我平时的审美来说,最讨厌这种曲子,不过我还是要看看自己有没有能力去写一个李斯特的东西。

第二主题很昏暗,有一个很奇怪的转调。

2004年8月2日星期一

贪吃蛇进度(4)

基本解决了动画闪烁的问题,其实就是修改了一点点代码。
注意DrawSnake这个函数。它的作用是绘制蛇的像素的。以前的作法是绘制所有经过计算的点,然后擦屏。这样自然有闪烁的问题。进一步分析蛇的移动,发现每个状态和前一个状态,只有第一个像素和最后一个像素有变化,于是重写代码,果然就没有了闪烁的问题。
void DrawSnake()
{
int i;
int j=0;
putpixel(me.dots[0].posx,me.dots[0].posy,DEFAULTSNAKECOLOR);
putpixel(me.dots[MAXSNAKELEN-1].posx,me.dots[MAXSNAKELEN-1].posy,DEFAULTBACKCOLOR);
}

2004年7月31日星期六

贝多芬的《第一钢琴协奏曲》

米开朗基利的手刚落下,奇迹就出现了。层次那么清楚,深思熟虑的落健,和几乎幽默的装饰音,都让人感到了大师的风范。当然,贝多芬的这个协奏曲也并非等闲之辈。很多人觉得这部作品受了海顿、莫扎特等人的影响,但是那种成熟的贝多芬风格已经在这部作品中展现无遗。以前听过布伦德尔的演奏,速度更快些,但是缺少这种幽默感。对,笑,缺少微笑,一种微笑面对生活的态度。是的,很难想象贝多芬的微笑,但是又在意料之中。只有伟大的人才能真正在内心中笑得出来。米开朗基利很让人震撼。不是典型的德奥风格,不是那种不问世事的冷漠,而是在微笑里面透出一份关爱,那种几乎察觉不出的情感的流逝和那种几乎无处不在的浪漫让人觉得既无法理解,当同时又那么自然。第一乐章几乎完美。第二乐章似乎是一种看透红尘的无所谓。但是那种谈话似的调侃却又被米开朗基利敏锐的把握到了。第三乐章排山倒海之势让人感到了作曲家的伟大和钢琴家的创造力。伟大!贝多芬的钢琴协奏曲真的都是精品。

2004年7月30日星期五

贪吃蛇进度(2)

目前把事件机制终于做好了。所有的操作都封装到事件里面。这是头文件snake.h:
/* Keyboard definition */
#define ENTER 13

/* Macro for quick control */
#define NEWEVENT (EventLink)malloc(sizeof(event))
#define REGISTER(name,in) tempevent=NEWEVENT;\
tempevent->interval=in;\
tempevent->timer=0;\
tempevent->invoke=name;
/* The prototype of bool type */
typedef enum
{
true,
false
}bool;


/* The prototype of directions */
typedef enum
{
up,
right,
down,
left
}direction;

/* The prototype of a point of the snake */
typedef struct
{
int posx;
int posy;
direction dir; /* The current direction of this point */
}point;


/* The prototype of the snake */
typedef struct
{
point dots[MAXSNAKELEN];
}snake;

#ifndef __SNAKE

/* prevent multiple includes */
#define __SNAKE
/* The prototype of the event */
typedef struct
{
long interval;/* The interval of the event occurs */
long timer;
void (*invoke)(); /* The function pointer to the invoke action */
}event;


/* The prototype of the eventlist */
struct eventlist
{
event *eventnow;
struct eventlist *next;
};


typedef struct eventlist Node;
typedef Node *Link;
typedef event *EventLink;



int screenx=0;
int screeny=0;

void Init();
void EventHandler(Link);
void EventInsert(Link,EventLink);
Link EventCreater(Link);
void EventFree(Link);

void Kernel();

/******************************************************/
void Kernel()
{
}

void EventInsert(Link eventhead,EventLink newevent)
{
Link pointer;
Link newlist;
pointer=eventhead;
while(1)
{
if (pointer->next==NULL)
{
newlist=(Link)malloc(sizeof(Node));
newlist->eventnow=newevent;
newlist->next=NULL;
pointer->next=newlist;
break;
}
pointer=pointer->next;
}
}

Link EventCreater(Link eventhead)
{
Link newevent;
EventLink tempevent;

int i;

eventhead=(Link)malloc(sizeof(Node));
/* Create event list */
if (eventhead==NULL)
{
printf("Memory allocate Failure!!\n");
}
else
{
tempevent=(EventLink)malloc(sizeof(event));
tempevent->interval=1;
tempevent->timer=0;
tempevent->invoke=Kernel;
eventhead->eventnow=tempevent;
eventhead->next=NULL;
}
return eventhead;
}

void EventFree(Link eventhead)
{
Link pointer;
EventLink tempevent;
while(eventhead !=NULL)
{
pointer=eventhead;
eventhead=eventhead->next;
tempevent=eventhead->eventnow;
free(pointer);
free(tempevent);
}
}
#endif

这里面没有什么解释的。Link EventCreater(Link)就是建立一个链表存放所有的事件。void EventInsert(Link,EventLink)是一个添加事件的函数。void EventFree(Link)是最后释放链表的函数。
下面是主程序snake.c
#include
#include
#include
#include
#include
#include
#include

/* Standard macro for quick caculation */
#define SNAKEUP if (me.dots[i].posy==0)\
me.dots[i].posy=getmaxy();\
else\
me.dots[i].posy--;\

#define SNAKEDOWN if (me.dots[i].posy==getmaxy())\
me.dots[i].posy=0;\
else\
me.dots[i].posy++;\

#define SNAKERIGHT if (me.dots[i].posx==getmaxx())\
me.dots[i].posx=0;\
else\
me.dots[i].posx++;\

#define SNAKELEFT if (me.dots[i].posx==0)\
me.dots[i].posx=getmaxx();\
else\
me.dots[i].posx--;\


/* The definition of keyboard */
#define KBUP 72
#define KBDOWN 80
#define KBRIGHT 77
#define KBLEFT 75

snake me;

/* Registry Events */
void Controler(); /* The main keyboard controler */
void DrawSnake();
void Calculate();

/* Registry Method */
void RegisterEvents(Link);





int main(void)
{
Link head;
int gdriver=DETECT,gmode;
/* Init graphic mode */
initgraph(&gdriver,&gmode,"");
Init();
head=EventCreater(head);
RegisterEvents(head);
EventHandler(head);
EventFree(head);
closegraph();
clrscr();
return 0;
}

void Controler()
{
char controlchar;
if (kbhit())
{
controlchar=getch();
switch (controlchar)
{
case ENTER:exit(0);break;
case KBUP:me.dots[0].dir=up;break;
case KBDOWN:me.dots[0].dir=down;break;
case KBRIGHT:me.dots[0].dir=right;break;
case KBLEFT:me.dots[0].dir=left;break;
}
}
}

void Calculate()
{

int i,j;

for (i=0;i<>
{
if (i==0)
{
j=0;
}
else
{
j=i-1;
}
switch(me.dots[j].dir)
{
case up:SNAKEUP;break;
case down:SNAKEDOWN;break;
case right:SNAKERIGHT;break;
case left:SNAKELEFT;break;
}
me.dots[i].dir=me.dots[j].dir;
}
}

void Init()
{
int i,j;
int sx=DEFAULTSTARTX,sy=DEFAULTSTARTY;
randomize();
for (i=0;i<>
{
me.dots[i].posx=sx;
me.dots[i].posy=sy;
me.dots[i].dir=up;
sy++;
}
screenx=getmaxx();
screeny=getmaxy();
}

/* Draw snake */
void DrawSnake()
{
int i;
cleardevice();
for (i=0;i<>
{
putpixel(me.dots[i].posx,me.dots[i].posy,DEFAULTSNAKECOLOR);
}
}

void RegisterEvents(Link head)
{
EventLink tempevent;
REGISTER(Controler,1);
EventInsert(head,tempevent);
REGISTER(Calculate,1000);
EventInsert(head,tempevent);
REGISTER(DrawSnake,1000);
EventInsert(head,tempevent);
}

void EventHandler(Link eventhead)
{
int i;
Link pointer;
while(1)
{
delay(1);
pointer=eventhead;
while (pointer!=NULL)
{

pointer->eventnow->timer++;
if ((pointer->eventnow->timer)>=(pointer->eventnow->interval))
{

/* Invoke current event */
pointer->eventnow->invoke();
pointer->eventnow->timer=0;
}
pointer=pointer->next;

}
/*if(kbhit())
{
if (getch()==KBUP)
break;
}*/
}
}
解释:void RegisterEvents(Link)是想注册事件的函数。这个函数是对void EventInsert(Link,EventLink)的更高级的封装。void Controler()是控制键盘的函数。void DrawSnake()是控制绘制蛇的函数.void Calculate()是计算蛇当前位置的函数。

下一步的任务就是使蛇准确按照键盘的输入移动。目前的移动有问题。

2004年7月28日星期三

灵山游(二)

晚上我和她一起看了《钢琴家》。很不一样的感觉。在那种环境下,两个人偎依在一起看一部生命的电影。有时候生活美得让你自己都觉得不可思议。有时都害怕时间的流逝,觉得要静止了才好。不过看完以后很快就睡觉了,一夜都睡得很好。所谓一夜,也就是三个小时。

早上六点过起床,一点都没有疲劳的感觉。早上吃的东西还是很不错的。山上的早上笼罩着一层雾。很遗憾,天气似乎不是很好。要是照相的话,也许就没办法了。吃了早餐,刚刚七点过,我们就上路了。一条很不起眼的小路,开始了上山的过程。北方的山再险峻也比不过南方的,特别是四川的。走了很短一段路,我和她就开始犹豫要不要做缆车。因为我们的时间不是那么的宽裕,所以,传说中的四个小时的山路我们不太可能都走完,而我们又特别想爬到最高点,毕竟好不容易来一趟。120元的缆车费,带着我们在雾气的绿草上慢慢地前进。因为是早上,还不是很多人上山。周围很是安静,其实景色还是很美的。关键是这份闲适很难得。是的,这份自由经常不可求。说实话,在缆车上我是感到不太安全。可是,悬在半空的感觉却是很好的,特别是和她在一起在空中的那种拥抱,真的让人觉得很虚幻。来到了半山腰,雾气更大了,伴随着的是寒冷。开始还有租军大衣的想法,不过我们一听价格还是觉得既然在爬山,运动着肯定不会太冷的。我倒是买了一个拐杖,走起来似乎要轻松些。能见度非常低,走在通向云中的山路上很有仙境的意象。五米之外就是一片白。只有这样的山路才让人感觉是一种享受,至少没有一种公园的感觉。走了不久,就遇到了山民卖烤包谷和烤羊肉,买了来吃,很有味道。越往上走,伴随着雾气和寒冷的还有风,那种刺骨的寒风,很难想象七月的北京会有这种地方。灵山不是单纯的高山草甸,而是在草甸上会突然出现很多嶙峋怪石。还有就是漫山遍野的各种野花,很纯洁的颜色。这种野花让我想起了四川的四姑娘山上的野花,四川的花还要更艳丽一些,北方的花则相对朴实很多。其实也没有走多久就来到了最高峰,2303米,北京的最高峰。很奇怪,这个灵山有很多喇嘛教的东西,很多西藏的东西,连最高峰上也有一个很西藏的石头堆,就是扔一个石头上去就会有一个梦想得到实现。我和她都扔了好多石头上去。随后我们来到石头堆后面坐下,石头堆后面的风小得多了。两个人坐在一起享受单独的时光实在是很美的事情。下山的路走得就更自由了,我们离开石板路,到周围的草地上,怪石中照相,乱跑。的确,以前这种放松的状态是我想都不敢想的,是她让我能这么自在。可是时间又是过得那么快。下山还是坐缆车,不过却有一点找不到上山来的感觉了。到了山脚,还是做一两小面的,来到了坐公共汽车的地方。灵山之行算是到了尾声。

需要补充的是,我们回去的路上遇到了北京突降暴雨,很费了一番周折才回到学校。连地铁都堵了一个多小时,不过因为我们都很高兴,所以这些都根本不值得一提了。

2004年7月10-11日

2004年7月27日星期二

广安之旅

(这是给她的一封信的部分内容,就当是游记了)下午六点过终于从广安归来。恩,还是有很多的感想。总的来说,由于是跟着大人去玩儿,所以更像是一种任务。去的人都是我妈妈的大学同学。广安是四川的一个地区(一种行政单位),以前重庆没有划出去的时候地处四川的中部,现在则是在川东了,距离成都大概三百公里的地方。从成都出来一路的绿绿茵茵,以前没有高速公路(成都到南充、广安、达州)的时候,听说这三百公里要走一天。以前从来没有到过四川中部的这些地方,这次一看还是很喜欢的,就是那种很自然的小丘陵,和没有那么多现代化的城市气息。

广安是邓小平的故里,确切的说,邓小平从他十多岁离开那里就再也没有回去过了。我妈大学的一个同学在广安当市委副书记。所以,一到广安就是最高档次的接待,让人觉得很不自在。广安市在渠江边上,现在新县城修得很好,好得很多地方都比成都漂亮。当然,中央肯定投了很多钱,比如有中国最大的主题广场--思源广场,吉尼斯世界纪录的什么千年鼎。这个我等会儿再来评论。中午是在一个五星级宾馆吃的。都是我这种穷人没见过的菜肴,没吃饱也没吃好。我觉得这样出来玩儿很别扭。大人们自然很高兴,市委书记亲自给他们敬酒。最好笑也最让我深思的就是,市委书记手下的好多人也忙里忙外,我们几个小孩也被伺候得让我们自己都觉得不习惯。吃了饭,就由市委书记和手下一群什么什么书记局长带着我们去了才开发出来一个旅游景点--华蓥山大盆景风景区。华蓥山距离广安二十多公里,是四川东部最高山。如果你看过《红岩》,你就可能很熟悉华蓥山游击队,什么双枪老太婆,什么江姐都是华蓥山游击队的。我外婆的一个好朋友(现在还在,我还经常去)就是华蓥山游击队的。当然,开发这个旅游景点让我觉得很不伦不类。因为按理说,这个旅游景点不是很好,风景一般,就是喀斯特地貌,不过和云南、桂林的差远了,也就是有一些奇怪的石头和天然的树林而已。恩,还是可以啦,至少比较凉快。倒是有一个景点还可以,就是一个大天坑。所谓天坑就是一个山之间的坑,但是却不积水,因为水可以渗下去,很奇怪。其他的就没什么了,两个多小时,就当锻炼了身体吧。总之,这个景点我觉得就是因为要配合邓小平故里这个主题,硬着开发的一个景点,所谓配套的。玩儿了华蓥山,就到了一个农家山庄去吃饭,都是野味,还可以,就是觉得东西很杂。当然,农家院的东西要比中午的那些吃不来的山珍海味要好得多了。

吃了东西又返回广安县城,到思源广场观看所谓中国最大的水幕电影。水幕电影就是类似音乐喷泉,不过除了音乐还有就是把电影投影到水上看。我们去的时候已经演完了。当然,由于有领导在,所以破例又给我们演了一次,然后我们做在广场中间贵宾席坐下。真的很让人不自在,因为周围的老百姓只能在远处站着看,就我们二十多个人坐着看,然后还有保安,更可笑的是广播里面放音:“欢迎领导观看”。我当时感到十分的羞愧。不过,这个水幕电影确实很不错。气势和精彩程度相当让人激动。这套设备是几千万引进的。看了这个,晚上又返回华蓥住在一个当地最好的宾馆里,包了一层楼。市委底下跑腿的累得够呛,还让我们几个小孩去洗桑拿,被我们坚决拒绝了,当然本来我们几个小孩都在看你推荐的《海上钢琴师》。今天早上八点起来,广安的气候很像重庆,早上一起来就很热了,坐车从宾馆出来到了邓小平故居。在我想象中,故居肯定是在一个小城镇里面,结果让我大吃一惊的是故居居然都是一个公园了!也就是说就那么孤零零的一座房子,周围都重新修成很现代化的公园了。我旁边的人都说难道邓小平家是地主庄园? 还是特殊化,别人游人都是走路,我们坐着电瓶车。理所当然,公园修建得很政治化。首先,公园绿化很好,周围的树林都是中央各部门捐建的,然后每个部门捐建的树林前面有一个石碑,刻着某某部门。我细细看了一下,总之好像大家还争先在这个地方捐建树林。可以想象,这也是一种政治荣誉。其实这个公园里面没什么东西,就是一个邓小平雕像,现在还没有安放好,要等八月22日一百周年诞辰的时候由中央领导揭开。然后就是一个邓小平纪念馆,也没有开馆,还在布置。当然我们又因为特殊的原因,所以进去参观了。就是邓小平的生平展览。很现代化的纪念馆,我看比北京任何一个展览馆都要好得多。特别说一下的还有就是纪念馆这个建筑修的还不错。是一种很抽象的建筑,不像北京那些四四方方的建筑。纪念馆以后就是正题:故居。故居自然经过翻修,不过里面的东西却没有动过,还是那些破破旧旧的东西,这个出乎我的意料。看完了故居也都中午了,又拉到邓小平的那个村子--牌坊村(就在这个公园旁边)吃饭。整个牌坊村都经过完全设计并且修建。都是那种很假的古建筑,一排一排的,所有的农民都住里面。看上去很不自然。又是在一家类似农家乐的地方吃饭。还凑合,大人们就是喝酒。很快就踏上了返回成都的路。我也混混沉沉的睡去了。 下面说一说我的感想。我的第一个感想就是,如果邓小平在世,那么他的家乡绝对不会这么搞。首先,他肯定不会同意。这完全是和他的精神相违背的。整个广安打的就是“邓小平牌”,就是所谓的“伟人游”。邓小平成了一个发财致富的品牌。显然,这个肯定是务实的邓小平所不能接受的。这也是一种造神,一种扭曲的个人崇拜,包括华蓥山旅游区的开发也是所谓“伟人游”的一部分,让人觉得很多余,很浪费资源。第二个感想就是,为什么广安不好好搞建设,而要去搞很多的政绩工程,很多面子活儿。

乍一看广安,比成都,甚至比北京都要好,现代化程度都要高。城市里面的交警都是女警察,非常好看。可是,我们所见到的仅仅是新城,也就是拿出来顾面子的城区,老城区在新城区的旁边,我想肯定更多的老百姓是住在老城区里,那么老城区的生活是什么样子呢?还是新城区这样的花天酒地吗?不可能吧。广安是四川的穷地方,这个根本不容质疑。问题是,那么多的钱都去弄各种政绩了,真正的发展在哪里?到处都是邓小平的语录“发展才是硬道理”。我却对广安的发展深表怀疑。

第三个感想就是,我终于领会到了腐败旅游,终于知道了什么是特权化。同时我也知道了,当官或者说是走仕途有多么多的应酬是怎么回事了。本来,就是一群大学同学聚会。可是弄成了招待首长的级别,很多与这个根本没有关系的人参与进来,比如我说过的什么什么局长,什么什么区委书记。然后吃饭就变成了政治化的聚餐。这些什么什么长还给我们小孩敬酒(我当然没喝),我都不知道这是哪儿跟哪儿。一个市委书记的大学同学聚会要搞成这样,地下的干部不去工作,而是陪玩儿,陪吃,这个建设怎么搞得好,好几个干部还很自豪的说,每天都要陪人,习惯了,甚至最近好些天都是一天陪几个团体。天!这就是我们基层干部!最后走了,还送我们很贵重的礼物--邓小平纪念邮票一本(是非卖品,我估计好几百)。这些让我觉得很恶心了。整个广安,借邓小平致富的办法令我很悲哀。这就是我们对待我们伟人的方法。

贪吃蛇进度(1)

现在实现了计时器机制和事件机制。下一步是怎么去实现贪吃蛇的走动。

现在分为两个文件:snake.h和snake.c
如下:snake.h
#define NEWEVENT (EventLink)malloc(sizeof(event))
#define MAXSNAKELEN 30 /* Max length of the snake */
#define DEFAULTSNAKECOLOR WHITE /* The default snake color */

#define DEFAULTSPEED 100000 /* The start speed of the snake */
#define DEFAULTSTARTX 100 /* The start x of the snake */
#define DEFAULTSTARTY 100 /* The start y of the snake */
#define MAXEVENT 1 /* The startup event number */

/* Keyboard definition */
#define ENTER 13

/* The prototype of bool type */
typedef enum
{
true,
false
}bool;


/* The prototype of directions */
typedef enum
{
up,
right,
down,
left
}direction;

/* The prototype of a point of the snake */
typedef struct
{
int posx;
int posy;
direction dir; /* The current direction of this point */
}point;


/* The prototype of the snake */
typedef struct
{
point dots[MAXSNAKELEN];
}snake;

#ifndef __SNAKE

/* prevent multiple includes */
#define __SNAKE
/* The prototype of the event */
typedef struct
{
long interval;/* The interval of the event occurs */
long timer;
void (*invoke)(); /* The function pointer to the invoke action */
}event;


/* The prototype of the eventlist */
struct eventlist
{
event *eventnow;
struct eventlist *next;
};


typedef struct eventlist Node;
typedef Node *Link;
typedef event *EventLink;



int screenx=0;
int screeny=0;

void Init(snake *s);
void EventHandler(Link);
void EventInsert(Link,EventLink);
Link EventCreater(Link);
void EventFree(Link);

/* Registry Events */
void Controler(); /* The main keyboard controler */
void DrawPoint();
void DrawLine();
void DrawSnake(snake *s);

void EventInsert(Link eventhead,EventLink newevent)
{
Link pointer;
Link newlist;
pointer=eventhead;
while(1)
{
if (pointer->next==NULL)
{
newlist=(Link)malloc(sizeof(Node));
newlist->eventnow=newevent;
newlist->next=NULL;
pointer->next=newlist;
break;
}
pointer=pointer->next;
}
}

Link EventCreater(Link eventhead)
{
Link newevent;
EventLink tempevent;

int i;

eventhead=(Link)malloc(sizeof(Node));
/* Create event list */
if (eventhead==NULL)
{
printf("Memory allocate Failure!!\n");
}
else
{
tempevent=(EventLink)malloc(sizeof(event));
tempevent->interval=1;
tempevent->timer=0;
tempevent->invoke=Controler;
eventhead->eventnow=tempevent;
eventhead->next=NULL;
}
return eventhead;
}

void EventFree(Link eventhead)
{
Link pointer;
EventLink tempevent;
while(eventhead !=NULL)
{
pointer=eventhead;
eventhead=eventhead->next;
tempevent=eventhead->eventnow;
free(pointer);
free(tempevent);
}
}
#endif


Snake.c
#include
#include
#include
#include
#include
#include
#include

/* To return the head pointer of the eventlist */


int main(void)
{
snake me;
Link head;
int gdriver=DETECT,gmode;
EventLink tempevent;

/* Init graphic mode */
initgraph(&gdriver,&gmode,"");
Init(&me);
head=EventCreater(head);
tempevent=NEWEVENT;
tempevent->interval=10000;
tempevent->timer=0;
tempevent->invoke=DrawPoint;
EventInsert(head,tempevent);
EventHandler(head);
EventFree(head);
closegraph();
clrscr();
return 0;
}

void DrawLine()
{
int x;
int y;
x=random(500);
y=random(500);
circle(x,y,20);
}

void DrawPoint()
{
int x1,x2;
int y1,y2;
x1=random(200);x2=random(100);
y1=random(200);y2=random(100);
line(x1,y1,x2,y2);
}

void Controler()
{

}

void Init(snake *s)
{
int i,j;
int sx=DEFAULTSTARTX,sy=DEFAULTSTARTY;
randomize();
for (i=0;i<>
{
s->dots[i].posx=sx;
s->dots[i].posy=sy;
s->dots[i].dir=up;
sy++;
}
screenx=getmaxx();
screeny=getmaxy();
}

/* Draw snake */
void DrawSnake(snake *s)
{
int i;
for (i=0;i<>
{
putpixel(s->dots[i].posx,s->dots[i].posy,DEFAULTSNAKECOLOR);
}
}

void EventHandler(Link eventhead)
{
int i;
Link pointer;
while(1)
{
delay(1);
pointer=eventhead;
while (pointer!=NULL)
{

pointer->eventnow->timer++;
if ((pointer->eventnow->timer)>=(pointer->eventnow->interval))
{

/* Invoke current event */
pointer->eventnow->invoke();
pointer->eventnow->timer=0;
}
pointer=pointer->next;

}
if(kbhit())
{
if (getch()==ENTER)
break;
}
}
}

2004年7月21日星期三

解决了动态加载的问题

果然,在网上查了一些资料以后,终于动态加载了dll并且调用了里面的方法。其实搞懂了以后还是很简单的。具体实现的代码如下:
Assembly ass;
ass=Assembly.LoadFrom(Server.MapPath("")+"\\bin\\kernel.dll");
Type myType=ass.GetType("Kernel.DbControl");
MethodInfo mi=myType.GetMethod("ViewAllData");
Object[] arg=new object[1];
arg[0]=Server.MapPath("");
Object obj = Activator.CreateInstance(myType,arg);
Test.DataSource=(DataSet)mi.Invoke(obj,null);
Test.DataBind();

首先要把dll加载进来。然后得到特定的类名。再就是得到这个类里里面某个方法。最重要的一句就是:Object obj = Activator.CreateInstance(myType,arg); 这句的作用就是使这个类实例化。注意,实例化可以带上参数(这要看构造函数是什么样子的)。实例化了类以后就是调用方法,也和实例化类一样,要有参数的传递。当然,最好强制转换一下类型。

开始工作

今天正式开始工作了。应该说,两个人在一起的效率的确很高,至少要比一个人要高很多。第一天还是有一些收获的。比如先是做了一个dll,然后把数据库操作封装到了这个dll里面。再在一个web application里面调用这个dll。这个做的还是很成功的。中间有一个小问题就是,在dll里面,如何得到当前的工作路径。没有解决!只有从web application里面把这个路径传过去。当然这也是一种折中的方法。然后开始试验动态载入程序集。应该说,动态载入本身是没有难度的,关键是如何运行类里面的方法。这个就不是那么容易了。试验了很多,都不行。在网上查了一下,发现有很多类似的问题被大家都讨论过了。看看明天能不能解决这个问题。

2004年7月19日星期一

吉列尔斯的格里格

当亚瑟 鲁宾斯坦在火车站看见那个红发少年的时候,他也许还不能预见到这个少年未来所能达到的高度。几年后,在一次钢琴大赛上,鲁宾斯坦再次和这个年轻人相遇,是的,就是这个年轻人拿走了这次比赛的第一名。对于鲁宾斯坦这样的大师来说,有才华,有天赋的青年钢琴家肯定见多了。不过,吉列尔斯绝对是一个例外。

鲁宾斯坦给涅高思说,一定要把这个年轻人弄到彼得堡来。吉列尔斯的天赋不是里赫特那样的狂放,也不是基辛那样的锋芒毕露,而是一种智慧般的内敛。以前通过布拉姆斯的钢琴协奏曲和贝多芬的奏鸣曲就已经认识了吉列尔斯的伟大。但是,很多大师可以通过小品的演奏来得以检验。Pletnev的格里格是色彩飞扬的,是一种很造型化的美。吉列尔斯的格里格来得就自然得多。没有了太多做作,只有不经意间的微笑和叹息。其实,像格里格这种曲子,每个人似乎都可以去尝试,但是并不是每个人都能把这些曲子激发出火花。吉列尔斯做到了,通过一个个小曲子来,窥视宇宙。这种充满灵性的演奏很让人陶醉。吉列尔斯,果然就是奇迹。

灵山游(一)

其实,我很不习惯出去旅游的。因为对于我来说,旅游是一种很奢侈的事情。是的,就像她说的那样,我从小生活在城市里,而且是最典型的城市生活。典型,是的,又不是。我的生活谈不上。不过,旅游这种很自由的事情的确离我很远。在我这么多年的日子里面,真的很难寻觅出我旅游的踪迹。而且从总体上来说,我也不是一个很能够欣赏自然美景的人。这倒不是说我没有能力去辨别自然的美,而是说这种美不在我的审美范围内。因为,我总觉得,那种悲怆的美,那种死亡的味道更符合我的性格。说实话,我在去之前心里很怀疑自己能不能够找到一种感觉。当然,我就要禁不住问自己,自己寻找的是一种什么感觉呢?也许是自由?也许是放松。但也许什么都不是。其实,也有可能只是想和她有一段属于我们自己的时间和空间。对,一切都有可能。

不过,这次去旅游真的给我很多以前从没有的感触。我突然觉得城市的生活非常的灰暗。不是说城市的生活是没有乐趣的,只是在钢筋混泥土的世界里生活太久也就像这些灰色的楼房一样刻板而没有活力。哦,对,灵山,北京的最高峰。启程很普通,可以说就像去哪个博物馆,抑或是逛街。前面的一切都是未知的。自己出行就是要去操心很多很多。行车确实是一个问题。当然,北京的交通已经是算方便的了。不过对于灵山这种景点来说,是不是应该有专门的旅游线路呢?最大的问题可能就是,除了夏季这几天可以是一个旅游的旺季,平时灵山根本没人问津。当然,也就没有必要去专门开设一个旅游专线。门头沟的山很有四川的味道。让我想起了都江堰往西走的那种山谷之美。不过,四川的山水更加灵秀些,更加隽永。北方的山水更加粗犷,豪放。拥挤在类似于八十年代的公交车里,在蜿蜒的山路中行驶,身体前前后后,左左右右的摇晃着,似乎要摇晃掉那都市的晦气。

三个小时的路途到达了一个小山村,双塘涧,很秀丽的名字,却没有想象中的溪流和凉爽。十九公里的山路带着我和她来到了灵山脚下。其实,灵山很普通,也可以说就是一座没有什么特点的山。这种山放在南方,会很不起眼,根本就没有人问津。但是,这里是北方,是首都。所以,灵山就像它的名字一样有着南方般的身段。住宿,花了很一段时间才安顿下来。山民其实很纯朴,纯朴得把那种赚钱心切的心情暴露的那么明显,让人觉得可恨,可怜。最终,在一个类似住家般的招待所住下了。老实说,我还是很满意的,至少有热水,有电视。而且感觉几个管理人员的态度都很不错。柳开始很担心那关不好的窗子,不过我却少有的没那么害怕。因为,一种说不清楚的感觉告诉我,旅游嘛,并不是绝对的都很安全的。不过这些小插曲的确很有意思,恩,一种很生活化的意味。晚上的菜很贵,但是很家常。柳责怪我花了太多的钱,是的,要是我们在外面吃,或者是自己来得时候多带一些东西,可能花费要小一些。但是呢,我还是觉得这个吃的开销是值得的。这可能就是柳说我的过好日子过惯了吧。是啊,我这种在都市生活了十九年的人,走在哪里都是带着都市的味道。本来在灵山这种地方看见满天的星星应该是不足为奇的,但是当看到满天繁星的时候,还是有一种的激动。我忽然觉得贝多芬的《第九交响曲》就在天上。黑黑的画布上镶嵌着深浅不一的星星,也许我也是其中的一员。尘世的很多东西都忘却了。当然,最重要的还是和她在一起。在星空下,两个人的世界真的是那么美妙而短暂。是啊,往往美丽的东西,也是短暂的。在旅店的平台上,很冷的空气,却让我觉得有一种爱的灼烧。是的,我感到压抑了很久的爱终于可以去释放,给能够接受它的人。这种良辰美景真的是很让人觉得不现实。不过幸福是肯定的。我从没有和一个人单独出去过,她也肯定是。很难说这样的情景以后还会不会有,但是我觉得,有过就已经说明了爱的伟大。灵山,但愿给我和她的爱带来灵性。

2004年7月11日星期日

Wand的布鲁克纳第七

Wand的演奏永远是纯粹的德国。和乔希姆的指挥相比,Wand要理智很多。这种理智不是冷酷,而是在恰到好处的地方不过分的去流露浪漫和温情。布鲁克纳的《第七交响曲》常常被滥情。的确,从第一分钟就开始的那种温馨,那种庄严是很多指挥家的最爱,同时过于慢的速度,使本来就很长的曲子显得更加冗长。Wand的开始非常灵巧,一点也不拖泥带水。弦乐的流动性特别好。平衡感也特别好。第一乐章的结尾处理得非常宏伟。不知道为什么,这种庄严给我一种十分悲壮的感觉。第二乐章和第一乐章相比,布鲁克纳显得更加加诙谐。当然还是建立在一种庄严的基础上的诙谐。Wand的演奏很大气,这种大气带来的就是乐队的跳动。第三乐章很美,也很静。第四乐章舞曲的节奏被Wand充分的调动起来了。总之,布鲁克纳的《第七交响曲》在Wand手中经历了伟大的创造的过程。其实,Wand应该是一个大家的,可能是那种本性,决定了这位伟大的指挥家的低调和睿智。

乌戈尔斯基的穆索尔斯基

听乌戈尔斯基的"Pictures at the exhibition"绝对是一种不同的感觉。是的,这种感觉是不同里赫特的,也是不同于基辛的。乌戈尔斯基一开始就是一种悲情,一种庄严。穆索尔斯基的这个作品绝对是一部杰作。任何一个人都可以有不同的诠释。关键是这种诠释的基础是什么?是图画本身?还是展览?乌戈尔斯基的演奏使本来很雄壮的地方格外的悲凉。和Pletnev相比,乌戈尔斯基更侧重的是一种情感。而Pletnev的演奏很有造型感。一种塑造的感觉。这点和Horowitz是差不多的。俄罗斯钢琴中间的几个很有造形艺术的钢琴家都对《图画展览会》有惊人的诠释。乌戈尔斯基的演奏是貌不惊人的。“古堡”那段是哀而不伤。有诉说不完的惆怅。“漫步”主题十分的无奈,但是又有一种很奇怪的坚定。这就是一种很深的功底。说实话,听乌戈尔斯基的《图画展览会》给我一种心中完美诠释的典范。一直以来我都对很多钢琴家对这首曲子的演奏不太满意。现在,我终于找到了这么一种演奏。现在,我很想听的就是乌戈尔斯基的舒曼的《童年憧憬》。以前看过《爱乐》介绍过。看来,一些不太知名的钢琴家中并不是没有大师。

2004年7月1日星期四

C语言的问题

昨天把下雨的题终于编完了。对Graphics.h里面的一些函数有了一个初步的了解。我觉得我设计的这个程序是一种多线程的程序的雏形,因为两个雨滴是相互独立的,互不影响。这是放在一个数组里面实现的。目前的问题是如果把间隔时间设置的相对短些的话,动画要光滑些,但是有闪烁的感觉。这也是所有编程语言的擦坪函数所带来的,怎么解决,确实是一个问题。

附上源程序:


#include <stdio.h>

#include <math.h>

#include <graphics.h>

#include <stdlib.h>

#include <time.h>

#include <dos.h>

#include <conio.h>


#define PI 3.1415926


#define RAINDROPLEN 15 /* The length of a raindrop */

#define RAINTANGLE 0 /* The tangle of each raindrop */

#define RAINDROPZ 0 /* The internal of each raindrop */

#define RAINCOLOR white /* The color of each raindrop */

#define RAINWAVELEVEL 40 /* The level of each wave */

#define DELAYTIME 2000 /* The internal of each flash of the screen */


/* Calculate the next X,Y of a raindrop */

#define RAINDROPNEXTX(n,m) (int)((RAINDROPLEN/m+n)*sin(RAINTANGLE*(PI/180)))

#define RAINDROPNEXTY(n,m) (int)((RAINDROPLEN/m+n)*cos(RAINTANGLE*(PI/180)))


#define RAINDROPS 100 /* The total numbers of raindrops */



struct raindrop

{

int posx;

int posy;

int state; /* The current state of raindrop. 1 for raindrop. 2 for wave. */

int wavelevel; /* The current wave level */

};


void Init(struct raindrop *drops);

void DrawDrops(struct raindrop *drops); /* Draw all the raindrops */

void CalDrops(struct raindrop *drops); /* Calculate the next raindrops position */



int main(void)

{

struct raindrop drops[RAINDROPS];

int gdriver=DETECT,gmode,i=0;

initgraph(&gdriver,&gmode,""); /* Init graphic mode */

Init(drops);

setbkcolor(0);

while(!kbhit())

{

cleardevice();

DrawDrops(drops);

delay(DELAYTIME);

CalDrops(drops);

}

return 0;

}


void Init(struct raindrop *drops)

{

int i;

randomize();

for(i=0;i<RAINDROPS;i++,drops++)

{

drops->posx=random(600);

drops->posy=random(300);

drops->state=1;

drops->wavelevel=0;

}

}


void DrawDrops(struct raindrop *drops)

{

int i;

int endx,endy;

setcolor(WHITE);

for(i=0;i<RAINDROPS;i++,drops++)

{

if (drops->state==1)

{

endx=RAINDROPNEXTX(0,1);

endy=RAINDROPNEXTY(0,1);

line(drops->posx,drops->posy,drops->posx+endx,drops->posy+endy);

}

else

{


ellipse(drops->posx,drops->posy,0,360,1+(drops->wavelevel)*0.75,0.05+(drops->wavelevel)*0.15);

}

}

}


void CalDrops(struct raindrop *drops)

{

int i;

int endx,endy;

int temp;

for(i=0;i<RAINDROPS;i++,drops++)

{

if (drops->state==1)

{

endx=RAINDROPNEXTX(RAINDROPZ,10);

endy=RAINDROPNEXTY(RAINDROPZ,10);

if ((endx+drops->posx)>=640(endy+drops->posy)>=400)

{

temp=random(100);

if (temp%2==0(endx+drops->posx)>=680(endy+drops->posy)>=550)

{

drops->state=2;

drops->wavelevel=1;

}

else

{

drops->posx=drops->posx+endx;

drops->posy=drops->posy+endy;

}


}

else

{

drops->posx=drops->posx+endx;

drops->posy=drops->posy+endy;

}

}

else

{

if ((drops->wavelevel)<RAINWAVELEVEL)

{


drops->wavelevel++;

}

else

{

drops->posx=random(600);

drops->posy=random(100);

drops->wavelevel=0;

drops->state=1;

}

}

}