<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>计算的边缘 &#187; 未分类</title>
	<atom:link href="http://blog.chunhao.net/category/%e6%9c%aa%e5%88%86%e7%b1%bb/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.chunhao.net</link>
	<description>做一个懂文艺的科学青年</description>
	<lastBuildDate>Thu, 09 Feb 2012 03:47:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>捉刀这件小事</title>
		<link>http://blog.chunhao.net/ghost-writer</link>
		<comments>http://blog.chunhao.net/ghost-writer#comments</comments>
		<pubDate>Wed, 01 Feb 2012 05:20:19 +0000</pubDate>
		<dc:creator>Chunhao</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.chunhao.net/?p=581</guid>
		<description><![CDATA[最近韩寒和方舟子互相掐地起劲，又正值春节，给我这个身处穷乡僻壤没什么娱乐活动的人凭添了不少乐趣。 方先生一口咬定韩寒的几篇成名作实为背后代笔人所著，同时不断的从作品的行文笔法，作者的生活经历以及韩氏父子所做声明的各种矛盾漏洞加以佐证。另一方面，韩公子也不断更新博客，摆出各种各样的证据，打出一张张感情牌，又一句句回应了方舟子的质疑，再加上一些人身攻击，最后扬言一纸传票邀请方先生法庭上见。文化圈和娱乐圈也没闲着，有人跳出来力挺韩寒，也有人帮助方舟子找韩寒代笔的证据，还有更多的人在旁边瞧热闹，想看这场好戏到底如何收场——毕竟比春晚热闹多了。 我不是方先生的粉丝。同时我也不是唐骏的粉丝，不关注李开复，对罗永浩也没什么兴趣，所以我并不讨厌方舟子。我当然也不是韩公子的粉丝，而且他写的书我一本也没读过，他的博客也几乎不看（除了最近的事情）。偶尔读韩公子的几篇文章，觉得他字里行间都在愤世嫉俗，还有点哗众取宠的味道，但去年年末的“韩三篇”让人耳目一新，我甚至觉得这个人开始靠谱了。所以，我虽然不是韩公子的粉丝，但最起码不怎么讨厌他。如果说他有什么硬伤的话，大概就是他的粉丝。 韩公子的粉丝认为他们的偶像是文学界的人，但他们崇拜他们的韩少更像是崇拜一个娱乐圈的明星而非一个文学界的名人。在韩寒的博客上，几乎每篇都有这样的留言：“终于抢到沙发了”、“第一次首页，好开心啊”、“永远支持”；对方韩互掐这件事，随处可见这样的韩粉：“力挺韩寒，不解释！”也有不少自认为理性的韩粉：“我支持真相，但韩寒就是真相，所以我支持韩寒。”当然还有更多对方先生的人身攻击，以及对那些质疑韩寒的人的人身攻击。据说韩公子喜欢读钱钟书的书。假如钱老写博客，看到下面有这样一群粉丝留言，估计他首先要做的就是关闭博客的评论功能。倘若韩粉们读一读他们偶像的偶像——钱钟书、梁实秋等“民国作家”的书，估计能为韩公子涨不少身价。 假如韩寒的粉丝大都比较理性，少用人身攻击，真正像一个文学家的粉丝，估计方舟子等人也懒得揪住代笔问题非要刨根掘底一心跟一大帮人死磕。粉丝毕竟不能代表主人，所以对这个问题还要抛开个人喜好因素。尽管如此，要想弄清韩寒背后究竟有没有捉刀人几乎没有可能。韩公子没法证明那些东西的确是他自己写的；同样，方先生这边无法证明那些作品并非出自韩寒之手，除非哪天韩公子心血来潮跳出来承认他背后确实有人代笔。 对方先生这边提出的质疑，一切问题都可以用两个词回答：遗忘和神奇。由于年代久远，韩氏父子对往事的回忆难免会有偏差，所以二人陈述中出现的矛盾以及韩寒本人前后出现的矛盾可以理解；我们不能断然排除韩公子在文学上天赋禀异的可能，也不能排除他在中学时就已经有了远超出大多数成年人的对社会和人生的感知的可能，所以在他的著作中出现的那些旁征博引以及对社会深刻的认知，也就说得通了。说到掉书袋，据我的经验，偶尔耍点小聪明掉几包书袋并不需要很多的积累，没有读过某本书也可以临时抱佛脚掉一两个包袱。但一本书里大量的旁征博引需要一定量的积累，如果整本书里都是小聪明式的掉书袋，那也够作者累的。我没读过《三重门》，不知道里面掉书袋的程度如何，对此便没有发言权了。 韩公子对那一系列疑问的回答还说的过去，毕竟万事皆有可能，但他拿出手稿说事就不那么有力了。难道有手稿就能说明是他自己的作品？想当初我还在上小学的时候，老爸为本人捉刀写了一篇作文参加一个作文比赛，我还得乖乖地自己抄写一份交给老师。韩公子总不至于把他老爸写的手稿直接寄到出版社吧（如果真是由他父亲代笔的话）。自己由人捉刀而不抄手稿的事情还真有一回：那是在高中追女生的时候让别人代笔写情书（这事当然不能找老爸），写来的情书稿子自己都没有抄一份就直接送给了妹子，那是因为捉刀人的字写得比我好。 捉刀本来是件小事，而且是谁也说不清的小事。背后真有人代笔也好，没人也罢，韩公子没必要这么着急：发了好几篇博文澄清，打了很多张感情牌，中间说不理会这事，后来又接着冷嘲热讽，最后竟还要闹上法庭。这件小事，往近了说，金庸、古龙都曾找人代笔，往国外说，大仲马也曾找人代笔，往远了说，曹雪芹的《红楼梦》后四十回是何人代笔已成一桩公案，岳飞在文坛上得以扬名立万的《满江红》究竟是不是他自己所写已经无人知晓，吕不韦号称写了以他冠名的《吕氏春秋》，但他背后的捉刀人（们）早已湮没在浩渺的古书中，大概因为背后的捉刀人（们）功底深厚，他才敢放出“一字千金”的大话。 倘若韩公子的偶像钱老先生被人质疑背后有人代笔，老人家大概只付之一笑，因为笔杆子握在自己手里，嘴长在别人脸上，他们说他们的，自己仍旧写自己的，至于有没有代笔，姑且留给后人去猜吧。估计不久之后，“韩寒猜想”能就此诞生。]]></description>
			<content:encoded><![CDATA[<p>最近韩寒和方舟子互相掐地起劲，又正值春节，给我这个身处穷乡僻壤没什么娱乐活动的人凭添了不少乐趣。</p>
<p>方先生一口咬定韩寒的几篇成名作实为背后代笔人所著，同时不断的从作品的行文笔法，作者的生活经历以及韩氏父子所做声明的各种矛盾漏洞加以佐证。另一方面，韩公子也不断更新博客，摆出各种各样的证据，打出一张张感情牌，又一句句回应了方舟子的质疑，再加上一些人身攻击，最后扬言一纸传票邀请方先生法庭上见。文化圈和娱乐圈也没闲着，有人跳出来力挺韩寒，也有人帮助方舟子找韩寒代笔的证据，还有更多的人在旁边瞧热闹，想看这场好戏到底如何收场——毕竟比春晚热闹多了。</p>
<p>我不是方先生的粉丝。同时我也不是唐骏的粉丝，不关注李开复，对罗永浩也没什么兴趣，所以我并不讨厌方舟子。我当然也不是韩公子的粉丝，而且他写的书我一本也没读过，他的博客也几乎不看（除了最近的事情）。偶尔读韩公子的几篇文章，觉得他字里行间都在愤世嫉俗，还有点哗众取宠的味道，但去年年末的“韩三篇”让人耳目一新，我甚至觉得这个人开始靠谱了。所以，我虽然不是韩公子的粉丝，但最起码不怎么讨厌他。如果说他有什么硬伤的话，大概就是他的粉丝。</p>
<p>韩公子的粉丝认为他们的偶像是文学界的人，但他们崇拜他们的韩少更像是崇拜一个娱乐圈的明星而非一个文学界的名人。在韩寒的博客上，几乎每篇都有这样的留言：“终于抢到沙发了”、“第一次首页，好开心啊”、“永远支持”；对方韩互掐这件事，随处可见这样的韩粉：“力挺韩寒，不解释！”也有不少自认为理性的韩粉：“我支持真相，但韩寒就是真相，所以我支持韩寒。”当然还有更多对方先生的人身攻击，以及对那些质疑韩寒的人的人身攻击。据说韩公子喜欢读钱钟书的书。假如钱老写博客，看到下面有这样一群粉丝留言，估计他首先要做的就是关闭博客的评论功能。倘若韩粉们读一读他们偶像的偶像——钱钟书、梁实秋等“民国作家”的书，估计能为韩公子涨不少身价。</p>
<p>假如韩寒的粉丝大都比较理性，少用人身攻击，真正像一个文学家的粉丝，估计方舟子等人也懒得揪住代笔问题非要刨根掘底一心跟一大帮人死磕。粉丝毕竟不能代表主人，所以对这个问题还要抛开个人喜好因素。尽管如此，要想弄清韩寒背后究竟有没有捉刀人几乎没有可能。韩公子没法证明那些东西的确是他自己写的；同样，方先生这边无法证明那些作品并非出自韩寒之手，除非哪天韩公子心血来潮跳出来承认他背后确实有人代笔。</p>
<p>对方先生这边提出的质疑，一切问题都可以用两个词回答：遗忘和神奇。由于年代久远，韩氏父子对往事的回忆难免会有偏差，所以二人陈述中出现的矛盾以及韩寒本人前后出现的矛盾可以理解；我们不能断然排除韩公子在文学上天赋禀异的可能，也不能排除他在中学时就已经有了远超出大多数成年人的对社会和人生的感知的可能，所以在他的著作中出现的那些旁征博引以及对社会深刻的认知，也就说得通了。说到掉书袋，据我的经验，偶尔耍点小聪明掉几包书袋并不需要很多的积累，没有读过某本书也可以临时抱佛脚掉一两个包袱。但一本书里大量的旁征博引需要一定量的积累，如果整本书里都是小聪明式的掉书袋，那也够作者累的。我没读过《三重门》，不知道里面掉书袋的程度如何，对此便没有发言权了。</p>
<p>韩公子对那一系列疑问的回答还说的过去，毕竟万事皆有可能，但他拿出手稿说事就不那么有力了。难道有手稿就能说明是他自己的作品？想当初我还在上小学的时候，老爸为本人捉刀写了一篇作文参加一个作文比赛，我还得乖乖地自己抄写一份交给老师。韩公子总不至于把他老爸写的手稿直接寄到出版社吧（如果真是由他父亲代笔的话）。自己由人捉刀而不抄手稿的事情还真有一回：那是在高中追女生的时候让别人代笔写情书（这事当然不能找老爸），写来的情书稿子自己都没有抄一份就直接送给了妹子，那是因为捉刀人的字写得比我好。</p>
<p>捉刀本来是件小事，而且是谁也说不清的小事。背后真有人代笔也好，没人也罢，韩公子没必要这么着急：发了好几篇博文澄清，打了很多张感情牌，中间说不理会这事，后来又接着冷嘲热讽，最后竟还要闹上法庭。这件小事，往近了说，金庸、古龙都曾找人代笔，往国外说，大仲马也曾找人代笔，往远了说，曹雪芹的《红楼梦》后四十回是何人代笔已成一桩公案，岳飞在文坛上得以扬名立万的《满江红》究竟是不是他自己所写已经无人知晓，吕不韦号称写了以他冠名的《吕氏春秋》，但他背后的捉刀人（们）早已湮没在浩渺的古书中，大概因为背后的捉刀人（们）功底深厚，他才敢放出“一字千金”的大话。</p>
<p>倘若韩公子的偶像钱老先生被人质疑背后有人代笔，老人家大概只付之一笑，因为笔杆子握在自己手里，嘴长在别人脸上，他们说他们的，自己仍旧写自己的，至于有没有代笔，姑且留给后人去猜吧。估计不久之后，“韩寒猜想”能就此诞生。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chunhao.net/ghost-writer/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>额尔古纳亲王</title>
		<link>http://blog.chunhao.net/prince-ergun</link>
		<comments>http://blog.chunhao.net/prince-ergun#comments</comments>
		<pubDate>Mon, 04 Jul 2011 06:15:10 +0000</pubDate>
		<dc:creator>Chunhao</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.chunhao.net/?p=538</guid>
		<description><![CDATA[SFU的CS系有个姓Ergun的教授，上过她的课的人都知道，这个教授有一头棕黄的头发，宽大的脸庞上嵌着一双乌黑的眼睛，再加上她黄里泛白的皮肤，读者能联想地到，这个长相结合了蒙古人、高加索人和穆斯林的种种特点。她上课的风格可以用八个字来概括：疯疯癫癫、随心所欲。这正提现了她骨子里那种豪放不羁的略带有游牧气息的性格。礼貌起见，我不想妄加推测她的年龄，但有心的读者可以从这篇文章的上下文里仔细推断，或许能略知一二。就像河流冲过沙洲后留下的一条条水纹一样，流年岁月也在她脸上无情地留下一点痕迹。透过这些痕迹，或许还能隐约看到当年正值青春时那个活泼开朗的姑娘，还有永远藏在她心底那些小故事。现在的她，或许没有Fedorova教授那样性感风骚，但也算得是风韵犹存。 本文所关心的重点并不是这个教授，也不是她年轻时代的传闻往事，因为在我看来，她的姓氏“Ergun”所包含的故事要深刻和有趣地多。要了解她姓氏背后的故事，首先要介绍一下她的教育背景：她是土耳其人，在土耳其一所大学完成了本科学位后，1997年她又在美国康奈尔大学（Cornell）获得了PhD学位，几年后才来到SFU成为CS系的教授。 读者也许对“Ergun”这个词比较陌生，但它却近在眼前：这是我国一条河流的名字——额尔古纳河。在我国如雄鸡一般的版图中，这条河位于鸡冠的后边，是黑龙江的上游。在额尔古纳河的拉丁名字中，Argun和Ergun是等价的。一个土耳其教授，她的姓氏居然是我国东北边界的一条河流的名字，读者可能认为这纯粹是出自偶然。当然，我并不排除这种可能性，但在接下去的文字里，我要向大家展示一下据我考证和推断的结果。 了解世界史的人应该很清楚，土耳其人是突厥人的直系后裔。了解中国古代史的人也应该记得，突厥人曾在隋唐时期和中原军队进行过数次惨烈的战役，我们就从那时说起。 突厥人是匈奴人的后裔，他们起源于叶尼塞河和贝加尔湖附近。在南北朝时期，突厥人征服了西至里海，东到大兴安岭，南起大漠，北至西伯利亚的各个游牧民族，建立了突厥汗国。突厥汗国当时的疆域已经囊括了额尔古纳河，至此，突厥人的姓氏“额尔古纳”的产生也就不足为怪了。 我们现在再来探讨一下关于姓氏的一般问题。在一个民族诞生之初，地位低下的平民根本没有姓氏，只有王公贵族才有资格拥有姓氏，让子孙后代都能分享祖先的荣誉。而他们的姓氏往往是用自己的封地命名。例如，战国时期赵国国君的祖先曾为周穆王驾车有功，被封到造父城，自此子孙后代皆姓赵。在西方也有这个传统。现在，法国人名中的“德”，德国人名中的“冯”和西班牙人名中的“唐”都是中古时期贵族封号的遗迹。例如戴高乐的法文名字是Charles de Gaulle，表明他的祖先曾是享有封地“Gaulle”的一位爵爷，只不过后来王权没落，家势衰颓，Gaulle家族的封地早已丧失，而姓氏却一直被族人保留，就如同一起保留下来的贵族遗风和优雅传统。 由此可以推断出，获得“额尔古纳”姓氏的突厥人绝非等闲之辈。此人很可能是南北朝时期突厥可汗的一名亲王，率军向东横扫，征服了鲜卑人，把突厥帝国的疆域打通到欧亚大陆最东端的鄂霍次克海边。因此，突厥可汗把额尔古纳河流域富饶的草原封给他，此人的名字很可能就叫“额尔古纳亲王”，他的子孙后代也就因此沿用了“额尔古纳”这一荣耀的姓氏。 我在浩渺的史料中苦苦找寻“额尔古纳亲王”的蛛丝马迹，可是一无所获，是什么原因让这位显赫一时的突厥贵族在历史中湮没无闻？据我推断，很可能是隋唐两朝对突厥发动的一系列毁灭性的打击，让这个家族彻底失去了光辉。 隋文帝对突厥发动了三次战争，均大获全胜。第一次战争发生在公元583到584年，此次战争导致了突厥分裂为东西两个汗国。额尔古纳亲王对突厥正统王室忠心耿耿，自然是留在了东突厥汗国。尽管亲王的骑兵骁勇善战，但如何能敌得过隋朝的精兵。所以，三次突厥战争之后，东突厥发现无力也天朝抗衡，遂决定归顺隋朝。额尔古纳亲王纵使没有在这几次战役中战死，其家族也元气大伤，而且可汗归顺天朝后，他也渐渐失去了用武之地。 随末的战乱又给了突厥可乘之机，他们大举侵犯中原。当时唐国公李渊正集中力量收缴中原各路军阀，无暇顾及突厥，只好暂时向其称臣，真所谓三十年河东，三十年河西。太宗李世民继位之后，中原安定，国力强盛，正是着手解决北方边疆之害的大好时机。唐朝派出以李靖（《笑傲江湖》记载，此人曾练成“易筋经”）为首的一批开国精英，对东突厥发动攻击，最终俘获颉利可汗，东突厥彻底灭亡。 额尔古纳亲王家族的骑兵不是隋文帝的对手，此时更无法与李靖匹敌。亲王世家世代效忠突厥可汗，此时怎肯接受唐朝的命令，举族千入中原。迫不得已，额尔古纳亲王的继承人只好向西出逃，投奔西突厥汗国。尽管同是突厥人，但额尔古纳亲王世代效忠西突厥汗国的死地东突厥汗国，可汗绝不会重用前来投奔的额尔古纳亲王。由此，亲王再也无法像他的祖先在东突厥的额尔古纳河畔发号施令统领群雄。在如今被称作哈萨克斯坦的地方，亲王只能和族人隐居在沙漠边缘的一块草原上，不问政事。几代人之后，家族失去了亲王的爵位，原先显赫一时的额尔古纳亲王的后人沦落到了一介牧民的惨淡地步。 东突厥被攻破几十年后，唐高宗派出大将苏定方讨伐西突厥，苏定方长驱直入，袭敌万里，最终在今天被称作乌兹别克斯坦的地方打败西突厥可汗，并最终灭掉西突厥汗国。自此，整个中亚也在我天朝的庇护之下。 西突厥被攻陷后，突厥人开始向西迁徙，额尔古纳氏也跟着突厥首领的脚步，开始了漫长的西迁之路。几个世纪后，一支塞尔柱家族的突厥人崛起，在十世纪到十一世纪，他们横扫西亚的穆斯林世界，攻克了巴格达和耶路撒冷，随后他们又打败了拜占庭人，控制了小亚细亚，成了煊赫一时的大帝国。 由于对祖先荣耀的怀念和贵族血统的矜持，额尔古纳家族已经无力东山再起。在塞尔柱家族让穆斯林世界和基督教世界震撼的时候，额尔古纳家族的族长大概只是塞尔柱家族的幕僚。要像先人那样东征西讨，用一块大河流域作为自己子孙后代的姓氏这样的壮举，额尔古纳人再也无法实现了。 蒙古人的西征给塞尔柱突厥人带来了沉重的打击，以至于他们只能龟缩在小亚细亚半岛，抵挡着蒙古人的锋芒，从而也间接为身后的拜占庭人充当了屏障。蒙古人带来的噩梦过后，在十四世纪，一支突厥人的家族奥斯曼人在慢慢壮大，他们恢复了塞尔柱家族曾经的疆域，并且继续向西，攻克了一千年来都未曾被异教徒攻克的君士坦丁堡。延续千年的东罗马帝国就此覆灭，取而代之的是奥斯曼突厥帝国，也就是西方人所说的奥斯曼土耳其帝国。 遗憾的是，额尔古纳家族这支古老而高贵的家族并未能延续祖先的光辉事业，而只能眼睁睁看着暴发户一样的塞尔柱家族和奥斯曼家族先后崛起。尽管已经从贵族沦落到平民，这个家族仍然保持了这个象征着至高无上的荣誉的姓氏——额尔古纳。只是他们的祖先获得这个流传千年的荣耀的地方是在亚洲最东端，而他们现在则辗转到了亚洲最西边。 如果从552年突厥征服柔然算起，到1453年突厥人攻破君士坦丁堡，一共经历了九百零一年。在这九个世纪的噩梦一般的旅行中，这个家族经历了数不清的灾难，甚至几经覆灭的危险。但他们顽强的生存下来了，而且保留着祖先的姓氏“Ergun”，这个姓氏对他们的意义也许只剩一个符号，但他们的血液里始终流淌着祖先的英勇、高贵和忠诚。现在，提起“Ergun”这个姓氏，谁还能记得距今一千五百年前，Ergun家族的祖先为了获得这个光荣的姓氏流出了多少鲜血。 突厥人经过五六个世纪不断与高加索人、穆斯林的融合，在Ergun教授的脸上已经没有多少蒙古人种的特征，但她高贵的姓氏蕴含了九个世纪的流血和征服，为我们展现了当年她的祖先们所经历的深沉的故事。 Ergun教授的祖先用了九个世纪从黑龙江的上游额尔古纳河迁徙到她的祖国土耳其。而她现在用不了九个小时就可以从伊斯坦布尔飞越大西洋，到达她的母校康奈尔大学。接着，在用三个小时就可以横跨美洲大陆，来到位于加拿大的西海岸的SFU。只要她愿意，再花上11个小时，她就能跨越太平洋，回到她祖先那个梦开始的地方——古老而美丽的额尔古纳河畔。 她的祖先曾被天朝铁骑杀得惊心动魄，不得不向天朝称臣。而十五个世纪后，身为天朝子民的我欣然成了Ergun教授讲台下的学生，倘若她的祖先——那位传说中的额尔古纳亲王——泉下有知,也应该瞑目了。]]></description>
			<content:encoded><![CDATA[<p>SFU的CS系有个姓Ergun的教授，上过她的课的人都知道，这个教授有一头棕黄的头发，宽大的脸庞上嵌着一双乌黑的眼睛，再加上她黄里泛白的皮肤，读者能联想地到，这个长相结合了蒙古人、高加索人和穆斯林的种种特点。她上课的风格可以用八个字来概括：疯疯癫癫、随心所欲。这正提现了她骨子里那种豪放不羁的略带有游牧气息的性格。礼貌起见，我不想妄加推测她的年龄，但有心的读者可以从这篇文章的上下文里仔细推断，或许能略知一二。就像河流冲过沙洲后留下的一条条水纹一样，流年岁月也在她脸上无情地留下一点痕迹。透过这些痕迹，或许还能隐约看到当年正值青春时那个活泼开朗的姑娘，还有永远藏在她心底那些小故事。现在的她，或许没有Fedorova教授那样性感风骚，但也算得是风韵犹存。</p>
<p>本文所关心的重点并不是这个教授，也不是她年轻时代的传闻往事，因为在我看来，她的姓氏“Ergun”所包含的故事要深刻和有趣地多。要了解她姓氏背后的故事，首先要介绍一下她的教育背景：她是土耳其人，在土耳其一所大学完成了本科学位后，1997年她又在美国康奈尔大学（Cornell）获得了PhD学位，几年后才来到SFU成为CS系的教授。</p>
<p>读者也许对“Ergun”这个词比较陌生，但它却近在眼前：这是我国一条河流的名字——额尔古纳河。在我国如雄鸡一般的版图中，这条河位于鸡冠的后边，是黑龙江的上游。在额尔古纳河的拉丁名字中，Argun和Ergun是等价的。一个土耳其教授，她的姓氏居然是我国东北边界的一条河流的名字，读者可能认为这纯粹是出自偶然。当然，我并不排除这种可能性，但在接下去的文字里，我要向大家展示一下据我考证和推断的结果。</p>
<p>了解世界史的人应该很清楚，土耳其人是突厥人的直系后裔。了解中国古代史的人也应该记得，突厥人曾在隋唐时期和中原军队进行过数次惨烈的战役，我们就从那时说起。</p>
<p>突厥人是匈奴人的后裔，他们起源于叶尼塞河和贝加尔湖附近。在南北朝时期，突厥人征服了西至里海，东到大兴安岭，南起大漠，北至西伯利亚的各个游牧民族，建立了突厥汗国。突厥汗国当时的疆域已经囊括了额尔古纳河，至此，突厥人的姓氏“额尔古纳”的产生也就不足为怪了。</p>
<p>我们现在再来探讨一下关于姓氏的一般问题。在一个民族诞生之初，地位低下的平民根本没有姓氏，只有王公贵族才有资格拥有姓氏，让子孙后代都能分享祖先的荣誉。而他们的姓氏往往是用自己的封地命名。例如，战国时期赵国国君的祖先曾为周穆王驾车有功，被封到造父城，自此子孙后代皆姓赵。在西方也有这个传统。现在，法国人名中的“德”，德国人名中的“冯”和西班牙人名中的“唐”都是中古时期贵族封号的遗迹。例如戴高乐的法文名字是Charles de Gaulle，表明他的祖先曾是享有封地“Gaulle”的一位爵爷，只不过后来王权没落，家势衰颓，Gaulle家族的封地早已丧失，而姓氏却一直被族人保留，就如同一起保留下来的贵族遗风和优雅传统。</p>
<p>由此可以推断出，获得“额尔古纳”姓氏的突厥人绝非等闲之辈。此人很可能是南北朝时期突厥可汗的一名亲王，率军向东横扫，征服了鲜卑人，把突厥帝国的疆域打通到欧亚大陆最东端的鄂霍次克海边。因此，突厥可汗把额尔古纳河流域富饶的草原封给他，此人的名字很可能就叫“额尔古纳亲王”，他的子孙后代也就因此沿用了“额尔古纳”这一荣耀的姓氏。</p>
<p><a href="http://blog.chunhao.net/wp-content/uploads/2011/07/fig0.jpg"><img class="aligncenter size-full wp-image-539" title="fig0" src="http://blog.chunhao.net/wp-content/uploads/2011/07/fig0.jpg" alt="" width="502" height="369" /></a></p>
<p>我在浩渺的史料中苦苦找寻“额尔古纳亲王”的蛛丝马迹，可是一无所获，是什么原因让这位显赫一时的突厥贵族在历史中湮没无闻？据我推断，很可能是隋唐两朝对突厥发动的一系列毁灭性的打击，让这个家族彻底失去了光辉。</p>
<p>隋文帝对突厥发动了三次战争，均大获全胜。第一次战争发生在公元583到584年，此次战争导致了突厥分裂为东西两个汗国。额尔古纳亲王对突厥正统王室忠心耿耿，自然是留在了东突厥汗国。尽管亲王的骑兵骁勇善战，但如何能敌得过隋朝的精兵。所以，三次突厥战争之后，东突厥发现无力也天朝抗衡，遂决定归顺隋朝。额尔古纳亲王纵使没有在这几次战役中战死，其家族也元气大伤，而且可汗归顺天朝后，他也渐渐失去了用武之地。</p>
<p>随末的战乱又给了突厥可乘之机，他们大举侵犯中原。当时唐国公李渊正集中力量收缴中原各路军阀，无暇顾及突厥，只好暂时向其称臣，真所谓三十年河东，三十年河西。太宗李世民继位之后，中原安定，国力强盛，正是着手解决北方边疆之害的大好时机。唐朝派出以李靖（《笑傲江湖》记载，此人曾练成“易筋经”）为首的一批开国精英，对东突厥发动攻击，最终俘获颉利可汗，东突厥彻底灭亡。</p>
<p>额尔古纳亲王家族的骑兵不是隋文帝的对手，此时更无法与李靖匹敌。亲王世家世代效忠突厥可汗，此时怎肯接受唐朝的命令，举族千入中原。迫不得已，额尔古纳亲王的继承人只好向西出逃，投奔西突厥汗国。尽管同是突厥人，但额尔古纳亲王世代效忠西突厥汗国的死地东突厥汗国，可汗绝不会重用前来投奔的额尔古纳亲王。由此，亲王再也无法像他的祖先在东突厥的额尔古纳河畔发号施令统领群雄。在如今被称作哈萨克斯坦的地方，亲王只能和族人隐居在沙漠边缘的一块草原上，不问政事。几代人之后，家族失去了亲王的爵位，原先显赫一时的额尔古纳亲王的后人沦落到了一介牧民的惨淡地步。</p>
<p>东突厥被攻破几十年后，唐高宗派出大将苏定方讨伐西突厥，苏定方长驱直入，袭敌万里，最终在今天被称作乌兹别克斯坦的地方打败西突厥可汗，并最终灭掉西突厥汗国。自此，整个中亚也在我天朝的庇护之下。</p>
<p>西突厥被攻陷后，突厥人开始向西迁徙，额尔古纳氏也跟着突厥首领的脚步，开始了漫长的西迁之路。几个世纪后，一支塞尔柱家族的突厥人崛起，在十世纪到十一世纪，他们横扫西亚的穆斯林世界，攻克了巴格达和耶路撒冷，随后他们又打败了拜占庭人，控制了小亚细亚，成了煊赫一时的大帝国。</p>
<p>由于对祖先荣耀的怀念和贵族血统的矜持，额尔古纳家族已经无力东山再起。在塞尔柱家族让穆斯林世界和基督教世界震撼的时候，额尔古纳家族的族长大概只是塞尔柱家族的幕僚。要像先人那样东征西讨，用一块大河流域作为自己子孙后代的姓氏这样的壮举，额尔古纳人再也无法实现了。</p>
<p>蒙古人的西征给塞尔柱突厥人带来了沉重的打击，以至于他们只能龟缩在小亚细亚半岛，抵挡着蒙古人的锋芒，从而也间接为身后的拜占庭人充当了屏障。蒙古人带来的噩梦过后，在十四世纪，一支突厥人的家族奥斯曼人在慢慢壮大，他们恢复了塞尔柱家族曾经的疆域，并且继续向西，攻克了一千年来都未曾被异教徒攻克的君士坦丁堡。延续千年的东罗马帝国就此覆灭，取而代之的是奥斯曼突厥帝国，也就是西方人所说的奥斯曼土耳其帝国。</p>
<p>遗憾的是，额尔古纳家族这支古老而高贵的家族并未能延续祖先的光辉事业，而只能眼睁睁看着暴发户一样的塞尔柱家族和奥斯曼家族先后崛起。尽管已经从贵族沦落到平民，这个家族仍然保持了这个象征着至高无上的荣誉的姓氏——额尔古纳。只是他们的祖先获得这个流传千年的荣耀的地方是在亚洲最东端，而他们现在则辗转到了亚洲最西边。</p>
<p>如果从552年突厥征服柔然算起，到1453年突厥人攻破君士坦丁堡，一共经历了九百零一年。在这九个世纪的噩梦一般的旅行中，这个家族经历了数不清的灾难，甚至几经覆灭的危险。但他们顽强的生存下来了，而且保留着祖先的姓氏“Ergun”，这个姓氏对他们的意义也许只剩一个符号，但他们的血液里始终流淌着祖先的英勇、高贵和忠诚。现在，提起“Ergun”这个姓氏，谁还能记得距今一千五百年前，Ergun家族的祖先为了获得这个光荣的姓氏流出了多少鲜血。</p>
<p>突厥人经过五六个世纪不断与高加索人、穆斯林的融合，在Ergun教授的脸上已经没有多少蒙古人种的特征，但她高贵的姓氏蕴含了九个世纪的流血和征服，为我们展现了当年她的祖先们所经历的深沉的故事。</p>
<p>Ergun教授的祖先用了九个世纪从黑龙江的上游额尔古纳河迁徙到她的祖国土耳其。而她现在用不了九个小时就可以从伊斯坦布尔飞越大西洋，到达她的母校康奈尔大学。接着，在用三个小时就可以横跨美洲大陆，来到位于加拿大的西海岸的SFU。只要她愿意，再花上11个小时，她就能跨越太平洋，回到她祖先那个梦开始的地方——古老而美丽的额尔古纳河畔。</p>
<p>她的祖先曾被天朝铁骑杀得惊心动魄，不得不向天朝称臣。而十五个世纪后，身为天朝子民的我欣然成了Ergun教授讲台下的学生，倘若她的祖先——那位传说中的额尔古纳亲王——泉下有知,也应该瞑目了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chunhao.net/prince-ergun/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>季札豫让赞</title>
		<link>http://blog.chunhao.net/jizi-yurang</link>
		<comments>http://blog.chunhao.net/jizi-yurang#comments</comments>
		<pubDate>Fri, 15 Apr 2011 05:26:44 +0000</pubDate>
		<dc:creator>Chunhao</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.chunhao.net/?p=493</guid>
		<description><![CDATA[始吾心已许之，岂以死倍吾心哉！——《史记·吴太伯世家》 看到标题，你一定觉得很奇怪，季札和豫让，一个是吴国的公子，一个是晋国的刺客。这两个八杆子打不着、相隔近百年的人，我为什么会把他们写在一起？ 可能是因为年代的久远而产生的神秘色彩，也可能是时间会给人注入特殊的基因，每个时代的人都或多或少有着相似的特点，让我们津津乐道，甚至无限遐想，比如两汉人的忧郁，魏晋人的狂放，唐朝人的风流，宋代人的闷骚，还有明清人的蛋疼。俗话说，春秋战国多奇人奇事，这可能是当时混乱的政治格局所造，或许是文明形成不久带给人的幼稚。似乎越是古老的人物事迹越能给我们带来震撼和感动。在《史记》中，最让我感动的就是季札和豫让这两个人，他们似乎没有任何关联，但这并未影响我被他们感动而把他们写在一起的冲动。 季札的事迹记载在《吴太伯世家》中。季札是吴王寿梦的儿子，寿梦有四子：诸樊、余祭、余眛、季札，其中数小儿子季札最贤能。寿梦想传位季札，季札推让，于是传位给长子诸樊。诸樊继位后要立季札为诸君，但季札认为废子立弟不合圣理，于是跑到乡下种地，躲了起来。诸樊临死时，把君位传给弟弟余祭，让他接着传给弟弟，直到传给季札为止，以此来完成寿梦的遗愿。后来季札被封在延陵，人们称他为延陵季子。 吴王余祭去世时把王位传给余眛，余眛去世时要把王位传给季子，不料季子不想继位，又逃跑了，吴国人没办法，只好让余眛的儿子僚继位。公子光是诸樊的儿子，他认为季子不肯继位，按理说该继承王位的是他，而不是王僚，这就有了专诸刺王僚的故事，后来公子光弑君继位后就是大名鼎鼎的吴王阖闾，这都是后话。 不光低调、淡泊，季子还用他渊博的学识博得了太史公的赏识，使其不吝惜笔墨来描写他。在《吴太伯世家》中，还记载着“季子观周乐”的故事，再往前追溯的话，这件事更早被记载在《左传·襄公二十九年》中。 吴王派季子访问鲁国，季子想要欣赏一下周朝的音乐。鲁国的乐工为他演奏《周南》和《召南》，周公旦和召公奭是周王室的宗亲，周武王的两大辅臣，被封到鲁国和燕国。季子听完这两部诗乐后说：“美啊，这就是帝王的基业啊，虽然未能尽善，但能听出王室勤劳而没有怨念。” 乐工又演奏《邶风》、《鄘风》和《卫风》，邶鄘卫三国封给武王的三个弟弟管叔、蔡叔、霍叔，来监督纣王的儿子武庚，后来这三国作乱，周公杀管叔，流放蔡叔，把这三国合并为卫，封给康叔。季子听了这三国的音乐说：“美啊，深沉啊，虽然饱受坎坷而不陷于困顿颓唐，听说这是康叔、武公的德行啊，这是《卫风》吧？” 乐工又演奏《王风》，季子说：“美啊，从乐声中听出宗周陨灭，忧思不尽，而有先王遗风，故不畏惧，这是周王室东迁后的诗吧？” 乐工演唱《齐风》，季子说：“美啊，弘大深远，有泱泱大国之风，曲调中有东海的气息，这是姜太公的遗风吧！” 乐工演奏《秦风》，季子说：“这是华夏的音调，既然有华夏的音调，国家必然会强大，强大到一定程度，大概会占有周朝的旧地吧？”乐工还演奏了很多诗经的音乐，季子尽知其详。 单凭上面的记载，就能知道季子的高风亮节、才华横溢，但最让我感动的是他挂剑的故事。季子出使诸国，到了徐国，徐国的国君很喜欢季子的宝剑，但嘴里没敢说。季子心里也明白徐君之意，但因为还要到中原各国出使，就没把宝剑献给徐君。等到出使归来又经过徐国，徐君已死，季子解下宝剑挂在徐君坟头的树上才离开。侍从说：“徐君已死，那宝剑还给谁啊？”季子说：“不对，当初我内心已经答应了他，怎么能因为他已死就违背了自己的心愿呢？”（“不然。始吾心已许之，岂以死倍吾心哉！”） 太史公在《吴太伯世家》的最后说：“延陵季子之仁心，慕义无穷，见微而知清浊。呜呼，又何其闳览博物君子也！”这样心怀仁爱，向慕道义，见多识广而有博学多才的君子，多让人向往啊。所以，我在给一个人写的诗中写了这么两句：“仰季子之博义兮，闻诗乐而知古今”。 季子观周乐后大概七八十年才有了豫让的故事，记载在《刺客列传》里。 豫让是晋国人，原先曾作过范、中行两家的家臣，但都得不到重用，后来侍奉智伯，才受到尊崇重用。智伯灭了范氏、中行氏两家，接着又率领魏桓子、韩康子围攻赵襄子，赵襄子暗中联合韩魏两家反攻智伯，灭了智家，瓜分了他的土地，这就是赵韩魏三家分晋的故事。 智伯被灭后，豫让逃到深山中，说：“士为知己者死，女为悦己者容，我一定要为智伯报仇，以报答他的知遇之恩！”于是他更名改姓，把自己伪装成受刑的人，到赵襄子的宫中刷厕所，找机会行刺。赵襄子上厕所的时候突然心中一悸（可见攒人品的重要性），让人审问刷厕所的人，果然发现是豫让，还在衣服里藏了刀。豫让一看事情败露，大义凛然地说：“我是来为智伯报仇的！”。赵襄子的手下要杀豫让，赵襄子拦住说：“算了吧，这是个有情义的人，我躲他远点就好了。而且智伯死了没有后人，他的家臣却要为他报仇，这是天下少有的贤人啊。”于是就把他放了。 哪知豫让并不迷途知返，没过多久，他把漆涂在身上让皮肤疮肿，吞炭让声音变哑，改换了形容，在街上行乞，连他老婆也认不出他了。有个朋友认出了他，问他：“这不是豫让么？”豫让回答说是我。他的朋友哭着说：“凭你的才华，做赵襄子的家臣不成问题啊，而且他肯定会重用亲近你，到时候想报仇不是很容易么？又何必搞成这副鬼样子呢。”豫让说：“既然侍奉一个人，而又打算杀他，这就是怀着异心侍奉君主。我虽然搞成这鬼样子很痛苦，但我这样做就是为了让今后那些怀着异心侍奉君主的人感到羞愧！”（“然所以为此者，将以愧天下后世之为人臣怀二心以事其君者也。”） 后来赵襄子出行，豫让埋伏在襄子必经的一座桥下。襄子骑马到那座桥前，突然马受惊了（再次说明攒人品的重要性），襄子说：“肯定又是豫让。”于是让人搜查，果然抓住了豫让。襄子大怒，对豫让说：“你不是也侍奉过范氏和中行氏两家么？他们被智伯灭了也没见你为他们报仇，反而成了智伯的家臣，为啥我灭了智伯你就要找我来寻仇？” 豫让说：“我侍奉范氏和中行氏的时候，他们只把我当普通人看待，所以我用普通人的方式报答他们，而我侍奉智伯的时候，他把我当国士看待，所以我要以国士的方式报答他。” 襄子听了渭然长叹，感动得内牛满面：“豫让啊豫让，你为智伯所做的已算成名了；我宽恕你，也已经足够了。你该为自己做个打算，我不会再放你了。” 豫让说：“我听说贤明的君主不埋没别人的美名，而忠臣也会为了美名去死。您上次赦免了我，普天之下都称赞您的贤明。今天我是死路一条，请您把您的衣服赐给我，我要刺它几下，算是为智伯报仇，也就死而无憾了。我不敢奢望您能答应我的要求，但也要冒昧说出我的心意。” 襄子听了他这番话，把自己的衣服给了他，豫让拔出宝剑跳起来刺它，说：“我在九泉之下也可以报答智伯了！”说完就伏剑自杀。赵国人听了豫让的死讯无不为他流泪。 读了季子和豫让的故事，不禁感到震撼。其实不光这两人，有很多古人，当读到他们的故事时，就会感到这样的人物事迹只可能在完全理想的情况下发生，而在现实社会中怎么会有呢？现在，有多少人会像季子一样因为“始吾心已许之”而即便跨越生死也不违背自己当初的心愿？有多少人会像豫让一样执着地坚持一件事，哪怕明知道要失败，哪怕要经受巨大的痛苦？“高山仰止，景行行止，虽不能至，心向往之”，我不敢自比古人，只能通过这篇文章来表达他们在我心里引起的共鸣。 话说，和现在相反，在中学时，我对文学极其反感。但每次背诵课文、古文，我总是最快的人，往往读上几遍便能背出来，然后被老师叫起来当在全班同学面前背诵，好不风光。现在我试着把“季札观周乐”背诵下来，尝试了几次就打了退堂鼓。可见，缺少了装逼这个推动力，学习的效率会降低很多。]]></description>
			<content:encoded><![CDATA[<blockquote><p>始吾心已许之，岂以死倍吾心哉！——《史记·吴太伯世家》</p></blockquote>
<p>看到标题，你一定觉得很奇怪，季札和豫让，一个是吴国的公子，一个是晋国的刺客。这两个八杆子打不着、相隔近百年的人，我为什么会把他们写在一起？</p>
<p>可能是因为年代的久远而产生的神秘色彩，也可能是时间会给人注入特殊的基因，每个时代的人都或多或少有着相似的特点，让我们津津乐道，甚至无限遐想，比如两汉人的忧郁，魏晋人的狂放，唐朝人的风流，宋代人的闷骚，还有明清人的蛋疼。俗话说，春秋战国多奇人奇事，这可能是当时混乱的政治格局所造，或许是文明形成不久带给人的幼稚。似乎越是古老的人物事迹越能给我们带来震撼和感动。在《史记》中，最让我感动的就是季札和豫让这两个人，他们似乎没有任何关联，但这并未影响我被他们感动而把他们写在一起的冲动。</p>
<p>季札的事迹记载在《吴太伯世家》中。季札是吴王寿梦的儿子，寿梦有四子：诸樊、余祭、余眛、季札，其中数小儿子季札最贤能。寿梦想传位季札，季札推让，于是传位给长子诸樊。诸樊继位后要立季札为诸君，但季札认为废子立弟不合圣理，于是跑到乡下种地，躲了起来。诸樊临死时，把君位传给弟弟余祭，让他接着传给弟弟，直到传给季札为止，以此来完成寿梦的遗愿。后来季札被封在延陵，人们称他为延陵季子。</p>
<p>吴王余祭去世时把王位传给余眛，余眛去世时要把王位传给季子，不料季子不想继位，又逃跑了，吴国人没办法，只好让余眛的儿子僚继位。公子光是诸樊的儿子，他认为季子不肯继位，按理说该继承王位的是他，而不是王僚，这就有了专诸刺王僚的故事，后来公子光弑君继位后就是大名鼎鼎的吴王阖闾，这都是后话。</p>
<p>不光低调、淡泊，季子还用他渊博的学识博得了太史公的赏识，使其不吝惜笔墨来描写他。在《吴太伯世家》中，还记载着“季子观周乐”的故事，再往前追溯的话，这件事更早被记载在《左传·襄公二十九年》中。</p>
<p>吴王派季子访问鲁国，季子想要欣赏一下周朝的音乐。鲁国的乐工为他演奏《周南》和《召南》，周公旦和召公奭是周王室的宗亲，周武王的两大辅臣，被封到鲁国和燕国。季子听完这两部诗乐后说：“美啊，这就是帝王的基业啊，虽然未能尽善，但能听出王室勤劳而没有怨念。”</p>
<p>乐工又演奏《邶风》、《鄘风》和《卫风》，邶鄘卫三国封给武王的三个弟弟管叔、蔡叔、霍叔，来监督纣王的儿子武庚，后来这三国作乱，周公杀管叔，流放蔡叔，把这三国合并为卫，封给康叔。季子听了这三国的音乐说：“美啊，深沉啊，虽然饱受坎坷而不陷于困顿颓唐，听说这是康叔、武公的德行啊，这是《卫风》吧？”</p>
<p>乐工又演奏《王风》，季子说：“美啊，从乐声中听出宗周陨灭，忧思不尽，而有先王遗风，故不畏惧，这是周王室东迁后的诗吧？”</p>
<p>乐工演唱《齐风》，季子说：“美啊，弘大深远，有泱泱大国之风，曲调中有东海的气息，这是姜太公的遗风吧！”</p>
<p>乐工演奏《秦风》，季子说：“这是华夏的音调，既然有华夏的音调，国家必然会强大，强大到一定程度，大概会占有周朝的旧地吧？”乐工还演奏了很多诗经的音乐，季子尽知其详。</p>
<p>单凭上面的记载，就能知道季子的高风亮节、才华横溢，但最让我感动的是他挂剑的故事。季子出使诸国，到了徐国，徐国的国君很喜欢季子的宝剑，但嘴里没敢说。季子心里也明白徐君之意，但因为还要到中原各国出使，就没把宝剑献给徐君。等到出使归来又经过徐国，徐君已死，季子解下宝剑挂在徐君坟头的树上才离开。侍从说：“徐君已死，那宝剑还给谁啊？”季子说：“不对，当初我内心已经答应了他，怎么能因为他已死就违背了自己的心愿呢？”（“不然。始吾心已许之，岂以死倍吾心哉！”）</p>
<p>太史公在《吴太伯世家》的最后说：“延陵季子之仁心，慕义无穷，见微而知清浊。呜呼，又何其闳览博物君子也！”这样心怀仁爱，向慕道义，见多识广而有博学多才的君子，多让人向往啊。所以，我在给一个人写的诗中写了这么两句：“仰季子之博义兮，闻诗乐而知古今”。</p>
<p>季子观周乐后大概七八十年才有了豫让的故事，记载在《刺客列传》里。</p>
<p>豫让是晋国人，原先曾作过范、中行两家的家臣，但都得不到重用，后来侍奉智伯，才受到尊崇重用。智伯灭了范氏、中行氏两家，接着又率领魏桓子、韩康子围攻赵襄子，赵襄子暗中联合韩魏两家反攻智伯，灭了智家，瓜分了他的土地，这就是赵韩魏三家分晋的故事。</p>
<p>智伯被灭后，豫让逃到深山中，说：“士为知己者死，女为悦己者容，我一定要为智伯报仇，以报答他的知遇之恩！”于是他更名改姓，把自己伪装成受刑的人，到赵襄子的宫中刷厕所，找机会行刺。赵襄子上厕所的时候突然心中一悸（可见攒人品的重要性），让人审问刷厕所的人，果然发现是豫让，还在衣服里藏了刀。豫让一看事情败露，大义凛然地说：“我是来为智伯报仇的！”。赵襄子的手下要杀豫让，赵襄子拦住说：“算了吧，这是个有情义的人，我躲他远点就好了。而且智伯死了没有后人，他的家臣却要为他报仇，这是天下少有的贤人啊。”于是就把他放了。</p>
<p>哪知豫让并不迷途知返，没过多久，他把漆涂在身上让皮肤疮肿，吞炭让声音变哑，改换了形容，在街上行乞，连他老婆也认不出他了。有个朋友认出了他，问他：“这不是豫让么？”豫让回答说是我。他的朋友哭着说：“凭你的才华，做赵襄子的家臣不成问题啊，而且他肯定会重用亲近你，到时候想报仇不是很容易么？又何必搞成这副鬼样子呢。”豫让说：“既然侍奉一个人，而又打算杀他，这就是怀着异心侍奉君主。我虽然搞成这鬼样子很痛苦，但我这样做就是为了让今后那些怀着异心侍奉君主的人感到羞愧！”（“然所以为此者，将以愧天下后世之为人臣怀二心以事其君者也。”）</p>
<p>后来赵襄子出行，豫让埋伏在襄子必经的一座桥下。襄子骑马到那座桥前，突然马受惊了（再次说明攒人品的重要性），襄子说：“肯定又是豫让。”于是让人搜查，果然抓住了豫让。襄子大怒，对豫让说：“你不是也侍奉过范氏和中行氏两家么？他们被智伯灭了也没见你为他们报仇，反而成了智伯的家臣，为啥我灭了智伯你就要找我来寻仇？”</p>
<p>豫让说：“我侍奉范氏和中行氏的时候，他们只把我当普通人看待，所以我用普通人的方式报答他们，而我侍奉智伯的时候，他把我当国士看待，所以我要以国士的方式报答他。”</p>
<p>襄子听了渭然长叹，感动得内牛满面：“豫让啊豫让，你为智伯所做的已算成名了；我宽恕你，也已经足够了。你该为自己做个打算，我不会再放你了。”</p>
<p>豫让说：“我听说贤明的君主不埋没别人的美名，而忠臣也会为了美名去死。您上次赦免了我，普天之下都称赞您的贤明。今天我是死路一条，请您把您的衣服赐给我，我要刺它几下，算是为智伯报仇，也就死而无憾了。我不敢奢望您能答应我的要求，但也要冒昧说出我的心意。”</p>
<p>襄子听了他这番话，把自己的衣服给了他，豫让拔出宝剑跳起来刺它，说：“我在九泉之下也可以报答智伯了！”说完就伏剑自杀。赵国人听了豫让的死讯无不为他流泪。</p>
<p>读了季子和豫让的故事，不禁感到震撼。其实不光这两人，有很多古人，当读到他们的故事时，就会感到这样的人物事迹只可能在完全理想的情况下发生，而在现实社会中怎么会有呢？现在，有多少人会像季子一样因为“始吾心已许之”而即便跨越生死也不违背自己当初的心愿？有多少人会像豫让一样执着地坚持一件事，哪怕明知道要失败，哪怕要经受巨大的痛苦？“高山仰止，景行行止，虽不能至，心向往之”，我不敢自比古人，只能通过这篇文章来表达他们在我心里引起的共鸣。</p>
<p>话说，和现在相反，在中学时，我对文学极其反感。但每次背诵课文、古文，我总是最快的人，往往读上几遍便能背出来，然后被老师叫起来当在全班同学面前背诵，好不风光。现在我试着把“季札观周乐”背诵下来，尝试了几次就打了退堂鼓。可见，缺少了装逼这个推动力，学习的效率会降低很多。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chunhao.net/jizi-yurang/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>中国历史地图</title>
		<link>http://blog.chunhao.net/history-maps</link>
		<comments>http://blog.chunhao.net/history-maps#comments</comments>
		<pubDate>Tue, 04 Jan 2011 07:19:24 +0000</pubDate>
		<dc:creator>Chunhao</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.chunhao.net/?p=442</guid>
		<description><![CDATA[历史和地理是密不可分的。历史的深沉在于让人在时间的瀚海中感受自己的渺小；地理的壮阔在于让人在空间的辽原里体会沧海一粟。只有把二者结合起来，才能体会到史诗一般的历史，就像昨夜的梦境，引起人无限遐想。 非常感谢kzeng。在他的blog里发现了他整理的中国历史地图。里面的图片大多位于中国地图出版社的BBS，而且都已失效。本人只好一张一张从web archive把图抓下来，然后根据kzeng整理的目录和编例做成了一个单机版的地图集，用简单的HTML做了索引。在此把链接放出来，供有兴趣的朋友研究。 下载：中国历史地图集(.tar.gz  文件大小：486M)]]></description>
			<content:encoded><![CDATA[<p>历史和地理是密不可分的。历史的深沉在于让人在时间的瀚海中感受自己的渺小；地理的壮阔在于让人在空间的辽原里体会沧海一粟。只有把二者结合起来，才能体会到史诗一般的历史，就像昨夜的梦境，引起人无限遐想。</p>
<p>非常感谢<a href="http://kzeng.info/">kzeng</a>。在他的blog里发现了<a href="http://www.kzeng.info/node/21">他整理的中国历史地图</a>。里面的图片大多位于中国地图出版社的BBS，而且都已失效。本人只好一张一张从web archive把图抓下来，然后根据kzeng整理的目录和编例做成了一个单机版的地图集，用简单的HTML做了索引。在此把链接放出来，供有兴趣的朋友研究。</p>
<p>下载：<a href="http://chunhao.net/pub/maps.tar.gz">中国历史地图集</a>(.tar.gz  文件大小：486M)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chunhao.net/history-maps/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一字并肩王</title>
		<link>http://blog.chunhao.net/yizibingjianwang</link>
		<comments>http://blog.chunhao.net/yizibingjianwang#comments</comments>
		<pubDate>Tue, 07 Dec 2010 06:27:46 +0000</pubDate>
		<dc:creator>Chunhao</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.chunhao.net/?p=429</guid>
		<description><![CDATA[看到标题，你会想到谁？在从小耳濡目染的小说、演义中，“一字并肩王”这个封号出现了无数次，尤其是在隋唐演义里。就算对于熟悉隋唐演义故事的人来说，他们心中的“一字并肩王”也不一定相同，因为在不同版本的演义里，获此封号的人都不一样。 在《说唐》里，罗成被王世充封为一字并肩王；在田连元的评书里，程咬金被李密封为一字并肩王；在单田芳的评书里，裴元庆被程咬金封为一字并肩王。而在正史里，从未出现过这个封号。多乱啊。有一出京剧叫《二进宫》，李艳妃抱着幼主皇帝，哭着用二黄腔对徐延昭唱道：“你保太子登龙位，封你一字并肩王”。这个“并”字唱的悠扬婉转，尤为好听。 戏剧和小说一样，都是虚构的，或者说都是意淫出来的。明朝正史里没有徐延昭这个人，倒是有个徐阶，是开国元勋徐达的孙子。隋唐正史有王世充，但没有罗成，他爹罗艺倒确有其人，是个降唐又叛唐的家伙。程咬金和李密都是历史中的人物，裴元庆则是虚构的，原型可能是裴仁基的儿子裴行俨。《北史》记载：“行俨每战，所当皆披靡，号万人敌”，他号称“万人敌”，估计可以匹敌当今的“万人迷”。 程咬金和裴元庆的故事在各版本的隋唐演义里都大致相同：程咬金坐镇瓦岗寨时俘虏了裴元庆一家，娶了他姐姐，封裴元庆“一字并肩王”。由此看来，裴元庆是程咬金的小舅子，凭借和寨主的裙带关系混了一个封号，只是这个“一字并肩王”有名无实，没有封地，没有爵位，甚至裴元庆在瓦岗的地位也不比其他贾柳楼结义的兄弟高。这说明一个问题：小舅子不好当。 虚构的东西总是给人意淫的快感。虽然历史上根本没有“一字并肩王”这个东西，但为了这点快感，我们不妨深入研究一下这个封号。我一开始听到这个封号的时候，总忍不住把它和人的体型外貌联系起来。所以，在我的印象中，裴元庆的左右肩膀连在一起，脖子长在后面，这就是所谓的“一字并肩”。这也很符合一个常识：牛人的身体总有某个部位特别长。比如刘备的胳膊长，“双臂过膝”，关羽胡子长，还有一些某个部位特别长的例子我就不举了，你们懂的。所以，裴元庆肩膀长，而且长到左右相连也就不足为怪了，反正你也没见过裴元庆。 如果本文到此为止，我肯定会被骂“误人子弟”，因为上面用晦涩的语言对“一字并肩王”作的解读是完全错误的。我们不妨把“并肩”两字去掉，先说“一字王”。 没有哪个君主说“朕封你为王”就完事了，还得要说明封国在哪里。比如隋炀帝杨广继位前是晋王，李世民被隋炀帝封为秦王，李元霸是赵王。这里的“晋秦赵”就是封国，只是隋唐开始的王爵的封号只有形式上的意义，隋炀帝当然不会在长安附近划出一块土地封给李世民。 虽然封地没有，诸王的等级不能没有。这就有了“一字王”和“二字王”之分。“一字王”的王号只有一个字，比如秦王李世民，“二字王”的王号有两个字，比如靠山王杨林。那么是一字王更拽还是二字王更牛？我们可以用当今社会的例子说明：佳能的数码单反等级森严：5D &#62; 50D &#62; 500D。看出来了吧，字越少越厉害。同样的道理，一字王的地位也比二字王高。值得注意的是，隋炀帝的叔叔靠山王杨林是个二字王，将来反了他江山的李世民却是个一字王，这说明了隋炀帝宽广的胸襟和任人唯贤的高贵品质，和程咬金形成了鲜明对比。 以上只是用演义的例子说明一字王的意义，其实靠字数区分王位高低的风气是在宋元以后才慢慢形成的，在隋唐还没有这种习惯。两汉之前，封王封侯都有实实在在的封地，王侯可以在自己的封地为所欲为（除了阴谋颠覆祖国政权），所以爵位的封号就是封国的地方。春秋战国就不用说了，什么什么王什么什么公都是一国之君。秦昭王的丞相是应侯范雎，庄襄王的丞相是文信侯吕不韦，一个一字侯，一个二字侯，可见当时并没有靠字数来决定爵位高低。 秦朝没有封王，汉朝却封了很多。汉初三大异姓王：楚王韩信，淮南王英布，梁王彭越都是有封国有兵权显赫一方的王，最终却都难免造反失败，功名尽毁。淮南王后来被转封给刘邦的儿子刘长。汉文帝刘恒也是刘邦庶出的儿子，姥姥不亲，舅舅不爱，被封到边远的山区代国，群臣就是看中代王没什么背景，才把他拉来继位。汉朝的王爵都是纯以封地作王号，也没有通过字数论高低。 汉朝的侯爵也是以封地为名，留侯张良的封地在留城，韩信被贬到淮阴侯，封地就是淮阴。绛侯周勃，户牖侯陈平都是用地名作封号。这时侯爵的等级也不是靠字数决定，而是靠封地的大小决定：县侯，乡侯，亭侯。关羽被汉献帝封为“汉寿亭侯”，“汉寿”是地名，“亭”是行政单位，关羽的爵位相当于现在的村长。诸葛亮被封为“武乡侯”，是乡侯，比关羽高一级，这不能说明刘备大公无私，不给自己兄弟升级，而是因为他要给汉献帝面子。汉朝还有一种侯爵只有封号没有封地，叫作“关内侯”，而有封地的侯通称列侯。关内侯的地位比列侯低，卫青刚发迹的时候就被封为关内侯。曹操更狠，把给部下封侯的封地都设在蜀吴两国的境内。魏国列侯只有名份，没有封地，为了抢回领土，积极作战，终于为司马家族统一奠定了基础。 “一字王”说了这么多，但“并肩”两字很好理解，就是与君主并肩同行，这等荣耀不是一般的王能享受的。李艳妃想封徐延昭为“一字并肩王”，当时皇帝还是幼儿，要“并肩”，其实就是想让徐延昭作保姆，每天抱着皇帝，由此可见女人的险恶用心。 程咬金封裴元庆“一字并肩王”，要和小舅子并肩出行，其实是想让裴元庆给他当贴身保镖。后来裴元庆战死，程咬金转身投奔裴的仇人李元霸的哥哥李世民，享尽半身荣耀。这个故事再次说明一个道理：小舅子不好当。]]></description>
			<content:encoded><![CDATA[<p>看到标题，你会想到谁？在从小耳濡目染的小说、演义中，“一字并肩王”这个封号出现了无数次，尤其是在隋唐演义里。就算对于熟悉隋唐演义故事的人来说，他们心中的“一字并肩王”也不一定相同，因为在不同版本的演义里，获此封号的人都不一样。</p>
<p>在《说唐》里，罗成被王世充封为一字并肩王；在田连元的评书里，程咬金被李密封为一字并肩王；在单田芳的评书里，裴元庆被程咬金封为一字并肩王。而在正史里，从未出现过这个封号。多乱啊。有一出京剧叫《二进宫》，李艳妃抱着幼主皇帝，哭着用二黄腔对徐延昭唱道：“你保太子登龙位，封你一字并肩王”。这个“并”字唱的悠扬婉转，尤为好听。</p>
<p>戏剧和小说一样，都是虚构的，或者说都是意淫出来的。明朝正史里没有徐延昭这个人，倒是有个徐阶，是开国元勋徐达的孙子。隋唐正史有王世充，但没有罗成，他爹罗艺倒确有其人，是个降唐又叛唐的家伙。程咬金和李密都是历史中的人物，裴元庆则是虚构的，原型可能是裴仁基的儿子裴行俨。《北史》记载：“行俨每战，所当皆披靡，号万人敌”，他号称“万人敌”，估计可以匹敌当今的“万人迷”。</p>
<p>程咬金和裴元庆的故事在各版本的隋唐演义里都大致相同：程咬金坐镇瓦岗寨时俘虏了裴元庆一家，娶了他姐姐，封裴元庆“一字并肩王”。由此看来，裴元庆是程咬金的小舅子，凭借和寨主的裙带关系混了一个封号，只是这个“一字并肩王”有名无实，没有封地，没有爵位，甚至裴元庆在瓦岗的地位也不比其他贾柳楼结义的兄弟高。这说明一个问题：小舅子不好当。</p>
<p>虚构的东西总是给人意淫的快感。虽然历史上根本没有“一字并肩王”这个东西，但为了这点快感，我们不妨深入研究一下这个封号。我一开始听到这个封号的时候，总忍不住把它和人的体型外貌联系起来。所以，在我的印象中，裴元庆的左右肩膀连在一起，脖子长在后面，这就是所谓的“一字并肩”。这也很符合一个常识：牛人的身体总有某个部位特别长。比如刘备的胳膊长，“双臂过膝”，关羽胡子长，还有一些某个部位特别长的例子我就不举了，你们懂的。所以，裴元庆肩膀长，而且长到左右相连也就不足为怪了，反正你也没见过裴元庆。</p>
<p>如果本文到此为止，我肯定会被骂“误人子弟”，因为上面用晦涩的语言对“一字并肩王”作的解读是完全错误的。我们不妨把“并肩”两字去掉，先说“一字王”。</p>
<p>没有哪个君主说“朕封你为王”就完事了，还得要说明封国在哪里。比如隋炀帝杨广继位前是晋王，李世民被隋炀帝封为秦王，李元霸是赵王。这里的“晋秦赵”就是封国，只是隋唐开始的王爵的封号只有形式上的意义，隋炀帝当然不会在长安附近划出一块土地封给李世民。</p>
<p>虽然封地没有，诸王的等级不能没有。这就有了“一字王”和“二字王”之分。“一字王”的王号只有一个字，比如秦王李世民，“二字王”的王号有两个字，比如靠山王杨林。那么是一字王更拽还是二字王更牛？我们可以用当今社会的例子说明：佳能的数码单反等级森严：5D &gt; 50D &gt; 500D。看出来了吧，字越少越厉害。同样的道理，一字王的地位也比二字王高。值得注意的是，隋炀帝的叔叔靠山王杨林是个二字王，将来反了他江山的李世民却是个一字王，这说明了隋炀帝宽广的胸襟和任人唯贤的高贵品质，和程咬金形成了鲜明对比。</p>
<p>以上只是用演义的例子说明一字王的意义，其实靠字数区分王位高低的风气是在宋元以后才慢慢形成的，在隋唐还没有这种习惯。两汉之前，封王封侯都有实实在在的封地，王侯可以在自己的封地为所欲为（除了阴谋颠覆祖国政权），所以爵位的封号就是封国的地方。春秋战国就不用说了，什么什么王什么什么公都是一国之君。秦昭王的丞相是应侯范雎，庄襄王的丞相是文信侯吕不韦，一个一字侯，一个二字侯，可见当时并没有靠字数来决定爵位高低。</p>
<p>秦朝没有封王，汉朝却封了很多。汉初三大异姓王：楚王韩信，淮南王英布，梁王彭越都是有封国有兵权显赫一方的王，最终却都难免造反失败，功名尽毁。淮南王后来被转封给刘邦的儿子刘长。汉文帝刘恒也是刘邦庶出的儿子，姥姥不亲，舅舅不爱，被封到边远的山区代国，群臣就是看中代王没什么背景，才把他拉来继位。汉朝的王爵都是纯以封地作王号，也没有通过字数论高低。</p>
<p>汉朝的侯爵也是以封地为名，留侯张良的封地在留城，韩信被贬到淮阴侯，封地就是淮阴。绛侯周勃，户牖侯陈平都是用地名作封号。这时侯爵的等级也不是靠字数决定，而是靠封地的大小决定：县侯，乡侯，亭侯。关羽被汉献帝封为“汉寿亭侯”，“汉寿”是地名，“亭”是行政单位，关羽的爵位相当于现在的村长。诸葛亮被封为“武乡侯”，是乡侯，比关羽高一级，这不能说明刘备大公无私，不给自己兄弟升级，而是因为他要给汉献帝面子。汉朝还有一种侯爵只有封号没有封地，叫作“关内侯”，而有封地的侯通称列侯。关内侯的地位比列侯低，卫青刚发迹的时候就被封为关内侯。曹操更狠，把给部下封侯的封地都设在蜀吴两国的境内。魏国列侯只有名份，没有封地，为了抢回领土，积极作战，终于为司马家族统一奠定了基础。</p>
<p>“一字王”说了这么多，但“并肩”两字很好理解，就是与君主并肩同行，这等荣耀不是一般的王能享受的。李艳妃想封徐延昭为“一字并肩王”，当时皇帝还是幼儿，要“并肩”，其实就是想让徐延昭作保姆，每天抱着皇帝，由此可见女人的险恶用心。</p>
<p>程咬金封裴元庆“一字并肩王”，要和小舅子并肩出行，其实是想让裴元庆给他当贴身保镖。后来裴元庆战死，程咬金转身投奔裴的仇人李元霸的哥哥李世民，享尽半身荣耀。这个故事再次说明一个道理：小舅子不好当。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chunhao.net/yizibingjianwang/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>冯孟起威震西华城</title>
		<link>http://blog.chunhao.net/handsome-comming</link>
		<comments>http://blog.chunhao.net/handsome-comming#comments</comments>
		<pubDate>Thu, 19 Aug 2010 05:24:58 +0000</pubDate>
		<dc:creator>Chunhao</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.chunhao.net/?p=358</guid>
		<description><![CDATA[大帅哥同学人还未到，名声早已传遍西海岸。温西华早已满城风雨，沸沸扬扬。 听到这个消息，没男朋友的女生把美容院、化妆品店挤得爆满；有男朋友的女生立马把男朋友甩掉孑身一人恭迎大帅哥。在温西华，只要提到大帅哥某某的名字，就如同在大街上炸开一个惊雷，男生人人自危，女生心花怒放。 温西华有男婴夜啼，大人训曰：再哭，大帅哥某某马上就来，看你长大还怎么能泡得到妞。男婴闻言满脸惊愕，哭声即止。 有诗为证： 帅骨英名貌潘郎， 人文艺理才难双。 冯虚万顷汪洋渡， 超世绝伦震番邦。]]></description>
			<content:encoded><![CDATA[<p>大帅哥同学人还未到，名声早已传遍西海岸。温西华早已满城风雨，沸沸扬扬。</p>
<p>听到这个消息，没男朋友的女生把美容院、化妆品店挤得爆满；有男朋友的女生立马把男朋友甩掉孑身一人恭迎大帅哥。在温西华，只要提到大帅哥某某的名字，就如同在大街上炸开一个惊雷，男生人人自危，女生心花怒放。</p>
<p>温西华有男婴夜啼，大人训曰：再哭，大帅哥某某马上就来，看你长大还怎么能泡得到妞。男婴闻言满脸惊愕，哭声即止。</p>
<p>有诗为证：</p>
<p>帅骨英名貌潘郎，<br />
人文艺理才难双。<br />
冯虚万顷汪洋渡，<br />
超世绝伦震番邦。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chunhao.net/handsome-comming/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>祖国六十年大庆</title>
		<link>http://blog.chunhao.net/60th-national-day</link>
		<comments>http://blog.chunhao.net/60th-national-day#comments</comments>
		<pubDate>Wed, 30 Sep 2009 21:07:32 +0000</pubDate>
		<dc:creator>Chunhao</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.chunhao.net/?p=196</guid>
		<description><![CDATA[今天是祖国的六十岁华诞，普天之下的炎黄子孙无比振奋，看到祖国如此蓬勃发展，中华民族的伟大复兴指日可待！ 祝伟大的祖国繁荣富强、前程似锦、各项事业蒸蒸日上，早日实现社会主义现代化的宏伟目标！]]></description>
			<content:encoded><![CDATA[<p>今天是祖国的六十岁华诞，普天之下的炎黄子孙无比振奋，看到祖国如此蓬勃发展，中华民族的伟大复兴指日可待！</p>
<p>祝伟大的祖国繁荣富强、前程似锦、各项事业蒸蒸日上，早日实现社会主义现代化的宏伟目标！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chunhao.net/60th-national-day/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何写自动下载脚本</title>
		<link>http://blog.chunhao.net/how-to-write-an-auto-downloading-script</link>
		<comments>http://blog.chunhao.net/how-to-write-an-auto-downloading-script#comments</comments>
		<pubDate>Mon, 23 Feb 2009 16:12:06 +0000</pubDate>
		<dc:creator>Chunhao</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://chunhao.net/blog/?p=59</guid>
		<description><![CDATA[如何写一个自动下载的脚本？ 用Linux有一个很好的地方就是你可以很方便地让计算机为你做体力活。当然，前提是你要了解Linux的思维方式。下面就是一个活生生的例子，大家可以看看用Linux是怎么做事情的。 如果你喜欢听评书，这里是个不错的地方。这个网站有很多评书，还有百家讲坛，甚至有声的金庸小说。上面的东西不光可以在线听，而且都可以免费下载，不用注册。但是，只能一个链接一个链接地下载。例如，如果想下载《大唐惊雷》第1回，就要进入一个页面，然后点下载；要下载第2回，就要进入另一个页面，然后再点下载。这样，就无法批量下载一整部评书了。 如果你用Windows，那么你要么人肉点击这些链接，一个一个地下载（可能有100+回）；要么就用C或者Java写一个程序自动下载，前提是你要懂网络编程的细节。 下面，我就说一说在Linux下如何用Shell写一个自动下载脚本： 首先要做的就是分析链接，这个网站上，包含有《大唐惊雷》从第1回到第100回的链接的页面都是很有规律的： http://www1.5ips.net/down_19_001.htm http://www1.5ips.net/down_19_002.htm &#8230; http://www1.5ips.net/down_19_100.htm 我们需要一个东西能从001递增到100，递增可以用一个for循环解决，但是要输出成001，002这样的就不是很直接。在C语言中，我们可以用printf(“%03d”, n)来解决，在Shell中也一样，可以用printf命令： printf "%03d" $i 此时，包含1-100回链接的页面地址已经生成了，下一步就是要从这些页面中提取出下载链接。如果分析这些页面的源代码，我们可以发现下面代码： 点此下载《大唐惊雷》第001回 我们可以用grep来获得这行。 那么，如何获得里面的下载链接？用sed或者awk也能达到目的，可以我都不会。我用了Python，string有一个split函数，这里按照引号(“)把这行分开，形成一个list，然后提取适当的元素就可以获得下载链接。用同样的方法还可以获得文件名，例如：”单田芳_大唐惊雷_001.mp3&#8243;。 大体的方法就是想法就是这样，下面就是具体的脚本： #!/bin/sh siteurl="http://www1.5ips.net/" prefix="down_192_" startnum=1 endnum=100 for i in `seq $startnum $endnum` do preurl=$siteurl$prefix`printf "%03d" $i`".htm" wget -q -O prehtml $preurl iconv -f GBK -t utf-8 prehtml &#124; grep 点此下载 &#62; down_url_line down_url=`./geturl.py` filename=`./getname.py` echo "Starting [...]]]></description>
			<content:encoded><![CDATA[<p>如何写一个自动下载的脚本？</p>
<p>用Linux有一个很好的地方就是你可以很方便地让计算机为你做体力活。当然，前提是你要了解Linux的思维方式。下面就是一个活生生的例子，大家可以看看用Linux是怎么做事情的。</p>
<p>如果你喜欢听评书，<a href="http://www.5ips.net/">这里</a>是个不错的地方。这个网站有很多评书，还有百家讲坛，甚至有声的金庸小说。上面的东西不光可以在线听，而且都可以免费下载，不用注册。但是，只能一个链接一个链接地下载。例如，如果想下载《大唐惊雷》第1回，就要进入一个页面，然后点下载；要下载第2回，就要进入另一个页面，然后再点下载。这样，就无法批量下载一整部评书了。</p>
<p>如果你用Windows，那么你要么人肉点击这些链接，一个一个地下载（可能有100+回）；要么就用C或者Java写一个程序自动下载，前提是你要懂网络编程的细节。</p>
<p>下面，我就说一说在Linux下如何用Shell写一个自动下载脚本：</p>
<p>首先要做的就是分析链接，这个网站上，包含有《大唐惊雷》从第1回到第100回的链接的页面都是很有规律的：</p>
<blockquote><p>http://www1.5ips.net/down_19_001.htm</p>
<p>http://www1.5ips.net/down_19_002.htm</p>
<p>&#8230;</p>
<p>http://www1.5ips.net/down_19_100.htm</p></blockquote>
<p>我们需要一个东西能从001递增到100，递增可以用一个for循环解决，但是要输出成001，002这样的就不是很直接。在C语言中，我们可以用printf(“%03d”, n)来解决，在Shell中也一样，可以用printf命令：</p>
<pre lang="bash">printf "%03d" $i</pre>
<p>此时，包含1-100回链接的页面地址已经生成了，下一步就是要从这些页面中提取出下载链接。如果分析这些页面的源代码，我们可以发现下面代码：</p>
<pre lang="html">
<li><a href="http://dx23a.52ps.cn/pingshu/单田芳_大唐惊雷/单田芳_大唐惊雷_001.mp3?0000060.191.99.1203tflag=1235403802opin=5d44be8c1fba6271d12369537d33a135&amp;ip=60.191.99.1.mp3"><span style="color: blue;">点此下载《大唐惊雷》第001回</span></a></li>
</pre>
<p>我们可以用grep来获得这行。</p>
<p>那么，如何获得里面的下载链接？用sed或者awk也能达到目的，可以我都不会。我用了Python，string有一个split函数，这里按照引号(“)把这行分开，形成一个list，然后提取适当的元素就可以获得下载链接。用同样的方法还可以获得文件名，例如：”单田芳_大唐惊雷_001.mp3&#8243;。</p>
<p>大体的方法就是想法就是这样，下面就是具体的脚本：</p>
<pre lang="bash">#!/bin/sh

siteurl="http://www1.5ips.net/"
prefix="down_192_"
startnum=1
endnum=100

for i in `seq $startnum $endnum`
do
    preurl=$siteurl$prefix`printf "%03d" $i`".htm"
    wget -q -O prehtml $preurl
    iconv -f GBK -t utf-8 prehtml | grep 点此下载 &gt; down_url_line
    down_url=`./geturl.py`
    filename=`./getname.py`
    echo "Starting downloading $i..."
    echo $down_url
    echo $filename
    wget -O $filename $down_url
    echo "Finish downloading $i"
done</pre>
<pre lang="python">#!/usr/bin/python
# getname.py

r = open("down_url_line").read().split('/')
print r[5].split('?')[0]</pre>
<pre lang="python">#!/usr/bin/python
# geturl.py

r = open("down_url_line").read().split('"')
print r[1]</pre>
<p>运行脚本之后，大约1个小时，整个100回评书就下完了。当然，脚本还有很多改进的余地，比如说通过参数传入评书的名字，然后自动获取链接前缀。</p>
<p>在Linux下解决问题就是这么简单？在Windows下呢？现在了解网络编程，然后打开VS，稀里糊涂写一堆代码，然后再写一个窗口？然后再复杂的跟踪、调试、修改……有兴趣的话你可以试一试。 <img src='http://blog.chunhao.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>需要说明的是，我对Shell脚本和不是很熟，有时for或者while循环的格式都忘了；Python也不懂，我还没用Python写过程序。所有的东西都是现用现学，现用现Google。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chunhao.net/how-to-write-an-auto-downloading-script/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>如何写自动灌水脚本</title>
		<link>http://blog.chunhao.net/how-to-write-a-spamming-robot</link>
		<comments>http://blog.chunhao.net/how-to-write-a-spamming-robot#comments</comments>
		<pubDate>Sun, 28 Dec 2008 15:02:57 +0000</pubDate>
		<dc:creator>Chunhao</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://chunhao86.cn/blog/how-to-write-a-spamming-robot</guid>
		<description><![CDATA[如何写一个灌水机? 摘要：本文介绍了利用Wget在Linux环境中写灌水机的大致方法。 常在论坛灌水的人都想快速而省力地增加自己的帖数，这就是为什么很多人想要一个灌水机的原因。其实，灌水机的作用远不止与此，你可以稍加修改让它可以进行批量操作（例如版主发米）；还可以自动顶帖，让你的帖子常居首页；还可以自动抢沙发……总之，只要是体力活儿，它都可以干。 如果你是Windows的用户，那对不起了，你可以根据本文来研究移植到Windows下的方法，但我通常不会回答任何关于这方面的询问。如果你是Linux用户，那么恭喜你，我们有共同学习研究的机会，我很乐意与你一起研究本文所讲的方法。 下面开始正题： 需要工具： Firefox &#8211;需要插件: Live HTTP headers, Export Cookies(Firefox 3用户需要), Firebug(非必要) Wget：一般Linux默认都会安装的 就这么多，先说一下灌水机的原理。灌水机就是不借助浏览器发送一个包含数据的HTTP请求，从而达到自动发帖的目的。很多人喜欢用Perl写灌水机，因为Perl能很容易地发送HTTP请求。但既然有现成的Wget可以实现发送HTTP请求，为什么还要reinvent the wheel呢? 现看看Wget能干什么：运行wget &#8211;help命令，你将会看到如下部分内容： $wget &#8211;help GNU Wget 1.10.2, a non-interactive network retriever. Usage: wget [OPTION]&#8230; [URL]&#8230; Mandatory arguments to long options are mandatory for short options too. &#8230; HTTP options: &#8211;http-user=USER        set http user to USER. &#8211;http-password=PASS    [...]]]></description>
			<content:encoded><![CDATA[<p>如何写一个<strong>灌水机</strong>?</p>
<p>摘要：本文介绍了利用<a href="http://www.gnu.org/software/wget/"><strong>Wget</strong></a>在Linux环境中写灌水机的大致方法。</p>
<p>常在<strong>论坛</strong>灌水的人都想快速而省力地增加自己的帖数，这就是为什么很多人想要一个灌水机的原因。其实，灌水机的作用远不止与此，你可以稍加修改让它可以进行批量操作（例如版主发米）；还可以自动顶帖，让你的帖子常居首页；还可以自动抢沙发……总之，只要是体力活儿，它都可以干。</p>
<p>如果你是Windows的用户，那对不起了，你可以根据本文来研究移植到Windows下的方法，但我通常不会回答任何关于这方面的询问。如果你是Linux用户，那么恭喜你，我们有共同学习研究的机会，我很乐意与你一起研究本文所讲的方法。</p>
<p>下面开始正题：</p>
<p>需要工具：</p>
<p><a href="http://www.mozilla.com/en-US/firefox/">Firefox</a></p>
<p>&#8211;需要插件: <a href="https://addons.mozilla.org/en-US/firefox/addon/3829">Live HTTP headers</a>, <a href="https://addons.mozilla.org/en-US/firefox/addon/8154">Export Cookies</a>(Firefox 3用户需要), <a href="https://addons.mozilla.org/en-US/firefox/addon/1843">Firebug</a>(非必要)</p>
<p>Wget：一般Linux默认都会安装的</p>
<p>就这么多，先说一下灌水机的原理。灌水机就是不借助浏览器发送一个包含数据的HTTP请求，从而达到自动发帖的目的。很多人喜欢用Perl写灌水机，因为Perl能很容易地发送HTTP请求。但既然有现成的Wget可以实现发送HTTP请求，为什么还要<a href="http://en.wikipedia.org/wiki/Reinventing_the_wheel">reinvent the wheel</a>呢?</p>
<p>现看看Wget能干什么：运行wget &#8211;help命令，你将会看到如下部分内容：</p>
<blockquote><p>$wget &#8211;help<br />
GNU Wget 1.10.2, a non-interactive network retriever.<br />
Usage: wget [OPTION]&#8230; [URL]&#8230;</p>
<p>Mandatory arguments to long options are mandatory for short options too.</p>
<p>&#8230;</p>
<p>HTTP options:<br />
&#8211;http-user=USER        set http user to USER.<br />
&#8211;http-password=PASS    set http password to PASS.<br />
&#8211;no-cache              disallow server-cached data.<br />
-E,  &#8211;html-extension        save HTML documents with `.html&#8217; extension.<br />
&#8211;ignore-length         ignore `Content-Length&#8217; header field.<br />
&#8211;header=STRING         insert STRING among the headers.<br />
&#8211;proxy-user=USER       set USER as proxy username.<br />
&#8211;proxy-password=PASS   set PASS as proxy password.<br />
<span style="color: #ff0000;">&#8211;referer=URL           include `Referer: URL&#8217; header in HTTP request.</span><br />
&#8211;save-headers          save the HTTP headers to file.<br />
-U,  &#8211;user-agent=AGENT      identify as AGENT instead of Wget/VERSION.<br />
&#8211;no-http-keep-alive    disable HTTP keep-alive (persistent connections).<br />
&#8211;no-cookies            don&#8217;t use cookies.<br />
<span style="color: #ff0000;">&#8211;load-cookies=FILE     load cookies from FILE before session.</span><br />
&#8211;save-cookies=FILE     save cookies to FILE after session.<br />
&#8211;keep-session-cookies  load and save session (non-permanent) cookies.<br />
<span style="color: #ff0000;">&#8211;post-data=STRING      use the POST method; send STRING as the data.</span><br />
&#8211;post-file=FILE        use the POST method; send contents of FILE.</p>
<p>&#8230;</p></blockquote>
<p>是不是第一次发现Wget竟然是这么复杂？别紧张，它一点都不复杂，这么多参数说明它功能极其丰富。用红色标出的就是我们可能要用到的参数。</p>
<p>&#8211;load-cookie=FILE就是读cookie文件，因为服务器是通过cookie来保持你的会话，所以我们要读取一个cookie文件来造成已经登录的假像。这里的FILE就是要读取的cookie文件，我们可以现用浏览器登录论坛，这样，我们的登录信息就保存在本地的cookie文件了，这个文件就可以拿来被Wget使用了。Firefox 2用户可以在~/.mozilla/firefox/ 下的一个文件夹中找到cookies.txt文件。把它拷贝到灌水机工作的目录就行了。Firefox 3的用户会发现这个目录下没有cookies.txt文件，这是因为Firefox 3不再用文本保存cookie了，而是用一个数据库来保存。这时，我们需要插件Export Cookies来导出cookie.txt文件。</p>
<p>这样，我们就可以使用参数：</p>
<blockquote><p>&#8211;load-cookie=cookies.txt</p></blockquote>
<p>&#8211;post-data=STRING就是发送HTTP请求了，STRING就是要发送的请求，里面同常包括帖子的数据。我怎么知道该发送什么请求？这就需要Firefox的插件Live HTTP headers了，它可以捕获Firefox发送的请求。所以，我们要打开Live HTTP headers，用Firefox发一个帖子，然后就会看到Live HTTP headers把请求捕获了。找到发帖子时的请求，看到如下内容：</p>
<blockquote><p><span style="color: #0000ff;">Referer: http://xxxx/xxxx?xxxx=xxxx</span></p></blockquote>
<p>以及</p>
<blockquote><p>Content-Length: xxx</p></blockquote>
<blockquote><p><span style="color: #ff0000;">xxx=xxx&amp;xxx=xxx&amp;xxx=xxx&amp;xxx=xxx</span></p></blockquote>
<p>以及这条请求的地址：</p>
<blockquote><p><span style="color: #993300;">http://xxxx/xxxx?xxxx=xxxx&amp;xxxx=xxxx </span></p></blockquote>
<p>用红色标记的就是请求的内容。这样，我们就可以使用参数：</p>
<blockquote><p>&#8211;post-data=”<span style="color: #ff0000;">xxx=xxx&amp;xxx=xxx&amp;xxx=xxx&amp;xxx=xxx<span style="color: #000000;">“</span></span></p></blockquote>
<p>一般来说，这些已经够了。然而有些网站（比如cc98）为了防止用灌水机，采取了一些措施。例如检查请求的来源，如发现来源不是本站的请求一律报错。当然，这也难不倒万能的Wget，这次，我们用上了&#8211;referer=URL来假冒请求来源。这个URL也会出现在Live HTTP headers抓来的包中，我用蓝色标明了。</p>
<p>这样，就有这个参数：</p>
<blockquote><p>&#8211;referer=”<span style="color: #0000ff;">http://xxxx/xxxx?xxxx=xxxx</span>“</p></blockquote>
<p>最后，我们把这几个参数组合在一起，构成一个命令：</p>
<blockquote><p>wget  &#8211;load-cookie=cookies.txt &#8211;referer=”<span style="color: #0000ff;">http://xxxx/xxxx?xxxx=xxxx </span>“&#8211;post-data=”<span style="color: #ff0000;">xxx=xxx&amp;xxx=xxx&amp;xxx=xxx&amp;xxx=xxx</span>” &#8216;<span style="color: #993300;">http://xxxx/xxxx?xxxx=xxxx&amp;xxxx=xxxx</span></p></blockquote>
<p>注意：这是一条命令，中间没有换行。是不是很长的一条命令？在实际中，&#8211;post-data里面的内容会更长。因此这个命令还可能更长。</p>
<p>然后测试一下，用浏览器打开下载的文件，看看是不是发帖成功的页面？在上论坛看看，是不是已经发了一帖？如果是的话，恭喜你，你已经学会了如果写灌水机了。如果没成功也不要灰心，慢慢调试，仔细看看是不是什么地方写错了。</p>
<p>以上就是写灌水机的大致方法，这只是完成了一个核心内容。剩下的事情就变得简单了，你可以写一个Shell脚本来控制这个命令。当然，要写一个成熟的灌水机，还有很多需要作的，比如说提供一个友好的用户接口，可以自定义要发帖的版面、帖子、标题、内容等，而不用再改代码。甚至可以做的更完善，比如选择功能：灌水、编辑、抢沙发、发米等等。所说的这些，都可以用一个Shell脚本很好地实现，而不用写复杂的程序。如果你写好了一个，别忘了发我一份哦。</p>
<p>不用担心可行性，因为Wget是很强大的，它足够模拟一个浏览器的行为。不论论坛的维护者采取了多么复杂的防灌水机的措施（验证码除外，但这也极大的降低了用户体验），都是徒劳的。只要能用浏览器发帖，就能用Wget写出灌水机。提到Wget，当然少不了提到另一个同样强大的<a href="http://curl.haxx.se/">Curl</a>。他们两个不分伯仲，所以，你也完全可以用Curl写出一个灌水机。 我对Curl不是很熟悉，就不展开介绍了。有兴趣的话可以试试它。</p>
<p>Linux还有很多强大而好玩的东西，只要用心，是不难发现它们的。在Linux的世界里，事情总是比你想象的简单很多。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chunhao.net/how-to-write-a-spamming-robot/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>命令与征服</title>
		<link>http://blog.chunhao.net/command-conquer</link>
		<comments>http://blog.chunhao.net/command-conquer#comments</comments>
		<pubDate>Fri, 12 Sep 2008 16:19:42 +0000</pubDate>
		<dc:creator>Chunhao</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://chunhao86.cn/blog/command-conquer</guid>
		<description><![CDATA[首先，这篇日志和技术有关，应该用英文写的，但里面夹杂了一些中文的元素，就写成中文了。 这个题目，作为游戏的名字就是“命令与征服”，作为Full Circle中文杂志的一个栏目名，就是“决胜命令行”。 人们总在做关于图形界面与命令行的争论，其实，二者各有优缺点。图形界面总能给人一种直观的感受，在一定程度上提高工作效率。但是，任何事都有它的局限性。如果画一个圆，里面的空间代表图形界面所擅长的工作，那么，这个圆环外面的整个空间都应该属于命令行！ 命令行也有它的局限性，用手敲命令的时间有时并不一定比把鼠标移到某个菜单并点一下快。而且，尤其是对于非英语国家的人来说，了解那么多的命令和参数并不是一件容易的事情，尽管man命令可以帮助我们很多。 命令行的一个杀手应用就是批处理。如果你需要对几十个，甚至几百个文件进行类似的操作，摆在你面前的有三条路：1. 等专门的软件被写出来。2. 自己纯手工对这几百个文件处理。3.动手写个脚本。 在Linux世界，如果你要完成一项工作，有三条法则： 如果有现成的软件，使用它。 如果需要使用几个软件来完成，用管道或其他东西把他们连接起来。 否则，自己写程序完成它。 使用命令行，使用脚本，应该是介于第二条和第三条之间。脚本是用于把几个程序连接起来的工具，当然，也算是自己写的一个程序。 在批处理中，我们可以通过脚本，通过定义的一些变量，甚至一些循环、判断语句来很轻松地完成工作。当然，这一些的基础就是命令行，脚本很难通过图形界面和其他程序交互。当然，也有一些在命令行中生成GUI的工具，例如zenity。 大概半年前，我做史记的电子书。其中，一个文件夹下的文件是这样的： 001.txt 002.txt 003.txt ... 130.txt 文件的开头是这样的： 史记 史记卷一　五帝本纪　第一 *集解凡是徐氏义，称徐姓名以别之。余者悉是骃注解，并集觽家义。索隐纪者，记 也。本其事而记之，故曰本纪。又纪，理也，丝缕有纪。而帝王书称纪者，言为后代纲 &#8230; 我要作的就是把每个文件的文件名都改成这样的： 1_卷一五帝本纪第一.txt 在社区牛人们的帮助下，最终写出了如下脚本： #!/bin/sh for i in *.txt; do f=${i%.*} t=`head -n 2 $i &#124; tail -n 1 &#124; awk '{print substr($1,3,length($1)-1)}'` cp $i ./tt/$f$t.txt echo $i done 当然，这是是个初步的脚本，以后还设计到全角半角空格的问题，文件编码等问题，就都不难解决了。 [...]]]></description>
			<content:encoded><![CDATA[<p>首先，这篇日志和技术有关，应该用英文写的，但里面夹杂了一些中文的元素，就写成中文了。</p>
<p>这个题目，作为游戏的名字就是“命令与征服”，作为<a href="http://sites.google.com/site/fullcirclezh/">Full Circle中文</a>杂志的一个栏目名，就是“决胜命令行”。</p>
<p>人们总在做关于图形界面与命令行的争论，其实，二者各有优缺点。图形界面总能给人一种直观的感受，在一定程度上提高工作效率。但是，任何事都有它的局限性。如果画一个圆，里面的空间代表图形界面所擅长的工作，那么，这个圆环外面的整个空间都应该属于命令行！</p>
<p>命令行也有它的局限性，用手敲命令的时间有时并不一定比把鼠标移到某个菜单并点一下快。而且，尤其是对于非英语国家的人来说，了解那么多的命令和参数并不是一件容易的事情，尽管<a href="http://en.wikipedia.org/wiki/Manual_page_(Unix)">man命令</a>可以帮助我们很多。</p>
<p>命令行的一个杀手应用就是批处理。如果你需要对几十个，甚至几百个文件进行类似的操作，摆在你面前的有三条路：1. 等专门的软件被写出来。2. 自己纯手工对这几百个文件处理。3.动手写个脚本。</p>
<p>在Linux世界，如果你要完成一项工作，有三条法则：</p>
<ol>
<li>如果有现成的软件，使用它。</li>
<li>如果需要使用几个软件来完成，用<a href="http://en.wikipedia.org/wiki/Manual_page_(Unix)">管道</a>或其他东西把他们连接起来。</li>
<li>否则，自己写程序完成它。</li>
</ol>
<p>使用命令行，使用脚本，应该是介于第二条和第三条之间。脚本是用于把几个程序连接起来的工具，当然，也算是自己写的一个程序。</p>
<p>在批处理中，我们可以通过脚本，通过定义的一些变量，甚至一些循环、判断语句来很轻松地完成工作。当然，这一些的基础就是命令行，脚本很难通过图形界面和其他程序交互。当然，也有一些在命令行中生成GUI的工具，例如<a href="http://live.gnome.org/Zenity">zenity</a>。</p>
<p>大概半年前，我做史记的电子书。其中，一个文件夹下的文件是这样的：</p>
<blockquote>
<pre>001.txt

002.txt

003.txt

...

130.txt</pre>
</blockquote>
<p>文件的开头是这样的：</p>
<blockquote><p>史记<br />
史记卷一　五帝本纪　第一</p>
<p>*集解凡是徐氏义，称徐姓名以别之。余者悉是骃注解，并集觽家义。索隐纪者，记<br />
也。本其事而记之，故曰本纪。又纪，理也，丝缕有纪。而帝王书称纪者，言为后代纲<br />
&#8230;</p></blockquote>
<p>我要作的就是把每个文件的文件名都改成这样的：</p>
<blockquote><p>1_卷一五帝本纪第一.txt</p></blockquote>
<p>在<a href="http://forum.ubuntu.org.cn">社区</a>牛人们的帮助下，最终写出了如下脚本：</p>
<pre lang="bash">#!/bin/sh

for i in *.txt; do
  f=${i%.*}
  t=`head -n 2 $i | tail -n 1 | awk '{print substr($1,3,length($1)-1)}'`
  cp $i ./tt/$f$t.txt
  echo $i
done</pre>
<p>当然，这是是个初步的脚本，以后还设计到全角半角空格的问题，文件编码等问题，就都不难解决了。</p>
<p>本人对相声很感兴趣，发现学院一个教授<a href="http://10.214.47.99/">楼学庆</a>的网页（校外可能无法访问）有几百段相声。就索性都抓下来了。但他的文件名都是1.wma 2.wma 3.wma之类的，很难知道那个文件是那段。于是索性把他的网页也抓下来了。每次先打开那个网页，然后选相应的相声听。</p>
<p>但这样太烦了，我总是想用<a href="http://www.gnome.org/projects/rhythmbox/">Rhythmbox</a>来管理我的音乐，这样就可以很好的利用艺术家和专辑来分类了。要做到这一点就意味着：1. 我必须把所有的wma转化成mp3，这样方便放到Mp3播放器上。2.必须把所有的“1.wma”都改成”八大改行(郭德纲\张文顺).mp3&#8243;这样的名字。3.必须对每个文件都加上tag。顺便说一点，一共有331个文件。</p>
<p>整个方法我构思了很久，格式转换我是借助了一个叫<a href="http://packages.ubuntu.com/gutsy/nautilus-script-audio-convert">convertAudioFile</a>的脚本。用到了mplayer和lame。加标签是用到了id3tag。</p>
<p>改文件名比较复杂，段子的名字和艺术家都在html文件里放着，我必须要根据原来的文件名从html中找到段子的名称和艺术家，然后再改名字。从html中分析我用到了<a href="http://python.org/">Python</a>，因为python有很好的分析html的库。我不会python，也只能现学现用。当时找了一个用python分析html的例子（现在怎么也找不到链接了，抱歉），就在上面改了改。居然能用了：</p>
<pre lang="python">#!/usr/bin/python
# coding=utf-8

import sys
import urllib
import HTMLParser
import re

if len(sys.argv) &lt; 3:
    print 'options: [-n/-a] filename\n';
    quit();

for i in sys.argv[1:]:
    if i == '-n':
        outputContent = 2;
    elif i == '-a':
        outputContent = 3;
    elif i == sys.argv[2]:
        inputFileName = i;
    else:
        print 'invalid option';
        quit();

class CustomParser(HTMLParser.HTMLParser):
    selected = ('table', 'h1', 'font', 'ul', 'li', 'tr', 'td', 'a')

    def reset(self):
        HTMLParser.HTMLParser.reset(self)
        self._level_stack = []
    def handle_starttag(self, tag, attrs):
        if tag in CustomParser.selected:
            self._level_stack.append(tag)
        if "/".join(self._level_stack) == 'table/tr/td/a':
            global fileName;
            fileName = attrs[0][1];
    def handle_endtag(self, tag):
        if self._level_stack \
        and tag in CustomParser.selected \
        and tag == self._level_stack[-1]:
            self._level_stack.pop()
    def handle_data(self, data):
        if "/".join(self._level_stack) == 'table/tr/td/a':
            if outputContent == 2 and inputFileName == fileName:
                print  data.lstrip('1234567890').replace('/', '\\').encode('utf-8');
            p = re.compile(u'\(.*\)');
            m = p.search(data);
            if m and outputContent == 3 and inputFileName == fileName:
                print m.group().strip('\(\)').replace(u'、', '\\').replace('/', '\\').encode('utf-8');

content = unicode(urllib.urlopen('project/index.html', None).read(), 'utf8')

parser = CustomParser()
parser.feed(content)
parser.close()</pre>
<p>网页的一部分是这样的：</p>
<blockquote>
<pre>&lt;tr&gt;&lt;td&gt;&lt;a href="xiangsheng/1.wma"&gt;1八大改行(郭德纲/张文顺)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="xiangsheng/2.wma"&gt;2论50年相声之现状(郭德纲/张文顺)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="xiangsheng/3.wma"&gt;3大保镖(郭德纲/于谦)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="xiangsheng/4.wma"&gt;4寿比南山(郭德纲/于谦)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="xiangsheng/5.wma"&gt;5八猫图(郭德纲/于谦)&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;</pre>
</blockquote>
<p>下面是脚本：</p>
<pre lang="bash">#!/bin/sh

num=`ls -l xiangsheng | wc -l`
cnt=1

for wma_file in xiangsheng/*; do
    if [ -f $wma_file ]; then
        echo $cnt/$num
        wma_artist=`./project/parser.py -a $wma_file`
        wma_name=`./project/parser.py -n $wma_file`
        wma_base_name=`basename $wma_file`
        temp_file="temp/"`echo "$wma_base_name" | sed 's/\.\w*$/'.wav'/'`
        out_temp_file="output/"`echo "$wma_base_name" | sed 's/\.\w*$/'.mp3'/'`
        out_file="output/$wma_name"".mp3"

        mplayer -ao pcm:file="$temp_file" "$wma_file"
        lame -m auto --preset phone "$temp_file" "$out_temp_file"
        mv "$out_temp_file" "$out_file"
        id3tag -a"$wma_artist" -s"$wma_name" "$out_file"
        rm "$temp_file"
    fi
    cnt=`expr $cnt + 1`
    echo "\n##############################################3\n"
done</pre>
<p>写得丑陋了点，也没有注释。大牛对此当然是不以为意了。</p>
<p>运行脚本，然后过了2个多小时，所有的转换都搞定了。慢慢欣赏相声&#8230;</p>
<p>另：今天晚上收到宋波的短信，他今天就要远赴阿尔及利亚去支援第三世界人民建设了。想起我们以前经常在一起说笑打闹，现在突然有最少7年见不到了，感觉有点凄凉。祝他在遥远的阿拉伯国家一切顺利，生活安逸！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chunhao.net/command-conquer/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

