09年12月15日   23 条评论

可以支持分类(或者叫标签)的导出了。
在google code页面加了一个下载连接,方便没有svn时直接下载代码;使用的是r49的版本

这似乎是一篇微博…

标签 :
分类 : Python
Top
09年12月15日   23 条评论

上有一个cron jobs的功能,类似于Linux下的crontab,可以实现在指定规则的时间里去运行程序。利用这个功能和飞信的短信功能就完成一些简单的小应用,比如天气预报,服务器监控,股票大盘实时行情提醒等等。

拿服务器监控来说,我们先注册一个账户,然后创建一个Application,下载一份 的SDK,接下来就写代码了。
(以上过程请自行google之)

monitor.py:

:
  1. #!/usr/bin/env
  2. # -*- coding: utf-8 -*-
  3. #MIT License
  4. #By : cocobear.cn@gmail.com
  5. #
  6.  
  7. from google.appengine.api import urlfetch
  8. from import *
  9.  
  10. def get():
  11.     print('<html><body>')
  12.     url = 'http://61.236.244.162'
  13.     result = urlfetch.fetch(url)
  14.     if result.status_code == 200:
  15.         print('OK')
  16.     else:
  17.         fetion = ('136xxxx','123456','HTTP')
  18.         i = 0
  19.         while True:
  20.             try:
  21.                 fetion.login(FetionOnline)
  22.                 fetion.send_sms('服务器掉了!')
  23.                 fetion.logout()
  24.             except:
  25.                 if i> 5:
  26.                     break
  27.                 continue
  28.     print('</body></html>')
  29.  
  30. if __name__ == '__main__':
  31.     get()

很简单的代码,使用的函数urlfetch.fetch来访问这个地址,如果失败调用来发短信给自己做通知。

app.yaml:

:
  1. application: pythoning
  2. version: 1
  3. runtime:
  4. api_version: 1
  5.  
  6. handlers:
  7. - url: /console/.*
  8.   script: $PYTHON_LIB/google/appengine/ext/admin
  9.   login: admin
  10.  
  11. - url: /monitor
  12.   script: monitor.py
  13.  
  14. - url: /
  15.   static_files: index.html
  16.   upload: index.html

这里指定url映射的规则,访问pythoning.appspot.com/monitor就会执行monitor.py脚本。application需要填写你申请应用时的名称,也就是这个二级域名pythoning,version:当前代码的版本。

index.html:

:
  1. 首页你可以做别的事,比如放个人主页,然后把自己域名指过来。

cron.yaml:

:
  1. cron:
  2. - description: watch http server
  3.   url: /monitor
  4.   schedule: every 1 minutes
  5.   timezone: Asia/Shanghai

关键的一个文件,对monitor这个url进行定时执行,这里是每分钟执行一次; 如果你是写天气预报,就可以写为 7:00 every day,每天早上7点发一次天气预报。

写完这些以后,运行命令:
ls demos/test
app.yaml cron.yaml index.html monitor.py .py
appcfg.py update demos/test
把你的代码提交到服务器上,你可以在的后台Cron Jobs看到:

/monitor
watch http server every 1 minutes (Asia/Shanghai)
2009/12/15 14:06:50 on time Success

上使用r49版本的,请注释掉from select import select,如果只是像上面做提醒的话最后去掉下面的代码(824行):

:
  1. self.get_personal_info()
  2. if not self.get_contactlist():
  3.     d_print("get contactlist error")
  4.     return False
  5. self.get("compactlist",self.__uri,self.contactlist.keys())
  6. response = self.send()
  7. code = self.get_code(response)
  8. if code != 200:
  9.     return False
  10. #self.get("PGGetGroupList",self.__uri)
  11. #response = self.send()
  12.  
  13. self.get_offline_msg()

这里是获得了好友列表,然后给这些好友发一个上线的通知,如果你不想每次提醒的时飞信上的好友都看到你上线,那么就去掉这些,也会加快发送短信的速度。更进一步的优化,你可以去掉TCP通信的相关代码。

ok, 发挥你的想象力,play with and

标签 :
分类 : Python, 编程相关
Top
09年12月13日   6 条评论

先要对在我的那个留言板里留言的几位朋友说声:“对不起”,好久都没注意到自己还有个留言板,所以上面的留言一直没有回复,今天都回复了一下,虽然有几个月前的留言,但我还是回复了。

这个留言板也没多大用处,所以就关了它。

这个网站也就剩下博客了,或许我应该把博客也搬走,比如换到上面,这样就全面把自己交给google了,呵呵。

pythunder现在可以在google code里下载了,需要另一个aes.py文件支持。

