2009年12月20日

lyman 的 2009 年度游戏总结

2009,多事之年。前半颠沛流离,只能于舟车途中打打牙祭。后半定居杭州,方有起色。

  • 3 月 14 日,宿命传说 2(PSP)通关
    故事:少年拯救世界+终极 boss 分身的女主角+时空穿越,唉。战斗部分属于北欧女神增强版,有点意思,有点繁琐。

  • 4 月 12 日,思乡之风(DS)通关
    游戏尚可。故事完全没印象了。难以忍受的是过场无法跳过,类似圣斗士冰河发招之前不可或缺的奇怪舞蹈。

  • 6 月 11 日,Plant vs Zombie(PC)通关
    这个时间点是 adventure 通关。endless 我的记录是 70+。

  • 7 月 26 日,Defence Grid(PC)通关
    第一次接触这类塔防游戏,玩的很投入。

  • 8 月 20 日,Bionic Commando(PC)通关
    如同波斯王子 4,各方面评价貌似一般,但我觉得还好。关卡的节奏感、难度、场景安排都合我口味,尤其音乐。

  • 9 月 19 日,国王的恩赐:戎装公主(PC)通关
    国王的恩赐这两作就不多说了,专门写了玩后感

  • 9 月 27 日,生化危机 5(PC)通关
    剧情确实没有突破,补丁摞补丁的故事要圆起来太难了。但是当成生化危机 4 的高清资料片还是很不错的,夫妻双人协作尤其欢乐。可惜老婆大人的 QTE 不太行。有机会入正版。

  • 10 月 11 日,国王的恩赐:传奇(PC)通关
    本想收个正版,steam 上也有,不过目前的价位还是有点贵。

  • 11 月 7 日,Torchlight(PC)通关
    很久没玩这么纯粹的游戏了,所以一上来就很疯。都是 Diablo 3 给憋的。不过跟玩 Diablo 2 时候差不多,剧情还没通关,就开始厌倦了。

  • 11 月 10 日,Damnation(PC)通关
    要我说就是个中规中矩的游戏,一如 2008 年的 turok,可玩可不玩,看档期。不过入选了 2009 最差游戏榜,有点意外。是游戏业的整体素质提升了,还是我的口味下降了?

  • 12 月 20 日,Dragon Age: Origon(PC)通关
    刚刚通关,新鲜热辣。年度最佳 RPG,没有之一。BioWare 金字招牌不是盖的。如同精彩的小说,不看两遍以上都不好意思跟人说看过。有机会必入。只是一个作品拆成一个零售版加两个插件分别卖,要获得完整体验越发昂贵了。期待元月的 Mass Effect 2。

  • Patapon 2(PSP)弃于最终 boss
    和前作一样,没有通关。不是游戏不好,是我对要靠“刷”才能通关的游戏的忍耐度比较低。

  • 正版
    在 steam 上买了 $9.99 的 MassEffect(PC);托 S 君帮忙买了 World of Goo(PC);离开东京前买了二手的恶魔城:被夺走的刻印(DS);借着朋友出国的机会拜托买了 Amazon $5.97 的 Jade Empire(PC)。对比去年的购买清单,遗憾的是 Dead Space 价格一直很坚挺。Prince of Persia 没有什么动力要入了。

2009年12月17日

换行 bug

今天同事求助调试一段 bash 脚本。脚本甚是简单,只有十余行,但是执行起来却是莫名其妙的错误。

bash --debug ./xxx.sh 调试之,竟然两处空行有错误。

以十六进制查看源码,空行处见 0d0a。遂于同事 UE 中(同事惯于 windows UE 编写,putty 调试运行)点选菜单,将 CRLF 统换成 LF。竟然问题依旧。

我自然是 UE 新人。同事又操作一遍 CRLF -> LF,运行,依旧。

此时以十六进制再看源码,空行处竟有 0a0d0a 这等混乱不堪。

祭起 emacs,paste 源码到新文件,执行,无误。

CRLF vs LF 已是老生常谈,调试此 bug 前后也只十余分钟。只是不知用 UE 是如何造出 0a0d0a 这等换行符了,阿弥陀佛。

2009年12月14日

忍受 winmail.dat

生存在满是 outlook 的世界里,难免要应对 winmail.dat。

什么是 winmail.dat,mozilla 知识库的这篇 wiki 已经说的很清楚,而且也给出了一些解决方案。之所以还有这篇文章,自然是遇到了问题。

同事发来邮件里的 winmail.dat,LookOut 插件解析出错(thunderbird 3.0 的话暂需到这里下载试验版本);tnef 在解析过程中会丢掉文件名和 MIME 信息,导致不仅处理同名十分繁琐,而且解析出来也还要猜文件类型,很是麻烦。

好在跟 tnef 类似的工具还有一个 ytnef,aur 可以直接安装,虽然似乎比 tnef 还要久不更新但试用下来却效果很好。唯独解析出来的文件名都还是 gbk 编码,如果你也用 utf8 的 locale 的话,可能还需要 convmv 一下。这里给一个自用脚本,将 winmail.dat 自动解析到 ~/desktop/winmail/YYYYMMDD_HHMMSS 里面,设定 thunderbird 用这个脚本处理所有 .dat 文件,世界可以变得美好一点了。

#!/bin/bash

TMP=/tmp/winmail/
LOCATION=~/desktop/winmail/

rm -rf $TMP
mkdir -p $TMP

ytnef -F -f $TMP $1
convmv -f gbk -t utf-8 -r --qfrom --notest $TMP

mkdir -p $LOCATION
mv $TMP $LOCATION/`date +%Y%m%d_%H%M%S`


p.s. ytnef 的返回值很诡异,没见什么异常返回值居然也不是 0。

2009年11月4日

带套上推

一,

套者,tor 也。善套者,非套之美,迫于耳。

上次带套上网,已是远赴东瀛之前。今年 3 月归国,许是托着洋大人的吉祥,沐着逢奥运的余恩,尚得几日苟延残喘。而今虽自有域名,却相见日难。前几日 ghs.google.com 所知十余 ip 竟一并封了,眼见连这点苦水也无从倾吐,只得祭出尘封之套。二载有余,得睹故物,宛若时光凝滞,不胜唏嘘。

士别三日,刮目相看。墙威大涨之下,强悍如套,亦需致信索取暗桥方可奏效。操作手册,网上已是林林总总,windows 或 linux,不一而足。搜“tor bridge firefox”,自有收获。

唯有一言,tor 已是 socks v5,本无需 privoxy。用 foxyproxy,自有带套向导。启用“快速添加”并绑定到左键图标,甚是方便。

上网无需带套日,家祭无忘告乃翁。

二,

推者,twitter 也。推姚明黑巴而不可得,非推之罪,墙歼之也。

带套上推,本无障碍。另著此篇,缘有捷径存焉。

tweet.im 可携推于 Gtalk,twitonmsn 可携推于 MSN,“推”笑风生,快意免套,善之善者也。唯后者已处墙外,注册仍需带套。

饭否不再,嘀咕转型,微博方兴。墙内生者众口一词,莫谈国是。

2009年10月22日

国王的恩赐,英雄无敌

最近先后通了"国王的恩赐:戎装公主"(后简称公主)和"国王的恩赐:传奇"(后简称传奇)。这才明白为什么大学时总有很多人可以整天整天的玩英雄无敌三。

"传奇"是一年多前的游戏。当时未得其门,以至玩到中后期举步维艰,又懒得修改,索性放弃。"公主"的主角从骑士改成了公主,显然更合我的宅男口味,于是 我便得其门而入了(囧),甚至难以自拔,找来老"传奇"又爽了一遍。

这个类型的游戏,说到底其实是棋类。打个比方,敌我各有两卒,两卒一次攻击可以毙一卒,倘我先手,第一轮先毙敌一,敌剩卒反击只能伤我半卒;第二轮则全灭敌军,我方无损。

当然,恩赐系列实际远为复杂。种族生克、英雄成长、各种魔法、武器道具、宠物技能乃至夫人(传奇)佣兵(公主),玩的就是每战必胜、力求无伤。

