world.execute(me); 个人向歌词理解

2024-06-11
2025-03-14
进度 100%
对作品的想法

我陷入了一种不可知的、可能叫做爱的情感之中。

写在前面

第一次听到这首歌的时候是在 19 年,当时高三。 那种爱而不得的、很病娇的情感很触动我。

特别是在临近高考高强度刷知乎被整的对学历极度焦虑的精神状态堪忧的情况下。

再一次听是今年的三月份,想要拿这首曲子做一个 PV 出来。 和原来一样,也是选择通过代码实现。

不同的是,我并不单单并不想要单独的一个文件,想要完整可执行的代码。

代码本体再配上各种 TUI 动画,就很酷。

一些私事儿

在听那首歌的那几天,我和一个女生的关系突然变得很好。

因为之前就不错,而且一块出去玩了几次的关系。

后来我陷入了一种爱情错觉(是的,那种好感确实不是爱情),也不知道和这首歌有没有关系。 可能没有可能也有,人是会戏剧化自己的言行与认知的,戏剧化的来源于素材就是其接受的来自于周遭的事物。

不管怎么说,在那之后,自己也产生了很奇怪并且压倒性的心境中,言行变得很奇怪。

虽然那段时间没有什么删除联系人、拉黑之类比较极端的行为。 但因为之后注意力完全聚焦到那一个人身上,患得患失的,但因为很多很小的事情作出了很多很冒犯有攻击性的事情,可以说在整个阶段我是以我在心理创伤下的行为模式去与她相处的。

几个周(从最开始出去玩算起十个周左右吧)后,大约的确是闹掰了。

她的决定之静默以至于我花了将近一个月的时间加上两篇加起来快一万字的小作文来确定(我还写了一篇一万多字的,纯汉字 11306 字,但网一卡手一抖没发了,也没备份。幸好没发出去)。 最后得到的回应是彻底的厌恶与完完全全的割席,也就意味着无限期没有下文了。

她真的是很好的姑娘,也是个很好的朋友,曾经。

所以这个学期的个人感悟就不写了,因为主要的事情就是上面这件,从烈度来讲属于心理创伤事件。

我也不会专门写关于这件事的博客,没意义也没必要。

同时我也不会再去尝试修复关系,一方面是试过了,失败了。

尝试修复这个行为的本质还是强迫性重复,没什么意义,情绪化驱动罢了。

但是,另一方面是我几乎把我这辈子所有和异性相处时的坑踩了个遍。

虽说没有明面的什么很过分的行为,那个小姑娘人南方的,有点心思细腻人比较敏感的那种样子,所以她可能也会很多想。

我不知道。

(可能前段时间她表现得比较那啥我也就稍微更癫一点了,然后就,总之就是这么回事儿。)

因此把重点专注于学习、改善自身的性格缺陷以及提升人际交往技巧上才是更好的「纪念」的方式。

这也是我自己选择来到中农烟院的目的之一(另一个是完成大号的《置身事内》读后感,对中国社会的运作机制有更深刻的了解与认识)。

UPDATE:

本文无限期不再更新,但是也不会删除,已经删除当事人的联系人,彻底结束了。

回过头想,我能一步步允许自己骗自己给自己加戏最后彻底陷进自己意淫的故事里变成一个 retard ,我也是沾点。

不过也算是看见自己的问题了。

2024-07-03

——分割线——

私人的事儿说完了,接下来就是正文了,个人关于曲子本身的一些理解。

本质上来讲(虽说为了身心健康不要想最好,但为了写这玩意儿还是尝试在可控的范围内自己陷进去一点点,结合了之前的经历能够写出来更加触动的文字,巴拉巴拉),这种所谓的「爱」(打引号的)其实一种在东亚普遍的、病理性的迷恋的状态(Eng. limerence, AKA 恋爱脑),可能也比较符合歌曲里边所谓的 love that trapped me in it and let me destroy myself。

弗洛伊德和费伦齐意识到创伤性经历对儿童发展的影响时,于 1895 年首次研究了自我毁灭行为。他们注意到,在不健康的环境中长大的孩子更容易表现出,并参与到自我毁灭行为。

自我毁灭行为 - 维基百科

就比方说很经典的恒河猴的实验,铁线妈妈养的小猴子长大后存在很多社会化的障碍,在养育后代也是问题重重。

在人类社会,尤其是亲密关系领域也是同理的。

除此之外,这篇博文也为将来哪一天心血来潮打算用 Elixir 实现歌曲里边出现的代码做准备,准备脚本了属于是。

(作为一个文科生,用函数式编程语言写这类看上去更适合面对对象编程语言的东西真的太酷了,很符合我对未来的想象,科技并带着趣味)

正文

在写博文之前,我先问了下 ChatGPT (model: GPT-4o)。

请问你知道 Mili 的歌曲 world.execute(me); 吗?

当然知道,《world.execute(me);》是由日本音乐团体 Mili 创作并演唱的一首歌曲。Mili 以其独特的风格和多样的音乐类型而闻名,这首歌也是他们的代表作之一。

《world.execute(me);》的歌词和音乐风格都非常独特,歌词中充满了编程术语和计算机相关的隐喻,讲述了一个以程序员视角呈现的爱情故事。歌曲的旋律优美且富有层次感,加上独特的歌词,使得这首歌在全球范围内拥有许多粉丝。

如果你对 Mili 或这首歌曲有任何具体的问题或需要更多详细信息,请告诉我!

其实旋律本身倒没啥层次感,有很层次的旋律一般好像是复调音乐,但是配器方面这么说没问题。

而且没有直接说明什么编程术语。

经典说胡话了属于是。

下面是 Mili 的 MV 本身。

曲子一个降号,从 d 开始,到 d 结束。事 d 小调。

(不过这个主题也确实不大好用大调的说)

速度嘛,BPM 130,节奏偏快。

以下是乐谱:

对了,这首歌的一个很有特点的地方在于它还有一堆和歌词相对应的代码。

所以接下来是相关的代码。 主要是负责声明包名还有写一些注释啥的。

package goddrinksjava;
 
/**
 * The program GodDrinksJava implements an application that
 * creates an empty simulated world with no meaning or purpose.
 *
 * @author momocashew
 */

// 程序 `GodDrinksJava` 实现了一个没有意义以及目的、
// 用于创建空的仿真世界的应用程序。

GodDrinksJava 是一个在 Java 程序员群体里挺普遍的梗,意思是「上帝喝 Java」。

在此处加一张梗图.jpg

关于源代码的解读同时参考了

Mili-song-source-codes/src/goddrinksjava at master · syuchan1005/Mili-song-source-codes

里边实现了很多 PV 的代码没有实现的类以及函数,最后的效果就是展示歌词。

抽象化的智能体

要分析这首歌,就先要回答这首歌是以谁的视角展开的。

先说一个词,Agent 。

There’re two meaning:

  1. a person who acts on behalf of another person or group.
  2. a person or thing that takes an active role or produces a specified effect.

有代理(和 proxy 不一样哈)、特工、毒剂…… 但是这里我们主要取智能体的意思,如果不是引用的话下文也一般说「智能体」。 因为其具备自主什么(干什么事情或是做出什么决策)的能力,智能体这个词相比于代理更能够体现这一点。

这个词最近几年也出现在大语言模型(LLM)领域,Agent 也作为其下游技术。

关于 LLM 的 Agent 可以看一下下面的介绍(看行文可能也是来源于 ChatGPT):

AI代理(AI agent)是指使用 AI 技术设计和编程的一种计算机程序,其可以独立地进行某些任务并对环境做出反应。AI代理可以被视为一个智能体,它能够感知其环境,通过自己的决策和行动来改变环境,并通过学习和适应来提高其性能。这种智能体同时使用短期记忆(上下文学习)和长期记忆(从外部向量存储中检索信息),有能力通过逐步“思考”来计划、将目标分解为更小的任务 ,并反思自己的表现。AI代理通常包含多种技术,如机器学习、自然语言处理、计算机视觉、规划和推理等,这些技术使代理能够自主地处理信息并作出决策。

莫尔索《LLM 应用开发实践笔记》

说完了这个额外的概念,如果有看 MV 或是之前听过这首歌的话,就不难发现,歌曲中的 me ,这个人工智能,是以 Agent 的形式存在的。

