Oct 6, 2008 - 编程珠玑番外篇-1.Plan 9 的八卦

Comments

在 Windows 下喜欢用 FTP 的同学抱怨 Linux 下面没有如 LeapFTP 那样的方便的工具. 在苹果下面用惯了 Cyberduck 的同学可能也会抱怨 Linux 下面使用 FTP 和 SFTP 是一件麻烦的事情. 其实一点都不麻烦, 因为在 LINUX 系统上压根就不需要用 FTP. 为什么呢? 因为一行简单的配置之后, 你就可以像使用本机文件一样使用远程的任何文件. 无论是想编辑, 查看还是删除重命名, 都和本机文件一样的用. 这么神奇的功能到底如何使用呢, 待我一一道来.

首先, 如果你的内核版本是 2.6.14 或者更新(uname -r 可以查看你的内核版本), 你的机器上的已经有了这个支持了. 在这种情况下, 你可以使用:

sudo modprobe fuse

激活内核模块. 然后, 比如说, 你想SSH远程 remote.com 上的 /dir 目录, 作为本机的 ldir 目录, 你可以使用:

sshfs name@remote.com:/dir /ldir

然后, 您就可以完全在 ldir 目录下操作任何的远程机器上的文件了. 是不是很简单 :)

如果要使用 ftp, 我们要使用一个叫做 curlftpfs 的开源软件. 幸运的是, 你可以直接使用 apt-get install curlftpfs 直接得到他.

安装结束后, 我们依然使用

curlftpfs ftp://user:pass@ftp.remote.com/dir ldir/

就可以把远程的目录当成本地的目录一样使用的. 拷贝啊重命名啊都可以. (当远程的内容直接能被你访问的时候, 谁拷贝啊 :)

说到这里, 聪明的读者肯定要说: 靠, 远程的文件都能当成本机的用, 那太好了, 整个互联网就是我的磁盘嘛. 你还真说对了, 对于一个用户来说, 协议是不重要的, 重要的是数据. Gmail 不是有N个Gb的大小么, 让我们直接把 gmail 当磁盘好了. 于是有了 Gmail FS. 这样, 你可以给你的邮件标题做支持正则表达式的查找噢 :)

除此, 还有 wikipediaFS, 可以用自己喜欢的编辑器直接编辑维基百科的文章. 还有 flickrFS. 直接用自己喜欢的编辑器可以编辑图像元信息, 还能 chmod 754 让图像只能被朋友访问噢 :)

以上的这些酷实现, 都是 FUSE 这个内核模块作为基础支持的. 那么, 这个牛逼的网络也是文件的点子是哪个牛逼的人想出来的呢? 答案是 UNIX 的发源地, 贝尔实验室. 确切的说, 是在设计 UNIX 的继承者– Plan 9 的过程中提出来的. (小八卦: UTF-8, 就是世界上现在最通用的字符编码体系, 就是 Plan 9 操作系统的一个副产品).

一切都是文件这个点子倒不是什么新的点子, 在 The Unix Programming Environment 这本圣经里面就旗帜鲜明的打出 “UNIX下一切都是文件”的旗号. 但是毕竟旗号是旗号, 现实是现实. 关于文件的抽象在其后的发展中发现了这样那样的局限, 于是恶名远扬的 ioctl 函数被引进系统. 所以口号是口号, 实现是实现. 显然当初设计 UNIX 的几个哥们很不满意, 所以搞了一个 Plan 9 (搞 Plan 9 的人就是写 The Unix Programming Environment 的人). 在 Plan 9 系统中, 一切都是文件, 显卡是文件, 内存是文件, 进程是文件, 网络是文件…

等等, 熟悉 Linux 的用户要说了, 在 Linux 下面, 进程的确是文件啊. ls /proc 就能看到当前所有的进程, 不也是文件么. 是呀, Linux 这个就是和 Plan 9 学来的. 但是 Linux 学得不彻底, 因为这个文件系统的访问接口并不完整: 你不能通过 rm 一个文件杀死一个进程. 也不能通过 cp 拷贝出一个进程. 而在 Plan 9 上, 你不光能通过普通的文件操作命令去控制进程, 你还能 mv 一个进程. 我们刚才说了, 进程就是文件, 还能把其他机器上的文件当成本机一样用. 屏幕前聪明的你肯定一下子悟到了: 一定这居然是一个分布式的操作系统啊! 在这个系统里, 进程可以被其他计算机看到, 并且控制. 而管道可以横跨不同机器的不同进程, 这简直是把单机的概念都给抹杀了, 简直就是”网络就是计算机啊”.

