MoreRSS

site iconmikusa | 初之音修改

生物专业。在粤打工。博客主要内容是开箱 / 推荐 / 动画评鉴 / 教程。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

mikusa | 初之音的 RSS 预览

《琉璃的宝石》Eye Catch

2025-08-26 22:21:00

《琉璃的宝石》是由渋谷圭一郎原作的 TV 动画,讲述女子高中生谷川琉璃与主修矿物学的女研究生荒砥凪等人在寻找矿石的同时,探究矿石背后所蕴含的历史与文化的故事。

剧中用于分割前后半部分的「凪の小憩(凪的小憩)」环节,取自原作漫画每话结束的科普。这种画面在日本电视动画中有专门指代的术语:Eye Catch(アイキャッチ)

アイキャッチ 是指插入正片前后半部分交界、用于广告时段的短暂画面或影像,其作用不仅在于提示观众「这里进入或结束广告」,还常常通过作品标题、标志性元素、角色互动或资料卡等形式强化作品辨识度与氛围。有些作品甚至借此补充设定信息(例如《进击的巨人》的「現在公開可能な情報」)。因此它既是一种实用的分割提示,也逐渐成为动画演出风格和作品特色的一部分。

而本作的 Eye Catch 正是起到知识点汇总和补充的作用,因此我将这部分内容摘抄了出来,供有需要的朋友使用。

本文图片均截取自喵萌奶茶屋字幕组翻译的画面。

第一话

有一种矿物名为石英,它在世间被人们亲切地称为水晶。在英语中,水晶被称为 Rock Crystal,石英则称为 Quartz,这些都是它比较常见的名称。

石英的化学成分为二氧化硅。由于其组成元素是构成地壳元素排行榜第1位的氧和第2位的硅,所以可以说石英是最常见的矿物之一。

石英是由岩浆或受其热量影响的热液冷却时结晶形成的矿物,因此,在有火山分布的地域附近,通常都能找到它。一提到水晶,人们可能认为只有在特殊地带才能开采到,但在作为火山大国的日本,无论在哪个地区都有可能采到。

顺带一提,构成地壳的元素排名依次为:氧、硅、铝、铁、钙、钠、钾、镁。

Vol.01
Vol.01

石榴石除了作为宝石,也因其硬度一直以来被用作研磨剂。

现在市面上销售的棕色砂纸,如果背面标有“G”,即表示「研磨剂为石榴石」。仔细观察其表面,会发现含有颜色不同的杂质,这正是天然石榴石的证明。

直到近年,日本的砂纸都还使用国产石榴石。群马县产的石榴石中含有黑色角闪石等杂质,奈良县产的则偶尔会含有蓝宝石。这大概是因为密度接近而无法完全分离的缘故。

即便是普通的砂纸,换个角度看,也能从中窥见产地的特性。大家下次去家居卖场时,不妨看看去砂纸区看看。

Vol.02
Vol.02

第二话

人们往往认为具有相同成分的矿物,其结晶形状也应该是相同的。但事实上,由于其形成条件的不同,结晶形状也有所差异。

石墨(铅笔芯)和钻石都是由纯碳构成的矿物,但由于温度和压力的不同,它们的外观和性质也截然不同。由此深入观察,便能看到更加精彩的结晶世界。以黄铁矿为例,其代表性的晶体形状有立方体、八面体、五角十二面体这三种。

但实际上,在这三种中,根据条件不同,还存在所谓「过渡形态」的晶体。它们成分相同,但因结晶形成时条件的不同才产生了形状上的差异。

有很多成分相同但结晶形态不同的矿物,不难想象沉迷其中的收藏家们要耗费多大的精力。

Vol.03
Vol.03

人们常认为黄金只能在特定场所开采,但事实并非如此。作为火山大国的日本矿产资源丰富,以前全日本都能采到黄金。如今虽已无开采痕迹,但留下了许多小规模开采记录,在其周边河川中也能淘到砂金。

既然全日本遍布小型金矿,自然也有不少「虽能采金但因产量不具经济价值而从未正式开采」的小型矿点。这些地点因完全未留记录,也不曾公开说明能淘金,但既然未被开采,至今仍可能有砂金流入附近河流中。

说不定各位家附近的山里也能淘到砂金。不过产量也顶多达到「拥有专业淘金技术的人努力一天才可能发现一粒]的程度。若非过分执着,还是建议去知名采金地尝试。

Vol.04
Vol.04

第三话

大学研究室里每位成员往往都会被分配一张作为工位的书桌。

在研究室待得时间越久,个人工位越为个性化,使其状态变为使用者理想的样子。

建立在精妙平衡上的空间里根本不存在无用之物。无论别人如何议论,没有就是没有。

Vol.05
Vol.05

某些矿物在受到紫外线照射时会发出光芒。这种发光现象最初在萤石中发现,故被命名为「荧光」。但萤石的发光现象不止于此。当矿物受热时,还会产生一种名为「热释光」的现象。

想安全观察到热释光,需要将萤石放入试管后,再用火加热试管。为使现象清晰可见,需要保持房间光线较暗。

随着加热持续,萤石会发出声响进裂,此时可观测到比萤石荧光更显青白的光芒。不过通过加热仅能看到一次热释光。

萤石价格低廉,矿物专卖店大多有卖。欢迎大家买来尝试。

Vol.06
Vol.06

第四话

蓝宝石是非常有名的宝石,作为矿物的名称是刚玉。构成刚玉的元素是氧和铝,并不包含特别稀少的元素。漂亮的蓝宝石只在国外产,但如果不看质量,日本也有几处产地。

大分县的木浦矿山曾经是日本商业开采刚玉的唯一矿山。但木浦矿山开采的基本不具有宝石质量,仅用于工业。

刚玉具有仅次于金刚石的硬度,并具有很高的耐火性和磨耗性,因而被用于研磨剂、耐火砖和路面防滑等。身边的一个例子是指甲护理用的砂纸指甲锉,其主要成分就是刚玉。「emery,(刚玉砂)」是以刚玉为主要成分的岩石名称。

Vol.07
Vol.07

水晶这些引人注目的石头有着各自的名字。那么,随处可见的所谓「普通的石头」被叫作什么呢?

石头根据成因可以分为两种岩石。一种是岩浆冷凝形成的「火成岩」,另一种是土沙等在水中沉积固结形成的「沉积岩」。「普通的石头」一般是这两种。

在岩浆冷却形成火成岩的过程中,有可能会在内部生长宝石。土沙堆积形成沉积岩的过程中,有可能会将混入的东西作为化石保留下来。

即使是普通的石头,也会经历不普通的过程,具有不普通的可能性。

Vol.08
Vol.08

第五话

玛瑙与水晶相同,是在日本产地分布广泛的矿物。

日本人与玛瑙历史渊源悠久,日本神话中出现的「三神器」之一的八尺琼勾玉,就被认为是由红玛瑙所制。玛瑙的色彩、花纹、以及透明感所带来的美感,似乎从古至今都让人感受到某种超越人类智慧的力量。

由于在历史上的记载中常被写作「玉」,因此与玛瑙相关的地方,很多地名中都带有「玉」字。岛根县松江市的玉汤町、以及流经茨城县的玉川等,都因实际盛产玛瑙而闻名。

此外,在其他能采到漂亮石头的地方,地名中也有使用「玉」字的情况。如果您居住的附近有这样的地名,试着探究一下其由来,或许会有新的发现。

Vol.09
Vol.09

在构成地球的所有岩石中,人类能够看到的不过是极其表面的部分,其体积甚至不到总量的1%。而占据80%以上比例的,是分布在其下方、广阔的地幔层。

准确地说,地幔可以分为「上地幔」和「下地幔」两层。其中,位于较浅处的上地幔,其主要成分是一种名为橄榄石的矿物。

橄榄石是一种绿色矿物,它的宝石名 Peridot 更为人熟知。在上地幔中,它以与其他岩石混合的形式存在,被称为橄榄岩。这种橄榄岩,根据所含橄榄石的含量,也可能呈现出漂亮的绿色。

人类目前尚无法直接看到地幔。但如果能够看到,那里也许正密密麻麻地塞满了绿色的宝石。虽说从宇宙中看到的地球被称为蓝色的星球,但若是剥掉这层名为地壳的薄皮,或许会发现它是一颗绿色的星球。

Vol.10
Vol.10

第六话

蓝宝石是一种蓝色的矿物,由原本纯净无色的刚玉含有作为杂质的铁和钛形成。「蓝宝石 Sapphire」这一名称源于拉丁语「蓝色 Sapphirus」,在日语中也称为「青玉」或「苍玉」。提起蓝宝石,人们往往会想到蓝色,但实际上,因所含杂质不同,它也会呈现橙色、绿色、黄色、粉色等多种颜色,而这些也全都属于蓝宝石。其称呼方式基本为「颜色+蓝宝石」,如「绿色蓝宝石GreenSapphire」等。

但有个例外,当含有铬作为杂质而呈现深红色时,则被称为「红宝石 Ruby」。这源于历史上曾经使用的宝石分类方法。在矿物学兴起发达的近代初期以前,宝石是根据颜色分类的。蓝色的宝石称为「蓝宝石」,红色的宝石称为「红宝石」。因此,蓝色的青金石也曾被称为蓝宝石,鲜红色的石榴石也曾被称为红宝石。

所以,在历史记载中即使出现了「蓝宝石」或「红宝石」的名称,也未必指代与现代相同的宝石。

Vol.11
Vol.11

过去由于没有研究机构,小镇和村庄中掌管「知识」的场所往往是神社佛阁。因此当地人发现奇特的物品或知识(如算额)便会送往这些地方。

某座寺庙就供奉着如此得来的「龙骨」与「天狗的爪子」。但后来才证实所谓的龙骨实为水生生物骨骼,天狗爪子实为鲨鱼的牙齿。二者虽实为当地化石,但当时的人们难以理解山中为何会出现巨型水生生物,便将其解释为龙或天狗。

这类传说的形成以及神社石碑的建立,都蕴含着古人的认知逻辑。尤其涉及化石时,多会归类于幻想生物。

若将民间故事简单归为荒诞不经实属可惜。理解古人的思维模式,再以现代视角重新解读,或许能有新的发现。

Vol.12
Vol.12

第七话

玻璃制品有青、绿、紫等颜色。但这些并非简单地将颜料滴入玻璃就能制成,而是通过反复试验进行化学反应才成功得到的产物。

若需蓝色则添加氧化钴,绿色则用氧化铬,紫色则需氧化锰。啤酒瓶等常见的茶色玻璃,是通过使氧化铁与硫磺、碳发生反应制成的。

在过去的日本,乳白色不透明玻璃是混入牛骨烧制而成的骨灰制作的。如今虽仍有使用骨灰的工艺,但也有混入萤石或水晶的制作方法。值得一提的是,乳白色玻璃具有优秀的遮光性。

同样,茶色玻璃也具备高遮光性,尤其能有效阻隔短波紫外线。而蓝色玻璃几乎无法阻隔紫外线。玻璃的特性会因其颜色而产生差异。

环顾我们四周,各种色彩的玻璃制品无处不在。它们被赋予特定颜色,并不只是因为设计需求。

Vol.13
Vol.13

有一种爱好叫作拾瓶(Bottle digging),主要是在海边或山上捡拾过去被丢弃的瓶子。

这些瓶子与现代玻璃制品不同,其独特的复古质感受许多人喜爱,优质的瓶子有时能卖出高价。

这种拾瓶爱好看似是近年诞生的现代人专属的乐趣,但实则不然。江户时代,欧洲已实现玻璃制品的大规模生产,但在日本仍是珍惜之物。

因此在长崎出现了专门捡拾荷兰人丢弃的酒瓶贩卖的人。据说一个瓶子可值一枚小判。甚至有因争抢瓶子而引发的杀伤事件,导致长崎最终禁止了拾瓶行为。

到了现代,随着塑料制品的普及,玻璃瓶逐渐减少。加之回收利用的推广,人们不再随意丢弃瓶子。于是现代的玻璃瓶很少留存。或许在遥远的未来,现在的瓶子会拥有超越一枚小判的价值。

Vol.14
Vol.14

第八话

大多数情况,日本的水都属于软水。所谓软水,是指钙与镁含量较低的水。而在欧洲等大陆地区,多数区域的水质则属于硬水。

这是为什么呢?其中一个原因在于地质中石灰岩的含量。与石灰岩地层较多的欧洲相比,日本的石灰岩含量不足0.5%,占比极低。实际上,广泛分布有由珊瑚礁形成的石灰岩的日本冲绳本岛南部地区,水的硬度就相对较高。

此外还存在另一个原因。日本国土狭小却多山,因此河流流域短,水流速度快。这导致岩石中的成分溶于水的时间缩短。所以与流速缓慢且较长的大陆河川相比,日本的水硬度也相对较低。

Vol.15
Vol.15

矿山资源自古以来就是人类生活中不可或缺的存在,但同时它也对周边环境有广泛且长期的影响,存在一定问题。

硫磺矿山中常存在大量黄铁矿,暴露在外的黄铁矿与水、氧气反应后会生成硫酸。这些硫酸流入下游河流会导致水体酸化,使生物无法生存。

此外,镉这种对人体有害的金属常存在于锌矿石中,在锌冶炼过程中的排水和废弃矿渣中仍有残留,因此锌矿周边需格外警惕污染问题。

矿山开采形成的地下空洞可能引发的周边地面塌陷等物理性危害也不容忽视。

日本历史上也曾因这些矿产资源引发过多起环境问题。但通过常年扎实的调查与研究,人们对污染问题的认知不断深化,如今已逐步采取了相应的治理措施。

Vol.16
Vol.16

第九话

蛋白石是有名的非晶态宝石,其化学式为SiO2·nH2O(n根据情况数值不同)。它是一种拥有「含有少量水分子(H2O)」罕见特性的矿石。这一特性使得蛋白石呈现出迷人的红绿光彩。

然而,蛋白石中的含水量会随着周围环境变化而增减。浸入水中会吸收水分增加含量,置于干燥环境则会蒸发减少。因此有些在原产地晶莹璀璨的蛋白石,被运往环境差异较大的地区后,会因含水量变化而失去光彩。若感觉蛋白石光泽暗淡,可以尝试将其浸入水中恢复。

值得一提的是,作为干燥剂使用的硅胶,其化学式同样可表示为 SiO2·nH2O,具有非晶态结构和水分易于进出的特性。若要为硅胶取个矿物名称,称之为「人工蛋白石」恰如其分。

Vol.17
Vol.17

人类建造的最大规模的建筑——水坝。

远离都市的自然环境中突然出现的水坝,其雄姿令人震撼。因其无可比拟的存在感,水坝本身成为观光景点也不足为奇。

而这样的水坝也有使命完结的一天。多数废弃水坝会被直接闲置,或被上游冲刷而来的泥沙掩埋,或被开洞泄水而化作墙体,静静度过余生。

相较于竣工时的盛况,水坝的退役往往悄无声息。再加之其往往位于难以探访且无人管理的深山,人们鲜少有机会目睹退役水坝的样貌。但也有像山口县红砖建造的「旧桂谷贮水池水坝」这样,作为有形文化遗产获得保存的特例。

当水坝结束使命逐渐回归自然,我们反而能从中感受到不同于服役时期的别样魅力。

Vol.18
Vol.18

【转载】影子幽灵与植物人类

2025-08-15 14:02:00

前排提示:
本文转载自 Velas 电波站,已获授权转载。文章著作权归 Ve­las 电波站所有,转载请联系 Ve­las 电波站获取授权。

这是一个为“你”而写的故事。

「米拉」

1

谈起幽灵,人们总会第一时间想到形形色色的都市传说。比方说,学校厕所最后一个隔间莫名其妙的传出异响,等打开后却发现空无一人。便利店的自动门在半夜无人光顾的时候,会无端端地打开,而电子铃也会对着空气说出“欢迎光临”。又或者是,电梯在夜半时分总会莫名其妙地自己动起来,最终停在一个并不存在的楼层。

今晚加班。实习生们吃过外卖已无心工作,便旁若无人地聊起了天。只听见她们的话题从各种的明星八卦、附近好吃与不好吃的店、网上淘到的便宜好货、兜兜转转,果不其然还是绕到了鬼故事——有关于以前自己学校的听闻啦,某个远房亲戚的故事啦,又或是从身边哪个同事嘴里听说的经历啦。叽叽喳喳的你一言我一语。随着故事舞台越拉越近,直到终于落在了自己的公司时,三人果不其然成功把自己吓着了,于是顺理成章地收好了桌面的物品,悻悻结队离开了,再次将我这个前辈独自留在了偌大的办公室里。

“新人可真好。”我望着她们一蹦一跳离去的背影,长叹道,“我也好想当个甩手掌柜。”当然,那样的幻想只在我的大脑里停留了半秒,就被面前堆积如山的报表赶跑了。

但或许是被她们刚才的话题勾起了神经,我的心思竟也被扰乱,不经意间,竟想起了米拉。

当“米拉”这个名字唐突出现在我的脑海里时,我连自己都被吓了一跳,接着,心里萌发出一丝久违的怀念。

上一次想起“她”到底是多久之前的事呢?完全不记得了。现在就连试图在记忆中还原她的样貌都是那么的困难。

米拉的牙齿不算整齐,在笑起来时,两只小虎牙会抢先一步露在外面。对,米拉的笑。在回想起她时,我总是会首先想到她的笑容。她的眼台总是十分明显,会把眼角支成弯弯的拱状,那神情是如此的有感染力,让人看见会打心底觉得美好,以致会不由得把那幅情景烙印在脑海里。甚至那时我都没留意过,她是个有那么爱笑的人——不,是爱笑的幽灵。