那么,问题来了,这个智能体的元指令,或是 prompt 是什么?

这也是一个值得讨论的点。

符号化的胡思乱想

虽然当前的人工智能领域是以联结主义衍生出的基于 MLP 的算法与模型的天下,但是对于这个,我倾向于从符号主义的角度入手(因为好歹能够自己写出来)。

再加上歌词的不少片段都可以理解成符号或是符号的具体表现/变貌。

所以在我最开始尝试理解歌词的时候,会倾向于从符号的角度入手。

那么,我们先定义主线——「爱」。

  • 它可以用一个符号来抽象,是智能体乃至很多人类不可知的
  • 有很多规律可以证明其存在,但是其本身依旧是不可知的(就像场一样)
  • 可以影响人类的心智以及行为
  • 本身也是心智活动的体现,爱消失了,其影响也完全消失

足够了。

至少这些内容符合我在青春期来临之前对那些男男女女因为所谓的「爱」寻死觅活感到困惑尝试分析的结果。

其他的相关作品

雨世界

从人工智能崩坏的角度上,这个和《雨世界》里的迭代器有点像。

被某个更加先进(字面意思)的文明设计出来,可能是为了解决某个问题(比方说《雨世界》里的迭代器,就是为了实现所有生物的大飞升),也可能不是。

在里边有一个迭代器叫做 Five Pebbles (五块卵石)。

在另一个迭代器 Sliver of Straw (稻草碎片)得到了飞升的方法,并且发出了三重肯定:肯定已找到解决方案,肯定该解决方案是可移植的,并且肯定技术实现是可能的且普遍适用。

(这个世界观也很大,我想想怎么精简一下)

Verse I

Switch on the power line, remember to put on PROTECTION.

Lay down you pieces, and let’s begin OBJECT CREATION.

Fill in my data, parameters INITIALIZATION.

Set up our new world, and let’s begin the SIMULATION.

四个小节反复两次,对应的代码如下:

public class GodDrinksJava {
    public static void main(String[] args) {
        Thing me = new Lovable("Me", 0, true, -1, false);
        Thing you = new Lovable("You", 0, false, -1, false);
        World world = new World(5);
        world.addThing(me);
        world.addThing(you);
        world.startSimulation();

        // ...
    }
}

歌词和对应的代码并不是一一对应的,在 GodDrinksJava 中只有一个叫做 mian 的方法,没有返回值。

