3.18

#diary #2026/3

以下是一些可能没有详细阐述的记忆片段。


由于操作系统的高度实践性工程性,在学习的过程中应当放弃对一切进行理想抽象、归纳的执着。


当文本本身已经十分直接明了时,做笔记的意义又是什么呢?像 Operatin System: Principles and Practices、Computer Systems: A Programmer Perspective 这样的书,本身的语言已经十分平易通俗,涉及的知识也不是什么深邃的理论,像学数学一样用自己的语言、理解来重新叙述、结构化一套理论的必要性大大下降。


尝试使用 Obsidian Spaced Repetition 插件来强化记忆。这种自己给自己出题的形式或许有一点 Feymann 方法的影子,从某种意义上来说这就像创造出了另一个虚拟的对象然后尝试让自己通过出题难倒它,不过虚拟对象终究还是虚拟的,所以感觉上这个形式并没有任何额外的正反馈或者记忆强化。自己给自己出题还是太难了,说不定可以由 gemini 老师代劳。


九键输入法实际上是一个成功的设计。在尝试去领 130 周年限定校园卡的路上,由于下雨一只手要打伞所以只能用另一只手打字,26 键的小方块实在是很难按的精准。以前我一直朦胧地认为 26 键的准确性要大大优于 9 键,因为九键的每一个字母格子至少有 3 个字母。9 键成功避免大部分混淆的地方就在于 aeiou 五个元音全部分布在不同的格子里面。

信息表格

我们考虑的混淆只考虑一个拼音与另一个拼音的混淆,不考虑一连串拼音与另一连串拼音之间的混淆(拼音交界处的分词)。不考虑常用打字软件自带的模糊拼音处理和未拼完的前缀预测。考虑这样一个九键输入法:设按下键的序列为 k1,k2,,kn,任意一个键 k 对应可选字符集合为 cand(k),那么这个输入法显示的任意候选汉字的拼音(必须长度为 ns1,s2,,sn 必须满足 sicand(ki) 。我们称两个拼音是可以混淆的,当且仅当存在一个按键序列使得二者同时出现在其候选列表内。显然混淆关系在所有拼音构成的集合上是一种等价关系并且这种关系可以自然地拓展到所有字符串构成的集合。在后文中的部分地方为了叙述方便,我们将这种等价关系记为 = 并舍弃其 Latex 语法。称一个拼音是不确定的,当且仅当存在另一个拼音,它们之间是可以混淆的。

记全体拼音集合 P,对于任意拼音 PP,假设其对应的汉字数(包括四个读音)为 count(P)。任取一个我们期待的汉字,取其拼音 P,其对应按键序列为 K=(k1,k2,,kn)K 对应的所有拼音为 S1=i=1ncand(ki),其中 代表笛卡尔积的左结合连乘,对应的总汉字数量为 xScount(S)。对于二十六键来说,其是可以唯一确定拼音的,确定 count(P) 个汉字。我们用 xScount(S)/count(P) 来衡量所以九键相对于二十六键的膨胀的候选汉字倍数。实际上,应当考虑到日常中汉字被使用到的频率。To be continued。


CS162 的 HW0 words 的错误处理是一个很让人纠结的地方。这一点在此前的 coding 尝试中其实早已显现,只是一直没有找到一份所谓的 ”操作标准“。今日在 gemini 的老师的开导下终于大彻大悟。

"错误" 的来源可以分为三类:

首先,对外部非法输入数据的筛选不属于 "错误处理",因为非法输入是可以预见的,应当视为一种用户数据清理,是实现软件意图中必要的一环。

对于第二类,程序员写出的 Bug 的预防属于 "错误处理"。有两种设计哲学

对于运行环境的限制的处理,也不应属于 "错误处理"。如果是软件检测不到的运行环境错误导致崩溃,那么开发者不用承担责任。如果是在软件应用范围内(需要划定一个预期的应用范围,忽略范围外的情况。如果最终需求超过了划定范围,归咎为软件设计者的失职),有机会进行处理却没有处理,归咎为程序员的失职。