硬科幻和战斗友谊 文字及PPT版

# 硬科幻和战斗友谊-杨贵福-读书分享(文字修订版)

下面就有请杨老师开讲。

谢谢。

今天跟大家谈一下我看科幻小说和科幻电影的体会。

## 硬科幻

王老师刚才一说的时候,我就想到我以前有挺多思考。我喜欢看恐怖片,我为什么喜欢看恐怖片呢?就想这个原因,后来想到,可能是因为对于未知的恐惧,才是最大的恐惧。后来我也想过喜欢看硬科幻,我为什么喜欢看硬科幻?

(问台下)你是哪个系的?

历史系的。

您就够硬。

我要讲的就是这种历史系同学表现出的硬科幻。比如用手机一下就把空调关了,你可能觉得不是那么很浪漫,但是如果咱们正在酝酿一个案件,要做一个案子,或者要杀一个人,诸如此类的,然后他把摄像头关掉了——摄像头也很容易就能关掉,用这一类的方法,这个就感觉很酷。这个就是我喜欢硬科幻的原因之一。

今天要谈到这几个作品,我就要从这几个作品当中引申出我的观点。

## 第一部:《纵横四海》

这是一部很古老的片子,1991年的,名字叫《纵横四海》。它的英文名字对应着一句英文谚语:当过一次贼,你就永远都是贼。1965年有一部片子就是这个英文名字,扮演者叫阿兰·德龙。在座的各位同学都很年轻,可能也没有听说过阿兰·德龙,在我们那个时代,阿兰·德龙就是特别帅的帅哥,比现在的鹿晗还帅。

我一跟同学们提到高仓健,好多同学都不知道是谁。好多年前就有同学说,高仓健我听说过,高仓健演过《千里走单骑》——那个是他年老的时候、马上要退休的时候演的。高仓健最著名的片子是《追捕》,大概1979、1980年的时候进入中国,是一部日本片子。当时中国的女性一看,哇,男人还可以这样!他既不是高大全的英雄,也不是抗日或者革命的英雄,就是感觉很man、很有男人味。事实上这是与性别无关的,刚才那位同学把空调关了,如果是一位女同学把它关了,我们也觉得她很有力量。在这里,“男人”是一个无性别指向的评价词,这是从阿兰·德龙、从高仓健引申出来的。

吴宇森在那个时代专门拍这样的香港警匪片,这是一部盗贼片,其中有三位主角,现在看起来可能不是都那么有名,但当年非常非常有名。第一位叫周润发,我们那个时候认为他是比刘德华更厉害的存在;还有一位是张国荣,他已经去世了,是当年无数青年女性的梦中情人;第三位是钟楚红。你看这部片豆瓣得分8.8,很高。因为先有了电影,后有了豆瓣,所以它的得分其实算低的。中间这一位就是钟楚红,高大一点的是周润发,这边这个很帅气的就是张国荣。

我为什么想说这个?我想表达我喜欢他们到什么程度。中间这张小画大家可能看不太清楚,是巴掌大的小画片,画的三只猫。这是科幻云撸猫群里一位网友家的三只猫,我当时一看就觉得,这不是他们三个吗?当时还没讨论今天要讨论这个主题,我就把这画下来了。他们去偷东西的时候,偷的是艺术品,伟大的艺术品。当时周润发就说:“我们盗窃难道是为了伟大的艺术吗?”那就是当时他们的一句对话。

以上是表达我有多么喜欢他们。接着我们来看一小段视频,这段视频一共有十分钟长,实际长度是11分13秒,就是他们偷东西的过程。然后我们再来分析偷东西的过程当中哪个地方很有意思。

(播放视频,《纵横四海》中的第一个段落,从卡车上偷歪脖女的肖像。)

在中文写作研究领域,有一种做法叫做拉片子,这个片子我就特别喜欢,希望能一遍一遍地拉,但是我们没有那么多时间,就来看一下重点。

整个案件作案分成三个部分:第一部分是铺垫部分,第二部分是潜入部分,就是卡车里面那部分,第三部分是撤离部分。

第一部分铺垫部分,我们发现C就是那位女士,她用香水去做气味标记,还包括小狗也做了气味标记。这位女士专门负责外联,我们能注意到她会法语,她跟其他人用法语对话,包括那句“Mona Lisa”,其实她的发音跟咱们汉语、英语都不一样,应该就是法语。接下来B和C两个人坐着小车,特意拐到了卡车前面,让卡车降速,同时也起到了干扰注意力的作用,司机都看热闹看得挺有意思。这个时候A也就是张国荣,选择了特定的时机——卡车转弯减速的时候,一个胳膊肘弯,滑到了车底下。以上是第一部分铺垫部分。

第二部分是在卡车当中,潜入和偷画这样两个过程。A侧滑到车底,把自己固定上,然后用电锯把车底切出了一个圆。为什么切的是圆,而不是其他的形状呢?比如说不是方的呢?各位用过锯吗……因为切方的非常非常难,切方的拐不了那个直角的弯,非常困难,所以切出圆是最显然、最直接、最简单、最容易的方法。即使要偷到一个方的东西,很有可能也会先切一个圆。我曾经买过那种锯,后来退掉了,我觉得非常危险。

然后B也就是周润发,跳上车尾,开锁进去了。这个时间是算好的,他们没有使用任何无线通信工具,这是那个时代的一个特点。然后B找到目标,他是通过气味找到目标的。他怎么知道闻的是哪幅画呢?在这之前,他和女主角有一段挺长的对话,其实我曾经考虑过要不要把这段对话切掉,因为它与故事的主线关系不大。后来很多年以后,这个片子我看了很多遍,就在最近这几年看的时候,才突然弄明白他俩到底在对话什么。那位女士问他:“你时间还来得及吗?你怕不怕来不及?”我后来才知道,其实这句话的意思与偷画没有任何关系。周润发说“天还没黑呢”,也与偷画没有关系。她说的其实是“你到底什么时候向我求婚呢”,这才是关键。是我这几年才懂,如果我是周润发的话,那早就晚了,我完全没有看懂这件事,还在想偷画、说什么呢。

那段对话又有闻气味,什么脸贴过去,他在做什么?他在确认是用哪一种香水标记的。事实上周润发做的全都是与业务相关的事情,而这位女士就在那讲巴黎圣母院铺满牵牛花。为什么铺牵牛花呢?不铺其他的,不应该铺玫瑰花瓣吗?其实我很困惑,事实上这种困惑可能本身也是错误的,在情感当中,这种困惑就是不应该问的。

这是硬科幻的考虑角度:他进去了,然后B找到目标,通过气味找到目标。接着这里面好像删掉了一段,我的印象当中删掉了一段:他把那个画沿着画框切下来,可以重新装裱一遍,然后卷成桶收纳起来,接着从车底那个圆洞把画送出去了。这是偷画的过程。

最后撤离的时候,周润发是通过降落伞脱离的,并且由于他用降落伞脱离,成功吸引了车里面保安人员的注意力,所以他们没有想到另外一个人已经从车底脱离了,而且还把车的刹车给去掉了。接着是他们三个人会合的过程。这个后面有一段是伏笔,到后面的时候有一次call back,他又说了一遍:“你们会没有好结果的,祝你们春梦了无痕。”

那分析这段的目的是什么呢?在这里面,关键是有机关、有消息——这个消息不是message,是古代各种机械当中互相勾连的结构,然后用巧妙的手法或者技术做了这样的一件事。

在这里我必须要提醒大家:不要犯罪,违法犯罪行为在中国是违法的,不要这么做。

然后我们来看它的魅力在哪里,有两点。

### 魅力A:精妙而漫长的演绎结构

