如何不去做一个音乐播放器
十二日战争让我意识到,对于那些生活在压迫政权之下、当局会为了压制舆论而切断全国互联网的人来说,在线音乐播放器并不是一个可行的选择。
所以,网络一恢复,我就开始归档曲目、寻找离线替代方案,并发现了 Strawberry。它是一个功能丰富的音乐播放器,让我满意了相当长一段时间,但我有个习惯:看歌词并跟着唱!Strawberry 在识别出歌曲时会从互联网获取歌词,但有时歌词并没有逐行同步,更糟的是,它会在歌词旁边显示时间戳,我觉得看起来非常烦人。我当时并不知道还有其他音乐播放器,比如我朋友在写这篇文章时才刚给我指出的 foobar2000。
我决定自己写一个音乐播放器,命名为 AMP,心里有几个目标:功能集最小化、不依赖 C++、做好系统集成让它用起来像原生应用,当然,还要用 Zig 来写(包括着色器!)。我还想自己实现 UI,因为我在刚接触系统编程的最初日子里折腾 V 的 UI 时留下了有趣的回忆。但我还没来得及取得任何有意义的进展,新一波抗议就开始了。在 1 月 8 日和 9 日的悲剧之后,又一轮断网开始了,持续了四个多月。
断网期间,Telegram 上有一些匿名的人在出售互联网接入,手段包括个人的 White SIMs、白名单服务器、Starlink 天线等等。竟然形成了一个该死的互联网黑市!仅仅 1GB 流量就要收你 5 美元甚至更多。过了一阵子价格略有下降,但依然贵得要命。政权当然从中赚了很多钱。我最终在这些服务和其他方法上花了几百美元,只是为了和朋友保持联系、让我的爱好不至于断掉。打发时间成了个问题,尤其是对我这种整个社交生活都建立在网上的人来说。
我小心翼翼地利用这条缓慢的连接下载代码仓库、文档等,以继续开发我的音乐播放器。在那段艰难的日子里,它确实给我带来了巨大的快乐。

等到连接基本恢复到断网前的水平(不过 UDP 流量仍然被封,这自然也会影响 QUIC),我的注意力转向了 LLM。我已经很难忽视围绕前沿 LLM 的热度和进展了。因为我真的从没想过要认真用它们来写代码。它们仍然到处都是新闻,而我也刚想起来,我手里还有一份 2025 年老板送的 Claude Max 20x 订阅礼物。它在吃灰,也许很快就要过期了。于是我决定试一试,在我的音乐播放器上做实验。那是一种非常容易上瘾的体验。无论我怎么努力,似乎都碰不到套餐上限,所以在连续几天不间断地提示之后,AMP 的很大一部分是 vibecoded 出来的。。
当时我以为这对一个业余项目来说是个还行的做法,以后再把它去 slop 化就行了。我哪知道自己从心理上根本没法审阅数以万计行的代码。不久之后,Anthropic 发现我住在伊朗,立刻封了我的账号。然后 Codeberg 宣布了禁止 AI 的政策,这给了我两个选择:要么把所有这些 slop 全部清掉,要么把仓库搬到别处。我选择了前者,开始逐行阅读代码并重写它们。我对自己竟然如此无知、以及 LLM 有多么喜欢把东西复杂化感到惊讶。(我希望我能展示一个例子,但我的记性极其脆弱,而且仓库里也没有重写前的历史可供查看)。
四个月后,将近一半的代码库没了,但不知怎么的,它在功能集相同(而且更多)的情况下反而更健壮了。我后悔一开始就依赖 LLMs,不过嘿,教训学到了。话虽如此,我认为仍然可能与 LLMs 建立健康的关系,只要把它们看作一个花哨的 IDE 功能。很多时候,它们只是在运行很长的 sed 或 regex 命令;这些命令人工手做时对人类来说是不用动脑的事,但仍然会耗费不少时间。目前,并且希望永远如此,我想我会走老派路线。永远不要催促你的爱好!
顺便说一句,AMP 现在看起来就是这样!

值得一提的是,模糊着色器是用 Zig 编写的,基于这篇出色的博客文章!。
v1.0 路线图:
- 音乐服务器
- Android 和 Windows 支持
- 为主流 Linux 发行版打包
- 有什么建议吗?