Showing posts with label 推荐. Show all posts
Showing posts with label 推荐. Show all posts

Saturday, July 21, 2007

Bohemia Rhapsody

伟大的波西米亚狂想曲 by Queen.王菲也唱过。
一直不知道这首歌的含义,今天百度了一下,各有个说法啊……做个自己认为比较有道理的备份。

先介绍一下皇后乐队:

皇后乐队是20世纪70年代风靡流行乐坛的著名乐队。乐队的主要成员有主唱键盘手佛莱迪·摩克瑞(Freddie Mercury),吉它手布兰恩·梅(Brain May),鼓手罗杰·泰勒(Roger Taylor)和贝斯手约翰· 迪肯(John Deacon)。皇后乐队是流行歌坛中少有的学识涵养较高的团体,因为除了主唱佛莱迪外,其他3个成员都拥有学士学位。上世纪70年代,英国的重金属乐队往往给人不修边幅的落魄印象,但同样打着重金属旗号的“皇后”乐队,则在其着装和举止等方面显示出一派贵族气质。他们打扮雍容华贵,艳丽夺目,大有皇家艺术气质。

其中长达六分钟的《波西米亚狂想曲》(Bohemian Rhapsody)不仅蝉连英国排行榜榜首达九周之久,而且在不少西方国家的排行榜上也名列首位,这首歌在摇滚史上更被称作“摇滚歌剧”。后来在伦敦的多米尼奥剧院,《吉尼斯世界记录大全》一书宣布了“英国热门单曲”的前十名得主,名列榜首的就是皇后乐队的这首经典之作《波西米亚狂想曲》,当时的评论说这首歌曲在悠扬中蕴涵无尽伤痛的情绪,充分体现了乐队唯美精致的乐风。


很少有乐队能象QUEEN那样彻底地体现70年代世界摇滚舞台的丰富多采。QUEEN就象一个综艺大厅一样,完美将华丽摇滚,前卫摇滚,古典音乐及重金属熔为一炉。这个来自英国由迷幻硬摇滚乐队SMILE演变而来的四人乐队致力于发掘华丽和夸张(并带有同性恋倾向)的艺术风格,创造出一种带有浓厚歌剧色彩的摇滚乐形式,主唱Freddie Mercury性感而如同唱诗班的嗓音,四人完美的假声合音,层层铺垫的键盘和绚烂花哨的吉他solo是他们的标志。

A Night At The Opera(歌剧院之夜)是QUEEN乐队最为经典的专辑,乐队为这张专辑的制作耗费了巨大的精力,有报道称这是摇滚乐史上制作费用最高的一张专辑。其中著名的单曲也就是我今天推荐的这首Bohemian Rhapsody (波西米亚狂想曲)成了QUEEN的招牌曲目,在酷似歌剧唱诗般的华丽配乐中不断加入大段的重金属吉他riff和solo,这正是QUEEN的典型风格。这首单曲在英国排行榜上迅速升到冠军的位置,并且在这个位置上停留了足有9个星期,并最终打破了英国单曲排行榜上冠军停留时间最长的记录。在美国,这首歌和整张专辑也获得了巨大的成功,进入了排行榜前10位并同时成为白金单曲和白金专辑。甚至在十多年后的1992年,这首Bohemian Rhapsody还在美国单曲排行榜上获得过数周的亚军成绩。

值得一提的是,由于主唱Freddie Mercury是一个彻底的同性恋者,1991年,关于Freddie Mercury身体状况的谣言也是漫天乱飞,在11月22日,他终于向外界证实,他染上了爱滋病。两天后,Freddie去世了。Freddie死后,乐队成员保持了一段时间的沉寂,三名成员在1994年还是重新聚到一起共同录制合成Freddie的遗作,这些歌的主唱部分都是Freddie在病床上录制完成的。1995年,这张名为Made In Heaven(天堂制造)的专辑得以发行,由于它特殊的纪念意义,这张专辑在全球范围尤其是欧洲引起了抢购狂潮,毋庸质疑,这已经是QUEEN的最后一张录音室作品了。Freddie Mercury虽然是个同性恋者,但这并不妨碍由于对华丽摇滚做出的伟大创新和贡献而受到世界无数摇滚迷的尊敬。


好了,下面是百度知道吧copy出来的内容:
呵呵,你的这个问题是全世界成千上万的queen迷们都在讨论的问题。用freddie自己的话说, 这只是一堆押韵的字儿。并没有什么中心思想。

但是,并不排除这是freddie随口对采访者的敷衍。所以我个人的理解为下(纯个人理解,说的不好别骂我)

这首歌讲的是一个可怜的小男孩杀了个人,然后向他妈妈供认罪行。

此歌的四种不同的风格代表了他杀完人后的遭遇。
第一个是关于他刚杀完人(很有可能是误杀),自己受到了很大的冲击(Is this the real life ,Is this just fantasy ...),最不幸的是他被逮到了(Caught in a landslide,No escape from reality)。