演绎是什么呢?演绎是逻辑当中,如果出现了A条件,那么就会有B结果;我在执行C这样的一个动作,那么就会有D结果。这个链可能会推得特别长。我们喜欢看有一些现代的片子,沿着古龙的那个方向往下发展的,就有一点这种趋势:一个阴谋特别的漫长,涉及到的人非常的多。当然有人说了,事实上在现实生活中,阴谋都非常的短,坏人要做坏事的时候,都应该直接自己去做,而不是通过很多巧妙的机关来做。但是为什么这个东西会让我们觉得有魅力呢?

第一就是自然科学本身具有这样的特点。自然科学不仅仅基于事实,也基于几个简单的事实作为公理,在这个基础之上所进行的推导,这就是所谓的演绎。演绎是根据此时此地知道的微小的信息,我们可以推得彼时彼地更大的一个结果。这个思想流派远早于1500年前后培根的实验思想,而是一直可以脱胎于苏格拉底那个时代,这就是哲学当中纯理性流派的开始部分。

另外一个,它给我们带来的这种感觉,可能有一个来源:狩猎也是这样的。人类狩猎的时候,总是要把猎物推到一个特定的位置上,然后它才会掉进陷阱。它掉进陷阱不是偶然的,我们能够在某一个地方把那个猎物刺死,也不是偶然的,是因为我们把它驱赶到那里。这就是“如果我做了C,那么就会有D”的情况。

还有一种什么情况会让我们觉得特别有魅力呢?就是如果参数特别多、关系非常复杂的话,那就更棒了,像刚才涉及到那么多东西,后面还有其他的例子也是这样。如果这个方法巧妙到让你觉得脑洞大开,“我居然还可以用这种方法做,我从来没有想过”,而且所借助的方法是非常平常的物件,你也可以实施,那就更好了。不像巫术,巫术是你只有特定的机缘、特定的素养,只有你有这样的血脉基因的时候,你才可以做。科学不是,科学每个人都可以,只要教会了你这个方法,你就会。你就会觉得,平常的事情能够做出一个离奇的实践。

好,我们做一个实验。假定你被绑架了——当然了,绑架在中国也是违法犯罪行为,我们假设你被绑架了。绑架分子可能会用这样一种东西,这个东西你们认识吗?扎带,对。这个东西还有个名字,叫做“勒死狗”,它的特点是如果你把它折过来扣进去的话,就解不开了。绑架分子也可能会这么做,有比较长一点的扎带,把你两个手指都扎在一起,然后你就不能动了。我没有找到长扎带,就找到了这个。比如说现在有一个绑架分子把你扎起来了,你怎么把它弄断呢?只有弄断了你才能跑,利用你手头的工具怎么才能把它弄断呢?你可以试一下,这个东西其实很结实,拽的话很难拽断。

如果你有一个小牙签的话,你可以插着这个小签,别一下,就能把它拽出来,这是一种方法。还有呢,就是你平时习惯于随身带一把小刀的话,也可以解决这个问题。那如果你都没有呢?现在我来介绍一个魅力A所在的神奇的方法:都有鞋带吧?鞋带就可以解决这个问题。

就这样,比如说现在他把我的手指扎起来了,我可以在这把鞋带穿过来,打个几下结,这都是很容易的事。你也可以用其他的方法,这不重要,重要的就是只是把它固定上而已,就是别忘了把鞋子也穿好,要不然容易摔倒。然后你要做的事情就是来回摩擦,它就开了。原因是什么呢?对,因为摩擦生热,它怕热,很快就达到了一个特定的温度,然后一拽就开了。你要是没有两根鞋带,其实一根鞋带也足够,我之所以用两根,是因为为了把它绷紧。一会儿你可以试一下,把自己“绑架”了,然后看看能不能把自己救出来。

还有这个行李箱,如果你行李箱打不开了——不要去试探别人的行李箱,如果你自己的行李箱打不开了的话,有一个特别简单的打开的方法:就是拿一只圆珠笔,朝着行李箱的拉链的地方扎进去,一扎进去,拉链就撑开了。容易到什么程度呢?你看这个,假定我行李箱打不开了,问题不大。

我第一次实验这个东西的时候,也非常震惊,居然这么容易,一下就开了。所以从那以后,我觉得行李箱上的锁呀什么的,根本没有用处,随时就可以把它弄开。你可以试试,有的时候需要有一点技巧,需要够紧,需要绷紧和摩擦,一会儿你就可以试下,在绑匪发现之前。

这就是硬科幻的魅力之一。几乎所有的硬科幻都具有这样的特点,有的硬科幻我们会觉得“你看它也不硬啊,它基于的东西不是自然科学的”,是因为它是基于演绎的。最初的假设可能是错的,但整个演绎都是正确的,我们就觉得这个东西特别好玩。

### 魅力B:战斗友谊

我们观察这几个人的关系,会发现他们具有这样一些特点。

第一,他们之间的结合非常紧密,时机把握得非常好,而且每一个人都是不可或缺的。在有一些片子、有一些综艺里面,里面可能会有一个女主角——这里面与性别其实关系不大,刚好是一个女性——这个女性的特点就是长得很漂亮,并且在整个过程当中给大家带来的都是麻烦,最后她终于也完成了这个工作,大家就说“哇,我们是团结一体的”。没有,他们之间其实没有任何合作,这位女性就是吉祥物。而在我们这个片子里,这个女性不是吉祥物,虽然你可能会看到周润发一会儿说“你开车开慢了”“你开车开快了”“你挂挡挂得不对”,但是外联都是靠这位女性去完成的,如果没有她最初的标记,后来什么都没有,她是一个非常重要的角色。

第二,没有超出任务以外的耦合。这个耦合是计算机当中的一个术语,我们希望高内聚、低耦合。内聚是指每个人之间的关系,每个人有不同的责任,不是大家坐在同一个班级里一起高考,然后我们说“我们是一个团结的班级”——不是这样的,高考考试的时候每个人都是单独考的。而在这里面,他们单独做这件事都做不成,后面他们又做了其他的案子,其中就提到“没有我,你是做不成这个案子的”,这就是“我是不可或缺的”,每个人都是不可或缺的。

那么没有超出任务以外的耦合呢?是指他们除了有这种单纯的友谊——这个友谊就表现为他们共同做一件事——除此以外,没有任何其他的联系。那个时代的很多香港片,包括武侠片,都有一个共同的特点:男主角通常没有父母。有很多原因,其中的一个原因就是避免其他角色与他建立超出友谊之外的联系。没有父母就可以没有任何牵绊,这部片子里面他们都没有父母。他们有一个共同的抚养他们的坏人,叫做“老爸”,还有一个在道德上指导他们的好人,他们管这个人叫“干爹”。业务,这就是他们之间唯一的联系,没有与父母这种联系。

在刚才那个段落当中,女主角试图与男主角建立任务以外的耦合,她希望跟他之间有爱情关系,周润发的表现是什么呢?“我不懂,我完全不明白,我既不希望建立这种联系,我也不知道你到底想要建立什么联系。”最后他俩开车走了,周润发就说“祝你们春梦了无痕”。后来在这个片子里面,钟楚红和张国荣谈恋爱了,就是你看你不懂,我就跟别人谈。钟楚红说“我希望在巴黎圣母院举行婚礼”,她没说过要跟谁举行。

第三,他们都是独立的个体,他们不是忠诚于一个上位的归属,比如说“我们集团”“我们小偷公司”,不是说“我们大家都是公司的员工,我们大家都热爱公司”。有一个上位的人,就是那个坏人老爸,教他们偷东西的人,这个老爸试图让大家都忠诚于他,最后那个老爸被打倒了,这是后半部分的剧情。他们是没有上位归属的,是大家彼此相互忠诚。相互忠诚于什么呢?不是忠诚于这个集体,而是每两个个体之间是相互忠诚的。所以在这里面,钟楚红并不是一位女性,去掉性别的话,她是一个哥们,一个很能干的、专门负责外联的哥们。而这位哥们居然想跟男主角谈恋爱,所以男主角很困惑:你看我跟你是一起作案的,咱们是一起偷东西的,你怎么能够想这件事呢?

