2012年10月22日星期一

国境南边

豆瓣的这篇影评写的太出色了,所以我直接的转了过来了。
=============================
这是一部电影。
这是一个普通的爱情故事,
导演安坂石给我们讲述的只是无数关于错过的故事中的一个,但是剧情却在一个特殊的环境中展开(分裂长达60年的南北朝鲜),这样一来,给我们讲述的就不仅仅是两个小人物的悲欢离合了,而是畸形的时代怎么样去碾碎小人物的命运。如此,电影的主题就陡然丰满起来,透过主人公的遭遇使我们不得不去思考有关民族有关国家等等更高层次的问题,这恐怕才是导演的真正用意所在。
我出生于1975年朝鲜劳动党建党日,名字叫金善浩,万水艺术团圆号演奏者,故乡是平壤。故事平淡的从男主人公的身世开始讲述,直到2001年前所有的剧情都是用发黄的老旧影像来一一呈现,让我们看来,一切都有似曾相识的感觉,广场,礼堂,红领巾,还有领袖去世时抱头痛哭的一家人。
善浩长大成人以后,故事才真正开始,此时时间已经到了2001年,他成为了一名平壤艺术团的圆号演奏员,这个傻傻愣愣令人发笑的小伙子和清纯可爱的军事博物馆讲解员燕华恋爱了。此时有一个情节,当善浩和燕华去玉流宫吃冷面的时候,面对燕华反复的追问,善浩窘迫的拿起空杯子去喝水,憨态可掬的表现让我们无论如何也不能和海报上那个满身疲惫与沧桑,泪盈于眼欲说不能的男人联系到一起,而那时候的燕华,清纯的令人心醉。
故事,不会这么简单……
事情开始起变化了,善浩一家人得知善浩的爷爷并未在战争中战死,而是流落到了韩国组建了新的家庭并且颇有资财,爷爷的秘密信件击垮了善浩全家忠于朝鲜的信仰并且坚定了逃往韩国的信念,他们的逃亡行动在善浩的剧团演奏朝鲜五大革命剧之一《党的好女儿》的同时开始,这不能不说是一个讽刺,而善浩一家也不会想到他们走上的是一条多么坎坷与艰辛的道路。
在大雨滂沱的桥下,善浩和燕华痛哭着拥抱在一起,他们深情的亲吻使我们看起来揪心无比,这样的场面,任谁,也是无法承受的,善浩久久不愿离去,燕华说,快走吧。
逃亡的过程在短促的鼓声和跃动的弦乐中行进,悲壮的旋律使观众的心和善浩一家人面对未知命运的恐慌紧紧的揪在了一起,直到他们冲击中国大使馆通过第三国的方式进入韩国。
幸福,压根就没有打算接纳这个历尽了苦难的家庭,当他们到了韩国之后才知道,善浩的爷爷已经死了,而叔叔一家人也并不欢迎这些从北边九死一生逃过来的亲戚们。善浩所剩下的,只有对燕华苦苦的思念了。
生活,在不得已中依然要继续下去,而国境的南方,此时依然是善浩和燕华幸福的方向,善浩艰难的积攒着能够让燕华逃出朝鲜的钱,可是无常的命运依然不肯放过这个可怜的人,钱被骗了,更可怕的是,生活在一点一点的削弱着这个年轻人的信心与毅力,直到他遇到了那个相貌平平但善良贤惠的女子京珠抚慰了他无助的心。在得知燕华结婚的消息后善浩绝望的哭了,在高高的山上,他就是望的再远,也看不到他的燕华了……
命运,依旧是命运的捉弄,就在燕华成功逃婚并且冒着生命危险孤身一人逃到了韩国的同时,善浩和京珠结婚了。一切,都回不到最初了,面对九死一生得以相见的爱人已为人夫,燕华的心情恐怕是我们常人难以想象的,有一个场景使我印象非常深刻:
黯然而绝望的善浩在公车上看到了燕华的身影,急急的下了车,一对苦人在繁华的都市中隔街而望,一辆公车过去,燕华没有上车而是捂着哭泣的嘴快步走远,反应过来的善浩开始朝燕华走去的方向奔跑,他越跑越快,但是却没有追上,这时有石子砸在他的背上,他转过头是燕华,曾经的爱人一边哭一边用石子掷他,善浩不再躲避,上前拥抱着她,燕华在狠狠的捶了善浩几下之后和他紧紧的拥抱在了一起,没有一句台词,只有爱人的泪光和小提琴伤感的音乐,爱情的左右为难是这样的令人唏嘘不已。
那夜,善浩抚摸着燕华逃亡途中腿上留下的枪伤,大颗大颗的泪水从这个饱经沧桑的男人的脸上无声的滑落,此时这个男人的泪水仿佛滴在观众早已被撩拨的忧伤无比的心弦之上,善浩哭着对燕华说:“燕华,我们离开韩国吧。中国也好美国也好,如果他们不接受我们,我们就到可以接受我们的地方,无论哪里都好,只要离开这个地方……”
最终,他们没有一起逃离,所有的承诺都抵不过现实的生活,在影片的最后,善浩携妻带子去照全家福的时候无意中看到了燕华的结婚照,她嫁给了一个警察。面对命运的摆布,又有几个人能如意呢,我们只能默默的接受并不情愿的结局,透过燕华照片中平静而忧伤的眼神,我们看到的更多的是无奈与悲伤。
不负责任的人,永远不会艰于选择,只有重情重意的人,才会为情所困。这部有着村上春树式名字的电影让我们思考的太多。
=====================
没有去看影评里面提到的最段情节,感觉有些痛心,为燕华,更为善浩; 善浩错过了他人生里最真挚的爱,留下的是一生的悔恨。
无论再怎么艰难和遥不可及,都要去坚守自己内心的那份真爱, 那个梦想。

中国十大被占领土

