Category Archives: Linux

关于Gnome3,以及关于项目

心之所在兄的喷文没来,来了个预测文。我也顺势写点什么好了。 我没用过Gnome3的任何组件。不过说起来我了解的其他项目的成功与失败的例子,恐怕会在Gnome3上得到验证。 讲大话是大家都会干的事情,Mock Up更是大家都会干的事情,但是好的RoadMap却不是这么回事。 Gnome3现在主要的情况就在于雷声太大,雨点太小。据李开复讲法,当年Vista也有三个宏伟的目标,现在不禁让人想到WinFS。Gnome-Shell的mock up,看起来是那么的exciting,那个托动窗口让其他窗口靠边,当时真是震撼到我了。我后来虽然投奔到KDE4,当时震撼的感觉还历历在目,给我的感觉就是Gnome3一出来KDE4就不用玩了。 结果呢,折腾折腾折腾到现在,没有任何结果。2.30 = 3.0,看见这图的时候我也以为Gnome3不远了。我找了下日期,2008年6月有人在flickr上传了这个照片,现在是2011年1月。好,这两年gnome在玩什么?KDE4的搞法是全面扔掉KDE3,这开发力量上我似乎就感觉到了不同。热爱KDE3的人自然会fork,现在Ubuntu不就有Trinity,不是吗?Gnome的版本号从2.26刷到了2.32,其实gvfs的出现让我感觉也很不错的,kio的一坨屎一样的性能我就不说什么了。这些本来都有机会成为gnome3的特性,这在坑爹吗?这种东西不应该好好藏起来给大家一个excitng吗? 我们来看看最近另外两个手机项目,Android和WP7,Android一开始的屎样我也有耳闻,就连pop的1.5都还有很多缺失的Feature,慢慢的,缺失的Feature一个个都加回来了。Android也越来越不让人失望了。WP7让人诟病的缺点,比如剪切板,难道不让人感受到这是赶工赶出来的吗?但我相信WP7如果狠狠的加速开发,还是会有巨大前景的。 Gnome的另外一个问题就是GTK,GTK3,哦想和Qt4一起刷版本号?可以,你先刷出来再让人期待Gnome3好吗?我的一个印象是KDE和Qt不是一波人,但是Gnome和GTK更加紧密(讲错请指出),如果集中火力把GTK3搞出来再搞Gnome3,我想事情也不会闹成现在这个样子。 讲大话的缺点就是,到现在大家都没有热情了。看看KDE4的话,有多少软件在KDE4刚出来的时候都还没有移植?我喜爱的KDevelop也一直没有移植,直到最近归来的时候,依然让我激动。K3b也没有。缺胳膊少腿的KDE4,为什么依然坚挺到了今天?4.5才几乎刚刚搞好的Activity,难道不是一个重要的概念的组件吗?Akonadi不也是一个卖概念的好东西吗?Nepomuk不更加是吗?他们也没有一开始就走到KDE的核心,现在概念才一步步走向现实,就连这个过程,都让我这样的用户感觉热血沸腾啊老大! 可以说,KDE4刚出来的时候,崩溃,功能缺失,都让人几乎失望。但是用户的弹性是很大的,Gnome有很好的闪光点,概念也有很好的概念,但似乎违背了一件事,让程序先跑起来,就算是一个婴儿,也不要只你妹的胎教个没完啦,该让它见见世界啦!有这么多喜爱Gnome的用户在等着你,出来给大家笑一个好啦!

Posted in Linux | Tagged , | 12 Comments

为什么Linux下的输入法如此Fxxk