米拉。她是个货真价实的幽灵。

到这里,我的思绪终于还是飘回了多年之前,那个与她相遇的夜晚。

2

那是一个相当莫名其妙的故事。只是在故事的开头,正值青春期的我,差点结束了自己的生命。

大概是因为学校里的事又和家人大吵了一架。回到房间,心如死灰的我跨坐在窗台上,望着十二层楼下的石板路,幻想着自己跳下去之后的情形。

当时已是五月中旬,夜晚的风依旧凉得很。我扒着窗框坐了半天,看着远处居民楼的灯火一盏接一盏地暗了下去,直到门外响起父母回房休息的声音。被风吹了那么久,头脑终究是冷静了一些。我默默爬回了屋内,但思来想后还是觉得窝囊,像是报复似的,我从家里逃走了。

 

当我遇见留着波波头的少女的时候,她正一声不发地看着砸碎在地上的“月下香”出神。

少女穿着剪裁简单的浅米色上衣和杏色的针织裤,腰间束着细带,大概也是十五六岁的样子。一双清亮的眼眸,鼻子小巧玲珑。精巧的五官与她那头修剪得当的短发十分相称。哪怕只是匆匆一瞥,我便笃定,她是那类男生寝室夜聊绝对绕不开的“隔壁班可爱女生”。

只是在这惨淡无人的街上,若是有人默默不语盯着地面看的话,总叫人感到慎人的怪异。

我顺势抬头望去。料想是在大风天,谁家阳台的花被风刮落,真是危险。不过还好,看上去没砸到人。

可能是不忍见到花枝就这样零散地躺在人行道中央,我走上前,伸出手将它扶起。才发现枝条上大部分的花已经残落,只剩两朵嫩黄的花蕊吊着溃败的白色花瓣在风中残喘。反而相比之下,花盆倒出乎意料的皮实。虽说是塑料的,但从那么高的地方砸下,竟不见明显的损坏。只是盆口略有破损,花泥撒出了大半。大抵用些努力,还是能把花装回去的。

“别碰它!”

在我摆弄着那株月下香的时候,身后的女生开口了。她的语调很轻。明明是句警告,但仿佛像不期望我能听到一般。尽管如此,还是能听见她的语调里透着一丝紧张。

“啊?”我诧异地回头看她,舀花泥的手停在半空,脏兮兮的。

看着我的回应,她的神情却从冷淡跟着转变成了惊诧。双眼瞪得大大的。

“你看得见我?”她依旧是那样轻声地说。

“当然了。”

真是个怪人。我心里想着。又埋头继续用手装填花泥,最终把那株残破的月下香捧在了怀里。

“这盆花是你的吗?”我问她。

谁知对方似乎并没有把我的话听进去,而是一直把目光落在我头顶上方的某处,自言自语着什么。

“那真是罕见的「植物」啊。”她喃喃道:“可他也已经……不,他还没有。那到底是在什么时候……”

我对她的话摸不着头脑。仿佛从刚才开始,我和她就微妙地处在两个不同的交流频道,对方似乎总是在故意地说些不想让人听懂的话,真让人有些不爽。不过还没来得及生气,想到自己正被可爱的女生瞅着,反而先感觉有些不自在。

“这株月下香吗?但它都……”

她摇了摇头。

“那——请问我能帮到什么吗?”我问。

“得先去把它恢复成原来的样子。”她注视着我,有些迟疑地说,“我想……今晚我们得忙活一趟了。”

终于能和她沟通上了。我暗暗庆幸道——不对,她刚刚在说什么?恢复谁?花吗?

心里有种不祥的预感,总觉得有什么很不好的事情正在发生。但想着既然都搭手相助了,那就没有中途逃跑的道理,即便对方……唔,好像真是个怪人。

我把怀里的花盆先交还对方,拍拍掌心残余的泥土,对她解释道:“要种花的话,我得先看看便利店有没有类似的工具。在这等我一下。”

说罢,我一路小跑进了附近的便利店。

“欢迎光临。”电子门铃发出机械音。

不出意料,24小时便利店里确实没有园艺工具。但一些基本的替代材料还是有的,比方说,能撑起花枝的烧烤竹签、装水用的饮料瓶……这些多少能凑活一下。

然而,当我把手伸向货架时,让我目瞪口呆的事情发生了——

我的手从矿泉水瓶的中心穿了过去。

仿佛那里原本只是一张印着货架全息图像的幻影,我的右手在空中挥舞,却感受不到任何东西——不论是架子本身,还是上面的物品。一切都明目张胆地从我的手掌和手臂中穿了过去。

下意识回头向店员求助。可不论怎么做,对方却毫无反应,依旧睡眼惺忪地支着头,玩着电脑上的“红心接龙”游戏。

我以为是自己看错了,快步走到摆满饮料的冷藏柜前准备再试一次。直到发现自己的全身能公然穿过整个冰柜时,我崩溃了。

“欢迎光临。”

当我经过门口,那扇自动门却依旧会打开,机械门铃也依旧发出毫无感情的人声。只是我分明听见背后店员不耐烦地嘟囔:“这破门又坏了吗。今晚都第几次了?”

抱着残落花枝的少女此刻正站在门外等候。看见我的慌张反应,她反而像是早已预料到了一般。只是不等她发话,我单方面地发问:“你到底是谁?这是什么恶作剧吗?”

我捕捉到她的目光再次飞快地瞟了一眼我头上那片空无一物的空间——就像第一次遇见她时那样,随后,才落回到我的脸上。

“‘米拉’,这样叫我就好。你看到的一切都是真的哦。”此时的她声音有些奇怪,像是在试图刻意压抑住即将从喉咙深处喷涌而出的愉悦。“欢迎来到‘死后的世界’。”

「花」

即便听她不厌其烦地解释了多少次,我还是不能接受。

“我没死。”我再一次强调道,“虽然我只是‘想过’,但没有真的‘去死’。我自己清楚得很。”

“是的,我敢肯定你没有死。但事实却是,现在的你是死了。起码,表现出来是死了。”米拉再一次像是在说绕口令似的解释道。

“这不可能。”我说。“这不可能。”

我开始到处奔跑,最终张开双臂拼命地在街上冲撞,可不论是路上的垃圾桶、公交站牌、拉下铁闸的店铺、街上偶尔走过的行人、甚至是……米拉。我都无一例外地从他们身上穿了过去。

“虽然不介意你这样做——但我不得不说一句,比起我,现在的你反而更像个‘神经病’。这真的太滑稽了。”少女愉快地说,“顺带一提,你刚刚在心里骂了我对吧,我还是清楚的。”

“你还能读心?”

她的话确实有效果,我停了下来。

“与其说读心,不如说……能看到「颜色」。比方说,你现在整个人都是‘青绿色’的。‘暴怒’的颜色,我不太喜欢。”

又在说些我听不懂的话了。

“现在即便是你,应该也可以。不妨先看看里面那位。”米拉指了指便利店里的店员。

柜台前的男人依旧勉强支撑起上半身,半睁着眼点着鼠标。刚才太慌忙,没注意到他身上的异样:只见在背后那面发黄的墙壁的衬托下,男人身上缠绕着一缕缕微弱的灰色,那种朦胧的色彩像是蒸桑拿后去到室外,从人体身上冒出的热气一般。

“‘无趣’,”少女注解道,“不过这倒是不用看见也知道。”

“可是你身上却没有。”

“是么?虽然我也没在自己身上看到过,原来传言是真的呀。”

“但你反而能看到我的?”

“所以我才说,你不是真正的幽灵。”米拉若有所思的看着怀里的月下香,又开始嘀咕道:“出现这种情况可能是……你接触到了这盆花的原因?不对,一般来说人类并碰不到它才对……啊,我好困惑啊。”

“这不是普通的花?”

“它当然不’普通‘啦。”对方纠正道,“我们要给它浇水。现在就去。”

 

浓厚的夜色下,雀跃的少女领着我走完了大半条街,腰间装饰用的带子随着轻盈的步伐上下一跳一跳的。不过,目的地却不是什么水源,而是一个公共电话亭——不知为何,对于这个结果,我的心里竟没感到太过意外。

“浇水?”我看着米拉怀里残破的花,不由得小声提醒。

“对。唔……幽灵世界的花自然要用‘幽灵的方式’去养护。”

“现在要怎么做?”

“别急嘛。别急。”只见米拉慢悠悠地把花盆安放在电话亭的置物台上,然后拿起了电话,逐个逐个地按着金属板上的按钮。

“米拉,你的手是怎么碰到那台电话的。为什么不会穿过去?”

相信我,若是在今晚之前,要是在路上见到能郑重其事地问出这个问题的人,我会觉得对方脑子不太正常。嗯,现在也会。

“被你发现啦。其实电话亭是幽灵世界的资产哦。相反,人类能堂而皇之地使用它才是值得奇怪的事情。”米拉的眼眸亮晶晶的,满是狡黠的神色。不过她马上把食指放在了嘴唇上,示意我安静下来。

接着,她捏着嗓子,单调而阴沉地咕哝道:“我……好惨啊……我……好痛啊……救命……救命啊……”

哈?

这不是在打恶作剧电话?都21世纪了还会有人打那么老套的恶作剧电话吗?这种只在粗制滥造的恐怖片里才能看到的桥段,现在估计就只有三岁的小孩子才会被唬住吧?

即便知道眼前的少女是个幽灵这个事实。但当亲眼见证一只名副其实的幽灵在自己眼前打出名副其实的“灵异电话”的时候,我的心中还是会有些冲击——我指的是,呃……无语?

然而就在这时,我面前的电话机上竟开始间歇冒出些蓝色的辉光,眼看那气状的辉光越来越浓烈,最终像一条碗口粗的蛇一样顺着电话线,源源不断地涌向了米拉手中的话筒。少女见状,这才恋恋不舍地住声,把话筒伸到身边的花枝,任凭那蓝色物质灌入花盆。只见那奄奄一息的月下香在沐浴了蓝色光气后,洁白的花瓣竟以肉眼可见的速度从一朵原本破败的花蕾周围长了出来,并慢慢成形,最后枝条上竟出现了一朵几乎完好如初的月下香。

“蓝色代表‘恐惧’?”

“嗯哼。”

“没有道理。那种哄小孩的演出真的能吓到人吗?”

“喂,你是在质疑我的演技吗?之前可没人说过这么让我难过的话——不过,以前确实也没‘人’跟我说过话啦。”

“我倒不是那个意思……”

“我说过啦,这是‘幽灵的资产’。这里打出去的每一通,都是那种挂不掉的、就连拔掉电话线还是会一五一十地从话筒里传出声音的电话。人类会害怕也是很正常啦。虽然人类之所以会‘恐惧’,其实很多时候都是自己脑补的。我也不确定他们是否真的能听到我说的话……”

“哇,好狠!”我由衷赞叹道。“不过我看这盆花还没开全呢。枝条上大概还有五朵花蕾的位置诶。所以不继续打么,你的恶作剧电话?”

“你也觉得这样很方便对不对?我可喜欢打电话啦。特别是当能收到人类那么及时又具体的反馈,作为幽灵真的会很感动。不过可惜,那么方便的东西,一个晚上只能用一次哦。不然如果大家都每时每刻不知足地给人类世界打骚扰电话,总有一天人类会不吃这套的。”

“我本来还想着自己试试看呢。”

“果然吧,我就说你有当幽灵的潜力!”

“米拉,没有任何人听到这种表扬会感到开心的。”我正色道,“所以等救活了这盆花,我真的可以回去原本的世界?”

“某种程度上是这个意思。”

“那接下来,我们该怎么做?”

“不错不错。你已经有些上道了,我能看出来。”米拉从置物架上捧起那盆已稍微有了些光泽的月下香,再次将它强塞给了我,宣布道:“下一站,我们该回到「根」里去了。”

「变化之物」

1

当说起「根」的时候,我一度以为米拉要带我钻到地底去。即便已经见识到幽灵世界的(命名)法则微妙地充满了个性,但在我看来,这不会再有第二种解释了,即便眼睁睁看着米拉把我带进了一幢高层住宅之后,我还是这样想的。

“你说要到‘根’里去。是要去地下停车场的意思咯?”

文学修辞中总爱把高楼群比作“混凝土森林”,若是这样类比,“根”便是楼房位于地下的那部分了。在这一层面上,幽灵出乎意料地很好懂。

“不对。”少女斩钉截铁的回答道,不过却又含糊起来,“虽然我记不太清了,但我很确信不是要去地下。毕竟那里并没有人类居住。”

“不是经常会有吗。那种在地下停车场撞鬼的恐怖题材。”

“虽然我不否认出于偏好原因,会有幽灵喜欢待在地下停车场啦——但起码我不喜欢那种满是冷冰冰的机器的地方。”

“所以要到上面去?”

“也不对。”

我有点懵了。但米拉还是头也不回地把我拉到了电梯里——或者说,“穿”进了电梯里。随后,她开始对着电梯门一侧的面板苦思冥想起来。

“然后呢?”

“别急。我得好好想想。”少女盯着一排排楼层按钮出了神。“不知我有没有跟你提到过,幽灵的记忆力通常不太好。”

我摇摇头。

“幽灵世界的时间概念跟你们人类世界不一样。”

米拉一板一眼地向我解释起来:“准确来说,幽灵世界的时间是不会自己线性地流动的,是我们主观决定了自己要前往哪个时刻的时间。比方说,我可以自己决定自己世界的下一刻到底是你们的一年前、十年前、还是数个月后。而不一定是‘下一秒’。但即便是尽量将主观世界和人类世界的时间方向保持一致,幽灵的记忆一般也不太可靠。毕竟‘记忆’是属于「变化」的世界里的东西,而我们是「不变」的。”

“可是到目前为止,我们的时间似乎还是和人类世界保持着一致?”

“我觉得那是你的影响,或者说是你对于人类时间的概念太根深蒂固。似乎自从你进入了这个世界后,我也只能乖乖的顺着人类的时间跑啦。不过,我平时也喜欢过人类的时间——仿佛让我觉得……自己和人类更‘亲近’了?嗯,这说法我喜欢。”

“但……这样真的不会影响到这个世界里的其他幽灵吗?”我顺势问道。但话刚说出口,我立马意识到了违和感:“等等。到目前为止,我们好像没见过其他的幽灵,对吧?”

“啊——被发现啦,幽灵世界我最不喜欢的部分。”米拉摊了摊手,“是的。似乎每个幽灵都有自己独立的频率,像无线电一样,明明都呆在同一个空间里,但只能收到和自己同频的电波。结果就是,我们完全感受不到彼此的存在。人类也是,即便我能看到和听到他们,也完全无法和他们产生直接的交流。”

“不会寂寞么?”

“是有点啦!”

“你知道的东西那么多。看了可多书?”

“倒还好。”

“平时有些什么娱乐呢,作为幽灵?”

“这些等你去到「根」就知道了。”

“那……你想出来了吗?到根里去的办法。”看着眼前的米拉一次次试图用手触碰电梯按键,却每次都不出所料地让手指穿了过去,我忍不住好心问道,“需要我帮忙吗?”

“唔,再陪我聊聊天。我能感觉到,那个记忆快冒出来了——就只需要再顶破大约一毫米那么薄的土。”

“……我有个问题。”

“你说。”

“你是怎么做到的,用那么特别的方式说出那个字。”

“哪个字?”

“‘根’。”

“「根」?”

“‘根’?”

“你要先收腹,再把臀部稍稍提起来,内心要平静一点——毕竟我在运动的时候也说不出来。”

“嗯。”

“「根」。”

“‘根’。”

“就差一点啦。「根」。”

“「根」。”

“哇哦!”

“哇哦,「根」。”

“我就说过你很有当幽灵的天赋嘛!”

“米拉,听到这种表扬,没有人会开心的!”

“可我自己听到会很开心啊。”

“所以你们的偏好和人类是相反的。”我附和道。这时,突然我灵光一闪:“米拉,如果幽灵世界和人类世界是相反的……”

“嗯哼。”

“那会不会在你‘反过来’的时候,再去按电梯按钮就好了。”

“反过来?”

“比方说……倒立?”

“你是个天才。真的。”

只见眼前的少女微微弓下腰,双手肘撑地,竟轻而易举地就将整个身体稳稳地倒立撑了起来。一连串流畅自然的动作把我看得愣了神。

“你真可以做到啊?”

“当然了,我是幽灵嘛。”

“可我就没办法做倒立。更别提像你那么轻松。”

“在今天之前有过锻炼?”

“有点。”

“可有腹肌?”

“唔……”

“作为人类要好好锻炼身体哦。虽然我完全不讨厌你现在的体型啦!不过多锻炼还是会让人变得更‘红’一点。我是说,呃……更‘愉快’一点。真的哦。”

“那你有吗……腹……腹肌。”

“应该不会……作为幽灵,不论怎么锻炼,身体都不会变得健壮。毕竟那是属于‘变化之物’嘛……不。你给我等等,擅自问女孩子这种问题会让我感到不对劲啦。”

“听上去确实有些无聊。一成不变的世界。”

“能过去帮我按一下电梯吗?我……我的脚够不到。”

“不行,现在还是会穿过去。”

“所以就不是用倒立……”

“我就提供一种思路。又没说一定是那样子做。”

“确实,不然每个幽灵去‘根’之前都要先学会倒立,那可够呛。”

“诶!”

“?”

“米拉,你刚刚没有说对那个字。”

“都说过我在运动的时候发不出那个音啦!”

2

等米拉把身体调转回来,再等她缓过神,似乎又过了一段时间。不过也许就连“一秒钟”都未曾流逝。

就在这时,米拉注意到了贴在电梯门对侧的镜子。

“话说,在人类的世界里,电梯里的镜子是用来干什么的。”

