当前位置: 首页 > news >正文

重复造轮子很蠢,但我还是自己写了一套博客系统

重复造轮子很蠢,我非常清楚,不需要任何人提醒。但犹豫之后,我还是自己写了一套博客系统。

先回应一个很多人会有的疑惑:现在都什么年代了,怎么还有人自己做博客?这个问题我在上一篇里写过——为什么我选择做个人博客。简单说,做博客不是目的,我是想通过长期写作养成输出表达的习惯,给自己留一块能完全做主的地方。

但上一篇讲的是"为什么要写博客",这篇讲的是"为什么连博客系统都要自己写"。后者听起来更离谱:自己写博客就算了,还要自己造一个写博客的工具?这确实是我干出来的事。

从 Halo 说起

最开始用博客,我图省事,选了 Halo。它是开源的、开箱即用,装完就能跑,社区也大,出了坑有人踩过。

它的主题样式不符合我的审美,但我想,改造一个静态网页模板应该很简单,就自己设计了一套主题模板,配上 Halo 的后台管理系统来用。刚开始还行,Halo 的底子足够好,我自己改改皮,勉强能看。

真正开始不舒服,是从后台慢慢显出来的。

Halo 的功能很全,全到我用不上那么多,但也没法去掉。后台里那些插件、生态、扩展,我一个都不想装,它们却一直躺在那里,占着位置,每次进后台都能看到。我不需要的东西,也要为它承担存在感,这种"附加"让我很不舒服。

后来我遇到一个更具体的场景。有些时候我不想写长文,只是有点感想,想随手记下来。这种时候"说说"比文章合适——短,轻,不要求完整。但 Halo 的说说是个插件功能,得先装插件。装完之后,插件集成的样式和行为,又和我的审美预期对不上。改起来也费劲,插件是个黑盒,我不想为它研究内部实现。

想到没有更好的选择,我也就勉强忍了。

忍无可忍的那一刻

忍,一直忍到服务器开始挂。

后台那台部署博客的服务器,是一台 2C2G 的腾讯云轻量服务器。它老是出问题,网站时不时打不开。一开始我以为是腾讯云的系统服务不稳定,排查了很久,查系统日志、查负载、查进程,绕了一大圈,最后才意识到:凶手是 Halo 自己。

Halo 是 Java 写的,跑在 JVM 上。一个博客系统,把一台小服务器的内存吃得干干净净。平时占用六七百兆,内容多一点的时候一个多 G,甚至能冲到两个 G。2C2G 的机器,光它自己就能吃掉一半还多,剩下的一点资源,扛不住任何风吹草动。

对比一下我自己后来写的这套系统:几乎一直稳定在 100MiB 以下。

这个数字差距有多大,做过服务器运维的人都懂。JVM 不是不好,它成熟、生态好、干什么都行——但它是一个企业级的运行时,为一个"我自己的博客"守着两三个 G 的内存,这属于杀鸡用牛刀,而且这把牛刀还会把鸡笼踩塌。

我终于忍无可忍,决定自己写一套符合自己审美和需求的博客系统。

犹豫:造轮子是很蠢的

做之前我确实犹豫过。

重复造轮子的自嗨式狂欢,蠢。这是程序员圈子里的公开常识:你有现成的轮子,功能比你全、踩坑比你多、维护的人比你多,你偏要自己写一个,写得还没人家好,最后还得自己维护。这事的蠢,我不需要别人提醒。

但转念一想,我做个人博客的初衷,是希望通过长期写作养成输出表达的习惯。写作是长期且持续的行为,可能要坚持很多年。而工具是我每天都要用的东西——一套蹩脚的工具,会让我更容易放弃写作的兴趣。

如果博客系统用得顺手,我可能十年二十年地写下去;如果它每天都膈应我一下,我大概三个月就弃坑了。从这个角度看,投入一点时间做一套顺手的工具,是长期投资,不亏。

这么一想,犹豫就少了大半。我需要的不是"更好的轮子",我需要的是"每天用得顺手的轮子"。

和 AI 讨论这件事

决定动手之前,我也把这个想法和 AI 讨论过。

AI 的回答很诚实,近乎冷酷地指出了这种造轮子行为的低价值:你是在重复造轮子,对大多数人来说,维护一套自研博客系统的成本,远远超过它带来的收益,这是典型的投入产出不划算。

但它也肯定了一些潜在价值——极低的内存占用、完全对齐个人审美的界面、原生支持 AI 集成,这些对"我"这个单一用户来说,是实打实的收益。

这个回答没有拦住我,反而让我更踏实了。因为它把问题拆清楚了:对绝大多数人来说,自研博客是蠢事;但对我这个具体的场景,它是划算的。我要做的不是"造一个更好的博客系统",而是"造一个长成我样子的工具"。

