web workers各浏览器下参数传递的差异

2010-4-5 评论(0) 分类:技术文章 Tags:

做军旗游戏时想用web workers消除计算时界面的停滞,实现了后发现在firefox下正常,但在chrome/safari下却不能用,网上关于web workers的资料太少了,也可能是因为我没找到,结果就一直debug了半天,才找出原因所在,原因就是:chrome/safari下,web worker传递的参数全都会被转换成字符串。

chrome/safari下,只能用字符串通信,无法传递其他数据,无论是数组,object,布尔值,数值,全都会被转成字符串,而在firefox下则支持所有数据类型的传递。

看这段示例代码,以下测试在firefox3.5 safari4.0.5 chrome4.1下进行:

HTML:

<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML4.0 Transitional//EN">
<html>
<head>
	<title>Test threads fibonacci</title>
</head>
<body>
    <script type="text/javascript">
		var worker = new Worker("testWorker.js");
		worker.onmessage = function (event) {
			alert("type:" + typeof event.data);
			alert(event.data[1]);
		};
		worker.postMessage([2,3]);
    </script>
</body>
</html>

testWorker.js:

onmessage = function (event) {
    postMessage(event.data.name);
};

safari/chrome显示:type:string “,”(字符串”2,3″第二个字符)
firefox显示:type:object 3(数组第二个元素)

可以把worker.postMessage([2,3]);的参数改成其他类型试试,safari/chrome显示出来的type都是string。

写出来好简单,发现这个却花了我挺多时间,firefox对google创造出来的东西的支持比chrome还好,真是奇怪~
(更多…)

搭建maven & cometd过程

2010-3-27 评论(8) 分类:技术文章 Tags:

近来想做个web game,需要双方持久链接,查了下资料,HTML5的websocket太遥远了得N年后才能流行,用FLASH模拟的socket又限制了没有FLASH插件的浏览器无法玩,最后研究了下comet,发现用这个实现应该靠谱,貌似WEBQQ,gmail里的gtalk,校内的站内提示和聊天都是用comet类似技术。后来找到cometd和pushlet,据说cometd更好,于是就开始捣鼓配置cometd。

配置环境这事儿,要是有有经验的人指点就好了,可以省去90%的时间,可惜没有~只能胡乱摸索。在完全不晓得maven是什么的情况下,配置这个cometd真是折腾死我了,先随便乱整费了很多时间,无果,再在eclipse下载maven插件,捣鼓半天运行不了,最后老老实实地用命令行的方式配置maven,也费了不少时间,但终于运行成功了。记下这个配置的过程,可能以后重装电脑要重新配置时有用。

目前在eclipse还是弄不好maven,运行项目时下载不到所需要的插件无法运行,我纳闷怎么在命令行就可以,在eclipse就不行,maven下载位置都是指向同一个,运行的也是同一个项目,但还是折腾不好。

配置maven

1.到http://maven.apache.org/下载maven,解压到任意一位置,以下假定maven解压地址为C:\Program Files\maven

2.配置环境变量,在变量path的值后面加上C:\Program Files\maven\bin

3.确保jdk环境配置无误:

a.检查变量path的值里有无jdk地址,例如c:\Program Files\Java\jdk1.6.0_10\bin;
b.检查变量有无变量JAVA_HOME,没有则加上,值为JDK地址

4.打开命令提示符(开始-运行-cmd),输入mvn -version检查mvn是否成功配置。

5.打开C:\Program Files\maven\conf\settings.xml,找到<pluginGroups></pluginGroups>,在里面加入<pluginGroup>org.mortbay.jetty</pluginGroup> 如果不加入这句,maven会无法找到和下载jetty,待会运行cometd时会出现这样的错误:

org.apache.maven.plugins:maven-jetty-plugin does not exist or no valid version could be found

6.maven自动下载插件等东西时默认保存在 我的文档/.m2/ 下,如果要改变这个位置,例如保存到maven目录下的down文件夹,可以在setting.xml里面加入<localRepository>/down</localRepository>。注意,目录名字不能有空格,例如c:\program files这个地址是不合法的。
(更多…)

JavaScript里关于this的疑惑

2010-3-12 评论(1) 分类:技术文章

几天前自己捣鼓东西,碰到一个问题:能不能通过一个函数得到此函数所在的对象?例如:

var obj = function() {
    this.fn = function(){
        alert(this);
    }
}

function get(fn) {
    fn();
}

var myObj = new obj();
get(myObj.fn)