“给人整理仪表,又或是让电梯里的空间看上去显得不那么狭小之类。”

“唔。不会在它上面做些什么?”

“镜子只能用来‘看’的吧。”

“可是在幽灵世界里,镜子一般是可以按的哦。就像这样。”

话音刚落,米拉就用她纤长的手指按了一下镜子里的楼层按键。那在她看来,应该是十五层的按钮所处的位置。只感觉周围空间一阵摇晃,整个电梯竟开始往右侧横向移动了起来。

“啊?”

“啊!”

“你们的世界还真的是和我们反过来的。”

“我怎么一直就没看到这面镜子呢。”

“不过我才发现,在镜子里真的一点都见不到米拉诶。”

“是啊,幽灵都没办法看到自己的脸。也没见过自己的手脚和身体长什么样。”

“真假的。直接低下头也看不到?”

“看不到。”米拉抬起双手在眼前晃了晃,握紧拳头又摊开,又低头打量着自己的身体。“我从来没看见过自己,一直都是凭感觉操控身体的。所以,对你居然能看到我这件事……说实话,让我挺不安的。”

“不安?”

“唔……虽然我不一定非要听你接下来的回答。但我还是有点好奇——只是如果事实全部是消极的,那就不要说出来了。”

“嗯。”

“我的外表是什么样的……我是说,好看吗?”

“不用自我怀疑,你超好看的。”我不假思索地快速说道。

“嘶……有点太直白了。虽然我很喜欢你这样直白地说话哦!但先让我缓缓。”

“嗯,好的。”

“你说这些话一点都不害羞吗?”

“我是什么颜色。现在?”

“亮红色。很红。你到底为什么那么高兴?为什么!”

“刚见到你的时候确实是很害羞的,毕竟我在学校和长得很漂亮的女生说话也会紧张。”

“嗯……”

“但怎么说呢……当慢慢发现你有那么一点蠢——”

“喂!”

“我的意思是,发现你那么有‘个性’,又没什么架子的时候,感觉跟你聊天整个人都轻松了不少。而且当听你说,‘整个世界就只能看到一个幽灵’的时候,我其实一直在暗自庆幸自己遇见的是你。虽然我完全还没做好自己‘死掉’的准备。”

“你这样说话,我太喜欢啦!”米拉激动起来,“所以我没有缺胳膊少腿,少个眼睛,少个鼻子,甚至——缺只牙?”

“完全没有。一切都在刚刚好的地方。我喜欢你的牙齿。真的很……特别。”

“哦!我真想把你刚刚说的那些话永远记下来。”

“即使谁都看不到你,包括你自己,你还是那么在意自己的长相?”

“但还是会忍不住好奇嘛。特别是见到那么多人类,又看过电影里那些‘幽灵’的形象之后,我就会忍不住想自己当初变成幽灵的时候——就是在‘死掉’的时候,会不会经历了什么惨烈的死法,导致缺这歪那的。我只是纯粹的好奇而已!虽然也没有影响到什么……大概。”

“你是说,变成幽灵的样子还和自己的死法有关?”

“我倒是没见过有研究这方面的书。我想是因为……没有幽灵能看到自己的样子。”

“那就完全不用担心啦。”

“是哦。”

“那你觉得……我呢?”

“哇,你现在好粉!”

“粉?”

“‘害羞’!”

“啊?那还是算了。”

“唔……你也看不到自己吗?”

“倒是看得到的。所以还是算了。”

“我很喜欢哦,你的「植物」。”

“「植物」?”

“对啊。很漂亮。”

“不,我不明白。你说的「植物」是什么?”

“看不见么?头上的。每个人类都有。”

“长在头上的?”我愣住了,立马朝头顶看去。但不论是在镜中、还是在我眼里,我都完全没发现任何「植物」存在的痕迹——那片空间空空如也。“那岂不是很傻?头上长出朵花什么的。”

“我还以为你能看见呢。人类的「颜色」就是「植物」散发出来的呀。”在说这话的时候,米拉的眼睛一直瞅着我头上那片空白的空间,似乎在尝试用语言为我勾勒出它的模样来,“它倒不是从你头顶冒出来的。更像是……和你的身体处在一个不同的面上。就像立体画一样,你和你的「植物」就像立体画上印在不同光栅片上的图案。在我眼中,你有的时候是你,有的时候是「植物」……这样可以理解?”

“还是有点难想象。”

“我知道,毕竟人类的大脑很难想象没见过的东西。”

“所以在幽灵的眼中,人类有时候是人类,有时候是「植物」。这样理解正确?”我重复道。

“对。”

“怪不得……从一开始你看到的‘我’,和我看到的‘我’也是不一样的。总觉得那样很怪异啊,四处都是「植物」在行走的世界。”

“但其实我更喜欢看见人类展现「植物」的那面,那副模样比起皮囊更让我觉得有趣。或许是因为幽灵要和人类的「颜色」打交道的原因?”

“所以幽灵像是蚊子?只是蚊子靠的是人类的血液,而幽灵却靠人类的情绪能量为食物。”

“总感觉你的类比让我莫名火大……作为「不变」之物,幽灵其实不需要摄入任何东西也可以一直存在下去。”米拉看着我怀里抱的那盆月下香,对我解释道:“但因为幽灵身上没有「植物」,所以多少会羡慕那些「植物」产生的「颜色」吧。幽灵对「变化」世界的渴望,人类是很难理解的。”

“那幽灵就是蛾子咯?”

“你不要再类比了!”

「根」

1

在看到电梯门之外的景象之前,说实话我心里不免有些忐忑。在电梯中的那段时间里,我一直在想作为属于幽灵世界的地方,「根」到底会是什么样子。到底是一片荒芜,是一片虚空,还是像各种影视作品里所描绘的“地狱”那样业火遍地、生灵涂炭、哀嚎遍野……

这时米拉打断了我的思绪。她笑着说,她看见站在隔壁的我莫名其妙地开始变“蓝”了。

等电梯终于停下来后,我跟着她穿过了电梯门。确实是十五层,贴着瓷砖的墙壁上清楚地挂着“15”的牌子。

正当我四处琢磨,对面的电梯门打开了。我看到一个浑身冒着灰色气息的男职员从那台电梯里走出来,拖着沉重的步伐径直朝我们这边走来。我本能地闪躲。但在看到他面无表情地穿过正站在楼道中央的米拉、向自己的公寓走去时,我才猛然意识到,这个男人既看不到我们、也无法触碰到我们——他就只是个普通的人类。

“这不是和原本的世界一模一样嘛!”我忍不住吐槽道。

“嗯?不然呢?业火遍地、生灵涂炭、哀嚎遍野?”少女笑了。

“那……意义在哪,在电梯里那么大费周章,结果还是回到了原本的世界?”

“错啦错啦。这里毫无疑问是「根」,是属于幽灵的地方。虽然和人类世界共用着同一个表面空间,但“归属感”是很重要的。即便能到处穿来穿去,幽灵也不喜欢寄人篱下。”

“但我好像没看到和人类世界有什么不一样。”

“唔,比方说,能让幽灵方便移动的电梯,绝对不会影响到人类的空间,还有属于我的公寓。”

“你的公寓?”

“不过今天我们的首要目的是把这盆花养回去,”米拉看着我怀里的月下香,郑重其事地说道:“先去人类的住宅里走一趟。跟我来。”

 

直到米拉带着我走进了一幢公寓,我才真正注意到「根」和原本世界的空间的差别。

虽然还能辨认出这是按照三房两厅的布局建造的公寓,但每个房间的空间都呈现出某种奇怪的扭曲。比如说这间客厅,沙发、电视机、茶几以及茶几上的杯子的和电视遥控器,竟全都“贴”在了侧墙上,而原本挂在墙上的画,却被摆放在了地板上。整个客厅的空间仿佛被顺时针旋转了大约90度。

但住在这间公寓里的年轻女性,似乎完全没有察觉到这些不对劲。她若无其事地穿行在倾斜角度不同的“墙壁”、“天花板”和“地板”之间,甚至悠然地垂直坐在了贴着侧墙的沙发上滑手机。不过只是单看着,这个歪歪扭扭的失衡空间已经让我感到一阵说不出的不适。

米拉示意我将那盆月下香放在地板上,并正对着墙壁上的女人的肩颈处——不过对于对方而言,我们现在反而是在她的“墙壁”上活动吧。

只见那名裹着睡袍的女人的身体周围慢慢浮现出一些红色的光斑,一点一点地顺势滴落在了那盆月下香上。只是,比起电话亭那时大量涌现的蓝色光芒,如今这些「颜色」的显现却显得格外迟缓,就像试图接住溶洞顶端缓慢渗出的水珠一般,效率显然低了许多。正当我还在思考靠着这种浇灌速度,还需要再过多久才能让它开出下一朵花时,却又见那女人身上的红色光斑逐渐转变成黄色,紧接着,突然又涌现出许多绿色的光粒。最终,这些混杂着红、黄、绿等各种颜色的光粒,像散乱的雨滴般零零星星地落入了盆栽之中。

“真是神奇呢。手机,”米拉不由得感叹道,“那么短时间就能让人类产生各种各样的「颜色」。像煮杂豆汤一样,红豆绿豆黄豆黑豆……”

“但是不是有点……慢?”我忍不住说,“虽然看上去接住了很多颜色,但到现在连一片花瓣都没长出来呢。”

“瞧,我就说打电话很便利对吧。”一旁的米拉点头附和道,“没办法呢。这种被动触发的「情绪」确实是不太稳定。而且如果还没来得及被「植物」吸收的话,其实落入盆里的「颜色」之间还会相互抵消。比方说‘愤怒’会和‘欢愉’抵消、‘恐惧’会跟‘无聊’……”

“啊?那这要等到什么时候。你看,又有好多‘绿色’滴下去了,明明刚刚才有了‘红色’,那岂不是白费了?”

“要是放在平时,我大概会说,‘太执着于结果的话,在一成不变的幽灵世界呆着会很辛苦哦’。”米拉走上前来,蹲下身,仔细查看了那盆花的长势。“不过今天是个例外。走吧,我们去别的地方。”

2

果真如米拉所说,墙壁上那个窝在电脑前、不断敲击键盘的男人,生成「颜色」的效率确实高了许多。只见红色的光斑源源不断地从他身上涌现,犹如雨注一般,持续不断地汇入到墙角的盆栽中。

“真是厉害。快了好多,而且几乎都只是‘红色’。”我对身旁的少女夸赞道。

“是哦。”米拉若有所思地回应,“但是放在平时,我是不会来打搅他啦。”

“嗯?为什么?”

“你大概看不到,他的「植物」看起来状况有点不妙。那么多的‘红色’,就像是从那株「龟背竹」上硬生生榨出来的汁液一样。”

“但是明明那是‘愉悦’的颜色诶。而且他也是为了工作……”

“不是这样的。”米拉摇摇头,“现在的人类已经不知道了。人类和幽灵的世界曾经有过某种平衡,那时世界的时间被分成了两半:人类占据白昼,幽灵占据黑夜。白天的时候,人类通过自己的活动产生足够多的情绪能量;而到了夜晚,幽灵则会去收集和利用人类多余的能量。”

“还发生过这种事情吗?”

“是的。但到了人类世界的现代,这种平衡被慢慢打破了。除了白天,人类的活动开始不断挤占黑夜的时间。先不谈幽灵们对此的意见如何,现代的人类或许没有意识到,要在夜晚像白天那样活动的话,他们产生的情绪能量其实是在透支自己的「植物」的哦。

“据书上记载,幽灵还曾试图反过来帮助这些过度劳累的人类——在他们睡着时,幽灵用自己收集到的能量还给人类,好恢复他们「植物」的状态。不过不免也会有些笨手笨脚的幽灵搞错了方法,给睡梦中的人类倒了太多的‘蓝色’。结果他们醒来时,身体不但没恢复,反而还被吓得动都动不了。”米拉无奈地说。

我不禁有些好奇:“所以人类这样占用幽灵们的夜晚时间的话。幽灵会生气吗?”

“不清楚其他幽灵的看法。我倒是没什么意见啦。晚上太过安静的话,即使是幽灵也会觉得无聊的。”少女朝我吐了吐舌头,“不过这个年代的人类越来越累了。白天忙活完,大晚上的还拼了命弄得全世界五彩缤纷的,红豆黄豆绿豆黑豆青豆……还是要多爱惜一下自己的「植物」为好。”

“不过这一趟,我倒是明白了一件事。”

“嗯?”

“我之前一直搞不懂,为什么幽灵会喜欢躲在人类的床底下。原来在幽灵的眼里,床是‘立’在地上的啊!反而要想站在床上是绝对不可能的。”

此刻的我正倚靠在墙壁上,看着枝条上有两朵新的月下香在慢慢盛开。而米拉已把身子挤进了“竖立”在墙角的床铺的底下。“男人电脑主机上发出的彩光太‘闪耀’了,在这里可以遮一遮。”对此,她是这样解释的。

3

“并不是所有的床都是立在地上的,「根」倒还是有‘正常’的空间啦——就是那种,‘地板’是‘地板’,‘墙壁’是‘墙壁’的。只是不太常碰到。”

从男人的公寓出来的时候,米拉跟我说:“它们之中有很大一部分其实都卖给了幽灵,毕竟没有幽灵会喜欢一个浴缸在天花板上的房间……”

“但明明人类世界的住宅的空间布局都是完全正常的,怎么不去人类世界里住?反正人类也看不到幽灵。”

“还是跟人类划清界限为好——特别是如果不想被‘驱鬼大师’教训的话。”少女强调道:“虽然大多时候人类和幽灵互不相干,但少数时候……比方说当幽灵忘记自己已经死掉的时候,还是能影响到人类的。”

“所以那种闹鬼的故事是真的?”我诧异。

“搞不好我也做过呢。”米拉回过头来,狡黠地冲我笑道。

 

正如米拉所说,确实是有家具摆放“正常”的房间存在。比方说四号公寓的儿童房。看惯了那些七扭八歪的房间之后,突然来到这样一个布局规整的‘正常’的房间,反而让我有些不适应。

米拉告诉我,这个房间的主人是个有些怕黑的小男孩。以前,他老是躲在衣橱里睡觉,不敢呆在空荡荡的床上。后来家里人给他买了各种各样的玩具和布偶,有了这些“小伙伴”的陪伴,男孩才慢慢鼓起勇气,终于敢回到自己的小床上睡觉了。

“如果让他知道,这个房间真的有幽灵在陪着他的话,他可能又得回到衣橱里睡觉了吧。”米拉压低声音对我说。

虽然夜已经深了,男孩依旧在床上念念有词地摆弄着他的玩具们。像个指挥官一样,正在亲手上演着一场只属于他一个人的战役。忙东忙西的,玩得不亦乐乎。

只见幽灵少女蹲坐在床的另一头,兴趣盎然地跟我讲解起那发生在床上的“战局”。

“这片是迷雾森林,”米拉边说,边用手指圈出被单上一片绿色的图块,“在上一个魔法纪元,这里还是一个王国呢。但魔王手下有个擅长召唤魔法的魔导师。他召唤出了‘一百亿只’乌鸦,把国王绑架了。喏,就是那只可怜的小熊啦。”她指了指倒在地上的玩偶。“然后失去了国王的城堡渐渐不敌魔王军的侵略,最后召唤师使出了全世界最强的木系魔法,让树海和迷雾把整个王国淹没了。”

“哇哦!原来是魔法题材吗,”我突然来了兴致,“那现在那群乐高兵人在森林的边缘打什么?”

“噢,那是魔王军和圣骑士军的战役。”米拉走到了天蓝色枕头边,指着摆在枕头正中央的积木小屋对我说:“这是天空要塞。是圣骑士的地盘,他们得知王国被魔王手下控制,所以不远万里派兵前去讨伐那个邪恶的魔导师。头上戴了顶帽子的小人就是圣骑士中最擅长冰系魔法的骑士长,他的冰箭雨可是能完美克制魔导师那‘一百亿只’乌鸦的召唤术呢!”

“但即使骑士长克制魔导师的法术,他们现在看起来好像还打得有来有回诶。”

“这是因为邪恶的魔导师还留了张底牌啦!”米拉用食指点了点男孩手上的那颗弹珠:“这是魔导师从古代遗迹里面偷来的水晶球,里面藏着世界上最强的地狱召唤术,所以魔导师一下就在迷雾森林里面弄出了一支亡灵军团,把圣骑士军打了个措手不及。现在那名骑士长和他的手下正在艰难回击呐。”

“为什么你偏偏对这种事情记得那么清楚……”

“嘘嘘,别打岔。这个世界观很棒的呢。”

“加油啊,骑士长!”在米拉的怂恿下,我试图进入角色:“快用冰系魔法把亡灵军团的脚给冻住,这样他们就动不了!”

“冰霜锁链!”男孩应声说道。然后把手指从被单上的黑色小纸人们身上移开了,似乎这下这些“亡灵军团”是无法移动了。

“哇哦,你这个‘军师’当得不错嘛!”少女雀跃起来,“可是森林上空还有魔王军的飞龙呢,骑士长的锁链对会飞的魔兽完全没有办法啦。”

只见在飞龙经过的地方,男孩用拳头装作“火球”从天而降,砸落到圣骑士部队所在之处。几个乐高小人随即被挑出来放到了床边,看上去圣骑士不幸折损了几员。

“哼,你太天真了少女。冰系魔法是完美克制飞行单位的。”我信心满满地对米拉说。

“什么?”她讶异道。

“绝对零度!”这时,男孩突然直起身子,兴奋地高喊,随即用手指绕着“飞龙”划出了一个大大的圆,面积之大甚至还囊括了半边“迷雾森林”的土地——那大概就是这个“冰系最强魔法”的“魔法阵”吧。

