博文

目前显示的是 2012的博文

lyman 的 2012 游戏总结

照例还是先说通关的:11-10 Mass Effect 3
尽管很多很多很多人非常非常非常不爽男主在这作里毅然决然的纵身一跃,但是个人认为,ME 系列三部曲,一部比一部精彩。Bioware 真是神一般的存在,业界再没有第二家能把故事讲成这样,而动作部分也已炉火纯青,俨然是第一流的水准。Bioware(或者说是 EA?)显然也对自己的作品非常非常非常有信心,DLC 策略运用的愈发明目张胆,却从不降价。ME 3 是我游戏生涯中花钱最多的一款游戏(Leviation、Omega 两个 DLC 跟游戏本体一样贵,而这两个 DLC 我都收了)。但是值。09-17 古剑奇谭
某天妻在 amazon 买小孩图书凑单,于是就买了标价 79 大洋的实体版,初衷是想支持一下国内仍旧坚持在单机游戏领域的开发者们。
所幸游戏本身也没令人失望。画面虽然不是技术流,但是很用心的把很多场景做的颇有唯美感觉。全程配音水准之高更是令人眼前一亮。剧情饱满,支线充足,处处看得到诚意(居然有 7 个多 G 的补丁)。
虽然游戏的激活策略很坑爹,虽然过场颇拖沓冗长,但是妻很喜欢中文 RPG,一路看我通关,值。07-08 bastion
随 HIB 入的,没有预计的那么好,可能是没有多周目的缘故。06-08 刺客的信条:兄弟会
爬爬爬,跳跳跳,意大利的风光真美妙——我猜到了开头,但我没猜到结局——从初代一直陪着男主的女主就被男主给被手刃了(呃,有点绕嘴,不过没有错误),连个 KISS 也没有过。我风华绝代的 ezio 大叔可是满城开天上人间的大 winner 啊。06-02 LIMBO
很棒的小品。风格,氛围,关卡设计都不错。最终的谜题非常意外,不看攻略完全想不到。05-20 星际争霸 2 Starter Edition
Starter Edition 免费,相当于试用装。策略是对的。但是我试用完了完全没有购买欲望是咋回事呢?04-01 Cut The Rope 全三星 (Android)
年度完成的唯一非 pc 平台的游戏。没啥说的。nds 和 psp 已经不知所踪,应该在未知的角落吃灰。03-03 The Witcher
咋说呢,游戏是个好游戏,就是玩起来有点累,现在回想起来可能是节奏有问题。通关了之后一点也没有想要再次通关的欲望。01-18 Shank
爽快的美漫风格小品。01-08 Bullet Storm
很爽快。这类相…

archlinux, gnome 3.6, fcitx

图片
我受够了 gnome 3.6 + ibus 这对组合了。为了尝试新人会遇到的问题,我把 .config/dconf/user 这个文件改了个名字,然后在「干净」的 gnome 3.6 环境里无论如何折腾也呼叫不出输入法。

好在除了 gnome 官方「刻意」集成的 ibus,还有 fcitx 可以选择。我对 fcitx 的印象一直还停留在 3.x 的时代,这次尝试才发现,现在伊能提供的用户体验,比起 ibus 岂止是毫不逊色,简直可以令后者蒙羞。

而整个切换过程也异常的顺利,基本上就是按照 wiki 操作一遍(我这是吃狗食已经吃出斯德哥尔摩综合症了么,呵呵)。

安装 fcitx-rime fcitx-gtk3 fcitx-gtk2 fcitx-qt fcitx-libpinyin fcitx-anthy fcitx-configtool修改 ~/.xprofile 的 export 为 fcitx,注释掉  ~/.Xdefaults-`hostname` 里 URxvt.inputMethod 和 URxvt.preeditType 两行gnome-session-properties 里面去掉自动启动 ibus 的项到 https://extensions.gnome.org/extension/261/kimpanel/ 安装 kimpanel 扩展,重启 X 即可。 通常我对新东西是宽容的,比如 gnome 3(到现在为止我也还认为 gnome 3 整体上还不错)。因为创新终归是件很困难的事,总要有人愿意吃狗食,事情才会一点一点好起来。但是宽容是有底线的,正如狗食虽然难吃,但至少不能超越作为食物的底线。作为一个中文用户,无法输入中文,超越了我的底线。gnome 团队,你们再这样折腾下去,你们的狗食我是不会再吃了。

