川陀大学图书室

计划 进行中。

欢迎,互联网的游荡者。您偶然发现的这些手记属于传闻中常被称做 shimmy1996 的个体。换句话说,这里是我的博客。“Shimmy Xu”不过是我的 凡间之名

除了 HTTPS 之外,我的博客还在这些位面里有着入口:

协议地址
Atom时间线日志鸮文评论区
Gitgit://git.shimmy1996.com/blog.git
IPFS/ipns/shimmy1996.comipns://shimmy1996.com

留下评论或直接给我发送 电子邮件 吧!这是我的 PGP 密匙 和指纹:

5672 AC27 2669 A07A BD28 0896 ACC6 C791 312C F84D

如果您不着急离开,不妨也拜访一下我的 朋友们。当然,如果您有着高涨的冒险兴致的话,那就来沿着 IndieWeb 网环冲浪吧: 🕸💍

本站所有内容使用 Creative Commons 署名-相同方式共享 4.0 国际许可协议(CC BY-SA 4.0)。

我从没想过我居然也有在(复数台)4K 和超宽显示器(的组合)之间摇摆不定的一天。

看起来苹果有一堆模糊的规则来决定有多台 i 设备同时听到指令时哪一台的 Siri 会作出回应(而且这个世界上居然有人在潜心研究试图找到其中的规律)。要是“Hey iPhone Siri,停止闹钟”真能奏效就好了,这样我就不用每天早上对着一台充满困惑的 iPad 大喊大叫了。如果有“Hey Siri #31174”或者“Hey Lord Sirious”的支持也不错。

今天是 AoC 的第 17 天!我已经追平了我的的 2019 年记录!不过今年的问题确实感觉容易一些。

昨天下雪了。我注意到这些盐粒大小的冰片时不时地在我因为戴着口罩而起雾的镜片上留下点点痕迹。更加有趣的是结了一层薄霜的钢制桥面:我的自行车在上面留下了一条双螺旋形的轨迹。

Get GOing

我今年 完成Advent of Code!除了问题比去年(对我来说)变得简单了之外,我换用 Go 完成了今年的挑战:我觉得 Go 特别适合这类任务。

今年的谜题主要涉及字符串解析以及寻找最高效的数据结构。大部分解题流程的逻辑都比较简单,几乎不需要任何复杂的算法。

对于字符串解析,正则表达式(Go 自带支持)是最佳途径。今年为数不少的字符串解析问题意味着想只用基本的字符串操作解答会十分痛苦。我已经看够了用查找、剪切、提取子串等操作拼砌起来的怪物代码。

绝大部分时候,切片(slice)和集合(map)足够满足我的要求。Go 支持多返回值,却不支持元组(tuple);不过,我发现序列(array)和结构体(struct)基本取代了元组的功能。这些数据结构由于 Go 鼓励使用常量而非枚举类型(enum)而变得更加多功能:将所有信息储存为整形(int)使得一些捷径成为可能,同时也省去了类型转换的麻烦。和更让人安心的支持类型检查的枚举类型不同,(滥用)这些选择让用 Go 写短程序有着和行走在刀刃上(或者在 Zoom 通话时不穿裤子)一样的莫名快感。

Go 简单明了的控制流和缺少多范式支持的特点让指令式程序编写起来非常容易。不必担心是否应该使用 STL 算法或者串联迭代器方法:写个循环就好了。合理的对象可变机制也有帮助:不论是边遍历边修改集合元素,还是将带有切片的结构体传给函数,我发现我可以很快地让 Go 做我所想的事情,而不用反复翻阅语言规范。

这让我想到了 ZOI 这一经验法则:只有零、一、无穷多是合理的个数。不少我所熟悉的编程语言,例如 Python、C++、Rust,都为了追求一致性落在这一光谱的两极:一切都有着相同的规则,用户就和语言本身一样有着决定语法含义的能力。Go 有着更多的异常之处(尽管 Go 并没有异常支持)和只有“一”个的例外:内置容器神奇地有泛型支持、它们方法的返回值数量可变、除它们之外的容器都没有获得迭代支持的资格。

这只是一个不涉及 Go 其他特性(例如界面(interface)或协程(goroutine),不过这些对解决 Advent of Code 并不是必须的)的简单比较。我觉得 Go 的选择独特且有趣:一切都,嗯,不大一样

回顾 2020

今早,窗外的屋顶上都是白色一片。那些广告牌在阴沉的天空下失去了平时的光辉。就连橙色的路灯也没法让一辆车都没有的道路显得温暖。不过,来自少数建筑物窗户的光点却比平时更加耀眼。

真是不寻常的一年。时空密度比平常高出不少——能将阳光削弱成象牙白的微弱光晕的程度——看看过去这多事的三百多天。