第二部分是讲他向他妈妈交待罪行(Mama, just killed a man,这里只是省略了个I,并不是他妈妈杀了人。这一点可以从下面的“pulled my triger”而不是put her triger 看得出来)。这个可怜的小男孩虽然对他妈妈依依不舍,可是仍然鼓励他妈妈要继续努力活下去(carry on, carry on...)。然后,他因为某些原因(有很多可能的原因,不细举了)自杀了。并且感到十分悔恨(I sometimes wish I'd never been born at all)。

第三部分,讲的是死了以后他在接受天堂和地狱的审判。天堂和地狱在决定该把他送到哪边。这里有几个名词,bissmilla是个感叹语,意思是:啊,真主!也就是类似于上帝一类的角色。Beelzebub是堕落的天使或者恶魔的意思。而且看似(听似?)斗争还蛮激烈的。但是很不幸,被拉入地狱了。

第四部分,首先,这部分是用金属的手法来渲染的。表达了一种愤怒的情绪。他问恶魔“So you think you can stone me and spit in my eye”,他又问上帝“So you think you can love me and leave me to die ”然后,他似乎向上帝要求再给他一次机会(纯属臆断),不过上帝似乎回绝了,因此,歌曲又回到了最开始那种悲伤而绝望的“nothing really matters”。

另外,里面那些比较奇怪的名字,并不是凭空编造的,Scaramouche是胆小鬼的意思。 Fandango 是一种四三排的西班牙舞蹈。

再补充一下,这首歌和AIDS绝对没有半点关系!这首歌是1975年的,那时候FREDDIE怎么会知道他在十几年后会得AIDS??

再再补充一下,rhapsody是狂想曲的意思。其中文名字因为波西米亚狂想曲。进行曲英文为MARCH。

打字很辛苦,尤其是这么多,如果你要选我的话,拜托多加点悬赏分数,好歹没有功劳也有苦劳么!

SARSRAS原创,如有雷同,纯属别人粘贴复制我的!!

Saturday, June 23, 2007

我对学校教学教务等方面下达通知的一点想法

声明:以下内容纯属个人意见,如若打算继续阅读,表示您已接受下列条款:
1. 回复中不出现挑衅性字眼,不辱骂他人;
2. 粗言秽语是被禁止的;
3. 喜欢针对作者,认为作者是sb的,请勿继续阅读;
4. 大牛请移步,不要浪费您宝贵的时间在我幼稚的文章上。

-------------------------------------------------------------------------------------------------------------------------------------


今天在跟某大牛聊天时,说起通知下放的问题。我们的一致意见是,级级下放的通知会导致信息与重视程度的下降。
到了晚上,又听说了原来不久前有IBM奖学金的申请事宜等。我可郁闷了,自己一点风都没收到。一问才知道原来只是在QQ的班群上发了通知。
认识我的都知道,本人于2007年春季学期有幸参与了中山大学与香港科技大学交流的项目,在那边学习了一个学期。而在那边我还没见过有人用QQ。
本来我就对QQ没什么瘾,这一去就几乎没有登陆过了。这下可好,几乎所有重要的通知我都miss了。
回想起自己申请去科大的时候,也是无意中在班群上看到了通知才知道的(我不常登录QQ)。本来2006秋季就有一次机会的,但是那时我也是完全不知道有这回事。

个人感觉,用QQ来传达通知,实在太儿戏,简直就是一个笑话——如果世界上没有tencent这间公司,怎么办?
再说,使用QQ的群功能,我就从来没试过自己离线的时候能收到完整的对话记录——我总不可能一天24小时挂在那等通知吧?
口头通知的话,对于一个班这种比较小的集体还好办,但是假如是全校性通知呢?

于是我想,对于教学、教务通知,我们是不是可以做得更好一点,而不是依赖一个商业软件?

1. rss feed
对于rss feed,大家应该都不陌生。我想,在信息爆炸的今天,谁也不想浪费时间去自己逐个网页打开去检查有没有新的事件、通知;谁也不想把自己的时间浪费在中国特色的网速上,打开网页,并通过层层链接才找到自己所需信息;谁也不想强迫自己花时间去适应各个不同website的look & feel以及style,底色、字体、字号、布局等。rss feed从一定程度上解决了这类问题。可以利用它来构建iyge可定制的、风格同意的人机接口,让自己可以从容地进行有选择的阅读。于我而言,一个很小很简单的功能,就是在feed列表上显示一个feed有没有,有多少篇新文章。这样,我们就不用等待漫长的网页打开时间,却发出“oh...又没新通知”之类的抱怨了。

这里并不是推广这项技术。事实上,随着web2.0时代的到来,网站提供rss feed已经是一种趋势。那么,我们是不是也可以尝试一下呢?在科大有一门embedded sytem的课(在此致谢梅伯乐博士(Dr. Muppala),虽然没上过他的课,但是短短一小时的谈话了解到了他在计算机科学教学方面所做的一些尝试与创新),就有专门发布重要信息的feed,如考试通知、停课通知等。学生可以利用他喜爱的rss阅读器订阅内容,从而免去了逐个打开course的website来检查有无新通知之苦。(对于科大的 CS,每门课程均需维护一个website以供学生查看通知、资料等。如果选的课多了,每天要检查那么多个website也是一件很浪费时间的事)。

其实对于我们班级,也有不小的创新。这个学期我们班级有了自己的blog,作为信息发布平台,专门用于发布公示、实习通知、优秀讲座等。而现在绝大多数的 blog系统都提供rss feed的自动生成。这样我们就可以通过订阅他来达到快速检索的目的了。然而有所不足的是更新速度慢,资源少,也许这跟班干人数及力量有限,没有那么多课余时间来维护有关。

2. mailing list
似乎现在还没听说过在教学教务上使用到1中的方法,但mailing list的方法,却是一早就有了,并且到今天也还是长盛不衰。就拿科大来说,学校内所有事务,均是通过一个与学生帐户绑定的邮箱来进行通知的。我收得最多的邮件,包括电影播放通知(隔三差五就有老师组织观看电影,并进行讨论)、就业指导中心开展的企业宣讲会和就业指南讲座,以及各门课程作业、 project提交的通知。这有效地保障了个人的知情权。使用分级的方法,可以免去“收信人地狱”。如,发给staff的邮件可以定制一个staff list;发给全体本科生的邮件,可以用UG list。本科生分年级的话,又可以用UG1~UG4来分别表示。继续下去又可细分为UG2-CS-04-B。每个list之间的内容也是可以交叉的,如 jacky这个人属于UG3,但同时他也是校篮球队的一员,因此在basketball这个list里也有他的邮件。

我想,这也许就能解决之前所说的通知逐级下放而引发的信息与重视度流逝的问题了吧。负责人直接通过list发送mail到个体单位,则可有效地解决A->B->C...->Z->entity的过程中可能出现的误解/偏差。
(不难理解这种情况:当entity有问题想咨询时,会引起一个逐级向上的问题链。也许到第i个人时,他会认为,“oh!This question,naive,too simple!”,就自作主张地解答了,殊不知很可能自己造成了曲解。如果说为了万无一失而由最终的负责人来解释的话,为何不直接与负责人打交道呢?人力物力都可以节省许多了。

这个方法,应用到教学中也是很有帮助的。虽然不是每个course的website都有rss feed,但是重要的通知,还是会通过mail list来进行信息传达的。如comp341(一门课程的代号)的一个mail list是comp341stu,就代表所有选了这个课程的学生。

另外,也可采用邮件订阅的方法,来完成类似rss feed的功能。

两种方法的不足:
rss feed:
1.像QQ一样,也需要一个client。但现今大多数的rss reader都是功能单一、免费的。采取pull的方式,需要主动获取信息。
2.如果不是自己维护feed,而是采用一些service provider,如feed burner的服务,则有可能造成滞后,即unsynchronized

mail list"
1.需要学校提供server,并投入人力物力(但事实上,这已经解决了——我们每人都有my SYSU mail)
2.要养成勤check mail的习惯
3.添加附件一次性不能超过极限(但一般通知不可能有那么大附件,有大附件可以考虑给链接)
4.quota problem。学校用的邮箱,20M-100M属于正常幅度,如果纯文本信息,则不必太过担心。但附件一多,也是会用完的。
(一个解决方法:利用forward功能,forward到一些大的个人邮箱,如163等。也可利用gmail等的POP3 fetch功能,主动到各邮箱内取出邮件)


前景与展望:
对于技术因素,上述两方法都不成问题。
更难的是人的因素,毕竟现在应该很多人都不愿接受和尝试新事务。要所有人都学会使用上述工具,似乎是mission impossible。
而且事物都是两面的,也许两方法我觉得好,但是在他人眼中只是bullshit。
但不管怎么说,在信息爆炸的今天,如何有效、迅速地过滤与自己无关的垃圾信息,并于短时间内汲取所需信息,进行多快好省地有目的有效率地阅读,一直是我追求以及感兴趣的目标。

-------------------------------------------------------------------------------------------------------------------------------------

以上纯属个人一点不成熟的想法,欢迎讨论与赐教。

Thursday, June 21, 2007

[八卦故事]内核头文件传奇

做 LFS 是不是很累了?OK,让我先来讲一段八卦故事,放松放松神经,然后再继续冒险吧。。。

在 Linux 2.2/2.4 的纯真年代,内核头文件一直保持着 Unix 世界的"KISS"传统,只需将内核源码树中的头文件直接复制到 /usr/include 中即可使用,一切都是那么 Simple and Stupid ...

但是随着 2.6 系列内核的发布,事情开始变得混乱和复杂起来。首先是内核开发者宣布强烈反对直接使用"未净化"的"原始"内核头文件,他们建议使用发行版提供的"经过净化的"内核头文件。于是各种发行版开始"八仙过海,各显神通",由于"净化"方法各不相同,结果就是每个发行版都有着自己与众不同的内核头文件。更为严重的是,内核开发者甚至推荐编译 Glibc 的头文件也要使用发行版提供的"经过净化的"内核头文件。由于 Glibc 和 Kernel 是整个系统的根基,这样一来 Linux 便像传统的 Unix 那样开始走向分裂。

另一件哭笑不得的事情是,虽然内核开发者强烈推荐使用发行版提供的"经过净化的"内核头文件,但是 Glibc 的开发者却不买账,他们推荐使用"未净化"的"原始"内核头文件来编译 Glibc ,两个开发组一直坚持各自的见解,互不妥协!另外,两个开发组在应当由谁提供内核头文件的问题上意见也不一致:内核开发组认为应当由发行版的制作者提供,而 Glibc 开发组认为应当由内核开发组提供。结果就是"神仙打架,凡人遭殃",虽然对 Debian 这种大型发行版来说,提供自己独有的"经过净化的"内核头文件不会成为多大的负担,但是对于那些没有能力或精力的小心发行版制作者和我们这些 DIY fans 来说却是一场灾难!要么直接使用其他发行版的成果,要么自力更生;前者让人心有不甘(没有了 DIY 的原汁原味),后者让人望而生畏(有几个人知道啥叫"净化"?怎么净化?)。

危机时刻总会有英雄的出现,就在一片恐慌之际,一个叫"linux-libc-headers"项目组诞生了!他们向我们这些"凡人"们提供了安全的、普遍适用的、"经过净化的"内核头文件,真是及时雨啊!天空重新晴空万里……然而好景不长,由于精力和人力有限,该项目在发布了 2.6.12.0 版本之后,遗憾的离开了这个世界。这样一来,2.6.12 以上版本的内核新特性(比如新的系统调用)和 ABI/API 的变化就无法反映出来,对于我们这些 DIY fans 来说,世界重回混沌……

俗话说,"合久必分,分久必合",大概是内核开发组意识到了如果继续固执己见将不可避免的导致混乱以及重蹈 Unix 逐渐走向分裂的覆辙,于是从 2.6.18 版本开始,内核开发组担负起了维护一份统一的、"经过净化的"内核头文件的职责(窃以为这原本就是他们的责任)。现在获取"经过净化的"内核头文件又变得简单起来,只要在内核源码树中使用 make headers_install 即可,而且不用再担心更新问题。对于我们这些 DIY fans 来说,又可以重新 Day Day Happy 了。

不过,由于磨合需要时间。目前 Glibc-2.4 以下的版本都无法配合这种新式头文件编译成功。不过偶相信前途一片光明……

Saturday, May 26, 2007

[zz]如何成为一个起早者(二)

原文地址:How to Become an Early Riser - Part II

作者:Steve Pavlina

翻译:Angelived

译文地址:
http://angelived.org/2007/05/22/how-to-become-an-early-riser-part-ii/

(原作者 :上周一的那篇文章“如何成为一个起早者”显然引起了很多人的共鸣,那篇文章收到了很多反向链接(反向链接加上回复总共213个,后来作者把评论关闭了,否则会更多 :)),超过这个站点上任何一篇我写过的文章。...........)

(译者:因为上一篇文章反响很大,因此作者决定再写一篇文章来讲一下更细节方面的东西)

首先,在“当你困的时候才去睡觉”这个问题上,要想做到这一点,需要你能够意识到什么时候你瞌睡了。(不知道翻译的对不对 ;) 原句按单词的组合意思是“需要你有正确的混合意识和常识” )。


如果你在睡觉前做一些很刺激的活动,你就会(译者加:因为太兴奋而)睡地更晚,并且在睡觉前感觉不到瞌睡。大学期间我经常通宵与宿舍的同学打扑克,天亮之后我们常常会出去吃早餐。如果我要做工作、和朋友一起出去玩或者做其他很刺激的活动,我就可以容易地比平时晚些睡觉。

但是这不是我指的“你要意识到什么时候你瞌睡了”。我在这个测试中提到过“如果你不能够专心地连续读完一本书的一两页(说明你要准备去睡觉了)”。但是这并不意味着你要等到你快要精疲力尽的时候才去睡觉。

我所指的“想睡的征兆”是指当你的头脑开始释放激素,促使你瞌睡。这和感觉到累是不同的,事实上,你只是感觉到昏昏欲睡。但是为了使你的头脑释放激 素,你需要创造一定的条件来使得它发生。这意味着你要让自己在睡之前把节奏放慢下来,我发现阅读是最棒的一个途径让你在睡之前放慢节奏。有些人说在床上看 书是个不好的习惯.......可是我从来对在床上看书没有任何问题,因为当我太瞌睡而不能阅读下去的时候,我就可以把书放下,然后马上入睡。不过如果你 喜欢的话,你也可以坐在椅子上看书。

另外一个测试你可以使用的是,问问你自己,“如果我现在去睡觉的话,我能多快入睡?”如果你认为你将需要超过15分钟的时间入睡的话,我会告诉你继续做你手中的事情,等会在去睡觉。

一旦你设定了一个固定的时间醒来,可能会需要你通过几次实践来确定你正确的睡觉时间范围。刚开始的时候你可能会看到变动比较大,一天晚上睡的太晚,另一天晚上睡的太早。但是最终你会找到一个感觉,你能够感觉到什么时候你去睡觉会马上睡着,并且第二天你仍然精力充沛。

为了防止你睡的过晚,给自己划定一个最晚睡觉时间,即使这时候你完全不瞌睡,无论如何你也要在那个时间上床睡觉。我知道我每天晚上至少需要6.5个 小时的睡眠时间,但是如果遇到了紧急情况,那么我可以只睡5个小时,第二天还很好,前提是我并不是每天晚上都这么做。现在我的睡眠时间最长为7.5小时。 在我开始每天早上准时醒之前,我经常每天晚上睡8到9个小时,如果有时候真的累的话,甚至睡10个小时。

如果你白天喝咖啡的话,好像这可能会打乱你的睡眠周期。因为起初的那篇文章假设你不依靠药物保持清醒,如果你喝咖啡有瘾的话,那么请先戒除你的咖啡瘾。如果你的大脑依靠化学物质的话,那么不要指望你的睡意会在合适的时间到来。

先前那篇文章的目的在于说明如何养成早起的好习惯。因此提的建议是直接关于如何养成这个习惯的。一旦这个习惯养成了,它就可以下意识的起作用。你可 以做刺激的活动,比如说工作或者玩电动游戏,你将会知道什么时候你需要去睡觉了,即使它和以往晚上睡觉的时间不同。我说讲过的睡意测试对于养成这个习惯非 常重要,不过在养成习惯之后,精确的信号(这里指的应该是你自己能够感觉到睡意的到来)会取代它起作用。

如果真的需要的话你可以不时的睡地晚一些。如果我一直到凌晨3点才睡觉,我就不打算在第二天早上5点起床,但是我会在第二天恢复到原来的起床时间。

我推荐你坚持每天在同一时间起床一个月,以此来养成早起的习惯。但是在这之后,你就会因为条件反射每天都在那个时间醒来,而你将很难再次入睡。我决 定在周六早上起的晚一些,所以我没有设置闹钟,但是我自动地在4点58准时醒来。然后我试图再次入睡,但是我已经清醒了,我完全无法再次入睡。哦,好吧。 一旦这个习惯被养成,那么想要准时起床就一点都不难了。这就像你知道什么时候你瞌睡了你就会去睡觉一样。

如果你有小孩的话,你必须尽量去适应它。我的两个孩子,一个5岁,另外一个只有1岁。有事他们把我从半夜吵醒——我的女儿有个习惯,她喜欢在睡床里 “摇晃着”告诉我妻子和我关于她做的梦,或者有时仅仅想和我们聊天。我知道你的婴儿隔几个小时就醒的状况,因此如果你是这种情况的话,我给你的建议是当你 能睡的时候就睡。想让婴儿遵守“日程安排”是不大可能的 :)

