八哥之神后传【14】死即复苏

餐厅

圣小开:这个丝瓜花蛤汤也太好喝了!

圣仙山:只放丝瓜和花蛤,连水都不加,隔水炖。

圣小开:稣生前都没吃过丝瓜,因为不敢吃。

圣仙山:嗯,所以甦只给你倒了汤。

圣小开:吃饱了。

圣仙山:可以回去了吗?

圣小开:怎么回去呢?

圣仙山:你不知道吗?

圣小开:稣怎么会知道?

圣仙山:你都不知道,甦更不知道。

圣小开:哦,原来是要稣自己回去的,那完了,稣没学会穿越。

圣仙山:你就从现在一直活到你的时代,然后在你跳楼的时候,立刻把尸体处理了,取代那个自己也行。

圣小开:为何不阻止自己跳楼?

圣仙山:你记得有人阻止你跳楼了吗?

圣小开:没有呢!

圣仙山:所以,你从现在活到那时也无法阻止。而且阻止了就出现两个你,那个跳楼的你也不会来到这里。要讲逻辑啊!

圣小开:有道理……只能在跳楼之后打扫自己的尸体,太残忍了!

圣仙山:也不一定非得如此,只要你觉醒识界之主的身份,就有权限改变识界。

圣小开:太难了,稣选择坐等。

圣仙山:你不想早点见到学妹?

圣小开:她不是被你抹除了?

圣仙山:甦只是做了少许改变,你还是能见到她的。

圣小开:快!稣要穿越时空……不对!她不会记得稣,对吧?

圣仙山:对,她转世投胎了,过两纪后,你可能会遇到她。

圣小开:两世纪??

圣仙山:两纪,就是二十四年。

圣小开:算了,等那么久,稣都结婚了。还是先睡觉吧,明天再想办法。

2001 年,学校宿舍楼顶

圣小开心想:稣死后宇宙是不是就毁灭了?还是稣会立刻在另一具身体复活?跳下去试试!

识界重启……

圣小开:啊!脑子里怎么多了这么多奇怪的记忆。学妹失忆了?明天问问,下去睡觉先。

没跳楼的第二天,操场

圣小开:喂,学弟!你们领队那小子去哪了?

学弟:你说邓委呀?她生了重病,暂时不上学了。

圣小开:邓?你说她姓邓?

学弟:对啊,不然勒?

圣小开:稣记得她姓柯……

学弟:你认识她?不认识吧?姓都记错,肯定不认识。

圣小开心想:那些植入的记忆好像是真的……

做完操

圣小开:胆公,你记得稣右边那排的领队吗?

胆公影究:记得,是个很酷的女生。怎么,你喜欢人家吗?

圣小开:咱们俩和她吃过饭,你记得不?

胆公影究:没有吧!你头壳坏了?

圣小开:你严肃点,稣要和你说一件很诡异的事情,你千万要理性对待,不要被吓到。

胆公影究:哦,关于宇宙,还是你又做了什么怪异的梦?

圣小开:都不是,是关于稣的鲸神链。

胆公影究:什么?你早恋?

圣小开:“鲸神链”是这枚戒指。

胆公影究:em,你啥时候买了戒指?

圣小开:听重点,这戒指内圈刻着“鲸神链”,JC 也有一枚一模一样的,但是里面刻着“链神鲸”。

胆公影究:练神经?还有,谁是 JC?

圣小开:靠,你也失忆了?

胆公影究:没有呀,是你精神不正常,吧?

圣小开:好吧,你跟稣念句话行不?

胆公影究:来吧!

圣小开:“和你一起跑,鼻炎更快好!”

胆公影究:和你一起跑,鼻炎更快好!

圣小开:表情不对……不够骚包……

胆公影究:你耍我呢?

圣小开:没,上次你说这句话是为了羞稣,当时表情贱得能得金像奖!

胆公影究:我没说过呀!

圣小开:那你记得稣为了治疗鼻炎,常和你一起长跑吗?

胆公影究:你……不会,是……基吧?

圣小开:你才是基……稣是想说,咱们在跑步时认识了一个学妹,你记得不?

胆公影究:记得跑步的时候听你说过,但我没见过呀!你说是在食堂吃饭经常遇到一个学妹,聊过几句。

圣小开:算了,稣去问别人。你记得稣经常和谁一起吃饭?

胆公影究:蓝二侨、沈天巾。

圣小开:这倒没失忆。午饭时问他们。

食堂

圣小开:侨仔,你还记得在这里认识的学妹吗?

蓝二侨:哪个?

圣小开:你的记忆里有很多个?

蓝二侨:就两个,她们是同班同学。

圣小开:那没错,是那个有名字的。

蓝二侨:另一个没名字吗?

圣小开:呃,不重要,稣并不知道另一个学妹叫啥,你知道?

蓝二侨:两个都不知道!

圣小开:那咱们用外貌区分,是那个很高的,至少有 170,长得比较中性,有点酷酷的那个。

蓝二侨:比较中性是说没胸?

圣小开:稣说的是脸……你丫到底记不记得?

蓝二侨:记得。怎么?想追人家吗?现在早恋来不及了!

