从VC++到Emacs

记得刚开始接触代码的时候已经是大学一年级了。在此之前,对写代码的印象一直停留在改游戏配置文件写外挂上。虽说也挺有意思,但总归是不务正业。况且当时我脑海里只有逆向工程的概念,让想象中的编程凭空增加了更多的难度。 直到后来上大学让写C语言,才发现写代码这东西没有那么高不可攀。不过这个时候已经不早了,其他大神们在我刚开始接触编程语言的这个年级,已经有能力把自己写的程序已经卖出去大价钱了。惭愧的是我到现在也还没有这个能力。。。 接触的晚不说,也没有什么好的学编程的环境。虽说当时跟着一百多人一起上的课,很多人其实压根不听,课后几百个练习题很多人也是从网上抄的答案。我平时并没有抄作业的习惯,所以隐约记得那一整个学期有一半的晚上我会从吃晚饭后的六七点一直做编程题做到十二点左右熄灯。经常因为一个不等号折腾好几个小时。开始做题的时候才刚吃过饭,等一个bug改完,就已经该要睡觉了。 这对于当时的我简直就是打开了新世界的大门,人生苦短,让时间消失的魔法就这样找到了。 现在回想起来,用c起步对于普通人来讲确实难了点:而我就是个普通人。如果当时用的是python,可能我的人生会快乐很多。让我人生更悲惨的是,我们当时对IDE完全没有概念,对debug更是一窍不通。老师说,推荐大家用VC++,然后我就用VC++。老师说,codeblocks是个好东西,有更高级的功能,于是我又在电脑里装上了codeblocks,同时和一起装了codeblocks的舍友一起鄙视其他用VC++的同学。现在想想真是可怕,对代码一窍不通的我竟已经开始了针对IDE的攻击活动。 后来再过了一年,莫名其妙进了基地,并且作为软件组的一员,和其他很多计算机专业的同学开始了半正经的代码活动。国内教育奇怪的一点是,即使他们是计算机专业,在大一的时候也没有几门专业课,有不少人的代码水平甚至和我差不多。这让我有了很大自信。然后一群小码农聚在一起,交流起来哪个IDE好用,最后我个门外汉默默下载了VS。 当时VS还没有community版本,所以安装的都是盗版,当然用起来肯定美滋滋,各种自动化debug,让年幼的我体验到了高科技带来的便利。 不过问题在于,我做什么事情都有一种『原教旨主义』的倾向,即使是娱乐活动也会最终变得莫名其妙地正经起来。对IDE的选择更是了。但在对IDE行情不了解的情况下,也只能随波逐流,哪个好用哪个了。但是在用VS的时候,我已经久仰vim大名。传说中这是一个可以完全不用鼠标操作的编辑器,或者说有鼠标也没有用的编辑器。很多人一入vim深似海,从此再也出不来,只能默默网上搜,vim如何退出来。 其实在最终尝试vim之前,我已经有个这个概念了,即IDE在很多时候都是小题大作,毫无必要的。此外再加上对c++更熟悉了一些,因此最终抛弃了vs,跑去用最新出来的atom。atom刚出来的时候声势浩大,给人一种,只要你牛逼你就肯定喜欢atom的感觉。结果并没有让我失望,atom确实看起来很牛逼,相比vs来讲清爽了不少。于此同时偶尔写写Makefile,用终端编译运行,也比用vs看起来高级了不少。毕竟更贴近『原教旨』了。 但其实没过多久,微软又出了与atom针锋相对的vs code。这可谓是大厂一出手,就知有没有。vs code在性能上比atom以及其他同类别的编辑器好了很多,而且支持各种插件和皮肤,对于当时的我又是巨大冲击。于是还没捂热的atom又被晾在了一边。 vs code太受欢迎,以至于在这几年内见到的大部分人都在用。既然大家都再用,那肯定不会是很专业化的东西了。于是我终于将魔爪伸向了vim。 伸向vim是有契机的,因为用ssh连实验室的服务器,并没有其他编辑器可以用,只好绞尽脑汁用无处不在的vim。众所周知,vim的学习曲线是非常抖,然而我强行把它的曲线拉平了。早在大学和舍友一起吐槽别人用vc++的时候,我们就尝试了用vim的hjkl作为方向键。隐约记得当时还有几个可以用来练习vim键位的小游戏。同时vim的几个模式我也都大概清楚了。总之,想写东西就按i开始,想挪光标去其他地方就hjkl,想退出就:wq。知道了这几个,其实也就可以坑坑巴巴用起来了。 所以等到要在实验室服务器上改东西的时候,我其实已经可以很自然地用hjkl操作了,甚至会用w和b跳来跳去。 另一个更重要的契机是,有一天,神奇的youtube算法给我推荐了Goerge Hotz的直播视频。当时苹果的M1芯片刚出来没有多久,大家都还在M1性能和效率的巨大冲击中,我也是。Goerge Hotz在直播里就用逆向工程猜如何破解M1芯片的神经网络单元的限制。因为这个计算单元似乎只是对苹果自身的深度网络加速用的。然而Goerge Hotz对此并不是很满意,他想让他自己的开源深度学习库也能用上这个单元的加速。 于是他花了好多天,每天十几个小时,一点一点破解每个函数是怎么调用的。整个过程表现出的毅力和专注程度对我来说也是大开眼界了。另一个让我印象深刻的就是他的vim技术,现在看来并不是什么很高级的操作,但确实让当时只会用hjkl的我大喊牛逼。于是我又一次试图抛弃vs code,开始了vim的征程,而这就发生在几个月前。 我郑重其事装了十来个插件,学会了大部分常用的指令,终于在大半个月后可以比较熟练地进行所有能在vs code上完成的任务,只用键盘。这简直是生产力的巨大飞跃。我甚至在键盘上把caps lock和esc换了位子,让切换模式更舒服。 如果只是这样的话,我的人生又会简单很多。因为 vim 尽管学习曲线很抖,但它也只是一个小而美的编辑器,就像锋利的刀片一样,掌握好就可以到处用。直到有一天我有了更多的想法,比如 todo list。 我想,如果 vim 里能有个 todo list 该多好,不用鼠标就能很快记录。于是我开始找插件,倒是找到了不少,但是出现了个问题:似乎在这件事情上,emacs 更好用一些。所有人都在说,既然这样了,何必不去用 emacs 的 org mode 呢。 于是我就去用 emcas 了,为了心中的 todo list。这就导致了更多的问题。首先,从软件工程上来讲,emacs 是个更好的软件。他可扩展性极强,有自己的编程语言,可以完成大部分人上网需要完成的工作(除了看youtube吧)。这也就给它带来了很多额外的学习难度。比如 org mode,比如比 vim 更复杂更庞大很多个数量级的配置文件,比如没有 tabs 只能像疯了一样不停切换 buffer。。。 至于键位安排,感谢 evil mode,让我切换到 emacs 几乎没有什么压力,只是花了一些时间学习怎么用 buffer 代替 vim 里的 tabs,其实也没有花很多时间。在写代码层面上的迁移,只花了一个周末(其中一整天都在调试代码的自动监测语法错误。。。)。其余我在vim里用的各种操作,evil mode 里竟然都有对应,并且高亮等做的更好,让我又有了一种当年用vs的高级感。 关于键位另一个问题就是,一旦开始了这个路子,就越来越发现普通的键盘键位分布真的是让人无法忍受,而好几千人民币的HHKB,传说中程序员的最爱,键位配置果然名不虚传。然而,不知道这笔开销可以拖到什么时候。。。有钱咯吧,有钱咯吧。