我其实挺高兴看到 2021 年的第一天感觉就和 2020 年中的任何一天一样。给这么一个随意选定的数字+1 不应该对现实产生任何实际变化。不过也许正是因为缺少变化,我们才需要时不时地看到一些新的、能让人眼前一亮的东西,不论多么微不足道。

话说回来,偶尔享受下这种廉价的心理学把戏大概也不会有什么坏处。

新年快乐,我们终于等到了。

2020: 天启

这次我可不会在进度上再打马虎眼了。

  • 跑 550 英里。 跑 205 英里并骑车 865 英里(2.5 倍)。[205/205][872/865]
  • ☑ 写 14 篇日志。[16/14]
  • ☑ 不吃甜面包圈。
  • ☐ 了解 Go 和 C++20。[1/2]
  • ☐ 建立正式的数据备份流程。
  • ☐ 阅读非技术类书籍。

由于 COVID-19,我从 3 月初开始就停止了在户外跑步。在偷懒了几个月后,我在 6 月份买了一台自行车和训练器,改为在室内骑行。2.5 倍的换算比例是基于我骑车和跑步的速度差异而定的。在一个更可控的环境里锻炼非常让人享受。除了能方便地补充能量和不受天气影响外,能够在骑行的同时看动画/听声优广播真是太赞了。果然科技是第一生产力!

写关于博客本身的博文仍然占据了我的日志中相当大的一部分(这真是种令人沮丧的自欺欺人的行为),不过至少我积累了相当数量的鸮文:这些转瞬即逝的想法流对于日志来说太过松散,但仍然有趣到我想把它们记录下来。我同时也用鸮文来存放我对其他博客的回复。略显繁琐的回复流程让我意识到,大部分时候我似乎并没有什么真正想说的内容。别误会,这并不意味着这种麻烦的半手动回复系统有多么优越,但我觉得能够提高所写内容的信噪比是有实在的好处的,不论对我还是对其他人来说。

啊,甜甜圈,这刷满蜜糖的罪恶之枷锁,这油炸的放纵之镣铐。虽然我很想把成功抵御诱惑归功于我的钢铁意志,但 COVID-19 才是根本原因。我的懒惰和对隔离生活的兴奋劲消除了任何深夜造访 Dunkin'的机会。大概是时候把挑战升级了。

Go 写起来相当无脑而有趣。找到一个有效的掌握 C++20 特性的方法则要难得多。<format> 是新特性中最直截了当的一个,基本用法、功能和你能想象出来的基本一致(还没有编译器支持新标准的版本,尝鲜的话可以用 原版)。<ranges> 类似于 Rust 的迭代器方法,而且允许串联。也许是时候更新那篇 用 C++ 来 enumerate() 的日志 了。<concepts> 应该是 SFINAE 所试图解决问题的真正答案,但我还没有一个好的实际运用环境来测试它的威力。顺便一提,Zig 用编译时间函数来实现泛型的方法也很让我感兴趣。

3 份副本,有了。2 种不同的储存介质,有了。1 个非本地备份,还没有。这还是已经算上 Syncthing 副本(这能不能当作一份完整的备份还有待商酌)的进度,看来我离完成正式的备份流程还是有不少距离。

严格地说,我确实 阅读 了非技术类的书籍;只不过我没有 读完 任何一本(不算漫画的话)。事实上,除了那些我纯粹为了娱乐而读的,我并没有什么想读的非技术类的书。大多数非虚构类的书看起来像是被阿谀奉承和幸存者偏见腌制过的成功者故事。而我又不怎么提得起兴致阅读小说:和获得一个能够复述给他人听的故事相比,我更愿意了解一种新的算法。啧,这听起来真刻薄。难道我觉得我的日志能赢过所有的小说?总之,在认输之前,今年我会给出更加认真的一次尝试。

2021: 未来昔日

疫情引发了前所未有的怀旧情绪。人们表现出来的对“正常日子”的眷恋,却让我莫名地反感。并不是说我对这种异样的气氛完全免疫,只不过它对我的效果似乎正好相反:我发现自己变得比以前更加坚持己见了。说到底,人们不都暗自认为自己的水平在平均之上、能够作出更加合理的判断吗(尤其是在看完新闻之后)?同时,我的理性则告诉我要在这种冲动变成傲慢,或更糟糕的无知,之前将其抑制住。也许我应该学会把这些想法以日志的形式释放出来,比如写成非技术版本的 EWD

换个积极一些的话题吧,我向朝 5 晚 10 生活习惯的过渡非常成功。封城居家办公对这一过渡有着很大帮助:我能够更加从容地调整睡眠时间了。现在每天早上我都有充足的时间用于锻炼,甚至还可以选择睡上两个小时(三个小时也不是不可以!)的回笼觉。考虑我在年末假期的短短几天里就完成了最后 100 英里的骑行,今年我会把目标里程数提高一些。

