推荐《十亿消费者》

    在阅微堂上看到的推荐。豆瓣的地址在这里。由于有一些敏感的内容,在国内没有正式出版。可以在译言上在线阅读

    作者算是一位中国通,华尔街日报驻北京总编。曾在台湾呆过5年,北京呆过15年,会说中文。下面是主要内容:

    • 中国加入世贸的诸多内幕,包括中国高层和美国高层间的一些重要事件
    • 中金:摩根士丹利与建设银行的合资成败
    • 赖昌星小传
    • 新华社和道琼,路透争夺向中国股市传送世界财经新闻的“战役”
    • 道格拉斯和波音在中国投资前后
    • 美国媒体大王默多克在中国的起落,凤凰电视的起步,中国《财经》杂志的创办
    • 中国电讯集团,中国联合通信,UT斯达康的生成发展,和相互之间的争斗
    • 哇哈哈集团的发家史,潘石屹和张欣的地产王国

然后是我看到现在最有感触的一段文字:

在中国,从上而下的强力控制从来都被认为是达到和平和繁荣的唯一途径。其中一个原因是中国是一个基于耻辱感的社会,这和基于内疚感的西方社会有很大的不同。在西方,由于社会受到宗教的指引,很多控制是来自人们内心的。内疚,最终导致对罪恶和永远受到惩罚的恐惧,制止了不良行为的发生。然而在中国,人们害怕的是被揭露,以及随之而来给整个家族蒙羞所带来的耻辱感。因此,只要不被抓住,中国人做任何事都可以心安理得。在这种环境下,法律和秩序唯一有效的形式就是一个强权而又无处不在的政府,从而加大了你作恶之后被抓住的可能。

  虽然这段文字里的内容也许存在争议(在豆瓣上就看到了不同的意见),不过可以让大家从另一个角度,反思国内的现状。

Rej

    今天和初中同学们聚会后,回家收到了UBS的Rej,嗯,意料之中,基本没指望这个时候UBS还能招人。另外,微软准备裁5000人了,在18个月内员工数减少2000-3000人。算算18个月后不是正好我入职的时间么?

    年后好好和老板谈谈,继续找实习。

打算写一个简单的数据库迁移工具

之前做项目一直被数据库schema改动折腾得不行,找了不少工具,比如migrate4j,dbmigrate和liquibase之类的,感觉都不是很满意。其实我的需求很简单,不需要数据库的DSL(比如migrate4j或者db:migrate的那种用Java/Ruby描述DDL),只需要纯的SQL(也就是db:migrate生成的SQL),只需要前向操纵(即不需要回滚),有Eclipse的插件。
现有的migration工具,都是使用分开的文件作为不同版本的内容,这带来了很大的灵活性。但是我的打算是对现有的开发模式有最小的影响。比如现在项目的开发方式是使用一个schema文件外加几个基础数据文件。于是我打算直接使用SVN作为数据库版本的保存工具,利用SVN的特性做版本化。最直接使用的就是SVN的版本号。不过这样的问题在于基本无法做rollback,除非使用两个文件,一个construction,一个destruction,但这要求两个文件一起提交,带来了不少复杂性。现有项目的schema不需要做rollback,正好这么做。工作的方式为:更新SVN,获得最新的schema文件和当前的版本做对比,把增加的部分(要求更新append在最后)执行一遍。就这么简单。
调查了一下午+半个晚上,基本把一些技术方案给调查清楚了。主要的难度在于和subclipse的集成。既然功能简单,就要做到易用。于是我打起了subclipse的主意,主要是subclipse保存的SVN用户名密码。发现subclipse还挺变态的,JavaHL的接口使用HOME目录保存,SVNKit接口使用Eclipse的keyrings文件。
这两天就动手,代码参考较为简单(或者说简陋)的dbmigrate。

BRT & 杏林大桥初体验

    今天去金鸡亭祭拜外婆,顺便体验了下BRT和杏林大桥。

    BRT高架桥段从下面看上去,和轻轨没有什么两样。上到站台层以后,感觉像是简化版的地铁站。简单的自动门基本起到了安全作用,地铁站似乎也可以考虑这种1米高的自动门,而不是选用昂贵的屏蔽门。虽然不能防止自杀,但对意外事故的预防应该足够了。