回想一年前玩"传奇"的时候,挥金如土任万骨枯朽,视战场逃跑如家常便饭,实在汗颜。

2009年10月21日

纪念 python.org/download

python.org 被土啬了几天了。我并不惊讶,相信广大 python 码农情绪也都还稳定。

但是正如有段时间要搜"该评论已关闭"才能找到 G 点一样,我对土啬的动机总是充满了好奇。于是我尝试敲了个 python.com,很黄很暴力,感谢土啬。我险些以为这就是原因。

但转念一想,为何还留着这么明显的 python.com 招摇于市?即便是手一抖把 python.com 搞成了 python.org,为何还要留着 python.org 的首页却干掉 python.org/download?实在让人难以找到合乎逻辑的道理。

真是如出上海钓鱼大队一辙,不讲道理,死扛到底。

"可是,可是",有人对我说,"你也要看到好的一面,blah blah……"

"是的,是的",我努力回忆着土啬的好,但是实在想不起什么来,只好搬金先生的话当救兵,"那些都是很好很好的,可是我偏不喜欢。"

李敖在复旦说:"当我们有机会,当我们有信心,不要以为共产党不会开放,我们认为他会开放,我们逼他,哄他,骗他,劝他,他会开放。"

我相信李敖。所以,我只是如祥林嫂般,"站在又一座墓碑前,就事论事的劝他,而已。"

2009年10月5日

凑合一下 bin32-google-earth 5.1 的中文字体

bin32-google-earth(archlinux x86_64)从 5.1 开始中文字体就不太正常(如下图),太宽,导致左边的面板占了接近半个屏幕,还没法调节,导致右边地球格外的小。

google-earth chs font

上网搜了一圈,有人说 qtconfig 有人说 ~/.config/Google。试了试,都没啥效果。印象里 4.2 的时候中文字体的问题是在"工具—首选项"里改成英文了事,可惜 5.1 里面去掉了这个选项。也无妨,LANG=c googleearth 运行了一下,效果不错,收藏位置里的中文也能正常显示(如图)。

blog

其实这样也就够用了。兴冲冲跑去修改 /usr/share/applications/googleearth.desktop,失败。Exec 项不 能直接用"LANG=c /usr/bin/googleearth %f"。

放松大脑十秒钟,cat /usr/bin/googleearth,要西,脚本的干活。加一行 LANG=c 搞定。

2009年9月28日

洗洗睡吧

╔═╤═╤═╤═╤═╤═╤═╤═╤═╤═╗
║呜│ │难│皆│和│豢│滤│毙│长│大║
║呼│ │见│言│愚│五│番│诸│城│庆║
║,│ │更│六│民│毛│网│器│献│在║
║洗│ │年│十│于│,│以│,│礼│即║
║洗│ │有│耳│马│ │制│ │。│,║
║睡│ │期│顺│勒│ │霸│ │ │ ║
║吧│ │。│,│格│ │;│ │ │ ║
║。│ │ │ │谐│ │ │ │ │ ║
║ │ │ │ │壁│ │ │ │ │ ║
║ │ │ │ │。│ │ │ │ │ ║
║ │ │ │ │ │ │ │ │ │ ║
╚═╧═╧═╧═╧═╧═╧═╧═╧═╧═╝

2009年9月13日

超越历史,是要被历史践踏的

无知导致失败,眼界导致无知,环境导致眼界,投胎导致环境。


小时候喜欢玩游戏。玩多了就有幻觉,总以为自己会像所有游戏里的主角一样,可以鲤鱼跳龙门,可以野鸡变凤凰,普天之下,舍我其谁。

可是很多时候游戏玩起来也不是那么容易。颇有一些玩友,也包括某个时期的自己,是离了修改工具就不能玩游戏的。于是幻觉愈发严重,弹指之间,笑傲江湖。

终于有一天,当剧情中必然会打败“我”的那个“孱弱”的 boss 和已经佛挡杀佛的“我”面面相觑啼笑皆非一筹莫展时,我幡然醒悟,并说下了这句至今仍自鸣得意的话:
超越历史,是要被历史践踏的。


因为超越,是要付出代价的。用 7% 的耕地养活 22% 的人口是超越。用 30 年走完人家 300 年的路是超越。奋斗多少多少年才能和谁谁坐在一起喝咖啡也是超越。

这句话古人也说过,叫“揠苗助长”。只不过古人可能觉得后果过于明显,懒得再提。

先行一步还是领袖,先行十步或许就成了烈士。再言超越之前,先要掂掂自己的份量。有时太苦太难,不妨把机会留给子孙。

古人说,随遇而安。core 说,不折腾。网友说,洗洗睡吧。

2009年8月16日

www.blog1980.info 试运行

我订阅的博客里,netcasper 用的也是 blogger 的服务。但是在"土啬"猖獗的今天,他的博客仍旧访问正常。引起了我的好奇。原来他用了 blogger 绑定到个人域名的服务。

或许我也该买个自己的域名了。

godaddy 看了看,.info 的域名大促销,第一年的费用仅为 0.89 刀。

这么便宜,不买一个玩玩还真是心神不宁。

买域名并不费力,种种收费促销一律"No thanks",然后直接信用卡支付,非常顺利(之前在线买国外游戏,结果信用卡被 Paypal 鄙视,很是不爽)。

blogger 那边的定制域名设置很简单。godaddy 这边稍微麻烦些,基本方法可以参考 google 的官方指南。但是没想到 ghs.google.com 也被土啬搞的苟延残喘,需要小小的折腾一下——搜"ghs ip",故事很精彩。

目前我用的是这个所谓"一劳永逸"的解决方案,不过实际访问起来 速度不佳,比之 netcasper 慢了好多。或许有更好的解决办法吧,我懒得折腾了。

这个域名只买了一年,算是试运行,域名到期之后怎么办还没做任何打算,目前唯一的作用是不用翻土啬也能看见点东西(寄放在 Picasa 的图片当然还是要阁下自己想办法)。原来的 lymanrb.blogspot.com 域名及链接应该不受影响。

2009年8月6日

赶赶 vpn 的潮流

最近 vpn 突然热了起来,原因之一我不说大家也知道。

alonweb,现在我主要在用的 vpn,个人感觉服务比较可靠,缺点是有每月 1G 的流量限制,不开放SMTP 端口(无法发信)很不友好,速度也不很快。

ultravpn,帐号很容易申请,想想办法拿到证书的话在 linux 下也能拨通,但是拨通了似乎没什么效果,看 IP 我还是在杭州,尚未深入折腾。

acevpn,申请方式倒是挺特殊的(需要写博客,详见这 里)。如 果速度能如名字那样就好了。

前几日在浙大开会。从浙大校园网访问外网要用代理或者 vpn。

访问公司的集群资源,也是 vpn。

玩了这么多年电脑也没碰过的 vpn,最近在我的生活中如雨后春笋。不知该喜还是该忧。

另,networkmanager 的 openvpn 插件不好用。无论是 timeout 设置过短还是其他什么原因,总之在我这里不可用,虽然我用脚本没障碍。

2009年7月3日

MAME 使用须知(续)

MAME 的官方 FAQ 告诉我们,玩 MAME 要与时俱进。最近从 0.129 到 0.132u2 的历程中,lyman 的 rom 和 bios 都出了点问题。之 前的文章提供过一些资源,不太够用,这次再补充两个。

一是 MameChannel,提 供最新版 bios 打包一站式下载,服务很到位。MAME 版本升级之后有游戏变得不能玩了应该首先来这里看看是不是有了新版 bios。

二是 RomKeeper,如果更新了 bios 原来的游戏还是不能玩,八成是该 rom 有新版 dump 出来了。到这里找个新的好了。

2009年6月17日

IT 迷途 (5)

帝都归来,L 老师颇严肃地对我们说,要开始学习"真正的编程"了——用 BASIC 解题。

后来我才知道,能称得上"真正的编程",在于这是奥赛五项之一,大号信息学,理论上跟"走遍天下都不怕"的数理化享受同等待遇。

无论是 BASIC 还是算法,连 L 老师自己也是勉力摸索。给我们讲 BASIC 讲算法,他的办法是依托教材讲语言,然后以题为纲,放任在我们把玩、体会语言的过程中悟算法。

