Felix Yan | 2011-08-16 | 134 views
如题.使用说明:
1, 为实现统计本月流量/保种时间(NexusPHP默认的数据表没有留这些数据), 需要在users表里增加 downloaded_lastmonth, uploaded_lastmonth, seedtime_lastmonth 三个字段.
2, 需要获取分流员/保种员信息, 也需指定pipeliner/guarder字段(enum或boolean, 后者需略微改动此代码)
3, 需要python2.x环境, 以及python-MySQLDb库.
4, 需要服务器上有正常的crontab, 每月1日0点执行即可.
5, 此脚本还提供了记录上月实际上传下载(不含优惠信息), 以及下载时间的统计部分, 相应部分默认已注释掉, 可以手动替换启用. 如需显示在userdetails页面上, 只需做一个简单的减法(当前-上月). 实际上传/下载量的统计还需修改announce.php.
6, 工资(魔力/邀请)参考下面的设置修改. 本初始数据来自CMCT-PT的考核标准和奖励细则.
7, 修改数据库连接字符串的相应部分, 即可用.
Read the rest of this entry »
Felix Yan | 2011-07-28 | 263 views
声明: 本文采用方法来自 http://blog.lifetoy.org/2010/01/31/isatap-behide-nat/, 我仅仅是写了一个自动配置脚本(不包括配置路由器).
首先, 这个方法只能让内网一台机器用上ISATAP隧道(仅仅是简单的转发了相关数据包而已). 主要步骤分为两个:
- 配置路由器转发协议号41的数据包到你的内网机器
- 修改本机的ISATAP相关配置(拥有外网环境则会自动完成这一步, 内网环境需要手动处理一些问题)
只有一部分路由器本来的FIRMWARE支持转发协议号41的数据包, 如果你用的路由器不支持, 那就只能尝试dd-wrt或者openwrt了. 如果你的路由器很不幸的也不能刷这类自定义固件, 那也就没办法了..(嗯)
Linux类环境可以使用iptables实现转发(假设你的内网IP地址为192.168.0.10, 网关IP为192.168.0.1, 下同):
iptables -t nat -A PREROUTING -d 192.168.0.10 -p 41 -j DNAT --to 192.168.0.1
openwrt则可以修改文件 /etc/config/firewall: (此段为转载)
config redirect
option src wan
option dest lan
option dest_ip 192.168.0.10
option proto 41
至此, 第一步就做完了.
第二步, 可以用下面的脚本自动完成.
原文给出的bat脚本我在win7和winxp里都试过, 不能发挥应有的作用, 而且每次外网ip变动时都需要修改, 这对于动态ip用户更是无法接受的. 于是我用Python重写了一个脚本, 目前只能在XP系统使用. (其实要在Win7下用应该只需要很小的修改, 不过我暂时没测试环境:P)
注: 脚本中写的是上交的isatap隧道服务器配置, 如需使用其他服务器, 稍加修改即可.
Read the rest of this entry »
Felix Yan | 2011-07-12 | 254 views
由于猫每次在一个临时测试点此测试一大片服务器的延迟和丢包, 一个个去跑太蛋疼, 于是用PyQt做了这么个小工具来测试各种线路的延迟丢包等信息.
这是我的第二个PyQt作品= =|||
截图:

(Archlinux / KDE4 环境下)

