我写故我在

I write, therefore I am

不为帝王唱赞歌 只替苍生说人话

Posted by ieipi 于 六月 15, 2011

事实再次证明时间是挤出来的,用不到一个月内的“碎片时间”看完了电子版的《中国人史纲》——既然看的是电子书,难免浮光掠影,囫囵吞枣。所以在看完后又去买了纸质版,待有闲暇,再详看。

作为一部通俗通史书,本书最大特点可能就是,以世纪分章,以事件分节,叙历史人事,书本心所想。书中臧否人物,总结规律,多显主观,似缺严谨;但是惟其如此方显其成一家之言的不倦追求。

书名冠以中国人,单加一个“人”字,可以看出作者的良苦用心。但是读罢全篇又能感觉到他的无可奈何。因为中国的传统史书无非是为王侯将相立传,至于普通百姓,似乎从来都是历史过客。作者固然能做到“不为帝王唱赞歌”,但要做到“愿为苍生说人话”谈何容易?百姓的苦难,只有一些大而无当,笼而统之譬如“坑二十万”“死十万”之类的记载。后人只能从这些苍白的记载中去臆想当时人们妻离子散家破人亡后的凄惨。

书的另一大特点即是对儒家思想的批判。这一点似乎是五四以降一代学人的共性。那些先辈们在苦苦求索,认清现实,甚至发出“中国不亡简直没有天理”的悲鸣后终于认识到若要民族复兴,必先放弃民族文化。可是所有这些宝贵的反思还没有来得及好好消化,就被打倒孔家店之类的政治运动推向极端,继之到当下又淹没在喧嚣的国学热潮中。拜教科书中的鲁迅所赐,现在人人都可以将“国民的劣根性”之类的词汇挂在嘴边。可是我们强大的化存在为合理的能力,却使之成为我们心安理得于一切现状的挡箭牌——反正这是国民的劣根性,反正中国几千年就如此,你就从了吧。反思不彻底会导致只有网络上了无新意的谩骂,而缺少制度上的突破,那么最终我们仍会一点点陷入历史强大的惯性之中。

书中有所谓“三个黄金时代”的论断。但是严格来讲,第三个黄金时代只有领土上的扩张;第二个黄金时代也得益于唐诗的灿烂辉煌;唯有第一个黄金时代是真正的活力四射,生机勃勃,奠定了日后得以享用至今的思想基础。如果说书不读两汉以下,那么思想恐怕只能研究秦汉以前。

我们现在处处讲复兴民族文化,“民族的才是世界的”。但是必须认识到,虽然我们念兹在兹的民族文化曾经让我们在世界上长期领先,但是也正是它一度使我们面临亡国灭种的尴尬。在民众长期受意识形态为主导的思想教育,缺乏现代多元文明的浸润时,突然遭受社会上强烈的复古思潮的冲击,实在让人有种沉渣泛起,借尸还魂的忧虑。

读我们的历史,常常让人悲愤不已。在整个有文字记载的历史长河中,历史悲剧一次次重演。从改朝换代到政权巩固,从腐化堕落到统治瓦解,其兴也勃焉,其亡也忽焉。历史在一次次不厌其烦的重复着了无新意的老路。可是,兴百姓苦,亡百姓苦。也曾有过一些志士仁人意图改革,但即便是在体制内修修补补仍困难重重。纵观中国历史,要么保守不前要么暴力革命,缺少良性改革。让我们看看那些改革者的下场。商鞅,通过变法为秦国一统中原奠定基础,最后遭车裂灭族。王莽,虽有篡汉之嫌,但其“均众庶,抑并兼”的社会改革思想一直被忽视,直接被归为逆臣贼子。王安石,既有道德文章,又有政治远见,但即便如此堪称完人又有神宗支持,改革仍然难以推进,最后几乎全被废除,王本人也一度入选奸臣传,充当靖康之变的罪魁。张居正,生前无事,死后抄家。戊戌变法,更不消说,六君子被杀,康梁流亡,连支持变法的光绪皇帝都被软禁,几乎被废。唯一以改革著称的恐怕只有本朝的小平同志。但是改革三十年已过,改革的红利已经逐渐被透支,各种转型时的问题此起彼伏。又到了需要改革棋手的时候, 可是“世间已无张居正”。

