我用AI做的三件事
ZZ音乐
https://github.com/xiaoshihou514/ZZYinYue
22年、23年那会,我沉迷开源软件不可自拔,没事就捣鼓发行版、桌面环境、各种配置。理所当然地也试了各种音乐播放器,基于QT、GTK、Electron的都试过,不知为何,始终没有一款能用很长时间。总感觉界面不甚舒服,或是使用思路与我不同。
既然没有好的软件,那就自己写。一开始,我想用QT写——大概是因为那时候开始用KDE了,QT还支持非常花哨的3D界面,我时常幻想某些界面能有酷炫的光效和可视化。我下载了一套QT环境,也尝试学了QT,但QT太复杂了,我想象的效果遥不可及。这毕竟只是个兴趣使然的项目,久而久之我便不再有兴趣尝试。

既然图形界面这么难写,我就反其道而行之,写一个极简的终端界面播放器。那大概是我沉迷vim的时候,疯狂地想要写自己的编辑器,播放器的念头也迎来了第二春。当时是尝试写了一下rust的ratatui(的前身tui-rs),但是那时候我太菜了,根本不会写项目,所以也不了了之。自此以后,我在电脑上一直用mpv听音乐(当然还是手机听得多)。
最近,写播放器的念头又被我翻了出来,于是便想让AI写写看,看现在AI到底能写出什么效果。我用的编程代理软件是copilot,装了一个zig技能。我明确了需求和我想让它用的技术栈,然后就让它全自动编程。可能由于是终端软件的原因,它能够做一定程度上的界面测试。开发循环就是我不停地告诉它有什么地方有问题,或者我想改哪里界面。全程我基本上没有碰代码结构,只调了调参数,它用的技术栈libvaxis我更是一点不会。libvaxis是一个小众的zig终端界面库,基本没有文档,以我极其基础的zig水平实在是没有耐心用这个库写。这个项目还用了libmpv、ffmpeg的一些C接口,我都不用看就知道这些库的接口文档肯定也是不忍直视。这个项目用AI达成了非常不错的结果。
我感觉可以说,不需要维护的小玩具AI是一写一个准,相当靠谱。
SBT迁移
https://github.com/xiaoshihou514/ndpc/pull/16

这是我的单类谓词形式逻辑证明器项目,我想要给它加一个网页版(现在只有命令行版本),但问题是网页版要编译到scalajs,而现有编译系统(scala-cli)不支持多端编译。因此,需要把编译系统改为sbt。但我不会sbt,sbt是一个类似gradle的编译系统,需要你写DSL代码配置(说实话,我还是不太理解为什么需要这种需求)。
AI成功完成了迁移。我顺便还添加了一下功能:
- 用上了cats-effect,标准化输入输出相关操作
- 支持依赖注入,自定义输入输出流
- 用依赖注入实现错误信息测试
AI并没有更改整体逻辑,不过有些地方还是改了,目前看来,现有及新增的测试还能通过,似乎是无痛迁移。
Scalajs
https://github.com/xiaoshihou514/ndpc/pull/17

那个网页端我本来是打算自己写的,但网页端能用的编辑器库都是基于js的,而我这个页面除了编辑器想想也没啥功能,所以就让AI写了。
当然,不是写JS,我让它生成Scalajs绑定然后在scala写逻辑。最后还是用到了一点Scalajs的库,AI表现尚可。说明AI在JS外的前端方面有一定的泛化能力。