帖子

目前显示的是 十月, 2007的博文

去掉 ctrl 键指示鼠标位置

虽然早在 2000 年左右的时候,我就装过 RedHat(7 或者 8?),但那个时候纯粹是因兴趣而装上玩玩。真正开始以 linux 作为生产环境,是在 2006 年开始工作的时候。时逢 ubuntu 大行其道,我也未能免俗。可以说,ubuntu 6.06(后文都用 dapper 指代)是我的启蒙 linux 发行版。

记得刚刚使用 dapper 的时候,常常会因为鼠标颜色和终端窗口背景颜色很接近而找不到鼠标在哪里,于是依稀是 dapper 的 gnome 设置里面有一项设置,作用是在按下右 ctrl 的时候屏幕会有一个由大变小的动画框,指示鼠标的位置。

后来换了其他对比更加鲜明的鼠标主题,肉眼找不到鼠标的问题已经基本不存在了,但右 ctrl 显示鼠标位置这一设置则一直保留了下来,经历了 6.10(edgy)和 7.04(feisty)。

问题发生在 7.10(gutsy)上。升级到了 gutsy 之后,突然间发现原本只有右 ctrl 才有效的鼠标指示,如今在两个 ctrl 上都有效了。开始只是有点别扭,几天之后,问题出现了。

不要说平时 emacs 用的多,即使只是终端里面,左 ctrl 也是很常用的键,于是这个时不时蹦出来动画框就很烦人。当然这还不至于影响正常工作。最严重的问题是,gnome 在绘制这个动画框的时候,会使焦点暂时脱离当前窗口,绘制,然后焦点再返回当前窗口。这样一来,类似 scim 这样对焦点敏感的应用程序,ctrl 基本都成了不可用的键。比如需要用 ctrl-d 删除拼写错误的单词的时候,焦点一旦脱离,选字框就不复存在,于是 ctrl-d 成了摆设。

于是下决心去掉这个指示鼠标位置的设置。可惜年代久远,早已记不得当初是在什么地方做的设置了。翻遍了 gutsy 的首选项,也没有找到类似的设置。

用 top 检查,没发现比较可疑的进程;启动的时候选择跳过 XClient 脚本而直接进入 gnome,问题依旧;因此断定这个功能应该是 gnome 而不是 X 提供的。

于是开始翻个人的 gnome 设置文件。可惜没有头绪,用 ctrl,mouse,cursor 等等关键词 grep -r 了很多次之后,也没有结果。突然想起 gconf 这个 gnome “注册表”,于是 gconf-edit,但是几番折腾下来还是无功而返。难道跟 gconf 也没有关系?这个设置究…

Thunderbird 的 RSS 重复问题

最近 mozilla calendar 发布了 0.7 版,改进不小,于是我终于给 Thunderbird 装上了 lightning 插件,毕竟日程管理也是个挺重要的东西,跟 Thunderbird 整合比每天都单开一个 Sunbird 要方便些。

既然 Sunbird 已经不用了,就更贪心一点,想看看现在 Thunderbird 对 RSS 支持的怎么样了。

按照自己的使用经验,Thunderbird 1.x 的时候,对 RSS 支持的真是不怎么样。某些中文 RSS feed 会乱码,某些莫名其妙的被判定为非法 feed,还有就是臭名昭著的 RSS 重复问题。后来自己也试用了一些 RSS 订阅工具,比如 Lifera,但是后来还是选择了 Akregator。虽然在 Gnome 环境下用 KDE 的软件要付出额外的代价(比如更多的内存占用),但是 Akregator 的功能在我看来足以弥补。

试用的结果是,Thunderbird 对 RSS 的支持依旧不尽如人意。我订阅的几十个中外文 feed,solidot 依旧重复,每次 update 的时候都会把所有已有条目重新下载一遍(solidot 用的是 feedburner,奇怪的是同样是 feedburner,其他几个 feed 没有这个问题);verycd movie channel 的 feed 依旧是莫名其妙的非法 feed(奇怪的是同是 verycd 的 feed,game channel 的就没问题)。

上网搜了一圈,Thunderbird 有个自动删除重复邮件的配置选项,本来不是给 RSS 专用的,在这里多少也能管点用,但并不完美(可能会有漏网之鱼)。这里还有一个老外专门研究了 RSS Duplicate 问题,很佩服能有这样的钻研精神。结论是 Thunderbird 对 RSS 条目是否重复判定的相对变态一些。

