0%

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

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

验证码CAPTCHA存在的意义

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

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

验证码CAPTCHA的困境
Read more »

这周开始了去实习了,伙食比饭堂好多了,而且还不用米,真幸福啊。不过不好的地方是,公司里要用专用的即时通讯工具,而且要保持工作时间内时时在线。更悲剧的是,它木有Linux版,宇哥说他wine后聊天窗是乱码,这个真是悲剧啊。

无奈,宇哥说vbox有个seamless mode(无缝模式),可以将虚拟机里面的系统的桌面隐藏起来,然后Windows下的应用程序就可以和Linux下的程序看起来像一样的了。一试,好神奇啊~~这样虽然性能损失大一点,但是至少可以方便地使用即时通讯工具啦~

下面是Ubuntu和XP在一起~

Read more »

Python中很奇葩的一个地方是它的函数的默认参数的值,仅仅在def语句执行的时候计算一次。这会导致什么问题呢?

奇葩的例子

我们来看一个例子:

Read more »

想起我们在C++中,要实现一个点积,如果是固定维数的向量,我们或许会通过这么一个成员函数来实现

cpp
1
2
3
4
5
6

Point2d DotProduct(const Point2d& rhs)
{
return Point2d(m_x * rhs.x(), m_y * rhs.y());
}

对于非固定维数的向量,我们或许动用一个循环,然后又变成了一坨代码。

当我们使用Python的时候,就会简单很多很多。

Read more »

Syntaxhighlighter Evolved是一款Javascript的语法高亮插件,高亮是在用户的浏览器完成,这样可以减轻服务器的压力。而WP-Syntax恰恰相反,它是在服务器完成语法高亮。WP-Syntax比Syntaxhighlighter Evolved更有优势的地方是支持rss高亮,而且支持的语言众多,使用了GeSHi高亮引擎,可定制性相当强,至于高亮带来的压力,我们可以用缓存插件来解决。

Syntaxhighlighter Evolved Plugin Usage

Just wrap your code in [language], such as [php]code here[/php]** or [css]code here[/css].

WP-Syntax Basic Usage

Wrap code blocks with <pre lang="LANGUAGE" line="1"> and </pre>

我们很明显就可以看到两者之间的区别。Syntaxhighlighter Evolved用的是非常特殊的高亮标记**[language]**,如果我们直接卸载Syntaxhighlighter Evolved然后装上WP-Syntax就会导致Syntaxhighlighter Evolved的高亮标记直接输出,而且代码不会被高亮。

我们必须将Syntaxhighlighter Evolved的高亮标记全部替换成WP-Syntax的高亮标记。

对于这种这么繁琐的事情,我们就把它交给Python来完成吧。

Read more »

有时候我们想看一下Python翻译出来的字节码是怎样的,此时我们可以借助dis模块。

我们在交互式环境iPython下,可以动态地获取我们刚刚创建的函数的字节码。

python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
In [1]: import dis

In [2]: def say_hello():
...: print 'Hello, ET'
...:

In [3]: dis.dis(say_hello)
2 0 LOAD_CONST 1 ('Hello, ET')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE

In [4]: say_hello()
Hello, ET

而对于文件的字节码,我们可以先读取然后编译。

Read more »

SyntaxHighlighter Evolved是wordpress的一个Javascript实现的代码高亮插件,可惜的我的vps网速非常慢,加载一个有代码的页面要等很久才会高亮,这让对读者是非常不友好的,而且不支持rss输出的高亮。于是我想把代码高亮放在服务器这边做好。虽然有人说WP-Syntax会造成服务器压力大,但是如果我们将文章页面都缓存了,那就不存在WP-Syntax高亮时造成的过多的压力。

于是我准备切换到WP-Syntax阵营。不幸的是,我刚刚装上WP-Syntax这个插件,贴上的ftp.py的Python代码,就发现语法高亮出错了!!

我们可以用简单的代码再现一次这个bug。就是在多行’’'注释时会出现这个bug。

Read more »

想必大家自己用VPS的时候,可能对人工备份都不那么勤快。但是备份确实十分的重要,当服务器硬盘彻底废了、数据库被骇客篡改,此时备份就显得格外的重要。

特别是对于还承载着别人的VPS,我们更需要做好备份。像屠文翔同学将自己辛苦翻译《Game Engine Architecture》贴在wordpress博客上,万一哪天服务器的数据库废了,文章找不到了,我该如何面对屠文翔同学啊,所以备份就必不可少了。

我们或许只要一次编程的努力就可以让日后的备份一劳永逸。

嗯,我们可以用脚本将整个数据库dump下来变成文件,放在服务器上作为备份,这样的本地备份万一服务器的数据遭遇了不可恢复的灾难那就悲剧了。所以我们可以寻求异地备份,将备份放置到其他机器上面。

异地备份

方法一
Read more »

1
2
3
4
5
6
7
粘过来常常看下,以免忘了...
#define EPERM 1 /* Not super-user */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
#define EINTR 4 /* Interrupted system call */
#define EIO 5 /* I/O error */
#define ENXIO 6 /* No such device or address */
Read more »

吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。

---- 《劝学》

学而不思则罔,思而不学则殆。

温故而知新,可以为师矣。

---- 《论语·为政第二》

学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎?

---- 《论语·学而第一》

KISS. Keep It Simple, Stupid.

---- Unkown

A designer knows he has arrived at perfection not when there is no longer anything to add, but when there is no longer any thing to take away.

Read more »