在看到钓鱼岛历史的时候,但到一篇记录中国十大被占领土的文章,真的很震惊,在2012 年的今天,除了历史学家,估计很少有人知道这些了把;    就是想把这些东西记录下来,不指望中国能够将这些失去的领土要出来,但是至少希望现在和以后的中国儿女们记住这些历史。
中华儿女们,中国共有十大未收回领土,请世世代代牢记在心:钓鱼岛,外蒙古,海参崴,库页岛,麦克马洪线,琉球,唐努乌梁海,江东六十四屯,伯力和黑瞎子岛,南沙群岛。
转自天涯杂谈: http://www.tianya.cn/publicforum/content/free/1/2769835.shtml
1、钓鱼岛
位于中国东海大陆架的东部边缘,在地质结构上是附属于台湾的大陆性岛屿。钓鱼岛列岛位于台湾东北120海里处,西东分别距中国大陆 和日本冲绳各约200海里,附近水深100至150米,与冲绳群岛之间隔有一条2000多米深的海沟。自古以来,中国台湾、福建等省渔民一直到岛上从事捕 鱼、采药等生产活动。
自明朝初年起,钓鱼岛列岛就属于中国版图。永乐年间(公元1403至1424年)出版的《顺风相送》一书中就有关于钓鱼 岛列岛的记载,这比日本声称的琉球人古贺辰四郎1884年发现钓鱼岛要早400多年。明朝以后中国许多历史文献对这些岛屿都有记载。在日本1783年和 1785年出版的标有琉球王国疆界的地图上,钓鱼岛列岛属于中国。
19世纪末中日甲午战争爆发前,日本没有对中国拥有对钓鱼岛列岛的主权提出过异议。
1895年4月,清政府被迫签订丧权辱国的《马关条约》,把台湾全岛及其所有附属各岛屿和澎湖列岛割让给日本,这以后在日本才有了”尖阁群岛”(即钓鱼岛列岛)之说,而在此之前,日本的地图一直是用中国的名称标定钓鱼岛列岛。
钓鱼岛自古以来就是中国的领土,这是无可争辩的事实。至今仍然是中日摩擦的焦点。
2、北疆外蒙古
基辅罗斯为蒙古旋风所灭,沙俄为了报仇雪恨,在侵占西伯利亚后就一直积极渗透外蒙古。1917年前外蒙古大公与沙俄互相勾结,企图脱离中国。
十月革命后,列宁提出在中苏之间建立一个缓冲国,无奈当时中国北洋军阀政府出兵外蒙不得不搁置。
1939年日本关东军发动诺门坎战役,侵入外蒙,被朱可夫全歼。随后外蒙在苏联红军策划下建立所谓”蒙古人民共和国”。
1941年苏日签订臭名昭著的《苏日互不侵犯条约》,苏日互相承认伪满洲国与伪蒙古国主权互不侵犯,这是地地道道的瓜分中国。
1945年罗斯福为了换取苏联撕毁《苏日互不侵犯条约》、出兵日本,出卖了中国,迫蒋介石承认”维护蒙古人民共和国现状。”(宋子文宁死不承认外蒙独立,在《中苏友好同盟条约》上签字的是蒋经国。)
外蒙自独立以后就没有发展起自己独立的军队与重工业,完全被俄化,中苏分裂时完全支持苏联,允许苏军进驻,并配合苏军积极挑衅我国。苏联灭亡后又一头扎 进美国的怀抱,与布什打得火热。假如他们还是中国人,真的可以宣判他们为无耻的汉奸。假如他们算是蒙古人,伟大的成吉思汗在天有灵,看见曾经征服世界的民 族沦为世界霸权的奴隶,真的会死不瞑目。
外蒙面积1,564,116平方公里,土地辽阔,可利用土地面积为15646.64万公顷,其中,农牧业用地面积占80%;森林面积10%;水域面积占1%。
矿产资源丰富,现已探明的有煤、铜、钨、萤石、金、银、钼、铝、锡、铁、铅、锌、铀、锰、磷、盐、石油等80多种矿产,其中煤蕴藏量约500-1520 亿吨。此外,萤石蕴藏量约800万吨、铁20亿吨、磷2亿吨、铜800万吨、钼24万吨、锌6万吨、金3000吨、银7000吨、石油15亿桶。其中,额 尔登特铜钼矿已列入世界十大铜钼矿之一,位居亚洲同类企业之首。
森林面积为1530万公顷,森林覆盖率为10%。木材总蓄积量为12.7亿立方米。
河流总长6.7万公里,平均年径流量为390亿立方米,其中88%为内流河。湖泊水资源量达1800亿立方米。
因为自然原始生态的保存完好,广阔的土地上保存有大量野生动物,其中许多在世界范围都是罕见的。从上世纪九十年代起,政府注重保护自然资源及生态环境, 采取措施拯救濒危野生动物,先后建立50个自然保护区。辽阔的蒙古草原、戈壁、山地是野生动物的乐园。主要珍稀动物有戈壁熊、野马、野骆驼、野驴、野马、 黄羊等。其中戈壁熊属于世界级濒危物种,仅有30多只;黄羊有80多万只,占世界的80%以上。
3、北疆第一港—–海参崴
海参崴位于乌苏里江以东,是一个冻港(也有资料称不冻港),自古历来就是中国的领土。准确的讲,不能把海参崴与乌苏里江以东包括库页岛在内的地区孤立起 来,海参崴是这一地区的行政中心。1856年中俄签订《瑷珲条约》,规定乌苏里江以东地区为中俄”共管”,海参崴也就被”共管”了!但到1860年 (2012年9月8日至9日, 第20次亚太经合组织领导人非正式会议,在这里举行(官媒称俄罗斯远东城市符拉迪沃斯托克)。相信细心的观众,一定看到了画面上几次出现的这四个让俄国人 骄傲,而让中国人屈辱的阿拉伯数字)中俄签订《北京条约》时,”共管”也被取消了,海参崴成了沙俄的领土,被改了一个对中国极具侮辱性的名字—符拉迪 沃斯托克(意即征服东方!汉语拼音:hǎi shēn wǎi;俄语:Владивосток,拉丁转写:Vladivostok )
满清王朝出卖海参崴,激起了国人的愤怒。许多人民尤其是居住在海参崴的中国同胞不但痛恨沙俄,从此也开始痛恨满清王朝。但从此,他们只能做沙俄的臣民!
目前有大量中国文物目前列于海参崴博物馆,众所周知的明朝永宁寺碑、清朝吴大徽所立的兴凯湖堪界纪事铜柱都陈列于此。
1999年12月9-10日,中俄两国元首签定了《中华人民共和国政府和俄罗斯联邦政府关于中俄国界线东西两段的叙述议定书》,以法律条文形式,彻底结束了中俄两国世代300多万平方公里的领土相争。从此,海参崴三个汉字,逐步淡出并消失在官媒。
4、中华故土–库页岛
库页岛是中国最大的岛屿,位于黑龙江出海口之东,东面和北面临鄂霍次克海,西面隔鞑靼海峡与大陆相望。南隔宗谷海峡 与日本接壤。南北长达984公里,东西宽6-160公里,面积7.64万平方公里,相当于两个台湾岛。库页岛自古以来就是中国的领土,世界上最早知道库页 岛的是中国人。而从中国金代开始,库页岛即归中国管辖。
1689年的《中俄尼布楚条约》亦规定黑龙江以北、乌苏里江以东包括库页岛在内的地区,都是中国的领土。
1840年鸦片战争后,中国清朝走向衰落。沙俄在强迫中国签订《中俄瑷珲条约》后,又以调停中英法第二次鸦片战争为借口,强迫中国签订《北京条约》,将 黑龙江以北、乌苏里江以东包括库页岛在内的共100多万平方公里的领土割让与俄国!中国东北美丽的大片河山、中国最大的岛屿,从此落入北极熊之口!
5、麦克马洪线
在东经92度至97度之间的约9万多平方公里的喜马拉雅山脉南坡,可是一块风水宝地,不要以为这里属喜马拉雅山脉就尽是些冰雪满野的荒漠。在夏季,由于 迎着从印度洋上吹送来带着大量水分和热量的西南季风,这里温暖而多雨,年平均降水在9000毫米以上!是世界上降水量最大的地区之一,可种植许多亚热带作 物,肥沃得有西藏的”江南”之称,想不到吧?
这块面积巨大得相当于浙江省而又富饶的地域,却是世界上人口最多的两个发展中国家存在主权争议的地区。
在1913年10月在印度北部西姆拉有的一个会议。参加会议的有中国政府的代表、英国政府代表及英印政府人员和中国”西藏地方”的代表,主要讨论中国和 (英属)印度的边界问题。由于(袁世凯)北京政府忙于征讨南方革命力量(孙中山的”二次革命”)和各方意见分歧,根本谈不成什么协议。其实,协议只不过是 英国将攫取到手的权益合法化的形式而已,何况英国侵略我国西藏地方的野校本就不受什么协议的束缚。
在1914年的3月24日,(英)印度殖民 政府外务大臣享利?麦克马洪(英国政府代表)竟背着当时与会的中国政府代表,私自同西藏地方代表在印度新德里以秘密换文的方式炮制了所谓的”中印边界 线”,即”麦克马洪线”,这条分界线与此前国际上习惯认定并在各种官方(包括英国)出版物和地图上一直沿用的分界线不同,它大大向西藏纵深推进,把原本在 西藏境内资源最丰富的九万多平方公里划进了大英帝国的印度殖民地,将中国西藏地方历来有效行使统治权的地方向北压缩了一百多公里。
正是这种将国家领土的私相授受,历届中国政府都不承认这条线的合法性。而英国人在西姆拉会议之后二十年时间,出于担心合法性不足,一直没敢公开宣布这个”条约”,也没有在英国出版的地图上改变中印边界的传统划法。
然而,一失足成千古恨!在1962年10月的中印战争中,中国在失地尽复的情况下,将军队悉数撤回至实际控制线后20公里,不啻于在事实上承认麦线存在 或有效。其时我国国力落后,在西藏没有建设铁路,后勤问题非常严重,前线部队没有补给。几个月运上来的炮弹只能打两小时,故不得不后退。
而达赖率领十万藏人叛国之后,为了换取印度庇护,作为”西藏领袖”主动承认麦线有效!他的祖先格萨尔王曾经征服了印度,他却甘心做印度的一条狗。他是中国人?还是西藏人?还是印度人?还是美国人?还是四不像?
1987年印度人正式在麦线建邦,又回到了那里,耕作建设,繁衍生息,已成了六、七百万新一代印度人除此地之外已无别的地方是他的”家”的一块土地,再收回,很难。
6、琉球—中国的土地
琉球自古以来就附属中国,最早在史书上关于琉球的记载可追溯到千年前的隋朝,那时中原与琉球的商贸发展、人民往来已十分活跃。朝廷曾派出大臣朱宽劝说琉 球王进贡臣服隋帝。另一记载是十四世纪,明太祖年间中国的又一鼎盛时期,琉球王正式向朝廷进贡,接受中国保护和册封,派出大量学生学习吸收中原的文明文 化,和朝鲜、越南、缅甸、西藏一样成为中国附属国,即”tributary”,它不同于近代西方”colony”殖民地,但类似于中古欧洲农业文明和”奥 匈帝国”时期的”进贡国”或中世纪罗马教皇统治下的”statthinstates”(国中之国)”,所以,西方在文化上是不难理解这一现象的,西方原则 上视之为一个国家。这样一直过了两百多年,到了一六零二年,日本的”萨摩藩侯”就象当时的日本海盗”倭寇”偷袭中国沿海一样,武力胁迫琉球归为”藩属”, 在遭到反抗后,于一六零九年派岛津家久,率兵攻入琉球,俘虏琉球王,派兵监督琉球内政四十五年。
一六五四年琉球王终于摆脱了萨摩藩的控制,感 念中国的厚道皇恩,主动遣使臣到中国请求册封。当时的大清康熙皇帝封琉球王为尚质王,规定两年进贡一次。此后又是二百多年,尚质王朝贡不绝,采用中国年 号,沿用汉唐文化,称中国为父国,他们之间的关系类似于西方”父子国(Affiliated、affiliation)”。这种状况一直持续到近代,欧洲 列强开始远征亚洲。
十九世纪七十年代(1868),日本”明治维新”运动已经开始,雷厉风行。在经济开放、教育普及和社会西化方面取得巨大进 展,但随之而伴生的爆发心理和军阀执政的结果,导致这个国家产生了对外野蛮武力扩张的狼子野心。就在这时,发生琉球渔民在台湾遇难的”台湾事件”,给了日 本一个借口。
一八七一年琉球居民六十六人航海遇风飘到台湾,被台湾原住民杀害五十四人,余十二人被中国的台湾政府保护,送回琉球,被杀五十四 人台湾当局则不过问。这时候日本则以”保护国民”为借口向中国交涉,遭到中国的严词拒绝,大清总理衙门大臣毛旭熙说”二岛具我属土,属土之士相杀,裁决固 在于我,何预贵国事,而繁为过问”日本则从毛的”杀人者结属生番,故旦置之化外,未便穷洽”中,断章取义诡辩硬说中国承认琉球和台湾不属于中国,进一步无 中生有地编造:琉球从一六零二年起已是日本岛津藩(萨摩藩)的”藩属国”。
日本以此为借口于一八七三年,兵临琉球,废除国王,另立傀儡。第二 年又派陆军中将西乡从道率兵三千登陆台湾,大肆攻掠,并披荒屯田,备赖下来不走了。日本军阀山县有棚还提出一个野心勃勃的”外徵之策”,企图夺取整个台 湾。大清闻讯,派沈保桢统兵万人紧急赴台,并决心死战。日本见大事不妙才肯”和谈”,威逼敲诈腐败愚蠢的大清签下丧权辱国的《北京专约》,清廷竟然承认日 本此举为”保民益举”,还赔偿日本白银五十万两。
中日关系的近代史上,丧权辱国的屈辱事件,自此一发而不可收。
7、唐努乌梁海
唐努乌梁海地处外蒙古西北部,北靠萨彦岭,南抵唐努山,是位于两山之间的狭长地带,总面积约17万平方公里。唐努乌梁海实际 上应分为三部分:”俄罗斯联邦图瓦共和国”、图瓦共和国以西直属俄罗斯的部分地区、蒙古”库苏古尔省”。但由于后两部分事实上已没有了”唐努乌梁海”的痕 迹,因此,通常所指的唐努乌梁海地区实质上是俄罗斯联邦图瓦共和国。
唐努乌梁海自古以来就是中国领土。早在汉代就有中华民族活动的痕迹。唐代 为都播地,归安北都护府管辖,已被正式纳入我国版图。北宋时属辖嘎斯地,南宋时属西辽政权,称谦谦州。元朝时属岭北行省,称益兰州。明代属蒙古瓦剌部(当 时的兀良哈部还远在石勒喀河流域)。清代才被称为唐努乌梁海,为外蒙古扎萨克图汗辖地。根据1727年《布连斯奇条约》规定,中俄在此以萨彦岭为界。清政 府在此地设置5旗46佐领,归乌里雅苏台将军管辖。
沙俄从17世纪开始,一直妄图吞并我包括唐努乌梁海的蒙古地区,但直到19世纪中叶,由于 大清王朝的强大。它的侵略和吞并阴谋都未能得逞。作为边界条约的一部分,《布连斯奇条约》基本上是一个平等条约,它规定了中俄(俄国人称为”俄清”)中段 边界的走向。1840年鸦片战争爆发后,清朝开始腐败和衰落,而西方列强却蒸蒸日上(相比之下,沙俄却也是比较腐败和野蛮的)。1860年,由于中国在第 二次鸦片战争中的失败,沙俄以”调停”为名,强迫清朝签订不平等的《中俄北京条约》,不但强迫清政府承认了《中俄瑷珲条约》的合法性,而且将乌苏里江以东 中俄”共管”之地全部吞并。
根据《中俄北京条约》第二款,沙俄莫名其妙地提出要堪分中俄西北边界事宜。1864年10月7日,沙俄强迫中国签 订《中俄堪分西北界约记》,通过欺骗、恫吓、武力占领等手段,侵占中国西北新疆和外蒙古地区44万平方公里的领土!根据这个条约,沙俄侵占了西北定边左副 将军所属乌梁海十佐领及科布多所属阿尔泰淖尔乌梁海二旗,这就是我在上文提到的”图瓦共和国以西直属俄罗斯的部分地区”。以后签订的《科布多界约》和《乌 里雅苏台界约》进一步完善了沙俄对这些地区的侵占!
俄对唐努乌梁海的第二次侵略和吞并出现在1911-1944年。1911年辛亥革命爆发, 长期受到沙俄威逼利诱的外蒙古王公乘机宣布”独立”,自立”大蒙古国”。本来叛乱集团准备占领包括唐努乌梁海的整个外蒙古地区,但沙俄却将唐努乌梁海排除 在”大蒙古国”之外,声称沙俄在唐努乌梁海有特殊利益,必须对该地区进行直接控制。这样,外蒙古叛乱集团在脱离祖国的罪恶活动中,又出卖了17万平方公里 的中国领土!
8、江东六十四屯
1856年中俄签订《瑷珲条约》时,明确规定:中国人在江东六十四屯拥有永久居住权,中国 政府对江东六十四屯拥有永久管辖权!实际上,这是中国在丢了黑龙江以北60多万平方公里国土后争得的一点”面子”,其实这也是狡猾的北极熊对清朝官员玩的 一把文字游戏:什么居住权?管辖权?都不是主权,主权在我!中俄两国规定以黑龙江为界,要争只能争边界以主航道中心线为界还是以航道的哪一侧为界,而不可 能争到远在黑龙江北侧岸上的江东六十四屯!清朝官员被欺骗玩弄了不说,还自鸣得意的以为已经给了海兰泡和江东六十四屯的中国同胞一个满意的交代!
江东六十四屯,位於精奇里江以南,黑龙江以北的三角洲地带,面积约8000多平方公里,是根据《瑷珲条约》第三条规定孤悬于黑龙江以北归我国管辖的地 方。那里的住民都是不肯附俄的山东籍义民,他们在那里渔牧耕织,可以独立生活,才得以仍归我有,并且规定「俄罗斯人不得侵犯」。但《瑷珲条约》之后,俄寇 并不尊重其存在,他们用种种卑鄙手段困扰住民,希望他们受不住困苦而逃回黑龙江南。但我们的同胞们誓死不离故土,一直挺了下来。
一九○○年义 和团之乱发生后,我们所要杀的对象虽然并无俄帝在内,但俄帝终是「洋人」,竟藉「灭洋扶清」为口实,进兵占领东北!东北都被占了,江东六十四屯更不可能幸 免。于是,俄帝用大兵在七月廿四日将江东六十四屯围住,把十六万多居民奸的奸了,杀的杀了;最后把剩下的男子集中在黑龙江边,用子弹逼入江中,一一射杀或 溺毙,偌大的黑龙江竟一时为之染红,这就是列宁曾经谴责的”江东六十四屯大惨案”!
俄帝就这样把江东六十四屯豪夺以去,以后没有在任何条约中提到它,那地方不声不响地变了颜色!
9、伯力和黑瞎子岛
黑龙江的北岸,乌苏里江东岸,有一串熟悉的地名:库页岛、庙街、海参崴、双城子、尼布楚、雅克萨、海兰泡、外兴安岭,还有那令人刻骨铭心的江东六十四屯!而可能最容易让人遗忘的,可能就是现在被成为”哈巴罗夫斯克”的伯力和被称为”大乌苏里岛”的黑瞎子岛了!
在黑龙江和乌苏里江汇合处,有一个岛屿,它的名字叫黑瞎子岛,面积仅次于上海的崇明岛!它也有一个外国名字,叫”大乌苏里岛”。记住,这个岛屿位于黑龙 江以南,乌苏里江以西,根据中俄任何平等的和不平等的条约,这个岛无疑都应该属于中国。然而,现在这个岛屿已被俄帝占领!
有人为了获得俄罗斯 的短暂利益,出卖了这个自古属于中国的岛屿!他们有一个办法,那就是用外蒙古和唐努乌梁海模式”解决”国人的黑瞎子岛情结。所谓”外蒙古和唐努乌梁海模 式”,就是悄悄的放弃那片领土,然后在报刊、杂志、媒体、历史教科书上只字不提,让国人渐渐地遗忘它!这种方式已经取得了预期的效果:大陆13亿人口,现 在还有多少人记得外蒙古和唐努乌梁海应该是我国的领土?现在,这种模式又用到了黑瞎子岛”身上”,要不了多久,将不会有几个中国人会记得自己的国家还应该 拥有这样一个美丽的岛屿!
黑瞎子岛是一块沃土,原本与三江平原的大陆相连,后来由于两江的冲刷,逐步远离大陆,成为岛屿。黑瞎子岛的一切,都 与三江平原是那么的相似:原来也是”北大荒”。后来在中国人开仆”北大荒”的年代,俄罗斯人的紧迫感加剧,于是也有大批俄罗斯人侵入黑瞎子岛。情况对于中 国才越来越紧迫,如果50年不收复黑瞎子岛,它将真正成为俄的领土!
2008年7月21日,中俄两国外长共同签署了《中华人民共和国政府和俄 罗斯联邦政府关于中俄国界线东段补充叙述议定书》及其附件。这标志着中俄长达4300多公里的边界全线勘定。中国收回黑瞎子岛约170多平方公里,而俄罗 斯则保留东半部分。为两国勘界工作画上句号,同时在法律上确定两国之间的边界。
在黑瞎子岛以东,有一个城市,它就是我们萦牵梦绕的故土伯力。 1840年后,沙俄的探险家哈巴罗夫窜入了这个城镇,于是在1856年《瑷珲条约》签定后,这个城市被正式命名为”哈巴罗夫斯克”!现在,这座城市是帝 俄”阿穆尔州首府”,居民除少数犹太人和华人以外,绝大多数是俄罗斯人—-它已经完全被帝俄殖民占领了!
伯力的重要性就在于它紧邻黑瞎子岛,是黑龙江和乌苏里江的门户。俄帝拥有这座城市,就扼住了我国通过黑龙江出海的通道;而一旦伯力失守,黑瞎子岛就将成为我国收复的第一块失地—如探囊取物!我国军队就可以顺黑龙江直下,直取庙街,过鞑靼海峡,直取库页岛!
此外,帝俄通往海参崴的西伯利亚大铁路以伯力为咽喉,一旦伯力失守,乌苏里江以东大片土地就将会被中国收复!帝俄是知道这层厉害关系的,所以,它不但重兵把守他们的门户”哈巴罗夫斯克”,而且还坚决不愿放弃黑瞎子岛这个本来应该划归中国的岛屿。
10、南沙群岛
当年汉朝通西域打通丝绸之路时,也曾派遣使臣南下大洋。使臣回汉后禀报朝廷,自称到了天涯海角,一片汪洋,不见陆地,惟有一些珊瑚虫尸体形成的礁石。他将其命名为”曾母暗沙”!
南沙群岛是我国南海诸岛中位置最南、岛礁数目最多、分布面积最广的一组珊瑚礁群。西面隔南海主要航道与越南相望;东面隔南海辅助航道与菲律宾相邻;最南面的曾母暗沙距马来西亚和印度尼西来只有几十海里;北面的太平岛距西沙群岛约400海里。
南沙群岛战略地位十分重要,可以说它是控制南中国海的钥匙。而且,其周围海域资源十分丰富,仅石油蕴藏量就达200亿吨,确系中华民族繁衍发展所需的一 个资源宝库。我国根据1982年《联合国海洋法公约》宣布的领海、大陆架和专属经济区的总面积约为300万平方公里,只相当于我国陆地面积的三分之一,而 美、日、菲、越、印尼、印度等国宣布的管辖海域面积却相当于本国陆地面积的3倍以上,甚至达10倍。南沙群岛由230多个岛、礁、滩和沙洲组成,虽然单个 岛礁的面积很小(最小的太平岛只有0.43平方公里),但是分布面积却达24.4万平方海里,约80多万平方公里,占我国海洋国土总面积的三分之一以上。
后记:
1957年3月,新中国割让白龙尾岛(浮水洲岛)给越南。(注:北部湾上有两个白龙尾,其中一个‘租借’给越南的白龙尾(京族三岛)在广西。北部湾上的另一个白龙尾岛(浮水洲岛)于1957年割让给越南,2004年,中越签署协议,正式将岛屿划归越南。)
1960年中缅两国签署《中缅边界条约》,在中缅边界北段,中国割让云南果敢地区,云南西部尖高山以北,江心坡,孟养、野人山(克钦山区)和勐卯三角地 区(南坎地区),佧瓦、麻栗坝、铁壁关,高贡黎山以西等共计18万平方公里的土地给缅甸,双方基本以高黎贡山脉分水岭为界。
1961年中国与尼泊尔签订《中尼边界条约》,中国将珠穆朗玛峰的一半割让给尼泊尔,割出去的领土大约1万平方公里。
新中国将西藏边境部分领土(今不丹东南角)割让给不丹。
1962年中华人民共和国和朝鲜民主主义人民共和国签署《中朝边界条约》,中国将长白山天池的一半多大约52%(另有说法是53% )和鸭绿源头的天池分水岭东侧的三座山峰割让给朝鲜。
1962年中华人民共和国与蒙古国签订界约,将诺门罕谷地、察哈尔北境、新疆北塔山割让给蒙古国。结果蒙古国从中国取得比山东省还大的领土,在内蒙东部得到孔社令- 二连浩特- 丹拉拉克一线以北,在新疆得到阿尔泰山脊至北塔山以东地区共约16万平方公里的土地。
1963年11月22日,时任中国外交部长陈毅和阿富汗内务大臣阿布杜?卡尤姆在北京签订了《中华人民共和国和阿富汗王国边界条约》,1965年中国将瓦罕帕米尔地区割让给阿富汗。
1963年中国与巴基斯坦签订界约,中国将喀喇昆仑山的主峰乔戈里峰的一半,达拉克地区,新疆坎巨提地区割让给巴基斯坦。
1991年5月16日中华人民共和国和苏联签署《中苏国界东段协定》(即五?一六卖国协定),承认江东六十四屯为苏联领土。
1994年9月3日,中华人民共和国与俄罗斯联邦签署了《中华人民共和国和俄罗斯联邦关于中俄国界西段的协定》,承认唐努乌梁海17万平方公里的土地为俄罗斯领土。
1999年12月30日,中越签署《中国和越南陆地边界条约》,中国将广西法卡山割让给越南。
2001年7月16日,中国国家主席江泽民与俄罗斯总统普京,在莫斯科克里姆林宫签署《中俄睦邻友好合作条约》,承认海参崴及邻近远东地区不再为中国的 领土。(注:1945年苏联与中国国民政府签署谅解备忘录,苏联同意在50年以内(1995年之前)撤走苏联驻海参崴的 所有驻军,中国政府将在1995恢复对海参威的主权,并开放海参威为自由港,对苏联免税。)
2002年5月27日,中国国家主席江泽民和塔吉 克斯坦国家元首签订《中华人民共和国和塔吉克斯坦共和国关于中塔国界的补充协定》,划分了乌孜别里山口以南的争议领土。此次划界基本上是以萨雷阔勒岭山脊 为界,中国承认萨雷阔勒岭以西约2万7千500平方公里的帕米尔地区属于塔吉克斯坦。
2002年5月,中国与吉尔吉斯坦签订边界协议,将有争议的汗腾格里山地区作三、七开,七分划给吉尔吉斯坦,三分划给中国,划给吉尔吉斯坦2100平方公里,中国900平方公里。
2004年10月,中俄达成《中俄国界东段补充协定》,中国割让半个“黑瞎子岛”给俄国。