生活习惯的改变也让我意识到我睡前的几个小时大多在碌碌无为中度过:在一天的工作和急需的晚餐后,我不大有动力进行锻炼或长时间集中注意力于任何事情。同时,受到用 beanancount 记账的影响,我有了将类似的方法应用于时间管理的想法。我正在在测试用 Toggl Track 记录我是如何度过一天中的大块时间的,以及中间有多少分钟随着我在大脑空白状态下刷 YouTube 而溜走。对了,有这么一个可以勉强当作读书版 Strava 的系统应该能让我的阅读目标更容易实现。至于要读哪些书,我觉得经典小说是个不错的开始。

继甜甜圈之后,我今年的挑战是戒掉曲奇饼干,我工作场所的午餐时常提供它们。直接吃曲奇饼干的原料(例如成条的黄油和大堆的砂糖)只是想想都觉得恶心,但烤成饼干后吸引力却能指数性增长,真是奇怪。

我怀疑这个现象到了一定年龄才会出现:人类成长到一定程度时,听觉会和电吉他的声音一拍即合,使其变得无法抗拒。我想多花一些的时间来学这一乐器、在 2021 年底时能弹好一两首歌。

Z 之后的世代居然叫 Alpha,真是完全不讲道理。吔屎啦,这毫无逻辑的命名方式。吔屎啦,COVID-19(当然是因为命名方式以外的理由)。

Un de ces matins disparaissent
Le soleil brillera toujours.

Re: Deadline 产后护理

有点庆幸喝 Monster 赶 deadline 的日子已经过去了。每次赶 deadline 我都在想要是早一小时/天/周/个月开始有多好,不过最后大部分时候还是回到 deadline 复 deadline 的恶性循环里。XD

想想原因,我觉得自己在高压作业完成后会对自己进行过分补偿:deadline 有多么赶,就会下意识地相对延长“产后护理”放松的时间和强度、如此这般直到下一个 deadline 的来临……维持稳定的生产力输出对我并不怎么容易,尤其是在作息比较自由的环境下。我的生产力水平更接近随机峰值而非有规律周期的曲线:偶尔在干劲来了的时候我可以满频长时间运转,但是对于比较日常的活我就不那么提得起劲。

说到做家务,我之前掘地三尺彻底清理了厨房的灶台(在搓坏7个钢丝球和小半瓶清洁剂之后),然后顿时感觉到神清气爽生活一片美好。果然有个称心的工作环境还是很重要的。

个人介绍与多尺度写作与可扩展人格档案

换句话说,这是为什么我没有在站点上设置“关于”页面。

个人介绍

我一直觉得个人介绍很难写。

我不怎么待见这样的个人介绍:

史科特・危险・索罗,MIB,是 WHSA 认证的西格玛级虫洞冲浪专业人士。他敢于开第一枪,会毫不犹豫地交叉粒子流,善于进行第四维度的思考。

这读起来就像嚼他人自我风味的泡泡糖一样让我感到恶心。我总忍不住把这些听起来冠冕堂皇实则空虚异常的表述当作是试图给在线内容增加可信度的绝望尝试。

大多数时候,我选择不在网上写个人介绍。我的旧 WordPress 博客上的关于页面是少数例外之一:

EE 狗;技术渣,WP 新手;ACG 相关;喜欢硬件但是没有小钱钱;足迹可能遍布各大社交网站,通常名字为 shimmy1996;求友链 XDD。

即使是这种简单的介绍,对我来说也有种过于露骨的感觉。在其他情况下,我会使用随口编出的科幻风无稽之谈,例如:

川陀大学地外生命饲养与烹饪技术系

编造这些空想职业其实非常有趣,我几乎可以整天沉迷其中而不感到厌倦。这只是我库存中的一小部分:

  • 超级坏蛋技工(从事他们的修理和维护工作,而不是帮他们统治世界);
  • 土星民俗学和恶魔学爱好者;
  • 鱼语(亚特兰蒂斯语的一种方言,为北太平洋的甲壳类和海洋哺乳动物所使用;我知道,这名字非常容易让人混淆)母语使用者;
  • 根沸能板(时伏电池模组,你可以理解为一个反向通量电容器)工程师;
  • 超声音乐(不,这不包括蛇爵士乐,因为它们远比不上鲸布鲁斯或者蝙蝠摇滚)收藏家;
  • 星等调节专员;
  • 梦境摄影与作梦专家。

如果不是因为全光谱摄影真实存在,这个列表还会再长一些。

啊,不难看到我很容易就会被这有趣的活动分心。让我们回到如何在这个有着鸟类(或者说是生物燃料侦查用无人机)却没有树章鱼的地球上写个人介绍的话题上吧。