如果你不能在你的闹钟响后起床的话,这好像要归咎于你缺乏自制力。如果你有足够的自制力的话,无论如何你都可以马上从被窝里跳起来的。起初的动机会 有效,但是动机可能只会持续几天。规律就好像肌肉一样,你越是经常训练它,你就越能依靠它。每个人都有它自己的一些规律(你可以控制你的呼吸么?),但是 并不是每个人都有意地去发展它。有很多方法可以养成规律——你可以看下整个六篇关于如何建立规律的系列文章(我会在之后将六篇文章中的经典部分翻译过来, 想进一步了解如何养成规律的话,你可以用抓虾或者其他的订阅工具订阅我的博客 :) )。基本上它可以归结为克服一些小的挑战,战胜了它们,并逐渐地发展成为习惯,这就好像是举重练习一样。当你的自制力逐渐变强,像在某个特定的时间起床这样的挑战将最终变得那么简单。但是如果你的自制力衰退的话,那么它就好像是一个几乎不可逾越的障碍一样。

为什么要早起?

我要说主要的原因的是你可以有更多的时间来做比睡觉更有趣(译者:我认为是“更有意义” :) )的事情。

再提一次,我已经从每周节省出10到15个小时来做这些事情了。这些额外的时间效率是非常明显的。到上午6点半之前,我已经做完了锻炼,冲了个澡, 吃了早饭,我已经在我的办公桌前准备去工作。我可以每天挤出不少时间来做一些富有成效的工作,并且我通常在下午5点之前完成了一天的工作(那包括私人的 “工作” 比如说发邮件,支付帐单,去幼儿园接我的女儿,等等)。这给了我每晚5到6个小时的自由时间来关心家人、参加休闲活动、主持节目、阅读、写日记等等。而最 重要的是,我在这段时间中依然精力充沛。抽出时间来做那些所有对我重要的事情会使我感到非常平衡,放松和乐观。

想一想你可以利用空闲的时间来做些什么。即使每天多余出30分钟也足够你每天进行身体锻炼,读书,维护一个博客,冥想,煮健康的饭菜,学习一门乐器 等等。积小成多,即使每天一段很短的时间经过一年的积累也将会变得巨大,每天多余出30分一年就是182.5个小时。这可比一个月的工作时间还要长(按 每星期工作40个小时)。如果你能每天节省60分钟的话,一年你能节省的时间就会翻倍,如果你能每天节省90分钟的话,那么它就会变成三倍。对我来说,我 每天大概能够节省90分钟的时间。那就是说我每工作十年,就相当于其他人工作十一年。我可以用那一年的时间来精力充沛地做以前我没有时间做的事情,这是多 么美妙! :)


[zz]如何成为一个起早者

原文地址:How to Become an Early Riser
原文作者:Steve Pavlina
翻译:Angelived译文地址

在天亮之前起床是个好习惯,这将有助于你的健康,财富和智慧。——亚里斯多德

早起三光,晚起三慌。——中国谚语



早起的习惯是天生的还是后天养成的呢?在我身上,它显然是在后天养成的。在我20岁之前,我很少在午夜前睡觉,几乎总是睡的很晚,通常我会一直睡到每天的傍晚才起床。

但是后来的一段时间我不能继续忽视成功与早起之间的紧密联系了,尤其是在我身上看到了这一点。在我那些少有的早起的日子里,我意识到我的生产效率不 光是早上,而是整整一天都非常高。并且这样做我感觉非常好,我决定养成早起的好习惯,于是立即将闹钟调到了凌晨5点………

……..第二天早上,我在快到中午时才起床。

Hmmm………

我又进行了多次的尝试,基本上每一次都是在那个时间段醒来。我开始怀疑我的身上是不是没有携带早起的基因。每当我的闹钟响的时候,我的第一反应总是 想将它关掉然后回去继续睡觉。这个习惯我又保持了几年,但是最终我偶然发现了几篇关于睡眠的调查研究,它们让我意识到我在这个问题上一直是错误的。只要我 能把这些调查研究得到的方法应用到我自己身上,我就可以养成一个持久的早起习惯。

使用错误的策略很难使你养成早起的习惯,但是使用这些正确的策略,却相对容易的多。

最通常的错误策略是:你认为,如果你想要早起的话,你最好早点去睡觉。因此你会计算一下你现在一般每天要睡几个小时,然后计算出需要在新的基础上往 回移动几个小时。比如说现在你从午夜(夜晚12点)睡到早上8点,你预测如果你在晚上10点睡的话,那么第二天你就可以在凌晨6点起床。听起来似乎很有道 理,但是这通常会失效。

目前关于睡眠模式有两个主要的流派。其中一个学派认为你应该每天都按时睡觉,并按时起床。就好像在这两个时刻都有个闹钟一样——你试图在每天晚上的同一时刻入睡。这看起来好像适应于现代社会的节奏,我们需要有一个准确的日程安排表,并且要保证每天有足够的休息。

另外一个学派认为你应该根据身体的需要,累的时候就去休息,睡到自然醒就要起床。这种方法植根于生物学说,我们的身体知道我们需要多少睡眠,因此我们应该听从它们的命令。

通过试验,我发现对我来说两个都不是最佳的睡眠模式。如果你重视你的生产效率的话,它们都是错误的,以下是我这样说的原因:

如果你的睡眠时间固定,那么有时候你可能不是很困就要去睡觉。如果你需要花费超过5分钟的时间才能够入睡的话,这说明你并不是很困。你醒着躺在床上 浪费时间,却不能入睡。另外一个问题是你认为你每天都需要同样长的睡眠时间,这是一个错误的假设。你的睡眠时间应该根据每天不同的情况而有所不同。(译 者:我觉得还会有这样一个问题,比如说你假设你每天都需要睡够8个小时,可是你有时候早上会提前醒,但是这时候你告诉你自己:“我还没有睡够,在睡一会 吧。”可是事实上,你几乎难以再次入睡,你只是在床上磨时间,把你认为你需要的睡眠时间磨完了才会起床 :)

如果你根据身体的需要去睡眠,很有可能你的睡眠时间会超过你实际需要的睡眠时间——大多数情况下会超出很多,比如说每周会超出10-15个小时(这 相当于整整醒着的一天)。许多以这种方式休息的人每晚上休息的时间都超过了8个小时,这通常是过多的。而且,如果你每天早上在不同的时间起床,那么你每天 起床的时间就难以预测。因为有时候我们的生活会失去节奏(译者:比如说大学生的周末,一般都是3点之后才睡觉,而平时基本上都是12点睡觉,这样就会打乱 生活的节奏),你可能会发现你的睡眠时间变得飘忽不定。

最佳得解决方案是把二者结合起来。方法非常简单,很多起早的人都在自觉不自觉中使用这个方法,虽然如此,它对我来说还是一个心理上的巨大突破。解决 的方案是当我感到瞌睡的时候就去睡觉(只有当我感到瞌睡的时候),然后在每天的固定时间(每周七天)设置闹钟,响了就立刻起床。因此我总是在每天的同一个 时刻(我定的是早上5点)起床,但是我上床睡觉的时间每天晚上都有所不同。

当我实在困了的时候我才会上床睡觉。我测试睡意的方法是:如果我不能够连续不间断地读完一本书的一两页,我就要准备去睡觉了。大多数情况是当我上床 后,我会在三分钟之内睡着。我舒舒服服地躺下,然后立即就睡着了。有时候我会在晚上9点半就上床睡觉了,有时候我又会一直到午夜12点才睡觉,通常的情况 是我在晚上10点到11点之间上床。如果我一直不想睡,我会一直忙到我不能睁开眼睛才去睡觉。在这段时间内,读书是一个很好的选择,因为当我困得实在不能 在读下去的时候,这一般是显而易见的,我就会马上去睡觉。

每天早上当我的闹钟响的时候,我会把它关掉,伸一个长长的懒腰,然后坐起来。我这时候什么都不想,因为我知道,我赖在床上的时间越长,我接着再睡的可能性就越大。因此一旦闹钟响了,我就不允许我去想再睡一会的好处。即使我很想再睡一会,我通常也会立刻起床。

在坚持这个模式一段日子后,我发现我的睡眠规律逐渐变得有节奏了。如果前一天晚上我的睡眠时间不够充分,第二天晚上我自然而然地就会提前睡觉以补充 足够的睡眠。而如果我的精力非常旺盛,一点都感觉不到累,我就会睡的少一些。我的身体学会了什么时候将我叫醒,因为它知道我通常会在每天的那个时刻起床。

这样做的一个很好的效果是,我平均每天晚上睡觉的时间减少了90分钟,但是我却感觉更轻松,我想这主要是因为我在床上的时间基本上都在睡眠中。

我得知这样一个情况,那些失眠的人都是那些明明不瞌睡却要上床睡觉的人。如果你不瞌睡,而且你发现自己无法立即入睡,那么立即起来,让你的头脑保持 清醒一段时间。一直等到你的体内开始分泌激素,你的意识开始变得模糊,你再去睡觉。如果你能够在你瞌睡的时候去睡觉,在一个固定的时间起床,那么你的失眠 症将会不治自愈。第一天晚上你可能要待到很晚,但是你会在上床之后立刻入睡。你可能会因为整晚只睡几个小时而在第二天起的太早时(相对太早)感到很累,但 是经过一天的忙碌之后,你就会想在第二天晚上早一点上床睡觉。经过一段时间后,你就能养成每天晚上大概都在某一个时间上床,并且迅速入睡的习惯。

因此如果你想成为一个起早者(或者只是想更多的控制你的睡眠模式),那么就试试这样做吧:只有当你太瞌睡而不能继续坚持下去时才去睡觉,每天早上都在同一个固定的时间起床。

PS:关于如何成为一个起早者还有续文,介绍了需要注意的一些细节上的问题,具体的内容请参照:如何成为一个起早者(二)


在notebook上挂载sd卡

问题
新买的laptop有5 in 1 card reader,插入SD卡,执行dmesg提示:
tifm_7xx1: sd card detected in socket 1

自动能检测到有SD卡插入,但未能自动挂载(GNOME提供的gnome-mount仅能自动挂载U盘和CD/DVD ROM)
但是在/dev里没有发现类似的文件,怎么办呢?


解决
上网查后,知道了必须挂载相应的读写模块才能进行读写.方法如下:


[root@DMH387 ~]# modprobe tifm_sd



挂载tifm_sd模块,用于SD卡读写.

此时在/dev中就多了 mmcblk0 和 mmcblk0p1.意思应该是SD/MMC card 0 以及其第一个分区吧.如果有开GNOME的自动挂载功能,应该能发现并自动挂载(另外,在gnome panel上的磁盘挂载者applet也相应出现(在面板上添加了,但是不出现,直到插入SD卡或其他需要挂载的设备))
如下:


[root@DMH387 dev]# mount | grep mmc
/dev/mmcblk0p1 on /media/disk type vfat (rw,noexec,nosuid,nodev,shortname=winnt,uid=500)



自动挂载
可以在/etc/modules文件里添加需要自动挂载的模块,如以上情况,则可以添加:


#auto mount sd card
tifm_sd


到该文件,以实现启动自动加载该模块

Friday, May 25, 2007

用 Tomcat 和 Eclipse 开发 Web 应用程序

推荐,IBM dw出品,必属精品。该文附有插图,无论是新手老手,都是值得参考的资料。

Thursday, May 24, 2007

Linux系统服务学习心得——不断补完中

