December 2009 Archives

制作了一个新的样式

| No Comments | No TrackBacks

lf-year2010-style.png之前我有提到过,我对网页设计方面没有什么研究,尤其是在美工方面是没有什么天赋的。

对于计算机的学习与了解,从小我一路上来,我身边的朋友,如果不是接触编程这方面的话,基本上就是制作网页了。那个时候买个盗版的 Microsoft Office 里面就有 FrontPage 软件,可以像制作 Word 文档那样子制作网页。而用到 DreamWeaver 已经是比较厉害的了。我只打开过 FrontPage 这个软件,而 DreamWeaver 需要单独买,那个时候也没有网络可以下载软件,所以我就从来没有打开过 DreamWeaver。现在不知道是因为我很少看面向大众的电脑报之类的东西的原因,我反而很少听到有人提起这两个软件了,也不知道它们都发展的怎么样。我在 Site5 上的空间上是有 FrontPage 扩展的,不过我不知道有什么具体的作用;而 Adobe 公司到现在还在买 DreamWeaver 也是事实。我觉得现在之所以人们都不大讨论这两个网页制作工具,应该跟目前比较红火的 blog 制做工具有关。几年前(大概有 10 年了吧)人们流行制作网页,其实那些人想要的只是一个 blog,这是我能想到的解释了。

我个人,至少是到目前位置,还是对于当年我没有沉醉于制作网页这件事上感觉比较庆幸的。我没有什么手工美术天分,从小对于需要自己动手画画的美术课就比较头疼,同样体现在我对电子的网页上的美学要求就没有什么具体的想法。我看到一个网页可以说出来我觉得它漂亮不漂亮,但让我凭空想出一个漂亮的网页,对我来说很难。而做一个 blog 的样式,基本上就属于这种类似的工作。我对于设计这方面也比较懒惰,我更喜欢有现成的东西可以套用,就像 TeX 那样子,标准的一些样式就已经非常漂亮了,基本不用自己设计宏包。

而偏偏事情不如意,Movable Type 平台上的主题还是太少了。先不说是否美观了,就是基本的主题数量就没有多少。我估计和 WordPress 的走红有很大的关系。我在刚开始用 WP 的时候,从来没有感觉到模板不够用,那时候发愁的是不知道选哪个好。我当时找到了一个 1024-px 的模板,自己略微改动了一下细节,用得就比较舒心了。而在 MT 领域就基本上是另外一个样子了,一个初级用户可以选择的也不过是系统自己提供的那几个。更夸张的是,MT 4 的默认字体显式中文实在是太恶心了,我其实觉得显式英文也没有非常好看。我估计是 6A 有一大部分股份是日本的缘故,所以很多默认的模板里面的字体设定都有很多是日文字体。这些模板显式中文,有的字竟然会比其它汉字窄(最明显的就是“关”子了),而且经常也一篇粗一片细的,非常不美观。

当然,MT 也有好看的模板,但是数量实在是太少了。比如 MT4 的 Mid-Century 和 MT5 的 Pico 都是相当不错的模板。Pico 走的是简洁风,Mid-Century 走的是“简约不简单”风,基本上很抓我的眼球。最基本的是,他们显式的中文都非常的漂亮。其实目前的网页环境下,中文已经比较漂亮了,但可惜 MT 的默认模板中有很多的 font-family 的设定都不利于中文的显示,所以过去很长一段时间中我都搞不定字体的设定,后来自己从头开始自己从零开始写样式,这样才算解决了这个字体的难题。

设计模板另一点对我不利的地方是,我没有系统的学过 CSS。今天我在外面的时候想了一下,总结出我目前和我小时候学习方法的不同。小时候也许是因为我看的所有计算机的资料都是课外的,所以我就特别的有兴趣。基本上所有的计算机书籍,我都是一字不落的从前言开始看。所有的东西就像是看故事一样,从头看到尾,这是我现在觉得“系统学习”的方法。而现在则有不同,由于时间的原因,我现在看的资料就非常的功利了,需要什么技术,就看相应技术的资料,现学现卖。所以我现在对于 CSS 的掌握是非常浅薄的,使用起来也没有什么信心,基本上是修改了一下 CSS 文件,然后就刷新一下浏览器看看有没有生效。

其实我觉得这种学习方法不是正确的学习方法。别人我不了解,我自己就是这样。举例来说,我现在感觉我真正对 Python 语言有了感觉是在我强迫自己安下心来从头看了一遍 Dive Into Python 之后。那个时候我已经不能像过去看 Learning Perl 一样可以静心的从头到尾的看一本技术书了,所以要强迫自己才能完成。而我在学习 Ruby 语言的时候就没有这么多时间了,所以学起来就很浅的看了看。再加上那时候 Ruby on Rails 已经流行起来了,所以学习 Ruby 的时候就有很大一部分心情是为了用 Rails 才学的。中间我们学校的面向对象这门课又用 Ruby 作为交作业用的三种语言之一,我又学了一下基本的语法。但我现在总结起来,我对 Ruby 还是没有什么感觉。目前写程序,我喜欢用的还是 Python。Perl 长时间不用,有些东西忘记了,Ruby 还需要查手册才能写下程序。

正因为没有系统的学过 CSS,我过去对于 CSS 的使用基本上就是现学现卖的水平。自己的网页需要一种功能,就去 Google 上查,找到 CSS 之后就放进自己的文件中去。或者就是看到别人的页面挺漂亮的,就去看他们的 CSS 是怎么写的,自己在吸收一些不错的东西到自己的网页中去。这种方式弄一些基础的东西还是够了,但要做一些高级的事情就不行,原因其实是对于那些复制的代码还是一知半解,比如说 idclass 的区别、什么时候用点开头什么时候用井号开头什么时候什么也不用之类的。

我在今年暑假的时候第一次自己做了一个模板,当时的目的是因为默认的页面实在是太丑了。字体已经说过了,简直是惨不忍睹,而页面配色本身也很难看,header 的血红色的背景色,加上小小的字体,给人一种头重脚轻的感觉,字符的颜色也淡,看上去很吃力。而系统提供的其它模板,基本上没有好看的。唯独有一个 Unstyled 模板还挺有意思的,就是把所有的 CSS 设定都清空,可以总结成只有 reset 功能的 CSS 模板,再加上侧边栏的感觉。我一看这个模板还不错,至少字体是正常了,于是我就在这个模板的基础上加上了一些其它的设定,以及从我之前照的照片中剪裁出来的 header 和 footer 背景,当时用的还不错。后来我受一些台湾的 MT 用户的影响,觉得把 blog 做成大杂烩的样子也不错,于是就在之后用了 cityscape-sf 模板,一直到大概一个星期之前,我才用了 Mid-Century 模板。

Mid-Century 模板算是一种对 MT 的显式系统本身的比较大的改动。也就是说它不能像普通模板一样把目录复制到 mt-static/themes 目录下面就行,而是要用 plugin 的形式,从 Templates 页面里把整个的模板组给换了。这样做了之后,widgets 这些东西就不归系统管了,而是要 Mid-Century 自己来管理,所以 Widgets 页面就失效了。现在说起来,我感觉它就像 WordPress 的 K2 模板一样。我过去对于这种模板是略微有点排斥的,主要是怕它把 blog 弄坏了,无法恢复,我的 blog 当然也是要以稳定为主的。后来我因为快要换主机了,早晚也要迁移 blog,于是就下定决心在旧的主机上尝试了一下,果然非常漂亮,但我能改动的也就不多了。在更换了主机之后,我还是没有使用 Mid-Century 模板,同样是之前的考虑,我觉得如果能不动那些基础的东西就不动。

其实从设计上来说,MT 的风格设计还是合理的。基本上一个标准风格的模板,就是在 mt-static/themes-base/blog.css 的基础上做一些设定。而这个 CSS 文件的作用,基本上就是网上的那种 reset 作用的 CSS,经过它之后,之前的一切设定都没有了,留下的只是边栏。有了它之后,在加上一些字体、链接风格之类的东西,页面就比较美观了。我的上一个模板和我今天做的这个新模板都是基于上面的这个 reset 文件的。我这次其实也是从过去的基础上,参考了冯大辉阮一峰的 blog 的 CSS,加上了一些自己喜欢的设定。我的 CSS 文件还是非常简单,我测试了没有太明显的效果的,我统统的没有加上。

其实做来做去,我现在也是非常羡慕可以做出漂亮网页的人了。昨天我研究了一晚上的 VPS,看到了 iStef 制作的卖 VPS 的网页,佩服的不得了。那个网页使用的是 MT 5rc3,做出来的相当漂亮,有水准。

我目前做出来的东西主要就是我目前的 blog 的这种样子,没有什么特别的修饰,能不加的就不加。这次的改动主要有链接的修饰、字体默认换成了 Georgia 因为它的数字显式很有感觉,标题的字体字号之类的。其它的连 header 和 footer 的图片背景都没有加,倒不是因为载入速度的考虑,主要是因为我不知道上面弄上么好,我自己又没有合适的素材,目前的这种纯白的效果感觉上已经不错了。为了方便日后使用,我还是把它打了包,上传在这里。使用的时候把它解包后,放进 mt-static/themes/ 目录下就好了,然后从后台的 Styles 页面选中他就可以了。

不负责任的 MT 安装文档

| No Comments | No TrackBacks

six-apart-logo.jpg换了虚拟空间之后,我昨天晚上重新安装了 Movable Type 4 Pro。

现在的我对于安装一个 MT 自然觉得没什么的,但我在第一次安装时也是走了一些弯路的。从那次之后,我知道了 MT 有自动帮忙设定文件的 mt-wizard.cgi,用它在浏览器里选择填写一些参数后就可以装好一个 MT。安装文件也没有必要把一些目录复制出来什么的,全都放在一个总的文件夹里面也可以运行。

后来在翻阅 MT 的文档的时候,我看到了一些用 ssh 的安装的方法。而且这次用了 Site5 的主机,我感觉我过去在 Dreamhost 上弄的那些东西都是不安全的。在那里 cgi-bin/ 就是一个普通的目录,从浏览器里面直接就可以访问。除了这个主要的 blog 之外,我还安装过一些其它版本的 MT,为了不干扰这个主要的 blog,我都是用的 SQLite3 数据库的。MT 的 SQLite3 数据库的默认路径是 ./db/mt.db,而这些竟然通通都是可读的。也就是说,外人完全可以下载到这个数据库文件,然后解析出我的密码来。而在 Site5 的空间上,cgi-bin/ 默认的权限就是无法读取的,所以更加安全一些。除了这个,在 MT 的安装文档上,也教了我通过软链接来保存多个办本的 MT 的用法。所以这次安装 MT,我就尝试使用了比较“正统”的方法。

而我说 6A 不负责任,是他们的文档实在是维护的太差了。作为一个软件,文档的第一步就是要教给人们安装。而在 MT 4 的安装文档上面竟然写着:“这是 MT 5 的安装文档,如果你用的是 MT 4 或者 MT 3,可以参考这篇文档,因为安装过程很相似”。但 MT 5 和 MT 4 的安装过程当然是有不同的!过去还好,我只是参考的这篇文档,但这次我要安装这个主 blog,自然要看得仔细一点了。但当中有个 themes/ 目录,我怎么也无法从文档的指定目录上找到,反而在上一级目录上能看到它。为此我下载了 MT 5rc3,果然找到了文档上的路径。原来这个路径是 MT 5 才有的。像这种东西,如何能让用户理解呢?

如果 MT 5 已经发布了,是 MT 的主要版本,这也就算了。可在 MT 5 正式版两次跳票之后,目前在日本之外,MT 的正式版本还是 MT 4。而 6A 匆匆忙忙的就把文档给换上去了,让人觉得比较莽撞了。而且,新的文档上去了,旧的文档能不能有个 archive 呢?

如果这事情只发生在 movabletype.org 上,也还算了。但我在找不到 MT 4 的安装文档之后,觉得 MT Pro 作为商业的版本,应该文档都比较正式,于是就去 movabletype.com 上去找了一找。结果发现 MT Pro 的安装文档直接指向的是 MTOS 的安装文档,也就是我之前看到的那一份。虽然 MT 的商业版本有针对个人用户的免费版,但 MT 的开源版本与商业版本面向毕竟不同。开源版的使用者可以钻研,所以给一份不完美的文档、甚至不给文档都可以,但商业版的文档竟也是这个样子,让我觉得 6A 是不是有点儿戏呢?

如果 6A 是一群爱好者组成的软件小组,这事也就罢了,但作为一家商业公司,6A 对待文档的态度,我觉得是不可以的。

我对 MT 和 6A 是很尊重的。虽然我不是像王建硕那样的早期用户,足以在 7 年多的时间里对 MT 不离不弃,但也是先用了 WordPress 再用到 MT 的。对于个人的 blog 工具来说,是否静态的影响并不是特别大,但对于后台的执行速度,MT 给我的冲击力实在是不小。虽然在换了新主机之后,这种速度的问题解决了,但我仍然对 MT 抱有谨慎的态度。

更新虚拟主机

| No Comments | No TrackBacks

25 日中午一点多钟,我刚下床,看到 leeseon 从 Google Talk 上告诉我他已经买了 Site5 的虚拟主机了。我当时心想好日子终于来临了,就什么都不顾的去答复 leeseon 了,很快就在后台看到了 leeseon 已经为我添加了这个域名,因此我要做的就是更新这个域名的 DNS 解析了。

我在 24 日写完了上一篇文章之后,便迫不及待的开始备份在 Dreamhost 虚拟主机下资料了。虽然 leeseon 说 DH 主机明年二月份才到期,但在年终加上圣诞节的缘故,Site5 有折扣活动,因此他告诉我会在年底之前把主机买下来。到了 24 日,我觉得离年终应该没几天了,于是就备份资料,所以连 blog 也不再更新了。当时觉得这样做挺合适,但没想到更新 DNS 的速度实在是慢,所以我直到现在才写了新一篇的文章。

