EverET.org

好记性不如烂笔头

[优化]将Chrome的数据放置到内存中去

| Comments

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

Hack

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

解决Ubuntu下gnome-settings-daemon高磁盘IO的问题

| Comments

最近在用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下面的图片。

网易泡泡的Linux虚拟机宿主提示外挂

| Comments

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

对Python图像处理库EffectLab进行性能测试

| Comments

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()

我们可以看到其输出:

走进Python: 为Python增加新语法

| Comments

原文地址: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

探索wordpress验证码插件Clickcha

| Comments

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

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

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

Python验证码识别之预处理

| Comments

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

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

例子

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

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

Python图像处理特效库EffectLab

| Comments

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))

我们身边的验证码技术

| Comments

验证码大家几乎经常都会碰到,不过很多时候,我们都仅仅只是输入完事,很少去思考验证码其背后的东西。验证码的英文名叫CAPTCHA,全称为Completely Automated Public Turing test to tell Computers and Humans Apart全自动区分计算机和人类的图灵测试)。验证码提供一个区分人与机器的手段,主要目的是将机器人拒之门外。

现在的各种网络服务已经成为我们生活的重要的组成部分,像各种社交网站,购物网站,网上银行,投票,论坛等服务,为我们的带来的极大的便利。然而,这些系统都在遭受着恶意程序的滥用。所以,验证码系统用于阻挡这些恶意程序。

验证码CAPTCHA存在的意义

现在,每天有2亿的验证码CAPTCHA被人类识别出来。我们可利用其解决一些计算机难以处理或者耗费大量人力的问题。目前,像Google的reCAPTCHA项目,就是利用验证码来数字化图书和报纸。而像一些广告公司将广告融入了验证码,让人们在输入验证码的时候输入广告中的特定部分,但是这种验证码的样本必然会比较少,因为较难产生大量的广告验证码,所以很容易被破解。

因为CAPTCHA的需求量十分巨大,所以CAPTCHA需要能够自动产生并且评估正确性。此外,人类必须要能够快速地识别并输入验证码,否则容易惹恼用户以至于用户流失。对于CAPTCHA,可以引入人工智能领域的难题,来使现有技术短期无法成功破解。如果一种CAPTCHA没有被破解,那么就有一个可以区分人类和计算机的方法。如果CAPTCHA被破解了,那么一个人工智能的问题也就随之解决了。

验证码CAPTCHA的困境