果不其然,随着男孩嘴中一连发出几声“砰”的拟声,空中的“飞龙”悉数坠落,床单上的黑色纸人也被纷纷扫落到地板。看来这下,所有被召唤出来的魔兽都被骑士长一举歼灭了。

“好厉害的魔法!”米拉赞叹道,“怎么不一早放出来呢?”

“这你就有所不知了吧。”我讲解道,“这种高杀伤力的魔法是要蓄力好久的,通常队友要用其他技能给施法者做掩护。而且,强力技能打出来后,施法者的魔力也会被彻底耗光。所以大概此战之后,骑士长要回去休养好一段时间了。”

“奇怪。你怎么那么了解?”

“这就是男人间的默契吧。”我看着床上一脸兴奋的男孩,得意地说。

“喂喂,是时候要睡觉啦。记得把玩具都收拾好。”这时男孩的母亲推开了房门,宣布了这个“魔法纪元”的结束。

“好哦。”男孩说。

“啊——”少女倒是一脸意犹未尽,“看来对魔导师的总讨伐要等到明天了,好可惜啊。”

“你也喜欢这种游戏?”我吃惊地看着她。

“超喜欢的!我每晚都会跑过来玩。”

“没想到女生,我是说女性幽灵也会喜欢这样的……”

“不要对幽灵产生一些奇怪的刻板印象!”对方纠正道。

“米拉。你快看!”

当我回头查看放在床边的“月下香”时,这才发现上面不知何时已开满了花朵。

“很厉害吧。小孩子的能量就像太阳一样源源不断。而且孩子的「植物」每天都在茁壮长大。已经停止成长的大人们可羡慕得要命。”

“那一开始就直接过来这不就好了!”我有点哭笑不得。

“让你先到处体验体验‘幽灵的生活’嘛。”

“既然花都开满了……我猜,接下来是‘最后一站’了?”

“嗯。”米拉直起身说道:“该去我的家了。”

「井」之一

1

米拉的公寓位于十五楼的走廊尽头,是一间没有门牌号的房子。

不出意料,这个公寓的空间完全“正常”。所有家具都规规矩矩地固定在地板上,没有一丝倾斜或异样。和这份“正常”形成鲜明对比的,是房间内部极度的冷清和空旷。

米拉的公寓几乎没有家具——更准确地说,整间公寓保持着刚刚租出去时的模样。墙壁和地板光洁如新,没有任何个人物品的痕迹,就连房间一角的床铺也只有简单的床架和床垫。

神奇的是,虽然公寓没有安装电灯,屋内的每个角落都是亮堂堂的,仿佛是房间把白天时候的日光留住了一样。总的而言,这根本不像是有人居住过的地方,更像是一间被遗忘的、却又永远不会变得脏乱的闲置待租房。

“我回来啦。”刚进门的米拉小声对着屋内说。

“这真的是——”我试图整理着脑中的语言,“我这辈子见过最空的房子。”

“毕竟幽灵几乎触碰不到东西嘛,也不会累或者饿,所以其实什么都不需要——不过‘家’本身还是需要的哦。”少女强调道。

“其实,有个问题我想问很久了。”看着手中开满花的月下香,我忍不住说道,“这盆花到底是怎么一回事?你是说因为我碰到了它,我才会变成现在这样的吧。”

“你终于问出来了。”米拉叹了口气,“确实,我也要对你足够坦诚——你怀里捧着的,其实是我的「植物」。”

我愣住了。

“可是你不是说过,幽灵是没有「植物」的么?”

“更准确地说,这盆‘月下香’是来自人类时候的那个‘我’的。”米拉盘腿在地板上坐下,对我说:“虽然身体上没有,但幽灵是可以找回自己生前的「植物」的。不过,和人类身上可以产生情绪的「植物」不同,幽灵只能用它收集人类的情绪能量,然后一点一点把它修补以前的模样。”

“修补完之后呢?”我问,“这个幽灵可以回到人类世界去?”

“真是个不错的想法。”看着我手里满满盛开的月下香,米拉笑了,“可惜,答案是——‘什么都不会发生’。只要今天过去,它又会自动回到最初我们捡到它的地方,又会变回那幅败落的样子。因为幽灵的世界是「不变」的,哪怕看着自己的「植物」能再次盛开,也都是假象而已啦。”

“那我们今晚岂不是白费力气了?可是你不是说,只要它能开满花……”

“你先听我说,其实当时我没解释清楚。”米拉努力安抚道,“我在书上看过。你之所以会变成这种像幽灵的样子,大概是因为……因为……我以前见过你,然后那时发生了一些事,才导致你触碰到我的「植物」之后,会被拉进我的独属频率里。通过这盆开满花的月下香,或许可以搞清楚以前的事情呢。”

因为信息量过大,我一时无法消化。

“我们以前见过?什么时候?”我呆呆地看着少女的面孔。

“好啦,你这样问,我也不记得了啊。既然都准备好了,我们就来造口「井」吧。”

2

我想不明白。

即便幽灵世界的概念总是让我无比疑惑,但我不论如何还是想不明白“造井”和“洗澡”有什么联系。

“那是用来回忆用的东西。”对于「井」,米拉是这样解释的。

可她刚宣布完“我们来造口井吧”,然后又转过头自顾自的把别人赶进浴室、命令人洗澡。这种行为模式,不禁让我琢磨:到底是人类死后都会变得奇怪呢?还是说,是米拉在生前本来就很奇怪呢?只是……那么“特别”的女生,如果和生前的她认识的话,我应该多少有印象才对。

更何况,我也是最近才搬来这个城市。这就更不可能在城里有什么先前已经熟识的人了……一定是有哪里弄错了吧。

或许也是因为从小一直和乡下的爷爷奶奶呆在一起原因,如今突然搬到城里,与早已生疏的父母同住,再加上在学校要和口音、习惯完全不同的城里人相处,才会有那么多争吵和糟心事吧。

……

话说回来,幽灵需要洗澡么?还是说,洗澡只是某个“仪式”的一部分,就像来「根」之前要先倒立一样……不对,倒立那个步骤是不需要的吧?

我不免猜想这个浴室里使用的都是“幽灵的资产”。不论是莲蓬头、出水的开关,还是我现在正站着的浴缸,我都能正常地使用。只是那水丝完全不会被我的身体阻挡,而是毫无偏离地打在了身后的浴帘上。我也丝毫感受不到水的温度和触感。看来只有这里的水是“原本世界”的东西……

就当我沉浸在思考中的时候,冷不丁和出现在浴室角落的米拉四目相对了。

“啊……”少女愣住了。

“等一下,我还没洗完呢!”我赶紧拉上了浴帘。

“我只是想看一看,幽灵洗澡的时候到底是什么样子的。实在是太好奇了才……”米拉慌忙解释,“没有没有,我只是在看你的「植物」而已,我没有看到你的人啊!”

“你平时都光明正大看人洗澡的吗,你这个痴女!”我本还在叫嚷,但突然意识到了什么。听她这么一说,从伦理上居然顿时显得无伤大雅起来。毕竟看植物洗澡……好像也没什么问题?

“你真的只是看到了「植物」?”

“嗯。杏鲍菇。”

米拉随口丢下这句话,转身便消隐在浴室门外。

“‘杏鲍菇’?——那是植物吗?”我疑惑了。直到琢磨了好一会,突然反应过来的我,这才对着浴室外的幽灵喊道:“米拉,你果然是个痴女吧!”

 

“如果你不能给出叫我去洗澡的正当理由,并且解释清楚这不是你那些无聊的‘幽灵研究’的一部分的话。那我以后都不想搭理你了。”从浴室出来,我还是有点愤愤不平。

“这真的是进入「井」之前的关键一步。”对方一脸诚恳。

“那……为什么你不去洗?——喂喂,你别那么看我。我才不会偷看呢。别把我想的和你一样。”

“因为到「井」里去的只有你一个呀。”

米拉所说的「井」,简而言之,其实就是把那盆月下香投入她的浴缸里,再往其中注水。少女指着浴缸上的一圈明显的蓝色条纹,向我解释道,只要等把水加注到那个位置,「井」就造好了。

“噢,就像在煮泡面一样。”

“?”

听上去出乎意料的简单。倒不如说,连回到自己住所的方法都得想半天的少女,对于造「井」这件事反而记得那么牢靠。这让我很意外——这么说来,她好像总是对一些无关紧要的事情记得特别清楚。

“米拉,我想问,你每次说‘书上看到’、‘书上看到’,可你房间里明明一本书都没有,你在哪看的书呢?”

“不错,你又发现了一个盲点呢,华生。”米拉满意地说,“当一个幽灵跟你说她‘看了书’、‘看了电影’、甚至是‘玩了游戏’的时候,那她其实指的是,自己‘偷窥’了哪个干过类似的事的人类。但是,不得不说,在图书馆里等到一个会主动翻看和‘幽灵’有关的书的小书虫,也是够难的。所以还有很多东西我早忘啦。”

“但是,对于「井」你好像很熟。”

“当然啦,我自己已经做过好多好多次了。比回家……我是说,比‘出门’的次数还多。”

“但为什么这次只有我要进去呢?”

“啊——本来我不想解释的。但你都问了就没办法啦,”米拉说,“不是‘这次’。而是……这可能会是我第一个成功造起来的「井」。因为它其实是很久以前的人类发明的秘法。是只能给人类使用的物品。”

“我还是没听明白。”

“「井」这种东西啊,原理跟镜子一样。只是「井」照出的是过去的景象而已——但是问题就出在,前提是你得先‘看得到自己’才能使用。我以前已经试过好多好多次啦。但即使能把它唤出来,我还是没办法看到自己的映像。”

“你是说,要让我去看你的记忆?”

米拉无奈地点了点头。

“「井」其实是一种从「植物」中提取记忆的办法。”她轻声说道,“但是对于幽灵来说,这盆植物只是一个‘幻象’。它按理说,跟我生前的那些记忆已经没有任何关系了。不过既然它一直陪着我到现在,希望它能记住一些我作为幽灵的事吧。”

“可是,你不介意么,给我看见你过去的事情。”

“当然——是很让人害羞。谁会乐意给别人看自己的‘日记’呢……但比起那个,我还是‘好奇’占得更多一些,就像照镜子那次一样。”她叹了一口气,像是在自嘲般地说道:“可能也是我太奇怪了吧。不论是想看自己的样子,还是想回忆身为幽灵的过去……怎么想都不是幽灵该做的事情。”

“没有那回事,米拉。”我一脸认真地对她说,“其实我一直都很高兴能够成为你的‘镜子’。”

我能看到,对方睁大眼睛,脸上满是高兴与震惊的神色。但很快,她又眯起眼睛,目光转向我头顶的某处,似乎在观察什么。

然后,少女终于忍不住吐槽道:“你不要擅自变得那么‘红’啊!说这种话的时候,给我稍微害羞一点!”

 

当水位稳稳停在了横线上时,缸中的水开始渐渐变得深蓝,甚至愈发显得深不见底,而那盆原本浮在水面的花也逐渐往下沉,直至消失在幽渊之中——一口如假包换的「井」,就这样赫然出现在了平平无奇的浴缸里。

“答应我,还是老规矩。”在我即将动身进入浴缸之前,米拉提醒我说:“如果是看到太过消极的事情,回来不要跟我说哦!”

“嗯。我会好好看清楚的。”

“也不要看得那么清楚啊!”

「记忆」

……

……每日记事(节选)。

「色情片」

今天的幸运色是粉色。

还是觉得看色情片时候的人类很可爱。

不论是原本闪动着什么样的颜色的人类,只要打开了色情片,身上都会冒出许多晶莹的小泡泡。都是通红通红的。那些红色小泡泡会聚到一起去,变成一个超大的泡泡,然后,“砰”的一下炸开。像烟花一样,好看极了。

可惜那之后,人类的「颜色」无一例外立马就暗淡下去。那样的景色我却总是看得不过瘾。要是人类能振作下精神,每次再多放几下“烟花”就好了。哎,不过,真正的烟花也是那样转瞬即逝的东西吧。不论看见过多少次,还是会让我心痒痒的。能够「变化」的事物真是神奇。

人类为什么会那么喜欢看色情片呢?这个问题可是想了我好久。明明故事情节都是一模一样的,他们却怎么都看不腻。还是说,人类心里其实也在向往着「不变」的世界呢?真矛盾啊。

男人都喜欢色情片中那样的女性吗?可我觉得身形匀称纤细的女孩子才更可爱啊。

但是真正的“我”到底是长什么样的呢?晚上路过镜子的时候多往里面看了几眼。虽然还是什么都没看到。

不知为什么,我总是觉得“自己”应该没有色情片里那种成熟女性的身体。而且挺着那么大的乳房,洗完澡打理起来会很麻烦吧?不过幽灵也不需要洗澡就是了。

“自我感觉”真是个很神奇的东西,哪怕变成了空荡荡的幽灵,还是会被奇怪的“自我感觉”束缚住,明明已经看不到自己了。还是说,“自我感觉”和看不看得见自己其实没有关系呢?

干脆就这么决定了,今天的我是个大胸部的成熟女性。疯狂迷恋我性感的身体吧,男人们!

……

啊。大胸部好重,累死了。还是像以前那样就好了。

「泡澡」

今天的幸运色是红色。

像蔷薇一样的小姐姐今晚在公寓里准备了好大一缸的热水。她还特地往水里倒了浴盐和印着玫瑰标签的入浴剂,全是泡泡和蒸汽的大浴缸,只是看到就觉得棒极了。

顺带一提,蔷薇小姐的浴室是少有的不长在天花板上的浴室。虽然也不是完全平放在地面,稍稍倾斜了几度,不过能有那么完美的浴室,已经很让我感动了。

只是刚刚准备好一切的她突然接到通电话。说了几句,就穿上工作装出门了。

真是不容易啊,社会人。

在那个「变化」的世界里,水温会随着时间渐渐冷下去吧。对于那缸满满当当的泡泡浴来说,这可太可惜啦,于是我只好擅自帮蔷薇小姐享受了。对不起啦,蔷薇小姐!

不过身为幽灵,我既无法感受到水温,也无法闻到玫瑰入浴剂的香气,真伤心。但只是看着水面上不断升起的蒸汽,还是会觉得很幸福哦,毕竟自家莲蓬头里的水就从没冒过热气。

而且那个倾斜的浴缸好棒啊。只用平躺着,居然能够让半边脸浸在水里、半边露出水面。能同时看清楚水上和水下的样子,真是特别的体验。

趁蔷薇小姐睡着,偷偷把今天收集到的「红色」分给了她。

谢谢你的款待,蔷薇小姐。祝你好梦。

「电影」

今天的幸运色是蓝色。

「虎尾兰」很爱看电影。

虽然每天晚上回到家,他身上总是灰得吓人。但在入睡之前,他还是会拿出一部电影来看,不论时间多晚都不例外。每次看完一部电影,灰黑色的虎皮兰身上就又会出现各种好看的颜色了。哇,那些租赁影碟简直就像是人类的调色盘一样。

电影真是个好东西啊。

大多数放电影的时候,我也会在一边跟着看。虽然虎皮兰的客厅长在天花板上,不过没关系,只要能看到好看的电影,我可以暂时做一只倒立的幽灵。

不知不觉,我的倒立好像也跟着变得熟练了不少。但是幽灵真的会变化吗?哎,可能也只是“自我感觉”而已啦。

我没办法记清楚电影里的情节,关注点渐渐放在了台词上。角色说话的方式真的太有趣啦。不知道看得多了,我的说话方式会不会也变成那样呢?

“噢,我的上帝呀。我敢打赌,现在你的脸蛋红得就像那该死的太阳屁股。”哈哈哈哈,真好玩。

有一段时间,虎皮兰突然变得很晚才回家,而且也不再放电影了。每天都是冒着灰黑色回来,又顶着灰黑色出门。他的「植物」眼看着萎靡下去了。

我真担心他。并不只是因为我想看电影哦。

不久的某天,虎皮兰搬了台好大的电视回家。而在那之后,他又终于重新放起了电影,回家的时间也变早了。我也能放心啦。

只是他的选片口味发生了微妙的变化。打斗片出现的次数变少了,恐怖片反而看得越来越多。

哎,要我说,何必去看那些恐怖片呢?哪怕你抬头看一眼天花板,这里就有一只在倒吊的幽灵哦!

「石莲花少年」

今天的幸运色是……橙色。

虽然变成幽灵之后可以四处跑动,但我却总是一天到晚泡在「根」里,看着形形色色的人类的居家生活,也总是只顺着人类的时间走。之前都没发现,原来自己是个那么“恋旧”的幽灵——还是说,比起幽灵,我其实更向往人类的生活呢?

今天破天荒的,我脱离了人类原本的时间,也离开了人类的住所。就连我自己也不知道跑到了哪里啦,只是一片很空旷、人很少的地方。

在不熟悉的时间和地方呆久了,竟莫名的心慌起来。果然,我还是不习惯去过真正的幽灵生活啊。

正准备要回去的时候,他毫无征兆出现在了我面前。是像石莲花一样的少年。

奇怪的是,他能看到我,也听得见我说话。难道他也是幽灵吗?不,他有「植物」,是个如假包换的人类。

书上说,有些灵性强的小孩能看见幽灵;也有书上提到,当幽灵忘记了自己是幽灵时,他们可能会短暂的被人类看见。

但那时,我被这突如其来的遭遇弄得一片混沌,鬼使神差就留下来了。

以为我是迷路的外地人,少年大方地向我提供帮助。他问起了我的名字。我告诉他,我叫“米拉”。

