I am LAZY bones?
AN ancient AND boring SITE

启用新域名

我,是个怀旧的人,用过的东西都不怎么舍得扔掉,所以,换域名对我来说,是要做蛮久的思想工作的。
但是,由于众所周知的原因,用着祖国母亲的cn域名,总是让我觉得有种压迫感和不安。
这种不安在我的域名已经部分获得了GFW认证之后,达到了前所未有的程度。
于是,无奈之下,开始思考其他域名:虽然老域名还不致于被DNS污染之类的,但是我总得有个准备吧。
现在,我准备好了,一个全新的域名隆重登场了:luy.li,欢迎大家访问。
不过,由于我还是怀旧,原来的 li2z.cn 我也会继续使用,希望有一天,能有一个新的组织来管理天朝的cn后缀域名。

简单说说WP换域名的步骤,其实还是挺简单的,在网络提供商那里设置好域名指向以后,应该就可以用新域名访问主页了;
然后在后台的“设置”那里修改博客地址那项,各页面的用久链接就应该正确指向新的域名了;
但是数据库里,经常还会有写在内容里的内部链接,对于这种可以用命令行登录mysql用以下语句搞定:

执行完这个,就算是搞定了吧。剩下的就是社会工程学范畴的工作了,比如通知朋友修改你的友链地址等等。
当然,我不知道这样会不会影响页面PR或者搜索引擎收录之类的,不过我不是很关心这个,一是由于做为一个个人笔记性质的blog,这些没啥意义;二是由于原域名短期内还是可以访问的,应该也影响不大。

PS:推荐的RSS地址不变,还是:http://feeds.feedburner.com/bones7456

bones7456 version 2.0 released!

好消息~ 在经过长达10天的跳票以后,我们终于迎来了 bones7456 version 2.0。
鼓掌~~~ 撒花!*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。
以下是 screenshot 一枚:

其实这应该是昨天下午的消息,也就是距bones7456第一版本发布整整26年的日子(农历纪年),哈哈。
不过,由于最近上网的时间很不固定,所以现在才发文~~

田园生活

安静的午后,适中的阳光,搬个小凳子,边拿ipod上网,边照看家里养的鸡:

为什么python里要 if __name__ == ‘__main__’:

尽管python允许你像shell脚本一样,把大段的代码堆积着写,但是,很多python入门的书,都会建议你把代码写成一个函数,然后在最后面统一调用,例如这样:

很多文章都会说这个是由于代码风格之类的原因,但是其实,不这样写,有时候也是会直接导致出错的。
举个例子,打开《A Byte of Python》的类变量那节,可以这里看在线版本,然后把中间的那示例代码复制下来,运行,可以看到,确实能得到预期正确的结果。
但是,现在把那代码里的所有“swaroop”换成“xxx1”,再把所有“kalam”换成“yyy1”,再运行,就会在程序运行的最后时刻,得到这么一个奇怪的错误(Python 2.6.5下实验):
Exception AttributeError: "'NoneType' object has no attribute 'population'" in > ignored
也就是说,换了个变量名,程序就出错了。。。
究其原因,应该是python在最后析构所有类和对象的时候,并没有处理这些对象之间的依赖关系,而是根据变量名来决定某种顺序操作了。从而导致Person类本身,先于yyy2被干掉了,所以在解构yyy2的时候,执行它的__del__()方法,却发现父类都已经没有了~~
这应该确实算是python解析器的bug,但是,如果那把这个例子里的所有class Person以外的代码,写到一个main()函数里,再通过上述方法调用的话,就不会发生这种错误了。
所以,大家最好还是别太在意多几行代码,养成这个好习惯吧。

要深究此错误的原因,可以看官方文档里的描述,并在这里讨论。

这里的 twitter api 倒了

