一名喜欢折腾的全栈开发者。这里记录我在 Web 开发、AI 应用和一些家庭小项目中 踩过的坑、想明白的事——写下来,主要是为了别忘了。
同一个语音识别页面,桌面 Chrome 一切正常,换成 iPad 就「无法获取语音权限」。排查下来不是权限配置问题,而是 AudioContext 的创建时机不合 iOS 的规矩。
不想为了包一个 WebView 就引入整个 Android 工程生态,于是用纯 Java 手写了一个壳:全屏、返回键接管、文件选择、下载拦截,一个 MainActivity 全搞定。
家庭自用项目最初图省事用 JSON 文件存数据,用户多起来之后终于还是要迁数据库。一篇记录迁移脚本设计、幂等策略和踩坑的文章。
给家里一、二年级孩子做的陪写作业 Web 应用:家长拍一张作业单,AI 视觉模型自动识别生字词, 孩子跟着拟人语音报听写 / 练口算 / 拼英语单词,写完再拍一张照由 AI 批改,错词自动汇入错词本。 一个账号对应一个家庭,数据完全存在自己的服务器上。
这是我第一个完整跑起来的「AI 能力落地」项目:视觉识别、语音合成、语音识别各占一块, 加上自研会话认证、积分账本和给孩子的无障碍界面设计,麻雀虽小五脏俱全。
白天写业务,晚上给孩子写工具。这个站用来存放我在开发过程中真正查过、试过、验证过的东西—— 多数文章起源于一个具体的 bug 或一次重构,写的时候尽量把「为什么」讲清楚。 如果某篇文章恰好帮到了你,那就值了。
$ echo "thanks for reading" | wall