幽灵不需要名字,那是只属于人类世界的标识。人类少年当然不知道,“米拉”其实不是我的名字,而是他的。准确来说,是他的「植物」,Echeveria 'Mira',“永恒之花”。

石莲花在人类世界里不是什么惊艳的花卉,它也不会散发出花卉独有的芬芳。但那是象征着「不变」而存在的事物,只有身为幽灵才会懂得,那种植物是何等惊人的美丽。

可是,生活在充满「变化」的人类世界里,要想不被改变,又哪有那么简单呢?少年啊,你可是选了一条最难走的道路哦。

石莲花少年觉得我的“名字”很奇怪,问我是不是外国人。我忍不住逗他。

“是的。”我说,“搞不好我的祖辈还是住城堡的哦。”

单纯的少年居然接受了这个“设定”,他认真地看着我的双眼,提议要向我介绍他的乡下。

世界上绝对没有任何一只幽灵可以抵挡“被看见”的喜悦。

如果我有「颜色」的话,那我当时绝对「红」得要命。不……搞不好是「橙色」呢。那是……我只在热恋中的人类身上看见过的颜色。

少年家乡的餐点、街道、河流、高山,都有着些很朴实的名字,每次男孩郑重其事地把那些名字说出来时,我总会被他认真的表情逗笑。

我看见少年慢慢变成了“粉色”。他可能是觉得,将那些像泥土一样淳朴的名字讲给我听有些难堪,于是干脆转而为他们安上各种有趣的名字。于是,粗粮点心变成了魔法世界的口粮,各种山头(根据它们的形状)变成了兵器库,甚至连地上的花草和吹来的风,都逐一拥有了全世界最独一无二的姓名。

那真是,一段快乐到犹如梦幻般的时间。如果可以,我真想永远永远在他的世界待下去。

我亲吻了他,趁他最后还能看到我的时候。果然,幽灵都是自私鬼。

石莲花少年呀。下次如果有机会,该轮到我来给你介绍我的世界啦。不过在那之前,请一定要幸福地生活下去哦。

「井」之二

1

“对于我接下来的提问,你只能用点头或者摇头两种方式回答,我不想听到第三种答案,”面前的少女一脸凝重地对我说,“你一定要如实回答哦。”

“嗯。”

点头或者摇头!

我郑重其事地点点头。

“很好。首先,你是不是成功了?我是说,成功看到了我以前的事情。”

我点点头。

“那……你有看到我生前的东西吗?”

我摇摇头。

米拉明显有些失落。

“你有看到我的糗事吗?”

我有些为难。不知该用哪种方式回答,于是茫然地看着她。

“那我换种问法。你有看到我做了什么‘少儿不宜’的事情吗?”

我仔细斟酌了许久,还是勉为其难地点了点头。

“你……我就知道!”少女绕着自己的房间蹦跶了好几圈,最后还是坐回到我的面前。

“算了,不管啦!那不重要!”对方大声宣布,不过反而更像是在说服她自己。“下一个问题……我们之前真的见过?”

我快速地点点头。

“呃……是我对你做了什么吗?……我是说,是那个以前的、不懂事的、幼稚得要命的、和现在一点关系都没有的我——主动对你做了什么吗?”她再三强调道。

我试探性地看向她的双眼。少女的眼神却像小鹿一样飞快躲开了。

“回答呢?”她把双手抱在胸前,再次问道。

我点头。

“完蛋。”米拉猛的一下站起身,心灰意冷地碎碎念道:“啊啊,我可以去死了。原来我已经死了啊?那可以再去死一次吗?”

“你这就知道答案了?”我有些惊奇,“不需要再问下去?”

“知道了啊。毕竟那是我嘛,还是能猜到的——虽然是那个‘以前的、不懂事的、幼稚得要命的、和现在一点关系都没有的我’。”米拉背对我站着,用头抵着墙壁,只见她的额头部分还是稍微陷进了墙面,“其实当看到你回来之后,那个‘粉粉’的样子,我已经有预感啦。我是说,我从来没见你那么‘粉’过。”

“不过,”我装作若无其事的问道,“那样的话,一般要怎么才能让我恢复呢?”

她长长地叹了口气,就像要把自己那不存在的“颜色”全部排出体外。

“再做一次就好了。”

“再做一次?”

“对啊。不过,在那之前……可以先让我缓缓吗?”

“您请便。”

2

大概经过了一个世纪那么长的沉默。

在这期间,米拉一直维持着那幅抵墙而站的姿势,仿佛在默默反思她那些并不存在于脑海中的幽灵岁月。

而那些在「井」中的见闻不自觉地相继浮现在我的脑海里,我找不到该用什么样的话语来向她倾诉我的感受。

我现在才想起来“那天”发生的事情——那时我还在读初中。是暑假的某天,我被小伙伴爽约了,不过在约定碰面的地点,出现了一名比我年长许多的少女,看服饰和打扮绝对不是村里的人。样子已经记不清了。只觉得对方很特别。为此我真的会相信她说的,关于“公主”的故事。

我们从早上一起玩到了傍晚,最后,我和她躺在草坪上,只觉得夕阳的风很舒服,不小心打了个盹。等我醒来后,天已经黑了,当初躺在我隔壁的女孩子已不辞而别。后来和爷爷奶奶提起,他们都只会说“外国人”不可能会来这种乡下地方,那只是小孩子错把梦里的事当作了现实。所以我也渐渐没往心里去了。没想到……如果早知是这样,我又怎么可能会忘记呢?

但是比起我自顾自的倾诉,或许对方并不希望我对她的“私密日记”产生任何体会。这时再由我来发话,搞不好还会给这片难堪的寂静火上浇油。

直到天边开始泛白,她仿佛终于做好了心理准备,猛的转过头,一脸决绝地向我走来:“来吧!我们来结束这一切吧。”

“等等等等。”我连忙伸手阻止她,“现在不像是做‘那种事’的气氛啊。”

“我不想培养那种气氛!”

“假如,我是说‘假如’——”看着她气势汹汹地逼近,我边后退边说道,“如果不‘撤销那件事’的话会怎样。我可以再在这里待一会儿也无妨嘛,还有好多地方没去看过呢。大不了就明天翘课而已,数学课什么的不去上也没关系,毕竟作业也还没写完——”

“不,你是在说笑的对吧?”米拉停下了脚步,那种玩闹的感觉突然消失了,她的眼神竟显得有些慌张——今晚,我还第一次看见她露出这个神情:“不,不可以的。如果在‘你’的视角里,当这个夜晚过去——在那盆花回到原位去之前,你不回去就来不及了。”

“来不及?什么意思?”

“你大概率会彻底死掉。我是说,你会‘真正’地变成幽灵。”

“那……其实也不赖嘛,”我试图打哈哈,缓和她的紧张,“你看,我岂不就可以留下来陪你了?”

“请千万、千万不要这么想。答应我。”此刻,对方脸色无比严肃:“你之所以现在还能看到我,是因为你‘还不是’幽灵。真正的幽灵,是完全看不见、听不到彼此的——即便是就待在同一个空间里,就面对着面,却什么都感受不到。那不是什么好玩的事情。你只能永远地‘旁观’着原本的世界,只能默默感受着像被诅咒一样的孤独感。”

“我……”我愣住了,没有料到是这种后果。

“请回到原本的世界去,这里不是你应该呆下去的地方。”少女已经走到了我的面前,像是请求般说道——她弯下腰,握住我低垂的双手——虽然我什么都感受不到。她注视着我说:“在那个人类的世界里,你还有很多很多的事可以做,还有爱着你关心你的人,你的人生还远远没到结束的时候。”

“可是我不想回去,”我有些着急。这分别的时刻来得太突然了,各种各样的情绪此刻聚集在我的心头,我竟开始赌气地说:“那边已经没有人在真正地关心我了,那边没有人会像你一样。我身边的每一个人都在自顾自的把自己的愿望加到我的身上,都只会一味的否定我、打压我,从来就没有理睬过我的想法。他们只是想我去过他们想要的人生而已。”

“这不是事实哦。你是知道的。”米拉轻声说道:“生命确实是艰难的,真的太艰难太艰难了。我也很清楚哦。但它不会‘永远’是艰难的。只是,当人身上的某种‘颜色’太过强烈的时候,就会把其他更细微的‘颜色’抵消掉。但这不代表那些美好的情绪不曾存在过——你要做的只是去注意到它们,找到它们存在过的痕迹。这样就够了。今晚你在这里和我一起的经历,我想,它们不会是没有意义的。”

我沉默了,不知该如何作答。

“来,请闭上眼睛,深呼吸。”少女在我耳边轻轻地说。

她的声音十分让人安心,就像催眠一般。我不由自主地照做了。

过了好久,却没再听到对方出声。

“米拉?”我试探性的问道。终于忍不住睁开眼,只看到对方正一脸轻松地站在我的面前。

“做完啦。”

“做完了?做什么?”我十分疑惑。

只见对方用力地抿了抿嘴唇。接着笑了起来,露出两只小巧的虎牙。

我立马就意识到了那是什么意思,呆呆的看着她:“可是……可是我什么都没感觉到。”

话音刚落,我便知道自己说了句蠢话——当然了,当然不会有任何感觉。

不过,对方却说:“我刚刚亲的当然不是你啦。我是说,不是‘现在的这个你’。毕竟这样面对着你,我还是会害羞的。

“于是,我耍了个赖皮,把那个吻‘还’给了‘另一个你’。”

“你刚刚是回到过去了吗?”我讶异,“可是那也算数吗?”

“怎么不作数了?在我的视角里,那就是这里的‘下一刻’呀。没有说一定要发生在‘当下’。”米拉故作回味地说:“啊——我想我爱上了亲吻的感觉了,真想再来一次呀。可惜,那种‘意外’没办法再来第二次啦。”

“差点忘了你是个痴女了。”

“我说笑而已啦。其实……”

「不变之物」

在那之后发生的事我已经记不清了。据说是第二天天刚亮的时候,小区保安在长凳上发现了昏睡过去的我。送回家中,我大病了一场,修养了近一个星期才勉强继续学业。

不过,从那以后,父母的态度有了一些微妙的变化。虽然表面上看起来和以前没什么不同,但我能感觉到,他们不再像从前那么强硬或不近人情了。仿佛我的那次“意外”让他们意识到了什么,又或者是,我也开始慢慢体察到他们的言不由衷。

再之后,我又回到了那条和平常人没什么两样的轨道上,继续日复一日地埋头念书,再到考试、升学、毕业、求职……只是听父母说,曾经有段时间,一起上街的时候,我会无端端在路边的某个公用电话亭、或是在便利店的门口停下脚步。在乘电梯时,我也会莫名其妙地看着镜子出神。

离开大学后的五年里,我一直在各个陌生的地方辗转,相继又换了三份不同的工作,最后,来到北方一个大城市里谋生。在某个学长的引荐下,我成功拿到了一份办公室的文职。虽然人情复杂、事务繁忙,但多少有了份稳定的收入,算是过上了长辈眼中的“体面生活”。但只有我的心里明白,这个世界不是这个样子的——

就在年少时某个春末夏初的夜晚,我曾在一名幽灵少女的带领下,不小心看见过世界的“另一面”。虽然之后我未曾向任何人提起,但我始终深信:我所在的世界,远远比现在正经历的这“两点一线”的生活还要鲜活得多。

偶尔,我会不由得停下公务,望着窗外飘过的云朵投在地面上的影子发呆。当风悠悠吹起窗边的布帘的时候,当热咖啡在杯口慢慢形成水雾的时候,当在昏暗的房间独自看着荧幕中跳动的画面的时候,我还是会忍不住去想,是不是还有“谁”,在某个我未曾注意过的、或是已然遗忘的视角,在陪我一起默默地注视着这个世界。

 

随着年末临近,手头的工作一天天多了起来。经常是刚下发的事情还没处理完,数不清的文件与会议安排又纷至沓来,所以不得不开始愈加频繁地加班了。

今晚,这个城市开始降温了。虽说办公室还开着暖气,窗户都关得严实,但多少还是能感受到室外的冷风肆虐。我看见楼下那三名实习生裹紧大衣、有说有笑地钻上了刚靠站的公车。空无一人的办公室仍残留着外卖的饭香味,我不禁长长地打了个哈欠,料想是饱饭后睡意袭来。我回到工位,打算在继续工作前先趴着小憩一会儿。

不知睡了多久,大脑还没完全从梦中清醒,恍惚中,似乎听见了一把清脆的女声。

“这样睡觉,可是会感冒的哦。”那声音轻轻地在我耳边说道。

忽的像是有一片雪花轻轻地落在我的脸颊上。仿佛感觉到,那片晶状物上的六个花瓣一点一滴融化在了皮肤纤细绒毛的中央,直到那凉爽晶莹的触感变得不再分明。

我猛地惊醒、连忙坐起身。而在此刻,抱着一盆开得正灿烂的花朵的少女,正站在我的身边。她的脸上满是得意的神情,宛如她的恶作剧又一次得逞一般。

“米拉,你怎么在这里?”我满脸诧异地看着对方。

“是谁规定幽灵只能呆在自己家里啦?”对方满意地说,“我来看你了哦。不过,你头上那个「米拉」有够死灰死灰的。这样不爱惜自己可不行——明明是那么好看的花。”

“可刚刚那是……”我不由自主地抚摸着自己的脸颊。

“你猜——是什么呢?”

“想不出来。冰冰凉凉的,就像是……”

“‘雪糕’?”对方莞尔一笑,说:“回答‘冰冰凉凉’的可不行啊。少女的吻可是很炽热的。”

我突然意识到了什么,既惊讶又疑惑:“那时你不是已经……”

“不错不错,「粉」起来了哦!”

在未曾注意到的时候,窗外已经漫天飘起了雪花。就在满世界银白色的背景下,抱着花盆的少女把另一只手叉在腰间,抬起下巴,俏皮地注视着我:“如何。趁十二点的钟声还没敲响,有没有兴趣再来一场‘舞会’呀?我的‘呼噜呼噜王子’?”

我见状欣然起身,笑着,向着面前的少女诚挚地弯下腰去。

“当然,实在是我的荣幸——我的……月下香公主。”

 


外一篇

再见,公主》。

Docker 部署备忘录

2025-07-28 18:27:00

记录一下在用或用过的一些 Docker 程序,方便下次需要的时候复制粘贴。

这里把重复使用的变量写成了 .env 配置项,将其放在 compose.yml 同路径即可生效,可以在需要变更的时候批量修改。

PUID=1000
PGID=1000
TZ=Asia/Shanghai
NETWORK=caddy

另外,使用 Caddy 或 Nginx 配置反向代理时,可以直接利用 docker 内网寻址的方式获取容器地址。因此默认注释掉了端口映射,有需要的话可以自行开启。

外部网络使用以下命令创建,例如创建一个名为 caddy 的网络:

docker network create caddy

然后需要在 compose.yml 文件末尾指定这个网络,例如:

networks:
  caddy: 
    external: true

文件

h5ai

h5ai 是个我年轻的时候比较流行的 PHP 文件列表程序,现在有容器版本倒是方便了不少,因为 h5ai 需要自行安装许多 PHP 扩展。

似乎现在比较少见到大家用 h5ai 了,以前还有过内置 Dplayer 的版本,可以当作网盘用。

h5ai is a modern file indexer for HTTP web servers with focus on your files. Directories are displayed in a appealing way and browsing them is enhanced by different views, a breadcrumb and a tree overview. Initially h5ai was an acronym for HTML5 Apache Index but now it supports other web servers too.

h5ai 是一款现代化的 HTTP Web 服务器文件索引器,专注于您的文件。目录以美观的方式呈现,并通过不同的视图、面包屑导航和树形概览增强了浏览体验。h5ai 最初是 HTML5 Apache Index 的缩写,但现在也支持其他 Web 服务器。

另外 h5ai 还有很多可自定义的配置项,有需要请参考:《H5AI 部署、配置与美化》。

services:

  h5ai:
    image: awesometic/h5ai
    container_name: h5ai
    # ports:
    #   - 80:80
    environment:
      - TZ=${TZ}
      - PUID=${PUID}
      - PGID=${PGID}
    volumes:
      - ./h5ai:/config
      - /your/shared/dir:/h5ai
    restart: unless-stopped
    networks:
      - ${NETWORK}

File Browser

File Browser 要比 h5ai 强悍许多,不仅可以直接编辑文件、创建分享链接,还支持多用户。功能上更接近「个人云盘」,因此可以当作轻量云盘使用。

File Browser provides a file managing interface within a specified directory and it can be used to upload, delete, preview and edit your files. It is a create-your-own-cloud-kind of software where you can just install it on your server, direct it to a path and access your files through a nice web interface.

File Browser 可以在指定目录中提供文件管理界面,支持上传、删除、预览和编辑文件。它是一款类似于 “个人云盘” 的软件,您只需将其安装在服务器上,指定路径,然后即可通过美观的 Web 界面访问文件。

我这里的配置和官方有些许不同。官方需要挂载两处文件,而我统一挂载为 /config

services:

  filebrowser:
    image: filebrowser/filebrowser:s6
    container_name: filebrowser
    volumes:
      - ./config:/config
      - ./srv:/srv
    environment:
      - TZ=${TZ}
      - PUID=${PUID}
      - PGID=${PGID}
    # ports:
    #   - "80:80"
    restart: unless-stopped
    networks:
      - ${NETWORK}

只是需要在 /config 文件夹中手动创建两个文件。一个是数据库文件 filebrowser.db ,另一个则是 settings.json

{
  "port": 80,
  "baseURL": "",
  "address": "",
  "log": "stdout",
  "database": "/config/filebrowser.db",
  "root": "/srv"
} 