shell学习笔记–paste 命令

paste用法
c u t用来从文本文件或标准输出中抽取数据列或者域,然后再用p a s t e可以将这些数据粘贴
起来形成相关文件。
粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。
p a s t e将按行将不同文件行信息放在一行。缺省情况下, p a s t e连接时,用空格或t a b键分隔新行中不同文本,除非指定- d选项,它将成为域分隔符。
p a s t e格式为;
paste -d -s -file1 file2
选项含义如下:
-d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
-s 将每个文件合并成行而不是按行粘贴。
- 使用标准输入。例如ls -l |paste – ,意即只在一列上显示输出
[root@localhost my_shell]# cat per1
ID897
ID666
ID982
[root@localhost my_shell]# cat per2
P.Jones
S.Round
L.Clip
基本p a s t e命令将之粘贴成两列
[root@localhost my_shell]# paste per1 per2
ID897 P.Jones
ID666 S.Round
ID982 L.Clip
指定列
通过交换文件名即可指定哪一列先粘:
[root@localhost my_shell]# paste per2 per1
P.Jones ID897
S.Round ID666
L.Clip ID982
使用不同的域分隔符
要创建不同于空格或t a b键的域分隔符,使用- d选项。下面的例子用冒号做域分隔符
[root@localhost my_shell]# paste -d: per1 per2
ID897:P.Jones
ID666:S.Round
ID982:L.Clip
要合并两行,而不是按行粘贴,可以使用- s选项。下面的例子中,第一行粘贴为名字,第二行是I D号。
[root@localhost my_shell]# paste -s per1 per2
ID897 ID666 ID982
P.Jones S.Round L.Clip
paste命令管道输入
p a s t e命令还有一个很有用的选项( -)。意即对每一个( -),从标准输入中读一次数据。使用空格作域分隔符,以一个4列格式显示目录列表。方法如下:
[root@localhost my_shell]# ls | paste -d: – - – # 用:分割文件,且每行显示三个文件
a:a.UC:b
backfunc:b.UC:c
…..
也可以以一列格式显示输出:
[root@localhost my_shell]# ls |paste -d: -
a
a.UC
b
backfunc
b.UC

