Dec 31 2007

python map/filter/reduce

python有几个内置的函数很有意思:map/filter/reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并,这几个词还是太抽象了,下面的代码精确的说明了这几个函数的用途:

def map_imp(function, sequence) :
    if function is None: return list(sequence)
    retvals = []
    for element in sequence:
        if (function(element))
            retvals.append(element)
    return retvals

def reduce_imp(function, sequence) :
    arg1 = function(sequence[0])
    for arg2 in sequence[1:] :
        arg1 = function(arg1, arg2)
    return arg1

def filter_imp(function, sequence) :
    retvals = []
    for element in sequence:
        if (function is None and element) or function(element) :
            retvals.append(element)
    return retvals

对于这种逻辑性强的东西,用语言来描述是无助的,代码则要清晰的多。


Dec 30 2007

python classmethod和staticmethod

在早期的python版本(2.2之后)中就有了这两个东东,staticmethod就对应于C++的静态成员函数,而classmetho在C++中是找不到对等体的(它的第一个参数是类对象,而不是类实例)。

def smethodimp(arg):
  do somthing
smethod = staticmethod(smethodimp)

def cmethodimp(cls, arg):
  do something
cmethog = classmethod(cmethodimp)

一般情况下,smethod和smethodimp可以用同一个名字(比如都叫smethod),同样cmethod和cemthodimp也可以同名。

这样的定义总是怪怪的,在2.4版本之后,我们可以用decorator来重写这难看的代码,不过decorator的功能远超出这么简单,我暂时还不能理解其精髓啊(等用时再看吧)。


Dec 28 2007

截图,咔咔

这个网站有点意思,可以提供 任意网站抓图的功能,抓完了,就存在它的网站上,给你一段代码就可以插到blog或什么地方去了,我担心它给的代码里面有啥不好的东东,就直接把图像给放过来了, 也是可以的,如下面的google的快照(它可以截取任意矩形,够拽啊):

The image

似乎这个截图是静态的,如果有个动态的也不错的哈,谁来做一个。。。


Dec 28 2007

python __file__ 与相对路径

用__file__ 来获得脚本所在的路径是比较方便的,但这可能得到的是一个相对路径,比如在脚本test.py中写入:

#!/usr/bin/env python
print __file__

按相对路径./test.py来执行,则打印得到的是相对路径,
按绝对路径执行则得到的是绝对路径。
而按用户目录来执行(~/practice/test.py),则得到的也是绝对路径(~被展开)

所以为了得到绝对路径,我们需要 os.path.realpath(__file__)。


Dec 27 2007

synergy的共享剪贴板

synergy(多台PC共享键盘鼠标的软件)真的很棒(每天都在用啊),在synergy时,共享剪贴板是个很重要的功能,对我来说一边是Linux,一边是Windows2000, 发现在从Windows往Linux拷贝时总有时不能拷贝(反过来总是OK)。

解决方法十分的简单: 再按一次Ctrl-V,可这个简单的解决方法我却是最近才发现,因为一般的,如果我Ctrl-V不能成功,我就会沮丧的认为拷贝不能成功了。但再按一次(不是因为前次没按好),却往往能成功。

世事很多也是同理,在沮丧之前重试一次,也许就有不同的发现。


Dec 27 2007

django调试

用python/django有个好处,调试时用 print 可以在控制台直接输出,而不会送到web输出,也就是说本地的控制台输出和送给brwoser的输出是分开的,这比php要方便一些。

还有一个方法得益于django内置的error page,只要在想要的地方放一个assert False,就可以在django的错误页面中看详细的http信息,变量信息等。

如果这些还不过瘾的话,也许 django loggin 也值得一试(我还没试过)。有了这些调试手段,一般的动态调试基本是用不上了。。。


Dec 26 2007

Leah Culver

这是一个达人mm,通过出售笔记本外壳的"广告"位,为自己攒钱买到了配置相当了得的Macbook pro,广告是通过激光雕刻上去的,因为她在一家机械加工相关的网站工作,这件事也使得她攒了相当的名气(不信可以用google试试) 。

让我很感兴趣的是,她是一个了得的Python/Django程序员, 并作为Lead developer创建了 Pownce 网站,这个网站还是很酷的,基本上可以算一个社交网站,但提供了基于Adobe Air的客户端(这个不是Leah开发的,呵呵),似乎基于Adobe Air的应用也逐渐多了起来。。。


Dec 26 2007

Amarok快捷键

经常用Amarok的话,这几个快捷键是必须要知道的,这样可以在任何时候控制Amarok:
Win+Z,X,C,V,B 分别是 上一首,重播,暂停/播放,停止,下一首

这种快捷键安排是很多播放器软件所支持的(和一些随声听的按钮相对应),只是加上了Windows键,这样就不会和大多数应用程序冲突了。


Dec 24 2007

gedit拖放

再报一个酷料,今天在gedit编辑两个文件时,发现想从一个拷贝到另一个,于是希望能从两个TAB变成两个窗口,就试试将一个TAB用鼠标拖到窗口外面,结果。。。。我的神啊,还真的开了一个新的窗口。

试了试firefox,kate等多tab程序,都不支持这个小花招,gedit还是够神的了,而且我试了一下,将tab从新窗口拖回来也是可以的,又成了两个tab,只是。。。留下一个空的窗口,稍显遗憾。


Dec 24 2007

sqlite 与 mysql的时间函数

很不幸,sqlite和mysql在SQL函数的支持上有很多差异,比如:

这是官方mysql的时间函数说明:
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

这是官方sqlite的时间函数说明:
http://www.sqlite.org/cvstrac/wiki/wiki?p=DateAndTimeFunctions

mysql里面如果 select year(field) 在sqlite里面就需要写成 select strftime("%Y", field), 这个麻烦的说。