Rss聚合
Posts
Comments

« Prev - Next »

最近在用twisted做数据手法中间件,感觉lineReceiver的方式不足以满足对底层数据传输时的精确控制,比如压缩,按位传输之类。
因此考虑使用比较底层的dataReceived时间,那么可能需要如下代码来拆包解包。
#!python
import struct

class Test:

def __init__ (self):
self.__buffer = ”

def dataReceived(self, data):
self.__buffer = self.__buffer + data

while len(self.__buffer) >= 4:
(length,) = struct.unpack(’I', self.__buffer[:4])
body = self.__buffer[4:4+length]
if len (body) == length:
self.onMessage (body)
self.__buffer = self.__buffer[4+length:]
elif len(body) < length:
print ‘Pack length not enough, wait for next receive’
break
else:
print ‘Error! Error! Error!’
assert False
print ‘Buffer length:’, len (self.__buffer)

def onMessage (self, msg):
print ‘onMessage:’, msg

出自:http://gashero.yeax.com/?p=49

翻译: gashero

Twisted web howto中并没有提及如何创建SSL加密的WEB服务器。其实这个过程很简单,只是需要一些信息而已,所以这里讲一下。

首先,创建SSL服务器需要一个私钥文件,和一个服务器证书。这里假设你是个开发者,只想要一个测试系统,所以也没必要去搞一个正式的公共证书来。OpenSSL就是你想要的。首先,我们生成一个私钥文件:

$ openssl genrsa > privkey.pem

然后生成一个自签名的SLL证书:

$ openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1000

好了,第一个挑战已经搞定了。下一步就是创建服务器了。假设你已经有了一个twisted web服务器,所以你也知道该在哪个端口监听。我们导入 ssl 模块,创建一个SSL服务器上下文,然后调用 reactor 的 listenSSL 方法:

from twisted.internet import reactor,ssl
sslContext=ssl.DefaultOpenSSLContextFactory(
    '/path/to/privkey.pem',
    '/path/to/cacert.pem',
)
reactor.listenSSL(port,site,contextFactory=sslContext)

同样在 twisted.application 中也很容易创建带有上下文的站点,不过这里就懒得介绍了。

gashero懒得介绍的内容,skysbird来介绍:

twisted.application 中,通过如下方式来启用服务器端的SSL支持:

sslContext = ssl.DefaultOpenSSLContextFactory(’./cert/prikey.pem’,’./cert/cacert.pem’)

internet.SSLServer([port number],ISignalFactory(f),contextFactory=sslContext
).setServiceParent(serviceCollection)

gashero附加的内容:

需要使用ssl的功能还需要另外安装一堆东西。包括openssl(0.9.8g)、pyOpenSSL(0.6.0)。安装openssl时,debian源里面没有dev版本,只能自己编译,注意配置时要修改安装路径:

$ ./config --prefix=/usr/local

这样以后就可以正确的编译安装pyOpenSSL了,否则默认情况下找不到OpenSSL。

服务器上线

真不容易,经历3天折腾,代理商让我改ip,说服务器要搬迁,我改了,他们没搬,又不会用non-windows系统,结果生生等了3天,把机器搬过来,才恢复正常。

加这个插件主要是为了利用一下微软公司这么强大的MSN Space!!!!!!!!!!

Protected: 记事本

This post is password protected. To view it please enter your password below:


网上有朋友按照如下办法解决。


I followed instructions here

Code:
http://www.virtualbox.org/wiki/Linux_Downloads

After adding the ‘hardy non-free’ to sources, downloading the key and registering, run update-manager to download and configure the latest version.

When you start up VirtualBox for the first time, any existing VMs have to be converted to a new format, so make sure you backup.

I haven’t fully tested yet, but it’s working fine and the upgrade was painless.

__________________
Running Ubuntu 8.10 LAMP on Toshiba Tecra A9
Give a man fire and keep him warm for a day, set him alight and keep him warm for life
import types
from django.db import models
from django.utils import simplejson as json
from django.core.serializers.json import DateTimeAwareJSONEncoder
from decimal import *
def json_encode(data):
"""
    The main issues with django's default json serializer is that properties that
    had been added to a object dynamically are being ignored (and it also has 
    problems with some models).
    """

def _any(data):
ret = None
if type(data) is types.ListType:
ret = _list(data)
elif type(data) is types.DictType:
ret = _dict(data)
elif isinstance(data, Decimal):
# json.dumps() cant handle Decimal
ret = str(data)
elif isinstance(data, models.query.QuerySet):
# Actually its the same as a list ...
ret = _list(data)
elif isinstance(data, models.Model):
ret = _model(data)
else:
ret = data
return ret

def _model(data):
ret = {}
# If we only have a model, we only want to encode the fields.
for f in data._meta.fields:
ret[f.attname] = _any(getattr(data, f.attname))
# And additionally encode arbitrary properties that had been added.
fields = dir(data.__class__) + ret.keys()
add_ons = [k for k in dir(data) if k not in fields]
for k in add_ons:
ret[k] = _any(getattr(data, k))
return ret

def _list(data):
ret = []
for v in data:
ret.append(_any(v))
return ret

def _dict(data):
ret = {}
for k,v in data.items():
ret[k] = _any(v)
return ret

ret = _any(data)

return json.dumps(ret, cls=DateTimeAwareJSONEncoder)

小学就知道,数学定理中规定了余数永远非负,但是在计算机中的模运算不是这样,因此,不能把计算机程序设计中的模运算等同于数学概念中的取余数。

计算机取模运算的结果符号与被除数一致,也就是说取模运算的结果有可能为负数。
对于正数,二者计算出的结果是相等的,但是负数就不相等了。这就意味着,如果以后在使用数学中余数相关定理的时候,要注意计算机中余数的计算和数学定义不是完全一致的, 所以在计算机上,对于负数,数学定理并不完全适用。当然,对于正数,二者是没有区别的。至于为什么计算机上要这么实现,我想恐怕还是历史原因,最早的计算 机如果这样计算除法(取余是靠除法来完成的),那么就涉及到浮点数的计算以及取下界,这样,将比较大的降低效率,所以实现成了这样的方式,一直沿用至今。

1.  apt-get source subversion 

2.  cd subversion-xxxxx现在是1.4.6

3. 编辑 debian/rules (f.e.:  gedit debian/rules )


ENABLE_JAVAHL=no

修改为:

ENABLE_JAVAHL=yes

并且将rules中的with-jdk的路径位置设置正确

confflags += --enable-javahl --without-jikes --with-jdk=/usr/lib/sun-j2sdk1.5.0

4.  dpkg-buildpackage 

这时候可能会报很多包没装上,一一装好就可以了,但是我装的时候遇到了这样的问题

python2.5-dev:
Depends: python2.5 (=2.5.2-2ubuntu4.1) but 2.5.2-2ubuntu5 is to be installed表明,我的机器上已经装了 2.5.2-2ubuntu5 ,但是应该装2.5.2-2ubuntu4.1

之前之所以装上了2.5.2-2ubuntu5,是因为曾经Python2.5 version 2.5.2-2ubuntu5 在hardy package tree中可用。但是现在已经删除,因为当时的测试出了问题。因此 python2.5-dev对应的版本也就不可用了,解决办法是降级,按照如下方法:

$ sudo apt-get install python2.5-minimal=2.5.2-2ubuntu4.1 python2.5=2.5.2-2ubuntu4.1

另外有一种方法,通过

$ sudo apt-get install libsvn1=1.4.6* libsvn-java=1.4.6* 来降级,我当时是1.5.1 subclipse工作不正常。

ubuntu中eclipse的svn plugin建议使用JNI方式,而eclipse中的packages中的libsvn-javahl的版本有没有达到要求(1.3.1 or later)因此会有一些包冲突出现。我大概的解决方案就是,到http://packages.ubuntu.com/hardy/libsvn1 这个地址下面分别把libsvn1,libsvn-java,libsvn-javahl重新安装一遍。

在ubuntu 8.10下面,无法降级javahl到1.4.1了,那么我们可以把eclipse里面的subeclipse升级为如下地址:
http://subclipse.tigris.org/update_1.4.x/

« Prev - Next »

京ICP备05029144