0%

11月了,没想到10月份竟然木有写博客。这几天在迁移服务器,时间不赶,就慢慢弄,顺便记录一下一些技巧。

首先,远程ssh登录到服务器,可能中途会出现网络断掉或者超时,这时候ssh里面就打不了字了,就只能关闭再重新连接。如果我们用vim编辑一个文件到了一半的话,就会蛋疼地多了一个swp。那么如果我们希望在重新连接回去的时候,可以回到之前的工作状态,我们应该怎么办呢?答案是借助screen。

对于screen的使用就不再罗嗦了。具体可以参看后面的参考资料中提供的链接。

一些技巧

下面可能会与诸位使用习惯有所冲突,请见谅。

把ctrl+a还给我

首先,screen的命令的前缀是ctrl+a,进入screen后,ctrl+a就成了命令前缀了。我经常使用ctrl+a跳到行首,ctrl+e跳到行尾,所以需要修改一下前缀,否则ctrl+a跳到行首这个习惯就得改了。我们在家目录下面创建一个文件~/.screenrc。然后在里面写上

bash
1
escape ^Zz

然后就把前缀改成ctrl+z了,如果需要暂停程序的话,就用ctrl+z z来暂停。这样ctrl+a就回来了。

偷懒

每次打screen真麻烦,我们在~/.bashrc中加上

Read more »

我现在使用的一台电脑的硬盘速度非常慢,Chrome有时也会对硬盘读写也会让机器发生顿卡,真是悲剧。所以我决定将Chrome经常读写的数据放置到内存中以提高响应速度。 Chrome的数据文件主要有用户配置文件以及磁盘缓存文件。在Ubuntu下就分别放置在/.config/google-chrome以及/.cache/google-chrome下面。 在Linux下,ramdisk直接就有了,直接拿来用就可以了,而在Windows下需要安装一些程序来创建ramdisk。我们来看看Linux下怎么做。 在Linux下,/dev/shm目录就是映射到了内存,所有写的东西都是直接写到了内存里面,不过这个目录不是持久的,断电就没了。

Hack

我们的想法是,开机的时候将Chrome的数据文件全部放到/dev/shm下面,然后中间所有的读写都是在/dev/shm里面完成,因为都是在内存里面完成,所以速度会非常快。

Read more »

最近在用Ubuntu的时候,总是发现用着用着整台电脑就卡死了,什么都动不了,然后硬盘灯一直处于常亮状态。几次艰难地打开shell,发现都是gnome-settings-daemon一直在读写硬盘。这个究竟是什么问题呢?

strace一下,看看,这个进程在干啥。

console
1
2
3
4
5
6
7
cedricporter@cedricporter-Lenovo:~/projects/CaptchaSystem$ sudo strace -p 2207
[sudo] password for cedricporter:
Process 2207 attached - interrupt to quit
lstat("/home/cedricporter/.thumbnails/normal/b6c1d4f6fff0b536652c83081e5233e1.png", {st_mode=S_IFREG|0600, st_size=5398, ...}) = 0
lstat("/home/cedricporter/.thumbnails/normal/739ea0e4eabe22c5b551156fc3ff93da.png", {st_mode=S_IFREG|0600, st_size=6059, ...}) = 0
lstat("/home/cedricporter/.thumbnails/normal/2aac704bfd3d3a865f66e5c3ee2ba80a.png", {st_mode=S_IFREG|0600, st_size=6362, ...}) = 0
lstat("/home/cedricporter/.thumbnails/normal/5dbe53248aa8a41612137100a315e076.png", {st_mode=S_IFREG|0600, st_size=6260, ...}) = 0

出来的结果就像刷屏一样,全部都是lstat的系统调用,读取的都是.thumbnails下面的图片。

Read more »

在网易实习时,上班一定要开着泡泡,不过泡泡貌似在Linux会严重地水土不服,所以只能装一个虚拟机来解决这个问题。借助VirtualBox的无缝模式,我们在一定程度上可以缓解这个问题。但是我平时会在多个虚拟桌面。如果恰巧不幸,我长时间没有切换到泡泡所在的虚拟桌面时,那就会有很长时间都不知道有新的泡泡消息。这个无论对人对己都有非常不好的影响。首先,别人无法在第一时间找到我,即便是我开着泡泡;第二,如果有重要通知,我却不幸地没有在泡泡的虚拟桌面时,那就大祸了。

Read more »

EffectLab也是一个基于PIL的Python的图像库,目的是为了提供更多的特效处理以及更快的测试。