遇到难题,L 老师会尽量用自己的资源去寻找解法,但更多还是依靠自己。小强们以独破难题为荣,以攀比解法为乐。用 L 老师的话讲,能者为师。

得益于这样"开放"的教学方式,我们不仅是解题能力在进步,对于 Apple BASIC 本身的挖掘也越来越多。例如 Ctrl+Shift+P(快速输入 PRINT)等快捷键,例如在尝试更多快捷键的时候找到的 FLASH/INVERSE/NORMAL、VTAB/HTAB 等绝少有书提及的语句,例如 FOR 循环最多只能嵌套 8 层的机能限制,例如 Ctrl+黑苹果+Reset 可以进行自检,例如 PRINT CHR$(4);"CATALOG" 这样在 BASIC 代码里调用磁盘命令的技巧等等等等,只要不是玩得太疯,L 老师并不干预。

此时 L 老师已给我们每人准备了一张个人专用磁盘(Janus 牌的 5 寸低密盘,双面容量 360k,外观如下图),用于存放解题代码。在发放软盘的那个神圣的时刻,L 老师颇自豪地说,磁盘能存很多东西,即使到你们毕业,这张盘也装不满云云。事实证明这类话通常都不靠谱。即使有指甲刀开口的神奇(单磁头软驱无法直接使用 软盘的背面,所以可以手动把磁盘翻过来开写窗再利用),毕业时我的代码也塞满了两张软盘。至于之后不久数据拷贝之风吹满地,软盘走下神坛飞入我等寻常小强 家,则是后话。



起初,我们是每天下午两节课后(14:30)去微机组训练,直到放学。后来,为了备赛,竟得以停课集训。至于落下的文化课,L 老师翻了翻五年级的课本,撇撇嘴说就这点东西我给你们讲就行,然后花了一个星期讲完了五年级的数学内容。

不用上课,极少考试,每天都泡在微机室里研究"奇技淫巧",而且理由冠冕堂皇,这段时光我终生难忘,甚感幸运。

1992 年的 J 市青少年计算机竞赛,是我第一次参加奥赛系统的比赛。很紧张。上午漫长的笔试,因为实在忍不住要去厕所而不得不提前交卷(EQ!EQ!)。下午上机,并不 很大的屋子里满满摆了一圈的 Apple IIe,大家面壁环坐。题目公布之后,每个人都蓄势待发,左食指抚 F 键,右食指抚 J 键,俨然高手对决,争分夺秒。一声令下,噼里啪啦夹杂着大力敲打空格键的"哐哐"之声立即此起彼伏,场景颇壮观。由于备战充分,上机题目对我来说并无难 度。看到某题,按正常思路要用到 9 层循环。偷偷瞄了一眼旁边几个正在调试代码的外校选手,无不是在盯着一排整齐的 FOR 语句和 RUN 起来从未见过的错误提示而困惑不已。我不由心下窃喜。这次比赛,我拿到了 J 市小学组的个人总分第七名。

至 1992 年暑假,赴 S 市参加东北城市少儿计算机竞赛。大概属于少年宫编制的这次比赛很诡异。赛前很久,赛题和规则竟然就以明文下发:大概要做一个类似现在的数据库应用程序,实 现简单的增删改查。如今回想起来,这种应用型的竞赛之所以开卷,大抵是为了参赛队伍进行技术攻关,实现数据的磁盘存储、检索等。但当年的题目描述却没有明 确说明,典型的需求不清;而当年的我也绝没有水平理解到这个程度。组里讨论来讨论去,一致觉得此题颇易。于是比赛变成了:代码烂熟于胸,跑到 S 市,上机飞速录入,举手示意答题完毕(提前有加分,我第一个举的手,两小时的规定时间我大概只用了二十分钟)。当然,我也只是实现了基于数组存储的增删改 查,数据的生命周期和应用程序等长,根本没有数据持续存储的一行代码。赛后组委会开了很长时间的会。大抵是没有料到我们会做出这么个东西来,而回头看题目 确实又语焉不详。开会的结果,我们拿了一等奖。能有这个结果,大概其他选手交出来的东西也都多少偏离了题目的初衷。

对于我停课集训一事,班主任一直颇有微词。有了这样的成绩单,无论是我还是 L 老师都可以无虞了。

2009年5月26日

debug 故事之二——“wireless switch”

自从 2.6.29,本本的无线网卡(ath9k)就不能上网。正巧 2.6.29 刚出来的时候另有一票人在邮件列表里抱怨无线网卡的问题,我便以为这是个普遍现象,在群众雪亮的眼睛前不久就可得到修正。

等啊等啊,一等就到了 2.6.29.3,问题依旧没有改观。而此时,邮件列表和论坛里的其他案例早都消停了。

我讨厌一个人的战斗。但我决定不能傻等。

症状:networkmanager 无法搜索到无线信号。停用 networkmanager,手动 iwlist scan 也一样。

病历:
1、分析其他 2.6.29 无线网卡问题案例,安装 crda 和 wireless-regdb 并进行相应设置,无效。
2、找到了 Linux 无线驱动的官网,在 2.6.29 下编译 daily build 的 compat-wireless,无效。
3、刚好手边有块 pcmcia 的无线网卡(ath5k),发现在 2.6.29 下可以正常使用。
4、设置不变,降级回 2.6.28.x 问题消失,升级到 2.6.29.x 症状出现。

似乎是 ath9k 的问题。或许是 2.6.28 -> 2.6.29 引入的 regression?我决定给 kernel 报 bug

马拉松式的诊断开始:
1、根据 John W. Linville 的建议编译 2.6.30-rc5,无效。
2、在 Luis R. Rodriguez 的热心指点下,看 dmesg,看 irq,无果。
3、打补丁,编译内核。
4、重复 2、3 步。

几经周折,收效甚微。Luis 似乎也懵了。

算了,为了不耽误找工作,先回到 2.6.28 待着吧。

直到昨天。2.6.29.4 出世,手痒。没有惊喜。

百无聊赖,翻了翻自己报的 bug,回味着 Luis 说的 dmesg 看不出有什么问题。

或许是 networkmanager 的问题?虽然不信,但是有病乱投医,索性看一下。google 告知 networkmanager 的日志记于 /var/log/daemon.log。

对比升级前后的 log,2.6.29,"deactivating device (reason: 2)"之后再无消息。

这"reason 2"啥意思?扔给 google,帖子若干。一篇 Acer 本的用户提到 rfkill 模块导致了他上网有问题

"rfkill"又是啥?翻开内核文档(Documentation/rfkill.txt),这东西是给有无线开关的本预备的。

开什么玩笑,俺本上只有蓝牙开关。rmmod rfkill,说 ath9k 依赖这个家伙。全都卸了重新加载,发现 ath9k 会自动加载 rfkill。问 google 能不能用参数关闭 ath9k 对 rfkill 的依赖,google 顾左右而言他。

心里琢磨着"又是一条死路么",打开了本上的蓝牙开关。

networkmanager 欢快的给无线网卡张罗起来。

难道我一直以为是蓝牙开关的,实际上……赶紧检查本上的个开关,上印"W"一个。上富士通官网,图例说,该开关名为"wireless switch"。



还不死心。问妻的本上有没有类似开关。答曰有,同时控制蓝牙和 wifi。

唉,我这个土人。真是对不住 Luis 啊……

2009年5月11日

IT 迷途 (4)

1991 年的夏天,一件重要的事发生了——我参加了那年的全国少年儿童计算机应用竞赛,一个我一度以为就是 NOI 的比赛。

参赛的名额只有两个。大师姐二师姐当仁不让。L 老师很想再带些苗子出去见见世面,但也很犹豫。组里剩下的四小强都是刚刚念完四年级的小不点。此去先取帝都,再战廊坊,舟车劳顿,人地生疏。这事放在今天连组织个春游都要犹豫再三的教育工作者眼里,就是天方夜谭。

当然 L 老师也必须征求家长意见。家长会的结论,我随两位师姐赴京,没有参赛名额,目的是涨见识。我一直相信这机会是我老妈给我争取来的。她过人的战略眼光曾数次改变我的人生轨迹(比如 1987 年老妈托关系把我送入离家 5 公里的 J 小学),这次也不例外。