当我把资料备份好了之后,我就立刻上了 GoDaddy 的后台,修改了这个域名的 DNS 地址。我在测试 Site5 的主机的时候,用的是另外一个备用的域名,结果凌晨更新的设置,到了中午去了学校之后就生效了。所以说我觉得这次更新设定应该也不会慢才对。不过我那天从下午一直盼到晚上,当中不停的刷新,但看到的总是我的就的网页的地址。我中间又到过 GoDaddy 的后台里检查了一遍又一遍的设定,生怕是我输入错误,但总也找不出错来。我还试着把 DNS 弄到默认再弄回来,还是没有用。

当中有一阵子似乎是生效了,我的首页上显式的是淡淡的墨绿色背景的 cPanel 的 Apache 服务器设置成功的消息。偏偏这个时候我发现我无法从 Site5 的后台进入到设定了,也就是我的域名信息不见了,所以说我也不确定这个 cPanel 的消息是来自那个主机。当时 leeseon 不在线上,我也没法问,不过之前从来没有遇到过这个消息,所以我估计是 DNS 已经生效了。而且有人在 Twitter 上给我我的 blog 进不去了,我也估计是 DNS 生效的原因。但郁闷的是我进入 blog/ 目录下之后,却依然看到的是我的 blog。到后来连首页也回去了过去的首页的样子,似乎 DNS 的更新又完全失效了。而我通过 DNS 工具查看我的域名,DNS 明明已经是 Site5 的了啊。没办法,所以我只有继续等待了。

到了今天,leeseon 在网上回复了我,并帮我重新设定了站点,于是后台的域名设定则又出来了。到了晚些时候,我终于发现域名打开后有变成了 cPanel 的消息。我在用测试帐号的时候,添加了域名并等 DNS 设定更新完毕之后,从浏览器里访问直接就是 public_html/ 里面的目录列表,可不是这个 cPanel 的提示信息。我通过 ssh 查看目录,也发现在 public_html/ 目录里面有些隐藏文件,于是我就打开两个帐号的后台一一比对。后来我看到正式的帐号里面的 FrontPage 扩展这个功能打开了,而在测试帐号里面这个功能是关闭着的。我看了介绍,这个功能似乎和微软的 FrontPage 这个软件有关,我又不用它,于是就把这个功能给关上了。果然关上之后 public_html/ 目录里面的一些隐藏文件就没有了,但浏览器里显式的还是 cPanel 的消息,无论我有没有在目录里面放上 index.html

没办法,我只好仔细看看上面怎么说的。结果上面说如果这不是你预期的结果,就应该联系管理员。于是我就去找了 Site5 的客服。和上次一样,在线聊天的客服帮我创立了一个 ticket,然后我就等回复。回复说我的虚拟主机上的 DNS 设定有问题,帮我改过来之后,说是这个设定要 90 分钟才能生效,他们到时候会通知我。我于是觉得 Site5 的客服确实态度很不错,我接触过的虚拟主机公司的客服除了 Site5 外,就只有 iWeb 了,虽然没有什么发言权,但作为普通用户来说,这种服务算是很周到了。到了 90 分钟后,设定还没有生效,但对方已经发了邮件过来他们会继续观察。而又过了一会,他们给我发邮件说现在问题应该已经解决了,我看了一下果然已经可以显式我上传的测试网页了。Site5 客服还有一个比较贴心的内容就是交流的记录都可以保存下来。除了聊天记录在服务结束之后可以选择发送到邮箱外,我今天才发现在后台的 Support 标签下会记录你每一次通过 ticket 和客服交流的过程,这一点我过去从来没有遇到过。

这一点弄好之后,其它就基本上没有问题了。我于是就把 DH 主机上打的包放进公开的域名目录下,然后从 Site5 的 ssh 里面直接通过 wget 下载过来。我怀疑这两个公司用的机房是不是很近啊,我这种下载的最后平均速度竟然达到了 9 Mb/s。而我下载 6A 公司主机上的 Movable Type 的速度才只有 600 Kb/s。不过顾不上兴奋,我就想先把 blog 弄起来再说,因为测试时使用 MT 的速度实在是让我太爽了。

我用了 SSH 的方法安装了 MT 之后,就 import 了之前 export 下来的文本文件。一开始我用的是 restore 的,结果提示有错误发生。其实正确的做法是使用 backup/restore,这样在后台上传的图片之类的信息(不止是图片文件)都会备份下来。而我过去不知道应该这样,就一直 export/import,但这样转移的就仅仅是文章。过去已经这样弄了几次,很多附件的信息早就丢了,所以我也不在意这次是用的什么方法了。重新生成站点后,把过去的 uploads 目录和 asserts_c/ 目录都复制到新的域名下,站点看上去就正常了。MT 就是这点好,静态化的结果,无论后台是怎么样,生成的结果都是完美的。

等我把这一切搞定之后,我去了 phpMyAdmin 看一看 MySQL 数据库的效果如何。其实也就是瞎看看,基本上看不出什么道道来。但这次我却悲剧的发现,数据库的字符集设定竟然是 latin1!!!天杀的 Site5,我在用测试帐号的时候检查过 phpMyAdmin 的启示页面,那时的字符集明明就是 utf8 的,怎么这会一下子成了 latin1。我在 2007 年用 WordPress 的时候遇到过这么一遭,到后来一直没有遇到过这种问题,这下子一下出现我也有些措手不及。我试着从 Operation 里面直接修改数据库的字符集设定,然后数据库这边的内容变成了乱码,MT 后台的文章也全部变成了乱码。天杀的。

我没有仔细考虑解决方案,而是平感觉找了条最简单却未必简捷的方法,就是重新生成数据库。我 Drop 了所有的表,重新运行 mt.cgi 程序,然后重新进行各种设定。结果导入完毕之后,后台竟然直接就成了乱码。奶奶的,实在不行就删除了这个数据库,重新建立,然后马上修更改字符集的设定,然后再安装。结果还是一样。我觉得我可能要修改了全局的变量才行吧,但我似乎又没有这个权限,只好有时间找 leeseon 或客服帮忙了。

不过,我倒懒得再弄 phpMyAdmin 了。MySQL 不行,我就直接用 SQLite3。我在测试 MT5 的时候经常用它来做数据引擎,一点也不耽误正常的数据库服务器,是我的最爱,我日常写数据库相关的程序也用它。其实我觉得个人 blog 上用 SQLite3 和 MT 应该也算是绝配了,只是不明白为什么 MT5 要放弃它。不过我看 MT5rc3(目前日文版之外的最新 Release Candidate 版本)的 mt-wizard 里面的数据库设置的下拉菜单选项中,还能看到 SQLite3 的名字,希望 6A 能够回心转意吧。其实我这次首先选择 MySQL 就是因为 MT5 会把 MySQL 当作主要支持的引擎,因此才放弃 SQLite3。不过 6A 已经有转换方案,而且目前的 MT5 版本对我来说都有个致命的 bug,我也许会在刚发布一段时间之内无法使用这个版本,所以我这次用 SQLite3 也没有什么顾虑。

结果上传了现有的文章之后,得到一个 4.3Mb 的 SQLite3 数据库文件,我目前的 400 多篇文章的数量来说,数据库这方面我感觉不到会影响使用的速度。不过我目前也仍然在测试当中。

但至此,使用新服务器的幸福日子应该开始了吧。昨天和 leeseon 聊天的时候,他说 Site5 可能是他在换到 VPS 之前最后使用的虚拟主机了吧。我目前对 Site5 的虚拟主机感觉还不错,但我的心里还有一个 media temple。网上对它的评价是虚拟主机的终点站,也就是一旦用了它之后,在虚拟主机方面就不会考虑别家的了。不过它的价格比较高端,最基础的 plan 是 20 美元一个月,所以很多人都是一起合租的它的虚拟主机。不过我测试过那些用 mt 的人的网站,感觉速度上也一般,自己从心里比较一下,除了操纵的体验之外,想不出 mt 比 Site5 强很多的地方。也许某一天自己有钱了,会弄个 mt 的空间来满足一下这个“夙愿”吧。 :)

更换终端程序

| No Comments | No TrackBacks

在买了 MacBook 之后,我的终端程序一直用的是系统自带的 Terminal.app。总体感觉来说还不错,虽然默认的配置看起来丑了些,但把风格切换成 Pro 的,字体弄成平滑的,用起来也算舒心了。

其实丑不丑倒是没关系,这方面我不是很挑剔,但最让我不习惯的是无法使用 Bash 中的快捷键。比方说,向左移动一个单词,过去我在 Linux 下可以按 Alt+b 来完成,这在命令行中特别有用。有时要调整某个参数,没有这个快捷键,用方向键或 Ctrl+b 来一个字符一个字符来移动的,就特别麻烦。我观察了一阵子,发现最主要的问题在于 Terminal.app 是个 Mac 程序,因此很多系统快捷键都需要用 command 键来调用。而 command 左边的 alt 键,则是用于输入一些特殊的符号,比如 ∫(是数学里的积分符号,我不知道能不能正常显式)。所以我在习惯之前一直非常苦恼。

对我来说,终端程序基本上是日常必备的软件。每次重启之后我要首先打开的几个程序中,就有终端程序。很多人觉得命令行难,但是一旦习惯了 UNIX shell 的那种工作方式,就感觉一直离不开了,因为有些程序实在是太赞了。所以我就很怀念过去我自己配置的 fvwm 桌面,我把 Alt+F1 快捷键绑定到“打开一个 urxvt 窗口”。我在启动脚本里面加上了运行 urxvt 的服务进程的指令,所以开机后就会在后台有个进程来先载入 rxvt 的一部分,所以我的快捷键只是打开一个新的窗口,因此速度非常快,基本上是随用随调。另外,我的 Alt+F2 绑定的是运行 gmrun,从里面可以运行任何命令,我一般用它来打开某个程序,就像 Quicksilver 一样用。

所以在 Mac 下,我也希望弄到这个效果。不过一来很少有软件会用到 C-S 架构,二来我对 Mac 本身的快捷键也不熟悉。在 fvwm 里所有的快捷键都是我从头自己设计的,不会有冲突问题;在 Mac 中会不会有冲突问题,发生冲突时以谁为主,我都不清楚,也没有什么时间研究了。所以就一直迟迟没有弄成这个功能,只是在某个 space 里面固定放一个 Terminal.app 窗口,等需要的时候就过去那个 space 就好了。

后来我好像是在课堂上,看到坐在我前面几排中有人一样用 MacBook,他的系统有一种功能,就是把一个终端窗口弄的和屏幕一样宽,高度大概有十公分多一些,所到屏幕的最上方。用的时候,终端窗口会从上方滑下来,用完了之后又滑了上去。我过去在用 fvwm 的前期,曾经也用这种方式做过。启动的时候运行一个 aterm,在屏幕上方缩成一条线。等我鼠标顶到屏幕最上方的时候,aterm 窗口会滑下来。开始的时候我觉得这个功能挺有意思,后来觉得有点添乱,所以在有了新的方法之后,就没有再用这个。我当时觉得这个样子应该会解决一些问题,于是就回家研究,发现了 SIMBL 这个插件,然后需要做一些设定,绑定到一个快捷键上,就完成了这个效果。我印象里好像是绑定到了 command+F2 上,当我按这个快捷键时,Terminal.app 会从上方滑下来,占据几乎整个桌面(除了 Dock 部分),用完了之后,再按一次 command+F2,窗口就回去了。

当时我就一直这么用着,Terminal.app 可以建立多个标签页,因此有多个终端可以同时使用,用起来也够了。可是当我把系统升级到 Snow Leopard 后,好像 SIMBL 不能用了,大概是 32 位和 64 位兼容的问题。那时我每次运行 Terminal.app 之后,Dock 上会出现它的图标,然后过几秒钟之后,图标就没了。当时我搜索过一些网页,好像没有什么解决办法,于是就干脆放弃 Terminal.app,改用我之前就用过的 iTerm。关于这个 iTerm,我是在一些文章上看到的,之前也用过。好像是在过去,Mac 自带的 Terminal.app 功能还不大够的时候,人们会用 iTerm 代替。我试用的时候感觉 iTerm 功能也就那个样子,于是还是用系统自带的终端。这会 Terminal.app 不能运行了,我就用 iTerm 来代替。

iTerm 我用起来也还不错的。我没有对显示效果做任何的调校,因为默认的界面就已经不错了。其中我最喜欢的功能是按 command+return 会把 iTerm 整个全屏,这样在终端上工作就可以不受打扰了,而且终端更宽了之后显式的东西也多,读起来也更方便了。iTerm 同样支持标签页,但它的标签页切换方式不是系统默认的 command+shift+[ 和 command+shift+],而是 command+数字键。这在开始让我很不习惯,我经常按原先的切换标签,得到的确实“嘟嘟”的错误提示音。不过后来习惯了之后,反而觉得这种方法能一下子跳到想去的标签,感觉也不错。而且现在 Google Chrome 也兼容这种切换的方式,我接触这种方式的机会多了,也就更习惯了。想比较而言,还有第三种切换标签页的方法,一直为我所不齿,就是 command+左右方向键,Adium 就是用的这种方法。这种方法最大的问题是,切换标签的时候,右手要从主要的区域挪到方向键区域,很麻烦的,要让我每天都要这样移动,一定会疯掉。后来在一些小的部件升级之后,Terminal.app 可以使用了,不过那时我已经习惯了 iTerm,所以就一直这么用着。

iTerm 还是有一个问题,就是一些细节上的地方还是太过靠近与 Mac,而不是 UNIX。主要就是向左向右移动一个单词的问题。我在按 command+b 的时候出现的是 iTerm 的标签;我在按 option+b 的时候出现的还是积分符号。而我在前几天看了一个视频,让我回到了 Terminal.app 的怀抱。我看的那个视频是教给我们如何在 Terminal.app 中使用 UNIX 那种移动光标的方法,原来就是在设定里面的 keyboard 标签下面,选中 “Use option as meta key”,就可以通过 option+b 之类的快捷键来快速移动光标了。

terminal-setting-meta-key.png

知道了这一点之后,我又翻了一下 iTerm 的设定,没有找到有相关的设定。于是我立刻决定回到 Terminal.app 的怀抱。之前的 Pro 主题的一些具体参数因为升级系统而丢掉了,二来也确实有了一些审美疲劳,于是就换了一个 Novel 主题,感觉米黄色的底色加上黑色的字符,既明显又不刺眼,十分舒服。