c/c++:忽略项目代码以外的 warning

很久以前就曾经想让团队在编译的时候都加上 -Werror,无奈一旦碰到项目以外的头文件里有 warning 就很头疼而不得不放弃。

直到今天遇上了一个比较罕见的情况。
同事 F 的代码用到了 protobuf。之前在某台机器上编译的一直没啥问题,今天换了台机器编译就挂了,而且是挂在 protobuf 的头文件里面。查来查去,发现除了 protobuf 之前是装在系统路径下面,现在是装在用户目录空间里之外,别无区别。


可是如果 protobuf 的头文件里真的有 warning,那无论如何都不应该被编译器放过啊。以 google 在业界神一般的存在,难道也会发布出有 warning 的 c++ sdk 么。

资料不多,不过所幸还真有。google 的 protobuf 2.3 还真就是这个德性。有的人自己 patch 了有瑕疵的头文件了事(这种事鄙厂也干过),还有人提到了本文的核心——gcc 的 -isystem 选项。

以前只知道一个 -I。而 -isystem 的作用和 -I 类似,但是会给附带的目录以系统路径待遇。系统路径有啥待遇?而这个待遇,主要就是扔掉各种 warning(标准答案在这里)。

目前看来,有了 -isystem,用 -Werror 培养团队良好的编程习惯应该是没障碍了。

archlinux, gnome 3.6, ibus

图片
archlinux 上 gnome 3.6 了。结果中文输入这块就给搞了个鸡飞狗跳。

gnome 3.6 里,在系统设置-区域和语言-输入源这块管理了很多之前 ibus-setup 的设置,取而代之的,就是 ibus-setup 基本不起作用了。

比如绝大多数中文用户认为是天经地义 ctrl-space 开启/关闭输入法,gnome 3.6 压根就没想到过这种功能。gnome 的出发点是用类似 alt-tab 这样轮询窗口的方式,来轮询输入法。所以只能定义「下一个输入源」、「上一个输入源」。当然,如果输入源只有两个,一个英文,一个中文,那么把「下一个输入源」定义成 ctrl-space 的话,效果也还是一样。

当然上面描述的是 gnome 想要实现的东西。实际送到用户手里,跟他们的想法还是有出入。

比如我用的 ibus-rime,在输入源里根本看不见。而不管我配几个输入源,ibus-rime 始终是生效的,只能用 shift 来切换中英文。而 ibus-setup 现在已经无法给「下一个输入法」设置快捷键了。

还有最近 gnome-setting-daemon 的升级带来了一点意外。之前我是不需要操心启动 ibus-daemon 的。升级了 gnome-setting-daemon 之后,需要自己来做这个事情。写在 .xprofile 里面并不妥当,因为启动的太早了,结果跟 gnome 3.6 集成的效果完全没出来,丑的很。目前我的办法是在 gnome-session-properites 里面自己加了一项 ibus daemon,运行命令是 ibus-daemon -d -x。

总之,目前 gnome 3.6 跟 ibus 之间并没有理的很清楚,功能实现的乱七八糟,不过好在输入中文还是可以的,对于我来说暂时也够用了。就看 gnome 的同学们啥时候能把这事情理清楚了。

最后附一张 gnome 3.6 下 ibus 输入的截图,外观体验的一致性还是不错的。

2 小时半途而废玩 android rom

最近得了个新手机,国货。

跟手里再用的经典摩托 milestone 不同,国产手机本来就少有 cyanogenmod 直接支持,倘若又无强人仗义撑腰(在这里真的要特别感谢 nadlabak,milestone 这样的老机器能有 cm7 可用,当初真是没有选错机器!),就只能忍受国内论坛各种夹带私货的 rom。