中华文化,号称上下五千年,连绵不绝。但是这种文化本质上是一种农耕文化,当西方社会逐步由封建庄园跃进到工业文明时,我们的社会结构却两千年如一日,未有多大改变。但是国门终被轰开,当我们被卷入世界历史的浩荡之中,有识之士仍在坚持“中体西用”。这难道不是本末倒置吗?我们落后于人的恰恰是体制。自国门被轰开起,我们已无退路,除了融入世界潮流别无他法。可是凤凰涅槃,时至今日,仍未修成正果。说到这里,不得不提提日本。日本历史上两次改革“大话革新”和“明治维新”都取得了巨大成功。前者学习隋唐,完成封建化;后者学习西方,实现君主立宪。每一次,日本都全面彻底的学习外来文明。但时至今日,大和民族仍是世界上最独一无二的民族。为什么我们就这么害怕所谓的“文化入侵”呢?儒家思想深入骨髓,唐诗宋词无可替代,更有方块字独一无二,外加保存完好的文化遗产,我们有必要那么小心谨慎吗?儒家强调秩序,理所当然是统治阶级的最爱。但是个体已经觉醒,过分强调秩序,打压个体,只会扼杀遍布与草莽的创造力。现代文明本来创自西方,我们只能按已有的游戏规则办事,不可能另辟蹊径。况且,儒家的真正价值在于“修身齐家”,在于个体内省;至于“平天下”实在不是他的长处。恐怕内儒外法才是王道。

Posted in 悦读 | Tagged: , | Leave a Comment »

悬挂指针(Dangling Pointer)

Posted by ieipi 于 五月 18, 2011

请看下段代码:

    int
main ( int argc, char *argv[] )
{
    unsigned int *pint = new unsigned int; 
    *pint = 5; 
    printf ( "before delete, pint = %p\n", pint );
    delete pint; 
    /*After delete the pointer, we should explicitly set it to NULL */
    /*pint = NULL; */
    printf ( "after delete, pint = %p\n", pint );

    long *plong = new long; 
    printf ( "plong = %p\n", plong );
    *plong = 10; 
    cout << "*pint = " << *pint << "; *plong = " << *plong  << endl; 
    *pint = 20; 
    cout << "*pint = " << *pint << "; *plong = " << *plong  << endl; 
    return EXIT_SUCCESS;
}				/* ----------  end of function main  ---------- */

其输出为:

before delete, pint = 0x8369008
after delete, pint = 0x8369008
plong = 0x8369008
*pint = 10; *plong = 10
*pint = 20; *plong = 20

分析
delete操作只是(让操作系统)解除pint和被分配的动态内存之间的关系.但是这块内存仍在,而且,该指针仍指向这块内存.像这种指向一块已经被释放的内存的指针被称为悬挂指针(dangling pointer).使用悬挂指针容易产生难以调试的运行时错误.
为了减少这种问题,可以在释放一个指针的内存后,强制将它赋值NULL.对NULL地址的操作会立即产生段错误.

Posted in 语言, 技术 | Tagged: , | Leave a Comment »

C 函数声明

Posted by ieipi 于 五月 15, 2011

国内有多少书声称函数必需先声明再调用? 比如<<程序员面试宝典>>P72例7. 那么实际情况呢?
Test 1: 同一个文件

int
main ( int argc, char *argv[] )
{
    double i1, i2;
    /*case 1: no declarations*/
    /*case 2: */
    //int fun1();
    /*case 3: */
    //double fun1();
    /*case 4: */
    //int fun1(int);
    i1 = fun1();
    i2 = fun1(i1);
    printf ( "i1=%d\n", i1);
    printf ( "i2=%d\n", i2);
    return EXIT_SUCCESS;
}				/* ----------  end of function main  ---------- */
fun1(int a, int b)
{
    double d = 3.1234567;
    printf ( "d=%.8f\n", d);
    return d;
}

结果:
case1 和 case2 输出结果相同,均为:

d=3.12345670
d=3.12345670
f1=3.00000000
f2=3.00000000

case3 和 case4 编译错误.
分析:
1).函数名是external object,默认具有全局(global)可见性. 函数原型声明只用于帮助编译器进行类型检查.
2).对于变量,编译器必需进行类型检查,所以必需”先声明后使用”.对于函数可以关闭类型检查(老版C 语言).
3).编译器如果遇到一个事先未声明的标示符,并且紧跟着一个左半括号(即形如”foo(“的语句),就把它默认处理为函数名.并且默认返回类型为int,形参表则不做任何假设.(即默认扩展为函数声明int foo();).
4).对于形参表为空的声明(例如 double atof(); ),编译器将关闭对形参表的类型检查,但是对于返回类型,仍将进行类型检查.
5).一个最简单的函数定义为:

foo() {}

问题:调用此函数的返回结果是多少?
Test 2: 两个文件

/*foo.c*/
foo()
{
    double d = 3.1234567; 
    printf ( "d=%.8f\n", d);
    return d; 
}
/* main.c*/
    int
main ( int argc, char *argv[] )
{
    double f1; 
    /* case 1: no declaration */
    f1 = foo(3, 4); 
    printf ( "f1 = %.8f\n", f1 );

    /* case 2: declaration */
    /*int foo(); */
    /*f1 = foo(); */
    /*printf ( "f1 = %.8f\n", f1 );*/

    /* actually incompatible prototype declaration. */
    /*double foo(int, int); */
    /*f1 = foo(3, 4); */
    /*printf ( "f1 = %.8f\n", f1 );*/

    return EXIT_SUCCESS;
}				/* ----------  end of function main  ---------- */

