Desk
|
notes
drafts
hypomnēma
Notes
最近把 Chrome 浏览器切换到了 Helium,一款隐私优先的 Chromium Fork,不需要登录帐号,移除了大部分 Google 服务和依赖,用起来十分清爽。
由于 Helium 不再内置 Google 密码管理器,我试了 KeePass,它最大的特点是本地管理,一个加密的 .kdbx 数据库文件就可以保存所有的密码,把它放到 iCloud 或者 Google Drive 就可以做多设备同步。
在桌面端,可以用 KeePassXC 管理数据库,再配合 KeePassXC-Browser 浏览器扩展做自动填充,虽然这个方案能让用户完全掌控自己的数据,但需要额外常驻一个桌面客户端,对我来说还是有点麻烦。
最终我是换到了 Bitwarden,日常使用只需要安装浏览器扩展,不得不感慨数据自主权和方便性有时候很难同时做到极致;
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.
破晓时刻,
我寻觅之友,汝在何方?
夜幕降临,
其踪难觅。
吾焦灼之心觅得其迹:
花开之地,吾见其迹;
其爱弥漫于空气,
其声得闻于夏风。
XDG 基本目录规范(XDG Base Directory specification)的作者是 Waldo Bestian, Allison Karlitskaya, Lennart Poettering 和 Johannes Löthberg,XDG 是指 Cross-Desktop Group, XDG 制作的规范并不是官方标准,各种项目不一定需要严格遵循这些规范;
basedir 讨论了类 Unix 系统下,软件应该怎么在 Home 中存放文件:
XDG_CONFIG_HOME:存放用户配置文件,用户可以更改调整软件行为,也可以迁移到别的设备上继续使用;
XDG_CACHE_HOME:存放 cache 文件,或者非必需的文件;
XDG_DATA_HOME:存放持久化的用户数据,比如用户文件没有指定保存位置的时候,这个路径可以作为默认的位置;
XDG_STATE_HOME:存放软件的状态记录,比如软件的操作历史,可以恢复的视图,打开的文件等,不应该放在用户数据里面的持久化数据;