他们不具有什么特点呢?他们没有涉及到利益分配,整个片子到最后,我们也没有发现他们分配利益。他们是沉迷于偷东西,而不是沉迷于偷东西的结果——分钱,分钱不重要,偷东西这个过程、享受这个过程才是重要的。甚至他们也没有提到“我们对于利益的分配非常满意”,连利益分配满意也没有,根本就没有利益分配的事。他们也没有宫斗,没有任何内部的斗争,这是硬科幻这一类片子当中一个典型特点。他们没有内部斗争,也彼此之间从不试探其他人“你到底想要什么”,钟楚红试探了一下,周润发没接招。从来不对对方做动机的猜测,我们就是要干这个活,没有那种暗黑的“是不是你要害我”的情况,大家彼此非常信任,从不揣摩别人的心理。这是这一类片子、这一类小说的一个典型的特点。

## 第二部:《神秘岛》

简单回忆一下《神秘岛》。它出版的时间非常早,1875年,还是咱们清朝的时候,到现在已经超过了150年的时间。这部小说描述的背景是美国独立战争,他们几个人,一共五个,乘坐热气球从美国一直飘到了南太平洋的一个小岛上。

他们有不同的角色,每一个人有不同的分工。第一个人直译过来叫居鲁士,他是一个工程师,他的英文名字Smith也暗示了这一点;还有一个人是记者,同时是医生,在荒岛上一个医生多么的重要;第三个人是水手,他特别能干活、特别能打;第四个人是一个少年,他在这里面经常表现出被关爱、被保护的角色,但与此同时,他不是吉祥物,他是一个博物学家,在海岛上认识植物、认识动物,知道什么能吃、什么不能吃,这个动物具有什么特点,这非常重要;然后还有一个也很能干活的人,是水手以前的一个奴隶,后来被解放了。就是这样几个人,他们具有刚才那个片子里面所有的特点。

在工程师的指挥之下,他们从一无所有,测量出海岛的经纬度,推断出周围没有大陆,一直到最后造出来了有线电报。在这个期间,他们做出来了铁、火药、肥皂、制陶等等这一系列的工作。所有的工作都具有一个共同的特点:是基于纯自然力的,没有魔法的。如果你在荒岛上,按照他们这个方法,把它当成手册,十有八九就能够做得出来。(PPT上的手绘图)这是在哪一章节当中都做了什么哪一些事情。

还有一个特点就是它很巧妙,是因陋就简的,手头上有什么就用什么。比如说如何测量经纬度呢?没有手机,当然也没有GPS,它所使用的方法是通过六分仪在晚上的时候观测,就像咱们观测北斗星一样,它观测的是南十字星的高度角,算出来了他们的纬度。通过正午时间——怎么确定正午呢?始终跟踪一个杆子的影子的长度,影子最短的那一刻就是正午——根据正午杆子指向的那个时间,得到了正午的时刻,和刚好有一个人有一个没停的手表之间的时间差,算出来了经度的差距。这样就既得到了经度,也得到了纬度,都是根据这一类的方法做出来的。所以你看它有这种魅力。

第二个特点就是,人与人之间的关系也是这样的,人与人之间的关系非常简单。第一就是他们的友谊,每一个人都是不可或缺的,都是有用的,是基于有用并且建立了友谊。不同的是,可以认为这是我的观点的一个小瑕疵,不是作品的瑕疵:他们有一个共同忠诚的对象,就是美利坚合众国的北部,而不是南方,他们都是北军的忠诚的支持者。但是美利坚合众国的北部这个东西非常的虚幻,即使他们共同忠诚的不是美国的北部,而是其他的随便一个什么东西,这个故事也仍然是存在的,所以那个东西并不是很重要。

没有超出任务之外的耦合,这是一个小的缺点:他们困在孤岛上,谁也走不了。但是同时呢,他们没有宫斗,没有任何内部的矛盾,大家的观点始终都是一致的,除了方法上的讨论,没有对其他人价值观和世界观上的指责。他们都是独立的个体,没有上位归属。刚才提到的有南北战争中的北方作为他们的精神上的领袖,但是这个事也不重要。虽然我们觉得在《神秘岛》当中,如果读的话你会发现,那里面的工程师似乎是一个很重要的领袖,不是的,他成为领袖的原因是因为他的工程能力强,而不是因为其他的任何原因,既不是情感上的,也不是宗教上的。这是忠诚的含义。

## 第三部:《银河英雄传说》

第三部既是一部片子,同时也是一部很漫长的小说,十册,这个小说的名字叫做《银河英雄传说》,它的作者是田中芳树,一个很著名的小说家。还有动画片有两个版本,我看了其中一个版本。

这部小说非常有名气,非常好看,也很容易看,刚才这几部都推荐给大家。它不是硬科幻,它是一部非常软的科幻,里面没有什么硬的东西,广受指责的一点就是:在宇宙空间当中发生的事情,但是经常是在一个平面当中打仗,从来不是三维立体的,各种技术看起来都不是很重要。但是魅力B的这一点,它表现得非常的明确。

在《银河英雄传说》当中,把这些人之间的关系称为“侠气与醉狂”。我为你做某一件事情的原因,是因为我想做侠气、想讲义气,而不是因为对同盟或者对帝国的忠诚,跟这个关系不是很大。醉狂,大家平时就一起喝酒,就像酒肉朋友一样,我们大家在一起喝酒很高兴,我们唯一的关系就是大家都很喜欢喝酒,大家都很喜欢一起来做一些共同的事情,不是基于信仰的,就是侠气与醉狂。

有几个人他们都具有这种特点:其中一个人是从帝国叛逃到同盟那一方的人的儿子,以前的贵族,他们结成了一个新的团体叫做玫瑰骑士团。其中最能打的人叫先寇布,然后还有指挥战舰的亚典波罗,和战斗机飞行员波布兰,还有主角杨威利,和另外一个飞行员叫做高尼夫。

如果你看过的话感觉就会更好,我在说这些的时候,你能想到这些人他们共同的特点是:他们的战术技术都非常的好,回想一下刚才那部片子和《神秘岛》当中,每个人都具有这样的特点。第二呢,他们的性格特点是都喜欢自由,一定程度上他们是叛逆的。与这个看起来好像相矛盾的是,他们都是忠诚的,他们彼此忠诚,但并非忠诚于他们所在的组织,他们对他们的组织是叛逆的。包括男主角杨威利,非常看起来很乖乖男的,最后也很乖乖男的,他在年轻的时候,曾经和波布兰他们组成了一个组织,这个组织的名字就是“我们专门喜欢看禁书、读禁书”的组织。

他们的另一个表现就是不拘小节,作者在这里面还有一些特殊的表现方法,表现他们是如何的不拘小节的。刚才我们看周润发和张国荣,他们也有这个特点,他们是不拘小节的。你们可能对这个都不熟是吧?(台下:没看过)看过就好了,咱们就跳过这一段,要不然我说什么你们也不知道。

## 第四部:《挽救计划》

《挽救计划》既是一本书,同时也是一部电影,最近这部电影也上线了,现在下没下线不知道。它的英文名字叫Hail Mary,如果直译过来的话,“Hail”是万福万岁、欢呼,“Mary”是圣母玛利亚,所以直译过来可能具有宗教色彩,不知道是不是因为这个原因,翻译成了《挽救计划》。

这个词还有另外一个含义:在他们打棒球的时候,马上时间就要到了,在最后那一刻做一个冒险的长传,如果失败了就拉倒,如果胜利了那就最好,这样的一个球叫Hail Mary。刚好与这个片子的主题是契合的:人类快要毁灭了,地球就要完了,派出一艘飞船,这艘飞船的名字就叫Hail Mary,他们执行的这个计划就叫Project Hail Mary,他们做的这些事情就是孤注一掷的,到遥远的星球当中去寻找拯救地球的答案。分也很高,分别8.6分和9.1分。