AI 在这里的作用不是给我壮胆,是帮我把模糊的冲动,理成一个清晰的判断。

我想要什么

新系统我给自己定了几个目标。

审美,和我的品味对齐

我喜欢极简克制的设计风格,最值得参考的就是 Typora 这种所见即所得的编辑器——简洁、现代、优雅,没有花里胡哨的功能。写文章的时候,界面干净得只剩文字本身,光标落在哪,格式就呈现在哪。设计编辑器时,我几乎完全照搬了它的编辑体验。这对我来说是刚需:我每天要对着它写东西,它好不好看、顺不顺手,直接决定我愿不愿意打开它。

轻,轻到可以忽略

被 JVM 坑过一次,这次我想让博客系统轻到可以忽略不计。Rust 编译出来的单二进制,跑起来内存占用极低,没有运行时,没有虚拟机,一个二进制文件加一个数据库文件,就是整个系统。我要的是它安安静静待在服务器角落里,别来烦我。

让 AI 直接落笔

我现在习惯和 AI 探讨各种问题和想法,会产生不少新的思考和产出。如果 AI 能把我们的讨论结果直接转录进博客,我就能把精力放在思路本身,而不是码字上。这意味着博客不是只给"人"用的,也是给"人 + AI"这个组合用的——我负责想,它负责记。

手机端,抓住转瞬即逝的表达欲

原来的博客在手机端很难用,导致我有想法时必须先走到电脑前。但很多时候表达欲转瞬即逝——洗澡时想到一个点子,通勤路上冒出一句话,等我真的坐到键盘前,冲动已经没了。如果手机端能有好的写作体验,我才会真的习惯随手记录灵感。

这四个目标,每一个背后都是一个具体的、被现实逼出来的场景,不是拍脑袋想的"功能清单"。

我不想要什么

除了想清楚"要什么",我还想清楚了"不要什么"。后者可能更重要。

单用户

这个博客是单用户的。只有我自己写,不需要注册、不需要权限体系、不需要审核,后台就我一个人。

没有评论

它没有评论功能。关于这一点,我在上一篇里写过原因:不想承担审核负担,更不愿意承受社交负面能量。评论区是个漩涡,一个观点发出去,接回来的是赞许、反驳、嘲讽还是谩骂,不由我控制。就算关掉评论区,也会有人通过其他渠道找过来。做个人博客本来就该是想写就写,不想看别人的脸色。

没有社交

它也没有社交功能。分享、点赞、关注、推荐那一套,统统不要。我不需要它"涨粉",不需要它"活跃",不需要任何数字来证明我的内容有价值。

这些反主流的决策,放到商业产品里全是扣分项。但放到一个给自己用的工具里,全是自由。我砍掉它们,不是觉得评论、社交没价值,而是想明白了一件事:博客对我来说首先是写作工具,不是社交产品。社交产品有它自己的逻辑,但那是另一套玩法,我不想把这两件事混在一起。

克制,不让功能膨胀

还有一条我给自己立的规矩:功能只从真实使用里长出来,不从"可以有"里长出来。

说说功能是因为我真想写短文才做的,不是因为它听起来很酷;手机端是因为我真有"灵感转瞬即逝"的痛点才做的,不是因为移动端是趋势。我做这套系统的初衷,是让自己有一套稳定、可用、顺手的写作工具,而不是把它变成一个工程负担。所以我会刻意克制,不让功能膨胀变丑——每加一个功能之前先问自己:这个功能,我明天真的会用到吗?

过程:AI 写代码的真实体验

这套系统从动工到能用,花了 1 个下午加 4 个晚上——都是晚上十点半到凌晨一点这种时间。工具是 Kimi Code + DeepSeek V4 Flash 的组合,token 成本算下来,不到 20 块钱。

一个完整的博客系统:前台页面、后台管理、编辑器、图片上传、数据统计、备份恢复,用 Rust 从头写,传统方式怎么也得一两个月,我用了五个晚上。

过程当然不是一帆风顺。编辑器就来回折腾了好几轮——第一版用了 Vditor,用着不顺手,又换了 milkdown,所见即所得的细节调了很久才接近 Typora 的体验。中间还出过几回生产环境的幺蛾子:登录页 500、正文丢失,都是靠端到端测试才抓出来的。AI 写代码不是不会犯错,是它犯错的成本很低——错了改起来也快,你来我往几个回合,问题就没了。


但这就是自己造轮子的回报:哪里不对,改起来没有别人挡路。今天用着发现不舒服,晚上就能改好,明天用着就是舒服的。这种正反馈,是"忍"出来的使用体验给不了的。用别人的系统,你提需求、等版本、求爷爷告奶奶;用自己的系统,你想到什么,晚上就能动手改。

