左键拖选复制 + 中键粘贴 + 长按中键滚动的AHK脚本

猫在Linux里用习惯了配置后很好使的中键滚动(TP的小红点+中键来滚动神马的), 以及左键拖选/中键粘贴功能, 现在在Win下也想把他们找回来…

此脚本的效果是:

  • 左键拖选文字: 复制
  • 短按中键(<0.15s): 粘贴
  • 长按中键(>0.15s): 滚动
  • Shift+中键: 中键点击(用于浏览器新标签打开/关闭标签页等)

熟悉的朋友当然可以进一步更改这些行为以适合自己的需求^_^

*中键滚动: 虽然TrackPoint的官方驱动也提供了滚动的功能(而且算是好使), 不过他只允许中键滚动, 不能做到轻点粘贴, 此外默认情况下还不支持QQ..

**原脚本来自:

  1. http://www.autohotkey.com/forum/topic47816.html
  2. http://forum.notebookreview.com/5947142-post6.html

Felix 把这两个脚本进行了合并, 并进行了一些修改以使他们能共同工作, 以及修改了一部分的特性.

Changelog:

  • 3/25/2011: 修复切换窗口时Ctrl-C的不正常表现, 修复windows cmd界面无法复制的问题.
  • 3/24/2011: 第一个版本,基本可以做到正常工作…
Continue reading 左键拖选复制 + 中键粘贴 + 长按中键滚动的AHK脚本

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 里用 DVD-RAM 光硬盘

Felix 弄来了一摞光硬碟(DVD-RAM), 打开 Wikipedia 看到了那个夸张的10W次重写和30年不损坏, 感到各种爽, 于是插入光驱随便存了一堆东西进去…
于是, 问题来了: Nautilus 把这张 DVD-RAM 当作普通空光碟了, gvfs 仅挂载了一个空刻录目录(就像WinXP自带的刻录功能一样), 而我把一坨东西拖进去点刻录, 会调用 brasero, 然后提示: 剩余空间不足…
WTF? 我的 DVD-RAM 是双面的, 每个单面也有 4.7G, 怎么可能装不下 3.3G 的不大的(小)电影呢?
于是跑去问谷哥, 悲剧的没有遇到和我遇到同样问题的人(貌似 DVD-RAM 实在太小众了?). 但是大家都纷纷指出(见这里)要用udf这个文件系统..于是我打开 Disk Utility, 点Format, 但是在列表中并没有找到udf这个文件系统…
于是…上命令行吧!

sudo apt-get install udftools

然后看看 Disk Utility 里这光盘的设备在哪里(我的在/dev/sr1), 然后手动建文件系统:

sudo mkudffs --utf8 --media-type=dvdram /dev/sr1

然后你会看到类似这样的输出:

start=0, blocks=16, type=RESERVED 
start=16, blocks=3, type=VRS 
start=19, blocks=237, type=USPACE 
start=256, blocks=1, type=ANCHOR 
start=257, blocks=16, type=PVDS 
start=273, blocks=1, type=LVID 
start=274, blocks=2236173, type=PSPACE 
start=2236447, blocks=1, type=ANCHOR 
start=2236448, blocks=239, type=USPACE 
start=2236687, blocks=16, type=RVDS 
start=2236703, blocks=1, type=ANCHOR 

然后等光驱没动静之后手动弹出一下光盘再插入, Disk Utility 里就会惊喜的看到插入的 DVD-RAM 被识别出来了! 卷标 LinuxUDF 文件系统: udf. 然后用 Nautilus 挂载上来, 就可以和普通可移动磁盘一样操作了:)
PS: 值得一提的是写入速度确实够慢(3M/s), 不过仅仅用来 Data Backup 还是很不错的.

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 的配置方法

Discuz! X1.5 的 电驴[eD2K]链接发布插件

效果图:
原插件来自 http://www.discuz.net/thread-1624289-1-1.html
原插件是 For Discuz 7.2 的, 我进行了一些修改使得它在 Discuz X1.5 下正常工作.

注: 本插件用到的 js/图片 资源请到上面的地址下载.
下面就是安装步骤了 很抱歉这个插件仍然一点都不GREEN 🙁

1, 编辑 source/function/function_discuzcode.php 找到这几行:

	if($allowbbcode) {
		if(strpos($msglower, 'ed2k://') !== FALSE) {
			$message = preg_replace("/ed2k:\/\/(.+?)\//e", "parseed2k('\\1')", $message);
		}
	}

修改为:

	if($allowbbcode) {
		if(strpos($msglower, 'ed2k://') !== FALSE) {
			$message = preg_replace("/\s*\[emule\](.+?)\[\/emule\]\s*/ies", "emu('\\1')", $message);
		}
	}

Continue reading Discuz! X1.5 的 电驴[eD2K]链接发布插件