perl 中的代码复用

在 perl 里面,模块是实现代码复用的主要方法,作为一个 perl 程序员,掌握如何写一模块是很有必要的。 首先说一下 do  require  和 use 的使用。
Perl中的文件包含,有3中方法:do, require, 以及use
1. do:
1)形式:
do ‘filename’;
说明:
这里filename需要添加单引号,否则会出错;
filename可以为任何后缀的,甚至没有后缀,不要求是pl或者pm等。
2)关于do的理解:
do ‘filename’
首先需要读入filename的文件(如果读入失败,返回undef而且会设置$!变量);
如果读入成功,然后对filename读入的语句进行编译(如果无法编译或者编译错误,会返回undef而且设置错误信息到$@变量);
如果编译也成功,do会执行filename中的语句,最终返回最有一个表达式的值。
简短表达do ‘filename’的功能,就是能够将filename中的文字全部加载到当前文件中。
3)理解do的用法:
a. 将文件拆分:
main.pl:

use strict;
do ’seperate’; #文件可以以任何后缀命名甚至没有后缀;

seperate:

print ”Hello from seperate file! :-)”;

b. 可以在seperate中定义函数,然后在当前文件中调用:
main.pl

use strict;
do ’seperate’;
show();

seperate:

sub show{
print ”Hello from seperate file! :-)”;
}