June 24, 2021 · 1 min · Chen DANG

关于Getting Over It with Bennett Foddy

前言 前一阵子在油管上看了很多这个游戏的视频。游戏博主们挣扎着控制着一个下半身困在缸里的残疾兄弟,一路用小锤子攀登上太空的励志故事让我很感动。当然这是后话,一开始我只是欣赏 Markiplier 摔椅子摔鼠标,以及超高密度的精神崩溃,英语口吐芬芳教学,以及各种姿势辱骂游戏作者。到后来我又看了很多twitch上的博主们一次又一次因为极小的失误摔回原地,气急败坏直播砸键盘砸电脑。最后,要被游戏折磨出精神障碍的玩家们在甩出最后一次鼠标后,看到游戏角色僵住了的身影背后闪出缤纷的太空景象,之前受过的精神折磨一瞬间都释怀了,开心地半捂着脸,眼眶红润,吱吱唔唔半天说不出一句话。这种场景挺让人感动的。因为以现在的游戏企业和玩家的喜好,可以说完全不可能找到另一个不利用剧情,仅凭游戏性和成就感就让玩家开心感动到落泪的游戏了。 所以这是个好游戏吗?当然,只是如作者所说的那样,这个游戏只是做给一部分人,用来伤害他们的。如果他们直面了这些伤害并且最终getting over it,从这个角度来看,这个游戏意义非凡。但是对于另一部分人来说,这个游戏只是一个可以欣赏游戏主播情绪崩溃的绝佳机会。但由此引发这个游戏的大规模传播,也是游戏史上很难再现的奇观。尽管以前也有过很多类似所谓的rage-inducing game,但却并没有在几乎完全静态的场景下,以最简单的操作可以实现的游戏。此外还有一部分认为游戏很无聊以至于退出游戏的,作者认为游戏的受众不在于这部分人。 游戏的主要受众是执着于尽早完成游戏到达目标的玩家们。在努力尽早完成游戏的心态下,每一次多余的失误都可能造成游戏进度的大幅度后退。而每一次进度的后退都会让玩家心态更加焦虑,丧失信心,随之导致更多的失误。恶性循环会让玩家心态越来越差,最终形成沉重的心理负担。而在这一次次失误的过程中逐渐掌握游戏规律,最终完成游戏的那一刻,这些所有积攒下的心理负担和负面情绪都放下了。用原话来讲,是getting over it了。所以从游戏名字就可以看出,这其实是Bennett Foddy在给玩家上的一节哲学课。而从一开始就没有打算积极完成目标的玩家来说,这个游戏所造成的各种挫折并不能使玩家感到气馁。而反复的挫折和偶尔的成就感是这个游戏让人成瘾的最大原因。如果一开始就没有走进Bennett Foddy设下的这个套,那这节哲学课也只能是Bennett Foddy枯燥乏味的说教罢了。 关于Bennett Foddy 和 Getting Over It 先说Bennett Foddy兄。这位大神本是澳洲人,曾经帮朋友玩票性质的乐队“Cut Copy”甚至还火了起来。老兄回忆道这段记忆时说,我们当时也挺蒙的,没想到突然要给几千人演出了,而且我们几个人没有一个人真的会乐器,跟其他摇滚乐队的问题差不多。大神后来也没好好搞乐队,跑去墨尔本读哲学博士了,课题主要是认知科学,关于人类成瘾的研究。大神业余时间用做flash小游戏打发时间,而且挺有意思的是,他自己曾经承认说,他最好的游戏设计都是在他不应该做这些事的时候做的。 大哥,我也是啊,但我啥也没做成哇。 大哥博士后搞完了,他的游戏也出名的差不多了。但是问题在于,哲学圈子里是没有什么人会去做游戏的。这让我们的大神很困扰。这个时候纽约大学横空出现,搞了个NYU Game Center,已经在小有名气的大神马上被拉去搞游戏教学了。从此就开始了大神职业钻研游戏的道路。他的很多游戏都在他的个人网页上,大部分都属于操作反直觉,很别扭的类型,比如QWOP,使用键盘四个按键分别控制运动员两腿的四个关节来跑步。反直觉的操作让新手寸步难行,而高手后空翻也做得来。这种游戏一般没有什么明确的目标,但对于某一些人来讲却很容易成瘾(是的)。 在开始教学生涯之后,老哥跟随时代的潮流,也逐渐抛弃flash小游戏,拥抱现代游戏框架了。接受采访的时候,大神说,我搞教学也不能只说不练啊,你要是什么也没有做过就教学生,空口说白话,不太好。于是大神就趁这个机会用Unity做了这么个3D游戏。当然事情背后并没有这么简单,但大概就是这样。 游戏做好之后被几个游戏主播率先尝试,反响非常不错。其他主播慕名前来,最终传遍网络。游戏销量非常不错,以至于还开发出了IOS和Android版本。大成功让哲学家和他单调的旁白也跟着火起来,几个月后就出来一大批类似的游戏蹭热度,其中最出名的应该是个叫做Golfing Over It with Alva Majo的游戏。这个游戏把拿着锤子的缸男换成了一个可以莫名其妙弹跳起来的高尔夫球。游戏里Alva Majo先生学着大神的单调语气,也念叨了不少东西,还用努力挑原作的刺,否定原作的哲学说教,以证明自己的游戏在哲学上更正确。嘿,用一个稍微不同的设定蹭原作热度,还用完全不标准的英语怼哲学家的标准英音哲学小课堂,这也太尴尬了吧。 言归正传,说到游戏,就是用一个锤子勇攀高峰的故事。这里所谓的高峰是由很多东西垒上去的,最下层是石块,然后是各类人造物品(回收物品),最后在登上一个小雪坡之后,爬上教堂顶,登上卫星塔,朝上一跃,就到终点了。 游戏虽是3D游戏,但确只能在二维空间内运动。用来攀登用的小锤子只能帮助人物向上爬,不能凿洞也无法破坏。而且除了个别小东西以外,游戏内的大部分物体都是静态的,这在游戏中是很罕见的情况。用来组成高峰的东西是循环向上的,而这造成了游戏一个很刺激的特点:在某些需要高难度操作的位置,往往会很容易因为疏忽而发生大幅度跌落。在严重的时候,这种跌落会直接回到一开始的地面。然而由于并没有存档点,每次跌落都会被保存且无法撤销,这成就了这个游戏最折磨人且最让人成瘾的特性。 关于getting over it 的游戏性与特点 操作 游戏的操作非常简单,用鼠标或触控板控制锤头的位置,除此之外没有任何其他的操作选项,学习成本几乎为零。与Bennett Foddy之前的几个游戏所不同的是,这次的操作比之前的几个游戏在直觉上更好理解。因为鼠标挪动的位置和锤头的位置相对应,并不会让人感到别扭。 但是在控制上,游戏性的来源在于,玩家虽然能直观理解鼠标移动与锤子的关系,却很难把人物姿态和移动与锤子的位置变化准确联系起来。锤子的移动很容易想象,但是其引起人物的相对运动在很多操作中都会让人抓狂。即使初步熟悉了人物和锤子的相对运动关系,由于惯性和摩擦的原因,人物的运动并不能完全准确地被锤子确定。同时人物在跳跃或者跌落的过程中,锤子的运动也会极大影响人物的状态或者跌落的程度,这同样很难被无经验的新手掌握。 游戏操作中的另一个设定似乎与人物的力量相对应。当锤子在人物上方或者下方的时候,人物更容易发力,获得的速度要比在其他位置要大很多。大部分speed runner就是利用这个特性跳过了很多障碍。但这对于新手来说几乎是噩梦,人物经常会莫名其妙跳得很高,或者根本跳不起来。另一个与力量对应的设定就是,当锤子斜上方或者斜下方的时候,人物会倾向于向两边移动,即使鼠标根本没有移动。这样的设定在很多需要精细控制的地方给新手玩家造成很多困难:小的失误或者不耐心就可能跌落或者滑下斜坡。尽管与简单的直觉不相符,但是从物理或者生理角度来讲,这样的设定反而很合理。 最后一个特点是,虽然用很简单的鼠标移动的方式控制锤子,从而间接控制人物的运动和姿态,但是游戏的自由度依然很高。一旦熟悉游戏,锤子可以很方便地让人物用多种方式让人物到达地图上几乎任何一个地方。与其他类型的rage-inducing game相比,这可以说是很大一个优势了。 存档 游戏无存档,或者说是只有一个存档。这个存档只存储游戏当前的进度,而且是被动进行。也就是说玩家并没有选择存档或者存不存档的权利。每次的进度和失误都必然会被存储下来,没有后悔或者重来的余地。这让游戏操作的紧张程度增加了很多。因为每次试错都可能带来进度的大幅度后退。一些目的性比较强的玩家在这种紧张心态下很难有好的发挥,而越多的失误带来心态的恶化,使完成游戏变得愈加困难。然而这是游戏刻意为之,Bennett Foddy甚至会在你跌落时贴心提醒你:“Don’t hate the player, hate the game.” 这个性质引发的心理变化也是游戏哲学所涉及的第一个论点,那就是重新开始比从零开始要更加困难。 There’s no feeling more intense than starting over. If you’ve deleted your homework the day before it was due, as I have, or if you left your wallet at home and you have to go back, after spending an hour in the commute, if you won some money at the casino and then put all your winnings on red, but it came up black, if you got your best shirt dry-cleaned before a wedding and then immediately dropped food on it, if you won an argument with a friend and then later discovered that they just returned to their original view, starting over is harder than starting up....

