@shellex说: 定个闹钟,然后,晚安

Posts Tagged ‘python’

分享两个Python脚本

最好用的GIMP单窗口模式外挂
首先是来自花花主席的GIMPBox,效果如下:

相传,花主席的写这个的目的是去羞辱GIMP的开发者。
详情访问:这里
平铺所有窗口的Compiz Scale Windows Picker
Compiz里面的Window Picker是一个很好地快速定位窗体的工具,但是默认情况下Scale只能将非最小化的窗口平铺。对于已经最小化的窗口,还是得去任务栏或者docky上去找。
这个脚本则弥补了这个缺陷。
详情访问:|脚本| compiz 窗口平铺功能修正 选项

用GAE同步推特到人人网状态

事情是这样的。死狐狸@yegle做了个脚本,专门用来刷人人网上各位同学的屏幕。Shellex很赞赏这样的精神,但是Shellex不能整天开着Linux跑crontab吧。
而且Shellex也不是@yegle这样的土豪,买个VPS上面装了虚拟的私人网大发国难财,也不像@showfom那样的土豪,买个VPS在上面跑5个bash。唉唉,穷人。
为了达到去人人网恶心各位同学、增加Shellex的上镜率、提高Shellex的知名度的目的,Shellex在GAE的第一次就献给了这个脚本。

用Python可视化Profile

得益与Graphviz以及Python强劲的自省能力——Abettor GG,这就是你当年乐道的‘反射’啦,Shellex搞了一个可以生成Call Graph的东东。
谢谢Python-cn的各位同学给偶这个小菜菜的帮助,顺便过了一遍《源码剖析》的第八章。

class call_tracker:
def __init__(self, cls, logfile=’track.log’):
self.stack = [('Push', 'start')]
self.call_map = {}

cls = cls if isinstance(cls, list) else [cls]

[...]

用Python绕过SB的99宿舍查四六级分数

想知道为什么CET查分总是失败么?
想知道30秒倒计时的作用吗?
想知道99宿舍(cet.99sushe.com)有多SB吗,请移步Cnbeta:
http://www.cnbeta.com/articles/77828.htm
http://www.cnbeta.com/articles/77823.htm
下面是使用简单的python查分的方法:

import urllib, urllib2
url=’http://cet.99sushe.com/cetscore_99sushe0902.html?t={四级或者六级}&id={你的准考证号}’
conn = urllib2.Request(url)
conn.add_header(‘Referer’,'http://cet.99sushe.com/’)
print urllib2.build_opener().open(conn).read()

上文中的{四级或者六级}换成4或者6。
你可以在你的python终端里直接输入上面的代码。可以看到出来了一串逗号分隔的字符,从左到右分别是 “听力,阅读,综合,写作,总分,学校,姓名”

加入到光荣的python革命行列中来!

通过Reader上的兄弟的分享,今天发现一张有趣的照片:
via: http://arstechnica.com/news.ars/post/20081202-getting-a-grip-on-python-six-ways-to-learn-online.html
谁说Python人低调的…? 囧了。

翻译一下:
——不要用Perl,那是反革命。
——坚决地,与括号帝国主义展开长期的斗争
——为了优越的模块主义而奋斗
加入光荣的python革命行列中来!
而…哪个同学有原图?传来看看。

这个年代居然是VB6最王道

NND。这个年代居然是VB6最王道。
“博学女生”竞赛委员会的Huanyu MM委托Shellex开发一款抢答器。Shellex用Python + GTK快速搞了一个。TCPServer + Socket Client,简洁又优雅(汗)。
但是往Windows移植的时候(用py2exe),Vista能运行Server端不能运行Client端,log提示是<string>的错误(??!!!)。XP则是什么都运行不了,直接死那儿了,也没有log。NND。
然后跟Rod同学探讨这个事情,我说,你看现在为Windows开发程序什么最快速部署方便?他说,.Net?我说.Net还需要.Net Framework,就现在XP上的版本和覆盖水准实在不行,我还不如直接去配置pygtk呢。
也是,什么好呢?Java需要JVM,Borland用VCL那套没有兴趣,MFC…我不如直接用Win32 SDK呢,况且手头也没有VS(话说我连个正常的Windows都没有,不愿折腾VS)。Adobe AIR貌似是个不错的选择,但是我还不会。Mozilla的extension,时间不够。
最后我说,看现在搞得,Windows作为一个最流行的桌面系统,为它开发一些GUI小工具这么麻烦…要全是Linux Desktop就好了。Windows上还是VB6最王道…Rod同学也得同意吧。
后记:
VB6出来的程序一直87运行时错误…据说是与卡巴有关,话说我身边还没有没装卡巴的Windows机器(这世道!),Shellex不玩了,去网上找一个现成的拉倒。Huanyu Zhao MM,非常抱歉。
下面是我的python代码,大家看看就得了,写得乱七八糟,不必太在意。
Server:

# -*- coding=utf-8 -*-
import SocketServer
import gtk, gtk.glade
import threading
import gobject
import sys
import threading
from random import randint

players = {
1: (1, “Shellex”),
2: (2, “小明”),
3: (3, “大名”),
4: (4, “大白菜”),
[...]

把图片转成HTML(pyimg2html)

参加数学建模比赛了,好累,还好两个队友都是MM。
好了,这次需要我处理图片的,当然用Python Image Library啦,使用方便,上手快捷,用起来满手是血,是杀图越货必备工具。所以产生了一些副产品。比如今天给大家看的这个:pyImg2html
可以把图片转换成HTML文档的。不算ASCII艺术,那就算是HTML艺术吧,哥也是个艺术家。
执行

pyimg2html.py 图片路径 宽 高

或者

pyimg2html.py 图片路径 缩放系数

就可以了
比如我把我的壁纸制成HTML,缩放到20%的大小,就执行

pyimg2html.py wallpaper.png 0.2

生成wallpaper.png.html,用浏览器打开看就是拉。
Sreenshots:
代码,GPLv3下发布,里面包含html标签,不贴了,下载吧:
pyimg2html_src

Python+GTK校内相册下载工具。

仅仅是批量下载很容易的,这种东西嘛,要不要GUI都无所谓的。但是大家知道有很多MM是用WIndows的,而用WIndows的MM是不会用终端的,所以要我写一下GUI也无所谓。
但是由于大菠萝的缘故,我今天…卡卡,才把GUI写了。给…
但是问题就在这里,那就是,我折腾了一个小时也没成功把py2exe做的包运行起来。所以我没有做Windows的安装包咯…真是晕。哪位同学帮我做一下,感激不尽。
如果您使用Windows或者Mac,而且想用这个工具,在某人做出安装包前,请自行安装python和GTK和pyGTK。
如果您使用Linux就自己折腾吧。
源码下载: http://www.box.net/shared/ufsbulheb0
下面分别是Linux下和WIndows下的截图:
这是Linux下的:

这是Windows下的:

下面是代码。但是你可能还是需要去上面下载glade文件。
#!/usr/bin/python
# -*- coding: utf-8 -*-
# by shellex [www.sxnsx.com]
import re
import os
import sys
import gtk
import gtk.glade
import cookielib
import urllib, urllib2
import threading

class xn_photo_downloader(threading.Thread):
def __init__(self):
threading.Thread.__init__(self, name=’downloader’)
self.cookies = cookielib.CookieJar()
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))
self.save_path = ‘/home/shellex/Desktop/xnphotosd/d’
self.target_url = ”
self.usr = ”
self.pwd = ”
self.page_cnt = 0
self.pbar = None

def verify(self):
verify_url = ‘http://login.xiaonei.com/Login.do’
verify_data= urllib.urlencode(
{‘email’:self.usr,
‘password’: self.pwd,
‘origURL’:'http://www.xiaonei.com/SysHome.do’
})
self.opener.open(verify_url, verify_data)
print ‘[!]verify finish.’

def go(self, target):
rep = self.opener.open(target)
return rep.read()

def enmu_page_url(self):
reg1 = [...]

对付冗余计算…的那个途径