terminal-novel-theme.png

换回 Teriminal.app 之后,我有几点不习惯。首先是现在我经常用 command+数字键 来切换标签,而在 Terminal.app 程序里这个快捷键的作用是切换不同的 Terminal.app 窗口。我一般只开一个窗口,并在那个窗口里开多个标签,所以按这个快捷键时会经常发出“嘟嘟”的提示音。二是我在用 command+tab 切换程序的时候,脑子里想的还是 iTerm 的图标,等半天后才反应过来应该找 Terminal.app 的图标才对。

imagemagick-logo.gif我在之前的文章里说过,我在 Site5 的实验用的主机上测试 Movable Type 发布时的 CPU 负载问题时,意外的发现在 MT 的 Dashboard 里面提示我说找不到 Image::Magick 模块,并且在 Site5 的论坛上没有找到答案。

我当时说应该不影响是用,但还是觉得如果能解决了最好,于是在晚上就在 Google 上搜索,找到了一篇文章。文章里说如果 ImageMagick 模块无法使用,可以在 mt-config.cgi 里面加上一句 ImageDriver NetPBM 来使用 NetPBM 来代替 ImageMagick。我测试了之后果然可以,可以正确的处理我的头像了。我没有测试在加上这一句之前有没有在发布文章时插入图像不成功的经历,反正加上后我测试发布一篇带图像的文章是没问题,包括生成缩略图、改变大小等操作。

然后我又在 Settings 里面随便点点,却发现在 Feedback 下面还有错误提示。原来是说,因为没有 ImageMagick 模块,所以 CAPTCHA 就无法使用了。我目前的 blog 也没有使用 CAPTCHA 来过滤垃圾留言,用 Typepad AntiSpam 就能过滤绝大多数留言了,而有些人工的弄一些英文的通用留言用语的,数量就不多,我手工过滤也能过滤出来。不过我想,虽然今天不用,难保哪一天会用到?总之如果能把事情解决是最好,于是抱着这种想法,我就去了 Site5 的首页找到在线的客服 livechat

虽然我发信息过去的时候是半夜,不过 Site5 提供 24x7 的客服服务。我在输入自己的名字、邮箱地址、我的域名、以及问题之后,系统会把我的问题分配给一位客服,然后会在浏览器里出现一个对话窗口,我就在里面同他交谈。

客服首先问我我在上一步填写域名是不是指向我目前发生问题的主机,我说是,然后他进行了一些操作,估计是在后台重新安装了一下 ImageMagick,然后让我重试一下。我刷新了一下 MT,还是有问题。然后他问我是不是我需要的是个其它名字的模块,我于是提供给他这个网址,他在过了五、六分钟之后让我再试一次,如果不行的话就让我告诉他出问题的网址,他们好调查原因。我试过后问题依旧,于是就把 MT 我的帐户的名字和密码改了,告诉对方。结果对方却莫名奇妙的说需要 “submit a ticket to have this fixed for you”。我莫名其妙的想了一阵子,才觉得应该是这位客服没有权限来处理这种(或许是)涉及到客户提供的网址的问题,所以向上级提交了一个 “ticket” 来申请相关的权限。

我在等待的时候,却突然发现 chat 窗口变成了给这位客服评分的窗口,我也收到了一封措辞“冠冕堂皇”的来自 “Site5 Level 1 Support” 的感谢邮件。本来有些安心的我更加莫名其妙了。什么意思?问题就这样放着不管了吗?这样子就算解决了啊?我当下有点气愤,这算什么客服?于是我也在评分表上照实填写,服务态度、语言的语法、还有是否一直在问我相关的问题都给高分,至于是否给我提供了有用的信息和是否解决了问题嘛,低一点算了。

在提交了评分之后,我正在安慰自己没有 ImageMagick 一样用的时候,却发现我的邮箱里收到了 “Site5 Level 1 Support” 的又一封邮件,说他们已经安装了相关的 Perl 模块,让我试验一下。这时我才意识到我可能是错怪了刚才那位客服:他 “submit a ticket” 不是为了申请权限,而是直接把我的问题转移给了上一级的客服,由上一级的客服来帮助我。我于是又打开了一个 livechat,说我刚才不小心的关闭了 chat 窗口,问怎么回复问题。结果正巧碰到了同一位客服,他告诉我直接回复那封邮件就行了。我在这次评分时,全都给了高分,算是我刚才错误的补偿吧。不过 Site5 用了 “ticket” 这个莫名其妙的词来表示“问题(problem)”这个含义,并把假设询问的用户都知道这个词的含义,也算有一部分的责任吧。

我于是回复那封邮件说还是有问题,对方叫我清空 cache 再试一遍,我照做了之后自然还是不行。等我再次回复后过了一会,就收到了一封 Site5 自动发送的信,发信人是 “Site5 Level 2 Support”,说是因为我的情况复杂,这个 “ticket” 需要系统管理员的关注,因此被加入到 Level 2 的 queue 中了。果然 Site5 的客服是层级式的,这一级解决不了的问题就送给上一级。这个 Level 2 可能人手不多,我是在收到这封自动邮件之后大约四十分钟之后才收到进一步邮件,说是在看我的问题,等有结果后马上通知我。然后又过了将近三个半小时,我收到邮件说 ImageMagick 的 Perl 模块不支持 64 位环境,所以解决问题是一是我用一个替代品,二是把我的帐号转移到 32 位的服务器上。

到了这时我就觉得比较满意了。考虑到我对这个模块的需求状况,以及我这个帐号只是用来测试的,我就给对方回信说不用麻烦了,并客气的感谢对方。一会对方也回信说不客气之类的套话。

总之这是我在这两天之中遇到的第二次 64 位兼容性问题了。我在 07 年玩 Gentoo 的时候,其中有一个最关键的参数就是选择机器的 Arch。我当时的 CPU 好像是 T7300,好像是可以使用 x86_64 了,但我还是选择了 i386 架构,原因是从文档上看到还是 32 位上的软件多。当时我觉得自然而然,没有在意这个问题。结果两年后的今天,64 位大行其道,我却忽略了这个问题。不过这两个问题也给我上了印象深刻的两节课。

女脸

| 3 Comments | No TrackBacks

先看照片:

玻璃上的脸1

这一幅是没开闪光灯的,比上一张模糊,但缩小图效果更好:

玻璃上的脸2

这两张照片是我昨天下午拍的我的房间的玻璃的样子。尽管今年冬天冷的完,温尼伯现在还是很冷。前几天动不动就零下 20 多度,最近好多了,才零下 8 度,我们已经很高兴了。所以温尼伯的房间的窗户,基本上都是双层的。另外,在这边窗户在冬天不能随便打开。今年年初我有几次在白天觉得挺热了,就把窗户打开了一点小缝,结果到了晚上觉得冷了,想把窗户关上,却痛苦的发现窗户已经被冻住了,非人力可以推动的。

我忘了往年是什么情况了,今年外面那层窗户的内侧也有了厚厚的一层冰。我忘了去年也是这样,还是因为我没有把外层的窗关严。反正现在窗户被冻住,我也无法查证了。这两天天气变暖,冰不如前几天那么厚了,有的甚至化成了水珠,往下滴的时候又被冻住。结果不知道怎么样,就形成了照片里的画面。

我昨天下午抬头往外看的时候,一眼就发现了这一部分,感觉好像一个少女的脸,长发。我可能这两天在想怪力乱神之类的东西比较多(在看《遵生八笺》),因此想到是不是通过冰,展现出了人眼看不见的影像呢?如果在那一部分结冰的瞬间,正巧一个女鬼通过了那面玻璃,就这么把影像给记录下来了也说不定。

鸡冻

| 1 Comment | 1 TrackBack

site5-logo.png昨天早上,之前给我提供主机空间leeseon 在 Google Talk 上跟我说,他的 Dreamhost 快要到期了,他打算搬家到 Site5 的主机上,问我要不要一起合租。

我看了一下 Site5 的主机配置,感觉还不错。最主要的几点是有 SSH,PHP、MySQL、Perl、Python、Ruby 的版本也比较新,还预装 Rails。我最近主要在学 Django,预装 Rails 的话说明装 Django 应该也没什么问题。两人合租的价钱(hostPro 计划)也还可以接受,于是就答应了。当时最担心的还是 Movable Type 的问题。MT 在发布的时候会需要比较高的资源,整站生成的时候更是如此,我看过不少用 MT 的前辈,比如 Fenng,就抱怨过几次 MT 占用资源导致的 500 错误的问题。到时候搬过去了却无法生成 blog 网页就苦了。于是我马上就问 leeseon 主机的 CPU 资源有没有什么限制,对方也没有考虑过这个问题,但他从 Site5 的网页上找到了限制条款。我扫了一下,就是对 “Utilize in excess of 15 seconds of CPU time.” 这一条比较担心,是不是意思是一个进程如果运行超过 15 秒就有问题呢?后来想可能不是这样理解的,因为 httpd 之类的进程肯定会运行时间更长。所以我心里是挺担心的。好在 Site5 有 60 天退款的策略,我就跟 leeseon 说买来后先试试,不行的话就退掉。

然后 leeseon 告诉我说 Site5 有免费试用 30 天的 COUPON,我就赶紧注册了一个试试。开通网站是比较慢速的,我有一个备用域名,添加进了 Site5 的帐号中后一直说让我等待。由于 Site5 的页面上没有提示我,所以我过了一会才想到需要更改域名的 DNS 才对。Dreamhost 上添加域名后可马上会说的清清楚楚的。而且我还不知道 Site5 的 DNS 是什么,最后是从它们的 Wiki 上找到的,这也让我比较吃惊。我在 GoDaddy 那边修改 DNS 也挺慢的,修该完之后我一直刷新,一直是显式我过去在 Dreamhost 上的内容。

到了昨天晚上,我又刷新了一次,发现已经显式新的内容了。我在 Site5 的后台也可以操纵了。首先就是打开 SSH 访问,然后我还花了一阵子功夫来找我的密码和用户名。总之进去了之后,发现我的提示符竟然是 #,不知道是不是意味着我是 root 帐户。不过我没有多想,只是来回看来看去。我首先输入的是 “dja”,然后按 tab 键,果然出现了 “django-admin.py”,主机是预装了 Django 的,不错。我接着运行了 “django-admin.py --version” 查看版本,告知我是最新的 1.1.1 版本,心头不由一阵窃喜。然后就顺便看看其它工具的版本,gcc 是 4.1.2 的,挺新的,我在 Dreamhost 上才是 3.3.5 版本;Rails 是 2.3.5 的;Python 默认是 2.4.3 的,但也有 2.6 和 3.0 的版本的,都挺不错的,在 Dreamhost 上只有 2.4 的。运行 uname 得到内核版本是 2.6.27,是 x86_64 版本的。没有写是什么发行版本,但 gcc 给出版本的时候返回的是 “gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)”,所以我估计应该是 RadHat 吧。

看了一会之后,想到我的主要任务是测试 MT 的发布有没有问题,于是我就下载了 4.32 版本。下载之后我突然想测试一下访问的速度怎么样,就把这个 5.6M 的 MT 文件放到了 http 目录中,在浏览器里下载,看到速度慢慢的升到了 500K/s 多,也挺不错的。解开包之后,我按照 MT 的说明就装上了。装上 MT 后我第一个感觉就是“快”!在后台的设定什么的,都非常流畅,简直不是现在可以相比的。但是 MT 说找不到 ImageMagick 包,因此没法让我上传头像之类的。但我在 SSH 中确实看到了有 convert 之类的命令。我搜索了一下 Site5 的论坛,有人遇到过类似情况,但没有人给出解答。Site5 官方支持的 blog 程序列表里面没有 MT,所以我估计没有做相应的配置。不过我暂时估计问题不是很大,就先放一放,能否生成整个站点才是重点。

于是我从这边直接导出整站的文章,然后从那边导入。我的导出文章的文件有 1.8MB 大小,我从那边开始导入后,就看着 Chrome 左下角指示的上传进度。然后到 100% 之后几乎是一眨眼的功夫,就告诉我导入完毕了。我当时就有点震惊,这是真的假的啊?要知道我在 Dreamhost 上测试的时候,导入同样大小的文件至少要花费 5 分钟左右。该不会是导入出错吧?不过我在后台确实看到了有 400 多篇文章。然后我没怎么做其它设定,直接就点了 Publish 按钮,然后就在 SSH 中运行 top 命令,看看 mt.cgi 执行的情况。

其实我获得的信息不太多,只是看到 mt.cgi 的 %cpu 那一栏是 96.x 以上,因此挺担心的,会不会被系统给 kill 掉。我确实看到过几次有 mt.cgi 跑到列表的下面了,出现了一个新的什么程序,但一会 mt.cgi 有上去了。不过看 MT 的发布框的进度条就比较有意思了,基本上是呼呼的往前跑,我在 Dreamhost 发布的时候都几乎看不到进度条在动,特别是当发布单篇的时候。而我看了一会,就告诉我已经发布完毕了。我看了一下报告上说的时间,只有一分多钟而已!我目前的 blog 有 400 多篇,在 Dreamhost 上发布一次需要 45 分钟另几秒的时间!我看到这个结果,几乎马上就疯掉了,当时惊讶的都喊出声音来了。

然后我还测试了其它的地方,比如说在这里,用户能发现最慢的地方就是 tag 了。我在这个 blog 上用了 AnySql 的缓存,因此当第二次点击同一个 tag 时,会直接把缓存中的页面展示出来,缓存的有效期是 24 小时,但当没有这个 tag 的缓存或者缓存已经过期了时,速度就会特别的慢。而我在测试的 blog 上面做了个实验,单击一个 tag 后,几乎马上就出现了页面。搜索也是一样,留言的速度也不是这里可以比的。我目前的测试网址在这里,读者愿意的话,可以和我目前的 blog 比较一下速度,可以有很明显的感觉。

