消息队列

整理浏览器书签时候发现以前对 Message Queue 产生过一些兴趣,以后说不定还会仔细做一下调研。在这里先简单记录一下,也好精简书签数量。

1. MemcacheQ

使用 memcache 协议的消息队列,存储看是使用的 Berkeley DB。受限于 Berkeley DB,对消息大小有一些限制——不超过 64K,但简单易用,缺点还包括缺乏复杂的消息队列特性。

2. ØMQ (ZeroMQ)

专门的消息队列实现,支持多种语言,支持较多的高级特性,也可用于进程内通信。类似于 TCP,不假设消息格式,需要用户自己处理消息封包、解包。文档很清楚,看起来很酷的样子,未调研是否支持分布式扩展。

体验海淘-Google Nexus 7

一直想买个安卓 Pad 玩玩,正好 Google 家出了 Nexus 7,很眼馋。但遍览淘宝代购,发现 8G 版最便宜的还要 1670,排队者甚众。仔细算了一下,觉得代购有点儿黑。本来价格比算上关税、运费都要贵,还不是现货,需要预付款排队,不定得等多少天。于是就抱着体验的想法,直接海淘了一把。

海淘肯定得看攻略,Nexus 7 的攻略虽然不多,但也足够了。其实难选的无非是两点:一是在哪里买,除了 Google Play,还有其它网上商店,各有优劣;二是用哪个转运公司,这个也是各有优劣,都得看前人的经验。

我比较懒,转运公司选择了用的比较多的 CUL 中美速递。注册以后会给两个转运地址:一个 CA 加州的,一个 DE 特拉华州的。地址中有个人识别码,在网站下单后送到该地址的商品会被记录到个人的名下,并转运回国内。

我想买 8G 版,只能选择 Google Play 商店并且交 13.99$ 的运费。由于 Google Play 限制销售地域,我就挂了个美国的 SOCKS 代理,在 Google Wallet 顺利用一张 Visa 信用卡配合 CUL DE 的地址下单,没有被砍单。下面就简单用时间记录一下海淘过程,都转换为北京时间:

2012-07-25 21:19:Google Play 下单成功,Gmail 信箱收到订单收据;
2012-07-26 13:23:Gmail 信箱收到发货通知,拿到 UPS 追踪号码,于是去 CUL 页面填写货物预报。
2012-07-26 14:25:填写货物预报时发现收货地址写错(街道地址填成了加州的 914 Ajax Ave),在 Google Play 提交请求修改 UPS 包裹收货地址街道部分;
2012-07-27 02:17:UPS 显示包裹离开 Louisville, KY;
2012-07-27 05:56:收到客服响应,同意修改 UPS 包裹收货地址,但要求提交完整的地址,并说明只能尽力帮忙修改;
2012-07-27 08:03:提交完整地址给 Google 客服;
2012-07-27 08:14:Google 客服帮忙完成了 UPS 包裹收货地址的修改,UPS 追踪显示地址已修改;
2012-07-27 23:05:UPS 显示包裹已完成配送;
2012-07-28 09:00:登陆 CUL 发现包裹已入库,重2磅,于是提交订单,给了5元小费,支付宝付款,然后订单状态就一直显示为处理中;
2012-07-31 09:00:登陆 CUL 发现总算发货了,订单中能找到 EMS 追踪号。但我傻了吧唧地去 EMS 网站上查了两天,都没有查到追踪信息;
2012-08-02 21:00:总算发现早期那个追踪号应该在 UCS 网站上查,查了一下,是7月30日 10:26 发货的,看来包裹在 CUL 仓库里呆了两天。
2012-08-06 11:09:接到快递电话,Nexus 7 到手。

由于中间回了趟家,也没有预计到转运到国内速度会那么快,于是2日到6日之间一直没有关注包裹的追踪情况。到手之后查了一下 EMS 网站,才发现转运的速度还不算慢(EMS的时间貌似都是本地时间):

2012-07-29 22:26:00 UC 纽约 到达处理中心
2012-07-30 21:00:00 UC 纽约 离开处理中心,发往中国 上海
2012-08-04 07:32:00 上海邮政速递物流大宗邮件收寄处 收寄
2012-08-04 10:51:09 上海邮政速递物流大宗邮件收寄处 到达处理中心,来自上海邮政速递物流大宗邮件收寄处
2012-08-04 11:30:00 上海邮政速递物流大宗邮件收寄处 离开处理中心,发往上海市邮政公司邮政速递局
2012-08-04 14:04:11 上海邮政速递物流大宗邮件收寄处 离开处理中心,发往国内出口
2012-08-04 16:34:00 上海市 到达处理中心,来自上海邮政速递物流大宗邮件收寄处
2012-08-04 16:58:00 上海市 离开处理中心,发往北京市
2012-08-05 09:27:41 北京市 到达处理中心,来自上海市
2012-08-05 12:58:42 北京市 离开处理中心,发往北京邮政速递上地分公司上地营运部
2012-08-05 15:10:50 北京邮政速递上地分公司上地营运部 到达处理中心,来自北京市
2012-08-05 15:54:48 北京邮政速递上地分公司上地营运部 安排投递
2012-08-05 16:14:00 北京邮政速递上地分公司上地营运部 未妥投
2012-08-06 07:26:37 北京邮政速递上地分公司上地营运部 安排投递
2012-08-06 11:37:00 北京邮政速递上地分公司上地营运部 投递并签收

最后总结一下几点经验:

  • 全部时间:11天14小时
  • 全部费用:199$(8G版)+13.99$(美国国内运费)+ 75¥(CUL转运费) + 5¥(CUL小费),整体算下来比淘宝代购便宜 200+
  • 信用卡:工商银行信用卡网银支持开通/关闭境外无卡支付功能,支付前开通,扣款完关闭,海淘比较安全
  • CUL 服务:比较差,包裹入库、发出没有邮件通知,只能人肉登陆去看;QQ 客服常年离线;微博官方账号无响应。但从整个转运结果来看,也还算靠谱。更新:最近很多人抱怨CUL不靠谱,所以我这里也不建议大家用了。
  • CUL 羊毛:邀请用户注册,下单付款后,邀请人和被邀请人都能获得 20 积分,以后下单能抵 20 元运费。我的 CUL ID 是 solrex,也可以直接点击这个邀请链接注册,你懂的!

第一笔博客收入

博客上放百度网盟广告2318个月,终于迎来了第一笔联盟分成103.37元。我还以为是补充医疗保险的理赔款,因为款额不对纳闷了半天,刚刚登邮箱看到上周广告报表才突然想起来。我的博客总算赚钱了!

另外,感谢部分同事的关心:我注册百度联盟是早在进百度之前的事情,而且由于存在利益相关,我一年多前就将个人博客投放百度联盟广告报公司备案了,公司并没有禁止这种行为。

