欣's profile名字还没想好 -_-||PhotosBlogListsMore Tools Help

名字还没想好 -_-||

存放资料&发牢骚的地方

欣 张

Occupation
Location
拉登,一个扎在穷人堆里的财主。他勇于用他的钱砸美国人,我喜欢!按东北人的话说,拉登就是---“爷们”!纯的!~~
There are no photo albums.
感谢访问!
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.

流动人口统计

你是第amazingcounters.com位访客
10/14/2008

www.kevenking.cn正式启用,Space内容大迁移

各位父老乡亲、兄弟姐妹,我的kevenking.cn正式启用了,本Space的内容会陆续迁移至新的博客中。由于时间的关系,kevenking.cn将会不定期的针对内容和系统进行更新,如果时间允许,更新信息也将会在Space中发布,欢迎大家经常光临访问!!! 同时也希望能够听到你们的宝贵意见,让kevenking.cn变得更加丰富多彩~
 
BTW:欢迎大家和我交换链接,嘿嘿~~
8/11/2008

IE和Firefox在JavaScript方面的兼容性汇总

1.document.formName.item("itemName") 问题
说明:IE下,可以使用document.formName.item("itemName")或document.formName.elements["elementName"];Firefox下,只能使用document.formName.elements["elementName"].
解决方法:统一使用document.formName.elements["elementName"].

2.集合类对象问题
说明:IE下,可以使用()或[]获取集合类对象;Firefox下,只能使用[]获取集合类对象.
解决方法:统一使用[]获取集合类对象.

3.自定义属性问题

说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性.
解决方法:统一通过getAttribute()获取自定义属性.

4.eval("idName")问题

说明:IE下,,可以使用eval("idName")或getElementById("idName")来取得id为idName的HTML对象;Firefox下只能使用getElementById("idName")来取得id为idName的HTML对象.
解决方法:统一用getElementById("idName")来取得id为idName的HTML对象. 

5.变量名与某HTML对象ID相同的问题
说明:IE下,HTML对象的ID可以作为document的下属对象变量名直接使用;Firefox下则不能.Firefox下,可以使用与HTML对象ID相同的变量名;IE下则不能。
解决方法:使用document.getElementById("idName")代替document.idName.最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免歧义.

6.const问题

说明:Firefox下,可以使用const关键字或var关键字来定义常量;IE下,只能使用var关键字来定义常量.
解决方法:统一使用var关键字来定义常量.

7.input.type属性问题
说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写.

8.window.event问题

说明:window.event只能在IE下运行,而不能在Firefox下运行,这是因为Firefox的event只能在事件发生的现场使用.
解决方法:
IE:
<input name="Button8_1" type="button" value="IE" onclick="javascript:gotoSubmit8_1()"/>
...
<script language="javascript">
function gotoSubmit8_1() {
...
alert(window.event); //use window.event
...
}
</script>
IE&Firefox:
<input name="Button8_2" type="button" value="IE" onclick="javascript:gotoSubmit8_2(event)"/>
...
<script language="javascript">
function gotoSubmit8_2(evt) {
...
evt=evt?evt:(window.event?window.event:null);
alert(evt); //use evt
...
}
</script>

9.event.x与event.y问题

说明:IE下,even对象有x,y属性,但是没有pageX,pageY属性;Firefox下,even对象有pageX,pageY属性,但是没有x,y属性.
解决方法:使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX.

10.event.srcElement问题

说明:IE下,even对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性.
解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target. 

11.window.location.href问题

说明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;Firefox1.5.x下,只能使用window.location.
解决方法:使用window.location来代替window.location.href.

12.模态和非模态窗口问题

说明:IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能.
解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口。

如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口. 例如:var parWin = window.opener; parWin.document.getElementById("Aqing").value = "Aqing";

13.frame问题

以下面的frame为例:
<frame src="xxx.html" id="frameId" name="frameName" />
(1)访问frame对象:
IE:使用window.frameId或者window.frameName来访问这个frame对象.
Firefox:只能使用window.frameName来访问这个frame对象.
另外,在IE和Firefox中都可以使用window.document.getElementById("frameId")来访问这个frame对象.
(2)切换frame内容:
在IE和Firefox中都可以使用window.document.getElementById("testFrame").src = "xxx.html"或window.frameName.location = "xxx.html"来切换frame的内容.

如果需要将frame中的参数传回父窗口,可以在frme中使用parent来访问父窗口。例如:parent.document.form1.filename.value="Aqing";

14.body问题

Firefox的body在body标签没有被浏览器完全读入之前就存在;而IE的body则必须在body标签被浏览器完全读入之后才存在.

例如:
Firefox:
<body>
<script type="text/javascript">
document.body.onclick = function(evt){
evt = evt || window.event;
alert(evt);
}
</script>
</body>
IE&Firefox:
<body>
</body>
<script type="text/javascript">
document.body.onclick = function(evt){
evt = evt || window.event;
alert(evt);
} </script>

15. 事件委托方法

IE:document.body.onload = inject; //Function inject()在这之前已被实现

Firefox:document.body.onload = inject();

有人说标准是:

document.body.onload=new Function('inject()');

16. firefox与IE(parentElement)的父元素的区别

IE:obj.parentElement
firefox:obj.parentNode

解决方法: 因为firefox与IE都支持DOM,因此使用obj.parentNode是不错选择.

17.cursor:hand VS cursor:pointer

firefox不支持hand,但ie支持pointer

解决方法: 统一使用pointer

18.innerText在IE中能正常工作,但是innerText在FireFox中却不行.

解决方法:

if(navigator.appName.indexOf("Explorer") > -1){

document.getElementById('element').innerText = "my text";

} else{

document.getElementById('element').textContent = "my text";

}

19. FireFox中类似 obj.style.height = imgObj.height 的语句无效

解决方法:

obj.style.height = imgObj.height + 'px';

20. ie,firefox以及其它浏览器对于 table 标签的操作都各不相同,在ie中不允许对table和tr的innerHTML赋值,使用js增加一个tr时,使用appendChile方法也不管用。

解决方法:

//向table追加一个空行:
var row = otable.insertRow(-1);
var cell = document.createElement("td");
cell.innerHTML = " ";
cell.className = "XXXX";
row.appendChild(cell);

21. padding 问题

padding 5px 4px 3px 1px FireFox无法解释简写,

必须改成 padding-top:5px; padding-right:4px; padding-bottom:3px; padding-left:1px;

22. 消除ul、ol等列表的缩进时

样式应写成:list-style:none;margin:0px;padding:0px;

其中margin属性对IE有效,padding属性对FireFox有效

23. CSS透明

IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。

FF:opacity:0.6。

24. CSS圆角

IE:不支持圆角。

FF: -moz-border-radius:4px,或者-moz-border-radius-topleft:4px;-moz-border- radius-topright:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius- bottomright:4px;。

25. CSS双线凹凸边框

IE:border:2px outset;。

FF: -moz-border-top-colors: #d4d0c8 white;-moz-border-left-colors: #d4d0c8 white;-moz-border-right-colors:#404040 #808080;-moz-border-bottom-colors:#404040 #808080;

4/10/2008

美哉我中国少年,与天不老!壮哉我中国少年,与国无疆!

后生可畏,焉知来者之不如今。拭目以待,又复何忧!

119c91a6359

119c91de47e

119c91f14d1

119c91fab9c

119c92a0cfe

119c920d3de

119c925faf5

119c927bcfa

600x400_720054(1)

600x402_224434

2008040706393330b3a

ANkGUhIw

bjaoyun1a697bd0854ec478

bjaoyun938de2595923af6e

EAkGUhZw

EBkGUhZw

ExkGUhZw

EzkGUhZw

SONY DSC

SONY DSC

iEkGUhuV

iFkGUhuV

iKkGUhuV

ilkGUhuV

Img256168118

Img256168163

Img256168119

Img256168128

iQkGUhuV

LdkGjapn

MIkGUhOx

MJkGUhOx

MtkGUhJI               

MxkGUhJI   

SONY DSC

SONY DSC

SONY DSC

uDkGDnyH

再读《少年中国说》

日本人之称我中国也,一则曰老大帝国,再则曰老大帝国。是语也,盖袭译欧西人之言也。呜呼!我中国其果老大矣乎?梁启超曰:恶,是何言!是何言!吾心目中有一少年中国在。

欲言国之老少,请先言人之老少。老年人常思既往,少年人常思将来。惟思既往也,故生留恋心;惟思将来也,故生希望心。惟留恋也,故保守;惟希望也,故进取。惟保守也,故永旧;惟进取也,故日新。惟思既往也,事事皆其所已经者,故惟知照例;惟思将来也,事事皆其所未经者,故常敢破格。老年人常多忧虑,少年人常好行乐。惟多忧也,故灰心;惟行乐也,故盛气。惟灰心也,故怯懦;惟盛气也,故豪壮。惟怯懦也,故苟且;惟豪壮也,故冒险。惟苟且也,故能灭世界;惟冒险也,故能造世界。老年人常厌事,少年人常喜事。惟厌事也,故常觉一切事无可为者;惟好事也,故常觉一切事无不可为者。老年人如夕照,少年人如朝阳。老年人如瘠牛,少年人如乳虎。老年人如僧,少年人如侠。老年人如字典,少年人如戏文。老年人如鸦片烟,少年人如泼兰地酒。老年人如别行星之陨石,少年人如大洋海之珊瑚岛。老年人如埃及沙漠之金字塔,少年人如西伯利亚之铁路。老年人如秋后之柳,少年人如春前之草。老年人如死海之潴为泽,少年人如长江之初发源。此老年与少年性格不同之大略也。梁启超曰:人固有之,国亦宜然。

梁启超曰:伤哉,老大也!浔阳江头琵琶妇,当明月绕船,枫叶瑟瑟,衾寒于铁,似梦非梦之时,追想洛阳尘中春花秋月之佳趣。西宫南内,白发宫娥,一灯如穗,三五对坐,谈开元天宝间遗事,谱霓裳羽衣曲。青门种瓜人,左对孺人,顾弄孺子,忆侯门似海、珠履杂遝之盛事。拿破仑之流于厄蔑,阿剌飞之幽于锡兰,与三两监守吏,或过访之好事者,道当年短刀匹马,驰骋中原,席卷欧洲,血战海楼,一声叱咤,万国震恐之丰功伟烈,初而拍案,继而抚髀,终而揽镜:呜呼,面皴齿尽,白发盈把,颓然老矣!若是者,舍幽郁之外无心事,舍悲惨之外无天地,舍颓唐之外无日月,舍叹息之外无音声,舍待死之外无事业。美人豪杰且然,而况于寻常碌碌者耶?生平亲友,皆在墟墓;起居饮食,待命于人。今日且过,遑知他日;今年且过,遑恤明年。普天下灰心短气之事,未有甚于老大者。于此人也,而欲望以拏云之手段,回天之事功,挟山超海之意气,能乎不能?

呜呼,我中国其果老大矣乎?立乎今日以指畴昔,唐虞三代,若何之郅治;秦皇汉武,若何之雄杰;汉唐来之文学,若何之隆盛;康乾间之武功,若何之烜赫。历史家所铺叙,词章家所讴歌,何一非我国民少年时代、良辰美景赏心乐事之陈迹哉!而今颓然老矣!昨日割五城,明日割十城,处处雀鼠尽,夜夜鸡犬惊。十八省之土地财产,已为人怀中之肉;四百兆之父兄子弟,已为人注籍之奴。岂所谓“老大嫁作商人妇”者耶?呜呼,凭君莫话当年事,憔悴韶光不忍看!楚囚相对,岌岌顾影;人命危浅,朝不虑夕。国为待死之国,一国之民为待死之民。万事付之奈何,一切凭人作弄,亦何足怪!

梁启超曰:我中国其果老大矣乎?是今日全地球之一大问题也。如其老大也,则是中国为过去之国,即地球上昔本有此国,而今渐澌灭,他日之命运殆将尽也。如其非老大也,则是中国为未来之国,即地球上昔未现此国,而今渐发达,他日之前程且方长也。欲断今日之中国为老大耶?为少年耶?则不可不先明国字之意义。夫国也者,何物也?有土地,有人民,以居于其土地之人民,而治其所居之土地之事,自制法律而自守之,有主权,有服从,人人皆主权者,人人皆服从者。夫如是斯谓之完全成立之国。地球上之有完全成立之国也,自百年以来也。完全成立者,壮年之事也;未能完全成立而渐进于完全成立者,少年之事也。故吾得一言以断之曰:欧洲列邦在今日为壮年国,而我中国在今日为少年国。

夫古昔之中国者,虽有国之名,而未成国之形也。或为家族之国,或为酋长之国,或为诸侯封建之国,或为一王专制之国。虽种类不一,要之,其于国家之体质也,有其一部而缺其一部。正如婴儿自胚胎以迄成童,其身体之一二官支,先行长成,此外则全体虽粗具,然未能得其用也。故唐虞以前为胚胎时代,殷商之际为乳哺时代,由孔子而来至于今为童子时代,逐渐发达,而今乃始将入成童以上少年之界焉。其长成所以若是之迟者,则历代之民贼有窒其生机者也。譬犹童年多病,转类老态。或且疑其死期之将至焉,而不知皆由未完全未成立也;非过去之谓,而未来之谓也。且我中国畴昔,岂尝有国家哉,不过有朝廷耳。我黄帝子孙,聚族而居,立于此地球之上者既数千年,而问其国之为何名,则无有也。夫所谓唐、虞、夏、商、周、秦、汉、魏、晋、宋、齐、梁、陈、隋、唐、宋、元、明、清者,则皆朝名耳。朝也者,一家之私产也;国也者,人民之公产也。朝有朝之老少,国有国之老少。朝与国既异物,则不能以朝之老少而指为国之老少明矣。文、武、成、康,周朝之少年时代也;幽、厉、桓、赧,则其老年时代也。高、文、景、武,汉朝之少年时代也;元、平、桓、灵,则其老年时代也。自馀历朝,莫不有之。凡此者谓为一朝廷之老也则可,谓为一国之老也则不可。一朝廷之老且死,犹一人之老且死也,于吾所谓中国者何与焉?然则,吾中国者,前此尚未出现于世界,而今乃始萌芽云尔。天地大矣,前途辽矣,美哉我少年中国乎!

玛志尼者,意大利三杰之魁也。以国事被罪,逃窜异邦。乃创立一会,名曰“少年意大利”,举国志士,云涌雾集以应之。卒乃光复旧物,使意大利为欧洲之一雄邦。夫意大利者,欧洲第一之老大国也。自罗马亡后,土地隶于教皇,政权归于奥国,殆所谓老而濒于死者矣。而得一玛志尼,且能举全国而少年之,况我中国之实为少年时代者耶?堂堂四百馀州之国土,凛凛四百馀兆之国民,岂遂无一玛志尼其人者!

龚自珍氏之集有诗一章,题曰《能令公少年行》。吾尝爱读之,而有味乎其用意之所存。我国民而自谓其国之老大也,斯果老大矣;我国民而自知其国之少年也,斯乃少年矣。西谚有之曰:“有三岁之翁,有百岁之童。”然则,国之老少,又无定形,而实随国民之心力以为消长者也。吾见乎玛志尼之能令国少年也,吾又见乎我国之官吏士民能令国老大也。吾为此惧。夫以如此壮丽浓郁翩翩绝世之少年中国,而使欧西日本人谓我为老大者,何也?则以握国权者皆老朽之人也。非哦几十年八股,非写几十年白折,非当几十年差,非捱几十年俸,非递几十年手本,非唱几十年诺,非磕几十年头,非请几十年安,则必不能得一官,进一职。其内任卿贰以上,外任监司以上者,百人之中,其五官不备者,殆九十六七人也。非眼盲,则耳聋;非手颤,则足跛;否则半身不遂也。彼其一身饮食步履视听言语,尚且不能自了,须三四人在左右扶之捉之,乃能度日,于此而乃欲责之以国事,是何异立无数木偶而使之治天下也!且彼辈者,自其少壮之时,既已不知亚细亚、欧罗巴为何处地方,汉祖、唐宗是那朝皇帝,犹嫌其顽钝腐败之未臻其极,又必搓磨之,陶冶之,待其脑髓已涸,血管已塞,气息奄奄,与鬼为邻之时,然后将我二万里山河,四万万人命,一举而畀于其手。呜呼!老大帝国,诚哉其老大也!而彼辈者,积其数十年之八股、白折、当差、捱俸、手本、唱诺、磕头、请安,千辛万苦,千苦万辛,乃始得此红顶花翎之服色,中堂大人之名号,乃出其全副精神,竭其毕生力量,以保持之。如彼乞儿拾金一锭,虽轰雷盘旋其顶上,而两手犹紧抱其荷包,他事非所顾也,非所知也,非所闻也。于此而告之以亡国也,瓜分也,彼乌从而听之,乌从而信之!即使果亡矣,果分矣,而吾今年既七十矣八十矣,但求其一两年内,洋人不来,强盗不起,我已快活了一世矣;若不得已,则割三头两省之土地,奉申贺敬,以换我几个衙门,卖三几百万之人民作仆为奴,以赎我一条老命,有何不可,有何难办!呜呼!今之所谓老后老臣老将老吏者,其修身齐家治国平天下之手段,皆具于是矣。西风一夜催人老,凋尽朱
颜白尽头。使走无常当医生,携催命符以祝寿,嗟乎痛哉!以此为国,是安得不老且死,且吾恐其未及岁而殇也。

