输入法引起的折腾

几天前 ibus 升级到 1.4.99,当时我心中暗想这厮终于升级了,不晓得输入的体验会不会有所上升,另一方面还是挺担心的。跟前几天看了某个 talk 说的一样,Linux 的发行版现在是两个极端,一个是类似 RHEL 这种企业级别的 Linux,企业里面常常买了一个版本之后 N 年都不做 migration,方便的就是下面的码农的 migration,但是随着时间的推移,这个平台几年后就过时了,不少新的软件的依赖关系无法满足。听说百度 migration 做的少,在 Yahoo! 的时候似乎有一些遗留的 RHEL3 还是什么,当时入职已经到 5 了,走的时候似乎也开始向 6 做 migration 了。Amazon 现在的开发环境亦是基于 RHEL5 的,当然为了解决这个 migration 的问题,现在也在考虑一些别的解决方案,比如临时的一种很诡异的做法是裸机上装 ubuntu 而在 ubuntu 里面通过虚拟机建立开发机。另一个自然就是像我等草根装个 debian、Arch 或者 gentoo 之类的在 bloody edge 上做小白鼠。小白鼠的痛苦就是你升级之后没准啥就 crash 了,比如这次的 ibus…

其实类似的惨案很多,前几次包括换了 kernel 之后好像啥硬件没认出来,我只好回退到老的 kernel 上;X 相关的很多包,有的跟显卡驱动有关系,有的跟 3D 加速有关系,有的跟 kernel mode 有关系,有的我也不知道跟什么有关系,往往一升级事后啥图形界面都没了,最过分的莫过于捣鼓那个 kernel mode,眼馋了很久就是折腾不出来,最后也不知道怎么就 ok 了。年轻的时候乐意折腾,到工作了之后,特别是用了 mac 之后觉得似乎可以不折腾了(特别像 X、kernel 之类的,就远离了折腾的范围了),人就变懒了,自己的本本上的 linux 也开始落后落后,万一挂了也用一些猥琐的伎俩弄成能用,指望着 N 个月之后某次升级就 ok 了。

其实我觉得一个比较好的折衷就是把系统级别的东西,直接影响用户 shared experience 的这些 package 弄成周期长的,security 性质的更新,保证每次更新不会产生问题,而应用程序级别的东西尽管来新的,有 crash 也不是很要紧。这种 distribution 可能就是没那么多吧。说实在的企业里面其实要的就是这种模型。从某个角度这类似于一种 CI 的分化策略,在 CI 中,code submission 之后会有一系列的 pipeline 最后将其变成一个 package deploy 到指定的环境中,往往互联网上应用相关的 service、界面、backend 其实都有点在 bloody edge 上的意味(当然,通过 bucket 之后可能只是少量用户受到影响),而支撑它们的 OS 也需要在另一个开发周期的 CI 里面才能保证免受 migration 之苦吧。

不过每个公司的周期的确是不大一样的,这也是为什么大公司诸如 google 需要定制自己的 linux 以保证 OS 的 CI 吧。

言归正传,回到 ibus,这次出了问题我想主要是依赖关系产生的,比如运行 ibus-setup 似乎没有界面出来,相反告诉我 from gi.repository import IBus 挂了,另一个问题大概是 libibus 打包弄的不好,没有为 /usr/lib 里面创建需要的 so 的 symlink,这导致 frontend 找不到 so 挂掉了。前面一个问题倒是让我觉得比较有意思。gi 前面也提到过是 gobject introspection,它需要在 /usr/lib/girepository-1.0 里面存在一个 typelib 的东西,正是通过它我知道少安装了一个 gir-1.2-ibus 的包。现在的 debian 也把这类 package 单独的放在一个 category 下面了。我比较好奇的就是这个玩意有什么用。

事实上,作用也很简单:简化 scripting language 的 binding 工作!也就是为基于 GLib 写的 lib 提供更好的实现 binding 的方式。其大致的想法就是每个提供 gobject 的 lib writer 今后通过一个 scanner 自动的生成对应的 typelib(通过一个 XML 文件来控制),而 scripting language 里面通过一个 gobject introspection 的 library 来 load 这些 typelib 获得需要的“wrapper 部分的数据”,这样就可以直接操纵 gobject 了。原先如果要实现类似的 binding 需要为每个 lib 写一个 binding 的 module,通过这个 module 来 load 对应的 so 来干活,这势必要求写 wrapper 的人对 scripting language 本身的 module 实现很了解,但是到后来其实也是一些重复的劳动了。

OK,很庆幸这个 ibus 这次没有让我太头疼 🙂

下一个问题更久远,也不记得哪个版本的 pidgin 开始,打开之后即便有网络连接也不自动连接了,一直显示 waiting for network …,我必须到 account 帐号里面去掉 enable 然后 check 才行,非常让我觉得不可理喻。决定这次一起解决掉这个恼人的事情。google 大神说可以使用 -f/–force-online 的命令行选项。试了一下 work 了,发现也许是我没用 Network Manager 的原因(orz 为啥一定要用这个玩意!)更汗的事情是找了半天不知道怎么在配置文件里面让 pidgin 无视这个东西。然后突然想起来是不是我真的装了 network manager?因为我一直都是依赖最原始的 /etc/network/interface 这个玩意加上 ifplugd 和 guessnet 自动配置网络,也不晓得什么程序依赖了一下 network manager 就装上启动了(悲催啊!)。杀到 /etc/init.d 里面关闭了 network manager,然后直接起动 pidgin,啥问题都没了!赶紧 update-rc.d network-manager disable 了。

大概是 gnome 系现在要讲究整合,把网络管理也抓上了,但是似乎我还是觉得那个用久了的 fvwm 很好用,不是那么 fan 整合的那么好的 gnome。可能玩 Linux 就是类似玩兼容机,组装车吧,看到整合的很好的东西反而让人觉得失去了“控制力”,出了问题都不知道问题在哪里。

——————
And said, Whose daughter art thou? tell me, I pray thee: is there room in thy father’s house for us to lodge in?

Advertisements
输入法引起的折腾

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s