如果对 root 根目录的路径有自定义的需求,可以在 settings.json 中修改,只是相应地也要修改挂载的路径,不要忘了。

Cloudreve

Cloudreve 和前面俩不一样,是真正意义上的云盘,可以通过多种存储策略构建兼备自用或公用的网盘服务。存在付费功能,但个人版够用。

  • ☁️ 支持本机、从机、七牛、阿里云 OSS、腾讯云 COS、华为云 OBS、又拍云、OneDrive (包括世纪互联版) 、S3 兼容协议 作为存储端
  • 📤 上传/下载 支持客户端直传,支持下载限速
  • 💾 可对接 Aria2 离线下载,可使用多个从机节点分担下载任务
  • 📚 在线 压缩/解压缩、多文件打包下载
  • 💻 覆盖全部存储策略的 WebDAV 协议支持
  • 👩‍👧‍👦 多用户、用户组、多存储策略
  • 🔗 创建文件、目录的分享链接,可设定自动过期
  • 🌈 ... ...

在没有配置数据库的情况下,Cloudreve 会使用 SQLite 存储数据。但 SQLite 不支持高并发,官方建议在生产环境中使用其他数据库。

同时,Cloudreve 支持使用 Redis 作为键值缓存,但 Redis 不是必须的,在没有配置 Redis 的情况下,Cloudreve 会使用内存缓存,并在正常退出前将内存缓存的数据持久化到 cache_persist.bin 文件中。

另外,虽然官方文档写着「其中默认包含并启用了 Aria2」,但我没找到 Aria2 相关的配置,比如后台秘钥。

因此,下面的 compose.yml 增加了 Aria2 容器,配置了 PostgreSQL 数据库,并将 Cloudreve 和 Aria2 的下载目录映射至同一路径。

services:
  cloudreve:
    image: cloudreve/cloudreve:latest
    container_name: cloudreve
    depends_on:
      - postgresql
      - redis
    # ports:
    #   - 5212:5212
    environment:
      - CR_CONF_Database.Type=postgres
      - CR_CONF_Database.Host=postgresql
      - CR_CONF_Database.User=cloudreve
      - CR_CONF_Database.Name=cloudreve
      - CR_CONF_Database.Port=5432
      - CR_CONF_Redis.Server=redis:6379
    volumes:
      - ./cloudreve:/cloudreve/data
      - ./downloads:/downloads
    restart: unless-stopped
    networks:
      - ${NETWORK}


  postgresql:
    image: postgres:latest
    container_name: postgresql
    environment:
      - POSTGRES_USER=cloudreve
      - POSTGRES_DB=cloudreve
      - POSTGRES_HOST_AUTH_METHOD=trust
    volumes:
      - ./postgresql:/var/lib/postgresql/data
    restart: unless-stopped
    networks:
      - ${NETWORK}
      
  aria2:
    image: p3terx/aria2-pro
    container_name: aria2
    # ports:
    #   - 6888:6888
    #   - 6888:6888/udp
    volumes:
      - ./downloads:/downloads
      - ./aria2:/config
    environment:
      - TZ=${TZ}
      - PUID=${PUID}
      - PGID=${PGID}
      - RPC_SECRET=your_secret_here
    restart: unless-stopped
    networks:
      - ${NETWORK}
      

  redis:
    image: redis:latest
    container_name: redis
    volumes:
      - ./redis:/data
    restart: unless-stopped
    networks:
      - ${NETWORK}   

Zfile

ZFile 是一个基于 Java 的在线网盘程序,功能上大体和 Cloudreve 类似,不过不支持离线下载。

  • 支持 S3 协议, 阿里云 OSS, FTP, 华为云 OBS, 本地存储, MINIO, OneDrive 国际/家庭/个人版/世纪互联版/SharePoint, , 七牛云 KODO, 腾讯云 COS, 又拍云 USS.
  • 支持文件操作:上传、下载、重命名、删除、新建文件夹等
  • 图片画廊模式,且支持自定义列数,间距等信息。
  • 文件/文件夹加密、隐藏
  • 目录 readme 文档
  • 支持在线浏览文本文件、PDF、图片、音乐、视频(支持 mp4、flv、hls)
  • 文件直链和二维码
  • 同时挂载多个存储策略
services:

  zfile:
    image: zhaojun1998/zfile:latest
    # ports:
    #   - 8080:8080
    volumes:
      - ./db:/root/.zfile-v4/db
      - ./logs:/root/.zfile-v4/logs
    restart: unless-stopped
    container_name: zfile
    networks:
      - ${NETWORK}

Caddy

Caddy 也能快速搭建一个文件管理列表出来,对于只是浏览和下载来说非常方便,界面也比较美观。

只需要在反代的时候加上 file_server browse,例如:

example.com {
    encode zstd gzip
    root * /home/wwwroot/file
    file_server browse
}

同步

Syncthing

Syncthing 是一个全平台的同步工具,可以在两台或多台设备之间即时同步文件,保证文件的一致性。

Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers. We strive to fulfill the goals below. The goals are listed in order of importance, the most important ones first.

Syncthing 是一款持续文件同步程序 。它可以在两台或多台计算机之间同步文件。我们致力于实现以下目标。这些目标按重要性排序,最重要的放在最前面。

这里使用的是 LinuxServer.io⁠ 的镜像。另外由于 Syncthing 连接的需求,需要映射 22000 端口。

services:
  syncthing:
    image: linuxserver/syncthing:latest
    container_name: syncthing
    # hostname: syncthing #optional
    environment:
      - TZ=${TZ}
      - PUID=${PUID}
      - PGID=${PGID}
    volumes:
      - ./config:/config
      - ./data:/data
    ports:
    #   - 8384:8384
      - 22000:22000/tcp
      - 22000:22000/udp
      - 21027:21027/udp
    restart: unless-stopped
    networks:
      - ${NETWORK} 

监控

Uptime Kuma

Uptime Kuma 是一款易于使用的自托管监控工具。

Github:https://github.com/louislam/uptime-kuma

  • Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / HTTP(s) Json Query / Ping / DNS Record / Push / Steam Game Server / Docker Containers

    监控 HTTP(s) / TCP / HTTP(s) 关键字 / HTTP(s) Json 查询 / Ping / DNS 记录 / 推送 / Steam 游戏服务器 / Docker 容器的正常运行时间

  • Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and 90+ notification services, click here for the full list
    通过 Telegram、Discord、Gotify、Slack、Pushover、电子邮件 (SMTP) 和 90 多种通知服务发送通知
  • Multi Languages

    多语言

  • Multiple status pages

    多个状态页面

不过 uptime-kuma 包含 Chromium,不仅占空间,还吃内存,需要一定配置的设备运行。

services:

  uptimekuma:
    image: louislam/uptime-kuma:beta
    container_name: uptimekuma
    volumes:
      - ./uptimekuma:/app/data
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=${TZ}
    restart: unless-stopped
    networks:
      - ${NETWORK} 

Nezha

开源、轻量、易用的服务器监控与运维工具。

一键安装:支持一键安装面板和监控服务,操作便捷。兼容主流系统,包括 Linux、Windows、macOS、OpenWRT 以及群晖。

实时监控:支持同时监控多个服务器的状态,提供历史网络状态和延迟图表,监控网页、端口可用性和 SSL 证书状态。支持故障和流量等状态告警,可通过 Telegram、邮件、微信等多种方式提醒。

轻松运维:提供 API 获取服务器状态,支持WebSSH、DDNS 和流量监控。可设置定时和触发任务,并批量执行服务器任务。

可以不用脚本安装面板端:

  nezha:
    image: ghcr.io/nezhahq/nezha
    container_name: nezha
    volumes:
      - ./nezha:/dashboard/data
    environment:
      - TZ=${TZ}
    # ports:
    #   - "8008:8008"
    restart: unless-stopped
    networks:
      - ${NETWORK} 

参考官方文档使用 Nginx 反代即可用 443 端口连接。需要在面板后台设置中勾选「Agent 使用 TLS 连接」,「Agent对接地址」填写「域名:端口」,例如 example.com:443 ,然后就可以在安装监控端的时候正常连接了。

信息

RSSTT

基于 Telegram 机器人创建的 RSS 通知。利用通讯工具的即时属性,可以用来订阅某些重要的通知。

Github:https://github.com/Rongronggg9/RSS-to-Telegram-Bot

这里只列出了必须的环境变量,其他变量如有需求请自行参考官方文档。

services:

  rsstt:
    image: rongronggg9/rss-to-telegram:dev  # stable image: rongronggg9/rss-to-telegram
    container_name: rsstt
    volumes:
      - ./data:/app/config
    environment:
      - TOKEN=xxxx  #访问 @BotFather 获取
      - MANAGER=xxxx  # 访问 @userinfobot 获取,使用;分隔多用户。例如 1234567890;987654321
# ↓------ To disable sending via Telegraph, comment out this area ------↓ #
# 访问以下链接获取 Telegraph API access tokens: https://api.telegra.ph/createAccount?short_name=RSStT&author_name=Generated%20by%20RSStT&author_url=https%3A%2F%2Fgithub.com%2FRongronggg9%2FRSS-to-Telegram-Bot
# 刷新页面即可获取新的 token,如果你有一堆订阅,请至少使用5个token 
#                            ↓ Replace with your access tokens ↓
      - TELEGRAPH_TOKEN=
        xxx
        xxx
      - MULTIUSER=1  #多用户模式,0关闭,1启用,默认为1
      - TZ=${TZ}
    restart: unless-stopped
    networks:
      - ${NETWORK} 

RSSHub

万物皆可 RSS,世界上最大的 RSS 网络。

由于配置了 browserless,因此 RSSHub 非常吃配置,需要部署在稍微给力点的机子上。

services:

  rsshub:
    image: diygod/rsshub:latest
    container_name: rsshub
    # ports:
    #   - '1200:1200'
    environment:
      - NODE_ENV=production
      - CACHE_TYPE=redis
      - REDIS_URL=redis://redis:6379/
      # - PIXIV_REFRESHTOKEN=
      # - PIXIV_IMG_PROXY=
      # - PIXIV_BYPASS_DOH=https://dns.google/dns-query
      # - PIXIV_BYPASS_CDN=true
      - PUPPETEER_WS_ENDPOINT=ws://browserless:3000  # marked
      # - PROXY_URI='socks5h://warp-socks:9091'
    restart: unless-stopped
    depends_on:
    #   - redis
      - browserless
    networks:
      - ${NETWORK} 

  browserless:  # marked
    image: browserless/chrome  # marked
    container_name: browserless
    restart: unless-stopped  # marked
    ulimits:  # marked
      core:  # marked
        hard: 0  # marked
        soft: 0  # marked
    networks:
      - ${NETWORK} 

FreshRSS

自托管 RSS 信息流聚合器。

这里使用的是 LinuxServer.io⁠ 的镜像,另外配置了两个插件。时间久远我也不记得这俩咋用了,如有需要请自行研究。

services:

  freshrss:
    image: linuxserver/freshrss:latest
    container_name: freshrss
    # ports:
    #   - 80:80
    volumes:
      - ./config:/config
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
      - CRON_MIN=*/20
    logging:
      options:
        max-size: 10m
    restart: unless-stopped
    networks:
      - ${NETWORK} 

  read:
    image: phpdockerio/readability-js-server
    container_name: read
    restart: unless-stopped
    networks:
      - ${NETWORK} 

  merc:
    image: wangqiru/mercury-parser-api
    container_name: merc
    restart: unless-stopped
    networks:
      - ${NETWORK} 

工具

Vaultwarden

自托管密码管理器。

services:

  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    volumes:
      - ./data:/data
    environment:
      - WEBSOCKET_ENABLED=true
      # - ADMIN_TOKEN=
      - SMTP_HOST=
      - SMTP_FROM=
      - SMTP_PORT=
      - SMTP_SECURITY=starttls
      - SMTP_USERNAME=
      - SMTP_PASSWORD=
      - SMTP_AUTH_MECHANISM="Login"
      - DOMAIN=https://
      - SIGNUPS_ALLOWED=false
    restart: unless-stopped
    networks:
      - ${NETWORK} 

Nazurin

帮助你从各种网站收集 ACG 插画的 Telegram 机器人。

这个工具对于我这种收图党来说非常好用,有空水一下用法。

services:
  nazurin:
    image: ghcr.io/y-young/nazurin:latest
    container_name: nazurin
    user: ${PUID}:${PGID}
    # build: .
    env_file:
      - ".env"
    volumes:
      - ./data:/app/data
      - ./Nazurin:/Nazurin
    # ports:
    #   - "80"
    environment:
      - TZ=${TZ}
    restart: unless-stopped
    networks:
      - ${NETWORK} 

由于包含了所有存储配置,默认的环境变量非常长。如果你像我一样也将图片保存在本地,且服务不想对外,可以试试这么写:

# 访问以下链接获取更多信息:https://nazurin.readthedocs.io/getting-started/configuration/

# ---------- Required ----------
# Telegram bot token
TOKEN = xx

# 默认选项(production)使用 Webhook 模式,你可以设置为 development 以使用轮询模式。
ENV = development

# 发送到 Telegram 服务器的 Webhook URL,机器人的服务器应能通过此 URL 访问,应以 / 结尾,例如 https://xxx.fly.dev/。
# 如使用 Webhook 模式则必需
# WEBHOOK_URL = 

# 要绑定到的主机地址,默认为 0.0.0.0。使用反向代理时请设置为 127.0.0.1。
# 如使用 Webhook 模式则必需
HOST = 0.0.0.0

# Webhook 端口,使用 Heroku 时自动设定。
# 如使用 Webhook 模式则必需
PORT = 8080

# 存储类型
STORAGE = Local

# 数据库类型
DATABASE = Local

# 管理员用户的 Telegram 用户 ID(不是用户名),机器人的一些功能仅限管理员用户使用。
ADMIN_ID = xx

# ---------- Optional ----------
# 本地或远程存储的目录路径,如不存在则自动创建。
STORAGE_DIR = /Nazurin

# 同时下载的最大文件数。
MAX_PARALLEL_DOWNLOAD = 6

# 临时目录清理的间隔时间,单位为天。每次清理时将删除访问时间在一天前的文件。设置为 0 时将禁用自动清理。
CLEANUP_INTERVAL = 7

# 图片收藏成功后的反馈方式,可选值如下:
# reply:回复原消息
# reaction: 在原消息上添加表情回应
# both:回复并添加表情回应
FEEDBACK_TYPE = reaction

# ---------- 站点 ----------

# ----- Bilibili -----
# 存储路径
BILIBILI_FILE_PATH = Bilibili

# 文件名称
# BILIBILI_FILE_NAME = {id_str}_{index} - {user[name]}({user[mid]}) 


# ----- Pixiv 配置项-----
# Refresh token
PIXIV_TOKEN = xx

# 浏览作品时的图片代理,用于帮助 Telegram 服务器更稳定地获取图片,下载作品时仍然会使用 Pixiv 服务器。
# PIXIV_MIRROR = 

# 标签的显示语言,如果没有可用翻译则使用日语原文。默认使用原文,配置值将设置在 HTTP Header 的 Accept-Language 选项中。例如:zh-CN, en-US
PIXIV_TRANSLATION = zh-CN

# 收藏可见性 (public/private)
# PIXIV_BOOKMARK_PRIVACY = public

# 存储路径
PIXIV_FILE_PATH = Pixiv/{user[id]}

# 文件名称
PIXIV_FILE_NAME = {filename}

# ----- Twitter 配置项-----
# 要使用的 API,web 或 syndication。Web API 来自网页应用,而 Syndication API 来自 https://publish.twitter.com。
# Syndication API 无法获取被标记为敏感内容的推文,但如果设置了 TWITTER_AUTH_TOKEN,则可以通过 Web API 获取。
# 当 Web API 不可用时,你可以选择切换到 Syndication API。
TWITTER_API = web

# Web API 的授权令牌
TWITTER_AUTH_TOKEN = xx

# 存储路径
TWITTER_FILE_PATH = Twitter

# 文件名称
TWITTER_FILE_NAME = {id_str}_{index} - {user[name]}({user[id_str]})

其他

gh-proxy-go

gh-proxy 的 Go 语言版本。

Github:https://github.com/Xm798/gh-proxy-go

默认的配置文件 config.json 支持自定义以下选项,挂载 /app/config 即可:

  • host: 默认 "0.0.0.0",服务器监听地址
  • port: 默认 8080,服务器监听端口
  • whiteList: 允许访问的 GitHub 用户/组织列表,配置后将拒绝所有未在列表中的请求
  • blackList: 禁止访问的 GitHub 用户/组织列表,配置后将拒绝所有在列表中的请求
  • forceEnUSForRaw: 默认 false,是否强制使用 en-US 语言访问 raw.githubusercontent.com,以规避中文用户可能的 429 错误
  • sizeLimit: 默认 10240,文件大小限制(单位:MB)

注意:hostport 配置不支持热重载,需要重启服务才能生效。其他配置项支持热重载。

services:
  ghproxy:
    image: xm798/gh-proxy-go:latest
    container_name: ghproxy
    # ports:
    #   - 8080:8080
    # volumes:
    #   - ./ghproxy:/app/config
    environment:
      - TZ=${TZ}
    restart: unless-stopped
    networks:
      - ${NETWORK} 

hubproxy

一个轻量级、高性能的多功能镜像服务。

Github:https://github.com/sky22333/hubproxy

services:

  hubproxy:
    container_name: hubproxy
    image: ghcr.io/sky22333/hubproxy
    restart: always
    # ports:
    #   - 5000:5000
    networks:
      - ${NETWORK} 

最后

还有啥等想起来再加进来。

关于 Caddy

2025-07-27 18:49:00

