Desk | notes drafts hypomnēma

Notes

helium

最近把 Chrome 浏览器切换到了 Helium,一款隐私优先的 Chromium Fork,不需要登录帐号,移除了大部分 Google 服务和依赖,用起来十分清爽。

由于 Helium 不再内置 Google 密码管理器,我试了 KeePass,它最大的特点是本地管理,一个加密的 .kdbx 数据库文件就可以保存所有的密码,把它放到 iCloud 或者 Google Drive 就可以做多设备同步。

在桌面端,可以用 KeePassXC 管理数据库,再配合 KeePassXC-Browser 浏览器扩展做自动填充,虽然这个方案能让用户完全掌控自己的数据,但需要额外常驻一个桌面客户端,对我来说还是有点麻烦。

最终我是换到了 Bitwarden,日常使用只需要安装浏览器扩展,不得不感慨数据自主权和方便性有时候很难同时做到极致;

Shells

Shell 字面上有“外壳”的含义,是包在操作系统外面的一层比较薄的用户接口,Shell 提供了对运行它的系统较为广泛和直接的访问,包括文件管理、进程管理、批处理以及操作系统的监控和配置。

按照历史谱系和生态可以粗略的分成以下两大类:

Command shells
├── Unix-like shells
│   ├── Bourne/POSIX family
│   │   ├── sh
│   │   ├── bash
│   │   ├── dash
│   │   └── ksh
│   ├── zsh
│   └── fish
│
└── Windows shells
    ├── DOS/Command Prompt family
    │   ├── COMMAND.COM
    │   └── cmd.exe
    └── PowerShell

配置文件格式简史

INI 最早出现于 80 年代,嵌套不能超过一层,没有什么统一的规范,几乎每个解析器都有自己的方言,从 90 年代开始,人们开始在 Java 项目中使用 XML,它最大的问题是嵌套的层级太多了,很容易让文件变得非常冗长,之后 JSON 被发明出来,很简洁,不能用注释,不能写多行字符串,虽然对于数据交换来说很好,但是并不利于人们的维护;

YAML 和 TOML 的发明都是为了解决上述的问题,当前主流的论调是 TOML 比 YAML 更好,因为 YAML 1.1 出过比较败名声的挪威事件:挪威的国家码 no 会被解析成布尔值 false, 以及 n 和 y 会被解析成 false 和 true,这些问题在 YAML 1.2 中其实都已经被解决了;

TOML 和 INI 非常相似,它规范了现实类型,和嵌套表,如果对于一两层深度的配置文件,用起来往往没有什么问题,但是当配置的层级深度比较高的时候,就没有依靠缩进表示层级的 YAML 直观了,例子如下:

services:
  web:
    image: nginx:latest
    environment:
      DB_HOST: postgres
      DB_PORT: 5432
    resources:
      limits:
        memory: 512
        cpu: "0.5"

在 TOML 中,需要在标题中重复完整的配置路径

[services.web]
image = "nginx:latest"

[services.web.environment]
DB_HOST = "postgres"
DB_PORT = 5432

[services.web.resources.limits]
memory = "512M"
cpu = "0.5"

对于 TOML 配置,读者必须在自己的脑海中构建整个嵌套结构,对于层级较多的配置,非常不易读,而且标题中重复的字符会非常的多。

总的来看,相对简单的配置文件,用 TOML 就好,层级深、复杂的配置,就用 YAML。

原文:In Defense of YAML.

Var är den Vän, som överallt jag söker?

破晓时刻,
我寻觅之友,汝在何方?
夜幕降临,
其踪难觅。
吾焦灼之心觅得其迹:
花开之地,吾见其迹;
其爱弥漫于空气,
其声得闻于夏风。

XDG 基本目录规范

XDG 基本目录规范(XDG Base Directory specification)的作者是 Waldo Bestian, Allison Karlitskaya, Lennart Poettering 和 Johannes Löthberg,XDG 是指 Cross-Desktop Group, XDG 制作的规范并不是官方标准,各种项目不一定需要严格遵循这些规范;

basedir 讨论了类 Unix 系统下,软件应该怎么在 Home 中存放文件: