Archive for 2010年2月

Mighty Mouse 小球挂掉了

2010/02/25

Mighty Mouse 上的小球是出名的容易脏。今天中午我的无线 Mighty Mouse 的小球是无论如何清洁都不能向下滚动了(办公室的 Mac Pro 的有线鼠几个月之前就已经如此了)。下午赶紧在 Apple Store 的网站上约了一个维修。心里还在盘算会怎么处理。这个鼠标买的比较早,可能已经过保了。也许打开清洁一下,或者干脆不给修了?

晚上去了 Apple Store,被告知只要有在保内的 Mac 就能保修鼠标。说是保修,其实也就是给换了一个新的。先前的那个用了一年多了,平时也没怎么保护(起码没像对 MacBook Pro 那样),使用痕迹还是很重的。想不到能很干脆的被换了一个新的。

只是不知道公司的那个有线鼠怎么才能通过层层官僚享受 Apple 的保修呢?(好多同事的小球不能用的 Mighty Mouse 都被 IT 换成 Dell 的鼠标了。不过似乎有人更喜欢 PC 的鼠标。)

另外,今天在店里用了一下最新的 Magic Mouse,觉得挺好用的。没发现有什么有悖人体工程的地方 —— 有人觉得作为鼠标 Magic Mouse 太扁了,其实 Magic Mouse 更像一个本身会移动的 Touch Pad,转换观点之后就不觉得有什么难用(有人会觉得自己的 Touch Pad 不够隆起吗?)。有人说 Magic Mouse 移动速度太慢,我在店里的 iMac 的配置上也没觉得,和我机器上的 Mighty Mouse 一样快(我机器上的鼠标配置一般都是比较快的)。看来我要攒钱在这个新 Mighty Mouse 的小球挂掉之前买个 Magic Mouse。

大部头与网路短篇

2010/02/20

新年前后开始打算学习 OpenGL。按照惯常的思路:像 API 出了小毛病这样小问题靠上网查查资料;像 OpenGL 这样大的主题要找本厚厚的大部头从头到尾慢慢研究。于是我从家里的书架上取出一本搁置已久的《Interactive Computer Graphics: A Top-Down Approach Using OpenGL》 —— 这是我的另外一个习惯:看到感兴趣的先买下来,不管有没有时间学,也不管当时兴趣能持续多久,于是书架上会有不少这样的『储备』(可谓『高束焉,度藏焉』)。不过很多『储备』也并未一直束之高阁下去,日后一旦兴趣恢复也会阅读。所以坚持想买就买的原则,不怕买错也不怕买了不读。

当初买这本《Interactive Computer Graphics: A Top-Down Approach Using OpenGL》之后发现 Windows 对 OpenGL 的支持日薄西山,一下子没了兴趣。不料多年之后转到了Mac OS X —— 对 OpenGL 优化最好的平台之一。也算验证了书不怕搁置的理论。

可惜真正开始读之后发现内容并不理想。这本书是国外大学的教材,有教材的通病 —— 前言和泛泛的介绍罗里罗嗦,而且大部分是以前就了解的知识。好不容易读完了泛泛介绍,后面的内容也不流畅。3D 是一个要求对基础数学和对 API 的了解都很深入的主题。可惜这本书对二者的结合并不理想。讲 API 的时候对需要了解的数学基础一笔带过或者根本不提。也许是因为 3D 实在不是一个很容易在一本书里用一套结构讲述清晰的知识体系。这个主题似乎更需要这样的阅读:分别精读两本书,先完整的学习 3D 的数学工具,比如变换矩阵,homogenous 坐标系,等对数学工具了解透彻再学习一本讲具体 API 的书。

也就是说,当学习的主题越来越脱离具体的产品,学习者就会越来越发现大部头的问题所在。每个大部头都在试图讲解自己的一套体系,但是这套体系会和其它的体系发生很多平行的联系。从根本上说,这是我们需要学校的原因:学校帮助我们组织各个大部头之间的平行联系。另一方面,这也是非计算机专业的人可以通过自学学习计算机科学达到比较高的工作水平的原因,因为计算机科学的各个分支和其它分支的平行联系都比较弱。学习一门计算机科学的分支往往不需要了解其它分支或者需要很少的时间准备一些独立的知识点即可。而像通信、自动化、电力这样的学科分支之间就有比较强的平行联系。

但是无论如何,计算机科学里还是有像 3D 这样与另一门或者几门分支具有较强的复杂平行联系的分支。对于离开学校很久的人来说,学习这样的知识要比学习运用一个数据库或者服务器产品困难很多。