梁启超曰:造成今日之老大中国者,则中国老朽之冤业也;制出将来之少年中国者,则中国少年之责任也。彼老朽者何足道?彼与此世界作别之日不远矣,而我少年乃新来而与世界为缘。如僦屋者然,彼明日将迁居他方,而我今日始入此室处。将迁居者,不爱护其窗栊,不洁治其庭庑,俗人恒情,亦何足怪。若我少年者,前程浩浩,后顾茫茫,中国而为牛为马为奴为隶,则烹脔鞭棰之惨酷,惟我少年当之;中国如称霸宇内,主盟地球,则指挥顾盼之尊荣,惟我少年享之,于彼气息奄奄与鬼为邻者何与焉!彼而漠然置之,犹可言也;我而漠然置之,不可言也。使举国之少年而果为少年也,则吾中国为未来之国,其进步未可量也;使举国之少年而亦为老大也,则吾中国为过去之国,其澌亡可翘足而待也。故今日之责任,不在他人,而全在我少年。少年智则国智,少年富则国富,少年强则国强,少年独立则国独立,少年自由则国自由,少年进步则国进步,少年胜于欧洲则国胜于欧洲,少年雄于地球则国雄于地球。红日初升,其道大光;河出伏流,一泻汪洋;潜龙腾渊,鳞爪飞扬;乳虎啸谷,百兽震惶;鹰隼试翼,风尘吸张;奇花初胎,矞矞皇皇;干将发硎,有作其芒;天戴其苍,地履其黄;纵有千古,横有八荒,前途似海,来日方长。美哉我少年中国,与天不老;壮哉我中国少年,与国无疆!

“三十功名尘与土,八千里路云和月。莫等闲白了少年头,空悲切!”此岳武穆《满江红》词句也,作者自六岁时即口受记忆,至今喜诵之不衰。自今以往,弃“哀时客”之名,更自名曰“少年中国之少年”。

12/4/2006

She's out of my life

Michael老了,
但是他的歌声依旧经典,
我总算把这首歌的歌词写出来了,
跟网上的歌词对了半天才敢贴出来,
但愿基本正确吧

我把播放列表里歌曲的顺序调整了一下,
现在这首歌在第一位,Ben放在第二位,
这样大家可以直接听到这首歌

想听的同志们要到我的SPACE的首页才能听到,
直接点击这篇日志是听不到的,
希望你们也能喜欢

 

She's out of my life

She's out of my life, she's out of my life
And i don't know whether to laugh or cry
I don't know whether to live or die
And it cuts like a knife, she's out of my life

It's out of my hands, it's out of my hands
To think for two years, she was here
And i took her for granted, i was so cavalier
And the way that it stands
She's out of my hands

So i've learned that love's not possesion
And i learned, love won't wait
Now i've learned, that love needs expression
But i've learned too late
And she's...

Out of my life, she's out of my life
Damned in decision
And cursed in pride
I kept my love for her, locked deep inside
And it cuts like a knife
She's out of my life...

12/1/2006

Ben - Michael Jackson

今天无意中在网上找到了一首我在初中时代就非常喜欢的歌,是Michael Jackson在1972年演唱的Ben,真的是非常兴奋啊~  
 
凌晨3点,耳边回响着Michael动人的歌声,脑中浮现着一幕幕记忆的片断,心情真的是万分复杂。再一次被Michael的歌声折服的同时也不禁感叹光阴荏苒,时光飞逝。现在再跟朋友们谈论起初中年代,也只能心中无限感慨的说出一句“在我年轻的时候.........”。
 
我已经把这首歌放在了SPACE在线播放的歌曲列表里,当你们看到这段文字的时候应该能够听到Michael当年用稚嫩的嗓音演绎的这首经典歌曲(没有耳机的自己想办法解决~)。
 
在线播放的歌曲列表如下:
1、Ben - Michael Jackson (1972年演唱。Ben好像是一只宠物的名字,歌曲表述了孩子和宠物之间的深厚友情)
2、She's out of my life - Michael Jackson (1980年演唱。经典~,没听过的一定要听听看,应该是Michael最深情的一首歌了)
3、Scarborough Fair - Sarah Brightman(视频格式的,比较大,所以想听的同学们要多等一会了)
4、我是一只小小鸟 - 一个可爱的小MM演唱的版本,笑死我了~~
5、#### - 一首钢琴曲,名字忘了,只知道很好听
6、We Belong Together - Mariah Carey
 
用了好半天时间才把Ben的歌词写出来了,边听边记,不知道是不是完全正确,有错误的地方希望同学们指正~ 
 
歌词如下:
Ben, the two of us need look no more
We both found what we were looking for
With a friend to call my own
I'll never be along
And you, my friend, will see
You've got a friend in me

Ben, you're always running here and there
You feel you're not wanted anywhere
If you ever look behind
And don't like what you find
There's one thing you should know
You got a place to go

I used to say "I" and "Me"
Now it's "Us", Now it's "We"
(Repeat)

Ben, most people would turn you away
I don't listen to a word they say
They don't see you as I do
I wish they would try to
I'm sure they'd think again
If they had a friend like Ben...
11/30/2006

About AJAX

今天解决了一个AJAX乱码的问题,放在这里以备日后查阅,嘿嘿~~

当用AJAX来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候汉字会正确显示,而送出了GBK编码流的时候就乱了。解决的办法就是在送出的流里面加一个HEADER,指明送出的是什么编码流,这样XMLHTTP就不会乱搞了。

PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset("GB2312")
JSP:response.setHeader("Charset","GB2312");

 

8/4/2006

About My Life

This Is My Life, Rated
Life: 7.9
Mind: 7.2
Body: 7.8
Spirit: 7
Friends/Family: 6.2
Love: 4.3
Finance: 8.4
Take the Rate My Life Quiz
4/11/2006

一位美国强人的简历

       1809.2.12,生日 
   
   1818年(9岁),母亲去世。 
   
   1831年(22岁),经商失败。 
   
   1832年(23岁),竞选州议员落选。 
   
   同年 (23岁),工作丢了。想就读法学院,但未获入学资格。 
   
   1833年(24岁),向朋友借钱经商。 
   
   同年年底(24岁),再次破产。接下来,他花了16年时间才把债还清。 
   
   1834年(25岁),再次竞选州议员,这次赢了。 
   1835年(26岁),订婚后即将结婚时,未婚妻死了。 
   
   1836年(27岁),精神完全崩溃,卧病在床六个月。 
   
   1838年(29岁),争取成为州议员的发言人——没有成功。 
   
   1840年(31岁),争取成为选举人——落选了。 
   
   1843年(34岁),参加国会大选——又落选了。 
   
   1846年(37岁),再次参加国会大选——这回当选了。前往华盛顿特区,表现可圈可点。 
   
   1848年(39岁),寻求国会议员连任,失败。 
   
   1849年(40岁),想在自己州内担任土地局长的工作,遭到拒绝。 
   
   1854年(45岁),竞选美国参议员,落选。 
   
   1856年(47岁),在共和党内争取副总统的提名——得票不足100张。 
  
   1860年(51岁),当选美国总统。成为美国历史上最伟大的总统之一。 

   生下来就一无所有的林肯,终其一生都在面对挫败。他曾经绝望至极,但从没有放弃人生这场跳高比赛  .

2/27/2006

想念大洋彼岸的“胖子”~

好久没有在Space上写过什么了,上一次还是在去年的九月,感觉真的是日月如梭啊,还没来得及干点什么呢,时间就已经呼啸着从我的身边飞走了。虽然不愿承认,但这确实是每时每刻都在发生的事情,不过,值得庆幸的是我终于再一次意识到了这一点,同时也代表着我曾经的梦想离“不现实”这三个字的距离更近了。
 
今年跟往年不太一样,从我身边飞走的不只是时间,还有一个“胖子”(虽然那个家伙肯定会对我用这种词汇来形容她表示强烈不满)。21号上午,她再一次坐着喝饱了汽油的机器大鸟飞到了大洋的彼岸,回到了那个充斥着洋鬼子的世界,而我们之间的距离也又一次被无数千奇百怪的海洋生物和看起来就肯定不好喝的海水所占据,下一次见到她估计要一年以后了,或许会更长.......
 
想念她烹制美食的味道,想念那个大洋彼岸的“胖子”~
 
 

PHP5安装笔记

Windows版的PHP5和PHP4相比,安装过程有些变化,安装更多的考虑到以后的可升级性,安装PHP5时建议安装在没有空格的目录名下,以免出现失误,如果安装在含有空格的目录下,那么配置的时候最好将目录名用引号引起来。
 
以下是Windows版PHP5的安装手册:
 

