蓝天,小湖,湖水中一方小筑

App Engine 的模板支持......

是支持模板了,但是居然只支持把模板放在工程的根目录,好像是权限的原因。郁闷啊,想好的目录结构就这样被破坏了,还好支持把css等静态文件扔在别的文件夹。明天折 腾折腾UI吧,困了,睡觉。

在 App Engine 中使用模板和静态文件

看到App Engine支持模板,扫了一眼,和Django的就是一样的,它下面的链接也直接说了,用的就是Django的模板系统。看来这次又有便宜可占了,直接 上手,不错不错。 和Django中一样,需要使用静态文件,但是在yaml文件中设置了static_dir再起服务器死活就是开不起来,直接去google.com找未果,然后想到 了它的开发group,果然碰到一群和我碰到同样问题的人。后来好像说原因是因为Windowz下用的是 \ 作为路径分隔符,在某个正则中变了转义,所以就那个啥了 。一种解决方法是在yaml文件中把所有的静态文件写进去,看着头就大;还好有人想到了用正则,于是就有了一种新的方法。 - url: /stylesheets/(.*) static_files: stylesheets/\1 upload: stylesheets/(.*) 查了一下,upload参数的意思没看太明白,好像是说如果文件匹配此参数后面的正则,就被这个handler接管,主要用处是确定和url和static_file s后面正则匹配的路径对应于哪个文件。汗自己的英语理解力,反正先用上了,确定能用了。然后按教程中写的,直接渲染吧。 居然发现了一个bug,呵呵,有意思。

初用 Google App Engine

在邮件列表中看到了这个东西,感觉满好玩的,是用python的,也满合胃口的,申请了一下,然后过了一会拿到的许可。有人说是在后台有一个sleep 3000,呵呵,不知道是真的假的。反正我是有了,用着玩玩吧。 下载了SDK,没细看里面的目录结构,只是知道里面有一个脚本可以当作开发时的服务器,还有一个脚本可以用以把文件上传。网站上有一个教程,老例子,上来先是一个he lloworld。它的工程中需要有一个app.yaml用以标识工程的ID,刚写的那个yaml文件如下: application: sonic version: 1 runtime: python api_version: 1 handlers: - url: /.* script: helloworld.py version是工程的版本,runtime version和api_version这俩目前只有一种选择,不知道以后会不会更改。然后就是写主要的部分了,han dlers。首先是以减号开始,后跟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://.

Python取当前循环次数

在groups上瞎逛,看到了这个,觉得满有用的,于是复制到这里一份。 在循环中使用enumerate可以同时取得循环次数和循环变量的值,使用方法是这样的 1 for i,v in enumerate(['a','b']): 2 print i,v 内置的函数,从2.3版加上去的。在这记一笔……

没有雨的清明

应该是在北京过的第七个清明吧,只知道这是第一个有假放的清明,于是乎,北京的大街小巷上又充斥着一堆一堆又一堆的人,各种口音,各种肤色,把本就已经熙熙攘攘的街道 ,商场,景点等能放的下人的地方,变的更加拥挤。 在来北京之前,一直固执的认为,清明就应该是在如丝的细雨中度过的,静静的小雨,把天地间的一切东西都蒙在一层淡淡的雾中。行走在雨中,能感觉到轻抚在身上的雨丝,很 舒服。在脑海中还会浮现出这样一个场景:一个牧童,骑在青牛上,吹着用青竹削制的牧笛(指不指杏花村,无所谓了啦)。这一切就是是一幅活动的水墨画卷。丝丝的小雨在我 们那倒是比较常见,刚好清明前后那几天总会有几天大概是样的天气,所以也就一直没有更改自己的想法。但是等到了这边,才知道,清明并不是非要雨纷纷的,太阳公公在这段 时间也是可以露脸的,虽然感觉有些不舒服。其实感觉到更不舒服的就是太阳公公好勤劳啊,一年365天基本上天天上班。 已经忘记了江南水乡的春天,7年的日子,改变了我很多,虽然没有真正喜欢上这个地方,但是还是慢慢的在被迫熟悉于它的一切。就要走到人生的第一个转折点了,希望我能走 好,不知道几年后,我会不会对这个地方产生感情,同样也不知道几年后,我是否会换一个地方继续漂着,还有不知道几年后,我会走哪一条路,做什么样的工作。太多的不确定 因素,使我已经不敢对我的未来做出期望,最多也就是可以在脑海中憧憬一下某些场景,然后继续回到残酷的现实中,是不是只有等自己过上了清明节,才能说的上是不会变了呢 ,因为大家都说盖棺定论嘛…… 也已经有7年没有在清明的时候,给家里面那些搬到另一个世界的老人们烧纸了,虽然知道这也许只是一种给活人的寄托,但是,又没有理由让它消失,那就放那放着吧。怀念爷 爷他们,不知道在那边过的好不好(老人家好像没托梦,应该还行吧,呵呵),晚辈在此给您几位请安了。 PS1:发现自己总是忘不了家乡的春雨,都快成月经贴了…… PS2:同样固执的认为,清明就是在4月5号,但是今天从老妈的电话中得知,今年的清明是今天…… PS3:阳光明媚的清明,总是找不到某些感觉,加上现在的假期,估计以后就更难找了。话说,哪怕给个阴天也好啊……