结果(编译时必需同时编译foo.c和main.c):
case1 和case2 的结果相同

d=3.12345670
f1 = 3.00000000

case3 的结果为:

d=3.12345670
f1 = -nan

分析:
1).编译器的编译检查只能局限在同一个源文件范围类,涉及到多个源文件的情况由连接器解决.
2).链接时只检查函数名,而不检查参数表和返回值(所以c中函数无法重载)
3).注意case3的结果输出为NaN,这是因为foo函数默认返回int型,而该int型的二进制表示恰好不符合浮点数的表示规则.
总结
1.”函数需要先声明后使用”,是一个好的编程规范,但并不是语言特性所要求的.
2.函数声明只用来帮助编译器进行类型检查.若函数定义和声明在同一个文件中,则可以检查定义,声明和调用是否匹配;
若定义和声明不在同一个文件,则只需函数声明和调用保持一致,并且与定义同名.

Posted in 语言, 技术 | Tagged: | Leave a Comment »

i9000 入手记

Posted by ieipi 于 五月 14, 2011

早就想换个手机了,酝酿了好久却没有实际行动。上次出去玩时,手机弄丢了,这下省事了,不用细想,赶紧买吧。

  1. 智能机or非智能机

这个没什么好纠结的,当然是智能机了。移动互联,应用商店,移动平台。。。天天听这些,作为一个准ITer,是该体验一下了。

  1. Android or iOS

智能机的关键可能就是系统了。苹果是智能机的鼻祖,谁不想要呢。爱美之心,人皆有之。虽不能至,心向往之。但是ip5迟迟不出,ip4价格依旧坚挺。所以摸着钱包想一想,如果买个苹果回来只是发发短信装装B太丢人。所以就选Android。有Google做保障,还开源,适合折腾。

  1. 水货or行货

之前对智能机一窍不通。现在一搜,发现各种乱象。简直比买电脑还折腾。简析如下:

国行:内地行货。各种手续齐全,全国联保。

港行:香港行货。某些机型据说可以在内地全国联保。

水货:未经海关扣税,由非正规途径流入内地。水货并不指质量水。相反某些水货由于原销地是欧洲,质量比内地行货还好(欧洲的电子产品辐射要求是最严格的)。水货最大的问题在于售后质保。由于不是正规授权经销商售出,不能享受联保。这给广大奸商提供了可乘之机。水货按原销地又分为港水、欧水、亚太等等。

其他:

刷机:更新系统

ROOT:某些功能需要系统的Root权限。

解锁:厂商与运营商合作,使得某种机型只能在某运营商网内实用。为了入其他运营商网络需要解锁。

  1. MotoHTCor Samsung

Android救活了某些厂商,如Moto;捧红了某些厂商如HTC

市场上的Android机型十分泛滥。经过一番筛选,最后集中在这三家。

MotoDefy火了很久,好像去年就经常听到,号称性价比之王,又有三防做卖点。三防是神马以前没听说过。看了一些介绍好像很诱人,水下视频、通话看起来很新鲜。但是这个到底有多实用不知道。最开始一直关注它。但是行货一直在2700~3000。为了五一促销,京东甚至玩起了升五百降两百的鬼把戏。我表示再这样下去我玩不起了,于是转投其他机型。

HTCAndroid大户。但了解不多,印象不太好。而且机型泛滥,配置唬人怎么看都有点山寨的感觉。而且电池也不给力。可能是我偏见吧,没有过多了解。

Samsung人称花瓶。但是手机花瓶一点也不是坏事。看着舒服,第一印象很重要。

  1. 淘宝or

买水货最大的问题是渠道.中关村水太深,不靠谱.想来想去只有在淘宝了.逛淘宝一点也不必逛街轻松. JS 们坑蒙拐骗的招数层出不穷.网友们验机的方法倒也很多,但是道高一尺,魔高一丈,任何一个方法时间久了也都有规避的办法.所以还是得拼一下人品.

  1. 购机验机

在淘宝上逛了一多天后终于在1号下午下单.顺风果然很快,第二天早上就到北京了.下午机器到手.

开始验机.外包装已经拆封过.这个没办法,水货嘛,要避关,要刷机拆封是必需的.有些店宣扬全新未开封原装机实在是有点坑爹.首先检查外观.,前前后后仔细检查,找不到使用痕迹;贴膜也还正常,除了边缘不太紧致外,未有气泡.,据说新机有特殊气味,使用十数天后才会消散.不过实在不知道什么才算是特殊气味.,拆开后盖,检查插槽是否有使用痕迹.确保外观没有异样后开机检查.检查各种系统记录,比如开机时间,通话记录;检查串号IMEI.与机身串号一致,但是在网上查没有正确结果;检查生产日期,查得20113月生产,奇怪的是根据机身SN 码日期为20112,竟然不一致?开机检测,屏幕测试,检查有无亮点,结果正常.最后检查配件.都说配件很容易做手脚,确实很难查.两块电池,都是产自中国,一块3月分,一块1月份,仔细检查了一会儿,没有发现使用痕迹.至于其他配件比如耳机,充电器就更难判断了.