(注:在网上找的照片,站台并未全封闭,但也足够了。照片的最右边就是安全门,不高,但是基本能有效防止安全事故)

    BRT的车辆使用的是XMQ61127G(下图),比南京的大金龙长一点,同样也是小二级踏步。车辆的行驶噪音较低,车速也平稳。给我的感觉就是,如果不看车内单看车窗,基本上就是轻轨了。不过这车的遗憾在于有效载荷空间不多,BRT应该使用更大一点的车。

    在8684上看到的消息,说在成功大道线通车以后,应该会把XMQ6180G(下图)给现在的主线用,然后现在BRT用的车(XMQ6127G)给成功大道专线。

  晚上回家,坐新辟的66B,也是目前唯一走杏林大桥的公交车。果然速度很快,从濠头直接上疏港路高架桥,然后一路就到家门口了。不过杏林大桥现在的匝道仍然太少,特别是下穿福厦公路和鹰厦铁路的匝道还没通车,仅有的两个匝道口一个从疏港路高架走,一个从殿前走,两边的车流量都不大。算了一下,从思北上车,到家门口下车,基本上用30分钟,这还是在下午6点的下班高峰期的耗时。南京的跨江交通,老是抓不住重点,修二桥三桥四桥,却放任大桥的拥堵。

Java的Date&Time居然也JSR要通过了

    很少在这里发技术的牢骚。Java里的日期时间这块简直是耻辱,java.util.Date里那么多的Deprecated方法和属性,除了类本身,基本就是废柴。这里的消息表明,以后用Java日期时间的话,虽然可能不需要手动加入jar包(应该会在JDK里,毕竟太常用了),需要引入javax.time包了

原来都是粉丝

    微软号称要搞个“黑屏”,把很多用户气坏了,记者乐坏了(唯恐天下不乱的记者,随便看看几篇报道就知道)。本来一直想写点什么的,后来看到keso的这篇,发现不用写了。从前一直在道理上说说这事儿,keso一点拨,发现都是粉丝,于是所有的问题都迎刃而解了。真是“爱之深,责之切”啊。

一道编程珠玑的题,终于搞懂了

给定一个包含4300000000个32位整数的顺序文件,请问如何找到一个至少出现两次的整数?

顺序文件,不允许随机访问。

    解答:Binary Search,但不是对文件内容折半,而是对搜索范围折半。由于4.3G>32位的整数空间,根据鸽笼原理,肯定会有重复的整数。搜索范围从所有的32位正整数开始(全部当成unsigned int,简化问题),即[0, 2^32),中间值即为2^31。然后遍历文件,如果小于2^31的整数个数大于2^31,则调整搜索范围为[0, 2^31],反之亦然;然后再对整个文件再遍历一遍,直到得到最后的结果。这样一共会有logn次的搜索,每次过n个整数(每次都是完全遍历),总体的复杂度为o(nlogn)。

    例子:数组[4,2,5,1,3,6,3,7,0,7],假定从3位的整数空间内搜索。第一次的范围为[0,8),遍历过后发现[0,4)范围内的整数个数为5,于是调整为搜索[0,4)范围内的整数。第二次发现[2, 4)范围内的证书为3,大于2,于是调整为[2, 4)。再经过第三次的遍历,找出3为重复出现的整数。

    改进:上面的办法有很多的冗余。于是提出了一个办法:建立一个新的文件(是顺序文件就可以)。在一次遍历过后,确定搜索的范围后,把原有文件里这个范围内的整数写到新的文件里去,下次搜索就只要搜索这个新文件了。这样可以得到近似线性的复杂度(但是常数项应该很大)。

    嗯,算法还要加强,不然以后面试要挂了,呵呵。

中国人史纲

    前几天送LP回家,回来路上顺便去了一趟先锋书城逛逛,发现了一本挺有意思的书《中国人史纲》,是刚去世不久的柏杨写的。当时随便翻了翻,觉得视角很独特,于是,下了狠心。。。。。。。跑到图书馆借了出来。

    这本《史纲》基本颠覆了我对史纲的理解,实在是很有特点:

  1. 对帝王的称呼,直呼其名。在一个无须为尊者讳的时代,以年号或者谥号指代帝王,主要是为了读者的方便。而《中国人史纲》直接称呼名字,对读者反而造成了一些不方便。个中原因,在书中也有提到。作者对这些谥号实在是非常厌恶。比如某些遗臭万年的罪人,死后的谥号却是无比的显赫。
  2. 对儒家的态度立场鲜明,鞭笞入木三分。同时也没有特别偏向法家和道家。
  3. 年代的编排以公元纪年,还用到了二十年代,三十年代这些现代的记法来表示以前的时间。
  4. 在某一世纪的中国史篇章结束之后,会把同时代的西方大事件拎出来提一提。
  5. 评出了中国历史上的三个黄金时代:春秋-西汉,唐代和清代(最后一个争议比较大)。

    现在只读到刘彻这部分,看到了豆瓣上关于这本书的评论(链接1,链接2),都是比较推荐的。鼓楼图书馆只有上册,哪天回浦口的时候还要去把下册一并借出。