Recently in Think Category

July 19, 2010

Death of Newsgroups

今天在 comp.emacs 新闻组扫文章时,看到里面的一位大神 Xah Lee 的文章 death of newsgroups (Microsoft closing their newsgroups),讲了一些比较著名的新闻组的人气渐渐低落以及经常被 spam 影响的事实。在文章后面还讨论了一些基于 web 的论坛和 wiki 等“新媒体”。

文章下面有两人参与探讨了这个问题。其中一位人提出说新闻组已经落伍了,如果新闻组被网页论坛取代,是一种进步;如果新闻组被邮件列表取代,则是一种退步。其中也提到了各种观点。最后一人提出了不同的想法,提出网页论坛有限制阅读的情形,其实想对于新闻组并不领先。

相对于中文新闻组来说,英文的新闻组可以说是非常活跃、令人羡慕了。以我过去的印象来看,我觉得中文新闻组可以说从来没有发展起来。可能相对于上个世纪 70 年代,今天有了太多的在线交互工具,所以对于新闻组这种古老的媒介,可能也仅仅适用于交流一下技术问题吧。我在上初中那时候(2000 年左右)还有千帆之类的服务器提供中文新闻组,到现在这些服务器早就不干了。在那个时期,针对于技术上的讨论似乎没有形成主流,那些中文新闻组里充斥着一些闲聊话题。如果中文新闻组里面主流的话题是休闲而非技术的话,新闻组相比起一些新兴的媒介来说是没有什么吸引力的。所以到后来中文新闻组里面就没有什么讨论了,自然无法逃脱关闭的命运。

英文新闻组,据我的观察,比较能形成讨论规模的,也仅仅是一些著名的技术频道。记得我第一次上新闻组时(那是在 Windows 下用 xnews),看到机器呼哧呼哧的下载那长长的新闻组频道列表时的兴奋劲是难以形容的。那种感觉就像是一扇巨大的门被推开了,门后有无数的资源等待你去探索。可当我进入一些新闻组后,却发现里面根本没有有价值的讨论,常见的只是一些 spam 了。到最后发现讨论比较活跃的也仅仅是那么几个新闻组罢了。

在我目前的大学里,有一个针对学生开放的新闻组服务器,可惜使用的人很少。我身处的计算机系理论上说是有最多的学生有可能使用新闻组的,可我在周围没有见到一个。仅有的使用着可能就是一些比较年长的教授了吧。上个学期我有一门课是一个老教授教的,他在过去教课的时候会建立一个新闻组供大家提问,我那个学期时老师统计了一下好像没有人上新闻组,于是就和其他老师一样用 nTreePoint 的网页论坛了。

我在 2008 年初的时候知道了学校的新闻组服务器,配置了 Gnus 可以登陆上去后,兴冲冲的扫描了一下新闻组列表,却找不到任何 cn.* 的新闻组。上网查了一下原因,才知道新闻组服务器在同步的时候可以设定同步哪些新闻组,北美大学的新闻组服务器大概不大需要同步中文的新闻组了,而且中文的新闻组也实在没有什么正规的讨论有同步的价值的。后来我只好四处找免费的同步中文新闻组的服务器,最后找到了 freenews.netfront.net 这个服务器,虽然说它会在你发送信息的后面加上它们的广告签名,倒是可以接受。

找到了提供中文新闻组的服务器之后,我又发现了一个问题,就是这些新闻组已经没有什么有价值的中文讨论了。后来我发现稍微比较活跃的是 cn.bbs.* 之类的新闻组,经过搜索发现是同步的 SMTH 的一些房间的讨论,而真正的在 USENET 的服务器上的中文讨论已经不存在了。而 SMTH 这个中文 Telnet BBS,它的存在我感觉有些反常,当然我不了解清华内部是如何宣传的,不过我觉得和这类 BBS 的 web 化和校内讨论媒介的单一性有一定的关系,不然怎么可能向非计算机专业的学生来介绍新闻组使用方法呢。

今天网页论坛渐渐取代了我们过去的新闻组、邮件列表等交互方式。它有它的长处,简单、管理成本低廉、更加现代。相比起新闻组,它的话题更加分布,而不是像新闻组服务器那样把无数个新闻组一网打尽。不过网页论坛也有很多地方我不喜欢,相比起新闻组来说,它在策略上更加复杂,不如新闻组那么“纯”。新闻组在贯彻“内容与格式分离”上来说更加彻底一些,而网页论坛则又各种各样的版本,相对来说更加不统一。而且最令人讨厌的是,一些不那么严肃的网页论坛的管理者喜欢弄一些分级策略,发贴攒一定积分才能浏览一些帖子,这在技术讨论上也格格不入。

另一种形式的网页论坛与新闻组更像,就是 Google Groups,因为它本身就来源于新闻组。从某方面来说,Google Groups 挽救了新闻组,它让新闻组文化更加流行。从另一方面,Google Groups 也极大的分流了新闻组的访问量,这也确实令人苦恼。Google Groups 让人人都可以创立一个自己的“新闻组”,但不能与传统的新闻组同步。有很多非常不错的中文技术讨论组,非常活跃,但可以都不是传统的新闻组。相反的,Google Groups 的邮件提醒策略可以让 Google Groups 与邮件列表更为接近。

我的 Gnus 的固定新闻组只有 4、5 个,常常访问的也只有 2 个而已。或许这方面的讨论的活跃度确实在渐渐降低,但我还是希望它能够保留,我觉得在技术讨论上它是更好的形式。

June 14, 2010

崩溃的 Windows 7 网络设定

帮别人倒腾电脑真是个累活,昨天下午同学请我帮忙设定一下 Windows 的网络。他在国内买了一台新的 DELL 笔记本,装的系统是 Windows 7。

我过去帮别的朋友在 Vista 下设定网络的时候就觉得很有有心无力的感觉了。可能是因为是自从 Windows XP 之后,我很长时间没有使用 Windows 了原因,很多参数的设定都没有什么印象了。所以那次我就搞了一下午,最后也不知道是怎么弄好的。弄完了之后的感觉是想吐,恶心的要命。这次感觉也是这样。

这次的问题是我第一次遇到的,很诡异。首先是不管是有线网络还是无线网络,都无法连上。理论上来说,有线网络只要是把 cable 插上就可以直接正常联网了。可在 Windows 7 里面竟然总是说“无 Internet 访问权限”,这是我从来没有遇到过的。有线网络也是同样的情况,不管是不是手动设置 IP 地址、DNS 地址、网管,总是一句“无 Internet 访问权限”。

在网络设置中心里面找了半天,总是也无法找到相关的地方。我怀疑过和 McAfee 的防火墙有关,但那台电脑的 McAfee 安装的有问题,无法打开界面,也无法卸载。这给排查的工作带来了很大的麻烦。结果弄到最后也没有弄好,从网上搜索了一些案例也没有什么帮助。

