2010年3月25日星期四

翻旧blog

    因为工作需要,贝壳今天专门翻了翻以前的blog,从第一篇到现在的。从一个惨绿少年变成现在的半大叔模样,几个感触。
    一,时间越来越少。以前基本是几个月翻一遍blog的,现在已经很久没看过了——哪怕是自己的blog。
    二,blog越来越少,围观者越来越少。以前一天N篇,看的人也很多。现在N天不见一篇,除了小黄姐姐,阿丁,鲸小姐,基本没了。
    三,工资越来越高,朋友越来越少。除了上文提到的几个,基本——没消息了。
    四,文字从可爱风到呆板的技术风。以前的文字看上去怎么就那么无忧无虑呢?现在写的都好呆板啊。
    五,一闪而过的天真不见了。以前反正是写个朋友看的,就算有些呆呆的天真的想法,也是但写无妨。现在总得考虑,有同事会看,有老板会看,全国玩技术的都会被搜索引擎引导过来——好像有点自大哦。不过另一个角度说吧,贝壳的某个朋友在相亲的时候相到一个技术员。回过头来和贝壳说,无意中提到贝壳的名字,对方居然听说过。我相信这不是单纯的偶然。
    六,技术层次越来越高,技术复杂度越来越低。最早的技术都是C++一类的,伴随大段的代码。现在的技术越来越抽象,也越来越深奥。但是玩技术的时间却越来越短。回过头去看看两年前写的service代码,感觉好复杂的技术。处理的情况非常完整,现在是没空写这种东西了。再看前几年的程序极短化研究,用C语言直接操纵API和汇编层级的结构,做出1.5K的程序来——现在贝壳有个鬼时间来干这个啊?只能感慨当年真是时间不当时间用。
    七,感慨了N次的生日和女友,结果就是还是没女友。
    因此——没啥因此,无聊的写一篇blog,然后继续无聊。

2010年3月22日星期一

byebye google



--
与其相濡以沫,不如相忘于江湖

2010年3月21日星期日

掉河里了

    本来不想说了,简单说一下吧。
    昨天跑到某推优的店里吃鸡排,事先查好了所有东西,结果跑过去发现没开门,打电话发现说下午2点开门。贝壳当场�掉。到附近的烧烤凑合吃了一顿(怎么又是烧烤?),然后给小李老师觅一根皮带去。伊说昨天喝了一顿普洱茶,整个腰围小了一圈,贝壳和小黄立刻求这个茶饼。觅到皮带去共青森林公园,买了个风筝半小时没放起来,就放弃了。然后转了一圈,去勇敢者的道路玩了一圈——然后,�事发生了。
    那里的勇敢者的道路有个从水上过去的项目,贝壳觉得挺好玩的。于是就把身上所有东西扔给小李老师,伙同小黄姐姐从水上过去。到了最后五米左右的地方,有个水上的平台,就是会晃动的那种。小黄姐姐蹦啊蹦的就过去了,贝壳也一脚——浮台直接沉入水中。然后赶快跑——沉底...
    非常泪奔啊,三月天,贝壳穿着一身的湿衣服,在寒风中飕飕的。幸好扔了一套衣服在小李老师那里,去厕所换上。再去五角场买了一套裤子和拖鞋,看起来就比较不像个落汤鸡了。然后打车回家,洗了个热水澡。今天没有感冒发烧。
    多么美好的经历啊多么美好的经历啊多么美好的经历啊^_^
   

2010年3月16日星期二