那跟我们讨论的有什么关系呢?其中一个就是,它是一个非常典型的硬科幻,我们看一下刚才说到的典型的特点:它具有漫长巧妙的推演链,里面有好几条链,这些链都具有刚才的特点,有“如果A就B,如果B那么就C”这样的推导,逻辑都是严密的,都基于纯自然的、科学的、技术的、工程的原理,与政治关系不大。其中有一个阴谋,就是把他送上飞船的原因,看起来是一个政治阴谋,但是那并不重要,甚至有的人指出说这地方写的太过于生硬了。

你可以认为,这就像刘慈欣一样,说为什么没有塑造一个完美的女性形象,是因为他见过的女性可能也很少,这些方面也不了解。同样来说,这个作者是一个NASA的工程师,一个真正的工程师,他写的第一部作品是《火星救援》。他写了这个小说,发在了他自己的一个网站上,有很多人过来看。后来就有人说能不能发一个电子书,他就把之前写的小说打了个包,做成了一个电子书,说你们下载了看随便看。有三千多个读者看,也都是免费看的。后来又有读者说,你这个怎么才能够放到Kindle里面看呢?他又写了一个简单的教程,说你这么做这么做这么做,就可以把这个电子书放到Kindle的硬件里。读者说这太费劲了,说你能不能放到亚马逊的网站上呢?然后他就把这个打包了一个电子书放到那个亚马逊网站上。结果放到网站上之后呢,他发现必须得收钱,免费是不可以的,他就收了一个最少的钱,0.99美元吧,结果下载的人非常多。后来他就这样变得非常的著名。

这里面充满了基于自然科学的推导,举一个例子:书里面写他最开始醒过来,失忆了,也不知道自己是谁,也不知道自己在哪。他就想了一个问题:能够感觉到重力的存在,有方向性的力的存在,我到底是在地球上或者某一个星球上,还是由于离心力的作用?就比如说这样(以肩为轴旋转胳膊,手里握一瓶水),这个水现在在下面,由于离心力的作用,这个水始终都在底下。怎么来区分离心力所造成的引力的错觉,和万有引力带来的重力呢?这就是这本书里面提到的第一个问题。

第二个问题:重力和离心力带来的力有什么区别?如果我们看过《相对论ABC》这一类的书的话,我们就会注意到,说离心力所造成的力和万有引力,本质上是没有区别的,是不可判别的。但是区别在哪里?区别在于力的方向所指向的点(为圆心的圆)的半径有多大。你看当我这么转的时候,这个半径大概只有一米左右,因为我的胳膊就这么长。所以在这个位置上的力是指向圆心的,在那个位置上的力也是指向圆心的。所以只需要测出各个不同位置的力的夹角,就能够测出来半径有多大。如果力的夹角表明半径只有一米的话,那它很可能是在一个狭小的空间里。他当时推断出力的夹角小到什么程度:要么就是在一个半径大概30公里还是50公里左右的飞船上,要么它就是在一个行星上。

接着呢,他还能算出加速度,通过什么算?就通过单摆。这个公式有物理系的同学吗?太好了,你好,我也是物理系的。这公式有印象吗?有吧,就是2π根号下L/g,T是周期,L是摆长,g是重力加速度。他就通过单摆,找到了一只表,能测量时间,π你又知道,长度你也可以限定,你可以做一个这么长的单摆,然后你如果知道长度,你就能求得加速度,这样我们就知道加速度是多大了,他就用这种方法求的。

其实这里面他讨论的比这个还要多,他讨论了什么呢?我需要一个以秒为单位的工具,我需要一个尺,我需要知道什么是一米。如果你现在被困在飞船里面,知道什么是一米吗?你怎么才能确定一米有多长呢?就现在你现在就在这,咱就有一个飞船,现在就要确定一米……(接下来有同学指出,知道身体的特写部位,例如胳膊、手指等的长度。还有精度和误差的讨论。)

## 第五部:《豺狼的日子》

设想,你是一个杀手。你刺杀的对象是戴高乐,时间是1963年,所以你只能使用那个时候的武器。刺杀戴高乐的原因,这书里面也说了,但是也不重要,对于我们要讨论的问题不重要。原因是因为在1962还是1963年,法国总统戴高乐承认了阿尔及利亚的独立,然后法国人有一些就认为戴高乐是我们的叛徒,我们要弄死他,所以就雇了一个人,代号“豺狼”,就是你。

你需要做哪些准备工作,才能够成功地完成这个任务?当然最后你失败了,出于正义的考虑,和历史上戴高乐并没有死的考虑。他准备了这把枪,如果没记错的话,这把枪是在美国造的,找了一个美国的专业工程师来造的。这把枪要能拆成五个部件,要能够放在防水布里,裹在车的排气管的附近,通过英吉利海峡进入法国。还要能拆成五部分,放到一个拐杖里,他要装成一个瘸腿的人,带到禁区当中。要能够把它拆开组装起来,成为这样一把枪。七点几毫米还是八点几毫米口径的子弹,一共有五发,头上有水银的子弹,所以打到人的身体里面会爆炸,这个人就没有救了。

可能有的同学马上就想到了,这是不是违反战争法的?这是达姆弹。是的,就是杀人也是违法的,这是在这个片子里的讨论的角度:杀人也是违法的,你还要考虑那么多吗?

怎么固定这把枪呢?用绳子拦在这个树上,勒紧,然后这把枪就固定住了。有瞄准镜。他还做了其他的一些准备,后来我查了一下才想起来,因为与这个偏硬的部分离得太远,那些细节我就忘掉了,但是都非常有必要。

比如说其中一个特点是,他造了一个假的护照,这个假的护照是英国政府合法发给他的。怎么造一个假的、合法的,由英国政府发给他的护照呢?他去教堂找墓地,在墓地当中找到了一个和他同一年出生的人,1931年还是多少年,也就是说他那个时候才三十几岁,按照这个名字去申请了一个护照。申请到这个护照以后,他又到机场偷了另外两个长得都跟他很像的人的护照,用这些假的护照出行。凡是涉及到可能泄露他身份的,比如说给他做假护照的人威胁他说要泄露他的身份,就把那个人灭口了,所以他还灭口了几个人,都是为了隐藏自己的身份。

他做了一个假肢,假装自己只有一条腿,做了一身军装,做了若干枚军功章。就在戴高乐去为法国烈士献花的一个军事节日里,在凯旋门那一带通过了禁区。因为他是一个荣誉退休的军人,所以保安对他非常尊敬,他就这样走了进去。而他是一个瘸腿的残疾人,只有一条腿,负伤了,那就意味着他是为国负伤了。他是一个非常出色的编造故事的人。

然后他到了那个楼上,最后总而言之,运气也是你作为杀手工作的一部分,他的运气不是很好,也可能出于政治正确,总而言之最后他失败了。在他开枪那一瞬间,戴高乐突然弯了一下腰,没打着,像那个川普是吧。

事实上他在那之前有观测,戴高乐有个习惯,就是在周围有开枪有各种危险的时候,戴高乐从来不把头低下,作为法国人民的勇敢的总统的象征,从来不把头低下。所以他基于这个假设准备执行这个任务,结果那一次戴高乐刚好弯腰,是献花还是敬礼啊,刚好躲过了这一枪。

比这个还要复杂,122米的距离,如果有5.4米每秒左右的风的话,子弹就会偏移15厘米左右,就会超出一个人的头的宽度,所以那是他任务成功的关键条件。(如果风速有这么高,他就中止任务。)而且除此之外,他还通过弹道当中经过的几个地方的旗子、晾的衣服,来判断那三段每一段的风速是多少,还根据风速调校了一下他的枪的瞄准镜。