这里不是用来讨论实际算法上的问题的,而是说明一些兼容性的问题。例如你想说输入法不够智能什么的还请不用期待了,这不是本文的关注对象。 先来说说安装问题,众所周知的,输入法安装之后,往往都会提到以下三个环境变量:XMODIFIERS,GTK_IM_MODULE,QT_IM_MODULE。这三个货都是干什么的?为什么要设置这三个货?为什么Linux输入法用起来这么不方便? 这就得从头说起。 首先是XIM协议。更加详细的说明请参考这里:http://www.ibm.com/developerworks/cn/linux/i18n/xim/xim-2/index.html 所有的X程序都应当可以采用XIM作为输入法的协议,这和Qt还是GTK没有关系(X上的Qt和GTK,当然和Windows上的就没什么关系了)。这个协议简单说来就是会把按键事件先交给XIM Server,XIM Server做对应的处理,然后按照处理结果,将输入结果或者按键再交给对应的应用程序。 这里就要提到XMODIFIERS这个东西了,一般来讲,都会设置成@im=xim server name这个值。也就是说,如果XIM Server有多个,那么你可以根据这个变量来指定某个程序是使用这个XIM Server或者哪个XIM Server。这也就是比如fcitx为什么运行两个的时候会提示有同名的XIM Server在运行,是的,这个名称不可重复。 但是Qt和GTK其实都不喜欢这个东西,因为如果需要跨平台的话,这个XServer Only的东西其实说起来并不是那么好使。于是就出现了IM Module这个东西。这个是什么呢?那就是用来处理IM信息的模块,原则上来说替代了XIM的协议,使得按键信息实际上是交给这个模块,然后再交给IM Server(注意已经不是XIM了)。那么如何支持原来的XIM呢?于是Qt和GTK实际上都自带了一个IM Module,这个module负责将它收到的再通过XIM协议和XIM Server通信。 看起来一切都非常美好?我们来说几个常见问题。 1、光标跟随 这个问题不能怪任何一个输入法,事实上由于IM Server负责显示输入框,光标的位置是由应用程序告诉我们的。它不告诉我们输入框在哪,自然也就不能光标跟随。 2、BackSpace按键删除的不是候选输入的文字 例如pidgin的状态吧,大致上,因为这里pidgin为了用户体验,设计了一个键盘的图标,按键时就会让这个图标变化,于是它需要抓取键盘按键,不幸的是它把BackSpace抓走了,于是输入法没有收到BackSpace键,那么自然也不会做应该做的事情。 3、非纯粹的GTK和Qt程序下的问题 比如Firefox,Flash,OpenOffice,Opera。他们在im module上面又包了一层,又或者是自己处理,于是就会出现更加奇妙的问题。 4、非CJK Locale无法输入 我们来看看gtk-query-immodules-2.0的执行结果,以scim和xim为例子,ibus搞了个workaround避过了这个问题。 “/usr/lib/gtk-2.0/immodules/im-scim.so” “scim” “SCIM Input Method” “scim” “/usr/share/locale” “ja:ko:zh” … Continue reading

Posted in Linux, 日志 | Tagged | 8 Comments

Linux & Windows

其实在我是一个Linux用户的同时,我也是个比较坚定的Windows党。 啊,有时候我也挺乐意给Windows辩护一下子的。 虽然没用过Mac,不过心里比较不待见水果公司。 另外说句有点迟到的,诸位新年快乐。

Posted in Linux | 9 Comments

还是很菜的。

API和ABI。 比如c语言的struct,如果struct的大小或者属性的顺序变了,那么以前编译过的程序和共享库之间是不兼容的。 struct s { int a; int b; }; 如果修改之后: struct s { int a; int c; int b; }; 那么如果你按照之前的头文件编译 struct s o; o.b和现在的o.b的地址是不一样的,之间差了s中的c这个长度。那么执行的时候就会得到错误的结果,需要靠重新编译解决。 为什么get和set是有必要的? get和set可以将原有的属性之间ABI的不兼容变化成API。get和set的函数是和包含在共享库当中的,这个函数一定会和共享库一起编译。这样ABI之间的不兼容就被API化解了。 要么保持数据结构不变,要么就不要将它暴露给别人。

Posted in Linux | 6 Comments

我的firefox扩展

其实数量也多到一定程度了。 Adblock Plus,必备神器。 Cookie Exporter,想用wget但是又需要cookie时。 Ease Link,转换迅雷,rayfile,旋风等链接用。 Firebug,不说了,找网络资源,破解简单的访问限制,看http头,万能。 Firefox Sync,同步,firefox4也内置了这个。 Fisson,任务栏进度条。 Flashblock,很多人推荐。 FlashGot,单纯是下载视频挖掘地址方便。 FoxyProxy Standard,代理多的时候。 Oxygen KDE,KDE界面和谐。 Personal Menu,自己整理菜单。 Redirector,自助重定向一些东西,比如reader强制https。 RefControl,破解防盗链图片用。 Smart Stop Reload,刷新和停止是一个按键。 Tabs on top,标签栏在上方。

Posted in Linux | 3 Comments