Android 2.2 Froyo 完美安装 OpenVPN

刷上 Froyo 的盆友们在安装 OpenVPN 的时候会怨念的发现, “明明在 OpenVPN Settings 里显示已连接, 却连一点连接上了的感觉都没有呢?”
如果在终端里手动键入 openvpn 的命令来获得反馈的 log, 会得到下面这样让你感到十分 confused 的结果:

Sat Jul  3 13:30:58 2010 Options error: Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:4: route (2.1.1)
Sat Jul  3 13:30:58 2010 Options error: Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:7: ifconfig (2.1.1)

神马? 找不到哥的 route 和 ifconfig 命令? 他们都很乖的呆在 /system/xbin 里呢…

恩, 这貌似是一个已知的 bug ,暂时可以用下面的猥琐方法给 workaround 掉:
首先, 你要保证你的内核有 tun 设备. 如果没有, 则需要到网上找到对应你内核版本的 tun.ko 文件手动刷进去:) (这些内容就不再赘述)
然后, 进入你的 root 终端, 输入下面的命令:

mkdir /system/xbin/bb
ln -s /system/xbin/ifconfig /system/xbin/bb/
ln -s /system/xbin/route /system/xbin/bb/

然后, 像你以前做的一样, 进 Market 装上 OpenVPN Installer.
注意: 安装Binary的时候选择route等命令的路径到 /system/xbin/bb
然后…恭喜你, 就这么简单:)

参考资料: http://code.google.com/p/android-openvpn-installer/issues/detail?id=2

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)

Felix 的 60 个 Android App 推荐

本猫入爪机(T-Mobile G2)半月, 折腾ROM/Kernel/App无数=.=
现在我安装了下面这些常用到的App(Google自带的就不提啦), 供分享, 供参考.

1, 3G Watchdog Pro
流量监控 最靠谱的一个… 有时候比ISP统计的还多一点点, 总之不会少 🙂
有按月/周/天的统计报表, 有一个还不错的Widget, 而且, 能显示每个App使用了多少流量 🙂

2, Adfree
恩, 各种去广告, 很多时候还是不错的 XD

3, Adobe Flash Player
为了优酷/土豆, 不得不弄一个=.=

4, Advanced Task Killer Free
杀进程用的Tool, 目前觉得它最正常=.=

5, Angry Birds
额, 这个..你懂的…(还有Seasons版)

Continue reading Felix 的 60 个 Android App 推荐

把完美的notify-osd找回来

写在前面: 本文希望通过一个具体的修改编译安装Ubuntu系统软件包的过程 帮助在编译安装时遇到类似问题的盆友解决问题.

恩, 首先呢, 这个问题仅仅针对启用了 ppa:xorg-edgers/ppa 的 alpha tester 盆友…
这个悲剧已经有两个多月(以上)的历史拉(因为两个多月前Felix才忍不住去report了), 我report的错误参见: https://bugs.launchpad.net/ubuntu/+source/pixman/+bug/623272
不过某位大大(Peter Clifton)给出了解决方案, 这里简单解释一下…

首先获得当前版本的notify-osd的源代码:

sudo apt-get source notify-osd

完成后进入目录, 把下面的patch存成文件 然后用patch命令应用上去:

=== modified file 'src/tile.c'
--- src/tile.c	2009-07-31 11:07:29 +0000
+++ src/tile.c	2010-12-06 00:24:55 +0000
@@ -180,7 +180,7 @@
 
 	// top right
 	cairo_matrix_init_scale (&matrix, -1.0f, 1.0f);
-	cairo_matrix_translate (&matrix, -width, 0.0f);
+	cairo_matrix_translate (&matrix, -1.0f * width, 0.0f);
 	cairo_pattern_set_matrix (pattern, &matrix);
 	cairo_rectangle (cr,
 			 width - pad_width,
@@ -193,7 +193,7 @@
 
 	// bottom right
 	cairo_matrix_init_scale (&matrix, -1.0f, -1.0f);
-	cairo_matrix_translate (&matrix, -width, -height);
+	cairo_matrix_translate (&matrix, -1.0f * width, -1.0f * height);
 	cairo_pattern_set_matrix (pattern, &matrix);
 	cairo_rectangle (cr,
 			 pad_width,
@@ -206,7 +206,7 @@
 
 	// bottom left
 	cairo_matrix_init_scale (&matrix, 1.0f, -1.0f);
-	cairo_matrix_translate (&matrix, 0.0f, -height);
+	cairo_matrix_translate (&matrix, 0.0f, -1.0f * height);
 	cairo_pattern_set_matrix (pattern, &matrix);
 	cairo_rectangle (cr,
 			 x,

然后

patch -p1 -i xxx.patch
Continue reading 把完美的notify-osd找回来
QR Code Business Card