现在再用的来自移动叔叔的 rom 算干净的,但也会每次开机都重新搞个叔叔工具箱进来。于是花了点时间看了看能不能把这个东西干掉。

linux 用户么,第一个要怀疑的就是 /etc/init*。各种 find/grep 下来,发现塞了私货的脚本其实写在 /init.rc 里。看到了脚本就好办,三下五除二搞定。

一个顺带的发现是替换启动动画其实很简单,替换 /system/media/bootanimation.zip 即可,里面就是一堆图片+一个描述文件,自己做起来也不麻烦。关键字『best android bootanimation』能给出不少好结果。

重启,结果移动叔叔又回来了,检查 /init.rc,居然恢复成之前的样子了,失败。

看了看刷机 zip 包,里面的目录结构从 /system 起。那么,根目录的这些东西是从哪儿来的呢?看来看去,包里面的 boot.img 最可疑。

file 了一下 boot.img,类型是 data,失败。尝试直接 mount boot.img,失败。放狗搜 boot.img,居然是个大杂烩,跟 bootanimation.zip 的风格一点都不一样,很嵌入式。

顿时有点不想搞了。不过路线看起来还是比较清楚的,gzip+cpio。但是改完了的新 boot.img 是不是就这么塞回刷机包里看起来还是有风险,因为刷机包貌似有个什么签名机制。没来得及细看。

等有时间了再慢慢琢磨吧,奶爸不易。

总结:

做刷机包不是很高精尖的技术。只要能找到准确的文档,照办即可。通常 android 手机拿来第一步都是要刷 recovery 进去。基本上,线刷就是用特定工具配合特定驱动,将手机内置存储分段刷入目的不同的数据块。recovery 就是其中之一。如果要对内置存储重新分区,看起来只有在线刷的阶段做比较安全。所谓卡刷,就是用固化在 recovery 段的代码负责格式化某些分区,并将刷机包的内容部署到这些分区里(比如 /system)。包里面的各种…

责任

前阵子终于将妻连同少爷们接到身边,一家人团聚了。这次和妻的分离,不严格计算下来长达 618 天,创下了我们相识以来的记录。

结果现在就睡眠严重不足了。

段子说『谁发明了婴儿这种外星生物,完全无法沟通,裸机一部,没配任何文档。待机极短,2小时一充,且耗电量惊人,且无法退货更换走三包,随机需要大量周边配件,且铃声很烦,且需要自己慢慢摸索着安装语音系统、操作系统,且还限购哦』,真是所言不虚。

相比之下,工作上的烦心事都是毛毛雨。

曾经年会上有『某某为了项目牺牲小我经常加班结果出世不久的孩子都不认识他了云云』的宣传,把台下一干不经世的码农青年感动得一塌糊涂。此时此地,如果我再做评价,大概会是:『这厮显然避重就轻,不负责任,价值观大大的有问题』。

debug 故事之燃气灶

这次租的房子似乎是很久没人住过了,所以自打去年搬进来,东西就不停的坏——热水器、电冰箱、水龙头、甚至入户的主电缆——所以当最近燃气灶开始不太好用的时候,我很恼火。

症状:打火不灵。电子打火声音清晰,火花可见,但是大概率打不着火。点燃之后使用没问题。

折腾过程如下:

拆电池,用在东京买的 battery checker 测量,两节电池都是 1.5v 满的。发现经常是早晨可以点火顺利,中午、晚上点火困难。致电燃气公司询问是否停气,答案否定。怀疑管道。询问楼上楼下,同管道上下两户都没问题。怀疑是燃气表问题。致电燃气公司要求上门维修。被告知先换电池试试。我则认为电池已经测过没问题,坚持要求上门维修。一家人饿着肚子等燃气公司的师傅上门。师傅来了之后搞了搞灶具的风门,居然就点火成功了。被告知灶具太旧,可能要彻底坏掉。致电房东告知情况。房东沉默良久,说要不换电池试试。我沉默良久,要了灶具厂商的电话。师傅走后果然又点火不能了。模仿师傅调节风门仍然无效。无奈致电灶具厂商客服,询问电池使用时间,答一年。客服说厂家要求都是三个月就更换一次电池的。我坚持认为电池测过应该没问题,客服坚持要求先换电池再说。于是终于去买了两节新电池换上。症状消除。 诊断结论: 电池电量不足,虽然可以产生电火花,但大概率无法推动电磁锁,导致气道不通。早晨容易点火成功是因为电池休息的时间最长。维修师傅搞风门的时候倾斜了灶具,导致地球引力参与了推动电磁锁。而之后我模仿时倾斜角度显然不足。东京买的 battery checker 不靠谱。无论如何,应该先用代价最小的方法尝试解决问题,比如换电池。这次房东真没侮辱我的智商。