Windows 的网络设定的设计策略让我很迷惑,从 Windows XP 到 Windows 7,我感觉这方面的设定是越来越复杂了。真不知道 Windows 到现在还是不是面对着个人电脑,一个网络设定,还弄出个什么区域的东西,实在是有些超出了普通用户的承受范围了。很多东西都不直观,如果没有经验的人估计很容易失败。

相反,在对比了 Mac OS X 的网络设置后,Windows 这方面的设计缺陷就越发明显了。我一度以为是微软的设计人员有意的往复杂化方面来引导用户,我觉得这是完全没有必要的,更是一条歧路。

都说 Windows 简单、“傻瓜”,但在网络设定这一方面,我觉得 Windows 7 走向了相反的方向。事实上,对比起我过去的 Linux 的使用经验来,当代的 Linux 发行版的网络设定也远比 Windows 7 的网络设定方便直观。有人说微软在让 Windows 的用户“上瘾”了之后,就可以对他们予取予求了。不知道现在的设计方向,是不是有这么一点意味:)

最后说句题外话,最近的计算机水平发展的真快啊。从 Vista 开始,Windows 系统就给我一种缓慢的感觉。所以我本来以为笔记本电脑上跑 Windows 7 应该会很慢的。结果看了一下那台电脑的配置,竟然是 8 核处理器、4GB 内存,跑 Windows 7 这种规模的系统已经游刃有余了,真不知道在上面弄个 Gentoo 出来会有多快。

February 15, 2010

奇妙的生物钟

今天早上 9:55,我在床上觉得躺不下去了,于是起床。看了一下手机的时间,突然觉得生物钟真是神奇如斯啊。

由于这前几天的作息规律相当混乱,尤其是有几次为了完成第二天要交的作业,整个一晚上都没睡(在家里存了咖啡就是不一样啊),所以放假前的那几天我一直觉得没有完全休息好。我每次这种情况的症状是,眼睛感觉特别疲劳,揉眼睛也觉得疲劳没有丝毫改善;脸部肌肉僵硬(让我想到了“面瘫”一词);身体说不出是什么感觉,但如果用手掌干搓一下身上的大片皮肤(就像是给猫狗顺毛一样)就会觉得特别爽,总之就是一种全身不得劲的感觉。这种情况下,由于我每天早上的提神咖啡的影响,通常是连锁反应,第一天没休息好,之后连续几天都会如此。因为如果我前一天晚上没睡觉的话,第二天下午的五点到六点的时候就特别困,但我那时候通常都会在机房上自习;而八点到十点回家后又觉得不怎么困了,经常能坚持到凌晨十二点到一点,自然无法好好休息。

放假之后,甚至是周末,我都会发生这种情况,就是前几天就睡个昏天暗地,把生物钟给睡紊乱了为止。有时候到了第二天不想下床,就在床上抱着电脑看点文字或者视频,也常常能在床上呆一天。自这开始,第二天的作息就不正常了。

这次的放假也是一样。我们学校的每年的二月份都有一个星期的 reading week 假期,说是让我们在家里读书的。但假期结束之后通常都是大大小小的期中考试,所以这个 reading week 也有让我们复习的意思。正巧今年的 reading week 赶上农历年,与国内一起放假也是不错的感觉。放假前那个周末我为了赶第二天的两门作业,通宵未睡。那一个星期一直感觉没有休息过来,这次也顺便补上。因此到了上周五的下午,我就觉得不行了。那天下午我们要在 5:00 之前给老师交上《计算机网络2》课的项目 proposal,我在小组里的工作是整合另外三个人的工作,用 LaTeX 排版,生成 PDF 文件交上去。所以我一直撑到 4:30 才完事。交上之后我同学又找我一起购买“年货”,我们又驱车去了两个地点,买了肉类和蔬菜、水果之类的东西。在回家的路上我在车里一个劲的打哈欠,倒并不觉得困,就是感觉乏,没有精神。

那一阵子由于太忙碌,我对日期也没有什么关注。再加上我们在这边也不是很关注国内的农历年,对于过年也没有什么感觉。所以我对于阴历也没有什么敏感,在回家的车上和同学聊天才知道马上就是春节了。本来想着忍到国内初一的凌晨给家里打电话拜年,可回家后吃过晚饭(五花肉)之后过了一会就觉得困了,在床上躺躺就睡过去了。这一觉睡得是天昏地暗,等到醒了之后好像就到了第二天下午了。但那时还不想起,磨蹭了一会,下床下了点速冻水饺吃了,印象里到了晚上六点多就又忍不住了,上床睡到了凌晨才起来。

浑浑沌沌的我,印象里看了一部电影,又干了些别的事情,然后到了早上的六点多,我觉得受不了了,就又上床睡觉。之后我就一点时间观念都没有了,总体的感觉就是白天睡,晚上起来做事。中间也做了好几个梦,有很多在我突然惊醒后就瞬间忘了。到现在唯一记得的一个是我在国外上中学,入学第一天下课后在学校外面坐公交车回家。在公交车上与座位前面的一个男生和座位后面的一个女生认识了,交了朋友。其余的都没有印象了。

昨天晚上我照样也是不困,但觉得这一个 reading week 也不能浪费过去,应该要倒倒时差了。不过到底是晚上也不大困,我好像是两、三点才睡过去的。睡之前我看了 Google 的 HTML5 讲座,听这种东西最容易催眠了,我也就成功的睡过去了。

我日常在周一早上的作息是这样的。10:30 第一堂课,因此我要 9:55 从家里走,乘坐那趟应该是 9:59 到我家楼下车站的公交车去学校。但由于目前还是冬天,路上有积雪,所以这公交车经常晚点,实际上的到站时间都在 10:05 左右。所以我如果 9:55 下床的话,放弃刷牙、洗澡的工作,动作麻利点还是能赶上公交车的。

而让我感到惊奇的是,我在周六、周日都睡得昏天暗地,本来也没有指望周一就能起床,但却是在日常该起床的时刻左右起来了,难道生物钟也可以跨天运作了?之前只知道每天定时起床可以培养生物钟。建立起规律之后,每天都会在同一时刻起床。但很少听过双休日可以让生物钟暂停运作的。不过日常这种情况也有很多,可能只是没有这么明显罢了。

起床后,我坚持到中午 12:00 左右,去超市买了一杯 Starbucks 的超大号拿铁喝了,坚持到晚上,自我感觉不错。

February 13, 2010

我不喜欢 Google Buzz

google-buzz-icon.png9、10 号的时候从 Twitter 上看到有人说 Google Buzz,简单的了解了一下,说是 Google 的微博服务,与 Gmail 集成的。我那时候还没有见到过 Buzz 的页面,只是从 Twitter 上看别人在讨论。有人说他不会用 Buzz,有人说可以把 Twitter 同步到 Buzz 上云云。