总之,对于验机,感觉还是靠观察使用.所谓工程模式的各种测试指令,其有效性值得怀疑.系统已经刷过,很多信息已经更新.仅凭几个指令应该是难不倒JS.好在支付宝有10天的窗口期,在这个时间内努力的挑毛病.如果使用没问题,验机也就没多大意义了.

最后感叹一下淘宝商户的进货渠道,每天几十台的销量都能支撑,他们是怎么采购怎么入关的呢?

尤其要感叹一下国内的苛捐杂税,内地行货普遍要比水货贵上前元.虽然部分是由于各级代理,但内地消费税偏高也是不争的事实.各种成本税赋最终都转嫁到了消费者头上.刺激居民消费已经喊了很多年,也必将再喊更多年.如今这年头,老百姓真正能做主的恐怕也只有口袋里这点零花钱了,要想他们掏出来消费,不来点实际行动,光喊口号是没用的.

Posted in 随笔 | Tagged: | Leave a Comment »

感谢郭佳 GSoC中了

Posted by ieipi 于 五月 10, 2011

gsoc结果公布已经快两周了,还是写点什么吧。

大概是在今年刚开学的时候就看到了来自Google的新闻,似乎今年Google在二月份就启动gsoc项目了。当时没怎么在意,主要是幻想今年能出去找找实习。后来逐渐认识到了现实的残酷,身不由己。。。。。。

既然不能出去实习,gsoc似乎是最好的选择了。无奈去年失利的阴影还在,万一这回又挂了咋办,上次失败的日志还在那儿尸骨未寒,总不能这回又写个失败总结吧?

318日,周五,Google公布了所有入选的开源组织。周末晚上回去浏览了一下,发现去年的那个组织还在,本着试一试又不犯法的精神,我发出了第一封邮件。忐忑间,mentor已经有了回复,很热情的回复。这下我的热情也上来了,于是接下来数天,邮件往来,不亦乐乎。

下一周就是提交proposal了。在这里,很有必要喷一下GFW。狗日的GFW,连gsoc的官网都被墙了。宁可错杀一千,也不放过一个。头几天,用了个GApp代理能上。刚好在临提交时却发现这个代理不行了,难不成让我为了这事去买个VPN?鼓捣了一个晚上,尝试各种翻墙术,总算可以上了。但是有GFW在,心里总归不踏实。

屋漏偏逢连阴雨,这时老板突然心血来潮,让写一篇paper投稿。只差一个月就截稿了。我委婉的表示无米之炊难为,但是老板坚持说只是一个小paper,可以投。可是再小的paper它也是paper啊,麻雀虽小,五脏俱全啊。我也知道双线作战乃兵家大忌,两手抓,往往两手都硬不起来。但是没办法,我还得先应承下来。

为了赶时间,早早提交proposal后就开始等回应了。心想着先抢得先机,再根据mentor的意见慢慢完善。但是邮箱却开始沉寂下来了。这时清明假期来了。出去玩了几天。这期间,gsoc官网不能上了,也不知道进展如何。也亲身体验了一把Gmail抽风的问题,邮箱经常连不上。话说它们真的会对Gmail全面动手吗?God bless gmail

放假回来后就发现邮箱有动静了。原来就在假期中,组织的大头目给我comment了。怎么就没有邮件通知呢?我连忙去仔细看了一下他的留言。大事不妙!他对我之前的有些问题不太满意,feel uncomfortable,似乎觉得我说了大话,骗了他们。他只是uncomfortable,我却是非常的terrible,赶紧想办法补救。马上就回了留言。然后就开始coding,这时候恐怕只有source code才能证明我的清白。没等他们回复我的留言,我就把我的代码给附了上去,又balabala说了一大推。然后就静候佳音。一连几天过去了,仍然没有消息,我开始坐不住了。只有直接联系我的mentor,探探口风。Mentor实在是个好人,他让我不要多想,专注于项目本身。我总算稍微能宽宽心。

就这样,在忐忑中,48日,application deadline到了。接下来就是更为煎熬的evaluation period

