Apple Magic Mouse 多点触控在 Linux 里的安装与配置

Felix 弄来一只 Apple Magic Mouse 小白, 蓝牙配对上后发现各种scrolling很靠谱, 三键也支持好了, 但是多指动作没有支持…
在各种Google之后, 找到了有人使用 PyMT 来实现 Magic Mouse 多点触控手势的脚本, 由于原脚本(参考资料1)是针对GNOME/compiz的, 而且网上没有靠谱的KDE可用版本, 于是本猫自己Hack了一下…

安装说明:
首先要安装pymt, ArchLinux用户可以直接

yaourt -S pymt

Ubuntu用户可以直接

sudo apt-get install python-pymt

接下来, 配置pymt识别MagicMouse的多点触控:
编辑 ~/.pymt/config
找到 [input] 段, 修改为:

[input]
default = hidinput,/dev/input/event

上面的<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 切换虚拟桌面的效果.

Continue reading Apple Magic Mouse 多点触控在 Linux 里的安装与配置

PyQt4 笔记 (1)

于是又为自己挖了个坑, 开了一系列新笔记…
基于某些原因(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()
于是现在点击菜单项, 会勾上勾, 同时菜单也不会消失哟!

Continue reading PyQt4 笔记 (1)

Ubuntu 命令行调节屏幕亮度

今天本猫的本本突然开机后最大亮度只能调到30%, 各种漆黑一片纠结无比, 感觉有可能是intel驱动的bug(未确定)…
然后…很笨笨的一度以为是高压条灯管之类的出问题了, 直到某次重启发觉引导界面很亮- –
各种Google之后找到一篇blog及其评论里比较详细的介绍了两种命令行调节屏幕亮度的方法 原理不一样.其中的第一种解决了我屏幕亮度的问题, 第二种让我写出了一个很蛋疼的程序..恩..下面分别介绍.

1, 用setpci命令对显卡设备操作来硬调节亮度:

sudo setpci -s 00:02.0 F4.B=xx

其中的00:02.0来自于

lspci

命令输出结果中显卡对应的序号, 比如我的:

00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)

而xx对于不同显卡有不一样的取值规律, 在我这里是00最暗, ff最亮(16进制), 而原文作者和我正相反, 读者可以自己试试~~ 🙂

2, 用xgamma来软调节亮度:

xgamma -gamma x

这里x的取值在0.1到10之间, 0.1最暗, 10最亮.

Continue reading Ubuntu 命令行调节屏幕亮度

Ubuntu uwsgi + nginx / bottle 的配置方法

首先赞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肯定是满足不了要求的啦!

Continue reading Ubuntu uwsgi + nginx / bottle 的配置方法

QQ群管理员小工具 – 串群检查(Python)

恩, 很久没发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
#                felixonmars@gmail.com
#                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()
Continue reading QQ群管理员小工具 – 串群检查(Python)

Pingcheck – 用Ping检查网络通断并即时通知

使用方法:

python pingcheck.py <目标>

比如

python pingcheck.py 8.8.8.8

简单的小脚本…跨平台…分别用了pynotify和pywin32库来执行通知, 因此需要安装相应的库才可以使用.
用ping检查网络通断,并且在通断情况改变时提示用户…

截图:

下载地址:
脚本(任意平台): http://movieinfofetch.googlecode.com/files/pingcheck.py
Windows下的已编译版本(需要VC2005运行库): http://movieinfofetch.googlecode.com/files/pingcheck.exe

Continue reading Pingcheck – 用Ping检查网络通断并即时通知

Ubuntu 多网环境自动路由表(区别教育网内外) + 分享到多张网卡网络的实现

首先, 感谢 @BOYPT @jimmy_xu_wrk @tjmao @yegle 等朋友的帮忙!

1, 多网环境, Felix 的环境是 VPN over cernet2 + cernet 双网.

2, 自动路由表, 采用 www.nic.edu.cn 的官方 Free IP 数据.
以下是 Felix 用 Python 写的一个小小的自动生成脚本:

import re
import urllib
a=urllib.urlopen('http://www.nic.edu.cn/RS/ipstat/internalip/real.html').read()
b=re.compile("([\d\.]+)\s+[\d\.]+\s+([\d\.]+)")
c=b.findall(a)
m=["#!/bin/bash","OLDGW=$1","NEWGW=$2","route del -net 0.0.0.0 netmask 0.0.0.0","route add -net 0.0.0.0 netmask 0.0.0.0 gw $NEWGW"]
n=["#!/bin/bash"]
for d in c:
    m.append("route add -net "+d[0]+" netmask "+d[1]+" gw $OLDGW")
    n.append("route del -net "+d[0]+" netmask "+d[1])
e=open('gtwcernet',"w")
e.write("\n".join(m))
e.close()
f=open('gtwcernetd',"w")
f.write("\n".join(n))
f.close()

会在当前目录生成 gtwcernet 和 gtwcernetd 两个文件
然后给他们加上执行权限

chmod +x gtwcernet
chmod +x gtwcernetd

前一个是启用自动路由表
Usage: gtwcernet <教育网网关> <VPN/电信网网关>
后一个是禁用自动路由表
Usage: gtwcernetd

Continue reading Ubuntu 多网环境自动路由表(区别教育网内外) + 分享到多张网卡网络的实现

两个算分数(比例)的小程序 [Python]

随手写的小程序 很小很实用, 尤其是在压片的时候计算sar值等方面.
第一个: 化简分数

样例输入1: 16/12
样例输出1: 4 : 3
样例输入2: 16*480/(9*704)
样例输出2: 40 : 33

恩, 简单说来, 就是化任意分数为最简分数

第二个: 小数化分数
给一个范围,用范围内的数组成分数,并使这个分数的值最接近所给的小数(如样例给的是1-100和1-1000的范围)

样例输入1: 3.1415926535897 100
样例输出1: 22 : 7
样例输入2: 3.1415926535897 1000
样例输出2: 355 : 113
Continue reading 两个算分数(比例)的小程序 [Python]

一个简单的srt字幕多行转单行的脚本[Python]

基本功能: 双语字幕中英文分离, 各自成一行
避免srtedit在合并某些字幕后中英文各占不止一行, 导致最终生成的字幕占4行的尴尬情况.

基本示例:
源文件:

1
00:01:06,107 --> 00:01:07,483
This is a test
这是一个测试

2
00:01:12,906 --> 00:01:16,450
测试!
快测试呀

3
00:01:18,703 --> 00:01:19,953
测试好了没有?
我问你好了没有?
Is the test OK?
What's the result?

处理后:

1
00:01:06,107 --> 00:01:07,483
这是一个测试
This is a test

2
00:01:12,906 --> 00:01:16,450
测试! 快测试呀

3
00:01:18,703 --> 00:01:19,953
测试好了没有? 我问你好了没有?
Is the test OK? What's the result?

基本功能完好,细节有些小毛病…

Continue reading 一个简单的srt字幕多行转单行的脚本[Python]

Freessh.us的自动连接脚本(Python)

虽然我有付费的SSH Tunnel服务用,不过昨天围观到freessh.us改成了每15分钟换一次密码,新密码在其首页上发布,还是猥琐了一把,写了个简单的自动链接脚本:

import urllib,re,os
while True:
    a=urllib.urlopen('http://www.freessh.us').read()
    a=a.replace('\n','').replace('\r','')
    b=re.compile('\>(\w{1,3}\.freessh\.us)\<\/td\>.+?(\w{4,7})\<\/td\>.+?\>(\w{3,7})\<\/td')
    for i in b.findall(a):
        os.system('plink '+i[0]+' -N -ssh -2 -P 22 -l '+i[1]+' -C -D 7070 -v -pw \"'+i[2]+'\"')

不想围观脚本可以用力点这里下载.
Linux/Windows都可以使用,其他系统没试过.
Linux使用要安装plink:

# apt-get install putty-tools
# yum install putty-tools

Windows使用要安装Python 2.6+并把plink.exe放到同一目录. plink的下载方式参见我的另一篇文章:Plink+Polipo 轻松打造IE可用的SSH Tunnel(Win)

另外BOYPT神牛的博客提供了一种expect+shell脚本的方式达到近似的效果,传送门: http://apt-blog.net/across-the-great-wall-we-can-reach-every-corner-in-the-world

QR Code Business Card