目前EffectLab可以实现的特效可以围观之前的文章:http://everet.org/2012/07/effectlab.html

古人云:_选择了脚本语言_就要忍受其速度。

但是,有时脚本语言的速度已经慢到了无法形容的地步时,我们就开始考虑性能优化了。

寻找性能热点

Python有一对很好的性能测试工具:cProfile与pstats。

我们来选择一个波浪效果来做测试:

python
1
2
3
4
5
6
7
img = Image.new("RGB", (100, 100))
wave = GlobalWaveEffect(1, 0.5)
test = partial(wave, img)

cProfile.run("test()", "profile.data")
p = pstats.Stats("profile.data")
p.strip_dirs().sort_stats("time").print_stats()

我们可以看到其输出:

Read more »

最近经常用到ASCII码,所以弄一张表过来方便查找。

Read more »

原文地址:http://eli.thegreenplace.net/2010/06/30/python-internals-adding-a-new-statement-to-python/

译文地址:http://everet.org/2012/07/add-new-grammer-to-python.html

译者:Stupid ET

翻译得比较仓储,里面会有些语句不通顺,请见谅,日后会慢慢重构。
修改后的Python请见:https://github.com/cedricporter/python2.7-mod/tags ,在Ubuntu下可以正常编译。


本文的目的是试图更好地理解Python的前端是如何工作的。如果我们仅仅是阅读文档和源代码,那么可能有点无聊,所以我将亲手实践:为Python添加一个until语句。

这篇文章中的所有的编码,是针对最新的Py3k分支Python Mercurial repository mirror

until语句

有些语言,像Ruby,拥有until语句,用来补充while语句 (until num == 0 等价与 while num != 0)。在Ruby总,我可以这样写:

python
1
2
3
4
5
num = 3
until num == 0 do
puts num
num -= 1
end

它会输出

python
1
2
3
3
2
1

所以,我想要添加一个类似的功能到Python。也就是说,能够写成这样:

python
1
2
3
4
num = 3
until num == 0:
print(num)
num -= 1
Read more »

Clickcha是一种新型的图像验证码,只需要用鼠标点击即可以通过验证,虽然对于专门的攻击,这种验证码没什么抵挡能力,但是它还是挺有趣。

对于这种验证码的识别,可以用霍夫变换,就可以方便地找到最圆的圆,以及那些正方形。

Clickcha有提供wordpress插件,很容易就可以和自己的wordpress整合在一起。

Read more »

对于验证码叙述,可以见上文我们身边的验证码技术。其中我们得知验证码识别流程如下图

第一个主要步骤是数据预处理。

例子

一般的国内的验证都比较喜欢加上噪点,再加上一些干扰线,来扰乱视线。但是这些噪声,对于计算机识别程序来说,基本上没起到什么干扰。

我们来看看下面的验证码,这个是随机选择的15张验证码。左边为原图,右边的为处理过的图片。其中干扰线我们识别出来后用红色将其标记,噪点标红看不清楚我就直接去掉了。

Read more »

EffectLab是使用Python编写的一个快速测试图像处理特效的实验库,EffectLab目前基于PIL。方便测试图像处理算法。

EffectLab正在处于开发过程中(其实几天前才开始),日后会逐渐增加更多的特效。 目前特效处理用纯Python实现,这个运行速度十分地缓慢,所以后期会用C把部分特效重写。

我本人挺喜欢做图像处理的,想将EffectLab作为我们在两年前编写的图像处理程序Imagination Factory的生命的延续。我想知道Photoshop里面的那些工具的究竟是怎么实现的,也非常感谢仔华给我一个与图像处理和安全相关的任务啊~因为目前做的一个东西的一部分需要进行些图像处理,于是决定将图像处理部分拆分出作为独立的图像特效库EffectLab来维护。

目前特效都设计为过滤器,接受一张图像和输出一张图像。不同的过滤器可以组合在一起形成新的特效过滤器。Unix的管道过滤器的思想真是美好啊。

python
1
new_effect = lambda img: effect_a(effect_b(effect_c(img)))

源码请见Github: https://github.com/cedricporter/EffectLab/downloads

目前实现的效果

左边为原图,右边为处理后的图片。

镜头变形效果[1]

首先将图像映射到长宽取值范围都为[-1, 1],然后从笛卡尔坐标系映射到极坐标系。然后我们就可以控制r(半径坐标)和\theta(角坐标、极角或方位角,有时也表示为\phit)。

r = r ^ 2

python
1
effect = RadianFormulaEffect(lambda r, phi: (r ** 2, phi))
Read more »