nenufm.com

留声

写 AI、软件开发和日常折腾的工具,记录遇到的问题、踩过的坑和解决过程,也聊互联网见闻,以及工作之外的生活。

开发工具
认证令牌应该存在哪里:读一篇文章后的看法
读完一篇认证令牌存储文章后,我重新梳理了 localStorage、HttpOnly Cookie、服务端 Session 与 BFF 的适用场景,也补充了 CSRF、JWT 撤销和 DBSC 的边界。存储位置没有统一答案,先要确认浏览器究竟需不需要接触 Token。
Web 安全身份认证SessionOAuth查看正文 →
开发工具
Taro 小程序分享页冷启动的认证竞态复盘
复盘一个长期潜伏的 Taro 小程序认证竞态:AuthProvider 在 useEffect 中静默登录,分享页却已发出受保护请求。文章从 Git 演变和 missing_auth_header 日志还原成因,并给出全局启动屏障、刷新令牌轮换与 401 单次重试方案,也说明为什么只隐藏错误提示无法真正修复问题。
开发工具
我把前后端错误处理重新串了一遍
一次普通的 400 错误,让我顺着客户端弹窗查到了服务端响应、共享错误码、RequestError、生产日志和 Hono RPC 类型生成。这里记录我怎样把错误链重新串起来,也说明为什么直接 import type 仍会读取服务端源码,以及我最后为何保留 dts-bundle-generator。
开发工具
Drizzle ORM 与 Bun.SQL 的 JSONB 双重编码问题
记录 Drizzle ORM 0.45.x 配合 Bun.SQL 写入 PostgreSQL JSONB 时遇到的双重编码:嵌套对象被保存成 string,导致属性读取失败。文章给出 jsonb_typeof 定位 SQL、jsonb_build_object 修复和回归测试方法。
Drizzle ORMBun.SQLPostgreSQLJSONB查看正文 →
开发工具
为什么取消博客的 2K、4K 专门适配
记录博客取消 2K、4K 和超大屏专门适配的原因。我查看常用网站和 Tailwind CSS 的默认响应式方式后,没有发现页面需要随物理分辨率不断放大;相反,内容通常保持最大宽度,宽屏只增加留白。几次自定义断点还破坏了首页、文章、Tools 与 About,最终项目恢复默认断点和 max-w-7xl。
WebTailwind CSS响应式布局高分辨率屏幕查看正文 →
开发工具
把 Monorepo 里的几个项目拆出去,我是怎么保留 Git 历史的
记录我把客户端、服务端和设计资料从一个 Monorepo 拆到独立仓库的过程。重点不是 git-filter-repo 命令本身,而是怎样确认 202 个文件和 89 条提交没有丢,怎样保留 .env、日志和编辑器配置,以及什么时候才能放心删除旧目录。
GitMonorepo仓库拆分历史迁移查看正文 →
AI与大模型
Codex 使用 Luna 子代理的配置记录
按 Reddit 原帖记录 Codex 的 Sol 主代理和 Luna 子代理配置,包括 config.toml、模型目录、六个智能体文件与 AGENTS.md;用中文说明 default、explorer、worker、luna-low、deep、deep-read 的用途,并补充对话框里的 @智能体入口。
Codex子代理GPT-5.6 Luna多代理查看正文 →
开发工具
Taro 小程序弹窗抽屉的返回手势适配
记录 Taro 小程序半屏抽屉的两个交互问题:图标看得见却难以点中,系统返回又会直接离开页面。文章使用 44px 触控热区与 PageContainer 假页容器,让右滑返回、安卓物理返回键和代码返回优先关闭抽屉,并说明嵌套弹窗、遮罩动画与真机验证时容易踩到的边界。
Taro微信小程序PageContainer交互适配查看正文 →
开发工具
一次绕路:用 Hono 静态文件更新小程序里的 Markdown
记录一次将小程序协议 Markdown 从源码内置改为运行时加载的开发过程:最初绕到对象存储、版本清单和 JSON 包装,最后收敛为启动 config 下发路径、Hono/Bun serveStatic 直接提供文件。文章也说明 MIME 类型、Docker 复制和旧客户端兼容这些容易漏掉的细节。