我这边却还是没什么动静,也没收到有什么test。在channelmailing list里面问了,得到的回复是他们很忙,正在evaluate我们的proposal。也不知道他们是怎么evaluate的。不能干等,于是我就不断的自己找问题主动联系mentor。这个周末,16号,戴同学和占同学来北京玩,于是乎我又放了几天假。玩的很happy。回来之后,还是没谱。眼看着两个deadline都要到了,心里万分捉急。终于忍不住在周三的时候,又找了一下mentor。这个时候,他们的人选应该也定的差不多了。在我一再焦虑的逼问下,他总算给了一些积极的回应。先是说我的proposal在他看来acceptable,接着说我提交的code看起来promising。我承认我看到这两个词时很是心花怒放了一会。但是老外有时太gentlemen了,习惯说赞语。我还是不敢太当真。接下来他竟然跟我聊起了中西方文化差异,这当然是我感兴趣的话题。无奈英文不给力,连first namelast name都差点搞错了,伤不起啊。但是心里一阵窃喜,他既然跟我聊这些,莫非有戏了。又不敢直接问他我中没中,显得中国人不守规则,好打听。之前就发生了一件小插曲。还是在申请阶段的时候,有个阿三在channel里面不无得意的说因为中国政府和Google之间的紧张关系,Google禁止中国学生参加,所以印度成为除美国本土以外申请人数最多的国家。搞得我很紧张,连忙去问。结果引来一帮人对文凭含金量的议论。说什么虽然Google只接受大学生和研究生申请,但是各个学校的文凭含金量不一样。还建议Google今后是不是也得对学校进行一些资格审查。难不成我们国家文凭泛滥已经名声在外了?莫非又成功输出价值观了。

第二天,周四。这回mentor主动找我聊了。他上来就整一句how are you?我差点条件反射般跟一句fine, thank you, and you?想起了网上那些段子,觉得不可。可是他来这么一句到底是一种什么样的思想感情?初中英语瞎学了。是让我汇报工作吗?于是我就老老实实的说最近在憋论文,他很nice地祝我成功。然后他就问我什么时候可以开始工作,我当然说随时可以。到了最后,他就开始嘱咐我了,说他从周五到周一要回去度假,有什么事该找哪些人等等。这下我终于可以心花怒放了。看来至少在他那里是没什么大问题了,而且既然他周末可以去度假,那我是不是也可以放松放松。。。

然后我就等着过个愉快的周末,去了趟798,然后就把手机弄丢了。然后就买了个android

原本以为是周日晚上出结果,做好了准备熬通宵。结果发现我把时间搞错了,是UTC时间42519:00,相当于北京时间周二凌晨三点。

于是周一整天心神不宁。到了晚上,不得不靠看电影消磨时间。大概凌晨一点时,电影也看不下去了,电视剧也不行。还有两个小时,可怎么熬?于是开始dota,打了一半发现竟然连dota都难以让我集中精力。接下来的时间就变成了垃圾时间,不断的刷屏。

大概差三分钟三点时,Google发来贺电,Congratulations, 你的申请已通过!赶紧上channel等着开会庆祝,却发现一点锣鼓喧天鞭炮齐鸣的喜庆气氛也没有,冷静的很。为啥大家都这么淡定呢。心里有点不踏实,又上官网去求证。上面明白无误的有我的名字和我的proposal。应该不会有错。于是进到我们组织的channel,感谢cctv,感谢mtv,瞎感谢一通,终于可以上床睡觉了。

Google官方规定的时间是从五月底开始,但是我之前给过他们承诺,所以现在就得提前开始,毕竟要为我们曾经吹过的NB负责啊。

开始coding吧。

Posted in 随笔 | Tagged: | Leave a Comment »

监守自盗(Inside Job)

Posted by ieipi 于 四月 26, 2011

本片获2011年奥斯卡最佳纪录片奖。记得当时领奖者上台就说,金融危机过去三年后仍然没有一名华尔街高管入狱是不正常的,台下马上想起雷鸣掌声。由此可见该片的敢做敢为。的确如此,片中采访了很多所能采访得到的大人物,提问也很尖锐,哥伦比亚商学院院长甚至当场发飙。

该片分为5个部分:历史由来(How we got here),泡沫产生(The Bubble),危机爆发(The crisis),责任追究(Accountability),现状(Where we are now)。

影片从冰岛的危机开始讲起。冰岛是一个经济发达,政治民主的发达国家。但是自2000年来的金融改革,逐渐使得该国走上了破产之路。

接着回顾了美国金融监管历史。在美国历史上,一直对银行家是高度戒备的。华尔街的名声一直不好。大萧条之后制定了严苛的金融监管法案。但是到了80年代,里根上台后金融监管开始放松。之前制定的很多监管法案名存实亡,甚至被废除。各种金融衍生品不断涌现,金融业空前繁荣。

2000年互联网泡沫破灭,但是新的泡沫继续酝酿。2008年,房地产泡沫破灭,次级贷款引发的金融危机波及全球。