结论:在 Thunderbird 不改变 RSS Duplicate Detection 算法之前,这个问题基本无解。用自动删除重复邮件的办法可以很大程度上缓解问题,但不是解决。至于非法 feed 我没有找到什么办法。Mozilla 的论坛上,对类似问题的讨论也可以上溯至 2004 年。或许 Thunderbird 的开发者更加偏执于标准,但是广大的用户还是更希望得到能用的软件,不是么?

修订(2007…

gutsy 的 samba 故障

升级到 gutsy 之后,突然发现 samba 出现了故障。症状是 windows 访问 ubuntu 的 samba 共享目录时报错(是个很长的错误信息,我记不请楚了,大概就是网络文件夹没有准备好之类)。

因为目前尚不清楚原因,所以解决办法比较土,就是重装 samba。

我卸载的时候是加了 --purge 参数的,因为我怀疑很可能就是旧版本的配置文件导致的问题。但是简单看了一下,新的 /etc/samba/smb.conf 和原来的并没有什么不同,等有时间了再详查原因所在。

Gutsy 下 epsxe 无法运行

昨天发现 epsxe 也不能用了,是升级到 Gutsy 之后遇到的又一个问题。之前 Feisty 的时候,开着 compiz 都不影响 epsxe 的运行。

目前还没有找到解决办法。因为这次的问题很奇怪,epsxe 启动之后,一行信息也没有就退出了,仿彿什么都没有发生一样。ubuntu 英文论坛上也有人发现了这个问题,十几页的讨论下来,也还是没有办法。

通常我会以为这是某个 epsxe 的 plugin 导致运行异常,但是这次很奇怪,甚至在什么插件都没有的情况下 epsxe 依旧无法正常运行。

这算是 Gutsy 的一个不大不小的遗憾吧,不知道以后会不会有解。

当 pidgin 遇到 core-plugin_pack-buddynote

升级 Gutsy 之后,开始整理自己之前编译过的软件。这部分大都是因为源里太过陈旧而忍不住自己编译的,比如 emacs,pidgin 等等。升级之后,源里的版本非常新,于是准备把原来这些自行编译的都去掉。

问题发生在 pidgin 上。当把自己编译的 pidgin 给 make uninstall 了之后,登录 pidgin 突然出现这样的错误(大意):
core-plugin_pack-buddynote 未找到,请安装该 plugin 之后再试一次。

这毛病有点令人丈二和尚摸不着头脑,将源里的 pidgin 重新安装,故障依旧。难道是我的 .purple 有问题?把 .purple 挪到别的地方,重启 pidgin,添加帐户的时候居然协议下拉列表里什么都没有。

没辙了。正准备 sudo apt-get autoremove --purge pidgin*,突然发现 pidgin 相关的包里面还有一个 pigdin-extprefs,看了看说明,很可疑啊,先安装之,把 .purple 挪回来,顺手 grep 了一下,将 pref.xml 里面带 /usr/local 的标签都干掉,启动 pidgin,一切正常。

按说这么重要的包,不应该装 pidgin 的时候不自动安装上啊!

升级到 Gutsy

可以说是忍耐不住,可以说是对 ubuntu 团队有那么点信心,也可以说是对自己的技术还有那么点点自信,但是昨晚还是禁不住升级到了 Gusty——虽然我这个老本是每天工作必不可少的帮手,本来放在周末升级更为合适的。

东京的 100M 光纤入户在这个时候终于体现出了威力,平均下载速度达到了 3.5M 每秒左右,下载并没有成为升级的瓶颈。但是随后的安装过程却十分冗长,从晚上 10 点 40 分左右,一直到快凌晨 1 点了才进行了 50% 左右——可能是我平时装的乱七八糟东西太多了吧 :P

但是最讨厌的是这个安装过程并不是全自动的。升级向导时不时会弹出个对话框让你作一下选择,基本都是是否用替换旧的配置文件之类,替换了的话原来的手工修改就都没了云云。整个安装过程中大概会有 10 次左右这样的交互,而且均匀分散在安装过程中,实在让人难以忍受。于是一夜没有睡好,凌晨 4 点和早上 7 点的时候分别起来操作了两次,总算保证了上班前把系统升级完了,不过这个过程实在是不爽。

目前最大的问题:compiz 失效了,无法启动。翻了翻论坛,同样问题的人似乎不少,问了问 Google,貌似是 libGL.so 被替换成某个版本之后导致 GLX_EXT_texture_from_pixmap 不可用(原文看这里),最近工作比较忙,不打算折腾了,有人抱怨,官方应该很快会给出解决方案的(请关注官方的 bug 帖,目前 bug 已经得到了确认,但还没有解决),好在没有 compiz 虽然会稍稍降低工作效率,但并没有致命影响。

说到好处,就是感觉速度快了那么一些(或许关掉 compiz 的话本来就很快 :P),同时今早试用了一下休眠,也完全没有问题。这很实用的改进。

feisty, vnc, compiz

最近需要远程登录一下 ubuntu 桌面,于是看了看 feisty 下面的 vnc server。好在很不复杂,ubuntu 的话,系统——首选项——远程桌面下点点就可以了,控制端则可以使用标准的 vnc viewer。

但是有个问题,一旦开启了 compiz(猜测 beryl 或者更新的 compiz fusion 应该也是一样),则控制端的画面永不更新,永远停留在刚刚连上 vnc server 的那个画面。这是一个已知 bug,只是似乎中文世界里似乎还鲜有讨论。

按那个帖子的讨论,bug 应该解决了,只是还没有 merge 到 feisty 源里。看来升级到 Gutsy 又多了个理由。

呆子测试

图片
这个 Nerd Test(呆子测试)来自国外,需要回答的问题很多,所以感觉还有点点可信度。对国内的人来说,可能科学 / 计算机的部分相对准确一些。

这是我的测试结果 :)