熟悉互联网的读者都知道最近炒得很热的云计算啥的, 对用户无非就是互联网作为硬盘, 对公司无非就是分布式的操作系统协同工作, 在屏幕前的您肯定如我一样, 一拍大腿说: 靠, 贝尔实验室养得不是计算机科学家, 而是一大批未来学家啊. 30多年前人家搞互联网, 而今我们用互联网. 20年前人家用GUI, 如今我们用GUI. 10年前人家搞云计算, 而今我们炒概念闲扯淡. 差距啊.

说到这里就到了今天技术八卦的尾声了: 当年设计 Plan 9 的牛人 bwk 和 Rob Pike 等哪去了?

bwk (别查了, 就是那个写 C语言书的, 写AWK的) 年纪大了去普林教书了(人家本科生能不牛逼么). 而 Rob Pike 年轻, 风华正茂正当时. 您想,对于那些做云计算的大公司来讲, 这么牛逼的人哪能落入对手手中? 您这么想的, Google 也是这么想的. Rob 同学现在在 Google 研究院很爽的做着主力工程师呢. (小八卦, 他是Google 中唯一享有单字母邮箱的: r@google.com).

Oct 1, 2008 - 副总统辩论来到 wustl

Comments

今年美国大选辩论第二场是两个副总统之间的, 就在我们学校. 明天晚上, 在体育馆. 可惜我没票.

早晨就看见 C-SPAN 的车, 还有超级大的卫星天线车. 总算是见识到了美国大选前的这些媒体的疯狂了. 明天各路媒体会在校园里面现场直播, 我争取跑到 CBS, NBC 和 CNN 旁边去朝摄像机摇摇手. 而且学校还详细给了我们媒体现场直播的地点和时间表, 鼓励我们去摇手, 哈哈.

本来学校是给我们国际学生优先的机会做志愿者的, 当时没觉得好玩, 而且觉得副总统辩论又没啥的, 又不是总统. 就和人家说没兴趣做志愿者. 现在才发现, 本来辩论总共就只有3次机会. 而且各路大牌都会来, 媒体也很全. 附加还有相关的各种各样的辩论, 整个过程非常看. 想想当时和人家说不去的那个坚决啊, 悔的肠子青了. 本来在上课的时候认识一个负责志愿者的本科生, 靠着她倒是可以偷偷找个志愿者名额跑进去的, 但是人家一个人都不缺, 而且志愿者也要查证件, 所以跑不进去鸟. 看不着, 只好光写了.

Oct 1, 2008 - 50 周年的 NASA

Comments

一年365天可以天天不写博客, 今天必须要写, 因为2008年10月1日是美国航空航天局 (NASA) 50 成立 50 周年.

 

The NASA Vision
To improve life here,
To extend life there,
To find life beyond.