所以我在试用了 Site5 的虚拟主机之后,我才明白了一件事情:6A 之所以把 MT4 的速度弄成这样,其实不一定是故意的,而是在他们的主机那里,MT 跑的确实很快。我们买不起好的主机,用的都是 Dreamhost 这种廉价主机,所以才会有“MT 太慢了”这种想法。相同的,MT 目前已经不是一个最主流的 blog 系统了,它对主机的要求也较高,所以用 WordPress 会得到更好的速度,Site5 也官方支持 WordPress,这一点倒不是我非常想见到的。

不过,我也有点怀疑,有点卑鄙的想──可能 Site5 为了宣传,所以把这些免费的 30 天试用帐号都放在比较空余的主机上,这样速度就快了,而正式使用后速度就下来了。不过我是希望我想多了吧。

总之,在试用过 Site5 上面跑 MT 之后,我就像吃了美味大餐一样,就不想再回来嚼蜡了。我是希望可以尽快转移到 Site5 那边去,并且(有可能的话)就再也不用 Dreamhost 的虚拟主机了。

编译安装了 wine

| No Comments | No TrackBacks

今天下午经过反复的努力(主要是体力劳动),终于在 Macintosh 上安装上了 1.1.35 的开发版。虽然反复的操作弄的我挺恶心,不过也算对于 Macintosh 二进制文件有了更多的了解,也算比较高兴。

起因是在写上一篇文章的时候提到了 wine 与 WinApps 这个国产项目。WinApps 致力于通过 wine 来模拟一些 Windows,让它们可以运行在 Macintosh 平台上。我听说这个项目的时候,开发者已经模拟了 IE、迅雷、还有些输入法了。我那时最需要的就是迅雷,因为即使在 Mac 下,迅雷下 BT 的速度还是要超过 Transmission,所以就下载了需要的两个包。很多中文无法正常显示,比如菜单,但菜单下的项目却显式正常,所以我用得还算可以。只是后来会不稳定,在下载某种文件(是何种文件,这个规律我还没找出来)时,会突然程序终止。我曾经想把目前的程序都删掉,重新下载安装一遍,但再次上这个项目的网站上时却发现,这个程序需要 VIP 会员才能下载了。注册 VIP 会员的费用不高,30 多人民币,但支付方式让我没办法,所以我就只好作罢,继续勉强用当时的版本。

既然 WinApps 包里面已经有 wine 了,所以我就一直没有自己安装,需要的时候就从命令行调用 /Applications/WinApps/Wine.bundle/Content/bin/wine 来直接使用 wine。正好我需要使用 Xenu 来检查我的网站,它是个 Windows 程序,所以我就这样使用了 wine 来运行它。运行的结果还不错,但在我退出程序前检查了一下 wine 的版本,发现还停留在比较旧的 1.0.9 版本上,而 wine 网站上已经到了 1.1.35 了。我一直怀疑在新版本上是否会修改了中文等问题,再加上在找 Crossover 破解版的时候,看到文章中说如果有基础可以用开原版的 wine。于是我就有了自己装个 wine 好好配置的想法。

在 MacPorts 里面有 wine-devel,在升级一下 ports 后也成了 1.1.35 版本了。我于是就开始编译安装这个版本。结果需要编译很多 xorg 的包。我过去见到这种类型的软件基本上都是“退避三舍”的,因为 Mac 系统本身就有了 X11,再编译安装一遍就是浪费了,不能和 Mac 本身的包结合,也是我最不喜欢 MacPorts 的地方。今天为了编译 wine,也就忍痛接受了。结果呼呼呼的把所有依赖的包都装上了后,开始编译 wine-devel 了,却在 configure 的时候告诉我发生错误:

Error: You cannot install wine-devel for the architecture(s) i386

Error: because /opt/local/lib/libexpat.dylib only contains the architecture(s) x86_64.

Error: Try reinstalling the port that provides /opt/local/lib/libexpat.dylib with the +universal variant.

Error: Target org.macports.extract returned: incompatible architectures in dependencies

Error: Status 1 encountered during processing.

我当时看了这些后,才明白 wine 只有 i386 的版本,也就是 32 位的版本。而我的系统现在是 Snow Leopard,在升级后我重新安装编译了 MacPorts,因此所有通过 MacPorts 安装的软件,基本上都是 x86_64 的,也就是 64 位的。我看了信息后,以为就不能把 wine 安装在 Snow Leopard 上了,但又不甘心,于是就上网搜,结果搜到了这篇文章,有人遇到了和我一样的问题,后面有人给出了解答。原来 MacPorts 的意思是让我重新把依赖的包编译成 Universal 版本的,也就是在安装的时候加上 +universal。于是我就按照要求重新编译。

在观察编译时输出的信息时,我发现 MacPorts 编译了 i386 和 x86_64 的,才想到之前看到的说 Mac 系统的新 Universal 包的定义和过去不同的消息。过去的 Universal 意思是把 PPC 和 Intel 的程序都编译一遍,打成一个包,在运行的时候先判断平台,然后运行相应的程序。而在 Snow Leopard 中苹果已经完全放弃了 PPC 处理器,所以这里的 Universal 的意思是 32 位和 64 位的程序一起打成一个包的意思。当时看那篇文章的时候没有多想,没想到在这里得到了印证。

本来我想的还不错,以为编译几个包后就可以了,结果没想到一个一个竟然没完了。当中还有别的包,本身有依赖其它的包,configure 时就不通过,需要把那些包也编译成 Universal 格式的。我想起安装 wine-devel 时自动编译的那些包,顿时心情落到了谷底。但也没有别的办法,就嘴里一遍骂着一遍手上输入指令。然后我想到,这些依赖的包多数是 xorg-* 开头的,我如果把他们全都删除了,然后再编译 wine-devel,加上 +universal,岂不就是自动把依赖的包编译成 Universal 的了吗?想到了我就立即动手,结果 MacPorts 却问我说有某个包被其它包依赖,需要把依赖它的包删除了后才能删除这个包。我照做了几次后,却发现这种包不是一个两个,顿时心情落到了更深的谷底。我想 MacPorts 应该有相应的参数来强行删除包的吧,但却又不大了解参数,看文档试验了几个,感觉效果不大。

这条路不行,我又看到 wine-devel 的包已经被我重新编译的差不多了,于是又手工的编译剩下的,结果编译了两个之后终于弄完了,可以编译 wine-devel 了。

不过事情并不是按照我的想法进行的,wine 装上了,winetricks 也弄上了,我也复制了 simsun.ttc 和 simhei.ttf 到 Windows 的字体目录下,也按照网上的教程修改了注册表,但中文还是显式乱码。看来是两者编码不对,还不知道怎么修改。

总之目前在没有找到进一步方法之前,我是没什么心情研究了。迅雷还是用 WinApps 里的好了,还好我没删除旧的。英文小软件就用 wine 来跑,也没什么问题。不过,我当时下载的破解版的 Crossover 8 还没有删除,等有时间再研究一下,呵呵。

修整一下内链

| No Comments | No TrackBacks

这个月初我发现我的 blog 有很多的坏链的问题。最主要的原因是我更换 blog 程序后导致链接的变动,还有 WordPress 和 Movable Type 的 Trackback 格式的差异也是个问题。文章本身的 URL 倒也罢了,我通过在 404 页面上加上了说明文字,勉强算解决了这个问题。但文章内的链接错误,就很让人讨厌了。我当时是通过 Google Webmasters Tools 发现这个问题的,当时也没有办法把它们一下子都找出来,更别提统一修改了。于是当时的策略是发现一个就改一个,一段时间后总会有所改观。

今天在网上搜索 Site5 的资料的时候,看到了有人说他的 blog 用 Xenu 来消除坏链,我当时想,Xenu 是不是也适用于我的情况呢?于是我就去了 Xenu 的网站,找到了这款软件。软件是 for Windows 的,不过也不怕,像这种小型的工具类软件,用 wine 模拟就可以了。我没有单独安装 wine,其实是直接从 WinApps 系列里面直接调用命令而已(WinApps 已收费,我是在收费前下载的)。进行一遍安装程序之后,就可以使用了。运行的结果如图:

xenu-screenshot.png

除了窗口本身的提示外,Xenu 还问我关于我的服务器的 ftp 之类的问题。我填写了我的情况,可是没见到有什么效果。过了一会,它从我的浏览器里弹出了报告,我从报告里找到一我的 blog 的地址开头的链接,进去把相应的地方修改过来就行了,重复的 Trackback 也顺便清扫了一下。

这样一番下来,blog 内部的坏链应该少了很多,但其实我也怀疑并没有全部都解决,不过已经比之前好很多了。

aes-comic-page.png周三下午完成了《密码学》这门课的期末考试之后,我就有种想法想写这篇文章。可是接着有周五要交的《专家系统》学期项目要赶,所以这两天一直没有机会,当时的想法也淡忘了许多。

对于密码学这门课本身,我感觉是处在了一个比较尴尬的地位。首先是这门课的面向,在我们学校的课程中属于 4000 等级的课,也就是说一般是给大四的学生来学的。密码学本身有一部分数学相关的知识需要理解,又不是每个人日常都必须了解的,因此放在 4000 等级,意思是不需要每个人都学这门课,如果学生对于这个领域有兴趣的话,可以修这门课。因此我们这门课上的同学并不算多。另一个方面是这门课的难度,我们在这学期学了以下几个部分:基础密码(比如 substitution cipher,affine cipher 等)的加密与破解、信息论与 block cipher、DES 与 AES、RSA 加密、Hash 函数。这些部分需要用到的数学知识其实并没有许多,除了一般的加减乘除外,有限域的知识(就是取余数)比较常用外,极限之类的东西就用得非常少了。学完了这门课之后,我觉得一个大学二年级毕业的学生,离散数学合格毕业的学生完全可以学这门课程,根本不需要等到大四去学。

在做期末考试卷子的时候,我有股感慨,为什么这门课不能开卷考试呢?很多相关的东西,我们考察的都是对于定理和公式的背诵。我想,将来在实际的应用当中,我们需要把这些公式全都背过吗?尤其是如果不从事密码学领域的钻研的话更是如此。日常写个程序,首先是当前的算法已经有很多公开的代码可以直接使用,而且就算要自己重新写,也可以找论文来参考再实现。而一个程序员把加密解密的定理公式都熟记于心的话,是不是不是很现实呢?

我在尤其是来加拿大之后,就有感觉记忆力下降的趋势。过去初中时看两眼就能背诵的东西,到了高中时可能就要看两天了,而到了大学后就要看更多的时间,而且一段时间后就忘记了。特别是英文的资料,死记硬背的话更是不容易。

我觉得密码学是一门实践性质的课,给你一段密码,用某种解密方法来揭开,如果能有一个这个方法的实施表格,这样做起来应该会很容易。可是如果加上了记忆这一步,对于一个记忆力不好的学生来说就不是那么简单了。

另外,我们的老师在给我们上课的时候,也是拿着自己的笔记在往白板上抄写。我不是说老师一定要与学生公平,但是否老师能按照要求学生的要求来要求自己呢?如果在考试的时候,给学生一些记忆方面的题,那么自己能否同样做到呢?而且,这门课对最让我们觉得不满的是,在最后考试前不画范围。老师说我们需要了解期中考试前和期中考试后的所有内容,这样的话还干什么需要期中考试呢?我们有这么多东西要背诵,能否把量减少一些呢?

总结起一个学期的课来,我觉得我作业部分做得还不错,这是为什么呢?还不是因为开卷。这样作为一个密码学课程的结业要求来说是不是正常呢?这门课如果没有期末考试的话,是不是可以单从作业就可以判断出学生对课程内容的领悟呢?

尴尬的数据库课

| 4 Comments | No TrackBacks

昨天下午我们的数据库老师举行了一次可参加可不参加的复习课,当时我抱着说不定会讲一些考试题的心情,艰难的从床上硬爬起来去了学校。当天有大约四分之一的同学参加了复习课,除了拿到了最后一次作业外,老师还进行了一些答疑。我前一天睡觉太完,本身也觉得没有什么疑惑,当中忍不住谁了一觉,醒了后仔细的回顾了一下这学期在这门课上学的课程内容,再次验证一下自己对《数据库》这门课的态度。

database-class-notes.png左边是我们这门课在学校的课程网站上,笔记部分的截图。从这个“目录”上,大概可以看到我们这学期学了什么东西。在介绍完一些数据库的基础概念(比如 DBMS)后,我们学了 ER 模型,然后简单介绍了创建表格、插入数据之类的 SQL 命令。接下来我们学的是 Normal Form,然后是 Relational Algebra 和 SQL(主要是用于各种不同条件下的 SELECT 语句)。

在我这学期学的五门课当中,数据库算是最简单的一门。很多知识我过去接触过,只是没有系统的学习。因此无论听课、作业,我几乎不用花费力气就可以弄完。但这门课的许多内容,我目前却觉得似乎没有太多学习的必要。不过另一方面,在学业压力大的时候,我也希望有一门课可以轻松的完成,所以现在再说这门课的坏话觉得有点尴尬。

我感觉这门课有两大问题:一是内容陈旧、二是太过简单。

关于内容陈旧,我觉得最大的例子就是 RA 部分了。它的内容基本上与 SQL 重复,RA 本身,在我看来,也不过是 SQL 的一种数学符号上的替代品。如果你先会了 SQL,再学 RA 就感觉食之无味,到底学了它有什么用?我们老师在私下谈话的时候也说,在工业领域中,一般都是从客户的需求故事中总结出 ER 模型来,然后把 ER 模型转换成 SQL 表述语句,当中没有 RA 这一步。我觉得如果把这两个内容放在两门课里来学,比较入门的课里讲 RA,比较高深的课里讲 SQL 是可以理解的。但我们这个学期先学了 RA,又学了 SQL,也不应该有什么“担心学生一下子理解不了 SQL”的顾虑才对。

我之前已经对 SQL 有一些了解,上个学期《软件工程》这门课上写小组项目的时候也用上了 JDBC 和 SQLite,这个学期开始的时候也用 Ruby + SQLite 写了一个程序来保存 Twitter 的记录,当中也用到了添加、删除、合并表等操作。因此在这学期学 RA 的时候,总感觉特别别扭。当然 RA 本身也是非常简单,如果有了 SQL 的基础的话,知道两者之间的一些细节的区别(比方集合)后,学 RA 基本上就是看一遍笔记的事。不过就算如此,我也不愿把相似的内容重复的学两遍。