师徒四人就此上路。

这是我第一次坐长途火车,硬座。那时从东北老家到帝都的火车要跑上大概两天一夜。我仍然记得前排顺窗口扔盒饭溅在我胳膊上的菜汤,打扑克输了请大家吃西瓜(真是没拿我当小孩啊~),以及到了北京某招待所的第一晚,躺在床上却依然咣当咣当在颤的感觉。

在北京,我们和 Y 中学的 T 老师、Q 学长和 Y 学长汇合。

T 老师是位很和蔼的女老师。二师姐毕业之后还专门去 Y 中学投奔了她。只是好像她不久就退休了,Y 中学的计算机竞赛便从此无人挑梁,这是后话。

Q、Y 两位学长都是清瘦的帅哥。Y 学长多数时间都无视我的存在。但 Q 学长会在闲暇时问我所学,并加以点拨。如今想来大抵是 Q 学长更年长成熟,因此更平易近人吧。L 老师要务所累无法分身那日,更是 Q 学长带我乘地铁(貌似当时只需 5 毛钱)去石景山游乐园玩了一圈。石景山游乐园,此生只去过那一次。现在回想,隐约记得过山车,竟忆不起是否坐过。反倒是联合大作战的街机,我竟侥幸比 Q 学长活得久些,历历在目。真是天生的宅男。

参观了当年令人震撼的 Apple IIe 控制小车走迷宫,也算不虚此行了。

但 L 老师毕竟神通广大。

他在比赛的最后一天,为我争取到了上机的机会。

工作人员看了看我的年龄,指给了我一台 Apple IIe——一台操作环境里甚至没有光标的 Apple IIe。没有光标!!对于 LOGO+一点点 BASIC 就是全部的我来说,这样的环境陌生到难以想象。

其实那只是个指法游戏。

“一架拖着字母的飞机自屏幕上方飞过,按下相应键即可令位于屏幕下方的高射炮命中飞机并得分。定时长,算得分。”没有光标的那一页如是说。

我却没怎么看那页说明,习惯性的按了回车——直接进了游戏。或许这习惯在我时常浪迹游戏厅(FC,计时收费)的经历中不难找到根源——时间就是金钱,反正外文也看不懂——但在大多数场合下却绝不是好习惯。

于是我无动于衷地看着飞机一架接一架的飞过,花了大概一半的计时搞清楚这游戏到底要干嘛,然后开始措手不及。

游戏结束。工作人员拍着我的肩膀说小朋友以后还有很大潜力,然后给了 L 老师一个诡异的微笑,我的赛程到此为止。

如果换作 LOGO 绘图,结果或许会更好些。如果我说没看清楚题目而要求再来一次,结果或许会更好些。如果……

只是现实中没有如果。遗憾的发生大多源于情商的不足而非能力的缺憾。我也只能后来自己写了好些个类似的指法游戏来安慰自己。遗憾的是,忽视文档的糟糕习惯却并未因这次触动而有所变化,真正学会并习惯于动手之前、提问之前 RTFM,对我来说,实在是个漫长的过程。

但 L 老师的神通不仅于此……

他竟然为我搞到了一张优胜奖的证书!一张写着我的名字,卡了科技部、教育部等五个国字号鲜红大印的证书!一张让平素威严有加的 L 老师也眉飞色舞的证书!11 岁的我心花怒放。

多年之后我才明白,有些经历,来得太早,虽然不见得是坏事;但是来得太容易,却绝不见得是好事。喜忧参半,我的 IT 生涯步入了一个崭新的时代。

2009年5月10日

碎裂的液晶屏

液晶屏碎掉对 lyman 来说并不常见。上次 lyman 看见液晶碎掉还是小学,电子表。断裂处的液晶像黑乎乎的墨水一样溢开。

这次牺牲的是曾经为 lyman 服役相当一段时间的康柏经典 12 寸小本 N410c。它自从 lyman 有了新欢 Fujitsu MG75X/V 之后就一直担任下载机的任务。回国的时候在成田机场由于严重超重狼狈不堪而索性选了海运,却未料真的难逃厄运。

好在尚无他恙,下载机仍可胜任。

2009年5月8日

IT 迷途 (3)

寒假结束之后,我成为了微机组里的六名骨干之一——这意味着,我有了在微机组的固定个人用机——一台 Apple IIe。

Apple IIe 的键盘比之 Laser 310 自然强了不止一个档次,唯独空格键仍略显美中不足——那个硕大空格键需要颇有技巧地点击中央才能按下。而且即使“正常”按下,也免不了弹簧、铁丝和塑料键帽合成的“哐哐”的震动声。起初 L 老师颇心疼,曾明令要求禁止“哐”声出现。但设计上的缺陷毕竟难以克服。代码写得得意忘形的时候,又有谁会耐心地去侍候吵闹的空格键呢。渐渐的 L 老师也就由我们去了。

当年组里还有两台短键程 Apple IIe,类似今天的超薄键盘或笔记本键盘,键高只有上图一半的样子,手感一流,空格键更是按哪里都没问题。能在“哗啦哗啦”的柔声细语中运指如飞,羡煞我等“哐哐”旁人。可惜仅有的两台短键程苹果,一台故障频发,不堪久用;另一台是镇组之宝,汉卡、打印机(应该是 Epson MX-80,如图)一应俱全,平常非老师和大师姐勿动。

恰好这段时间,J 小学引入标准差来评价教学成果(现在回想起来 J 小学当年真是够先进)。这就要求教师们除了平均分,还要计算标准差。而后者的计算过程太过复杂,手算既慢又容易出错,于是老师们纷纷求助微机组。L 老师有现成的 BASIC 计算程序,但是考试成绩仍需以一堆 DATA 语句的形式录入电脑,是必不可少的体力活——体力活自然要找男生来干。为了让计算结果能够打印出来,L 老师也只能委屈大师姐,迁就我等民工。

而我也干得不亦乐乎。虽然我根本不懂标准差的涵义,甚至尚未开始学习 BASIC 而完全不懂也不记得那段程序,但是能够在包括自己班主任在内的各年级老师面前,亲手展示“微机几分钟就顶大半天人工”的神奇,让我觉得自己光芒万丈——虽然我只是个敲 DATA 的,但也多少代表了点先进生产力。

2009年4月27日

山寨 Firefox

ArchLinux 里,从源里安装的 Firefox 一直都无法在 spaces.live.com 正常编辑文章。这笔烂帐我一直都算在微软头上——因为换了 Opera 也一个德性,我便以为微软只支持自家的 IE。

前几日忽然想起 User-Agent 这么个东西,就 about:config 看了一下。

general.useragent.extra.firefox,默认键值 GranParadiso/3.0.9。

GranParadiso 或者是 MineField 都是 Firefox 的开发代号。自从 2006 年的商标事件之后,一堆山寨 Firefox 出现了,最著名的当属 debian 的 Iceweasel。ArchLinux 没心思起新名字,就直接用 codename。

显然 spaces.live.com 没功夫搭理这些山寨 User-Agent。把 GranParadiso/3.0.9 改成 Firefox/3.0.9,问题消失。看来作为一个 Firefox 用户来说有点冤枉微软了。好在作为一个 Opera 用户我可以继续鄙视它。

2009年4月24日

IT 迷途 (2)

1990 年,我四年级。不知是哪根筋不对,在选择寒假集中性质的兴趣小组时,又报了微机组。

此时 J 小学微机组的主力机型已经换作了 Apple IIe。原来“投影仪”的位置也改成了中华学习机。仅剩的几台 Laser 310 被摆在窗边,绝大部分时间都盖着白布。而教授的课程,也从简单的 BASIC 变成了 LOGO 绘图。

整个寒假,我们都在老师的指导下,参考一本封皮上印着一个机器人、大抵名为《少年 LOGO 语言》的书,把玩着 LOGO——有时候是学了几个命令就照着书上的例子敲,有时候是老师在黑板上画个图形让我们想办法画出来。