10 号晚些时候,我进 Gmail 的时候,发现 Buzz 也开通了。上来先“假惺惺”的问我要不要开通,这种免费的新鲜服务还有选不开通的吗?开通了之后,印象里第一步就是选 follow 的人。Google 通过通讯录里的信息,筛选出同样开通了 Buzz 的人让我选。我忘了之前的选择是什么了,反正有些比较有名的人物,比如月光、keso 等我都选了。或者是我当时就觉得我在近期不大会用 Buzz,所以就把人物都选中了,话多的也没什么影响。

不过没用一会,我就感觉:我不会喜欢 Buzz。

上来后发现的第一个问题就是所谓的“话唠”。这话唠和 Twitter 上的不同,Twitter 上是一个人呼哧呼哧的说,而在 Buzz 上,如果一个人的通讯录比较发达,默认 follow 他的就有很多人。经常是他随便在 Buzz 上说点话,就有一大群人跟着回复。而且这种回复不是那种论坛中探讨问题的回复,而是不折不扣的“唠嗑”,闲话家常那种。但这又不像是真正的闲聊,很多人都不认识,没有聊天的气氛,更重要的是,没有上下文、不了解谈话的背景,很容易几个人就一个鸡毛蒜皮的小问题就争论起来了。没意义,看着也烦。别说中国人挺含蓄,在网上可一点都不含蓄,我估计也是日常憋得。我刚刚和一位同学在 Buzz 上说话,就看到有个陌生人插了一句“路过”。要不是之前没发现,Buzz 好像也不能回复中间的条目,我真想像王小峰那样说一句“路你妈屄过”。试想你和朋友说话的时候有陌生人在旁边说句“路过”你什么感觉,我一直认为“互联网即生活”,互联网上的活动应该反映人们的日常生活,所以这种情况我是不喜欢发生的。我印象里上来就 mute 了月光的一条,忘了是什么内容了,反正已经把我的 Buzz 页面拖得老长了。还有 keso 的也是,都不是原张贴者的问题,都是留言太多导致的。尤其是可能是因为 Buzz 刚开通,人们都有好奇心,什么都想试一试。这一试就水了很多楼层。

前几天无论是在 Twitter 上还是在 Buzz 上,有很多人说 Buzz 像这个像那个。我当时就问了一句:“难道没有人觉得 Buzz 像 Plurk 的吗?”当时确实是没看到有任何 Buzz 和 Plurk 相像的说法,不过我觉得两者太像了,Buzz 就像是未完工的 Plurk,当然这也符合 Google 一贯的 beta 风格。

我在之前写文章讨论过 Twitter 和 Plurk 对于信息管理方式的优缺点。Twitter 是朴素的线性,而 Plurk 则是树形。两者之间那种好,我在那篇文章里已经讨论过了。那篇文章的结论,现在我感觉同样适用于 Buzz。比如说用 Buzz 的时候,我想过好几次,如果能只显式我 follow 的人的条目就好了,把那些条目的回复都折叠起来,看上去就很清晰。Plurk 默认是这么做的,而 Buzz 不是。看上去 Buzz 里面“一片繁荣”,但实际上有用的没有多少,用户还是被淹没在了信息洪潮当中。所以我觉得 Buzz 是未完工的 Plurk。

但 Buzz 在这一点上又有比 Plurk 更好的地方,虽然这个好可能不是 Google 主动做到的。那就是 Buzz 条目的字数限制很宽。刚才我测试了一下,把我目前 Blog 首页的所有正文文字复制下来粘帖到 Buzz 的发布框中,Buzz 倒也都能吞下,但点击了发布按钮之后会提示错误,但也不说明是为什么出错。然后我只复制了上一篇文章的文字,贴了上去,就成功了。我上一篇文章有 2000 多字,远远超过了 Plurk 的 140 个字的限制。这样的好处就是想说一句话的时候,可以尽情的说,而不用绞尽脑汁删减字数。在 Twitter 上,我有时候因为实在删减不了了,只好发两条的情况。这在 Twitter 上无所谓,因为条目是线性显式的,所有东西都堆在一堆,回复了也不知道是针对哪条回复的。而在 Plurk 上如果这样做,回复的时候就要考虑一下,“我到底是要回复第一条呢?还是第二条呢?”。如果回复了第一条,就导致对话的逻辑混乱;如果回复了最后一条,旁观者又可能会看不明白两者的“对牛弹琴”,因为要回复的重点在另外一条里呢。当然,这种情况下,Plurk 用户可以自己回复自己,应该也算是一种解决方法。Google Buzz 的这种“超级”条目,自然就没有这种问题了。谁一句话要 2000 多字还解释不完,那可要重新去小学里“回炉”了。

而这种情况,在 Twitter 同步下就成了悲剧了。就在刚才,我发现我之前在 Twitter 上发的一句话分成两条的条目,在同步到了 Buzz 上,被显式成了两个不同的条目。结果导致我的朋友回复了其中一条而没有把两条关联起来看。我问他为什么,他说同步过来的条目都乱序了,他也不容易分清楚。我目前常用(确切的说是“唯一使用”)的微博工具就是 Twitter,其它的地方,能同步的话我就同步过去,毕竟也算是扩大影响力吧。但这也带来了一个情况,就是别人在 Buzz 上回复我,回复的是我在 Twitter 同步过去的条目,我几天上一次 Buzz 的情况看,我经常会没有及时回复别人的回复,这也导致了讨论的断层。

另外,关于条目的长度,我一直觉得对于中文来说,Twitter 的 140 个字的限制是“神来之笔”。至于英文,可能是我的驾驭能力不够吧,经常说着说着就说超了。对于中文来说,绝大多数情况下,对于绝大多数完成了中等教育的中国人来说,是绝对的够用了。Buzz 目前可以说是不限制字数,反而会有人网上贴长文的情况。不过目前已经可以把 Blog 的文章同步到 Buzz 上了,这样也说不上好不好。好处是浏览者不需要跳转过去看 blog 了,坏处是我担心会分流留言,导致回复不及时。

最后一点,还是用户使用习惯的问题。如果 Buzz 做的很优秀也就罢了,但目前这种程度的产品,想要和 Twitter 分流用户,我觉得很难。我在 Twitter 上 follow 的人都是我认识的,这些人当中只有一个人选择了同步 Twitter 到 Buzz。他们多数人日常都使用 Gmail,但 Buzz 的使用量则少的可怜。我个人也觉得人们目前阶段用 Buzz 也只是玩玩而已,而不会真正的转向使用 Buzz。换句话说,我觉得 Buzz 其实就是另一个 Google Wave。Wave 发布的时候,我感觉很惊艳,写了篇文章来总结它的优点。但 Wave 是邀请机制的,而且与日常使用的产品(Gmail)不挂钩,再加上 Wave 本身的效率问题,在公开几天后,出乎我意料的是 Wave 并没有火起来。很多人四面八方的讨要来一个邀请,注册之后,新鲜了几天,就荒废了,这也是我虽然有邀请,但拒绝给任何人的原因。我觉得如果 Wave 不需要邀请注册,再跟 Gmail 联系起来的话,估计也就是 Buzz 的水平。