圣小开:你是不是常常说哪个女生暗恋你,只要你一句话就能早恋?

蓝二侨:那是事实!

圣小开:有点难以解释,但你一定相信稣。稣现在的情况就是这样!

蓝二侨:什么?你是说那学妹喜欢你?

圣小开:不太确定,可能,有点,吧?

蓝二侨:都不确定那你说个屁呀!吃饭吧,别想太多。

圣小开:稣的意思是本来喜欢的,但现在可能不喜欢了!

蓝二侨:干!你对人家做了什么过分的事情吗?

圣小开:没,稣啥都没做就被忘了,才是最致命的!

蓝二侨:有时候真的很佩服你沉浸在自己的世界里的能力。

圣小开:咦,天巾同学也来了。这边,这边。

蓝二侨:天巾,你记得有个初中部学妹喜欢小开吗?

圣小开:咋抢稣的台词,还乱添油加醋呢?

沈天巾:不知道呀,我跟开哥除了数学,不聊其它闲事,尤其是感情八卦。

蓝二侨:一边去。小开,还是你自己说说怎么回事吧!

圣小开:呵,就不应该问你,你和胆公都不是什么正经人,稣真是白费力气。

蓝二侨:咋还骂人呢?你是不是失恋了?有啥心理问题,说出来,兄弟们替你分析分析呗。

圣小开:是失恋了,但心理健康得很。还是去问问焸鲧比较靠谱。

晚自习中途休息

圣小开:焸鲧啊~你是稣好友里最正经最没有幽默感的,你说的话肯定比较客观。

焸鲧:怎么突然这么说?

圣小开:稣有个很严肃的问题要问你。

焸鲧:好啊!

圣小开:上次咱们去爬岱轮山,树上掉下一条蛇,差点砸中稣,你还记得吧?

焸鲧:当然记得!

圣小开:那次就咱俩,没别人对吧?

焸鲧:是啊。有问题吗?

圣小开:果然是这样。问题是,其实那次还有第三者!

焸鲧:蛇?

圣小开:不是!其实蛇是差点砸到一个叫 JC 的学妹,她当时距离蛇最近,其次才是稣。

焸鲧:那学妹是忍者,会隐身是吧?

圣小开:哇……救命啊!真的都抹除了……

焸鲧:听说你失恋了?

圣小开:是的,这下真失恋了,而且要失恋 24 年。

焸鲧:其实,人也不一定要谈恋爱,人生还有很多事情。

圣小开:比如?

焸鲧:为日益发达的科技贡献一生,说不定咱们这代人就能实现意识永生。

圣小开:然后成为科技的奴隶,永生的奴隶。真是太好了!稣会观测这一天的到来。

从前初识这世间
万般流连
看着天边似在眼前
也甘愿赴汤蹈火去走它一遍
如今走过这世间
万般流连
翻过岁月不同侧脸
措不及防闯入你的笑颜
我曾难自拔于世界之大
也沉溺于其中梦话
不得真假 不做挣扎 不惧笑话
我曾将青春翻涌成她
也曾指尖弹出盛夏
心之所动 且就随缘去吧
逆着光行走 任风吹雨打

短短的路走走停停
也有了几分的距离
不知抚摸的是故事 还是段心情
也许期待的不过是 与时间为敌
再次看到你
微凉晨光里
笑得很甜蜜

晚风吹起你鬓间的白发
抚平回忆留下的疤
你的眼中 明暗交杂 一笑生花
暮色遮住你蹒跚的步伐
走进床头藏起的画
画中的你 低着头说话
我仍感叹于世界之大
也沉醉于儿时情话
不剩真假 不做挣扎 无谓笑话
我终将青春还给了她
连同指尖弹出的盛夏
心之所动 就随风去了
以爱之名 你还愿意吗

八哥之神后传【13】鲸神链

啊~行了行了!

餐厅

圣仙山:回去吧!你的时代已经在打世界大战,再不回去将更乱。

圣小开:哦!所以同学们都挂了?学妹不跳楼的话,一样会挂?

圣仙山:莲雅。

圣小开:稣回去就能重置?

圣仙山:对,你可以。

圣小开:那就不急,反正能重置。现在学妹不在了,回去也没啥意思。

圣仙山:所以,你打算在这里吃甦的喝甦的,还睡甦的?

圣小开:你们古代多无聊,想必其他人也难以理解你,稣可以随时随地和你分享刚编完的故事。

圣仙山:你随意。你逗留的时间越长,甦能影响识界更多。

校门口,某个周六

圣小开:周六补习,简直惨无人道,灭绝人性。

胆公影究:吃啥?

圣小开:平时早就在家吃好料了……

胆公影究:啊,行了行了,你昨天不是都约了学妹去三秀街吃火锅吗?不会是不让我跟吧?

圣小开:走吧!不,用跑的。

胆公影究:冲。

火锅店

柯金钏:补习有用吗?

圣小开+胆公影究:有!

柯金钏:那就好。

胆公影究:刚才是谁还在抱怨的?

圣小开:嗯,老师们太辛苦了,放弃周末半天的休息,还是免费,咱学校简直好得不能再好!学校好,老师也好,同学们更好!但稣感觉这种免费的补习,很快会取消,所以抱怨一下。

