分类: '流水帐' 的归档
本blog支持w3m
其实只是调整了一下blog的主题而已,和w3m关系不大,呵呵。
也许你会问,好像现在的主题和之前没啥区别啊,其实这就对了,这次的改动从视觉效果上看,确实是没有区别的。不同的是:原先是先载入右侧栏,再载入文章的内容的;现在改成先载入文章内容,再载入侧栏了而已。这样的好处,就是每次浏览的时候,可以为读者节省几个毫秒。
同时,做为一个附带的好处,就是用w3m/elinks这类CLI浏览器打开的时候,原先要翻好几屏才能看到正文的,现在正文直接在最上面了。所以,就有了这个标题。。。关于w3m,有兴趣的可以看看它的快捷键列表。
这次的修改,虽然不是很难,但对于我这个CSS菜鸟来说,已经不能独立完成了。所以修改的时候,多亏了牛B的前端工程师keke的鼎立相助,才得以完成,在此表示感谢。CSS的修改要点在这里。
由于没有多少艺术细胞,估计我会一直使用这个黑漆漆的主题了吧,呵呵。代码在这里。
通过Dbus控制pidgin
介绍两个通过Dbus控制pidgin的例子,为了方便,采用python实现。
第一个例子来自官方文档,代码如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/usr/bin/env python def my_func(account, sender, message, conversation, flags): print sender, "said:", message import dbus, gobject from dbus.mainloop.glib import DBusGMainLoop dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) bus = dbus.SessionBus() bus.add_signal_receiver(my_func, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="ReceivedImMsg") loop = gobject.MainLoop() loop.run() |
这个比较简单,就是监视收到消息的信号,一收到消息就调用 my_func 把发送者和消息体打印出来。
另一个是我自己写的,目的是放到crontab里,每天定时通过鸡脱壳给某人发送一句话,哈哈,代码如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import dbus, gobject bus = dbus.SessionBus() obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject") purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface") for account in purple.PurpleAccountsGetAllActive(): if '我自己的GTalk' == purple.PurpleAccountGetUsername(account): conv = purple.PurpleConversationNew(1, account, '对方的GTalk') purple.PurpleConvImSend(purple.PurpleConvIm(conv), u"要发送的内容") |
大致就是:首先在pidgin的活动账户里面,找到自己的鸡脱壳的账户ID,然后调用 PurpleConversationNew 建立一个新的对话tab页,再在这个tab页里发送指定消息给某人。也是超简单。
其实pidgin提供的dbus接口非常丰富,丰富到什么程度呢?就是用dfeet打开那方法树的时候,都会觉得很卡,呵呵。看了下,几乎所有在界面能完成的操作都可以通过dbus接口来实现。所以,要折腾的话,还可以折腾出很多复杂的应用来的,比如做个bot什么的,唉,早知道当时就不去搞什么gloox了,直接挂个purple,用dbus就什么都搞定了嘛,还支持xmpp、msn、yahoo等N多协议,多好啊,呵呵~
========20100428 update========
呃,昨天说要把程序放到crontab里定时执行的来着,结果,今天时间到了,一看,却并没有执行成功,手工一执行,又立马成功了。于是就我就纳闷了,google一搜索,马上发现原因了,原来cron里启动的进程和shell里启动的进程,是不在一个dbus session里面的,也就是说 bus = dbus.SessionBus() 就会给报错。再深究其原因,是因为cron启动的进程里面没有 DBUS_SESSION_BUS_ADDRESS 这个环境变量,于是,参照这里的解决办法,X启动的时候,导出这变量到一个文件里,然后cron里启动进程前,source一下这个文件,终于大功告成了,哈哈。
blog加了评论回复邮件提醒
看见不少人的blog都有这个评论回复邮件通知,有的为了让评论者可以自己选择要不要收邮件,还会有个小框框可以勾,觉得这个还蛮有用的,比如有人在我blog里问了问题,就不用老来这里打开页面看有没有回复了。
于是,折腾了几个WP插件,发现要有那个可以自己选收不收的勾勾的话,就要装Comment Reply Notification这个插件,但是我装上以后,一开始却怎么都收不到邮件,后来有折腾了几个SMTP的插件,还是不行,于是把其他的删光了,还是留下Comment Reply Notification再试,这回居然收到一封邮件了。。。又试了几次之后,发现这个邮件貌似完全是随机的,有时候有,有时候无。也不知道是因为插件问题还是主机问题又或者是你我的RP问题,哈。
而且,如果我在blog后台,对评论进行回复的话,是没有邮件的。
不过也不想再折腾了,先这样用着吧,就当试运行一段时间。
SRT源用户须知
各位SRT源用户,大家好!
之前我用公司服务器架设的ubuntu源,可能会因为我将于近期离开SRT,并且失去对服务器的控制权而停止工作。
现在看来,可能的情形有以下几种:
1. 我离开公司,仍然有服务器的权限。这样最好了,我将继续维护服务器做源给大家使用。
2. 我离开公司,把服务器交接给其他同事。这样我也尽力说服接手人,不变最好。
3. 我离开公司以后,公司收回服务器另作它用。如果是这样,也就只能和各位说声抱歉了。
现在情况仍不明了,我也会继续尽力争取,呵呵。有消息再告诉大家。
wikimarkup 和 webkit
wikimarkup 是一个可以将 MediaWiki 格式的源码转换成 HTML 的python模块,它的特点是使用非常简单,功能比较全面。
基本上就是:
|
1 2 |
from wikimarkup import parse html = parse(wiki, showToc=False) |
这样就搞定了。
wikimarkup 可以在这里下载。
另外得到了html,如果要展示出来,还得需要一个“浏览器”,这时候可以用webkit的python绑定,也很简单,使用方法:
|
1 2 3 |
import webkit wv = webkit.WebView() wv.load_html_string(html, 'file:///') |
再把这个 wv 对象嵌到正常的gtk或者qt容器里就可以了。
另外,花花是webkit达人,有什么问题,可以去搔扰之,哈哈。
点击触摸板模拟左键单击
这几天估计是比较背,刚说我的神舟本2年都没啥问题,结果,前几天发现光驱读盘能力不行了,最近又发现触摸板的左键也不灵了,要按得很重才能产生一次有效的单击事件,双击就更难了。这样下去,手指都要按残了,唉~
然后试了下,轻触触摸板模拟鼠标单击的功能在我的gentoo下默认是无效的,于是第一个想到的就是 xorg.conf 这个即将成为历史的东西。但是我已经不用这个配置文件很久了,现在为了触摸板,没办法,看来只能再请它出山了。于是翻出我的配置文件,在 Section “InputDevice” 一节里加上 Option “TapButton1” “1” 这行,一边心里在纳闷为什么X不默认启用这项呢?
加完重启了X以后,在登录界面试了一下,嘿嘿,果然可以了点击了,于是兴高采烈地登录我的gnome,结果再一看,怎么又不行了呢?明明刚才还可以的啊。难道是gnome的问题?上网一查,发现果然是,在gnome的“系统”->“首选项”->“鼠标”->“触摸板”里,有一项“Enable mouse clicks with touchpad”,勾上这个就好了。
然后再一转念,那在 xorg.conf 里的设置不是多此一举了吗?毕竟我不怎么关心登录界面能不能点击啊。
于是重新删除了 xorg.conf 重启X,登录gnome以后,果然也是可以的。
至此终于知道X为什么不默认启用触摸板点击了,哈哈,既然有DE做这个事情,自然就可以偷偷懒了,不过不知道用*box之类的WM的用户是怎么设置呢?
清理ubuntu老内核的小脚本
ubuntu用久了,升级了几次内核以后,就免不了需要清理一下老的内核,毕竟一套内核就有170多M的空间呢。但是每次都打一堆字来清理也烦了。虽然Ubuntu 命令技巧(这里再罗嗦几句:如果还有ubuntuer没看过这个,强烈建议看一遍。)里有删除旧内核的命令,而且就一行:
|
1 |
sudo aptitude purge ~ilinux-image-.*\(\!`uname -r`\) |
但是我却不是很喜欢,因为这这个没有把linux-headers-xxx删除掉。
于是自己写了个繁的,需要的可以自己保存,以便不时之需。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#!/bin/bash # 清理ubuntu的老内核 # by bones7456 # http://li2z.cn CURRENT="`uname -r | awk -F"-" '{print $1"-"$2}'`" HEADERS="" IMAGES="" for HEADER in `dpkg --get-selections | grep ^linux-headers | \ grep -vE "(generic|386|virtual)" | awk '{gsub(/linux-headers-/,"",$1);print $1}'` do if [[ "$CURRENT" < "$HEADER" ]] then echo "正在运行的内核不是最新的。 $CURRENT < $HEADER" echo "Running kernel is not the newest. $CURRENT < $HEADER" exit 1 else [[ "$CURRENT" != "$HEADER" ]] && { HEADERS="${HEADERS} linux-headers-${HEADER}" IMAGE="`dpkg --get-selections | grep ^linux-image | \ grep "${HEADER}" | awk '{print $1}'`" IMAGES="${IMAGES} $IMAGE" } fi done if [[ x"$HEADERS" == x"" ]] then echo "没有要清理的老内核." echo "No old kernel need to clean." exit 0 fi CMD="sudo apt-get purge $HEADERS $IMAGES" echo "$CMD" if [ "$1" == "-e" ] then sh -c "$CMD" else echo "请确定以上命令是否正确,然后输入 $0 -e 来执行以上命令。" echo "Be sure this command is right, then type $0 -e to execute." fi |
我也玩了下WIN7
曾经,我也有一个XP,虽然平时很少用到,但是在偶尔想玩玩游戏、或者要用到网银的时候,还是要发挥一下作用的,而且曾经的深度精简版也不是很占空间,于是,这个NTFS分区,就一直静静地留在了我的硬盘里了。
直到去年末,回老家办婚礼摆酒的时候,家里人来人往地比较多,有时候有的亲戚朋友要用下电脑,我不可能开个gentoo给人家啊,于是就打开这个XP,没过几天,再去看的时候,发现XP已经中毒很深了。。。要知道我这XP可是没有任何杀软的啊。唉,脆弱的win啊~
于是,这段时间也陆陆续续想了不少办法来拯救这个可恶的XP:曾经在linux下给它杀毒,杀出一堆来,能登录了却慢得出奇,常常还有不可预计的问题;曾经想用虚拟机里XP的文件来覆盖系统文件,要么不管用,要么启动的时候直接蓝屏,搞得我一点办法都没有;甚至也想过重装,但是发现我的光驱已经不能读盘了,无法从光盘引导;也试过硬盘安装,DOS也进去了,执行XP安装程序的时候,却总是说没有什么临时文件的空间。。。
搞得我只能把这个分区的所有文件都删了,后来,花花说硬盘安装WIN7比较方便,抱着试试看的心态,去下了个本以为永远不会去装的win7镜像,开始折腾。
下载到的文件名为 m2.wim ,要用一个叫 ImageX 的玩意打开或者挂载,于是在虚拟机里挂载以后,把文件都提取出来了,最终都放到原来那个NTFS分区的根目录里,一共只有5个目录和一个文件:Boot、Program Files、ProgramData、Users、Windows和bootmgr,很显然,bootmgr就是用于引导的文件,但是原来XP里的引导文件叫做NTLDR啊,grub也只会引导这个文件,所以把bootmgr又复制了一份叫NTLDR,然后直接重启,grub里选择原来XP的条目,一回车,还真进去了。。。
首次进入系统,会自动安装一堆驱动,我这个神舟本除了显卡驱动没认出来,分辨率只上到1440×1050外,其他硬件基本都能自己装好驱动,装好后重启一次,再下个显卡驱动,默认就是下面这个样子了,哈哈:

还蛮舒服的哈,大小也比较合理,wim文件是 350M ,解压后是800多M,装好以后包括一些软件在1.5G以内吧。
虽然偶尔也会有如图的“内存不能为read”的经典又深奥的错误,但是谁在乎呢?
看来,以后真要告别XP喽~
怀念一下
怀念一下这个我许久不用的系统——ubuntu 7.04
是这样的,现在我再用的是我之前的电脑,早在07年初就已经给我小妹使用了,当时只是空出一个分区,装上一个XP而已,ubuntu一直都没删掉,所以,这个ubuntu就一直这么静静地呆在这个硬盘里了,呵呵。
直到今天,回家过年的我才猛然想起它,打开一看,它还是这么健壮,虽然早已经过了支持期了,找不到源更新了,但是它还是能很好地工作。
firefox还是2.0.0.6,打开WP的后台都已经比较乱了,就像手机浏览器一样,呵呵。
virtualbox也还是1.3.8的,还属于InnoTek,不属于SUN或者Oracle。
一切的设置都还比较熟悉,不知道这个系统能坚持到什么时候~
perl升级引起的gentoo编译错误
最近,gentoo portage里的perl从 5.8.8 版本升到了 5.10.1 ,导致在编译一些其他包的时候,出现一些莫名的错误,而且这些错误都和perl有关。
例如,在 emerge gnome-extra/gnome-screensaver-2.28.3 的时候,就会出现:
checking for XML::Parser… configure: error: XML::Parser perl module is required for intltool
这样的错误。
解决办法是emerge一个 perl-cleaner,然后执行:
|
1 |
sudo perl-cleaner --all |
把perl相关的模块和文件都检查并修正一遍,然后再编译其他包,就不会出错了。