1。php4ts.dll/php5ts.dll:对php4ts.dll/php5ts.dll的路径说明也比较清晰而且更加利于将来的升级:第一种法案就是老的copy到系统目录,第二种方案就是添加PHP4/5到%PATH%中去(我这个懒人,在PHP4时就独辟蹊径的喜欢这么搞,因为这样做是符合windows查找文件时搜索路径的顺序(.->%PATH%)。

2。PHP.ini:出于安全和效率的考虑,建议使用php.ini-recommended作为php.ini的蓝本,而不要使用php.ini-dist。同时PHP.ini的查找路径也不再限于PHP4时代的%SystemRoot%下了,PHP5按照以下路径查找PHP.ini:

     * PHPIniDir (Apache 2 module only)
     * 注册表键值:HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath
     * 环境变量:%PHPRC%
     * PHP5的目录 (for CLI), 或者web服务器目录(for
       SAPI modules)
     * Windows目录(C:\windows or C:\winnt)
这五个方案中,配合Apache2时最好使用PHPIniDir,其次是使用%PHPRC%环境变量,另外,NTFS上记得给服务器开PHP.ini的读权限。

 

3.配置web服务器:
   对于IIS,以IIS的ISAPI模块运行PHP:
        1.在系统变量中添加%PHPRC%变量,取值为你的php.ini所在的目录(
比如在PHP5安装目录下。
       2.为了使用HTTP Authentication,在ISAPI Filters上添加一个属性
为php5isapi.dll的PHP筛选器,如果不使用HTTP Authentication,可以不管这一步。
       3.在主目录选项卡,点击配置,应用程序映射新建扩展名为.php并且可执行文件为php5isapi.dll。
       4.好了,重新启动IIS,写个测试。


   对于Apache,我一直都喜欢 以Apache的模块运行PHP
 1.编辑httpd.conf
 # LoadFile "e:/Apache/php4ts.dll" 
 # LoadModule php4_module modules/php4apache.dll

 #加载php5ts.dll,这无论是apache还是IIS都必须以来的链接库
 LoadFile "E:/PHP5/php5ts.dll"

 #加载php5的apache模块
 LoadModule php5_module "E:/PHP5/php5apache.dll"

 #设置PHPRC变量,以提供给PH5查找配置文件PHP.ini,就无需在跑到%SystemRoot%下去找php.ini了
 SetEnv PHPRC "E:/PHP5"

 #注意,如果定义了ClearModuleList指令,则添加如下语句,如果没有则无须添加,我当初没有
 #添加该行 ,结果将测试用的phpinfo.php的源码给下载下来了
 AddModule mod_php5.c

 #为了兼容添加php3和php4的类型
 AddType application/x-httpd-php .php
 AddType application/x-httpd-php .php3
 AddType application/x-httpd-php .php4

 2.重新启动apache(NET STOP apache && net start apache),写个测试。

4.额外的配置
为了更好的配置php5,还需要根据个人需要重新编辑你的php.ini:
 比如需要使用smart和pear ,则需要更改的是:
 include_path = ".;E:/PHP5/Smarty;E:/PHP5/PEAR"
 另外php5再也不像php4那样内置了对mysql和ODBC的支持了,而是只内置对ODBC
进行支持,所以如果需要使用Mysql数据库的话,还要设置extension_dir(php_mysql.dll)的目录以及用
extension加载php_mysql.dll

 #修改extension_dir为:
 extension_dir = "E:/PHP5/ext"
 #删除extension=php_mysql.dll前的;,以加载php_mysql.dll
 extension=php_mysql.dll
差不多就这些了。

 

另外,对于加载Mysql模块时的:PHP startup: Unable to load dynamic library :E;\PHP5\ext\php_mysql.dll问题,继续。。。

如何解决PHP startup: Unable to load dynamic library的错误

怪啦!今天的Apache和IIS都没法正确加载php_mysql.dll。google了一下,原来发现出现这个问题的人还不少,PHP startup: Unable to load dynamic library :E;\PHP5\ext\php_mysql.dll。明明php_mysql.dll就摆在extension_dir (= "E:/PHP5/ext")下的嘛,怎么会呢?而且就在php_mysql.dll之前的extension=php_gd2.dll都没有出现这个问题,怪了!有人说copy libmysql.dll到 %windir%\system32下就可以解决问题,其实"华山不这一条道":

 

PHP被我挪了个窝,%ProgramFiles%到E:\下,导致一些要依赖于其他dll才能工作的扩展无法正常加载这些dll,出现加载扩展出
错,以刚才的php_mysql.dll为例,php_mysql依赖libmysql.dll,由于给PHP5挪窝了,而又没有把新的E:\PHP5夹道%PATH%中去
,所以没法找到这个libmysql.dll,才会出错。所以为了能够使用这些mysql的扩展,除了要正确地配置extension_dir外
,还得保证系统能够这些扩展所依赖的dll,解决的办法有两个:
1 将这些依赖的dll拷贝到%windir%\system32下
2 或者将PHP5的安装目录添加到%PATH%中
无论那个都可以很好地达到我们地目的。
够简单的,但是有时候还就想不到哪儿去。
到底哪些扩展依赖哪些dll呢?以下列表可以帮助我们回答这个问题:
php_curl.dll CURL, Client URL library functions Requires:   libeay32.dll, ssleay32.dll (bundled)
php_domxml.dll DOM XML functions PHP <= 4.2.0 requires: libxml2.dll
   (bundled) PHP >= 4.3.0 requires: iconv.dll (bundled)
php_fdf.dll FDF: Forms Data Format functions. Requires: fdftk.dll
gnu_gettext.dll (bundled), PHP >= 4.2.3 requires libintl-1.dll,
php_iconv.dll ICONV characterset conversion Requires: iconv-1.3.dll
php_ingres.dll Ingres II functions Requires: Ingres II libraries
php_interbase.dll InterBase functions Requires: gds32.dll (bundled)
php_java.dll Java functions PHP <= 4.0.6 requires: jvm.dll (bundled)
php_ldap.dll LDAP functions PHP <= 4.2.0 requires libsasl.dll(bundled),
     PHP >= 4.3.0 requires libeay32.dll,ssleay32.dll (bundled)
php_mcrypt.dll Mcrypt Encryption functions Requires: libmcrypt.dll
php_mhash.dll Mhash functions PHP >= 4.3.0 requires: libmhash.dll   (bundled)
php_mcrypt.dll Mcrypt Encryption functions Requires: libmcrypt.dll
php_mhash.dll Mhash functions PHP >= 4.3.0 requires: libmhash.dll   (bundled)
php_msql.dll mSQL functions Requires: msql.dll (bundled)
php_mssql.dll MSSQL functions Requires: ntwdblib.dll (bundled)
php_mysql.dll MySQL functions PHP >= 5.0.0, requires libmysql.dll   (bundled)
php_mysqli.dll MySQLi functions PHP >= 5.0.0, requires libmysqli.dll   (bundled)
php_oci8.dll Oracle 8 functions Requires: Oracle 8.1+ client libraries
php_openssl.dll OpenSSL functions Requires: libeay32.dll (bundled)
php_oracle.dll Oracle functions Requires: Oracle 7 client libraries
php_sybase_ct.dll Sybase functions Requires: Sybase client libraries
php_xmlrpc.dll XML-RPC functions PHP >= 4.2.1 requires: iconv.dll   (bundled)
php_xslt.dll XSLT functions PHP <= 4.2.0 requires sablot.dll,  expat.dll (bundled).
        PHP >= 4.2.1 requires sablot.dll, expat.dll,  iconv.dll (bundled).

 
9/10/2005

改版改版~~

昨天看到自己的空间乱乱的,终于决定整理一下,以前发的文章都太长了,给长一些的文章都加上了滚动条,这下看起来舒服多了~~  
9/4/2005

帮你免于失业的十大软件技术

能跟上关键技术的发展,是你在就业市场和未来保持优势的最佳手段。你对我们列出的十门技术精通吗?哪怕是大略精通?
我不知道你的具体工作是什么。如果你是某冷门领域的专家而变得不可或缺,或者你们的公司十分稳固,以你现有的技术就足以安度你的职业生涯,那我不知道你是否有失业的危险。不管怎样,请你先不要急着寄出那些告诉我你们的公司对用VB3十分满意或你们除C以外永不用其它语言的信件,并保留起那些讲述.NET将如何把Java扫地出门、XML将如何取代关系型数据库、或你怎样能用汇编语言或C写任何软件而任何其它开发工具都不重要的信件。

现在,想象一下如果你像很多受裁员和公司倒闭影响的同行一样失去了工作,那将会怎样。如果你突然需要搬往它处该怎么办?如果你的公司突然做了技术转向又怎么办?

在目前的就业市场,经理们是根据当前和未来的开发需要招聘雇员。作为开发人员,你所掌握的知识是你找工作和保住工作的关键。你要了解技术的发展方向,跟上技术的变化,这一点十分重要,即使你永远不用再找开发方面的工作。

这里是我选出的当前最重要的十大开发技术,最重要的排在前面。看完本文后,请务必加入talk.editors.devx讨论组,提出你选出的十大技术。

1. XML

首先,你要了解XML。我不是说仅仅是XML规格本身,还包括一系列相关的基于XML的语言:最重要的是XHTML、XSLT、XSL、DTDs、XML Schema (XSD)、XPath、XQuery和SOAP。那些在过去5年内从未碰过键盘的人,可能不知道XML为何物。XML是一种文本文件,使用与HTML类似的标记。XML能定义一个树状结构,并能描述所含的数据。

XML最好的一点是既能存结构化数据也能存非结构化数据。它既能存贮和描述“规格的”(regular)表格数据,也能容纳和描述“粗糙的”(ragged)文件数据。

XHTML是现今写HTML的首选方法。因为它是形式完好(well formed)的XML,比起古老的、通常是畸形(malformed)的HTML文件,XHTML格式的文件更容易处理。

XSLT和XSL是用于把XML文件转成其它格式的语言。可转换的格式包括:文本文件、PDF文件、HTML、以逗号为分隔符的文件,或其它XML文件。

DTD和XML Schema描述XML文件所能包含的内容的类型,并让你“验证”XML文件内容的合理性,而不用写特殊代码以确保内容符合规则要求。

XPath和XQuery是用于从XML文件中抽取单个项目或一组项目的查询语言。XQuery扩展了XPath,因而更重要。XQuery与XML的关系正像SQL与关系数据库的关系。

SOAP是Web服务之间的一个标准通讯协议。尽管你不需要对SOAP标准一清二楚,你应该熟悉一般的schema和它的工作原理,以便能应用这门技术。

2. Web服务

Web服务是XML流行后的一个直接产物。因为你能用XML描述数据和物件,因为你能用schema确保XML文件内容的合理性,因为XML是基于文本的规范,XML为跨平台通讯标准提供了一个极其方便的基本格式。如果你还从来没碰到Web服务,你可能很快就会碰到,在未来5年内,你几乎肯定会碰到。熟悉Web服务十分重要,因为它是目前所有跨不同机器、不同语言、不同平台和不同地点的通讯协议中最简单的一个。不管你需要与否,Web服务是迈向互用性的重要一步。

XML工作组主席John Bosak曾说XML“给Java一些事做”。实际上,Web服务让所有语言都有了一些事做。Web服务让在大型机上运行的COBOL应用软件能调用在手持设备上运行的Java应用程序、能让Java applet与.NET服务器交谈、能让微机软件与Web服务器无缝连接,并提供了一个相对容易的方法,让企业不光能向外界提供数据,还能提供功能,而且是一种与语言、平台和位置都独立的方法。

3. 面向对象的编程

很多程序员仍认为OOP是象牙塔里的技术。但如果你想一下是什么语言在过去的10年里占主导地位,你就会理解OOP不是象牙塔里的技术。OOP从Smalltalk开始,传到C++和Pascal (Delphi)。Java使OOP大踏步地迈向主流,几年后的VB.NET和C#则完全确立了OOP的优势地位。尽管这些语言中的多数并不要求你必须会OOP,但我觉得如果你不了解OOP的基本概念也不知道如何应用这些概念,你能找到的编程工作将越来越少。

4. Java、C++、C#和VB.NET

我把这些语言列在一起,并不是建议你成为每一种语言的专家。我的理由是:学习编程最有效的方法之一是看代码,而你能看到的大量的代码很可能不是用你所喜爱的语言编写的。

在过去几年,各语言的能力越来越接近。现在,你可以用VB.NET写Windows服务、Web应用程序或命令行程序。即使你只使用一种语言,你也应该学一些其它语言,以便能看懂那些样例,并将其翻译到你所用的语言。这4种语言是基本核心,还有其它一些满足不同需要、颇具用途的语言,如FORTRAN、COBOL、APL、ADA、Perl和Lisp。

5. javascript

尽管名字有些相像,但Java与javascript并无关联。为什么一个脚本语言会如此重要呢?因为所有主流浏览器都用javascript。如果你需要写Web应用程序,你就有足够的理由学javascript。javascript可以用作ASP或ASP.NET的服务器语言,也可以当做用于扩展XSLT的功能语言(functional language)。javascript是Mozilla/Netscape中用于激活基于XUL的程序接口的首选语言。javascript的一个变种ActionScript是Flash MX的编程语言。将来,javascript很可能成为新设备的编程语言,以及大型应用软件中的宏语言。

与javascript相对照的是VBScript。尽管Microsoft的软件对VBScript有良好的支持,但VBScript在未来的开发工作中很可能是一个糟糕的选择。就是Microsoft也倾向于用javascript(或Microsoft自己的变种:JScript)写客户端程序。在选择脚本语言时,请选择javascript。

6. 正则表达式(Regular Expressions)

查寻关系数据库可以用SQL,查询XML可以用XPath和XQuery,查询纯文本文件则可以用正则表达式。例如,你可以用一个命令从一个HTML文件中查找并删除所有的注释。各种开发语言内置的一些简单的文本查询功能,如"IndexOf"函数或VB中经典的"InStr"函数或"Like"操作符,根本不能与正则表达式相提并论。现在,各种主要的开发语言都提供使用正则表达式的途径。尽管正则表达式本身既难懂更难读(是回到早期计算机时代的一种倒退),但它却是一个功能强大而且未被充分利用的工具。

7. 设计模式

正像OOP通过把对象分类以简化编程一样,设计模式对一些普遍的对象之间的交互进行分类,并赋予一个恰当的名称。OOP用得越多,设计模式就越有用。一些最常用的模式的名称已经变成了软件开发领域共同使用的术语,所以要跟上信息的主流,你就要对设计模式有相当的理解。

8. Flash MX

如果你需要在客户端得到比HTML和CSS更多的图形和更强的编程功能,Flash是你的答案。用Flash编程比开发Java applets或写.NET代码要快得多,也容易得多。

在最新版本 (MX) 中,Flash不仅仅是画图和制造动画的工具,它已经成为一个编程功能强大的开发环境:能调用SOAP Web服务,也能调用远端服务器上的ColdFusion、Java或.NET程序。Flash无处不在。它的引擎存在于世界上大多数客户端计算机,包括手持设备、置顶盒、甚至是新的书写板电脑。所以使用Flash能大大扩展你的程序的应用范围。

9. Linux/Windows

熟悉Linux。在一台旧机器或新机器上安装Linux。下载图形用户界面,在其基础上写一些程序。安装Apache,写一个Web应用程序。这个世界不再仅仅是属于Windows,这种趋势可能还会持续下去。如果你是一名中坚的Linux开发人员,那就抛弃你对Windows的憎恶,看看你能否做一些Windows编程。Windows能继续在台式电脑上称王是有其原因的,这不仅仅是因为Microsoft控制了这个市场。

没人知道你们公司会在什么时候决定从Linux转向Windows(或从Windows转向Linux),或者你想跳到一家用另一种平台的公司,或者你想出了开发一个杀手软件的好主意,所以你要争取拥有在不同操作系统上的编程经验。

10. SQL

尽管SQL不像本文讨论的其它技术那样新,而且SQL的重要性在未来10年内很可能降低,但它仍然是一项基本技能。很多开发人员还没有掌握这门技术,或掌握得不够,不足以有效率地使用它。不要依赖具有图形用户界面的SQL生成器替你做事情,你要自己手工地写查询命令,直到你熟悉基本的SQL语法为止。了解SQL不仅能帮助你日后学习XQuery,你还有可能马上发现能简化或改进目前项目的方法。

培养好奇心

最后,(对,我意识到这是第11门技术),好奇心是你最重要的技能。要去尝试各种东西。新语言或新技术对你当前或将来的工作可能有用,也可能没用,但并不是你所学的每一件事都是为了工作。不要害怕失败,万事开头难,学新技术也是如此。大多数失败是因为人们希望太快地学到太多的东西。要对每一点进步感到满意,不要让时间(或缺乏时间)妨碍你。相反,你要安排时间留心、研究、试验新的开发技术和工具。

你可能永远也没有必要成为这些技术的专家,而且我的选择可能根本不适合你的特殊情况,但通过培养好奇心,你将会发现你应该了解的东西。

编辑注:现在就到talk.editors.devx讨论组去评论罗素的选择,并提出你自己的清单。

罗素·琼斯是DevX的执行编辑。E-mail地址是:rjones@devx.com。

将消逝的十大热门技术----转自《InfoWorld》

还记得推送技术(Push technology)吗?记得Web虚拟现实吗?或者Microsoft Bob吗?一些概念也许最好留给历史。在信息高速公路两旁散落着很多概念,这些概念曾经听起来前程远
大,但还没有引发一场革命就从IT界的视线中消失得无影无踪。

     还需要例子吗?不用多找,这样例子比比皆是。《InfoWorld》推出本应成为“10大”,但却从未真正成功的热门技术。但谁又知道呢,如果有合适的人留意的话,其中的一些梦想可能会变为现实。

 

                         大型机之死

     在Windows 3.1发布之前,专家们就敲响了古老大型机的丧钟。十多年以后,用户当然不用再温顺地找到大型机的主管,以得到使用大型机的许可。但数据中心里的这些笨重的大箱子还远没有死亡。

     上世纪90年代,许多企业开始实施IT项目,以将应用从大型机迁移到更廉价、现代化的硬件上。可惜,其中的很多项目仍停留在日程表上,或被完全放弃了。

   事实上,Web应用等一些大型机应用复制起来相当困难,且迁移数据的费用就像天文数字。此外,还有重新培训费用、软件许可费用以及宕机的业务风险。尽管迁移的想法很好,但大型机仍在运行。

     值得赞扬的是,IBM公司在这些大家伙上做了很多事情,而不仅是维持现状。该公司最新的大型机硬件产品线(具有讽刺意味的是以恐龙为名称的),除了支持传统的z/OS软件外,甚至支持Linux和Java。

     那么,那些没有放弃大型机的客户是否会发大财?也许――如果用来支付他们的租用费的资金数额不小的话。不过,在最后一个这类应用停止使用前,我们认为有关大型机完蛋的报道太夸大其词了。

 

                           Java无处不在

   从诞生之日起,Java就打算征服世界。由于高度面向对象,Java比以前的语言更高雅。人们可以编写一次Java程序,它就可以到处运行。它速度快、可靠、安全......它可以带来人们希望从一种开发工具上得到的任何东西。

     要达到如此之高的目标,Java实际取得的成功的确令人难以置信。但其令人失望之处同样难以忽视。

   Applet是Java的第一个失败。宏媒体(macromedia)抢走了富媒体(rich-media)市场,把客户机端Java贬到了跨平台实用程序和管理工具的小众市场。Java语言最终在服务器端找到了用户。然而此时,许多年来不断变化的SDK和难以捉摸、常常流产的API玷污了Java曾经高雅的设计,令新信徒们感到困惑,使得与以前版本的兼容性变得毫无希望。

    Java 2给我们带来了Enterprise Java。毫无疑问,它是第一个成熟的Java版本。但是,许多机构仍偏爱普通的服务器小程序(servlet),而不喜欢被认为是J2EE王冠上的宝石的复杂EJB架构。同时,那些一头扎进J2EE怀抱的人,基本上牺牲了Java编写一次、随处运行的承诺,去换取应用服务器的专有扩展。目前,随着坚定的开放源代码开发人员转到Microsoft公司的C#等竞争性技术的旗下,Java获得世界统治地位的机会之门可能很快就会关闭。

 

                          移动宽带

  4年前经济全面衰退时,美国移动电信公司宣称通过3G网络提供的无线宽带即将面世。但业界对部署费用高昂的3G不感兴趣。相反,利用其在传输语音所需要的基础设施升级,运营商推出形形色色的所谓2.5G解决方案的缩写词。但是,所取得的速度与其说是接近真正的宽带,不如说是更接近拨号――尽管Sprint和Qualcomm喜欢将自己的技术称为“3G第一阶段”。

   谢天谢地,移动宽带列车终于就要进站了。Verizon公司已向美国6个大城市地区部署了EvDO(演进、优化的数据)服务(具有300Kbps到500Kbps的下行数据速率),并计划在2005年年底时覆盖全美国。Sprint将是下一家公司,尽管它在EvDO部署上落后于Verizon。

  同时,Cingular Wireless公司从对AT&T Wireless的收购中继承了UMTS(通用移动电信系统)技术。UMTS速度比EvDO慢,不过也在美国6大城市推出。但为了取得高于EvDO的速度,Cingular可能将成为第一家利用低时延的HSDPA(高速数据分组接入)技术的运营商。

     需要提醒的是,在所有这几项服务上,用户共享基站带宽。因此,3G数据变得越普及,对性能潜在影响就越大。

 

                         语音识别

   早在上世纪60年代,人们就已开始利用语音识别技术来控制计算机――至少在科幻小说里如此。然而有趣的是,就技术而言,电影《星际旅行》中计算机的语音驱动UI(用户界面)可能并没有那么遥不可及。

     Dragon Naturally Speaking和IBM ViaVoice等字典软件,使计算机将语音转换为文本的能力上有了巨大的改进。同时,VoiceXML和SALT(语音应用语言标记)等基于XML的标准,使企业比以往更容易将语音识别功能集成到现有应用基础设施中。

  2004年3月,Microsoft语音服务器部经理James Mastan宣布说:“我们的目标是让语音识别技术成为主流。”你从Microsoft得到的与其说是主流技术,不如说是某种保证。目前,尽管Speech Server 2004已推出有一年了,但我们大多数人仍经常使用鼠标而不是麦克风。

  也许,真正通用的语音UI与人类优先考虑的另一件事情相比处于次要位置:安静。想像一下整个办室中的工作人员都向桌面PC大声发出命令产生的噪音吧。在我们解决这个问题之前,语音控制可能仍将保有电信、医疗保健、伤残人员和联邦太空飞船等小众市场。

 

                     Microsoft Passport

     在推出五年后,Passport(即Microsoft的单一登录方案)日趋没落,虽还没有终结。例如,Microsoft仍在使用它。

     所有人都记得Passport。你可能不记得的是:它曾被设想为一种联邦身份模型:Microsoft的.Net Web服务大业(最终的名称为HailStorm)的认证基础。不幸的是,尽管董事长兼软件总设计师Bill Gates大声为Passport叫好,但一场风暴马上就要来临。

     依赖于“可信网络”的Passport,用户可以利用单一登录和口令,无需重新输入敏感的个人数据,就可跨网站旅行。然而,信赖是一种脆弱的东西。对Passport进行挖地三尺调查的开发人员和隐私观察家对自己的发现感到惊慌。

在Passport走上崎岖之路的两年后,Windows测试网站Bugtoaster.com报告发现一个让黑客能够偷窃Passport账户所有者的用户名和口令的OS设计缺陷。2002年8月,美国联邦贸易委员会命令Microsoft加固安全“不足之处”,宣称该公司在未通知用户的情况下采集数据。

     紧接着就有了来自Microsoft的坚决的承诺,但是损失已造成了。Passport的采用率直线下降,Monster和eBay等金牌合作伙伴退缩了。去年,Microsoft撤下了参与站点的在线目录。

 

                    改进Internet

     我们都知道Internet远非完善。IP的寻址问题被讨论了一次又一次,但是,Ipv6在美国的广泛采用似乎没有一点离我们越来越近的样子。但IP地址的短缺并不是互联网工程技术人员正在解决的惟一问题。

     安全是萦绕在所有人脑海里的问题。人们建议在全互联网范围采用端到端的加密,但是并没有出现朝这个方向前进的行动。2001年,当前美国计算机安全“沙皇”Richard Clarke谈到发生“数字珍珠港”事件可能性时,他的警告没有引起多少人的注意。

       再往前追溯,1992年3月,IETF第一次证明了利用IP多播技术提供广播服务的潜力。10多年以后,即使我们已经看到了消费者对多媒体广播和多媒体流的兴趣爆炸式增长,与专用研究网上的情况形成显明对比的是,目前仍没有一种在Internet上进行大规模多播的可靠方法。在这方面,Internet2又如何呢?人们声称建设Internet2的目的是为了部署“用于研究和高等教育的高级网络应用和技术,以加快创建明天Internet的速度。”那么,准确地说,何时才算“明天”呢?

当然,基础设施升级是阻碍互联网发生重大变革的巨大障碍。互联网变得越大,新技术普及达到实际应用的规模就越难。但是,我们难道不需要从某个地方开始吗?

 

                             无纸化办公

   听起来可能十分诱人,但是,正如冷聚变和苦杏仁苷癌症疗法一样,无纸化办公室是20世纪最大的玩笑之一。它所展现的美好前景是:技术将淘汰基于纸张的记录;凭借计算机、电话以及其他形式的电子通信技术,办公室工作人员或经理们所需要的每一比特(数量单位)的数据都在他们的指头尖上。

  事实上,早在上世纪80年代发生PC革命之前,无纸化办公室的概念就提出来了。D. Roosevelt总统的科学顾问Vannevar Bush在上世纪30年代初首次详细论述的Memex,被认为是除科幻小说之外,对“未来办公室”的第一个著名说明。尽管是幻想,但由于Memex是在Internet时代之前,依赖微缩胶片和邮政服务交换信息,同样不切实际。

  60年后,无纸化办公室仍是个白日梦。如果有什么区别的话,那就是近些年发明的技术让产生纸张文件变得毫不费力。集扫描、复印、校对和电子邮件功能于一身的多功能打印机是办公室技术中最热门的物件。

   在人们发现在明亮的显示屏上阅读如同在纸张上阅读一样愉悦前,无纸化办公室仍将像独角兽那样难以捉摸。更不要说纸张还兼有以下重要作用:没有什么东西能像一本硬皮报告那样,可以掷地有声地摔在会议室桌子上。

 

                    语义Web

   假如你是Web发明人,你打算拿什么作为加演节目呢?假如你是Tim Berners-Lee,你试图把它做得更好一点。

     Berners-Lee推出了他的下一个成果,即所谓的语义Web,其目的是解决在线信息组织的基本问题。Web将信息孤岛连接起来,构成一条世界各地的人都可访问的巨大网络。可是,这是一种无组织的连接:人类可以理解,但自动化系统理解起来非常困难。

   语义Web旨在利用元数据解决这个问题。利用专门为机器设计的新语言表示的元数据描述网页内容。其最终目标是使搜索引擎、自动代理和其它内容分类工具,能够更加容易地找到人们所需要的特定信息。

  这是个很好的创意。在1998年9月Berners-Lee发表第一张路线图几年后,语义Web发展成为羽翼丰满的W3C机构,并在媒体上得到广泛讨论。但是,除了研究应用外,实际应用的例子似乎距我们很远。

   但我们应当感到吃惊吗?最终,语义Web的真正思维变迁可能不是技术,而是将Web视为一所图书馆――而不是一种“新型电视”――的想法。

 

                         人工智能

   1956年,人工智能(AI)一词诞生于Dartmouth学院。在此后的20或30年间,它发展成为一个巨大的产业,出现了数不清的研究项目,探索其各种可能性。但现在,它似乎要消失得无影无踪了。

   实际上,AI由三个主要分支组成:KBS(基于知识的系统)、RBS(基于规则的系统)和ANN(人工神经网络)。到目前为止,只有RBS在商界中生存了下来,通常以BRMS(商业规则管理系统)的形式出现。

  这一领域中的大型项目已演变为大型系统,几乎可做开发人员想做的所有事情。问题在于,掌握所有阴谋诡计需要很多年时间;等到学会后,又出现了新系统需要学习掌握。

  用户和厂商将太多的时间用在了比较标准基准上,而不是花时间设计真正代表真实世界问题的测试。BRMS存在的问题是,它将50%到70%的时间用于发现问题――在人们编写代码前,而大多数项目经理更喜欢立即的结果。

     总而言之,与从未使BRMS超过第二阶段的大量尝试比起来,实在并没有多少真正的BRMS成功故事。这真的是AI要提供的最好东西吗?

 

                         B2B电子商务

       随着网络经济开始在2000年降温,任何仍置身于.com竞赛的精明企业家都紧紧抓住B2B作为手中的王牌。下一代在线商务模式的热门时髦词是“非居间化”(disintermediation)――其含意就是砍掉中间人(仅此而已)。然而,利用Web来连接合作伙伴,以及想方设法在幕后完成交易,这并不是取得巨大成功的处方,只不过是消费者此前就面对一种电子商务模式。

   首先,让它运转起来所需要的Web服务等集成技术,在2000年根本没有准备就绪。其次,对于参与其中的供应方来说,没有太大的诱惑力――为什么要向B2B厂商付钱才能参加一场投标,而在这场投标战中,你却被迫降低价格,去竞争你认为已赢得的客户?最后,B2B的基本假设没有意识到:与消费销售领域不同,企业关系不仅仅只是以费用和可用性为基础的。

  不过,如果认为B2B行将就木,这还为时尚早。日益增长的SOA(面向服务的架构)和模块化应用市场可能会成为企业基础设施提供者的理想机会:如果他们这次能用一点现实主义来控制自己野心的话。

从朋友的SPACE转过来的文章,真的是经典啊!佩服作家的文笔,原来讽刺也是一门艺术!~

一、薛宝钗。

   可怜的薛姐姐,让曹雪芹给朝反面写了,直到三百年后的今天才找到知音。要娶就娶宝钗那样的人,因为她美丽,因为她温柔,因为她聪明,因为她大度,因为她宽厚,因为她恬淡……林妹妹呢?尖刻、敏感、小气、多病……要她干吗?

   实在想不明白有的人是怎么看的《红楼梦》,把老曹赋予林黛玉的优点都给了薛宝钗,把加在薛宝钗身上的问题都给了林黛玉。林黛玉薛宝钗同是贾府外姓人,都存在一个生存的问题,对于这个问题,林黛玉是花开花落,薛宝钗是苦心经营。苦心经营,可贾府并不是一群傻子,相反那些人都绝顶聪明,谁能看不出?所以即便曹雪芹笔下,在贾府,薛宝钗也并不让人待见。

   曹雪芹给薛宝钗设计了一把扇子,扇者善也,可宝钗的善是伪善,充满虚情假意,发泄妒意邪风。第二十七回,她偷听红玉、坠儿说话,让人家发现,她却说来借扇子,掩盖了自己,掩盖自己也就罢了,还要喊一句“颦儿你往哪里藏”,让红玉、坠儿误解是林黛玉在偷听她们说话。用心之险,瞠目结舌。这哪是个女人呀?简直就是个巫婆。曹雪芹直言她是杨贵妃,表面是说她富态,实际是讽她误人。

   在和林黛玉的对比上,看是林黛玉小心眼,薛宝钗大心眼,实际恰恰相反,林黛玉不但不是小心眼,简直可以说是无心,薛宝钗不但不是大心眼,简直可以说是匠心。林黛玉喜怒爱憎形于色、见于言,“见一个打趣一个”,处处事事与人计较,细说起来,都是无伤大雅的玩笑而已,更有些是出于她嫉恶如仇的品性。心有所思,口有所出,把自己的心灵毫无遮掩地坦露出来,如此坦荡做人,这还不是一个典型的大心眼吗?和这样的人相处,你是大可以放宽心的。薛宝钗呢?处处察言观色,时时小心行事,该说的不讨人喜欢的话她是绝对不说的,不该说的奉承话她也能厚着脸皮去说。事无大小,都要绞尽脑汁,看风使舵,左右逢源,这还不是一个典型的小心眼儿吗?和这样的人相处,你却要处处留神了。

   说到吃醋不吃醋,更让人想不明白了,林黛玉是明事理的人,宝玉和几个丫环打闹,脸上全是胭脂,黛玉看见,怎么样了?用手帕轻轻擦去,说道,让人家看见还不笑话。没了。要是换成宝钗,她不扭头就走才怪呢。

   可就是这样一个人,愣是让今天的大老爷们喜欢得不得了。问问十个人,八个半说薛姐姐中意。林黛玉和薛宝钗,一个是寄人篱下的孤儿,一个是皇家大商人的女儿;一个天真率直,一个城府极深;一个孤立无援,一个有多方支持;一个是叛逆者,一个是卫道士。在今天这个越来越不需要正义和善良的年代,我们不正是需要薛姐姐那样的人吗?黛玉是我们当初锋芒毕露的纯真,宝钗是被现实的河流磨圆了锋棱的石子。今天谁还敢锋芒毕露,谁不在夹着尾巴做人做事。选择了宝钗吧!让黛玉的精灵,退缩在灵魂深处,成为一缕偶然闪过,未曾抿灭的灵犀。

   正义之倾斜,善良之泯灭,理想之坍塌,情感之消退,让人不得不感叹现实之现实。

   打油:半部红楼看半遍,似懂非懂就装蒜。

   偏偏你还主意真,拿着坏蛋当好蛋。    

 

二、猪八戒。

   一个网站搞了一次调查,唐僧师徒四人,现在的女人都想嫁给谁。答案:80%的人想嫁给猪八戒,10% 的人想嫁给唐僧,8%的人想嫁给沙僧,只有寥寥几人想嫁给孙悟空。

   这是一个权百害而着其轻的选择。唐僧英俊潇洒、意志坚强、心地善良,反过来就是不解风情、顽固不化、穷苦一生;沙和尚忠厚老实、任劳任怨、光明坦荡、反过来就是没有本事、容易吃亏、胸无城府;孙猴子英勇善战、不避艰辛、明辨是非,反过来就是好事恶斗、物下所值、惹是生非。天哪,不就剩下一个猪八戒了吗?他没有本事,但有点能耐;他胆小怕事,但能明哲保身;他阴逢阳违,但不吃大亏,他好吃懒做,但会享受生活;他爱撒谎,但会说话;他好女色,但解风情;他笨,但听话呀。我要嫁八戒呀我要嫁八戒,八戒是我心里的最佳男人。

   这也不能完全怪罪女人,我们传统的理解,唐僧不就是顽固、迂腐、类似于白痴的象征吗?猴子不就是调皮、顽固、还不讲礼貌的典型吗?和尚不就是愚笨、吃苦、简直是无能的类别吗?淑女们不过是发扬了传统文化,并赋予了时代意义而已。坚定?善良?奋斗?造福大众?吃苦耐劳?现在这社会哪还兴这一套呀,现在我们需要的是猪八戒的能贪就贪,能捞就捞,明哲保身,奇技淫巧,当然还有怜香惜玉、善解人意。

   这可高兴坏老猪了,那么多女人喜欢,那么多女人想嫁,他还不一拍大肚皮,憨厚地笑一声:“哼哼,没想到猴哥和师父在二十一世纪还没我招人待见。”然后左手一个杨甜妹,右手一个董佳人,洞房去了。

   打油:现在女人真奇怪,放着好人她不爱。

   到底爱上了什么?

   大家都爱猪八戒。

 

三、潘金莲。

   时代真的进步了,今天人们终于看清了潘大姐身上的蕴含的时代特征,那就是义无反顾的反叛精神,和追求幸福的人性需求。反叛封建婚姻有错吗?追求人生幸福有错吗?没错,所以,潘金莲没错,潘金莲无罪,潘金莲可怜,潘金莲可爱。历史铭记潘金莲,人民需要潘金莲,时代呼唤潘金莲。

   我潘金莲出身贫苦家庭,迫于生计嫁给了一个糟老头子,无奈大奶奶吃醋,又把我送给了一个小矬子,小矬子什么都小,怎么能满足我这个如花似玉的姑娘、如狼似虎的年龄,看到小叔子那健壮的胸大肌,能不让我想入非非?无奈小叔子要么是不解风情,要么是迫于颜面,要么他干脆就是个阳痿患者,任凭我怎么勾引,他就是不理我,所以我才红杏出墙。可是那个小矬子老是坏我好事,他不能满足我还不让西门大官人满足我,跟踪我,讽刺我,要挟我。我实在没办法了,才给他喝下了五骨断魂散。你以为我想害他呀,你没有看到吗?在他端起药碗的一瞬间,我扭过了身子,两行清泪已流满了我的脸颊……

   我长期生活在被人侮辱又寂寞难耐的日子里,虽身心受到了残酷的摧残,但内心从未放弃过对未来美好生活的憧憬;我与西门庆的邂逅改变了我的一生,他让我体验了从未有过的快乐;为了爱情,我忍心毒杀了武大郎,这样的心胸,这样的痴情,中国的梁山伯与祝英台是没法比了,世界上也就罗蜜欧与朱丽叶他们俩能望我项背;当理想的光辉和残酷的现实发生矛盾时,我显示了一个伟大女性的力量;我与天斗,与地斗,与武松斗,与世俗斗,与封建枷锁斗……

   可是,在封建遗毒的迫害下,我却背负了千古骂名,成了淫荡和残忍的象征,遭人唾骂六百多年……

   历史是公正的,时间之砂终究会磨砺出真的金子,感谢这个时代,感谢二十一世纪。今天,历史终于给了我最公正的评价,时代终于发现了我的价值。

   如今我时转运来,大出风头,无比荣耀,我不但已经成了勇于追求人生幸福的典型,而且还成了女权主义的一面旗帜。听说还有人终于勇敢地站出来承认他是“历史文化名人潘金莲第19代玄孙西门不二”了,听说还有人在筹建“潘金莲竹竿研究会”,还有人准备开个“潘金莲纪念馆”。哎呦,没想到啊没想到,我潘金莲也有光宗耀祖的一天。

   2003年全国高考语文考试中,一个学生对我进行了理性的分析,写了一篇《潘金莲的选择》,虽然开始得了20多分,但是又经过三次会审,最终给了我绝对高分50多分。看看,我的精神,早就深入到了青少年的人心,并且最终感动了那些老古董们。哼哼,也不知道那个写作文的小伙子长相怎么样,要是……哼哼……更美了!

   好了,我老潘不多说了,再次感谢为了我翻身而做出辛勤劳动的人们,感谢那些忘记了我杀害了武大郎的人们,感谢这个让我扬眉吐气时代,感谢这个已经没有了大是大非的二十一世纪。

   我愿意与大家一起生活在这个年代。

   打油:奴家就是潘金莲,感谢大家弃前嫌。

   这个时代真美丽,去找官人续情缘。

 

四、朱淑真

“恼烟撩露,留我须臾住。携手藕花湖上路,一瞬黄梅细雨。娇痴不怕人猜,和衣倒睡入怀。最是分携时候,归来懒傍妆台。”朱淑真有过花样年华,在那个花样的年华里有过幸福甜蜜的爱情,从这一首《清平乐。夏日游湖》里我们不难看到。通读朱淑真的诗我们还可以探出朱淑真爱恋的情人可能是一个从外地来赴试借住在她家的书生。情人有情,却是无缘,后来朱淑真由父母之约嫁给了一个官吏,所遇非人,受尽折磨,最终忧郁而死。她死后,她的父母将她的遗体和诗稿一火焚尽,今留其诗已不过十之一二。“娇痴不怕人猜,和衣倒睡入怀”,在今天看来可能太过平常,可在古时却是惊天骇俗,以至有人将“和衣倒睡入怀”改为“随群暂遣愁怀”。

   可怜就可怜我这个喜欢朱淑贞清新自然的诗词的人了,只能看到朱淑贞诗词的十之一二。朱淑贞的那些稍微热情直露的诗句在那个年代都被视为大逆不道、淫荡之至,不知道今天我们很多女作家该作何感想?能把她们给吓死。

   现在的女人什么不敢写呀?二十一世纪是一个不拒绝一切的世纪,还能拒绝用身体写作?人民是不拒绝用身体写作的,当然如果你不用身体写作来面对人民,而是直接用身体来面对人民,人民就更不拒绝了。卫慧当然知道这个道理,所以连让外国人在卫生间“干一炮”都敢写,全国人民还一阵欢呼声,最后还是政府喊了一声“停”,她才不让人干了。卫慧刚消停,不知从哪里又冒出个安妮宝贝,三篇文章读下来,我的牙倒了一大片;再读一篇,我的一个东西却立起来了。宝贝我还没琢磨透呢,从新加坡回来个九丹,此丫更猛,连怎么被人嫖的都敢写,让老作家陆文夫都忍不住说了句“道德沦丧”。不过九作家不是假猛,是真猛,你不是说我道德沦丧吗,那我就陪你上床,这回连老作家都不敢哼唧了。这边热闹还没看完呢,那边突然又蹦出个“享誉世界文坛”的“著名旅英女作家”虹影。说实话,这些人真的有点考验我的神经的味道。我虽然不大会写文章,但用汉字写文章的人我多多少少还能说出几个,可她们一会儿出来个“著名作家”,一会儿出来个“享誉世界”,我还都没听说过,让我经常怀疑自己是不是真的孤陋寡闻。

   事实上不止这些,就是那些本来有点名气的作家也忍不住了,一个叫王干的评出了中国文坛“四大花旦”:池莉的《水与火的缠绵》,张抗抗的《作女》,张者的《桃李》都赫然在列,还有一个就是虹影的《阿难》。能和虹影的《阿难》并列,不用看我也知道是什么货色。不过毕大小姐的《拯救乳房》我倒看了,说实话,书的内容远远没有书的名字吸引人。不过再不吸引人也比朱淑贞的那些诗词热情奔放,朱淑真最多写到“衣衫薄”、“春衫透”,胖乎乎的大毕姐姐直接就把乳房扇出来了。朱淑真的那些玩艺和这些玩艺相比,简直就不是玩艺。

   唉!生前颠沛流离,红艳薄命;死后孤魂野鬼,遭人唾骂。谁叫朱淑真生活在不允许“身体写作”的万恶的旧社会呢!

   打油:写完屁股写乳房,写完宝贝写上床。

   淑真要是生当代,何必孤魂在野梁。

 

五、方仲永

   其实,方仲永的那点本事,在今天早已经是雕虫小技了。不信你看看。

   有名有姓的:

   6 岁的窦蔻,《窦蔻流浪记》和《童年的眼睛》两部书的作者;

   10岁时邹琳,出版了小说《露茜梦游奇遇记》、《踏莎行》、《少年英侠》;

   12岁的袁靓,《袁靓童话集》;

   13岁的刘巍,长篇小说《泽野》;

   13岁的蒋方舟,已出版《打开天窗》、《正在发育》、《青春前期》和《都往我这儿看》4 部作品集,同时成为《南方都市报》的专栏作家;

   更不要说17岁的老作家韩寒了。当然还有不怎么出名的刘嘉俊、赵婷婷、徐敏霞、张蒙蒙,都是八九十来岁的孩子。

   还有没名没姓的呢,2 岁的孩子认识上千个汉字你信不信?(痛苦,我儿子两岁的时候说话还不清楚呢)4 岁的孩子要游泳横渡长江你信不信?(痛苦,我儿子也4 岁,昨天我带他洗澡,他非要在卫生间里打个雨伞)5 岁的孩子办画展你信不信?(痛苦,我儿子前天画了幅画,给一个阿姨身上安装了个“小鸡鸡”,还问我画得好不好,我说好,你画了个“二姨子”)不信也得信,白纸黑字,报纸上都有。可惜我都记不住他们的名字。

   现在的孩子是不是有点太聪明了?到底是孩子聪明还是家长聪明呀?现在的孩子是不是太需要荣耀了?到底是孩子需要荣耀还是我们需要荣耀呀?现在的孩子是不是太成熟了?到底是孩子成熟了还是我们世俗了?

   韩寒一部《三重门》卖了八十几万册,考试成绩多科不及格也成了传奇。今天的韩寒呢?今天的寒韩直言写作就是为自己新买的跑车挣汽油钱。再看看韩寒的作品,《零下一度》开始掺水,《毒》更没法看了,十几岁就开始卖名。而那个蒋方舟好像也承认书里有家长写作的成分了,那个邹琳好像说过她一上地理历史课就头疼,(奇怪,不懂地理历史也能当作家,我晕)办画展的那个小姑娘好像不画画了。浮躁狂妄,无病呻吟,哗众取宠,拿腔作调,愣充成熟,故作偏激,瞎编乱造,弄虚作假,都被宠坏了。

   不过,我们这个时代好像需要的东西太多了,连宠坏的孩子我们也需要。我们需要孩子,我们需要孩子给我们带来的新奇、玩笑、刺激、名利、金钱,当然还有跑车的汽油。江山代有才人出,各领风骚三四年。三四年后,管他孩子成什么鸟呢,反正名利双收了。

   所以呀,方仲永应该生到今天,虽然不象那些少年作家个个著作等身,就靠那四句五言,独辟蹊径,也算是天才少年了,找个出版社,找个经纪人,就等着财源滚滚吧。也不用爸爸领着你天天瞎球转了,也不用怕王安石那个老头批评你了,大家赞扬还来不及呢,谁还敢说三道四呀。要么你告他一诽谤,要么你就说他那是嫉妒,中国人的传统劣根,你写首诗讽刺讽刺这种现象,说不定又能得几分稿费。

   恭喜恭喜。

   打油:少年天才方仲永,小说散文十几种。

   大家都快齐称赞,不许荆公来作梗。

 

六、包勉。

   吴妙贞:我心中如刀绞肝扬痛断,叹我儿铜铡下死得可怜。恨包拯全不念叔侄情分,我的儿去找那负义人报仇申冤!

   包拯:恨包勉初为官贪赃罔上,在长亭铜铡下丧命身亡。命王朝下书信合肥县往,嫂娘亲闻凶信定要悲伤。闷忧忧坐馆驿心中惆怅。

   吴妙贞:见包拯怒火满胸膛,骂声忘恩负义郎,我命包勉长亭往,与你饯行表衷肠。谁知道你把那良心丧,害死我儿在异乡。有何脸面你活在世上?快与我儿把命偿。

   包拯:嫂娘年迈如霜降,远路奔波到赤桑。包勉他初任萧山县,贪赃枉法似虎狼。小弟居官法执掌,岂能做事负君王。叔侄之情何曾忘,怎奈这王法条条……

   这是京剧《赤桑镇》的一段唱,说的是包拯铡了他的侄儿包勉,包拯的嫂子吴妙贞来到赤桑找包拯算账。在中国的戏剧中,京剧有《赤桑镇》,豫剧有《陈州放粮》,黄梅戏有《陈洲怨》,杂剧中还有《包共赔情》、《铡包勉》等,说的都是这一段。河南陈州一带大旱三年,谷粒不收,朝廷为此拔粮赈灾。但是州官刘得林、杨全吾却贪赃枉法,采取大秤收银、小斗粜米的手法,大肆吞占赈济粮款。包拯之侄、新科探花包勉受命陈州主持赈粮,又被刘、杨暗设圈套拉拢下水。三人沆瀣一气,欺压民众,并将对他们表示不满的灾民张撇古打死。张撇古之女张娥到开封府告状,包拯接状后不徇私情,秉公而断,拒绝了丞相王廷的劝解和嫂嫂的求情,大义灭亲,将包勉和刘得林、杨全吾一并铡死,为受害的灾民伸张了公道。

   每当看到这一段,我都替包勉感到窝囊。包拯是谁呀?想当年包拯坐镇开封府,发个请柬,连一向不喝酒吃请的王安石、司马光二位丞相都不得不去,放到现在,就是北京市委书记请客,总理去了好几个。位高权重啊!包勉是他亲侄子,想当年包拯没有奶水吃,他是吃包勉他XX的奶水长大的,要不就有“老嫂如母”的说法了。可怜包勉没有得到一点庇护,还让他给铡了。亏不亏?

   感叹啊,感叹只能感叹包勉生的不是时候,要是生在今天,那还有那么多的事情?

   首先,包勉不用考试就可以当官了,想那包勉也是经过十年寒窗最终才考得探花,封知陈州。放到现在,考什么考,哪个大学特招就录取了,包拯要问起这事,就说包勉是省市三好学生,我就不信包拯还能不信,还能不高兴。

   包勉当了县长,贪了一点救济款,谁敢言语?谁言语让他到派出所住半个月。谁敢告状?张娥你到开封府告状,开封府大门都不让你进,警察就给你撵走了。你要写信告吗?写给谁?写给党中央,党中央转到国务院,国务院转到河南省政府,河南省政府转给陈州县委,陈州县的纪委书记接到信高兴坏了,这可是个巴结包勉县长的好机会,屁癫屁癫进了包勉县长的办公室汇报,包勉县长说,你自己看着办吧。纪委书记找到法院院长,一审以诬陷领导罪判处张娥有期徒刑五年。上诉,终审判决四年半。四年半等张娥出来,人家包勉早就上调当厅长去了。

   你包拯不是清官吗?你包拯清官,这些事根本就不会让你知道,你还凭什么铡我包勉?

   即便你知道了又能怎样?我不就贪了几粒救济粮吗?看看现在的官员子弟,人家都不贪这两个小钱,人家走私,人家集资,人家揽工程,人家卖地皮,和他们相比,包勉真的是模范青年啊。

   即便国务院真的下来工作组,或者是“焦点访谈”给播出去了,调查包勉,还真调查出来点事情,等到判刑的时候也不用急呀,戏里不是有句词吗:“国法今在你手掌,从轻发落又何妨?”无妨,无妨!

   哎,可怜的包勉,生不逢时,生不逢事啊!要在现在,就冲你叔叔的位子,你想干什么不行呀?偏偏你生在宋朝,还贪了几个小钱。

   打油:手摸胸膛想一想,包拯包勉一个娘。

   干部也得讲亲情,管他正义张不张。

 

七、陈师道

   我给陈师道列一下社会关系:他老婆和赵挺之的老婆是姐妹,赵挺之的儿子是赵明诚,赵明诚的老婆是李清照,李清照的表舅是秦桧;陈师道的第一个老师是曾巩,曾巩和王安石是铁哥们,王安石的女婿是蔡卞,蔡卞和蔡京是兄弟,蔡京是司马光的亲信;陈师道和黄庭坚、秦观是同学,他们的老师是苏轼,苏轼受三代皇恩,太皇太后曾给苏轼“托孤”。赵挺之、赵明诚、李清照、秦桧、曾巩、王安石、蔡卞、蔡京、司马光、黄庭坚、秦观、苏轼,这些人加在一起能不能颠覆一个王朝?别说一个王朝,我看他们不用什么“斩首行动”,就是一个“震慑和恐惧”就能把萨达姆给吓死。

   陈师道和这么多人有牵挂,可你知道陈师道师怎么死的吗?冻死的。隆冬时节,皇上命众百官上坟,陈师道连一件象样的保暖衣服都没有,他老婆从她姐夫赵挺之家借来一件华服,陈师道因为鄙视赵挺之的为人,拒绝穿他家的衣服,最后受冻得病而死。

   多少人摇头乞尾、巴结讨好的达官贵人,多少人匠心经营、编织测度的社会关系,在陈师道面前简直不足为道,那些人、那些关系,陈师道随便利用一个也不至于连一件保暖的衣服都没有。可那个时代好像没有关系学这一说,哪里象现在,什么为人之道、处世哲学、公关策划、交往箴言满天飞,更有那个大关系家卡耐基的关系手册,多少人奉若神明,躲在被窝里彻夜啃读,还时不时做做笔记,划划重点,比看《金瓶梅》都上瘾,就为做一件事:装饰自己,琢磨别人,发掘关系,升官发财。

   陈师道“闭门觅句陈无己”,却不知道到处走走,找找关系,白白浪费了那么多的关系资源。别说摇头乞尾,想当年朝廷以王安石“经学之道”考举人,陈师道因为和王安石在“经学之道”上有分歧,他连去考都不考,那时候他刚刚二十几岁,他是曾巩的学生,曾巩和王安石是终生密友,以曾巩和王安石的关系,再以陈师道自己的才华,他就是随便写两句,估计也能中举,可他就是不去。看看陈师道可以巴结上的那些人都是什么人物呀,总理级别的就有四五个,部长级别的七八个。就一个李清照没当官,还是社会名流,那李清照可是陈师道正儿八经的外甥媳妇。放到现在,陈师道最差也得写篇《我外甥和李清照的爱情故事》,挣几个稿费。

   可惜呀,陈师道没生对时候,没有受到过《涉世之初》的启蒙,没得到过《读者》的熏陶,没受到过《社会与交际》的指点,没得到过《演讲与口才》的培训,更不要说被多少人都奉为“圣典”的卡耐基的关系手册了。老赵要是能看看这几本书,又有那么好的得天独道的自然资源,谁知道他能编织出多么结实的网啊!

   打油:我替师道直叹息,没有读过卡耐基。

   一生到死耿且直,白白浪费了关系。

 

八、王昭君

   看古诗词,一说到王昭君大都是凄凉之色、含辱之气。从北周庾信“腰围无一尺,垂泪有千行”,一直到明朝莫止“千年青冢在,犹是汉宫春”;从《赵君辞》、《昭君行》,一直到《昭君怨》、《昭君曲》。

   我是真替王昭君所处的那个时代悲哀,本来多好的一件事呀,让他们给搞得凄凉悲惨。你想,嫁给一个“老外”,并且还是“老外”里面的高级领导,这可是今天多少人求之不得的好事呀,你王昭君还一步一回头,回头千行泪。这情形要是让现在那些一心一意要嫁出去的女青年看见了,她们会怎么想?她们肯定会满怀醋意地骂你一句:“婊子养的,不知好歹。”

   一个事件,时代不同、环境不同,意义不同、感受不同。王昭君生在今天,她该是多么令人艳慕啊,而她自己,谁知道会高兴得几天睡不着觉呢。终于不是中国人了,终于可以看到外国的月亮了,终于可以名正言顺地用刀子叉牛肉、用叉子挑面条吃了,多牛逼。那个叫陈冲的二十出头出去的时候不是说过吗,“我要改变在你们中国养成的一切习惯”,那个叫陈智丽后来改名叫小山智丽的不是也说吗,“打败谁并不重要,关键是我要打败中国人”。说实话,有时候做个中国人也真窝囊,连自己的姐妹都不待见我们。

   我这是不是有点吃不到葡萄说葡萄酸的味道?本来么,选择什么样的生活道路是每个人的个人行为,没必要算到数宗忘典的份子上,人家陈冲不还是靠着中国人的背景才干了点人事儿吗?小山智丽去年不是又把名字改成陈智丽了吗?

   管那么多干嘛,先嫁出去再说,管它嫁给猪嫁给狗呢,管它去过猪一样的生活还是狗一样的生活呢。实在混不下去了,一回头不还是归国华侨不是,回来再做个小生意祖国还给优惠政策,胡乱写本书也畅销。这可不是我胡说,十几年了,断过吗?从十年前的《曼哈顿的中国女人》,到五年前的《嫁得西风》,到三年前的《乌鸦》,到今年的《巴黎日记》,不是么?

   “一等女人嫁老外,二等女人嫁港台,三等女人嫁款爷,四等女人桑拿来”,“一等姑娘嫁老外,二等姑娘嫁富商,三等姑娘嫁款爷,四等姑娘嫁‘财’子”,不管怎么说,反正是一等的女人都跑出去了。中国的那句俚语也得改改了,“好*都让狗操了”,改成“好* 都让老外操了”。

   王昭君时候,嫁给老外,就是嫁给外国领导人也是耻辱;今天能嫁出去,那都是本事女人、一等女人的营生。真不是王昭君想不开,是她那个时代想不开。

   打油:昭君真晕菜,生错了时代。

   今天多牛逼,嫁给个老外。

 

九、伯牙

   伯牙有真才实学,那一首《高山流水》能让山不再高,水不再流,却又能让人感到山的威严,水的欢畅。不过有点可惜的是,伯牙的知音太少,就子期一个人,哪象现在,你看人家周杰伦,一句清楚词不会唱,照样万人迷,追星族一拨一拨的。并且伯牙天天到山上弹琴也太累了,既没有人给赞助,又没有广告费,还没有门票收入。用小品演员范伟的一句话说就是:“大哥,可惜你这个人儿了!”

   你看人家张俊以,一首歌写红了,户口也办到首都北京了,影视公司也开张了,个人音乐会也举办了,多少想出名的姑娘少妇老太太他也睡了,中央电视台的晚会连续好几年人家回回坐到第一排椅子上。当然,后来这个XXXX的诈骗人家的人民币又进去了。不过,这是两码事。现在这世道,你欺世盗名,男盗女娼,随你便,只要你不直接诈骗人家的人民币,一般没事。

   咱伯牙的《高山流水》怎么也比他张俊以的《相约九八》好吧?他那是花架子,咱这是真材料,就冲这还怕搞不过他姓张的?就兴他又是开晚会,又是上电视,又是收学生,又是睡女人,咱伯牙就得在山上寂寞?他不是天天在中央电视台露面吗,咱就在中央电视台租一间房子,一边写歌一边教人唱歌。过元旦咱写《同一首曲》,五万元卖给董翠花,再睡她一觉;过春节咱写《常回家瞅瞅》,五万元卖给刘翠华,再睡她一觉;过端午咱写《端午放歌》,五万元卖给陈翠华,再睡她一觉;过鬼节咱写《欢乐鬼节》,五万元卖给吴翠花,再睡她一觉;过腊八咱写《相约腊八》,五万元卖给赵翠华,再睡她一觉……不用怕,这群丫的,花钱卖身就想出名,能出名她什么都敢干。哈哈,这日子,不比在高山听流水和子期瞎掰风流多了?

   别怕写不好,反正咱曾经写好过《高山流水》;别怕没人追求,反正咱有名气。这就是时代的特点,没看现在的词作家就是想方设法一门心思把歌词写得俗气,曲作家就是想方设法一门心思把曲子谱得最难听,歌唱家就是想方设法一门心思把歌唱得谁也挺不懂,那才叫绝对高手。著名篮球运动员姚明不是有句名言吗:“你就别唱一句清楚的,别人听了都说你唱得好。”

   写好写不好,唱好唱不好,这问题不是关键,关键问题是你得会折腾。首先让伯牙要想方设法多朝电视台跑跑,多当几回评委,管它是歌手大奖赛的,还是选美大奖赛的;管它是“哈药六杯”,还是“哈尿六杯”,先混个脸熟。然后再制造点绯闻,绯闻就是名气,名气就是人气,人气就是财气,财气就是色气。造绯闻,最好是和大腕儿的,腕儿越大名气越大,吸引的眼球越多,上报率越高,上镜率越大。一举成名后,咱就开始招收学生,招学生这一招绝对是名利色三收的好办法。你名气大了,想靠你成名的也多了,咱专收女生,白天带她瞎球转,晚上让她陪你睡觉。放心,她想成名,裤腰带肯定就不紧,有求于你呀,还不把你哄个开心。到那时候,哈哈,看看有多少漂亮姐姐妹妹大侄女随便你挑,没听说过吗,一个成功的男人背后,都有一群渴望成功的女人。紧接着就要开个人音乐会,最好在工人体育场,那地方可是小贝流下过香汗的地方,最好把那些不会唱歌的歌星都叫来,周杰伦呀,谢霆锋呀,肖亚轩呀,孙燕姿呀,F4呀……别看这些哥们姐们歌不会唱,人气旺。就这样,伯牙就功成名就了。等大家快把你给忘了,或者对你不耐烦了,适当的时候,宣布退出娱乐圈,等大家眼球又转到你身上了,咱再宣布盛情难却,再搞十场八场的告别演出,花花绿绿钞票又是一大把。

   我操,以伯牙的名气、才气,以我的策划、煽动,这样一折腾,整个中国还不疯狂了?

   打油:伯牙最近有点累,刚刚开完音乐会。

   出门记者就采访,回家学生等着睡。

 

十、登徒子。

   要说最冤还是登徒子。宋玉一篇《登徒自好色赋》就把他钉到耻辱柱上几千年,好色二字和登徒子三字是一个意思。

   登徒子好色不好色呢?别的历史没有记载,就一篇宋玉的《登徒子好色赋》,可是稍微一思考,就会发现宋玉的逻辑不成立。他先说自己面对美色,毫不动心,邻居那个色女墙头勾引他三年,他都不理睬;然后又说登徒子的老婆“蓬头挛耳,齞唇历齿,旁行踽偻,又疥且痔”,但是“登徒子悦之,使有五子。”这是什么逻辑?登徒子的老婆很丑,登徒子和她生了五个孩子,就证明登徒字好色了?我看看恰恰相反,人家登徒子不嫌老婆丑,还恩恩爱爱,正好证明登徒子道德高尚。诸葛亮的老婆一头黄毛,朱元璋的老婆大手大脚,都不漂亮,可人家心灵美。不但我这样认为,毛主席也表扬过登徒子,他说:“宋玉攻击登徒子的这段话,完全属于颠倒是非的诡辩,是采用‘攻其一点,不及其余,尽量夸大’的手法。”“从本质看,应当承认登徒子是好人。娶了这样丑的女人,还能和她相亲相爱,和睦相处。照我们的看法,登徒子是一个爱情专一的、遵守《婚姻法》的模范丈夫,怎能说他是‘好色之徒’呢?”可登徒子愣是让骂了几千年。鬼知道如何推理,天晓得什么逻辑。

   不过这不能全怪宋玉,要怪还得怪那个年代不开化,让登徒子白白背了黑锅,却没有一点的补偿。登徒子就不但冤,而且还很亏了。要是放到现在,情况可能就是两样了。

   我当登徒子的经纪人,为他准备了这样的发展道路:

   首先要在思想上明白一个道理,宋玉是谁呀?那可是皇帝的宠臣,后宫的玩物,文坛的领袖,社会的焦点。这样一个大腕儿费了那么大的力气,在一篇文章中提到登徒子,先别管是褒是抑,这可是给登徒子做免费广告,一夜之间,又一个名人诞生了。

   接着就要接受记者采访,大大地贬低宋玉一番,我登徒子和宋玉住邻居,他家里的那点鸡毛蒜皮会不知道?他和邻居家的那个姑娘到底怎么回事?他和哪个歌星舞星艳星骚星是不是八角恋爱?都给他说说。然后咱再开个记者招待会,把以前说的东西郑重其事地否认掉。这样一热闹,报纸杂志就全是登徒子的名字了。不就扬名了?

   扬名了,接着就是立万。咱出书。第一本,《我有一个丑老婆》,写咱老婆虽然丑了点,但是温柔,心灵美。并且为什么会有五个孩子呢?因为某一方面咱老婆厉害呀;第二本,《不得不说的故事》,写咱和宋玉的过节,因为人生观的不同,生活经历的不同,道德品质的不同,生命追求的不同,宋玉才会对我产生如此误会;第三本,《我和邻居女孩的绝对隐私》,写那个女孩趴在墙头,其实不是看宋玉的,她是隔着宋玉家看我的;然后就是随笔、散文、诗歌……

   接着就是开公司了,开一个“美女培育中心”,再开一个“玻璃钢制造厂”,再开一个“美容健体学校”,再开一个“登徒子大酒店”……

   钱有了,名扬了,再重新树立形象,给西部开发派几个“支边”,给贫困山区建两座小学,给养老院送两台电视,在中央电视台办一个“登徒子杯泳装大赛”,一眨眼,咱不就又成慈善家了吗?

   时间一长,谁还敢再说咱登徒子坏话,适当的时候,再和宋玉交谈两句,报纸上一登,这不就洗雪沉冤了吗?

   以后呢?看看事态发展,合适的时候,找个冠冕堂皇的理由把老婆休了,把看宋玉的那个女孩娶回来,咱也对报纸上说,和老婆离婚主要是因为和她越来越没有艺术上的共同语言,相信,全国人民都会原谅咱的。

   怎么样?绝对的,名利双收。

   打油:一心想把毁誉生,人生世事过耳风。

   你越骂我越高兴,热热闹闹当明星。 

8/19/2005

又要加班了。。。。T_T......

又到周末了,这是个大多数人都为之兴奋的日子,可周末对我来说好像只是意味着加班的日子又到了,加班还没有加班费,郁闷啊~~~
上一个周末就是在加班中度过的。。。。。。T_T。。。。。我的周末啊。。。。。。
好长时间没写日志了,好不容易闲下来了,进来发发牢骚,嘿嘿~~~
8/5/2005

被中国抛弃的世界四大巨星

1996年,上海同法国戛纳结成友好城市,而在此时,中国足坛连沪争霸如火如荼,为了在新赛季里力压万达、国安两个死对头,申花队教练亲赴戛纳挑选对方免费租借的球员,东道主热情地推荐一个年仅20岁的瘦高的黑人小伙子,徐根保在看了这个小伙子的训练比赛后得出的评价是技术粗糙、动作反应慢、意识差、缺乏大局观......,虽然是免费的,但申花最后还是谢绝了对方的盛情,并在回国后感叹法国人没有向其推荐出色的球员。但在仅仅几个月后的夏天,那个小伙子就被AC米兰以400多万美元的价格买走,随后又加盟到了阿森纳。现在他已是阿森纳不可获缺的核心、世界冠军法国国家队的铁腰,本赛季他为球队再次举起了英超冠军的奖杯,他的名字叫——维埃拉。
  



 

随着徐根宝的下课,上海申花迎来的他们的首位外籍主教练斯托伊科夫,并在赛季开始前将球队拉到东欧集训。在基辅时,迪那摩队得知申花在寻找新外援,而且薪水要比他们高得多,便很热情地向申花推荐了几个并不是绝对主力但有潜力的年轻队员,其中有一名踢前锋的清秀小伙子,已开始是队中可以打上主力了,但申花高层通过热身赛后认为,这名队员身体不够强壮,技术一般,速度也不突出,意识也不好就没有要。没想到下半年在冠军联赛中,这位刚满20岁的不伙,在同巴赛罗那的比赛中上演了帽子戏法,帮助球队以4:0击败对手,并在后来多次攻入皇马、AC米兰等巨人球队的球门。 后来这名球员到了AC米兰,今年他攻进了24个球,是意甲 最佳射手,在短短的4年里他在意甲中总共打进了91球, 超过了范巴斯滕的记录,并成为去年为球队获得欧洲冠军杯和今年意甲冠军的最大功臣之一,他就是乌克兰核弹头——舍甫琴科
  
  


再回到1996年初春,阿根廷博卡青年队来四川打商业比赛,当时的全兴方面在比赛后表示,对对方年仅21岁的20号球员很有好感,但当询价后得知,博卡方面的报价是要买此人还须同时另买其他两名队员,这三个人捆 绑在一起的价格一共是100万美元, 便立刻打了退堂鼓。在全兴人眼中,用100万美元买这三名球员简直是冤大头,博卡整个是狮子大张口,太黑了!。但同年夏天,这位20号球员投身桑普多利亚,此后又先后转战帕尔马和拉齐奥。2001 年,他再度从拉齐奥转会时, 购买他的球队花费了3950万美元,是5年前的40倍!当时购买他的球队是曼联。而去年他又去了切尔西,这名球员叫——贝隆。
  


1997年,北京国安队教练前往南美寻找外援。在乌拉圭民族队考察时,发现一年轻的左撇子前锋技术不错,乌拉圭方面将价格降到了一百万美元左右,但最终国安方面放弃了,因为后来他们在南美找到了同样是左撇子但更便宜的冈波斯和可以左右开弓的卡西亚诺。后来民族队又来到上海打友谊比赛,申花队也看上了这位左撇子,这次民族队吸取了上次的教训,在一番讨价还价之后,将价格降至了70万美元,但申花队只愿意出50万美元。那一年举办了世青赛,在那届世青赛上,这个小伙子表现出色,但当上海申花再想同意70万美元的报价时,这名年轻人已被国际米兰买走了。现在,这名与国安和申花均擦肩而过的小伙子以800万欧元的年薪成为目前国际米兰队中薪水最高的球员,在近两年,只要他一进球、国际米兰几乎就肯定能赢球(上赛季主场被罗马逼平除外)。这名年轻的左撇子叫作——雷科巴
  
  


8/3/2005

DIY的T-shirt图案

如果自己的T-shirt图案可以随心定制,你还会去买街上的衣服吗?

title

为什么街上开的这种店不够多呢?多花10元你愿意么?我想,很多人会愿意的。我打算DIY两件来看看效果,有没有好的厂家?合作?

title

地址:http://www.lafraise.com/

参考阅读:这是家提供同类服务的公司网站,YAHOO出手了!

SKYCAR

别告诉我你很有钱,你真的很有钱么?呵呵,那就别买汽车了,直接买空中汽车吧,可以开到山上去,也可以开到田野中去,看那美丽风景。

flycar

飞机支持空中盘旋,不过买这玩意本身就是一种冒险,不过这是将来科技发展的必然,只是这东西是否耗费能源也太大了?搞个核能的吧?算了,我看我们还是买辆自行车比较好点。



flycar

如果你有兴趣,看视频:http://www.moller.com/news/media/

如果你想买,看价格:http://www.moller.com/purchase

发现号升空实录

发现号升空实录,采用分镜头,可以选择查看角度,你可以认真看看每个细节。近距离体验,不过有个很夸张的是,连火箭自身居然也有摄象头。

title

这个方式看起来,显然比单纯的文字图片过瘾多了。FLASH构架。

地址:http://msnbc.com/modules/spaceshuttle/discoverylaunch/

改变一生的几句话

第一句话是:优秀是一种习惯。

 这句话是古希腊哲学家亚里士多德说的。如果说优秀是一种习惯,那么懒惰也是一种习惯。人出生的时候,除了脾气会因为天性而有所不同,其他的东西基本都是后天形成的,是家庭影响和教育的结果。所以,我们的一言一行都是日积月累养成的习惯。我们有的人形成了很好的习惯,有的人形成了很坏的习惯。所以我们从现在起就要把优秀变成一种习惯,使我们的优秀行为习以为常,变成我们的第二天性。让我们习惯性地去创造性思考,习惯性地去认真做事情,习惯性地对别人友好,习惯性地欣赏大自然。

注解:要会“装”,要持续的、不间断的“装”,装久了就成了真的了,就成了习惯了,比如准时到会,每次都按时到会,你装装看,你装30年看看,装的时间长了就形成了习惯。:)   

 

第二句话是:生命是一种过程。  

 事情的结果尽管重要,但是做事情的过程更加重要,因为结果好了我们会更加快乐,但过程使我们的生命充实。   

   人的生命最后的结果一定是死亡,我们不能因此说我们的生命没有意义。世界上很少有永恒。大学生谈恋爱,每天都在信誓旦旦地说我会爱你一辈子,这实际上是不真实的。统计数据表明,大学生谈恋爱的100对里有90对最后会分手,最后结婚了的还有一半会离婚。你说爱情能永恒吗?所以最真实的说法是:“我今天,此时此刻正在真心地爱着你。”明天也许你会失恋,失恋后我们会体验到失恋的痛苦。这种体验也是丰富你生命的一个过程。

注解:生命本身其实是没有任何意义的,只是你自己赋予你的生命一种你希望实现的意义,因此享受生命的过程就是一种意义所在。   

 

第三句话是:两点之间最短的距离并不一定是直线。   

在人与人的关系以及做事情的过程中,我们很难直截了当就把事情做好。我们有时需要等待,有时需要合作,有时需要技巧。我们做事情会碰到很多困难和障碍,有时候我们并不一定要硬挺、硬冲,我们可以选择有困难绕过去,有障碍绕过去,也许这样做事情更加顺利。大家想一想,我们和别人说话还得想想哪句话更好听呢。尤其在中国这个比较复杂的社会中,大家要学会想办法谅解别人,要让人觉得你这个人很成熟,很不错,你才能把事情做成。

注解:如果你在考数学试题,一定要答两点之间直线段最短,如果你在走路,从A到B,明明可以直接过去,但所以人都不走,你最好别走,因为有陷阱。在中国办事情,直线性思维在很多地方要碰壁,这是中国特色的中国处事智慧。   

第四句话是:只有知道如何停止的人才知道如何加快速度。   

我在滑雪的时候,最大的体会就是停不下来。我刚开始学滑雪时没有请教练,看着别人滑雪,觉得很容易,不就是从山顶滑到山下吗?于是我穿上滑雪板,哧溜一下就滑下去了,结果我从山顶滑到山下,实际上是滚到山下,摔了很多个跟斗。我发现根本就不知道怎么停止、怎么保持平衡。最后我反复练习怎么在雪地上、斜坡上停下来。练了一个星期,我终于学会了在任何坡上停止、滑行、再停止。这个时候我就发现自己会滑雪了,就敢从山顶高速地往山坡下冲。因为我知道只要我想停,一转身就能停下来。只要你能停下来,你就不会撞上树、撞上石头、撞上人,你就不会被撞死。因此,只有知道如何停止的人,才知道如何高速前进。 注解:用汽车来比喻,宝马可以上200公里,奇瑞却只能上120公里,为什么?发动机估计不相上下,差距在刹车系统,上了200公里刹不了车,呵呵,我的天!   

 

第五句话是:放弃是一种智慧,缺陷是一种恩惠。   

当你拥有六个苹果的时候,千万不要把它们都吃掉,因为你把六个苹果全都吃掉,你也只吃到了六个苹果,只吃到了一种味道,那就是苹果的味道。如果你把六个苹果中的五个拿出来给别人吃,尽管表面上你丢了五个苹果,但实际上你却得到了其他五个人的友情和好感。以后你还能得到更多,当别人有了别的水果的时候,也一定会和你分享,你会从这个人手里得到一个橘子,那个人手里得到一个梨,最后你可能就得到了六种不同的水果,六种不同的味道,六种不同的颜色,六个人的友谊。人一定要学会用你拥有的东西去换取对你来说更加重要和丰富的东西。所以说,放弃是一种智慧。 注解:我的个人原则是:每一次放弃都必须是一次升华,否则就不要放弃;每一次选择都必须是一次升华,否则不要选择。   

做人最大的乐趣在于通过奋斗去获得我们想要的东西,所以有缺点意味着我们可以进一步完美,有匮乏之处意味着我们可以进一步努力。美国有一部电视片,讲的是一位富翁给后代留下了用不尽的遗产,结果他的后代全都变成了吸毒的、自杀的、进监狱的,或者精神病患者。为什么会这样呢?因为这位富翁给自己后代留下的钱太多了,以致他们不需要劳动就可以继承一大笔财产。继承一大笔财富,就几乎什么都能买到。所以,当一个人什么都不缺的时候,他的生存空间就被剥夺掉了。如果我们每天早上醒过来,感到自己今天缺点儿什么,感到自己还需要更加完美,感到自己还有追求,那是一件多么值得高兴的事情啊!

8/2/2005

ASP应用之模板采用

初学ASP,程序是能勉强写出来了,但若每进行一次网站页面的改版,所有的源程序都将进行一次移植手术。为此所耗费的人力精力不计其数,甚至一不小心得不偿失、前功尽弃。

所以,梦想着那么大段的程序代码变成几个简单的字符代替,这样只要设计好页面把该功能插入就OK了。其实这也简单,只需将实现该功能的程序代码做成子程序,然后主页调用就可以了。

很多时候,在博客中国,你会选择到很多的模板,甚至有可能自己来设计;或者采用猪飞飞BLOG的各大站长都将其站点改得不近相同……这些,我们都归功于ASP采用模板的功能。

那下面偶就借花献佛,将模板拿来分析,以馈各位朋友。

首先,模板需要在线修改,则应采用数据库保存模板代码

所谓的模板,就是设计完工的标准的HTML代码,其中需要由程序实现的功能部分将采用特殊字符串代替。然,这些特殊字符串需要在显示的时候被编译为对应的功能。

1,设计数据库testmb.mdb
新建表moban:字段m_id(自动编号,主关键字);字段m_html(备注类型)

2,假设第一模板内容代码

将下列代码拷贝到m_html字段中


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>testmb</title>
</head>
<body leftmargin="0" topmargin="0">
<table width="100%" height="100%" border="0" 
cellpadding="5" cellspacing="2">
  <tr align="right" bgcolor="#CCCCCC"> 
    <td height="20" colspan="2">$cntop$</td>
  </tr>
  <tr valign="top"> 
    <td width="25%" bgcolor="#e5e5e5">$cnleft$</td>
    <td width="74%" bgcolor="#f3f3f3">$cnright$</td>
  </tr>
</table>
</body>
</html>

 


注意$cntop$、$cnleft$、$cnright$,它们将要实现某些具体的程序功能

3,建立数据库连接文件conn.asp


<%
set conn= Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source="&Server.MapPath("testmb.mdb")
conn.Open connstr
%>

 


4,建立特殊字符串转换所需要的库文件lib.asp

该文件的主要作用是将实现某些功能的ASP程序做成字程序,以方便调用。


<%
dim topcode
sub cntop()
    topcode="现在时间是:"
    topcode=topcode&now()
end sub

dim leftcode,i
sub cnleft()
    for i = 1 to 5
    leftcode=leftcode&"<p>cnbruce.com"
    next
end sub

dim rightcode
sub cnright()
    for i = 1 to 9
    rightcode=rightcode&"<hr color="&i&i&i&i&i&i&">"
    next
end sub 
%>

 


5,最后,调用数据库中的模板代码,将特殊字符串转换。


<!--#include file="conn.asp" -->
<!--#include file="lib.asp" -->
<%
sql="select * from moban where m_id=1"
set rs=Server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1
mb_code=rs("m_html")
rs.close
set rs=nothing

cntop()
mb_code=replace(mb_code,"$cntop$",topcode)
cnleft()
mb_code=replace(mb_code,"$cnleft$",leftcode)
cnright()
mb_code=replace(mb_code,"$cnright$",rightcode)

response.write mb_code
%>

 


该页主要作用是将模板代码进行显示,并将其中的特殊代码转变为相对应子程序功能。

至此,ASP的模板功能基本完成,剩下的就是:建立具备编辑模板功能的程序页面,将库文件改变为自己所需要程序功能……

asp的ubb函数

<%
function unHtml(content)
    unHtml=content
    if content <> "" then
    unHtml=replace(unHtml,"&","&amp;")
    unHtml=replace(unHtml,"<","&lt;")
    unHtml=replace(unHtml,">","&gt;")
    unHtml=replace(unHtml,chr(34),"&quot;")
    unHtml=replace(unHtml,chr(13),"<br>")
    unHtml=replace(unHtml,chr(32)," ")
    'unHtml=ubb(unHtml)
    end if
end function

function ubb(content)
    Dim nowtime,i
    ubb=content
    nowtime=now()
    UBB=Convert(ubb,"code")
    UBB=Convert(ubb,"html")
    UBB=Convert(ubb,"url")
    UBB=Convert(ubb,"color")
    UBB=Convert(ubb,"font")
    UBB=Convert(ubb,"size")
    UBB=Convert(ubb,"quote")
    UBB=Convert(ubb,"email")
    UBB=Convert(ubb,"img")
    UBB=Convert(ubb,"swf")

    'UBB=AutoURL(ubb)
    ubb=replace(ubb,"[b]","<b>",1,-1,1)
    ubb=replace(ubb,"[/b]","</b>",1,-1,1)
    ubb=replace(ubb,"[i]","<i>",1,-1,1)
    ubb=replace(ubb,"[/i]","</i>",1,-1,1)
    ubb=replace(ubb,"[u]","<u>",1,-1,1)
    ubb=replace(ubb,"[/u]","</u>",1,-1,1)
    ubb=replace(ubb,"[blue]","<font color='#000099'>",1,-1,1)
    ubb=replace(ubb,"[/blue]","</font>",1,-1,1)
    ubb=replace(ubb,"[red]","<font color='#990000'>",1,-1,1)
    ubb=replace(ubb,"[/red]","</font>",1,-1,1)

    '利用for循环处理表情图片的UBB代码
    for i=1 to 28
        ubb=replace(ubb,"{:em"&i&"}","<IMG SRC=emot/emotface/em"&i&".gif></img>",1,6,1)
        ubb=replace(ubb,"{:em"&i&"}","",1,-1,1)
    next

    ubb=replace(ubb,"["&chr(176),"[",1,-1,1)
    ubb=replace(ubb,chr(176)&"]","]",1,-1,1)
    ubb=replace(ubb,"/"&chr(176),"/",1,-1,1)
    ' ubb=replace(ubb,"{;em","{:em",1,-1,1)
end function


function Convert(ubb,CovT)
    Dim cText,startubb,endubb,Lcovt,text,codetext
    cText=ubb
    startubb=1
    do while Covt="url" or Covt="color" or Covt="font" or Covt="size"
        startubb=instr(startubb,cText,"["&CovT&"=",1)
        if startubb=0 then exit do
        endubb=instr(startubb,cText,"]",1)
        if endubb=0 then exit do
        Lcovt=Covt
        startubb=startubb+len(lCovT)+2
        text=mid(cText,startubb,endubb-startubb)
        codetext=replace(text,"[","["&chr(176),1,-1,1)
        codetext=replace(codetext,"]",chr(176)&"]",1,-1,1)
        'codetext=replace(codetext,"{:em","{;em",1,-1,1)
        codetext=replace(codetext,"/","/"&chr(176),1,-1,1)
        select case CovT
            case "color"
            cText=replace(cText,"[color="&text&"]","<font color='"&text&"'>",1,1,1)
            cText=replace(cText,"[/color]","</font>",1,1,1)
            case "font"
            cText=replace(cText,"[font="&text&"]","<font face='"&text&"'>",1,1,1)
            cText=replace(cText,"[/font]","</font>",1,1,1)
            case "size"
            if IsNumeric(text) then
                if text>6 then text=6
                if text<1 then text=1
                cText=replace(cText,"[size="&text&"]","<font size='"&text&"'>",1,1,1)
                cText=replace(cText,"[/size]","</font>",1,1,1)
            end if
            case "url"
            cText=replace(cText,"[url="&text&"]","<a href='"&codetext&"' target=_blank>",1,1,1)
            cText=replace(cText,"[/url]","</a>",1,1,1)
            case "email"
            cText=replace(cText,"["&CovT&"="&text&"]","<a href=mailto:"&text&">",1,1,1)
            cText=replace(cText,"[/"&CovT&"]","</a>",1,1,1)
        end select
    loop

    startubb=1
    do
    startubb=instr(startubb,cText,"["&CovT&"]",1)
    if startubb=0 then exit do
    endubb=instr(startubb,cText,"[/"&CovT&"]",1)
    if endubb=0 then exit do
    Lcovt=Covt
    startubb=startubb+len(lCovT)+2
    text=mid(cText,startubb,endubb-startubb)
    codetext=replace(text,"[","["&chr(176),1,-1,1)
    codetext=replace(codetext,"]",chr(176)&"]",1,-1,1)
    'codetext=replace(codetext,"{:em","{;em",1,-1,1)
    codetext=replace(codetext,"/","/"&chr(176),1,-1,1)
    select case CovT
    case "url"
    cText=replace(cText,"["&CovT&"]"&text,"<a href='"&codetext&"' target=_blank>"&codetext,1,1,1)
    cText=replace(cText,"<a href='"&codetext&"' target=_blank>"&codetext&"[/"&CovT&"]","<a href="&codetext&" target=_blank>"&codetext&"</a>",1,1,1)
    case "email"
    cText=replace(cText,"["&CovT&"]","<a href=mailto:"&text&">",1,1,1)
    cText=replace(cText,"[/"&CovT&"]","</a>",1,1,1)
    case "html"
    codetext=replace(codetext,"<br>",chr(13),1,-1,1)
    codetext=replace(codetext," ",chr(32),1,-1,1)
    Randomize
    rid="temp"&Int(100000 * Rnd)
    cText=replace(cText,"[html]"&text,"代码片断如下:<TEXTAREA id="&rid&" rows=15 style='width:100%' class='bk'>"&codetext,1,1,1)
    cText=replace(cText,"代码片断如下:<TEXTAREA id="&rid&" rows=15 style='width:100%' class='bk'>"&codetext&"[/html]","代码片断如下:<TEXTAREA id="&rid&" rows=15 style='width:100%' class='bk'>"&codetext&"</TEXTAREA>",1,1,1)
    case "img"
    cText=replace(cText,"[img]"&text,"<a href="&chr(34)&"about:<img src="&codetext&" border=0>"&chr(34)&" target=_blank><img src="&codetext,1,1,1)
    cText=replace(cText,"[/img]"," vspace=2 hspace=2 border=0 alt=::点击图片在新窗口中打开::></a>",1,1,1)
    case "code"
    cText=replace(cText,"[code]"&text,"以下内容为程序代码<hr noshade>"&codetext,1,1,1)
    cText=replace(cText,"以下内容为程序代码<hr noshade>"&codetext&"[/code]","<div style='background-color:#E3E3E3;font-family:Verdana;font-size:12px;Color:#666666;'>"&codetext&"</div>",1,1,1)
    case "quote"
    atext=replace(text,"[img]","",1,-1,1)
    atext=replace(atext,"[/img]","",1,-1,1)
    atext=replace(atext,"[swf]","",1,-1,1)
    atext=replace(atext,"[/swf]","",1,-1,1)
    atext=replace(atext,"[html]","",1,-1,1)
    atext=replace(atext,"[/html]","",1,-1,1)
    ' atext=replace(atext,"{:em","{;em",1,-1,1)
    'atext=SplitWords(atext,350)
    atext=replace(atext,chr(32)," ",1,-1,1)
    cText=replace(cText,"[quote]"&text,"<blockquote><hr noshade>"&atext,1,1,1)
    cText=replace(cText,"<blockquote><hr noshade>"&atext&"[/quote]","<table border='0' width='90%' cellspacing='0' cellpadding='0' align='center'><tr><td>引用内容:</td></tr><tr><td><table border='0' width='100%' cellspacing='1' cellpadding='10' bgcolor='#DFDFDF'><tr><td width='100%' bgcolor='#FFFFFF' style='font-family:Verdana;font-size:12px;Color:#666666;'>"&atext&"</td></tr></table></td></tr></table>",1,1,1)
    case "swf"
    cText=replace(cText,"[swf]"&text,"影片地址:<br>"&text&"<br><object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0' width='500' height='500'><param name=movie value='"&codetext&"'><param name=quality value=high><embed src='"&codetext&"' quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width='500' height='500'>",1,1,1)
    cText=replace(cText,"<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0' width='500' height='500'><param name=movie value='"&codetext&"'><param name=quality value=high><embed src='"&codetext&"' quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width='500' height='500'>"&"[/swf]","<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0' width='500' height='500'><param name=movie value='"&codetext&"'><param name=quality value=high><embed src='"&codetext&"' quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width='500' height='500'>"&"</embed></object>",1,1,1)
    end select
    loop
    Convert=cText
end function 

%>

ASP TO HTML WITH TEMPLATE

我希望大家看到该标题就能让你想象到它的功能:

  1,WITH TEMPLAET意思是,生成的页面架构将采用某个已设定的模板,在此之前我的一篇教程中介绍过,希望各位在看本教程之前对ASP采用模板应熟悉下。(当然,不看也没有问题,本教程同样会提及精华部分的:)具体参考:http://www.cnbruce.com/blog/showlog.asp?cat_id= 26&log_id=474

  2,ASP2HTML。不要我再说ASP转变成HTML的好处了吧,呵呵,其中最值得知道的就是:静态HTML页和动态页对服务器的要求承受能力小得多,同样,静态HTML搜索几率远比动态页面的多得多。

  那么,我现在需要处理的技术问题就是:
  1,如何实现模板技术?(先参看下上篇文章吧)
  2,如何实现2HTML技术?
  3,如何让模板技术与2HTML技术结合?

一、先进行技术原理分析

  1,模板技术参看 www.cnbruce.com/blog/showlog.asp?cat_id=26&log_id=474

  2,2HTML技术又该如何实现呢?如何使得ASP页面转变为HTML?一般都会想到FSO组件,因为该组件能新建任何文件格式。

  那么其整个运行过程是怎么样的呢?
  a,提供信息输入页面进行信息收集;
  b,接受信息值先保存数据库,再FSO生成文件;
  c,技术性完成任务,显示刚被创建的HTML文件的路径地址。

  该技术的实现过程中有如下几个难点:

  i,FSO生成的文件是直接放在一个大文件夹下,还是单独放在某个每日更新的子文件夹中?可能表述不准确,这样理解吧:相信通过FSO生成的文件随着时间的推移,文件会越来越多,管理也会越来越乱……通常你可能看到一些地址诸如 www.xxx.com/a/2004-5-20/200405201111.html 可以分析得出应该是建立了当前日期的文件夹。这样,一天就是一个文件夹的页面内容,查看管理也就显得比较合理。

  ii,我在试图通过以上方法建立文件夹的时候,又发现了第二个问题。第一次通过FSO建立以当前日期命名的文件夹,没有问题。当我有新的文件需要生成时,因为是同一个程序,所以,其又将会执行建立同样的文件夹。此时,FSO组件会发现该路径已存在……卡壳-_-! 继续处理,在首行添加代码:On Error Resume Next
  嘿嘿,达到自欺欺人、掩耳盗铃的效果。

  iii,文件夹是建立了,文件该如何建立呢?主要也就是文件名的生成。当然这个就需要自己来写个函数,功能就是如何生成文件名:)


