都是给自己用的小东西
我没做过什么拿得出手的大项目,写过的都是解决自己某个具体麻烦的小工具,多数没有界面,跑在服务器上或者命令行里。这里挑几个还在用的说说,不夸大,也不列什么成果数字,它们的价值就是替我省下重复劳动,别的一点没有。列在这里也不是为了展示,是因为这些小东西解释了我不少习惯的来历,比如为什么我对备份和回滚这么执念。
几个还在跑的
- 站点备份脚本:最早 2018 年写的 shell,后来改成 Go。每天夜里把几个小站的数据库文件和上传目录打包,按日期留七份,校验一次压缩包完整性,失败就发一封邮件给我。写它是因为我有过一次误删目录、发现备份其实三个月没成功的经历,那次之后我再也不信没校验过的备份。
- 日志巡检小工具:把几个站点的错误日志汇总成一段摘要,只挑出状态码异常和重复出现的报错,早上那十分钟看的就是它输出的结果,不用挨个文件翻。
- 一个本地 Markdown 笔记索引:给散落的笔记按标题和标签建了个可搜索的索引,本质就是遍历目录生成一份静态页。博客里不少文章最早是这些笔记整理出来的。
- 图片批量压缩命令:写文档要贴截图,一条命令把指定目录的图压到合适体积,后来直接替代了书签栏里那个在线压缩站。
- 几个内部用的表单小页:PHP 加 SQLite,给熟人做点登记、查询之类的小功能,够用就停,不做成产品,也不加后台框架。
从这些小东西里学到的
最大的一条是:别给只用一次的脚本加配置项。早年我写个备份脚本都要设计通用框架,结果配置比逻辑还长,半年后自己都看不懂。现在反过来,先硬编码把事办成,第二次真要复用时再抽,抽不动就复制一份改,也不觉得丢人。小工具的目标是把麻烦消掉,不是展示设计能力,这一点我用了好几年才真信。
另一条是都得留退路。凡是会删东西、覆盖文件、改数据的工具,我都先做成打印将要做什么,确认无误再加执行开关,并且默认保留原文件。自己写的工具最容易放松警惕,因为觉得我清楚它干什么,真出事往往就是这种时候。这几个小软件没有一个超过几百行,但每个都配了一段说明,写清楚它什么时候不该跑,以及跑之前该先备份哪一个文件。
还有个附带的好处:因为全都是自己写的、没有外部依赖,换机器时照着笔记复制过去就能用,不用重新配一遍环境。它们不漂亮,也没人用,但都在替我干活,对我这种一个人维护一堆小站点的人来说,这比什么都实在。
判断一个小工具该不该写,我只问一句:这件事我这个月是不是第三次手动做了。是,就写;不是,就先忍着。