Out of the box

May 26, 2007

Comments

来美国常常听到一个词组叫做 out of the box. 这个词有两个不相关的意思,

第一种是和 think 搭配, 叫做: think out of the box. 大致的意思就是要用非传统的创新的思维方式去思考问题. 这个词组出处比较好玩, 就是小时候大家做过一个智力题, 九个点排成 3*3 的方阵, 要用一根最多折三次的线把九个点全盖住.

9dots.jpg

一般人就想来想去, 被这九个点形成的一个无形的”盒子”限制了, 线走不出出这个盒子. 所以思来想去还是不得其解, 其实这个盒子是隐形的. 下面就是一个解, 只要线一出盒子, 豁然开朗. 而现实中, 人的思维往往就被隐形的盒子制约了.

sol.jpg

在李开复先生的 <做最好的自己> 这本书中, 也举了这个例子; 书中说, 甚至, 如果思维更加发散一点, 不限制线的宽度, 一根线就可以搞定.

out of the box 的第二个意思类似于 off the shelf, 就是说这个事情拆开盒子就能用了, 不需要装额外的软件, 硬件啥的. 比如说, 在Linux上很多专业刻录软件通常都是随发行版发布的. 这些就是 out of the box 的功能.

最后说个好玩的. 原本 in the box 和 out of the box 是相反意思的两个词组, 但是最近已经不能说 in the box 了, 因为 SNL 去年圣诞节出了一个 MTV, 题目叫  dick in the box. 内容有点搞笑且少儿不宜, 因此, 现在只要一说 in the box, 大家就想到这个 MTV, 因此没人说  in the box 了. 也是潮流文化影响下的语言的一种变化, 就像同志, 小姐这个词被糟蹋了一个意思.


简单的 LINUX Shell 下求集合交集差集的办法

May 24, 2007

Comments

车东大虾在最近的Blog 中说:

最近Winter刚教会了我一个文件比较命令: comm,是一个比diff更简单的取2个文件交集/补集的方法。原先以为需要用join 2个表的方法,现在很少几个参数就实现了。

comm 属于 diff 家族的命令, 相当于寻找两个字符串的最长公共子串. 在寻找前, 要对两个文件先排序. 然后diff内部哈希把一行字符变成一个整数, 再使用寻找最长公共子串的动态规划. 因此, 比较一个 m 长文件和一个 n 长文件的复杂度还是比较大. 读者有兴趣的可以阅读这篇论文[PS]. 其实我自己以前也用Comm, 但是不知道为什么, comm 求集合差集的效果不好. 即使排好了序, 有很多文件之间算差集还是做不对.

找两个文件的交集和差集是很普通的一个事情. 举个简单的例子, 我每周都去Google 音乐趋势抓歌曲名, 抓完了以后, 我要知道哪些是我需要下的新歌 (因为有的歌可能在榜好几个星期, 不需要重复下载). 假设我机器上存的歌曲是集合B, 新抓取了集合A. 假设这些集合这都用文件存着, 每行一个歌曲名. 任务就是计算 A-B, 也就是在集合A中而不在集合B 中的那些歌曲. 我长期的使用经验证明, comm 并不能准确的算出差集.

抓耳挠腮了好久, 想: 要是的确有这个需求, 又没这个现成的工具, 那么肯定一行脚本能写出来. 其实只要运用集合论知识一想就知道, 就是在A中把同时在 A和B 中出现的剔除了呗. 因此办法是, 把 两个B 集合和一个 A 文件放到一起成一个大文件(集合), 然后选取这个大集合中唯一的. 那么这个唯一的肯定就是只在A中不在B中的, 仔细想想就知道是对的. 所以, 方法是:

sort B B A uniq -u

同理, 对称差是:

sort A B uniq -u

为什么我不喜欢用 comm 呢, 因为comm 是对有序的列表做操作的, 如果对集合, sort 和 uniq 足矣. 可能车大虾说的 join 两个表就是这个了, 不过我觉得, 这个看上去可能更加容易写一点, 毕竟用 comm 的比用 sort 和 uniq 的少一点, 而且, 复杂度也低, 构造也巧妙, 这个多能显示良好的数学和计算机功底啊 :P

Linux 不是玩具, 是提高工作效率的智慧的工具. 我越用越觉得缺少的只是想象力.

Update: Linux 下面解决问题从来就不止一种方法, 今天一个美国同事告诉我另一个方法求差集 A-B:

grep -F -f listb lista -v