一直以来都对这个概念半知半解,现在越来越觉得不能再拖下去了,一定要深入了解其运行机制,以提高自己的工作效率以及让自己用系统用得更爽快~

进入/etc目录,有一个叫做rc.d的文件夹,而且,还有rc[0-6].d的文件夹。但是,rc[0-6].d是到/etc/rc.d/rc[0-6].d的符号链接。

在/etc/rc.d目录里,有这么些文件:

init.d
rc
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.local
rc.sysinit

以下分别解释一下各个文件/目录的作用:

init.d
包含一组script. 基本上, 在启动时或进入另一个运行级别时, 每个服务(service)需要一个script来进行自启动. Services包括SSHD,sendmail, HTTPD等等.


rc[0-6].d
我们首先要知道"启动级别"的概念.
可以查看到里面有类似以下的内容:


# vi /etc/inittab

Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6


意思是,系统可以看作一个状态机,启动后可以进入0-6这几个级别,但是如果启动后直接进入停机/重启级别就没意思了吧?因此应该进入1,2,3,5这几种级别之一,功能分别如注释里面所说.我们一般选择3--多用户全功能模式,或5--在3的基础上进入X.

进入不同的启动级别会启动对应级别的服务.这就是rc[0-6].d的作用.我们执行以下命令:


# cd /etc/rc.d/rc5.d
# ls -l
lrwxrwxrwx 1 root root 15 04-30 16:26 K01smolt -> ../init.d/smolt
lrwxrwxrwx 1 root root 24 02-05 01:22 K02avahi-dnsconfd -> ../init.d/avahi-dnsconfd
lrwxrwxrwx 1 root root 16 02-05 01:22 K02dhcdbd -> ../init.d/dhcdbd
lrwxrwxrwx 1 root root 24 02-14 20:06 K02NetworkManager -> ../init.d/NetworkManager
lrwxrwxrwx 1 root root 34 02-05 01:23 K02NetworkManagerDispatcher -> ../init.d/NetworkManagerDispatcher
lrwxrwxrwx 1 root root 19 02-05 01:22 K05saslauthd -> ../init.d/saslauthd
lrwxrwxrwx 1 root root 23 03-17 23:47 K08vmware -> /etc/rc.d/init.d/vmware
lrwxrwxrwx 1 root root 13 02-05 10:09 K09vdr -> ../init.d/vdr
lrwxrwxrwx 1 root root 19 02-05 01:29 K10dc_server -> ../init.d/dc_server



可以看到,在rc5.d里面,没有真实存在的文件!只有符号链接!

所以我们可以看出

系统所有具有自启动功能的服务,都必须拥有一个用于配置启动的脚本,这些脚本放在/etc/rc.d/init.d/里;而在rc[0-6].d里,则分别指明了对应的启动级别会启动的服务,因此,可以针对不同的启动级别设定要启动的服务!


这些连接的命名规则如下:
一个字母+一个数字+启动脚本
'S'是指启动这个特定的script, 'K'是指结束它,即kill。 数字是顺序,Init将根据顺序启动所有的services. 因此我们可以用一个两位数字和一个大写的'S'或'K'来启动或结束所需要service。

Init如何启动和结束service? 很简单. 每个script都写了一个接收参数用来'start' 和'stop'. 我们可以用命令行来执行这些script, 如:


/etc/rc.d/init.d/httpd stop #结束httpd服务器.

Init只需读文件名, 如果有'K', 它就用'stop'参数调用script. 如果有'S',则用'start'参数.

rc.sysinit
这是一个脚本,在系统启动时运行一次.这关系到系统启动流程:init读取inittab获得运行级别后将执行这个脚本进行系统初始化.关于这个步骤所进行的工作有很多,推荐鸟哥文章:
開機關機流程與 Loader

rc.local
在启动时或者修改运行级别时, 当所有的其他初始化完成后, 将执行文件/etc/rc.d/rc.local. 可以在这增加新的初始程序,我们自己所编写的程序建议加在该文件中。我们可以看到在rc*.d目录下启动顺序为99的链接文件名为S99local,是一个指向rc.local的链接.这说明在改运行级别所有服务都启动后,就执行rc.local脚本.比方说,我要开机后自动执行我自己编写的一个程序,就可以在该脚本里加入启动该程序的命令.更一般的做法是,编写自己相应的模块化的脚本,每个脚本只完成一项工作,然后把运行该脚本的命令放入rc.local里,就可以更好地管理了!

rc
这是一个脚本,作用是切换运行级别时start/stop相应运行级别的服务.

关于service命令
这个命令其实实际工作是,进入/etc/rc.d/init.d目录里搜寻作为参数传递进来的服务名,然后执行之.以下代码执行效果完全一样:

# 使用service 命令启动httpd
# service httpd start
# 直接执行启动脚本启动httpd
# /etc/rc.d/init.d/httpd start

事实上,service只是一个脚本文件,可以在/sbin下找到它并查看内容.

关于chkconfig命令
我们一般不手动更改rc*.d目录下的文件及结构,而是通过系统提供的实用程序来完成:


[root@localhost rc5.d]# whatis chkconfig
chkconfig (8) - updates and queries runlevel information for system services
chkconfig (rpm) - 用来维护 /etc/rc*.d 文件层次的系统工具。



keytouch终于配置成功了

keytouch是一个linux下配置特殊键映射的工具,对于手提笔记本的键盘特别有用,因为一般每部laptop的键盘都各有特色,有很多厂商专门设计的按钮。比如我的笔记本是Acer TravelMate 3273WXMi,左上角的"e","mail","WWW","P"键就必须有专门驱动支持。可惜ACER只提供了windows下的驱动,要让它们在小企鹅下活起来,就必须好好利用keytouch的强大功能。


其实keytouch我很早以前就装上了,但是由于没有已经配置好的键盘,于是只好随便找了个类似的ACER机子的映射文件来用,这样就基本上只有音量调节钮可以用。今天终于忍受不了了,于是上官方网站仔细看了看,发觉,原来有keytouch-editor这个好东东,这下子,就做到了所有键盘都支持了——我们可以专门使用它来为自己的键盘localization。

1.安装keytouch
http://keytouch.sourceforge.net
上官方网站下载keytouch-2.3.0的src(也可以直接下载RPM/DEB包,可惜没有FC下的,以前安装的keytouch-2.3.0-pre4配置得很好,插件很齐。但是在我的机子上好像有BUG).
解压后编译安装,这里要注意的是安装个官方安装手册说明,必须分别在keytouch-2.3.0,keytouch-2.3.0/keytouch-config,keytouch-2.3.0/keytouch-keyboard目录里进行configure,make,make install。

2.安装keytouch-editor
直接下载最新的RPM包或DEB包进行安装即可。

3.生成键盘配置
运行keytouch-editor进行配置.必须以root身份进行.
首先选择自己的键盘类型,按确定后,随便按一个特殊键进行操作.然后即可新建一个映射,按提示进行具体映射。(其实,所有键都可以映射!功能非常强大!因此,我把UP键左右两个没用的货币符号分别映射为audacious和smplayer,hoho)
我主要映射了这几个键,其他键我的FC6都原生支持。
E -- 启动我的wireless assitant
mail -- 启动revolution
WWW -- 启动firefox
P -- 启动keytouch
mute -- 静音
Volume Up/Down -- 调节音量

另外F1-F4上面几个,以后也许可以充分利用起来...hoho
所有键都映射好后,就可以保存文件并且在keytouch里导入了(是个XML格式的文件)。

4.配置keytouch
运行keytouch后,首先会提示选择键盘,这里import刚才创建的文件并选择之即可.导入后以后就可以方便地直接在keytouch里进行配置了!enjoy!!

Wednesday, May 2, 2007

[zz]关于Hotel California一个学生的乐评作业

原文地址:http://post.baidu.com/f?kz=7437288