上图,都是一分一毛地攒出来的啊!

第一笔博客收入

史蒂夫·乔布斯传

我一直羞于去崇拜某个人,死去的或者正在死去的。我总害怕他做了或者将要做一件我并不认同的事情,这就好比冬至吃饺子时吃到一块脏兮兮的硬币,不是每个人都能享受这种运气。所幸的是《史蒂夫·乔布斯传》的作者所持角度还算客观。读完这本书之后你不免去崇拜乔布斯,但又会有所保留。你会想:我真希望能达到他那样的成就,却不想成为他那样的人。

每个人做事都有自己的方法,但乔布斯采用的那种,恐怕要被归到异类中去。只有他那种天生的特质,结合独特的人生经历,还有过早成功的光环,才能造就那样强大的现实扭曲力场。跋扈如他那样,做一个打工仔的话,恐怕不出半月就要卷铺盖走人了。

在他的传奇一生中,有一股认真劲儿让人不能不佩服。包括他对事件策划、产品外观、字体、广告、包装,甚至于名片美学上的执念,无不让你觉得这家伙真倔,真难办。但当你转了一圈儿,看到那么多平庸的玩意儿时,你就会想:哦,这家伙还是有一定的道理的。

除了认真之外,他还有一点让我非常羡慕的,就是不屈于现实。软驱、吸入式光驱、玻璃屏幕、拉丝铝外框,到处都透着不妥协。但奇迹的是,那些硅谷工程师们居然办到了!这一点也被我归结为我们信息技术落后于硅谷的原因,奇思妙想得不到尊重,创新的阻力远大于推动力,有批判性,无建设性。

如果在这里赞扬他,能够列出的点还有很多。看完这本传记后,我甚至有去买苹果产品的冲动。但就像前面所说,我,一个平庸的家伙,对乔布斯的革命性的设计和产品,一直没有足够到转化为购买力的欣赏。创新是一样高投入的工作,必须有高回报的支持,而这依赖于掏腰包的人的欣赏和价值认可。对于某个产品来说是这样,对于一个公司来说,同样如此。可惜的是,很多公司的老板更像我,而不是乔布斯。

技术人员的眼界

意识到眼界的重要性,最初是在大学时学长的交流会上。南大数学系有一个传统,每年总有那么两三次组织高年级的同学开经验交流会。这些交流会可能有明确主题,例如留学或是找工作,也可能没有明确主题。幼稚如我,在大一阶段拒绝参加任何形式的社团或者活动,认为踏踏实实做好眼前的事情足矣,闲暇时间基本花费在小说上。后来的种种经验证明,这是多么傻的一种做法!

我在数学方面是一个资质一般的学生,是几位师长和朋友打开了我在计算机行业的眼界,得以投身到信息技术的洪流中。写到这里忽然觉得有变成回忆长文的迹象,就此打住,几位是谁就不介绍了。唯一值得一提的是,李开复先生也是其中之一,这也是我从不参于对他的争议和讽刺话题的原因。在帮助和启发中国学生方面,我觉得他是一个值得尊敬的人。

但是在进研究生院之后,我自己闭塞了眼界的发展。一方面有当时身处的环境使然的原因,另一方面有成绩羞见江东父老的自闭自卑成分。非常后悔的有两点,一是虽然在某个研究专题方面有所收获,但在计算机科学系统性知识方面的进展不够大;二是身处远离实业的象牙塔,虽然亲身经历了一次严重的经济危机,却没能趁机深入地去学习和观察隐藏在这场危机之后的经济和科技发展规律。

我用来勉励自己,有时候也用来鼓励他人的一句话是:“只要你读的是自己不知道的东西,那就是在进步。”因而我经常不择食地去读一些书,了解一些知识。但渐渐地认识到了一点,当你着手去学习时,眼界决定了你汲取知识的效率和效果。具体到计算机科学,眼界可能决定了你读的书是经典还是垃圾,花时间在过时的还是新兴的技术上。

这个周末在家看吴军先生的《浪潮之巅》,爱不释手。作为一个曾经拜读过 Google 中国黑板报上“浪潮之巅”系列连载的读者,我本以为这会是本信息企业史,但阅读后发现新增的三分之一内容更精彩。我不曾想过一个技术人员的眼界会如此之广,能够从各个角度去观察和分析身处的这个行业、这个时代。我不否认对于书中的一些观点我并不完全赞同,但作者的眼界和思考能力着实让我佩服。

现在我已经初步开始自己的职业生涯,未来该何去何从,心中有一些惶恐。该打造哪方面的能力,亦不知该如何着手。有一些短期的规划,但并无具体的长远目标,我知道自己又到了一个眼界的瓶颈期。都说中国的年青人被房子票子绑架了,我希望自己能在忧愁这些之外,分些时间来读读好书,交交优秀的朋友,想想深刻的问题,聊以自勉。

入手国产安卓机华为U8800感受

我总算理解了为什么别人说安卓用户三大爱好是:刷机、重启、换电池!

作为一个打拼在互联网界的民工,我不喜欢花很多钱在电子设备上,但又不想太落后于时代。在使用黑莓 8700 的这一年半中,对它的感觉经历了 “哦,这是一个很便宜的智能机” 到 “唉,这还能算是智能手机吗?” 的变化。用到目前,黑莓 8700 让我满意的地方就唯一剩下它可以独立为来电和短信铃声分配不同的提醒模式(振动、响铃、音量或LED闪),设置成为自定义的提醒profile。这对一天要24小时开机接收服务器告警短信的西二旗孩纸很有用!

于是乎,我就开始找性价比高的 Android 手机。其实之前拜托叶蒙买过一个内购的华为 U8220(坛子上一般称大内),女友一直在用;兼之电信送了一个华为 C5700,我也一直在用。不得不说使用后我对华为家终端的信任度大幅上升,因此第一考虑的国产品牌就是华为家了。

U8800 是从新蛋上买的,裸机价 1699(找代下单便宜20),移仓+快递用了 6 天——新蛋物流伤不起啊。

我在 U8800 坛子里逛了不少次,给我的第一印象是如果能忍受自带应用的话,不用刷机。回想起 U8220,貌似带的应用也不多,一直也没刷机提权啥的。谁知拿到 U8800 才发现,我靠,带了二三十个垃圾应用

于是我想到了在坛子里的第二印象,提权之后删掉自带的应用就干净了。于是我就 recovery,提权啥的,总算把垃圾应用删完了,这下该能用了吧。然后我发现,咦,Gtalk 呢?电子市场呢?同步 Gmail 联系人的地方呢?都去哪儿了?然后就开始搜啊搜,有人说得装 Google 服务包,结果下了N个装上都不管用。最后我搞明白了一个道理:行货手机自带系统是不能用 Google 服务的,除非有人专门弄出来一个针对它的 Google 服务包。坑爹啊!你们坛子里讨论这个 ROM、那个 ROM,肿么没人说联通定制 ROM 不能用 Google 服务呢?如果这样我还费劲提个屁权啊!