基于以上几点,我在使用 Buzz 的第一天就感觉,就觉得 Buzz 应该不适合我,至少我觉得 UI 方面的表示层应该要重新设计,否则使用起来会非常的不方便,难受。其它的一些小问题也值得重新思考一下。说到这里,我觉得 Buzz 应该是几个人一时间的冲动,我不觉得在这个产品的设计方面有很多精深的思考,只是把 Twitter 的思想与 Google 的一贯模式浅层的结合一下而已。也就是说,我觉得 Buzz 还不成熟,在将来应该也会有很大的变动,因此我在近期里是不会重点使用 Buzz 的。

February 12, 2010

软件使用观察

过去我上课的时候总喜欢坐在第一排,因为那时觉得自己英文可能还不够正常理解老师说的每句话,坐在第一排可以帮助我集中精力听清楚。这个学期以来,由于心态的变化,我开始喜欢坐在后面。这样的好处是有更多的自由度,听起课来也更轻松一些。当然,需要记很多课堂笔记的《数据结构和算法分析》课我依旧是坐在前排。

坐在后排还有一个“好处”,就是可以“窥屏”。教室里很多人都带着计算机去记笔记,我在无聊的时候,就会看看他们在干什么,用的什么软件之类的。看了几次,让我感到有一个很深刻的印象,关于软件使用的。

Windows 下的软件就不用说了,一来我基本上不熟悉,二来多数人记笔记用的就是 OneNote(我从这边帮同学挑过电脑,一般买了都会带 OEM 版本的 Office 的一些软件),少数人用记事本,另外我见过一个 jerk 用的是 TextPad。关于 TextPad,我觉得只是一个比记事本稍微稍微强那么一点点的东西,在我看来它的优势只是大一老师教编程时推荐的编辑器。所以现在有同学编程甚至记录课堂笔记都用它,让我觉得实在是讶异。长期用这种编辑器,我觉得我会得抑郁症。当然,如果此人从来没有见过外面的世界,就不那么好说了,虽然这种情况的几率不大。

我们这边课堂上用 Mac 的人数与用 PC 的人数基本上持平,有时候还会超过。用 Linux 的我也见过至少 10 个。由于 Mac 和 Linux 都是以 UNIX 基础的系统,所以把它们放在一块讨论也算说得过去。虽然当中有些小的差异。

在 Linux 下,我见过的用来记笔记的工具,好像只有 oowriter。顺便说一句,我看见过的 Linux 发行版都比较基础。不知道是这帮老外的水平还在入门阶段还是已经“看破红尘”,用得基本上都是 Ubuntu 系列的系统。喜欢 GNOME 的就用基本的 Ubuntu,喜欢 KDE 的就用 Kubuntu。别说 Gentoo 了,我连个 Arch 都没见到过。用这些 Ubuntu 之外的发行版不是为了耍酷什么的,而是根据我的经验,Ubuntu 系统用一段时间之后,速度确实是像蜗牛一样,特别是我用了 Gentoo 之后,这种感觉尤其强烈。言归正传,用 oowriter 的大多数人都是普通的记录而已,而在《数据结构与算法分析》课上坐在我旁边的一个同学,我曾经瞟过他的屏幕,看到他就在课堂上用 oowriter 的画图工具在画 heap 等结构。看了之后我大感惊艳,时间长了不用 OpenOffice,我也不知道里面的画图工具进化到什么地步了,如果在课堂上来画这些数据结构图能赶上手画的速度,已经可以算是“泣鬼神”了。

在 Mac 下,我见过同学使用过的记笔记软件占多数的是 Pages。与 Linux 下的 oowriter 的情况差不多,当然也有不想掏钱购买 iWork 的而选择使用免费的 OpenOffice for Mac。少数人使用 Microsoft Office 2008 for Mac,也在情理之中。而我亲眼看到有人用 TextEdit.app 来记笔记,也算是相当奇特的了。更“厉害”的是我们《操作系统》课程的老师,一个资历比较老的教授,用 TextEdit.app 来维护一个挺长的 ToDo list。做得特别工整,左边是事件的描述,右边有耗时的估算。但愿是我无知,不知道 TextEdit.app 可以使用插件,难道要手动维护一个 ToDo list?按理说那一代的教授应该对 Emacs 比较了解的。

就我观察的这些人来说,绝大多数人喜欢用系统自带的或者是默认推荐的主流软件(当然,这不包括 IE。Firefox 在加拿大已经是标准的浏览器,哪怕是在 Mac 上,我也看到很多人使用 Firefox 而不是 Safari。)。这让我感到挺奇怪,人们选择使用最“流行”的而不是最优秀的软件来使用。虽然说不同人对“优秀”有不同的定义,但我想在计算机系,在判断软件的优秀程度上应该是比较统一的吧。但人们还是不大用 Emacs,用 Vim 略多一些,多数人喜欢用标准的图形软件。也许是大二老师讲 C 语言的时候在实验课上指定的标准软件是 Xcode,所以多数人对 IDE 情有独钟。Java 自然是 Eclipse 了,毕竟它自己也已经有了很大的名头了。

目前来看,相比起国内来说,Linux 在加拿大的计算机系课堂上已经不算“小众”了。根据我的观察,Emacs 才是真正的小众。在这里流行的似乎不是 Emacs 这种“用统一的工具来编辑不同的文档”的政策,而是用不同的工具针对性的编辑不同的文档。写 Java 程序有 Java 编辑器,写报告有文字处理工具,等等。我在这些年来,在自己的计算机上使用 Emacs 的,我是一个都没见到过。

我想过,一个普通的大学生使用计算机按照“潮流”来选择软件是正常的,而一个计算机系的大学生使用的软件,为什么还在这种基础的层次上呢?有很多软件,虽然古老,但绝对比那些东西优秀。前几天我们要交项目的 proposal,我负责合并小组其余三位成员的工作,完成排版工作后交给老师。老师的 proposal guide 上说如果 proposal 是用 LaTeX 编辑的,可以有加分。当时我就想,如果不让我用 TeX,我还能拿什么来排版呢?到今天来说,文字处理工具已经越来越不适合我了,我对它们也越来越生疏了。让我用文字处理工具来排版,想象就有很多困难。

