NullPointer的新无效地址

—— Where exceptions happen.

2008年12月24日 星期三

给GreaseMonkey脚本添加自动更新

上个月我给自己的GreaseMonkey脚本写了一段自动更新的代码,不过我实在受不了在user.js文件之间复制代码片段(一股代码腐败的不祥气息),就算为了自利利人,我把这个封装好的对象放在一个单独js文件里,上传到Google Code上了,现在如果你写GreaseMonkey脚本,添加自动更新的简洁方案如下:

1. 给你的userscript脚本注释段添加如下代码
// @require http://userscript-autoupdate-helper.googlecode.com/svn/trunk/autoupdatehelper.js
// @version <版本号>
/* @reason
<更新说明>
@end*/

(@require后面就是上传到google code里的自动更新用代码,里面定义了一个Updater对象,用法见下。<更新说明>会在客户端脚本发现版本号小于userscript.org服务器端版本号时在弹出对话框中显示)

2. 在脚本开头部分添加类似下面的代码片段
var thisScript = {
name: "Delicious自动保存", //脚本名称,请自行修改
id: "35778", //脚本在userscripts.org的id,请自行修改
version:"1.4" // 当前脚本版本号,请自行修改
}
var updater = new Updater(thisScript); // 用thisScript对象创建一个更新器对象
updater.check(); //检查是否有更新


3. 可选的功能是另行设置更新频率(默认是10小时check一次),
在updater.check() 之前调用 updater.setHoursToCheck(t) 即可,
如updater.setHoursToCheck(24) ,则至少与上次检查时间相隔24小时才再次检查。

另外,在更新器对象创建之后,用户也可以右键GreaseMonkey图标,从“用户脚本命令”中选择手动更新脚本。

ps. 这个更新器目前是纯中文版本,所以也不写英文的发布声明了。看GreaseMonkey社区已经有自动更新用的代码片段在流传,不过直接复制粘贴大段代码我总觉得哪里不对 :-P

--
2008年12月25日 补注:
有人告诉我
“@require http://userscript-autoupdate-helper.googlecode.com/svn/trunk/autoupdatehelper.js 不行啊,直接复制倒可以”

在此补充说明一下:GreaseMonkey 0.8版增加的这个特性
@require 在安装脚本时生效,GM会自动下载 url 里指定的js文件到安装目录,直接在脚本里手工修改的话就会不行。对作者而言要先写好上传,然后安装,就能确认生效。 对脚本作者是麻烦一点,不过对用户是透明的。。。而用@require的好处可以简单的总结为:不仅快是生产力,清晰也是生产力。

2008年8月4日 星期一

我知道,我没想到

写文章,看文献,在正题之外,看见许多有趣的东西。按我领会的GTD精神,避免分心的方法是把想到的事都写下来,庶几心里可以不用存事,所以就写下来吧。

1,我知道二战深刻的影响了计算机的诞生,我没想到认知心理学也是被二战推动的。
看书上说二战里有许多实验心理学家被征召,要他们找办法去选出优秀的飞行员和雷达兵。当时的刺激-响应理论暴露了无法实用的问题,需要更具体的模型来刻画人的信息处理过程(准确的说,国防部需要这些模型)。学术研究再次滞后,二战结束(就是二战时候心理学还没准备好,所以出现了《22条军规》这样的血泪控诉),英国的Donald Broadbent发展了第一个注意力的详细模型(飞行员和雷达兵确实需要集中注意力),一堆检测实验方法被提出,最后还发展出了专用数学工具。

2,我知道条件反射,还包括它的两大类八小类,我没想到药物上瘾和过量致死与条件反射有关。
其实道理很简单,不但食物和电击这样的无条件刺激(US,unconditional stimulation)会和周围条件刺激(CS, conditional stimulation)相关联,产生条件反射,吸毒行为作为US,也会和出现的CS(例如地点,或一起吸毒的朋友)相关联,最终产生条件反射。食物的例子里,分泌唾液的反射行为是为了准备接受食物。同样的,当药物关联的反射行为也是有机体为了接受药物而产生的效应,当条件反射建立(成为药物上瘾者)之后,由于条件反射做了多余的补偿,原先的药物剂量不再能产生作用,于是上瘾者就会不断增加剂量。
更可怕的,当上瘾者在一个新的环境(不同的地点或和不同的人)服药,由于条件反射没有出现,身体没有准备好接受毒品,而他按照原先剂量服药,就容易产生“过量服药”的悲剧——这是采访不少幸存者的结论,许多“过量”情况并不是剂量变大而造成,而是因为在陌生化情景里吃药。此时我脑海里浮现了一个吸毒者倒在一家小旅馆的床上的孤独身影,他只是不知道在外用药,剂量需要打折。。。。呃,我不是要普及这个知识。不过这个知识可以用来治网瘾。例如经常改改上网的条件啥的,习惯无线上网的,估计不容易有网瘾。