关于课程的难易方面,我是觉得有些部分的内容完全可以一带而过,不用浪费那么多时间。比如 Normal Form 和 Functional Dependencies 的部分,基本上就是简易逻辑上的内容,一个中国的高一学生就可以搞清楚,我想当地学生在大学三年级之前应该也接触了逻辑了吧。而现在的情况是,在 FD 和 NF 部分我们花了很多节课的时间来讲一些很基础的东西。

整个课程,在期中考试的时候我们学了大部分的 RA,在期末考试时重点是 SQL。这两部分,我的感觉是花半天过一遍笔记就能把基础的知识都学会,剩下的就是所谓的“题海战术”就可以解决的了──看一些例子,自己谢谢 SELECT 语句,然后跟答案比对比对,就是个熟练活而已。相反,我觉得对于计算机科学的学生来说,如果可以把重点放在数据库和应用程序的结合上面,是我一直想要的。JDBC 之类的东西,我们在课程的最后是一笔带过的,我觉得这些反而是更应该自习钻研的。毕竟现在网络编程占到了实际应用编程的很大一部分比例,而数据库在网络程序中又是基础性的功能之一,所以把重点放在数据库编程上面,我觉得比反反复复将一些数据库的基础知识要好。

另外,我们课的最后一次作业用的竟然是 IBM DB2,这真让我奇怪。这个数据库应该也算是陈旧的吧,而且往高端比未必拼的过 Oracle,往低端比也未必拼的过 MySQL,为什么要用这么“传统”的数据库系统呢?老师的解释是有些数据库的 SQL 部分实现不完整,所以我们课堂上学的一些 SQL 写法无法被那些数据库系统解释。我倒是觉得这不是一个大问题,反正有些数据库操作,比如 Division,我们已经在课上学了集中不同的 SQL 语句的写法。DB2 最大的问题是不跨平台,只能在 Windows 上使用。目前有人做了 for Mac 版本,可是还有很多问题,我在尝试安装时,下载那一步就没有通过。加拿大大学毕竟不是国内,班上用 Mac 的人也有很多,而老师却用一个老旧的不跨平台的数据库系统给我们练习,实在是让我想不通。

关于 Wolfram Alpha

| No Comments | No TrackBacks

这篇文章是我两天前就想写的,不过这几天实在没什么时间,所以拖到周末。

那时我在 RWW 上看到一篇文章,报道 Wolfram Alpha 的 iPhone App 程序下架的消息。Wolfram Alpha 本身是一个搜索类型的网站,用户在搜索框中输入数学公式,Wolfram Alpha 会给出各种样式的结果。由于 Wolfram 公司的主打产品是 Mathematica 这套计算机代数系统软件,因此 Wolfram 给人的感觉就像是在线板的 Mathematica 一样,尽管它在信息方面的功能应该更强大一些,比如如果搜 “gdp China versus gdp US”,就会告诉中国和美国的最新 GDP 数据,然后有两者之间的比较。我并没有用过 Mathematica 软件,因此不知道具体的情况是不是真的。

而这个程序的特别之处,是在与它那 50 美金的价格。我也是之前从 RWW 上的一篇文章看的。当时看那篇文章的时候,想写文章讲讲这事,但一来我没有用过 Mathematica,二来我没有 iPhone,三来我用 Wolfram Alpha 的次数也少,觉得没有太多可写的,于是就没有管它。没想到一个月不到就有了这个新闻。

当时我在看报道的时候,那篇文章里有在 iPhone 上运行 App 形式的程序与在 iPhone 上的浏览器中在线使用 Wolfram Alpha 的对比的截图,我当时看了,觉得其实程序做的是不错的,很漂亮:

wolfram-alpha-on-iphone-and-web.jpeg

从图上看,我感觉这个程序非常适合用作一个 iPhone 上面的高级计算器。不过,我不认为把一个免费的 B/S 程序改造成一个 C/S 程序,就可以卖 50 美金。如果它的价格可以限制在 5 美元之内,甚至 10 美元之内,我觉得都应该会借着 iPhone 和 iPod touch 赚一大笔。因为毕竟这个程序不是把整个运算系统都写在程序里卖给用户,也是需要连接到 Wolfram 的服务器上才行,Wolfram 只是给 iPhone 访问作了一些优化而已。所以哪怕是可以借着互联网让用户感觉不到在线与离线的区别,Wolfram 也不应该把一个客户端买到一台计算器甚至 Mathematica 软件的价格。

现在在线的应用给我的感觉是,只要能圈住大量的用户,就不愁赚不到钱。比如 Twitter,自始至终都是免费的,作为用户,我有时也不免疑问,创始人靠什么赚钱?结果还不是一直到现在还气势满满,投资者也信心十足。有了用户就有了赚钱的资本,像 Wolfram,借着自己的代数软件这么大的知名度,如果打免费牌肯定能圈起一大批用户。到时候随便出出主意,应该就能盈利。

其实我现在对其感兴趣,实际是因为我当中用了几次 Wolfram Alpha,感觉这个系统确实很棒。我上次的密码学作业,有道题需要做简易的 RSA 解密。我需要写程序把一个大数分解成两个素数的乘积。得到的结果是否正确呢?我就放进 Wolfram Alpha 里验证一下。速度快,而且也让我放心。特别还有设计到有限域,进行运算后都要对一个数取余数,手工做的话经常会搞错、迷糊,在 Wolfram Alpha 里,只需要简单的把方程告诉它,就可以得到结果。所以我觉得,如果能把这么个东西放在手机上随身携带,应该会方便不少人。

前两天看的文章里说,Wolfram 关闭了专门给 Mobile 优化的页面,理由是因为用的人太少了。这也符合了我之前的设想:别以为用 iPhone 的人都是有很多钱、可以动不动就花 50 元去买程序的人。事实上,很多 iPhone 用户都是追求时尚的年轻人,虽然这些人很多都是在校学生,对这种计算工具也很需要,但对于计算力的渴望并不能使他们毫不犹豫的花 50 元买个客户端程序,毕竟考试的时候是不允许用这种电子产品的。

写这篇文章之前,我特意去了 Wolfram 的网站,找到了 iPhone 应用程序在 iTunes 商店的链接,进去看了之后,发现现在这款程序只买 19.99 美金了,旁边写着十二月 11 日至 31 日假期促销:

wolfram-alpha-iphone-app-sale.png

而后面的评论里,看到有一位用户写道:

After using for a while found that is very limited in scope of words and practicality. Would benifit with much continual expansion as many common words are not found or useful such as green tea. Not worth 50 bucks unless this project grows.

看到一共有三则评论,另外两则评论则给出了还算不错的评论。只是不知道这三个人现在知道这个程序降价超过一半以上后会怎么想。

天气变冷了

| No Comments | No TrackBacks

总体来说,我感觉今年的温室效应比去年要明显一些。除了在很早下了一场雪之外,今年降温的时间比去年要晚很多。在这个星期之前,我一直都感觉还可以(我不是很怕冷,因此比一般人来说对冷不那么敏感)。

而从这个星期开始,温度一下子降下来了。这星期开始,我在保暖衣外面和外套里面加上了一件毛衣。每天早上起床时最痛苦,这个星期第一次感觉到出了被窝就很冷了,每次都要拼命挣扎着才愿去刷牙洗脸。在外面等车时,明显感觉一出门脸部就有冻僵的感觉。而且在室外时可能是因为寒冷导致低气压(?),我有种呼吸吃力的感觉。而且感觉在室外不会流鼻涕,因为鼻子里面已经感觉到有像结冰了一样的“固体”。周一时我感到冷之后,在周二早上查了一下温度,看到雅虎天气上说是零下22度。现在我手背上已经有皲的感觉了。

之前写过文章说今年冬天温度高。真正到了11月中旬的时候,我还是觉得一个常年住在宾夕法尼亚的 Scranton 的人这时候来温尼伯不会感到太多的不适。现在却觉得我太嘀咕了这里的冬天了。11月中旬还不冷,是因为这里的冬天还没有到来。如果电视剧里 David Wallace 说的不是11月中旬而是12月中旬,我绝对赞同。

今天早上上完了《密码学》的最后一堂课。标题里说“无聊的听课”,意思是“密码学”本身并不无聊,但我们老师的讲课实在是让人觉得难以恭维啊。

我印象里似乎之前写过文章说过这个老师,但刚才找了一下没找到,就再写一次。这个老师有一摞厚度大约一厘米的讲义(我觉得用“笔记”一词更适合一些)打印稿,也不知道是他之前自己写的还是前一任老师留下的。每次上课就按照讲义来讲,主要是把讲义的内容写在白板上,然后我们在下面记录下来了事。有的时候他还会把讲义抄错,让我感到很纳闷,难道老师就是抄笔记的工具吗?当然老师本身的知识能力应该是无可厚非的,至少对我们来说都绰绰有余了,但讲课的水平和理念都让人感到不解。今天是最后一节课,老师还在讲内容,最后还说这些内容可能会出现在期末考试上。而且还坚持不给我们区分考试范围,意思是从学期开始到结束的每一堂课都有可能考到,这样期中考试还有什么用?

其实对这门课的考试内容,我觉得很值得商榷。比如说从期中考试看来,很多公式、定理都需要记住。而在实际应用中,难道要求一个密码领域工作者记住所有的公式吗?老师自己在讲课的时候不也是要对着笔记来抄吗?我感觉考那些内容都是一种折磨。

密码学这门课在我们专业属于 4000 等级的课,也就是一般放在最后学习。听上去挺吓人,可到了最后回顾一学期的内容,我却发现很多东西都是非常明显的,看指定的教科书就能很容易看懂,更好的方法是老师直接把自己的讲义整理成教材,我们连买书的钱都省了(书价换算成人民币可不便宜)。我的想法是,老师在课堂上不应该重复我们可以从书上(尤其是教科书)看到的内容,延伸一下、展示一些例子、甚至讲一些课程相关的八卦(密码学领域里有不少)也比纯粹抄书好。

举例来说,有一次他给了我们一个算法,输入三个数 y、b、n,返回 y ** b % n,用指数奇偶的优化方法。在教科书上也给了这么一个算法,老师竟然也在白板上重复了一遍。其实这么个算法只要两分钟一提就可以了,最多最多告诉学生在书上的编号就行了,毕竟是 4000 等级的课。

老师经过了一个学期,总算在最后一天讲完了课程内容,其实根本不必那么多时间。到了课程的最后,同学们更想听听考试的范围,老师竟然也绝口不提,只让我们复习笔记和作业。

这个学期中我在这门课上用 ConTeXt 来记笔记、写作业,熟练了一些用法,也算是功德一件。当中有一位同学拷贝了我的一些笔记,也算是认识了新朋友。今天最后一课上万,竟然有两人向我要笔记。第一位有两天没来,留下了邮箱地址请我发给他。第二位上来给我搭话,我就知道要干什么了。他问我要整个学期的笔记,说是用一杯咖啡来换。我说不用,直接把笔记给你就是了,但他坚持给了我 20 加元,也算是意外之喜吧。

Google Chrome for Mac

| No Comments | No TrackBacks

chrome-logo.jpeg忘了今天从哪里看到的了(似乎是在扫 Google Reader 的时候),Google Chrome for Mac 出了 beta 版本了。

我在看到消息的时候想,不知道这次的 Chrome 是不是还是像 Picasa 那样用 wine 模拟的?如果不是的话,试验一下倒也无妨。然后下载下来一看,果然是 Mac 原生程序的样子,于是就运行了一下看看。

运行的结果让我比较满意。一开始我担心 Chrome 会被做成和 Windows 版本一样的蓝色外观,在 Mac 上很不协调,又因为年初用 Safari 4 beta 的时候,被 Safari 4 的新标签给恶心到了──那种标签还不如没有。可 Chrome 不同,配色方面完全与 Mac 的一贯风格相同,标签也比 Safari 4 的那种标签轻巧的多。

在我这里 Chrome 最大的好处就是速度快。自从升级到 Snow Leopard 一来,我一直觉得我这个 Macbook 有点不堪重负的感觉。而且,我用浏览器的时候经常会不知不觉的就开很多标签,浏览器就被我拖得特别慢。我现在不经常用 Safari 还好,Firefox 就经常用一阵子就会发生无相应的问题,导致小彩球一直旋转。Chrome 相比起来速度就提升特别多。网页的打开速度我不怎么在意,两者相差也不是很明显,因此 Chrome 用的是 Webkit 还是 Gecko 引擎我不管;但系统的响应速度就太重要了,Chrome 这一点完全抓住了我的心。

我现在已经暂时把 Chrome 设置为默认的浏览器,代替了 Firefox,先观察一段时间。Firefox 的好处就是插件,我最怀念的是 Greasemonkey,有了它加上 LookItUp 脚本,弄的在线调用 Google 字典查单词是我最常用的功能。然后就是 Adblock,不过听说 Chrome 有相应的版本,我倒不在意。Google 弄的书签功能挺讨厌的,这样一来似乎不怎么能指望在 Chrome 里可以舒服的用 Google 的竞争对手雅虎的 del.icio.us 书签。我查了一下,Chrome 下也有相关插件。Ubiquity 我平时也用,不过用的不多,所以用不着也就不在意了。目前 Chrome for Mac 的版本还不能安装任何插件,所以那些插件我都没有试用。但是 Read Write Web 上有一篇文章说作者目前用了三个插件,我不知道是不是用特殊手段安装在 Mac 上的。

说 Chrome 有效率的另一点体现是在新建标签页之后。Chrome 是比较早加上了一个最长浏览的网页的缩略图列表的浏览器。后来 Safari 4 中有了这个功能,我用了一阵子之后发现,它实在不是我的 2.4GHz、2G 内存能消受的起的。经常在打开新 Safari 4 标签页之后,要看一段时间的小彩球才能使用。在这段时间内,我看 Safari 4 好像是一次连接这些网页,获得缩略图,因此占用了很多时间。所以到后来我干脆把这项 Top Sites 功能给禁用了,相应速度顿时提升了好多。而 Chrome 则还没有这个问题,打开标签页的时候不会有任何停顿。我也希望这不是因为我刚开始用的原因。

