如何写篇好的系统文章[译]

原文How (and How Not) to Write a Good Systems Paper

写在之前:本文最早出现在ACM SIGOPS Operating Systems Review, Vol. 17, No. 3 (July, 1983), pages 35-40. 作为USENIX 推荐的写作指南对刚动手写论文的写手应该有好的借鉴作用。

一、引言

1983 年 3月 21日,第九届操作系统原理研讨会(SOSP)收到83 篇论文,经过阅读后收录了其中的16 篇作为会议论文发表。录用比率约为1/5 ,虽然收到的论文数量较前几年少,但和往年的会议录用率相近。会议委员会许多成员都发现非常容易分开好的文章和差的文章;的确,十个委员对80% 的论文的处理很快就做出了决定。考虑到接受率,其中大部分文章都被拒绝了。

在进行完会议论文的筛选工作,一些委员表现了对提交论文整体质量的失望。许多被拒的文章表现出类似的弱点,会议委员们认为这些弱点对于作者应该是显而易见的。抱着提高之后SOSP 会议提交文稿、以及更普遍的系统论文的质量,程序委员会决定对收到的论文采用一个标准进行评估。本文将结合委员会所有成员所使用的标准,而不只是作者的。

为了避免冠冕堂皇的说教,我们使用一种启发性、偶尔幽默的方式,以第一、第二人称来陈述。但是,文章的目的却是很严肃的:指出科技论文中不断重复的常见问题,以帮助以后写手们(作者)不再范同样的问题。当你阅读这篇文章的时候,假设你将为第十届SOSP 会议或者TOCS 会议投稿。你在发表之前已经做了一些工作,所以你坐下来开始写一篇文章。当你写的时候你应该问自己哪些问题呢?而这些也是我们检查你的论文将提出的,并决定你的论文是否被发表的问题。

继续阅读

解数独

数独英文为sudoku,是一种在9*9 大小方格内,填充1-9 的游戏,要求每行每列,和9 个3*3 的方格内不允许有重复的数字。前几天写了一个解数独的程序:http://blog.foool.net/sudoku/ ‘set value’将方格中数字顺序填入方格内(0 代表该空格未填数字),‘compute’进行计算,规定时间内完成计算则会返回结果。右边有一个计算范例,测试过独数之道中大师级PK 题,可解。

image         image

继续阅读

安装libcloud 遇到的一些问题

libcloud 是apache 的顶级项目之一,用于在多个云直接提供统一的接口,既可以用于云计算,也可以用于云存储,使用python 编写。下载手动安装libcloud 后没有问题,试着跑一个测试文件提示:

  File "/usr/local/lib/python2.7/ssl.py", line 60, in 
    import _ssl             # if we can't import it, let the error propagate
ImportError: No module named _ssl

判断为SSL module 没有安装, 试着

python -c "import ssl"

出现和之前一样的提示。接着参考这Compiling Python with SSL Support (Fedora 10) 重新下了python 编译下还是出现同样问题。

查看了下,openssl 安装了。转头想用官网上使用的pip 安装,但是得先用easy_install 安装,easy_install 是由PEAK(Python Enterprise Application Kit)开发的setuptools包里带的一个命令,所以使用easy_install实际上是在调用setuptools来完成安装模块的工作。但是在使用easy_install 命令时,提示错误:

Traceback (most recent call last):
  File "/usr/bin/easy_install", line 5, in 
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

初步怀疑原因是setuptools 是使用命令:

sudo apt-get install python-setuptools

安装到/usr/bin 目录下,和python 的版本不一致导致的,网上有使用ez_setup.py 安装的方法(据说64 位只有这样安装才行),但还是有问题:

Downloading http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
Traceback (most recent call last):
  File "ez_setup.py", line 278, in 
    main(sys.argv[1:])
  File "ez_setup.py", line 212, in main
    from setuptools.command.easy_install import main
zipimport.ZipImportError: can't decompress data; zlib not available

按照官网中安装下载python2.7 对应的版本setuptools-0.6c11-py2.7.egg 安装setuptools 出现同样问题:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
zipimport.ZipImportError: can't decompress data; zlib not available
You have new mail in /var/mail/qing

参考stackoverflow 上的方法安装了一些包后可以

sh setuptools-0.6c11-py2.7.egg

安装对应版本的setuptools 了。只是安装在了/usr/local/lib/python2.7/site-packages/ 目录下,每次运行需要加上sudo 才有对应权限:

sudo easy_install pip

安装好pip 后更新了libcloud:

pip install --upgrade apache-libcloud

再使用SSL

python -c "from socket import ssl"

也没有提示之前问题了。

由IPhone 密码锁想到的零知识证明

事情源于国庆、中秋双节回家,看到Lina 总是背着我输入IPhone 密码想到的(上次因为输入密码次数过多导致重新刷机,所以她不让我碰她的IPhone),我猜想这:如果我能够瞄她输入密码的数字和顺序,那么我就可以知道并记住密码,并在“偷”到IPhone 后以同样的密码进入。为了避免密码输入被人偷窥到而导致密码泄露,自然而然会有些想法:一、有没有什么方式让每次输入的密码都不同;二、更进一步,有没有哪种方式让她当着我的面输入密码,我也不知道密码是什么呢?

继续阅读