危机造成的损失是巨大的,但是承担损失的却是普罗大众,华尔街的银行家赚的盆满钵满。按照传统的经济学观点,金融产品通过控制风险获利。但是此次危机表明,恰恰相反,华尔街靠高风险获取高利润。按照常识,高风险必然潜藏着不稳定性,危机在所难免。但是华尔街似乎乐此不疲,高枕无忧,甚至有意为之。此轮危机的导火线是次级债,赌注是美国房间的持续上升。专家宣称“real estate is real”,就连伯南克也在接受记者电视采访时公然宣称“美国的房价是不可能下跌的”。可是,别的东西价格能波动,房价为什么就不能下跌呢?果不其然,一旦房价开始松动,多米诺效应就开始显现,危机迅速扩散。一荣俱荣,一损俱损。其兴也勃焉,其亡也忽焉。

华尔街的势力早已广泛渗透到了政治,社会领域,令人不安的是现在它已经强势渗入教育领域。美国很多高校的商学院与华尔街联系之紧密难以想象。当学者坠入现实利益纠葛之中时他还能保持独立性吗?如果一个医生建议只用某医药公司的药,但是同时他的研究经费大部分由该公司支持,那么这一建议还有多大的可信度?学界已经在广泛的为银行家背书。教授一手拿钱,一手写软文。

奥巴马当时正是凭借对华尔街的抨击入主白宫。但是他上台后,金融改革仍然举步维艰。其任命的很多财经官员仍是之前在位的鼓吹放松管制的人。难怪有人说看到奥巴马的人事安排就知道他鼓吹的金融改革只是笑谈。如果连民进党的人都奈何不了,一旦共和党上台就更不用说了。华府,华尔街果然是一丘之貉?

影片最后呼吁普通美国公民努力行动起来同华尔街作斗争,争取自己的权益。虽然某些专家会跳出来说金融事务太过复杂云云,普通大众难以理解云云,银行家也会信誓旦旦的保证下不为例云云,但这些统统是浮云,监督监管才是王道。

Highlight

  1. 影片采访的人物之一,米什金,编写了著名的《货币金融学》。我去年花了70多远买了该书的第七版(正版)。一度奉为圭臬。但是他的采访实在让人大跌眼镜,不由得让人怀疑他的学术独立性。他曾经是美联储理事,但在危机爆发前夕的2008年8月,他却突然辞职,宣称是为了去修改教材。正如采访记者所说,修改教材是件重要的事,但是在那个特殊的时刻,世界上应该有更重要的事要做。
  2. 影片中提到的很多重要的华尔街高层人物,包括格林斯潘,保尔森,伯南克,盖特纳等人都拒绝接受本片采访。
  3. 哈佛校长是放松金融监管的重要推手,他仍是奥巴马政府的座上宾。哈佛商学院学术委员会注意,在被问及教授的学术研究与经济利益冲突时无以应答。哥伦比亚大学商学院院长在被问及同样的问题时甚至当场发飙。
  4. 摩根斯坦利在1970年代只有100来人,但是如今迅速扩张到5万多人。1960年代华尔街平均薪资为4.5万,与其他行业相差不大;但是如今已达60多万,远超其他行业。

Posted in 纪录片, 影视 | Tagged: | Leave a Comment »

GSoC2011 announcement

Posted by ieipi 于 四月 26, 2011

At April 25, 19:00 UTC, the accepted student proposals have been announced.

It’s 3:00 am here in Beijing. I have to hold up late again. But this time it’s more difficult.I just can’t calm down and concentrate after 1:00 am. I tried watching movie, TV plays and even dota, but all failed.

At about 3 mininutes to the final time, I got an email from Google. Congratulations! your proposal has been accpeted as the GSoC 2011 project. Is that ture?! I went to the gsoc webpage, and searched my proposal. Yes, i made it!All work has paid.

Thanks Jitsi community! Thanks Lyubomir!

Posted in 随笔 | Tagged: | Leave a Comment »

C Programming Language (1)

Posted by ieipi 于 四月 21, 2011

好吧,传说中的C语言圣经,我直到现在才看。然知耻而后勇,不亦乐乎!周末抢着看完了,不愧是经典,短小精悍,无以复简。

Chap0: History

本书初版于1978年,再版于1988,时至今日,日久弥新。
C语言由贝尔实验室的Dennis Ritchie于1969~1973年创建。C的名称由来是因为它从早期的B语言中借鉴很多特性。C语言与Unix的诞生相辅相成。1973年,Unix内核用C语言重写,从此一发而不可收拾。1978年,本书第一版诞生,成为C语言的非正式标准文档,被亲切地称为K&R。1983年,ANSI设立了一个专门委员会,致力于建立C标准。1989年,该标准发布,通常被称为ANSI C,或C Standard, 或C89。自此,C语言大致保持不变,1990年代陆续加入了少许新特性,这导致C99的诞生。

Chap1: Tutorial Introduction

Chap2:Types,Operators and Expressions

这些是程序设计语言的基本要素。