盗版问题的经济学考量

    首先要说的是,作为一个程序员,贝壳坚决抵制盗版。每位盗版者,每次盗版,就是从贝壳钱包里掏钱。因此,不要带着“本文在为盗版者张目”的眼光来看,谢谢。
    本文想讨论的问题,是从经济学的角度分析,在中国,直接制止盗版的经济学后果。当然,范围限于软件和软件周边产业。
    首先,我们先考虑中国的城乡二元结构。因为很多数据如果不考虑城乡二元结构直接展开讨论,会出现莫名其妙的情况。根据贝壳查到的数据,截至06年底,中国城市人口5.77亿。这个数字准不准,贝壳是存疑的,也许精确数字要等2010年普查后才有了。何况即使准,也包含了诸多西部城市。因此,贝壳按照中国人口13亿,城市人口5亿来计算。在这个数字基础上,我们先算农村人口的基础消费。根据贝壳查到的几分报告,农村人口的其他商品和服务消费大约在200-500元/年左右。当然不排除有少数富裕农村,不过被广大的农村人口总数给拉平了。其中有多少流向软件领域(注意要区分硬件和通讯领域)?最多不少过每人50元——可能还多算了。8亿农村人口,总消费400亿——按照贝壳本人的估计,能有个100亿算不错了——不算农村政府消费。在整个软件领域,这点钱连个水花都砸不出来。
    这个数字能不能进一步提高呢?很难了。农村人口的消费结构中,占大头的是衣食住行,医疗保健,次之就是耐用品和教育。而且,这几类消费有逐步升高的趋势。这表明我们的基础支出在逐渐挤出农村的可支配收入,恩格尔系数在逐步提高。在这个前提下,要提高农村人口的电脑类消费,尤其是购买正版软件——显然是天方夜谭。
    那么城市人口呢?我们有5亿的城市人口,他们的消费能力远远高于农村人口。按照贝壳查到的资料,城市人口的一年最高可支配收入大约是2W元。如果全部投入软件领域,我们的最高消费是10万亿人民币——很明显,这个太痴人说梦了,中国去年的GDP才30万亿。软件领域如能分走1/20,即5000亿的消费,就算不错了。
    最后一块就是政府消费。这一步比较复杂,但是贝壳可以不去算了。为什么呢?实话说以贝壳所见,我还没听说哪里的政府用盗版的。大量都是定制开发,ERP,业务系统一类的。国外的这类单子基本全给500强在做。国内就是针对政府,垄断产业在做。办公软件一类的,也是有专门的政府开支的——很少有政府敢于明目张胆的说,我们就不花钱了,用盗版吧。因此,即使打击盗版,这类收入也不会发生太大变化。
    那么,我们总结以上三个消费群体,农村居民——基本挤不出油水来,政府机关——基本不用盗版。唯一可能发生变化的只有城市人口咯?不过考虑这么一个问题,这最高5000亿的消费,有多少流向了网络应用,和网游一类产品?或者是手机,机顶盒一类硬件设备?实际上,今天我们的用户们,依然是将盗版进行到底的。有多少人的系统是正版的?多少人用了正版的游戏,正版的办公软件?但是,我们的软件业结构根据这一现象做了调整——这一变化也在全球范围内上演——即软件服务化,或者是和消费型硬件捆绑化,平台化。以前我们做一款游戏,钱收不上来,感慨盗版逼死人。现在呢?我们做一款游戏,钱收不上来,于是和移动捆绑销售。业绩不菲,收入不多,然后看到移动的分成很多,感慨垄断逼死人。不说垄断的问题,其实这已经是根本市场的现状做出了调整的。如果现在再回过头来,说要不要打击盗版?理论上是要的。打击的结果如何呢?我们的软件产业怕先是要去掉半条命。为啥?
    同样,我们抛开在上文中已经被讨论忽略的农村居民和政府机关,考虑一个最简单的城市居民,如果必须买正版,会是啥情况。当然,我们的口号是,你一天抽烟多少钱,50块的正版软件都买不起么?
    该居民同志,一年收入5W(上海标准平均收入),不要买房(否则可以直接卖电脑了),不结婚没孩子,单身。房租一个月600(还得合租),吃饭一个月600(还得节约),水电煤300,出门坐车300,加点零花,一个月就是花2000剩2000,一年24000。一年衣服裤子要买掉个2000,网费要交个1500,电话费500不算多,出去和朋友吃吃喝喝4000还得问够不够,有那么几次红包去掉个5000。好,剩下多少?11000。不过总算也有点闲钱。玩个网游啊,买个手机啊,都不成问题。手机电脑按照三年折旧算进去,一年又得去掉个2000。现在,我们宣布,他现在无法使用任何盗版了,必须使用正版。于是,他首先要为XP买单1000。这是来自微软的杀人价,当然,如果OEM价格还有降低。然而都必须买正版了,微软凭啥降价?然后是Office2007,4000上下。杀毒软件现在免费了,我们先不说他。星际魔兽买不买正版?Winrar要不要付费?50块一个的软件,谁电脑里没装个七八个的?多的10几个20几个。以三年折旧计算,该同学现在为了使用电脑而付出的费用,翻倍!
    我们说,总收入是不变的,现在多花一笔钱,就要少花一笔钱咯?住房吃饭坐车不能省,衣服通讯朋友不能丢。怎么办?要么干脆不用电脑,省下时间金钱多找找MM联络联络感情。搞不好我们就用经济杠杆为中国的广大宅男完成脱宅目标。要么干脆不打网游也不用office,装个裸机在网上裸奔,除了看贴回帖啥都不干。等不行了重装,再不行骚扰微软的客服。于是乎,莫名其妙的,我们的网游系统,硬件,短信,等等等等周边本来赚钱的东西会突然不赚钱了。为什么?你还问我为什么?你当用户是傻子么?一个电脑能花出去的钱都是有限的。正个版就无限收费的只有黑社会了。
    所以我们说,反盗版要进行到底,这才能刺激人发明创造。但是同样要看到,很多问题不是单纯的说反盗版产值就会上去的——很多时候甚至会下去。一个农民多少三成是好事,全国农民都多少了三成就是灾难。同类的问题也出现在现在的中国,乃至全世界软件业人士的面前。我们的产业已经为盗版而重造过了,直接轮个榔头砸怕是得搭上自己的一条胳膊。