c. 可以在seperate中定义package,然后在当前文件中调用:
main.pl

use strict;
do ’seperate’;
Show::show_sentence();

seperate:

package Show;
sub show_sentence(){
print ”Hello from seperate file! :-)”;
}
1;
__END__
#都不需要文件名必须与package的名称相同,而且seperate都不需要pm后缀。
——————————————–
从上面的例子,很容易得到,使用do可以方便地实现文件包含。
更多参看http://perldoc.perl.org/functions/do.html
2. require
参看http://perldoc.perl.org/functions/require.html
1)形式:
require ‘filename’;
require “filename”;
这两种相同,而且和do的使用方法都类似;
require Module;
如 果不加单引号或者双引号的话,后面的Module将被解析为Perl的模块即.pm文件,然后根据@INC Array中搜索Module.pm文件。首先在当前目录下搜索Module.pm的文件(用户自定义的),如果找不到再去Perl的 (@INC contains: C:/Perl/site/lib C:/Perl/lib .)寻找。
如果Module中出现::,如require Foo::Bar; 则会被替换为Foo/Bar.pm
2)关于require使用的解释:
如果使用require ‘filename’或者require “filename”来包含文件的话,使用方法和do完全近似;
如果使用require Module的话,则需要定义Module.pm的文件而且文件中的package要以Module来命名该模块。
main.pl