乐观估计

不知不觉间连端午都已经过完了。我的计划被完全打乱了。

胖胖的络腮胡大夫说,你的难言之隐,已经无法一洗了之,早晚都是一刀,晚做不如早做。五到七天出院,上班出差一概无碍。
数了数手指头,到端午节还有十天,想着跟少爷们团聚的美好生活,于是横下一条心,开刀吧。
然而事实证明,乐观估计不是只有程序员才会。在医院住到第八天,大夫换药时说,大概还有一个月就能长好了。
于是继续每天跟排便作斗争,异常痛苦;每天门诊换药,风雨无阻。
只是不知道这『一个月』跟『五到七天』是不是一个性质的乐观估计。

写在 0x20 岁

图片
『在苍茫的天底下感觉自己的渺小』

0x11 岁那年出赛香港,看清了自己其实是井底之蛙。于是在某个阴郁的下午凭窗发呆被同学问到时,我这样说。后来这句话被自己不断印证。

大二的时候搞砸了 W 同学介绍的 access + vba 就能搞定的私活,以至于我一直对 W 同学怀有一份愧疚。

第一份工作凭大舅的关系侥幸进了一个一群 geek 凑在一起的公司,才知有 emacs,有 ruby 和 perl,才得其门而入 linux 这个充满力量的迷人世界(之前只会从中关村买些 RH8/9 的光盘装上后发呆)。

然而这也是我成长最快的几个时期。

『计算机技术其实是个倒三角,越往核心内容越少』

毕业出来找工作面某个 ERP 公司时,最后一面的 CTO 语重心长的对我这样说。

我被深深的震撼了。他是那个满眼 web 的浮躁年代里唯一点化我专精路线的人。虽然我并没有去那家公司,也从未记得过他的名字,但我记住了并试图践行他的话。

于是我做过 ERP,做过游戏,现在正在做搜索,但我知道我真正醉心的是硬盘、内存乃至寄存器之间那些 bit 的神奇流动。

『你做的工作你喜欢,这其实很奢侈』

在东京工作时,一起吃饭的朋友这样跟我说。

朋友不是学习好的类型,也不是家庭富裕的类型。朋友夫妇靠刷盘子和在 24 小时便利店打夜工完成学业并留在东京工作。所以在他们眼里,如我这样喜欢捣腾计算机,甚至连日语都不用会就可来日本工作且收入不菲,简直逍遥赛神仙(是啊,又有谁会喜欢整天刷盘子长期熬夜呢)。

但我可能只是个固执的人,小时候碰巧喜欢上了计算机。0x20 岁了仍在一线编码,依旧喜欢。至于自己喜欢的事情能赚到钱,实在是命运垂青。不知道这样的幸运能不能持续到 0x40 岁。

『love yourself first』

电影 Mary and Max 里,Max 手里拿着这样一块饼干。

没有人是完人,所以我可以原谅任何人,却不包括自己。

0x20 岁,我看到自己身上越来越多难以克服的弱点:犹豫,退缩,轻度抑郁。我为这样的自己能否给妻子儿子一个美满的未来忧心不已,为这样的自己能否给父母一个幸福的晚年忧心不已,我无法原谅忧心忡忡却不知如何改进的自己,只能以为终于委屈牺牲了自己,便就是爱。可是却从未仔细想过,如果不会爱自己,要如何会爱别人。