<%
function makefilename(fname)
fname = fname '前fname为变量,后fname为函数参数引用
fname = replace(fname,"-","")
fname = replace(fname," ","") 
fname = replace(fname,":","")
fname = replace(fname,"PM","")
fname = replace(fname,"AM","")
fname = replace(fname,"上午","")
fname = replace(fname,"下午","")
makefilename = fname & ".html"
end function 
%>

引用函数则:
<%fname = makefilename(now())%>
引用函数则: <%fname = makefilename(now())%>
其实嘛,就是以年月日时分秒命名的文件。

  iv,最后,生成的文件该如何查看到?当然需要把生成文件的路径保存的数据库中,并且添加到相对应的记录集中了。当然,这在下面的数据库设计时会提及到。

   3,模板技术和2HTML技术的结合:将模板中特殊代码的值替换为从表单接受过来的值,完成模板功能;将最终替换过的所有模板代码生成HTML文件。需要注意的是:替换应能将输入数据的格式或者支持UBB的代码彻底改变。

二,再进行数据库设计

目前数据库的设计需要两个表:一个是存放模板数据的;一个是存放信息内容的。

1,建立新数据库asp2html.mdb

2,设计新数据库表c_moban

字段m_id(自动编号,主关键字);字段m_html(备注类型)。
并将下列完整的代码拷贝至m_html字段 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=hz">
<title>Cnbruce.Com | ASP2HTML TEST</title>
</head>
<body leftmargin="0" topmargin="0">
<table width="100%" height="100%" border="0" cellpadding="5" cellspacing="2">
  <tr align="right" bgcolor="#CCCCCC"> 
    <td height="20" colspan="2">$cntop$</td>
  </tr>
  <tr valign="top"> 
    <td width="25%" bgcolor="#e5e5e5">$cnleft$</td>
    <td width="74%" bgcolor="#f3f3f3">$cnright$</td>
  </tr>