谁最开始给我讲这件事呢?就是刘慈欣给我讲,喝酒的时候给我讲,你看我认识他,这是能吹牛的一部分。刘慈欣说,有一部片子里,有一个人他在射击的时候,怎么测的风速呢?就是根据弹道上的衣服和什么什么的旗子飘动的幅度。后来我看了这部片子,当我看到那个镜头的时候,我一下就想到了,刘慈欣说的肯定就是这个。

这个就是硬科幻的魅力:一个朴素的、你平时能够见到的东西,有一个神奇的用途,而这个用途本身是符合自然规律的;还有一个漫长的逻辑推理链,你先做什么,后做什么,最后就能够成功。而在这部片子当中,还有一个特别硬的地方:他没有同盟,他甚至连同盟都没有,或者说硬科幻当中可以依赖的演绎的那一部分,就是他的同盟。

## 总结与推荐

以上呢,参考了这几部作品:《神秘岛》《纵横四海》《银河英雄传说》《挽救计划》《豺狼的日子》。还有一篇我写的短篇,推荐大家有时间看看,名字叫《李记者典少尉列传》,发表在《科幻世界》2024年3月号上。它不是很硬,有硬的部分,所体现的就是硬科幻的那种侠气与醉狂的、爷们儿之间的感情的这样一个故事。

后面这部分说一两句,就是我们怎么来判断一个东西是真的。第一呢,它是可以通过自然检验的;还有一个就是,它的逻辑内部是不相矛盾的,是自洽的。这是很重要的一部分,事实上这是硬科幻的一个特点,只是刚才我们没有提到它。

我们经常认为,伽利略反对亚里士多德,是在比萨斜塔上扔两个铁球。他不需要扔铁球,扔铁球的话,亚里士多德的支持者也可以说,这是因为你的检测时间还不够准确,这是误差。伽利略不是那么论述的,伽利略是这样论述的:

如果你有一个较重的铁球,那么它的速度一定会更快;你有一个较轻的铁球,它的速度一定会相对较慢,这是前提。接着就是推导,这是硬科幻的部分,是演绎的结果。你把两个铁球捆在一起,就得到了一个更重的铁球,一个轻的和一个重的铁球相加,一定会得到一个更重的铁球,所以这个更重的铁球的速度应该更快,比刚才那两个铁球都快才对,这是根据亚里士多德的观点推导出来的第一个路线。

第二个推导路线:由于重的铁球速度比轻的快,轻的铁球速度比重的慢,所以这个较轻的铁球会向后拉着这个较重的铁球,所以它俩的速度应该介于它俩之间。这与第一个推导路线是相矛盾的。所以如果亚里士多德活着的话,伽利略就会说:“亚老师,你的观点内部不自洽,所以肯定是错的。”这个叫做归谬法。

事实上在历史当中,伽利略就是这样反对了亚里士多德,这也是我们在硬科幻以及其他的领域当中,检查一个观点是不是有问题的一个重要的方法。只有内部逻辑是一致的才是真的,只要内部有不一致的一定是假的。

我年轻的时候看《雷雨》,我就觉得那里面那个周朴园,文学书上写的周朴园是虚伪的,我觉得他不虚伪啊,我看的时候可感动了。你看周朴园的前女友四凤她妈,由于种种原因离开了他,周朴园一生都保存着四凤她妈的房间,一直在思念着,岂不是很纯情?按照琼瑶的观点,这太纯情了。

但是如果我们退一步,从更高的一个抽象的角度上看,他的内部逻辑一致吗?你喜欢她,你就和她在一起啊,你没和她在一起就是不喜欢她,这就是言行不一致。什么是虚伪?这就是虚伪的定义。

还有另外一部我年轻的时候对我影响非常大的书,叫做《牛虻》。《牛虻》里的主角牛虻是个革命者,致力于意大利的独立斗争,他的父亲同时是一个神父。牛虻就曾经认为神父是虚伪的,我当时觉得不啊,牛虻他父亲非常的真诚。当然他有他虚伪的部分,因为在他们的宗教当中,神父是不可以结婚的,因此当然他也不会有儿子,他居然有了个儿子,好这部分我们跳过。

牛虻最后要被判处死刑,他父亲去劝他,说只要你写一份悔过书,这个政府就可以原谅你,我还可以替你做各种各样的假。最后牛虻他父亲甚至说,特别像一个父亲:“我可以到山里去横死,只要你能够和政府配合一下,你能活下来就可以。”最后牛虻的意思就是:你滚蛋吧,你是一个虚伪的人,你的宗教信仰也是错误的。“你叫喊的声音更大一些,你的神可能只是睡着了。”这是那一段原文。

后来神父走了,牛虻突然感到了非常大的恐惧,他在监狱里面喊“神父回来”,但是神父已经走了。第二天牛虻被枪毙的时候,又变得非常勇敢,牛虻告诉士兵们:“你们勇敢一些,你们都把头抬起来,现在开始瞄准。”牛虻自己喊口令,指挥士兵们射击自己。

但是你看牛虻他父亲虚不虚伪呢?他是虚伪的,因为他所说的跟他所做的,抛开所有的细节不谈,最后他的逻辑内部是不一致的,因此就是虚伪的。

从这里面我得到一个什么样的经验呢?我得到的经验就是,硬科幻当中的主角,都有一个共同的特点:他们在道德上没有任何成长,因为他们最开始就是成熟的。或者换句话说,就像刘慈欣的小说一样,我们不关心他的道德,我们既不关心他的道德,也不关心他的情感。我们关心的是什么呢?我们关心的就是刚才那两个方面:一个方面就是,你有没有一个好朋友跟你一起玩呢?第二,你们玩的东西是不是很让你感到高兴呢?没了,就仅仅是这些东西。

这是我这些年读硬科幻和看硬科幻电影得出的一些结论,跟大家分享。我的分享结束了,现在进入下一个环节。

此文也发布在以下站点。
----
知乎 https://www.zhihu.com/people/yang-gui-fu-52

独立博客 https://younggift.net/

微信公众号 杨贵福
----
以下是我曾经发布博客的站点,有些旧文。
----
豆瓣 - 因为审核"我的日记",不再更新。
https://www.douban.com/people/younggift/?_i=0098558fqLUL9h

CSDN – 因为要求我登记手机号码的原因是“为了您的安全”,不再更新。
https://blog.csdn.net/younggift?type=blog

blogsopt – 因为从我的机器不可达,无法更新

硬科幻和战斗友谊 ppt

这是2026年5月28日,受东北师范大学图书馆王文佳老师邀请所做的读书分享,PPT部分。加上PPT后的讨论,共1.5小时左右。

分享开始前,有同学觉得冷,另一位同学用自己的手机关闭了空调,与硬科幻我想讨论主题非常契合。另有一位同学在讨论中对刘慈欣的作品如数家珍,有一位同学谈了《献给阿尔杰农的花》和《1984》中的糟糕拼写、文法和隐秘记录的翻译很有心得,科幻研究者李浩宇老师谈到翻译中的归化等问题,一位物理系同学评论了《太空漫游》和马特·达蒙……可惜未能一一尽录。很愉快的聊天。

感谢王文佳老师,感谢李浩宇老师。

感谢 东北师大图书馆、东北师大信息科学与技术学院。

感谢各位同学。

此文也发布在以下站点。
----
知乎 https://www.zhihu.com/people/yang-gui-fu-52

独立博客 https://younggift.net/

微信公众号 杨贵福
----
以下是我曾经发布博客的站点,有些旧文。
----
豆瓣 - 因为审核"我的日记",不再更新。
https://www.douban.com/people/younggift/?_i=0098558fqLUL9h

CSDN – 因为要求我登记手机号码的原因是“为了您的安全”,不再更新。
https://blog.csdn.net/younggift?type=blog

blogsopt – 因为从我的机器不可达,无法更新

5月20日的老头