为何我在读个人介绍时总下意识地觉得它们是以树立权威或者“建立个人品牌”为目的而写的呢?这不意味着对别人的资历表现出敌意和轻视的我才是表现出近似优势情结现象的一方吗?还是说从小听到大的“谦虚是最好的美德”终于开始产生反效果了?如果个人介绍的目的是便于他人将我的个性轻易地、削足适履一般塞进寥寥数个标签定义的边框里的话,那我宁可不提供这一可能会从网站内容分散注意力的目标。话又说回来,如果我经由站点所展现出来的个性能够被区区个人介绍页所扭曲,那也许站点内容也不具有多少代表性。

多尺度写作

我目前将站点上的内容大致分为三类:

  • 日志:任何带有发布时间和标题的内容;
  • 鸮文:任何具有发布时间但没有标题的内容;
  • 固定:任何没有发布时间的内容。

目前为止,我一直将个人简介页放在“固定”类别下。 但是,我开始逐渐意识到显示发布时间与否有着更微妙的含义。

最早让我意识到这一点的是一次经由 RSS 阅读器点进一篇没有标明发布时间的日志的经历。由于我对日志标题有点印象,我本能地开始在寻找任何类型的时间戳。一番侦查工作后,我在 HTML 源码里找到了发布日期的蛛丝马迹。在意识到这一页面早已发布、只不过是因为网站源的格式更新才在 RSS 阅读器中重新出现后,我很快关闭了那一标签页。和上一次读到时相比,这篇日志会不会有些地方措辞发生了变化?有这个可能,但我的记性没有好到能察觉这些的程度。有没有可能这篇日志其实经过了大幅修改?的确也不能排除这种情况,不过要是页面上没有会让人因为担心错过而焦虑异常、大红色字体的“更新于 XXXX-XX-XX”,我大概还是不会看下去的。顺便一提,我造访的另外一些博客除了标注发表日期之外,还会放上一条非常显眼的横幅来警告读者页面内容可能已经过时、作者的观点也可能已经改变。这显而易见的常识居然需要免责条款一样的声明让我觉得有点滑稽,不过这倒是很好地引出了我的观察:我在读到没有发布时间的页面时会将其视为不需改动的成品、已完成的杰作、(作者眼中)宇宙的真理。

我想要通过个人介绍来表达的内容不兼容一般的固定页面格式。那有什么其他的选择呢?我并不想要一个 E/N 站点,因为我觉得整理思想碎片这一过程的价值至少等同于、甚至超过收集这些碎片本身。我有考虑过设立 个人维基,但我想让页面的每个“主要版本”分别存在,而不是把所有改动不论大小全部扫进编辑历史里。虽然对于技术性内容而言,包含了所有勘误的最新修订版自然是最佳选择,但我并不认为过去自己的想法全是过时或错误的,可我也不喜欢将过去和现在混在同一“长内容”页面上。

我想让个人介绍成为脱去水分后文字版的自我,而这是一个固定页面只能永远追赶而不可到达的、不断随着时间的推移而变化的移动目标。在固定页面和日志之间,有个空缺的时间尺度:我需要一种能够比固定页面更快展现变化、但又比注明发布时间的日志更加持久的格式。

可扩展人格档案(XPA,eXtensible Personality Archive)

不觉得这名字超赞的吗?XPA 还恰好是 负责修复 DNA 损伤 的一种蛋白质及其对应基因的名字。

好啦好啦,在把这一切贬低为不必要的折腾之前,给我个解释的机会。比起一个固定的个人介绍页,我觉得最合适的替代品是一系列逐渐被更新的记录,像一本书的不同章节一样。有些书籍,例如漫画或连载小说,通常是马尔可夫过程般一章接着一章地不停发布的;我设想的则是一种修订与更新更频繁发生的非线性增长。

我访问的部分博客有着与“日志”独立开的、目的类似的“文章”或“观点”分区。比起这些,我所想的格式更接近 RFCPEP 这类文件。XPA 会被编号,而每个 XPA 的内容会是我对某个主题相关的当前一切想法,并可以被新的包含类似内容的 XPA 所取代。同时,日志则保留给我做过或经历的具体事情。换句话说,XPA 包含我字面意义上的思想状态,日志和鸮文则用来记录这些状态之间的一些增量变化。

严格按照定义,XPA 实际上是一种比我最初所想要灵活得多的格式:对影视作品的评论也可以归入它的范围。想想那无数的可能性!现在我只要把剩下这点微小的工作做完就可以开始了:确定怎么在站点上显示 XPA,是否从 0 开始计算编号,想好应该使用那种进制,决定编号的具体格式……

啧,命名真不是件容易的事。