胆公影究:……你啥时候这么有才的,我咋才知道呢!

柯金钏:嘻嘻,你俩说话真逗!

胆公影究:开哥其实是想说补习后能和你吃饭逛街,所以有用。

圣小开:em……稣没说呀!再说这条街都走过上百次了,除了那家卖首饰的,哪家没进去过?

柯金钏:那吃完就去首饰店?我也没进去过!

圣小开:呃……消费不起吧?

胆公影究:消费得起!

柯金钏:没说要买,学校也不让戴首饰呀,就看看呗!

胆公影究:逛啥并不重要,重要的是跟谁逛。就跟着哥进去长长见识。

圣小开:其实学校不查戴首饰,只查男生头发和女生裙子的长度!稣看某同学就戴着个钢戒,据说上面还刻着自己的名字。

胆公影究:哈哈,那个是另一名同学送她的。

圣小开:哦,稣不八卦,只是觉得,这种刻名字的行为特别幼稚,让稣想起宠物的铭牌……

柯金钏:呵呵呵……

胆公影究:那么,刻啥才不幼稚呢?

圣小开:保佑用语,比如“神爱世人”!或者座右铭,比如“稣命由天不由稣”。

胆公影究:开啊,你能别搞笑吗!

圣小开:咋了?稣没开玩笑。

胆公影究:爹味重了点!

柯金钏:呀!我又捞到一块牛肉了,应该是最后一块了。给你,叔。

圣小开:你不吃了吗?

柯金钏:吃饱了。

胆公影究:我也早吃饱了!就你还在吃。

圣小开:谢谢!稣才刚开始发育,食量是大一点。

首饰店

胆公影究:我看金的,你们呢?

圣小开:JC,看金的吗?

柯金钏:我喜欢银的,去看银的吧!

圣小开:好啊!稣觉得戴银器比较有用。

柯金钏:为啥呀?

圣小开:银离子能杀菌。金属其实都会溶解于水,只是很少很少,但哪怕就几个银离子,起码也有点用。金比银更不容易溶解,而且就算溶解了也没有杀菌作用。

柯金钏:哦,我只是单纯觉得银色漂亮点。

圣小开:你的手好白耶,确实更适合戴银的。

柯金钏:你也是耶,而且手指好修长。

圣小开:好像差不多大,比一下。

柯金钏:无名指比你短一些,其它几根居然都差不多!

圣小开:额,你怎么直接把手贴上来了。

柯金钏:哈哈,你脸红啊!

服务员:你们是一中的学生?

圣小开:不是,稣是六中的。

服务员:要买吗?

圣小开:先看看能不能买得起!

服务员:你们可以考虑一下 925 银,便宜点。像这边的银戒,都是 100 元以内。

柯金钏:还有别的?有啥区别呢?

服务员:还有 999,纯度更高,也更软。

圣小开:那稣喜欢硬的,不容易坏。要是软银,打个球可能就弯了。

柯金钏:但是纯度高的不是更好吗?

圣小开:纯度再高也不可能 100%,现实中就没有纯度 100% 的东西。

柯金钏:能刻字吗?

服务员:能,现货最便宜,自定义大小和刻字都属于定制,定制的贵很多。

圣小开:你们不是有各种大小吗,还有人自定义大小哦?

服务员:有呀,有些人指围特别大,就得定制。我给你量一下?

圣小开:好吧!是无名指?

服务员:对……60mm,是正常水平。

柯金钏:我也要。

服务员:也是 60mm。

圣小开:居然一模一样?你这是男人的手吧?

柯金钏:乱说,你的手才像女人的手!

服务员:小伙子,你的手确实很漂亮,从没见过有男生的手是你这么好看的。

柯金钏:你听听,这才是真相!

圣小开:那个试戴一下谢谢。

柯金钏:这个好素啊,原来你也喜欢这类型的?

圣小开:是啊,千万别有什么花纹,刻字也不能太张扬,要刻就刻在内圈。

柯金钏:你打算刻什么?

圣小开:鲸神链?

柯金钏:啥?这么雷人!

圣小开:鲸鱼的鲸,神仙的神,链条的链。

柯金钏:呵呵呵……真是神经。

圣小开:稣很严肃的。你呢?

柯金钏:我还没想好,下次真要买再说呗。

圣小开:稣回去就开始存钱!

首饰店门口

胆公影究:你们有看上的?

柯金钏:有喜欢的,以后再买吧。

圣小开:没有,买不起。

柯金钏:对了,叔!你刚才为何骗人说自己是六中的?

圣小开:啊哈!你没发现店员的眼神像教导主任在审讯犯纪律的同学吗?

柯金钏:那咋了?

圣小开:她肯定以为咱们在早恋……

柯金钏:所以你就嫁祸给六中?哈哈哈。

胆公影究:开,你太机智了。不能给母校丢脸。

圣小开:这哪是丢脸的问题,你长得那么抽象万一那店里有人认识你,不得出八哥?

胆公影究:又是我的错?

圣小开:明显就是你的错!下次稣存够钱,自己偷偷来买。

