Jiajin's profileTHE TRUTH IS OUT THEREPhotosBlogLists Tools Help

Blog


    July 27

    键盘膜安装记

    周日被某人说键盘很脏之后,我对于我键盘积灰的容忍程度终于超过了阈值。于是当机立断买了个键盘膜(此处省略键盘膜厂商与网购站点名字,以避开做广告之嫌)。

    因为天朝盛产人类,造成了劳动力资源的过剩,继而导致快递市场的激烈竞争,所以在下单不到24小时之后,我拿到了我的键盘膜。既然要给键盘穿件新衣服,按照我们礼仪之邦的规矩,当然是要斋戒沐浴的啦。于是便开始了键盘除尘的工作。在用电吹风没有达到预期效果,反而导致键盘发烫之后,我狠下心来准备把键盘拆了。笔记本的键盘从来没拆过,便google之。在找到ibm的键盘以及手掌支撑(palm rest)拆卸指导之后,顺利的将键盘拆下。但是我发现,拆下来还是没法很好地除尘!!!关键是新的thinkpad系列(我不知道以前的系列,还有其他品牌是否同样如此)的键盘下面有一整块金属板。那些猥琐地躲在阴暗角落的灰尘,由于这块金属板的阻挡,和没拆下来的时候一样难以去除。我很无奈地只得再把键盘等部件安装回去。没办法,只能用上次看到的那招了——用胶带将键盘沟槽中的灰尘粘掉。但由于这种方法过于繁琐,所以在重点区域被定点清除之后,我便放弃了。另外一个办法是用小型吸尘器,不过我没有这个设备……

    好了,斋戒沐浴工作就这样草草的结束了。贴皮吧!把膜放上去之后,发觉非常的松啊。肯定是要双面胶的么。于是再利用了三点构成一个平面(其实不能算是平面)的原理(因为在三维空间里,去除特殊情况外,三个向量必能构成一个二维的线性子空间)之后,键盘膜被固定了。

    装了键盘膜的优点是脏了可以洗,看了不爽就可以换一张;缺点则是手感变差。不得不说thinkpad的键盘,手感还是很好的。现在多了一层膜之后,比较诡异啊~
    September 28

    MS Word 2007公式编辑器默认非斜体的解决方法

    Office 2007是个挺不错的办公软件套装。Ribbon其实还是很不错的,如果是在做过很多可用性测试的前提下。Word 2007新的公式编辑器一个很出色的地方是它支持通过Linear Format来输入公式。对于那些有少量公式,但不会用LaTeX的人来说(比如经管类的)还是挺方便的。但很愚蠢的是,在中文操作系统输入公式,默认字体竟然不是斜体的!
     
    经过一系列hack和google,我找到了一个解决方法。 先是google到了某篇文章,和看到用英语xp的同学默认是斜体。我想可能是和系统的locale相关。但具体是怎么样的。我试了好几个locale(user locale, input locale....)最后找到是和input locale相关。 现在我的解决方法是
    当输入公式时,输入法需要切换到英语的locale,即输入法那个图标是EN。
    这样就默认是斜体了。我觉得这个应该是by design的。也不知道那些PM是怎么想的,非英语国家的数学字母难道就默认是非斜体么,脑子真是秀逗了。 顺便贴两个链接。
    1. 介绍Word 2007公式编辑器的Linear Format输入方式的
     
    2. 微软中文技术支持论坛关于此问题的一个讨论帖子。问问题的人还打电话去问了微软的支持,得到的答案竟然是买英文版的Word。呵呵,请问这是搞笑么……
    April 20

    Another Blog of Mine on TCS

    After doing a little research (If I may say so) in HKUST, I think I need a place to write some notes on my study in TCS. Local latex notes are fine except it seems a little formal, which may cause me reluctant to do the writing. Another shortcoming is that I can't access it everywhere. A blog is good and it allows discussion and comments, which is good for me to improve my thoughts. But Live Space is not good enough for my purpose. It is too "comic" and lacks good support on mathematical formula. So I choose a wordpress blog. Here it is: http://jiajinyu.wordpress.com/. It cannot be accessed in Mainland China (I don't know the current status since it was said that since the Olympic 08' a lot of blocked sites have been opened), but you can use an online RSS Reader (such as Google Reader) to subscribe the RSS Feed: http://jiajinyu.wordpress.com/feed/, which is definitly accessible in Mainland China. The content in this blog would be quite acadamic and technical, but I hope someone would enjoy it. 
    January 31

    blogger与Live Space

    一个新认识的朋友最近问我,为什么我在这里说了好几次要换blog,但最终还没换。以下这篇我以前写在Blogger.com上的文章可以解释一下原因。原文出处为http://zeroyjj.blogspot.com/2007/03/bloggerlive-space.html [中国大陆可能由于某些原因不能访问]


    前段时间和fz说,以后不用Windows Live Space来写blog了,改用blogger。他连声说好,并有自己也打算要用的意思。但没过了两天,他在IM上跟我说,blogger不好。主要是拥有它账号或者Google账号的人不如有MSN的人多。所以blogger很难推广。此外blogger不能对blog进行访问控制,也就是blog的作者对于谁能看,谁不能看自己的blog无法控制。另外还有就是写好了更新无法在MSN上显示,所以没人会去注意你的blog

    当时我说到,国内一部分人接触blog或者说我们周围一部分人接触blog是从MSN Space开始的。平时读的blog的来源,也大多数局限于MSN好友。最多是看到好友某篇blog上有不认识的人的评论挺有意思的,顺手点一下这个人,看看他的blog是怎样的。而用RSS来阅读blog的人还是很少的,即使是计算机专业的,用RSS来阅读的人也还是不多。由于以上原因,造成了很多人对于MSN上那朵小黄花的依赖,即使MSN Space有这样那样的问题(由于问题实在是很多,这里就不一一列举了),大家还是一边抱怨,一边继续用。而另外一个访问控制的问题,blog 的本意就是写出来给全世界的人看的,而不是日记。但因为原来MSN Space有了这个功能,所以有人用了,而如果想要换过去的那个服务没有,他就会觉得不爽。其实个人来说,我觉得这个其实没有必要。如果真的只想给一两个人看,干脆写信得了。何必还放在网上呢。不过前两天我在研究blogger的配置的时候,发现原来它也是有访问控制的,功能也似乎比MSN Space的强大,但我没有试过。不过有一点是肯定的,它一定会需要Google/blogger账号。

    写到这里,不妨再扯两句。其实很多非专业的电脑用户的使用习惯以及他们考虑问题的角度和专业人士是很不一样的。就拿Email这个最最普通的服务讲起吧。在我认识的非专业用户中,很少有人使用邮件客户端(例如Outlook, Outlook Express,或是Foxmail)。原因其实很明显,用过Outlook Express的人肯定知道,新建一个账号,需要知道邮件服务器的各种信息,比如pop3 server, smtp server的地址,发信是不是需要用户认证等。这么多乱七八糟的信息,让一般用户怎么接受?他们所要做的就是写封信!所以绝大多数人选择了网上客户端。网页直接打开来写就是了。所以软件做出来要让什么也不懂的普通用户用起来非常方便,还有很长的路要走。

    还有就是用户习惯的问题,绝大多数人对自己一直所用的服务,都有比较严重的依赖性。比如就算现在MSN Space再怎么不好,大家因为用习惯了,所以还是不高兴换。这其中有很多因素,例如原来的文章,在新的blog里肯定是没有了。如果别人一直用MSN小黄花来看我的blog,现在也不能看了。诸如此类,也可以推广到其他服务中。比如Email,比如IM。所以一定要在一个服务发展的初期,抓住一批忠实的用户。他们一开始选择你的原因,可能只是因为你某点做的比较好,并且当时也没有其他可供选择。如果在某项服务已经很成熟的时候再进入,即使你做的再好,大多数人还是会因为习惯而继续使用那些已经毛病多多的提供商。

    January 30

    [转载]标签时代(三)

    试图在“平等”的互联网建立秩序的另一个例子是搜索引擎结果排名。众所周知,无论是哪种搜索引擎,其结果的排序都是一个引起巨大争议的话题。这是web 2.0的另一重内在矛盾——无限增长的内容同用户有限的注意力之间的矛盾——的外在反映。我们常常注意到google或者百度声称返回了几十万条搜索结果,可是很显然,这些搜索结果只有前若干页才具有实际意义,一百页之后的结果永远不会有人关心。——对于曾经为了信息爆炸而欢呼的人们来说,这一现实颇为讽刺。

    不得不承认,搜索引擎结果排名不仅仅是个技术问题。既然网页和它们的撰写者彼此平等,凭什么排名会有第一和第一万的差距?搜索引擎公司总是声称它们尽力做到排名的公正,但是无论如何,既然有排名,就是在结果中引入了不平等,于是关于“公正”的定义就颇需要煞费苦心的思量。一个被普遍声称的原则是让最有价值的网页排在最前面,而为了能让电脑自动判断网页的“价值”,Google最原始的想法(也是后来几乎所有搜索引擎算法的基础)是计算“外部链接”的数量:一个网页被别人链接的越多,这个网页就被认为越有价值[zero注:此描述过于简单,与最基本的PageRank算法相差太远,基本不符合事实](在某些关于搜索引擎技术的描述中,网页的一个外部链接被称为外部网站对该网页的一次“投票”)。问题在于,这个算法过于简单以至于太容易被作弊所干扰,于是google设计了一套复杂的公式来避免可能的不合理结果,并且尽力将算法保密以避免有针对性的作弊。反过来,因为在很多情形下搜索结果排名同巨大的经济利益相关联,于是各种面向网站的SEO(search engine optimization)技术就应运而生。这些技术声称能够让你的网站在搜索引擎结果里的排名大幅上升,而其秘密不外乎通过对搜索引擎搜索结果的分析反过来推测其算法,然后有针对性的利用各种网页编程技巧“合法的”提升网页的权重。而搜索引擎公司为了保证结果的所谓公平性,也只好不断的更新反作弊算法。这种猫捉耗子的场面是web 2.0时代蔚为奇景的一幕。

    问题在于,不管搜索引擎公司怎么更新算法,对“公正”的定义权本身总是被搜索引擎公司把持着,并且不透明。——这种巨大而不受制约的权利在现代社会里委实是个异数。在某种意义上来说,google几乎行使了一部分政府公权力的职能,这也是google反复声称自己“不做恶”来取信于公众的原因。

    由于web 2.0的内在特点,搜索引擎在新时代的互联网中占据了一个特殊的地位。在某种意义上来说,搜索引擎就是互联网的操作系统:从前人们通过windows来接触和查阅电子资源;今天人们通过google来做同样的事;从前人们需要不厌其烦的给自己的电子资源建立目录树,从而实现对电子资源的有效查询,今天人们只需要给电子资源贴上标签(或者使用电子资源内在的标签)就足够了,森严的逻辑结构已然过时;从前人们生活在信息资源的匮乏之中,今天人们生活在信息过载之中,要看什么google就能给我们什么。看起来人们像是(部分的)被解放了一遍,而google就是我们的解放者。

    今天这个解放者越来越庞大的身影几乎笼罩了电子生活的每一个角落。越来越多的迹象显示google早已不甘于仅仅做一个搜索引擎之王。当 google在推出google desktop的时候,很多人都注意到这个桌面搜索软件在桌面上建立了一个工具条,里面附带了许多小功能,例如显示邮箱里的信件,或者显示日历及约会,甚至显示地图等等。借助这个工具条,google几乎是在windows的桌面上嵌入了一个小型的操作系统,可以完成很多虽然简单但是重要的功能了。从那时起,人们就开始讨论google对操作系统市场的野心。随后google一点一点完善着自己的产品线,到今天为止在网络浏览器上能利用google做的事情已经涵盖了邮件,即时通讯,日历及日程安排,购物,RSS订阅及分享,RSS烧制,照片分享,视频分享,网络收藏夹管理,网络浏览记录管理,社会化交往,地图查询及私人地图管理。随着2007年9月google presentation的上线,google终于有了基于普通网络浏览器的完整的办公套件——字处理、表格处理、幻灯片制作,还有多少事情是一台普通的本地电脑能做而google不能做的?

    所以人们把越来越多的互联网生活绑定在google上,从购物到远程联络,从日常阅读到办公,google已经成为许多用户在互联网上的家,知道用户从联络方式到信用卡号码到网络浏览记录的全部隐私,而它居然仅仅是一家私人商业公司!

    相信不相信google?这是个问题。“不做恶”的口号很显然有把自己同名声不甚完美的微软区隔开来的想法。可是微软虽然霸道,也只是控制了用户个人的桌面而已。而google扼住的却是电子世界里信息交流的咽喉。

    (在中国的情形更为糟糕,占据市场独大地位的是百度,而这家公司甚至连“不做恶”也无法承诺——众所周知,百度常常由于各种原因人为修改搜索结果——于是我们只能束手无策的接受百度所提供的“公正”,连自欺欺人的心理安慰也得不到。)

    我们当然不妨姑且相信“不做恶“的google不会人为的屏蔽和封锁我们通向信息的渠道(2006年一次众所周知的风波已经构成了一个致命的反例),可是即使确实如此,在google日渐完美的搜索排序算法的帮助下,我们真的开始生活在幸福的信息自由世界里了么?

    一个重要的事实是:搜索的反面就是过滤,这是这个信息过载的时代我们必须付出的代价。我们可以阅读的东西不是太少而是太多了,我们必须取舍。当然了,我们会舍去我们不喜欢或者不感兴趣的内容,只专注于我们欣赏的信息。这听起来当然是“自由”的题中应有之意。可是网络之大,浩瀚无边,于是我们需要借助搜索工具来替我们筛选信息,只留下合乎我们心意的声音。所以豆瓣会试着推荐我们大概会喜欢读的书,pandora会推荐我们大概会喜欢的音乐,而 google也试图推出所谓的个性化搜索——根据以往的搜索和阅览记录来推测我们的口味,从而专门按照我们的喜好来陈列搜索结果。

    这是多么无微不至的帮助……这是多么危险的帮助!幸好google的个性化搜索今天还没有全面铺开。我一想到我看到的搜索结果是专门针对我的个人爱好而订制的就浑身不舒服——像想到搜索结果因为政治原因被屏蔽一样不舒服。搜索引擎就是我们在互联网上的眼睛,而我想看到的是一个真实的世界,不是一个为我的口味订做的世界。由别人来决定我应该看到什么不应该看到什么——纵然这个“别人”不是老大哥而只是一个机器算法——也是不能令人容忍的。

    芝加哥大学的Cass Sunstein注意到了这个问题。他在《republic.com》一书中指出,对个人接收的信息的任何筛选——哪怕是完全迎合个人需求的筛选——都是反自由的。只有被置于共同的(也许是粗砺的和不受喜爱的)信息环境下,人们才能够建立共同的话语环境,从而形成公共讨论的传统,而在web 2.0这样一个本质上是自助餐式的环境里,每个人都是被宠溺的消费者,任性地选择着世界的面目。每个人都只能越来越多的听到自己声音的回响,甚至形成集体性的极端立场——Sunstein称之为“群体极化(group polarization)”。在这个环境里,个人选择的权力被强调了,而倾听和容忍其他选择的责任则被忽略了。信息世界里一切先验存在的结构都被消解了,只有自我的声音被放大了。

    Sunstein意味深长的引用了美国最高法院大法官Louis Brandeis的话:自由最大的敌人是疏懒的人民,公共讨论是一种政治义务

    在搜索引擎介入一切的时代,个人没有义务。什么信息都可以通过搜索得到,什么观点都可以找到志同道合者,什么商品都会有市场,什么自我都会被放纵和原谅。为了迎合一个精英化的既定秩序而整理、锤炼、磨砺自己的思想已经显得不合时宜,不同的论点之间的辩难和争执、说服和改错也变得不再必要。这是搜索引擎给我们的自由,是互联网时代标志性的“多元化”。

    为了讴歌这个时代,Thomas Friedman在2005年出版了畅销的《世界是平的》(The World Is Flat)。这个名称在今天看来格外讽刺,因为flat的另一个意思便是无聊。


    以上文字转自于木遥的窗子,链接为http://blog.farmostwood.net/2008/01/20/182.html

     

    January 26

    Statistics of Posts in 2007

     
    2007我很忙“2007我很忙!” 你呢?点这里测测看!
    June 15

    [zz]google面试小记

    一个年级的一个同学拿到了Google Intern的Offer,真不错。这位同学的水平我不是很清楚,但看的Blog里,发现他对自己的算法很有信心。嗯,强人!总的来说,这次Google的笔试题不难。但选择题最多错一个?嗯,要求还严格啊,看样子笔试中运气成份是要占一些的。从他描述的面试经历来看,面试的轮次不多(2轮),内容也基本上全是数据结构和算法,和Trilogy很象。和Microsoft不太象。 祝愿这位同学能在Google工作的开心。

     

    唉,其实当初我看到Google招intern的海报还是很兴奋的。但毕竟ATC那边暑假的工作都安排好了,而且估计到Google也没什么大区别。我到是觉得Google那边的intern可能会象MSRA那边的intern一样,不会参与很多FTE的工作。主要是了解和学习的。在这点上还是ATC Shanghai比较好,到现在为止,觉得做的事情基本上也就是FTE做的事情。

     

    引用

    google面试小记
    第一次踏进五星级的大酒店,里面的厕所果然比四星还要好。早到了半个多小时,就在一楼沙发上坐了会。时间差不多了上楼,结果就我一个,然后陆陆续续来了几个。再过了一会,通知我们的两个人来了,像是复旦的学生,类似校园大使的样子。进了房间聊着才知道,我们一批6个人,居然通知的时间是两两不同的,依次差5min……两个交大,一个同济,其他三个是复旦。四个本本,两个硕硕。还有一个复旦的笔试被鄙视,想来霸王面的,不知道今天有没有面到。
     
    聊天的时候还知道笔试前面的选择题最多错1个。我已经不太记得那题目了,不过只能错一个的话,我应该还是比较lucky的,因为记得那时候选择做的不很开心,至少有一个是猜的。anyway,运气不错。
     
    又过了一会,面试官午饭归来。13.45就正式面试开始了。6个面试官面6个人,2对2。先面我的是一个姓郑的,胖胖的,清华博士。气氛也比较轻松,就是考算法,一题又一题。最后几分钟又随便聊了一点,我问了下他一点google的问题。前面的题目我有一个没做出来,他要时间复杂度O(1),空间无限制,我只能O(logN)。不过我感觉还是不错的,毕竟数据结构和算法我还是很有自信的。
     
    出门休息了几分钟,然后和对门的一个对换面试官。这次是个女的,姓什么都忘记了,也是出算法的题目,多次称赞我做的快。大概每人的题目数有限,她就额外给我出了门附加题,不过这题没能做出来,脑子抽住了……也许是我做的太快了,附加题后还剩下很多时间。然后她就给我介绍了不少google面临的竞争和问题,然后我也给了她一点我的想法。其中一个ms让她眼前一亮了,嘻嘻。和她聊了很长时间,得知那个郑先生对我的表现评价也不错,也说我思维很快,嘿嘿。估计两个人对我都比较满意吧。最后她很热情的说希望在北京见到我,哈哈~~~~~
     
    面试的具体题目就不方便透露了,面前签过张保密协议的。总之感觉都不很难吧
     
    估计google应该能拿下了吧,不过有得必有失,回来路上雨下的……谁知道西装淋湿了该怎么处理啊……
    May 17

    Windows Sucks

    这个题目一起,肯定又有很多人说我“蔑视权威”,“鄙视微软,还要用微软的东西”,“这家伙自己还在用msn space“等等,但是这几天win2000用的实在是不爽,所以要在这里发泄一下。

    1. IE6的ftp功能实在太差,下载一个目录的时候,竟然会要把这个目录先递归list一遍,我不知道这是为什么,也许是为了能得到根目录的大小,以便可以显示需要多少时间可以完成传送。Oh, no,对于目录结构很深的系统,这简直是一场恶梦,难道IE6不知道lazy eval.吗?

    2. disk management。帮朋友在一个移动硬盘上备份数据。原来用的是NTFS分区。整个80G的硬盘只有一个分区,然后就是在Linux下面没法子写。这也就算了。然后就是不能重新在win下面把它分成几个FAT32分区。原本的格式化不行,因为FAT32超过30G(好像是这个数字)就不行了,然后又不能重新分区。虽然找了老半天,总算在“计算机管理”->“磁盘服务”里找到了分区的功能,可是很冒名的,没有移动硬盘相对应的磁盘……。用盛名已久的PM,则索性抛了个异常就推出了。原因是“分区表错误”,难道我装了个Linux,它就认不出了吗?无语。最后我还是在Linux下用cfdisk这个命令分好了区,可惜debian里没有mkfs.vfat,不知道为什么。然后才到win下面格式化,拷贝文件, etc...。

    sigh...难道我用电脑的思路已经变的那么geek了吗,为什么总觉得windows的思路很奇怪呢?有人和我说,CS的人应该喜欢Linux/Unix的思路,是这样吗?

    May 15

    从博德之门到形式语义(zz)

    发信人: etone (模范未婚夫), 信区: CompSci
    标  题: 从博德之门到形式语义
    发信站: 小百合BBS (Fri May 13 02:18:46 2005)

     


    为了庆祝本版重新开张,贡献一点原创。另外因为学期已经结束了,也不想说些太严肃的
    东西,就谈谈游戏吧。

    我玩的最多的游戏就是Baldur's Gate系列,这个游戏应该有不少人听说过,是AD&D规则的
    rpg。这个系列诞生至今已超过5年了,相比时下的游戏,技术上已然落后了很多,但仍然
    吸引着无数铁杆如我者一玩再玩,的确堪称rpg史上的经典。

    但玩的多了,一些歪门邪道就渐渐被人们琢磨出来了,关于这有一篇著名文章叫"The Her
    o's Guide to A Successful Adventure"。可以参见:
    http://members.chello.nl/~j.vanthull/BG2SR/Stuff/Cheese.htm
    这篇文章专门记述了上百个Baldur's Gate的exploit。这个exploit顾名思义就是对游戏引
    擎或游戏规则的盘剥,专门有一个词形容这个叫cheesy,就是指不要脸的打法。这个chee
    se不同于cheat,并不是对游戏规则的违反,而是在体制内通过一些意想不到的方式来达到
    利益最大化。平心而论Baldur's Gate从引擎到规则都已经做得相当不错了,在平衡性方面
    放在今天也绝对是游戏的楷模,但由于游戏setting的庞大,仍免不了被勇于探索的玩家们
    捅出许多漏洞,由此可见人类在大工程面前的无助。

    今天要讨论的是利用computer science的一些理论来研究怎样可以避免这些chees,让机器
    代替最终玩家来扮演adversary的角色,或者干脆从根本上保证杜绝cheese的出现。

    Hero's Guide里面的提到的cheese,大致可分为两类。一类就是单纯的语义bug,只不过这
    里违反的不是program的逻辑,而是游戏逻辑。一个例子就是Baldur's Gate的战士类角色
    可以选择guard别人,让战士拿弓箭guard另一个人,再让那个人冲进敌人房间然后关上门
    ,你就可以看到,战士的箭穿过门射击敌人。诸如此类的还有伪谈话和potionswap等tric
    k。另一类cheese就不再是语义bug了,因为把它放在游戏规则里也未尝不可,也说不上它
    就一定违背了游戏逻辑,但它的存在却会破坏游戏的平衡。这样的例子多见于一些魔法的
    组合,原来为了平衡而给不同魔法加上的限制在组合之后就不在有效了。例如globe of b
    lades可以让人周围被剑气包围,打架时靠近的敌人会受到伤害,而sanctuary可以让敌人
    只要你不打他就不打你,但如果两个魔法都施了之后,只要站到敌人身边,就见他乖乖不
    动直到被剑气弄死。这样的法术不能说就不符合游戏逻辑,但它的存在实在是很赖皮,破
    坏了游戏的平衡。

    对于第一类bug,可以使用形式语义中针对语义bug采取的种种办法。但由于游戏在软件结
    构和程序逻辑方面的独特性,直接应用传统的方法往往并不合适。我本人对语义所知甚少
    。因此这里也就是胡乱说说,希望专业人士能够出来指正,我也很想就这个问题讨论讨论
    ,了解一下真正搞PL的人采用的方式。

    第一个办法就是指哪打哪,给一个property然后做proof。一般这个property都是针对一类
    具体的bug例如overflow,memleak之类,然后找到一个proof可以证明这段代码没问题。但
    这个方法很难满足游戏设计的需求,因为计算机程序的逻辑相对而言比较单纯,可以一类
    一类bug的枚举。实际中,单单证明一个overflow free就算是杜绝了一大类隐患。但游戏
    逻辑可以极其丰富和多样化,虽然往往只是现实的一个抽象,但比起机器的specificatio
    n,游戏逻辑要更加接近现实的多,很难通过枚举的方式来总结good/bad behavior。

    第二个办法就是画地为牢,既然无法单挑掉所有的狼,咱们就圈个羊圈,牺牲一点一般性
    ,换来不用proof的安全性。这个就类似type theory搞的,在设计PL之前先设计type sys
    tem,然后好的语言也就水到渠成了,写出来的全是好程序。这当然是比较理想的情况了。
    对于游戏而言,这个方法的问题在于:游戏系统中找不到属于这个语言的位置。目前的游
    戏开发(特指rpg的开发),一般是分为engine,script和data,放下数据不说。引擎和脚
    本各司其职,谁也不适合作成支持游戏逻辑的type system。目前的引擎一般是把声音图像
    的驱动,数据的parse和游戏逻辑的实现一包揽,还要顺便搞一个脚本语言解释器,由于要
    实现底层的声音图像,因此都是用通用的计算机高级语言实现,一般视programmer爱好而
    定,大部分是c/c++,间或也有用lisp和ocaml的。因此游戏逻辑的实现往往和这些东西搅
    和在一起,没有办法使用专门设计的type system。而脚本部分往往是文案人员写就,因此
    要使用接近自然语言的脚本语言。让他们用受诸多限制的为游戏定制的language也不现实
    。因此我觉得现在的游戏软件体系还是有问题。至少应该再分出一层来。除了一开始上帝
    说“要有光”于是就有了光之外,上帝还要拿出一天来规定秩序,之后才是在这个舞台上
    彩排节目。因此engine的用处应该是底层物理条件的支持,另外还要实现一个为不会破坏
    游戏逻辑而专门设计的语言,然后由这个语言来实现游戏世界,最上层才是在这个世界中
    发展的剧情。至此都是从软件工程的角度考虑。而具体该怎样去设计这个专门为游戏逻辑
    而设计的语言,靠诸多限制来谋求安全性的type theory究竟是否强大到足以支持丰富而多
    样话的虚拟世界的逻辑,是否type theory先天的局限性限制了它只能胜任机器的逻辑,抽
    象的计算机器和演算的计算与表达能力与这个世界之间究竟有没有根本的差距,这就是la
    nguage和theory要考虑的事情了。

    第三个防cheese的办法是一个美好的愿望。如果人们可以亲自给出整个游戏逻辑的specif
    ication,然后让机器verify游戏的代码有没有违背它,那这个问题也就解决了。但这个方
    法做了太多的假设,把整个model描述出来,这在工程上就是non-trivial的,而且就算描
    述出来了,谁又来verify这个描述是不是有问题,就算这个描述没问题,机器有没有能力
    去做这样一个判定。但是讨论一下不同条件下这个verification过程的可计算性和计算复
    杂性的确是一个有趣的理论问题。

    单就一个语义bug就说了这许多,下面来谈谈第二类cheese,也就是体制内破坏游戏平衡的
    元素。

    这个问题比语义bug要复杂,相比于语义bug这种遇见就可以枪毙的大是大非的问题,游戏
    平衡的定义就成问题。而且游戏逻辑是个definition,可以由设计者任意规定,但游戏的
    平衡性却是游戏的一个客观属性,需要人们去判定的。因此在这个问题上可做的文章也要
    多一点。

    首先就是平衡性的定义。单纯这么提出来,似乎人人都觉得平衡与否只是一个人的感觉而
    已,是无法量化的。但如果把游戏的model剥离出来,就会觉得这个问题还是有讨论余地的
    。这里我们先把问题单纯化一点,影响游戏平衡性的因素,这里我们就只考虑游戏的规则
    。因此由AI等因素例如糟糕的寻路能力引起的对平衡性的破坏暂且忽略。因此所有的电脑
    上的AD&D rpg就都成了类似magic: the gathering一类的筛子纸牌游戏。而把游戏的规则
    抽象并generalize之后,其实就是game,这里的game是指game theory里面定义的一个数学
    结构。而平衡性就是防止“一招鲜,吃遍天”的情况,例如猜拳是平衡的,tic-tac-toe是
    不平衡的,因为先手有必胜策略,没有禁手的五子棋也是不平衡的。利用game theory中对
    game的种种characterization,其实不难给出平衡性的定义。

    因此接下来的一个问题就是,有了一个game,如何去判定它的平衡性。这个问题让人联想
    起去年STOC的一篇paper: The Complexity of Pure Nash Equilibria。在篇paper讨论的
    是,给出一个game的简短描述,计算它的纯纳什均衡,这个问题的复杂度。作者Papadimi
    triou自称这是史上第二烦琐的归约(第一是Probabilistic Checkable Proof)。类似的
    对于游戏平衡性,也有相对应的理论问题。但可能从computation的角度要比Pure Nash E
    quilibria难,因为game balance与否关系到整个状态空间的分布,而game的action spac
    e可以呈game描述长度的指数级,直觉上就不像是会有一个polynomially checkable proo
    f,因此可能连NP都不是。好在人们对此也只要个近似。通过在action space里面进行ran
    dom walk,可以从stationary状态中估计个大概,但mixing time仍然是个问题。

    即便成功的判定了game的平衡性,发现有不平衡,对游戏规则的修改也并非trivial的。目
    前游戏设计者采用的都是启发式的办法,通过玩家的反馈,启发式的修改游戏规则,例如
    Blizzard对星际争霸的支持,但这种方法的收敛性仍值得怀疑。并不能保证收敛的,也有
    补丁打过反倒更不平衡的。因此有个问题就是,是否存在一劳永逸的解决办法。设计游戏
    时就可以肯定它是平衡的,换句话说这叫游戏设计的原则,再换句话说这叫game balance
    的充分条件。这就已经是一个纯数学问题了。Trivial的条件有很多,non-trivial的我还
    不知道,我对game theory也不是很了解,不知有没有现成的结果可用。


    有句话叫:酒肉穿肠过,佛在我心中。其实打游戏也是可以打出计算机科学的。

    --
    ※ 来源:.小百合BBS http://lilybbs.us[FROM: 128.36.76.66]

    March 22

    拉了一大截

    星期天和ACM班的同学聊天,唉,发觉他们的训练真的很不错。就算以后不做理论的话,赚钱也是需要这种技能的。和他们一群人聊天真的挺有意思的。就想yanqiqi说的那样,和一群聪明的人在一起是很有意思的。

    自己好像拉下了一大段,也不知道未来的方向到底在哪里?是不是现在就应该找自己感兴趣的方向了?还是毕业了先赚钱,然后就向Pora那样?这个问题一直困扰着我,To be or not to be? 我不懂,sigh, 我不懂。

    March 19

    big-endian or littlen-endian

    今天早上看过了几个人的MSN Space,不是很多图片,就是极其细腻的心情感言,呵呵。这种太阳那么明媚的天气,看到这种东西,让人感觉到冷嗖嗖的。唉,大概我是个粗人(或者是BT)的关系吧。想不到MSN Space在家里还是那么慢,有点受不了。如果还是这样慢的话,说不定哪天不爽就不用了。

    昨天在CSDN上看到孟岩对微软技术专家批评.Net的评论,呵呵。微软,我本来就不喜欢的。Java,还没怎么学,不过据说是很自由的,也是很乱的。呵呵。随便怎么样吧,现在对于这个,我是报着无所谓的心态了。等以后赚钱的时候再考虑吧。

    还是Unix有意思啊,今天看到一段代码,判断一个架构是big-endian或是little-endian。后来自己根据上面的思路写了一个,不过还是没有原来的好,因为多了个warning。呵呵

    摘在这里吧:

    #include <stdio.h>

    int main()
    {
        union {
            short s;
            char c[sizeof(short)];
        } un;

        un.s = 0x0102;
        if (un.c[0] == 2 && un.c[1] == 1)
            printf("%s\n", "little-endian");
        else if (un.c[0] == 1 && un.c[1] == 2)
            printf("%s\n", "big-endian");
        else
            printf("Unknown, some error occured!\n");

        return 0;
    }