折腾

折腾了几天,搞了各种事情* 升级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,还能忍受,质量很好* skypebsd 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 …

Continue reading ‘折腾’ »

博客转移记(1)——关于metaWeblog接口

本来想直接用网上的博客转移服务,无奈找了好几个,比如http://blogmover.redv.com,但是这家的Blogger写入插件好像坏了…… 又如maikr,这个要注册,而且还是windows程序…… 最后只好自己写一个,就当练练Python。 首先是读取原mblogger.cn上的。这个支持metaWeblog接口,试了一下,非常好用。基于Python这种脚本语言的灵活性,对象的方法能够动态生成(估计差不多就像perl里面有个函数能处理未定义的方法调用一样……),metaWeblog的接口直接就成了Python里面对象的方法。 首先,引用xmlrpclib,这个东西现在Python自带了。 接下来 server_uri = “http://computer.mblogger.cn/henryhu/services/metablogapi.aspx” sp = xmlrpclib.ServerProxy(server_uri) 这样就搞出来一个能够帮你进行xmlrpc调用的对象了。它有.system.listMethods()方法,还有.system.methodHelp(method)方法,不但能知道有哪些方法,还有使用说明…… 这个实在是很好用…… 随后 blogs = sp.blogger.getUsersBlogs(progname, username, password) 得到一个list,里面每个对象是个dict,就是一个blog。 这个dict里面的blogid,之后就用来代表这个blog了。blogName对应的博客标题。 for post in sp.metaWeblog.getRecentPosts(blogid, username, password, POST_LIMIT): 这个是metaWeblog的方法,获取最近的POST_LIMIT个帖子。自然你希望获取全部的话,取个什么99999之类的就行了…… 这个post就是个dict,里面有title(标题),description(内容),link(帖子链接),dateCreated(写作日期),categories(分类)。 前三个都是字符串。第三个就复杂点。 返回的这个格式,应该是XMLRPC的标准格式,但是Blogger不认,Blogger认datetime对象的isoformat()返回的格式。 datetime.datetime.strptime(post[‘dateCreated’].value,”%Y%m%dT%H:%M:%S”)+datetime.timedelta(hours=-8) 这样能够把它转换成datetime对象。之所以要后面减掉8小时,因为这里返回的是本地时间(UTC+8),而Blogger需要的是UTC时间,所以要-8。 categories是个list,每项是个字符串,就是分类。 后来搞了一天不成,第二天想着把Comments也移过来。 这个不是metaWeblog力所能及的了,只好直接抓网页了。 本来想把comment的内容提取出来用Blogger API的comment功能发上去。无奈这个comment功能目前只能用自己的帐号发comment,这个看上去就很不好看。后来想想,干脆直接把网页的评论部分处理一下,附在内容后面,还能保存原有风格,以及发送时间、发送人信息等。 httpold = urllib2.urlopen(post[‘link’]).read() 这样先把网页抓下来。 草稿也是返回的,而草稿会抓来一个错误网页。另一方面,在抓下来的网页中发现错误,我就认为这个是草稿——虽然这个像dirty hack,但是也能用用~ commentpart = comm_exp.search(httpold).groups()[0] newcommentpart = comm_re2.subn(“”,commentpart) 其中 comm_exp = …

Continue reading ‘博客转移记(1)——关于metaWeblog接口’ »

WLM的屏蔽名单?

早上打算了解一下WLM的登陆协议,也就是MSNP**,于是开个ethereal抓些包看看。之后发现随着一个标记为GCF的响应,发回来一个Xml结构的东西,根节点为 Policies 。下层有几个Policy,第二个的type属性为SHIELDS,然后下层为config,再下层,经过一个shield节点,就到了一个block节点。下层先是一个空的hashes节点,可能以后能通过hash屏蔽?…… 然后就是一个叫regexp的节点,看来是以正则表达式表示的屏蔽信息。regexp下层都是类似于这样的节点:<imtext value=”XC5waWY=” /&rt;=.有许多个,用掉四个多IP包(每个的TCP负载大约1460)。当中有许多Base64编码的正则表达式。比如\.pif,\.scr,nihao52\.com,t35\.com,quicknews\.info,shusu\.cn,… 奇怪的是还有symantec\.com/security_response/writeup\.jsp\?docid=2004-120714-0643-99,…这样的,不清楚是什么用意。完整列表:\.pif ; \.scr ; grouppicture\.php ; groupicture\.php ; gallery\.php ; staff\.php ; pics\.php ; rottentomatoes\.us ; msn\.php\?email= ; download\.php ; 69\.56\.129\.67/gift\.com ; xmas-2006 ; miralafoto/foto\.exe ; 168\.169\.78\.19 ; profile\.php\? ; tufoto ; verti2/fantasma\.zip ; armazfiles\.smtp\.ru ; sweetpictures\.myphotos\.cc/katiesex\.pif ; 201\.22\.6\.4/fotos/safada\.html ; chnstudio\.com/upload/impluse\.exe ; shurl\.org/myhomepage ; p1377\.pic-myspace\.info ; pic831\.mp3-myspace\.com ; 88chi\.com …

Continue reading ‘WLM的屏蔽名单?’ »

Using aMule

aMule是eMule的一个Clone,在各个平台下都有,用起来几乎和eMule一样,甚至能够读取eMule的部分文件…… 只是没有eMule稳定……  aMule是完全UTF-8化的软件,比如说他对我家FAT32分区上的GBK编码的文件名有很多反感的地方…… 而且下载下来的文件名在我看起来也是乱码(我家的工作环境也是GBK的,他存下来是UTF8的……) 办法总是有的嘛~ 搞了个脚本来自动识别并重命名~ #! /usr/bin/perl use Encode; while (<*.mp3>) {     $raw=decode(“utf8”,$_);     if (encode(“cp936”,$raw)=~/\?/) {         $euc_CN=$_;         print “Not Changed: $euc_CN\n”; } else {         $euc_CN = encode(“cp936”,$raw);         rename($_,$euc_CN);         print “Has Changed: $euc_CN\n”;     } #     symlink($_,$euc_CN); } 实话说,这样的检测方法很不怎么样…… 但是用Encode里面的Detect竟然把一个GBK的当成了俄罗斯文…… 汗死…… 还不如这样的“实践有效”的方法~ 也就是:原来GBK的东西用UTF-8解码再用GBK编码会出现一堆”?”… 但是,我也不知道,UTF-8 Decode之后成了什么了…… 还需研究…… Old Blog Link: http://computer.mblogger.cn/henryhu/posts/62324.aspx

aMule — all-platform eMule

aMule是eMule的一个Clone,在各个平台下都有,用起来几乎和eMule一样,甚至能够读取eMule的部分文件…… 只是没有eMule稳定…… aMule是完全UTF-8化的软件,比如说他对我家FAT32分区上的GBK编码的文件名有很多反感的地方…… 而且下载下来的文件名在我看起来也是乱码(我家的工作环境也是GBK的,他存下来是UTF8的……) 办法总是有的嘛~ 搞了个Perl脚本来自动识别并重命名~ 详细情况可以参见Tech Blog~