标签 :
分类 : Life
Top
09年12月12日   52 条评论

0.2版本发布,协议根据移动09.11.04的飞信版本:Fetion2008 3.5.2(安全加强版)

http://code.google.com/p/pytool/
更新内容包含:

  1. 增加查看飞信好友是否隐身功能
  2. 增加登录时状态的选择[隐身 在线 忙碌 离开]
  3. 日志改用的logging模块
  4. 增加对好友状态改变的处理( 如上线等)
  5. 重写TCP方式中的底层通信函数
  6. 使用对列保存接收到的多余消息( 例如发短信时本来应该返回200 OK 却先来了个BN通知消息,以前这样会出错,现在底层会把BN消息放在队列中,返回200 OK)
  7. 修改了一些异常处理方式
  8. 增加登出,删除好友函数
  9. 改写get_contactlist函数,使用一个dict保存当前的好友列表
  10. 增加一个receive函数 做客户端的时候可以在一个线程中主调用该函数,所有的消息都会yield出来(请参考fetion.py)
  11. 修正向PC发送消息的命令,飞信新增加了一个CatMsg的命令
  12. 增加接收从最新版本PC端发送的消息功能;这个比较麻烦新版本飞信对每一个新会话使用fork出一个线程的方式;
  13. John先给服务器说我要开个新会话,服务应答一个消息说,你去这个IP吧,带着这个密钥
    于是John就连到了这个IP,并使用这个密钥登录,接着发一个包含Bob的uri的邀请命令;
    服务器把这个通知(包含IP 密钥和邀请者John的uri)给Bob,Bob收到服务器的通知后也用同样的密钥登录该IP
    这时John收到Bob进入会话的消息,他就开始正式发消息了

  14. 许多清理了修正
  15. 调整类的结构
  16. 改用MIT License
  17. 增加了一个CLI的飞信客户端 跨平台支持
  18. Fedora8 Python2.5.1测试;Windowx XP Python2.6.4测试;Win7 Python2.6.2测试;Mac 10.5.7 Python2.5.1
  19. 我忘记在这里列出来的

./fetion.py
------------------------基于的一个CLI飞信客户端-------------------------

命令不区分大小写中括号里为命令的缩写

help[?] 显示本帮助信息
ls[l] 列出好友列表
status[st] 改变飞信状态 参数[0隐身 1离开 2忙碌 3在线]
参数为空显示自己的状态
msg[m] 发送消息 参数为序号或手机号 使用quit退出
sms[s] 发送短信 参数为序号或手机号 使用quit退出
参数为空给自己发短信
find[f] 查看好友是否隐身 参数为序号或手机号
add[a] 添加好友 参数为手机号或飞信号
del[d] 删除好友 参数为手机号或飞信号
cls[c] 清屏
quit[q] 退出对话状态
exit[x] 退出飞信

fetion.py特色:

  1. 多线程支持,同时收发消息
  2. 添加,删除,好友,判断好友是否隐身功能
  3. 占用资源少,我正写这博客的时候官方的飞信占我96.8M的内存
  4. 跨平台支持
  5. 扩展性好,加两行代码就可以实现从手机发命令关机等功能
  6. 其它我没发现的
标签 :
分类 : Life
Top
09年10月19日   4 条评论

证书的详细描述在rfc2459中。

简单的来说证书是这样的:

Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING }

TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version shall be v2 or v3
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version shall be v2 or v3
extensions [3] EXPLICIT Extensions OPTIONAL
-- If present, version shall be v3
}

由三部分组成,分别是TBSCertificate,AlgorithmIdentifier ,signatureValue 。TBSCertificate包含了证书的详细信息,如证书编号,颁发者,发行者,过期日期等;AlgorithmIdentifier 是指证书自身使用数字签名算法标识,TBSCertificate中也有一个AlgorithmIdentifier,这个是证书可以用作的数字签名算法标识;signatureValue是指使用AlgorithmIdentifier 所指定的算法对整个TBSCertificate签名得到的数字签名。

可以使用命令行工具生成证书,不过需要用先生成一对RSA密钥对,如果只有公钥需要生产证书,就需要自己通过编程调用函数来生成证书了。自带的例子中有一个生成证书的例子,不过也是先生成一对RSA密钥对。

通过对源代码的分析,可以X509_set_pubkey函数只是用到了RSA结构中的公钥,所以我们可以通过自己创建一个的RSA结构,只设置RSA密钥对中的公钥,来完成证书的生成。

参考代码

该函数入口参数是一个证书的主题名,和128字节的公钥(1024位;RSA中的modulus INTEGER----n),返回一个证书ID,和DER编码的证书,默认使用的publicExponent INTEGER, -- e为65535。