李优

   我第一次听到《加州旅馆》(94年版)这首歌时,被他华丽的吉他伴奏所吸引了。我是个吉他爱好者,四把木吉他构成豪华的伴奏阵容无疑是吸引我的第一原因。但是当时我并没有对歌词有太多的注意。因为,这首歌在演唱过程中,发音很快,很不清晰,外加上有南方口音,歌词很难听懂。又因为我听它主要是为了听它的音乐,所以,就这样,一直没有找它的歌词。直到我们上课的时候,老师讲到这首歌是描写当时社会的,是七十年代美国的一首代表性歌曲。我这时才觉得有必要把这首歌的歌词下载下来好好阅读一下。
   
   当我读完一遍歌词后,第一感觉是不知所云。好像知道一点它描写什么,但又不确定。每一句歌词都是场景的碎片。几天以后,在课堂上,老师讲了六十年代到七十年代的美国,加上对这一首歌有了进一步的介绍,我开始明白了。但是,我还想知道的详细一点。于是,就上网查资料。但是由于搜索引擎上充斥着大量的垃圾信息,所以我找了很长时间,只找到了三篇描述比较详细的文章,这几篇中,只有一篇用了一些笔墨来分析歌曲背后的社会环境。(正是因为如此,网上的关于加州的评论多半是这一篇,文字丝毫不差,只是作者的署名不一样)这几篇评论的主要着眼点是:分析这支离破碎的歌词到底是在写什么,然后得出结论—— 这首歌是描写吸毒的感受的。我对这一首歌的看法是:它的确是写的吸毒,还描写了荒淫奢侈的生活。但是,它并不是像那些评论中所说的那样,只是写了一些场景或感受,而应该把这首歌放到七十年代的大环境中去,这首歌是那个年代的美国社会的一面镜子,至少是社会某些方面的一面镜子。下面我就写一写我对这首歌的看法。
   
   想要知道一首歌反映什么思想,首先要弄清楚歌词的意思。下面我们就来一起分析一下歌词中几个比较关键的部分。
    
   首先从题目看起,加州旅馆到底在哪里?有一些评论煞费苦心的找有关加州旅馆的信息,比如我找到的一篇评论上就这样写道: "'Hotel California'是一个真实的旅馆,它坐落在加州的BAJA,在圣塔爸爸拉(Santa Barbara)附近 Cabo San Lucas到La Paz之间的海滨高速公路上。"能找到这样绕口的名字,不简单呀,开来真是难为作者了。也有评论这样说:"南加州的托多斯桑托斯(Todos Santos )小镇在南加州高速公路的沙漠旁边,在小镇内有一座类似唱片封面的旅馆,在旅馆的不远处是会半夜传来钟声的教堂,而这旅馆在以前正是有暗地的色情交易。"最后这样的谣言太多了,eagles实在是到了忍无可忍的地步,多次否认曾经去过什么所谓的加州旅馆。然后,又有人说,加州旅馆是代指戒毒所,还说,还指精神病院。在歌中有这样的一句:"Mirrors on the ceiling, The pink champagne on ice",美国在七十年代的社会福利不会好到这种地步吧,连戒毒所和精神病院都是这样奢华的环境。开来,这个hotel也决不是什么戒毒所和精神病院。

   我认为,这个Hotel California其实就是:Hotel U.S.A。因为当时的很多事物都是在美国西海岸发展起来的,比如 HIPPIE,比如年轻人狂热的思潮。这就使得加利福尼亚在那时成了年轻人向往的地方。同时,在设个时代所诞生的描写加利福尼亚的歌曲也不少,就说明了这一点。六七十年代的加州是美国社会、文化等诸多问题最为典型的地方。所以,在一定程度上,这个时代的加州也代表了美国社会的缩影。歌曲想反映美国社会,所以起名叫加州旅馆,在美国人看来一提起加州思绪就回到了那个时代。打个比方,就像我们中国人一提起大庆,大家就会想到那个建设时期的中国,提起深圳,就想到改革开放一样。加州就是那个时期美国的代名词。

   再接下来的正文中,刚到第三行就有麻烦了。 "Warm smell of Colitas rising up through the air"。What is COLITAS?网上的文章大多数就是在争这个问题,虽然解释五花八门,但最终观点统一:Colitas并非英文,而是西班牙语。是大麻(可以制作兴奋剂的尖端嫩叶)的意思。为什么在歌曲里会出现西班牙文?这个不难理解,因为加州和墨西哥接壤,墨西哥人讲西班牙语。加州的墨西哥人也不少,引用几个西班牙语是可以理解的。(是不是北部的歌曲会有法语出现呢?呵呵,推测而已)知道了这一个词的意思,整个歌曲就好理解了。 "My head grew heavy and my sight grew dim",不难理解,毒瘾犯了。而随后的那些光怪陆离的景象,应该可以解释为毒瘾发作时的幻像。而这种幻像并不但只描写feeling groovy。而且暗指当时的美国就是这样的一个看起来光怪陆离,物欲横流,精神空虚的社会。

  
    看看这几句歌词:"Her mind is Tiffany-twisted, she got the Mercedes bends. She got a lot of pretty, pretty boys, that she calls friends. How they dance in the courtyard, sweet summer sweat. Some dance to remember, some dance to forget."还有 "Mirrors on the ceiling, The pink champagne on ice"

    Tiffany-twisted到底是什么意思呢?先暂时不看,后面的Mercedes bend不用过多地解释,见到Mercedes 就应该想到德国名车——梅塞德斯•奔驰。但是,众所周知,奔驰的英文名称是:Benz,为什么用bends? Bend这个词是扭曲的意思。再看看前面的两个词,根据一些网上评论的提示,我比较倾向于认为Tiffany并不是纱的意思,金山词霸上这样解释:"蒂凡尼,路易斯•康福特1848-1933美国艺术家,他发展了一种用于彩色玻璃窗、灯罩和其它装饰品的乳白色玻璃"而网上的评论说,这种玻璃制品很昂贵。而twist也有扭曲的意思,这样就知道为什么作者把Benz错拼成bends了。名车,名贵玻璃饰品,加上两个扭曲。是指当时扭曲的奢华物质生活。我们想象一下这样的情景,用慢镜头表现,很多人在里跳舞,很疯狂,暗淡光线透过名贵的有色玻璃,把各种颜色的光线投射在人们身上。粉红的香槟酒被冰镇着,大厅天花板是那种镶嵌有豪华的镜子的那种,折射出外面院子里纷乱的人影。院外停着红色的梅塞德斯•奔驰。人们就在慢镜头中扭动着身体,光线被扭曲了,空气也被扭曲了……这就是我对上述歌词中破碎的场景的理解。也是我认为Tiffany应该解释成有色玻璃的原因。这段歌词既可以理解成为是对吸毒感受的描写,也可以理解为是含沙射影的写实。

   接下来的一段更加令人费解的歌词是: "They gathered for the feast. They stab it with their steely knives, But they just can't kill the beast. " 聚餐?聚什么餐,就是在吸毒。而那些飞舞的刀叉就是指吸毒的工具。那头他们不能杀死的野兽就是指他们无法摆脱的毒瘾。这也表明了这些瘾君子在过瘾时,心中的那种痛苦、恐惧与无助。而这种感觉正像当时美国始终无法摆脱它天空上的阴霾的感觉一样。人们想把经济搞上去,想极力扭转社会风气,但是,很困难。这种感觉是不是很相似呢?

   在歌曲的最后,"我"终于反应过来我进了"黑店"。"我"想跑出去,但是,不可能了。Night man告诉我 "You can checkout any time you like, but you can never leave!"的确,到这里,是些吸毒最为明白的一部分了。你要不停的买,不能停,直到——死!同时我还觉得,这段话反映出了baby boomers进入七十年代后,开始了冷静与成熟的思考,可这时的美国社会却毫无起色,直线下降,他们觉得自己陷入了漩涡,到处是灰蒙蒙的,看不到前途。对自己的毫无所为有一种极大的失望,甚至是绝望的感觉。因为最后一句话就是在写吸毒,所以这么想有一点牵强,当我想,这种感觉在他们当时是肯定有的。
   
   下面就我就结合当时的历史背景来分析一下为什么这首歌这样受欢迎。Eagles于1977推出了第五张专辑《加洲旅店》,刚一问世便赢得了一片叫好声,这张专辑被誉为七十年代美国最重要的专辑。在这张专辑里雄鹰以一种极为颓废的方式反映了七十年代美国那种世风日下,混沌与散漫的社会风气。
   
    从1964年开始,已经成为青年的人数众多的baby boomers开始走上了历史的舞台。随着Ken Kesey的LSD 的推广;随着Hippie的出现;随着越南战争的升级……,年轻人用自己的激情在社会中激荡着。对父辈的憎恨,与社会传统观念的摩擦,与政府持有的不同政见,使得他们不停的在爆发爆发……在1969年,Woodstock的摇滚音乐节,这是一个让一切对音乐有过奢望和理想的人一想起来就热泪盈眶的盛会。有一篇文章上这样描写:"想一想吧,45万人如蚁群一样站在泥地里,站在瓢泼大雨中,他们包括来自全美各地的愤怒青年、摇滚乐手拥趸、行吟诗人、自由艺术家和亚文化代表。"这种狂风暴雨式的文化变革,思想变革影响了六七十年代的西方世界。有人这样评价:"这种翻天覆地的断裂式的思想变革随着各种社会矛盾的剧化带动了一代人在广阔区域内(西欧、北美、日本)的离经叛道之举。参加者数量之巨,声势之壮,在人类直立行走以来的文化史中都属罕见。它和欧洲文艺复兴自上而下的保守的启蒙过程不同,它的发生发展过程有如脱笼猛虎挟风雷之势践踏每一片不合理的存在。"(我总以为,六七十年代在我们国家有"文化大革命",不稳定。这样看来在资本主义国家也是这样的呀,不稳定too,呵呵)。

   进入七十年代以后,baby boomers逐渐进入了而立之年,正向老师所讲的那样:生儿育女的重担使他们在政治和文化上的热情减退。就正在此时,美国社会正在经历前所未有的困难,从政治到经济,没有一项尽如人意。水门事件,能源危机,通货膨胀,越南兵败……。这些社会危机让整个美国的国家自信像自由落体运动似的,直线下降。在社会深层,这些危机连同高涨的犯罪率,社会动荡。使得整个美国乌烟瘴气。也是在这时,一场全球规模的经济危机爆发了。人们恐惧的面对着这场经济萧条,在此期间,通货膨胀率一度达到11%。这意味着,如果你把你的工资存在一个特定的帐户中,随着美元贬值,你的100美元一年后就剩下89美元了。美国人学会了如何在价格高涨之前就把东西赶紧预订了,等到通货膨胀时再付钱。"随着成倍的通货膨胀,"波士顿大学的斯库曼教授说:"勤俭节约只能吃哑巴亏。"也就是在这时,美国人荒淫奢侈的生活开始了。没有人再关心政治了,只有世风日下,只有混沌与散漫的社会风气。人们吸毒,然后疯狂或是想回忆过去,或是为了忘记现实,"Some dance to remember, some dance to forget"正是表达的这个意思,其中的some不是修饰dance的,而是代词,指某些人。这些人想超脱于现实生活,但是又陷入毒瘾与物欲中无法解脱。大家在阴霾的七十年代痛苦的挣扎着。各种还有一个细节是:"So I called up the Captain,'Please bring me my wine'He said, 'We haven't had that spirit here since nineteen sixty nine'" 当时不理解这一句话,后来差了金山词霸才知道spirit还有烈酒的意思,比如,spirit-lamp是酒精灯的意思。但是,此处作者肯定是利用一词多义,spirit是精神的意思,是什么精神呢?从1969年以后就没有了,1969年发生了什么事?Woodstock。是的,在那个时代人们的那种激情在七十年代已经荡然无存了。这就是为什么We haven't had that spirit here since nineteen sixty nine。
   
   至此,这首歌在凌乱的歌词下反映美国社会的目的就已经很清晰了。在七十年代,已经有许多歌手们觉得不能再这样下去了,他们开始反毒品,反对人们的碌碌无为,反对荒淫无度的生活。他们希望这个深深中毒的社会能够摆脱出来。Hotel California在七十年代中后期推出,我不知道当时 eagles是否想以这样反映社会的手法唤醒社会,是不是他们也是那些纠正风气的人们中的一员。但是至少他们的歌在人数众多的baby boomers中引起了强烈的共鸣,并深深的刺痛了人们的心灵深处,使得人们反思。这也就是,这首歌在七十年代才有那么高的地位,并且广受欢迎知道今日的原因。

[zz]神秘永远的《加州旅馆》

原文地址:http://www.qingyun.net/column/yishu/yinyue/qita/080801.htm

神秘永远的《加州旅馆》

/筋斗云



  数日前与几位朋友聊起各自心目中最喜爱的歌,有人提到披头士(Beatles)的《昨日》(Yesterday)与《嘿,朱弟》(Hey Jude);有人提到西蒙和加芬客(Simon&Garfunkel)的《静之声》(The sound of silence)
  和《斯卡堡集市》(Scarborough fair)。不过最后大家终于同意到一首几乎是所有人的最爱:老鹰乐队(Eagles)的加州旅馆(Hotel California)。

  然而我把加州旅馆的歌词翻出来后,发觉尽管这首歌曾经听了无数遍,它的歌词并不是那么好理解的。即使在整个网络中,加州旅馆到底指的是什么,是实物还是象征?这个问题在老鹰迷中也还是没有定论的。   先让我们听一听这歌,看一看歌词吧。
  歌的mp3file我列出两个地址,希望至少一个是能用的。

http://aptiva.wag.caltech.edu/lhu/interest/music/
mp3/eagles/hotelcalifornia.mp3
http://downb.9sky.com:83/10mp3/220_3889_40533.mp3

  Hotel California (The Eagles)

  On a dark desert highway,cool wind in my hair Warm smell of colitas,rising up through the air Up ahead in the distance, I saw a shimmering light My head grew heavy and my sight grew dim I had to stop for the night

  There she stood in the doorway; I heard the mission bell And I was thinking to myself, \'This could be Heaven or this could be Hell\' Then she lit up a candle and she showed me the way There were voices down the corridor, I thought I heard them say...

  Welcome to the Hotel California Such a lovely place Such a lovely face Plenty of room at the Hotel California Any time of year, you can find it here

  Her mind is Tiffany-twisted, she got the Mercedes bends She got a lot of pretty, pretty boys, that she calls friends How they dance in the courtyard, sweet summer sweat. Some dance to remember, some dance to forget

  So I called up the Captain, \'Please bring me my wine\' He said, \'We haven\'t had that spirit here since nineteen sixty nine\' And still those voices are calling from far away, Wake you up in the middle of the night Just to hear them say...

  Welcome to the Hotel California Such a lovely place Such a lovely face They livin\' it up at the Hotel California What a nice surprise, bring your alibis

  Mirrors on the ceiling, The pink champagne on ice And she said \'We are all just prisoners here, of our own device\' And in the master\'s chambers, They gathered for the feast They stab it with their steely knives, But they just can\'t kill the beast

  Last thing I remember, I was Running for the door I had to find the passage back To the place I was before \'Relax,\' said the night man, We are programmed to receive. You can checkout any time you like, but you can never leave!

  下面是我在网络中找到的中文译文:

  在黑暗荒凉的高速公路上
  冷风吹着我的头发
  浓烈的烤烟味道
  散发在空气中
  抬头向远处眺望
  我看到一点微弱的灯火
  我的头越来越沉重,视线慢慢变的模糊
  我必须停下来过夜了

  她站在门口那里
  我听到了教堂的钟声
  我告诉自己
  这里可能是天堂也可能是地狱
  然后她点燃蜡烛给我带路
  走廊深处传来说话声
  我好像听到他们说……
  欢迎来加州旅馆
  多么可爱的地方
  多么可爱的面容
  这里有许多的房间
  任何时候
  你都能找到它

  她的心像打结的纱
  她拥有默西迪斯奔驰车
  她拥有很多漂亮的男孩
  她说是她的朋友们
  他们在院子里跳舞
  夏日大汗淋漓
  有些让人回忆,有些已经忘记
  我吩咐领班
  请给我一些酒
  他却说
  我们从1969年以后就没有烈酒了

  那些说话声仍然从远处传来
  在深夜把你吵醒
  模糊地听到他们说……

  欢迎来加州旅店
  多么可爱的地方
  多么可爱的面容
  他们在这里享受人生
  让人多么惊奇
  带给你的堕落的托辞

  天花板上镶嵌着镜子
  香槟酒在冰中
  她说
  我们只不过是把自己囚禁在这里
  与世隔绝
  在主人的卧室
  他们正在聚餐
  他们用钢刀切着
  但他们却杀不掉野兽

  我记得最后
  我向门口跑去
  但是我必须
  找到我来时的路
  别紧张,守夜的人说
  我们只是按照程序接待
  你任何时候都可以结帐
  但你永远也无法离开




  你或许已经发现了,有些中文的译文并不准确,我将译文列在这里,正是想讲讲其中一些失误的地方,有的是明显的理解错误,而有的地方则确实是原文太晦涩了。

  〉On a dark desert highway,cool wind in my hair
  〉在黑暗荒凉的高速公路上
  〉冷风吹着我的头发

  desert:同时有荒凉无人地和沙漠的两个意思,在这里应该直接译成沙漠更恰当。这首歌讲的是发生在南加州的故事,沙漠是南加州的风景特点之一。
  黑夜沙漠的公路上
  凉风掠入我的头发

  〉Warm smell of colitas,rising up through the air
  〉浓烈的烤烟味道
  〉散发在空气中

  colitas:被译为烤烟,我不知道译者从那里得到这个解释的,却可算是错打错着了。这个词在英文字典中没有解释,因为这不是一个英文词。这是一个西班牙语,南加州与墨西哥近邻,所以西班牙语常混杂在口语中。cola 在西班牙语中指尾巴(tail),colitas 是复数名词,意思是小尾巴们(little tails)。在七十年代,大麻的苞蕾被戏称为小尾巴,所以在这里colitas应该是隐指大麻的。大麻称着烤烟也可算是一个戏称。
  烤烟的温暖气息,
  在空气中散发。

  〉Up ahead in the distance, I saw a shimmering light
  〉My head grew heavy and my sight grew dim
  〉I had to stop for the night
  〉抬头向远处眺望
  〉我看到一点微弱的灯火
  〉我的头越来越沉重,视线慢慢变的模糊
  〉我必须停下来过夜了

  head grew heavy 是疲累的状态,同时也是吸食大麻会出现的一个现象。

  前面的远处
  我见到一丝灯光
  我的头混沉视线迷糊
  我得过夜在这地方

  〉There she stood in the doorway;
  〉I heard the mission bell
  〉And I was thinking to myself,
  〉\'This could be Heaven or this could be Hell\'
  〉Then she lit up a candle and she showed me the way
  〉There were voices down the corridor,
  〉I thought I heard them say...
  〉她站在门口那里
  〉我听到了教堂的钟声
  〉我告诉自己
  〉这里可能是天堂也可能是地狱
  〉然后她点燃蜡烛给我带路
  〉走廊深处传来说话声
  〉我好像听到他们说……

  正是她站在门旁
  远处教堂的钟响
  我心下告诉自己
  这会是地狱或者天堂
  然后她点燃蜡烛,引着我前行
  走廊深处传来声响
  我好像听到他们在讲

  〉Welcome to the Hotel California
  〉Such a lovely place
  〉Such a lovely face
  〉Plenty of room at the Hotel California
  〉Any time of year, you can find it here
  〉欢迎来加州旅馆
  〉多么可爱的地方
  〉多么可爱的面容
  〉这里有许多的房间
  〉任何时候
  〉你都能找到它

  欢迎来到加州旅馆
  一个可爱的地点
  一张美丽的容颜
  永远迎客的加州旅馆
  一年中的每一天
  随时都有空房间

  〉Her mind is Tiffany-twisted, she got the Mercedes bends
  〉She got a lot of pretty, pretty boys, that she calls friends
  〉How they dance in the courtyard, sweet summer sweat.
  〉Some dance to remember, some dance to forget
  〉她的心像打结的纱
  〉她拥有默西迪斯奔驰车
  〉她拥有很多漂亮的男孩
  〉她说是她的朋友们
  〉他们在院子里跳舞
  〉夏日大汗淋漓
  〉有些让人回忆,有些已经忘记

  薄凉纱虽然是tiffany的字典翻译,其实在这里并不应该这样翻译。
  Tiffany 用作大写,是做专用名词用,这是很出名的法国艺术品。它有两种含义,一是Tiffany 珠宝,香港翻译成第凡尼,其在全球都是收集的热品;另一种含义是Tiffany的玻璃艺术品,这已经发展成为玻璃品的一种流派。这个词两个意思的来源是两个名为Tiffany 的法国人。
  在这里,Tiffany 应该是取玻璃制品的意思。通过烈火熔化后的玻璃边吹边转动,冷却后自然留下的旋转的痕迹。
  作词者明显在这一句进行wordplay(玩弄字词),因为下面的墨西迪奔驰,并不是用原来的商标Mercedes Benz,将Benz 改成 bends,正是为了twist 和bend 都有弯曲之意,这很类似中文中对仗互偶的文字游戏。
  Some dance to remember,这里也译错了。some 在这里不是作为限定词来修饰dance 。dance 在这里是动词,而some 是代词,作主语。所以这句应该是“有些人跳舞是为了去记住。”

  她心如玻璃丝扭曲,她有墨西迪奔驰
  她有许多朋友,都是漂漂亮亮男孩子
  他们在后院起舞,甜蜜夏日的汗珠
  有人翩翩求忘记,有人翩翩求记住

  〉So I called up the Captain,
  〉\'Please bring me my wine\'
  〉He said, \'We haven\'t had that spirit here since nineteen sixty nine\'
  〉And still those voices are calling from far away,
  〉Wake you up in the middle of the night 〉Just to hear them say...
  〉我吩咐领班
  〉请给我一些酒
  〉他却说
  〉我们从1969年以后就没有烈酒了
  〉那些说话声仍然从远处传来
  〉在深夜把你吵醒
  〉模糊地听到他们说……

  spirit,是指高酒精度的烈酒。

  我叫过来领班
  “给我来点好酒。”
  他说,我们再无供应自从一九六九。

  遥远处依然传来那些声响
  在深夜将你唤醒
  听见他们在讲

  〉Welcome to the Hotel California
  〉Such a lovely place
  〉Such a lovely face
  〉They livin\' it up at the Hotel California
  〉What a nice surprise, bring your alibis
  〉欢迎来加州旅馆
  〉多么可爱的地方
  〉多么可爱的面容
  〉他们在这里享受人生
  〉让人多么惊奇
  〉带给你的堕落的托辞

  欢迎来到加州旅馆
  一个可爱的地点
  一张漂亮的容颜
  人人快乐在加州旅馆
  这样美丽的惊喜
  正是快来的借机

  〉Mirrors on the ceiling,
  〉The pink champagne on ice
  〉And she said \'We are all just prisoners here, of our own device\'
  〉And in the master\'s chambers,
  〉They gathered for the feast
  〉They stab it with their steely knives,
  〉But they just can\'t kill the beast
  〉天花板上镶嵌着镜子
  〉香槟酒在冰中〉她说
  〉我们只不过是把自己囚禁在这里
  〉与世隔绝
  〉在主人的卧室
  〉他们正在聚餐
  〉他们用钢刀切着
  〉但他们却杀不掉野兽

  “镜子在天花顶,粉红香槟浸在冰块上,”这是好莱坞中糜烂与色情的代表镜头。
  of one\'s own device :of one\'s own wish (某人自己的愿望的意思。)
  后面几句则是好莱圬的恐怖片中邪教的常见场面:在一个大的房间里面,人们在举行狂欢的仪式,许多人都用刀来刺杀代表恶魔的野兽。

  镜子嵌在天花板上,
  粉红香槟浸在冰块,
  她却说,我们在这里都是囚犯,
  为自己欲望负债。
  在主厅大房间内
  人们举起狂欢之火
  他们用刚刀挥刺着
  却杀不死心中恶魔

  〉Last thing I remember, I was
  〉Running for the door
  〉I had to find the passage back
  〉To the place I was before 〉\'Relax,\' said the night man,
  〉We are programmed to receive.
  〉You can checkout any time you like,
  〉but you can never leave!
  〉我记得最后
  〉我向门口跑去
  〉但是我必须
  〉找到我来时的路
  〉别紧张,守夜的人说
  〉我们只是按照程序接待
  〉你任何时候都可以结帐
  〉但你永远也无法离开

  We are programmed to receive,应该是指我们天生容易屈服于(欲望)之意。

  我最后只记得,我在
  拼命奔向大门口
  我必须找到回路再
  照原来的步子走。
  放松点吧,看门人说。
  我们天生受诱惑
  你可以随时结束
  却永远无法摆脱



  加州旅馆到底是指什么?它在那里?
  有的人认为歌曲中的加州旅馆是确实存在的,而这之中还有旅馆、戒毒所、精神病院三种说法。
  认为确实存在这个旅馆的人,在南加州的托多斯桑托斯(Todos Santos )这个小镇算是找到他们需要的一切。小镇在南加州高速公路的沙漠旁边,在小镇内有一座类似唱片封面的旅馆,在旅馆的不远处是会半夜传来钟声的教堂,而这旅馆在以前正是有暗地的色情交易。
  旅馆的主人号称这正是歌曲中的“加州旅馆”,不过小镇历史上,旅馆的改名是在歌曲已经流行后的八十年代才发生的。在九十年代后期,数篇报章开始登载这个正宗“加州旅馆”的故事,最后终于引来了歌曲创作者Don Henley在二○○○年的正式否认:老鹰乐队的成员从未到过此地。
  歌曲本身的数次对毒品的暗示,是加州旅馆原是戒毒所说法的来源。按此说法:加州旅馆是在南加州公路旁的一个自愿戒毒院,老鹰队员曾经吸毒与入院的经历是歌词的创作来源。
  歌词在一开始colitas的暗示,头感到发重是吸大麻烟的特徵。“ lit up a candle”是一个吸毒的常用语,在后院跳舞更是吸毒后失控发作的一个现象。
  这种自愿戒毒院是主要为中产阶层开的,介于疗养院与戒毒所之间,而淫乱现象更是七十年代中产阶层放荡后的一种常态。毒品的瘾性使得你可以在某段时间痊愈而离开戒毒院,不过却永远无法摆脱那重蹈旧轨的阴影,这正是“你可以一时结账,却永远无法离开”的写照。
  歌词的诡异可能是精神病院说法的来源。歌词中与之相关联的暗示有:不断有远处声音的幻听想象;天堂和地狱指精神病人中某些如恶魔的邪恶人性和如天使纯洁无知觉;在后院里病人如着魔般的跳舞;头脑思想扭曲正是精神病的直语;自己思想的囚犯也是暗语;想杀死恶魔却总杀不死的精神病幻觉。当然精神病也和毒品一样,你可以觉得你暂时是正常了,却无法保证将来是正常的,永远无法离开那阴影。
  七十年代曾经是电影中恐怖片流行的时候,而这歌词正勾出这样的故事架框。边远沙漠大路上的孤独一人,大门前掌烛的丽人,酒吧的神秘领班,后院的召魔舞蹈,意图杀死却总杀不死的恶魔,即使结束却总有人来在背后提醒还有续集的结尾。这些总总,使得歌词有一种鬼影森森的感觉,而在恐怖片中,精神病院更常是主要的背景场所了。



  相对于实地去寻找,加州旅馆是虚指的象征显然更加有说服力。但是这象征是何所指呢?这也至少有音乐界、洛杉矶生活、美国社会三种说法。
  六十年代是美国音乐界的自由创作时期,摇滚乐的流行成为六十年代自由与反叛思想的象征,然而其盛况也带来了商人无限贪婪的眼睛。吸毒和淫乱几乎成了每个摇滚手在七十年代走的同一条堕落之路,金钱与享乐成为了摇滚音乐在七十年代的新形象。
  同为音乐人的老鹰乐团看到这样的事实,却无能为力。
  乐手们已经将这种沉迷的生活看成了是音乐界的常态,摇滚乐手们身边总充满了漂亮的面孔与漂亮的地点。对于外界的质疑,他们总是自我的原谅:放轻松点吧,我们是天生易于被诱惑。音乐界已经无法杀死金钱的这个心魔,即使某些个人可以暂时结束,却永远无法摆脱。
  一九六九年的伍德斯多克(woodstock),被视为摇滚的顶峰聚会。spirit 同时有精神之意,歌词暗示在伍德斯多克之后,无论看起来多美丽,摇滚的精神已经不再存在了。
  认为这首歌象征美国社会的人则这样来理解一九六九:一九六九是六十年代最后一年,说自一九六九就再没有那样的精神了,是指美国六十年代的自由、和平、平等的精神。
  然而美国进入七十年代,遇到的是中东石油危机、越战的战败、尼克松的水门事件等。就在一夜间,美国的精神面貌就从奋斗的青年们变成了庸俗与颓废的中年了。
  在两三年前有一部斯坦利·库别克(Stanley Kubrick)
  拍摄了一部“大开眼界”(Eye wide open),看过这部电影的观众就可以在这部电影内容中发现与这首歌词许多神似的情节内容。也是同样的吸毒堕落,也是同样的荒淫性乱,也是同样的拜魔情结,也有同样的无法摆脱的阴影。这部电影就如同是这首歌的一个解说,讲述那种已经不堪的美国社会状态了。
  洛杉矶之说是老鹰乐队自己在人们无数次追问后的一个回答,虽然说歌曲就如同小说一样,离开了作者后要由听者来解释,堂·亨莱(Don Henley)是这样解说的:“我们是一群来自中西部州中产阶层背景的年轻人,加州旅馆是我们对洛杉矶的上流社会的理解。它可看做是对总是追求奢淫生活的美国的一个象征,而不仅仅是关于加州和毕利华山区。”(洛杉矶的一个最富人区)
  ("We were all middle-class kids from the Midwest," Henley said of the Eagles. "\'Hotel California\' wasour interpretation of the high life in Los Angeles. It was meant to be a metaphor for the United States, for the excesses this country has always been knownfor. It wasn\'t meant to be just about California or Beverly Hills.")

  《加州旅馆》自面世开始,立即就引来很多的质疑与批评。尽管谁也不敢夸口说自己的理解是正解版本,但歌词中明显的吸毒、性乱、邪教等暗示还是引起道德卫士的不满,并且在美国数州中受到宗教团体的杯葛。不过,《加州旅馆》歌曲中那成经典的吉他旋律、诡异莫名的歌词内容、感人心弦的悲世情怀,使得这首《加州旅馆》神秘永远,成为最爱。