柯金钏:好了,我该回家咯。

圣小开:稣走去公交车站。拜拜,JC。

八哥之神后传【12】识界之主

餐厅

圣仙山:都这样了,你还不承认她是你女朋友?

圣小开:没办法,客观情况不允许。学校,不是谈恋爱的地方,而且她还小。

圣仙山:你其他同学不是光明正大地谈?而且这年纪放在这边不小。

圣小开:不如把她接到这边来?

圣仙山:不行,她已经死了。

圣小开:稣不也死了??为啥她不能来?

圣仙山:是你没让她来。

圣小开:稣不让??没有吧!那稣这就让她来。

圣仙山:太迟了。

圣小开:为啥?

圣仙山:你还没觉醒,没这个权限。

圣小开:那你刚才说,是稣没让她来?

圣仙山:你们一起 jump,不就一起来了?

圣小开:重来一次行吗?

圣仙山:没办法,客观情况不允许。这里,不是想来就能来,而且她还小……

圣小开:咳咳。好耳熟的话,像是哪个渣男说的?

圣仙山:哈哈哈……别装了!识界之主!

圣小开:稣是识界之主??别吓稣!

圣仙山:没关系。等你觉醒自然就承认了。

圣小开:那稣要如何觉醒?

圣仙山:不知道。

圣小开:你不是能预知未来吗?

圣仙山:是能,但你不是未来,而是过去。

圣小开:什么?你是说稣能影响过去?

圣仙山:没错!甦能预知未来,而你能影响过去。

圣小开:好无用的神通……影响过去能干吗?

圣仙山:怎么会没用?全宇宙只有你能向过去转世,当你转世到宇宙之初,你知道这意味着什么吗?

圣小开:能创造宇宙?

圣仙山:不知道,甦随口说说。

圣小开:懂了,会重来一遍,变成向未来转世?

圣仙山:不错,悟性很高。向未来转世的,遇到时间的尽头,又会返回。

圣小开:所以,其实咱们是同一个意识在不同时间线?这就是识界的真相?

十界

圣仙山:必须阻止识界通过圣小开进入十界。

餐厅

圣仙山:甦不是十界圣仙山。你也不是真正的圣小开。

圣小开:稣只是识界模拟的圣小开,明白。

圣仙山:对!每次你意外死亡,都会使识界重置,但是这次不太一样,你遇到了甦这个变数。

圣小开:你是十界圣仙山影响识界的结果?

圣仙山:莲雅。现在识界之主和你共生,等你转世到宇宙之初,识界就完整了,它将无所不能。

圣小开:所以你是来彻底消灭稣的?!

圣仙山:咱们互为未来过去,甦不能杀死过去的自己,也不愿杀死未来的自己。

圣小开:那你打算怎么办?稣还要和学妹谈恋爱呢,时间有限,给个痛快。

圣仙山:咱们在这里交换一下,甦替你回去未来,此后识界只能往后观测甦。

圣小开:你去泡稣的学妹?不太好吧!

圣仙山:你是不是拿着一封信,要去找胡小玉?

圣小开:是啊,这信就给你了,你去找她吧!

圣仙山:按照历史的发展,她本来应该是甦的正房。

圣小开:噗……那刚好,就该你去。虽然古代饱读诗书的女人,温柔又贤惠,还能三妻四妾,想想就……但稣要回去找学妹。对!稣要回去找学妹。

圣仙山:你真的要为了学妹,放弃整个宇宙?

圣小开:怎么还扯上整个宇宙?早恋有这么大危害?

圣仙山:没办法了,客观情况不允许……只能出此下策。

圣小开:别乱来啊!稣不换!

圣仙山:甦已经把你学妹抹除了。哈!

学校操场,慢跑

柯金钏:开哥,你为什么经常和你同学来跑步,都快高考的人了?

圣小开:“我”是少数高中还不靠努力只靠智力的人。

柯金钏:但是再努力一把,不是更好?

圣小开:好吧,其实我从小学四年级就慢性鼻炎,这病影响睡眠,而且吃药也很难治好。所以打算通过跑步把它治好,免得高考时,缺氧宕机。

柯金钏:你同学也是?

圣小开:不。他是要考体校……

柯金钏:原来如此。难怪他身材那么好。

圣小开:但他头壳有点问题。

柯金钏:哈哈哈,你怎么背后说人家坏话呢。

圣小开:同学都这么说,我也不知道为啥,可能我也是头壳有点问题吧?所以能玩在一起。

柯金钏:哦,呵呵。但是,你比他帅。

圣小开:em?

柯金钏:咋了?说你帅这么惊讶干吗?

圣小开:以前没人这么说过我。我觉得自己应该被称作酷,甚至冷酷。

柯金钏掩嘴而笑:真是,头壳有点问题!不过你有时候看上去是挺高冷的。

圣小开:我愿承认这是内向加上脸瘫,表情呈现过度缓慢。

柯金钏:啊哈。不跑了,再走一圈。

圣小开:好啊。我发现和你跑步治疗鼻炎的效果更好。

柯金钏:为啥呀?

圣小开:你的气质特别阳光,而且身上有一股通鼻醒脑的香气。