目的是让myObj里的函数fn的this始终指向myObj
上面这样把myObj.fn传入到get并在里面运行,结果myObj.fn的this就改变了指向window
可以通过传入myObj再用call达到目的,想问的是,能否不传myObj就能达到目的

function get(fn, obj) {
    fn.call(obj);
}
get(myObj.fn, myObj)

经过各方指点,知道:
(更多…)

YUI2.8自定义事件的一个小bug

2010-3-7 评论(1) 分类:技术文章 Tags:

问题

YUI2.8的自定义事件如果添加了两个相同的侦听函数,在移除这些侦听函数时会有错误:

var testEvent = new YAHOO.util.CustomEvent("testEvent");
testEvent.subscribe(eventHandler);
testEvent.subscribe(eventHandler);
testEvent.unsubscribe(eventHandler);
function eventHandler(){
    alert("testEvent fire");
}
testEvent.fire();
//只会显示一个"testEvent fire"

上面看似没问题,注册了两个相同的侦听函数,执行一次unsubscribe移除了一个,于是只剩一个侦听函数,但事实不是这样:

var testEvent = new YAHOO.util.CustomEvent(&quot;testEvent&quot;);
testEvent.subscribe(eventHandler);
testEvent.subscribe(eventHandler);
testEvent.subscribe(eventHandler);
testEvent.subscribe(eventHandler);
testEvent.unsubscribe(eventHandler);
function eventHandler(){
    alert("testEvent fire");
}
testEvent.fire();
//只会显示两个"testEvent fire"

注册四个相同的侦听函数,执行了一次unsubscribe,却只剩下两个侦听函数有效。

(更多…)

《GQ智族》杂志对我的采访

2010-3-6 评论(6) 分类:生活 Tags:

寒假放假回家后,某天花落去在gtalk上找我,说想采访我,我还以为是要发在新京报的,后来才知道是GQ杂志,挺早之前他写了一篇《推荐了7个值得翻墙访问的twitter用户》发在GQ杂志上,里面也提到了我,那时才对这本时尚杂志有印象。接下来商量具体事宜,因为是GQ杂志,要拍照,说实话当时是真不想让自己出现在杂志上,不拍照,想拍估计也拍不成,因为我在乡下小镇,让我给张平时生活照我也考虑了挺久,最后还是给了。接着是采访方式,我怕电话我会说不出什么东西来,还是在GTalk上聊比较好。

两三天后的一个晚上开始采访,第一次接受采访,才知道原来不会一开始直捣黄龙的,慢慢闲聊,还要聊出个人物形象才行。我以为半个小时到一个小时就能搞定,结果聊了两个半小时才结束,可能是因为在网上聊会慢一点吧,直接电话或面对面的话应该会快很多。

到后来真正在杂志上看到关于自己的文章了,我反而挺希望自己照片出现在杂志上了,可能是因为开始觉得上一次杂志机会难得吧~我的这篇采访是放在《微力量推动中国》专题里的,这个专题有统一的风格,照片实在太专业了,我发的生活照实在跟它不搭调,没放上去,感觉小小遗憾,呵~

其实,看到现在杂志上这篇文章我是有点失望的,因为它跟之前发给我看的稿子出入很大,之前发给我看的稿子标题是“自由生活其实挺难”,这是我真实想法,文中也有提“我期望是活得自由开心轻松,虽然感觉在中国要有这样的生活应该很难。”,但这些全部没了,文章页被删改掉很多,留下来的感觉都无关紧要,标题被改成“我的确很怀旧”,这个感觉应该是采访的一个很小的点,被当主题了。另外那个“web3.0需求”也是之前发给我看的稿子里没有的,有点扯。最后“一直表现淡然的大男孩开心了好一阵”回信时提了这不符合真实情况,结果没改掉~

anyway,能出现在GQ《微力量推动中国》这专题感觉挺荣幸的~~感谢花落去的推荐~

《GQ》2010年3月号第266页:

GQ

空间被封过程

2010-3-2 评论(49) 分类:生活

经过

2月28日下午,突然在twitter上受到一私信“被你害死,主机我封掉了,钱全退给你”,心里一惊,网站果然打不开了,连后台也进不了,一头雾水。

想半天怎么回事,联想到一两天前有个人发信问我主机在哪里买的,他也想买个,不由自主地把两件事串起来,难道那个家伙是国宝,在探听这个主机提供者,给他造成了麻烦?