2.1 Variable Names

  1. 变量名由字母和数字组成,第一个字符不能是数字。下划线”_”也是字母,但是一般不用做变量的首字母,因为通常库函数会以下划线开头。
  2. 对于internal names,至少前31个字符是有效的;但是对于external names, the standard guarantees uniqueness only for 6 characters and a single case.(???) 。这是因为,外部变量可能会被汇编器和加载器用到,而语言对于这两者是无法控制的。

2.2 Data Types and Sizes

  1. C的语言类型基本为两种:整型和浮点型。前者包括char,short,int,long等,后者包括单精度和双精度。两种都包括有符号和无符号。
  2. C标准对于类型的大小没有明确的规定。编译器只需保证short和int至少16位,long至少32位并且short不大于int,int不大于long。
  3. 浮点类型数据大小同样与硬件平台有关。
  4. 标准库中的和包含相关信息。

2.3 Constants

  1. 字面整常量(literal integer constants, e.g. 1234)为(signed)int。加上后缀U和L后分别可表示unsigned和long。
  2. 字面浮点常量默认为double类型。可加后缀F表示float。
  3. 整形值可用八进制(037=31)或16进制(0x1F=037=31)表示。用这种表示法可以方便看出数值的二进制比特级位表示。
  4. 字符常量本质上是一个整型数值(numerical value)。但是其具体值由机器的character set 决定。采用’0’形式的字符表示,而不直接采用其对应的数值(48 in ASCII)一是因为可读性好,二是与特定字符集无关,增强可移植性。
  5. 某些特殊字符(无法显示)可以用转义序列表示。
  6. 字符串常量:以”/null/0结尾的字符数组。
  7. 枚举常量VS #define ???

2.4 Declarations

  1. 所有的变量在使用前都必须先申明(declared),但是有些声明可以根据上下文隐式地给出(???)。
  2. 初始化:对于external variable和static variable,会默认初始化为0;如果对其显示初始化,则该表达式必须是常量,并且初始化操作只在程序实际运行之前执行一次。 对于automatic variable,应该显性初始化,否则默认值是undefined garbage value。如果对其显性初始化,表达式可以是任意表达式,且初始化操作在程序每次进入该函数或块时都会执行一次。

2.5 Arithmetic Operations

  1. 对于负数,/(截断的方向)和%(余数的符号)运算的结果是与机器相关的。

2.6 Relational and Logical Operators

  1. 对于逻辑操作符&&和||,expressions are evaluated from left to right, and the evaluation stops as soon as the truth or falsehood of the result is known.