#!C:perl inperl -w
use strict;
require Show;
Show::show_header();
Show.pm

#Show.pm
package Show;
sub show_header(){
print ”This is the header! ”;
return 0;
}
sub show_footer(){
print ”This is the footer! ”;
return 0;
}
1;
__END__

3. use
参看http://perldoc.perl.org/functions/use.html
1)形式:
use Module;
use只能够使用模块,而且和require的用法相似,需要Module.pm的文件,而且文件中的package需要已Module来命名该模块。
main.pl

#!C:perl inperl -w
use strict;
useShow;
Show::show_header();
Show.pm

#Show.pm
package Show;
sub show_header(){
print ”This is the header! ”;
return 0;
}
sub show_footer(){
print ”This is the footer! ”;
return 0;
}
1;
__END__

2)require和use的区别:
require:
do the things at run time; (运行时加载)
use:
do the things at compile time; (编译时加载)
4. perlmod – Perl modules (packages)
参考http://perldoc.perl.org/perlmod.html
1)  示例:
#Show.pm
package Show;
sub show_header(){
print “This is the header! /n”;
return 0;
}
sub show_footer(){
print “This is the footer! /n”;
return 0;
}
1;
__END__
2)
一般文件名需要和package名称相同,这里为Show;
可以定义变量和函数;
不要忘记1;
以及最后的__END__
3)
在别的文件中,使用require或者use使用模块的时候:
use Show;
#require Show;
Show::show_header();
5. Perl的函数定义及调用:
sub fun_name(){
#…
}
1) 如果定义在使用之前,在使用的时候直接fun_name();即可
2)如果定义在使用之后,之前使用的时候需要使用&fun_name();来调用函数。
6.
小结:
综上,文件包含可以提高代码的复用性,在Perl是实现文件包含可以才去两条路:
1)使用do或者require(带引号的)那种方式;
2)使用require Module或者use Module的模块方式;
两者均可。
7.
#参考资料:
#http://www.the script s.com/forum/thread652009.html
#require: http://perldoc.perl.org/functions/require.html
#use: http://perldoc.perl.org/functions/use.html
#do: http://perldoc.perl.org/functions/do.html
#Perl modules (packages and symbol tables):
#http://perldoc.perl.org/perlmod.html
#Advanced: http://search.cpan.org/%7Enwclark/perl-5.8.8/lib/Exporter.pm
#http://www.perlmonks.org/?node_id=533866

使用 minicpan 搭建自己的本地 CPAN 镜像

备注: 以下文章参考 :http://www.fayland.org/journal/minicpan.html
如果你经常使用 perl 的话,肯定对 cpan 不陌生了,各种各样的模块真的是很方便,但是由于每次下载模块的时候都要经过编译检查校验等一系列的过程,如果有相关依赖的模块没有安装的话,且你的网络不是很好的话,这个过程就会变成的很漫长。 所以在本地建一个 cpan  的镜像,就是很有必要的了。
我们要使用的工具 minicpan 也是 cpan 上的一个模块,使用以下命令进行安装
cpan CPAN::Mini
然后执行以下命令开始进行同步 cpan
minicpan -l /root/cpan -r http://mirrors.163.com/cpan
这个时间可能会比较长,根据网速,有可能需要好几个小时。
———————————————————–
最后说一下我在 .bashrc 里面设置的一些快捷键
alias cpanml=’cpanm –sudo –mirror /root/cpan –mirror-only’
执行 cpanml 从本地的镜像里面安装 cpan 模块,我在这里使用的是 cpanm 来安装模块的
alias updateCpan=’minicpan -l /root/cpan -r http://mirrors.163.com/cpan -f’
这里是定期更新本地 cpan 镜像的模块, 并且支持断点续传功能。

2012年7月6日星期五

解决/usr/bin/ld: cannot find -lxxx错误

编译安装时候可能会出现类似于以下的这样报错,简单地说是可能是在安装系统中选择的包的问题:
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status