马上发信去问他,我说至少说下原因吧,答曰“zhenzhi严禁的”,再问那篇博文敏感,删掉行不,答曰不行,再问是否今天有人找他说这事,答曰“我突然翻到的 不多说 太敏感了”,原来他只是“突然翻到”的,根本没任何人找他麻烦,刚才那个联想也完全不是事实。

我想了半天,我没写过很敏感的博文啊,后来想到,原来是一片评论敏感了,确实是挺敏感,那篇评论两三个星期前留的,评论的是我4年前写的一篇博文。

追问他说,“这是评论啊,不是我写的,删掉不就行了?”良久没回复邮件,再发:至少给我开后台备份数据库吧。还是没回复,追到QQ,再问次是不是就只是那篇评论敏感了,答曰“太严重 不多说”。

最后我只想确认两件事,1有没有人找过你,2是不是只是那篇评论敏感。他都不回答。接着开后台备份,退款,叮嘱我备份完告诉他然后在Q上加他进黑名单。照做了。

之后他看到我刚开始在twitter上写的推:“有人发邮件问我空间哪买的 他也想买 我告诉他了 然后我空间就被封了 怎么回事?这么黑暗?”回复:“请问是哪位?我一并退款给他,咱不差钱”,这位老大已经神经敏感到极点了,解释道“注意 我说这话的意思是觉得 这两件事有因果关系 那个人是国宝通过我摸线索骚扰到你 我多虑了”

总结

我从他说“突然翻到”这四个字开始就震惊了,我真无法相信无法理解,就他随便翻到一条敏感评论,而且整个博客就只有这一篇评论敏感,而且没有任何人去找过他,他就能怕成这样?

首先“被你害死”,然后“zhenzhi严禁的”,连“政治”二字都不敢打中文,接着一问三不答屡次“太严重 不多说”这样的回复,再接着巴不得火速跟我断绝一切关系,最后那条神经敏感连跟我有一丁点关系的用户都封杀。这家伙是怎么了?用不用怕成这样啊?如果说真有人因为空间出现敏感内容找他了,那我百分百支持理解他的行为,问题是完全没有啊,另外我的空间是国外的,而且还是独立IP,就算被封也不会影响到他的其他用户。

怕也就算了,期间若不是我发信去追问我完全不会知道是怎么回事,把空间封了也不想跟我说明清楚完全不想沟通,后来的在gmail上在Q上跟我说个话像偷偷犯罪一样,服了。

牛逼人物!

加上网址吧,反正可以提醒大家有一点点擦到政治边的都不能上去买,从他那”不差钱”的话中可以估计他也很乐意我放网址的:http://miao.in

python版twitese排行榜(开源)

2010-2-26 评论(10) 分类:作品 Tags:

闲着没事,学下python,浏览完《dive into python》,想半天没想出来要做个什么东西实践好。此时twitese的排行榜功能已经停滞很久了,之前java版的代码也比较乱,索性用python重写这个功能好了。当然,这个程序还是架设在GAE上的。

这次做的基本上跟原版一样,只是抓数据时不用page这个参数了,用cursor这个参数分页,发现这个参数用来抓取数据实在是比page方便多了。另外通过一些小伎俩解决了原本只能获取前1000个用户的问题,现在可以直接通过分页看到所有抓取到的用户了。具体抓取方法见这里,最后做了独立页面:http://twiteseapi.appspot.com/

写旧程序,虽然是用不同语言写,但激情实在高不了~这次这个python应用感觉写得没什么python的风格,可能是因为程序太简单吧。python给我的初感觉就是很精简,跟java正好相反,只是奇怪为什么每个类方法的self参数为什么不自动传进去,还要手动写,这跟它的精简实在不符。

这个程序,也是开源的,并且做到很容易架设,只需要上传后执行一下init就行了。地址:http://twiteseapi.googlecode.com/

关于学习

2010-2-19 评论(13) 分类:随记 Tags:

当初上《数字电路》和《计算机组成原理》这些课程的时候,非常痛苦,很难看进去,很抗拒这些知识,我以为是我天生讨厌硬件的缘故。最近看了《编码的奥秘》(udonmai 指出是《CODE》,最近的出版物是《编码:隐匿在计算机软硬件背后的语言 (平装)》),发现实际上不是,这本书从最初的手电筒传信息开始,一步一步介绍通信和编码的演变,最终把构造一台计算机的来龙去脉都一一介绍完毕,包括了上面提到的《数字电路》和《计算机组成原理》的知识,操作系统与汇编也有所提及。我可以像看小说一样无痛苦地吸收这些知识,甚至看到有点兴奋,原来十进制没什么特别,原来逻辑门是这样发展而来的,原来RAM是这样来的。相反学习那两门课程时异常痛苦,一开始就是专业知识,三态门晶体管什么的,鬼知道这些是什么东西,基本上这些课程是要“啃”下来的,我这两门课都考80多分了,结果基本上都是应付考试,考完没留下多少东西在大脑里,看《编码的奥秘》时很多知识点回想起来才恍然大悟,不知应该说这本书太好,还是课程太烂。

