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