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的用户在等着你,出来给大家笑一个好啦!
为什么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
Linux & Windows
其实在我是一个Linux用户的同时,我也是个比较坚定的Windows党。 啊,有时候我也挺乐意给Windows辩护一下子的。 虽然没用过Mac,不过心里比较不待见水果公司。 另外说句有点迟到的,诸位新年快乐。
还是很菜的。
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化解了。 要么保持数据结构不变,要么就不要将它暴露给别人。
我的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,标签栏在上方。