于是只好刷机了。其实华为家有一点比较好的地方,就是如果某款手机也在国外或者香港销售的话,找一个标准干净的官方 ROM 比较容易(垃圾的东西只敢用来欺负自己人),而且使用的是官方的比较安全的固件升级方法。比如 U8800 就有海外版 ROM,从华为的官网上能下到,下来之后直接看帮助文件就可以,不用从论坛上找什么安装方法。

于是折腾了将近 5 个小时,这款手机总算可用了。其实时间大部分都花在前面“不想刷机”的状态上了,到最后决定刷机倒反而很快了,除了下载固件比较慢。

我真的无法理解这些国内厂商,用别人开源的手机操作系统,却要把别人的服务全抹了去,这是怎样一种忘恩负义!还有一个关键是,你又无法提供更好的服务!拿我来说,为什么一定需要 Google 服务?因为我的联系人全在 Gmail 里,我的日程安排是通过 Google Calendar 双向同步到电脑和手机。光这两点,我就必需连接到 Google 服务。我敢把联系人全部存到开心网吗?我敢用手机直连我公司的 Exchange 服务器吗?

这货还是Kindle吗?

自从大家了解到 Kindle 的系统是 Linux 后,无数仁人志士前赴后继地尝试以各种方式 hack 这个系统,对于我等用户来说真是一大幸事!

好久没有跟进电纸书论坛,居然不知道神器 FBReader Kindle 版 —— fbKindle 的发布。mobileread 网站的原帖中,已经给出了安装和配置修改方法。不过我是遵从这篇帖子中的步骤,无它,摘要读起来更快。

没用过的朋友可能不太了解 FBReader,它是一个开源的跨平台电子书阅读器,支持很多种格式,包括我们常用的 GBK 编码 txt 文档以及 epub 格式。由于 epub 格式电子资源很多,以前我还纠结于为了这些资源要不要装多看系统。现在有了原生的 fbKindle,从 epub 支持这点来看,多看是没有什么必要装了。

此外,还有国人开发的Kindle 原生系统拼音输入法,可以支持在书中或者浏览器中输入中文。虽然我没有安装成功,但我对作者的努力是相当的佩服!

Kindle 原生系统拼音输入法
图片截取于输入法作者相册

在最近的使用中,我也发现了一个 Kindle3 离线读网上文章的小技巧。用 pdfcreator 将网页打印成 A6 幅面的 pdf 文件,并且在页面设置中设置四周页边距为 0(Chrome不支持,Firefox/IE可以),上下不打印网址、页数等信息。这样的 pdf 文件在 Kindle3 上会有比较好的展示效果(字体很小时顶多需要横屏),并且也有比较好的打印效果。由于 pdfcreator 还可以设置自动保存位置和自动文件命名规则,用起来还是挺方便的。

当然,如果你是可注册 K3-wifi 版用户,SendToKindle 浏览器插件可能更有用。

在越来越多有趣的事情发生在 Kindle 上之后,真期待这个生态圈将会变成什么样子。

有没有这样一种手机应用?

Google 的 Jeff Dean 在演讲中提过:对一套系统来说,每年典型的事故率会是这样的:1. 1-5% 的硬盘会坏掉;2. 全系统宕机至少两次。以前没有深切体会,现在我会说,i cannot agree more!

当你负责的系统线上服务器达到百台以上规模时,你就会发现这个系统频繁会出各种各样的问题:死机,是最频繁的,会有各种各样的原因导致死机,内存占满、CPU耗尽、硬盘故障,还有你永远不知道的原因;硬盘挂掉,如果对没有做 RAID 的系统来说,这是一个灾难,对于做 RAID 的系统来说,这是一个事故,不过也有可能是一个灾难;文件损坏,在脆弱的硬盘上面也是有可能的;存储空间耗尽,未必是所有空间都耗尽,但可能程序问题导致某个分区被写满;数据流延误,作为一个系统总有上下游吧,只要有一个地方卡住了,下面的数据流也就停了。

所以我想任何一个互联网企业都会支持异常监控报警机制,最典型的做法应该就是邮件和短信。虽然我不是运维人员,但是自己写的系统出了问题,也脱不了干系。于是报警短信就成了生活旅行必备之调剂品。

但是,报警多了也郁闷啊!为了尽早地发现系统问题,往往一台机器上会布多种监控,CPU、内存、硬盘、进程、数据流、文件,乱七八糟的一个不能少。这样以来误报率就很高,比如CPU IDLE可能一下子压到0但是迅速回升了,这没啥问题,但是报警短信是照发不误。更别说服务器多了,真出事儿的可能性也大,所以每天接个几条到几百条短信,都是很正常的事情。

让人郁闷的不仅仅是报警短信多,还有和平时短信分不清。时间长了,有些报警会出现在什么时候、会以什么样的频率出现,自己心里都有底了。有的短信不看,光凭规律就知道是啥问题,应该以什么优先级处理它。但是掺杂进平时短信就不一样了,这规律就被打乱了,只好每条必看。在无奈之下,现在我只好用一个手机专门收报警短信。

说了那么多,我就是想知道:现在智能手机那么多,有没有哪款智能手机或者APP,像邮件客户端一样,支持根据短信特征将短信分发到不同的文件夹中,并且可以给不同文件夹分配不同铃声或者干脆没铃声?

入手 Kindle

入手 Kindle 有一个多星期了,下面写点儿经验,希望对别人有用。

关于购买:

买 Kindle 3 (wifi) 的想法上个月就有了,犹豫了很多种购买方式,后来决定在淘宝上下手。9 月 21 号在五人行数码下了个单,但据说要很长很长时间才能拿到货(排队有 400+),就和店家协商退钱了事。就这样一直等到十一国庆假期,也没有找到合适的商家。国庆期间在豆瓣上看到一家说有现货的,国庆95折,1299 块,就买了一个。

第二天店家打电话说她的 Kindle 无法注册,问我还要不?我没有犹豫很久,就说还是要吧。第三天货到了,又联系店家,店家说愿意退款 100 作为无法注册的补偿。这样一想,还不错哦,就付款了。相当于 1199 买了个无法注册的 Kindle 3 wifi 版。

结果第四天就发现论坛上关于这批无法注册 Kindle 的话题已经热起来了,各种争论不休。大部分商家的做法是低价销售无法注册版的 Kindle 3,普遍降一百到两百不等。最便宜的是我在 Twitter 上看到的一个店家,卖到 1050,和我的入手价差 150 呢。唉,怎么说呢,心中还是有点儿小郁闷,要是再多观望那么两三天,就好了——不过这也是无法预料的事,不提了。

