创刊 2018.12.30  ·  一人刊物
坐标:网页 · 终端
售价:免费 · 开源

生鱼

— 关于代码、手作,以及网络里那些安静角落的周刊通信。

编辑桌前

我为那些更偏爱网络里安静角落的人,做一些小而固执的工具:不喧哗的浏览器扩展、手感接近原生的 macOS 应用,以及愿意用完整语言回答问题的终端代理。

工房里的大多数东西,最初都只是做给一个人用的,或者做给极少数真正需要它的人。偶尔有些作品会走出房间,慢慢遇到自己的读者。这份周刊就是我留下这些痕迹的地方,也是我拒绝把一切都做成“大产品”的证据。

想看最近在想什么,可以去翻 通讯;想直接看那些做出来的东西,可以去看 工房目录

署名
生鱼安乐 · Shēng Yú Ān Lè
账号
github.com/LCYLYM
个人网站
loli.by
常用语言
Swift · TypeScript · Python · Kotlin · PHP
最近在做
浪前阅读器播放器插件 · 浏览器代理 · 原生 macOS 监测工具
起步时间
2018 · 到现在已经第七个冬天
生鱼安乐 FIG. 01 — 编辑在桌前
专题 · 本期主文

关于做 先服务于自己的工具 —— 以及为什么互联网仍然需要小工房。

有一类软件,从一开始就不是为了扩张而生。它可能只服务于一个人、两个人,或者服务于那个已经懂得它笑点的小房间。它的 README 也许写得匆忙,许可证可能直接沿用了旧项目,但它往往只做一件事,并且以一种有点怪、却十分认真的方式把那件事做好。我做这种软件已经很多年了,后来我慢慢开始相信,它们的价值恰恰来自于这种“小”。

如今的互联网对“工具应该长成什么样”有一种很强烈的统一想象:它应该有完整的落地页、分级套餐、路线图、社区入口,还应该时刻表现出一种准备增长的姿态。这当然不算错,但它只描述了一种制作方式。真正让我感兴趣的,是那些不愿意被同一套模板塑形的东西。

一个先服务于自己的工具,不是失败的产品,而是一句已经说完整的话。它被清楚地说出来,然后静静放在架子上,等真正需要的人来读。

我的工房里到处都是这种“完整的话”:让通勤路上继续追剧的播放器插件、显示真实瓦数而不是系统美化数字的菜单栏监测器、用本地模型帮我整理标签页的扩展。这些东西大多不是奔着商业化去的,很多以后也不会变成产品。它们更像小批量私印物,只做给真正会用到的人。

而小受众带来的约束,其实也很慷慨。你可以保留奇怪但顺手的快捷键,可以写出带着自己语气的错误提示,可以拒绝追踪、拒绝收集邮箱、拒绝把每一个功能都包装得像市场文案。也正因为如此,这类工具更像是一封信,而不是一则公告。有时候,信会比公告走得更远,因为它是热的,是带着体温的。

这份周刊也是同样的东西。我不会为了频率而发布,只会在想法真正煮熟之后再把它端出来。以后我大概还会继续频繁使用“安静”这个词,也还会继续把代码丢进树林里,等真正路过那里的人把它捡起来。

通讯

近期条目,按时间倒序排列
04 · 四月 · MMXXVI

代理式终端 里度过的一周,或者说:我是怎么从写命令,慢慢变成写 任务简报 的。

连续七天把 Claude Code 放进终端后的现场记录:它哪里还露着接缝,哪里真的让我吃惊,以及哪些小习惯(一个 CLAUDE.md、几段 hooks、一条 skill)让助手开始像同事一样协作。

阅读全文

前端,我始终还在这样写 —— 一份对框架蔓延的个人小宣言。

先语义化 HTML,再 CSS 变量,非必要不引入多余构建步骤。这是我在八年里一次次拒绝跟着新框架重写世界之后留下的经验笔记。

继续阅读

菜单栏里的 真实瓦数

MacoPowerMonitor 如何直接从 IOKit 读取适配器和电池遥测数据,以及为什么系统默认显示的大多数时候都并不可信。

查看拆解

提示词工程 当成真正的 工程 来做。

提示词也该有版本、测试和回滚方案。只要它在生产里承担关键职责,它就值得拥有一份完整变更记录。

查看笔记

一个 老派写法 的 Markdown 写作板。

mac-markdown-pad:实时预览、真正同步的滚动联动、中英文双语界面,体积只有 1.3 MB,没有登录,没有多余负担。

查看工具
项目 语言 说明
01 Telegram-Channel-Mirror Worker 使用 Cloudflare Worker 镜像 Telegram 频道,让内容可以在国内更顺畅地阅读,也是我发布过最意外地长期有用的东西之一。 47
02 mac-markdown-pad Swift 一个原生 macOS Markdown 编辑器,带实时预览、真正理解源码位置的滚动同步,以及安静克制的中英双语界面。 1
03 MacoPowerMonitor Swift 一个菜单栏电源监测器,直接读取真实的适配器与电池遥测数据,因为系统默认读数并不总可靠。 1
04 lqreadervideosync TypeScript 为浪前阅读器做的浏览器播放器插件,让我在多个窗口之间也能把通勤时看的内容接上继续。 2
05 ai-tabs-organizer TypeScript 一个标签页整理扩展,既可以接 OpenAI 兼容接口,也可以接 Chrome 内置 AI,本地把一团乱麻的标签页重新归类。 0
06 gemini-ai-conversation-exporter TypeScript 把 Gemini 对话干净导出成 Markdown,因为任何模型都不应该吞掉我的笔记。 3
07 Pixiv-daily-top50-widget PHP 一个自动更新的 Pixiv 日榜 Top 50 小挂件,最初是做给我已经不再维护的旧博客侧边栏用的。 3
08 apktiaozhanbei TypeScript 一次比赛的参赛作品,如今更像档案保留,而不是准备继续运营的成品。 0
09 hmpc Kotlin 一个小型 Kotlin 试验项目,还没做完,但至少一直诚实地保持半成品状态。 1
10 bob-in-win-py-wxocr Python 给 Bob 翻译器准备的微信 OCR 封装,完全本地运行,不额外回传任何东西。 0
11 justatest HTML 名字写得很老实:就是一个测试草稿,只是后来意外留在了仓库列表里。 0
12 blogsystemforgit HTML 一个极简的 git 驱动博客系统,也是这张页面继续往前追的话能看到的旧系统影子。 0
查看剩余 374 个项目 →
是我桌前一直放着的那个字。
它的意思是 安静、安稳,也像一间屋子把人收进来。在我的名字里,它和 放在一起,其实只是一个很小的愿望:愿生活安稳,也愿能真正从中得到乐趣。

我不会严格按排期发布内容,我只会在想法真正煮熟之后再写出来,而有些想法可能会一直煮下去。如果你想知道下一期什么时候出现,最诚实的答案就是:给仓库点个星,然后安静等它自己长出来。

如果这里有任何东西对你有用,我唯一希望得到的回谢,就是你也能在某个时候,为别人做一件同样安静但真正有用的事。

写于桌前
第 VIII 卷 · 第 046 期 生鱼安乐