计算机很多基础课程学生们普遍看法是:学这些有什么用?普遍的回答是:以后你就知道有什么用了。另外就软件专业来说,在学校学的都是基础课程,不会教应用层这么“肤浅”的东西,即时毕业出去后做的都是应用层的东西,因为你懂了这些底层的知识,才能更好地学习这些应用层的东西,并且也更容易学习,否则只学一些皮毛就跟职业学校的学生没什么区别了。这应该是对的,但就我个人感觉而言,要是不知道这东西用来干嘛,那学起来真是痛苦,相信挺多人有同感。

很多人都喜欢打一个比喻,像盖房子一样,先得把地基打扎实了,建高楼才不会倒。听起来真是很有道理,但我觉得并不正确,建楼房地基打完后是没得改的,要改得把楼房全铲平才行,一定得按自底向上的方式盖楼。而学习不一样,随时可以去补充下层知识,并且不会因此付出什么代价,反而带着目的去补充下层的知识,效率更高,学习过程的痛苦也相对会少。计算机的更是这样,上层下层都有很多共同之处,先学上层应用层,再在有兴趣或有必要的时候回过去学习下层也是一种不错的选择,至少对我来说是挺好的。国内教育基本不会考虑“兴趣”这回事,当然大学把计算机作为一门科学技术当然不能这么搞,还是得规规矩矩一步一步来,但个人还是可以选择适合自己的方法。

我觉得如果我不是事先学了一些应用层的东西,直接去学大学那些课程,不知会不会因为太枯燥而学得太痛苦甚至转行。实际上我学的第一门计算机语言是Actionscript2,学的时候不知道,现在觉得它真是极佳的入门语言,首先它很容易,第二它跟C++/JAVA等主流语言风格差不多,第三它是FLASH的语言,很容易可以做出一些有趣的东西。第三点是最重要的,能给人学下去的动力,学的过程也不枯燥。像大学课程学的语言C++,对我来说就太枯燥了,学了那么久能用它干什么?无非就是在丑陋的控制台输出乘法表,输出日历什么的,实在是让人提不起兴趣。在快乐地学一点AS2后再去学C++能相对容易一些,也不会那么枯燥。

应该所有知识都可以是很有趣的,甚至包括马克思主义、毛邓三这些,只是课程把他们变枯燥了,甚至把感兴趣的人往门外推,尽可能通过某种方式提升对这些知识的兴趣,把它们变得有趣点学起来比较爽,真希望多点《编码的奥秘》这样的书,我觉得未来应该会提倡无痛苦的学习方式,不过那应该是很遥远的未来。

两个人的一致性

2010-2-15 评论(0) 分类:生活 Tags:

看了《(500) Days of Summer》

男主角tom是跟我们一样的正常人,至少是跟我一样的正常人,投入感情,为失恋发疯,无法理解女主角的很多行为。

女主角summer是一个极端,只会做自己想做的事,一切跟着感觉走,不用负责任,不用考虑别人,即使牵手,亲吻,have sex,在她眼中他们还只是朋友,因为不确定他是不是the one,一旦确定了,她可以毫不犹豫地跟一个在熟食店碰上的男人结婚。

“I just need some consistency.”

我喜欢consistency这个词,两个人在一起需要一致性,对于他们,这种一致性永远不会有,他们本来就不是同一种人,从一开始两人的想法就不一样,到最后tom也丝毫无法影响到summer。她不能保证什么,没有人能保证感觉在第二天醒来会不会消失,不能仅仅凭感觉维系感情。

到最后,tom理解了summer,tom一度认为真爱 命运都是谎言,这让他崩溃,summer告诉他其实不是。从一开始summer就说”I’m not looking for anything… “,一直没有承诺什么,只是跟着感觉走,感觉没了就散了,她没有欺骗他什么,她就是那样的人,真正碰上了自己感觉对的人就会结婚,不对的人再怎样都只是朋友。两个人只是爱情观不一样,差别很大,对一些行为的理解也有很大差别,例如在婚礼party上跳舞,对summer来说这没什么,只是想跳就跳,对tom来说这是复合的迹象,两个人对牵手亲吻have sex这些行为的看法也不一样。这样的不一致性是tom痛苦的根由,理解后,他可以释怀了,真心祝福summer幸福。