(Windows XP)
这个工具我已经初步实现了跨平台(在以上截图环境下运行正常), 在编写过程中, 我有如下的收获:
- 不可以在子线程中直接操作UI, 以免引起资源冲突导致Segmentation Fault
- 使用Queue类可以初步实现子线程与UI线程更新界面的通信. Signal方面, 我实例了一个QTimer, 每隔一定时间处理一次消息队列.
- QTableView比QTableWidget效率高得多, 尤其是在Win32平台下. 因此应尽量采用 QTableView + QStandardItemModel 的搭配来做Table
Read the rest of this entry »
Felix Yan | 2011-05-09 | 343 views
Felix Yan | 2011-04-29 | 119 views
本猫把一台19寸显示器插在本本VGA插口上, 结果在KDE的分辨率管理界面上发现只能最高选择分辨率到1024×768, 甚是不爽! 于是…写了一个脚本, 以后就可以一步做到啦!
此外: 运行此脚本后, KDE的分辨率管理列表中也会出现运行此脚本的时候指定的分辨率哟!(即使是显示器不支持的)
当然啦, 显卡不支持的分辨率是不会设置成功的…
实现的功能比较简单, 但是很方便, 希望对你也有用~
使用方法:
resolution < 设备名> < 分辨率> [刷新率]
使用示例:
resolution VGA1 1366x768 60
resolution LVDS1 1280x800
Changelog:
2011-4-29 发布第一个版本
下面…就是脚本啦!
Read the rest of this entry »
Felix Yan | 2011-04-19 | 165 views
Felix 弄来一只 Apple Magic Mouse 小白, 蓝牙配对上后发现各种scrolling很靠谱, 三键也支持好了, 但是多指动作没有支持…
在各种Google之后, 找到了有人使用 PyMT 来实现 Magic Mouse 多点触控手势的脚本, 由于原脚本(参考资料1)是针对GNOME/compiz的, 而且网上没有靠谱的KDE可用版本, 于是本猫自己Hack了一下…
安装说明:
首先要安装pymt, ArchLinux用户可以直接
Ubuntu用户可以直接
sudo apt-get install python-pymt
接下来, 配置pymt识别MagicMouse的多点触控:
编辑 ~/.pymt/config
找到 [input] 段, 修改为:
[input]
default = hidinput,/dev/input/event<n>
</n>
上面的<n>需要替换成MagicMouse对应的编号, 可以用下面这个本猫写的挫挫的语句察看:
cat /var/log/Xorg.0.log|grep udev|grep -i apple|grep /dev/input/event
然后, 给这个文件(设备?信号?事件? = =不知道怎么称呼了)加上读属性, 以使得pymt可以用当前用户身份读取:
sudo chmod a+r `cat /var/log/Xorg.0.log|grep udev|grep -i apple|grep /dev/input/event|sed -e 's/.*\(\/dev\/input[^\)]*\).*/\1/'`
至此, 可以认为pymt安装好啦!
测试:
python -m pymt.tools.demo
(arch用户自行改为python2 = =)
接下来…可以试试我的脚本啦!
— Changelog:
2011/4/19 – 第二个版本, 增加了三指上下调节系统音量的功能~~
2011/4/19 – 第一个版本, 仅简单实现了双指Swipe Left/Right 切换虚拟桌面的效果.
Read the rest of this entry »
Felix Yan | 2011-03-13 | 156 views
于是又为自己挖了个坑, 开了一系列新笔记…
基于某些原因(boa丑爆了而且Bug太多啊!!有没有!!)我放弃了wxPython, 投奔Qt了…
首先赞一下Qt Designer 简单的画窗口过程, 还是相当像我熟悉的VB6的(这个真不是贬低..)…
下面就是某些笔记啦!
1, Let’s Begin!
首先… 由于eric的编辑体验挺糟糕..(特别容易崩溃神马的, 而且我不知道怎么让它按F2直接运行别提示我输入参数….), 但是本懒猫又不肯放弃它一键compile ui到py(可以一键处理所有ui文件)的功能, 以及自动generate事件代码的功能, 于是…猫在eric里添加窗口, 然后调用Qt Designer编辑, 保存后compile, 然后generate dialog code神马的…之后在喜欢的编辑器Geany里打开generate了dialog code的那个py文件(主程序文件神马的), 再继续填充各种代码…
2, 多选菜单点击后不消失..
猫做了个多选菜单, 有十来项多选项… 如果每次点开菜单再选其中某个, 又要再次点开菜单选下一个, 还是一件挺崩溃的事情…
于是本猫手动添加槽(注意, 不能用Slots直接拖的方法, 因为你拖不到菜单项上, 必须在Signal/Slot Editor里手动添加):
菜单项actionXXX的triggered() => 相应的菜单menuXXX的show()
于是现在点击菜单项, 会勾上勾, 同时菜单也不会消失哟!
Read the rest of this entry »
Felix Yan | 2011-03-10 | 252 views
今天本猫的本本突然开机后最大亮度只能调到30%, 各种漆黑一片纠结无比, 感觉有可能是intel驱动的bug(未确定)…
然后…很笨笨的一度以为是高压条灯管之类的出问题了, 直到某次重启发觉引导界面很亮- -
各种Google之后找到一篇blog及其评论里比较详细的介绍了两种命令行调节屏幕亮度的方法 原理不一样.其中的第一种解决了我屏幕亮度的问题, 第二种让我写出了一个很蛋疼的程序..恩..下面分别介绍.
1, 用setpci命令对显卡设备操作来硬调节亮度:
sudo setpci -s 00:02.0 F4.B=xx
其中的00:02.0来自于
命令输出结果中显卡对应的序号, 比如我的:
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
而xx对于不同显卡有不一样的取值规律, 在我这里是00最暗, ff最亮(16进制), 而原文作者和我正相反, 读者可以自己试试~~
2, 用xgamma来软调节亮度:
这里x的取值在0.1到10之间, 0.1最暗, 10最亮.
Read the rest of this entry »
Felix Yan | 2011-01-25 | 893 views
首先赞PT大牛帮了很多忙, 本文大部分原型来源于 http://apt-blog.net/moinmoin-on-nginx-via-fastcgi-and-uwgi
UPDATE: 更新到 nginx 1.0 / uwsgi 0.9.6.8 的配置 – 2011/4/15
然而由于现在那几个玩意版本更新挺厉害, 有许多配置都不一样了, 再加上本猫是要让它运行bottle, 所以决定重新整理一下:)
下面这段关于 uwsgi 的介绍 来自PT牛的那篇文章:
uwsgi充当了python解析器的角色,使用wsgi的接口和Python程序交互,这个过程中做了优化,和上层nginx之间则设计了更加轻量的协议。nginx0.8.40以后官方默认带了uwsgi的协议模块,所以使用很方便。
恩, 由上面这段话 我们可以淡定的看出, 官方源里那个残念的0.7.x的nginx肯定是满足不了要求的啦!
Read the rest of this entry »
Felix Yan | 2011-01-17 | 191 views
恩, 很久没发python小工具了, 现在来发点=.=
串群检查 – 检查两个或多个QQ群里相同的QQ号, 输出每个QQ号在哪些群及在各群的马甲.
输入格式:
1群: 1.txt
2群: 2.txt
…
把1.txt, 2.txt, 3.txt等文件和下面的py脚本放一个目录里, 然后运行py脚本即可~
下面就是代码啦~
v0.2 – 2011/01/18
重写了算法, 速度更快
增加了全部群友信息输出, 方便管理员查找
感谢牛B轰轰的吉米大大贡献代码!
#coding:utf-8
#!/usr/bin/env python
# QQ 串群检查 - By Felix Yan GPL v3
# [email protected]
# http://blog.felixc.at
import sys
chuanqun = []
ren = []
for i in range(1,100):
try:
f = open("%d.txt" % (i), "r")
for line in f:
try:
tmp = line.decode(sys.getfilesystemencoding()).strip().split()
qq = tmp[-1]
nick = tmp[0]
ren.append([qq, [str(i), nick]])
except:
pass
except IOError:
pass
#下面这段精妙的代码是吉米大大的!!!!!!!!!
d = {}
l = []
for i, j in ren:
try:
d[i] += [j]
except KeyError:
d[i] = [j]
for i in d.keys():
l += [[i] + d[i]]
l.sort(key=lambda x:int(x[0]))
ren = l
for i in ren:
if len(i[1:]) > 1:
chuanqun.append(i)
chuanqun.sort(key=lambda x:len(x[1:]), reverse=True)
resultchuan = []
for i in chuanqun:
resultchuan.append(u"%s 串群 %s" % (i[0], ", ".join([u"%s群(%s)" % (x[0], x[1]) for x in i[1:]])))
f = open(u"串群检查结果.txt".encode(sys.getfilesystemencoding()), "w")
f.write("\n".join(resultchuan).encode(sys.getfilesystemencoding()))
f.close()
resultall = []
for i in ren:
resultall.append(u"%s 在 %s" % (i[0], ", ".join([u"%s群(%s)" % (x[0], x[1]) for x in i[1:]])))
f = open(u"全部群员信息.txt".encode(sys.getfilesystemencoding()), "w")
f.write("\n".join(resultall).encode(sys.getfilesystemencoding()))
f.close()
Read the rest of this entry »