2.7 Type Conversions

  1. 当操作数涉及到不同数据类型时,需要进行类型转换。一般而言,低精度到高精度的转换(不会丢失信息) 会自动进行(没有warning?)。高精度到低精度会丢失信息,编译器会给出warning信息,但是不会报错,仍然合法。
  2. 对于char到int的转换,结果有无符号未定,与平台相关。
  3. 基本上算术运算中的隐式类型转换结果满足预期,但是涉及到无符号数时必须小心。这是因为signed与unsigned的比较与机器相关。例如-1L<1u(1u会首先转换成signed>1UL(-1L首先转换成unsigned long).(另据CSAPP2.2.5,如果一个运算数是有符号另一个是无符号,C语言会强制将有符号转换为无符号???)
  4. cast:强制类型转换,它是一个一元操作符,优先级属于第一级(最高一级)。
  5. 函数调用时的类型转换。

2.8 Increment and Decrement Operators

2.9 Bitwise Operators

  1. <<左移位操作的结果是确定的——低位补0;但是右移位>>的结果未定。逻辑右移高位补0,算术右移高位符号扩展。

2.10 Assignment Operators and Expressions

  1. “=”也是一个操作符,其运算结果是其左值执行完赋值操作以后的结果。

2.11 Conditional Expressions

  1. expr1 ? expr2:expr3是条件表达式,和其他表达式效果一样。特别的, int n = 1, float f = 1.0f, (n<0)>

2.12 Precedence and Order of Evaluation

  1. 运算符优先级及结合型如右图。
  2. C语言没有规定同一个运算符的多个操作数的求值顺序。例如x = f() + g()这个表达式中,f和g谁先被调用是不确定的。
  3. 函数的参数求值顺序也是未定的。例如:printf(“%d%d\n”,++n,power(2,n))的结果是未定的。

Chap3: Control Flow

Posted in 语言, 技术 | Tagged: | Leave a Comment »

Speech Coding

Posted by ieipi 于 四月 10, 2011

1. Sound

Sound is a mechanical wave generated by a vibrating sound source and  transmitted through an acoustic media(e.g air) by means of an an oscillation pattern of pressure composed of frequencies within the range of hearing.

2. Voice

Voice is the sound produced by humans and other vertebrates using the lungs and the vocal folds in the larynx.
Voice is not always produced as speech.

3. Speech

Speech is decode-able sound humans use to express thoughts, feelings and ideas orally.

4. Speech generation

Speech is produced when air is forced from the lungs through the vocal cords and along the vocal tract. Fig1 is the human vocal tract.
Fig1. Human Vocal Tract
The vocal tract introduces short-term correlations (of the order of 1 ms) into speech signal, and can be thought of as a filter with broad resonances called formants. An important part of many speech codecs is the modelling of the vocal tract as a short term filter the transfer function of which needs to be updated only relatively infrequently (typically every 20 ms or so).
Speech sounds can be broke into three classes based on their mode of excitation. The excitation is the air forced into the vocal tract filter through the vocal cords.
  • voiced sounds
  • unvoiced sounds
  • Plosive sounds
Although there are many possible speech sounds, the shape of the vocal tract and its mode of excitation change relatively slowly, and so speech can be considered to be quasi-stationary over short periods of time (of the order of 20 ms). Speech signals show a high degree of predictability, due sometimes to the quasi-periodic vibrations of the vocal cords and also to the resonances of the vocal tract. Speech codes attempt to exploit this predictability in order to reduce the data rate necessary for good quality voice transmission.
Fig2 is a speech generation model

Fig2 Speech Generation Model

5. Speech properties

  • Formants are defined as ‘the spectral peaks of the sound spectrum’.
One major property of speech is its correlation, i.e. successive samples of a speech signal are similar. The short-term correlation of successive speech samples has consequences for the short-term spectral envelopes. These spectral envelopes have a few local maximal, the so called ‘formants’ which correspond to resonance frequencies of the human vocal tract.
This (short-term) correlation can be used to estimate teh current speech samples from the past samples. The estimation is called prediction. Because the prediction is done by a linear combination of past speech samples, it is called linear prediction.Only the prediction error signal is conveyed to the receiver.
  • Pitch represents the perceived fundamental frequency of sound.
Pitch can be quantified as frequency, however it’s not a purely objective physical property, but a subjective psycho-acoustical   attribute of sound.
Voiced sounds as e.g. vowels have a periodic structure, i.e. their signal form repeats itself after some milliseconds, the so-called pitch period TP. Its reciprocal value fP=1/TP is called pitch frequency. So there is also correlation between distant samples in voiced sounds.
This long-time correlation is exploited for bit-rate reduction with a so-called long-term predictor (also called pitch predictor).

6. Speech codecs taxonomy

  • waveform coding attempts to reproduce the time domain speech waveform as accurately as possible.
  • analysis-by-synthesis methods utilize the linear prediction model and a perceptual distortion measure to reproduce only those characteristics of the input speech that are determined to be most important.
  • Sub-band approaches break the speech into several frequency sub-bands and code them separately.
  • transform coding performs transform to the input signal and transmits the coefficients information to the receiver.

7. Speech digitization

The analogue speech is sampled and quantized. According to the sampling theory, the required sampling rate is 2*BW, wherein BW means the frequency band of the original signal. The bandwidth of the speech signal can be classified as follows:

  • Narrow band: 300Hz~3.4kHz. Used in traditional telephony network. Usually allocated a channel of 4kHz, and thus allows sampling rate of 8kHz.
  • wide band:  50Hz~7kHz. Used in VoIP
  • super wide band: upper frequency is more than 7kHz. Used in video telephony.
PCM is the basic digital representation of analog speech signal. The two basic property is the sampling rate and the bit depth. They determines the original bit rate of the digital signal. With linear PCM, sampling rate is 8 kHz and bit depth is 16 bit, and thus the bit rate is 128 kbps. With logarithmic PCM, bit depth is 8 bit, and thus the bit rate is 64 kbps. This is applied by G.711 codec which is the standard codec used in PSTN and ISDN.
PCM stream is not compressed and regarded to have toll quality. However, the bit rate is usually very high for transmission. So the speech compression is needed.

8. Speech coder attribute

  • Bit rate is the rate of the output bit-stream of encoder. It should conform with the target network bit rate(network bandwidth or channel bandwidth).
  • Delay usually consists of three major component. The algorithmic delay, the process delay and the transmission delay. The latter two is dependent on the implementation and the external channel property. However, the first one is independent of practical implementation. Usually algorithmic delay = frame size(or frame length) + look-ahead. The sum of the first two is the one way codec delay. And the total of all the three is one way system delay.
  • Complexity is often referred to as required MIPS, RAM memory size and ROM storage size
  • Quality has the most dimensions of all the attributes. There are subject tests and object approaches to evaluate codec quality.

Posted in 技术 | Tagged: | Leave a Comment »

GSoC application deadline

Posted by ieipi 于 四月 10, 2011

The GSoC2011 application deadline is 19:00 UTC, April 8, which is 3 am here in Beijing. I have hold on to the last minute, and submitted my final application.Hope i will get positive feedback from mentors.

Posted in 随笔 | Tagged: | Leave a Comment »