formats

又一个Vim速查表

图片非常的大,请耐心等候~~

(更多…)

Tags:
formats

在stdio.h中发现一个很强悍注释

如下图所示……

/* C89/C99 say they’re macros.  Make them happy.  */

QQ截图20120328232316

formats

我的Emacs配置

原来一直想用Vim来写东西,不过Vim的出生就被定义为做一个编辑器。他的职责就是做好一个编辑器,Vim也不愧为编辑器之神,他确实是非常棒的编辑器。在Unix中,几乎每个工具都是设计为只做一件事,所以我也不想勉为其难将Vim变成一个好用的IDE。

俺曾经尝试使用vim-gdb把gdb嵌入vim,不过用户体验是在让人无法接受,于是就放弃了。

于是只能投身神的编辑器、伪装成编辑器的操作系统——Emacs。

不过俺还是喜欢vim的按键风格,所以俺装了evil,把Emacs变成了超强版的Vim。

代码提示就不说了,Emacs下很轻易就可以做到转到定义处,重构等等。

好的工具是敏捷开发的必要前提啊~又想起了一句古诗:君子性非异也,善假于物也。

俺的Emacs配置请见:https://github.com/cedricporter/vim-emacs-setting

配置效果如下: (更多…)

Tags:
formats

我的Vim配置

我的Vim配置,参考了众多大牛的配置。这个配置我用了挺长的一段时间了,觉得用起来还算顺手。

此配置过的Vim非常适合用来写Python、shell和一般的配置文件。

最新的配置文件可以在https://github.com/cedricporter/vim-emacs-setting获取,我不定时会更新它。

配置效果如下图: (更多…)

Tags:
formats

我的FTP Server——ftp.py

在上文中,我们简要地学习了下FTP协议,链接 http://everet.org/2012/03/ftp-protocol.html

有兴趣的同学们可以去围观下。

因为最近偶看了下FTP协议,所以决定写个FTP Server玩玩。毕竟一直写的都是应用程序,于是乎想写下服务器端的程序。

结果就有了ftp.py,名字灵感来源于web.py。

ftp.py

ftp.py由Python 2.x实现。目前有部署到我的服务器上。支持Windows、Unix和类Unix系统。支持多线程模式和多进程模式,不过在Windows上仅支持多线程模式。支持虚拟用户。

其中多进程模式支持以其他用户身份运行,加强了安全性。

usage: ftp.py [-d] [-h] [-p port] [-o] [-t]
    -d become a daemon
    -h help
    -p listen port
    -o output log to stdout, by default, it outputs to a log file.
    -t thread mode, fork model by default

其中用户设置写在ftp.py.config中,如果文件不存在则默认使用anonymous账户。

用户设置文件ftp.py.config格式如下:

account_info = {
‘et’:{‘pass’:’123456789′, ‘home_dir’:'/root/’},
‘lst’:{‘pass’:’987654321′, ‘home_dir’:'/tmp/’}
}

也就是账户名+密码+家目录路径。

ftp.py.config

我们还可以在ftp.py的同级目录中通过ftp.py.config设置我们的FTP Server。

最大用户连接数 limit_connection_number 

超时时间(单位:秒)timeout

默认家目录:default_home_dir

日志文件:logfile

运行的用户身份:runas_user

默认值为:

limit_connection_number = 5     # max client number
timeout = 60 * 3                # timeout in second
default_home_dir = os.path.normpath(os.path.abspath(os.curdir)).replace('\\', '/')
logfile = '/var/log/ftp.py.log' if os.name == 'posix' else default_home_dir + 'ftp.py.log'
runas_user = 'www-data'

源码如下: (更多…)

Tags: ,
formats

Python端口转发及重定向实现Eclipse的TCP/IP Monitor

记得在上个学期的时候选了徐扬老师的《Web服务与面向服务的体系结构》,讲了SOA之类的一堆东西。然后实验就是要4个下午做完IBM一个星期的培训课程……

于是偶们便开始无脑地照着下面这本手册来狂做实验。记得要做10多个实验,算一下一个下午要做2-3个实验,所以当场做的话只能无脑操作鸟。不能不说是教育的悲哀啊。

QQ截图20120323140703

记得在做“Exercise 7. Creating Web service clients”,有一小节是使用TCP/IP Monitor来检查SOAP消息。

也就是在Eclipse的TCP/IP Monitor中,设置监听一个端口如9081,然后设置你的SOA服务器的端口9080。然后你和9081端口的通信就会重定向到了9080.然后你就可以看到他们的数据传输。

(更多…)

Tags: ,
formats

进程间通信:管道pipe一个简单的例子

管道是进程间通信的有力的武器.记得初中时在写Windows的后门的时候,也是开了一个匿名的管道和cmd进行交互.今天终于在Linux上写了下管道.

在Linux下,两个程序之间传递数据的最简单的方法就是使用popen和pclose两个函数了。但它们都是需要启动一个shell。这个成本略高啊。

于是我们可以使用底层的pipe函数。通过这个函数,我们在两个程序之间传递数据而不需要启动一个shell来解释请求的命令。

原型是:

#include <unistd.h>

int pipe(int file_descriptor[2]);

参数是一个由两个整型的文件描述符组成的数组的指针。成功返回0,失败返回-1,并设置errno来表面失败的原因。

两个文件描述符以特殊的方式连接起来。写到file_descriptor[1]的所有数据都可以从file_descriptor[0]中读回来。数据基于先进先出FIFO的原则。

我们使用read和write来访问数据。

管道有一些内置的缓冲区,它在write和read调用之间保存数据。

(更多…)

Tags:
© EverET.org