模板定义和实现不能分开

虽然项目需要,写了半年多的 c++,但是之前一直也没接触过,属于边学边用,很不系统。最近才发现这个可能算是很基本的常识。

如题,类似这样的写法是不行的:

foo.h

template
std::string to_string(T value);


foo.cpp

template
std::string to_string(T value)
{
    std::stringstream result;
    result << value;
    return result.str();
}


这样做之所以不行,是因为必须要让编译器能够在同一文件中找到模板函数的实现部分,否则会连接错误。

至于原因的细节有很多书或者讨论结果可供参考,这里不再赘述。

解决办法,比较常见的是将所有涉及模板的实现都写在头文件里。据说其他使用到模板函数的文件中将 include 头文件改成直接 include .cpp 文件也是一种办法,我没有作实验,但感觉还不如前者妥当。

c++ 果然是种易学难用的语言,林林总总的历史问题,造成了太过复杂的语法体系。写 c++ 代码,如履薄冰。

土鳖安装程序

安装程序作为软件的一部分,本来是方便用户的。但是某些土鳖安装程序,除了带来麻烦什么功能都没有。

比如早先有个游戏叫 Obscure,中文名叫“恶夜杀机”,安装程序就很土鳖。当时在我的 Windows 2003 Std 上无法安装,理由是版本不对。大概是在检查 OS 版本的时候,只能识别 2000、XP 等当时的主流系统,令安装程序以 XP 兼容方式运行也不行,这家伙还真是恪尽职守。无奈之下,当时的解决办法是找了个 2000 的机器,装完了直接拷贝一份过来,运行起来完全没有问题。像这种安装程序,就可以称之为土鳖。

Obscure 毕竟是老早以前的软件了,今天说的主角不是它,而是眼下正热的 Medal of Honor: Airborne,中文名叫“荣誉勋章:空降神兵”。按说这是个很经典的游戏系列,之前的游戏体验一直很好,直到本作(后文均简称为本作)。

鉴于近年来 PC 游戏都越来越大,我通常都会安排“专门”的时间安装游戏,比如大号的时候、洗澡的时候等等。本作也不例外,看到开始复制文件之后,便去冲凉了。洗完回来,屏幕上了无痕迹,连个 Finish 的按钮也没有?看开始菜单,看硬盘,都没新东西。突然间觉得自己生存在 Matrix 中,记忆都是“神”设计好了拷在我大脑里的。

再次安装。回头洗衣服去了。回来之后,现象依然。再这样下去会得强迫症……

不信邪,再次安装,看着它复制。一路正常,到 99%,应该是最后的设置阶段,突然安装程序来了一个很迅速的回滚,继而退回桌面。艹!!

赶紧上网搜。结果是安装的时候必须打开 Windows 自带的防火墙。本作的安装程序在最后的设置阶段会尝试将自己加入防火墙的白名单里。如果防火墙没有打开,这个操作就会失败导致安装程序认为安装失败并回滚。Windows XP 自带的土鳖防火墙还成了宝了!!