3,我知道电击实验很变态,我没想到这么变态。
话说心理学家对狗做实验的时候喜欢用电击做惩罚手段,一惩再惩,狗就学会不要去做某事——抑制性条件反射。但有变态的发现,如果狗不幸被不可预期且不可控制(比如电击是否停止与狗的行为无关,不是你乖就不电你)的电击恶搞过,那么以后再当狗有机会逃离电击的时候,它们也无力逃离。不但如此,狗还会表现出一系列心理问题:
沮丧(情绪反应被压抑),消极(在可逃离电击的情况下也不做努力),认知缺陷(在实验后期,认识不到电击是可控的。),这些综合起来,就是所谓“习得性无助”,这套理论现在被用于解释和治疗各种抑郁和行为障碍。
给人民意料之外的电击可以制造顺民。1984的老大哥还在费心讲道理,不学习就落后了啊,其实只需要不断的电击,如人类有限历史里部分时间部分地区的实践所证明的那样……



2008年7月29日 星期二

新搜索引擎Cuil登场,酷哦

凌晨起来干活,扫了眼AideRSS过滤出来的大消息,前四条有三条都关于Cuil。说是一个新搜索引擎(。。。),说拿了3000万美元风投(。。),说是前google员工出来做的(。),说是世界最大(?!),说有全新的搜索界面(!~),说一直秘密开发现在隆重登场云云(TechCrunch的消息),那就去看看吧:


Pros:
1,对搜索结果做了关联聚类,把相关的关键字整理在一个Ajax动态效果的分栏列表里,相当好用,这里背后不仅仅是文本挖掘,自动聚类,还明显包含了知识工程的杰作,关键词经过了细心的(人工?)分类,且每个关键字都有解释!(把鼠标悬停在上面可见)
用户面对众多搜索结果,传统的浏览方式就是从头到尾一一遍历,所以只有前几条结果有意义,但Cuil提供了这个按语义组织起来的快捷目录,直接改进了搜索结果的存在方式,现在用户可以对所搜索的对象有一个全景式俯瞰..并选择你感兴趣的方向做进一步深入了解,Cuil提供了另一种搜索体验,这看来是它和google竞争的关键武器。



2,如果搜索关键字有歧义,Cuil会自动提示进一步的限制关键字,这本身很多搜索引擎都有,不过Cuil把这个处理成页面顶部的tab栏,显得很自然。


3, 一些零碎的优点,Cuil的黑色首页比Google/Baidu的白色首页省电,更环保? Cuil版面的特意设计让Cuil的用户基本不用翻屏。Cuil并且很酷的表示它分析网页间的关系就足够了,所以它对你的个人信息和兴趣偏好不感兴趣,绝对不记录你的任何个人搜索历史,也不会利用cookie上传什么东西——这是个标榜“谢绝隐私”的搜索引擎。

Cons:
1,Cuil虽然在新闻稿里吹嘘自己是最大的搜索引擎,收录网页是google的3倍,不过他们应该用的是过时的数据。。Google索引的网页已经在“1 trillion unique URLs”的规模,而Cuil索引的只有120 Billion. 讽刺性的测试是用Cuil 搜索"Cuil—the world’s biggest search engine.",比较用google搜索同样的字串。目前还是google强。。强很多。

2,Cuil现在只索引英语网页,不支持其他语言。

3,Cuil在搜索不同关键词的时候时快时慢,表现得不稳定。刚才Cuil干脆给了一个

No results because of high load...

看来3000万风投对于搜索引擎来说还是不够烧的。。。

ps. 豆瓣9点4套居然一条提到Cuil的消息也没有。。。

2008年6月10日 星期二

狂飙三法:断章取义,生吞活剥,欲速不达

关于狂飙,可参考狂飙突进读书青年团小组
这三个读书方法的主要用途:
当你有一堆某领域的书要快速消化写成文献综述,
当你面对一本买了好久没精神细细翻看的大部头,
当你借图书馆的几本书已经过期,多看一天都是钱……

ok,这时候就用得上断章取义,生吞活剥,欲速不达的工夫

一,断章取义法
断章取义要这样解:
断,判断;章,章节目录。取,选择;义,有意义的内容。

断章取义就是要在读之前明确自己的阅读主题,打开目录,快速判断值得读的内容。然后直达该章该节的开头。从那里开始阅读,比从第一章第一节开始要动人多了。那些不重要的铺垫,可以像拍电影一样,当重要部分告一段落的时候再蒙太奇回到过去简单交代一下即可。什么都按时间顺序来,自然就平平无奇。