Monday, April 30, 2007

强烈推荐IBM developerWorks关于LPI认证的教程

虽然是考证用的,但是说得非常系统,比一般网上流传的教程写得有条理,有结构,不但每篇文章条理清晰地有章节,题目,内容,后面的参考资料也非常详尽。

[zz]How to Write an Operating System

Thursday, April 26, 2007

字符,字节和编码

字符,字节和编码

[原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/encoding.htm]

级别:中级

摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。举例说明了一些实际应用中,编码的实现方法。然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的办法。本文的内容涵盖了“中文问题”,“乱码问题”。

掌握编码问题的关键是正确地理解相关概念,编码所涉及的技术其实是很简单的。因此,阅读本文时需要慢读多想,多思考。

引言

“字 符与编码”是一个被经常讨论的话题。即使这样,时常出现的乱码仍然困扰着大家。虽然我们有很多的办法可以用来消除乱码,但我们并不一定理解这些办法的内在 原理。而有的乱码产生的原因,实际上由于底层代码本身有问题所导致的。因此,不仅是初学者会对字符编码感到模糊,有的底层开发人员同样对字符编码缺乏准确 的理解。

回页首

1. 编码问题的由来,相关概念的理解

1.1 字符与编码的发展

从计算机对多国语言的支持角度看,大致可以分为三个阶段:

  系统内码 说明 系统
阶段一 ASCII 计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示。 英文 DOS
阶段二 ANSI编码
(本地化)
为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。

不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。

不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。
中文 DOS,中文 Windows 95/98,日文 Windows 95/98
阶段三 UNICODE
(国际化)
为了使国际间信息交流更加方便,国际组织制定了 UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。 Windows NT/2000/XP,Linux,Java

字符串在内存中的存放方法:

在 ASCII 阶段,单字节字符串使用一个字节存放一个字符(SBCS)。比如,"Bob123" 在内存中为:

42 6F 62 31 32 33 00
B o b 1 2 3 \0

在使用 ANSI 编码支持多种语言阶段,每个字符使用一个字节或多个字节来表示(MBCS),因此,这种方式存放的字符也被称作多字节字符。比如,"中文123" 在中文 Windows 95 内存中为7个字节,每个汉字占2个字节,每个英文和数字字符占1个字节:

D6 D0 CE C4 31 32 33 00
1 2 3 \0

在 UNICODE 被采用之后,计算机存放字符串时,改为存放每个字符在 UNICODE 字符集中的序号。目前计算机一般使用 2 个字节(16 位)来存放一个序号(DBCS),因此,这种方式存放的字符也被称作宽字节字符。比如,字符串 "中文123" 在 Windows 2000 下,内存中实际存放的是 5 个序号:

2D 4E 87 65 31 00 32 00 33 00 00 00 ← 在 x86 CPU 中,低字节在前
1 2 3 \0  

一共占 10 个字节。

回页首

1.2 字符,字节,字符串

理解编码的关键,是要把字符的概念和字节的概念理解准确。这两个概念容易混淆,我们在此做一下区分:

  概念描述 举例
字符 人们使用的记号,抽象意义上的一个符号。 '1', '中', 'a', '$', '¥', ……
字节 计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间。 0x01, 0x45, 0xFA, ……
ANSI
字符串
在内存中,如果“字符”是以 ANSI 编码形式存在的,一个字符可能使用一个字节或多个字节来表示,那么我们称这种字符串为 ANSI 字符串或者多字节字符串 "中文123"
(占7字节)
UNICODE
字符串
在内存中,如果“字符”是以在 UNICODE 中的序号存在的,那么我们称这种字符串为 UNICODE 字符串或者宽字节字符串 L"中文123"
(占10字节)

由于不同 ANSI 编码所规定的标准是不相同的,因此,对于一个给定的多字节字符串,我们必须知道它采用的是哪一种编码规则,才能够知道它包含了哪些“字符”。而对于 UNICODE 字符串来说,不管在什么环境下,它所代表的“字符”内容总是不变的。

回页首

1.3 字符集与编码

各个国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的“字符”。比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储。这些 ANSI 编码标准所规定的内容包含两层含义:

  1. 使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。
  2. 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。

各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集”,比如:GB2312, GBK, JIS 等,除了有“字符的集合”这层含义外,同时也包含了“编码”的含义。

UNICODE 字符集”包含了各种语言中使用到的所有“字符”。用来给 UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。

回页首

1.4 常用的编码简介

简单介绍一下常用的编码规则,为后边的章节做一个准备。在这里,我们根据编码规则的特点,把所有的编码分成三类:

分类 编码标准 说明
单字节字符编码 ISO-8859-1 最简单的编码规则,每一个字节直接作为一个 UNICODE 字符。比如,[0xD6, 0xD0] 这两个字节,通过 iso-8859-1 转化为字符串时,将直接得到 [0x00D6, 0x00D0] 两个 UNICODE 字符,即 "ÖÐ"。

反之,将 UNICODE 字符串通过 iso-8859-1 转化为字节串时,只能正常转化 0~255 范围的字符。
ANSI 编码 GB2312,
BIG5,
Shift_JIS,
ISO-8859-2 ……
把 UNICODE 字符串通过 ANSI 编码转化为“字节串”时,根据各自编码的规定,一个 UNICODE 字符可能转化成一个字节或多个字节。

反之,将字节串转化成字符串时,也可能多个字节转化成一个字符。比如,[0xD6, 0xD0] 这两个字节,通过 GB2312 转化为字符串时,将得到 [0x4E2D] 一个字符,即 '中' 字。

“ANSI 编码”的特点:
1. 这些“ANSI 编码标准”都只能处理各自语言范围之内的 UNICODE 字符。
2. “UNICODE 字符”与“转换出来的字节”之间的关系是人为规定的。
UNICODE 编码 UTF-8,
UTF-16, UnicodeBig ……
与“ANSI 编码”类似的,把字符串通过 UNICODE 编码转化成“字节串”时,一个 UNICODE 字符可能转化成一个字节或多个字节。

与“ANSI 编码”不同的是:
1. 这些“UNICODE 编码”能够处理所有的 UNICODE 字符。
2. “UNICODE 字符”与“转换出来的字节”之间是可以通过计算得到的。

我 们实际上没有必要去深究每一种编码具体把某一个字符编码成了哪几个字节,我们只需要知道“编码”的概念就是把“字符”转化成“字节”就可以了。对于 “UNICODE 编码”,由于它们是可以通过计算得到的,因此,在特殊的场合,我们可以去了解某一种“UNICODE 编码”是怎样的规则。

回页首

2. 字符与编码在程序中的实现

2.1 程序中的字符与字节