香山 -> 六郎庄,穿越?

下午闲着无聊,看着天气不错,有人提议去香山,于是就去了。 先是331,上了车,觉得挤,过了几站才发现,后面还等着一堆人呢。快到香泉环岛的时候,那叫一个堵啊,人又多,忍不了了,下车散步过去的(最郁闷的是我们下车了,那 331开的贼溜……)。两站路走起来倒是很快,买票,进门,在正面转了转,爬吧。爬山倒是没啥好说的,反正只是出来放风,所以没有上到顶,大概爬了点,就开始下山了。 出了东门,在买卖街转了转,想着找辆331回去吧。正以为旅途就此结束,没想到好戏刚开始…… 走出买卖街,先看到的就是几辆公交和一堆私车堵在路上,一动不动,延伸到远方。我们想着,走走看吧,看到车站那边怎么样。然后到了车站,还没找到331的车,就看到等 车的地方那叫一个人山人海啊。几个人一合计,往前走走吧。刚好有点饿了,去路边一家小店吃了份炒饭,于是开始了我们真正的旅程。 刚开始,想着往前走几站,找个别的车子坐坐后倒车,可是越往前走越知道不妙,从香山开出来的车子就没有一个能开的动的,而且上面都是像罐头一样挤满了人,就算想上也上 不去了。没办法,只好继续走。找到个路口,想着就往四环去吧。从香山南路转到闵庄路,然后是北坞村路,最后在六郎庄路上的车。运通113,转498,回学校。 反正这次走路算是走爽了,一路过来,看到的都是大包小包从香山上下来的人,而且就我们这一路,闵庄路快走到头了,才看到第一辆从香山出来的公交车。路上每一个公交车站 那都等着一堆人准备上车,呵呵。 没啥别的想说,就是记录一下这次的行程,可惜没有GPS,不能记录行迹,看着地图又有点犯晕,也就只能记个大概吧。路上风景倒没什么,不过真想骑车再走一次,有几条路 又宽又没车,骑起车来一定会很舒服的,嗯。 感慨一下,人真多啊…… BTW:香山的郁金香还没开,倒是植物园的牡丹说是开了,而且花期就这几天,在考虑是不是再去自虐一把。不知道玉渊潭的樱花能不能等到这个清明过了以后吧,实在不想再 去踩人或者被踩了……

就这么走?

晚上送走了宿舍唯一一个出北京的哥们,没有预想中的离别的伤感,不禁感叹,难道真的老了吗? 昨晚去K歌,不清楚别人怎么样,反正相比于本科毕业那会的K歌,并没有什么离别的气氛,大家一样玩的很high,只是在那几首合唱的地方,有些许的某种情绪。而不像本 科那会,大家都有意的不往那方面去想,在给要走的人唱歌的时候,真的有一种想哭的感觉。 宿舍的哥们就这样离开了呆了两年多的北京,离开了学校。下次再见谁也不知道是什么时候,也许需要看天意的安排吧。平平淡淡的来,平平淡淡的走,难道真的做到了淡如水的 君子之交吗,还是因为我们的心都已经麻木了,who knows。 困了,要睡去了,bless那个在铁轨上颠簸的家伙。放心去飞,勇敢的挥别,说好了这一次不流眼泪……

毕业了?

