制作了一个新的样式

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

对于计算机的学习与了解,从小我一路上来,我身边的朋友,如果不是接触编程这方面的话,基本上就是制作网页了。那个时候买个盗版的 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 安装文档

Logo of Six Apart.换了虚拟空间之后,我昨天晚上重新安装了 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 抱有谨慎的态度。

更新虚拟主机

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 的空间来满足一下这个“夙愿”吧。 🙂

更换终端程序

在买了 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 之类的快捷键来快速移动光标了。

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

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

Site5 主机的 ImageMagick 模块的问题

Logo of ImageMagick我在之前的文章里说过,我在 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 提供 24×7 的客服服务。我在输入自己的名字、邮箱地址、我的域名、以及问题之后,系统会把我的问题分配给一位客服,然后会在浏览器里出现一个对话窗口,我就在里面同他交谈。

客服首先问我我在上一步填写域名是不是指向我目前发生问题的主机,我说是,然后他进行了一些操作,估计是在后台重新安装了一下 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 位大行其道,我却忽略了这个问题。不过这两个问题也给我上了印象深刻的两节课。

女脸

先看照片:

玻璃上的脸1

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

玻璃上的脸2

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

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

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

鸡冻

Logo of Site5昨天早上,之前给我提供主机空间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

今天下午经过反复的努力(主要是体力劳动),终于在 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 还没有删除,等有时间再研究一下,呵呵。

修整一下内链

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

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

Result of my weblog run xenu.

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

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

总结一下这个学期的密码课

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

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

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

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

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

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

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