关于皮套:

我买的不是 Kindle 3 专用的皮套,是一般 7 寸电子书的皮套,图便宜。用起来感觉还行吧,反正主要是起一个保护屏幕的作用。

关于阅读:

各种评测啥的在hi-pda、多看等论坛上能找到很多,我就不赘述了。从个人的体验来讲,感觉还是挺值的,看书很舒服。而且我女朋友特别喜欢,已经抱着 Kindle 看完了阿西莫夫的《基地》系列。我主要是坐地铁时候用,也看了两本书:《民主的细节》和《1Q84》。

关于多看:

我尝试了一下多看系统,后来恢复出厂设置给删了,就没有再装。从个人来讲,我对多看系统主要有两点意见:1、对 mobi 格式支持的不好(封面、分节等显示不太好);2、没有 web 浏览器。虽然多看对中文 txt 支持较好,但是我用 mobipocket reader 转一下 txt 到 prc 格式也不复杂(想让 mobipocket reader 支持中文 txt 分段一般需要加空行,一句命令 sed 's/$/\n/g' file 就可以解决)。剩下对我来说,貌似没有什么用多看的理由——哦,中文输入法可能算是一个,以后再说吧。

关于 hack:

使用原生系统的话,还需要做些 hack 工作,主要有两点:1、修改 locale 为 zh-CN(可以加 .utf-8 或者 .gbk,如果想看 txt 的话),方法很多论坛上有流传;2、无法注册版本需要越狱一下,才可以支持显示用户名、创建 collection、修改时间等操作,俗称“假注册”,越狱方法见这里

关于图书管理:

图书管理的话,我用的是非常原始的方法:同步目录。在电脑上建一个 kindle 目录,使用 synctoy 将这个目录与 kindle 根目录同步。这样我下完图书就扔到电脑上的 kindle 目录里,连 kindle 的时候打开 synctoy 同步一下即可。

此外有一些比较好的图书管理软件,比如 calibre,但我觉得太重量级了。不过 calibre 还是有用处的,比如抓取新闻和 web 服务器功能。比如想看《南方周末》时,用 calibre 抓取下来做成 mobi 电子书,然后在 kindle 上用 wifi 访问 calibre 启动的 web 服务器,将做好的电子书直接下载到 kindle 里,少了 usb 连接的麻烦。

哦,越狱还有一个好处,可以获得 kindle 系统的 root 权限,当然也可以 scp 拷贝文件了,而且还有 vi、gdb、ssh 可用哦!里面看起来就是一整个简化过的 Linux 操作系统。

Linux kindle 2.6.26-rt-lab126 #5 Wed Sep 15 19:25:13 PDT 2010 armv6l unknown

关于图书资源:

我测量了一下,Kindle 3 wifi 的屏幕尺寸大约是 90mmx122mm,如果自己做 6 寸的 pdf 电子书的话,最好将页面大小调整为90mmx110mm,这样下面留12mm来显示阅读进度,pdf就不会变形很多了。 hi-pda 论坛的 e-ink 版面有很多资源(电子书、配置方法等),在入手前和入手后都可以常去逛逛。

关于升级 3.0.2:

我刚才升级了一下,感觉还是有点变化的。比如以前 pdf 翻页时候,连续按下一页或者上一页,响应会比较慢,升级之后速度会快一些。剩下的改进还有待观察。

悲剧的 MSN Space

MSN Space 总算倒了,所有用户都要求被迁往 wordpress.com,或者下载备份文件。话说我第一个用得顺手的 blog 还是 MSN Space,也用了很长的时间,不免觉得有些悲凉。

今天有同事问我,MSN Space 为什么混到这个地步?我说,本来 MSN Space 还凑合可用,但是每一次改版、每一次改名,都让你觉得更加难用。产品能做到这个份上,也真是不容易,不过无独有偶,MSN 也算得上跟它的绝配了!不知道什么时候能看到 MSN 整体搬迁用户到 AIM 或者改版到 XMPP?

哦,我又忘了,国内还有个飞信呢!不愧是外包给 MSN 做的产品,看看现在的飞信 4.x,我好怀念飞信 3.x 啊!

这件事情让我感兴趣的一点是,我总算看到一个可能,可以将以前在 MSN Space 上的评论,合并到现在的博客中了。或许需要自己写个小工具,假期可以尝试做一下。

一些论文相关 LaTeX 技巧

最近在写毕业论文,记录一下使用 LaTeX 排版时的一些笔记:

1. 正文英文使用 Times * 字体:

\usepackage{times}

2. 自定义列表样式

\usepackage{enumitem}
% 例:缩略语列表,缩略语大写,全称左侧缩进对齐
\begin{description}[font=\textbf, labelindent=2em, leftmargin=6em, style=sameline]

\item[CA] Central Authority.

\end{description}

% 例:列表标签使用 *) + 元素中段落首行缩进
\begin{enumerate}[label=\alph*)]
\setlength{\parindent}{2em}

\item 测试标签

测试段落

\end{enumerate}

3. 想使用列表但不希望列表中段落整体有缩进