从 0x20 岁开始,学会爱自己。

该不该限制程序员的语言?

该不该限制程序员的语言?当然,这里的程序员肯定不是 java 之于 hadoop,objective-c 之于 mac 的那种,而是像我一样,对于每天处理的任务,从 c/c++ 到 bash 几乎什么语言都能做到的那种。

前几天终于亲耳确认了是老大拍板要把团队内的脚本语言都统一成 python。作为团队一直在使用 perl 做主力脚本语言的我瞬间感觉胸闷。所以下面牢骚居多。

其实老大也明白,像 perl vs python 这样的传统圣战题材,是争论不出个所以然来的。之所以拍出这个决定,是为了减少团队的代码维护成本。这中间我隐隐约约嗅到了点 perl 代码难以维护的意思。

水母 perl 版主 flw 认为,代码维护难度的决定因素是写代码的人,而与语言关系不大。我补充认为,能写出无法维护的 perl 的人,写出来的 python 也靠谱不到哪儿去。

换一个角度,合格的程序员更应该对未知事物充满好奇。在 2009 年刚刚进入团队的时候,我对 perl 一无所知,当时反而是还写过一点 python。这些年下来,perl 沉淀为首选,其实经过了相当漫长的自然而合理的选择过程。与此同时,我也在维护着一部分 python 代码。两者各有其擅长的场景,通过数据而不是语言来耦合,我觉得这样最有效率。如果哪天出现一种在我的任务领域更有表达力的语言,我也一定乐于学习(请复习程序员的三大美德)。

所以当听到对于语言的强制规定时,我的第一反应是团队的人员要出问题。

以我不长不短的从业经历,还真碰到过一次强制规定语言的案例。那是刚工作不久。某元老级网游公司把原来外包给我们用 ruby 实现的支付系统用 c++ 重写了,也是号称为了降低维护成本。结果是以成本导向招进来的驾驭不了 ruby 的人也很难驾驭那个用 c++ 重写的系统。几年后这公司垮了。

这里可能还有屁股决定脑袋的问题。当领导的大概都喜欢整整齐齐的经济林,因为树苗可以批量供应,既便宜管理起来又方便。而在下面当树的,不想长成参天大树的恐怕不会是什么好种子,而经济林里大概很难长出参天大树来。

至于是经济林好,还是原始森林好,这又是个圣战潜力题材。怕是战不出结果的。


食君之禄,忠君之事。我目前正在用 python 重写以前的工具。不过我有两个愿望:第一个是但愿我的第一反应是错的;第二个是能把以前的 perl 代码开源出去。

更新换代

图片
摩尔定律是一回事。家用 pc 的升级换代则是另一回事。
拿 cpu 来说,2006 年买的扣肉 e6300 即使不超频,算 superpi 比之 2011 年末火热的 apu 也不遑多让。2008 年买的 4850,放到现在仍然算是中高端。
所以升级换代的主要动力,其实是内存。即使不讨论 win7 是否吃掉了比 xp/vista 更多的内存(啊,伟大的安迪—比尔定律),在显示器从 2006 年的 1024x768 飙升到 2009 年的 1920x1080 之后,区区 2G 内存对于有些游戏也确实颇不够用了。 
于是,想添加点内存条,发现主板上只有两根插槽。而且现在主流的 ddr3 是白菜价,而过气的 ddr2 反贵上两倍半。倘若要换主板,则 cpu 十有八九也要连坐。
于是纠结了好几天,做了如下升级方案: cpu:amd a6-3670k,799 大洋主板:映泰 TA75M+,549 大洋内存:G.SKILL DDR3 1600 4Gx2,309 大洋OS:win7 64 coem,279 大洋 自己点评一下: cpu 的游戏性能基本没变化(暂未超频),但好歹是 2 核变 4 核了。apu 自带的显卡跟 4850 无法混合交火,目前完全用不上。但为了以后着想。等哪天这套 apu 配置淘汰了,塞到小机箱(所以特意选了块 mini 主板)里给老爸老妈或者自己当 htpc 用应该还不错。终于自己掏钱买了正版 windows(之前用实验室 VLK 的 win 2k3)。除了电影和音乐,机器里再没有盗版的东西了。64 位系统,大内存真心爽,游戏兼容性也不错。就是 windows 平台下原生的 64 位的软件还少了点。合计只要 1936 大洋。2k 预算 i5 配好点的板子不下来,更何况还包括一个 windows。 最后是升级后的吐槽: ssd 坏了。之前不知道,反复装系统排除各种可能折腾了快一个星期,最后 jsmonitor 证实了。网上搜“ssd win7 corrupt”乌殃乌殃的。那些个算来算去说 ssd 寿命好几十年放心用的文章亏心不亏心?有时间琢磨琢磨有没有什么办法能废物利用。win7 安装会自己搞个隐藏分区,这东西即隐晦又坑爹,看了 workaround ,我觉得智商被侮辱了。windows 系列的打补丁方式一如既往的烂。某天上班前点了关机下班回来发现机器开了一天…

