AI 让写软件的门槛大大降低了,于是这两年独立开发者和软件数量都有了一个爆发式的增长。但很多人一头扎进来之后,发现自己写的软件似乎没人用,也几乎没有赚到钱。 这个情况其实和隔壁的网文圈很类似,在网络小说平台发展起来之前,写小说并发布出版是一件门槛很高的事,通常只有专业人士或生花妙手才能完成,因此作家是一个很受人尊敬的头衔。 到了网络小说时代,写作并发布一部小说则变得非常简单,几乎没有门槛,比如番茄小说平台,只要认真写一个两万字的开头,基本都能签约过稿。据报告,2025 年国内的网络小说作者数已经超过了 3000 万
oldj's blog · 2026.09.21 · 待分类 最近几年我一直在开发写作软件 WonderPen ,去年我对 WonderPen 的底层数据存储格式做了一个重大重构,将原本使用 JSON 存储的数据迁移到了 SQLite 数据库。这儿回顾记录一下相关要点。 原本的方案 WonderPen 是一款写作应用,用户可以使用它写文章或笔记,以下统称为文档,一个非常底层的基础需求是如何存储这些文档。 在最早的设计中 WonderPen 功能不多,为了让系统尽可能简单以便尽早发布,我采用了 Markdown 文件来存储文档,每个文档就对应硬盘上的一个 Markdown 文件
oldj's blog · 2026.08.18 · 待分类 AI 时代,软件开发的门槛大大降低了。这两年经常看到有人说,用 AI 每个月 vibe 一个 App 出来,不成功就换一个,做上 n 个总会有成功的。 这个说法让我想起来以前看过的一幅漫画:一个人挖井,他在很多地方都挖了坑,但每个都不够深,到最后也没挖出水来。 那些不停地做新 App,希望以量取胜并期待哪天有一个突然成功的做法,和漫画中人物的做法很类似。 不排除有人运气很好,刚好在一个地下水很浅的地方挖掘,于是很容易就挖出水了。但这种情况下,你能在这儿挖,别人也能来这儿挖(跟风/抄袭),很快这块地就会被挖得乱七八糟
oldj's blog · 2026.07.19 · 待分类 一转眼, SwitchHosts 已经存在了 15 年了,距离上一个大版本更新也过去 5 年了。最近抽空把 SwitchHosts 升级到了 5.0,最大的变化是将底层从 Electron 换成了 Tauri,安装包的体积小了很多。 这个过程的大部分工作都是用 AI 完成的,在这儿记录一下。 动机 这次升级的主要动机是想解决 SwitchHosts 体积过大的问题。 之前的版本是基于 Electron 实现的,打包后安装文件有大几十兆,且随着 Electron 版本的提升,这个体积还在不断变大,因为它内部依赖的 C
oldj's blog · 2026.05.26 · 待分类 自从 2010 年注册了域名 oldj.net 并架设了这个博客,一转眼已经 16 年了,这么长的时间足够发生很多事,比如杨过和小龙女都已经再次重逢了,本站也经历过了 N 次重构甚至推倒重来。最近,在 AI 的帮助之下,我重写了站点的后台,并决定将这个博客系统开源。 历程 这个博客最早的版本是使用 Django 写的,后台使用了 Django 自带的 admin,前台则使用 Django 的模板输出 HTML。 一段时间之后,我有点懒得继续改进,便迁移到了 WordPress。不得不说,WordPress 的功能非
oldj's blog · 2026.05.12 · 待分类 老牌写作软件 Scrivener 的论坛上有一篇关于是否要支持 AI 的 帖子 ,我花了一些时间仔细地把这篇帖子以及所有回复读了一遍。读完之后,我发现这不是一个简单的“要不要 AI”的技术讨论,更是一场关于写作工具本质、创作者身份认同、以及技术边界的长期争论,也是 AI 为我们这个时代带来的冲击的一个剪影,值得写一篇博客记录一下。 背景 从 2023 年 3 月开始,Scrivener 的官方论坛上发生了一场马拉松式的辩论,主题很直白:要不要给 Scrivener 加上 AI 功能? 这条讨论一直延续到 2025
oldj's blog · 2026.05.02 · 待分类 之前写过一篇 使用 acme.sh 申请 SSL 证书 的帖子,最近把这个流程放到了 GitHub Action 上自动化完成,在这儿记录一下要点。 GitHub Action 是托管在 GitHub 上的自动化服务,免费账户的私有仓库每月有 2000 分钟的运行额度,可以用来做很多运维、CI 相关的工作。 要使用 GitHub Action,只需在项目的根目录下的 .github/workflows 中创建一个 .yml 文件即可,比如新建一个 .github/workflows/renew-ssl.yml 。
oldj's blog · 2026.04.10 · 待分类 什么是 AB 工作法 想象一下,你有两个工作台: A 工作台 上摆着你最重要的那个大项目——可能是一个复杂的架构设计,可能是一本书的核心章节,或者是一个需要深度思考的研究课题。这个工作需要你全神贯注,不被打扰。 B 工作台 上则堆着其他各种各样的事情——紧急但不复杂的需求、日常维护工作、突发的小任务、需要回复的邮件等等。这些事情重要但不需要长时间的深度投入。 AB 工作法的核心思路是:将各项工作放合适的工作台上,然后你的注意力在这两个工作台之间定期切换。比如上午在 A 工作台专注做深度工作,下午切换到 B 工作台处
oldj's blog · 2026.03.25 · 待分类 我有一个运行了好几年的 Django 项目,之前一直在使用默认的 pip 管理和安装依赖,最近切换到了 uv ,感觉还不错,在这儿记录一下。 什么是 uv 根据官网的介绍,uv 是一个 Python 包以及项目管理器,非常快,使用 Rust 开发。 安装和管理依赖只是它的功能之一,除此之外,它还可以创建虚拟环境,即可以取代 pip + virtualenv 的功能。 我测试了一下,uv 确实比 pip 快了很多。在使用相同的镜像源,且都是纯净的 docker 环境下,使用 pip 安装项目的依赖花了约 88 秒,但
oldj's blog · 2025.11.29 · 待分类 由于项目中要使用富文本编辑器,过去一段时间我深入研究了一下几个知名的富文本框架,在这儿写一下体验。 这不是一个全面的分析,仅代表个人观点。 Quill 我最开始尝试的是 Quill 项目,因为它看起来比较简单同时又足够强大,更重要的是它还有一个 Flutter 版本 ,可用于移动端应用的富文本开发。 实际体验上,Quill 确实比较容易上手,根据文档很容易就能写出一个基本可用的富文本编辑器来。当然,如果要添加更多复杂的或自定义功能,就要继续深入研究了。 Quill 的数据结构比较特别,它自定义了一个名为 Delta
oldj's blog · 2025.06.21 · 待分类