在这个冬天的 LOGO 世界里,没有数据类型(时至今日我依不清楚 LOGO 里面到底有哪些数据类型),没有算法(书里倒是提及递归,那段“飞龙曲线”是当年最看不懂的一个例子),有的只是图形,图形和图形。

LOGO 是如此的古怪,以至于很难用功利的眼光去打量它的价值。学 LOGO 到底有什么用处?几何启蒙?或许有一点(我还真为了 LOGO 绘图去买了个量角器,用了一次发现在弧状的屏幕表面实在很难测量之后就再也没用过),但恐怕不那么明显;计算解题?或许 LOGO 可以做到,但我从没有被往这方面引导过,更没有这样做过;而至于培养绘画审美、艺术情操之类则更是没谱的事情。哦,对了,或许对于中国孩子来说,多少还能记住几个英文单词。但当年微机组里没人懂英语,包括 L 老师在内——所有人都是在硬记命令。且不说有了 FD/BK 这类简写之后没人记得它们其实是 FORWARD/BACK 的缩写,就连 GOODBYE 这样的命令,当年我也是按 GOO-DBYE 这样记的。

郑渊洁说,教育成功与否不应该看分数,而应该看是否让孩子对学科产生兴趣。如果采用这个评价标准,我生平学过的大多数课程都不及格。但 LOGO 显然不同。如酱爆所说,LOGO 已然“燃起我心中的一团火”,炽烈持久,至今未泯。或者说,沉迷其中,无法自拔。

那是第二课堂在摸着石头过河的年代,来之不易的可以 just for fun 的机会。同样是玩计算机,今天的孩子们可能就不再如我当年那般幸运——微机组早已有了更加耀眼的“信息学”招牌,教学大抵也该很有章法了吧,一如早已先行的数理化。

当年供领导视察、媒体采访专用的几幅 LOGO 名作——如荷塘月色、孔雀开屏等——今日已很难找到(老家的相册里应该还有一张孔雀开屏,有机会补上),只好信手涂鸦,just for fun。
REPEAT 36 [ REPEAT 3 [ FD 180 RT 120 ] REPEAT 3 [ FD 200 RT 120 ] RT 10 ] HT



修订:补上著名的孔雀开屏。

2009年4月20日

IT 迷途 (1)

1988 年,我小学二年级。J 小学的各种第二课堂正如火如荼。冬天的时候,年级选派学习拔尖的几名同学参加“微机组”,我有幸其中。这是我有生以来第一次步入 IT 领域。

那时微机室的铁门极厚重(俨然是防盗,那年头的电脑确实是不得了的贵重物品),整个机房用红色胶皮铺地(或许是出于绝缘的考虑?),上机要换拖鞋,老师着白大褂。这种超科研的感觉一直到我从 J 小学毕业没有变化。

当时的微机室配备了大概 20 台左右的 Laser 310(看起来大概是这个样子),是微机室的全部家当。


这种以 Z80 为 CPU 的 8 位机开机就有一个内置的 BASIC 编程环境。虽然可以使用普通电视作为显示器,但极低的分辨率加上普通电视 30Hz 的刷新率简直就是视力杀手,所以除了一台之外(放在微机室最前面,有点今天投影仪用机的感觉),大部分 Laser 310 还是配备了专用的单色(绿)显示器——这种显示器余辉很长,即使刷新率不高也不太会有闪烁感。

当时我们二年级的小嘎豆们(大概十个人)分到的就是这台“投影仪”机。微机室里同时上课的有各个年级几十个孩子,老师没有太多精力管我们,于是我们的任务就是熟悉键盘,按顺序输入 26 个英文字母。Laser 310 的键盘手感极差。肉乎乎的需要很大力气才能按下去。就算按下去了也经常是要么没反应,要么出来一堆。十个人,连玩带抢,一次课大概难得输入两排完整的字母序列。

这样上了几课之后,索然无味。东北的冬天,夜幕降临得很早。为了这样索然无味的第二课堂贪黑实在无趣。没有兴趣,又没有压力去做的事,自然不会持久。我和 IT 的第一次亲密接触就在这个冬天不了了之,一别就是两年。

两年后,Laser 310 逐渐隐退,我也再少有机会触及如此古董。下面这段,是我记忆中在 Laser 310 上敲过的(嗯,当然是抄书,而不是自己写的)最深奥的代码。
10 FOR I = 0 TO 2 * 3.14 STEP 0.2
20 PRINT SPC(16 + 16 * SIN(I)); "*"
30 NEXT I
40 END


后来在东京工作,跟某年长的日本同事聊天时谈及自己曾经玩过 Z80,他大为惊讶,进而质疑我向公司隐瞒了年龄。

2009年4月16日

梦析四句教

最近睡得不实。前夜里翻来覆去的是王阳明四句教
“四句教”是王阳明晚年对自己哲学思想的全面概括,即“无善无恶心之体,有善有恶意之动,知善知恶是良知,为善去恶是格物”四句。

一、人性无善恶,人事有善恶。从无到有,一念之间
二、善恶难辨,良知难明。三十而立乃敢拍胸脯称可独立思考者,吾固不在列,所知亦不过寥寥。
三、人在江湖,世道沧桑。明善恶而能自持,是为坚强的理想主义者,可谓高尚;善恶之间能纵横捭阖,游刃有余,而引人向善,方称格物。知行合一,谈何容易。

2009年4月13日

东京印象——泊

“泊”在日语里的意思是“宿,过夜”。出门旅行,找个客栈住一宿就叫“一泊”。

在日本出游,住宿费用很可能比路费还要贵。3k 日元一泊,已算是非常非常便宜的宾馆(青年旅社或民宿除外)。这个价格(约人民币 200 元)在国内不难找到双人标间,但是日本的“泊”是按人头算钱的,两个人一个标间的话,实际要掏 6k 日元。

一泊的费用,会根据淡季旺季、是否包含早餐晚餐、是否有温泉、是否可以直接看到景点等因素差异很大。3k 日元的一泊,大抵属于基层商务人士出差的落脚点,房间比较小,没有早餐晚餐,当然也没有温泉;如果是景点附近,加上有公用温泉风吕,则至少需要 6k 日元;如果客房内能直接看见富士山,再加上地道丰盛的日式早晚餐,1w 日元以下绝难找到;如果再加上客房内专用温泉的享受,那就要看能不能接受 2w~3w 日元的价格了。

日式早餐,点击图片查看更多

宾馆的露天风吕一般都在楼顶,晚上可以泡着温泉看星星,白天可以泡着温泉看风景。宾馆一般都会配备日式浴衣,无需自备。

日本宾馆的客房有洋室、和室之分。最大的区别就是睡床还是睡榻榻米(其实就是睡地上)。和室是日本传统客房,客房内全榻榻米,早晚会有服务生负责收拾、放置被褥。有些旅馆还有和洋室,这种客房睡觉还是用床,但划出了一块榻榻米区域,可以赏景喝茶。

和洋室的和室部分

国内出行找携程,日本当然也有类似的网站,如じゃらんyahoo楽天等。lyman 在じゃらん预定过几次宾馆,感觉じゃらん对宾馆的各方面评价还是很靠谱的。

只要有预约,宾馆门口会早早立上写有“欢迎 xxx 阁下”的牌子。

2009年3月27日

另一片神奇的土地

转一则最近的日本新闻
泥酔学生下車し凍死、タクシーに賠償命令 松山地裁

2009年3月25日22時41分

 松山市の山中で07年、愛媛大学医学部の男子学生(当時23)が凍死したのは個人タクシーの運転手(64)が泥酔した学生を現場付近に降車させたためだとして、遺族が慰謝料など5千万円を求めた訴訟の判決が24日、松山地裁であった。武田義徳裁判官は「最寄りの警察署などに降車させるべきだった」として安全配慮義務違反を認め、約4100万円の支払いを命じた。

 判決によると、学生は07年12月21日夜、松山市内で友人らと酒を飲み、22日未明、帰宅するため1人でタクシーに乗った。運転手は松山市玉谷町の国道で降車させ、学生は約200メートル歩いたところで石手川の河原に転落して凍死した。降車場所は学生の自宅から約4キロ離れた山中だった。

 裁判で運転手側は、降車時の状況について「学生が停車を指示し、『間違いないのか』という問いに対して『ここでいいです』と答えた。酔っているようには感じなかった」と主張した。しかし、判決は、学生の飲酒量やタクシー内でのやりとりなどから「学生は泥酔しており、運転手も認識していた」と認定。こうした主張を退けた。

 そのうえで「運転手は現場付近の地理に詳しく、泥酔した学生を降車させれば、転落や凍死の危険性があることは明らかだった」と指摘した。