Mac 版的 Chrome 目前最大的问题就是还是 Beta 版,稳定性是我要考虑的问题。不知道会不会像 Gmail 等其它服务一样,Google 会拖很长时间才出正式版本(相信不会)。不过我在使用过程中,还没有发现 Chrome 崩溃过,我也相信它独有的多进程模式也会起到一定的作用。不过我在下午打开一个 YouTube 视频的时候,导致过一次系统的 Dock 不见了(但用 Exposé 还可以看到),键盘无相应,鼠标可以点,但无法叫出其它页面,最后只得重启。我用了将近两年的 Mac,今天第一次出现这种问题,不过也不好把原因归咎于 Chrome。

还有一个问题就是 Chrome 在崩溃后没有恢复功能,不知道是不是 Google 对自己的多进程技术很放心的原因。今天下午的那次问题发生后,我只好重启。重启之后再开 Chrome,却发现没有任何表示,历史菜单里也没有像 Safari 那样有打开上次推出时的全部标签页的功能。当然,我没怎么用过 Chrome,也不知道是不是是因为我没有打开相应的设置的原因。

另外 Chrome 的标签页是挤在一行上的,既不像 Safari 那样只显示前几个,也不像 Firefox 那样标签栏可以左右拖动。这样挤在一起很难看,也不方便辨认。有个插件是专门解决这个问题的,我看了截图是单独出来一个窗口显式标签栏,没有实际试用,因此不知道用起来怎么样。还有一点是习惯的问题,目前 Chrome 的标签栏占据了标题栏的地方,因此网页的 title 部分就不显示了,这让我很不习惯。

另外,写这篇文章的时候,发现了一点新功能,之前一直没注意到,因此也不知道是不是因为 Chrome 的关系。在编辑区域中,Mac 下可以按 option 键和左右方向键往左右移动一段距离。我印象里在 Firefox 中是移动一句话,或者移动到遇到一个空格为止,而刚才在 Chrome 中试了一下,却发现在这边移动的是一个中文词组。也就是说,在一句话里,“中文”、“词组”这种词是在一个单位里移动的。如果是 Google 带来的,这倒是中文分词技术的一项应用了。

总之,Google Chrome for Mac beta 带给我的浏览速度是让我相当满意的,我也希望正式版可以早点出来,让我可以安心的替换 Firefox。

刚才忘了说一句,我用 Chrome 测试了一下登录 Wave,似乎比我平时用 Firefox 的时候还要慢,系统资源依然会使用很多。看来 Google Wave 本身还是需要改进啊。

目前 Chrome for Mac 的功能不全,比如标签管理器就不能用。我导入了 Firefox 里的标签后,竟然没办法统一整理,只有等待下一个版本了。

============================

豆瓣 blog 认领: doubanclaim7bbdab1d149211ce

倒霉的上午

| No Comments | No TrackBacks

今天上午感觉一些事情不顺心,也不知道是不是心情的关系,让我感到一直比较倒霉;或者是因为倒霉的事情影响了心情。

首先是早上起来特别冷,我感觉至少有零下15度的感觉。公交车又晚点了,我在车站等了有一阵子,那感觉已经是冬天的感觉了。而且这个时间也不是很好的时段,上车后也没有座位。昨天我坐了同一辆车,结果车离车站还有50米就停下了,我还要多走一段路;今天我要去图书馆,心想如果也能像昨天一样就好了,结果车却不偏不倚的停在了车站前面。今天的司机开车也比较彪悍,有几次都有把我甩出去的趋势。

到了图书馆后,也不知道是不是因为临近考试的关系,平时这个时候应该是有很多空位才对,但今天却几乎坐无虚席。我找了半天总算弄到一个位置,就从那里坐着写作业。对面正好是图书馆的星巴克,我想整整一个学期都没喝,今天可以解解馋了。因为今天挺冷,早上我也没吃饭,所以就想买一杯超大号的拿铁。等人稍微少一点之后,我去排过去,营业员却说今天没有espresso,问我要不要用另外一种料来代替。娘的,已经把馋虫勾起来了,喝不上咖啡,也不能打退堂鼓了,于是就同意了。结果这种咖啡比espresso便宜很多,价格与普通咖啡的大杯相比还低一点。喝起来的口味自然不如普通咖啡,不过也勉强凑合了。

弄完作业后,上传到了自己的网站上,去找公用计算机打印。图书馆的计算机分两种,有几台是暂时使用的,不允许上外网,所以我不能用那些。其余的基本上都被人占据了。唯一剩下的两台还在那里半死不活的启动着。我一看,赶紧去书包里掏出了优盘,把文件拷进去,用优盘去快速打印那里打印。等我拷完了文件,再过去之后,却发现原本在慢吞吞的启动的机器,已经正常了,而且有人在那里用。而眼看着有一台已经启动好了的暂时使用的计算机,正好走在我前面的人不紧不慢的就过去用了。没办法我只能自己启动旁边的还没启动好的机器。

打印指令发出去之后,我走到打印机那边,发现自己的打印卡里没钱了,于是就过去充值。等我充完值后,两台打印机都被人占据了。其中一个女生先弄完了,于是我接着处理我要打的东西。结果却发现刚才那个女生要打印的东西是 PowerPoint 做的课堂笔记,是黑色背景的,那人竟然也不处理一下就直接打,结果她的东西打印的巨慢。反而旁边的男生已经打完走人了。而我的东西已经发到那台打印机里去了,也没法再换了,只有等她打印完了,才拿到我的东西。

这时一看已经里上课交作业不远了,我于是先去整理书包。等我把书包、大衣拿过来之后,又等了有两分多钟,那女生才打印完毕。然后看到我的东西哗哗哗的迅速出来后,我就去装订。结果装订机里却没有钉书针了。本来想去找工作人员要一些,结果看里交作业的时间不多了,于是也就算了。

到了教室,把作业交上去后,才松了一口气。总之今天上午是比较尿的半天了。

晚上8点补充:今天至少有一件不那么倒霉的事,就是中午的时候和网络课上一起做项目的组员(也就是这篇文章里的“当地人”)在 MSN 上说话,他告诉我我们的项目得了满分,而且他现在是 H1N1 疑似。想起在那篇文章里说的他给我讲 H1N1不过是另一种 flu 罢了那满不在意的样子,我心里还是挺有感触的。现在想来,虽然有传闻说是疫苗有风险,但我提前打了还是比较正确的。

调整页面 CSS

| No Comments | No TrackBacks

日子忙啊,调整页面的 CSS 竟然成了暂时的休闲活动,真是让人苦笑不已。

今天在写完前面那篇文章之后,有把讲 CSS 中文字体设定相关的几篇文章以及一些衍生的文章又看了一下,似乎若有所悟,于是就又打起了修改页面的 CSS 的主意。

之前我对页面不满意的地方主要是页面标题粗细不均匀,看上去粗一片细一片的;还有就是某些字(比如“关”),显式明显比其它字窄一些。之前试着修改过这些问题,后来一直没试成功,最后不了了之。

现在 Firebug 越用越熟练后,也越来越感觉到它的强大。用它的可视化工具来定位哪个部分归 CSS 当中的哪几行管十分方便。然后我有简单复习了一下 id 和 class 的区别,改了改字体,就好了。之前我一直用的是英文字体设定,结果因为没有设定默认的中文字体,所以导致一些中文字显式很难看。结果显式的把黑体、雅黑、宋体等一些中文字体加入到 font-family 当中去,就比较好看了。

定位文章的标题时花了一点功夫。在尝试了几组不同的组合之后,发觉设定了 .asset-name, .archive-title 之后就起作用了。同样修改的还有 widget 的字体,这样左下角“关于我”这三个字就显式正常了。

现在多数网页的链接已经不加下划线了,找了一组比较通用的设置,把默认下划线也给去掉了。

借着打开了 Firebug,我本来想顺便修修后台写文章时标题的字体太难看的问题。地方也找到了,从 Firebug 里面测试也 OK 了,但就是加在文件里面后就不起作用。之前我傻乎乎的以为后台的 CSS 设定和页面的放在一块,所以就一直改页面的 CSS 文件。最后看了看 header 才发觉后台的 CSS 是单独设定的。不过,到了最后我也没找到调整后台 CSS 的方法,反正觉得文章区域已经显示正常了,标题就暂时不管了。

MT4 的 CSS 设定还是很方便的,我这一切做的都是在后台 Design -> Templates 下面修改了 Stylesheet 而已。修改后的内容如下:styles.css

如果我们的网页是 PDF

| 3 Comments | No TrackBacks

在整个做网页的技术中,我唯一不在行的就是 CSS 了。严格来讲其它技术也不怎么在行,而我对于 CSS 则有种“畏惧”的心理,很长时间不敢动它。过去我同样有这种感觉的是 javascript,后来在今年暑假的学期中有一门课需要我们自己写 javascript 来做 AJAX 页面,那一阵子 firebug 和 Safari 的内建调试工具同时出动,虽然痛苦,也让我对 javascript 不那么恐惧了。而 CSS 则不然,我从头到尾一直都没有学过,因此虽然 CSS 不是一门很难的技术,我却一直感到恐惧。

今年初把 blog 程序转换到 Movable Type 中后,发觉所有的默认模板显式中文都很难看,用 Unstyled 这个没有任何 CSS 的模板后中文反倒更好看。之前用的 Wordpress 的模板的 CSS 就写的不错,所以我一直都没考虑过这个问题。同样是今年暑假的某一天,我实在忍不了默认的恶心的字体设定,痛下决心,埋头研究了 Eric Raymond 的网页和蔡智浩的 Taiwan 2.0 部落格的 CSS 文件,把字体部分的设定挪到自己的 CSS 文件中来。当时为了弄明白 CSS 中每一部分对于页面的影响,我尝试了许多次,最终终于成功,整个 blog 顿时感觉清爽了许多。不过我对 CSS 的了解只限于那一部分,之后就再也没有动它。

这次我的 blog 更换地址后,我手动更新了新 blog 的 CSS,虽然学到了一些新的东西,但仍然感觉相当痛苦。而且做出的更改还是只限于正文,文章的标题的字体依旧还是很难看,很多字明显粗细不一,而且有一些特殊的字,比如“关”,看上去就明显比正常的字窄。有一部分我怀疑是 Mac 下的字体的原因,估计在 Windows 下可能会好一点,不过我没有查证。我试过几次,发现无论怎么改都还是那样,最终放弃。

这几天我还看了两篇讲述 CSS 字体设定的很好的文章。第一篇看到的是《再谈 Web 默认字体》。这篇文章开始时我匆匆浏览了一下,觉得非常不错,这天就一直在我的浏览器里开着。今天自习看了一下文章的留言,又找到了这一篇《默认Web字体样式》,看下来感觉更有帮助。他们页面的字体也很美观,不是我这个 MT4 站点可以比的。其实我觉得 Wordpress 的很多模板的默认字体就已经很不错了,自己改改的意义也不是很大。可对于 MT4 站点来说,模板的字体就需要作者改动许多了,这两篇文章的意义也就大的多了。在 MT5 中的 Pico 风格对这一点有了很大的改善,但其它的一些之前就有的模板就还是有这个问题。

我这个学期的《密码学》这门课的笔记,我主要是用 ConTeXt 来记录的。其实不论是那个 TeX 分支,其基本的排版方式是相同的。也就是说,排出来的结果都是统一的。TeX 有个最大的特色,就是美观,生成的 PDF 的整个页面,无论中文还是英文,都显得落落大方。更厉害的是,做好了基础的配置后,这些几乎都是自动完成的,不用用户操心。所以我就想,因为网页的发布与普通的页面出版相当类似,所以如果我们的网页都是一个个 PDF 格式的页面,会不会让网页更美观呢?

结合这一观点,也和 Macintosh 系统有一定的关系。在 Mac 中,PDF 是基础的页面渲染格式之一,内嵌与系统之中。如果在 Safari 中点进去了一个指向 PDF 文件的链接,直接从 Safari 中就可以把文件显式出来。因为 PDF 是内建在系统之中的,所以显式的速度非常快。而且在 Mac 的基础打印功能中,它的预览功能其实就是把页面转换成 PDF,再从 Preview 里面显式的,生成的 PDF 文件还可以保存,这说明,PDF 文件格式已经被苹果接受作为其其本的页面渲染格式之一了。而现在的 PDF 文件中都可以内嵌链接、也支持 Form,所以就有了 HTML 的最基本的功能。更大的好处是,PDF 文件有点把整个文章当作画一样“画”出来,而描述这幅“画”的语言是通用的,这样在不同平台上就不用担心兼容问题了。坏处就是浏览的用户不能设定自己的格式,弹性方面打了折扣。

有一个网站基本就是这样子做的,就是 ConTeXt 的老家 ── PRAGMA-ADE。看看这个文件,它是一个所有示例的索引,从里面可以直接点击跳到不同的页面。我之前浏览这个网页的时候,也纳闷为什么好多说明文档他不用 HTML 来写,非要生成 PDF 的格式?但后来也觉得想通了:PRAGMA-ADE 就是一家推广排版的公司,自然要支持 PDF。

当然,PDF 文件做网页的缺陷也是很明显的。最主要的是文件的体积远大于普通的 HTML 文件,不利于网页传输。光是这一点就让近期实现变得不可能。将来网络更发达的时候,难保不会出现更先进的技术。所以,这一点也仅仅是我自己的幻想。不过说道 MT 的发布,其实与 TeX 文件的编译应该是有异曲同工之妙的。在后台写 TeX 格式的文件,让 MT 再编译成美观的网页,其实就是 MT 发布在做的事情,只是生成的结果不同罢了。

通用留言用语

| No Comments | 1 TrackBack

这是我的blog在几天前收到的一则留言,可能很多人也收到过类似的:

I am really impressed with the overall subject matter of your blog. It is obvious that you know you subject matter and you are passionate about it. If only I had your publishing ability I hope to find similar articles in the near future. Good luck.

