归档

木头,木头,请告诉我时间是什么??

关于木头总是有很多的故事,而且故事本身总是和时间离不开关系。苍天巨树,它的年轮告诉我们时间的流逝,告诉我们生命的轮回,那一轮一轮的圆圈,虽然静止无语,却似乎在跟我们诉说着无尽的关于时间的故事。。。

今天我们家木头很兴奋,似乎它也对我手上的这个新玩意很感兴趣,一个木质的LED时钟,从外观上看似乎就是一块普通的木头,其实里面大有玄机:1、它能告诉你日期和时间,这是必须的。2、它能告诉你当前温度,这个有点高级。3、它能感应声音自动休眠和唤醒。我把它放在卧室的书桌上,装上三节AA电池,调整当前时间,顺带的调整一下闹钟,soone总是无休止的赖床,必须用这个治一治。下面上上这个LED时钟的真面目

木质LED时钟

木质LED时钟

想和soone一样拥有一个?soone是在这里淘的,赶紧去淘一个吧。

 

[转载]Python 的虛擬環境及多版本開發利器─Virtualenv 與 Pythonbrew

Virtualenv 和 Pythonbrew 都是可以創造虛擬(獨立)Python 環境的工具,只是虛擬(獨立)標的不同。

Virtualenv 可以隔離函數庫需求不同的專案,讓它們不會互相影響。在建立並啟動虛擬環境後,透過 pip 安裝的套件會被放在虛擬環境中,專案就可以擁有一個獨立的環境。

簡而言之,Virtualenv 可以幫你做到:

  • 在沒有權限的情況下安裝新套件
  • 不同專案可以使用不同版本的相同套件
  • 套件版本升級時不會影響其他專案

Pythonbrew 則可以在家目錄中安裝多個 Python,並迅速地切換版本;也可以在指定的 Python 版本下批次測試你的 Python 程式;另外更整合了 Virtualenv。

這篇文章會詳細介紹這兩個工具,讓你在多人開發及多版本開發的環境中更得心應手。 阅读全文

functools模块

在看tornado的源代码的时候发现了functools模块,google一下,发现这里有相关的介绍,很简单,稍微摘录了一下

functools模块提供了两个装饰器。这个模块是Python 2.5后新增的

wraps(wrapped[, assigned][, updated])

total_ordering(cls)

阅读全文

[转]Python:os模块的进程管理

  1. 有两种方式来实现并发性,一种方式是让每个“任务”或“进程”在单独的内在空间中工作,每个都有自已的工作内存区域。不过,虽然进程可在单独的内存空间中执行,但除非这些进程在单独的处理器上执行,否则,实际并不是“同时”运行的。是由操作系统把处理器的时间片分配给一个进程,用完时间片后就需退出处理器等待另一个时间片的到来。另一种方式是在在程序中指定多个“执行线程”,让它们在相同的内存空间中工作。这称为“多线程处理”。线程比进程更有效,因为操作系统不必为每个线程创建单独的内存空间。
  2. 阅读全文

gf3在天安门附近试拍

幸福路人

王府井小吃街

钟楼

钟楼

看起来很忧郁的狮子

仰望的角度

仰望的角度

老北京布鞋

老北京布鞋

同仁堂

同仁堂

热闹的电话亭

热闹的电话亭

这里缺少一个人

这里缺少一个人

无题

无题

老宅第

老宅第

铺首

铺首

小溪

小溪

白椅

白椅

狮头

狮头

华表

华表

[翻译]关于python的“with”声明

从com.lang.python以及其他的一些论坛上看来,一些有经验的python开发者对于在2.5版本新增加的with似乎有一点迷惑。

如同Python的其他方面一样,一旦你了解了with是用来试图解决哪些问题的时候,你会发现其实它很简单。

看看下面的代码片段:

set things up
try:
    do something
finally:
    tear things down

在这里,”set things up” 可以是打开一个文件或者获得一些外部资源,而”tear things down”可能是相对应的关闭打开的文件或者释放或移除一些资源。try-finally结构保证了就算”do something”代码没有真正执行完成,”tear thigs down”部分也总是会被执行。

如果你经常如上面那样编写一些代码,那么将“set things up”和”tear things down“这些代码放到库函数里以便重用是比较方便的。你可以如下面那样作:

def controlled_execution(callback):
    set things up
    try:
        callback(thing)
    finally:
        tear things down

def my_function(thing):
    do something

controlled_execution(my_function)

但上面的代码有一点冗长,特别是在你需要修改局部变量的时候。另一种方法是使用一次性生成器(译者:one-shot generator是这样翻译?),用for-in声明来”包装“这段代码:

def controlled_execution(callback):
    set things up
    try:
        yield thing
    finally:
        tear things down

for thing in controlled_execution():
    do something with thing

当你只想一次性执行一些代码的时候,上面的代码使用循环结构实现仍然有一点奇怪。所以在考虑了一些备选方案后,GvR和python的开发团队最后终于想出了后面的方法,使用对象来代替生成器来控制一个外埔代码片段的行为:

class controlled_execution:
    def __enter__(self):
        set things up
        return thing
    def __exit__(self, type, value, traceback):
        tear thigs down
with controlled_execution() as thing:
    some code

现在,当执行with语句,python解释器评估with后面的表达式,调用该表达式的__enter__方法,并且将__enter__的返回值赋值给as后面的变量,并且不管发生什么,python一定会执行表达式里面定义的__exit__方法。

作为一个额外的好处,__exit__可以在有异常的时候抑制异常或者做一些必要的异常处理。如果是抑制异常的话只要返回true值就可以。比如下面定义的__exit__方法就仅仅判断了TypeError类型的异常,并放弃处理其他所有的异常:

def __exit__(self, type, value, traceback):
    return isinstance(value, TypeError)

在python2.5里面,文件对象已经被预置了__enter__和__exit__方法了:前者简单的返回了文件对象本身而后者则关闭文件:

>>> f = open("x.txt")
>>> f
<open file 'x.txt', mode 'r' at 0x00AE82F0>
>>> f.__enter__()
<open file 'x.txt', mode 'r' at 0x00AE82F0>
>>> f.read(1)
'X'
>>> f.__exit__(None, None, None)
>>> f.read(1)
Traceback (most recent call last):
File "", line 1, in
ValueError: I/O operation on closed file

所以如果要打开一个文件,处理里面的内容并保证关闭打开的文件,你可以简单的这样作:

with open('x.txt') as f:
    data = f.read()
    do something with data

with声明语法看起来不是那么困难,不是吗?

[[补充]]

  1. 如果with后面没带as的话,__enter__返回值将被忽略
  2. __exit__函数的返回值用来指示with-block部分发生的异常是否要re-raise,如果返回False,则会re-raise with-block的异常,如果返回True,则就像什么都没发生

ps:本人不小心看到这篇文章,并很强烈的想做个备份,鉴于是英文的,就自作主张的想翻译一下,可能有很多地方翻译不周到,请指出,谢谢

英文地址:http://effbot.org/zone/python-with-statement.htm

小勤故事

村里有一个小伙子,一看就是来自农村,瘦瘦的,脸还挺白净,说起话来有稍许的腼腆,手掌上的皮肤看起来好像是被烫伤的样子,不过也许是个胎记呢,谁知道。他比我晚来这个村子,记得大概是2011年的夏天来的。从他出现之后我基本每天都能看到他,早上、晚上都能看到,每次看到,他总是很忙碌,我还不知道他叫什么名字,暂且就先叫他小勤吧。

第一次对小勤有印象是在2011年夏天的某一个晚上,那会儿我们每天晚上基本都在街边的大排档喝酒,并激烈的讨论着公司的空降兵。一边喝着扎啤,吃着烧烤,一边言辞激烈的口伐着一切看似很明显又很诡异的不合理。那天晚上我们吃到一半想起买点臭豆腐来换换口味,话说臭豆腐我还是很喜欢吃的,刚好另一个同事也挺喜欢的。以前村子里没有人卖臭豆腐的,小勤就是第一个在这里卖臭豆腐的人,刚好就在大排档门口卖,于是就去点了两份让他送过来,这是第一次看到小勤,也许对他有印象是因为他很及时的出现满足了我们对臭豆腐的口欲吧,虽然小勤的臭豆腐味道并没有什么特别,但至少村子里有卖臭豆腐了,以后可以经常吃到了。

之后的连续几天我们都会去小勤那买臭豆腐作为下酒菜,但我们的交流总是只局限于买卖,“老板,来2份臭豆腐”, “好嘞,要不要辣”, “微辣!送到这边大排档”,“好嘞,稍等马上就好!”。话说按常理我也不应该对一个同性产生什么兴趣,而且我还是个不是很喜欢和陌生人交谈的人。所以之后很多的晚上我也就一般的正常在村子里出入上下班。