5月20日,520,不知道哪年开始算情人节了。这一天,我见到了几个老头儿,都很有趣。没见到老太太。

以前路过冬泳区的时候,还非常空旷,几乎没有人。只有一次遇到两三组拍照的。其中一组是一位浊心斯卡蒂站在水边,一个摄影助理扶着法杖,另一个摄影助理负责提裙子,还有摄影师站在梯子上面。那就是人多的时候。

今天徒步,从房子角转过来,眼前突然出现一大片老头儿,人数之多吓我一跳。沙滩上满满的全是人,栈道和水泥地上也全是。有的坐在防潮垫儿上,有的坐在遮阳伞下,有的仰面躺着,脸上盖个帽子。清一色的全是老头。古铜色的皮肤健康,小麦色的皮肤,也有的有点儿白,还需要再晒的。秃头的,戴帽子的。精瘦全是肌肉的,微微有小肚子的。三三两两围成堆,没有人吱声,在太阳下静默着。

冬天这里是冬泳区,除了冰就是雪,没想到夏天这么壮观,一色儿的健康肤色。冬天应该会砸开一大片冰面,老头儿们在这冬泳。别人都穿羽绒服,他们都穿着游泳衣,扑通掉到水里,出来的时候浑身都是白雾。光想想就能把我冻抽筋儿。今年春天湖面开始解封,有冰没全化透的时候,有个上海人掉到湖里,被一位休假的武警战士捞出来了。印象里还有两三次新闻,有人掉冰窟窿里,是冬泳的老头儿救出来的。是不是都在这儿。

抬手拍了几张照片,准备回去把他们的脸都涂上,发朋友圈儿,这一个个的老头儿太帅了。边拍边别想,要是哪个老头儿不让拍,我就说,大爷,你这体型可太棒了,咋练的啊。

又徒步了一阵,我们有事儿打车往回走。打的是辆油车,开车的是位大爷。我们说还是油车稳啊,一坐电车就晕。大爷说,那可不,夏天还不敢开空调太遭罪了。我心想,您这儿也没开空调啊,开着窗户自然风。大爷又说,冬天换电也遭罪。我说一天一共才跑几个小时啊,换电时间也不短。大爷又说,冬天开空调不足,冷,不得劲儿。我心想,人家句句离不开得劲,我句句担心的都是钱,这境界差别可太大了。

我们又聊到,今天在浴场看到很多老头儿,我说今天啥日子呀。大爷说,今天520啊。我说,520冬泳区怎么只有老头儿没有老太太呢。大爷说,老太太都在家做饭呢。我说,520不好好浪漫一下?大爷说,浪漫的日子多了去了,521也行,527也行,哪天不行啊。

正说着,我听到一个特别清晰的声音,清晰到就像在我的脑子里响起来的。声音是“新到的玫瑰花儿”。我四下一瞅,看见一位大爷大马金刀地坐在椅子上,身边一家鲜花店。他大脸盘,秃头,短白发贴头皮,戴副墨镜。撸袖子,露出小臂,胳膊支在膝盖上,两腿叉开成马步。上下一身儿黑,腰背挺直,微微有肚子。我正看着,他又来了一句,“新到的玫瑰花儿”。声音稳稳地送出去,除了把墨镜掀到额头上,整个人纹丝没动。

隔着挺宽的人行道,加上一排机动车道,街上车水马龙,声音就这么稳稳地送到我耳朵里了。我一刹那想到了几种人,声音沉稳,吐字清晰,能送得远。上课的,说相声的,唱戏的,而且是早些年没麦克风时练的本事。这老先生原来做什么的呢,练了这么一身本事,还是天赋异禀,看着体型儿就很适合。也可能,声乐?

将来有一天我成了老头,不知道会不会也像他们这么有趣。

此文也发布在以下站点。
----
知乎 https://www.zhihu.com/people/yang-gui-fu-52

独立博客 https://younggift.net/

微信公众号 杨贵福
----
以下是我曾经发布博客的站点,有些旧文。
----
豆瓣 - 因为审核"我的日记",不再更新。
https://www.douban.com/people/younggift/?_i=0098558fqLUL9h

CSDN – 因为要求我登记手机号码的原因是“为了您的安全”,不再更新。
https://blog.csdn.net/younggift?type=blog

blogsopt – 因为从我的机器不可达,无法更新

花瓶防猫

插花的瓶子,小猫咪很感兴趣。经常跑去蹭一蹭,挠一挠,跟活植物非常亲近。有人在旁边的时候格外兴奋,就是要亲近给你看。亲着亲着就把瓶子撂倒了,水洒一窗台一地。很惊讶地看着你,咦?

花才插进去两三天,瓶子就倒了两三次。怎么办呢?想着把花瓶放到沉点的盒子里,不行。瓶子下半部分是圆的,稍微一推还是会旋转。把瓶子固定在窗台上,那样换水的话不方便。

用快递纸箱的一面纸壳做了底座。用胶带在垂直的方向上再粘一层纸壳,提高抗弯曲的强度。打火机烤热熔胶,把瓶子粘在底座上。这下好了,力臂长度基本相同,要打翻瓶子的话需要把瓶子提高0.7倍高度,对于小猫咪来讲有点难度。

第二天,小猫咪当着我的面又把瓶子打翻了。看着我,她演示的意思是,你看,热熔胶粘不住吧。

改成带网纹的得力强力胶,三点锁紧。当天晚上,小猫咪折断了一枝花茎。果然粘牢靠了。直到插花枯萎,猫咪每天去蹭啊蹭,瓶子岿然不动。

不仅蹭插花,小猫咪也经常跑到盆栽的花丛里钻来钻去,把叶子花瓣叼走,有时还会收集起来。她为什么这么喜欢活植物呢,野性的呼唤么?

小猫咪的名字是李贺。盆栽植物没有名字,只有类属,叫灯笼海棠。插花很香,不知道名字。

此文也发布在以下站点。
----
知乎 https://www.zhihu.com/people/yang-gui-fu-52

独立博客 https://younggift.net/

微信公众号 杨贵福
----
以下是我曾经发布博客的站点,有些旧文。
----
豆瓣 - 因为审核"我的日记",不再更新。
https://www.douban.com/people/younggift/?_i=0098558fqLUL9h

CSDN – 因为要求我登记手机号码的原因是“为了您的安全”,不再更新。
https://blog.csdn.net/younggift?type=blog

blogsopt – 因为从我的机器不可达,无法更新

钓鱼高手

视频证据在此 VID_20260520_154650.mp4

南湖宾馆旁边的湖湾有个钓鱼小哥,我平生所见第一高手。今天徒步见到的,他旁边就是禁止钓鱼的牌子。

鱼钩扔水里就拽出来,一条鱼。我以为那条鱼是鱼饵,原来就挂在钩上呢。他把鱼摘下来,上饵,扔水里马上又捞出来了。我想他是不是检查鱼饵,结果他又摘下一条鱼。我说你这也太厉害了。他说偶然的。我赶紧掏出手机,切成摄像模式,刚好拍到。鱼钩扔水里不到一秒,浮子刚立起来,就起钩,又一条。他说又碰巧了。我说你说的我一点也不信呐,学到,以后知道怎么谦虚了。太可怕了。

湖湾里有一大片芦苇。几家凤头鸊鷉有时候在外面水里扎猛子抓鱼,有时候在芦苇丛里嘎嘎叫。说不定里面有窝。凤头鸊鷉抓鱼很少空回。一个猛子扎进去,老半天才从远处浮出来。鱼获比钓鱼的小哥大,节奏可是不如远甚。

此文也发布在以下站点。
----
知乎 https://www.zhihu.com/people/yang-gui-fu-52

独立博客 https://younggift.net/

微信公众号 杨贵福
----
以下是我曾经发布博客的站点,有些旧文。
----
豆瓣 - 因为审核"我的日记",不再更新。
https://www.douban.com/people/younggift/?_i=0098558fqLUL9h