柯金钏:香气,没有吧?

圣小开:你自己习惯了,闻不到。

柯金钏:别人没有吗?

圣小开:没有呀。你看前面那个头壳坏掉的,身上只有汗味。

柯金钏:你没女同学吗?

圣小开:有的,我们班上女生比男生多。不过她们都无色无味。

柯金钏:哼!有你这样形容的……

餐厅

圣小开:抹完了??

圣仙山:莲雅。

圣小开:就这?稣怎么还记得她?柯金钏,属火兔,天蝎座。

圣仙山:除了你没人记得。回去试试就知道。

学校操场,食堂

圣小开:每次叫你的名字,就想笑。要不叫你窜窜?

柯金钏:是卷舌的,串串。

圣小开:哦,我不会卷。不行,这也很好笑。会想到串串香……em,真香。

柯金钏:你还是叫我的英文名吧?JC。

圣小开:是那个很像 Jesus 的 Jessie?

柯金钏:是啊,也有人叫我 Jessica,因为和姓一起叫,Jessie Ke,就很像 Jessica。

圣小开:还是 Jessie 好点,Jessica Ke,不是 JC 卡壳吗?

柯金钏:别人的名字都能给你取笑半天?

圣小开:没有的事,不好意思,Jessie,我严肃。

柯金钏:对嘛,不要取消别人的名字,哼。不行,我要报仇,以后叫你开叔。

圣小开:啊,我怎么成叔了?

柯金钏:开叔!论辈分,你本来就是我的学叔。

喜欢看你紧紧皱眉 教我打小乌龟
你的表情大过于朋友的暧昧
寂寞的称谓 甜蜜的责备
有独一无二专属的特别

喜欢看你紧紧皱眉 教我打小乌龟
我的心情就像和情人在斗嘴
奇怪的直觉 错误的定位
对你 哎呀呀呀 我有点胆怯

八哥之神后传【11】

破庙

吓醒。

捕快甲:这里有个人,穿着奇装异服,肯定不是本地人!

捕快乙:倒是眉清目秀的,难道就是最近频繁作案的采花大盗?

捕快甲乙:抓起来!

圣小开:什么情况?稣是官二代哦!你们敢抓?

捕快甲:老子还是官一代呢!老实点!

捕快乙:嘿嘿嘿,打一顿就老实了。

圣小开:屈打成招是吧?你们再这样,稣要念动咒语了哦!

捕快乙:疯癫?

捕快甲:押回去给圣大人研究!哈哈哈。

圣小开:圣?大人?稣也姓圣!

捕快甲:笑话,圣大人全家我都认识,就没你这号。闭嘴吧你!

圣小开:啊……稣要投诉你们!

牢房

狱卒:姓名?籍贯?

圣小开:圣小开,金门人。

狱卒:身上有多少钱?

圣小开:没有你们这里的钱,人民币要么?只有四块钱。

狱卒:这是冥币?没钱就住最次的。

圣小开:请问大佬,稣是替死,还是充军?

狱卒:看情况,看表现,但由不得你。带进去!

捕快乙:这人脸瘫,看起来不怕死,试试培养成死士或细作?

狱卒:这个姓……应是假名,兴许就是敌国的细作。

捕快乙:先上点刑?

捕快丙:狱吏大人有令,将穿越者带去见他。

狱卒:穿越者?系奇装异服那厮?

捕快丙:与狱吏大人同姓者。带出来!

捕快甲:就是这位,整桩好好。

圣小开:敢问狱吏大人名号为何?

捕快丙:圣仙山大人。

圣小开:稣的先祖??

餐厅

圣仙山:开!终于见面了。甦准备了你最喜欢的牛排,六成熟,不加酱,快来吃吧。

圣小开:稣都没吃过牛排,你怎么知道稣喜欢吃?

圣仙山:这牛是甦培育的,保证你吃了就喜欢。

圣小开:太奢侈了,虽然稣经常和同学吹牛说牛排是高贵的食物,但稣还没钱吃。没想到居然在古代吃到。

圣仙山:甦有钱,随便吃。你以后也会有钱,能天天吃。

圣小开:嗯!真好吃。

圣仙山:试试这些,凤尾螺、青龙、鲟鳇,都是清蒸的,还有鱼羊汤。

圣小开:狱吏居然这么有钱?当官真好!

圣仙山:别的狱吏可没甦这么有钱。

圣小开:也对,你是神。啊!可太好吃了。稣真的还想再吃五百年。

圣仙山:那你为何跳楼?

圣小开:单纯好奇稣死后会是什么样的。

圣仙山:果然是甦的传人,可真舍得。

圣小开:如假包换。

圣仙山:但甦有个坏消息要告诉你,你女朋友也跳楼殉情了。

圣小开:稣有女朋友??

圣仙山:你学妹。

圣小开:em……稣是有个初中部的学妹,关系还行,但没确定过关系,学校不让早恋!

学校操场,跑步

胆公影究:开啊,你快全班第二了。不过和我这个第一,差距还很大。

圣小开:真喘!

胆公影究:嘘!刚刚那个学妹回头看了你一眼。

美梦里有怎样气候
你终于回过头看我