我至今还记得引导我进入 Linux 大门的王垠的一篇文章(这篇文章被王垠改了,之前的观点性的论述被删除了)。里面有一节好像就是说使用这些看上去“老掉牙”的但绝对优秀、稳定的程序,而不是用像 OpenOffice 这样“新潮”(五、六年前了,那时候 OOo 确实新潮)却不稳定的程序。我觉得到今天来看,这话还是对的。OOo 虽然发展了这么多年,但我觉得从文档编辑的角度来看,包括 OOo、包括 Word,出发的方向就错了。我到今天也无法接受这个方向,因为按照这个方向走,对一个文档进行排版实在是太难受了。直观的来看,这些所见即所得的软件满足了初学者,似乎也很简单,但确是在要求用户来符合计算机的思想。而 TeX 这种“所想即所得”的软件,用一些简单的符号来表示文档的样式,是相当符合人类的思维方式的。

有时候我想,我身边的这帮人用 Linux 是为什么呢?觉得 Linux 很稳定?其实近几年来 Windows 已经很稳定了,从 Windows 2000 之后就很少有蓝屏等状况发生了。觉得 Linux 很酷?也许吧。我的理由是 Linux 下的软件是无法移植的,所以我希望使用 Linux。为了某些原因而为了用 Linux 而用 Linux,我觉得是一种“买椟还珠”的行为。我一直在推崇 Linus 对于操作系统的看法──操作系统的任务是帮助软件来运行,一个用户应当永远看不到操作系统。目前的很多发行版,为了推广 Linux,让 Linux 看上去简单,集成了很多入门级的软件(如 OOo),这些软件实在不是我心目中不可替代的软件。

February 6, 2010

分居

我之前写过我找室友的经历,当时我之前的室友毕业回过,我要给客厅找个室友跟我合租。

我首先想到 A 同学,我在读语言的时候和他一个班,关系一直不错。之前听说他住在一套两室一厅的客厅里,合租的是两个陌生人,于是就想把他“勾引”过来──与其与陌生人合租,不如和熟人合租更好说话。不过问他的时候,他说其中的一个室友搬出了,他从客厅升级到卧室去了。而且他住在另一处公寓的女友(也是我语言班的同学)搬去和他一块了。不过他的女友之前是和我国内来的同学 B 合租的,我可以问问他们那间卧室还在不在,如果找室友困难的话,我就搬过去。不过我先问了 C 同学,同样是之前语言班的同学,不知道他有没有搬出来的意思。我问他的时候比较隐晦,没有直接问他要不要来,而是问他有没有朋友要找房子的,原因是他那时和别人合租一套两室一厅,虽然是和陌生人合租的,不过好好的干嘛要来我这里住客厅呢。他没有意思之后,我就问我国内的同学,他之前和女朋友与 A 的女友合租一套两室一厅,我问了后结果我那同学回国了,那间卧室也已经租出去了,于是最后一条找熟人合租的路也没了,我只好从论坛上发帖子。

本来我的打算是找房子难但有房子就不愁租不出去,结果发帖之后几天都没有信。平安夜那天我和另外两个同学去老外家聚餐,和他们谈起这件事,但他们却觉得不大乐观。因为我要出租的是客厅,除了熟人以外,如果有卧室的,肯定不会租客厅。冬季也不是留学生初次出国的旺季,因此找房子的人就不会很多。我听了之后,想想也有道理,就有些担心了。不过按照我那性格,以及那几天我那什么都提不起劲精神状态,我也没有进一步的行动,只是看了看我那帖子在论坛里不知道沉到多少页了,一个回复的也没有。现在想来,我也对我那时候的行动有些不解。本来找不到室友的话,我就要自己一个人承担每月 651 加元的房租和 50 加元的网费,是很麻烦的,不过我那时的心情是隐隐有点担忧而已,知道后果,但就是不想行动。现在说那时候有潜意识预知到今天的结果是有“事后诸葛”的感觉,但我当时确实是那么希望的,并也想到我之前的种种经历都是如此的──自己不用花心思去想解决方法,总会有方法水到渠成的找上我的。

后来的情况就和我那篇文章里说的一样了。C 同学在一天晚上 7 点左右给我打电话说想过来看房子。我问他为什么要搬,他说他们的合约三月份到期,他们公寓的管理员不咋地,他想换个地方住。我一厅这送上门来的好事,自然是乐得答应了。他说他二月份搬进来。

C 同学看完房子后没两天,在一个周末我接到 B 同学的电话,问我知不知道有睡在出租房子。我问他怎么了,他说和女友分了,刚从国内回来,正急着找房子,听他说这时候房子也不好找。我一合计,一月份还有半个月的房租要我自己承担,不如把他拉进来暂住,算是一举两得。于是就把他拉进来了,让他有半个月时间找房子。最终他找到房子后,就帮他搬家,而我在中间也成功的让他跟我合租我和之前的室友在健身房合租的储藏柜了,事情得到了圆满的解决了。

今天晚上我正在写作业,突然接到一个电话,是 A 同学打来的。他上来问我那客厅租出去了吗,我听了之后隐约感觉到了什么,告诉他已经出租给 C 了,但他还没有搬进来,然后问了他原因。果然如我所料,他这几天一直和女朋友吵架,想找地方搬出来。我心里想着“果然如我预料一般”,一面表示遗憾,一面说“过几天可能还有转机”,同时想到了和之前的室友的讨论。

我之前的室友和女朋友在国内认识的,一起来这边的,中间分分合合好几次,最后我室友毕业回国,他女朋友留在这里。他女朋友从来这里之后一直住在老外家里,我室友和我在语言班毕业之后一起租的房子。他说他一直没有和他女朋友一块住,就是因为当中的麻烦事太多,多数情况下都会闹翻。也确实,他在这两年之中,和他女朋友分分合合好几次,但到最后也算是在一块的。我们当时讨论这个话题,就是因为听说 A 同学和他女朋友搬到一块去了才开始的。B 同学的经历验证了这一点,今天 A 同学同样验证了它。

接连发生同样的事,让我有些好笑。更好笑的是我当初在找室友的时候都问过他们但都没有成功,结果现在他们又反过来问我,真是有些“沧海桑田”的感觉。我当时找不到室友的时候脑中隐隐的幻想可能是有熟人会来找我一起住,因为我之前几乎每件类似的经历都是这么顺其自然的完成的,在完成之前我固然也感觉过一些恐慌,但事实却就那么的发生了,那么的顺其自然。这次我也感觉到了恐慌,而且似乎这恐慌也比之前的每一次更剧烈一些。我甚至想到了“我之前每一次类似的事情都是顺其自然完成的,我感到很幸运,因为我不需要自己出力去选择或者去争取,事情的结果也都不错,我懒懒的就获得了好处,难道我一辈子都会这样幸运?这次会不会就是一次‘人生转折点’?从这次开始我要自己努力去获得我必须要的东西了?”结果事情依然是这样“顺其自然”的发生了,显然我又幸运了一次。不过我在写这些字的时候,也没有什么自信了,不知道下一次事情是不是还会像这次一样幸运的解决。

