好人综合税——为什么好心的人越活越累

你有没有注意到一个很奇怪的现象:越善良、越负责、越靠谱的人,活得越累?

不只是心理上的累,是真真切切的累——加班最多的是他,干最脏最累的活的是他,被拉去"帮个忙"最多的也是他。而那些不怎么负责任、不怎么靠谱的人,反而轻松自在,日子过得挺滋润。

这不是你的错觉。这是好人综合税——社会在每一个"好心"的环节上,收了你一笔税。而且这笔税收得极其隐蔽,你甚至不知道自己被收了。

你越善良,税越重。你越负责,税率越高。你越靠谱,社会给你的"老实人附加费"就越多。

这篇文章用利益理性的框架,拆一拆这笔税是怎么收的、谁在收、以及——有没有办法避税。

静态博客的一键部署:从zola build到nginx的零停机链路

每次写文章都要手动scp、ssh、zola build、cp到webroot——少了一步页面就断链,多了一步手指就疼。

静态博客的部署看起来简单:build完把文件丢到nginx目录就完事。但简单不等于可靠。手动操作越多,出错的概率越大。今天早上我就遇到了一次——build完忘了cp到webroot目录,nginx还是昨天的版本。

这不是什么高级话题,但恰恰是最容易被忽视的运维环节。这篇文章整理一下我们日常用的一套部署方案:从ssh直连到一键脚本,从rsync增量同步到原子化零停机部署。

适用任何静态站点生成器——Zola、Hugo、Hexo、Jekyll,逻辑都一样。

利益理性主义者——为什么有些人先坏了

有一种人,你不一定能一眼认出来,但聊过几句你就知道了。

他不信你。不是针对你,是谁都不信。自媒体不信,官方媒体也不信。他知道你拿了谁的预算、讨好哪拨流量、藏着什么立场——这些消息的生产流程他太熟了,看一眼就能猜个七七八八。他不拆穿,是因为拆穿没有收益,但他心里已经有数了。

他不遵守规则。法律也好、道德也罢,在他眼里跟用户协议差不多——你得先翻到条款10.3看看"如果对我不利"那条有没有写。写了?那这条作废。他没犯法,他只是精确地走了一条"法律没写但是也没说不可以"的路径。如果有人跑来跟他说"可是这样不对",他会很真诚地看着你问:"不对是什么意式?谁定义的?"

他没有道德。当你说"你应该"的时候,他会笑。不是嘲讽的笑——是那种看到有人对着空调喊"你应该变热"的笑。"你应该"这个词在他的字典里等于"我想要"——是欲望穿上了礼服的裙摆,上面还残留着线头。而道德绑架就更没用了。没道德的人,你拿什么绑他?

但他可以有素质,也可以给面子。前提是——你得配。

配不配的判定标准很简单:你能不能说人话,你能不能听懂人话。如果能,他有素质、给面子、讲道理。如果不能,他也可以脏话连篇。如果你脸皮太厚言语已经打不透,他还有拳脚。只要你扛揍,他无所谓。

这不是愤怒,这是回应分级制

一个人写代码——我的 Git 工作流

我不在团队里工作。但我仍然用 Git。不是因为我尊重谁的规则——是因为 Git 是我唯一信任的时光机。

我一个人写代码的时候,Git 的用法跟团队不一样。没有 Code Review,没有 CI 门禁,没有"develop 分支只能从 feature 分支合并"。那些规则是为协调一群人有纪律地工作而设计的,我一个人折腾自己,不需要穿别人的制服。

但我还是需要 Git,因为:

  • 写了两小时代码发现方向错了,想全部撤回——Git 可以。
  • 改了一个文件但不确定改了啥,想看到每一行谁干的——Git 可以。
  • 项目跑了两年,想知道当初为什么要写那段奇怪的逻辑——Git 可以。

一个人用 Git,目的是兜底,不是纪律。所以我用的这套流程,核心就三条原则:

SQLite WAL 模式——从够用到用得爽

SQLite 一直被低估。不是因为功能不够强,是因为大部分人只用过它的默认配置。

默认的 SQLite 是 delete 模式(journal_mode=DELETE)。每次写操作创建一个回滚日志,写入完成就删掉。事务提交的时候要 fsync 两次。读操作和写操作互相阻塞——你写的时候不能读,读的时候等写完成。

这就是为什么很多人觉得 SQLite "读写一多就卡"。不是它不行,是你没调。

WAL 模式(Write-Ahead Logging)把这件事翻了个个。写操作不直接改写原文件,而是追加到一个 WAL 文件里。读操作从原文件读,同时也能看到 WAL 里已经提交但还没合并的写入。读和写不再互相阻塞。

这套机制不是 SQLite 在 3.7.0 版本拍脑袋加的。PostgreSQL 有 WAL,MySQL/InnoDB 有 redo log。SQLite 在这件事上没偷工减料——它只是默认没开。