解决办法是:

[root@9-104 php-5.2.8]# updatedb
[root@9-104 php-5.2.8]# locate libltdl  //提示/usr/bin/ld: cannot find -lxxx ,查找时候前面加lib:libxxx  住一 第一个l去掉
/usr/lib64/libltdl.so.3
/usr/lib64/libltdl.so.3.1.4
/usr/share/libtool/libltdl
/usr/share/libtool/libltdl/COPYING.LIB
/usr/share/libtool/libltdl/Makefile.am
/usr/share/libtool/libltdl/Makefile.in
/usr/share/libtool/libltdl/README
/usr/share/libtool/libltdl/acinclude.m4
/usr/share/libtool/libltdl/aclocal.m4
/usr/share/libtool/libltdl/config-h.in
/usr/share/libtool/libltdl/config.guess
...
注意拉:
[root@9-104 php-5.2.8]# ln -s /usr/lib64/libltdl.so.3 /usr/lib64/libltdl.so
原理:给查找到的libxxx文件做软链接
ln -s /usr/lib64/libxxx.so.X(X代表数字) /usr/lib64/lxxx.so

2012年7月4日星期三

Ubuntu 字符编码环境设置

在 linux 环境上的编码问题困扰了很长时间,虽然目前还没有彻底的搞懂,但是已经能搞配出自己想要的环境了, 下面是我搜集的一些和编码以及字符集有关系的东西。

国际化(i18n)与本地化(l10)的概念:

  • i18n:国际化,是 internationalization 的缩写,来源于该词的首字母 i 与末字母 n 之间有18个其他字母。国际化主要指的是软件是否能支持多国语言和在多国语言下的表现。比如说某些软件存在不能翻译的字符串或者原文错误、在特定的语言下存在与该语言相关的功能障碍等均属于 i18n 即国际化问题。

  • l10n:本地化,是 localization 的缩写,类似 i18n,l10n 来源于首字母 l 与末字母 n 之间有10个其他字母。本地化多指软件在某一语言上的表现。比如软件的界面和文档翻译就是 l10n 的主要内如,因而存在翻译错误、翻译质量问题或者是翻译程度不佳,都应算作 l10n 即本地化问题。

  • m17n:多语言化,是 multilingualization 的缩写。因为其内容基本被 i18n 和 l10n 覆盖,所以现在已经很少使用,在 ibus-m17n 等软件包名称中可以见到。


locale与国际化、本地化密切相关,通过设定locale,你可以自定义你的系统的语言环境。
locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计 算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。

在终端输入locale,就会看到相关的设置:

LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

这是什么意思呢?
locale把按照所涉及到的文化传统的各个方面分成12个大类,这12个大类分别是:

1、语言符号及其分类(LC_CTYPE)
2、数字(LC_NUMERIC)
3、比较和排序习惯(LC_COLLATE)
4、时间显示格式(LC_TIME)
5、货币单位(LC_MONETARY)
6、信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等(LC_MESSAGES)
7、姓名书写方式(LC_NAME)
8、地址书写方式(LC_ADDRESS)
9、电话号码书写方式(LC_TELEPHONE)
10、度量衡表达方式 (LC_MEASUREMENT)
11、默认纸张尺寸大小(LC_PAPER)
12、对locale自身包含信息的概述(LC_IDENTIFICATION)。