April 25, 2020 · 2 min · Chen DANG

开篇

用了一个很简单的博客模板,打算在这之后多写一点东西。 巴黎已经封城有一段时间了,本来以为的期末周被全民居家隔离打断。原定的各种项目和报告的截止日期也在同学的要求下一直往后拖(看来大家在家里也是嗨了个爽)。这大半年来自从来到巴黎之后没怎么歇过,精神一直是紧绷的,勉强应付过了第一学期,又开始找实习申博士,完全没什么放松的机会,这么一来很明显产生了报复性娱乐的倾向。隔离之后只要不在学习就是在看油管打游戏,最近几天更是看半天油管,半天twitch,就是不想干正经事,连给老师发邮件也感觉重担在身,一拖再拖。然而问题在于,即使看了一整天无脑视频,到头来还是觉得没有放松下来,反而感觉身体上越来越累。这种情况下是没办法主动学习什么东西的。甚至以前标记的科普视频也完全没有心思再看。所以现在打算改变战略,开始做一些容易产生成就感的事情。 我打开星际争霸2,这是一个很错误的决定。生活的重担使我丧失了基本的判断能力,我竟然会认为我会在星际争霸里得到成就感或者放松。在被简单的电脑虐过几局之后我彻底放弃,我一个连吃饭和刷手机都不能兼顾的人怎么就飘了试图玩这个挑战人类多线程操作极限的RTS游戏。 但是有时候产生成就感确实挺简单的,比如我刚才偶尔打开了Google Analytics的主页,突然发现我已经两年没怎么更新过的技术博客竟然每个月有大约两百个访问量,其中写ASCII art的那篇每月有一百多访问量,看来大家都喜欢简单又看起来炫炫的东西。当时做博客的时候是想着抄近道来着,因为想转行到码农,人工智能当然最好,赚钱又不累。但是没有学位也没有什么项目经验,只好自己网上摸索找找有什么有意思的项目自己做做,然后写个简单的总结,连代码带解释发出去,等到将来找工作的时候面试官看着我的博客可能还会说嘿这小伙还稍微做了点东西。当然后来没用到。我最近找实习和博士甚至还把这个技术博客放在我的CV上,但是我问了几个面试我的人,貌似没有人看过我的主页。这挺正常的,毕竟他们连我的动机信也没怎么看过,我以后面试别人八成也不会看动机信。简历就够了,真的,要是有个ens的本硕文凭,还有谁在乎你动机信和个人主页,直接签合同就成,赶紧签,不用犹豫。这也是为什么我找博士依然压力山大的原因:学校和导师没什么地位的话,博士毕业也只是个博士毕业。这么一想就感觉很心酸,因为我八成是找不到什么很好的学校和导师的。小时候一直觉得自己很牛逼,拿了两个小红花就感觉自己要成为下一个乔布斯改变世界了,现在才想到我很有可能连给比尔盖茨打工都做不到。 总而言之,尽管最近还是有一些项目跟报告要交,但已经不是很急,所以打算先把我的大脑伺候好咯。在这大半年里我脑子里产生过无数个想要写东西的念头,大部分是在压力最大的考试周或者各种项目的截止日期附近。虽然不社交,朋友也没几个,但是我还是挺喜欢写东西的,这可能和我从小喜欢自言自语有关。但就和自言自语一样,我写完的东西从不想再回头看,偶尔看一眼就会觉得:我太煞笔了。这种情绪是阻碍我写作的巨大障碍,因为想要不嫌弃过去的自己,最好的办法就是不留下任何客观的记录。于是过去写的一切东西都莫名其妙不见了。你一般不太会可能找到你不想找到的东西的。 但是现在我需要写点东西。写作是思考的过程,写这种毫无意义的东西就是放空大脑的过程。不然大脑一直紧绷着,都变成了肌肉,就更没法努力去给比尔盖茨打工了。 ps. 下次搬家一定要找个向阳的房间,巴黎真的太阴了。

March 23, 2020 · 1 min · Chen DANG