[
  {
    "slug": "fix-markdown-pdf-mermaid-export-error",
    "kind": "article",
    "publishedOn": "2025-07-18",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "修复 Markdown PDF Mermaid 导出错误",
    "summary": "Markdown PDF 导出 Mermaid 图表失败时，可先检查脚本网址与版本，并逐种图表确认 PDF。",
    "path": "/content/blog/zh-hans/fix-markdown-pdf-mermaid-export-error.25afb1ac827c.md",
    "imageSizes": {
      "/content/blog/assets/fix-markdown-pdf-mermaid-export-error/618d04abeda8.jpg": {
        "width": 2809,
        "height": 2099
      },
      "/content/blog/assets/fix-markdown-pdf-mermaid-export-error/2a400b3591ff.jpg": {
        "width": 1224,
        "height": 292
      },
      "/content/blog/assets/fix-markdown-pdf-mermaid-export-error/dbb0b39591b7.jpg": {
        "width": 1224,
        "height": 508
      }
    },
    "cover": "/content/blog/assets/fix-markdown-pdf-mermaid-export-error/766792adc6fd.jpg"
  },
  {
    "slug": "colorful-cli-with-ansi-escape-codes",
    "kind": "article",
    "publishedOn": "2025-04-12",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "终端不该只有黑与白",
    "summary": "从 ANSI Escape Code 的格式开始，替终端输出加上清楚的状态与颜色。",
    "path": "/content/blog/zh-hans/colorful-cli-with-ansi-escape-codes.8848124d07c6.md",
    "imageSizes": {},
    "cover": "/content/blog/assets/colorful-cli-with-ansi-escape-codes/bf86e674e0c4.jpg"
  },
  {
    "slug": "fas-paper-roadmap",
    "kind": "article",
    "publishedOn": "2025-04-01",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "Face Anti-Spoofing 技术地图",
    "summary": "以四十篇研究笔记整理人脸防伪的数据集、方法与评估路线。",
    "path": "/content/blog/zh-hans/fas-paper-roadmap.9e87b3b27b5d.md",
    "imageSizes": {},
    "cover": "/content/blog/assets/fas-paper-roadmap/d2483bf19175.jpg"
  },
  {
    "slug": "download-from-google-drive-using-python",
    "kind": "article",
    "publishedOn": "2025-02-19",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "使用 Python 从 Google Drive 下载文件",
    "summary": "检查 Google Drive 的确认页、响应标头与流式下载，并说明何时改用官方 API。",
    "path": "/content/blog/zh-hans/download-from-google-drive-using-python.de4baad633ee.md",
    "imageSizes": {},
    "cover": "/content/blog/assets/download-from-google-drive-using-python/6e2af5a3dd4c.webp"
  },
  {
    "slug": "github-markdown-advanced-syntax",
    "kind": "article",
    "publishedOn": "2025-01-13",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "好用的 github markdown 语法",
    "summary": "挑五种 GitHub Markdown 实用语法，让 README 的进度、警告和补充说明更好读。",
    "path": "/content/blog/zh-hans/github-markdown-advanced-syntax.790b00cb6074.md",
    "imageSizes": {
      "/content/blog/assets/github-markdown-advanced-syntax/f50d5b642be3.jpg": {
        "width": 1224,
        "height": 756
      }
    },
    "cover": "/content/blog/assets/github-markdown-advanced-syntax/f95adfcfd00e.webp"
  },
  {
    "slug": "extract-font-info-by-python",
    "kind": "article",
    "publishedOn": "2024-12-26",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "获取字体文件的信息",
    "summary": "用 fontTools 读取 TTF／OTF 的名称、字符映射与排版度量。",
    "path": "/content/blog/zh-hans/extract-font-info-by-python.c09933f376e9.md",
    "imageSizes": {},
    "cover": "/content/blog/assets/extract-font-info-by-python/e46339160260.webp"
  },
  {
    "slug": "graph-convolutional-networks",
    "kind": "article",
    "publishedOn": "2024-12-05",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "浅谈图卷积网络",
    "summary": "用三个节点算一次 GCN 消息聚合，再对照 Transformer 的权重来源。",
    "path": "/content/blog/zh-hans/graph-convolutional-networks.58d940e03768.md",
    "imageSizes": {
      "/content/blog/assets/graph-convolutional-networks/e30e59d73288.jpg": {
        "width": 3721,
        "height": 1668
      }
    },
    "cover": "/content/blog/assets/graph-convolutional-networks/aae5b21e1ac5.webp"
  },
  {
    "slug": "fourier-transform",
    "kind": "article",
    "publishedOn": "2024-12-02",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "浅谈傅里叶转换",
    "summary": "从正弦波、复数表示走到频谱，搭配交互图表理解傅里叶转换。",
    "path": "/content/blog/zh-hans/fourier-transform.e49a3f5f440a.md",
    "imageSizes": {
      "/content/blog/assets/fourier-transform/60c45d0f6141.png": {
        "width": 1920,
        "height": 1978
      }
    },
    "cover": "/content/blog/assets/fourier-transform/2d5915c160f6.webp"
  },
  {
    "slug": "torch-layernorm-mismatch",
    "kind": "article",
    "publishedOn": "2024-08-20",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "手算的 LayerNorm 数值不对？",
    "summary": "手算 LayerNorm 和 PyTorch 对不上时，从方差的 correction 参数查起。",
    "path": "/content/blog/zh-hans/torch-layernorm-mismatch.82ad11ee2dff.md",
    "imageSizes": {},
    "cover": "/content/blog/assets/torch-layernorm-mismatch/77e51e1e30aa.webp"
  },
  {
    "slug": "impl-normalized-levenshtein-similarity",
    "kind": "article",
    "publishedOn": "2024-05-16",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "实现 ANLS",
    "summary": "用 torchmetrics 计算归一化编辑距离，补上 ST-VQA 评分使用的 0.5 阈值。",
    "path": "/content/blog/zh-hans/impl-normalized-levenshtein-similarity.75d33e1d1f15.md",
    "imageSizes": {},
    "cover": "/content/blog/assets/impl-normalized-levenshtein-similarity/beabe67a25de.webp"
  },
  {
    "slug": "gosu-usage",
    "kind": "article",
    "publishedOn": "2024-02-03",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "容器下的用户切换工具：gosu",
    "summary": "在容器入口脚本用 gosu 切换身份，并检查进程信号与 TTY 的边界。",
    "path": "/content/blog/zh-hans/gosu-usage.c20364f19f43.md",
    "imageSizes": {},
    "cover": "/content/blog/assets/gosu-usage/a18176ea0d8e.webp"
  },
  {
    "slug": "login-rtf8207w",
    "kind": "article",
    "publishedOn": "2023-09-04",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "登录 RTF8207W 路由器",
    "summary": "辨识设备版本、查找管理地址，并检查登录前的网络与授权条件。",
    "path": "/content/blog/zh-hans/login-rtf8207w.3720cea1e44a.md",
    "imageSizes": {
      "/content/blog/assets/login-rtf8207w/79386cc3d28a.jpg": {
        "width": 1184,
        "height": 688
      }
    },
    "cover": "/content/blog/assets/login-rtf8207w/c2a6a326421a.webp"
  },
  {
    "slug": "llm-long-context",
    "kind": "article",
    "publishedOn": "2026-10-26",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "从 512 到百万 Token：LLM 的上下文窗口是怎么长大的？",
    "summary": "上下文上限补几个零，模型就能读完整本书吗？位置要认得、计算要跑得完，最后还得考过阅读测验。百万 Token 背后，每一步都有自己的麻烦。",
    "path": "/content/blog/zh-hans/llm-long-context.ac3249ac97d7.md",
    "imageSizes": {
      "/content/blog/assets/llm-long-context/0e698e0187f6.png": {
        "width": 1697,
        "height": 995
      },
      "/content/blog/assets/llm-long-context/9922e97e5772.png": {
        "width": 725,
        "height": 680
      }
    },
    "cover": "/content/blog/assets/llm-long-context/4550d418eafb.webp"
  },
  {
    "slug": "llm-rag-rise-and-decline",
    "kind": "article",
    "publishedOn": "2026-11-08",
    "author": "Z. Yuan",
    "locale": "zh-hans",
    "title": "LLM 的 RAG 快速兴起与衰亡",
    "summary": "从向量检索、长上下文与 KV cache，到会自己搜索的 agent，回看 RAG 配方的兴起与变化。",
    "path": "/content/blog/zh-hans/llm-rag-rise-and-decline.bf1ba362253c.md",
    "imageSizes": {
      "/content/blog/assets/llm-rag-rise-and-decline/936eefa6f968.svg": {
        "width": 400,
        "height": 650
      },
      "/content/blog/assets/llm-rag-rise-and-decline/3fb22248bcbc.svg": {
        "width": 400,
        "height": 570
      },
      "/content/blog/assets/llm-rag-rise-and-decline/e69136b60022.svg": {
        "width": 400,
        "height": 476
      },
      "/content/blog/assets/llm-rag-rise-and-decline/8344809e3fe5.svg": {
        "width": 400,
        "height": 680
      }
    },
    "cover": "/content/blog/assets/llm-rag-rise-and-decline/6245112b8af3.webp",
    "showCover": true
  }
]
