IPython是一个更好的Python Shell,在标准Python Shell基础之上提供一些扩展,让Python shell更易用。

安装
在Windows Python 2.x上安装IPython需要下载两个Python扩展,一个是IPython,一个是pyreadline,pyreadline其实不是必须的,但安装后会有更好的shell体验。
安装后会在程序菜单中看到IPython的启动快捷方式,也可以直接执行Python目录下的Scripts下的ipython.py来启动IPython。
Tab补齐
在IPython里,可以使用Tab来做自动补齐,几乎所有的输入都可以用到这个Tab补齐,比如Python语法,包名,接口名等,这是IPython对大部分使用者最方便的地方,尤其是初学者。
即时帮助
另一个很好用的功能是在IPython中,我们可以在很多语句后面加问号,来获得即时的帮助,比如输入 os.path.join ? 回车, 就可以看到这个API的帮助了。
命令历史和宏
IPython中所有输入的命令历史被记录在一个数组中,可以用In[n]来引用这些历史命令字符串,因此 exec In[10]就是重新执行历史中的第10条命令,我们也可以用macro macro_name 2-5 8 这样的命令来把2到5,以及第8条,一共四条命令保存在macro_name这个宏中。直接输入 macro_name 回车就可以执行这个宏了。
然后用store macro_name 来把这个宏保存,这样可以在下次启动IPython之后,依然可用这个宏。把一些常用的多条命令录制成宏,还不错。
update(2010-04-13): 如果是需要GUI的Python Shell,可以尝试wxPython下的PyShell,它有很多类似IPython的功能,注意:不是Sourceforge上那个Pyshell,两个只是同名而已。
April 3rd, 2010 in
code|编程 | tags:
python |
11 Comments
我用7Zip已经好几年了,不同的是,早些年,我还同时安装winrar,现在已经不需要了,这些年不断的进步让7Zip成了最好的压缩解压缩软件,开源,对主流格式的广泛支持,快速的压缩和解压缩,以及7z格式本身很高的压缩率。
从dos时代算起,我使用过的压缩软件大体可以按时间这样做个排序: lha >> pkzip >> arj >> rar >> winzip >> winrar >> 7zip,将来也许还会有更好的软件出现,不过目前最中意的是7zip。
March 28th, 2010 in
百佳软荐 | tags:
software |
No Comments
之前已经写过一篇关于Python subprocess的帖子了,subprocess是Python下标准的用于进程创建、通讯的模块,这里再补充一些,注意:我还一直坚守Python2.x,所以不一定适合Python 3。
简单用法
这是最简单的用法:
p=subprocess.Popen("dir", shell=True)
p.wait()
shell参数根据你要执行的命令的情况来决定,上面是dir命令,就一定要shell=True了,p.wait()可以得到命令的返回值,没有问题。
进程通讯
如果想得到进程的输出,管道是个很方便的方法,这样:
p=subprocess.Popen("dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(stdoutput,erroutput) = p.communicate()
p.communicate会一直等到进程退出,并将标准输出和标准错误输出返回,这样就可以得到子进程的输出了,上面,标准输出和标准错误输出是分开的,也可以合并起来,只需要将stderr参数设置为subprocess.STDOUT就可以了,这样子:
p=subprocess.Popen("dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
(stdoutput,erroutput) = p.communicate()
如果你想一行行处理子进程的输出,也没有问题:
p=subprocess.Popen("dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
buff = p.stdout.readline()
if buff == '' and p.poll() != None:
break
死锁
但是如果你使用了管道,而又不去处理管道的输出,那么小心点,如果子进程输出数据过多,死锁就会发生了,比如下面的用法:
p=subprocess.Popen("longprint", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p.wait()
longprint是一个假想的有大量输出的进程,那么在我的xp, Python2.5的环境下,当输出达到4096时,死锁就发生了。当然,如果我们用p.stdout.readline或者p.communicate去清理输出,那么无论输出多少,死锁都是不会发生的。或者我们不使用管道,比如不做重定向,或者重定向到文件,也都是可以避免死锁的。
异步
无论是使用readline还是communicate,这里有个问题是:他们都是同步的,你没有办法在等待子进程输出的同时做点别的什么事情,标准的subprocess是不支持异步和子进程交互的,幸好,幸好,有人提供了Python 3下的异步方法,我移植到Python2.5下面,可以这样用了:
p=subprocess.Popen("dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
buff = p.asyncread(timeout=0.5)
if buff == '' and p.poll() != None:
break
这里带一个超时去读取子进程的输出,如果超时还没有输出,没关系,父进程可以干点别的什么事情,看起来很棒,subprocess的改动部分代码比较长,不在这里贴了。
关闭
在Python 2.6的subprocess模块中,新增加了一个小的接口就是Terminate,用于进程的终结,可惜可惜,十分遗憾,Windows下,这个Terminate只能杀死subprocess创建的进程,而不能杀死其子进程,如果我们明确知道创建的进程没有子进程,当然可以用这个接口,如果不肯定,则这个接口就没什么用了。
举个简单的例子,如果用shell=True的参数让subprocess创建进程,那么就会多出一个额外的cmd进程,这时用Terminate终结的就是这个cmd进程,而真正那个我们创建的进程则不会被终结。
有很多方法可以对付这个问题,但有一个简单的方法是使用Windows自己提供的taskkill命令,它有一个/T参数,可以杀死一个进程树,正是我们所需要的。subprocess创建的进程有一个pid属性,把pid传给taskkill就ok了。
March 23rd, 2010 in
code|编程 |
No Comments
我见过一些学吉他的人因为喜爱,过多的练习而导致手指受伤,也包括我和我的老师,都曾受过指伤的困扰,所以写下这篇。
我自己的情况是有段时间练习民谣吉他,左手中指感觉很痛,开始我以为很正常,毕竟玩民谣吉他的,左手手指没有不痛过的,不过我渐渐发现,中指的疼痛变得越来越严重,甚至刚开始练习时一按弦就痛了,我才意识到是手指伤了,当时还没有太注意,只是调整了触弦的位置,减少练琴的时间,以希望能慢慢好转。
很快,我才意识到,这样无法根除,每次不小心那个位置触到弦都会很痛,而且持续时间已经很长,超过了一个月,我开始觉得问题严重了,我仔细观察指尖的痛的位置,有个很小的黑点,后来我才知道,那个地方有点淤血,并且在茧子下面,所以很痛。我只能放弃练习,按照别人的建议,每天用热水泡一段时间,幸运的是,大约两个多星期之后,黑点消失了,疼痛也就没有了。
所以还在练习吉他的朋友们,请保护好你们的手指,每天的练习时间不要太长,疼痛即止。如果已经遇到和我同样的问题,记得一定中止练习,等手指完全康复之后再继续。
March 13th, 2010 in
guitar|吉他 | tags:
guitar|吉他 |
2 Comments

我是学理的,一直没搞明白心理学属于什么范畴,哲学?自然科学?社会科学?看这本书,第一次让我认识到心理学不是哲学,它应是一门科学,而且还有这么多极富创意的实验,不亚于薛定谔之猫,而且前人们已经可以在实验室以非常“自然科学”的方法去研究心理学,真了不起,举几个印象深刻的例子:
老鼠走迷宫
我们可以想象,如果以食物为诱导,老鼠应该能学会走迷宫,不过如果以两只老鼠,对于一个新的迷宫,一只老鼠直接以食物为诱导,记录下学习的天数X,另一只先让它在迷宫几天,再辅以食物诱导,记录下学习的天数Y,你会以为X和Y相比怎么样?
人的本性是天生的吗
这是我和朋友争论过多次的问题,可敬的托马斯等人为了研究这个问题,花费了近8年时间,找了很多分开抚养的同卵双胞胎来研究这个问题,你应该猜到为什么要找分开抚养的同卵双胞胎了,结果也很惊人,证明了我在没看到这个实验结果之前不少想法是错误的。
条件反射的引申实验
小时候学过巴普洛夫著名的条件反射,当时觉得条件反射挺容易理解的,这本书上提到一个引申实验,人的瞳孔是不能受意识控制来放大缩小的,它只受环境光线的控制,而用一面镜子,一个铃铛,一盏灯就可以让自己的瞳孔随着铃铛的声音来放大或缩小,很神奇。。
爱的发现
婴儿与母亲的依恋是因何而产生?这本书提到了哈罗的一个惊人的实验(之所以惊人,是因为实验结果,反正是超出了我的预期),我实在有些佩服这些人的想象力,怎么想得出这样的实验。
我不再一一罗列这些实验,当然除了这些印象深刻的实验,书中还有不少实验(包括一些作者称之为里程碑式的心理学实验)是我没怎么看懂的,也许是我个人的原因。但无论如何,能通过一本书让我记住一些心理学的重要结论也是很有意义的,这些结论很多都是和人的生活息息相关,而通过这些让人过目不忘的实验来加强结论要比单纯的罗列观点和理论要好的多,尤其是对于我这样学理的人。
February 22nd, 2010 in
life|随笔、杂七杂八 | tags:
science |
3 Comments
两年前,我在新年到来时添了N73手机,今年,我给自己的礼物是iRiver Story – 电纸书,说来有趣,本是冲着台电的K3去买,可是因为店家缺货,最终选择了iRiver Story。

电子墨水
Story的屏是电子墨水,也就是e-ink,这种屏幕目前都是黑白的,它很神奇的地方在于它是不耗电的,只在切换内容的时候耗点,它是不发光,也没有背光,所以只能在有光的地方看,还有一点很重要,e-ink的屏幕刷新时很慢,全屏的刷新通常都要数秒,Story是3秒左右,所以这种屏是不可能玩游戏,或者看视频(也许以后技术可以进步到可以到毫秒级,先不做梦了。。)。
阅读体验
毫无疑问,电子墨水的阅读体验要远好于液晶屏,这也是我买iRiver Story的主要原因,曾有朋友说这东西价格太高了,我想如果我能用它多读一些书,倒是可以值回这个价钱了,能做到吗?
虽说都是e-ink的屏,不过在城里挑选的时候,还是觉得不同的产品显示效果有不小的差异,尤其是在小字体的时候,有些产品的显示就不够锐利,甚至是同一个产品的不同固件版本都会有差异,在iRiver Story上也很明显,1.61的固件版本就比1.51版本的显示要好一些,所以劝那些想买同类产品的人最好能看看真机再决定。
iRiver Story的屏是8级灰度的,显然灰度越高,显示可以层次越清晰,在字体的边缘尤为明显,不过我觉得8级的灰度看文字已经足够好了,所以也有不少厂家的电纸书用的四级灰度,当然对于图像,8级也自然是远远不够的。
操作
原先我一直觉得键盘的设计对于电纸书,完全是画蛇添足,不过在用过Story之后,发现键盘自有它的道理,首先对于6寸的屏,这是个蛮尴尬的尺寸,即大到不能很好的放在口袋,也小到感觉不像一本书,总之感觉就是不大不小,而Story在加上键盘之后,大小完全向一本书靠拢,拿在手上不那么突兀了。
另外从功能上,键盘也实现了很多快捷的操作以及录入的功能,这些不是很重要,不过也还不错,也许以后可以用键盘做一些记录也有可能,Story反正已经提供了日记和记事的功能。
整个操作UI上,Story中规中矩,刚开始觉得有些复杂,习惯了之后发现还挺好用的,启动蛮快的,操作也比较流畅。
PDF
对于PDF的支持是所有阅读器类产品很重要的一个比较参数,Story做的中规中矩,速度/字体基本都没有问题,打开50M的PDF也比较快,可以支持切白边,这个设计刚开始我很不习惯,因为它是依赖在放大的时候选定两个角,刚开始我没弄明白,为什么一个放大要做这么复杂,后来才知道这就是PDF的切边。当然6寸的屏还是小了一些,必须是制作的很好的PDF才有可能看得比较清楚,那种扫描的图片版的PDF还是不要指望了。
如果对于文字类的PDF,还有一个折中的方法是Reflow,就是像Txt一样去看PDF,就是会将文字在到边之后自动换行,不过这只对文字类的PDF有效,图表比较多的PDF就没办法了。
设计
Story的设计非常棒(看到Kindle的影子?),很好的外观设计,UI设计,很棒的封套(这个封套设计的太好了),还包括软件的设计。
在待机时Story会像计算机的屏幕保护一样随机显示一张名画,手指滑动电源键就可以解除锁定,操作感觉非常好,在设计这方面,Story有很多值得学习的地方。
update: 上传一张屏保时的图片:

February 7th, 2010 in
life|随笔、杂七杂八 |
11 Comments
测试一下你是文科还是理科,我估计这个钟表你能看懂6个以上,应该是学理科的,6个以下文科 ;)
这张图来自84,谢谢84的分享
January 27th, 2010 in
life|随笔、杂七杂八 | tags:
test |
1 Comment
今天在一个3平方的屋子里唱歌,三面墙,一面玻璃,效果好的出奇,之前有听过浴室歌手这一说法,今天很明显的验证了一下,绝对成立。
原理上,在唱K的时候,我们会加一些混响,也就是说如果没有加处理的话,正常的人的声音是混响不足(只是针对唱歌,说话则不一样),听起来会干巴巴,混响在室内主要的来源是反射,声音本身在传播或者反射时都会衰减,所以大的房间或是家具比较多的房间,混响会比较小,而空的或是小的房间,混响会比较明显。所以在浴室里唱歌,自然效果会好很多。
混响的副作用就是声音会变的模糊不清,所以要掌握一个度,过犹不及,而录音的时候正好相反,录音时总是希望录下最原始,最清晰的声音,因为混响在计算机的后期处理中是很容易加的,而要把混响后的声音变的清晰可辨则是很困难的(这点和照片道理很相似)。
如果不是我们自己吼的未经处理的原始声音,而是听唱片播出的音乐,那些都是加过混响的声音了,所以很多时候你觉得唱片中歌手的声音很温暖,很“好听”,其实很大一部分功劳应该记在后期加工上,当我们用不同的设备去听声音时,比如用耳机、用音箱在家里放、或是在车上听,由于环境的不同都会导致混响的变化,而唱片只能录一份,不能为一首歌 出耳塞版,客厅版,汽车版,所以录音的人在后期处理时,会把声音在各种不同的地方放来听,以求得最好的平衡,既然是平衡,就不可能在每个环境下都做到最好,所以,有时在某个环境中你听一首歌会特别有感觉,除去听者的心理变化外,可能就是这个环境中配合那首歌的声音达到了一个最好的混响效果了。
January 24th, 2010 in
life|随笔、杂七杂八 | tags:
record |
No Comments
2010年的第一贴是一个小发现,我的话筒(有线的)不工作了, 检查了半天没有找到线路上的原因, 偶然想起买的时候,好像老板说过这个有线的电容话筒是有电池的,已经几年过去了, 从来没有换过,一想起这个,马上拆开话筒,再拧开能拧的所有的地方,就看到藏在里面的电池了,换上新的5号电池,解决。
转一下网上找到的资料,俺其实也不懂它为什么它不用信号线来供电:
有些电容麦克风是由内部电池供电,更多的电容麦克风通过信号线接收来自它们所连接的调音台或前置放大器获得电源供应。幻象供电也有称为Simplex Powering的。通常是11到48伏的直流电,同时供应电容头的极化和放大电路的用电。各种电容麦克风耗用的电流为1到12毫安培。许多现代的电容麦克风可以允许9到54伏的电压,它们内部装有整流器,能够适应很宽的电压范围。
January 2nd, 2010 in
life|随笔、杂七杂八 | tags:
song |
7 Comments
很早以前下载的节拍器软件,用了很多年,一直在用,简单明了,只有打拍子的功能,没有任何其他的功能,这个推荐给有乐器喜好的人。
有一个很明显的缺点是,每次开始打拍子的时候,前几拍总是不太准,软件的About中,说是由于Windows的实时性不好导致的,我不知道是不是这样,但觉得那些MP3播放软件都可以做到准确播放,这个应该也不是什么问题吧,何况现在的CPU那么强劲,所以我觉得是作者。。。不过还是很感谢的,人家免费做了一个这个,不应该挑剔过多 ; )
同类软件
同类软件有很多比这个功能多的,不过大多是收费的,比如这个FineMetronome。或者可以选择网上在线的版本,比如这里有一个在线的Flash的版本,还有这个,不想下载软件可以用这种在线的版本,不过我还是觉得用一个小软件好些,可以离线使用。
如果手机是智能手机的话装一个在手机上倒是不错,可惜我的S60上没发现好用的或者就是收费的。。
December 27th, 2009 in
百佳软荐 | tags:
sofware |
No Comments