也许这电影是失恋者的励志片,失恋时你会想着对方的好,认定对方就是世界上唯一的伴侣,但实际上the one并不只有一个,when summer is gone, autumn is there.

电影就是电影,是文学作品,是人为塑造的,再怎么真实都跟现实有很大区别,文学作品中的爱情倾向于表现一见钟情命中注定,而现实中这样的例子很少见,日久生情才是经常发生的。是那种瞬间迸发的激情,像命运一样的感情牢固,还是日久生情的感情牢固?无所谓,重要的是consistency,两个人在一起,爱情观一致,对彼此的想法一致,情投意合就足够,不用想那么多~

龙山中学的变化

2010-2-10 评论(8) 分类:生活 Tags:

今天回龙山中学看了,这几年龙山变化实在太大了,不得不佩服新任校长,虽然他跟普通领导一样,挺着个大肚子,油光满面,虽然据说他当校长前是在保卫股工作,但得承认,他确实有才华,有能力,在上任四五年的时间里把龙山搞得这么好。对他改造龙山的做法其实只了解了个大概,其做法就是,表面功夫与实质成绩并重,两样都要做足,还要参杂一点资本运作。

表面功夫做足,这从我还在里面读高二时就开始了,当时为了申请省一级学校下足了功夫,省一级要求什么,就做什么,不惜一切达到目的,省一级图书馆的书规定要XX册,就不知是买还是租回来摆设(当时不让人借的,不知现在怎样)。实验器材凑足了,校园不断建设,所有老师以前遗漏的教案什么全部补全,让教职员工/领导或各种各样的奖,把奖项罗列出来放在校门口,放在学校内的公告栏上,凑足门面,加大宣传,也可以作为各种奖评申请的材料。

一个学校表面功夫做得再好,如果没有考试成绩的支撑,一切都是徒劳。安稳的学习环境是学习第一要素,从我读高二开始制定了一系列规则,全部要穿校服,不能穿拖鞋,要戴学生证等等,统一的管理是第一步。如果我说我高一的暑假有两个月,高二的寒假有一个月,可能会被现在的师弟师妹惊叹不可思议,虽然没了解清楚,但可以知道,现在似乎在学校已经没有什么长假了,暑假寒假都很短,连高一寒假都只有半个月,就是以高强度的学习保证成绩,其他措施是什么我就不知道了。

很多措施目的性极强,并没有以学生为本,而是以学校的发展为本。264周年校庆弄得很隆重,但这个校庆不是我们学生的校庆,也不是老师的校庆,而是那些有钱校友的校庆,借校庆招揽有出息的校友回来捐款,这是唯一的目的。从我高三开始学校招收初中生,学费很贵,几乎是有钱即可进,从这些人里赚取大量的钱补贴校园建设的费用,有点资本运作的意思。学校后操场全部改建成教学楼,正在施工,操场上十几个篮球场就这样没了,也没打算在别的地方补上这些运动场所,偌大一个学校,现在只剩下一个篮球场。学生打球可以提高成绩吗,不可以,所以没有也无所谓。估计现在在读的学生怨声载道是免不了了,施工地方的标语被恶搞,“施工现场”被改成“拖工现场”,“注意安全”被改成“注意女人”,小小表达了忿忿不平的情绪。另外龙山最缺的不是那些高楼和后花园,而是—厕所,原先的一个厕所被拆,改建成学术报告厅,于是龙山只剩一个历史悠久肮脏得不能再肮脏的厕所,无论教室离多远都要跑到这里上,丝毫没有再建一个厕所的意思,“以人为本”这个说法在他那是没有的事。

偶尔看到龙山里一则布告栏:河源市委书记走访母校的事情,其内容,有点雷。。首先是“龙山76级校友河源市市委书记XXX在其他76级校友的陪同下探访母校”,大概是这意思。领导当惯了,当年的同学再相见也已不再是平等的同学,都是下属,都是陪衬,都是要跟在他后面的。其次是“XXX首先用英语讲述了他在龙山的时光,……,接着用家乡话讲了……”,记不太清,这个用英语讲述他在龙山时光的段子也太搞了,你能想象得出来那是怎样的场景吗?