于是,开启土鳖防火墙,安装,成功,关闭土鳖防火墙……真是要多土鳖有多土鳖,土鳖联合起来真可怕。本来我对“硬盘版”很不屑一顾(盗版盘那年代留下的习惯,那时候“硬盘版”就是阉割版,制作水准完全不能忍),很多游戏我都会收正版,即使从网上下也更喜欢原版镜像,看来这观念该改改了。

就好比你的亲戚来串门,你的管家觉得这人很可疑坚决不让他进门,你说没关系让他进来我看看不是再请出去就完了,你管家说这门我说了算我觉得不行谁也进不来。到底谁是主子?

今天办了件傻事

妻也要来日工作,正在做公司的 Pilot Project(属于入门项目吧),最近跟老板 email 来往频繁。只是最近一封 email,妻迟迟没有回复。今天跟她提起,说根本没收到。我连忙检查了一下邮件,确实,老板抄送给了招聘列表、QA 头头、PM 头头、技术头头等等,唯独没有妻的地址。百密一疏,谁都有犯错的时候。

于是我不假思索,原封不动的引用了原来的邮件,填上了妻的地址,告知老板上次忘了写妻的地址,发了出去。

刚发完,妻就告诉我,这个邮件应该由我们老板来发。当时并没在意,晚上回来才反应过来。

领导终究是领导,无论是虚荣也好,职务需要也罢,总归是要那么点权威的。古今中外,贤主暴君,莫不如此。我这一封信出去,等于是告诉所有收件、抄送列表里的人,老板发信的时候犯了错误。没有什么比当众指出领导错误更“愚蠢”的做法了。

更好(婉转)一点的做法,应该是私底下通知领导,然后由领导发出更正邮件,这样事情就变成了领导自查自纠,谁也不会说什么,也显得领导事必躬亲,大家都还没发现,竟于百忙之中亲自找出了错误所在。

我没有读过李宗吾先生的《厚黑学》,但是回想起来,我的第一个反应就是这本著名的争议书名。其实类似的道理传统文化中的儒家铺子里都有,只不过说的隐晦,需要个人有点悟性。应对洒扫,待人接物,是儒家必修的课程,只不过道理讲通了还要应用于实际,不那么容易。难怪孔老夫子要“日三省其身”,防不胜防啊 :P

老机器

1988 年前后,我小学二年级刚开始接触电脑那时候,学校里还是 Laser 310,接一台普通电视做显示器,代码在上面的效果惨不忍睹,键盘手感肉乎乎的,很有后来按惯了 XT 的机械键盘突然改成电容键盘时候的那种感觉。

后来四年级再进学校微机组正式学习编程的时候,机器已经是清一色的 Apple IIe 和中华学习机了。Apple IIe 的 8 位 6502 的芯,性能实在是有限,估计和当时广泛流行的任天堂红白机也就一个档次。

1991 年底,我伟大的父亲母亲掏出了 2500 块血汗钱(那个年代确确实实都是血汗钱),委托大舅从北京背回了生命中第一台属于自己的电脑,一台 IBM PC XT 兼容机。NEC V20(一种 8088 兼容 CPU,似乎性能还要高点,可以参考 wiki)的芯,板载 1M 内存,双 360K 五寸软驱,某 SiS 芯片的 8 bit ISA MDA/CGA 兼容显卡,在当年我周围还都是 Apple IIe 的吉林显得如此超前和陌生。这也是我生命中使用时间最长的一台电脑,自带的机械键盘质量很好,一直服役到 486 时代,清脆的响声曾经是狭小居住空间里母亲很为头疼的声音,在我听来却堪比交响乐,时至今日仍旧非常怀念。

或许正是有了以上这样的经历,让我对老机器有特别的偏爱。虽然老机器可能无法运行当下最流行的操作系统,更不要奢望拿来享受最先进的娱乐软件的声光效果,但在我眼里,老机器并不是垃圾,它们仍然有可以发挥价值的空间。就像我现在每天不能离手的这台老本,经典的 Compaq N410c,配置虽然只有 P3 1.2G/512M/30G/ATI M6,但是,我很喜欢看他跑 linux,它是我每天工作不可或缺的得力助手。我甚至喜欢让这块 M6 欢快的(哦,应该说是吃力的)跑 compiz,很多看过的人都不敢相信这样的配置能够达到这样的运行效果。

喜欢 DIY 的人,引以为傲的不应该只是令人眼热甚至咋舌的豪华配置,而是最大限度发挥已有设备的价值。毕竟前者更多依赖资本,后者才更体现技术实力。