</table>
</body>
</html>
3,设计新数据库表c_news

字段c_id:自动编号,主关键字
字段c_title:文本类型,保存文章标题
字段c_content:备注类型,保存文章内容
字段c_filepath:文本类型,保持生成文件的路径地址
字段c_time:日期/时间类型,默认值:Now()

三,页面需求设计

  1,首先建立一个存放HTML页的文件夹

   在文件同一目录下,建立文件夹newsfile,夹子内部主要存放生成的HTML页面,当然内部还会采用程序方式建立以日期命名的子文件夹,以方便浏览以及管理。

  2,功能函数页面lib.asp


<%
'生成文件名的函数
function makefilename(fname)
fname = fname
fname = replace(fname,"-","")
fname = replace(fname," ","") 
fname = replace(fname,":","")
fname = replace(fname,"PM","")
fname = replace(fname,"AM","")
fname = replace(fname,"上午","")
fname = replace(fname,"下午","")
makefilename=fname & ".shtml"
end function 

'保持数据格式不变的函数
function HTMLEncode(fString)
fString = replace(fString, ">", "&gt;")
fString = replace(fString, "<", "&lt;")
fString = Replace(fString, CHR(32), "&nbsp;")
fString = Replace(fString, CHR(13), "")
fString = Replace(fString, CHR(10) & CHR(10), "<br>")
fString = Replace(fString, CHR(10), "<br>")
HTMLEncode = fString
end function
%>
  3,数据库连接页面conn.asp

  完成数据库的字符串连接方法