现在的整体社会导致我以及周围的年轻人的心智有低龄化的现象。我经常听到有人戏言“如果我们如果在旧社会的话,孩子都会打酱油了”,因为听过很多人说那时候人们十六、七岁就结婚生子了。哪怕是今天,我也经常听说“某某的小学同学已经结婚(甚至有孩子)了”的话,在感慨时间流逝的同时,也想过如果结婚或者生子的是自己,自己会是什么感觉。当事人可能会感觉很自然,但如果是我的话,心里想的肯定是“别开玩笑了,自己还是个孩子呢”,尽管经常从大人那里听到“你以为你还小啊”之类的话。

在国外,很多人都总结出男女没有真感情之类的话。尤其是我们这个地方,平日里给人的感觉远不如国内的一些大中城市那么有“都市感”,平均楼层的高度也不过两三层。生活本来就比国内冷清,再加上我们这些外乡人,就更冷清了。因此这边的一些“小两口”,基本上都是欲望的结合,因为一个人在这边太寂寞了,很容易“干柴见到烈火,天雷勾动地火”,两个人就好上了;但同时也经常听到某某和某某又分了。当然了,本来在一起就是为了泄欲的,结果两人低头不见抬头见,在异国一起生活其实就和国内的两口子一个小家庭差不了多少,而由于心智的低龄化,心理也远达不到长久过日子的程度,不久就分手也是正常的。

分分合合原本正常,不过在近期内就接连看到了两起,还都是自己身边的朋友,因为毕竟我周围的人平时也很少发生这种情况,所以感觉也有些奇特的。我身边还有比较尊敬的学长,同期的同学也有一起住的,我也不禁为他们感到有点担心。其实想象一颗不怕寂寞、自得其乐的心在异国他乡学习生活还是挺好的,虽然在外人眼里或许少了很多人生乐趣,但也少了很多红尘世俗中的烦恼。

February 4, 2010

关于 Linux “踢出” Android

昨天我照例去老袁的 blog 上找乐子,看到他新写了一篇文章《谷歌Android被Linux内核除名》,讲到了 Linux 把 Android 的代码树删除这件事,并借这件事,引申到了自己对 Google 的挞伐之中,并再次吹捧了 Windows。

老袁写的文章,我都是当笑话看的。看了以后就不管了,不过刚才翻 Google Reader 的时候,看到了阮一峰新写了一篇文章《Android,开源还是封闭?》。老袁写的笑话我可以不管,但阮一峰认真的写了这么一篇文章,我倒是对文章中的观点有些不认同。本来想在他的 blog 上留言的,但写着写着就觉得太长了,干脆总结成文章放在这里。

我觉得现在人们谈及 Google 必提“不作恶”,用这个词来规约 Google 的行为。这本身没什么问题,但我觉得这个词现在被过于“滥用”了。有时候众口难调,Google 不能满足所有人的时候,批判者就经常用“不作恶”来评判 Google。不同的人有不同的观点,所以事事都往"作恶"上面靠,让目前的讨论变得很空泛了,当然这只是题外话。

这篇文章里说的意思是,Google 的 Android 使用的是部分 Linux 的代码,按照 GPL 协议,Google 应该把所有的改动同样用 GPL 发布,以贡献开源社区。但事实是,Google 让硬件驱动运行在 userspace,这样这些驱动程序就不是 Android 的一部分,就不需要回馈给社区。Google 给硬件厂商提供了方便,使得他们写的驱动可以不用共享给社区,所以 Android 是个封闭的系统。

我觉得这样就有诡辩的成分在了。首先 Google 的做法是合法的。Android 本身是开源的,所以它没有违反协议。而硬件厂商给 Android 开发的驱动,版权并不属于 Google,因此 Google 自然也没有权利拿它们来回馈社区做好人。如果 Google 这样做了,岂不是和海盗湾的那帮传播盗版的人一样了么。当然,阮一峰是支持海盗湾的,可能他认为 Google 不这样做才是作恶吧。

文章中有一点挺有意思,还有些技术成分。Greg Kroah-Hartman 的文章里说 Android 为手机实现了一个统一的虚拟机,解决了程序的移植问题。阮一峰认为这是 Google 为了不贡献那些驱动而耍的小把戏,他说:"且慢,这真的是理由吗?传统的Linux系统,也并不依赖特定的硬件啊!只要把源代码根据不同的平台,分别编译一下,同一个程序不也照样可以在不同的硬件架构、不同的Linux发行版中使用吗?"

我觉得阮一峰可能对"平台"这一词并没有弄清除,或者是故意曲解了这个词。过去人们所说的 "C 语言具有良好的移植性","换一个平台,在那个平台上编译一次代码就可以了",这里面说的平台,可不是目前人们说的 32 位平台、64 位平台那么简单。平台之间的差异基本上到了 CISC、RISC 的差异那种程度上了,和目前我们想象的地址总线的数量不同了相比,显得更复杂。很多软件,在不同平台上移植,也不只是重新编译那么简单。比如说 Endian 的问题,光是要修改这一部分就要花费很大的功夫去修改。Mac 系统从 Power PC 平台迁移到 Intel 平台上的时候,发布过 Rosetta 程序,就是一个 Intel 平台上运行的 Power PC 虚拟机。很多软件,如 Adobe 的那些程序(印象里是 Photoshop,我们在 Computer Organization 课上讲过,现在记不清了),到最后也不是修改过去的,而是重头写起。像 Adobe 这样的大公司都是如此,手机上的软件开发着常常都是小团队甚至是一个人,要独立完成不同平台的移植工作,显然也是不容易的。哪怕是现在我们从 32 位往 64 位上过渡,经过了这几年都还没有搞完呢,更别提那些架构级别的移植了。

而 Java 通过虚拟机,算是彻底的解决了这个问题。如果像阮一峰想象的那样,重新编译就可以完成移植,那么当年 Java 还搞什么噱头?由于 Android 本身是开源的,而且手机硬件的生产成本又低于计算机,现在也没有统一的标准,所以在将来,我认为必然会出现千奇百怪的硬件。这些肯定不能通过简单的编译就解决问题。阮一峰的意思是为不同的硬件架构都做一个二进制包,这样一个软件,开发者就要为多个平台维护不同的二进制包,阮一峰总不会指望作者发布软件代码让用户自己编译安装吧?而如果 Android 想成为一个像 iPhone 那样的严肃作品的话,必然要有针对普通用户的一键式安装软件的机制。Apple 的 App Store 是一个很成功的先行者,而 Google 目前搞的 Android Market 也是在像这个方向努力着。而按照阮一峰的想法,当一个用户在安装软件的时候,被告知如果是 HTC 生产的硬件,就下载为 HTC 编译的包;如果是摩托罗拉的硬件,就下载为摩托罗拉编译的包。这样的手机,在普通用户眼里,也只能是"小打小闹",根本成不了气候。由于手机产生的平台可能会比计算机更多,那样的话后果说不定更严重。目前 Linux 在桌面领域已经是这个样子了,如果 Google 按照同样的策略去运作 Android,将来在市场上 Android 很可能表现还不如 Linux。面对 iPhone 平台,那样的 Android 只能是沦为几个黑客的玩具而已。

