回到主页
个人项目No. 39

第一批用 AI 写代码的小工具

GPT 出来后最早一批用 AI 写代码做的小工具, 拿来熟悉 vibe coding: 2024 年用 PyQt5 写的文件搜索栏 摄像头悬浮窗 WSL 面板, 后来的房间布局器与抹图片元数据不动像素的 strip-exif.

终端与通用软件可现场演示

第一批小工具的难点2 段

  1. 1PyQt 四个工具未玩
  2. 2抹元数据未玩

四格依次演: 按住 Ctrl 不算双击, 悬浮窗跟屏, UTF-16 输出拆表, 桌子撞墙沿墙滑.

演示滚到这里时加载

这一段证明: 双击不误判, 跟屏, 拆表, 沿墙滑

接着看: 抹元数据不动像素

按 JPEG 标记逐段走, 删 APP1 与 COM, 像素哈希不变; 对照: 解码再编码, 像素变了.

演示滚到这里时加载

这一段证明: 删 2 段, 像素哈希不变; 重存则变

个人项目. 本人最早用 AI 写代码做的是搜索栏 悬浮窗 WSL 面板这几件, 是第一批用 AI 写出来的代码, 边做边熟悉 vibe coding 的做法; 房间布局器与 strip-exif 是后来同一路数的小工具.

搜索栏(2024-03): 双击 Ctrl 呼出, 接 Everything 的文件搜索接口; 按住 Ctrl 时系统连发按下事件, 一度被当成双击反复弹出, 加'首次按下'标志后修掉; 打字时计时器去抖, 停手 800 毫秒才搜一次, 新搜索开始前先停掉旧线程.

摄像头悬浮窗 AbsCam(2024-03): 置顶无边框窗口, 可拖框裁剪 鼠标穿透; 每帧取前台窗口所在的屏, 把自己挪到那块屏顶部居中.

WSL 面板(2024-04): wsl --list --verbose 的输出是 UTF-16, 去掉空字节再按正则拆列; WSL 的资源占用在 Windows 上只看得到 vmmem 进程, 由后台线程每 3 秒累加一次.

房间布局器(2026-06): L 形房间里拖桌子, 撞墙时两个轴各自二分逼近, 桌子沿墙滑动; 以 Claude Code 开发, 16 个测试.

JPEG 照标记逐段走: 遇 APP1(EXIF)与 COM 跳过, 其余段照抄, 从 SOS 起把熵编码数据原样拷贝, 解码后像素逐字节相同. 对照: 用 Pillow 打开再存, EXIF 也没了, 但像素变了, 注释段还在.

PNG TIFF 这类无损格式走另一条路: 用 Pillow 按像素重建一份, 元数据不带过去.

目录批量模式两处问题由盲测暴露: 已有 .clean 文件时崩溃, 输出被当成输入再处理; 两次提交修复并补测试.

同期还写了 UniScraper(2024-06, PyQt6): 9 个手机尺寸的网页并排盯三家二手站的最新上架, 共用一份持久化配置.

追问

追问 · 第 2 层为什么不直接用 Pillow 打开再存?

JPEG 是有损格式, 解码再编码会改像素; 只删元数据段, 熵编码数据一个字节都不碰, 像素才能逐字节不变.

追问 · 第 3 层有什么没处理?

方向标记 Orientation 也在 APP1 里, 随 APP1 一起删掉, 手机竖拍的照片抹完可能横着显示; 修法是保留一个只含方向标记的最小 APP1, 还没做.

联系我