问题来自SICP.
该Sample描述了一个换硬币的问题,卡卡,就是偶们是小朋友的是哈哈,父亲大人/母亲大人可能给你一张大..大的钞票,出去打酱油..:D,花不完的,老板会找你钱。找多少钱是个思想斗争,于是就有了这个问题。
给予一定的硬币种类kinds-of-coins和一定的金额amount,使用这些硬币有多少种方式能组成这个金额呢?
很简单哈,所以就书上直接就是源码鸟(这里)。
可惜哈,这个代码实现的是一个树状递归,而树状递归的效率是非常的龌龊,不信你可以试试画一下amount=11, kinds-of-coins=5时的递归计算过程,这个树的很多枝枝丫丫都是一样de,骗取社会主义劳动成功,死人领着活人工资。
所以在脚注34里就提到一种对付这些枝枝丫丫的政策,所谓“记忆技术”(memoization)就是了。
脚注里面说得很呆,其实很简单,把已经算得的结果缓存起来,然后遇到同样的计算任务的时候拿出来用就好。练习3.27就是这么搞的,可惜scheme里面木有构造Cache的现成数据结构,要我实现dic,hash table,什么的我那么lazy的所以不愿意的。不过我的实现也不大优雅,memorize和被memorize的函数杂糅到一起了,python高手告诉我,有木有办法分开?
import time

def change_coins(money):
first_denomination = {
1:1, 2:5,
3:10, 4:25,
5:50,
}
def cc((amount, kinds_of_coins)):
if amount == 0:
return 1
elif amount < 0 or kinds_of_coins == 0:
return 0
else:
return cc((amount, kinds_of_coins – 1)) \
+ cc((amount – first_denomination[kinds_of_coins], kinds_of_coins))

return cc((money, 5))

def change_coins_memoization(money):
first_denomination = {
1:1, 2:5,
3:10, 4:25,
5:50,
}
cache = {}
cc_memo = lambda x :memoize(cc) (x)
def memoize(fun):
def proc(k):
if cache.has_key(k):
return cache[k]
else:
x = fun(k)
cache[k] = [...]

在Linux下模拟键盘按键

在这以前,我一直以为,除非搞X Window级别的开发,否则根本没法在Linux下模拟键盘消息,或者说键盘事件。像QT,GTK这些High Level的GUI library貌似根本没有提供这些功能。这么看起来,想要实现与Windows下SendMessage(hwnd, KEY_PRESS,0 ,128 )这样类似的功能还真不容易。这大概是Linux下接口不统一的弊端吧。不过还好,我们有XTest(the X test extension)这个Xlib的扩展库,用它可以实现我们想要的模拟键盘按键的功能。
比如说…
XTestFakeMotionEvent(…) // 模拟鼠标移动事件
XTestFakeButtonEvent(…) // 模拟鼠标按键事件
XTestFakeKeyEvent(…) // 模拟键盘按键事件
当然别忘了它的头文件“X11/extensions/XTest.h”
这里还有Xtest的详细接口定义: http://docsrv.sco.com:507/en/man/html.Xext/XTEST.Xext.html
用法还是比较简单的,例子我先不给出,因为我发现了更加便捷的方法:那就是python的第三方扩展库virtkey
virtkey(https://launchpad.net/virtkey): python extension for emulating keypresses and getting current keyboard layout
看看,多么完美的解决方案,Ubuntu下有个叫OnBoard的虚拟键盘程序,就是用这个包包实现的。
我发现python-virtkey依赖于libxtst6这个包,那么肯定也是用Xtest实现的咯~一翻源码,果然如此。
(源码:http://bazaar.launchpad.net/~onboard/virtkey/main/files)
使用方法真的很简单哦,主要有两系列接口:
press_keysym/release_keysym

press_unicode/release_unicode
前者接受keysym作为参数,后者接受键位的unicode.
举个例子:

import virtkey
import time
def simulate():
v = virtkey.virtkey()
time.sleep(3)
v.press_unicode(ord(“a”))
v.release_unicode(ord(“a”))
v.press_keysym(65363)
v.release_keysym(65363)

simulate()

使用python运行,不出意外的话,在你的当前光标处会出现一个新字母“a”,而且光标会右移一位。
如果不用virtkey怎么办嗯?好说,请看virtkey的源码。

Page 1 of 11