2009年4月13日星期一
改变无数人人生的32句经典名言
1) 大多数人想要改造这个世界,但却罕有人想改造自己。
2) 积极的人在每一次忧患中都看到一个机会,而消极的人则在每个机会都看到某种忧患。
3) 莫找借口失败,只找理由成功。(不为失败找理由,要为成功找方法)
4) 伟人之所以伟大,是因为他与别人共处逆境时,别人失去了信心,他却下决心实现自己的目标。
5) 世上没有绝望的处境,只有对处境绝望的人。
6) 当你感到悲哀痛苦时,最好是去学些什么东西。学习会使你永远立于不败之地。
7) 世界上那些最容易的事情中,拖延时间最不费力。
8) 人之所以能,是相信能。
9) 一个有信念者所开发出的力量,大于99个只有兴趣者。
10) 每一发奋努力的背后,必有加倍的赏赐。
11) 人生伟业的建立,不在能知,乃在能行。
12) 任何的限制,都是从自己的内心开始的。
13) 含泪播种的人一定能含笑收获。
14) 欲望以提升热忱,毅力以磨平高山。
15) 一个能从别人的观念来看事情,能了解别人心灵活动的人永远不必为自己的前途担心。
16) 一个人最大的破产是绝望,最大的资产是希望。
17) 不要等待机会,而要创造机会。
18) 如果寒暄只是打个招呼就了事的话,那与猴子的呼叫声有什么不同呢?事实上,正确的寒暄必须在短短一句话中明显地表露出你对他的关怀。
19) 昨晚多几分钟的准备,今天少几小时的麻烦。
20) 做对的事情比把事情做对重要。
21) 人格的完善是本,财富的确立是末。
22) 没有一种不通过蔑视、忍受和奋斗就可以征服的命运。
23) 行动是治愈恐惧的良药,而犹豫、拖延将不断滋养恐惧。
24) 没有天生的信心,只有不断培养的信心。
25) 只有一条路不能选择――那就是放弃的路;只有一条路不能拒绝――那就是成长的路。
26) 人性最可怜的就是:我们总是梦想着天边的一座奇妙的玫瑰园,而不去欣赏今天就开在我们窗口的玫瑰。
27) 征服畏惧、建立自信的最快最确实的方法,就是去做你害怕的事,直到你获得成功的经验。
28) 失败是什么?没有什么,只是更走近成功一步;成功是什么?就是走过了所有通向失败的路,只剩下一条路,那就是成功的路。
29) 让我们将事前的忧虑,换为事前的思考和计划吧!
30) 再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。
31) 任何业绩的质变都来自于量变的积累。
32) 成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。
SVN使用笔记
目录以及文件是Subversion中可以记录版本的对象。其主要工作原理如下图:
_ _ _ _ _ _ _ _ _ _
/ \
| |
| 项目仓库 |
| |
\_ _ _ _ _ _ _ _ _ _/
/ |
/ check in |
check out / |
_ _ _ _ _ _ /_ _ _|_ _ _ _ _ _ _
/ \ / \
| | | |
| 工作拷贝 | | 工作拷贝 |
| | | |
\_ _ _ _ _ _ _ _/ \_ _ _ _ _ _ _ _/
分支,主干,合并,标签
创建一个分支或者标签时,采用一种"延迟拷贝"的技术,即只创建指向同一版本的链接,当其中某个文件有所改动时,再去复制那个文件或者目录。
一般地来讲,分支是用来做准备发布的,而不是并行开发。
1、创建一个项目仓库
svnadmin create /home/huzza/test_svn
2、import初始文件到项目仓库中
svn import -m source_file_path URL
本例 URL:file:///home/huzza/test_svn/sesame/trunk
file:// ------> 告诉svn是本地目录
3、checkout文件到本地目录
svn checkout(co) file:///home/huzza/test_svn/sesame/trunk sesame
4、检查文件状态或者日至
svn status [文件/目录]
svn log [文件/目录]
svn log -r6:8 [文件/目录] 查看版本6到版本8之间的日志
5、文件/目录比较(工作拷贝与项目创库中的比较)
svn diff [文件/目录] 或者 svn diff --rHEAD [文件/目录]
--rHEAD:表示最新版本
6、更新本地工作拷贝,提交工作修改
svn update(up) [文件/目录] svn checkin(in) -m"comments" [文件/目录]
update时的一些文件标志:
U ------ 表示文件被更新
G ------ 表示项目创库中的文件和本地工作拷贝的文件合并到了一起
C ------ 表示合并时,有冲突产生
A ------ 新加入了一个文件
D ------ 删除了一个文件
? ------ 表示该文件或者目录没有被svn管理
M ------ 该文件被修改
7、冲突。当svn
update时,如果存在某个文件存在冲突,打开冲突的文件,<<<<<<<< 和 >>>>>>>>
表明了冲突发生的地方。
当冲突发生时,如果想使用项目仓库中的版本,而放弃本地拷贝的修改,可以使用以下命令:
a、svn revert [冲突的文件/目录]
b、svn update [冲突的文件/目录]
(svn resolved [文件/目录] && svn updata
[文件/目录],似乎也是ok的,需要confirm一下)
如果想保留本地工作拷贝的修改,而放弃项目仓库中版本的修改,可以如下:
a、cp 文件/目录.mine 文件/目录
b、svn resolved 文件/目录
c、svn ci -m "use my version please" 文件/目录
(在上面的三个步骤中,似乎不用做步骤a也可以达到目的)
8、使svn项目仓库联网
启动svn服务器:svnserve --daemon --root /home/huzza/test_svn
列服务器资源:svn list svn://192.168.0.4/sesame/trunk
出来后面的URL不同,其他操作的各部分均相同
svn+ssh 访问:svn list svn+ssh://192.168.0.4/sesame/trunk
(需要在服务器上支持ssh访问)
9、得到特定版本的工作拷贝
svn checkout -rVersionNum list svn://192.168.0.4/sesame/trunk butterfly
svn info butterfly (查看当前版本拷贝的状态)
10、拷贝/移动文件
svn copy filename newfile
svn move oldfile newfile
svn ci -m "add or move some files" [修改文件所在的目录]
(这里确保服务器上也作跟本地拷贝相同的动作)
11、版本的符号
HEAD --------- 项目仓库中的最新版本
BASE --------- 工作拷贝的基准版本(也就是checkout出来时的版本)
COMMITTED ---- 最后一次checkin的版本
PREV --------- COMMITTED之前的一个版本
12、查找版本之间的差异
svn diff -r2:4 [文件/目录]
svn diff > diffname.patch (生成patch文件)
使用patch文件: patch -p0 -i diffname.patch
13、删除后一个版本对前一个版本的修改
svn merge -r27:26 [文件/目录] && svn ci -m "undo the work of version 27"
撤销版本27所做的修改
14、创建分支/标签
svn mkdir -m "Create branches" svn://192.168.0.4/sesame/branches
svn copy -m "Create release branches for version 1.0"
svn://192.168.0.4/sesame/trunk \
svn://192.168.0.4/sesame/branches/release-1.0
2009年4月12日星期日
贴身战——云南白药智斗强生邦迪
2008年2月,邦迪恍然发现,在中国的每年5亿元的小创伤护理品市场中,有将近一半不得不共收让给云南白药。对手的市消值从2001年的3000万元,已经飙升至3个亿。不经意间,云南白药创可贴一举超越邦迪,成为中国第一大品牌。云南白药创可贴所创造的速度奇迹,正是其成功地应用了产品竞争的钻石法则:差异定位。
霸主一枝独秀
20世纪初,美国强生公司的一名员工埃尔·迪克森将粗硬纱布和绷带粘合在一起,发明了一种外科轻微创伤用、能快速止血的产品,强生公司将其命名为——邦迪。这种由有弹性的纺织物与橡皮膏胶粘剂组成的长条形胶布,迅速风靡全球,成为强生起家的基石。
1992年,当邦迪全面进入中国市场时,国内既有的一些杂牌,遭到强生邦迪摧枯拉朽式的围剿。此后数年,邦迪横扫国内止血产品生产厂家,成为中国市场的霸主。国际上另一个重要的创可贴制造商——德国拜尔斯道夫公司也不是它的对手,很快败下阵来。
邦迪来中国之前,中国的小创伤口护理市场一直由云南白药外用散剂占据。这种惬意的好日子,在遭遇劲敌后急转直下。经过邦迪连续十年的精心布局,云南白药外用散剂在各大城市已难觅其踪。
巅峰时期,邦迪创可贴的购买率高达44.5%,是云南白药外用散剂的20.19倍,显示了无与伦比的领袖地位。在中国创可贴市场,邦迪的市场占有率一度高达70%左右。邦迪的成功,意味着"小胶布"止血市场发展空间很大,也不断有新的创可贴产品试图挑战邦迪的霸权。
然而,邦迪在中国市场的迅猛发展,为小伤护理建立了一套难以撼动的标准方案,这让众多竞争对手无从下手,纷纷黯然离去。在这个看似广阔的市场中,几乎所有的品牌都在努力模仿邦迪。因为,创可贴从一出生开始,就被认定为"不可能做出花样来",是一种同质化严重的产品。
为了不被邦迪扼杀在摇篮里,本土产品只好把价格定在邦迪一半的水平上,只为能在邦迪做大的市场蛋糕上,抢到一点剩食。低层次、无差异、缺乏个性的后果,是品牌芜杂,却没有一个能够成长起来同邦迪抗衡。
2000年,曾经有人建议强生对创可贴产品进行升级,但这时的邦迪已经傲视天下,在近乎垄断市场的前提下,既缺乏前进的动力,也无法找到自身的缺陷,更无法看到产品升级的方向。
这样一家雄踞中国市场的巨头,似乎永远都将高高在上、无懈可击。然而,强生邦迪真的无懈可击吗?
"黑马"卷土重来
把云南白药称为"黑马",有些抹杀这家中药巨头的"江湖地位"。毕竟,在邦迪进入中国之前,它才是这里的"话事人"。
1998年1月1日,云南白药胶囊和散剂(精)出厂价分别上浮35%、178%。当年,云南白药销量暴降50%!对于云南白药涨价,市场的反应出奇强烈。这大大出乎了公司董事会的预料。在年度报告中,云南白药阐述了销量下降的原因:市场疲软、需求不旺、终端工作刚起步、市场开发能力不足。
这位曾经的"老大",被逼进了历史的死角,谁来拯救云南白药?1999年,具有丰富销售经验的王明辉临危受命,就任公司总经理。
在以邦迪为主导的市场中,邦迪和创可贴几乎成为一个捆绑。在消费者的心目中,大家看到的创可贴就是邦迪。既然在这个行业里有如此强的认知,如果正面冲突,云南白药根本没有抗衡邦迪的可能。
摆在云南白药面前最大的问题,是寻找在产品上破解邦迪独大的招数。一番煞费苦心的研究以后,王明辉发现,邦迪创可贴严格来说不是药,在消费者的认知中,邦迪创可贴等同于一块应急小胶布。
它只是一块胶布,这是一个致命的漏洞!
胶布不能消毒杀菌、不能促进伤口愈合,云南白药找到了抗衡邦迪的机会:"为胶布加点云南白药"。邦迪是无药的胶布,而云南白药是有药的,这才是真正的"创可贴",核心差异马上显现了出来。
云南白药创可贴的"含药"定位,从实质上切割开了邦迪固守的市场。胶布和药,界限分明,云南白药由此完全颠覆了邦迪主导的游戏规则。依靠这个重新构建出来的创可贴新品类,云南白药无须在传统市场里与邦迪白刃相见。而这个新品类的标准,自然是云南白药说了算。
"和亲"
凭借良好的定位优势,2001年,白药率先发难。人们突然发现,北京二环路沿线街边,是邦迪"跷着手指"路牌广告的天下。而在环线地铁车厢里,云南白药创可贴的广告铺天盖地。面市当年,云南白药就实现了销售回款3000万元。
强生公司似乎预感到了什么,派人跑到昆明,希望两家结亲。强生开出的条件是:双方可以使用产品名字,并且承诺合作后给予云南白药40%的市场份额。甫一照面,邦迪就有些灰头土脸。回过神来的邦迪,凭借强大的资金与品牌优势,企图通过"和亲",控制这个最大的潜在对手。这无疑是一招上上之策——釜底抽薪。
此时的王明辉,自信已经找到了做创可贴的方法。区区40%,绝难满足其胃口,他婉拒了这门国际婚姻。
上兵伐谋,邦迪谋攻,云南白药谋生。实际上,当时强生公司并不能让云南白药集团相信,与云南白药合作不是要消灭云南白药创可贴,云南白药自然也不愿做嫁他人。邦迪与云南白药的第一次和亲,以失败告终。
此后不久,强生(中国)医疗器材有限公司董事长李炳容,开始不断受到来自美国总部的压力。美国强生得到消息称,云南白药创可贴有可能在本土市场站稳脚跟后,向海外市场进军。云南白药的崛起,不但将会使得邦迪失掉中国市场,使邦迪还面临被端掉"老窝"的危险。
深谙用兵之道的李炳容,立即将透皮事业部负责人以及上海、西安、广州、北京四大区域经理召回到上海总部。
各大区域经理带来的消息不容乐观,在短短的两年时间内,在市场一线,云南白药创可贴的市场认知率已经超过邦迪。随后李炳容又邀请了北京一家调查公司,对中国30多个大中城市的销售终端进行调查。结果让他大吃一惊,不但云南白药的认知率首次超过邦迪,购买率也反超0.2个百分点。邦迪在中国的市场占有率已经比2001年前下滑了将近1/3。邦迪如梦方醒,自己遇到了真正的死对头!李炳容决定再次"和亲"。
这一次,李炳容亲自约谈王明辉。邦迪开出的条件是,原来答应给予云南白药的市场份额由40%提高到49%,条件是云南白药出让技术,由邦迪负责生产。而市场拓展费用全部由邦迪承担,销售利润双方平分。
此时,云南白药集团已经着手海外市场的拓展工作。而云南白药创可贴生产技术已经取得了国家专利,并且已成为云南白药集团的主导产品。王明辉认为,已经完全不需要同强生合作。
围剿与反围剿
"和亲"不成,云南白药反而做大,双方俨然已势成水火。
云南白药在止血领域是首屈一指的好产品,但公司在材料学相关领域,却完全是外行。想要真正与邦迪抗衡,云南白药必须确保材料方面不输给对手。为此,王明辉选择了德国拜尔斯道夫公司作为生产技术合作方。
总部设在德国汉堡的拜尔斯道夫,在伤口护理、技术绷带等方面具有全球领先的技术。1994年,拜尔斯道夫公司进入中国市场,生产与销售"汉莎"创可贴。尽管拜尔斯道夫公司拥有世界一流技术,但产品知名度上的缺陷,使其在与邦迪的竞争中一直处于下风,连年亏损。
2001年,云南白药与拜尔斯道夫一拍即合、同仇敌忾,产品迅速完成了市场规模导入。这两个曾经的手下败将,竟然结成了强大的"攻守同盟",邦迪大跌眼镜。
一不做二不休,为了保持云南白药创可贴的产品优势,2004年王明辉又分别与美国3M及日本、中国台湾的一些公司进行合作。这一年,云南白药透皮事业部终端销售再创新高,达到9600万元。在云南白药的步步围逼下,邦迪显得左支右绌。当年销售利润率比上一年降低了0.5个百分点,首次出现负增长。
在价格方面,邦迪防水创可贴5片装当时售价为3.8元,云南白药便携型6片装售价仅为2元。对此,邦迪仍然将其定位为"强势品牌与低廉价格的对抗"。
然而,为了应对云南白药咄咄逼人的攻势,2006年强生不得不将原本设在日本的制造基地迁到上海。强生公司亚太区在一份声明中表示,这次邦迪创可贴的制造转移将降低产品的成本,并使邦迪具有价格竞争优势。
在完成"本土化"部署后,挟成本之势,强生开始开发更高级的伤口护理产品。而此时,"抗白"不利的李炳容正式提出辞职,结束了他在强生(中国)长达9年的任职。接替他的是,时任强生台湾市场总监、且在强生上海有多重市场经验的刘静娴。
作为一名女性管理者,走马上任的刘静娴将其细腻的一面发挥到了极致。这一年,强生成功开发出邦迪高级水泡痊愈创可贴,随后又相继完成了邦迪防水创可贴、邦迪弹性创可贴、邦迪轻巧创可贴的开发。
除了继续稳固自己在一线市场的地位,邦迪着手对云南白药主攻的二线市场进行"封杀"。邦迪推出的新型防水创可贴,专门针对家庭劳动的需要,特别适合肢体受到小创伤、有碍家务劳动时使用。产品一投放市场,就很受欢迎,一度成为各个零售药店非常流行的新产品。
邦迪的强力阻击,使云南白药辛辛苦苦缩小的市场差距,再次被拉大,双方的交火进入白热化。针对邦迪新产品不透气的缺陷,不到两个月时间,云南白药成功开发出了含药防水创可贴。这款创可贴既能防水,还能透气。产品投放市场,邦迪防水创可贴立即出现滞销。
一计不成,又生一计。借助奥运合作伙伴身份,邦迪一举推出各种奥运卡通造型的新产品,试图牢牢抓住青少年消费者。虽然邦迪无法模仿云南白药的"含药"创可贴,可云南白药却亦步亦趋,立即推出了与对手类似的"卡通"产品。不但如此,云南白药公司还印刷了大量生动有趣的海报和小册子投放终端。
接下来,云南白药将卡通创可贴进一步细分为女士香型创可贴和儿童创可贴;紧接着,又将"普通系列"、"轻巧系列"、"防水系列"等个性十足的系列创可贴,纳入了产品组合。面对云南白药创可贴连珠炮式的产品升级策略,邦迪在这场产品大战中一时竟无计可施,再输一阵。
决胜终端
在云南白药与邦迪的对抗过程中,王明辉意识到,不能只是局限于产品技术层面的竞争。随着市场营销终端体系的完善,云南白药发动了一场蓄谋已久的终端对决。
实际上,邦迪抢夺消费者的渠道是传统的超市及普通零售市场。为了配合这种大渠道模式,邦迪采取了强劲的广告推动。面对邦迪凌厉的市场推广,王明辉抢先走出了两步妙招。
首先,紧紧抓住药店这块"根据地"。云南白药一直采用的是分级制度,按中国的地理位置,划分为华东、华北、西北、东北四大区域,由区域总监负责各区省级市场招商,然后由省级代理商招聘二级城市和市县级经销商。
这种分级制度能够使权利清晰,也有利于有效管理。但这种市场模式最大的缺陷是,各区域经理不断提高招商价格:一款售价两毛钱的创可贴,由总部推出的招商价为1毛钱,到了大区经理手里就变成了1毛2,到了省级代理就增长为1毛4,终端赚到的利润只剩6分钱。大部分利润在流通中被代理商吞掉,严重削弱了终端市场的积极性。
云南白药与邦迪一贯沿用这种模式。但王明辉首先想到降低产品流通环节的加价,让销售商有利可图。因此云南白药决定推出终端市场直接与集团洽谈的模式,使经销商获利比原来多了5%以上。该举措一经推出,在各大零售药店,经销商争相推荐云南白药创可贴。
在团结起各地经销商后,云南白药顺势推出了第二个市场对决策略:直接争夺邦迪的销售渠道,在终端与邦迪全面开战。
2005年8月,云南白药与爱尔兰Alltracel制药公司合作开发新型止血产品。通过此次合作,云南白药创可贴成功转换身份,由护理药品变身为医疗器械。之前只能在药店销售的云南白药创可贴,现在可以像邦迪一样进入超市等零售渠道。
为了对抗云南白药对渠道血淋淋的分割,邦迪则对销售人员推出了重大的奖励政策。无论是哪级销售人员,只要能完成销售目标,销售人员基本工资和销售提成均以50∶50的同比例提高。同时,如果一个省级经销商能完成基本指标或者超出指标,将有机会成为强生的一类合作伙伴,从而获得市场销售上更多的直接支持。
而后,针对云南白药大幅度进攻普通超市零售店的攻势,邦迪在中国启动了互联网销售计划,试图通过新渠道的拓展,以虚拟网店来扩大市场占有率。彼时,网络销售还未在中国兴起,邦迪基于美国本部的互联网的优势,决定开展网络零售业务。
明确网络销售边界条件后,强生将自己所有的产品以网店的形式展示,并以邦迪为站点主题,使之成为经销商与消费者的一个沟通平台,所有的营销流程自然就沿着互联网悄然展开。
邦迪的举动,似乎挑起了云南白药更大的竞争欲望。2006年,王明辉在周密的考察后,制定出一套更具有攻击性的方案。云南白药创可贴是"药字号"产品,不同与邦迪的"械字号"产品。为了让消费者明白这一点,云南白药在CCTV—1、CCTV—5等强势媒体上,进行了新一轮的广告投放。当年,销售额就不可思议地提升了50%以上。云南白药创可贴成功突围,与邦迪分庭抗礼。
2008年初,云南白药创可贴所占市场份额实现反超,邦迪似乎在中国市场大势已去。经过7年的努力,云南白药终于拿下中国创可贴市场"老大"的宝座,邦迪垄断中国创可贴市场的历史就此被改写……
华丽的一战
2008年11月,刘静娴正式升任强生(中国)总裁。大权在握后,她立即着手制订新的竞争计划。
据透露,邦迪正着手进行一种含药产品的开发。一旦成功,将会对云南白药进行报复性打击。传言邦迪正和同仁堂、桐君阁等本土老字号洽谈,而邦迪推出这项计划后,云南白药赖以成名的含药创可贴,还能否保住市场第一的桂冠,尚未可知。
云南白药集团丝毫不敢怠慢,其提出的"千店计划",图谋在中国建设数千个同样风格的药店,把全国30多个省数百个县"连锁"成网,建立万家以上的连锁药店。这种预谋不但将彻底突破目前的销售模式,还会以新的增长模式带动云南白药集团超常规发展。
2009年初,在双方暂时的按兵不动之下,一股股未来的行业潜流,正待喷薄而出。无论这场战争在2009年将以何种方式继续,七年间,云南白药的剑走偏锋、大获全胜,以及强生邦迪的从容应对、不至于一败涂地,已经给我们提供了一个令人眼花缭乱的市场竞争案例。
<商界>2009.2
UBUNTU下的游戏集合
Tremulous
这是一个自由开源的FPS游戏, 和Quake2的Gloom很像.
Tremulous是个分两组游戏,一边是人类,一边是异形,每边都有自己的缺点和优点.双方的玩家都可以像即时战略的形式来建造建筑.
游戏的最终目的就是消灭对方.
消灭的方法不光是消灭对方的人,同样可以破坏对方的建筑,.一个游戏已经被下载了10W次.他在MOD
database的mod之年之2006的比赛中被评选为"玩家单机游戏最佳选择"。
这个游戏只有多人版本,进入游戏之后把网络改成internet,然后get
newserver,就可以获取网上的服务器了,服务器还比较多。找到人数和ping值都满意的游戏加入之后,按esc修改一下设置,比如分辨率什么的,我是用的1280X1024,还非常流畅。进入之后好像可以选择两个种族,一个是人类,一个是外星怪物。玩法还是比较简单,就是杀人,然后得钱,买装备,再杀人。
这个游戏使用了quake3的引擎,所以画面相当好,在ubuntu里面安装非常简单
sudo apt-get install tremulous
============================
百战天虫
sudo apt-get install wormux
可爱的小虫子们跑到linux下面了
============================
chromium 雷电,画质一流,和windows版的没有太大区别,个人认为超越了windows版
sudo apt-get install chromium
这个是linux下面类似雷电的一个游戏,非常好玩,强烈推荐
============================
linux下面的泡泡龙
sudo apt-get install frozen-bubble
画面可爱,适合和女朋友一起玩,上面的wormux也是不错的选择
============================
sudo apt-get install tuxkart 跑跑卡丁车, ,效果一般
============================
sudo apt-get install frozen-buble 桌面弹球 2d
游戏,音乐好听(我最喜欢这个游戏)
============================
FooBillard:3D撞球遊戲
安裝方法:(在終端機中鍵入或複製貼上以下指令)
sudo apt-get install foobillard
執行方法:(在終端機中鍵入或複製貼上以下指令)
foobillard
============================
Slune:3D企鵝開車冒險遊戲,動作過關,內容非常豐富,也能玩不同類型的小遊戲,如保齡球等
sudo apt-get install slune
============================
TORCS:3D賽車遊戲,玩起來還不錯
安裝方法:sudo apt-get install torcs
============================
Astromenace:3D直式捲軸空間飛機射擊遊戲,畫面相當精美
http://www.viewizard.com/download/amenace046b.tar.bz2
完成後解壓縮,進入解壓縮後的資料夾,點擊AstroMenace檔案,即可開始遊戲(64位元電腦請點擊AstroMenace64執行)
(注:如果無法遊戲,可開啟Synaptic查詢是否已安裝以下所需相依套件:
libSDL (ver 1.2.6+), libopenal (ver 1.0+), libalut (ver 1.0+), libogg (ver
1.1+), libvorbis (ver 1.1+), libvorbisfile (ver 1.1+), libjpeg (ver 6b+).)
============================
Nexuiz:3D第一人稱槍戰遊戲,畫面非常精緻,很好玩,推薦給喜歡槍戰遊戲的朋友
下載檔案: nexuiz-v222.zip
完成後解壓縮,進入解壓縮後的資料夾,點擊nexuiz-linux-glx.sh或nexuiz-linux-sdl.sh檔案,選擇執行,即可開始遊戲
=============================
中國象棋cnchess0.2版
下載檔案
http://www.magiclinux.org/people/yunfan/frogchess/cnchess-0.2.bin.tar.bz2
=============================
大型3D游戏
---------
QUAKE 3
下载:ftp://ftp.idsoftware.com/idstuff/
47M大小。
安装:#chmod u+x linuxq3ademo-1_11-6_x86_gz.sh //添加执行的权限
# ./linuxq3ademo-1_11-6_x86_gz.sh
安装过程中会提示一些问题,选择Y/N作答就可以了,这么简单的英文我就不给大家翻印了,主要是提示是否安装,是否接受许可协议,是否创建快捷方式,是否需要帮助文件等。
============================
DOOM 1、2、3
下载之前先看一看你的配置,DOOM3这样的大型游戏要求您的机器 P4
1.5,内存384MB,至少2.2G的硬盘空间,64M以上显存的显卡(曾经记得为了一款超级烂的《江湖》而升级计算机的情景)
下载地址:ftp://ftp.idsoftware.com/idstuff/
(下载人数过多,尽量在一些非高峰期下载)
安装和QUAKE3类似
============================
虚幻竞技场2004(UT2004)
下载:
http://www.unrealtournament.com/ut2004/downloads.php
选择LINUX的DEMO版本下载,大小275MB
安装一样
============================
Invasion Battle of Survival:
2D模擬策略遊戲,玩法類似紅色警戒,滿豐富的,地圖也很多
遊戲畫面: http://bos.seul.org/screenshots.shtml
[ 安裝方式 ]
下載遊戲引擎:
http://prdownloads.sourceforge.net/stratagus/stratagus-2.2.2-linux.tar.gz?download
下載BOS遊戲資料庫:
http://bos.seul.org/files/bos_2_0_1.tar.gz
安裝遊戲所需套件:
sudo apt-get install lua50
下載完以上兩個檔案後解壓縮,開啟終端機,進入stratagus-2.2.2資料夾.例如:小弟要進入放置於桌面的stratagus-2.2.2資料夾,使用此指令:
cd ~/Desktop/stratagus-2.2.2
接下來將BOS遊戲資料庫連結到stratagus引擎.例如:如果小弟將data.bos資料夾放至於桌面,則使用此指令開始遊戲:
./stratagus -d ~/Desktop/data.bos
享受遊戲吧~^^
============================
《Nexuiz》官方网站 http://www.alientrap.org/nexuiz/
这是一款免费的跨平台的FPS游戏。一个完全夸越互联网的3D死亡竞赛游戏。游戏的目的就是利用完美的武器平衡和快节奏让死亡竞赛回归本源,远离现在射击游戏日趋真实的趋势。你可以连接到主服务器与世界各地的玩家游戏。它使用DarkPlaces游戏引擎即Quake1引擎的改良版本,最多支持64人同时在线,并且拥有HDR效果。在2005年5月31日推出1.0版本,现在通用的是于2007年1月26日更新的2.2.3版本。Nexuiz标志是汉字的"力"字。
============================
《America's Army》 官方网站 http://www.americasarmy.com/
这是一款战术类多人FPS游戏,它由美国陆军免费制作,用来宣传自己帮助征兵工作。在2002年7月4日发布首版,现在使用的是2007年3月22日更新的2.8.1版本。尽管有批评者指责它具有政治目的,但是精良的制作和强调真实性与战术合作使其大受欢迎。它的主页显示到2007年已经有超过800万人注册,在2002年到2005年任意时间都有4500人在线,这足以使America's
Army成为十大在线游戏。育碧曾推出过它的改进版,它也有中文站。
=============================
《EnemyTerritory: QuakeWar》 官方网站 http://www.enemyterritory.com/
这是Wolfenstein第一人称射击游戏的《Enemy
Territory》(敌占区)的续作。游戏背景和Quake
4》一样都是Quake系列里的大背景,游戏里面加入超过40种的常见的以及特有的车辆,包括摩托车,坦克,直升机,无重力飞船等。采用增强型Doom3引擎,将包含动态光影,昼夜循环,天气,植被等一系列先进的效果。在2006年E3展被评为最佳在线多人游戏。
=============================
《Tremulous》 官方网站 http://tremulous.net/
这是一款开源的第一人称射击游戏,也具备网上对战功能,而且有即时战略元素。类似Gloom(quake
2的MOD)和Natural Selection(Half-Life
的MOD)。游戏里有两个种族,人族和异形,各有优势和劣势。这个游戏已经被下载过20万次。在2006年MOD游戏评选中被评为"最独特的游戏"。
=============================
《Vendetta》官方网站 http://www.vendetta-online.com/
Vendetta
Online》是一款以宇宙为背景的MMORPG游戏。新玩家有8个小时的体验时间,如果你想继续每月则需支付5美元。玩家需在三个势力中选择一方,然后驾驶自己的宇宙飞船,自由飞行探险,因为该游戏的战斗风格是"FPS"、"实时",所以动作性很强
=============================
模拟器
---------
街机模拟器、XMAME
下载地址:
http://yarrow.freshrpms.net/rpm.html?id=1342
安装:
将所有需要的安装包下载在同一个目录,然后运行:
#rpm –ivh *.rpm
xmame是Windows下mame的Linux版,gxmame是xmame的图形化前端。mame号称是模拟效果最好、支持roms最多的模拟器,不过这个我就不清楚了。
安装很简单
sudo apt-get install gxmame
会自动安装xmame和gxmame,安装后在Gnome游戏菜单中会多出gxmame,执行它会发现界面和Windows下的mame基本一样。很可惜我没有发现这个gxmame怎么用,似乎就是一架子。不用管它,没有图形界面也能玩。
玩游戏的方法很简单,比如你有KOF98的rom,名为kof98.zip,只用执行xmame
kof98就可以了。
如果你看到这就迫不及待地试了一下,你会发现虽然输出了一大堆东西但玩不了。呵呵,那是因为上面我没有说在哪个目录下执行命令。如果你想当然地在kof98.zip的目录下执行xmame
kof98,那你又错了。心急吃不了热豆腐,还是看先完这篇文章吧。
执行xmame
kof98的时候,xmame会在指定的目录下找kof98.zip或其它支持的压缩格式的文件。这个指定的目录是在/etc/xmame/xmamerc下指定的。以root身份打开它,会发现这样一行:
rompath /usr/share/games/xmame/roms
把后面的路径改为你机器上的就行了。比如:
rompath "/media/hdb5/街机ROM/Perfect148XP roms"
我在路径外打了双引号,因为我的路径里有空格。
如果有多个目录,则用冒号:隔开。比如:
rompath "/media/hdb5/街机ROM/Perfect148XP
roms:/media/hdb5/街机ROM/mame roms"
注意到冒号是在双引号的的里面,即"路径1:路径2:...",而不是"路径1":"路径2"...。当然,如果你路径中没有空格,就不需要打双引号。
其它参数都不用改。然后,执行xmame
kof98就可以了,随便在哪个目录下。执行后,可能会有一些警告,按几次左右方向键就可以进入游戏了。xmame在命令行下有很多参数,建议用man
xmame或xmame
--help查看一下,可以设置的东西还是很多的。这里我不列出来了,而且大部分情况下不需要设置参数。
常用的快捷键:
左Alt+PageDown 切换全屏/窗口模式(Alt+Enter不行)
左Shift+PageUp 放大
左Shift+PageDown 缩小
P 硬件暂停/继续
Esc 退出
F3 硬件reset
其它还有很多快捷键,就不再列了。上面的快捷键中,后三个是可以更改的。
游戏键位的设定方法和Windows下是一样的,进入游戏后,按Tab键进入设定选单(之前可以先按P暂停游戏)。以下的操作应该不用多说,试试就会了,或者google一把,文章挺多的。默认情况下,1P的上下左右是WSAD,出招的四个按键是UIJK。1P和2P的投币分别是5和6,开始键分别是
1和2。存档方法先按Shift+F7,再按0-9选择存盘点。读档是先按F7,再选择读盘点。
要注意的是xmame有个
bug,全屏时,如果放大之后再缩小时不会进行全屏重绘。不过这不影响游戏。并不是所有的街机rom版本xmame都能玩。比如我机器上的kof98有两个rom,在Windows下都能玩,但在Linux下一个能玩一个不能,虽然都是zip压缩。我的机器的显卡是GeFore
FX5200,CPU AMD
XP2500+,游戏时只能放大两倍,即按一次Shift+PageUp。再大就会有点跳帧。除此之外,非常流畅。很可惜我没有搞定我的手柄驱动。
============================
PS模拟器ePSXe
下载:http://www.epsxe.com/files/epsxe160lin.zip
安装:#zip –d epsxe160lin.zip (解压缩后可直接使用)
ePSXe的安装
可能有人在win下面用过这个软件,你会明白的它是个比较麻烦的东西,不过为了游戏我们一切都不顾了,现在我们就开始安装:
首先是几个必须的包 代码:
sudo apt-get install libgtk1.2-common libgtk1.2
然后几个东西比较麻烦我这里给出连接 请手动下载解压
软件本体
显示插件
软显示插件
声音插件
BIOS
下载好后请把ePSXe随便解压到什么地方,然后把其他三个插件全部解压放到ePSXe目录下的/plugins里面
然后我们在/plugins里执行一条命令 代码:
mv *cfg* ../cfg/
这样双击ePSXe目录里的epsxe就可以开始运行了
在开始让我们开始一些设置
首先是BIOS,因为不同的游戏可能需要不同的bios,而网上这方面的资源很丰富,我提供的两个可以随便使用
Config -> BIOS然后是选择你的bios的位置
然后是显示,Config -> Video选择Pete's XGL2 Driver 2.8或者P.E.Op.S. Softx
Driver 1.17,然后可以自己设置下具体的选项因为不同游戏 需求不同 这里就不谈了
然后是声音,Config -> Sound选择P.E.Op.S. OSS Audio
Driver,然后自己做下具体设置
然后是光驱,选择你自己的光驱的位置即可
最后是按键Config -> Game Pad -> Pad 1 可以根据自己的习惯设置。
如果你很顺利的执行了以上的所有步骤 那么恭喜 你成功了
你可以找个游戏然后模拟它 消磨下时间 当然并不是很多游戏都能模拟的
全屏要在video设置里面把分辨率修改为自己真实的分辨率,不然无法全屏。
============================
世家五代模拟器:Dgen/sdl
下载地址:http://www.pknet.com/~joe/dgen –sdl-1.23.tar.gz
安装:#tar –jxvf dgen –sdl-1.23.tar.gz
#cd dgen-sdl-1.23
#./configure
#make
============================
cedega
也许你更喜欢pc游戏,那么这个window游戏模拟器你一定知道,想玩cs
魔兽和魔兽世界都考这个
其实它的安装更简单在breezy上面有deb只要dpkg就可以,但是到了5.0版后他的开发者终于觉得不作点什么不行了,于是现在的cedega编成了原先的playpoint2而真正的cedega成为了一个组建,必须从官方下载,但是幸运的是,破解方法很久前就浮上了水面,因此我们可以轻松的使用cedega。
cedega的下载点比较多linuxfans或者南湖乐善共享ftp,关于ftp的使用请去看我在共享区的帖子
安装方法 代码:
sudo apt-get install xlibs
sudo dpkg -i cedega_5.0_i386.deb
然后在cedega启动后,它会监测你的硬件,要求你输入一个用户名密码给它验证,你可以空着它,不挺的下一步,最后呢在TransGaming->Install
local update里面选择cedega-engine-5.0-1.i386.cpkg
这样再重启一次cedega,你的cedega就就可以使用了。
cedega5.0中默认要求你安装一个游戏
然后才能玩但是万全不用这么死板,你可以电击install对着一个游戏的.exe文件,它会好好运行的。
============================
蓝迪游戏大厅
官方下载
http://www.bluedj.com/download/download.php
解压 linner-3.1.2.tar.gz,进入 BlueDJGames-3.1.2 目录,
./install
安装后,桌面有快捷方式。
我在使用时出现了一点小问题(可能是因为我sudo安装的缘故,文件所有者都是root)。进入大厅下载游戏的时候报告文件拷贝错误。在
/home/guoshuang/djgame2/ 目录中手工建立 modules
目录并且赋予正确的权限。或者手工拷贝 /tmp/bluedjgames 目录中的 .so 文件到
modules 目录中。
=============================
Ubuntu4Fun是一个Ubuntu游戏套件包,里面包含各式各样的Linux游戏
Ubuntu4Fun 20070504光碟映像档下载(大小约为610MB):
http://www.gc.ccu.edu.tw/~ubuntu/Ubuntu4Fun-20070504.iso
http://140.123.35.101/~ubuntu/Ubuntu4Fun-20070504.iso
将Ubuntu4Fun光碟映像档下载后烧录至光碟,放入光碟机,在套件库中加入来源,即可马上安装游戏
适用环境:Ubuntu,Kubuntu,Xubuntu 7.04
额外说明:安装过程中可能会需要用到网路下载其他少数所需套件,另外要玩3D或需3D加速类的游戏请先安装好显示卡驱动程式再执行
终极安装法(一次安装好所有的游戏):开启Synaptic或Adept搜寻aptoncd-metapackage套件安装
2009年4月9日星期四
单网卡绑定多IP实现多网段访问,多网卡绑定单IP实现负载均衡
我这里以自己使用的Redhat Enterprise Linux为例说明。
假设需要绑定多IP的网卡是eth0,我们先看看原网卡的配置信息和系统路由:
[root@test network-scripts]# more ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
BROADCAST=172.16.1.255
HWADDR=00:0C:29:A2:0C:32
IPADDR=172.16.1.55
NETMASK=255.255.255.0
NETWORK=172.16.1.0
ONBOOT=yes
TYPE=Ethernet
[root@test network-scripts]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0
eth0
0.0.0.0 172.16.1.1 0.0.0.0 UG 0 0 0
eth0
请在/etc/sysconfig/network-scripts目录里面创建一个名为ifcfg-eth0:0的文件,内容和原来ifcfg-eth0内容类似,但是需要注意按照自己的目的修改,如下这是原网卡的配置信息:我们也可以简单地将原ifcfg-eth0复制一份并更名为ifcfg-eth0:1
[root@test network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1
并修改内容如下
[root@test network-scripts]# more ifcfg-eth0:1
DEVICE=eth0:1
BOOTPROTO=static
BROADCAST=192.168.140.255
HWADDR=00:0C:29:A2:0C:32
IPADDR=192.168.140.242
NETMASK=255.255.255.0
NETWORK=192.168.140.0
ONBOOT=yes
TYPE=Ethernet
其中的DEVICE为设备的名称,如果复制过来后设备名没有修改,该网卡上将会被绑定eth0:1这个文件中的IP。
IPADDR为此设备的IP地址,BROADCAST是广播地址,NETMASK为子网掩码,ONBOOT
表示在系统启动时自动启动,如果IP地址相同,该网卡会被自动down掉的,即ONBOOT=no
[root@test network-scripts]# service network restart
//配置完成后重新启动网络服务就可以了连接到新的网段了。
[root@test network-scripts]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
192.168.140.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0 //增加绑定IP后自动添加的路由
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0
eth0
0.0.0.0 172.16.1.1 0.0.0.0 UG 0 0 0
eth0
[root@test network-scripts]# ping 192.168.140.1
//并且可以对应网段正常通信了。
PING 192.168.140.1 (192.168.140.1) 56(84) bytes of data.
64 bytes from 192.168.140.1: icmp_seq=0 ttl=255 time=3.75 ms
如果需要再绑定多一个IP地址,只需要把文件名和文件内的DEVICE中的eth0:x加一即可,LINUX最多可以支持255个IP别名.
对以上内容的一点扩充:在这里我在用route命令添加静态路由,使该机器可以访问到其他网段:注意:我这里的环境是192.168.140.1为三层交换机上一个VLAN的IP,并且三层交换上启用了路由在手动增加静态路由之前,我们并没有办法访问到192.168.140.1以外的网段。我们这里添加一条路由
[root@test network-scripts]# route add -net 192.168.0.0/16 gw 192.168.140.1
[root@test network-scripts]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
192.168.140.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0
eth0
192.168.0.0 192.168.140.1 255.255.0.0 UG 0 0 0
eth0
0.0.0.0 172.16.1.1 0.0.0.0 UG 0 0 0
eth0
[root@test network-scripts]# ping 192.168.200.1
//这里我们可以看到增加静态路由后立即就可以通过三层交换访问到其他网段了
PING 192.168.200.1 (192.168.200.1) 56(84) bytes of data.
64 bytes from 192.168.200.1: icmp_seq=0 ttl=63 time=3.77 ms
route 命令参数如果记不牢固,可以通过route
--help查看即可。对于linuix使用者来说,任何情况这是最直接也是最好的帮助了。当然我们希望不要每次重新启动计算机之后去手动添加路由,那我们可以把该命令写入到系统启动脚本/etc/rc.d/rc.local中
普遍适用的单网卡绑定多IP实现方法
ifconfig eth0:1 192.168.140.242 broadcast 192.168.140.255 netmask
255.255.255.0
同样可以把上述命令加在启动脚本/etc/rc.d/rc.local中.
多网卡共用单IP的实现方法
使用多块网卡虚拟成为一块网卡,具有相同的IP地址。这项技术其实在cisco和sun中已经存在,分别称为Trunking和
etherchannel技术,在linux中,这种技术称为bonding.因为bonding在内核2.4.x中已经包含了,只需要在编译的时候把网络设备选项中的
Bonding driver
support选中就可以了。然后,重新编译核心,重新起动计算机,执行如下命令:
ismod bonding
ifconfig eth0 down
ifconfig eth1 down
ifconfig bond0 ipaddress
ifenslave bond0 eth0
ifenslave bond0 eth1
现在两块网卡已经象一块一样工作了,这样可以提高集群节点间的数据传输。
你最好把这几句写成一个脚本,再由/etc/rc.d/rc.local,以便一开机就生效。
bonding对于服务器来是个比较好的选择,在没有千兆网卡时,用两三块100兆网卡作
bonding,可大大提高服务器到交换机之间的带宽。但是需要在交换机上设置连接bonding
网卡的两个口子映射为同一个虚拟接口。
2009年4月7日星期二
字符编码详解及由来(ANSI,UNICODE,UTF-8,GBK)
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。
再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为"计算机"。
开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。
他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作。遇上00x10,终端就换行,遇上0x07, 终端就向人们嘟嘟叫,例如遇上0x1b,打印机就打印反白的字,或者终端就用彩色显示字母。他们看到这样很好,于是就把这些0x20以下的字节状态称为"控制码"。
他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了。大家看到这样,都感觉很好,于是大家都把这个方案叫做ANSI 的"Ascii"编码(American Standard Code for Information Interchange,美国信息互换标准代码)。当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。
后来,就像建造巴比伦塔一样,世界各地的都开始使用计算机,但是很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机保存他们的文字,他们决定采用127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。从128到255这一页的字符集被称"扩展字符集"。从此之后,贪婪的人类再没有新的状态可以用了,美帝国主义可能没有想到还有第三世界国家的人们也希望可以用到计算机吧!
等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,况且有6000多个常用汉字需要保存呢。但是这难不倒智慧的中国人民,我们不客气地把那些127号之后的奇异符号们直接取消掉,规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在ASCII里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了。
中国人民看到这样很不错,于是就把这种汉字方案叫做 "GB2312"。GB2312是对 ASCII 的中文扩展。
但是中国的汉字太多了,我们很快就就发现有许多人的人名没有办法在这里打出来,特别是某些很会麻烦别人的国家领导人。于是我们不得不继续把GB2312 没有用到的码位找出来老实不客气地用上。
后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为GBK 标准,GBK 包括了 GB2312的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。
后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK扩成了GB18030。从此之后,中华民族的文化就可以在计算机时代中传承了。
中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做"DBCS"(Double Byte Charecter Set双字节字符集)。在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里,因此他们写的程序为了支持中文处理,必须要注意字串里的每一个字节的值,如果这个值是大于127的,那么就认为一个双字节字符集里的字符出现了。那时候凡是受过加持,会编程的计算机僧侣们都要每天念下面这个咒语数百遍:
"一个汉字算两个英文字符!一个汉字算两个英文字符……"
因为当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码,连大陆和台湾这样只相隔了150海里,使用着同一种语言的兄弟地区,也分别采用了不同的DBCS编码方案——当时的中国人想让电脑显示汉字,就必须装上一个"汉字系统",专门用来处理汉字的显示、输入的问题,但是那个台湾的愚昧封建人士写的算命程序就必须加装另一套支持BIG5编码的什么"倚天汉字系统"才可以用,装错了字符系统,显示就会乱了套!这怎么办?而且世界民族之林中还有那些一时用不上电脑的穷苦人民,他们的文字又怎么办?
真是计算机的巴比伦塔命题啊!
正在这时,大天使加百列及时出现了——一个叫ISO(国际标谁化组织)的国际组织决定着手解决这个问题。他们采用的方法很简单:废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号的编码!他们打算叫它"Universal Multiple-Octet Coded Character Set",简称 UCS, 俗称 "UNICODE"。
UNICODE开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO
就直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ascii里的那些"半角"字符,UNICODE包持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于"半角"英文符号只需要用到低8位,所以其高8位永远是0,因此这种大气的方案在保存英文文本时会多浪费一倍的空间。
这时候,从旧社会里走过来的程序员开始发现一个奇怪的现象:他们的strlen函数靠不住了,一个汉字不再是相当于两个字符了,而是一个!是的,从UNICODE开始,无论是半角的英文字母,还是全角的汉字,它们都是统一的"一个字符"!同时,也都是统一的"两个字节",请注意"字符"和"字节"两个术语的不同,"字节"是一个8位的物理存贮单元,而"字符"则是一个文化相关的符号。在UNICODE中,一个字符就是两个字节。一个汉字算两个英文字符的时代已经快过去了。
从前多种字符集存在时,那些做多语言软件的公司遇上过很大麻烦,他们为了在不同的国家销售同一套软件,就不得不在区域化软件时也加持那个双字节字符集咒语,不仅要处处小心不要搞错,还要把软件中的文字在不同的字符集中转来转去。UNICODE对于他们来说是一个很好的一揽子解决方案,于是从 Windows NT 开始,MS趁机把它们的操作系统改了一遍,把所有的核心代码都改成了用 UNICODE方式工作的版本,从这时开始,WINDOWS系统终于无需要加装各种本土语言系统,就可以显示全世界上所有文化的字符了。
但是,UNICODE 在制订时没有考虑与任何一种现有的编码方案保持兼容,这使得GBK 与UNICODE在汉字的内码编排上完全是不一样的,没有一种简单的算术方法可以把文本内容从UNICODE编码和另一种编码进行转换,这种转换必须通过查表来进行。
如前所述,UNICODE是用两个字节来表示为一个字符,他总共可以组合出65535不同的字符,这大概已经可以覆盖世界上所有文化的符号。如果还不够也没有关系,ISO已经准备了UCS-4方案,说简单了就是四个字节来表示一个字符,这样我们就可以组合出21亿个不同的字符出来(最高位有其他用途),这大概可以用到银河联邦成立那一天吧!
UNICODE 来到时,一起到来的还有计算机网络的兴起,UNICODE如何在网络上传输也是一个必须考虑的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现了,顾名思义,UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE到UTF时并不是直接的对应,而是要过一些算法和规则来转换。
受到过网络编程加持的计算机僧侣们都知道,在网络里传递信息时有一个很重要的问题,就是对于数据高低位的解读方式,一些计算机是采用低位先发送的方法,例如我们PC机采用的INTEL架构,而另一些是采用高位先发送的方式,在网络中交换数据时,为了核对双方对于高低位的认识是否是一致的,采用了一种很简便的方法,就是在文本流的开始时向对方发送一个标志符——如果之后的文本是高位在位,那就发送"FEFF",反之,则发送"FFFE"。不信你可以用二进制方式打开一个UTF-X格式的文件,看看开头两个字节是不是这两个字节?
讲到这里,我们再顺便说说一个很著名的奇怪现象:当你在 windows的记事本里新建一个文件,输入"联通"两个字之后,保存,关闭,然后再次打开,你会发现这两个字已经消失了,代之的是几个乱码!呵呵,有人说这就是联通之所以拼不过移动的原因。
其实这是因为GB2312编码与UTF8编码产生了编码冲撞的原因。
从网上引来一段从UNICODE到UTF8的转换规则:
Unicode UTF-8
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
例如"汉"字的Unicode编码是6C49。6C49在0800-FFFF之间,所以要用3字节模板:1110xxxx
10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 1100 0100 1001,将这个比特流按三字节模板的分段方法分为0110 110001 001001,依次代替模板中的x,得到:1110-0110 10-110001 10-001001,即E6 B189,这就是其UTF8的编码。
而当你新建一个文本文件时,记事本的编码默认是ANSI,如果你在ANSI的编码输入汉字,那么他实际就是GB系列的编码方式,在这种编码下,"联通"的内码是:
c1 1100 0001
aa 1010 1010
cd 1100 1101
a8 1010 1000
注意到了吗?第一二个字节、第三四个字节的起始部分的都是"110"和"10",正好与UTF8规则里的两字节模板是一致的,于是再次打开记事本时,记事本就误认为这是一个UTF8编码的文件,让我们把第一个字节的110和第二个字节的10去掉,我们就得到了"00001 101010",再把各位对齐,补上前导的0,就得到了"0000 0000 0110 1010",不好意思,这是UNICODE的006A,也就是小写的字母"j",而之后的两字节用UTF8解码之后是0368,这个字符什么也不是。这就是只有"联通"两个字的文件没有办法在记事本里正常显示的原因。
而如果你在"联通"之后多输入几个字,其他的字的编码不见得又恰好是110和10开始的字节,这样再次打开时,记事本就不会坚持这是一个utf8编码的文件,而会用ANSI的方式解读之,这时乱码又不出现了。
好了,终于可以回答NICO的问题了,在数据库里,有n前缀的字串类型就是UNICODE类型,这种类型中,固定用两个字节来表示一个字符,无论这个字符是汉字还是英文字母,或是别的什么。
如果你要测试"abc汉字"这个串的长度,在没有n前缀的数据类型里,这个字串是7个字符的长度,因为一个汉字相当于两个字符。而在有n前缀的数据类型里,同样的测试串长度的函数将会告诉你是5个字符,因为一个汉字就是一个字符。
HelloWorld in autoconf & automake
ok,让我们从hello.c开始
#include <stdio.h>
main()
{
printf("Howdy world!
");
}
当然你可以像下面这样简单的编译这个程序
% gcc hello.c -o hello
% hello
让我们看看使用autoconf和automake的编译方法,首先创建下面两个文件
`Makefile.am'
bin_PROGRAMS = hello
hello_SOURCES = hello.c
`configure.in'
AC_INIT(hello.c)
AM_INIT_AUTOMAKE(hello,0.1)
AC_PROG_CC
AC_PROG_INSTALL
AC_OUTPUT(Makefile)
运行 `autoconf':
% aclocal
% autoconf
上面这一步将产生我们熟悉的`configure'脚本。接下来运行 `automake':
% automake -a
required file "./install-sh" not found; installing
required file "./mkinstalldirs" not found; installing
required file "./missing" not found; installing
required file "./INSTALL" not found; installing
required file "./NEWS" not found
required file "./README" not found
required file "./COPYING" not found; installing
required file "./AUTHORS" not found
required file "./ChangeLog" not found
'-a' 的意思是'add missing standard files to
package',第一次运行automake它会帮我们产生一些标准的文件,这些文件都是为了符合GNU编码标准,但也会出现一些文件找不到的错误,这些文件需要我们自己创建:
% touch NEWS README AUTHORS ChangeLog
再跑一下automake:
% automake -a
这时就会产生`Makefile.in'
现在所有的任务都完成,可以打包分发了,使用方法地球人都知道:
% ./configure
% make
% ./hello