paste.ubuntu.org.cn是国内很多linuxer喜爱的“在线剪贴板”,在跟网友交流时把代码、截图等发在这里,然后把网址发送给对方即可,而且对多种常见代码支持语法高亮,功能简单贴心。(不用像某网友在这个博客上篇帖子里面那样,在留言里面贴一大堆乱哄哄的代码……=。=) 虽说方便,但平时要发送文件时候还是要打开浏览器,再贴代码或者选择文件,多少有点繁琐,所以打算用python写个上传脚本,跟nautilous结合的话,上传截图就方便多了。 首先问球猫要了个ubpaste的perl的脚本,虽然我不懂perl,但发现上传部分只有10来行代码嘛……看来挺简单的,可能用urllib随便弄一下就可以了……结果发现,不行!paste.ubuntu.org.cn用的是mutipart/form协议方式的上传,而python标准库里面没有直接支持这种协议(perl却有……而且自动支持……所以几行代码搞定=。=)…… 查了一下资料后自己写了个class来实现mutipart的boundary,才知道用http来发送文件,特别是上传大文件是这么麻烦的事情……不过还好,不算很复杂,但是整个脚本下来居然有150行代码了……=。= 现在还不能直接拿来当nautilous script用,因为第一个参数是读入文字而不是文件,还在犹豫用bash来重新封装(使用curl一行就搞定上面所说的上传了)……[懒ing]
Warning: unable to set property `editable' of type `gboolean' from value of type `gchararray' 做GTK编程的时候,使用TreeView控件时出现这个警告,也就是无法使单元格变为“editable”,原因出在这里: column = gtk.TreeViewColumn(columName[columnNum], renderer, editable=True) 原理解TreeViewColumn的构造函数接受的参数里面可以接受设置Cellrenderer的属性,就直接给editable设True,于是就得到以上警告。 换用add_attribute、set_attributes,均是如此。 Google上搜到同样错误警告,但是他的原因是设错值类型,我明明设了True啊…… 自己观察pygtk-demo的代码和手册,突然发现在构造函数里面给出的属性设置值不应该是直接的值,而是对应Model里面的相应column的值!看手册的描述: Zero or more attribute=column pairs may be added to specify from which tree model column to retrieve the attribute value. 呃,果然是看手册时候大意了,这么多年来还是让英语介词搞的晕头转向。如果在构造函数里面设True这个值,就会被解析为1,去对应Model里面第二栏的类型,是字符串的gchararray,当然对不上了。 解决办法是renderer.set_property("editable", True),调用继承自GObject的set_property方法来设置对象属性。
使用ibus时间长了,常常突然发现有些本来常驻的首选或者常用字词突然掉到后面,甚至到了第二页,并不是被其他词挤掉,而是可能ibus的用户数据库出现错乱了。 不知道这是ibus程序的bug,还是ibus所用的SQLite数据库系统本身的问题,本来当用户输入一个拼音,ibus从用户数据库里面提出对应字的用户输入频数,决定字词的位置;如果用户第一次选择输入某个字,那么该字的记录就添加到用户数据库中,下次输入时便以此记录来提前该字的位置。理论上,在用户数据库里面一个词条的记录最多只能出现一次(多音字算多个字),然而,在实际的使用中,有时不知什么原因,某个本来常用的字被当作第一次输入再次加入到数据库当中,下次输入时,该字便作为低频字来排序,导致位置变得很后,带来不少不便。 这个Python脚本就是把这样的词条找出来,并把后来加入的记录删掉,把词条频数还原。 脚本下载:http://code.google.com/p/ptcoding/source/browse/trunk/ibus_fix (svn目录内的ibux_db_fix.py,其他的两个是测试脚本) 程序功能: 自动备份用户词库 检出用户数据库中出现了两次,但不是多音字词的词条 将后加入的词条删除 检出错词的SQL: SELECT * FROM py_phrase WHERE phrase IN (SELECT phrase FROM py_phrase GROUP BY phrase HAVING COUNT(*) = 2) 尚存缺陷: 如果同一个词条的记录出现了3次或以上,程序不能鉴别(极少可能出现,可修改脚本内的SQL语句来查询出来) 如果一个字本身是多音字,其中一个音节出现了上述情况,程序不能鉴别(貌似概率也挺低的) 如果两个记录中的用户输入频数相同,两条记录都会被删掉(倒不是坏事,影响不大) Python源码:
这些天一直在想怎么扩充ibus输入法的词库,虽然一般使用感觉还好。在网上找到sogou提供了一个“互联网词库”,里面是搜索引擎分析出来的15万多词语,本想拿来导入到ibus,先用python测试了一下有多少词语已经在ibus的默认词库中,最后发现15万流行词中只有200多不在默认词库中,ibus词库确实挺优秀。 程序输出:(测试代码见后) seached: 157200 times. 215 phrases not in the database, written in file 'notexist' 查看notexist文件,发现除了后半部分一大堆频度为1的成语之外,只有20多个大频率词没在默认词库: (- -|原来连“裸体”都没有?太和谐了!建议广滇驹推荐ibus为国家首选输入法) 乾坤 3561275 N, 乾隆 3088184 N, 乾净 1533219 夥伴 1052393 瞭望 984469 宏碁 979267 乾脆 953204 乾燥 624377 清乾隆 480337 乾隆皇帝 380252 N, 阿房宫 235461 乾隆年间 214986 定乾坤 210477 乾隆帝 149133 乾坤袋 143966 著色 111072 萧乾 84647 [...]
PyETGO 0.3 更新版下载:http://code.google.com/p/ptcoding/source/browse/trunk/PyETGO 本脚本可跨平台使用,在Win下需要wget for Windows, 把wget.exe放在脚本所在目录即可。 Wget下载:http://www.interlog.com/~tcharron/wgetwin-1_5_3_1-binary.zip 感谢Twitter上的好友mengzehe关于Win下使用的测试和提醒。 感谢Ubuntu论坛上网友的测试。 v0.3 2009.03.16 -对获取的XML列表中存在的非法字符进行过滤(解决曲名含"&"等不规则字符导致无法下载) v0.2更新 2009.03.11 -为在Win下使用本脚本,全部使用Unicode的字符串来提示(0.1有部分乱码) -修改写入Intro.txt文件的方法,使用writelines,会根据操作系统不同写入不同换行符,减少乱码 -写入文件名前过滤Win下的非法文件名字符/\:<>?|等 大概实现这样的功能: 下载http://music.etgo.cn/上的任意专辑的音乐文件 专辑的存放目录命名为“歌手名 - 专辑名” 多CD的专辑,音乐文件命名为“CD号-轨号_歌手 - 歌名”,单CD则为“轨号_歌手 - 歌名” 下载专辑的封面和封底文件cover.jpg、coverback.jpg 从页面中抽出的专辑信息和介绍文字写入Intro.txt 首次使用需要用-u和-p输入一个ETGO账户以获取Cookie,以后下载只需用-a指定一个专辑的页面 下载时可随时使用Ctrl + C中断,重新下载时自动从断点续传。 花了好几天的时间在这个脚本上,基本把Python的特性摸熟了。 ETGO是国内一个娱乐网站,有电影、Mp3等,资源不算新,格式也就192~256K那样,没太大特色,但其有自己的服务器,运营稳定,这几年来我偶尔都从那里Down些专辑,基本上浏览器的嗅探+序号批量下载就可搞定,而且速度不赖。网站的免费试听使用的是Flash的播放器,这个脚本则模拟了播放器读取列表的功能,骗回所有Mp3的原始地址,然后调用wget下载。 稍微记录下开发过程。
柯南剧场版《战栗的乐谱》中有这么个情景,利用双音频电话的工作原理发声拨电话。有网友利用软件生成相应波形的信号并用电脑音响验证,确实可行!详见帖子:用音响打电话(揭秘柯南电话拨号) 虽说现在的手机普及,几乎人手一部,但是在一些时候,因为资费、信号等问题,还是希望使用家里、宿舍里的固定电话,这时往往不得不看着手机屏幕一个个地拨号,感觉特别不爽……于是想到,利用上面“音响拨号”的原理做个小软件,通过读取手机内记录的电话号码发出不同的音频自动拨号…… Python for S60是个不错的平台,其继承了Python灵活简单的特点,而且也已经有好几年的发展了,各种模块相当丰富,应用趋向成熟。 关于PyS60的编程,主要有下面两个地方提供了很好的例子资源: Nokia Forum Wiki: Python (劲多例子) MobiLenin Python for S60 Tutorial (条理清晰)
后注(09-04-14):其实Sogou浏览器的代理功能是独立的,可以单独利用,分析其协议意义不大,见通过Wine使用Sogou浏览器的教育网加速代理 搜狗浏览器的教育网加速功能,对n多在学校使用校园网的用户来说可是福音,更别提其附带的翻墙功能。自从搜狗浏览器发布那天起,我就对其所用的代理服务器虎视眈眈:要是能在其他浏览器使用,多好啊…… 早前,用Wireshark嗅探搜狗连接加速代理的数据包,找到如219.234.81.(64/65/)66、219.234.81.(35/36/37)等几个服务器,看其发送的数据包,好像和HTTP代理差不多!试着将其加入Firefox的代理……果然吃的是闭门羹:Try Sogou Explorer now! 也看到搜狗发出的HTTP GET带有一些私有头部X-Sogou-XXXX的,估计有一些校验机制,就暂时放下了。 这几天校园网特别不稳定,又打起搜狗的主意。 感谢Python能够用这么简单的语句给我提供实验的环境,现在已经肯定下面的代码能够通过搜狗的代理访问到google的主页!程序输出的确实是Google的HTML代码!
Java篇 有一个GB2312的字节串(byte[]),print输出乱码…… 特效方: byte[] chinese = ...; // String unicode = new String(chinese, "GB2312"); 如果要转回字节串: byte[] uni_chinese = unicode.getBytes(); 简析:Java的标准输出函数只认Unicode的,直接输出当然乱码了;转成String,虽然String能够存储Unicode,但是你存进去的还是GB2312,没有经过重新编码,当然乱码了。其他如Big5等同用此方。 有一个String,里面编了的却是GB2312,怎么输出都得不到正确的数据……特效方: string = new String( string.getBytes("iso-8859-1"), "GB2312"); 简析:和1类似,iso-8859-1是单字符编码,读出最原始的数据后再按GB2312来解释,转换成Unicode存入String。
Page optimized by WP Minify WordPress Plugin