<%
set conn = Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("asp2html.mdb")
conn.Open connstr
%>
  4,信息输入页面add.html

  其实很简单:)就是表单嘛。注意action是跳转到addit.asp

<form action="addit.asp" method="post">
Title:<input type="text" name="c_title"><br>
Content:<br>
<textarea name="c_content" rows="8" cols="30"></textarea><br>
<input type="submit" value="Add">
<input type="reset" value="Reset">
</form>

5,处理数据功能显示页面addit.asp

  首先是处理接受过来的数据,并将值写入数据库;接着将模板代码进行引用,并将其中特殊代码转换为接受值,最终通过FSO生成HTML页面。其中需要注意的还有,生成文件的路径地址保存至数据库表。

<%'容错处理
On Error Resume Next
%>

<!--#include file="conn.asp" -->
<!--#include file="lib.asp" -->

<%'接受传递值
c_title=request.form("c_title")
c_content=request.form("c_content")
%>

<%'生成HTML文件名,建立文件夹,指定文件路径
fname = makefilename(now())  'makefilename为自定义函数 
folder = "newsfile/"&date()&"/"
filepath = folder&fname
%>

<%'将接受值及路径保持至数据库表
sql = "Select * from c_news"
Set rs = Server.CreateObject ("ADODB.Recordset")
rs.Open sql,conn,3,2
rs.addnew
rs("c_title")=c_title
rs("c_content")=c_content
rs("c_filepath")=filepath
rs.update
rs.close 
Set rs = Nothing
%>