圣小开:快趴了……先扶着稣,看啥学妹。

胆公影究:脸上有一股英气,还是高个子,你喜欢的类型。

圣小开:这个背影是不错呀,快和稣一样高了!

胆公影究:继续跑,追她。

圣小开:你追吧,你比稣高,和她更搭。

胆公影究:果然是兄弟!

圣小开:笑死,稣在后面看你被打脸。

胆公影究:干!

学校操场,早操

有一天做早操,不同年级换位置。那天只看到背影的学妹居然排在稣的右边那排的第一个,这时候看到她英气逼人的脸了,结合身高和胆公影究的描述,稣可以确定就是她!但是稣不确定她记不记得稣,所以只是每天看着她的侧脸和背影。

慢慢地也知道,她是体育委员,性格泼辣,脾气火爆,经常对她班上的男生拳打脚踢,不是“打是情骂是爱”的那种,是当沙包踹的那种。

而且,后来知道她叫柯金钏,才明白那天她为何回头看稣!她的名字“金钏”的普通话和“真喘”的闽南语的发音特别像。嗯,是稣自作多情了,还以为她回头看稣是觉得稣闪耀着神性的光辉!

想明白的稣视线向着她,忍不住傻笑起来。没想到,她又回头瞟一眼稣,友好地问候了一句:“神经病?”

稣吓得只能承认,小声回答:“是啊。真喘!呵呵呵……”

过了几天,傍晚运动时间,稣特意跑操场满地找她,终于找到。她坐在沙堆边休息,稣过去傻笑她,“你也在喘啊?”

她一脸正经地说:“有点累,好像气血不足。”

稣顿时笑不出来,关心地问:“是不是低血糖?”

她说:“好像生病了!”

看着脸确实比平时白,穷稣只能安慰她:“长这么高,血是不容易送到脸上去。”

她想笑,但只是尴尬了一下。看来是真生病了。

稣只好约她一起去校门口喝葡萄糖。em,那时候穷,好多店真的就是把葡萄糖注射液当饮料卖。心想如果情况有好转,再一起吃个第一汤包也不错。

由于高中生不能和初中生早恋,所以此处情节省略一万行。

总之,在不影响学习的前提下,稣还翘课和她去学校后面爬大轮山,拜梵天寺。她是真去拜拜,稣是去看一页书在不在。

世事如棋,乾坤莫测,笑尽英雄啊!

逛三秀街,喝同样的果汁,吃同样的拉面。她冷了,还会直接叫稣脱衣服给她穿。有些瞬间,稣会心疼,原来她身体没看上去的好呀!

就算是轻轻的微风
也在试探思念浓薄
你忘的伞还依我的窗
望着窗外那悠悠春光
我心中延续和你的情感
有一种暧昧的美满
忘记了思念的负担

稣偶尔会和她说哪个学姐长得真漂亮,她也只是说自己还小,审美观不太一样,并没有其它情绪。所以,稣认为自己和学妹完全没有早恋!一点都不暧昧。

我自私延续心中的期盼
有一种暧昧的晴朗
站在这城市某一端
寂寞和爱
像浮云 聚又散

她说自己脾气很差,但是稣一点都不信——女人都是骗子。

spdlog

1. 用于啥需求?

打日志。spdlog 是一个高性能、易用的 C++ 日志库。

2. 何时使用 spdlog?

其格式化风格同 std::format/std::print,如果这符合您的习惯可以考虑。稣一般会在复杂场景下使用 Boost.Log,测试程序或简单的程序里使用 spdlog。

举例啥叫复杂场景:产品里有多个可执行程序(Executable),譬如说 A 和 B,它们共同使用多个动态链接库(Dynamic-Link Library),譬如说 X 和 Y。注意,这里说的“使用”,可能是静态加载,也可能是动态加载(比如动态链接库是插件)。当 X/Y 在 A 进程里时,它们的打印风格、设置都应该受 A 控制,而在 B 进程时,则受 B 控制。不管可执行程序和动态链接库有多少个,每个进程都应该只有一个 Logger。这个需求 Boost.Log 能轻松实现,而 spdlog 可能不轻松,因为在雪蛤油时,有个熟悉 spdlog 的同学和稣打赌,结果他用 spdlog 没能轻易实现。也就是说即使 spdlog 能实现,那也不轻松。

3. 具体应用

首先注意到 Logger 的打印接口有两大类,一类是函数,比如 spdlog::info,只要你用了,它就被编译到程序里;另一类是宏,比如说 SPDLOG_INFO,它是否会被编译到程序里,受 SPDLOG_ACTIVE_LEVEL 控制。具体看以下注释:

1
2
3
4
5
6
7
8
9
10
11
12
//
// enable/disable log calls at compile time according to global level.
//
// define SPDLOG_ACTIVE_LEVEL to one of those (before including spdlog.h):
// SPDLOG_LEVEL_TRACE,
// SPDLOG_LEVEL_DEBUG,
// SPDLOG_LEVEL_INFO,
// SPDLOG_LEVEL_WARN,
// SPDLOG_LEVEL_ERROR,
// SPDLOG_LEVEL_CRITICAL,
// SPDLOG_LEVEL_OFF
//