参考:
RFC2459
PKCS#1
openssl

标签 :
分类 : C, 编程相关
Top
09年09月27日   5 条评论

机器型号:-2767CTO

MAC版本:ideneb 1.5.1 mac 10.5.7

使用硬盘安装助手+变色龙(ddmac)从硬盘安装[相关的文章可以G之]

在选择安装包的时候需要注意:
声卡驱动:选择VoodooHDA
网卡驱动:选择Intel82566
芯片驱动:INTEL ICH
电源驱动:VoodooBattery

独立显卡驱动目前似乎没有;无线网卡也不行
输入法使用FIT

感觉还不错,最好使用硬盘安装,而不是刻碟,我刻碟装时速度慢死了.

标签 :
分类 : MAC
Top
09年08月25日   4 条评论

IE6竟然不能连接向同一个网页发请求[做个按钮使用ajax请求一个网址 你们在服务器上发现 其实IE6只发了一次 但是ajax返回确是成功的]

IE7对iframe标签的支持竟然有问题-->http://zhengrenchi.blogbus.com/logs/23056446.html

IE6与IE6 div标签的默认值不一样。

代码报错的位置竟然不是真正出错的位置!

.......

就这些简单的问题折腾了我好几天。前端编程太麻烦了,这么痛苦的开发环境,真是受不了。

标签 :
分类 : Not Language
Top
09年08月04日   5 条评论

Google 的算法分析见:http://www.codeproject.com/KB/scrapbook/googlemap.aspx

Google 使用http://mt[0-3].google.cn/mt/v=cn1.11&hl=zh-CN&x=%d&y=%d&z=%d&s=Galile这样的URL来表示一个放大等级中最小的地图分块。
mt0----mt3是四个Google 的服务器
v=cn1.11 是当前地图的版本 一直在变化中
x,y,z分别代表当前分块所在位置和放大等级,Z=19为最大的放大等级,目前很多城市都可以查看到该等级下的地图
在某个放大等级z下,整个地球被分成2^z分块
x,y可以根据经纬度来计算;x的计算比较好理解(longitude->经度):
longitude=180+longitude #修正经度值到0-360 因为经度的表示是从-180--->180
longTileSize=360.0/(pow(2,zoom)) #计算每个分块所占的角度数
tilex = longitude/longTileSize #计算当前经度所在的分块位置

y的计算要牵扯到墨卡托投影这个地图算法,比较麻烦没看懂。不过并不影响使用,相应的代码上面已经给出来了,然后就可以用下载地图分块,使用PIL库把分块合并。

代码见Google Code

(这个是西安地图):
#GMap2Png(108.80824,34.37075,109.10316,34.15366,16)
参数为你需要确定的图片左上角的经纬度和右下角的经纬度 最后一个是放大的等级
使用的时候需要注意如果你选择的经纬度范围较大,那么放大等级就不能太大,不然要生成一个巨大图片,PIL会报MemoryError的错误。

还有些问题我在CPyUG记录了下来,不过没使用好的解决方案。

标签 :
分类 : Python
Top
09年06月28日   12 条评论

出差去广州了,两个小时的飞机,觉得挺累的,快到广州那会儿还晕了一会儿。广州果然是很闷热,下雨天空气都是热的,还是北方的天气比较好。

从机场到酒店的路上觉得广州很拥挤,房子也乱的很,下了机场大巴走向酒店的那段路几乎和西安中铀线改造一样,几乎没了人行道。

初到广州,印象很不好啊!

标签 :
分类 : Life
Top
09年06月17日   2 条评论

服务器端要对客户端POST 上来的签名后的数据进行验证,本来想着用调用命令行来实现,不过没有找到相关的命令,后来找了下的封装,果然有的:http://php.chinaunix.net/manual/zh/ref.openssl.php

封装的函数也比较好用。(我还想着要是实在不行就用C语言写个CGI来调用 了)

上面的代码中,首先从客户的证书中获取公钥,然后使用openssl_verify($data, $signature, $pubkeyid);对签名后的数据($signature)进行验证,$date为原始数据,$pubkeyid是从证书中读出的公钥,该函数还可以使用第四个参数,设置一个使用的hash算法,默认使用的是sha1。

被注释掉的代码是使用私钥对数据进行签名。

代码中第一行是获取原始的POST数据内容,也就是获取标准输入的数据。如果是写CGI的话可以使用:
data = sys.stdin.read()

代码见:http://code.google.com/p/cocobear/source/browse/trunk/openssl/openssl_php.php

在wordpress日志里加代码一直出错,没办法,只能放在别的地方。

标签 :
分类 : Life
Top