一个地区的locale就是根据这几大类的习惯定义的,这些locale定 义文件放在/usr/share/i18n/locales目录下面。
完全的locale表达方式是 [语言[_地域][.字符集] [@修正值]

  1. zh_CN.GB2312=中文_中华人民共和国+国标2312字符集。

  2. zh_CN.GB18030=中文_中华人民共和国+国标18030字符集。

  3. en_GB.ISO-8859-1=英文_大不列颠.ISO-8859-1字符集

  4. de_DE.UTF-8@euro=德语_德国.UTF-8字符集@按照欧洲习惯加以修正,注意不是de_DE@euro.UTF-8


其中,与中文输入关系最密切的就是 LC_CTYPE,LC_CTYPE规定了系统内有效的字符以及这些字符的分类,诸如什么是大写字母,小写字母,大小写转换,标点符号、可 打印字符和其他的字符属性等方面。而locale定 义zh_CN中最最重要的一项就是定义了汉字(Class“hanzi”)这一个大类,当然也是用Unicode描述的,这就让中文字符在Linux系统 中成为合法的有效字符,而且不论它们是用什么字符集编码的。

怎样设定locale呢?

设定locale就是设定12大类的locale分类属性,即12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG。它们之间有一个优先级的关系:LC_ALL > LC_* >LANG。可以这么说,LC_ALL是最上级设定或者 强制设定,而LANG是默认设定值。

1、如果你设定了LC_ALL=zh_CN.UTF-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从LC_ALL的设定,成为 zh_CN.UTF-8。

2、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*=en_US.UTF-8,并且没有设定LC_ALL的话,那么系统的locale 设定以LC_*=en_US.UTF-8。

3、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*,和LC_ALL均未设定的话,系统会将LC_*设定成默认值,也就是LANG的值 zh_CN.UTF-8。

4、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_CTYPE=en_US.UTF-8,其他的LC_*,和LC_ALL均未设定的话, 那么系统的locale设定将是:LC_CTYPE=en_US.UTF-8,其余的 LC_COLLATE,LC_MESSAGES等等均会采用默认值,也就是 LANG的值,也就是LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=zh_CN.UTF-8。

所以,locale是这样设定的:

1、如果你需要一个纯中文的系统的话,设定LC_ALL= zh_CN.XXXX,或者LANG=zh_CN.XXXX都可以,当然你可以两个都设定,但正如上面所讲,LC_ALL的值将覆盖所有其 他的locale设定,不要作无用功。

2、如果你只想要一个可以输入中文的环境,而保持菜单、标题,系统信息等等为英文界面,那 么只需要设定 LC_CTYPE=zh_CN.XXXX,LANG=en_US.XXXX就可以了。这样 LC_CTYPE=zh_CN.XXXX,而LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=en_US.XXXX。

3、假如你高兴的话,可以把12个LC_*一一设定成你需要的值,打造一个古灵精怪的系统: LC_CTYPE=zh_CN.GBK/GBK(使用中文编码内码GBK字符集); LC_NUMERIC=en_GB.ISO-8859-1(使用大不列颠的数字系统) LC_MEASUREMEN=de_DE@euro.ISO-8859-15(德国的度量衡使用ISO-8859-15字符集) 罗马的地址书写方式,美国的纸张设定……。估计没人这么干吧。

4、假如你什么也不做的话,也就是LC_ALL,LANG和LC_*均不指定特定值的话,系统将采用 POSIX作为lcoale,也就是C locale。

另外LANG和LANGUAGE有什么区别呢?

LANG – Specifies the default locale for all unset locale variables
LANGUAGE – Most programs use this for the language of its interface
LANGUAGE是设置应用程序的界面语言。而LANG是优先级很低的一个变量,它指定所有与locale有关的变量的默认值。
LANGUAGE一般设置为zh_CN:zh或者en_US:en

如果你像我一样用的是英文环境,突然想看一下某个程序的中文界面怎么办呢,很简单,在shell下

export LANGUAGE="zh_CN:zh" LANG="zh_CN.UTF-8"

 

2012年6月19日星期二

perl bless 的理解

从网上找了一篇不错的讲解 perl 里面的 bless 功能的文章

注: 以下文章摘自: http://www.cnblogs.com/Cmpl/archive/2011/08/17/2142841.html

程序说明

网上的很多教程都没有把bless讲清楚,我通过摸索和实验,终于明白bless是什么意思了,简单的讲:

  • bless有两个参数:对象的引用、类的名称。
  • 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键。
  • 所谓bless就是把 类型信息 赋予 实例变量。

程序包括5个文件:
person.pm :实现了person类
dog.pm :实现了dog类
bless.pl : 正确的使用bless
bless.wrong.pl : 错误的使用bless
bless.cc : 使用C++语言实现了与bless.pl相同功能的代码

person.pm

  1. #!/usr/bin/perl -w
  2. package person;
  3. use strict;
  4. sub sleep() {
  5.         my ($self) = @_;
  6.         my $name = $self->{"name"};
  7.         print("$name is person, he is sleeping\n");
  8. }
  9. sub study() {
  10.         my ($self) = @_;
  11.         my $name = $self->{"name"};
  12.         print("$name is person, he is studying\n");
  13. }
  14. return 1;

复制代码


dog.pm

  1. #!/usr/bin/perl -w
  2. package dog;
  3. use strict;
  4. sub sleep() {
  5.         my ($self) = @_;
  6.         my $name = $self->{"name"};
  7.         print("$name is dog, he is sleeping\n");
  8. }
  9. sub bark() {
  10.         my ($self) = @_;
  11.         my $name = $self->{"name"};
  12.         print("$name is dog, he is barking\n");
  13. }
  14. return 1;

复制代码


bless.pl

  1. #!/usr/bin/perl =w
  2. use strict;
  3. use person;
  4. use dog;
  5. sub main()
  6. {
  7.         my $object = {"name" => "tom"};
  8.         # 先把"tom"变为人
  9.         bless($object, "person");
  10.         $object->sleep();
  11.         $object->study();
  12.         # 再把"tom"变为狗
  13.         bless($object, "dog");
  14.         $object->sleep();
  15.         $object->bark();
  16.         # 最后,再把"tom"变回人
  17.         bless($object, "person");
  18.         $object->sleep();
  19.         $object->study();
  20. }
  21. &main();
  22. # 程序运行时输出:
  23. # tom is person, he is sleeping
  24. # tom is person, he is studying
  25. # tom is dog, he is sleeping
  26. # tom is dog, he is barking
  27. # tom is person, he is sleeping
  28. # tom is person, he is studying

复制代码


bless.wrong.pl

  1. #!/usr/bin/perl =w
  2. use strict;
  3. use person;
  4. use dog;
  5. sub main()
  6. {
  7.         my $object = {"name" => "tom"};
  8.         # 没有把类型信息和$object绑定,因此无法获知$object有sleep方法
  9.         $object->sleep();
  10.         $object->study();
  11. }
  12. &main();
  13. # 程序运行输出为:
  14. # Can't call method "sleep" on unblessed reference at bless.wrong.pl line 10.

复制代码


使用c++实现bless的功能

c中的代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. struct object {
  5.         char name[16];
  6. };
  7. struct person {
  8.         char name[16];
  9.         void sleep() { printf("%s is person, he is sleeping\n", this->name); }
  10.         void study() { printf("%s is person, he is studying\n", this->name); }
  11. };
  12. struct dog {
  13.         char name[16];
  14.         void sleep() { printf("%s is dog, he is sleeping\n", this->name); }
  15.         void bark() { printf("%s is dog, he is barking\n", this->name); }
  16. };
  17. #define bless(object, type) ((type*) object)
  18. int main()
  19. {
  20.         struct object * o = (struct object *) malloc(sizeof(struct object));
  21.         strcpy(o->name, "tom");
  22.         // 先把"tom"变为人
  23.         bless(o, person)->sleep();
  24.         bless(o, person)->study();
  25.         // 再把"tom"变为狗
  26.         bless(o, dog)->sleep();
  27.         bless(o, dog)->bark();
  28.         // 最后,再把"tom"变回人
  29.         bless(o, person)->sleep();
  30.         bless(o, person)->study();
  31.         return 0;
  32. }
  33. // 程序运行时输出:
  34. // tom is person, he is sleeping
  35. // tom is person, he is studying
  36. // tom is dog, he is sleeping
  37. // tom is dog, he is barking
  38. // tom is person, he is sleeping
  39. // tom is person, he is studying

复制代码

关键的地方就是把对象o的类型转变为person类型和dog类型

2012年6月7日星期四

备忘:centos 快速安装开发包

在 centos 的安装的最后阶段, 会提示是否要安装对应的开发包, 每次我都是直接跳过的, 可是安装完毕的时候,我有懒得一个一个的去安装, 今天看到了一个比较快捷的安装的方式,很方便,所以 mark 一下:
yum groupinstall "Development Libraries" "Development Tools"

2012年6月1日星期五

rpm 包研究(一)

说一下最近遇到的一个问题, 我在 RPM 包里面加了一个脚本文件里面使用了一些模块,打包完包的时候,发现 rpm 包的依赖关系里面有了这些模块, 这就要求我在其他的设备上安装的时候要求必须满足这些依赖关系, 我在想如何跳过这些依赖关系。

首先说一下在打 rpm 包的时候,什么情况下脚本文件会被 rpm 去检查依赖关系, 经过实践发现主要是处在文件的权限上,如果脚本文件具有可执行权限的话,在打 rpm 包的时候就会被检查相关的依赖关系,脚本的文件名后缀并没有产生影响。

另外再说一下, 比如我只想跳过某些的依赖包的检查,比如说很常用的一些库,我不想让 rpm 在安装的时候去做检查,这个时候就需要使用另外一个办法了:在你的 spec 文件里面加入这样一段代码

%prep
%setup -q -n Foo-%{version}

cat << \EOF > %{name}-prov
#!/bin/sh
%{__perl_provides} $* |\
sed -e '/perl(unwanted_provide)/d'
EOF

%global __perl_provides %{_builddir}/%{name}-%{version}/%{name}-prov
chmod +x %{__perl_provides}


cat << \EOF > %{name}-req
#!/bin/sh
%{__perl_requires} $* |\
sed -e '/perl(unwanted_require)/d'
EOF

%global __perl_requires %{_builddir}/%{name}-%{version}/%{name}-req
chmod +x %{__perl_requires}



具体参照这个页面


http://fedoraproject.org/wiki/EPEL:Packaging#Perl_Provides_and_Requires_Filtering


当然这个只是针对比较老的 rpm 版本,如果是新版本的话, 会有更好的解决的办法。


http://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering


再说一下这两个文件:


 

/usr/lib/rpm/perl.req 
/usr/lib/rpm/perl.prov

这两个文件都是一个 perl 脚本, 主要是检查 rpm 里面的每个文件的依赖(perl.req), 和所提供的模块 (perl.prov)