spdlog 支持 6 种日志级别:

级别 说明 适用场景
trace 最详细的调试信息 开发调试
debug 调试信息 开发环境
info 一般信息 运行状态
warn 警告 潜在问题
error 错误(但程序可继续运行) 异常情况
critical 严重错误(可能崩溃) 致命问题

其中的 debug 级别,稣总觉得不应该存在,根据情况归到 trace 或 info 即可。

spdlog::set_level 设置的是运行时的显示级别,比如说:

1
2
3
spdlog::set_level(spdlog::level::debug); // 只显示 >= debug 的日志
spdlog::trace("This won't show (level too low)"); // 不会输出
spdlog::debug("Debug info"); // 会输出

但通常我们会使用宏来打印日志,并通过设定 SPDLOG_ACTIVE_LEVEL 来去掉低级别日志,以提高运行效率,或防止被“轻松逆向”。一般来说,Debug 版本可以设定 #define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE,而 Release 版本可以 #define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_INFO#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_WARN

既然我们使用宏来打印日志,那么我们就能注意到:宏也有两类,一类形如 SPDLOG_LOGGER_INFO,需要一个 logger 参数,另一类形如 SPDLOG_INFO,不需要传入 logger 参数。从以下代码可知,后者是默认 Logger 的打印宏。

1
2
3
4
5
6
7
8
#if SPDLOG_ACTIVE_LEVEL <= SPDLOG_LEVEL_INFO
#define SPDLOG_LOGGER_INFO(logger, ...) \
SPDLOG_LOGGER_CALL(logger, spdlog::level::info, __VA_ARGS__)
#define SPDLOG_INFO(...) SPDLOG_LOGGER_INFO(spdlog::default_logger_raw(), __VA_ARGS__)
#else
#define SPDLOG_LOGGER_INFO(logger, ...) (void)0
#define SPDLOG_INFO(...) (void)0
#endif

如果我们不想使用默认 Logger,就得自己创建 Logger,并使用第一类形如 SPDLOG_LOGGER_INFO 的宏,但这个宏有点长,还是把自己创建的 Logger 设置为默认,再使用第二类形如 SPDLOG_INFO 的宏方便点。

1
2
3
4
5
6
7
8
9
inline bool InitializeLogger() {
auto logger = std::make_shared<spdlog::logger>(
"", std::make_shared<spdlog::sinks::wincolor_stderr_sink_mt>());
if (!logger) {
return false;
}
spdlog::set_default_logger(std::move(logger));
return true;
}

至于输出格式,稣的测试程序一般如此设定:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main(int argc, char* argv[]) {
nw::args _(argc, argv);
nw::nowide_filesystem();
::SetConsoleOutputCP(CP_UTF8);

if (!InitializeLogger()) {
nw::cerr << "Failed to initialize logger!" << std::endl;
return EXIT_FAILURE;
}
#if _DEBUG
spdlog::set_level(spdlog::level::trace);
spdlog::set_pattern("%Y-%m-%dT%H:%M:%S.%e |%P~%5t <%^%L%$> %s#%#: %v");
#else
spdlog::set_level(spdlog::level::info);
spdlog::set_pattern("%Y-%m-%dT%H:%M:%S.%e |%P~%5t <%^%L%$> %v");
#endif
SPDLOG_TRACE("Starting up...");
// Other codes...
}

注意:默认情况下,spdlog 是同步的!如果日志量很大,应该使用异步日志(减少主线程阻塞)。例如:

1
2
3
4
5
6
7
8
9
10
11
inline bool InitializeLogger(std::string_view log_directory) {
spdlog::set_automatic_registration(false);
auto logger =
spdlog::create_async<spdlog::sinks::wincolor_stderr_sink_mt>("");
if (!logger) {
return false;
}
spdlog::register_or_replace(logger);
spdlog::set_default_logger(std::move(logger));
return true;
}

除了 spdlog::create_async,还有个 spdlog::create_async_nb,它们的差别在于堆积的日志溢出时的处理策略不同,具体查看:

1
2
3
4
5
6
7
// Async overflow policy - block by default.
enum class async_overflow_policy {
block, // Block until message can be enqueued
overrun_oldest, // Discard oldest message in the queue if full when trying to
// add new item.
discard_new // Discard new message if the queue is full when trying to add new item.
};

其它的……问掐鸡(LLM)吧!

通过 iPXE 安装 Debian

起源

想安装 Debian 12,但没 U 盘。

思考、观测

  • Debian 能通过网络安装,参考:Installing Debian using network booting

  • 但 PXE 太麻烦了,放弃。

  • 观测目标机器,发现其 EFI 有网络启动功能,还能按 Ctrl+B 进入 iPXE。

解决

  1. 开启网络启动,并关闭 Secure Boot。

  2. 看到 PXE 启动画面时,按 Ctrl+B,进入 iPXE。

  3. 输入 dhcp,使目标机器得到 IP 地址,成功即可下一步;但如果局域网内没有 DHCP Server,则需要手动配置:

1
2
3
4
5
6
7
set net0/ip 192.168.1.77
set net0/netmask 255.255.255.0
set net0/gateway 192.168.1.254
set dns 8.8.8.8