<%'打开模板代码,并将其中特殊代码转变为接受值
sql1="select m_id,m_html from c_moban where m_id=1"
set rs1=Server.CreateObject("adodb.recordset")
rs1.open sql1,conn,1,1
mb_code=rs1("m_html")
rs1.close
set rs1=nothing
conn.close
set conn=nothing
c_title=htmlencode(c_title)
c_content=htmlencode(c_content)
mb_code=replace(mb_code,"$cntop$",now())
mb_code=replace(mb_code,"$cnleft$",c_title)
mb_code=replace(mb_code,"$cnright$",c_content)
%>

<%'生成HTML页面
Set fso = Server.CreateObject("Scripting.FileSystemObject")
fso.CreateFolder(Server.MapPath(folder))
Set fout = fso.CreateTextFile(Server.MapPath(filepath))
fout.WriteLine mb_code
fout.close
%>

文章添加成功,<a href="showit.asp">浏览</a> 

 6,显示数据库表记录,并做指向HTML页的链接:showit.asp

<!--#include
file="conn.asp" -->
<!--#include file="lib.asp" -->
<%
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from c_news order by c_id desc"
rs.Open sql,conn,1,1
%>
<%
if rs.EOF and rs.BOF then response.write ("暂时还没有文章,<a
href=add.html>添加</a>")
else Do Until rs.EOF
%> <table width="758" border="0" align="center" cellpadding="3"
cellspacing="1" bgcolor="#000000"> <tr> <td width="159"
align="right" bordercolor="#CCCCCC"
bgcolor="#CCCCCC"><%=rs("c_time")%></td> <td
width="591" bordercolor="#f3f3f3" bgcolor="#f3f3f3"><a
href=<%=rs("c_filepath")%>
target="a_blank"><%=rs("c_title")%></a></td>
</tr> <tr> <td valign="top" align="right"
bordercolor="#ececec" bgcolor="#ececec">[<a
href=del.asp?c_id=<%=rs("c_id")%>>Dell</a>][<a
href=change.asp?c_id=<%=rs("c_id")%>>Edit</a>][<a
href="add.html">Add</a>]</td> <td valign="top"
bordercolor="#FFFFFF"
bgcolor="#FFFFFF"><%=htmlencode(rs("c_content"))%></td>
</tr> </table><br>
<% rs.MoveNext Loop
end if
%>
<%
rs.close Set rs = Nothing
conn.close set conn=Nothing
%>

7,修改数据内容页chang.asp

   修改数据内容,同时也需要修改更新对应的HTML页面。修改其实就是重新生成文件,且文件名和之前一样,类似文件的覆盖。

<!--#include file="conn.asp" -->
<!--#include file="lib.asp" -->
<%id=request.querystring("c_id")%>
<%
if request.form("submit")="change" then
c_title=request.form("c_title")
c_content=request.form("c_content")
c_id=request.form("c_id")
c_filepath=request.form("c_filepath")
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from c_news where c_id="&c_id
rs.Open sql,conn,3,2
rs("c_title")=c_title
rs("c_content")=c_content
rs("c_time")=now()
rs.update
rs.close 
Set rs = Nothing
%>
<%'打开模板代码,并将其中特殊代码转变为接受值
sql1="select m_id,m_html from c_moban where m_id=1"
set rs1=Server.CreateObject("adodb.recordset")
rs1.open sql1,conn,1,1
mb_code=rs1("m_html")
rs1.close
set rs1=nothing
conn.close
set conn=nothing
c_title=htmlencode(c_title)
c_content=htmlencode(c_content)
mb_code=replace(mb_code,"$cntop$",now())
mb_code=replace(mb_code,"$cnleft$",c_title)
mb_code=replace(mb_code,"$cnright$",c_content)
%>
<%'生成HTML页面
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(Server.MapPath(c_filepath))
fout.WriteLine mb_code
fout.close
%>
<%response.redirect("showit.asp")%>
<%end if%>
<%
if id<>"" then
    Set rs = Server.CreateObject ("ADODB.Recordset")
    sql="select * from c_news where c_id="&id
    rs.Open sql,conn,1,1
    c_id=rs("c_id")
    c_filepath=rs("c_filepath")
    c_title=rs("c_title")
    c_content=rs("c_content")
end if
%>
<form action="change.asp" method="post">
Title:<input type="text" name="c_title" value=<%=c_title%>><br>
Content:<br>
<textarea name="c_content" rows="8" cols="30"><%=c_content%></textarea><br>
<input type="submit" value="change" name="submit">
<input type="reset" value="Reset">
<input name="c_id" type="hidden" value="<%=id%>">
<input name="c_filepath" type="hidden" value="<%=c_filepath%>">
</form>

8,删除记录页del.asp

  同样!删除,除了删除数据库表中的记录,与其对应的HTML页面也需删除。代码如下: 


<!--#include file="conn.asp" -->

<%
c_id = request.querystring("c_id")
sql = "Select * from c_news where c_id="&c_id
Set rs = Server.CreateObject ("ADODB.Recordset")
rs.Open sql,conn,2,3

filepath=rs("c_filepath")
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile(Server.mappath(filepath))
Set fso = nothing

rs.delete
rs.close 
Set rs = Nothing
conn.close
set conn=nothing
%>

<%response.redirect("showit.asp")%>
四,其它功能

  模板管理页面:不会每次都是打开数据库表进行增加或者修改模板代码吧,所以,管理代码的页面程序不能少了,自己捣鼓下应该很简单的。当然,之前管理员的登录认证程序就不在书中交代了:)还有,如果设计了多个模板,那么在发表信息的时候应添加模板选择单选框,同样在执行转换HTML时,SQL选择的不同m_id了。不管怎么说,先把这些技术自己调试感受下。多多操作,相信“读书千遍,其意自见”。