在别人的地盘上狂灌一通后,想着总该给自己的一亩三分地浇点水吧,于是,就回来了。 最近大家的话题,总离不开毕业和工作,最近也就这俩件大事了。毕业了总有毕业的气氛吧,可惜,真的没有感觉到啥,比不上本科那会,没有那么多的离别之情,一方面也许是 因为大家都还在北京, 另一方面,难道是我们已经麻木了?再说工作,虽然经济独立很有诱惑力,但是想到工作后那么多的事情要考虑,头就继续变大。长大了,需要开始承担责任了,自己以后的路要 怎么走,自己应该做什么事情,基本上没有人可以在你身边指手画脚了,同时这也就意味着,一旦做出的决定出了什么事,处理的方法会更简单了,一个人扛吧。 这段时间走在学校中,经常会不经意的想到这样一个问题,为什么对于这样一个我呆了七年的地方,有时还是让我感觉到些许的陌生。七年,学校除了拆了几幢楼又盖了几幢楼, 加了几个牌子或是换了几个牌子,倒是没有什么太大的变化,但是有时总感觉自己融入不了主干道那汹涌的人流中,总觉得那些人和自己有着或多或少的距离。我也不知道为什么 ,呵呵。 住宿舍的日子已经是一天比一天少了,实验室的女生们基本不见了踪影,同宿舍的一哥们也要滚蛋了,下次再见谁也不知道是什么时候。倒是计划好了一系列的节目,但是真正能 够做的,同样是谁也不清楚有几个,计划总赶不上变化,尤其是对于我们这些将要告别学生生涯的人。还好大部队都在北京,目前只能奢望着周六周日,还能尽量的和学生时期一 样,有机会出去玩玩。 总在失去的时候才感觉到珍贵,现在又一次有了很好的例子。上学的时候周六周日一个一个宅在屋子里面,挥霍着大把大把的时间。等着要滚蛋了,才发现,已经失去了太多的东 西,而且毕业的这些活动,也找不到充足的时间了。目前能做的,就是一切随缘吧。 想着4月底就要正式去工作了,心中也是迷惘,虽然在别人的地方说了迷惘是过客,但是其实自己心里面的迷惘,就像影子一样,走到哪都扔不掉,也许最好的办法就是去忘掉它 ,做好手头的工作吧。不过说起来容易,做起来,呵呵。就这几次在公司培训的过程来看,感觉还满不错的,但是一想到温水煮青蛙这句话,心里面就有些虚,希望自己不会是那 只青蛙吧,不过,这同样是件who knows的事情,自己的雄心壮志,谁知道会不会被时间,被制度,被其它的任何东西磨掉?这两天看完了圈子圈套,第一感觉就是,商 场,太TMD复杂了,社会,是更TMD复杂。对你笑的不一定是你的贵人,同样给你脸色的也不一定是你的对头。没有永远的朋友,只有永远的利益。以后出去后,要先学会做 人啊,不是说遵纪守法,而是学会在这个社会中生存。同样还有一点需要记住的是,公司不是慈善机构,也不是司法机构,无论公司做出什么决定,它一定是需要为它的利益服务 的。公司的老板不会给你讨回公道,他只会寻找出以最小的损失解决问题的方法。前段时间看了点经济方面的东西,那里面的所有假设都是基于一个命题:人是自私的,所有人都 会在条件允许的情况下让自己的利益最大化。没有什么伦理道德的东西,有的只是赤裸裸的现实,残酷的现实。 乱七八糟的写了这么多,自己也不知道写了些啥,夜深了,学校也睡了。虽然对它还有些陌生感,但是回忆录总是要写的,毕竟是在这呆了七年。再说吧,慢慢来,但是,总是要 写的。

Vim中交换奇偶行

在水木上看到了,记下来,以后可能会用到,嗯。答案来自vale@newsmth.org :g/^/+1m-1 g/^/:匹配所有行 +1:定位到下一行 m-1:移到上面去

在ReST文档中使用pygments

最近在整理个东西,本来想用LaTeX做的,但是想想它的代码高亮实在麻烦,而且默认的情况下只有黑白的,真的很难看的;而且最终发布是PDF,有时也不是很方便,所 以考虑用网页的形式弄。不想为这玩意再架个服务器,想来想去,能用好的大概就是 reStructuredText 了。 说是想到了reStructuredText,其实一开始是想自己写一个的,大概也不外乎是标记分析啥的,主要是想要 pygments 带的语法高亮,只是在网上找东西的时候,突然发现 pygments 已经支持了rst的编写,于是就打消了造轮子的想法。毕竟,现在能把文档整理出来是最重要的。但 是用的时候碰到了点问题,它是通过rst的directive支持扩展的。一开始是通过easy_install的包没有那个rst-directive.py的文件 ,使用hg弄下来的代码里面才有;弄下来后紧接着就是安装directive。折腾了半天,直到今天才找到一个网页上有大概的步骤,照做,然后一切搞定。 首先需要把那个rst-directive.py文件拷到docutils/parsers/rst/directives/下,然后再在那个directives目 录下的__init__.py中加一行,‘sourcecode’: (‘rst-directive’, ‘pygments_directive’), 至于加哪,就在类似的地方加吧,里面有一堆directives的,这样就算注册了,然后在rst文档中,就可以使用.. sourcecode这个directive了,rst会自动调用rst-directive中的pygments_directive来处理。 这样处理还不行,因为pygments默认只是把程序通过词法分析器拆开后,归到一个一个的class下,还需要CSS才能生成带颜色的东西。在网上找它的CSS文件 的时候,碰到了一个有用的命令: pygmentize -S default -f html 这样它会在 stdout 输出CSS,直接重定向到文件即可。在rst2html中使用时,可以通过– stylesheet等参数设置使用的CSS,好像默认它会把这些CSS嵌入到网页中去,嗯。 OK了,还是满不错的,代码好看多了,嗯 ^_^