CSDN – 因为要求我登记手机号码的原因是“为了您的安全”,不再更新。
https://blog.csdn.net/younggift?type=blog

blogsopt – 因为从我的机器不可达,无法更新

春且住。见说道、天涯芳草无归路

班车点,墙缝里的绿植,顽强的生命力。

班车点,墙缝堆积的桃花,也可能是樱花或者樱桃花。满地落红堆积,憔悴损,如今有谁堪摘。

教室窗台上的拼豆,背景是满目春光夏色,红楼绿树。

今天见到的新鲜物,六角粉笔。是不是每盒能装得更多?

班车路过,顺手拍的。松柏扬粉,丁香正香。

高架桥上亮着路灯,黄昏的天空上横划着许多线缆。车辆拥塞,地铁入口的斜面棚顶映着天光。

光影交错里的“长春”。

本部校区,林下。

马拉松比完了,隔离栅栏清理中。

重檐叠涩之下,橱窗里的大鹅。或者天鹅。

英译汉-长度和宽度、英尺和英寸、小数和分数

把宽度翻译成长度可能是笔误;

把分数翻译成小数,可能是编辑误解规范强制要求的。这些错误的成因都容易猜测。

不止一本书里英尺和英寸会翻译错,这是怎么造成的呢?肯定不是AI。有的译者文采斐然文字修养极高,绝大多数地方翻译得非常严谨,偏偏英尺和英寸分不清,百思不得其解。

长度和宽度

英尺和英寸

小数和分数

夜徒探路8千米

前两天夜途的时候发现南湖大桥附近照明不足,路面崎岖。看到了周围我没走的步道更平,今天趁着天亮看一下路。

从金沙滩出发,回头拍一张,就是这里。

向前走,左边是公路,中间隔着树丛,能听到车的声音,噪音不大。

快到南湖游泳区了,以及冬泳区。去年上海人掉到南湖里,就是这附近吧。

转身拍一张。

冬泳区,转身拍一张。

上到南湖大桥桥面上,向东拍一张。这是一条备选路线,可以从南湖公园外面绕,走昂昂溪路,也许路更平。

南湖大桥。迎面一群少年骑自行车拥挤而来。桥面1/2以上不能走,因为明天要跑马拉松,今天安上了隔离栅栏。

桥的南侧广告,为马拉松准备的吧。

南湖大桥音乐喷泉的开放时间。

下桥转身拍一张。回到徒步的步道上。

岔路口很多,转身拍一张。

转身拍一张。

一个出口,6号门还是几号门?没记住。

过了出口以后,有很多岔路口。转身拍一张。

终于回到了我熟悉的路线上,南湖的西侧。有动感单车、有摩托车、电瓶车。还有我不知道名字的车,疯狂少年玩特技的,可以把前轮抬起来的。不过那些疯狂少年可没有把车骑到步道上,拇指。

探路完毕,结论是不要过南湖大桥,就保持在西侧徒步。如果希望走得更远,就多转两圈。我记得5圈还是7圈,加上往返,刚好是一个半马,21公里。

走走停停,拍拍照照。888,8千米,8千步,80分钟。

塞北春迟 一秒入夏

长春的春天来得晚,夏天要与全国同步。又要四季分明,春天这个流程还是要走的,所以春天极其短暂,转瞬即逝。几天不见,管保你认不出来,这是同一株植物,同一个地点。

多年生草本。一个月之前,小芽刚拱出来,周围全是干裂的硬土,荒漠一样。一周以后五七八个短箭,让人想起蒌蒿满地芦芽短。从露头开始只一个月,也就是今天,叶子重重叠叠,已经遮蔽到完全看不到地面,也看不出来一点这幼芽原来的样子。

灌木。这也是一个月的时间。一个月前,恐龙雕塑清晰可见,枝条刚有嫩芽。一周后,视线就聚焦到眼前盛放的春花之上。今天已经完全把恐龙遮住了。动物就是这样隐匿踪迹的吧。

杨树。一个月前树枝刚刚开始泛红,有的地方大概地看,隐约一点绿色。过了一周,开始有小的树叶,皱皱巴巴的。现在树叶已经像半大小子,光看个头儿,和夏天秋天的时候差不多了,叶子的青春期。有风的时候,哗哗作响,对什么都很有意见要发表的样子。

现在气温已经30度了,如果只看温度的话,现在就是夏天。再来几场大雨,就是盛夏。

用AI开发手机点赞工具的实战经验

2025年7月11日,距离今天2026年4月2日,只有短短9个月而已,但是对于突飞猛进的AI而言,可能已经是相当长的时间了。在这里记录一下那一天9个月前,我用豆包AI帮助(主导)做的手机上的两个点赞工具,以及近期的一个小工具。

因为工具较小,我几乎没有编程。我在手机上与豆包沟通,在手机上复制粘贴代码到工具,全程没有用PC,没用键盘没改代码。

积累到的经验包括,1.可以与AI讨论技术方案,其实有的时候它的代码很差,技术就可以相当不错,这两件事情是对立的;2.人类描述故障现象,以及猜测使用什么样的技术方案更合理,尤其是当AI看不到现象时,这两点都很有帮助;3.人类需要部署代码、运行,以及观察和描述现象。

1. keep点赞工具

Keep是一个运动软件,里面的社交功能,可以看到其他人锻炼消息。我习惯于为每一条消息点赞,用鼓励为同道中人提供些情绪价值。不过有的时候,有的人真的是太能练了,运动的记录哗哗刷屏。我点起赞来也有些疲惫,所以想到做自动化工具吧。

(1)先讨论技术方案。

豆包的答复表明,对技术方案讨论是必要的,我的思路太狭隘了。我以为她会selenium之类的,她给出了3种PC端控制方案,3种安卓的方案,还有混合方案。其中,她推荐的方案是纯安卓的方案中 autox.js,我听HYR同学提到过,就选了这个方案。

(2)请教工具使用

(3)降低颗粒度,提高确定性

A. 一蹴而就 是幻想

当时的实践表明,这么复杂的功能,一次性沟通是个失策。换句话说,如果你作为人类读了上面这一段一段文字,感觉累的话,那么AI也不行,至少当时的情况是这样的。当她信誓旦旦反复说这一次肯定就可以逆行了的时候,你还会有情绪反应。

当你对于使用的工具不熟悉时,也会有挫败感。AI通常会假设你对工具充分熟悉,不过好在,当你发问的时候,她并不会嘲笑你。

这样折腾了不少的轮次,我就不一一列举了,请想象一下我挫败的感觉。

后来终于找到了绿色喇叭。

B. 在结对编程中的任务分工,某部分 谁能力强就谁做

到这时,我已经了解到AI的设计和模式识别非常一般,这种事儿,人手操作容易得多。

C.降低颗粒度

AI倾向于他认为规模不大的时候,一次性生成所有代码。但是实践表明,她对于运行环境的错误猜测可能给调试带来很多麻烦,所以每次测试的单一的一件事情,更容易一些。

就这样,我把功能需求当中的每一个技术要点分别要求AI开发出来。我测试有效算完成,完成一个,再要求写下一个。

D. 现实一些,削减需求

有的功能并不太重要,但是实现很麻烦,很可能不是因为AI的能力不行,而是因为手机环境导致获取信息的方法受限。

所以后来有的功能就放弃了,比如跳过我自己,干脆连自己一起赞了。这是削减需求。

再例如,超过24小时以上不点赞这个功能后来也取消了,由我手动停止脚本。自己使用的工具,不提供给其他用户使用,才具有这样的便利。事实上,多数产品当中的多数代码都是设置环境、限制用户操作,以及防呆。并没有多少积分难度,但是工作量不小。

由autox.JS自动运行keep再切换到特定的tab,这个功能也放弃了,由我手动操作到达这个位置再开始运行脚本好了。