过了一段时间,本应该总是在晚上遇到的小勤第一次在白天让我遇到了,早上他在路边卖现磨豆浆,有黑芝麻的,有红豆的,也有花生的,全是现场用干货直接磨的,给人感觉很新鲜很绿色,很安全,至少我们都看得见。晚上卖臭豆腐,早上卖现磨豆浆,看来小勤是个多才多艺的小伙子,是个勤奋的小伙子,这不禁让我刮目相看,好一个上进的小伙子。小勤给我的印象越来越不错,我想他应该是个实在人,一个也许是从某个偏远山里出来的实在人。于是接下去除了城管来的日子我也基本每天都光顾他的豆浆铺,但和买臭豆腐一样,“老板,黑芝麻”,“好的,给,小心烫”。

很长一段时间过后,夏天结束了,空降兵被撂一边了,秋天很快过去,北京的冬天伴随着北风就来了,大排档去不了了,村里那条街道晚上摆摊的人明显变少了很多,只有几家卖说过的和2家卖烧烤的,麻辣烫都关进屋里卖了。小勤的臭豆腐摊也没出来了,也许冬天臭豆腐摊生意并不好,也许小勤受不了晚上的冷,歇了。冬天的晚上就没再看到小勤了,知道有一天,我去一家餐厅吃炒面,那晚好多人都在那里吃,很忙,店里人手不足,我叫的一碗鸡蛋肉丝炒面好久没上,我对着老板喊“老板,我的炒面,快点”,“好的,马上,马上好啊”,这时小勤从外面进来,经过我身边,我看到了他,他也看到了我,他冲我笑笑,我以为他也来吃饭,也笑一笑,不过小勤没有找位置坐下,他直接进了厨房,不一会儿端着我的鸡蛋肉丝炒面过来给我,我楞了一下,“你在这里打工?”, “是啊,呵呵”,转身小勤又进厨房了,我看他很忙。好吧,这小伙子也挺能钻的,不卖臭豆腐了,就改饭店打工,总是想着法子让自己不闲下来,不停的打工赚钱。

上次饭店再遇到小勤后,我就总在想也许小勤是个有故事的人,就像电影或者小说里那样,在他的家乡有一个很爱很爱他的女朋友,不用很漂亮,但一定很温柔,善解人意,很朴实。他曾经答应她,“等我赚夠了钱就回来娶你,你好好等着”。她在山里日复一日的等着,望向北面,等着她的小勤有一天回来,抱着她对她说,“嫁给我吧”,她会毫不犹豫的点头。小勤每天想着山里的她,每天早上醒来就会对着她的照片说,“等我,我很快回来”,然后整装待发的开始一天的工作,也许小勤卖完了豆浆后,还去哪里打工了呢,晚上回来再去饭店帮忙,谁知道呢,我只知道这是一个勤奋的小伙子,一个有着自己理想和目标的人,不管他的目标是多么伟大或者多么渺小,至少他在不停的朝着那个目标去努力奋斗。我相信他会成功,现在将近年关也许年前不会再遇到小勤,他可能回去对着山里心爱的她展示着自己这段时间在北京努力的成果,或者对着他的年迈的母亲和父亲诉说着他在外面奋斗的故事,而老母亲微笑的倾听着,老父亲面无表情的抽着旱烟,时不时的吐一口浓烟出来,看一眼儿子。我想不管日子过的怎样,不管故事会是怎样,小勤都是幸福的。。。

Protected: 2011未完成的遗憾

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


坑爹的用例

今天想在web页面上实现即时输出的效果,于是想到了使用chunked的传输方式来实现,在webpy的官网上找到了这个示例,它利用生成器和yield来实现chunked的输出,官网的示例有一段是这样的:

坑爹的地方就在这里了,,如果完全按照这个示例去做,根本就出不来效果,用httpfox去看请求的那些协议和参数,你会发现,Transfer-Encoding那项会有两个chunked,刚开始我还没怎么注意,直到后来不停尝试才想起这事可能有蹊跷,于是我去掉了web.header(‘Transfer-Encoding’:'chunked’)这段代码,再尝试的时候,发现正常了,效果出来了,看来webpy的http模块已经自动的做了chunked这样格式的解释了,根本不需要再制定。

python一句话开启web server

晚上在虚拟机上想在主机上拷贝一些东西,由于虚拟机上用的是NAT的共享方式,所以通过主机无法找到虚拟机,原本打算通过虚拟机ssh到主机上,发现mac上没装ssh-server无法连接,于是想到直接使用python搭建一个web server,然后通过浏览器访问或者curl直接下载。
python本身自带的SimpleHTTPServer模块,可以快速的在本机上建立一个临时的web server。执行命令如下:python -m SimpleHTTPServer,这样一个web server就开放了,默认端口是8000,如果你想更换端口则可以这样使用python -m SimpleHTTPServer 8888。很方便吧,在浏览器打上http://xx.xx.xx.xx:8000/就能访问到python所运行的当前目录了,想传什么就下吧,方便又快捷。