归档 2010年5月

最后更新于 .

今天在把django开发的系统从开发环境搬到外网的时候,发现凡是中文写入Mysql的时候,都会报错:

Data truncation: Data truncated for column xxx

网上搜了一下,排除了字段本身长度不够,剩下只能是因为mysql的默认编码不是utf-8导致,于是请教了数据组的同事,有两个命令可以修改Mysql 库或者表的编码:

修改库的编码:

alter database dbname CHARACTER SET = utf8;

修改表的编码:

alter table tablename CONVERT TO CHARACTER SET utf8;

之后一切OK。

在次仅作记录。

最后更新于 .

在vs中使用vim的映射已经不是什么新鲜事了,不过ViEmu $99的价格实在让人望而却步,但是现在好了,我们多了一个选择:

vsvim
主页:
http://visualstudiogallery.msdn.microsoft.com/zh-CN/59ca71b3-a4a3-46ca-8fe1-0e90e3f79329

这个是以vs2010的标准插件形式存在的,所以也只支持vs2010.
废话不多说,先来看几张图:

 1

注意画红圈的地方(我好不容易才抓拍到的光标呀),用起来比较舒服的原因之一就是保持了和vim一样的块状光标(ViEmu就给改了),所以第一感觉还不错。

打开上面的config按钮,界面如下:

2

上图就是默认的样子。

我大体试了一下其模拟的按键,hjkl是没有问题的,G、gg、u也没有问题,但是zc、zo、C-R、之类的就都不能用了,命令行方面,试了一下:new、:e 之类貌似都不能用。

不过我觉得这样的确已经不错了,本身只是想要vim的按键方式而已,而且除了需要实时预览html的情况,我基本也不会用到vs……

最后更新于 .

在开始这篇文章之前,还是先说点不相干的,最近博客多了不少emacs的文章,并不是我(dante)从Vim转向emacs了,而是由于本博目前是有三个作者的(dante、ian、lr),而ian是用emacs的,所以本着linux本是一家的原则,会把我们的心得都放在这个博客里和大家共享。
 
呵呵,好啦,闲话不多说,进入正题。
最近在做流程系统的时候,发现用showModalDialog来限制用户焦点及流程的确是不错的方法,不过在使用中也发现了两个问题:
1.showModalDialog打开的窗口中,如果是调用form表单或者其他需要重新生成页面的操作,一定会打开新窗口
2.showModalDialog打开的窗口中是无法刷新的
 
感谢google大神的协助,总算让我找到了答案
 
1.通过frame页来装载页面
例如,需要原来的调用是
window.showModalDialog("a.html")

 

我们只需要新建一个页面b.html:
<frameset rows="0,*"> 
<frame src="about:blank"> 
<frame src="a.htm ...

最后更新于 .

最近在用django做网站,惯例,我肯定还是用vim做编辑器……
不过让我有点小惊喜的是,在django的官网上,居然有一片用vim写django的文章。
原文链接如下:

Using Vim with Djangohttp://code.djangoproject.com/wiki/UsingVimWithDjango

文章中包括了自动补全,模板着色,snipmate等众多内容,这里我主要演示一下snipmate的效果。

http://github.com/robhudson/snipmate_for_django下载两个snippets文件,放到你的snippets目录,然后在vimrc中加入如下两行:

au FileType python set ft=python.django
au FileType html set ft=htmldjango.html

打开一个.py文件,输入r2r后,截图如下:

1
还有其他一些vim支持,我就不列举啦,大家有兴趣可以自己看一下。

最后更新于 .

好吧,用pickle的过程真是不顺利……,在mod_python中使用pickle调用dumps向server发包的时候,server那端解包loads时,会报如下错误:

ImportError: No module named _mp_6dce10900009df6fcff2918ac677e596

网上一堆资料,还全是英文,结果最后居然在一个留言里找到了答案……
方法就是,指定class的__module__属性:

#自定义类名为MManRsp,所属模块为mmanpro
MManReq.__module__ = "mmanpro"

答案链接页面:
http://www.modpython.org/pipermail/mod_python/2008-July/025442.html

之后在实例化类对象,调用dumps方法即可。

最近python相关的文章比较多,呵呵,希望博友不要介意~

最后更新于 .

在用C/C++写网络打包/解包时,都是自己用指针偏移来实现对象<->二进制之间的互转,现在既然用了python,也要用一下序列化的思想,所以就使用cPickle来完成这件事情。

不过事情并不顺利……
假设我们在server端和client端通过类MManRsp来进行通信,这个类定义在mmanpro.py中,代码如下:

class MManRsp:
    ret = 0
    pathverlist = []

现在server端对client端回包如下:(源代码并非如此,为了演示,所以简化了代码)

rsp = MManRsp()
data = [('1',1),('2',2)]
for t in data:
    x = do_something(t)#还是返回('1',1)这种类型
    rsp.pathverlist.append(x)
senddata = cPickle.dumps(rsp)
#send

client端解析为:


rsp = cPickle.loads(recvdata ...

最后更新于 .

最近看《python核心编程》,书中实现了一个简单的1对1的TCPserver,但是在实际使用中1对1的形势明显是不行的,所以研究了一下如何在server端通过启动不同的线程(进程)来实现每个链接一个线程。

其实python在类的设计上已经考虑到了这一方面的需求,我们只要在自己的server上继承一下SocketServer.BaseRequestHandler就可以了。
server端代码如下:

#!/usr/bin/env python
import SocketServer
from time import ctime
HOST = ''
PORT = 21567
ADDR = (HOST, PORT)
class MyRequestHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        print '...connected from:', self.client_address
        while True:
            self.request.sendall('[%s] %s' % (ctime(),self.request.recv(1024)))
tcpServ = SocketServer.ThreadingTCPServer(ADDR ...

最后更新于 .

之前已经写了一篇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" ...

每日归档

上个月

2010年4月

下个月

2010年6月

归档