最近试着用了下 Caddy,自动申请证书确实非常方便,就是中文文档少了点。官方文档虽然写得很详细,社区里提问也基本有问必答,奈何都是英文。而 I english was very bad,所以这里记录一些使用过程中遇到的问题,以便以后忘了怎么用的时候,不必再跟 AI 大战三百回合。

安装

直接参考 Cyrus 佬的 docker-caddy 就行。如果需要其他模块,参照仓库内的 Dockerfile 修改一下,自己编译一个镜像。

伪静态

Typecho 是 PHP 驱动的博客程序,但可以启用伪静态以优化 URL,不过需要在 Web 服务器上处理一下。如果是 Nginx 的话,是这么写的:

try_files $uri $uri/ /index.html;

而 Caddy 可以直接通过 php_fastcgi 实现 Nginx 的 try_files 效果,不过根据官方文档对于 php_fastcgi 的解释,其实是这个指令自带了一些默认写法,包括 try_files。例如:

    @indexFiles file {
        try_files {path} {path}/index.php index.php
        try_policy first_exist_fallback
        split_path .php
    }

因此配置一个 Typecho 博客的时候,伪静态就可以直接这么写:

example.com {
    encode zstd gzip
    root * /srv/example.com
    file_server
    php_fastcgi php:9000
    header {
        -Server
        -X-Powered-By
    }
}

但是二级目录就行不通了,得手动写一下 try_files 指令。Nginx 是这么写的:

    location /blog/ {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /blog/index.php$1 last;
        }
    }

Caddy 也差不多。假设你的一级域名博客 example.com 放在了 /srv/example.com 这个文件夹中,而这个文件夹里又有个 blog 文件夹打算放另一个博客,即:

example.com {
    encode zstd gzip
    root * /srv/example.com
    file_server
    php_fastcgi php:9000
    handle /blog/* {
        try_files {path} /blog/index.php?{query}
    }
}    

注意要保证 /blog/index.php?{query} 前面的 blog 和文件夹名称一致。

然后伪静态就能正常工作了。

日志

参考《一行代码快速配置 Caddy 站点日志——复用 Caddy 配置段》,可以实现使用 Caddy 的代码段(Snippet)和占位符,为每个站点更优雅地配置日志。

但有一个问题是, 对于习惯了 Nginx 简短的一行日志的我来说,Caddy 的 JSON 日志并不优雅:

{"level":"info","ts":1753359481.0373497,"logger":"http.log.access.log19","msg":"handled request","request":{"remote_ip":"3.4.5.6","remote_port":"51262","client_ip":"1.2.3.4","proto":"HTTP/2.0","method":"GET","host":"example.com","uri":"/vcb-s","headers":{"Cf-Ipcountry":["US"],"Cdn-Loop":["cloudflare; loops=1"],"Accept":["application/rss+xml, application/rdf+xml, application/atom+xml, application/xml;q=0.9, text/xml;q=0.8, text/*;q=0.7, application/*;q=0.6"],"X-Forwarded-Proto":["https"],"Cf-Connecting-Ip":["1.2.3.4"],"If-None-Match":["\"1138a-MnD/hvrofjXPGRMPTdAYBESwO4U\""],"If-Modified-Since":["Thu, 24 Jul 2025 04:34:01 +0000"],"Cf-Ray":["96435b8e8b406fd7-IAD"],"X-Forwarded-For":["1.2.3.4"],"User-Agent":["RSStT/2.10.0 RSS Reader (+https://git.io/RSStT)"],"Accept-Encoding":["gzip, br"],"Cf-Visitor":["{\"scheme\":\"https\"}"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"example.com"}},"bytes_read":0,"user_id":"","duration":0.926949864,"size":0,"status":304,"resp_headers":{"Via":["1.1 Caddy"],"Access-Control-Allow-Methods":["GET"],"X-Content-Type-Options":["nosniff"],"Date":["Thu, 24 Jul 2025 12:18:01 GMT"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Access-Control-Allow-Origin":["example.com"],"Cache-Control":["public, max-age=300"],"Content-Type":["application/xml; charset=utf-8"],"Etag":["\"1138a-MnD/hvrofjXPGRMPTdAYBESwO4U\""],"X-Rsshub-Route":["/vcb-s"]}}

至少不是人能看的。

我只是写写博客玩,用不上这么详细的日志。一番搜索,发现 Nginx 的日志样式叫做 Common Log Format (通用日志格式),而 Caddy 有一个模块可以实现这种日志样式。可以在构建镜像的时候自己塞进去:

FROM caddy:builder AS builder

RUN apk add --no-cache tzdata

RUN xcaddy build \
    --with github.com/caddy-dns/cloudflare \
    # --with github.com/caddy-dns/dnspod \
    # --with github.com/caddy-dns/alidns \
    --with github.com/caddy-dns/tencentcloud \
    # Extended plugins
    --with github.com/mholt/caddy-dynamicdns \
    --with github.com/caddyserver/replace-response \
    # 加入日志模块
    --with github.com/caddyserver/transform-encoder

FROM caddy:latest

COPY --from=builder /usr/bin/caddy /usr/bin/caddy

然后在原日志代码段加上日志格式化配置:

(log) {
    log {
        output file /log/{args[0]}/access.log {
            roll_size 5MiB
            roll_local_time
            roll_keep 10
            roll_keep_for 2160h
        }
        format transform `{request>remote_ip} - {user_id} [{ts}] "{request>method} {request>uri} {request>proto}" {status} {size} "{request>headers>Referer>[0]}" "{request>headers>User-Agent>[0]}"` {
            time_format "2006-01-02 15:04:05"
            time_local
        }
    }
}

日志就会变成这样:

4.5.6.7 - - [2025-07-25 10:11:37] "GET / HTTP/2.0" 200 1901 "-" "Uptime-Kuma/2.0.0-beta.3"

舒服多了。

只是这个模块被官方遗弃了,官方觉得 JSON 日志好使。

CA

Caddy 默认的 CA(证书颁发机构)是 Let's Encrypt,但也支持使用其他 CA,比如 ZeroSSL。而我们还可以通过在 Caddyfile 中使用 acme_ca 指令来指定其他 CA,比如 Google。

参考《使用 acme.sh 申请 Google 的免费 SSL 证书》获取 EAB 密钥后,在 Caddyfile 顶部加入以下配置:

    acme_ca https://dv.acme-v02.api.pki.goog/directory
    acme_eab {
        key_id xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        mac_key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    }
    email [email protected]

随后添加域名,重载 Caddy 配置,尝试申请证书。

如果 Caddy 内的 /data/caddy/acme/ 文件夹出现了名为 acme/dv.acme-v02.api.pki.goog-directory 的文件夹,且该文件夹内包含上面注册 ACME 账户时使用的邮箱,即表示账户注册成功。

随后要观察 /data/caddy/certificates/ 是否文件夹出现了 dv.acme-v02.api.pki.goog-directory 文件夹。若该文件夹内部有域名证书生成,则表示证书申请成功。

文件结构大概是像这样:

data
└── caddy
    ├── acme
    │   ├── acme-v02.api.letsencrypt.org-directory
    │   │   └── users
    │   │       └── [email protected]
    │   ├── acme.zerossl.com-v2-dv90
    │   │   └── users
    │   │       └── [email protected]
    │   └── dv.acme-v02.api.pki.goog-directory
    │       └── users
    │           └── [email protected]
    ├── certificates
    │   ├── acme-v02.api.letsencrypt.org-directory
    │   │   └── example.com
    │   │       ├── example.com.crt
    │   │       ├── example.com.json
    │   │       └── example.com.key
    │   └── dv.acme-v02.api.pki.goog-directory
    │       └── example.com
    │           ├── example.com.crt
    │           ├── example.com.json
    │           └── example.com.key
    ├── instance.uuid
    ├── last_clean.json
    ├── locks
    └── ocsp

不过这个 EAB 密钥使用一次后便会自动失效,不使用也会在七天内失效。但使用 EAB 密钥注册的 ACME 帐户没有过期时间,对证书续期没有影响。

所以待 ACME 账户注册成功后,就可以注释或删除相关秘钥,仅保留 acme_ca 配置:

    acme_ca https://dv.acme-v02.api.pki.goog/directory
    email [email protected]

但使用 Google CA 除了能表明证书来自谷歌之外,没有其他优势。追求新鲜玩玩就够了,平常还是用 Let's Encrypt 或 ZeroSSL 比较合适。

再说 https://dv.acme-v02.api.pki.goog/directory 也被墙了,国内机子根本没法申请。

缓存

Caddy 并不能像 Nginx 一样在反代网站的时候配置缓存,需要手动安装一些模块。比如 cache-handler,一个分布式 HTTP 缓存模块,构建镜像的时候加上它:

FROM caddy:builder AS builder

RUN xcaddy build \
    --with github.com/caddy-dns/cloudflare \
    # --with github.com/caddy-dns/dnspod \
    --with github.com/caddy-dns/alidns \
    --with github.com/caddy-dns/tencentcloud \
    # Extended plugins
    --with github.com/mholt/caddy-dynamicdns \
    --with github.com/caddyserver/replace-response \
    # 分布式 HTTP 缓存模块
    --with github.com/caddyserver/cache-handler

FROM caddy:latest

COPY --from=builder /usr/bin/caddy /usr/bin/caddy

使用倒是很简单:

{
    cache
}

example.com {
    cache
    reverse_proxy your-app:8080
}

具体用法还是得查查相关文档,我不太会用。

但我在琢磨缓存的时候搜到了另一个模块,叫做 cdp-cache。它与 cache-handler 的区别在于,这个模块更容易理解和配置。

一样先构建镜像:

FROM caddy:builder AS builder

RUN xcaddy build \
    --with github.com/caddy-dns/cloudflare \
    --with github.com/caddy-dns/tencentcloud \
    # Extended plugins
    --with github.com/mholt/caddy-dynamicdns \
    --with github.com/caddyserver/replace-response \
    # 第三方缓存模块
    --with github.com/sillygod/cdp-cache

FROM caddy:latest

COPY --from=builder /usr/bin/caddy /usr/bin/caddy

然后在网站配置中启用:

proxy.example.com {
    reverse_proxy https://example.com
    http_cache {
        cache_type file
        path /cache
        match_path /images
        default_max_age 24h
    }
}

配置项不少,具体得参考官方文档。

我玩不来,用了一两天就删掉了。

robots.txt

如果有些网站你并不想被爬虫抓取,就可以使用 robots.txt,立下君子协定:

User-agent: *
Disallow: /

这玩意本质上就是个 txt 文本,所以可以在 Web 服务器端直接配置,例如 Nginx:

    location = /robots.txt {
        default_type text/html;
        add_header Content-Type "text/plain; charset=UTF-8";
        return 200 "User-Agent: *\nDisallow: /";
    }

Caddy 也可以这么做,直接在 Caddyfile 中加入 robot_txt 配置块:

(robots_txt) {
    respond /robots.txt 200 {
        body "User-agent: *
Disallow: /"
    }
}

然后在网站配置文件中导入该块:

example.com {
    encode zstd gzip
    root * /srv/blog
    file_server
    import robot_txt
}

IPv6

现在越来越多的服务器厂商开始支持 IPv6,我的服务器也提供了开启 IPv6 的选项。但 IPv6 其实坑不少,至少我不太会用。就比如我一昧追新开启了 IPv6 后,发现博客后台获取不到正确的访客 IP 地址,全部都是内网地址。

我甚至以为是 Nginx 的问题,查了半天,才发觉可能是 IPv6 的锅。

总之,AI 是这么解释的:

此问题的根源在于 Docker 守护进程未启用 IPv6,导致容器本身不具备原生的 IPv6 网络栈和地址。当外部 IPv6 流量通过端口映射到达宿主机时,Docker 的网络代理层(通常是 docker-proxy 进程或 iptables 规则)必须执行跨协议转发。在此过程中,它会终止原始的 TCPv6 连接,然后以 Docker 网桥的 IPv4 地址(如 172.17.0.1)为源地址,向容器的私有 IPv4 地址发起一个全新的 TCPv4 连接。最终,容器内的 Nginx 服务只能感知到这个新连接的直接来源,即作为代理的 Docker 网关,从而丢失了真实的客户端 IPv6 源地址信息。

所以,如果你的服务器也启用了 IPv6,为了让容器能正常识别来自 IPv6 的访问,请开启 Docker 的 IPv6 支持,并创建一个支持 IPv6 的 Docker 网络。

编辑 Docker 的配置文件(通常位于 /etc/docker/daemon.json),加入或合并以下内容以开启 Docker 的 IPv6 支持:

{
  "ipv6": true,
  "fixed-cidr-v6": "fd00:dead:beef::/48"
}

操作命令:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
  "ipv6": true,
  "fixed-cidr-v6": "fd00:dead:beef::/48"
}
EOF

重启 Docker 服务以应用更改:

sudo systemctl restart docker

随后创建一个支持 IPv6 的 Docker 网络:

docker network create \
  --driver bridge \
  --ipv6 \
  --subnet fd00:3939::/64 \
  caddy

再把容器加入到这个新建的 caddy 网络即可。

文件访问

在 Nginx 中通常会加上这么个配置:

    location ~ /.well-known {
        allow all;
    }

    location ~ /\. {
        deny all;
    }

前者用于允许路径 /.well-known 下内容的访问1,后者则是禁止访问以 点号开头的隐藏文件(比如 .git.htaccess.env 等)。

Caddy 默认会对 /.well-known/acme-challenge 这类路径自动处理,而对于以点开头的隐藏文件,使用 @hiddenFiles 匹配所有路径以 / + 点号 开头的请求,再 respond 返回 HTTP 403 禁止访问即可。

@hiddenFiles {
    path_regexp hiddenFiles ^/\..*
}
respond @hiddenFiles 403

塞到网站配置中就能用了:

example.com {
    encode zstd gzip
    root * /srv/blog
    file_server

    @hiddenFiles {
        path_regexp hiddenFiles ^/\..*
    }
    respond @hiddenFiles 403
}

  1. 这是一个标准路径,通常用来放置一些公开的、需要被外部访问的文件或信息,比如 Let's Encrypt 证书验证文件(ACME Challenge)、安全政策文件(如 security.txt)、其他协议定义的公开信息文件。

我从来没有觉得看《Ave Mujica》快乐过

2025-07-15 18:52:00

这次也尝试水一下今年看过的一月番剧的简单吐槽。

BanG Dream! Ave Mujica

还记得两年前的7月,那时《BanG Dream! It's MyGO!!!!!》正热火朝天,可惜我本就对《BanG Dream!》系列一点都不感兴趣,更不用说这《MyGO!!!!!》了。什么「重女」 ,什么「地雷」,通通与我毫无干系。我只是因为刷到了泛式的视频,再加上大家的口口相传,闲来无事才想着看一两集试试水的。至于用一个下午的时间一口气看到了 10 话,完全是意料之外。虽然不得不承认这种欲罢不能的感觉十分奇妙,就像是便秘了 10 天一口气排干净那般畅快。以至于我不禁怀疑是不是年龄来到了 30 岁之后,连追番取向都发生了改变。

总之,正是因为《MyGO!!!!!》,我才对这类题材番剧的刻板印象有所改观,继而能接受除《轻音少女》和《孤独摇滚》以外的乐队番。后来我又看了《夜晚的水母不会游泳》和《少女乐队的呐喊》,以及《MyGO!!!!!》的续篇:《BanG Dream! Ave Mujica》。

在《MyGO!!!!!》还在热映的时候我便已经非常好奇,丰川祥子退出 CRYCHIC 的原因能否得到完美的解释,三角初华对祥子的不离不弃又是出自何种原因,高松灯和祥子是否能够再续前缘……当然最重要的,还是《MyGO!!!!!》最后一集登台的 Ave Mujica 乐队,会为这个系列带来一段如何「黑深残」的故事。而现在,距离动画完结已经过去了三个多月,我的疑惑也确实得到了「完美」的解答。

祥子退队的原因不难解释。一直接受精英教育的她在经历母亲离世、父亲因故被逐出家门等等一系列变故后,经济和心境上都陷入了空前的困境。曾经优渥的生活和如今挤在三坪小房间里的窘境带来的反差,她已经无法再像往日一样游闲地同乐队伙伴畅谈音乐理想。白天上学、晚上兼职、回家还要面对父亲的冷暴力。这突如其来的一切使她迫不得已选择用最极端、最决绝的方式来斩断过去的生活,包括与 CRYCHIC 的联系。

这也许是她面对巨大生活压力和内心挣扎的一种扭曲的自我保护机制。祥子一直以来都是一个骄傲且自尊心极强的人,即便身边知情的朋友愿意提供帮助,比如比如睦、初华——甚至是下跪的素世,她还是选择独自承受一切,不愿将自己软弱的一面示人。

只不过祥子家庭上的变故早在《MyGO!!!!!》中就已见端倪,多少能从剧情上看出一些猫腻,《Ave Mujica》仅仅是将这些背后的故事搬到台面上了而已。我本以为会有其他出乎意料的解释,没想到是如此现实的原因。于是我又有了新的困惑:既然祥子是因为自身原因才从 CRYCHIC 退队的,那睦为什么要说出「我从来没有觉得玩乐队开心过」这句话呢?

彼时的睦作为配角戏份并不多,她带给观众的一直都是沉默寡言、情绪不外露的文静形象。即便她的艺人家庭背景有稍微展露,也从未提到过她有演戏的才能。反倒是她的「无口」性格可能是由于缺少父母的陪伴、生活氛围过分压抑等家庭因素所导致的。如果连她都觉得在 CRYCHIC 的活动十分压抑,那乐队内部可能早已病入膏肓,分崩离析自然是迟早的事。

单凭这些,我还是觉得无法直接将睦的言行同「演技」挂钩,可编剧就是这么做了。在《Ave Mujica》中我们可以清楚地得知,由于受到艺人家庭的影响,儿童时期的睦就已经表现出远超常人理解的演技天赋。她可以在随时随刻转换情绪,自由地将大家希望看到的一面通过「演技」展示出来。

没有特别复杂的原因,睦就是为了袒护突然退队的祥子,才故意演了一出「好戏」的,只是这么解释明显背离了《MyGO!!!!!》时睦的人设,所以为了合理化这一行为,编剧还强行安排上所谓「双重人格」的设定,以便让一切设定合理自洽。

只是如此一来,CRYCHIC 解散的「病根」就显得有些荒谬了。如果一切都是睦为了给突然退队的祥子而演的一场戏,如果《MyGO!!!!!》中睦的言行完全都是演技,那么 CRYCHIC 的解散就不再是成员之间的真实矛盾,而更像一场人为的闹剧。高松灯所有的挣扎和成长,就都建立在了这样一个虚假的基石之上。

这么做除了把睦的角色搞得更加面目全非、给本就雪上加霜的剧情再浇一盆冷水、使粉丝失望、让路人贻笑大方以外,没有其他意义。

这还不算恶心人,《Ave Mujica》对初华角色的补全,是另一层面的匪夷所思。初华在《MyGO!!!!!》中虽然戏份不多,也算是比较重要的角色。不仅在祥子失落的时候陪伴着她、给予她无微不至的关怀,还在祥子提议组建新乐队的时候积极参与——这是一种近乎无条件的忠诚与爱意。我本以为会深入探讨她与祥子之间那份超越表象的情感,或是揭示她为何能如此坚定地站在祥子身边。但仿佛是要扼杀这一角色一般,编剧全盘否定了初华自身的努力,将她置于一个非常低贱的地位,把她的所作所为全部归结为对祥子的「报恩」。

故事讲到这里,我已经不再关心《Ave Mujica》能否再续《MyGO!!!!!》的高光,也不在意祥子会不会在 Ave Mujica 中解开心结,更无所谓「黑深残」会发展成什么样的结局。因为真正在意这个「过家家乐队」生死存亡的,只有不知为何将自己绑定在 Ave Mujica 的海铃,和想借机炒红自己的瞄梦。

祥子应该好好想想自己是怎么对待素世的
祥子应该好好想想自己是怎么对待素世的

这下我是真的没有觉得看《Ave Mujica》快乐过了。

在冲绳喜欢上的女孩方言讲得太过令人困扰

去年有部叫做《北海道辣妹贼拉可爱》(以下简称《北海道辣妹》)的冬季新番,试着追了两集,主要讲述因父母工作而从东京来到北海道上学的「京爷」邂逅本地辣妹的故事。可惜剧中的辣妹既不可爱,剧情也不过是老套的「党争」——京爷被一群辣妹包围,唯一的新鲜感不过是这群辣妹来自北海道。结果就是,《北海道辣妹》压根没吸引到我不说,反而让我对此类标题带地域标签的动画产生了条件反射式的排斥。于是在看到《在冲绳喜欢上的女孩方言讲得太过令人困扰》(以下简称《冲绳妹》)的时候,才直接给它打上了「烂片预定」的标签。幸亏忙里偷闲看了两集,才没有错过这部带有浓厚地域文化的恋爱喜剧。

虽然《冲绳妹》也是以东京男主角跟随父亲转学到小岛冲绳恋上本地黑皮妹而展开的故事,但和《北海道辣妹》有本质上的不同,《冲绳妹》的故事核心在于介绍冲绳独特的地方风俗和民族文化。诙谐的单元叙事结构加上可爱的双女主,通过角色日常生活的方方面面以及各种小细节,配合穿插的各种 neta,自然地融入那些冲绳本地人习以为常、但是外来人从没接触过的梗和笑料,使得这部「地方宣传片」在观感上极为舒适。

不过我最关注的当然还是恋爱。男主角「中村照秋」在开学第一天就被冲绳土著「喜屋武飞夏」搭话,阳光开朗的飞夏在他眼里闪闪发光,照秋因此对飞夏一见钟情。但照秋听不懂冲绳方言,飞夏也不会说标准日语。两难之际,飞夏的闺蜜「比嘉夏菜」及时站了出来,充当翻译将飞夏说的话转述给了照秋。此后每逢飞夏与照秋对话,夏菜都在场担任双方的「传话筒」。

其实早在男主初次来到冲绳的时候就遇见了夏菜,夏菜因为男主小小的帮助而对他暗生情愫,在见到照秋转学来冲绳更是高兴的不行。没错!我爱看的就是这种三角结构!照秋希望能多了解些冲绳文化好接近飞夏,大大咧咧的飞夏对此浑然不知,于是三角的重心就集中到了内敛的夏菜身上。那压抑不住的情感常常溢于言表,厚重的刘海和假装冷静的外表下遮掩不住的是只有男主才发现不了的炽热少女心。尤其是黝黑的皮肤透出的点点红晕,配合青春期少女娇羞的小心思,冲着这画面我能吃下三碗饭!

续集

其他续集就不知道怎么写了。这个一月还看了《超超超超超喜欢你的100个女朋友 第二季》,《我独自升级》两季,加上上面两部,总共看了4部新番。《100女友》可能没有第一季那么让人眼前一亮,却也是非常棒的后宫作品;《我独自升级》属于快节奏的装逼系列,因为 A1 制作给力,我甚至把漫画也看了个七七八八,可能没什么营养,但胜在快乐。

备用机的养成方法

2025-06-18 16:38:00

备用机」,顾名思义,是指以备不时之需的手机。它可以是一部只能收发短信、拨打电话、玩玩贪吃蛇的诺基亚,也可以是陪你走过青春岁月的老朋友小米 6;它可以是功能齐全但电池健康度只剩 50%、Face ID 罢工的 iPhone X,也可以是一部崭新出厂、配备 1TB 存储的豪华版小米 15S Pro。

但又不可与「副机」混为一谈。有些人本就习惯双持,一部工作用,一部生活用,或者 iPhone 和 Android 各一部。这类情况当属日常配置,不能算作备用机的范畴。

如果你正好有一部闲置的手机,那它自然可以充当「备用机」的角色。可更多时候,备用机是自己或家人换下来的老旧机型。就比如我目前使用的是一部搭载火龙 888 处理器、由雷军亲手焊接的 迟迟没有烧掉 WiFi 的小米 11。

可假如你就只有一部手机,需要另一部手机备用,该怎么选择才合适呢?或者说,合格的备用机该具备哪些品质,才能担起「临危受命」的重任呢?

挑选

根据个人财力和需求上的不同,备用机的选择自然是五花八门。对我来说,最实用的备用机必须是一部能解锁 Bootloader 的安卓机器。因为解锁之后,它就可以做到:

  • 获取 ROOT 权限:任意安装各种各样功能强悍的应用,Magisk、Shizuku、Lsposed、GKD……
  • 掌控应用权限:比手机管家更激进的权限管控,再也不怕 APP 到处拉屎;
  • 精简系统应用:无用应用全部冻结,垃圾软件统统干掉。

甚至还能当一台 Always Online 的小型 Linux 终端。如果机身存储空间够大,把它当作影音服务器也不是不可能1。就是这么玩就有点太硬核了,毕竟不是所有人都知道「解锁」是个什么概念,也不是所有人都会这么压榨手机,更不会把心思都花在备用机上。

因此我们还是回到常规角度,从备用机的自身建设和基础功能等方面出发。我认为有以下几点:

  • 稳定

    备用机,说白了就是需要的时候能派上用场,其余的时间都在隐秘的角落独自落泪。因此哪怕不是最新最强,也得是台「关键时刻不掉链子」的机器:能正常开机、联网,不会间歇性重启,就已经赢了一半;若是有还算能看的流畅度,那就赢下了另一半。

    如果还能玩玩原神星铁,那就可以顺理成章地坐上副机的宝座。

  • 续航

    虽然大部分时间都躺在抽屉里吃灰,但真到要用的时候,总不能刚点亮屏幕就提醒你「电量不足,还有 30S 关机」吧?因此电池健康度方面最好别太离谱。

    可话又说回来,如果你跟我一样,愿意让备用机全年 365 天 24 小时插着电,那电池拉胯也就不是什么问题了。我的小米 11 尽管电池健康已经跌到 60%,日常使用都力不从心,可它早已退居二线,干脆当成「插电设备」使,也算是变废为宝,顺便还能省下一笔换电池的钱。

  • 便宜

    毕竟是备用机,不追求极致体验,但求在预算范围内堪用。

    但如果你的预算高到了一定程度,稳定和续航就不是问题了。所谓「三千预算进卡吧,加钱加到九万八」,在手机这边也是相同的道理。

显然,功能机在这方面有天生的优势,但只能打电话发短信的话,这备用机未免太鸡肋了点。另外,iPhone 也不作详细推荐。虽然每一代 iPhone 都具备成为优秀备用机的潜力,但其选择逻辑和安卓不尽相同。简单来说,如果需要双卡双待,选择 iPhone 11 或更新的 国行 版本;如果偏爱小屏,iPhone 13 mini 是个不错的选择。再加上 iOS 系统的封闭性,其可定制和折腾的空间相对较小,iPhone 的使用寿命也比 Android 要长得多。因此,本文的备用机选择主要还是针对安卓设备展开。

所以,在处理器方面,尽量避开某些采用高发热处理器的设备,例如 骁龙 888 和 骁龙 8 Gen 1。因此,可以优先考虑 2022 年之后发布、且搭载了后续型号处理器的手机。如果考虑更早发布的旧款型号,骁龙 865 是个不错的选择;假如预算更低,骁龙 845 也可以考虑,但性能和功耗表现会逊色一些。此外,联发科近两年的天玑系列,如天玑 8100、天玑 9000 等,也是公认的「口碑之选」。

对于操作系统,国内安卓设备无非就是 HMOV。是选择华为、小米、OPPO 还是 vivo,主要取决于个人偏好。根据我的 个人经验,华为(包括荣耀)的内置广告和预装软件最多,OPPO(我只用过一加)也有不少广告,且不支持关闭;小米虽然系统广告大多可以手动关闭,但其 HyperOS(或 MIUI)有时会遇到一些难以预料的小问题。

至于屏幕、摄像头、存储容量等等就看个人需求了。实在拿不定主意,再买一台和主力机一模一样的机器也不是不行。

养成

OK。假设你已经按照上面的思路,挑选到了一台心仪的备用机。但这还只是开始,接下来该才是本文的重点:备用机的养成

关闭系统更新

就像 Windows 会在不经意间自动更新你的电脑,手机也会悄悄地自动更新系统。并且无论是全新设备还是二手机器,系统更新带来的不一定都是正向优化,尤其是跨 Android 版本的系统更新。因此,新到手的设备要做的第一步,便是关闭系统自动更新。

除了关闭自动更新,还可以在开发者选项里彻底关闭【系统自动更新】的后台服务,以绝后患。

当然,已经退出系统维护名单的设备不存在这方面的烦恼。

卸载无用程序

不像 iPhone 预装的都是果子自家的 APP,安卓设备都会预装一些不管你用不用得上的第三方 APP。这些 APP 如果从来没打开过还好,一旦启动,即便只是失手点开从未浏览过任何内容,它也会孜孜不倦地向你推送通知——大多数都是垃圾消息。

所以这第二步,就是一定及时要卸载手机中不使用的 APP。

例如,各家都可能预装的微信支付宝抖音,如果不使用的话请及时卸载。

ColorOS 预装
ColorOS 预装

锁屏画报也卸载掉,没什么大用还费电。

输入法可能预装了不止一种,可能会同时预装搜狗、百度乃至讯飞。选择你习惯使用的,其余的都卸载掉。

地图也可能预装了不止一个。想来备用机也没有查地图的必要,择一或全部卸载。

若是既无法卸载也不能停用,那么只能可以考虑禁用相关权限了。

关闭系统广告

卸载完 APP 还不够,系统内置的广告和内容推荐才是养成的大头。

系统个性化广告/推荐:在系统设置里搜索「广告」或「推荐」,找到「个性化广告服务」、「用户体验计划」、「智能服务」等选项,全部关闭。

小米支持一键关闭部分系统广告。

ColorOS 只支持关闭跟踪标识,并不支持关闭广告。

天气/日历/下载管理器/手机管家:进入这些 APP 的设置,关闭里面的「内容推广」或「信息流」选项。

ColorOS 需要在各 APP 的「隐私」设置中关闭推荐。

小米的广告开关则在「用户体验计划」或「信息流」中。

负一屏(智能助手):负一屏也是广告重灾区。如果用得到,就只保留需要的功能;如果不用,可以直接关闭这个功能。

小米
小米
一加
一加

文件夹推荐:部分系统会在桌面文件夹里推荐应用,需要长按文件夹,关闭「今日推荐」。

小米
小米

应用商店:进入手机自带的应用商店或软件中心,在「设置」里关闭所有的「消息推送」和「内容推荐」。

ColorOS
ColorOS
ColorOS
ColorOS
可惜应用商店不能卸载也不能停用,不然卸载了之最为妥当。然后装个酷安。至少酷安不会推送广告。

浏览器:系统自带浏览器也是广告重灾区,一般不可禁用、卸载,但可以考虑禁用通知或联网权限,并用其他第三方浏览器替代。

限制应用权限

如果某些 APP 并不经常使用,那么建议限制这些应用的部分权限。

例如:

  • 自启动:除了关闭自启动,更要管理好「关联启动」,防止「一人得道,全家升天」。
  • 后台活动:进入每个应用的「电池」或「电量」设置,将不常用的 APP 后台活动设置为「禁止」或「严格限制」。
  • 网络权限:对于某些单机应用或你不想让它联网的应用,可以在设置中关闭其使用移动网络和 WLAN 的权限。
  • 通知权限:除了禁用通知,还可以利用系统的「通知分类」功能,只保留最核心的通知。

优化电池续航

  • 关闭非必要连接:关闭蓝牙、NFC、定位服务(GPS)、用户体验计划等。需要时再手动开启。
  • 关闭息屏显示(AOD):除非有特殊用途,否则建议关闭息屏显示。

进阶

理论上来说,上面这些操作已经足够提升备用机的使用体验了。但假如你愿意再深入调教一番,下面这些小工具能让你的备用机体验更上一层楼。

高级权限

如果你的备用机可以很方便地解锁 BL,那么相应地获取 root 权限也便非常简单。但假如是不能解锁 BL 的机器,则可以考虑通过其他方式获取稍微高级一些的 ADB(Android Debug Bridge)权限,比如使用 Shizuku

我是用root权限启动的Shizuku
我是用root权限启动的Shizuku

Shizuku 在通过 ADB 获得权限后,允许其他程序通过 Shizuku 便捷地调用系统 API,从而实现更强大的功能。

安装 Shizuku 非常简单,Android 11 及以上版本通过无线调试便可直接启动,无需连接电脑。唯一不足的是由于系统限制,每次手机启动后都需要再次进行启动步骤。

  • 开启开发者模式

    打开设置,找到「关于本机」,点击「版本信息」,连续点击「版本号」7 次,开启「开发者选项」。

  • 启用无线调试

    找到「开发者选项」,并开启「USB 调试」、「无线调试」。无线调试需要连接到 WLAN 后方可使用。

  • 在无线调试中点击「使用配对码配对设备」。

  • 随后在 Shizuku 中按照步骤配对并启动应用。

就可以使用 Shizuku 了。

冻结应用

安装过 Shizuku 后,就可以方便地使用 冰箱 的冻结功能。

冰箱可以通过 Shizuku 获取提升权限,从而冻结任意软件,包括系统软件。就比如上面提到的锁屏画报,或是系统浏览器,甚至是系统自带的视频、音乐等等你用不到的不可卸载程序,都可以冻结。

但万万不可冻结应用商店、应用安装器,可能会导致手机无法开机。建议在冻结之前,使用「机型 + 冰箱 + 冻结」等关键词在酷安搜索前人的经验。

短信转发

如果你的备用机插了电话卡,电话卡绑定了某些 APP,那么使用 短信转发器 可以方便地将验证码自动转发到你的主力机上。

安装短信转发器后,按照操作流程授予读取短信、通知类短信权限,关闭验证码保护,并设置自启动,禁用电池限制。选择一个合适的发送通道(比如 iOS 上推荐使用 bark),再设置好转发规则,测试成功后,就可以彻底将备用机丢进抽屉里了!

你可以参考少数派上《巧用开源方案,零成本实现验证码短信转发》关于短信转发器的详细说明。

最后

到这里,你的备用机应该可以彻底焕发新生,重回第二春了。至于使用 GKD 跳过广告、通知滤盒 收纳无用通知、R-安装组件 替换系统自带安装器、Lspatch 安装内嵌模块的应用等等备用机上可能用不太到的东西,这里就不细说了。诸位有兴趣可以自行搜索尝试。

写着写着越发感觉偏离主题,这哪是备用机养成,分明就是主力机的优化指南嘛!再说,都叫备用机了,买回来往抽屉里一丢,也不是不行……

嘛,说到底,折腾备用机的乐趣,或许并不在于结果,而在于「养成」本身。毕竟这么一番折腾下来,不觉得很酷吗?作为一名理工男我觉得这太酷了,很符合我对未来生活的想象,科技并带着趣味。


  1. 之前有在酷安看到安装 Terminal APP 使用 Linux 环境的帖子,但是这次搜索的时候,看到《Trying Out the New Android Linux Terminal》这篇提到,Google 已经在 Android 15 上提供了原生的 Linux 开发环境。不过似乎仅限 Pixel 用户尝鲜。