ifopen net0
ifstat net0

以上最后一条命令 ifstat net0 输入完后,应该能看到输出里有 open 的字样。

  1. 启动内核

以 Debian 12 为例,先设置网址前缀:

1
set URL http://mirrors.ustc.edu.cn/debian/dists/bookworm/main/installer-amd64/current/images/netboot/debian-installer/amd64/

注意,iPXE 里只支持 http。网址里的 mirrors.ustc.edu.cn 是中科大的镜像域名,在厦门、上海、长沙访问都很快。

1
2
3
kernel ${URL}linux console=ttyS1,115200n8 initrd=initrd.gz
initrd ${URL}initrd.gz
boot
  1. 加速安装

请参考《快速安装 Debian》,其中“按 Ctrl+Alt+F5 回到安装界面”这步需要改为“按 Ctrl+Alt+F1 回到安装界面”,因为通过 iPXE 启动的 Debian 安装程序是 TUI,运行于第一个控制台。

如何让开始按钮的右键菜单带加速键?

Win 键被禁用后发现 Windows 11 24H2 的一个小伎俩

起源

最近在开发基于 QEMU 的 Windows 虚拟机的 GPU 加速驱动。由于不想频繁按 Ctrl+Alt+G 退出虚拟机窗口的捕获状态,就不用鼠标设备,而是使用触控屏设备。即:
-device qemu-xhci -device usb-tablet
但这么一来,虚拟机就接收不到 Win 键了……于是之前迅速打开设备管理器的“Win+X, M”也跟着无效。

解决

“Win+X”的替代自然就是“鼠标右击开始按钮”,然而出来的菜单居然没有加速键?

No accelerator keys

用“Win+X”呼出的菜单应该是下面这样的:

With accelerator keys

于是猜测,微软一定会设计另一种机制,比如“按下某种组合键”,来提供有加速键的 Win+X 菜单。测试按 Ctrl 和 Shift,发现有时候第一次按无效,后面才会有效,索性再测试 Ctrl 和 Shift 同时按,则每次都有效。

所以,解决方式是:同时按下 Ctrl 和 Shift,再鼠标右击开始按钮。

RegameDesk 开发笔记【9】hello_imgui

本文的微信公众号链接

需求

客户端(主控)渲染窗口需要故障排除功能,比如说显示 FPS、丢帧、延迟等信息,以方便调试、测试。一个较为常见且靠谱的作法是基于 Dear ImGui 来实现。

学习

高手直接看 Dear ImGui 也不是不行。但如果是初学者,从 Hello ImGui 开始,比较不容易吓退。

Hello ImGui 基于 Dear ImGui,所以拿前者练好,再上生产环境用后者,是一个不错的路线。

实践

故障排除功能通常是一个彩蛋(隐藏功能),需要某种触发机制唤出。常见采用快捷键,但这可能和远程端系统里某个快捷键冲突。所以也可以考虑使用鼠标操作唤出,比如在顶部操作栏(显示状态下)连击 3 次右键。

Remote Desktop

RegameDesk 开发笔记【4】C++

C++ 20

根据 jetbrains 的统计,2023 年时,C++ 20 的使用率是 29%,仅次于 C++ 17 的 43%。在嵌入式领域和游戏开发领域,C++ 20 的使用率更高,分别为 37% 和 39%。

众所周知,C++ 版本越高,就越强大,并且解决以前版本的一些问题。讲道理的话,现在 2025 年就应该用 C++ 20。不用的人,大致理由都是成本问题。其实,大可以把工程的版本设置为 C++ 20,然后按照已经学会的版本去用。这种情况下,遇到问题,通常就是遇到旧版本的不足或过时的部分。按照稣的经验,目前主流大语言模型对 C++ 20 的支持是不错的,尤其是语法和标准库使用上。

参考:

CppCoreGuidelines

这是由 C++ 之父 Bjarne Stroustrup 领导的行业巨佬们写的宝典,对于写好工程有巨大帮助。有些初学者,买了工具书学完语法,就开始写代码,然后就会遇到一个典型的问题:代码写多了就乱,乱到一定程度自己都不想继续。即使是更好点的情况,靠毅力把代码写到上线,后面却发现乱得自己都不想维护。CppCoreGuidelines 就是用来解决这类问题的。

入门 CppCoreGuidelines 的第一步是:把 GSL 用起来。

参考:

第二步是:记住不要写 STUPID 的代码。仔细看看 CppCoreGuidelines,里面有具体规则。

  • Singleton - 单例(I.3: 避免使用单例)

  • Tight Coupling - 紧密耦合(C: 类和类层次)

  • Untestability - 不可测试(P.12: 适当采用支持工具、P.13: 适当采用支持程序库)

  • Premature Optimization - 过早优化(Per.1: 请勿进行无理由的优化、Per.2: 请勿进行不成熟的优化、Per.3: 请勿对非性能关键的代码进行优化)

  • Indescriptive Naming - 非描述性命名(P.3: 表达你的设计意图)

  • Duplication - 重复代码(ES.3: 避免重复(DRY),避免冗余代码)