% 自定义 minisection 命令,小标题,无编号
\newcommand\minisection[1]{\vspace{2ex}{\heiti #1}\vspace{1ex}}
% 例
\minisection{1)测试小标题}

4. vim 中使用 gqap 命令对中文文本格式化

下载 vim 插件:http://info.sayya.org/~edt1023/vim/format.vim

5. 按行方向合并单元格

\usepackage{multirow}

6. 拼凑中文生僻字

\hbox{\scalebox{0.4}[1]{王}\scalebox{0.6}[1]{莹}}

7. 为插图加框

\fbox{\includegraphics[width=0.9\textwidth]{figname}}

8. 设置 pdf 属性,设置参考文献链接和图片链接颜色为黑色

\hypersetup{linkcolor=black, %
            citecolor=black, %
             pdftitle={Title}, %
            pdfauthor={Name}, %
           pdfsubject={Subject}, %
          pdfkeywords={Key words}}

9. 对某页分栏排版

\usepackage{multicol}
% 分两栏
\begin{multicols}{2}

不可用于浮动环境。

\end{multicols}

10. 中文 LaTeX 编译 Makefile(注意缩进应替换为制表符)

ARTICLE=filename
ARTICLE_SRC=$(ARTICLE).tex $(ARTICLE).bib CASthesis.cls CASthesis.cfg
IMAGES=

all: article

article: $(ARTICLE).pdf

$(ARTICLE).pdf: $(ARTICLE_SRC) $(IMAGES)
    latex $(ARTICLE).tex
    bibtex $(ARTICLE)
    latex $(ARTICLE).tex
    gbk2uni $(ARTICLE)
    latex $(ARTICLE).tex
    dvipdfmx $(ARTICLE).dvi

clean:
    rm -f *.aux *.toc *.lon *.lor *.lof *.ilg *.idx *.ind *.out *.log *.exa
    rm -f *.nav *.snm *.bbl *.blg *.spl *.lot *.bak *~

distclean: clean
    rm -f *.pdf *.dvi *.ps

11. IEEE 投稿 LaTeX 编译 Makefile,主要处理嵌入字体和 pdf 版本问题(注意缩进应替换为制表符)

ARTICLE=filename
ARTICLE_SRC=$(ARTICLE).tex

#DVIFLAGS=-t [letter/a4]
DVIFLAGS=
# To avoid fonts and pdfinfo problems with the pdf file.
#PS2PDFFLAGS=-sPAPERSIZE=letter -dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/prepress -dMaxSubsetPct=100 -dSubsetFonts=true \
-dEmbedAllFonts=true
PS2PDFFLAGS=-dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress \
-dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true

all: article

article: $(ARTICLE).pdf

$(ARTICLE).pdf: $(ARTICLE_SRC) $(IMAGES)
    latex $(ARTICLE).tex
    latex $(ARTICLE).tex
    dvips $(DVIFLAGS) $(ARTICLE).dvi
    ps2pdf $(PS2PDFFLAGS) $(ARTICLE).ps

test: $(ARTICLE).pdf
    @echo "****************************************************************************"
    @echo "** IMPORTANT: PDF version should be 1.4!!!                                **"
    @echo "****************************************************************************"
    @pdfinfo $<
    @echo "****************************************************************************"
    @echo "** IMPORTANT: All Type 1 and Type 1C fonts should be embeded!!!           **"
    @echo "****************************************************************************"
    @pdffonts $<

clean:
    rm -f *.aux *.toc *.lon *.lor *.lof *.ilg *.idx *.ind *.out *.log *.exa
    rm -f *.nav *.snm *.bbl *.blg

distclean: clean
    rm -f *.pdf *.dvi *~ *.ps

我的京东换货经历

京东上也买过不少东西,这两天第一次体验了京东的售后客服,如实记录一下经历:

2010 年 4 月 2 日 22:09,在京东下了买电熨斗的单;

2010 年 4 月 3 日 08:39,收到订单已到达自提点的手机短信通知;

2010 年 4 月 3 日 10:55,在石景山自提点付款提货(必须先付款才能检查物品),拿到货物检查发现有问题,电熨斗有明显使用过的痕迹。当场提出换货,被告知自提点只负责提货,不负责售后,需要自己回去与客服联系;

2010 年 4 月 3 日 11:44,由于网上订单仍然显示未完成,无法提交返修申请,于是拨打京东客服 400 电话询问了一下情况,客服小姐的回答仍是等订单显示完成后在网上提交返修单;

2010 年 4 月 3 日 15:56,网上订单显示已完成;

2010 年 4 月 3 日 16:26,提交返修单,返修类型:换货,问题描述:电熨斗被使用过: 1. 电熨斗水箱内有残留水珠; 2. 电熨斗尾部下方支撑脚有磨损和污迹; 3. 电熨斗中部塑料转盘有破损; 4. 电熨斗插头周围有污迹;

2010 年 4 月 3 日 16:54,收到返修已生成换货新单的手机短信通知;

2010 年 4 月 4 日 09:46,接到快递电话,更换了新品。

说实话,事情顺利地挺出乎我意料的。因为从论坛上还有其它网站看到很多对京东售后的抱怨,本来有做好长期抗战的心理准备,没想到那么容易就把问题解决了,这件事情的处理我还是很满意的。当然,这只是个案,我只如实记录个人遭遇,不参与对京东客服整体质量的讨论。

有关 SVN、Cygwin 和 Notepad++

1. svn 的访问控制

很久以前我就自己配置过 svn 服务器,但总是不能访问成功。到最后还是使用文件系统(即用 file:/// 而不是 svn:// 或其它)访问 svn 仓库,因为自己建立的文件系统不需要认证。

今天我又尝试琢磨了一下我 svn 仓库的设置,才发现之前没配置成功的原因:svn 对用户的权限默认是关闭的。因此当我设置了用户名密码,svn ls 时得到的提示信息仍然是:

svn: Authorization failed

时,我就糊涂了,我的用户名密码没错呀,为啥还是Authorization failed?我还以为是密码设置有问题,没想到除了用户名以外,还得给用户配置访问列表(ACL),否则就什么都访问不了。说简单点儿就是 svn 用户访问控制是一个白名单机制,而我当成了黑名单机制。

知道了错误原因,就很简单了。到与 svnserve.conf 同目录下的 authz 为对应用户添加可以访问的项目就可以了。

2. cygwin 的启动速度

最近发现 cygwin 的启动速度大大变慢,一个终端起来至少要 30 秒。而且不仅仅是启动,所有程序的运行速度都变慢了,比如文件名补全竟然需要好几秒!我忍了很久,就差卸了重装它了,只是想到好不容易配好的各种环境,给忍耐了下来。

今天琢磨了一下 cygwin 的启动过程,发现可以在 bash 命令后加 -x 参数打印所有执行的命令。于是把启动 log 打印出来,查找到引起运行变慢的罪魁祸首:bash_completion。我之前装了一个名叫 bash_completion 的包所谓命令补全的增强包,好家伙,在 /etc/bash_completion.d/ 下面添加了 144 个文件。在启动的时候要一个个 source 这些脚本,怪不得慢呢!

卸载掉这个 bash_completion 包后,cygwin 的运行速度回到了原来的水平,敲命令的时候总算不用憋屈地等补全了。

3. Notepad++ 的中文搜索

使用 2.6.8 版本时,又发现无法搜索中文的 bug。我非常搞不懂 Notepad++ 的作者怎么维护软件质量的,这 bug 在我的印象里就反覆出现两次了。这样的bug都不写一个回归测试用例来检查,实在是有点儿不可思议。无奈之下只好退回到 2.6.7 版本了。

我喜欢的黑莓应用

上次手机丢了之后,为图便宜,我换了一个黑莓 8700,黑莓大概是我能负担起的最便宜的智能手机系列。虽然和原来的手机相比,8700 不带照相和扩展卡功能,但各种应用让我觉得比传统手机好玩多了。自从开始玩黑莓的这些有趣应用后,我渐渐觉得以后什么手机应用多,才能占到市场先机。以 Google Android 的开放平台以后肯定有不错的表现。

折腾了一段时间后,下面是一些我喜欢的黑莓应用:

1. Opera Mini 浏览器

如果没有网络,智能手机至少会少了一半的乐趣,现在很多网站都支持手机浏览了,包括我的这个博客,所以一个好用的网络浏览器非常重要。其实 Opera Mini 算不上很好用,但至少比黑莓自带浏览器好用多了,主要是在网页格式化方面。我比较看好的浏览器是 UCWEB,因为它支持标签功能,在 GPRS/EDGE 的低速网络下可以后台打开标签以节省时间。UCWEB 黑莓版已经在内测,希望能尽快推出。

2. Google Maps

通过黑莓上的 Google Maps 我才第一次知道原来没有 GPS 也可以定位。Google Maps 使用基站定位的标称误差大约在 600 米左右,实际误差我觉得大约在三四百米内。虽然误差比较大,但是在北京城里晃悠时,这个范围的误差足够能判断行进方向是否正确了,可以少问很多路。另外还有路线查询功能,有点儿烂,但好歹能用。

3. Google Sync

同步联系人和日历的工具,可以将手机联系人与 Gmail 联系人同步,将手机日程表与 Google 日历同步。这个应用实在是太酷了,在同步完联系人到 Gmail 中之后,我再也不用担心手机丢了会失掉很多人的联系方式。编辑自己的日程表也可以在电脑上进行,不用在手机上慢慢地敲字了。而且只要登出 Google 帐号,就可以删除所有联系人,换手机时候很方便。

4. Key Master

我平时不喜欢用鼠标在一堆图标中找应用程序,所以在电脑上我都是用 Launchy 来启动应用程序。Key Master 是在黑莓上自定义快捷键启动应用程序的工具,非常好用,一般情况下我都不需要再进黑莓的 Applications 目录用滚轮来找程序。

5. Mobipocket Reader

这是一个电子书管理和阅读工具,有手机版和电脑版。电脑版和 iTunes 类似,先把电子书导入到电脑版里,然后通过数据线发送到手机上的 Reader。这不是它最酷的地方,它最酷的是可以直接导入 .pdf, .html, .chm, .epub 格式的电子书。如果有某本书的 pdf 版,就不用再费尽心机寻找 txt 版了,直接导入就可以在手机上阅读。Mobipocket Reader 对 pdf 的重新格式化在我看来已经到了值得称赞的地步,太牛了!

6. 凌波微步 SmartDail

这是一款智能拨号软件,由于黑莓的电话簿不支持首字母查询功能,在电话簿中寻找联系人比较麻烦。这款软件可以支持名字首字母查询,定位联系人非常方便。

7. MidpSSH

黑莓上的 ssh 客户端,不支持中文,但是紧急情况下用来进行简单的服务器维护足够了。

8. Gmail 手机客户端

这个不用解释了。

9. 点讯输入法

用这个输入速度比黑莓原生输入法快多了,主要体现在两个方面:选字快和匹配率高。缺点就是切换麻烦,或者在一些应用中只能拷贝粘贴。

10. BerryFetion

这个软件也相当酷,可以在短信上直接选择“使用飞信回复”,可以省不少短信费!

11. Btalk

黑莓上的 Gtalk 客户端。由于官方的 Gtalk 黑莓版不支持个人用户,开源的 Btalk 让这变成了现实。但是实话说,谁用外出时还用手机挂 Gtalk 呀(又没经验值),也就是偶尔用一下而已。

12. AutoLock 和 TinyLock

自动锁屏软件,用处不大。

剩下还有一些应用,BBWeather, CallAssistant, MobCal, Anyview, BBNotePad 之类的,装上几乎没有用过,也就不评论了。

还有一方面的应用我觉得非常遗憾,我一直没有找到很棒的记事本软件。我希望这个记事本软件能支持(以优先级排序):1. 自动保存,比如15秒保存一次;2. 导出到电脑;3. 支持点讯输入法。不知道这样的应用存在不存在?

PS:在应用之外,还有一款软件不得不提,就是 BlackBerry Master Control Program,简直是安装黑莓软件的神器呀,比黑莓原版的 Desktop Manager 要好太多了!

亲历卓越“硬盘门”事件

前天晚上看到有人在推上讨论卓越超便宜的 118 元 320G 硬盘,过去一看居然是真的。其实经过“25 元门” 之后,我知道这是几乎不可能的,其实我也知道即使我下了单卓越也是会赖掉的,但是我还是抱着“全民调戏,重在参与”的心理加入了抢购大潮,并且进一步散播了这一消息...

事实证明我的预料是对的,我下的两个硬盘的订单在保持 44 个小时后,被卓越取消,卓越再一次(无耻地?成功地?开心地?)赖掉订单:

尊敬的客户:

您好!感谢您的订购。

我们抱歉地通知您,您在卓越亚马逊网站上购买的劲永牌320GB移动硬盘的价格出现错误。卓越亚马逊上有数百万种商品,因此有些时候难免会出现这类问题。根据我们在卓越亚马逊网站上公布的使用条件中的价格政策:http://www.amazon.cn/static/claim.asp?uid=478-5181363-0560506,出现商品价格错误问题时,如果商品正确价格高于错误的标价时,我们不得不取消您的订单,并且通知您。因此,您的订单已被取消。如果您仍然想购买这个商品,请根据正确的价格再次购买。

对于就此给您带来的不便,请您接受我们真诚的道歉。今后我们将继续努力,尽力确保卓越亚马逊上不再出现此类问题。

我们衷心期待继续为您提供服务。

卓越亚马逊客户服务部

不过我依然很开心能亲身见证这一过程。:)

博客被搬家

两年多来我的主页都寄生在徐宥师兄的 HostMonster 空间上,今年5月份博客也搬了过去,因此对徐宥师兄的长期收留致以“崇高的谢意”。期间也发生过无法访问的情况,但基本上都是暂时的技术故障。但是昨天,所有 CN blogger 都担心的非技术故障发生了——我感到非常遗憾。

其实也不是第一次发生这种事情,一般情况下我忍一忍也就过去了,不就那么一段时间不能正常访问嘛。但很郁闷地是我现在正在找工作的关键关口,大家也都看到我在 CV 中列出了我的项目和博客,我可不想当 HR 对我简历感兴趣的时候却无法访问我列出的项目主页。因此我紧急搬了次家,至少希望在未来三个月到半年时间内不要出问题。

由于是独立主机,所以搬家过程算是相当无痛吧,把文件打个包再解包,数据库导出再导入,基本上没丢失啥,访问体验也没有任何改变。只是我多句牢骚,记以为志罢了。

最近博客更新频率大幅下降,可以想见我也是在忙碌和踌躇的当口,没什么好说的,祝自己好运吧!

附近照一张,身着 Perl T 恤乃是在 China-Pub 九周年会抽到的奖品——我第一次在活动中抽到奖品。

着 Pert T 近照

Windows Tips: 修改热键和文件访问权限

我平时习惯使用 Win+E 打开 Windows 的资源管理器,但对资源管理器的左侧栏一直不感冒。用热键打开我的电脑本身就是为了键盘操作方便,但是多了个左侧栏使方向键选择文件夹相当不方便。昨天我总算找到了覆盖 Win+E 热键的方法。

AutoHotKey 是一个编辑和管理 Windows 热键的开源软件,SciTEAutoHotkey 是编辑 AutoHotKey 脚本的开源软件。(也许某些人会惊讶,AutoHotKey 居然不自带脚本编辑器,还要别人帮它写,我想这也许是受到 Unix 哲学的影响:Do one thing and do it well.)

AutoHotKey 脚本的基本语法是很简单的,前面是热键,后面是执行的命令,启动脚本后热键就会起作用了。键盘上每个特殊键对应的符号在热键列表中有列出,像我前面替换热键 Win+E 为打开“我的电脑”且无左侧栏的语句是:

#e::Run ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}

::{20D04FE0-3AEA-1069-A2D8-08002B30309D} 是“我的电脑”的 CLSID(多谢 IronFeet 的提示),如果需要打开非特种文件夹,就不需要这么麻烦了,直接类似于 #e::Run C:WINDOWS 即可。同理,设置用 Win+C 打开控制面板可以写成:

#c::Run ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}::{21EC2020-3AEA-1069-A2DD-08002B30309D}

利用 AutoHotKey 可以做很强大的事情。比如我在 Linux 下使用 Evince 查看 pdf,可以使用 vim 的习惯,jkhl 上下左右移动 pdf 文档,那么我们可以在 Windows 下用 AutoHotKey 来实现对 Adobe Reader 同样的操控,语句如下:

#IfWinActive ahk_class AcrobatSDIWindow
j::Send {Down}
k::Send {Up}
h::Send {Left}
l::Send {Right}
#IfWinActive

这几句话的意思是,如果 AcrobatSDIWindow 这个 ahk_class 窗口在激活状态下的话,那么 jkhl 就被换成键盘上的上下左右键。AutoHotKey 的高级使用还是很麻烦的,它网站上的 Tutorial 是一个不错的入门教程。其实一般我都是用 Launchy 启动程序,对 AutoHotKey 的需求不是那么多,简单的几个组合键就够了。

我昨天才发现 Windows XP 家庭版和专业版的一个大区别:家庭版没有“组策略”编辑器。我电脑的“所有程序”->"启动"目录不知道被什么安全软件设置成只读了,我以为 ATTRIB 命令是修改文件权限的,却发现无法修改“启动”文件夹的权限。后来找到 CACLS 命令,可以用来指定特定用户对文件的访问权限,才把"启动"文件夹访问权限修改成了完全控制:

cacls 启动 /G Solrex:F

设置可写以后就可以把 AutoHotKey 脚本的快捷方式拖到“启动”文件夹,随系统一起启动了。

用 Wireshark 分析 RTP 流

Wireshark 是一个强大的抓包及网络分析软件,可以用来嗅探和分析多种网络协议的数据包和流,RTP 和 RTCP 也是其中的两种。

对 RTP 流的分析过程,在 Wireshark 的 Wiki 上讲得很清楚,下面我只是记录一下我在使用过程中的一些经验:

1. 要想分析 RTP 流,首先要把抓到的 UDP 包用 RTP 协议而不是默认的 UDP 协议 decode; Wireshark 默认只对选中的流(由端口区分)进行 decode,所以对 audio 和 video 流要分别 decode。

2. 直接从菜单中选择 RTP 的 Stream Analysis... 才是对双向的流进行分析,从 Show All Streams 中再分析只是单向的 RTP 流。

3. 不要过度相信 Wireshark 的能力,尤其是在无线网络或者网卡驱动不是很合适的情况下,Wireshark 也会有丢包,所以说 Wireshark 对 RTP 流的分析也是“仅供参考”——除非经过严格测试 Wireshark 不会错过任何包。

4. 这个页面上提到的 Sun 的 JMF JMstudio 的 Linux 版本状况很糟糕。首先其安装文件中使用的 tail 参数和 bash 中的 tail 参数不一样,导致执行安装文件不仅不会安装,反而会清除安装文件的内容。由于其将安装脚本和二进制文件写入到同一个文件中,所以最好是在外部手工用 tail 提取二进制文件的内容;其次无论如何配置,该程序运行时会去监听 IPv6 地址的端口而不是 v4 的端口——我一直想不通是什么原因,所以该程序可以说是基本不可用。

5. rtptools 是个好东西。我们可以先用 Wireshark 录制一段 RTP 流,保存成 rtpdump 格式,就可以用 rtpplay 不断地重放它,用来测试网络状况很方便。原本应该用 JMStudio 收听的,既然它不可用,只有用 rtpdump 在另一端收听了。

回复选登:

james:

博主请问有没有办法能够使wireshark能够在ubuntu下捕捉到所有的rtp包?

由于要做老板的项目,所以需要测量一系列delay,jitter等等数据。所以我用vlc做server向外multicast一个rtp stream (拓扑上用的全部是有线)。若传输的stream质量不高(比如dvdrip,大概速度也就1.5mbps),wireshark能够完全捕获所有的包。但是若是使用较高质量的stream(比如1080p,1080i的,大概在20mbps)就会出现wireshark丢包的情况。

所以我想知道wireshark丢包的原因是不是来自于cpu利用率太高?有没有办法在仍然使用wireshark的情况下捕捉到所有的包?如果有其他抓包、分析软件,博主可否给我推荐一下?

非常感谢!

Solrex Yang:

@james
非常抱歉,我所了解的知识无法解决您遇到的问题。如果您找到了解决方法,非常欢迎您回来再次留下您的评论。

james:

博主你好,这个问题已经解决了。

由于wireshark实时捕捉packet会非常消耗cpu资源,所以我使用tcpdump来抓包,并且加大了libpcap的缓冲区,问题就解决了。

当然,若是要在Gbps的网络环境中抓包,linux下的tcpdump的精度完全不够(尤其在包长度小的时候很明显),这个就是跟libpcap函数相关的。有个意大利大牛写了一个PF_RING的类似“zero copy”的应用,可以在很大程度上解决这个问题,如果大家有兴趣可以尝试。google上有相关介绍。

EE vs. CS

这是一篇很古老的文章,翻译得不好,大家将就着看。

固定链接:http://share.solrex.org/os/ee_vs_cs_cn.html

从前,在一个离这儿不远的国家,一个国王召来他的两个谋臣进行一项测试。国王给他们看了一个闪闪发光的金属盒,盒子上面有两个插槽,一个控制按钮和一个手柄,然后问道:“你们认为这是个什么东西?”

其中一个谋臣,电子工程师,抢先答道:“陛下,这是一个烤吐司机。”国王问他:“如果让你给它设计一个嵌入式计算机,你会怎么做?”这个工程师回答说:“利用一个4位的微控制器即可,我将写一个简单的程序读入亮度盘(译注:the darkness knob,不知道是什么东西),将其量化到从雪白到煤黑的 16 阶亮度水平上。这个程序将使用该亮度水平作为 16 个初始时间值表的索引,然后启动加热元件,用该亮度水平映射到的时间初始化计时器。在计时结束后,关掉加热元件,弹出烤好的吐司。如果您愿意的话,下星期我就能给您一个可以工作的原型。”

第二个谋臣,计算机科学家,立刻认识到了这种短视想法的危险。他说:“烤吐司机并不仅仅是用来把面包变成吐司的,它们同样会被用来加热冷冻华夫饼。在您面前所放置的其实是一个早餐厨具,当您的臣民变得越来越老练时,他们将需要它提供更多功能。他们会希望早餐厨具同样可以用来烤香肠、煎培根和炒鸡蛋,一个只能做吐司的烤吐司机将会很快被大众废弃。如果我们不未雨绸缪,在不远的几年后我们就不得不完全重新设计烤吐司机。”

“考虑到这一点,我们可以制定一个更好的解决方案。首先,创建一个早餐食品基类,特殊化这个基类到几个派生类:谷物、猪肉和禽肉。特殊化的过程可以重复进行下去,比如谷物可以派生出吐司、松饼、薄煎饼和华夫饼;猪肉可以派生出香肠、links和培根;禽肉可以派生出炒鸡蛋、煮鸡蛋、荷包蛋、煎鸡蛋和多种煎蛋卷类。”

“火腿奶酪煎蛋卷类尤其值得特别注意,它必须同时继承猪肉、奶制品和禽肉类的特点,除了使用多重继承,这个问题无法得到妥善解决。在运行时,该程序必须创建合适的对象,并发送消息到该对象:‘把自己弄熟。’当然,由于多态性,这条消息的语义取决于该对象的类型,所以它对于吐司对象和炒鸡蛋对象分别具有不同的含义。”

“回首目前我们的进程,可以看到,分析阶段揭露了一个基本的需求,那就是该厨具需要能做出任何种类的早餐。在设计阶段,我们发现了一些衍生的需求,特别是我们需要一个面向对象的、支持多重继承的语言。当然,没有哪个用户希望当煎培根时鸡蛋变凉了,所以并行处理能力也是必要的。”

“我们绝对不能忘记用户界面。用来控制食物的手柄缺乏通用性,亮度盘令人困惑。一个产品必须具有友好的图形界面,否则不会受到市场欢迎。当这个早餐厨具启动时,用户应该看到一个牛仔出现在屏幕上。用户点击它后,一条消息“正在启动 UNIX v.8.3”将显示在屏幕上。(当该产品推出时,Unix 8.3 应该已经发布了。)然后用户可以下拉菜单,点击他们想做的食品。”

“当在设计阶段做出首先规划软件的聪明决策之后,在实施阶段剩下的只是选择一个合适的硬件平台了。一个使用 Intel 80386 CPU,拥有 8 兆内存、30 兆硬盘和 VGA 显示器的机器应该足够了[1]。如果你选择了一个多任务、面向对象、支持多重继承且内建图形用户界面库的编程语言,写这样一个程序是件轻易而举的事情。想想如果我们傻乎乎地允许一个硬件优先、将我们锁定在一个 4 位微控制器上的愚蠢设计将会给我们带来多少困难!”

国王听完他这番话,作出了将这个计算机科学家斩首的英明决定。人们从此过上了幸福快乐的生活。

[1] 在这篇文章出现的当时,这应该算是挺先进的配置了。

再谈龙芯

这次博客更新间隔比较长,因为最近确实很忙,这篇也是应景之作。

下午一朋友忽然给我来一条消息“龙芯 sb 了,到头来还是用的美国技术”,我还以为他看到了 07 年意法和龙芯的协议那条新闻。结果他告诉我去看看各大门户科技板块的头条,果然发现了一条很热的新闻:龙芯购美公司专利授权:CPU核自主产权战略失败,其来源在这里

于是想起来我两年前写的那篇关于龙芯的文章,现在证明事情确如我当时所想“说龙芯拥有全部自主知识产权,我不信”。但是对当前新闻中所持的那些观点,我认为,太过了。龙芯的是,是新闻炒出来的,龙芯的非,也难脱炒作的嫌疑。

虽然没有参与过龙芯的任何工作,但是我原来在简约纳是做(类 MIPS)芯片工具链的开发,现在也是在清华-Intel 的联合实验室实习,接触过一些和龙芯相关的人——尤其是龙芯编译组。因此我大概可以算是一个稍微明白点儿真相的群众——但也仅仅是群众,请谨慎围观。

首先,新闻标题是“龙芯购美公司专利授权:CPU核自主产权战略失败”——其实从龙芯决定使用 MIPS 的 ISA 起,自主产权战略已经失败了。我想没有人会相信一些受过那么多年良好教育,中国最顶尖的人才们不懂得什么叫做知识产权吧?但是在中国的科研环境下,科研人员的业绩都体现在科研成果上。先不谈有没有相应方面的人才,仅仅说从头开始设计指令集,得花多少钱?得用多长时间?IC 设计本身就是一个烧钱的工作,恐怕没有人敢顶着上峰的压力往一个看不到成果的项目里烧钱吧?

其次,就算报道“自主产权战略失败”,也应该早就报道了。以前龙芯大概不想让大家认识到知识产权问题,转着弯地跟意法半导体合作,07 年新闻里只注重报道意法对龙芯海外市场的买断,但是谁不知道龙芯向意法买 MIPS 架构授权啥意思呢?如果要报道“自主产权战略失败”,也应当那时就报道了。

再次,龙芯直接从 MIPS 手里买授权,我认为这对它是件好事。就像新闻中所说,龙芯以前肯定和 MIPS 谈过,谈不拢才和意法谈。现在它能从 MIPS 直接买,当然要比从意法买要好得多。而且,作为 MIPS-Compatible 的 CPU,利用已有代码,可以减少很多软件移植的工作量。

最后,仅仅因为一个 MIPS 架构否决龙芯团队的所有努力,是错误的,媒体的报道,不理也罢。我虽然不清楚龙芯团队做了些什么工作,但是把一个嵌入式的 CPU 扩展成一个通用 CPU,我认为不是一件简单的工作。(这一句其实有误,因为龙芯的芯片是自己设计的,但我的意思主要是指从媒体批评的 ISA 的角度来说。朋友告诉我说,即使这样说也不对,因为指令集和 CPU 应用类型并没有必然联系。)成也媒体,败也媒体,为什么记者不真真切切地去了解去报道一个科技成果,总是要加上许多夸张的成分呢?

PS:这篇博贴出来,我收到了很多批评,这是我在自己不熟悉领域发表看法的代价,我非常感谢那些愿意指教我的人。不过对于那些只有指责没有指点的评论,我只能说谢谢您,但这里不欢迎您。