改变心理学的40项研究

我是学理的,一直没搞明白心理学属于什么范畴,哲学?自然科学?社会科学?看这本书,第一次让我认识到心理学不是哲学,它应是一门科学,而且还有这么多极富创意的实验,不亚于薛定谔之猫,而且前人们已经可以在实验室以非常“自然科学”的方法去研究心理学,真了不起,举几个印象深刻的例子:

老鼠走迷宫

我们可以想象,如果以食物为诱导,老鼠应该能学会走迷宫,不过如果以两只老鼠,对于一个新的迷宫,一只老鼠直接以食物为诱导,记录下学习的天数X,另一只先让它在迷宫几天,再辅以食物诱导,记录下学习的天数Y,你会以为X和Y相比怎么样?

人的本性是天生的吗

这是我和朋友争论过多次的问题,可敬的托马斯等人为了研究这个问题,花费了近8年时间,找了很多分开抚养的同卵双胞胎来研究这个问题,你应该猜到为什么要找分开抚养的同卵双胞胎了,结果也很惊人,证明了我在没看到这个实验结果之前不少想法是错误的。

条件反射的引申实验

小时候学过巴普洛夫著名的条件反射,当时觉得条件反射挺容易理解的,这本书上提到一个引申实验,人的瞳孔是不能受意识控制来放大缩小的,它只受环境光线的控制,而用一面镜子,一个铃铛,一盏灯就可以让自己的瞳孔随着铃铛的声音来放大或缩小,很神奇。。

爱的发现

婴儿与母亲的依恋是因何而产生?这本书提到了哈罗的一个惊人的实验(之所以惊人,是因为实验结果,反正是超出了我的预期),我实在有些佩服这些人的想象力,怎么想得出这样的实验。

我不再一一罗列这些实验,当然除了这些印象深刻的实验,书中还有不少实验(包括一些作者称之为里程碑式的心理学实验)是我没怎么看懂的,也许是我个人的原因。但无论如何,能通过一本书让我记住一些心理学的重要结论也是很有意义的,这些结论很多都是和人的生活息息相关,而通过这些让人过目不忘的实验来加强结论要比单纯的罗列观点和理论要好的多,尤其是对于我这样学理的人。

iRiver Story

两年前,我在新年到来时添了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: 上传一张屏保时的图片:

文理测试

测试一下你是文科还是理科,我估计这个钟表你能看懂6个以上,应该是学理科的,6个以下文科 ;)

clock

这张图来自84,谢谢84的分享

唱歌与混响

今天在一个3平方的屋子里唱歌,三面墙,一面玻璃,效果好的出奇,之前有听过浴室歌手这一说法,今天很明显的验证了一下,绝对成立。

原理上,在唱K的时候,我们会加一些混响,也就是说如果没有加处理的话,正常的人的声音是混响不足(只是针对唱歌,说话则不一样),听起来会干巴巴,混响在室内主要的来源是反射,声音本身在传播或者反射时都会衰减,所以大的房间或是家具比较多的房间,混响会比较小,而空的或是小的房间,混响会比较明显。所以在浴室里唱歌,自然效果会好很多。

混响的副作用就是声音会变的模糊不清,所以要掌握一个度,过犹不及,而录音的时候正好相反,录音时总是希望录下最原始,最清晰的声音,因为混响在计算机的后期处理中是很容易加的,而要把混响后的声音变的清晰可辨则是很困难的(这点和照片道理很相似)。

如果不是我们自己吼的未经处理的原始声音,而是听唱片播出的音乐,那些都是加过混响的声音了,所以很多时候你觉得唱片中歌手的声音很温暖,很“好听”,其实很大一部分功劳应该记在后期加工上,当我们用不同的设备去听声音时,比如用耳机、用音箱在家里放、或是在车上听,由于环境的不同都会导致混响的变化,而唱片只能录一份,不能为一首歌 出耳塞版,客厅版,汽车版,所以录音的人在后期处理时,会把声音在各种不同的地方放来听,以求得最好的平衡,既然是平衡,就不可能在每个环境下都做到最好,所以,有时在某个环境中你听一首歌会特别有感觉,除去听者的心理变化外,可能就是这个环境中配合那首歌的声音达到了一个最好的混响效果了。