感谢国家,感谢CCAV,感谢及.艾服.达不留的厚爱,本无名小站也受到了伟大的墙的关注,真是让我倍感荣幸,语无伦次了。
最早得知此事,是我今早收到Tualatrix的短信,说我的api不能用了,导致他不能在手机发推,我当时就想,不会是被墙了吧?没想到,后来的验证,真的证实了这一点。
这个twitter api是当时看到@yegle刚发布twip,我看这程序不错,就顺手搞了个,直到今天,li2z.cn/t 终于光荣地成为敏感词了~
在这期间,这个api已经累计提供服务12236009人次了,粗略地统计了一下,有10728个twitter账号(其实我也没想到会有这么多,虽然有一半是只出现了1~2次的),现在我不得不对这1w多个朋友说:咱们得换个地方了。
在此,也呼吁广大有国外空间的网友,是时候贡献一份力量了,架个twip,方便又简单,然后可以大范围或者小范围传播下,不要再让某某墙得意了。愿意公开地址的话,欢迎在本文后留言,好让大伙找到新的落脚点。
不过,似乎twitter官方本来就要在6月份停止HTTP Basic Auth支持了,到时候,即使有twip,也不能方便地在墙内上推了,那时到底会如何呢?我觉得解决问题的方法一定比问题多吧~

python中的socket代理

说socket代理之前,先来说说http代理,python的urllib2是自带http代理功能的,可以用如下代码实现:

如此,接下来用urllib2来urlopen的时候,就会自动使用这个代理了。

但是,在我们疯狂的天朝,有时候,http代理并不能满足要求,也许你还想使用更底层的socket代理,于是python里似乎就没有直接的方法了(python3不知道有没有内置,未研究)。这时候,你可能需要这个包:SocksiPy – A Python SOCKS module,下载解压以后,除了文档也就一个 socks.py 文件,很方便使用,给出示例代码:

接下来,你就可以照常使用socket了,一切都会悄悄地通过代理出去的~

跨平台共享鼠标键盘

可能有的老GEEK看到标题,会想到synergy,而我今天要介绍的其实是synergy-plus,因为synergy自从2006年以后,就没有更新了,然而它是个开源软件,所以它并不会就此死掉,有人fork了它的代码,并维护了下去,这就是synergy-plus。
synergy-plus是一个跨平台的鼠标键盘共享软件,支持linux、mac、windows,可以用一套鼠标键盘控制多台电脑,实现光标从这个屏幕飞到那个屏幕,哈哈。
我有这个需求,是因为来这个公司上班以后,公司给分了一个台式机,配置还不错,但是预装的是XP。由于我不是很习惯XP,但是工作中又经常要用到,所以就把自己的神舟本也背来了。于是,桌子上就放了俩电脑。本来俩电脑也没啥的,可是最近夏天到了,我的本本键盘越来越热,基本下不去手了。于是就想起以前看到过的synergy来了,没想到最近多了个plus,呵呵。
那就试试plus吧,目前,synergy-plus 1.3.4 版本已经在gentoo的portage里面了,但是看到主页上,最新的版本却是 1.3.5rc 。于是想尝鲜的我,下载了1.3.5版本,却发现linux下的编译过程并不是很顺利。下载的 synergy-plus-1.3.5-rc-Source.tar.gz (md5sum:db8b2c306695a163e7edf696256913fd) 根本没法编译,于是svn了最新的代码,参照这个编译说明,也还是需要修改几个文件,才能编译过去(而且好像没有install的方法)。不过这个应该是由于这段时间代码在转型吧,相信正式发布的时候,会解决所有这些小问题的。
相比之下,windows的安装过程就及其简单了,因为有现成的二进制的包了嘛,不多说。
我的需求,是要让win的机器当server,linux机器当client的(物理上插着鼠标键盘的机器需要是server)。所以参照这个配置文档,简单设置一下,我的如图:

可以看到,只要设置有几个screens,然后再设置screen间的位置关系,就可以了。
在这里要注意的是,screen的名字,最好是各机器的机器名(我这里windows的机器名是 t-liushun,linux的是 LLY),不然名字不同,是有可能被拒绝连接的。
配置完之后,server点一下start按钮,就会缩到托盘等待client的连接了,然后在linux上执行(文件在bin目录下):