其实不懂日语的人大概也能猜出大意:23 岁的大学男生跟朋友喝了个烂醉,凌晨回家的时候打了个车。下车之后走了没多远摔倒,然后冻死了。死者亲属起诉的哥,要求赔偿 5kw 日元。法官判的哥赔 4100w 日元(就是文中的“慰謝料”,这个数字相当于一个 30 岁白领年薪的 10 倍左右),理由是司机没有尽到安全考虑义务。法官还认为,“可以把人送到最近的派出所之类的地方”、“作为的哥,对附近情况很熟,应该知道醉鬼下车有滑倒冻死的可能”。

我常感叹天朝是一块神奇的土地。仅就这个孤立的事件来看,日本也算是另一块神奇的土地了。但愿对于大分中国研修生事件(延伸阅读),日本法官也可以一视同仁。

2009年3月25日

官话

我一直以为“办证”这个词是底层劳动人民智慧的结晶,难登大雅之堂,只能用油漆刷在墙上。

看来我土了。摄于上海浦东国际机场。

2009年3月22日

盲极客

回国无事。检查日本手机中的数据时翻出了这张照片。2009 年 1 月 23 日摄于下班电车途中。

从外形看,应该是松下的本。

2009年3月12日

亲历日式服务案例两则

零、

来日之前,长居美帝的 R 君经日本回国,在北京我当时的住处辗转停留,对在东京所享受的服务赞不绝口。我以为过誉了。

一、

去关西旅行,从网上订了夜行巴士的票,便利店付款。家附近的 FamilyMart 就可以。

一早,便利店,付款。小店员大概是新来的,只给了我一张收据。我倒是没多想——按以前便利店交款买东西的经历,票大概会从巴士公司寄过来或传真过来。

按计划陪妻逛街。

还在地铁里,手机响了。巴士公司的人。(此处省略因日语太差导致的半小时低效电话交谈一千字)。问我是不是没有拿票,能不能回去拿一下票。

那个便利店就在家附近。逛完街回家顺路就可以拿。

傍晚,便利店。小店员不停鞠躬道歉。拿票。刚走出去十米,他又追了出来,把我们叫了回去。

原来店长也要道歉(刚才店长没在柜台)。店长店员两个人郑重鞠躬道歉。临走店长执意赠送我们每人热饮一瓶。

二、

家门口有一超市,名曰 CO.OP(全名日本生活協同組合連合会),因为方便,一搬来就办了会员卡。押金 1000 日元(其实等于是拿 1000 日元入股,去年底还分红了 1 日元)。

如今要离开了,去退卡取押金。依稀记得办卡时的白发老汉叮嘱了好几遍退卡要提前,提前多少倒是忘了,琢磨着提前一个礼拜应该够了。

第一次去。晚上 9 点多。没想到这个时间超市里只有值班收银员。他们说不清楚,幸好水产课有华人阿姨,当了翻译。解释说最好趁白天店长在的时候办这个事。借着有翻译,他们还问了问为啥要退卡。我说要回国,19 号走。

第二次去。为了以防万一,把所有跟 CO.OP 有关的资料都翻了出来。拿着会员章程一看——白纸黑字,退钱需要约两个礼拜。

也罢。人走了,账户还在。不行就把退的钱打到账上。

连说带比划办了手续,还算顺利。被告知大概两周到帐。心想反正只有 1001 日元,便也就如此了吧,有机会再来日本再说,除非新生银行倒闭。

一个小时过去了。手机响了。

是刚才办手续的店长。说他刚才不知道我马上就回国了。说像我这种情况他可以申请马上以现金形式退钱给我。问我能不能再去店里一趟。

第三次去。领钱。服务柜台的所有人鞠躬致歉——让您再跑一趟实在是抱歉呀(其实我步行一个来回只需要 5 分钟),刚才真的是不知道您马上就回国了呀,真是给您添麻烦了呀等等——我最怵的就是这类日式客套。

2009年3月11日

一期一相会,且行且珍惜

一期一会的典故,已忘了最初是从哪里得知(可以参考其他故事解释)。而标题这“一期一相会,且行且珍惜”的用法,或许有更早的出处,但我却是前些日子从云 MM 的签名档中看来的,当下便甚喜之。

而今刚刚结束了关西之旅,距离回国也已进入倒计时。蓦然回首,居东京已近 20 个月,白驹过隙。守望而立之前最后一年读此句,别有韵味。

2009年2月25日

炫目的英雄

小时候看电影看英雄,因为总以为有一天自己也能成为英雄。长大了看电影看配角,因为从某一天起已经发现了生活中的自己并非英雄,而只是配角甚至龙套。

但是电影里的英雄依旧光彩照人。于是“叶问”里只剩下了令人眼花缭乱的甄子丹和咏春拳——樊少皇没有向鬼子告密,池内博之没有切腹,林家栋也没有在干掉了鬼子军官之后被“一小撮不明真相的”的愤怒民众打死。

太完美了。太炫目了。如同看惯了 CCTV 那种集万千优点于一身的人物讴歌之后总是条件反射般欲问还休的那样——真的假的?

于是有意无意地,总想去寻找所谓“真相”。却发现“真相”也有很多。有时候累了,便干脆选择了不信。

或许很多英雄,真的只是时势造出来的。任谁被捧上祭坛,变得炫目而不可企及,哪怕是真的英雄,面对底下被晃瞎了眼睛而窃窃私语的群众,料想也会感到无奈和寂寞的吧。

附:“叶问”删节镜头的 ed2k 链接,目前尚无确切证据表明是广电总局下的剪刀。

2009年2月15日

debug 故事一则

Z 同学曰,“最差的鼠标也比最好的touchpad更有益身心健康”。于是我搞了个无线鼠标回来。

发现 archlinux 不认,指针纹丝不动。

我的脑袋开始飞速运转 debug 起来:
  1. lsusb 能够看到设备。
  2. 偶然发现鼠标按键都识别。
  3. 将鼠标换到另一台机器上,确认鼠标没有问题。
  4. 重新插回来,tail 一下 xorg 的日志,发现认到了鼠标,但是被认成两个设备——一个键盘,一个鼠标。
  5. 由此看来,“认成两个设备”最可疑,但是估计要 hack 出个所以然来比较耗时间,决定先吃午饭。

正刷碗呢,妻在里屋喊,“你这鼠标用着没什么问题啊。”

赶紧跑来看。

原来这种激光鼠标无法用在透明玻璃上(仔细看上图),妻 debug 的第一反应是——找个鼠标垫。

2009年2月8日

linux 休眠进阶

挂起(suspend)和休眠(hibernate)是两个易混淆的词。因为要解释他俩的区别,还是要用到 suspend 这个词。通常,挂起指 suspend to ram(s2r),而休眠指 suspend to disk(s2d)。本文亦不例外。

现在的 linux,运气好的话,休眠是开箱即用的。本文所谓进阶,是以下两个技巧。如果对休眠的基本步骤有疑问,请参考各自发行版的 wiki(比如这里)。

一、如果休眠遇到问题

新人用 linux,最怕遇到硬件兼容问题。而一旦休眠遇到问题,那么八成是这机器的 acpi 支持很烂(对此没有概念的同学请学习本站《第二起跑线》三部曲)。如果你的机器在休眠过程中遇到诸如休眠死机、唤醒异常等情况,那么可以尝试此技巧:
echo shutdown > /sys/power/disk