同样说道了市场,我的前提假设是 Google 做 Android 不是玩票,不是搅浑水,而是严肃的想涉足移动计算这一块。那么硬件的支持就是至关紧要的了。阮一峰的文章里也说明了,硬件厂商开放了自己的驱动的后果是什么。让那些硬件厂商把驱动吐出来显然是不可能的,所以迎合硬件厂商的要求也就是必要的了。其实仔细想想,这样的做法也并不算过分。对于用户来说,我们获得的还是一个开放的 Android,只是硬件的驱动是封闭的。开发者照样可以为 Android 平台开发软件。其实就算是桌面 Linux 用户,除了像 RMS 那样固执的人外,有几个会选择开源的显卡驱动呢?

所以,无论是从法理还是从情理上,我都觉得 Google 在这件事上没什么错。合理怀疑也是不错的,但把什么事都说成阴谋论就让人觉得不好了。尽管 Google 有"不作恶"这一说,但如果 Android 真得发展成了桌面领域的 Linux,那么它做不做恶都没有人关心了。

阮一峰在最后说:“Android必须变成一个真正的开源系统。如果像现在这样封闭下去,就会被开源社区抛弃,就一定不会成功,即使有Google的支持。”这口气让我觉得和老袁挺相似了。如果 Android 作为一个系统,这话还有可能说的过去,但作为一个商业产品的一部分,如此断言还是太过武断。

February 3, 2010

越来越喜欢 Java 了

周日晚上开始,大概是 11 点多以后了,我开始写这学期的《数据结构与算法分析》课程的第一次作业的倒数第二道题。题目要求是用 C 语言或者 Java 语言实现 Binary Heap、Ternary Heap、Quaternary Heap、LB-Tree、Skew Tree、 Binomial Queue 这几个数据结构,在程序开始的时候随机生成一个包含 10000 个正整数元素的数组,把这些数据存到这些数据结构中,然后把这写数从小到达取出来,统计进行内存操作的次数,来得到这几个数据结构的性能对比。

我之前和同学讨论过这个题目,对方说他花了不少时间,不过他是用 C 来实现的。我由于这次作业第二天早上就要交了,所以也就没有跟自己较劲,非要用 C 写。基于之前用 Java 的经历,我如果要从 C 和 Java 当中选一个语言来写这个程序,我毫不由于的选择了 Java。

我曾经一度非常讨厌用 Java,因为觉得语法太繁琐,要读取文件都很麻烦。在 C 之类的语言中几行就 OK 了。另外的原因大概是有些审美疲劳,虽然本事不怎么样,但那时却好高骛远,想接触一下 C++ 之类的语言以及 Ruby 之类的新型语言。Java 写多了,那时后的课程又没有什么难度,就有些小看了 Java。后来我的一下比较大的“项目”都是用 Java 完成的,我学了面向对象课程之后,对 Java 也算是有了新的尊敬。

我最近的几次大项目有点不大在状态。每次在截止日期之前都提不起兴致来,非要等到第二天就要交了,前一天晚上才用咖啡顶着,熬夜把项目不紧不慢的写完。每次大概花上夜里 8 个小时,也算是一鼓作气了。上学期《专家系统》课的学期项目是如此,这学期的面向对象的第一次作业飞机座位模拟也是这样,这次的数据结构也是一样的情况。每个程序的规模基本上在 2000 行代码左右。后来我总结了一下,发现 Java 实在是功不可没。要是让我用 C 语言或者 C++ 来在 8 个小时内写这么多代码,我中间的空指针就够我受的了。

我另外用 Java 写的项目是去年暑假上《软件工程》课的时候和另外四个人组成的小组做的学期作业,是一个自动生成歌曲列表的软件。我所在的小组完成的是底层的逻辑部分,似乎和对象的交互没什么关系。我在上学期也和另外一个人用 C 语言写过《计算机网络》课的学期项目,我之前也写过文章讲过相关的故事。那和 Java 比就完全不是一个级别的了,开始时我写 concurrency 的时候简直是一筹莫展。后来我是用的 C 写的游戏的逻辑部分,对方写了服务器和客户端的界面与交互,总算是完成了。不过在演示的时候还是出现了字符串的乱码,估计是一个某个地方有了一个“野指针”。不过打分的助教说这不是重点,于是我们也没有找具体是哪里有问题。

之所以把 C++ 排除在外,是因为我目前的 C++ 水平很弱。我曾经在 STL 流行之前觉得我对 C++ 掌握的差不多了,那时候我还在中学时期,现在想起来也是狂妄的可以。过去只知道有个 class 关键字,底层是怎么回事我是一点都不了解。现在学了面向对象课程,学到了 C++ 中的类不仅可以放在堆里面,也可以放在栈里面。这让我困惑了许久,两着之间的区别是怎么样我也考虑过很久。还有,过去光记得用 class 关键字来定义类,使用的时候也没记得要用指针。现在基本上在定义的时候前面加星号成了标准写法,也让我着实愣了一阵。我还没有用 C++ 写上几个 2000 行左右的程序,因此对于语言本身的掌控没有什么感觉。我用 Java 写这种东西,只要把题目搞清除了,从纸上设计好,就可以开始写了。类之间的组合什么的基本上不会有什么问题,顶多在检查空指针的时候查一些粗心错误。C++ 我就还没有这个底气。

我考虑了一下我为什么感觉喜欢 Java,我喜欢的到底是 Java 的什么东西?最后得到的结论大概还是自动垃圾回收以及隐藏指针吧。C++ 和 C 里面的指针分配,不管是 new/delete 还是 malloc/free 都要小心意义的,这些东西又不能自动递归执行,稍微有点嵌套的数据结构在释放内存的时候就要自己做许多事。Java 的自动垃圾回收虽然从效率上不如 C/C++,但以目前的机能来说,差距也不大,而节省下来的人力时间则不是机器执行时间可以比的。而指针隐藏和垃圾回收也有一定的关系,不用手动维护指针总是好的。虽然指针给了更灵活的操作,但也容易让人写出有隐患的代码。