二,生吞活剥法
生吞活剥要这样解:
生吞,面对陌生领域的内容,不妨囫囵吞下,观其大意。
活剥,处理修辞鲜活的文章要剥掉皮毛,观其经脉。

生吞的要领,吞其头尾。如果你对这本书讲的东西甚是生疏,就不宜直接断章取义,应该先试图知道个大概。这时候就要生吞它的一头一尾。头就是摘要或序言或第一章第一节,尾就是总结或附录或最后一章。头往往是浅近介绍,尾往往有简略回顾,吞掉头尾,大意总能了了,然后就接着转断章取义。

活剥的要领,有的书或文章文字华丽,修辞繁复,不管你读了是赞叹还是囧rz,最好得习惯剥掉修辞那层皮毛,直接看它逻辑的经脉到底是什么。不能看完全文只对辞藻和几个警句留下印象。警句要是建立在胡话的基础上,也不过是华丽的胡话。

三,欲速不达法
欲速不达要这样解:
欲,想要;速,快;不,不必;达,完成。
合起来就是,你要是想读得快,就不必读完它。

欲速不达是狂飙的基础法则,没有什么书真的需要全部读完:有名的例子如石头记,我们只读了它的前八十回,一样欢喜赞叹。
考虑到meme(不知道这是什么的人去读《谜米机器》)的扩散规律,你不会错过真正重要的思想,一个好意思会出现在许多不同的书里,被许多不同的作者反复提及。所以只要你读得足够多,你迟早会遇到它。所以放心的放下手头没看完的书,去读下一本吧。

2008年5月29日 星期四

【读书笔记】自由意志与神经生物学


雅斯贝斯说过,“如果从事哲学思维的人不深入到科学里面去,没有对世界的明晰认识,那他始终是个瞎子。”(见他的《生存哲学》,p.9,ps,该书导言对科学与哲学的分工关系有一针见血的论述)但大多数哲学家依然在调制晦涩抽象与诗意感悟的鸡尾酒,科学知识——那些关于实在世界的现象性事实并不在哲学家或宏大或微妙的各种抽象范畴的描述兴趣中。相比之下,J.R.赛尔的哲学却有着理科般的清晰明快风格,并且将不同门类的科学知识以毫不生硬的方式引入他的哲学研究之中。这本薄薄的小册子是他在巴黎所作的讲座记录,前55页是《自由意志与神经生物学》,后25页是《言语行为与权力》,时间有限,这篇读书笔记就先简单总结我比较熟悉的前半部分。

按赛尔的观点,自由意志是哲学的一个丑闻:它由来已久,却毫无进展。(我得说,按这个标准,哲学就是一个丑闻缠身的学科。)自由意志之所以构成一个哲学问题,是因为它和因果决定论构成了互不相容的矛盾,而后者是我们赖以理解世界的基本逻辑框架。

在我们最普通的日常观念里,我们都接受万事万物间存在先后承继彼此支配的因果关系。“万事有因”这种观念,哲学称之为“决定论”。但当你下一个决定时,你所体验到的恰恰是无法被外部决定的“自由”。你决定买某个品牌,你决定投给某个候选人,你决定去看电影还是看展览,...这些都是被强制给予的自由意志的经验。自由意志它无法被放弃,且无法用决定论取代。当你坐在饭店里拒绝行使自己的自由意志去点菜,饭店不会因为“万事先定”的决定论给你送上理论上被决定了的晚餐。你要做出行动,你就必须先运用你的自由意志去做一个自由的决定。这个做决定的“自由瞬间”被赛尔称之为“间隔”,我理解所谓“间隔”其实也是“因果链条间的间隔”,在每个动机和行为之间,自由意志出现,而强制性的因果链条断裂。

显然自由意志的存在本身就成了问题,接受“自由意志”的存在,世界的因果有序性就遭遇挑战。反之亦然。这里赛尔敏锐的附带指出,虽然有人试图用在量子力学层次引入的非决定论宇宙观来解释自由意志。但是“认为我们的某些行为是自由的”和“认为这些行为是偶然的”完全不同,所以量子非决定论对于自由意志而言并无帮助。

赛尔接着将自由意志做出决定的过程还原到了神经科学层面,他指出意志的一个决定其实对应着神经层次中无数神经元的工作和神经信号的传递,当你决定要举起手,就有一个神经信号从大脑向下一路传递到手臂的运动神经元,于是肌肉收缩,你举起了手。接着赛尔问出了关键的问题:

“……问题如下,既然在我们作一个理智决定的情况中,在高级层次上有间隔的存在,那么我们如何在神经生物学的层次上表现这个间隔呢?”

赛尔在这里借用了希腊神话里帕里斯向三位女神送出代表最美丽女神的金苹果的故事来具体分析这个神经层次的间隔:
设令帕里斯开始思考的时刻为t1,而他下决定把金苹果给阿佛洛狄忒的时刻为t2,并规定在t1和t2之间没有出现其他的外部刺激。在t1时刻,帕里斯拥有全部信息,并基于这些信息他作出决定。从t1到t2他深思熟虑金苹果应该给谁的时间间隙,就是所谓的间隔。
于是我们得以精确的描述自由意志问题如下:
  • 假如t1时,帕里斯大脑的全部状态从因果关系上看足以决定他在t2时刻大脑的全部状态——那么他就不具有自由意志。
  • 假如从因果关系上,帕里斯大脑在t1时的状态不足以决定接下来一系列直到t2时脑的状态——那么他具有自由意志。
这分别对应两种截然不同的假设:
  • 假设⑴. 大脑的状态是充分的因果条件
  • 假设⑵. 大脑的状态不是充分的因果条件

在假设⑴的情况下,自由意志只是一种假象,在底层的神经生物学上,一系列神经生物学事件都从因果关系保证了下一个神经事件的发生,帕里斯体验到了他的自由意志,但在神经生物学层次上却没有真正的自由意志。赛尔称之为“神经生物学决定论”,并且大多数神经生物学家也认同这个解释。但赛尔提出一个进化论角度的辩驳,“对于高级的人类和动物而言,做出理智决定需要付出很大代价,因此从进化论的观点来看,如果理智决定仅是不起实际作用的假象,这就类似假设视觉或味觉在进化中没有起作用一样。”

虽然假设⑴简单严谨自足,但它毫不留情的剥夺了人类的自尊心,所以赛尔把更多精力用于讨论假设⑵如何成立。

在假设⑵为真的情况下,赛尔由易至难展开了他认为的需要满足的三个条件。
  1. 意识对身体具有因果作用。
  2. 脑导致并支持一个有意识自我的存在。后者能作出理智的决定并将其付诸行动。
  3. 脑就是有意识的自我,在我们关注的间隔中,它作出决定,并在这些决定基础上行动,因此不管决定还是行为都不是充分的因果条件决定的。
在这里,赛尔实质上将间隔问题从脑推到了实现机制不明的“自我”之上(显然有违奥卡姆剃刀原则)。他自己也承认这只是制造了更多的问题,而不是解决问题。但他为自己较倾向假设⑵的立场提供了一个有趣的辩护:

“如果人们提出假设⑴是正确的,您能接受吗?”,这等价于问
“如果人们指出自由理智的决定是不存在的,那么您是否可以自由且理智地作出决定,是否要接受这种不存在的事实呢?”


简介结束,下面是我的一些批评:
赛尔所作的简单两分的假设⑴和假设⑵很可能都不是大脑复杂运作机制的真相。
回归常识,假设⑴所描述的“作为一种假象的自由意志或理智决定”其实是每个人都有体验的日常心理现象:各种刻板印象,固有立场,思维盲区难道不是一直在支配人们在大多数时候的“自由意志”?思维的自由是可能的,但在许多时候,它退化为一种假象,人一旦听任自己由习惯偏见所支配,也就等于完全由神经系统预设的因果关系来作出决定。
而假设⑵(即大脑不会被某一时刻的状态决定其后续时刻的状态)有一定的成立条件,在高层的认知层面是自省和反思。当思维活动以自身为省思对象的时候,这时将在底层的神经系统出现一个动态团聚而成的自反馈环路,动态团聚的典型特征是对初条件极度敏感。用动力系统的语言来说,在动态团聚的区域有很多共存的吸引子,它们的吸引盆的形状可能是某种分形。这就使得“自由”成为可能,即系统可以从截然不同的初始条件演化至一个确定的吸引子状态(作出决定),但随着自省过程在底层的不断迭代,微小的扰动就可以使演化轨迹脱离吸引子(改变决定)。自省式思索的功能可以看作由系统自发产生扰动以搜索合适的吸引盆,而何时达成决定,就需要大脑其他部分(意识?潜意识?欲望?)是否对此团聚所产生的输出满意。一个神经生物学的常识是,脑并非一个统一且一致的器官。脑是由许多不同构造不同功能的子系统所构成。所以自由意志是可能的,它是大脑不同部位紧密配合的整体结果,自由的大脑产生于无知的因果论的神经元群体之上。

在我看来,我们的思维未必自由,但可以自由。这里的选择本身是自由的。