就可以连上了,这时候,你就可以方便地用台式机键盘控制笔记本喽~
有了这个东西,再加上Dropbox同步两边的文件,基本上,就可以把俩电脑合而为一喽。

另外,如果server端是linux的话,就要建立类似如下的配置文件:

然后执行:

窃以为,这种集中在server进行配置,而client只管连到server的理念,也非常地棒~

========update========
发现用这个还能在两台机器间共享剪贴板,哈哈~至少文本内容没问题,不错。

没事就和朋友下下棋,pidgin象棋插件偷跑版

gmchess是一款由阳光灿烂的lerosua写的linux下开源的中国象棋程序,使用gtkmm和C++完成。支持人机对战和人人对战。但是之前只能在同一台机子上进行人人对战,这显然很不方便。
于是牛逼的lerosua又给我们带来了gmchess的pidgin对战插件,功能不必多说,大家也能猜到,肯定是通过pidgin,和好友在线下象棋了~
下面来看两个截图:
这是装了插件以后的pidgin窗口,可以看到已经多了一个很“帅”的按钮了~

如果你和你的好友,都装了这个插件的话,你一点这个“帅”,对方一接受,就会出来gmchess的对战窗口了,gmchess的对战模式大致和人机对战一致,只是对方换成了有血有肉的人了,哈哈,如图:

如果感兴趣的话,在这里下载最新的代码,注意gmchess-0.29.0.tar.bz2和pidgin-gmchess-0.01.tar.gz都要下载安装哦。
由于这个目前是偷跑版,也可以理解成是alpha版,所以难免会有点小问题,遇到bug或疑似bug的话,大家尽情地报告bug去,哈哈。
再八卦一下,gmchess里的提示音很多都是人声哦,而且这些声音正是出自lerosua的老婆,还蛮好听的呢,哈哈。

一个支持上传的简单http server

现在,很多人都知道,python里有个SimpleHTTPServer,可以拿来方便地共享文件。比如,你要发送某个文件给局域网里的同学,你只要cd到所在路径,然后执行这么一行:

人家就可以访问 http://你的IP:8000 来访问你要共享的文件了。
像我早已把这个命令做了alias。
但是,某一天,你需要从同学哪里复制一个文件到本机,然后你就会跟你同学说,XX,共享下某目录。当你以为可以用http来访问他的8000端口的时候,他却告诉你,不好意思,我是windows啦~~
当然你可以选择在他windows里装个python,也可以选择使用samba、ftp等其他方式,但是有没有和之前一样简单的方式呢~
当然了,这时候,你就需要一个支持上传的简单http server,也就是我这个:SimpleHTTPServerWithUpload.py,哈哈。然后你开个服务,让人家上传即可。
其实这个就是修改自SimpleHTTPServer的,只不过我给它加上了最原始的上传功能,安全性方面没有验证过,不过理论上应该不会没人一直开着这个吧?另外,我对RFC1867的理解不一定透彻,所以,Use at your own risk!
截图如下:

代码在此,单文件、零配置,直接用python运行。

本blog支持w3m

其实只是调整了一下blog的主题而已,和w3m关系不大,呵呵。
也许你会问,好像现在的主题和之前没啥区别啊,其实这就对了,这次的改动从视觉效果上看,确实是没有区别的。不同的是:原先是先载入右侧栏,再载入文章的内容的;现在改成先载入文章内容,再载入侧栏了而已。这样的好处,就是每次浏览的时候,可以为读者节省几个毫秒。
同时,做为一个附带的好处,就是用w3m/elinks这类CLI浏览器打开的时候,原先要翻好几屏才能看到正文的,现在正文直接在最上面了。所以,就有了这个标题。。。关于w3m,有兴趣的可以看看它的快捷键列表。
这次的修改,虽然不是很难,但对于我这个CSS菜鸟来说,已经不能独立完成了。所以修改的时候,多亏了牛B的前端工程师keke的鼎立相助,才得以完成,在此表示感谢。CSS的修改要点在这里。
由于没有多少艺术细胞,估计我会一直使用这个黑漆漆的主题了吧,呵呵。代码在这里。