ASP中FSO的功能详解

FSO 模型对象 
Drive Object:驱动器对象 供存取磁盘或者网络驱动器 
FileSystemObject Object:文件系统对象 供存取计算机的文件系统 
Folder Object:文件夹对象 供存取文件夹的所有属性 
TextStream Object:文本流对象 供存取文件内容 你可以使用上面的对象做计算机上的任何事情,也包括破坏活动 ;-( 所以,请小心使用FSO。在web环境中,存储信息是非常重要的,比如用户信息,日志文件,等等。FSO提供了一个强大且简单的方法高效率地保存数据。在这篇文章里面,着重讨论FileSystemObject和TextStream对象。 

   FSO由微软公司提供支持,对于非Windows系统,大概不能再使用ASP。 

   怎么样使用FSO? 

   为了使用FSO来执行所有的工作,首先要创建对象,代码就象下面这样: 

   < % 
Set fso = Server.CreateObject("Scripting.FileSystemObject") 
% > 

   这样就建立了FSO并且赋予变量fso,接着就可以使用熟悉的object.method语法来执行文件系统的操作〔查看Visual Basic文档,获取更多的关于对象和对象向导编程的知识〕。在这里,我们可以使用fso.method 或者 fso.property,这些将在下面的例子中看到。 

   FSO模型位于由微软提供的脚本运行时间DLL文件中,它是scrrun.dll。你可以在任何应用程序中引用这个DLL文件,比如MS Access,Word。 就是说,并非仅仅限制在ASP中应用它。 

   这里有一个简要的FSO方法列表: 

   FSO方法 
CopyFile 拷贝一个或者多个文件到新路径 
CreateTextFile 创建文件并且返回一个TextStream对象 
DeleteFile 删除一个文件 
OpenTextFile 打开文件并且返回TextStream对象,以便读取或者追加 

   如果想了解完整的FSO方法与属性,请查阅微软MSDN。下面来看几个例子。 


假设你想创建一个简单的留言簿,你可以建立一个数据库,在其中存储用户的信息。然而,如果并不需要数据库的强大功能,使用FSO来存储信息将节省你的时间和金钱。并且,一些ISP也许限制了web上的数据库应用。 

   假设你在一个表单中收集了一些用户信息,这里是一个简单表单HTML代码: 

< html> 
< body> 

< form action="formhandler.asp" method="post"> 
< input type="text" size="10" name="username"> 
< input type="text" size="10" name="homepage"> 
< input type="text" size="10" name="Email"> 
< /form> 
< /body> 
< /html> 

   再看看formhandler.asp中处理表单的代码: 

< % 
'' Get form info 
strName = Request.Form("username") 
strHomePage = Request.Form("homepage") 
strEmail = Request.Form("Email") 

'' create the fso object 
Set fso = Server.CreateObject("Scripting.FileSystemObject") 

   迄今为止,还没有新鲜的东西,无非是获取表单域的值并且赋值到变量。下面出现了有趣的部分 - 写文件: 

path = "c: emp est.txt" 
ForReading = 1, ForWriting = 2, ForAppending = 3 

'' open the file 
set file = fso.opentextfile(path, ForAppending, TRUE) 

'' write the info to the file 
file.write(strName) & vbcrlf 
file.write(strHomePage) & vbcrlf 
file.write(strEmail) & vbcrlf 

'' close and clean up 
file.close 
set file = nothing 
set fso = nothing 


   回想一下,OpenTextFile方法返回一个TextStream对象,它是FSO模型中的另外一个对象。TextStream对象揭示了操作文件内容的方法,比如写、读一行、跳过一行。VB常量vbcrlf产生一个换行符。 

   在OpentextFile的命令参数中定义了TRUE,这就告诉了系统,如果文件不存在,就创建它。如果文件不存在,并且没有定义TRUE参数,就会出错。 

   现在转到目录c: emp,打开test.txt,你可以看到如下的信息: 

User''s name 
User''s home page 
User''s email 


   现在已经有了一些用户信息保存在文件中,就像一个简单的数据库。假设有一个用户想了解所有的访问者,就要从登 
记的信息中分离出相关部分,因为没有象数据库一样拥有结构化的列。 

   我们知道,在所创建的文件中,第1行是用户名,第2行是他们的主页,第3行是他们的电子邮件地址。随后登记的用 
户也是按照这样的结构存储他们的信息,所以每3行将包含一个用户的登记信息。知道了这些,就可以编写下面的代码来显 
示信息: 

< % 
'' create the fso object 
set fso = Server.Createobject("Scripting.FileSystemObject") 
path = "c: emp est.txt" 

'' open the file 
set file = fso.opentextfile(path, 1) < -- For 
reading 

   接着,分析每一行,并且格式化数据: 

do until file.AtEndOfStream 
    Response.write("Name: " & file.ReadLine & " ") 
    Response.write("Home Page: " & file.ReadLine & " ") 
    Response.write("Email: " & file.ReadLine & "< p>") 
loop 

'' close and clean up 
file.close 
set file = nothing 
set fso = nothing 
%> 

   这里仅仅做了一个非常简单的输出,但是你可以根据情况包含表格或者DHTML表单信息。 

   如果已经正确地建立并写入了文件,上面的小小循环将合适地列出数据库中的每一个人的信息。ReadLine方法读取1 
行内容,直到遇到换行符,随后的ReadLine调用将读取下一行。AtEndOfStream是TextStream对象的属性,它告诉我们何时 
遇到文件的尾部。 

   假设由于某种原因,我们没有正确地形成文件,如果一个用户只有2行信息而不是3行,那么就会产生一些错误。我们 
这里的循环取回文件中的下3行信息,如果没有3行多的信息,就将出现如下的错误信息: 

   Server object error ''ASP 0177 : 800a003e'' 

   所以,一定要添加一些错误处理代码,以防文件中插入了多余的行或者少了必要的行信息。 


   上面讨论了基本知识,然后说说权限许可的问题。FSO以创建它的用户帐户权限运行,换言之,如果有人从Internet 
上访问你的页面,那么这个internet帐户就创建FSO。如果以administrator的身份登录计算机,并且登录页面,那么 
administrator帐户就创建了FSO。这是非常重要的,因为一定的帐户拥有一定的权限,并且FSO需要一些权限从而能完整的 
执行功能。 

   internet帐户(IUSER_MachineName,MachineName是服务器的名字)一般只拥有读权限,这意味着用户将不能写入留 
言簿文件。然而,有几个选择可以绕过这个问题。 

   首先,也是很困难的,是要求用户在填写留言簿前登录到服务器。然而,留言簿的要点是从匿名用户处收集信息,如 
果要求用户登录,就必须要知道他们是谁。因此,跳过这个选择,看下一个。 

   第2个方法是创建一个目录或者文件,IUSER_MachineName用户对此有写权限。这样做可能开放了一些潜在的安全漏 
洞,因为任何知道正确目录并具备一定web技巧的人就能在服务器上填充内容。这是一个很严重的禁忌。所以你必须确认在 
隐藏的场所保存了这些可写目录的信息,并且尽可能地将这些目录设置在web目录结构以外(比如在Windows下,这是一个 
不在inetpub目录下的一个目录)。 


你也许想:好,现在我知道如何写入文件了。但能做到更多一些吗?下面来试一试为web站点建立一个搜索功能。 

   建立搜索引擎的关键是递归。主要地,编写一段代码搜索目录下的文件,然后对所有的目录循环执行同样的代码。因 
为不能确定总共有多少个子目录,所以必须一遍又一遍地执行搜索代码,直到结束。递归调用非常好! 

   下面来创建搜索页面。假设已经建立了一个HTML表单,用户在其中输入一个搜索字符串。 

Dim objFolder 
Dim strSearchText 
Dim objFSO 

strSearchText = Request.Form("SearchText") < -- The search string 
'' create the FSO and Folder objects 
Set fso = Server.CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder(Server.MapPath("/")) 

Search objFolder 


   上面的代码简单地初始化变量,Search函数执行搜索功能,描述如下: 


Function Search(objFolder) 

 Dim objSubFolder 


 ''loop through every file in the current 
folder 

 For Each objFile in objFolder.Files 

  Set objTextStream = objFSO.OpenTextFile(objFile.Path,1) < -- For Reading 


    ''read the file''s contents into a 
variable 

    strFileContents = objTextStream.ReadAll 


    ''if the search string is in the file, then 
write a link 

    '' to the file 

    If InStr(1, strFileContents, strSearchText, 1) then 

      Response.Write "< A HREF=""/" & objFile.Name & _ 

        """>" & objFile.Name & "< /A>< BR>" 


      bolFileFound = True 

    End If 


    objTextStream.Close 


 Next 


 ''Here''s the recursion part - for each 

 '' subfolder in this directory, run the Search function again 

 For Each objSubFolder in objFolder.SubFolders 

    Search objSubFolder 

 Next 

End Function 

   为了能打开文件,FSO需要实际的文件路径,而不是web路径。比如,是c:inetpubwwwroot empindex.html, 而不是 
www.enfused.com/temp/index.html 或者 /temp/index.html。 为了将后者转换为前者,使用Server.MapPath 
("filename"), filename表示web路径名。 

   上面的代码将在你指定的初始目录下的文件夹的每一个子目录中执行,在这里,初始目录是指web根目录"/"。然后 
就简单地打开目录下的每一个文件,看看其中是否包含指定的字符串,如果找到字符串就显示那个文件的链接。 

   注意,随着文件和子目录数量的增加,搜索花费的时间也将增加。如果需要繁重的搜索工作,建议你采取其他的方 
法,比如微软公司的索引服务器Index Server。 


到此,你对FSO可能已经有了很好的体会。让我们再深入研究一步,来解决更复杂的难题。 

   首先,你可能希望对文件改名。为了跟踪所有的文档,你将要重新命名它们以便唯一,这样就可以被系统容易地区 
别。很不幸,FSO不允许简单的文件改名操作,所以我们不得不修改一下。 

< % 
'' create the fso object 
set fso = Server.Createobject("Scripting.FileSystemObject") 
path = "c: emp est.txt" 
strDate = Replace(Date(), "/", "") 
strDir = "c:inetpubwwwrootarticles" & strDate 
strNewFileName = Hour(Now) & "_" & Minute(Now) & "_" & 
second(Now) & ".html" 

'' open the old file 
set file = fso.opentextfile(path, 1) < -- For reading 
strText = file.readall 
set file = nothing 

'' check for and/or create folder 
if not fso.folderexists(Server.MapPath(strDir)) then 
    set f = fso.CreateFolder(Server.MapPath(strDir)) 
else 
    set f = fso.GetFolder(Server.MapPath(strDir)) 
end if 

'' create and write new file 
set file = fso.Createtextfile(f.path & "" & strNewFileName) 
file.write(strText) 
set f = nothing 
file.close 
set file = nothing 

'' delete the old file 
fso.DeleteFile(path & "" & rst("FileName") & i) 
'' clean up 
set fso = nothing 
%> 

   FSO能力的不足在这里却成了优势,我们可以一次执行2步。首先,打开文件并读入文件的内容。假设这里要创建一个 
唯一的文件夹和一个唯一的文件来存储文章。然而,因为文件夹的路径每天都将改变,所以必须首先检查是否文件夹已经 
存在,如果不存在,就创建它。这在if not fso.folderexists代码段完成。然后,取得那个路径,创建一个新的文件。新 
文件建立完成后,删除掉旧文件,这通过fso.DeleteFile来完成。 

   这2步就是:对文件改名,然后移动到一个更合适的目录下。注意,在这里还可以对文件进行更多地操作,比如在写 
入新文件前进行一下内容的编辑。 


   FSO确实存在一些弱点 - 比如,它很难处理二进制文件,这包括Word文档、许多图形格式的文件和其他一些文件。然而你仍然可以用其他的方式操作这些文件 - 移动它们、删除它们,等等。你不能做的就是对它们进行打开或者写操作。 

   另外一个限制是对于文件长度的问题。当立刻读写一些内容时,所有的信息都存储在内存中 -内容越多,消耗的内存就越大。这将使每个工作都变得慢起来。所以,如果需要操作非常大的文件,或者大量的小文件时,考虑将文件分割成小块,并且经常的清除内存。将应用程序融入进COM对象组件,也能大大地提高程序的速度。 

   同样,你也不能使用FSO来管理权限以及文件、文件夹的属性,执行安全加密的一个很好方法就是将前面提到的留言簿文件设置为只读,在需要时再设置为可写,然后再修改回来。这个方法经常在CGI和Perl使用,但是很不幸,还没有令人满意的方法来用FSO实现。 

   还能用FSO做什么? 

   在FSO中还有许多很棒的功能,但许多人没有意识到。这些功能常常是在你感到做某些事情很难后才发现的,这时你经常要感叹到:要是我早知道这个方法就好了!