话筒电池

2010年的第一贴是一个小发现,我的话筒(有线的)不工作了, 检查了半天没有找到线路上的原因, 偶然想起买的时候,好像老板说过这个有线的电容话筒是有电池的,已经几年过去了, 从来没有换过,一想起这个,马上拆开话筒,再拧开能拧的所有的地方,就看到藏在里面的电池了,换上新的5号电池,解决。

转一下网上找到的资料,俺其实也不懂它为什么它不用信号线来供电:

有些电容麦克风是由内部电池供电,更多的电容麦克风通过信号线接收来自它们所连接的调音台或前置放大器获得电源供应。幻象供电也有称为Simplex Powering的。通常是11到48伏的直流电,同时供应电容头的极化和放大电路的用电。各种电容麦克风耗用的电流为1到12毫安培。许多现代的电容麦克风可以允许9到54伏的电压,它们内部装有整流器,能够适应很宽的电压范围。

百佳软荐[4]-Da Metronome[节拍器]

很早以前下载的节拍器软件,用了很多年,一直在用,简单明了,只有打拍子的功能,没有任何其他的功能,这个推荐给有乐器喜好的人。

有一个很明显的缺点是,每次开始打拍子的时候,前几拍总是不太准,软件的About中,说是由于Windows的实时性不好导致的,我不知道是不是这样,但觉得那些MP3播放软件都可以做到准确播放,这个应该也不是什么问题吧,何况现在的CPU那么强劲,所以我觉得是作者。。。不过还是很感谢的,人家免费做了一个这个,不应该挑剔过多 ; )

同类软件

同类软件有很多比这个功能多的,不过大多是收费的,比如这个FineMetronome。或者可以选择网上在线的版本,比如这里有一个在线的Flash的版本,还有这个,不想下载软件可以用这种在线的版本,不过我还是觉得用一个小软件好些,可以离线使用。

如果手机是智能手机的话装一个在手机上倒是不错,可惜我的S60上没发现好用的或者就是收费的。。

古典与民谣吉他的合影

顺便普及一下,左边的是古典吉他,右边的是民谣吉他,外观上的区别在于:

  • 指板:古典要宽,民谣比较窄,但长一些
  • 缺角:右边的民谣吉他是缺角的,这样便于一些高把位(主要是高音)的演奏
  • 弦:照片上看不清楚,左边的古典吉他是尼龙弦,右边的是钢丝弦

20091219003

Python vs BAT: 用Python来实现批处理

开始将原先的Windows批处理脚本适当的转为Python,好处是自然的,Python的脚本比Windows脚本好维护的多,不过转换不是那么简单直白,一一记录一些心得:

命令行参数

Windows批处理的参数,通常就是通过命令行或者环境变量传给bat,前者就是bat中常见的%1,%2,shift这些东西,在python中可以用OptionParser来实现,OptionParser是我用过最方便的命令行参数解析模块了,可以参考网友总结的中文说明,或者参考一下代码,基本也就清楚如何使用了:

try:
    from optparse import OptionParser
except ImportError:
    try:
        from optik import OptionParser
    except ImportError:
        raise ImportError, 'Requires Python 2.3 or the Optik option parsing library.'
 
parser = OptionParser(usage=u"这个脚本用于测试")
parser.add_option('-p', '--project', dest='project',default=os.path.normpath(os.path.join(os.getcwd(), '../..')),
                  help=u'设置项目目录,缺省为:当前目录的上两级目录')
parser.add_option("-s", '--dosvn', action="store_true", dest="dosvn",
                  help=u'设置是否检测svn,缺省为不检测')
parser.add_option('-w', '--waittimeout', dest='waittimeout',type="int", default=300,
                  help=u'设置启动时的等待超时,缺省为300秒')
 
(options, args) = parser.parse_args(sys.argv[1:])

如果是环境变量,bat中用%environ%的形式,python中则可以用 os.environ.get(”prompt”),这个对应比较直白自然。

其实Windows还支持一些很奇怪的变量(官方叫做Modifier),像是%~dp0,这个是表示当前批处理文件所在目录,这是因为Windows的批处理是在功能有限,也不支持函数,对于一些很常用的操作没办法,只能用这些密码一样的符号来实现了。

启动进程