E. 情绪感受、编程环境,以及“看到了才知道这不是我要的”

有的调试体验还是不错的。

例如,我搞混了 向上 和 向下 滑动,纠正的时候,AI并没有嘲笑我,说“连这个都分不清吗?”

为了调试方便,我禁止AI要求我增量修改代码,她遵从了,虽然需要反复重申很多次。事实上,即使我的环境是否粘贴代码,我也觉得AI对于描述如何修改的表述能力欠佳,精确程度不足,指代不明经常出现,可能她学习的语料库就是这样的。

有的地方,人类也没有想到界面(需求)会是这样,现象出现了才意识到还有这些情况。

F.集成

当所有技术类型都完成,并删除实现困难的需求以后,把所有代码集成在一起。

视频

Keep点赞工具 - 杨贵福的视频 - 知乎

https://www.zhihu.com/zvideo/1927419261376267022

代码在本文最后。

2. 微信读书点赞

因为有了上一个点赞工具的合作开发经验,所以这次我跳过了对绿喇叭、红心之类可见目标的描述,一开始就用布局分析工具找到了空间的ID。

接下来几轮,修改AI的代码风格,这样我就不必手动修改了。

接着,再次重申要求。

有对技术细节的讨论,包括我逐步才意识到的代码需要识别和应对的环境特征。

屏幕我每次上滑半页,所以显示的范围有所重复。如果完全避免重复,我担心需要精确定位,或者有遗漏。为了避免重复中文网友被我连续点赞两次导致点赞被清除,下面这个功能是识别是否点过赞,点过的话,不要再点一次。

事实上,这么简单的“复杂”情情情况只出现了一次。接着我的要求增加了新的功能,也就是最后一个功能。

运行时,我用肉眼跟踪,如果点赞到了本周完全没有阅读的网友,我就手动停止脚本。微信读书的启动和调整到特定页面也是由我手动操作的。这些需求的削减依据在第一个项目中积累的经验。相比之下,上一个小项目,主要时间花费在(1)实现困难而意义不大的需求,最后可能还是放弃了,(2)要求AI做她不擅长的事情,后来难以触达的真实环境,例如识别某个控件的ID,(3)颗粒度过大。

所以,没有几轮讨论,开发就完成了。

微信读书点赞 - 杨贵福的视频 - 知乎

https://www.zhihu.com/zvideo/1927736304004735247

代码在本文最后。

3. 微信读书左划

需要这个脚本的原因是,微信读书每隔一段时间内发放一批免费的书,可以领2本,要求每一本阅读5分钟。看到消息的时候,我可能刚好没有时间读10分钟,又担心过来事儿,把这事忘了,错过了占便宜。

所以我让豆包写一段脚本。

之所以滑动的间隔和持续的时间定这么短,是为了能得到尽快响应,调试方便。代码一次性跑的很好,因为避免了前述提到的问题 困难而意义不大的需求、在无法真正触达的情况下与真实环境的交互、过大的颗粒度。

这增加的一个需求是我事先没有想到的。

脚本刚一完成,我就意识到它并无必要,因为微信读书支持朗读的功能,你让它读一分钟就算数。不过,我也没有什么可遗憾的,因为写这个脚本也就是两三分钟的时间,在豆包的帮助下。

代码在本文最后。

这一段我也不附视频了,文字描述一下,就是每半分钟左滑一次,持续6分钟。我还考虑到,如果遇到识别机器人的机制,可以在每次左滑中加一个随机的时间间隔。没有用到。

4. 复杂任务,不行

我最近尝试过用豆包开发一脚的autox.js朗读电子书,她信誓旦旦地说,容易实现。并不。稍微复杂一些的功能,她既没有能力实现(当然,也可能由于合作者我的无能),也没有自知之明。也许性格设定上,她就是那种大喊“没问题!”的昭和男儿吧。

简单的经验是,如果你感觉对话的轮数较多,而仍未实现,那么无论希望多么迫近和逼真,非常可能,那就是不能实现。别相信她。

另,语音朗读电子书,@voice aloud reader 非常好。

代码 微信读书点赞

"nodejs";

// 自动点赞并上滑脚本

function main() {

// 请求无障碍服务权限

auto.waitFor();

// 定义循环次数

const TOTAL_CYCLES = 10;

for (let cycle = 1; cycle <= TOTAL_CYCLES; cycle++) {

log(`=== 开始第 ${cycle}/${TOTAL_CYCLES} 轮点赞 ===`);

// 设置查找元素超时时间

sleep(1000);

// 查找所有点赞容器

let containers = id("friends_rank_praise_container").find();

if (containers.empty()) {

log("未找到点赞容器,可能已到达页面底部");

break; // 跳出循环

}

log(`本轮找到 ${containers.size()} 个点赞容器`);

// 遍历容器并处理

for (let i = 0; i < containers.size(); i++) {

let container = containers.get(i);

let icon = container.findOne(id("friends_rank_praise_icon"));

if (icon) {

let isSelected = icon.selected();

log(`容器 ${i+1} 内的图标选中状态: ${isSelected}`);

// 如果未选中,则点击容器

if (!isSelected) {

container.click();

log(`已点击容器 ${i+1}`);

// 点击后适当延迟,避免操作过快

sleep(500);

}

} else {

log(`容器 ${i+1} 内未找到点赞图标,跳过`);

}

}

log(`=== 第 ${cycle}/${TOTAL_CYCLES} 轮点赞完成,准备上滑 ===`);

// 执行上滑操作

swipe(device.width / 2, device.height * 0.8, device.width / 2, device.height * 0.2, 300);

log("已执行上滑操作");

// 上滑后等待页面加载

sleep(1500);

}

log("==== 全部点赞任务完成 ====");

}

// 执行主函数

main();

代码 keep点赞

"nodejs";

auto.waitFor();

// 定义判断是否已点击的函数

function hasClicked(horn) {

return horn.selected();

}

// 定义点赞第一个绿色小喇叭的函数

function clickFirstHorn() {

let horn = id("layoutContent").findOne();

if (horn && !hasClicked(horn)) {

horn.click();

sleep(500); // 点击间隔,避免过快

log(`已点赞第一个绿色小喇叭`);

}

}

// 定义向上滑动半屏的函数

function swipeUp() {

const width = device.width;

const height = device.height;

const startX = width / 2;

const startY = height * 0.8; // 起点:屏幕下部80%位置

const endY = height * 0.3; // 终点:屏幕上部30%位置(上滑半屏)

const swipeDuration = 500; // 滑动持续时间(毫秒)

const intervalBetweenSwipes = 800; // 每次滑动间隔时间(毫秒)

swipe(startX, startY, startX, endY, swipeDuration);

sleep(intervalBetweenSwipes);

}

// 主循环,假设执行10次滑动和点赞操作

const loopCount = 100;

for (let i = 0; i < loopCount; i++) {

clickFirstHorn();

swipeUp();

log(`完成第 ${i + 1} 次滑动和点赞操作`);

}

toast("点赞和滑动操作完成");

代码 微信读书左划

// 设置时间参数(单位:毫秒)

var interval = 1000*60; // 每次滑动间隔(1分钟)

var duration = 1000*60*7; // 总持续时间(7分钟)

// 记录开始时间

var startTime = new Date().getTime();

// 定义滑动函数

function swipeLeft() {

var width = device.width;

var height = device.height;

swipe(width * 0.8, height / 2, width * 0.2, height / 2, 300);

console.log("已向左滑动一次");

}

// 循环执行滑动

while (true) {

swipeLeft();

sleep(interval);

// 判断是否达到总持续时间

if (new Date().getTime() - startTime >= duration) {

console.log("已达到指定持续时间,脚本结束");

// 弹出任务完成提示

alert("任务完成", "已按设定完成所有滑动操作");

break;

}

}