最近 Vibe Coding 的玩具们
目录
声明:本文包含 AI 辅助创作。
刚水完一篇 UURC-Web 的逆向记录,回头盘了盘今年的业余项目,我才发现自己几乎没手写过代码。
我的做法很固定:需求和现象由我讲,AI 负责查资料、改代码和跑排查;我盯结果,拿实机验收,跑偏了就让它重来。上班写业务代码也渐渐变成这个状态,业余项目更放飞。现在主要靠嘴干活,像个随时返工的监工。
下面这些,就是最近下班后靠 Vibe 搓出来的玩具。
1. UURC-Web:在公司浏览器里远程控制
UURC-Web 是最近最合我心意的一个。公司电脑不让装远控,我就试着在浏览器里复刻 UU 远程。
这活儿以前能让我掉一地头发:Android APK 要拆,native 层的 libstreamer.so 要看,那套改过的 WebRTC 协议也得逐项对齐。
给 AI 接上 IDA Pro MCP 后,它能直接进 so 库里翻 Protobuf 封包、找加密 Key。真正难查的一次卡死发生在开源以后:画面放着一直正常,接管鼠标几秒后就停。每次 pointermove 都会触发三次左右的整棵组件树重渲染,100ms 一次的控制心跳被主线程拖慢;data channel 碰上背压时,旧代码还会把心跳彻底停掉。
调试事件改用环形缓冲,输入处理从大 controller 里拆开,鼠标移动也合并到每个动画帧只发一次,这才把停推问题压住。Windows 键鼠随后又单独折腾了一轮:桌面端直接收 JSON 和归一化坐标,键盘用 VK 键码;网络稍慢时,远端会把 press 到 release 之间的延迟当成长按,whoami 能打成 whoooooami。现在普通键会在 keydown 时立即发出一组 press + release,修饰键留到 keyup 再释放。
控制页现在会自动连设备,连续重连失败后改走 UU Relay,伙伴远程协助也能处理设备验证码和对端确认。音频和双向剪贴板也接上了。控制通道里的 cursor shape 会跟着输入框、窗口边缘等状态变化,自定义 PNG 光标还保留热点和缩放。我大部分时间都在描述现象、抓日志和检查实机,AI 负责顺着线索改代码。
2. SmallDesktopDisplay:桌上的像素乐园
SmallDesktopDisplay 是个基于 ESP8266(ESP-12E)的桌面迷你显示器。以前玩单片机,总要写 C++、调 SPI 驱动,再盯着那点内存抠像素。
这次我让 AI 按远程渲染架构来做。ESP8266 固件只管选择链路、上传按钮事件,再把收到的 RGB565 矩形帧刷到 TFT 屏幕。UI、页面状态和动画都在 remote-render 服务里跑,由 Node.js、React、Yoga 和 Skia 生成 240x240 的画面。
逻辑都在后端,加功能基本等于写前端。现在首页是时钟加萧山天气,公历旁边会显示农历、节气和节日;主题、字体、亮度可以在屏幕上调,也能从 Web 控制台看预览。之前塞进去的贪吃蛇、吃豆人和打砖块已经撤掉,数字雨背景在实机上也显得太乱,后来整个删了。少画这层背景以后,稳态传输量大约减半,全屏重同步从 28KB 降到了 9KB。
屏幕接上实机后,预览图里好看的颜色到了 ST7789 上会发灰,Noto 天气图标也比文字高出 5~10px。我把实机现象继续丢给 AI,它给设备输出加上饱和度和暗部 gamma 补偿,又用真实字体逐像素量墨迹边界,把图标偏差压到 2px 左右。
传输链路也重做了一遍。设备接上 USB 时,会在开机后的 1.5 秒内探测宿主机,连上就走 921600 波特率的串口推送,没探测到便继续用 WiFi。OrbStack 透不过 USB 串口,我这台 Mac 上的渲染服务也搬成了 launchd 常驻进程。相邻的差分色块会合并,CRC32 换成查表计算,TFT 的 SPI 时钟也从 27MHz 提到了 40MHz。现在时钟跳秒通常只传一个 747B 的矩形;最新一次实机记录里,全屏帧是 8.9KB,总耗时 128ms。
串口第一次跑到真机上时冒出几个很怪的问题。我把日志丢给 AI,它查到健康检查拿旧的 millis() 做减法,时间戳下溢成了约 42 亿,设备每两秒就误发一次探测;从 WiFi 切串口时,WiFi 反初始化又会阻塞,第一帧直接挤爆 4KB 的 RX 缓冲。它随后改成消费完帧再取新时间,先关 WiFi 再回复握手;宿主机收到设备重启的 HELLO 也会立刻回应。
3. x-tui:在终端里摸鱼
x-tui 是个 X(Twitter)终端客户端。官方网页用着太重,我便让 AI 做了一个跑在 Alt-buffer 里的全屏 TUI。
技术栈很缝合:fork 了一份 @anthropic/ink,再用 React 19 和 Bun 跑在终端里。操作方式照着 Vim 来,j/k/gg/G 移动,l/t/b 点赞、转推、收藏,/ 搜索。详情页退回列表时,SWR 缓存会保留内容和焦点位置。
推文配图也能直接显示。iTerm2、Kitty 和 Ghostty 走各自的图片协议,其他终端退回半方块(Halfblock)字符画。我没细抠控制序列和光标跟踪,只提了句“想在终端里像 Vim 一样刷推,还要能发图”,代码就一批批冒出来了。
4. AnchorDesk:强迫症的资料库助手
AnchorDesk 看起来更像个正经产品原型,给个人和小团队整理工作资料用。
它会解析 PDF、Docx、TXT 和 Markdown,切块后放进检索库。回答必须带引用,缺资料时再去网上查公开信息。
BullMQ 任务调度和 Drizzle ORM 的 Schema 升级都是 Vibe 出来的,长报告的大纲生成与分章导出也一样。我的主要贡献,可能是 README 里那句“本项目采用 MIT 协议”。hh
5. Lapse-box:旧手机的最后一点尊严
这个还没开源,专门拿家里吃灰的 Android 旧手机拍延时。
后台做的事还挺多。手机会连续扫描焦点,并测试不同 ISO 下的曝光和底噪;后端自动拉取原图、降噪,再用 FFmpeg 把几千张照片压成带时间戳的 4K 视频。
旧手机固定在窗台上,每天盯着日出日落。我坐在电脑前,让 AI 帮忙修 Bug,等着看自动生成的延时预览。
这几个月,我开始把时间花在拆问题上。API 的小坑交给 AI 处理,我去琢磨贪吃蛇的路径、远控延迟和系统的数据流。它写出的代码照样会犯蠢,有时修一个 Bug 又添两个,所以检查结果和及时叫停依旧少不了。
顺便,这篇博客也是我 Vibe 出来的。摸鱼快乐!
-END-