在有了VPS之后,多年以来的把Blog架设到自己服务器上的夙愿终于满足了。
新的网站地址:http://www.henryhu.net
新的Blog地址:http://blog.henryhu.net
以后技术方面的帖子,在那边会扔到技术分类下,不再单开技术Blog了……
2011年8月14日星期日
关于XIM的那些输入模式
我一直弄不清楚,over-the-spot, on-the-spot, off-the-spot, root-window这帮东西到底有啥区别
今天查了某oracle资料:http://download.oracle.com/docs/cd/E19504-01/802-7789/6ibcsnfb8/index.html
首先这些都是预编辑内容的模式,就是那些你打了但是还没确认的那些字的显示方法……
貌似over-the-spot是在光标处会出现当先的预编辑内容,但是不会把原有内容自动后移,因此新内容显示起来会覆盖在老的上面。确认之后,新的会把老的挤到后面去。
on-the-spot也是在光标处出现预编辑内容,但是会在预编辑,也就是还没确认的时候就把老内容挤到后面去。
off-the-spot貌似是在窗口左下角之类的位置出一个窗口自己显示预编辑内容,反正应用程序不用关心……
root-window据说会在屏幕底下划出一块来显示预编辑内容,莫非是类似从前dos的输入法…… X上没见过。
反正前两个都要程序管,第三个要输入法自己画。
搞这个是因为,今天实现了GeManX对于输入法预编辑的支持,顺路看了看这方面资料…… 因为新ibus好像不关心你程序自己说自己支不支持预编辑,他总是认为你支持,这就导致本来不支持的GeManX没地方显示预编辑内容了……
另,有人知道gtk_im_context_get_preedit_string()返回的东西啥编码么?一定是UTF-8?根据locale?
今天查了某oracle资料:http://download.oracle.com/docs/cd/E19504-01/802-7789/6ibcsnfb8/index.html
首先这些都是预编辑内容的模式,就是那些你打了但是还没确认的那些字的显示方法……
貌似over-the-spot是在光标处会出现当先的预编辑内容,但是不会把原有内容自动后移,因此新内容显示起来会覆盖在老的上面。确认之后,新的会把老的挤到后面去。
on-the-spot也是在光标处出现预编辑内容,但是会在预编辑,也就是还没确认的时候就把老内容挤到后面去。
off-the-spot貌似是在窗口左下角之类的位置出一个窗口自己显示预编辑内容,反正应用程序不用关心……
root-window据说会在屏幕底下划出一块来显示预编辑内容,莫非是类似从前dos的输入法…… X上没见过。
反正前两个都要程序管,第三个要输入法自己画。
搞这个是因为,今天实现了GeManX对于输入法预编辑的支持,顺路看了看这方面资料…… 因为新ibus好像不关心你程序自己说自己支不支持预编辑,他总是认为你支持,这就导致本来不支持的GeManX没地方显示预编辑内容了……
另,有人知道gtk_im_context_get_preedit_string()返回的东西啥编码么?一定是UTF-8?根据locale?
2011年2月15日星期二
Android市场无法开始下载的问题以及解决
在学校的时候,Android市场上的东西下的好好的。回家之后,虽然能显示开始下载,但是从来也不会真的开始……
一开始以为某地被屏蔽,于是开始抓包。但是确定开始下载的时候,连SYN都没有……
去往上查,说要允许5228端口。但是根据抓包的情况,一直只有到mtalk.google.com:5228的连接,怎么看都是GTalk的事情。
其实这里是被误导了,导致我继续研究了好几天也没有结果。
今天猜测是不是这两者有关联。于是研究了5228的情况。在学校可以连mtalk.google.com:5228,在家连不上,看来是这个糟糕的有线通的问题。
于是搞了个变通的办法:改hosts,把这个地址指向我的笔记本,然后在笔记本上用ssh把这个端口通过ssh隧道forward到目的地去,隧道出口在学校,因此就可以连上了。
搞完之后一试,果然能上GTalk了。出乎意料的是,数秒之内,那些下载都开始了……
这是什么意思……………… 你个android市场是要验证用户身份,但是为啥和GTalk捆绑在一起………………
反正最后是可以下了……
一开始以为某地被屏蔽,于是开始抓包。但是确定开始下载的时候,连SYN都没有……
去往上查,说要允许5228端口。但是根据抓包的情况,一直只有到mtalk.google.com:5228的连接,怎么看都是GTalk的事情。
其实这里是被误导了,导致我继续研究了好几天也没有结果。
今天猜测是不是这两者有关联。于是研究了5228的情况。在学校可以连mtalk.google.com:5228,在家连不上,看来是这个糟糕的有线通的问题。
于是搞了个变通的办法:改hosts,把这个地址指向我的笔记本,然后在笔记本上用ssh把这个端口通过ssh隧道forward到目的地去,隧道出口在学校,因此就可以连上了。
搞完之后一试,果然能上GTalk了。出乎意料的是,数秒之内,那些下载都开始了……
这是什么意思……………… 你个android市场是要验证用户身份,但是为啥和GTalk捆绑在一起………………
反正最后是可以下了……
2010年8月9日星期一
原来 divert 还要指定ipv4...
最近发现本子的IPv6不能用了…… 一开始还以为是学校路由器有问题
后来发现win下可以用…… 另外,刚开机可以用……
而且ping6的同时tcpdump会导致系统死锁…… 所以怀疑是软件问题
之后想起来,最近为了让新买的Desire能上网,让本挂在无线网上面,设置成了网关…… 还带NAT的……
启动那个脚本之后,果然IPv6就挂了……
删掉
divert 8668 ip from any to any via msk0
之后,果然就好了……
但是我指定的明明是ip,应该是IPv4吧……
去往上搜,搜到了FreeBSD 6的Errata,里面说,因为divert套接字不支持IPv6,所以指定ip的话,IPv6的包会被丢掉…… 要指定ip4这样……
原来ip指的是所有IP包么!
改成
divert 8668 ip4 from any to any via msk0
果然就一切正常了…… 不能想当然啊……
另外,这个问题FreeBSD 6就有了,到现在divert套接字还是老样子么…… 真是没人干活啊…… 至少对于divert和v6特殊处理一下么……
后来发现win下可以用…… 另外,刚开机可以用……
而且ping6的同时tcpdump会导致系统死锁…… 所以怀疑是软件问题
之后想起来,最近为了让新买的Desire能上网,让本挂在无线网上面,设置成了网关…… 还带NAT的……
启动那个脚本之后,果然IPv6就挂了……
删掉
divert 8668 ip from any to any via msk0
之后,果然就好了……
但是我指定的明明是ip,应该是IPv4吧……
去往上搜,搜到了FreeBSD 6的Errata,里面说,因为divert套接字不支持IPv6,所以指定ip的话,IPv6的包会被丢掉…… 要指定ip4这样……
原来ip指的是所有IP包么!
改成
divert 8668 ip4 from any to any via msk0
果然就一切正常了…… 不能想当然啊……
另外,这个问题FreeBSD 6就有了,到现在divert套接字还是老样子么…… 真是没人干活啊…… 至少对于divert和v6特殊处理一下么……
2010年4月29日星期四
给lftp报了一个bug
学校用的proftpd,为了照顾windows用户,设置了UseEncoding GBK GBK
这样,proftpd返回的FEAT里面,有LANG,没有UTF8。
但是lftp只要知道服务器支持LANG,就会发个LANG过去。只要收到LANG的回复,就认为服务器用的UTF-8……
虽然LANG和UTF8都是RFC 2640定义的,但是支持LANG不一定就是UTF8啊……
所以发了个patch给作者,不知道他会不会管……
--- src/ftpclass.cc.orig 2010-04-29 17:20:28.000000000 +0800
+++ src/ftpclass.cc 2010-04-29 17:20:42.000000000 +0800
@@ -4100,8 +4100,11 @@
case Expect::LANG:
if(is2XX(act))
{
- conn->utf8_activated=true;
- conn->SetControlConnectionTranslation("UTF-8");
+ if (conn->utf8_supported)
+ {
+ conn->utf8_activated=true;
+ conn->SetControlConnectionTranslation("UTF-8");
+ }
}
else if(act==530)
conn->tune_after_login=true;
这样,proftpd返回的FEAT里面,有LANG,没有UTF8。
但是lftp只要知道服务器支持LANG,就会发个LANG过去。只要收到LANG的回复,就认为服务器用的UTF-8……
虽然LANG和UTF8都是RFC 2640定义的,但是支持LANG不一定就是UTF8啊……
所以发了个patch给作者,不知道他会不会管……
--- src/ftpclass.cc.orig 2010-04-29 17:20:28.000000000 +0800
+++ src/ftpclass.cc 2010-04-29 17:20:42.000000000 +0800
@@ -4100,8 +4100,11 @@
case Expect::LANG:
if(is2XX(act))
{
- conn->utf8_activated=true;
- conn->SetControlConnectionTranslation("UTF-8");
+ if (conn->utf8_supported)
+ {
+ conn->utf8_activated=true;
+ conn->SetControlConnectionTranslation("UTF-8");
+ }
}
else if(act==530)
conn->tune_after_login=true;
2010年4月18日星期日
关于ssh中的Vim鼠标不好用的问题
只要在.vimrc里面,加上
set ttymouse=xterm2
就可以了……
基本上就是让那边的vim知道,这边发的对应于鼠标动作的转义序列是什么格式的,就可以了……
另外,貌似直接在rxvt-unicode里面连ssh再vim是没有问题的,但是在rxvt-unicode里面开screen再连ssh再开Vim就有问题。看来screen在termcap/terminfo方面还是有些问题…… 有待研究……
set ttymouse=xterm2
就可以了……
基本上就是让那边的vim知道,这边发的对应于鼠标动作的转义序列是什么格式的,就可以了……
另外,貌似直接在rxvt-unicode里面连ssh再vim是没有问题的,但是在rxvt-unicode里面开screen再连ssh再开Vim就有问题。看来screen在termcap/terminfo方面还是有些问题…… 有待研究……
2010年2月16日星期二
折腾
折腾了几天,搞了各种事情
* 升级Avant Window Navigator到trunk(0.3.9)
有一大堆的事情,比如说:
# bzr up之后,有冲突,干脆全部干掉重来。发现configure有问题,引用了莫名其妙的ac_python_version变量,这个东西哪里都没有。只好手动改成2.6。
# 引用了libdesktop-agnostic,ports里没有,上网去发现貌似也在launchpad上边,可能也是awn这群人搞的,遂bzr co下来
# 结果编译的时候有诸多问题,上网去,发现有bug-report,说是vala版本太新,而且他还branch了一个various-fixes分支出来
# 第一次听说vala,貌似是利用gobject这套系统,配合一个类似于C#的语言,给C以面向对象能力。编译的时候先弄成C再编译
# 再bzr co了那个fixes branch,终于好了。回头对付awn,还算比较容易
# 新版多了个curve模式,貌似速度也好不少,稳定性也是,看来这个rewrite还不错
* 升级awn-extras
也有不少事情:
# 发现里面的各个菜单组件都或者崩溃或者没有程序菜单,追溯到python-gmenu,最后看调试信息,发现没有applications.menu文件
# 本来想生成一个完了,但是下了个菜单编辑工具alacarte,发现这个里面已经有程序菜单了…… 而且gnome-panel也有…… 标准不统一啊……
# 之后再查资料,发现说XDG这套标准允许有前缀,并且通过locate得知有一个gnome-applications.menu在恰当的地方
# 最后通过把XDG_MENU_PREFIX设为gnome-解决
# 之后又是发现那个Media Player Applet不能放大的(不是文件大小)视频。怀疑和之前totem的问题一样
# 看代码发现用的playbin这个gstreamer组件,直接gst-launch,果然出错,而且信息和totem的一样
# 上网搜了一下,有人说totem的pkg-message里说了这个问题,果然有…… 用了就好了
# 说明这个问题不只totem有,用gstreamer的都有…… 为啥默认的那些shm的参数那么小……
* xps文件查看
上两天有人发来xps文件,不能看…… 去网上下了XPS Essentials装,结果wine运行说有gdiplus的函数没实现…… 搜了之后,发现新版wine实现了,遂下载新版,结果换了一个函数…… 只好拷了一个gdiplus.dll过来,运行倒是可以,就是换页要好几秒……
于是去网上找开源解决方案,找到ghostxps,后来发现就是ghostscript那个公司做的。直接转pdf,10M的xps变成了5xxK,但是里面图片质量很差。
去网上看了一下,对latex转pdf有人说应该先转ps再ps2pdf,应该是同理。但是直接转出来的ps竟然有4xxM…… 再转pdf,有17M,还能忍受,质量很好
* skype
bsd ports里面那个skype是static的2.0.0.72-oss版,我输入不了中文,遂尝试新版。
结果新版2.1.0.xx的dynamic版都会卡死在futex系统调用上,而static版不但不能输入中文,还没有声音……
搜索得知,新版用了pulse,遂用rpm安装alsa的pulse插件,linux的pulse库等,结果运行时说shm_open没有实现…… 还是不行
又尝试装了alsa的oss插件,并且设为默认,这次终于有声音了,但是…… 不能录音……
最后还是回归老的了……
* 自动挂载
本来我山寨了一个自动挂载脚本,利用devd的CDEV建立事件,在ntfs/*和msdosfs/*出现的时候,自动挂载到/mnt/*
结果现在有了iPod,就有问题了:我一般只是想充电而已
于是要挂载自动camcontrol eject,问题是CDEV事件不包括设备名,只有label。在找不到反查工具的情况下,只好自己从label查设备
大致上就是一个枚举,利用gpart结果得到所有设备,然后用glabel得到上面的label,并且进行匹配,符合的就是对应设备。
搞的时候发现,glabel status的第一行输出一直是Name Status Components,而Name下面显示的就是label,而且Name的最后一个字母严格和label最后一个字母对齐,通过这个,可以保证从输出结果得到的label是完整的label,不多不少。
现在碰见iPod就会自动卸载了,真不错……
* easytag的崩溃问题
本来easytag给某些歌写tag的时候,总是崩溃。
这两天研究一下,发现都是不正常的ape tag引起的。虽然easytag本身只写id3 tag,但是他写的时候,会先清除ape tag,而要清除就要先解释,于是就挂了…… 我搞了py-apetag下来,结果删tag的时候也说不能解释……
你们删除tag就不会简单地先删掉再建一个空的么…… 非要解释……
最后手动把文件结尾APETAGEX开始的东西全干掉,世界清静了……
感想:
# gstreamer好强大,我视频库里那些视频都可以放…… 虽然对字幕的支持还是令人怀疑
# 发现一个好东西,gst-editor,类似于windows里directx开发包里那个编辑directshow filter图的那个东西,这里是编辑gstreamer 组件图,还能直接调试,虽然偶尔会崩溃……(这个东西现在其实在google code上,不在gstreamer官网上)
# 下东西发现freebsd默认perl版本改成5.10了,择日升级吧…… 好多包……
# 发现labyrinth这个mind map工具不错,操作简单,功能基本上够用,速度快
* 升级Avant Window Navigator到trunk(0.3.9)
有一大堆的事情,比如说:
# bzr up之后,有冲突,干脆全部干掉重来。发现configure有问题,引用了莫名其妙的ac_python_version变量,这个东西哪里都没有。只好手动改成2.6。
# 引用了libdesktop-agnostic,ports里没有,上网去发现貌似也在launchpad上边,可能也是awn这群人搞的,遂bzr co下来
# 结果编译的时候有诸多问题,上网去,发现有bug-report,说是vala版本太新,而且他还branch了一个various-fixes分支出来
# 第一次听说vala,貌似是利用gobject这套系统,配合一个类似于C#的语言,给C以面向对象能力。编译的时候先弄成C再编译
# 再bzr co了那个fixes branch,终于好了。回头对付awn,还算比较容易
# 新版多了个curve模式,貌似速度也好不少,稳定性也是,看来这个rewrite还不错
* 升级awn-extras
也有不少事情:
# 发现里面的各个菜单组件都或者崩溃或者没有程序菜单,追溯到python-gmenu,最后看调试信息,发现没有applications.menu文件
# 本来想生成一个完了,但是下了个菜单编辑工具alacarte,发现这个里面已经有程序菜单了…… 而且gnome-panel也有…… 标准不统一啊……
# 之后再查资料,发现说XDG这套标准允许有前缀,并且通过locate得知有一个gnome-applications.menu在恰当的地方
# 最后通过把XDG_MENU_PREFIX设为gnome-解决
# 之后又是发现那个Media Player Applet不能放大的(不是文件大小)视频。怀疑和之前totem的问题一样
# 看代码发现用的playbin这个gstreamer组件,直接gst-launch,果然出错,而且信息和totem的一样
# 上网搜了一下,有人说totem的pkg-message里说了这个问题,果然有…… 用了就好了
# 说明这个问题不只totem有,用gstreamer的都有…… 为啥默认的那些shm的参数那么小……
* xps文件查看
上两天有人发来xps文件,不能看…… 去网上下了XPS Essentials装,结果wine运行说有gdiplus的函数没实现…… 搜了之后,发现新版wine实现了,遂下载新版,结果换了一个函数…… 只好拷了一个gdiplus.dll过来,运行倒是可以,就是换页要好几秒……
于是去网上找开源解决方案,找到ghostxps,后来发现就是ghostscript那个公司做的。直接转pdf,10M的xps变成了5xxK,但是里面图片质量很差。
去网上看了一下,对latex转pdf有人说应该先转ps再ps2pdf,应该是同理。但是直接转出来的ps竟然有4xxM…… 再转pdf,有17M,还能忍受,质量很好
* skype
bsd ports里面那个skype是static的2.0.0.72-oss版,我输入不了中文,遂尝试新版。
结果新版2.1.0.xx的dynamic版都会卡死在futex系统调用上,而static版不但不能输入中文,还没有声音……
搜索得知,新版用了pulse,遂用rpm安装alsa的pulse插件,linux的pulse库等,结果运行时说shm_open没有实现…… 还是不行
又尝试装了alsa的oss插件,并且设为默认,这次终于有声音了,但是…… 不能录音……
最后还是回归老的了……
* 自动挂载
本来我山寨了一个自动挂载脚本,利用devd的CDEV建立事件,在ntfs/*和msdosfs/*出现的时候,自动挂载到/mnt/*
结果现在有了iPod,就有问题了:我一般只是想充电而已
于是要挂载自动camcontrol eject,问题是CDEV事件不包括设备名,只有label。在找不到反查工具的情况下,只好自己从label查设备
大致上就是一个枚举,利用gpart结果得到所有设备,然后用glabel得到上面的label,并且进行匹配,符合的就是对应设备。
搞的时候发现,glabel status的第一行输出一直是Name Status Components,而Name下面显示的就是label,而且Name的最后一个字母严格和label最后一个字母对齐,通过这个,可以保证从输出结果得到的label是完整的label,不多不少。
现在碰见iPod就会自动卸载了,真不错……
* easytag的崩溃问题
本来easytag给某些歌写tag的时候,总是崩溃。
这两天研究一下,发现都是不正常的ape tag引起的。虽然easytag本身只写id3 tag,但是他写的时候,会先清除ape tag,而要清除就要先解释,于是就挂了…… 我搞了py-apetag下来,结果删tag的时候也说不能解释……
你们删除tag就不会简单地先删掉再建一个空的么…… 非要解释……
最后手动把文件结尾APETAGEX开始的东西全干掉,世界清静了……
感想:
# gstreamer好强大,我视频库里那些视频都可以放…… 虽然对字幕的支持还是令人怀疑
# 发现一个好东西,gst-editor,类似于windows里directx开发包里那个编辑directshow filter图的那个东西,这里是编辑gstreamer 组件图,还能直接调试,虽然偶尔会崩溃……(这个东西现在其实在google code上,不在gstreamer官网上)
# 下东西发现freebsd默认perl版本改成5.10了,择日升级吧…… 好多包……
# 发现labyrinth这个mind map工具不错,操作简单,功能基本上够用,速度快
订阅:
博文 (Atom)