EverET.org

好记性不如烂笔头

VirtualBox的无缝模式

| Comments

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

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

下面是Ubuntu和XP在一起~

谈谈Python函数的默认参数

| Comments

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

奇葩的例子

我们来看一个例子:

Python计算点积

| Comments

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

cpp
1
2
3
4
Point2d DotProduct(const Point2d& rhs)
{
    return Point2d(m_x * rhs.x(), m_y * rhs.y());
}

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

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

从syntaxhighlighter Evolved迁移至wp-syntax

| Comments

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来完成吧。

查看Python字节码

| Comments

有时候我们想看一下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

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

修正WP-Syntax高亮Python字符串的bug

| Comments

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

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

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

Ubuntu下自动异地备份数据库

| Comments

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

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

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

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

异地备份

方法一

Errno表

| Comments

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 */

语录

| Comments

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

—— 《劝学》

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

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

—— 《论语·为政第二》

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

—— 《论语·学而第一》

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.

注释中的TODO、FIXME、XXX

| Comments

第一次见到注释中的TODO是在用VS自动生成MFC框架的时候,里面自动生成的函数可能会有一句注释:

// TODO Fix this function.

很久以前以为这仅仅是给人看的,原来,它也可以在VS里面开启一个TastList窗口,显示代码中所有的TODO(代办事项)。然后我们就可以方便地在TaskList中看到代码中哪些东西还需要我们完成。这个在其他的开发环境也有类似的功能。

在Python源码中,主要有三个特殊的注释:TODO、FIXME、XXX。

TODO

说明还有工作需要做,COMMENT简要地描述还有什么工作要做。

/ TODO: C speedup not implemented for sort_keys /