不知道我们要等多久才会有笔记本电脑/智能手机的面部解锁系统支持手势(相当于以前的锁屏密码)?比如要求作摆出绮罗星才可以解锁。

基于 M1 的 Mac 的性能大大出乎我的预期。尽管足够强大的基于 RISC-V 的处理器流行起来才是我最想看到的景象,我仍然很高兴 x86 有了一个授权限制不那么多的架构作为竞争者。

这些新 Mac 的能效比真是令人眼馋。不过它们看起来对用户升级和维修不怎么友好,而且短时间内不能很好地运行 Linux。它们的出现不得不让我开始考虑传统的“所有系统部件都是可插拔模块”的升级模式是不是个值得追求的目标,尤其是在笔记本电脑这样的设备里。如果我们能够将片上系统的价格降到足够低的程度,年抛 CPU 或许也不那么离谱。

我从没想过我居然也有在(复数台)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.