至于这个“技巧”背后的故事,可以从内核文档 /Documentation/power/swsusp.txt 里找到线索(温馨提示,链接只是为了方便懒人,最新的内核文档应该在内核源代码包里找)。默认情况下,linux 假设 acpi 支持没有问题并使用 platform 休眠机制。改成 shutdown 机制的话,除非 linux 甚至无法正常关闭你的机器,否则都是没有问题的。副作用是你可能会失去一些酷酷的小功能(比如专门用于指示休眠的灯)。

以 lyman 的笔记本 Fujitsu MG75X/V 为例,全新启动的话,第一次休眠必然死机(死掉之后只能强行关机)。如果启动之后先“挂起并唤醒”,则之后的休眠就都没有问题。lyman 一直也都是用“全新启动一次就先挂起并唤醒”的办法来凑合的。采用了上述技巧之后,lyman 再也不用记得每次重启之后都先挂起一次了(忘记挂起的后果也是很严重的)。副作用是原来休眠之后翻开笔记本屏幕就自动唤醒的功能不见了,好在这个技巧并不影响挂起的同样功能。

二、调教休眠速度

或许你已经从无数大道小道消息中获知,想要顺利休眠,最好预留一个至少跟物理内存等大的 swap 分区——这无疑是最最安全的做法。

实际上,你可能已经发现,即使 swap 分区比物理内存小,也极少遇到休眠失败。那是因为,linux 在休眠的时候会按照一个预定值来裁减休眠镜像的尺寸。这个预定值记录在 /sys/power/image_size 中,从 2.6.16 起被设置为 500MB。

来看内核文档 /Documentation/power/interface.txt

/sys/power/image_size controls the size of the image created by the suspend-to-disk mechanism. It can be written a string representing a non-negative integer that will be used as an upper limit of the image size, in bytes. The suspend-to-disk mechanism will do its best to ensure the image size will not exceed that number. However, if this turns out to be impossible, it will try to suspend anyway using the smallest image possible. In particular, if "0" is written to this file, the suspend image will be as small as possible.

还是以 lyman 的本为例,4G 内存,平时内存使用量在 2~3G 之间徘徊,在没改过 /sys/power/image_size 之前,休眠镜像从未大于 500MB 过(lyman 猜测 90% 的桌面用户只要有一个大于 500M 的 swap 分区就不会遇到因为 swap 太小而无法休眠的情况)。

但是 lyman 也发现,有那么几次,当内存使用量接近 3G 的时候,休眠的耗时特别的长(2 分钟左右)。

其实,休眠过程中最占时间的两个步骤:一是生成休眠镜像,即内核尽量释放内存以争取减肥达标;二是将镜像写入磁盘。如果制定一个严格的减肥标准,内核花在减肥上的时间会增加,但是写磁盘的时间会减少;相反,如果标准宽松,减肥的时间短,写磁盘的时间就长。

所以,调教休眠的速度其实就是寻找一个合适的 image_size。这个值恰当与否,跟你的物理内存大小、平时内存的使用量、磁盘 IO 速度、已经分配了多大的 swap 分区都有关系。内核默认的 500MB,我猜应该是对“大多数”人都合理的一个统计结果。

对于 lyman 来说,默认的 500MB 明显偏少(休眠耗时从 45 秒到 2 分钟都有可能)。lyman 现在使用的 image_size 是 4GB(也是因为很保守的留了这么大的 swap)。通常休眠耗时 1 分钟上下,其中减肥时间基本可以忽略,至于磁盘写入——要是我这 ssd 写入也能上百(现在是 90 MB/s)就更好了……

2009年2月2日

MAME 使用须知

对于任何一个喜欢电玩的人来说,MAME 都是一剑在手,天下我有的神器,不可或缺。但神器威力虽强,使用起来却经常限制多多。拿 MAME 来说,如果准备不周,十有八九会碰上诸如“rom 里面缺文件/还需 CHD 才能运行”的错误。

或许你跟我一样,草草地看了一眼官方 FAQ,就满世界翻山越岭去下载了最新的 for MAME 0.129 的 rom 全集(事前提醒,18G…),从里面挑了喜欢的游戏,却发现仍旧无法运行的时候,恭喜你,你和我一样忽略了 bios 问题(再仔细看看官方 FAQ!)。

这里推荐一个好地方,从 MAME 常见 bios 列表MAME CHD 信息,可谓十全大补。

只是小伙 Tim 追到 2008 年一月似乎就停止了步伐,上述站点也定格在了 MAME 0.123,略显遗憾。

也无妨。这里再推荐一个好去处。置顶的几套大合集,真是泽被苍生哪。

2009年1月28日

终极进化形态

对于若干年后人类进化的形态,不二雄在机器猫里提到的要点是:
  • 四肢萎缩。因为体力劳动减少。
  • 头硕大,因为脑容量增加。
  • 鼻毛发达,因为空气污染。

画出图来大概就是这个样子(这张图缺鼻毛——很抱歉实在难以找到漫画上的原始图)。

今天早上不知为何说起这个话题,又头脑风暴了一下:
  • 上肢应该短小灵活,用于敲键盘。
  • 下肢反而应该比较发达,适合长时间保持坐姿。
  • 头应该比较大。

根据以上要点拼出的图应该是……

加上一根强壮的尾巴来取代座椅,很完美的 geek 终极进化形态——然后它们就都灭绝了。

2009年1月27日

64 位 linux 桌面之痒

继续上次换了 64 位 linux 桌面,以下是这几天来又陆续遇到的一些问题。给想尝试 64 位桌面的朋友们提个醒。
  • 没有 64 位 wine。bin32 或许可以用。virtualbox 或许也可以用。

  • 没有 64 位 sopcast 系的网络电视软件。bin32 或许可以用(未尝试),但是想用 gmlive 的话还是挺麻烦——主要是 nslive 死了很久了,也没人更新一下 PKGBUILD。

  • 没有 64 位 google earth。bin32 可以。但是眼下 aur 里少写了一个依赖包,得手动装上。

综上,问题主要在于如果闭源软件不提供 64 位编译版本的话,只能用 bin32 的方式凑合,而 bin32 这个办法既不优雅也不方便,而且大都没有官方维护,遇到问题的概率更大一些。

2009年1月22日

i18n 折腾感受

这个年注定不好过。也好,可以有更多的时间写“无用”的代码和博客了。

去年 9 月接手 giplet,初衷只是想自己用的更方便一点。没想到竟得到些许反馈。或许是因为这辈子为了糊口写了扔了太多无用的代码,只是零星几条反馈就让我很感动,觉得自己应该再做点什么。想来想去,决定加上 i18n 支持,没想到就这么一点点想法也折腾了好几天。

主要问题还是对工具链不熟。

之前为了上手 autoconf/automake,就花了不少精力。好在这方面中文入门资料质量尚可(比如 IBM 的这一篇就不错),遇到更多问题时摘 gnu 官方文档的相关章节细细咀嚼即可。只剩最后一个疑难杂症时,所幸及时读到了 m4 文档中的这一段,便悬崖勒马,很 dirty 很 ugly 地应付了事,至今未知其所以然。

Some people find m4 to be fairly addictive. They first use m4 for simple problems, then take bigger and bigger challenges, learning how to write complex sets of m4 macros along the way. Once really addicted, users pursue writing of sophisticated m4 applications even to solve simple problems, devoting more time debugging their m4 scripts than doing real work. Beware that m4 may be dangerous for the health of compulsive programmers.

如今引入 i18n,实际上也就是要熟悉另外一条开源工具链,具而言之就是 gettext 和 intltool。却未料这类资料如此之少。在代码中应用 gettext 尚有几篇中文,但如何使用 intltool 在一个 autoconf/automake 的项目中加入 i18n 支持竟连英文都鲜可搜到。这里推荐一篇,以期节省大家时间。其实这 I18N-HOWTO 本是 intltool 自己的文档,理应已在灯火阑珊处,只是不知为何 archlinux 打包时竟未收录此文件,此刻给我造成了麻烦——最权威的第一手资料,当然应该在本机文档里,这样的第一反应是没有错的。

提醒一下,这篇 howto 略显过时——如第 7 步,现在的标准做法已经不是在 configure.in 中使用 ALL_LINGUAS 变量,而是单独维护一个 po/LINGUAS 文件——但并不妨碍掌握 intltool 的基本使用方法,所以关于 intltool 这里就不再赘述了。