不过我不想再体验学校的学习方式,转而尝试一下应用更多的网络资源 —— 这算是我离开通信行业进入软件业之后养成的一个新习惯。一方面,网络上像 Google 和 Wikipedia 这样的工具在三年前离开通信之后有了很大发展,另一方面,软件行业面临的跨系统的希奇古怪的问题比通信业多出十倍。在通信行业能用官方的文档解决大多数问题。而在软件业里遇到的种种问题,没有 Google 这样的工具是不可能解决的。

结果相当顺利。第一个例子是 OpenGL 的投射矩阵(projection matrix)。《Interactive Computer Graphics: A Top-Down Approach Using OpenGL》对这个概念完全没有任何解释。只是对 gluPerspective() 的效果做了一个简单的介绍。gluPerspective() 只是投射矩阵的一种特例(从它的 glu 前缀就能看出来)。单单介绍这个 API 的作用根本不能理解投射矩阵的意义,而用 Google 搜索『OpenGL transformation』能找到这篇文章,介绍了投射矩阵在整个 pipeline 中的位置;顺藤摸瓜即可找到对投射矩阵的详细解释 —— 而不了解投射矩阵的一个重要相关概念 homogenous 坐标也没有关系,因为这篇详细解释的链接里就指向了这篇。这种超链接的组织是 HTML 的本意,不过整个网站的 wiki 风格说明在 Wikipedia 成功之后,这种知识组织方式才越来越被更多人运用的更为娴熟而超过了书籍。

第二个例子是 OpenGL 的选择模式(Selection Mode)。这次书里很遗憾地有很多基本错误。比如对 gluPickMatrix() 何时调用以及调用前后需要哪些其它 API 的辅助的代码例子都有错误;对 glPushName()glLoadName() 的区别也没有任何解释就直接在代码例子里使用了后者。其实 glLoadName()glPopName()glPushName() 共同使用的一个快捷方式。这种对基本操作不加解释就直接利用快捷方式是很让读者迷惑的。Google 查找『gluPickMatrix』的结果指向这篇,对选择模式的解释很令人满意。

其实,在第一个例子中网上资料比书的解释更详细的时候,我就犹豫是继续按照书的结构学习还是完全采用网上的资料。后来还是决定暂且按照书的组织结构。岂料不过一天就又卡在选择模式这个问题上。经过第二个例子,我倒是发现学习资料的组织结构不像以前认为的那么重要。以前我选择书籍最看重的是组织结构里注重知识的循序渐进,减少或者消除前向引用 —— 就是前面的章节引用后面的章节介绍的概念(哪怕是说明了必要性也很令人不快)。而今天参考网上的资料,不用理会原本的结构如何,遇到不太懂的概念只要在网上顺藤摸瓜即可。

回顾这几年的学习经历,Google 和 Wikipedia 已经彻底的改变了我的学习方式。相比网络上的资料,大部头有更强的知识集中、系统性和结构性。可是这种结构性是出于作者对读者背景和理解力的主观预测。结果往往是详略和节奏都和读者期望的不同。特别是像 3D 这样把数学和具体 API 结合起来的,在不同分支之间有平行联系主题,如果仅靠阅读大部头就需要从头到尾阅读多部,然后主要凭借记忆自己建立起平行联系。

网络上的知识一般被认为是零乱而且缺乏组织的。不过这些年已经不知不觉发生了巨变。首先是个人 blog 的发展让很多作者把网络资料的水准从 BBS 的帖子提高到了出版物的水平。再有,Wikipedia 这样的网站在本身收集知识的同时,也把组织知识的先进方式公开给了所有知识传播者。让 HTML 在传播知识方面有了高层次的范例。最后,Google 让所有这些知识片段按读者的自我需求动态组织成为一个个较大的主题。这三者缺乏任何一种都不可能让网络知识的水平达到传统书籍的水平。而现在的情形是它们的协作已经至少在工程技术领域让网络化组织的知识已经基本可以取代长篇的出版物。

全球变暖和大肠杆菌

2010/02/03

前些天和朋友聊到中国在这次哥本哈根会议上被众国认为搅乱议题,朋友说搅合的人很多,还有一帮国外教授在说全球变暖是某些财团为了推动自己的低炭经济产品推出的骗局。我突然感慨,人类文明发展了几千年,还是没什么开化,都大祸临头了还在争论些没有意义的问题。

朋友突然说,前些天才知道大肠杆菌是怎么死的,是因为繁殖太快被自己的粪便淹死的。一个人和一个大肠杆菌的差别大到没有比较的意义。可是一亿人和一亿大肠杆菌似乎没什么区别。