虽然是则spam,不过感觉句子用的挺有意思的。说的是不太华丽的表扬的话,让人揪不出痛脚,然后在用户的链接那里放上推广页面的链接。这样的留言如果放在一个英文网站上应该是挺有迷惑性的。可惜我这个blog是中文的,一眼就看出不对劲来了,再仔细一看就知道底细了。

虽然删除了这则留言,不过鉴于对于英文的使用有一定的教育意义,特写此文留念。

对自己无语了

| No Comments | No TrackBacks

三天前的想法,中间忘掉,今天上午又想起来的。

我每周一三五早上的第一节课是《密码学》。老师不给任何电子的note,他自己上课的时候就用marker在白版上写。他每次来除了拿一个塑料文件包装他的那一堆marker外,就是一个文件夹夹了一页一页未装订的notes。然后上课的板书都是拿了一页notes往白板上抄而已。其实我怀疑他完全可以把那些notes公开一份电子版本的给我们,反正和课堂笔记都一样。不过我觉得这样一来,加上要求的参考书,每天来听他的课就变得不那么必要了。所以他还是孜孜不倦的往白板上写笔记。

我从过去的经验表示,如果有一大堆这种笔记要用手拿笔抄在纸上,一节课下来手腕会很难受的。所以如果笔记中没有大量图形的话,我就直接往macbook上输入。与中文相比,我觉得可能是写的少的原因,我始终没法很自如的抄写英文笔记。如果像写中文那样写的话,一定会写走行的。所以手抄英文笔记的时候,我就会抬头看白板,记住几个单词(甚至是几个字母),写在纸上,然后再看白板。这样一来,抄英文笔记就变得相当慢速而且难受了。用计算机输入就完全不同了。英文没有中文拼音输入那种选词的困扰,所以可以做到完全的盲打。笔记多的时候最过瘾,两眼盯着白板,手指在键盘上动,比当地人手抄笔记还快很多。再加上emacs的强大的自动排版功能,因此我也不用管单词之间多打了一个空格或不小心按了一下回车或者什么时候该换行什么的,输入完一段之后按一下M-q就一切搞定了。

密码学属于数学范畴的学问,因此笔记中有很多数学符号和公式,所以我这门课的笔记格式都是ConTeXt格式的。经过长时间的使用,我已经基本上习惯了绝大多数的数学符号的输入。因为只是课堂笔记,所以公式也不用弄的那么整齐,所以一些略微“高级”的语法,比如两行公式用以等号对齐并在左边用大括号分组之类的功能就不需要了。最多就是一个列表,用一个\matrix{}表示成不带括号的矩阵也就搞定了。中间遇到过几次有符号不会输入的问题,但从网上搜索一番也就OK了。总之,一切都是目标驱动的。这样的公式书写虽然比手写要略微慢上那么一点,但一来结果非常美观,二来这种公式出现的也不多,多数一些乘方、集合属于还有XOR那种一个圈里面一个加号的那种符号,输入起来都很方便,也耽误不了多少时间。而且这点时间完全可以被普通的字符输入的快速来弥补过来。当然,如果有插图的话我就不行了。如果老师开始在白板上画图,我立马掏出纸笔来在纸上画,然后在笔记里做上记号。我的另一门课,《计算机组成》就有很多这种图。所以那门课上我开始时用Emacs Muse来记笔记,后来还是换成纸笔了。之前想研究一下dot软件,用它来快速作图,但是没有时间,就没有继续下去。

当中只有一项有点困扰我,就是数学模式和普通模式的切换要输入美元符号挺麻烦。在《密码学》当中,有很多都和有限域有关,也就是说,进行一项计算后,要在结果后面加上(mod n),这样任何结果都会是0到n之间的整数,也就把我们的计数系统限制在了一个有限的数值区域当中。而这个mod n就相当讨厌。如果我把数学模式的结束放在n后面,mod作为一个连续字符,在数学模式中会和前面的东西以及后面的n斜体的连成一片,基本上没法看。后来我只好用折衷的方法,要么在mod之前结束数学模式,并在mod之后再开启一个新的数学模式;要么就把mod放在\text{}中,表示这个是普通字符,不要当成数学符号来处理。这样一来,在输入mod的时候我就经常手忙脚乱,直到几次之后习惯了才好。

知道这周三,我在记笔记的时候心想,既然之前我试验过\gcd\log都成功过,那么这个mod是不是也可以这样子输入呢?毕竟在数学领域和计算机领域,取余是经常要用到的操作。TeX作为一个对数学公式排版的别专业的计算机排版软件,是不是因该有这个符号呢?于是我当时就试了一下,编译后果然没有发生问题,看了生成的文档也十分正确。当时我就有种汗颜的感觉,我好像有点太蠢了一点,竟然连这么简单的东西,还需要几乎一整个学期的时间才能想到。

解决了这个问题之后,用TeX来记笔记就比较行云流水了,速度也快了许多。下面的是我今天课堂笔记的源文件在emacs中的截图:

cypto-notes-context.png

头疼的内链

| No Comments | 1 TrackBack

我在把blog的程序由Wordpress换到Movable Type后,有一个问题就是链接。我过去的文章是以目录的形式表示的,用了Movable Type后结尾则成了html。理论上文章的链接是不应该变动的,否则会导致指向这篇文章的网页的废链。不过我觉得html结尾更顺眼一些,于是就还是用了Movable Type的链接形式。

当时我着手解决废链的问题,本来的打算是在.htaccess文件中写一些转向规则,自动把链接替换的。后来弄了半天也没有让它正常实现,最后我放弃了。因为我的文章,在网上“广泛流传”的也就那么两篇,链接变更不会有太大的影响。而且我写了一个比较友好的404页面,告诉读者发生了什么事情,怎么样把旧的链接修改成新的,这样影响就比较小了。我在Google Webmasters Tools上看到有一些页面未找到错误,因此也没有在意。

今天早上在Google Webmasters Tools后台观察最近变更域名之后网页被索引的情况,发现了几个抓取错误的报告。我觉得可能还是页面域名改动的原因,但点进去一看,有的链接竟然是从我自己的blog上发出来的?

开始时我非常奇怪,后来却想起来了,我的blog上确实存在一些坏链。

我的blog的域名是在中间开始改的。在改动之前我已经写了很多文章了,而在那些文章里面我也有一些引用自己文章的情况。那些链接存在与许许多多的文章里面,很难找出来统一修改。我想过是不是要先把所有文章导出,然后用查找替换来把URL的后缀一下子全改过来,不过想了一会还是发现没有比较简单的方法做到。

最后我决定,还是慢慢来吧。我先把今天看到的错误修改过来,然后每次看到有错误的时候就花一点时间改正过来。反正时间多的是,满满的总会全部改回来的。

旧书

| No Comments | No TrackBacks

我为了做专家系统的seminar,前天下午去了学校的图书馆找了学校里唯一一本关于MACSYMA的书。这本书是1984年的,算是比较古老了。书的排版字体,以及书里的记录卡片,都是我之前从未见过的,于是今天早上给书照了几张照片。

封面:

旧书1

早期使用的借阅记录卡片:

旧书2

书内使用等宽字体排版:

旧书3

昨天为了准备今天的seminar,一夜没有睡觉。昨天晚上晚饭时喝了一杯咖啡,今天早上去学校比较早,在上课前大约差十分九点的样子时喝了一杯超大的双糖双奶的咖啡,中午十一点一刻吃午饭的时候又来了这么一大杯,为的就是能坚持到下午的seminar。今天早上的时候最难过,觉得看论文实在是看不下去了,不管是屏幕上的还是纸上的。我那时感觉往椅子背上一仰就能睡过去。

为了防止自己在家不小心睡着了耽误了上午的课以及上午的准备时间,我坐了8点二十左右的车去了学校(平时我都是坐9点的,9点半上课),在车上时可能因为在户外温度稍微低一点的关系,我感觉并不是很难受,只是觉得脸部肌肉有些僵硬,动一动就感觉特别大。公交车走了一半的时候,我往侧边的靠背上一倚,觉得舒服一点,然后再有意识就是车到站了。所以我下车后直接就奔去了卖咖啡的地方,买了一大杯喝了下去。喝完了之后才刚刚9点,我就去了教室,在座位上趴着睡了20分钟多一点,上午感觉还不错。

上万课之后,我基本上就在全力准备seminar的状态。也不觉得怎么困了,只是感觉牙齿又开始发酸了,表示我又紧张了。开始时的时间好像过的特别的快,却觉得后半段的时间过的特别的快。我最后一次看世间,发现已经到了2点15分了,而我的seminar是2点30分。我做了几处最后的改动之后,就跑去了教室。

在准备的时候,我看着自己制作的幻灯片,从心理默念要演讲的内容,觉得还可以,应该可以应付。结果我可能使太长时间没有演讲了,到了教室之后,打开了幻灯片,就等着我开始讲话。一刹那间我感觉之前准备的东西似乎都变得非常遥远了一样,然后看着幻灯片,觉得我似乎是还有那么一点印象。于是也不管我的演讲草稿怎么写的了,有点从头开始发挥的感觉。结果说的也不是很流利,措词也有些慌张。我倒是还记得这张幻灯片之后是什么内容,该说什么我也知道,只是用英语表示出来却有让我临时重新造句的感觉。说到中间的时候,我脑中的剩余“计算力”在考虑这样一个问题──“我为什么要站在这里?”如果我不选这门课,或者早一点注销这门课,就不用受到这样的折磨了。

讲完了之后,我自己对与讲的内容也不算很满意。老师问了我一个问题,也是我读的论文范围之外的。我先说了论文中没有提到这方面的问题,然后又胡侃了一通系统本身的验证功能,也不知道是否就是老师期望的答案。

讲完之后下台觉得有点沮丧,如果我周日没有作业要交,我就可以花整个周末来研究seminar,时间就充裕多了。不过选了这样的课,任务是一项接一项,基本上没有调剂的时间。对这个话题我不是很反感,读相关方面的论文的感觉也非常的好,因此我本来想把它做好的,结果时间也相当不允许。反正已经讲完了,也算是无可奈何的事情。

现在下了今天最后一节课。我本来的计划是下课后直接回家,立即补觉的,不过现在也不觉得很像睡,只是感觉眼部挺疲劳的。身体的肌肉有中非常想被搓一搓的感觉,可能使促进血液循环的缘故,那样感觉身体的那一部分舒服的浑身发抖。我整夜不睡觉就容易这样。当然现在我也没有什么精力做别的事情。

虽然结果不是非常理想,我还是学会了用ConTeXt做简单的幻灯片,我还是比较欣慰的。等之后有时间专门写篇相关的文章。

我也讨厌教电脑

| 1 Comment | No TrackBacks

前几天我写了一篇文章《我也讨厌修电脑》,写我觉得为朋友义务修电脑很不舒服,有厌烦的情绪。今天正好又遇到了一件相关的事。

昨天下午上课前,去教室的路上,预见了一位熟人。同样是中国人,当初和我一起读的语言,但是不同班。他与我语言班的同班同学关系不错,又是我语言班的另外一位女生的前男友,现在他的女朋友算是我的学妹,他在语言班的同学是我在国内大学的好同学,也是我来加拿大前四个月的室友。他在这个学期修了计算机1010课,就是最基础的Java语言,之前有几次作业有问题,找我辅导了两次。这次遇见后就问我第二天有时间没有,说这个学期最后一次作业不大会,想让我教教他。我那篇文章也说了,都是同学,特别是都是在加拿大的中国人,我一般都力所能及的帮一下。我在周三要做一个seminar,准备这个seminar就是我这个星期前半部分的全部内容。我说如果时间不长就没问题,他说不用很长时间,于是我就说我大概9:30实验课下课,然后那之后就有时间,就和他越好在那个时候在实验室见面。

今天我到了实验室后,他还没有到,于是我就在冲着电脑看论文。由于今天早上的试验是8:30的,晚上睡眠时间挺少,所以我看着看着就困的不行了,就趴在桌子上睡觉。睡到后来,我听到他女朋友叫他,我于是知道他来了。他说他来完了,弄错了时间。起来后看一下表11点多了,我11:30有课,就说我要上课去了,只有上完课回来给他讲题了。这些都好说。

我12:45上完课回到实验室,看了一下他的作业,是很简单的Java程序。要求用户输入三个整数,生成第一个整数那么多的随机实数,最大不超过第二个整数,然后把这些数放到第三个整数那么多的区间里,最后把相应的数据输出出来,中间的算法公式题目中都已经明确的给出了。实在是相当简单,如果我现在可以每天做这种作业,就太轻松了。

然后他给我说他现在遇到的难处。我听了一会,发现他现在根本没有理解编程语言。尤其是函数的作用,我说了好几次“你把一段代码放进函数里,就是为了可以调用多次,结果你把代码在主程序里写多遍,不是题目的要求”。也许我不是一个好老师,觉得这些简直无法解释。我耐着性子教给他一步一步完成读入一个数据这一步骤,当然我自己也有点惭愧,纯粹是填鸭式教育,差不多把怎么做全说出来了,但我只有今天一天可以准备我的seminar,实在是没有时间啊。结果把读入一个输入的代码弄完,让他写读入第二个的,结果他还是问我是不是要把读入数据的子程序再写一遍?我说不是,读入数据的函数已经写好了,写一个函数的目的就是为了可以调用多遍,所以你应该再调用一次这个函数,来读入第二个整数。而且之前他写的代码还有许多问题,比如该用int的地方用的是double,我也一一指出来了。结果他居然问我是不是要这样做,就是北京人那种句子尾音上扬的疑问语调,我直接无语了。

我意识到,这不是我简单辅导一下的问题了,而是许多概念性的东西都没有建立起来。以这样的知识来写这个作业自然是很困难的,绝对不是一会就可以完成的。于是我问他作业什么时候交,他说是明天下午。得,之前答应了别人,也只能做到底了。于是我开始一遍又一遍的解释函数之类的作用,其实那时候我已经觉得有点急躁了。主要是我的seminar还没有什么头绪,实在是没有心情花时间在这上面。