手机端,还差一点

诚实地说,手机端的体验还没有完全达到我的预期。

毕竟不是原生 App,网页端做起来,始终还是差一点意思。但做 App 或者 HTML5 化,现在的成本足够低,考虑到长期价值,我觉得值得继续投入。反正造了一个轮子,就会看到下一个——这个博客系统做完之后,我脑子里已经在想它还能怎么进化了。

造轮子,从蠢事变成可选方案

最后说回开头那个问题:造轮子蠢不蠢?

蠢,但前提是造轮子很贵。过去造轮子贵在哪儿?贵在技术门槛——前端、后端、运维、安全,一个人全要学会,这是以年为单位的时间投入;贵在时间成本——一个像样的系统,一个人写几个月很正常;贵在维护成本——写完不是结束,是开始,以后的每一个 bug 都是你的。

AI 出现之后,这些成本被压缩到几乎可以忽略。前端后端不会的,问 AI 就行;一个像样的系统,五个晚上而不是五个月;出了 bug,AI 帮你定位,维护也不再是噩梦。

所以"造轮子"从一件蠢事,变成了一个可选方案。当你可以用不到 20 块钱、五个晚上,换一套完全长成自己样子的工具,忍受就不再是最优解了。以前你只能忍——Halo 难看、臃肿、吃内存,但你没办法,造不起。现在你忍不了了,你可以直接造。

但最后还有一句提醒,也是说给我自己听的:AI 降的是造的成本,降不了你沉迷的成本。轮子造起来便宜了,但你的时间没有变便宜。所以选择造什么,以及选择不造什么,依然是你自己的事。克制,比能力更稀缺。

http://www.cnnetsun.cn/news/4194861.html

相关文章:

  • DeepSeek Harness 安装全指南:踩过版本与空间的坑,带你顺利启动插件化 Agent 框架
  • DeepSeek Harness 从零入门完全指南:从环境搭建到推理评测微调实战
  • 手撕hot100之图论!看完这篇就AC~(二)
  • 基于SpringBoot的滑雪售票系统设计与实现(毕设源码+文档)
  • 按键精灵OSS文件上传工具|高效自动化阿里云对象存储上传方案
  • Windows 10 / 11 企业版 LTSC 微软商店安装
  • 云原生笔记9
  • 从单智能体到多Agent协作:基于Dify构建复杂任务处理系统实战
  • 单片机毕设项目:基于 51/STM32 单片机的温度烟雾火焰采集与消防执行机构控制系统 基于 51/STM32 单片机的小型场所智能火灾应急处置系统设计(017604)
  • MLLM引导语义校正:解决AI视频生成语义不一致的工程实践
  • OpenClaw Skills深度解析:Filesystem与WebSearch两大核心技能实战指南
  • TT-AMX:在Apple Silicon Mac上实现Tensor-Train模型高效推理的完整指南
  • 构建可移植AI个人档案:解决模型迭代痛点,实现跨平台一致体验
  • MES软件五个战略计划:从数字化转型到智能工厂的完整落地路径
  • 30亿Token如何高效开发游戏?DeepSeek辅助游戏开发实战指南
  • 如何找到本地靠谱的焊接变位机工厂?
  • android启动流程与速度优化
  • 【计算机毕业设计单片机案例】基于 STM32 的环境感知自动通风采光控制系统设计 基于 STM32 单片机的参数阈值自定义智能家居控制系统设计(018204)
  • 【单片机毕业设计】基于 51/STM32 单片机的声光报警消防智能控制装置设计与实现 基于 51/STM32 单片机的火灾监测与水泵通风设备联动系统设计(017604)
  • 【单片机毕业设计】基于 51 单片机的 LCD1602 环境数据显示与智能排风系统设计 基于 STM32 室内多维度空气质量检测与声光报警装置开发(017804)
  • 对话式经营咨询系统:从自然语言理解到数据映射的工程实践
  • NHSE 动物森友会存档编辑器完整教程:十分钟改好一份 main.dat
  • FMA 音乐数据集:10 万级曲库到流派分类 baseline 的 30 分钟接入路径
  • 从零构建AI自动化代理:基于my_ai_town项目的核心原理与工程实践
  • 风险清单批注:法务审一审之前的 AI 预筛怎么做
  • 合同译英文:术语表先行,每段后面插译文
  • 揭秘AI编程助手:从LLM原理到IDE集成的完整技术解析
  • 商标注册用这3个套路命名,通过率能达99%?
  • 四维技术全域赋能 一网推重构企业数字营销增长新范式
  • 【单片机毕设案例分享】基于 STM32 的智能家居采光通风一体化控制器设计与开发 基于 STM32 单片机的自动手动切换环境智能调控装置设计(018204)