临时工奶爸的新春日记

图片
零、

元旦见到少爷们的时候,居然因为太长时间没见而令少爷们惊恐之情溢于言表直至痛哭流涕。

除夕再见的时候,少爷们显然就从容多了。但是保姆回家过年去了。于是我必须承担起奶爸这个角色。

经过除夕、立春、初二、初三的在岗培训,我已经大概适应了少爷们的作息规律,并初步掌握了如冲奶粉,刷奶瓶,装卸尿布,装卸尿不湿,洗尿布,哄少爷们睡觉等多项核心科技。不过相比孩他妈,无论从完成时间、完成质量还是只用单手便能完成任务(另一只手抱孩)来看,我差的还太远。

一、

年初四。
00:56
由于二少爷哭闹,迷迷糊糊爬起来,看见孩儿他妈已然尝试了喂水、喂少量奶粉等招数,正处于崩溃边缘。于是挺身而出哄二少爷入睡。居然就奏效了。然后刷奶瓶。01:42
疑似受大少爷影响,二少爷再度哭闹。孩他妈搞定,我打下手。03:34
疑似受大少爷影响,二少爷哭闹。孩他妈搞定,我打下手。04:38
被“咕咚”一声惊醒。原来是大少爷居然仅靠不断踢被子的反作用力就摔下床。惊起一身冷汗,好在无碍。06:22
两个少爷先后睡醒。少爷们上午的活动时间开始。08:38
大人们轮班吃早餐。我是第一轮。09:30
喂少爷吃小米糊。经常是吃了几口就拼命扭动不吃了。即使顺利也有约 10% 的米糊会落在餐巾上。上午的活动时间结束,哄少爷们入睡。11:40
少爷们睡下之后,孩他妈去洗澡。我在床上等她。迷糊了约一个半小时。醒来发现大少爷今天睡的短。孩他妈洗完澡之后一直在陪大少爷。只好痛苦的把脸扭向一边。然后少爷们中午的活动时间开始。12:15
喂少爷们吃橘子。少爷们吃到酸东西的表情很有趣。大人们轮班吃午饭。13:33
陪少爷们到楼下晒太阳。天冷。仅给少爷们穿戴各种装备就花了 20 分钟。14:37
少爷们中午的活动时间结束,哄少爷们睡下。17:03
二少爷没睡多久,之后一直陪二少爷玩。然后下午的活动时间开始。今天的内容是接待 anmarsha 一家来访。会谈在双方友好的气氛中进行。21:34
喂少爷们喝奶粉。下午的活动时间结束。大人们轮班吃晚饭。洗今天的尿布。打开笔记本处理今天的信息。准备睡觉。23:17
疑似受大少爷影响,二少爷哭闹。孩他妈搞定。我打下手。然后刷奶瓶。 二、
以前经常在家庭妇女的家长里短中听到类似“可苦了那谁谁谁了”这样的话,无聊到爆。现在悟了。大音希声。

现在孩他妈睡着时会发出轻微的哼哼声(比如我极疲劳时睡觉会打呼噜)。手也因为长…