批处理中最方便的功能就是顺序启动一个个进程了,当然也包括cmd自己的内部命令(比如dir什么的)或者call其他的批处理文件,这些在python中统一归subprocess这个模块来做,官方的文档已近给出用subprocess替代原先的诸如os.system,os.spawn,os.popen之类调用的方法,因为subprocess足够的灵活和强大。比如在bat中想捕获一个子进程的输出到一个变量中,得使用这样的难懂的语法,我前面的帖子中曾经给出过一个这样的例子:

for /F %%A in ('svnlook author -r %REV% %1') do @set AUTHOR=%%A

在Python的subprocess下,就比较简单了:

process = subprocess.Popen(target, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
(stdoutput,erroutput) = process.communicate()
return stdoutput

获取进程返回

批处理中常常通过ERRORLEVEL来判断进程的返回值,来决定下一步的执行,这在python没有问题,用Popen建立的子进程有一个wait方法会等待子进程执行完毕,并返回子进程的return code。

不过对于调用一个bat的情况,则需要通过call来调用,才能得到它的和ERRORLEVEL一样效果的返回值,这点在文档中没有提及,却是非常重要的,下面的函数算是一个例子(绝大部分情况下,使用useCall和useShell都没错):

def run(self, target, useCall=True, useShell=True, cwd=None):
    if useCall:
        target = "call " + target
    process = subprocess.Popen(target, shell=useShell, cwd=cwd)
    process.wait()
    return process.returncode

重定向

这是一个从bat转到python的难点,Windows基本上支持了和Unix类似的stdin、stdout、stderr以及管道等机制,这些在bat中可以和容易的调用,可以在写批处理时比较容易的灵活运用,而在python下要实现还是比较复杂的,不过其实理解以后也不会太难,主要是通过subprocess和python自己的文件处理功能相结合,下面是一个较复杂的例子,说明怎么通过tee.exe来实现子进程的的标准输出、标准错误输出同时定向到屏幕和文件:

self.tee = subprocess.Popen(["tee", LOG_FILE], stdin=subprocess.PIPE)
process = subprocess.Popen(target, shell=True, stdout=self.tee.stdin.fileno(), stderr=subprocess.STDOUT)

tee是来自unixutils的工具,广泛用来解决标准输入同时到标准输出和文件的一个小工具,不知道不用tee的话python怎么简单的解决这个问题,不过用tee的话上面的代码倒是很直接明了。

其他

还有什么批处理转到Python需要注意的,好像没有太多了,基本上,这种转换,一次受累,长时间受益。

停止服务的三天和Live Writer

前几天,因为服务商的问题,我的blog有三天不能打开,原因是我的服务商和服务商的服务商的服务合同没有谈妥,最终我的服务商换了一家服务商,导致这次长时间的停止服务,虽然这次有中断,不过总的来说,对这个服务商,我还是挺满意的,用了两年,只有这次中断超过一天,而且一直速度还算稳定。

这几天也没闲着,看到很多人说Windows Live Writer作为离线的blog编辑器很不错,就下载来用,其实也是因为MSN强制我升级,想想就顺便安装了Live Writer,否则我是不大愿意装MS的这些东西的 ;)

Live Writer算得上一点惊喜了,可能也是这几年用过的MS的让我印象深刻的软件已经极少了,这个有点矮子当中选将军的意思,还是夸一下,尤其是很“开放”、很“兼容”的支持了Wordpress,令我十分高兴,还有一个MS(这里做貌似用)很强大的插件系统,上去搜了一下,一共8个插件 :(

中文翻译不敢恭维,为了找到如何设置帖子的slug,我翻遍了Live Writer的选项,最后。。在英明的网友的指导下,终于发现。。slug被翻译成了"数据域"。

执行-切换-完成-提示

这是我写过的最简单的脚本了,两句话的Windows批处理:

@call %*
@msgbox %* Complete!

作用是,我常会需要做些耗时的操作,比如编译,部署什么的,我希望在做这些事情的时候我可以干点别的什么,然后结束后,能自动给我一个提示,所以写了这个上面这个bat,我命名之为w.bat。

再往后,我只要w ant就会在ant结束后看到华丽的提示框了。

Ps:msgbox不是Windows标准的工具,下载请移步这里

←Older