在 C++ 和 Java 中,用来代表“字符”和“字节”的数据类型,以及进行编码的方法:

类型或操作 C++ Java
字符 wchar_t char
字节 char byte
ANSI 字符串 char[] byte[]
UNICODE 字符串 wchar_t[] String
字节串→字符串 mbstowcs(), MultiByteToWideChar() string = new String(bytes, "encoding")
字符串→字节串 wcstombs(), WideCharToMultiByte() bytes = string.getBytes("encoding")

以上需要注意几点:

  1. Java 中的 char 代表一个“UNICODE 字符(宽字节字符)”,而 C++ 中的 char 代表一个字节。
  2. MultiByteToWideChar() 和 WideCharToMultiByte() 是 Windows API 函数。

回页首

2.2 C++ 中相关实现方法

声明一段字符串常量:

// ANSI 字符串,内容长度 7 字节
char
sz[20] = "中文123";

// UNICODE 字符串,内容长度 5 个 wchar_t(10 字节)
wchar_t wsz[20] = L"\x4E2D\x6587\x0031\x0032\x0033";

UNICODE 字符串的 I/O 操作,字符与字节的转换操作:

// 运行时设定当前 ANSI 编码,VC 格式
setlocale(LC_ALL, ".936");

// GCC 中格式
setlocale(LC_ALL, "zh_CN.GBK");

// Visual C++ 中使用小写 %s,按照 setlocale 指定编码输出到文件
// GCC 中使用大写 %S

fwprintf(fp, L"%s\n", wsz);

// 把 UNICODE 字符串按照 setlocale 指定的编码转换成字节
wcstombs(sz, wsz, 20);
// 把字节串按照 setlocale 指定的编码转换成 UNICODE 字符串
mbstowcs(wsz, sz, 20);

在 Visual C++ 中,UNICODE 字符串常量有更简单的表示方法。如果源程序的编码与当前默认 ANSI 编码不符,则需要使用 #pragma setlocale,告诉编译器源程序使用的编码:

// 如果源程序的编码与当前默认 ANSI 编码不一致,
// 则需要此行,编译时用来指明当前源程序使用的编码

#pragma setlocale
(".936")

// UNICODE 字符串常量,内容长度 10 字节
wchar_t wsz[20] = L"中文123";

以上需要注意 #pragma setlocale 与 setlocale(LC_ALL, "") 的作用是不同的,#pragma setlocale 在编译时起作用,setlocale() 在运行时起作用。

回页首

2.3 Java 中相关实现方法

字符串类 String 中的内容是 UNICODE 字符串:

// Java 代码,直接写中文
String
string = "中文123";

// 得到长度为 5,因为是 5 个字符
System.out.println(string.length());

字符串 I/O 操作,字符与字节转换操作。在 Java 包 java.io.* 中,以“Stream”结尾的类一般是用来操作“字节串”的类,以“Reader”,“Writer”结尾的类一般是用来操作“字符串”的类。

// 字符串与字节串间相互转化

// 按照 GB2312 得到字节(得到多字节字符串)

byte
[] bytes = string.getBytes("GB2312");

// 从字节按照 GB2312 得到 UNICODE 字符串
string = new String(bytes, "GB2312");

// 要将 String 按照某种编码写入文本文件,有两种方法:

// 第一种办法:用 Stream 类写入已经按照指定编码转化好的字节串

OutputStream os = new FileOutputStream("1.txt");
os.write(bytes);
os.close();

// 第二种办法:构造指定编码的 Writer 来写入字符串
Writer ow = new OutputStreamWriter(new FileOutputStream("2.txt"), "GB2312");
ow.write(string);
ow.close();

/* 最后得到的 1.txt 和 2.txt 都是 7 个字节 */

如果 java 的源程序编码与当前默认 ANSI 编码不符,则在编译的时候,需要指明一下源程序的编码。比如:

E:\>javac -encoding BIG5 Hello.java

以上需要注意区分源程序的编码与 I/O 操作的编码,前者是在编译时起作用,后者是在运行时起作用。

回页首

3. 几种误解,以及乱码产生的原因和解决办法

3.1 容易产生的误解
  对编码的误解
误解一 在将“字节串”转化成“UNICODE 字符串”时,比如在读取文本文件时,或者通过网络传输文本时,容易将“字节串”简单地作为单字节字符串,采用每“一个字节”就是“一个字符”的方法进行转化。

而实际上,在非英文的环境中,应该将“字节串”作为 ANSI 字符串,采用适当的编码来得到 UNICODE 字符串,有可能“多个字节”才能得到“一个字符”。

通常,一直在英文环境下做开发的程序员们,容易有这种误解。
误解二 在 DOS,Windows 98 等非 UNICODE 环境下,字符串都是以 ANSI 编码的字节形式存在的。这种以字节形式存在的字符串,必须知道是哪种编码才能被正确地使用。这使我们形成了一个惯性思维:“字符串的编码”。

当 UNICODE 被支持后,Java 中的 String 是以字符的“序号”来存储的,不是以“某种编码的字节”来存储的,因此已经不存在“字符串的编码”这个概念了。只有在“字符串”与“字节串”转化时,或 者,将一个“字节串”当成一个 ANSI 字符串时,才有编码的概念。

不少的人都有这个误解。

第一种误解,往往是导致乱码产生的原因。第二种误解,往往导致本来容易纠正的乱码问题变得更复杂。

在 这里,我们可以看到,其中所讲的“误解一”,即采用每“一个字节”就是“一个字符”的转化方法,实际上也就等同于采用 iso-8859-1 进行转化。因此,我们常常使用 bytes = string.getBytes("iso-8859-1") 来进行逆向操作,得到原始的“字节串”。然后再使用正确的 ANSI 编码,比如 string = new String(bytes, "GB2312"),来得到正确的“UNICODE 字符串”。

回页首

3.2 非 UNICODE 程序在不同语言环境间移植时的乱码

非 UNICODE 程序中的字符串,都是以某种 ANSI 编码形式存在的。如果程序运行时的语言环境与开发时的语言环境不同,将会导致 ANSI 字符串的显示失败。

比如,在日文环境下开发的非 UNICODE 的日文程序界面,拿到中文环境下运行时,界面上将显示乱码。如果这个日文程序界面改为采用 UNICODE 来记录字符串,那么当在中文环境下运行时,界面上将可以显示正常的日文。

由于客观原因,有时候我们必须在中文操作系统下运行非 UNICODE 的日文软件,这时我们可以采用一些工具,比如,南极星,AppLocale 等,暂时的模拟不同的语言环境。

回页首

3.3 网页提交字符串

当页面中的表单提交字符串时,首先把字符串按照当前页面的编码,转化成字节串。然后再将每个字节转化成 "%XX" 的格式提交到 Web 服务器。比如,一个编码为 GB2312 的页面,提交 "中" 这个字符串时,提交给服务器的内容为 "%D6%D0"。

在服务器端,Web 服务器把收到的 "%D6%D0" 转化成 [0xD6, 0xD0] 两个字节,然后再根据 GB2312 编码规则得到 "中" 字。

在 Tomcat 服务器中,request.getParameter() 得到乱码时,常常是因为前面提到的“误解一”造成的。默认情况下,当提交 "%D6%D0" 给 Tomcat 服务器时,request.getParameter() 将返回 [0x00D6, 0x00D0] 两个 UNICODE 字符,而不是返回一个 "中" 字符。因此,我们需要使用 bytes = string.getBytes("iso-8859-1") 得到原始的字节串,再用 string = new String(bytes, "GB2312") 重新得到正确的字符串 "中"。

回页首

3.4 从数据库读取字符串

通过数据库客户端(比如 ODBC 或 JDBC)从数据库服务器中读取字符串时,客户端需要从服务器获知所使用的 ANSI 编码。当数据库服务器发送字节流给客户端时,客户端负责将字节流按照正确的编码转化成 UNICODE 字符串。

如 果从数据库读取字符串时得到乱码,而数据库中存放的数据又是正确的,那么往往还是因为前面提到的“误解一”造成的。解决的办法还是通过 string = new String( string.getBytes("iso-8859-1"), "GB2312") 的方法,重新得到原始的字节串,再重新使用正确的编码转化成字符串。

回页首

3.5 电子邮件中的字符串

当一段 Text 或者 HTML 通过电子邮件传送时,发送的内容首先通过一种指定的字符编码转化成“字节串”,然后再把“字节串”通过一种指定的传输编码(Content-Transfer-Encoding)进行转化得到另一串“字节串”。比如,打开一封电子邮件源代码,可以看到类似的内容:

Content-Type: text/plain;
charset="gb2312"
Content-Transfer-Encoding: base64

sbG+qcrQuqO17cf4yee74bGjz9W7+b3wudzA7dbQ0MQNCg0KvPKzxqO6uqO17cnnsaPW0NDEDQoNCg==

最 常用的 Content-Transfer-Encoding 有 Base64 和 Quoted-Printable 两种。在对二进制文件或者中文文本进行转化时,Base64 得到的“字节串”比 Quoted-Printable 更短。在对英文文本进行转化时,Quoted-Printable 得到的“字节串”比 Base64 更短。

邮件的标题,用了一种更简短的格式来标注“字符编码”和“传输编码”。比如,标题内容为 "中",则在邮件源代码中表示为:

// 正确的标题格式
Subject: =?GB2312?B?1tA=?=

其中,

  • 第一个“=?”与“?”中间的部分指定了字符编码,在这个例子中指定的是 GB2312。
  • “?”与“?”中间的“B”代表 Base64。如果是“Q”则代表 Quoted-Printable。
  • 最后“?”与“?=”之间的部分,就是经过 GB2312 转化成字节串,再经过 Base64 转化后的标题内容。

如果“传输编码”改为 Quoted-Printable,同样,如果标题内容为 "中":

// 正确的标题格式
Subject: =?GB2312?Q?=D6=D0?=

如果阅读邮件时出现乱码,一般是因为“字符编码”或“传输编码”指定有误,或者是没有指定。比如,有的发邮件组件在发送邮件时,标题 "中":

// 错误的标题格式
Subject: =?ISO-8859-1?Q?=D6=D0?=

这样的表示,实际上是明确指明了标题为 [0x00D6, 0x00D0],即 "ÖÐ",而不是 "中"。

回页首

4. 几种错误理解的纠正

误解:“ISO-8859-1 是国际编码?”

非 也。iso-8859-1 只是单字节字符集中最简单的一种,也就是“字节编号”与“UNICODE 字符编号”一致的那种编码规则。当我们要把一个“字节串”转化成“字符串”,而又不知道它是哪一种 ANSI 编码时,先暂时地把“每一个字节”作为“一个字符”进行转化,不会造成信息丢失。然后再使用 bytes = string.getBytes("iso-8859-1") 的方法可恢复到原始的字节串。

误解:“Java 中,怎样知道某个字符串的内码?”

Java 中,字符串类 java.lang.String 处理的是 UNICODE 字符串,不是 ANSI 字符串。我们只需要把字符串作为“抽象的符号的串”来看待。因此不存在字符串的内码的问题。



------------------------------------------------------------------------------------
这篇文章写得太好了,为了弄清字符,编码,字符集等之间的关系,我看了好多文章还是迷迷糊糊,unicode.org上用英文写,多少不能完全理解。看了这篇文章后,好多东西瞬间都通了——醍醐灌顶,茅塞顿开!