提醒自己: 少做价值判断

May 22, 2007

Comments

王小波有段话写的很好:

我认为,在人类的一切智能活动里,没有比做价值判断更简单的事了。假如你是只公兔子,就有做出价值判断的能力——大 灰狼坏,母兔子好;然而兔子就不知道九九表。此种事实说明,一些缺乏其他能力的人,为什么特别热爱价值的领域。倘若对自己做价值判断,还要付出一些代价; 对别人做价值判断,那就太简单、太舒服了。讲出这样粗暴的话来,我的确感到羞愧,但我并不感到抱歉。因为这种人士带给我们的痛苦实在太多了。

无论在什么地方, 我们都会听到这样的判断: 这个人是烂人; 那个人不值得同情; 80后就是垮掉的一代; 外来务工人员就是不安定因素, 等等. 让一个人做出粗暴的价值判断多简单啊,  带上自备的价值观眼镜, 把一切标记上勾勾叉叉, 算出一个永远比自己低的分数, 还可以不时为自己的分数沾沾自喜一下, 这样的生活, 多有卫道士的自豪感啊.

我也曾沉醉其中, 看着别人有些方面不比自己, 就认定别人笨, 不刻苦, 或者没希望. 这些陋习, 大部分的中国学生都有. 而学生的这些陋习, 大部分都是得自某些只喜欢优等生并且轻率对后进生做出价值判断的人民教师. 而根源, 还是等级和地位观念, 和学而优则仕的腐儒观念的继续残余.

我们都未必是精英, 然我们应当怀着成为精英的梦想, 对自己的所作所为做判断题, 而不是对别人评分. 这个是王小波留给我们的一条箴言.


你用你的电脑主要做什么?

May 19, 2007

Comments

帮助笑来老师做个简单的调查:

Poll Result


谷歌的人月神话

May 18, 2007

Comments

谷歌登录中国已经很久了. 在这一年中, 除了轮流到美国培训, 每周五TGIF 之外, 谷歌的这一年时间一共将近1000个”人月” (man-month: 一个人*一个月) 做开发. 这1000个人月的成果是什么呢?

  1. 大量产品的本地化工作.

不知道需要多少人月. 总比写程序快吧.

  1. 把汉语搜索变成汉词搜索, 但是分词依然有待提高

  2. 成功过滤掉不少有害信息.

但是用Google.cn 搜索java 等英文技术名词第一条变成中文了. 看来中文网页PR也高了啊, 这么说来中文成互联网第一语言指日可待 (还是人工调节了部分搜索参数呢?).

  1. 推出输入法

杰作, 据说是20%产品 含有外部数据源 谁能告诉我20%就能做这么牛B的输入法, 80%干什么了? 照这个效率, 十个八个中文之星都出来了. (还有人记得中文之星么).

  1. 推出汽车搜索

被tiny 发现是使用more 语法. 用tiny 的话说, 此功能非常简单,整理一个汽车品牌和厂商词库,不需要一天.

  1. 生活搜索

实际上使用 Google Base, 改一下图标, 最后URL加一个hl=zh-CN参数. 技术上估计是写个蜘蛛, 抓KooXoo能抓的优良结构的网页, 然后利用API 批量向Google Base 导入物品, 存 储和搜索由Google Base 代劳.技术难度可以参考酷迅实现. (酷迅不光有蜘蛛, 还有地图, 统计和搜索)

  1. 导航

技术人员可以知道做这个要多久; 明眼业内人士可以自行判断数据源用什么手段得到.

  1. 热榜

核心是标记搜索词的类别, 附加设计HTML. 这要多久?

  1. 搜索提示

方军同志中指在此

说实话, 我算来算去, 最悲观的算, 这些东西都不需要 500 人月. 加上原来成熟的代码库以及谷歌那些天才的开发人员的开发效率, 做这些可能都不需要 300 人月. 那么, 剩下的那些人月去哪儿了, 全玩 wii 去了? 还是全重写中国版MapReduce BigTable GFS 等去了? 还是都被开复先生关门做弟子专心培训了? 果真是谷歌版人月神话? 到底是产品经理让员工全放羊了, 还是员工全去玩跳舞毯熔岩灯了?

PS: 除去这篇以外, 今后我不会在 Blog 上专门评价谷歌产品. 原因是我觉得不使用没有发言权, 至于我为什么不使用谷歌产品, 是因为我被Google 的产品惯娇气了.

读者可以自行判断上面的产品和 Google 的产品像不像一家公司做的.