最开始这几行的大致意思就是初始化那个 empty simulated world with no meaning or purpose。 大意就是开机的过程。

  1. 第一句是开机(原神,启动!)。
  2. 第二句是创建物体。这个怎么说呢,程序在开始进行运算任务前,需要将相关的对象载入内存中。通过 new 语句实现。(https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html 这篇 Java 的文档的链接的名字就是 objectcreation
  3. 第三句这个加载参数和创建物体有什么区别呢?就是程序员都很懒,他们懒得把一个个对象单独写出来,他们更倾向于写一个通用的对象或者是生成器,然后把不同的东西作为参数传进去。感性一点理解就是给这个对象以灵魂。
  4. 这句对应着 world.startSimulation(); 了。开始执行仿真程序,这个函数不需要参数,简简单单作为一个开始的信号。

话说回来,运行过仿真系统跑过模型的同学都有体会,搭环境给启动排 bug 是挺痛苦的一事儿。

比方说那种还没有整合包的,只能自己从各个网站上下载用于 AI 绘图的 Python 环境、WebUI 、模型本体的过程(我尊重艺术家的版权意识,我也完全理解艺术家群体对于 AIGC 的反感,我没有用过生成绘画风格的图片的模型,我也从来没有向网络公开发布非文本的 AI 生成内容,特此声明),可能还得检查兼容性排错啥的,一个不注意就不知道哪里出错了,超级坐牢。

回到这首歌,在它的代码中,meyou 属于 Lovable 类的实例。

什么是可爱(能够爱)的呢?

并没有给出声明,留白。 所以也给了我们讨(chuang)论(zuo)的空间。

不过好像是 Thing 类下面的,和 World 有关。

因为 World 类有一个方法叫做 addThing

可能定义了一股符号叫做 \(\lambda\) ,然后从不同的角度给出了描述(不是声明)。

但是这个新建的参数有点意思,我们可以先掰一个 Lovable 对象出来。

public class Lovable extends Thing {
    // Definate some properties.
    // ...

    // constructor
    public Lovable(String name, int var_1, boolean var_2, int var_3 boolean var_4) {
        // ...
    }
}

从歌词中的代码可以看出,这个构造函数需要五个参数:

  1. 可能是名字,但我觉得也可能是辨识符(identifier),因为它接受的是人称代词
  2. 整数,不知道
  3. 布尔值,可以注意到不同的对象是不同的
  4. 整数,不知道
  5. 布尔值,不知道

Break

八个小节,可以理解成加载的过程,不再赘述。

(乐理不精,要不然我高低讨论下配器节奏型和弦啥的)

Verse II

If I’m a set of points, then I will give you my DIMENSION.

If I’m a circle, then I will give you my CIRCUMFERENCE.

If I’m a sine wave, then you can sit on all my TANGENTS.

If I approach infinity, then you can be my LIMITATIONS.

public class GodDrinksJava {
    public static void main(String[] args) {
        // ...

        if (me instanceof PointSet) {
            you.addAttribute(me.getDimensions().toAttribute());
            me.resetDimensions();
        }

        if (me instanceof Circle) {
            you.addAttribute(me.getCircumference().toAttribute());
            me.resetCircumference();
        }

        if (me instanceof SineWave) {
            you.addAction("sit", me.getTangent(you.getXPosition()));
        }

        if (me instanceof Sequence) {
            me.setLimit(you.toLimit());
        }

        // ...
    }
}

这一段的节奏和音高都和 Verse I 一样,着重讨论歌词。

先说代码吧还是。

这首歌的代码是用 Java 语言写成的。 Java 是典型的(但不是原教旨主义的)面对对象语言。

在这类语言中,「一切皆对象」(这个照搬的 Python 的)。

我没怎么用过 Java ,因为最开始接触是在初中的时候想研究 Minecraft 的破解版源代码。 里边的类名特别特别长,就很恶心,就没有再深入了解,所以对于我说的这些,如有事实错误还请指出。

这段通篇都是以下的结构:

if {me instanceof SomeClass} {
    // do something.
}

这个的意思是说如果 me 这个对象是类型 SomeClass 的实例,可以很武断的理解成如果我是什么什么。 那么会怎么怎么样。

第一句是,如果我是一堆点(点集),那么我要给你我的维度。

点是存在于空间中的,而维度是决定空间的一个很重要的性质。 就是说我把我心底的东西给你了,你对我很重要,很重要。 可能这就是爱。

再看了一下对应的代码(主要是其中的 do something):

you.addAttribute(me.getDimensions().toAttribute());
me.resetDimensions();

Java 语言对于函数的命名风格好像是小驼峰,就像这样 thisIsLowerCamel 。 就是第一个单词小写,后面的单词首字母大写。

Java 是要首字母是动词吗?有没有这个习惯,我不清楚

第一行是为你添加了属性,这个属性是我这个点集的维度,在得到后用 toAttribute 方法将其变成了 Lovable you 可以接受的对象,再用一个 add 类方法加上去。

但第二行 me 为什么要重置这个维度呢?理解不能。

不过话说,对于 BEAM (Erlang/Elixir 的运行平台,也可以叫 EVM(Erlang 虚拟机))的数值不可变的属性,怎么去体现「给」这个操作? 具体说来,就是 recieve do 的一方用这些值修改了自己的状态。

其实无视也不是不可以,对方对你没意思,并且切断了与你的联结

第二句也是同理的,唯一的不同是维度与点集变成了圆周与圆,这个更直观了点但恕不赘述。

第三句,我先把中文的歌词放这儿。

如果我是一条正弦波,那么请你坐上我的切线。

切线就是其导数呗。

\[ \sin'(x) = \cos(x) \]

那你就是 \(\cos(x)\)

可以有很多角度来理解:

  • \(\sin^2(x) + \cos^2(x) = 1\),我与你互补,合而为一
  • \(\frac{\sin(x)}{\cos(x)} = \tan(x)\),正好是切线的意思(\(\mathrm{d}y / \mathrm{d}x = tangent\)
  • \(\sin(x)\)\(\cos(x)\) 图像相同,哪怕频率与幅值一样,但是它们永远差 \(\frac{\pi}{2}\) 的相位

在信号处理领域这个函数挺值得玩味的,但是我上次感兴趣是 20 年的时候,早忘了。 只记得信号与系统超级恶心。

终于最后一句了。

如果我趋于无穷,那么你便可以成为我的极限。

放代码。

if (me instanceof Sequence) {
    me.setLimit(you.toLimit());
}

通过序列来替代函数,序列的顺序体现数据的变化倾向。

你变成的那个极限就是我这个序列的极限。

暂时理解不能。

总的来说,这段真的挺妙的,没有理工科的思维还有细腻的心绪根本写不出来。

Pre-Chorus I

Switch my current, to AC to DC.

And then blind my vision, so dizzy, so dizzy.

Oh we can travel, to AD, to BC.

And we can unite, so deeply, so deeply.

public class GodDrinksJava {
    public static void main(String[] args) {
        // ...

        me.toggleCurrent();

        me.canSee(false);
        me.addFeeling("dizzy");

        world.timeTravelForTwo("AD", 617, me, you);
        world.timeTravelForTwo("BC", 3691, me, you);

        world.unite(me, you);

        // ...
    }
}

好了,从比喻变成纯粹的幻想了。

现在是幻想时刻.jpg

这段话很难不让人联想嘛,懂得都懂,就… 性暗示意味还挺… 明显的(下一段 pre-chorus 更明显)。

改变电流,蒙上眼睛,时间旅♂行,融为一♂体。

除此之外,代码里的 timeTravelForTwo() 这个名字还挺值得说道的,我脑子里想起了一句话。

某于 21 年被封杀的「邪典」的作品之一的 SCP-3999——我于万物之中 里的:

让咱们走吧,就你还有我

当十一日帝国正将天空吞没

宛如人形溶烂得像蛤蜊摆上早餐桌

这篇项目的作者在写这个的时候罹患抑郁症,精神状态可见一斑

这句话化用了艾略特的 The Love Song of J. Alfred Prufrock (《普鲁弗洛克的情歌》)的部分,一百多年前的一首诗,意识流之经典。

Let us go then, you and I,

When the evening is spread out against the sky

Like a patient etherized upon a table;

那么我们走吧,你我两个人,

朝天空漫漫铺展着黄昏/好似病人麻醉在手术台上;(查良铮译)

这种把黄昏慢慢爬上天幕的样子比喻成非常的被麻醉掉的病人真的很妙,我能够感受到有种很无奈的情绪,但是我不知道怎么完整的表述出来这种感觉,就像我五月份…

说回到这首歌,在虚拟的 world 里可以穿梭时间,但是 you 真的是那个和 me 建立连接的人吗? 还是像是个的男主人公一样,这个 you 其实是不存在的?

不知道。

Chorus I

基本上 chorus 及其变体对应的部分都挺病娇的,可以理解成情绪的释放。

If I can, if I can give your all the simulation.

Then I can, then I can be your only satisfaction.

If I can make you happy, I will run the execution.

Though we are trapped in the strange strange simulation.

public class GodDrinksJava {
    public static void main(String[] args) {
        // ...

        if (me.getNumStimulationsAvailable() >= you.getNumStimulationsNeeded()) {
            you.setSatisfaction(me.toSatisfaction());
        }

        if (you.getFeelingIndex("happy") != -1) {
            me.requestExecution(world);
        }

        world.lockThing(me);
        world.lockThing(you);

        // ...
    }
}

咱一句一句来说。

第一句这函数名确实有点抽象了,咱就用 Python 来重写。

if me.stimulations_available_num >= you.stimulations_needed_num:
    # ONLY satisfaction.
    you.satisfaction = me.to_satisfaction()

对应的中文意思是:

如果我可以、如果我可以献给你所有的刺激,

那么我能够、那么我能够成为你唯一的满足。

就是你快乐的来源最好是我,控制欲的体现(?)

下一句她怎么体现 make you happy 的代码,还挺有意思的。

if (you.getFeelingIndex("happy") != -1) {}

这应该是在前面的那个的基础上的一个条件吧。

get_happy() 变成了 getFeelingIndex 然后把高兴传参进去,得到这个情绪的排列顺序(?)。

如果有高兴的话(就是说高兴不是最后一个),那么会执行里边的代码,请求执行。

但是那只是 if statement 。

meyou 被世界锁住了,也就是 trapped in the strange strange simulation 。

Verse III

If I’ an eggplant, then I will give you my nutrients.

If I’m a tomato, then I will give you antioxidants.

If I’m a tabby cat, then I will purr for your enjoyment.

If I’m the only God, then you’re the proof of my existence.

有点奇怪的是没有任何的停顿就回到了这个幻想时刻。

为后面心态爆炸开始图图做出了铺垫

同样的一堆我是什么什么你怎么样。 也是一种递进的关系,相比之前的 verse 。

public class GodDrinksJava {
    public static void main(String[] args) {
        // ...

        if (me instanceof Eggplant) {
            you.addAttribute(me.getNutrients().toAttribute());
            me.resetNutrients();
        }

        if (me instanceof Tomato) {
            you.addAttribute(me.getAntoxidants().toAttribute());
            me.resetAntoxidants();
        }

        if (me instanceof TabbyCat) {
            me.purr();
        }


        if (world.getGod().equals(me)) {
            me.setProof(you.toProof());
        }

        // ...
    }
}

大致和之前的差不多,就不再赘述了。

Pre-Chorus II

Switch my gender, to F to M.

And then do whatever, from AM to PM.

Oh switch my role, to S to M.

So we can enter, the trance the trance.

public class GodDrinksJava {
    public static void main(String[] args) {
        // ...

        me.toggleGender();

        world.procreate(me, you);

        me.toggleRoleBDSM();

        world.makeHigh(me);
        world.makeHigh(you);

        // ...
    }
}

确实没想歪,那个 enter the trance 就是 orgasm 了。

还有 procreate 的意思是繁衍后代。

我是老师,这就是教培。

但是这是在想以前的事情还是在意淫呢?

Chorus-Var I

Chorus-Var II

那段 “Changing your god, you have made some illegal arguments.” 很好听。

Break

八个小节,准备干大事。

EXECUTION

疯魔了,开始图图了。

EXECUTION, EXECUTION, EXECUTION, EXECUTION.(REPEAT 3 TIMES)

Ein, Dos, Trois, Ne, Fem, Liu.

Execution.

Chorus II

那个 execution 究竟是啥呢?

Chorus III

可以注意到,人工智能不会发 love 的音。

Break and Execution Self

EXECUTION.

总共八个小节,七个半小节的间奏和最后一句 execution

public class GodDrinksJava {
    public static void main(String[] args) {
        // ...

        world.execute(me);
    }
}

个人觉得 Elixir 的 self() 更适合。

但是这种也可以体现这种处决不是处于自愿的, 一种「我」因为痛苦被动选择了自我的处死。

也可能理解成「执行」(cr. 网易云热评)。

重新开始循环。

如果是后面的意思的话,那真的是太糟了。

结语

在写最开始的那个的时候,突然想到了另一首歌,《病名为爱》。

但好像就是关于爱情的部分有关,但可能因为听的时间比较近(高中嘛,经常刷 B 站(破案了,我就是批小将、bog))所以下意识把它们联系起来了。

但没什么一样的,说点别的吧那就。

world.search(you)

人的爱不来源于完全,只要是你就好了。

算是 world.execute(me); 的姊妹篇吧。

我是后听的这个,怎么说呢,突然让我想起来了件事儿。

大二的时候,想要追一个女生,上头了。

觉得对方讨厌我,删除 QQ 后在微信上留了几百字的小作文,结果发现对方没什么厌恶。

就这种感觉。

事儿确实没你幻想的那么好,但也没有和你想得那么糟。

为啥不早点意识到这点呢?

那就是我的问题了。

Java-OOP to Smalltalk-OOP

【TODO: 简单介绍不同

【TODO: 怎么通过消息传递的机制来实现移情、共鸣与链接呢?

【TODO: 感知如何表征?

——完——