最后更新于 .

之前已经写了一篇linux下搭建python+apache的文章。但由于windows下的支持python2.6的mod_python.so一直没有找到下载(http://www.apache.org/dist/httpd/modpython/win/的下载列表里面并没有python2.6的支持),所以一直没有搭建。
今天偶尔在网上搜索mod_python-3.3.1.win32-py2.6-apache2.2.exe居然被找到了,虽然目前还不知道出处在哪里,但是起码可以用啦。

放出下载如下:

mod_python-3.3.1.win32-py2.6-apache2.2.exe

需要注意的就是安装结束会要求选择apache目录,一定要选择conf目录的上一级目录.
其他配置就不说了,和linux下是一样的。

最后更新于 .

今天尝试了一下搭建python+apache的环境,记录在这里,希望对大家有用. 一.安装apache(apache2.2.15) 到 http://httpd.apache.org 下载最新的apache源码,解压后进入目录: 我想把apache安装到/home/dantezhu/apache下,所以执行如下命令 执行:

./configure --prefix=/home/dantezhu/apache --enable-track-vars --enable-cgi --with-config-file-path=/opt/apache/conf --enable-modules=all --enable-mods-shared=all --enable-file-cache --enable-disk-cache --enable-cache --enable-mem-cache --enable-dumpio --enable-logio --enable-mime-magic --enable-headers --enable-usertrack --enable-version --enable-ssl --enable-http --enable-rewrite --enable-proxy --enable-proxy-connect --enable-proxy-http --enable-proxy-ftp --enable-proxy-ajp ...

最后更新于 .

这几天在做的一个系统中,需要给指定的用户发送email,由于对方只提供了可执行程序,所以需要在CGI中调用。

虽然之前就知道可以通过system()或者popen()来实现,但是在真正用在CGI场景中的时候还是吃了不少苦头。

先来看一下system(),函数声明如下:

int system(const char *command);

入参就是需要执行的命令,函数会返回成功或者失败。
这个函数有两个问题:
1.函数调用的时候会fork进程,对于有些webserver是禁止fork的。(我一开始在CGI调用全是返回-1,即fork失败)
2.命令执行时,如果有向标准输出打印,不会被重定向。即,在CGI中使用的杯具就是,会直接将打印信息返回给浏览器

对于第二条,假设我直接将输出重定向的结果会怎样呢,比如执行命令"ps -ef > x",实际上,在apache中执行的话,apache还是一样能拿到输出。由于我是在http header之前输出,所以报了这样的错误。

1
目前我的解决办法是用popen,函数声明如下:

FILE *popen(const char *command, const char *type);

用popen("mailsend dantezhu" ...

最后更新于 .

最近一直在学python,的确为python的简洁所折服,因为工作中可能会经常用到python和c打交道的情况,所以研究了一下C语言扩展的写法,可能比较基础,让高手们见笑啦。

发现原来在windows和linux下面,对C扩展的编译方法是不一样的,我们先来看windows版的。

注:文章部分内容引用来自:
http://www.chinaunix.net/jh/55/563784.html

我们用C实现一个简单的加法。
首先新建一个文件add.c,代码如下:

#include <Python.h>;
static PyObject* add(PyObject *self, PyObject *args); 
//一定声明为static,把他们限制在这个文件范围里。 几乎所有的参数都是PyObject类型。 在python,每个东西都是object。 
static PyObject* add(PyObject* self, PyObject* args) 
{ 
    int x=0 ; 
    int y=0;
    int z=0;
    if ...

最后更新于 .

最近开始研究python,发现vim+python真是如鱼得水呀~,不知道有没有博友也喜欢看糗事百科,这个网站是我和老婆每天必看呀,放松心情非常不错,哈哈 但是用vim习惯了就不想再去麻烦打开个IE还要用鼠标点,所有就研究了一下,如何用vim看糗事。先上个图~

1

需要环境:

  1. Python(默认的windows下的gvim7.3是支持python2.7的,linux下需要安装了python之后重新编译)
  2. BeautifulSoup

使用方法:

  • QB 最新糗事,每调用一次翻一页
  • QBHot 最糗糗事,每调用一次翻一页
  • QBReset 重置当前页码为0

配置:

  • http代理: g:qiushibaike_proxy
  • 超时时间: g:qiushibaike_timeout

下载:到 http://www.vim.org/scripts/script.php?script_id=3083 下载

最后更新于 .

呃,之前在linux下编译过vim,这次由于gvim默认不支持python,所以心血来潮想要想在windows编译一下gvim,好吧,这纯属找虐……

一.准备工作:

1.Mingw,我用的版本是5.1.4

2.vim的源码文件

ftp://ftp.vim.org/pub/vim/pc/ 下载到vim72src.zip, vim72rt.zip, vim72lang.zip三个文件。 下载完之后, 把 vim72src.zp 和 vim72lang.zip 解压到 D:\makevim,查看D:\makevim\vim\vim72 这样的目录结构, 包含src,lang等目录。 vim72rt.zip的有些独特,先不要解压,直接打开看,里面vim\vim72下面会有autoload之类的文件和目录。新建一个目录D:\makevim\vim ...

最后更新于 .

哇咔咔,今天没事在小众软件上逛,居然被我发现了一个用vim发邮件的插件,废话不多少,先上图~ 成功

OK,按顺序介绍一下。

一.实现功能    

1.发送文本    

2.发送文件

二.安装方法    

1.到http://www.vim.org/scripts/script.php?script_id=26 下载压缩包    

2.打开dsw项目文件,用vc6.0或者vs2005编译生成vimmailr.dll,并将这个文件放到环境变量中有的路径中    

3.把vimmailr.vim放到C盘下(或者其他路径)    

4.在vimrc文件中加入如下代码:

let $MYEMAIL="dantezhu@tencent.com"     

source c:\vimmailr.vim     

当然我的邮箱需要改成你自己的…… ...

最后更新于 .

最近在编译项目的时候,出现的multiple definition的错误。仔细排查了.h文件的define定义等,最后发现是自己定义类的时候写法有问题。因为这个问题浪费了很长时间,所以特别记在这里。 做测试如下: 新建一个目录firstdef,在其中创建文件firstdef.h,代码如下:

#ifndef _FIRSTDEF_H_
#define _FIRSTDEF_H_
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
class CFirstDef
{
    public:
        void Show();
        void Error();
        void Test()
        {
            printf("Test\n");
        }
};
void CFirstDef::Show()
{
    printf("OK\n");
}
#endif

对应建立firstdef.cpp,代码如下:

#include "firstdef.h"
void CFirstDef ...

最后更新于 .

最近比较忙,周末又和老婆一起出去旅游,所以近期没有写多少文章,还望各位读者海涵~~ 由于一些原因,今天本来打算写的文章没有办法发布,所以先写一篇比较轻量的应用热一下身,最近要写的Vim相关文章比较多哇~~ 这次主要是想给大家介绍一下vim的一个插件snipmate,链接如下: http://www.vim.org/scripts/script.php?script_id=2540 对于代码段补全,snipmate还是非常有用的(虽然可能会降低你的记忆力)。

现在我们来假设一个场景,平常大家都是怎么写出一个函数实现的呢? 如

int Test() {     //光标在这里 }

好吧,我想应该是这样,先写出一个

int Test() {}

然后ESC,h,o,ESC,j,o 极其麻烦~ 怎么解决?在c.snippets中加入如下代码:

snippet {}     {         ${1}     }

这样,当你在c/c++文件中写完

int Test() {}

之后,只需要点击一下tab键,就会自动变成

int ...