Markdown 语法与外置标签写法汇总
Markdown 语法自带格式 参考:Markdown 语法图文全面详解(10 分钟学会) 注意:此页面偶尔会存在 CSS 冲突问题! 代码块 示例源码渲染演示\```sh # VSCode终端 hexo clean; hexo s hexo clean; hexo g; hexo d git add .; git commit -m "npm publish"; npm version patch; git push # Cmder终端 hexo clean && hexo s hexo clean && hexo g && hexo d git add . && git commit -m "npm publish" && npm version patch git push \```# VSCode终端 hexo clean; hexo s hexo clean; hexo g; hexo d git add .; git commit -m "npm publish"; npm ve...
提问的智慧
转载声明 以下内容皆由Asuna转自How-To-Ask-Questions-The-Smart-Way 纯作用于中国大陆境内加速访问,侵联删! 提问的智慧 How To Ask Questions The Smart Way Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moen 本指南英文版版权为 Eric S. Raymond, Rick Moen 所有。 原文网址:http://www.catb.org/~esr/faqs/smart-questions.html Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu 本中文指南是基于原文 3.10 版以及 2010 年由 Gasolin 所翻译版本的最新翻译; 协助指出翻译问题,请发 issue,或直接发 pull request 给我。 本文另有繁體中文版。 原文版本历史 声明 许多项目在他们网站的帮助文档中链接了本指南。这很好,这正是我们想要的用途。但如果你是该项...
AI 写得出功能,写不好 Dockerfile:Next.js 自托管踩坑记录
文中涉及的官方文档:Next.js 自托管、Serwist、PM2 配置项、postgres 镜像说明 最近连着给三四个 Next.js 项目做自托管,这里记录下踩过的几个坑捏。功能部分 Claude 写得是真快,页面、tRPC 路由、Prisma schema 一口气糊出来都能跑;可一到部署收尾就开始反复,同一个文件改回来改过去。下面全是「build 通过但跑不起来」那一类,本地一点征兆都没有… 不废话了,干正事! standalone 多阶段镜像:只有一条是真踩了坑 本来想标题写「四个坑」的,结果翻 git 记录被打脸了~ vns-next 的 Dockerfile 全生命周期只有 4 笔提交动过它:404a769 创建,之后 0b7117c、037ccf4、fefd366 各改一次。而下面这几条里有三条在首次提交就已经写对了,压根没「踩」过。 先看真正踩了的那条。404a769 里的构建基底原本是纯 oven/bun 镜像,跑起来直接挂,0b7117c 才补上 node: # 注意:不能用纯 oven/bun 镜像——prisma/next 的 CLI shebang ...
多个 AI 一起写代码时,我给它们划的边界
最近在几个项目里,同一个仓库同时被两个 AI 编码工具改过,加上几个人自己也在推代码… 一开始觉得没什么,反正都是写代码嘛,结果踩了一圈才发现问题基本都不在代码本身,而在「谁读到了哪份规则」「谁能碰机器上的什么东西」这类协作机制上。这里记录下我最后划出来的几条边界。 先说个反转:所谓的「多方」 翻我另一个仓库时撞上件好玩的事。git shortlog -sn 出来两行、两个名字,看着像俩人在推;一查邮箱是同一个,多出来那个只是我在网页端点 merge 时的账号名。而 78 个 commit 里 63 个带 Co-Authored-By: Claude——真正的「多方」压根不是多个人,是一个人加好几个 AI 会话。并行的痕迹也不在 .claude/worktrees/(那目录空的,git worktree list 只有主仓一行),而在分支名上:五个 claude/ 前缀分支,有一次是两条同期开着最后互相合并的。 所以下面这些边界,我原本以为是给人和人定的,回头看更多是给「我和我自己开的几个会话」定的——会话之间没有共同记忆,这点比同事还严重哦。 规则文件是会分裂的 其中一个团...
9 个 commit,没有一个人类作者:AI 独自写完一个项目之后
最近接手了一个别人扔过来的项目,git log 一拉愣了一下——9 个 commit,author 全是同一个 AI Dev <ai-dev@local>,一个人类提交都没有。下面提到的 commit 我就不贴 hash 了,按干的事来称呼。仓库里没有 CLAUDE.md、没有 AGENTS.md、没有 .claude/、没有 .cursor/、没有 CI,连 lint 都只是 tsc --noEmit,测试更是零。翻了一天,记录下它做得好的和做砸的… 先交代下这项目是什么:一个纯客户端的 React SPA,后端是 Express 打包成一个 Vercel Function 入口,api/index.ts 加 api/lib/ 下六个模块,数据库是 Neon Postgres,对象存储走 S3 兼容 API。就这么点东西,不复杂。 先说它做得好的 部分 commit 带了可核对的验证结果 9 条 commit 里有 4 条在结尾带了验证结果,而且带可核对的数字。 接对象存储那条,结尾写的是「本地端到端冒烟通过: presign → PUT → public GE...
Next.js 渲染模式排查笔记:force-dynamic、hydration 与构建期没有数据库
最近连着写了几个 Next.js 项目,功能本身都挺顺,结果全卡在同一类问题上,本地 next dev 好好的,一 build 或者一上线就出事。这些坑清一色不属于「代码写错了」,而属于「渲染模式没搞对」,报错信息还经常指向别处,特别费时间… 这里记录下我踩过的几个,尽量把文件行号都写上~ 坑一:构建期是没有数据库的 vns-next 是 Galgame 资源站,Prisma + Postgres,部署走 Docker Compose 自托管。本地跑得好好的,一进 Dockerfile 的多阶段构建就炸。原因是 Next 默认会在 next build 阶段把 RSC 页面静态预渲染一遍,而 builder 那一层根本没有数据库容器,任何查库页面必然在 build 时抛错。 修法在 commit b07e20d:根 layout 里加一行 export const dynamic = "force-dynamic",sitemap.ts 加上 feed.xml、llms.txt、index.xml 三个 route handler 同步声明。 // src/...
让 Claude 少写错数据层:Prisma、Drizzle 和几条结构化做法
最近几个项目分别用了 Prisma、Drizzle 和干脆不用 ORM 直接写 SQL。 同一个 AI 在这三种上犯的错完全不一样,这点挺出乎我意料的… Prisma 上它写的是「上个大版本的正确写法」,Drizzle 上它卡在类型和 API 签名,裸 SQL 上它压根不知道那个 driver 有什么限制。 这里记录下我从 schema 到迁移这条链路上用来兜底的几条做法,纯属备忘。 Prisma 7 / Drizzle 0.45 / Next 16。版本对不上的话,下面这些写法都会变哦。 Prisma 7 有几个 AI 一定会写错的地方 mikiacg 那个仓库的 CLAUDE.md:18-25 有一节直接叫「关键版本差异(AI 常见错误)」,六条 bullet 里跟 Prisma 相关的就一条: Prisma 7 generator 为 "prisma-client"(不是 "prisma-client-js"),导入路径 @/generated/prisma/client 一条塞了两件事。同一个仓库的 .cursor/rule...
我的 CLAUDE.md 只有一行:约定文件到底该写多少
最近把一个 Galgame 资源站从 Hugo 整个重写成了 Next.js,仓库是 vns-next。从 create-next-app 那个初始 commit 到能挂上线,一共 13 个 commit,时间跨度不到 20 小时。 事后翻仓库的时候发现一件挺好笑的事——我给 Claude 写的那份约定文件,全文只有一行。而且那一行还不是我写的喽… 这篇不聊渲染模式也不聊部署,就只说「项目起步时该给 AI 留什么约定」这一件事。记录下我在几个项目里来回试出来的结论… 我的 CLAUDE.md 全文就一行 先上原文,vns-next 根目录的 CLAUDE.md 全文: @AGENTS.md 对,就这一行,用 import 语法指向隔壁的 AGENTS.md。那再看 AGENTS.md,全文 5 行: <!-- BEGIN:nextjs-agent-rules --> # This is NOT the Next.js you know This version has breaking changes — APIs, conventions, and file stru...
同一个月,把主页搬出 Next.js,又把 Hugo 站搬进来
最近同一个月里干了两件方向完全相反的事——把个人主页从 Next.js 搬去了 Vite,又把一个 Hugo 静态站整个搬进了 Next.js…两边都踩了点坑,趁还记得记一下,省得下次又忘了~ 搬走的那个 home 这个仓库是我的个人主页,栈的演进链路是这样的: commit 日期 事件 —— —— Nuxt 4 / Vue 3 / Pinia 412b258 2026-04-21 03:46 重写成 Next.js 15 静态导出,新代码放 next-app/,public 用 symlink 和 Nuxt 共享 0e83f8c 2026-04-21 14:12 下线 Nuxt,Next 项目 flatten 到根目录 081e5b4 2026-04-21 14:43 升 Next 16 + Tailwind 4 + TypeScript 6 3075556 2026-05-14 07:50 迁到 Vite 7 时间点还挺好笑的:下线 Nuxt 到升 Next 16 只隔了 31 分钟,同一个会话里连做两件大事;结果 22 天后就把其中一件...
macOS Tahoe 如何用自己的视频做动态壁纸(替换 Aerial 方法)
把自己的视频变成 macOS Tahoe 的动态壁纸,其实挺安静的一件事。 文件夹路径是 ~/Library/Application Support/com.apple.wallpaper/aerials/videos/ 里面通常只有一两个 .mov 文件,比如 4C108785-A7BA-422E-9C79-B0129F1D5550.mov(445MB 左右那种)。 步骤像这样: 先去「系统设置 > 壁纸」,下载一个 Tahoe 的 Aerial 动态壁纸,让文件夹有内容。 备份原 .mov 文件到别处(很重要)。 如果你的视频是 webm,用 ffmpeg 转成 mov(视觉接近无损): ffmpeg -i input.webm -c:v libx264 -crf 18 -preset slow -pix_fmt yuv420p -c:a aac -b:a 192k output.mov 或者更“苹果味”的 ProRes: ffmpeg -i input.webm -c:v prores_ks -profile:v 3 -c:a pcm_s16le output.m...