我很小的时候, 电视上的果珍广告 (找不到中文版了, 看看英文的 http://www.youtube.com/watch?v=IrzeGkCzW64) 总是有一个航天飞机升空, 然后一个宇航员身穿 NASA 的衣服. 从那个时候起, 我就有一个深刻的印象: NASA 不光能发射航天飞机, 还能让宇航员喝到超级美味的果珍. 我小时候反正没怎么喝果珍, 就光崇拜 NASA 了. 

关于NASA的介绍太多了, 登月啊, 旅行者啊, 深度撞击啊这些高科技的东西我们也耳熟能详了. 我就说说NASA对我的影响. 

  1. 我真正了解 NASA, 是从高中认真研究阿波罗计划的来龙去脉开始的. 高中的时候有一个说法, 说登月是骗局. 所以我就自己找资料, 学习. 那个时候中国的航天事业还没把神舟五号搞上天呢, 美国都送人到月球几个来回了. 所以顺带着我就对美国的指导登月的组织发生了兴趣. 而且我小时候对果珍的映象告诉我, NASA 肯定是注意民用的. 要不然不会开发果珍这种有趣的东西. 而当时俄罗斯和中国的航天技术都离我们太远, 让我觉得, 中国和俄罗斯显然是为了新一轮的太空竞赛, 人民没得到好处. 而 NASA 是军用民用都重视的. (事实上的确是这样). 这些方面的书的阅读, 使我觉得, 美国之所以搞垮了苏联, 和科学发达和注意科学民用化有关. 而 NASA, 就让我觉得是科技民用化的领头羊. 

  2. 我还感兴趣的是 NASA 是怎么能组织那么大的工程的. 我高中的时候政治老师老灌输我们 “社会主义好, 集中力量办大事”. 说实话我当时就不以为然的. NASA 是资本主义的吧, 人家可是比苏联先进好多的. 继而我觉得, 集中力量这个东西未必和社会体制很相关. 像美国国力这么牛逼的国家, 拿出1%的财政收入, 可能就抵得上小国不吃不喝办大事了. 而且像NASA这样统筹协调的机构一成立, 只要体制好, 集中的力量比穷国还要多很多. 从那个时候起, 我就隐隐然觉得, 大家都很聪明, 大家都知道集中力量办大事. 但是怎么集中力量, 怎么办大事, 未必是需要什么主义, 而是需要科学管理和组织. 

NASA 在培养我独立思考的方面起了非常大的作用. 我因为崇拜它, 学习它, 进而学习不少东西. 谨以此文, 祝贺 NASA 成立 50 周年. </p>

50 周年纪念网站: http://www.nasa.gov/50th/home/index.html

Sep 20, 2008 - 您不能学了10年英语最后还只会说 fuck

笑来老师最近一篇博客 拒绝把自己当作弱智处理, 让我深有同感. 我们国家的教育就是对学生潜能的糟蹋. “按照要求把自己变成了从普通儿童变成了弱智青年”. 正好我又一篇旧文章, 一并贴出来. 标题是: “您不能学了10年英语最后还只会说 fuck”

很多中国人, 想在一些场合, 特别是和其他国家人辩论问题或者表达自己愤怒的时候, 就会大声叫道 “fuck”. 遗憾的是, 往往就一个词结束, 完全没有下文. F 这个词的确很凝练, 可是也没有到包容万象的地步. 在有效交流的过程中, 应当有思想的表达, 而不是单纯情绪的表现. 遗憾的是, 在互联网上, 在保护奥运打火机的运动中, 都没见着思想, 只有愤怒.

愤怒的确能解决问题, 前提是我们人类是绿巨人. 可我们都不是. 解决问题的方法只有一个: 表达思想. 这个里面又蕴含了两个东西: 表达要用语言; 思想要有内容. 第一点是多年的英语教育没教授全的, 第二点是中国教育从来就没涉及的. 为什么这么说呢? 因为10年的英语教育只让你过了四级, 而美国小学生差不多也就那个水平. 所以, 复杂的概念你没法表达. 茶壶里的饺子倒不出来也没办法. 而搞过托福的人, 明显就上了一个台阶. 托福又不难, 大学生都能搞定的, 只是中国的英语教育不给你这个高度罢了. 从这一点看, 中国的英语就是一个花架子. 看上去学了10年, 交流的时候还是一个哑巴聋子. 想要避免这个, 就要跳出课本, 多读很多原著, 多阅读很多资料, 这样, 才是一个正常的语言使用者的学习方法.

第二个问题是中国的教育从来没教你思想, 只教了一个被教条化的哲学. 因此, 也就无从表达. 笑来的一句名言叫做”你baby talk,是因为你的baby think”. 一个没有独立思考光接受结论的人, 换了一个问题, 就和儿童的思考方式没两样, 或者同义反复先前的那些结论, 没法在思想的交流中说出灵活机智的话语. 有云文以载道, 又有言之无文,行而不远. 没思想的内容注定没用. 想要避免这个, 就要先有思想, 想要有思想, 就要独立的思考. 具体我就不展开了.

当满腔的情绪没法用英语表达的时候, 我们不妨想一想, 除了愤怒等情感, 有没有思想要表达, 有没有灵活的舌头帮着表达? 没有思想的要去补思想, 没有舌头的要补习英语口语, 总之, 作为一个受过多年英语教育的人, 学会的只是一句书上没有的 “Fuck”, 不能不说是自己的悲哀. 这就好比一个人总不能学了10年中文最后吵架只能说一句”操XX”.

Sep 16, 2008 - 完全用命令行工作-3: 常用的命令行工具

Comments

(这篇文章是给想学习 Linux/UNIX 但是不知道前方有什么东西要学以及用了Linux 一段时间后想要快速提高生产率的人看的)

Linux 本身只是一个内核, 所谓的内核, 就是你看不见摸不着的东西. 平时打交道的, 都是应用软件和一些常用的命令. 很多人说学习Linux, 实际上学习的是这些常用命令和软件的用法. 这些知识, 其实不光是Linux 上通用, 在苹果, Solaris, BSD 等系统上都是通用的.

同时, 只有学会了这些应用软件, 才能随心所欲的驾驭计算机. 否则, Linux 系统的魔力就体现不出来. 有一种观点说: 反正是完成工作, Windows 高效就用 Windows. 而实际上, 如果对 Linux 上常用应用软件稍做一些探索, 就可以发现, 大部分日常工作都是用 Linux 系统上的软件高效, 因为他们从一开始就比 Windows 设计优良. (当然, 我依旧承认在多媒体方面 Windows 上的软件如 Photoshop 等专业软件的确比 Linux 上的对应软件要强大. 但是这个强大是 Adobe 的软件, 不是微软的操作系统 ).

下文就是介绍 Linux 上高效工作的一些常用软件.

GNU coreutils: 很多人学 Linux, 其实就是学这里面的命令. 比如 cat, ls, head, kill,  这些都是一个基本系统必备的工具集合. 学会了这个里面的命令, 基本上任何 *nix 系统能搞掂. 比如你以后用苹果Mac 也好, unix 服务器也罢, SUN 的Solaris 也行, 都是一样的用法. 而且这里面的工具的确很强大, 比如以前我说的求集合的交集和差集, 就是这里面的小工具拼一下就出来了.

GNU findutils: 这个工具包能够帮助你在 Linux 系统上找文件, 或者对满足一定条件的文件做一定的操作. 其中的 find 和 xargs, 可以变化出无数组合, 让对文件的批量处理变得异常简单. 比如说, 把当前目录及其子目录下面所有的早于2002年的照片文件都删除这样一个操作, 在 Linux 下面就是一行命令, 而在 Windows 底下就要求助于专门的照片管理软件了.

cron: 假如你想每天定时让你的计算机做一件事情(比如, 控制电饭锅做饭), 或者每个周日的晚上帮你把文件清理清理, 或者每天早晨给你抓取各大网站的新闻存成摘要投递到你的桌面上, 你肯定需要 cron 这样一个强大的东西. 他的使用出乎想象的简单, 就在一个指定的文件里面写上什么时间做什么就行了, 比设置 Made In China 的闹钟还简单. 这个定时做事情带来的效率提醒是意想不到的.

screen: 如果你登录到一个机器工作, 退出的时候还想保持命令行继续存在, 下次登录还能继续工作, 或者你想和另一个人同时在一个命令行界面里操作, 或者你想只登录一次, 却拥有多个可用的终端窗口用来工作, 那么恭喜你, screen 是你想要的. screen 可以帮助你模拟出多个输入, 并且方面的切换, 还能把终端挂起来, 下次连上去继续工作, 这个对于在远程服务器上工作的人是杀手工具.

expect: 如果你非常讨厌每次登录telnet 的时候都要输入一次用户名密码, 如果你每次用某些软件的时候都要千篇一律的输入很多东西; 如果你想挂机刷机赚经验, 如果你想测试你的程序是不是正常工作, 那么, expect 是一定要使用的. expect 本来是用来做程序测试的, 看程序是不是有预想的输出. 有创意的玩家把他用去自动上论坛挂机或者自动登录FTP了. 如果想要自动化一些在命令行下交互性质的事情, expect 是很好的选择. 而且, 学习一下, 估计也就10分钟.

wget/curl: 支持多线程通配符递归, 断点续传等一切迅雷有的功能的下载器, 而且没有烦人的小广告. 如果要常常下载东西, 这个比迅雷好玩多了.

make: 以上说的都是单个工具. 而这个make 就是把工具组合起来的. 比如说, 写一个报告可能涉及画插图, 写文字, 生成报表, 做排版. 这些任务之间有依赖关系, 比如报表依赖于数据, 插图依赖于一个脚本, 排版依赖于一个格式规定. 数据更新了, 报表就要更新. 所有的这些任务和任务的依赖关系, 都可以写一个简单的makefile, 这样 make 就可以托管了. 假如数据更新了, 生成报表的时候只要重做报表, 插图就不需要重做. make 能自动分析这些依赖关系, 使得只执行必要的任务, 极大的减少了人工管理的负担. 事实上, 我的论文和家庭作业报告基本都是用 make 管理的.

convert/display: 这是使用 Linux 做日常工作的人必然要碰到的两个程序. 简单的说, 这是两个无所不能的程序. 其中 convert 能把一切能显示的图像格式转化成另一个格式. 比如png 和 pdf 之间的转化, 就是一句话. 而display 则是显示一切能现实的. 这两个, 还有其他的一些程序,  都属于ImageMagik 这个包. 用多了, 就会感叹, 其实把图片加加对比改改大小或者旋转旋转这些事情, 就是一行命令, 完全不需要开一个窗口点鼠标. ImageMagik 的设计也充分体现了 Facet 的设计模式, 接口非常简单, 自然, 常常和图片打交道的人熟悉使用以后, 效率能成倍提高.

另外, 学会正则表达式和一种脚本语言是必须的步骤. 其实这些都不是想象的那么难, 只不过是换一种眼光看问题罢了.

总的来说, 就一点: 在使用计算机做一件事情前, 先想想, 我是不是聪明到是世界上第一个遇到这个问题的人. 如果不是, 就动脑筋想想这个事情是不是可以分成几件小的步骤, 这些小的步骤是不是有现成的工具了. 一般情况下 99% 的都有前人的软件. 如果实在没有, 自己就开始写一个. 通常来说, Linux 比 Windows 效率高的所在, 在于工具的高效配合, 而不是直接找到一个包打四方的巨无霸的工具.

(本文覆盖肯定不全, 欢迎留言补充)