让我真正无语的是,题目中要求把生成的随机数放进数组里去。在弄完了读入数据的部分后,我说下一步需要把生成的随机数放进数组里去,你需要建立一个实数类型的数组。他居然说讲他不知道什么叫数组,讲数组的那节课他没去。我靠,还说什么很快就完,这样字怎么让我很快就完?

于是我平定了一下情绪,说我先去买午饭,回来后再做。等回来后,我让他把他现在的代码拷贝给我,我在Emacs里面先把代码排一下版(代码排版的问题呆会再说),把代码先编译一下,修改了目前的错误,然后按照老师要求的文档,大概花了十分钟,写好了程序,然后再拷给他。

除了相应的知识空缺之外,还有让我觉得很恶心的就是他说事学计算机专业,但他却根本没有计算机专业学生应有的素质。我之前给他指出来了,他还没有改正,就让我太不爽了。首先是我们学校教Java时用的编辑器是Textpad,但他的电脑上的Textpad不知道是谁给弄的,竟然用的不是等宽字体,妈的,光是这一点就该杀了。还有就是我不知道他之前是不是用过VB,竟然有用鼠标多于用键盘的趋势。比如一个变量名arraySize,明明用键盘输入很快的,如果代码中已经有了一个,他就要用鼠标选中那个变量名,复制粘帖过来,实在让我看不惯。这也是我为什么让他把代码拷给我,我从我的电脑上修改,也不愿直接在他的电脑上工作的原因。

我在两年前的这个时候帮人家写过计算机作业。那时我只有三门课,还比较轻松,在无聊是逛在这里的中文论坛,看到上面有人请人帮忙写作业,当然是有偿的。恰巧对方要求的那门课就是我当时修的那门计算机课,于是我写好程序后,以一个程序20加元的价格卖给了对方,一共挣了6元钱。后来临近考试的时候,对方觉得有点问题,就给我发邮件问我能不能给她上课,我于是给她将了一个小时,赚了10加元。后来她考试也过了,皆大欢喜。不过我到后面时间少了之后就没有再做过有偿的生意,反而一些熟人找我做一些相当恶心的计算机作业,则让我相当恶心。如果是写程序还好说,有些最基础的入门计算机课,给全校学生学的,内容就是写Office之类的,也找我这个计算机系的学生来做,就太恶心了。主要原因是题目多,琐碎,虽然不难,但却很让人头晕。而且我相信那些人绝对不会作不出来这种作业。我有一次给同学做过类似作业,当时用了大约两个多小时还没昨晚,我心烦意乱,相当难受,从那以后再也不做类似作业了。

还有一次是我在暑假的时候帮国内的同学写过一篇语言班最后要求的论文,题目是维生素D。那种论文要求不高,之前关系也还不错,我又比较有闲,于是也就帮着完成了,最后同学给了我50加元,我还是比较高兴的。前两天的一件事也挺类似,我在Adium上不了QQ之后,就几乎不上QQ了。有天晚上我室友叫我,说是我们的一个共同的朋友在QQ上找我。我上线后问对方什么事,结果发过来五个字“paper。。。”。我觉得我都能想象他一脸谄笑的样子。我当时心里不由自主的想“操,不知道我这个学期五门课,我现在都快死了吗?小事也就罢了,居然连paper都找我代谢,也够好意思的了。”好在我这个学期实在是忙,也算有理由就给拒绝了,否则人情关还真不好过。这个人正好也是北京人,所以我今天听到另一个北京腔给我说话,我才这么来气。

我在发表了那篇文章说讨厌给人修电脑之后,同学在Twitter上给我说“好人修电脑,坏人床上搞”,我觉得这话说得太对了。很多时候别人找我帮忙写作业,实际上也不是到了实在不会做,到了走投无路的时候了。事实是我在帮对方出力的时候,对方有了更多的时间打游戏。用我的宝贵时间在培养一些人渣,想想都觉得不平衡。

之前的经历让我觉得,如果给我钱,请我做某件事情,我觉得OK。只要不耽误我的正事,也对我表示了相当的尊重(出钱),我做的还是比较高兴的。而熟人请帮忙这事,我是觉得越少越好。这种事,有了想起你来,过去了就把你扔了,感觉确实不大好。谁也不想给人随便这么使唤,最后得来的是什么呢?不过是找你办事的时候的花言巧语以及最后的顶多一顿饭罢了。不值。问题是我很少拒绝人,而且都是在国外的中国人,谁也难保那天就要用着对方了,也不好交恶。

今天正好在读Google Reader的时候,看到有人推荐宋石男写的《扯一下淡,论“狗日的帮忙”》,讲的就是我这个问题,我看完了之后也大呼过瘾。但是作者与我不同的是,他可以轻易的拒绝熟人的请求。他说的一句话特别好“人情其实是一种软性投资”。可是对我来说也得看你自己是什么人。如果有自信将来可以自己解决所有问题,我也不介意被当成“铁公鸡”,可惜我势能在这里说说,将来该出力的还得出力。

修养与教育系统

| 4 Comments | No TrackBacks

这个学期我的计算机网络课有个项目是需要小组完成的。当初找小组队员的时候,我有意找了之前没有接触过的当地人一起合作,结果找到了现在的伙伴。当时我其实很紧张,那人正好在课堂上坐在我左边,一幅阴沉的样子,也不怎么说话,与其他当地人相比显得不那么活泼。我当时打定主意,姑且一试,如果他已经与别人合伙了就算了。于是在下课后就鼓起勇气去问他,结果他还没有与别人组队,于是我们两人,再加上后来的一位中国人,小组就这么成了。

出乎我意料的是,开始时我觉得可能和这人不是很容易打交道。而且因为语言原因,我可能会和另外一位中国人走的更近一些。但结果却恰恰相反,由于任务分配的原因(中国人写比较简单的客户端,我和当地人写服务器端),所以从开始时我们就好在一起讨论。而且中国人上自习的地方不是我一贯的地点,反而当地人容易在我这附近上自习,所以我们也容易见面并讨论问题。后来中国人被诊断出H1N1疑似,很长时间不能到校,项目的绝大多数任务都是由我和当地人完成的,所以到最后来说,我反而和当地人说的话更多一些。

从项目开始是我就开始想,为什么我一开始觉得比较冷漠的外国人,其实是非常好说话的呢?基于这一点,我又想起了我在加拿大两年多来观察到的一些事实。比如在校园里见不到人斗殴,而在国内不管是我身边的人还是从媒体上听说的,这种情况都屡见不鲜。还有就是当地人的基本的礼仪,比如说如果你在出门或进门时知道有人跟在你后面出入的,要为后面的人扶住门。有的当地人做的都有点让我觉得夸张了,我离门口有将近十米对方还是扶着门等我。我身边的一些中国人人对此甘之如饴,并且也同样这样做,但也有人还是我行我素。有一次就是一个中国人,他有一节课就坐在我身边(因此我相信他绝对认识我),有一天我们去上课的时候,正好他走在我前面,穿过们的时候我们距离也就两、三米,他就这么过去了,非常冷漠。我之前对他印象就不怎么好(之后可能专门写文章讨论),经过那次之后就更讨厌他了。

我在国内上大一的时候,当时的室友有一次从网上下载到了一段某个电台的录音并放给我听。内容是在某地的一个观众可以打电话进去与主持人交流的节目里,有个在中国的日本人打了进去,说是想念一篇自己的文章。文章里说了他作为一个日本人看不起大多数中国人,因为他们没有教养,文化水平低。在与主持人争论的过程中,他反复强调了日本同龄国民接受大学教育比例有70%,而中国则远远低于这个水平。后来据说是因为电台主持人没有处理好这个问题,被开除了。当时我室友听的义愤填膺,并从网上找了不知道谁做的什么“打倒日本帝国主义”之类的音乐flash来看,并找了一些中国人在体育之类的项目上击败日本人的录像来安慰自己,说是“解气”。我当时想到的是如果我们的国民都像这个样子执着于一些这样的问题的话,甘于做一个只会喊口号、做事情只为了解气的“愤青”的话,中国人永远无法战胜日本人。不过碍于面子,我也没有说的很明显。这次想到加拿大人的教养问题,我不由自主的又想起了那个日本人说的“国民接受大学教育的比例是70%”这句话。

“接受大学教育”是不是使一个人变得高尚的因素,我想了好久。我不知道别的国家的大学是什么样子的,在加拿大人们上大学之前就已经很有礼貌了,大学里并没有教给学生要给后面的人扶着门之类的东西。而在中国则很多(有些时候可以说是多数)大学生也并不高尚。至于日本的大学是怎么样子,我没有经验,但我觉得在日本这种仍然非常讲传统规矩地方应该是学生上大学之前就有礼仪教育的部分了吧。因此我把那句话改改,也许说“70%的人都接受了礼仪教育并且被认为是有教养的”更合适。一个人是否完成了高等教育,与他们是否有教养应该是两个关系。很多中国人身在大学里甚至大学毕业后还是没有教养,我想这是大家公认的事实。

因此我想到了一个通过更改教育体系来让人民变得更有素质的问题。当然家庭教育很重要,但我们如果在一些基础教育上,从小培养孩子的礼仪,会不会改变整个国民的素质呢?当然我们现在的小学、中学也有思想道德教育课,但还远远不够。我自己的经验是,小学时期老师不过是照本宣科,一般放学后学生怎么样老师就不管了;中学时老师只是教给我们思想要符合某个组织指定的思想,同时基于升学的压力,一切都变得功利了起来,老师和学生都不再注重个人的礼仪修养,只要学生不给学校和老师惹麻烦就行。这样子的教育基本上是没有任何实际作用的。

另一方面,在一个高等学府中会带给学生什么变化呢?一位大学教师又会给学生带来什么改变呢?通过我的观察,国内的大学中,“辅导员”这个角色与同学的礼仪修养方面关系最大,其他的授课老师基本上是讲完了课就走。而“辅导员”基本上就是统筹协调学生事务,解决纠纷之类的指责,学生的礼仪修养怎么样,我觉得“辅导员”不会有太大的关注。当然我觉得也不能全怪“辅导员”,在之前的礼仪养成方面没有教育好,到了大学生的年龄就很难再管了。因此只要学生不会给学校惹来麻烦,也不明着冲撞“辅导员”,我想那些“辅导员”们也乐于睁一只眼闭一只眼。

在加拿大的大学没有“辅导员”这个角色,如果非要类比的话,我觉得advisor也许算是对应的职位。不过这边的advisor是被动的给学生提供技术支持,而不是主动的去管理学生。其实到了大学后,在学校里就没有人管学生了。大学把大学生当作社会人来对待,只要学生不触犯社会规范(道德与法律)就没人管你。而对于课程的教育来说,我的经验是越学到后来就越觉得从老师那里直接获取的信息就少了。当然老师也讲课,不过这些内容都是从书上可以查到的。如果想获得更多的内容,老师会推荐一些书,图书馆的藏书也算丰富。

所以我就想,既然大学生的知识很多都可以从书上获得,我们为什么不用书来代替大学里的老师呢?现在的价值观念认为,人力最值钱。请一位大学教师的费用应该要远高于买一本书的费用,那么我们用书来代替大学教师应该是可行的。很多老师的笔记,在几年前就已经写好了,一年一年讲同样的东西,我想教师自己也会觉得厌烦。当然也不是取消大学教师这个职务,因为我们还是需要书。大学教师可以写书,把自己的知识写成书,买给学生,给学生一定的时间,然后出题给学生考试,在期间也回答学生的疑问。同时老师可以有更多的时间去科研,把成果写成论文,则又是新的知识。而这一切都不必与学生面对面进行,通过互联网也可以很好的完成。这样大学教育的效率会不会更高呢?

在中国的所有老师阶层中,大学老师的工资也许是最高的。而如果从出力的程度上来说,我觉得反而是小学老师最费力气。国家每年会给不同的学校拨款,如果我们把拨款的比重更倾向与基础教育,在基础教育上把重点放在人文礼仪修养上,这样人民的整体素质会有所提高。小学、中学完全没有必要学太多的数理化知识,只要完成两点:一、教会学生怎么做人,就是基本的礼仪素养;二、教会学生必要的生存本领,比如基础数学,做交易总要会算帐吧;三、教会学生必要的学习工具,比如高级语言的掌握(外语、阅读、写作)和新兴工具如互联网的使用。有了这些最基本的知识,学生在下一步的学习中,完全可以按部就班的一点一点学成专家。我们初中学会了怎么用金属和酸获得氢气,之后如果不搞化学方面的研究,又有谁在生活中用到了呢?

同时,中国的现状是,有些小孩依然不能接触正常的基础教育,比如偏远山区的孩子、或者进城的农民工的孩子。贫穷是他们无法获得与普通孩子一样的教育,将来也导致他们的竞争力下降,两家的贫富差距会更加严重。没有上过小学、中学的孩子长大后甚至连阅读水平都赶不上接受普通基础教育的孩子,这直接限制了这些小孩在将来获取更高级知识的途径,这是最令人觉得不平的。我觉得与其在普通的基础教育中花那么大的力气教给学生们一些一辈子都用不上的东西,还不如把这部分力气放在普及基础教育上。国家再在高等教育上面进行一些经济补助,让穷人的孩子有机会接触高等教育。因为我们之前有改变大学的想法,所以要让学生完成我设想中的大学教育,应该不会花太多的钱。

当然,我这些都是空想,我也不会期望中国的教育会很快的往这上面发展,不过我认为这是正确的方向。我们很多人都津津乐道中国小学生、中学生与欧美的的小学生、中学生比起来懂的更多,这实际上就是中国的基础教育给了学生太多未必有用的知识。而中国人普遍被其它国人认为没礼貌,也是基础教育没有教给学生应该的东西。其实两国的小孩长大后,欧美的小孩并没有因为懂的比中国小孩少而减少了竞争力;相反的,我们的基础教育更加僵化了学生的思想,让我们在高级科研领域里比不上欧美的学生。

现在我们的教育环境是让人无奈的,我也不知道什么时候能好一点点,什么时候中国人可以更加“有修养”。

About this Archive

This page is an archive of entries from December 2009 listed from newest to oldest.

November 2009 is the previous archive.

January 2010 is the next archive.

Find recent content on the main index or look in the archives to find all content.