2010年3月12日星期五

在各个平台上启动emacs的技巧

    今天在推上,一帮人讨论了emacs如何启动的问题。这个问题我是这么解决的。
    这个配置针对三个上下文起作用。Windows,Linux图形,Linux+SSH。在Windows下,不使用alias,因为emacsclient会在找不到server的时候自动启动一个新的emacs。将emacsclient加入到注册表中,就可以对任意文件“使用emacs打开”。
    Linux和Linux+SSH中,需要使用alias技巧,因为emacsclient不会在没有server的时候自动启动emacs。过程如下:
    首先在系统相关的配置中,加入server-start,以便启动server服务。系统选择上,linux和windows加,console不加,因为后者没什么意义。然后,在系统中加入alias设定。
alias emacsclient="emacsclient -a emacs"
    这样,当系统中没有emacs启动的时候,就会启动一个。当有emacs启动后,就会调用这个emacs来打开文件。
    在ssh环境下,需要开启x forward。这样就会打开远程emacs。这是比较慢的用法,快的方法是直接在本地emacs上使用tramp。

2010年3月10日星期三

从选优法说起

    小学的时候学奥数,作为常识,知道中国有个大数学家叫华罗庚,教出个徒弟叫陈景润。陈景润解决了世界上最有名的问题之一——哥德巴赫猜想——的一个弱形式,证任意一个大偶数可以分解为一个素数和两个素数乘积之和(比较拗口哦,这个是俗称的1+2的完整形态)。好伟大好伟大哦。华罗庚作为陈景润的师傅,有什么成就呢?据说有个“选优法”,但是“选优法”是啥东西,就语焉不详了。当时年纪小,1+2都看不懂,何况选优法呢。这个问题就被搁下了。
    到了高中,翻了翻闽嗣鹤和严士健的《初等数论》,大概知道了数论是怎么回事。同时,家里有本60-70年代的《十万个为什么》(这本书可真是本宝书,很多那个时候社会的问题都能在书里看到,后面一一阐述),上面写了“选优法”的过程和应用。小时候的疑问就再次出现——华罗庚怎么能教出陈景润呢?
    这里没有批评的问题,只是怀疑。首先是领域问题,哥德巴赫猜想属于数论领域的问题,而选优法属于运筹和博弈领域的问题。这两个领域互不相关,也没有什么交集的地方(当然,硬说有其实也有)。一个学运筹和博弈的老师是如何教出一个学数论的徒弟的呢?其次是“选优法”这个东西,从纯数学来说太不严肃了,最多只是属于应用数学上的东西。而且太过幼稚,一个初中文化程度的人都可以轻易建模解决这类问题,又何必专门提出来作为一个成就呢?再者,最严重的,如果师傅的成就只有这么一个勉强可以说是应用数学的东西,他如何能带出一个纯数学领域最顶尖的弟子呢?
    我曾经找过一本华罗庚传,写的是很动人,然而对华罗庚一生的数学成就介绍很少。说是励志小说勉强可以,但是说用来纪念华罗庚就太过搞笑了。丢番图的墓碑上刻着什么墓志铭?什么都没有,就是一个丢番图方程。这本书虽然说了华罗庚的生和死,然而却也无法解答我的这个问题。今天我终于看到了答案,不由悚然一惊。(http://www.chinagfw.org/2010/03/blog-post_7628.html)墙内需翻墙,因此我摘抄整理如下:

    1968年,中共中央组织部部长郭玉峰在党代会上发表了《关于四届全国政协常委会委员政治情况的报告》,在该报告中,他指称74名全国政协常委会委员为叛徒,叛徒嫌疑,特务,特嫌,国特,反革命修正主义分子,里通外国分子等,占159名政协常委会委员的47%。建筑学家梁思成、生物学家童弟周、桥梁专家茅以升相继被打倒。但华罗庚却幸免于难。在数学家群体当中,他是最风光的一个,他是中国数学界的泰斗,中科院数学科学研究所所长,他很聪明,用一个在理论数学上毫无学术价值的“优选法”,来证明自己“贴近工农”,并在文革时期赴全国十八个省份讲演做专题报告,而其它的数学家此时大多在牛棚里度过余生。这个当时在全国算是最走运的一个数学家华罗庚,生活是怎样的呢?五零年以后,他再也没有能发表出有份量的成果。是条件不够好吗?从纵向比,抗日时期,他在西南联大,物资极度紧张,住在猪圈旁边,他依然可硕果累累。可五零年以后,生活条件好转,可他却出不了成果了。从横向比,被他指责为“贪图享乐不回国 ”的同龄人,大数学家陈省身,在国外屡屡突破,一举获得数学界最高荣誉之一沃尔夫奖,退休后衣锦还乡到南开大学享福去了。
    华罗庚五零年,毅然放弃优异待遇回国时,发表热情洋溢的爱国宣言:“良园虽好,却非久居之地”,影响了一代海外学人。十年后,他黯然对夫人说:“我想自杀。”消息传出,又影响了一代海外学人。他没有精力再搞研究,因为他的同事处心积虑地揭发他,批判他。他二十年的手稿被红卫兵抄家后付之一炬。他放弃了自己喜爱的数论研究,放弃了自己的天赋,去搞应用数学和爱国主义教育。统筹法让他摆脱了“脱离群众、脱离工农”的口诛笔伐,使他获得全国巡回演讲的殊荣。可他自己知道这东西的生命力,文革以后,再也没有人用。他在海外的名声为他赢得了待遇,因为他是统战对象,是模范表率,所以要照顾他。可是其它人就不是了。他的儿子,一家四口人,住十四平方米屋子。他最得意的徒弟陈景润,住四人七平方米一间的宿舍。清华大学文革委员会主任迟群不断关心他的生活,陈景润成名之后,迟群不遗余力地动员他积极展开批判华罗庚的工作。华罗庚的优选法在辽宁省做成果展示时,主持辽宁党政军工作的毛远新(毛泽东侄子)对这位天才数学家高屋建瓴地指出:“优选法的‘最优’是不可能存在的,最优 这一提法不科学,不符合马列主义,最多只能称为较优。”于是华罗庚只好带领他的弟子们连夜加班,将展示板里的“最优”统统改成了“较优”。
    这就是在国内待遇最好的数学家的遭遇。

    从逻辑上说,我认为这篇材料没有胡乱编造,至少在选优法这个问题上没有。因为这篇材料能够完整的解答关于“选优法”的三个疑惑。为什么博弈领域的师傅教出数论领域的徒弟,为什么名气如此大的一个人,其成就却如此儿戏。为什么如此儿戏的成就,又被如此着重看待。因为这个师傅根本不涉入运筹和博弈领域,根本是个搞数论的。因为这个成就根本无法被称为成就,只能被称为耻辱,和钱学森的亩产万斤并列。
    下面我们回过头来,再说说那本60-70年代的《十万个为什么》。这本书很有意思。有意思在哪里呢?这本书理论上是本科学技术的普及教育书籍。什么叫理论上呢?所谓理论上,就是书的封面是毛泽东语录,封底是“打倒奸工内贼刘少奇”(熟悉历史的凭这句话大概就知道是什么时候出版的了)。介绍的内容无一是普及科学的,都是讲如何生产和如何务农的。问题的开头都是一个工人或者农民向一个反动学术权威请教,权威如何如何。于是这个工人/农民奋发图强,解决了以下问题blahblahblah。要是工人农民个个都能解决问题,那还要反动学术权威干嘛?我同期还拿到了一本美国版本的《十万个为什么》,当然是中文版。封面写着高中版,于是大部分内容我就真的看不懂——同时60-70年代那本写着成人版。我现在记得的大部分内容都是讨论基础科学领域——例如我记得的一点——神经结构,神经信号传递,信号处理和模式学习。
    对于大多数中国孩子,应该都听过一句话——学好数理化,走遍天下都不怕。其实说这句话的人,自己都未必相信这句话——就像我们高喊共产主义永垂不朽的时候一样。现在要走遍天下,你需要的是背景,英语,厚黑学,而不是数学,语文,物理化。在中国,技术和知识从来不被重视——至少没有像权力和意识形态那样被重视。我们的程序员可以在4天内仿制出一个国外的成熟应用——当然这也不全是好事——然而我们的权力机关可以在4分钟内让你关门。我们的大学生可以在两小时内解出一份漂亮的答案,然而却无法在两个月内设计构造出一个成熟的产品。我们的学术论文是可以网上抄的,我们的核心刊物是可以花钱刊的。人家最聪明的人都从事医学,数学,法律和金融,我们最聪明的人都从事公务员。我们的产品充斥着山寨和抄袭,我们的GDP来自水泥和血汗。
    这就是知识在中国的待遇。

2010年3月7日星期日

游新场镇

    昨天组织了一堆人去新场玩。地点大致在南汇旁边,据说是色戒的拍摄地点。哎,为啥不在东方明珠下面拍呢,我们也好去点~~~�。
    前天晚上回去的晚了点,由小黄姐姐代为通知。等通知出去后才发现,小李老师手里也是正确的时间——这太不正确了。按照我的估计,应该给小李老师提前至少半小时的——结果说明我太低估她了,她这次迟到一小时。由于她的迟到,因此,我,小黄,小杯子,被迫在大冷天的跑到DQ吃甜筒。小黄姐姐拿小杯子的iTouch玩植物大战僵尸,我和小杯子对于有人喜欢这种弱智游戏表示不解。不过她边玩边吃甜筒,我眼睁睁的看着她的头发飘到甜筒中,然后一口舔成奶油头发,再一撩,在衣服上形成国画。吃完以后满手奶油,外加嘴唇上的奶油——崩溃中。。。顺便可怜小杯子的iTouch。
    小李老师到达后,我们坐车到了新场镇——当然,刚下车的时候,打死我也不相信这是个古镇。走了一段,才发现一个牌坊。不错不错,这个不错。我们按照牌坊下的提示,跑到附近的弄堂菜馆。午饭点了金针菇,白斩鸡,红烧肉,青椒茭白肉丝,浦东朋友鱼(就是小黄姐姐说的,鱼,螺蛳,虾的大杂烩),蛤蜊蒸蛋。点了三碗饭——不过到吃好也没有上来。价格不贵,东西也挺好吃。我们吃完就在那里弄出一堆的干果吃,也没有人来赶我们。小杯子的一个朋友还跑过来,拿了一台最新的google手机和一台单反相机。
    下面就沿着路往南走,一路看到N多的不可移动保护OOXX建筑。贝壳别的不记得了,就记得这个,因为实在是像内存管理中的不可移动保护数据块——小杯子,小黄,小李老师崩溃中。最后到达一个寺庙,小黄姐姐很高兴的说,里面有和尚在唱歌——这次是贝壳和小李老师崩溃ing。
    新场不大,玩到这里基本就全了,往回走,去人民广场找夏岚吃饭。途中小杯子还很可耻的无视了一次他自己许下的要砸掉龙阳路地铁那家开封菜的伟大志愿。我们走到来福士,发现夏岚正在排队——排在一个很长的队后面。于是集体退散,崩溃的觅食。在地主夏岚筒子的带领下,我们找到了一家韩国菜。对此贝壳表示鸭梨很大,在上次去烧烤发现经过小黄姐姐手的所有产品都会发黑后,贝壳就不大敢去吃韩国菜了。幸好多了两位女生在,否则贝壳又要面对小黄姐姐的无敌烧烤——最近胃不是很好的说,不要考验了吧。
    事实证明了贝壳的先见之明,小黄姐姐从头烤到底,从头焦到底。除了做的锅巴挺好吃外,对产生食品实在没有什么太大的贡献。整个晚饭就在小李老师的控制下,有惊无险的度过了。
    啊,一天啊多么美好的多么美好的一天啊多么美好的一天啊~~~~~

2010年3月3日星期三

emacs配置系统

    emacs是个超级复杂的程序,尤其在配置问题上。贝壳的emacs要跨越三个环境。环境一,WindowsXP+Emacs23。环境二,Debian Testing + Xfce4。环境三,CentOS + Ssh。而整个的操作方式,个性设定需要保持一致。因此,引出一个问题。配置如何设置,跨平台,同步。
    首先解决配置的同步问题,贝壳建立了一个svn仓库,用于存储该配置系统。然后在各个系统中co出这个仓库,当有需要调整时ci就可以保持同步了。Linux下可以使用ln连接文件,Windows下比较麻烦点,NTFS格式(大多都是NTFS格式了吧)可以去sysinternals下一个叫做junction的工具,以建立目录的工具链接,当然,.emacs文件只能手工拷贝了。
    然后是配置的切分问题,如果只有一个文件,即使使用了版本控制,意义也不大。同时,将配置切割成不同的部分,控制载入过程,也可以跨平台和加速。以下是贝壳的.emacs文件。
;; .emacs profile, written by shell.xu

;; load other set
(add-to-list 'load-path "~/.emacs.d/")
(add-to-list 'load-path "~/.emacs.d/auto-complete/")
(add-to-list 'load-path "~/.emacs.d/plugins/")
(load "emacs-setup")
(load "emacs-redef")
(load "emacs-plugin")
(cond
 ((not (boundp 'initial-window-system)) (load "emacs-console"))
 ((memq initial-window-system '(x w32))
  (cond
   ((memq system-type '(windows-nt cygwin)) (load "emacs-win"))
   ((memq system-type '(gnu/linux)) (load "emacs-linux"))
   )
  )
 )
(load "emacs-keymap")
    从上可以看出,我们先设定了.emacs.d作为默认加载路径——大多数文件都是放在这里。plugins是各种第三方程序的安装路径,这样这些程序就无需在各个平台上各自安装一次。而auto-complete单独拆出来纯粹是因为文件太多了。而后,我们加载了setup,这个文件内定义了emacs的基本配置,redef文件内定义了各种自定义函数和变量,plugin内控制了需要加载的各个插件和配置。
    下面就有点复杂,简单来说,设定无Windows系统的时候加载emacs-console文件,有Windows的情况下,在windows下加载emacs-win,在linux下加载emacs-linux。这是实现跨平台设置的核心。
    最后是keymap,经过上面复杂的设定,按键设置是统一的。
    setup文件就不细说了,大家按照自己的习惯设定就好。下面我说几个redef中定义的函数。
(defun switch-windows-buffer ()
  (interactive)
  (let ((this-buffer (window-buffer)))
    (switch-to-buffer (window-buffer (next-window (selected-window))))
    (switch-to-buffer-other-window this-buffer)
    (other-window 1)
    )
)
    这个函数的目标是用热键交换两个窗口的位置。如果你经常用C-x 3分栏,并且在两者间跳来跳去的话,有的时候往往希望两者的位置换一下。通常都是C-x b切换当前的窗口,然后C-x o切到隔壁去再换。这个太繁琐了。
(defun popup-term ()
  (interactive)
  (apply 'start-process "terminal" nil popup-terminal-command)
  )
    这个函数是用于在当前文件所在路径弹出一个term的。也许有人说了,emacs有term啊。问题是,那个term只能开一个,而且有些东西操作不了。例如你如果想在这个term里面跑aptitude...
    注意这个函数里面的popup-terminal-command,这个需要跨平台的,因此在windows和linux下设定各自不同。以下是两个典型设定,至于哪个是哪个我想都看得懂。注意console下面没必要搞这个。
(setq popup-terminal-command '("xfce4-terminal"))
(setq popup-terminal-command '("cmd" "/c" "start"))
    然后我们说plugin,这个文件其实很简单,加载插件,然后设定就好。下面是一部分范例。
;; load template
(require 'template)
;;here set the templates directory
(setq template-subdirectories '("./" "Templates/" "~/.emacs.d/templates/"))
(template-initialize)
(setq template-auto-insert t)
    这部分范例说明了如何载入template,并且进行设定。
    下面是一点细节问题,tool-bar-mode这个设定相信多数人都有做。问题是,如果你在console下用过就知道,如果你设定了(tool-bar-mode -1),立刻会报错——因为console下面根本没这个东西。所以,记得把这个设定放到各个平台上。
    最后,这些设定,必须经过编译才能起效。包括所有第三方插件,都必须编译生效。而显然,每个平台编译一遍是个脑残的事情。因此,我们需要写一个Makefile。
DEPENDS=auto-complete plugins
SOURCES=emacs-console.el emacs-keymap.el emacs-linux.el emacs-redef.el emacs-setup.el emacs-win.el

build: $(SOURCES) emacs-plugin.el
    for i in $(DEPENDS); do $(MAKE) -C $$i build || exit 1; done
    emacs --batch -f batch-byte-compile $(SOURCES)
    emacs --batch -l ~/.emacs -f batch-byte-compile emacs-plugin.el

clean:
    rm -rf *.elc
    for i in $(DEPENDS); do $(MAKE) -C $$i clean || exit 1; done
    注意,在每个目录中也要分别写Makefile,不过内容简单多了,基本就是emacs --batch -f batch-byte-compile *.el而已。而plugin这个文件比较特殊——他必须依赖于所有插件才能工作,所以最后才进行编译。
    以上工作,基本完成了一个跨平台的emacs配置系统的组建。当然,如果你高兴向其中加入更多的内容,可以遵循以上规范进行。

2010年3月2日星期二

android历史记录备份和应用三例

    有不少不折腾会死星人已经用上andriod了吧?有没有刷机过?有没有怕手机掉过?android的联系人是同步到gmail的,不用怕。但是信息就不同不了。所以,下面介绍几个信息导出的方法。
    1.aqq
    用adb shell去/data/data/com.android.aqq/databases/下面,把aqq.db复制出来,sqlite3格式,随便看吧。
    2.AnFetion
    用adb shell去/data/data/.....AnFetion2/databases/下面,把fetion.DB复制出来。
    3.信息
    这个是最麻烦的。去信息->Menu->设置->导出短信里面导出。但是别高兴的太早,贝壳发现一个bug。如果你的短信里面有西文引号,会导致xml格式错误,从而无法导入。解决方法是手工删除引号。
    应用,使用xsltproc,将xml转换为html来浏览。贝壳用的xslt比较简单,抄在下面。
<?xml version='1.0' encoding="GBK"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <body>
                <xsl:for-each select="//smss/address">
                Phone Number:<xsl:value-of select="@data"/><br/>
                <table border="0" class="rev_tab" width="100%">
                    <xsl:for-each select="sms">
                    <tr>
                        <td class="rev_tab_rev"><xsl:value-of select="date/@data"/></td>
                        <td class="rev_tab_rev"><xsl:choose>
                            <xsl:when test="read/@data = 1">read</xsl:when>
                            <xsl:when test="read/@data = 0">unread</xsl:when>
                        </xsl:choose></td>
                        <td class="rev_tab_rev"><xsl:value-of select="body/@data"/></td>
                    </tr>
                    </xsl:for-each>
                </table><BR/>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
    为了美观,你还可以修改一下xslt。xsltproc在linux下直接有包,Windows可以来信问贝壳索要移植(其实去官网上就能下到)。