Posts Tagged Programming
初用 Google App Engine
Posted by hzmangel in Happy coding on 2008-04-09
在邮件列表中看到了这个东西,感觉满好玩的,是用python的,也满合胃口的,申请了一下,然后过了一会拿到的许可。有人说是在后台有一个sleep 3000,呵呵,不知道是真的假的。反正我是有了,用着玩玩吧。
下载了SDK,没细看里面的目录结构,只是知道里面有一个脚本可以当作开发时的服务器,还有一个脚本可以用以把文件上传。网站上有一个教程,老例子,上来先是一个helloworld。它的工程中需要有一个app.yaml用以标识工程的ID,刚写的那个yaml文件如下:
application: sonic version: 1 runtime: python api_version: 1 handlers: - url: /.* script: helloworld.py
version是工程的版本,runtime version和api_version这俩目前只有一种选择,不知道以后会不会更改。然后就是写主要的部分了,handlers。首先是以减号开始,后跟url关键字,冒号后是正则的URL列表,下一行的script是标明处理这个URL的脚本,后面自己写的。如果在url字段中用了正则表达式,则将请求传入脚本时会自动将匹配的字符串作为参数。后面的那些静态文件和登录啥的没细看,看到再写。
然后就是里面的helloworld.py文件了,最简单的就是三个print,当时看到我直接喷了,真的。 简单的不能再简单的代码了。
print 'Content-Type: text/plain' print '' print 'Hello, world!'
反正就是这么简单。然后运行它的那个简单的服务器,运行时需要指明工程的目录,即包含有app.yaml文件的目录。运行后就可以通过浏览访问8080端口来测试服务了。还好第二个程序算是有点内容了,虽然也还是HelloWorld,但是它用了webapp的框架,代码量也有点多了。
import wsgiref.handlers
from google.appengine.ext import webapp
class MainPage(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')
def main():
application = webapp.WSGIApplication([('/', MainPage)], debug=True)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == "__main__":
main()
在main函数中,应该是通过WSGIApplication确定了对于某些特定的请求,使用哪个类来处理,get()方法用于响应HTTP GET的请求,其它的函数还没细看。返回结果和上一个差不多,嗯。
最后需要把程序部署到google的服务器上,使用它的appcfg.py上传,需要把app.yaml中的那个application改成申请下来的id,然后上传,输入邮箱,密码啥的。然后就可以通过 http://
给iphone传电子书
没在iphone上找到好玩的游戏,只好拿它当电子书阅读器了。文章转换文件名格式说了怎么转换文件格式,其实文本的格式也需要转换的。把用的脚本写出来吧。
首先,弄到的txt是用cterm从水木上弄下来的,理由很简单,cterm的F4下载太好用了,所以我就懒了,呵呵。然后用HFS(www.rejetto.com/hfs/)开服务器,本来是想在iphone的SSH上直接wget的,费了好大力气找到了可用的wget后下载居然是乱码,从文件名到内容,只好自力更生了。
用wget把文章弄到那台Linux机器上,在这需要提一下,HFS有可以直接打包下载文件夹的功能,把一个文件夹打成一个tar包传过来,很好用的功能。
下载下来后,解压。由于我的Linux的终端编码是utf8的,自然乱码就出来了先用convmv转文件名,转完后再用iconv转文本格式。由于iconv不能批量转,所以写了个py脚本用来弄这个,诶,不会sh脚本的人只能这么玩了。
#!/usr/bin/python2.5
import glob
import os
filenames = glob.glob('*.txt')
for foo in filenames:
tmp_name = foo.replace('Download\\', '')
cmd_str = 'iconv -f gb18030 -t utf8 "%s" -o "%s"' % (foo, tmp_name)
os.system(cmd_str)
os.system('rm "%s"' % foo)
print tmp_name
中间还加上了文件名转换的功能,因为解压时文件名多了点东西。 需要注意的就是那个cmd_str两个%s加上的引号,因为文件名中间有空格,所以如果不加的话命令执行会出错。源目标格式选18030主要是怕有些特殊字符。等全转完后直接用scp拷到iphone就行了。SSH真的很好用,临了再感叹一下,Linux下的东西有些真的是方便至极。
python中的静态成员函数
Posted by hzmangel in Happy coding on 2007-10-17
被C++郁闷了,编译一次老半天,于是又想到了Python。在试着把C++的东西转过来的时候,突然想要用到静态方法,正要在def前面加个static,突然想到没有这么玩的啊,于是查自带的文档,居然被我找到了。 Read the rest of this entry »
雁过留声