总结出了这两点,我又检查了一遍,似乎还真没有别的我喜欢的地方了。相反倒是有我不喜欢的地方,就是 Java 没有一个好的调试器,或者说我还没有掌握一个 Java 调试器。我在上学期用 C 写项目的时候,终于对 GDB 有些开窍了,突然觉得它真是一个好工具。尽管我只会用它的很小一部分功能,但已经基本上可以满足我的需要了。我用 GDB 主要是程序有了 Seg Fault 的时候,进 GDB 运行一下看看空指针在哪里。或者就是程序有了奇怪的行为,去设个断点,分布执行一下,跟踪一下变量的变化。虽然不像我过去用的那种 FreePascal IDE 之类的调试器一样可以即时的显式监控变量的列表,但我也习惯了用 p 来查看变量的值。Java 的 SDK 里面有 JDB 这个 GDB 的模拟,我用过几次总是一头雾水。说是 GDB 的模拟,但指令基本上全都变了模样。也没有缩写了,指令本身也变了好多。我反正是一次也没有成功的用起来 JDB 过,所以到目前位置我还是在代码里面插入“人肉”断言来输出变量的值的。

基于上面说的那两点,我觉得应该有不少语言都满足这些要求,但我基本上都没有熟练到像 Java 那样子。而且 Java 也算是最流行的一个,我们老师课不让我们随便用 Ruby 写作业。或者我听说 Objective C 也不错,在 C 的语法基础上加上了自动垃圾回收什么的。不过对于他我还是一点没有入门,语法上也觉得颇为奇怪。就算是之前最熟悉的 Python,拿来让我写这种大项目我也是要愣一阵子的。

想到了这一点,我觉得应该可以找到一种适合自己的编程模式,来发挥我需要语言的特性。通晓了这一点之后,应该写千百个项目都不成问题了吧。

February 2, 2010

奇怪的 BZR 下载

几天前就知道了 Emacs 的代码仓库已经从 CVS 转到 BZR 上来了,但一直没有多像。今天突然想看看 BZR 里的 trunk 版本和 CVS 里的有没有什么不同。因为我目前用的 Emacs 是用的 CVS 里的代码编译的,不知道在 BZR 中的 Emacs 代码有什么更新呢?

我第一次听说 BZR 是在 2007 年下旬,中间一直没有实际 checkout 过 BZR 仓库里的代码。我平时自己的代码喜欢用 Git,与别人合作用的多数是 SVN,这两样基本上已经足够满足我的要求,也足够流行,所以我一直没有花时间去弄清楚 BZR 相对于这两个来说有什么不同。由于平时很少 checkout BZR 仓库里的代码,所以我连 BZR 客户端都没有装。今天想去下 Emacs 的代码,之后现下了一个客户端。

我首先下载的是 BZR 的源代码,需要用 Python 安装。不过我看里面有直接可以运行的可执行文件,就先用它试试。不知道是不是 Emacs 的 savannah 仓库的连接速度慢,还是 BZR 本身就慢,代码一直在下载中。说它奇怪是我看到下载的目录里面只有一个 .bzr 文件夹,而代码却不曾看见。我才应该是被放到什么地方缓存起来了吧。后来突然本子的风扇开始转了起来,我看了一下果然是 BZR 的这个 Python 进程的 CPU 使用百分比已经高了,由于正在上课,所以我只好杀死了这个进程。

中午的时候,我下载了 pkg 安装包,直接安装了二进制的 BZR,主要是想确保万无一失。于是又一次运行了 checkout 命令。当中经过了漫长的等待,终于风扇又开始转了。我这是查看了一下本地目录,还是一个文件没有。我猜是不是就在最后会把所有的缓冲的代码复制到本地目录里去啊。过了一会程序就运行完毕,果然文件都在本地目录里面,风扇自然也就不转了。看来我的猜测是正确的。

对于 BZR 的这种方式,我觉得不是很好。首先是界面太不友好了,命令行只提示了下载速度,而进度什么的都没有告诉。SVN 等工具会明确的显式正在下载的文件,这样下载是否正常也就一目了然了。而 BZR 的这种方式,在 checkout 像 Emacs 这种规模的代码时,就会让人觉得非常奇怪,也不知道下载是否顺利。而且在最后也会引起 CPU 使用过高的情况。

厨师应该是个好职业

这是我自己做饭半个月后的感受。

之前由于家里那哥们好把厨房弄的很乱,我平时又喜欢在学校的实验室里泡着,所以我很少在家里做饭。平时的三餐基本上是这样安排的:早餐不吃(既没有时间也觉得不饿);午餐在学校里一杯大咖啡两个蓝莓 Bagel(每天都是,弄的那里的店员每次都先问我一句是不是一样的);晚餐或者在学校的餐厅里吃汉堡,或者在回家路上去超市买熟肉。一个学期这样吃下来也觉得没什么。

上个月上旬我室友回国了,我之前预定的下个室友要这个月才能搬过来。正在考虑怎么消化这半个月的房租的时候,突然有朋友急着要找房子,我便“勾引”他在我这里暂住一阵子,边住着边找房子,半个月找房子应该够了。在这个朋友来了之后,我又开始了自己做饭的日子。我们去超市买了菜和肉,回家后发现我之前的室友在冰箱里还留了一下还能吃的肉,我们于是就先把它们做了。

前一阵子我们经常去做运动,回家以后就累的要命,也觉得饿。我做完饭之后就赶紧吃了,也没觉得有什么。这些天开始忙了起来,回家之后就不怎么想做饭了。有些时候到了吃饭的时间,但并不怎么饿,这种事情也是常有的,周末尤其是如此。不过既然已经决定要按时吃饭了,我也就自己做了。

之前的室友留下了一些鸡翅,我之前的几顿饭就是在炖鸡翅。做饭的时间都很长,主要是后期方料后要等很长时间,这样就导致我做完饭后就觉得不大饿了,也没有了做饭前那种期待的心情,吃起来很勉强。这事也发生了很多次了。我在 Twitter 上也抱怨过,有人回复说可能是我做饭做的太艺术了。我不确定对方是不是在说反话,是在说我做的饭太过艺术以至于时间很长还是说我做的饭其实是太难吃所以自己也吃不下。难吃是不至于的,我自己也比较喜欢吃,但主要是做的时间要很长,那段时间过后基本上就是“饿过劲儿”的状态了。

之后我就在考虑,怎么样才能摆脱这种状态。自己花时间做完饭之后,还能保持想吃的心态。在国内的时候,在家里基本上都是大人做饭,有时候就算是做饭之前就饿了,等到做饭之后还是觉得想吃。自己做饭如何能保证这种状态呢?后来得到的结论就是本文的标题。

答案就是自己做饭给别人吃。第一次做完饭的话或许自己并不想吃,但再做几次总会有想吃的时候。一个厨师身边总有吃到的机会,比方说总要常常味道如何的情况呀。或者到了正常吃饭的时间,吃一些之前做好的饭应该也不错。这样的话问题不就是解决了吗?

当然,因为我没有做过厨师,不知道做一天的饭会是什么感觉。上述都是空想。:)