下面说说工具以外的地方。

给 gnome applet 添加 i18n 支持,需要做到四点:
  1. 代码中的字符串。
    最好办,都是 gettext 解决方案,资料最多,略。

  2. server 文件中的字符串。
    这个文件相当于 applet 的描述文件,“右键 -> 添加到面板”里的文本就来自这里。这里也好办,最终生成的 .server 文件(xml)应该包含所有语言,编译完了看一眼就知道有没有问题。相应的 Makefile.am 里不要忘了“@INTLTOOL_SERVER_RULE@”。

  3. 如果有的话,glade 界面中的字符串。
    glade 的界面描述文件也是 xml,但不会在编译之后就把所有翻译都塞进来。有没有问题只有在运行时才知道。这里需要注意的是,在 python 里,用 gtk.glade.XML() 来创建窗口的时候,如果不指定第三个参数(即文本域),默认会使用当前的 python 文件名。如果这个文件名跟 GETTEXT_PACKAGE 不一样的话,会因为找不到文本域而匹配失败,所以最好还是手动加上。

  4. 如果有的话,其他 xml 文件中的字符串。
    这个是最麻烦的(到现在也没完美解决)。除去 glade 之外,还有一些用于描述界面的 xml 文件也只能在运行时调试。但是它比 glade 的要简单的多——比如在 giplet 里,它只是个右键菜单——所以不是通过 gtk.glade.XML() 而是 applet.setup_menu_from_file() 创建出来的。所以出现了其他所有地方都 i18n 了,就剩一个右键菜单的情况。做了很久的排除试验也没能定位问题。这几天实在没辙了,用中文翻译当“糖衣炮弹”写信向 paul(music applet,也是个 python,i18n 的 gnome applet 项目的作者)求助了一下,但是还没有结论。

上述第 4 条搞定之后,giplet 0.2.0 就可以发布了。如果实在找不出问题就准备很 dirty 很 ugly 地把那个小 xml 文件塞回 python 代码里,拼字符串谁不会……

2009年1月20日

ssd 使用感受

CFD CSSD-SM120NJ(128G),入了已经有些时日了。购买价 19700 日元,按现在日元这么高的位置合人民币 1500 左右——这个价格在国内应该只能买山寨货,虽然 CFD 这个名字看起来也很山寨,但是 CFD、玄人志向、Buffalo 在日本应该是一个档次的东西。

使用感受:
  • 笔记本终于可以想怎么用就怎么用,而不用担心震动了。这个最吸引我。放在膝盖上摇摇晃晃敲代码是很有趣的享受,这才是 laptop。
  • 速度肯定是快了(毕竟标称写 150MB/s 读 90MB/s 哇),休眠唤醒时实测读速度达到过140+,决心以后没啥特殊情况一律休眠了。
  • 不再关心硬盘的温度和节能模式。实际上这 ssd 用 smartctl 能读出来的信息极少,194 温度恒定为零。在 smartmontools 跟上 ssd 之前,smartd 可以省了。ssd 无所谓 unload,启动脚本里的 hdparm 也可以省了。
  • 不再理会磁盘碎片问题。这个本来我也不太在乎。
注意事项和其他牢骚:
  • kernel 参数 elevator=noop 应该还是有用的。默认的 cfq 在高 io 的时候导致过几次短暂的桌面假死,换了 noop 之后只是 cpu 占用率略高。(注意这是我的使用体验而非严格测试的结果)
  • 关于分区格式。嗯,起码现在来看,无论是微软还是 linux 社区都没有现成的小灶给 ssd 吃,所以我也就老老实实用 ext3 了,以期升级 btrfs 时方便些(btrfs 将会是 ssd 友好的)。如果想追求更好的速度,这份来自三星的 pdf 或许有点价值。
  • 买了个 usb + esata 的硬盘盒装原来的硬盘。才知道 esata 作为一种移动存储设备接口居然不带供电,想用 esata 还要单独供电才行(比如再插根 usb 线,唉)。难怪这东西流行不起来……

2009年1月15日

两个外文网络电视软件

第一个叫 livestation,以英语台为主。x86_64 应该可以用,但是眼下 aur 里还没搞定。

另一个叫 KeyHoleTV,都是日语台。看上去应该是刚起步的阶段,界面很糙,音频居然要独占 alsa,用 esd 的话声音断续,而且开一起来 cpu 就 100%,勉强能看。但是居然还专门提供了 linux 的 32 位和 64 位版,日语在线电视应该少有替代品(nhk 的在线播放不支持 firefox),可以持续关注一下。

另,两个软件的 Windows 版使用体验都还不错。

2009年1月14日

换了 64 位 linux 桌面

从 archlinux i686 换成了 archlinux x86_64,起因是冲动了一块 ssd。系统新装,home 文件夹直接 rsync 过去。总的来说,没有遇到太多问题,也没有不可忍受的“缺陷”。
  • skype 暂时没有 64 位版。不过 bin32-skype 可以无障碍使用,只是需要安装一堆 bin32 开头的库。第一次运行的时候发现 100% cpu。用了两招解决掉了,不知道具体是哪一招起的作用:一、禁用了pc speaker 内核模块(在我这里是 snd_pcsp),因为这东西成了我 alsa 的默认设备;二、安装了 alsa-oss 包。
  • adobe reader 暂时没有 64 位版。如果安装 bin32-acroread 的话又是一堆 bin32 开头的库,内嵌到 64 位 firefox 中显示似乎也需要折腾。不打算装了,反正就我的使用程度,evince 应该也够用了。浏览器内嵌支持对我来说也不重要。
  • thunderbird 里的 lightning 和 enigmail 需要换装 x86_64 版本,好在官网都有,不难找到。插件居然不是平台无关的(其他 firefox 和 thunderbird 插件尚未发现问题),有点吃惊。
  • qq 暂时没有 64 位版,不折腾了,不用就是。
  • 新的 X 依赖 hal,把 gdm 加到 daemon 的时候记得写上 hal,否则进了 X 没鼠标没键盘又没配好 sshd 的话,很麻烦。
  • flash 插件已经直接有 64 位可用了,赞。
补,ssd 挺爽。关于用 ssd 的体验稍后再写。

2009年1月10日

画皮和最遥远的距离

如果不扯上蒲松龄,或许这部电影会少很多争议。这部片子从头到尾都在讲跟《画皮》无关的爱情故事,而只是把《画皮》拿来当了画皮——就像“大话西游”跟《西游记》没什么关系一样。

本片几条线索,都是“因为爱你所以必须离开你”式的牺牲。铺垫充分的,如赵薇对陈坤,以及结局时周迅对陈坤;若隐若现的,如戚玉武对周迅;捕风捉影的,如甄子丹对赵薇。在本片竭尽全力试图突出这一主题的情况下,故事被套在什么框架上——是《聊斋志异》里的妖魔,还是 matrix 里的黑客——就显得不那么重要了。

如果你也曾感动于这首被以讹传讹为泰戈尔原创的小诗,那么画皮很可能会对你的胃口。作为这首小诗的电影版,除了陈坤的表演稍显生硬外,一切尚佳。


世界上最遥远的距离
不是生与死
而是我就站在你的面前
你却不知道
我爱你

世界上最遥远的距离
不是我站在你面前
你却不知道我爱你
而是明明知道彼此相爱
却不能在一起

世界上最遥远的距离
不是明明知道彼此相爱
却不能在一起
而是明明无法抵挡这股想念
却还得故意装作丝毫没有把你放在心里

世界上最遥远的距离
不是明明无法抵挡这股想念,
却还得故意装作丝毫没有把你放在心里
而是用自己冷漠的心对爱你的人掘了一条无法跨越的沟渠


或许你会觉得本片很像《读者》上的矫情文章,多了会腻。但是偶尔摘下现实的眼镜看看,也挺感人。lyman 评价——四星。

补,
  1. 片尾曲“画心”很好听,终于有了对超女的正面印象了。
  2. 赵薇表演到位。但是某些扮相侧面看过去我明显看到了高秀敏。
  3. 不知《画皮》为何物的外国友人最是被感动的稀里哗啦