Files
hoelee-blog/scripts/build_review_pack.py
T

98 lines
9.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import os
repo_dir = 'D:/dev/hoelee-blog'
pack_path = os.path.join(repo_dir, 'docs/consultant-review/batch-06-consultant-review-pack.md')
desktop_path = 'C:/Users/hoelee/Desktop/技术博客第6批新文章-外部顾问审阅全景资料包-20261027.md'
posts_dir = os.path.join(repo_dir, 'src/content/posts')
slugs = [
('01', 'when-lowering-crf-does-nothing-maxrate-deadlock.md', '当降低 CRF 毫无效果:视频转码中 -maxrate 封顶与 SSIM 质量门禁的死锁', 'When Lowering CRF Does Nothing: The -maxrate Ceiling and the SSIM Quality Deadlock'),
('02', 'why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.md', '为什么 ffmpeg -map 0 会搞崩混流:跨容器多音轨、字幕与字体的深水区', 'Why ffmpeg -map 0 Breaks Your Remux: The Hidden Matrix of Multi-Track MP4 and Matroska'),
('03', 'traefik-yaegi-plugin-package-name-trap.md', 'Traefik 自定义插件启动崩溃:Yaegi 解释器的连字符与下划线陷阱', 'Why Your Traefik Yaegi Plugin Fails on Boot: The Module Hyphen to Underscore Trap'),
('04', 'delivering-commercial-desktop-software-in-southeast-asia-toyyibpay-keygate.md', '在东南亚交付桌面商业软件:对接 toyyibPay 本地网银与 Keygate 机器码离线授权', 'Delivering Commercial Desktop Software in Southeast Asia: Multi-Gateway Billing with toyyibPay and Keygate Fulfillment'),
('05', 'batch-generating-80-technical-covers-with-comfyui.md', '用 ComfyUI 批量闭环 80+ 张技术图文封面:设计规范约束、留白控制与批处理工作流', 'Batch Generating 80+ Technical Covers with ComfyUI: Constraining Style, Space, and Typography')
]
content = []
content.append('# 外部顾问审阅全景资料包(第二轮更新·全量正文内嵌版):blog.hoelee.com 第六批\n\n')
content.append('> **文档版本**:v2.0(已根据顾问第一轮审阅意见完成深度修缮,已全量内嵌 5 篇博文共 10 份中英双语完整 Markdown 正文)\n')
content.append('> **更新日期**:2026-10-27\n')
content.append('> **主导定位**:高级全栈 / DevOps / AI 智能体架构师求职(最高优先级)与东南亚 SME B2B 私有化技术交付(次高优先级)。\n\n')
content.append('---\n\n## 目录\n\n')
content.append('1. [第一轮审阅意见落实与整改清单](#一-第一轮审阅意见落实与整改清单)\n')
content.append('2. [向顾问追问的 3 个深度问题](#二-向顾问追问的-3-个深度问题)\n')
content.append('3. [5 篇新文章中英双语【完整正文】](#三-5-篇新文章中英双语完整正文)\n')
for idx, slug, zh_title, en_title in slugs:
content.append(f' - [文章 {idx}: {zh_title}](#文章-{idx}-{zh_title[:10]})\n')
content.append('4. [外部顾问第二轮审阅打分与验收表](#四-外部顾问第二轮审阅打分与验收表)\n\n---\n\n')
content.append('## 一、 第一轮审阅意见落实与整改清单\n\n')
content.append('外部顾问在第一轮审阅中指出的所有缺陷,已在全量代码与正文中完成 100% 修复:\n\n')
content.append('1. **消灭所有复数人称(铁律 II.1)**:\n')
content.append(' - 英文正文彻底清除了所有的 `our`/`we`,统一改为第一人称单数(`I` / `my`)或中性的系统主体(`the pipeline` / `the validation gate`)。\n')
content.append(' - 中文正文彻底消除了“我们”,统一改为“我”、“管线”或“调度器”。\n\n')
content.append('2. **Frontmatter `jumpLinks` 死链全面修复(铁律 II.3)**:\n')
content.append(' - 逐一校对了 10 份文件 Bento Card 中的 `business`、`architecture` 与 `result` 锚点,确保每一个 `#anchor` 100% 对应文章中真实存在的二级标题。\n\n')
content.append('3. **消除求职红线 Slug 命名(铁律 I.1)**:\n')
content.append(' - 文章 04 的 Slug 由容易引起独立小商贩嫌疑的 `selling-desktop-software-...` 重命名为符合系统工程交付标准的 `delivering-commercial-desktop-software-in-southeast-asia-toyyibpay-keygate.md`。\n')
content.append(' - 正文视角完全确立为“资深工程师为企业客户研发交付商业级媒体客户端及结算授权基础设施”。\n\n')
content.append('4. **技术事实与严密性修正**:\n')
content.append(' - **文章 01**:统一了文末数值(修正为 `0.99192`,消除前后不一致),并在 `space_reclaim_source` 函数中补齐了 `acodec in (None, "aac", "mp4a")` 校验。\n')
content.append(' - **文章 02**:明确区分了直接混流拷贝(`-c:s copy`)下 SRT/ASS/PGS 进 MP4 的报错边界,并点破图形位图字幕(PGS/DVD)即使转码 `mov_text` 也会崩溃的硬限制。\n')
content.append(' - **文章 03**:修正了关于 Go 语言机制的表述,准确阐明 Yaegi 并非“不读 go.mod 包名”,而是绕过了 Go 模块路径解析,直接取 `moduleName` 末段并自动将连字符转为下划线以推导包符号表。\n')
content.append(' - **文章 04**:补充了硬件指纹单向哈希 + **Ed25519 非对称公私钥签名**的离线验签架构,彻底封堵单纯本地字符串比对被逆向篡改的漏洞。\n')
content.append(' - **文章 05**:在正文中点破了“**Prompt 45% 留白生成目标 + 35% Pillow 留白审计红线的 10% 容差过渡带设计**”,化解前后数字差异并转化为工程设计亮点。\n\n')
content.append('---\n\n## 二、 向顾问追问的 3 个深度问题\n\n')
content.append('在第二轮审阅中,希望能得到顾问在以下 3 个维度的进一步策略指导:\n\n')
content.append('### 追问 1:文章 04(商业软件交付)的定位与 Slug 权衡\n')
content.append('针对文章 04,我们已经将 Slug 从 `selling-desktop-software...` 改为 `delivering-commercial-desktop-software-in-southeast-asia-toyyibpay-keygate`。\n')
content.append('**请教顾问**:在面向欧美/新加坡 Series A/B 初创企业招聘官与工程总监时,当前带有 `toyyibpay-keygate` 强地域和工具名的 Slug,与更偏抽象系统架构的 `architecting-sea-payment-and-offline-licensing-pipelines` 相比,哪一个能够更好地平衡“商业落地交付力”与“技术架构硬核度”?是否有必要将标题进一步升级?\n\n')
content.append('### 追问 2:文章 02(跨容器混流)中是否需要展开移动端软硬解播放器矩阵?\n')
content.append('在文章 02 中,我们深入分析了 MP4 的 `mov_text`、QuickTime 章节轨以及 `udta/name` 标签。\n')
content.append('**请教顾问**:在多媒体工程领域,面试官有时会追问“移动端原生 AVPlayer 对 `tx3g` 的渲染能力 vs 第三方播放器(如 VLC/ExoPlayer/Infuse)直接挂载外部 ASS 的权衡”。正文中是否有必要在第 二 节表格下方补充一段 100 字左右的“原生 AVPlayer CC 机制 vs 第三方播放内核软解”的架构选型建议,还是保持当前聚焦于转码与混流管线自身的稳定性即可?\n\n')
content.append('### 追问 3:文章 05(ComfyUI 批处理)的自动化留白审计算法\n')
content.append('在文章 05 中,我们解释了 45% 生成目标与 35% 审计红线的 10% 容差缓冲设计。目前正文简明提及了“平均亮度扫描与高频方差检测”。\n')
content.append('**请教顾问**:从展示工程硬核度的角度,是否建议在文末折叠代码块中补齐具体的 OpenCV / Pillow 拉普拉斯方差算子(`cv2.Laplacian(img).var()`)边缘清晰度检测实现代码?这会显著提升算法说服力,还是可能导致文章偏离主要工作流主题?\n\n')
content.append('---\n\n## 三、 5 篇新文章中英双语【完整正文】\n\n')
for idx, slug, zh_title, en_title in slugs:
en_file = os.path.join(posts_dir, slug)
zh_file = os.path.join(posts_dir, 'zh', slug)
with open(en_file, 'r', encoding='utf-8') as f:
en_text = f.read()
with open(zh_file, 'r', encoding='utf-8') as f:
zh_text = f.read()
content.append(f'### 文章 {idx}: {zh_title}\n\n')
content.append(f'* **文件 Slug**: `{slug}`\n')
content.append(f'* **英文标题**: `{en_title}`\n\n')
content.append(f'#### 1. 英文完整正文 (`{slug}`)\n\n')
content.append('```markdown\n' + en_text.strip() + '\n```\n\n')
content.append(f'#### 2. 中文完整正文 (`zh/{slug}`)\n\n')
content.append('```markdown\n' + zh_text.strip() + '\n```\n\n')
content.append('---\n\n')
content.append('## 四、 外部顾问第二轮审阅打分与验收表\n\n')
content.append('| 序号 | 文章 Slug | 事实可核与数字自洽 (1-5) | 人设纯洁与禁词清零 (1-5) | 商业转化与说服力 (1-5) | 代码与隐私脱敏 (1-5) | 综合审批结论 (通过 / 需微调 / 需重写) |\n')
content.append('|---|---|---|---|---|---|---|\n')
for idx, slug, _, _ in slugs:
content.append(f'| **{idx}** | `{slug}` | | | | | |\n')
content.append('\n')
final_text = ''.join(content)
with open(pack_path, 'w', encoding='utf-8') as f:
f.write(final_text)
with open(desktop_path, 'w', encoding='utf-8') as f:
f.write(final_text)
print(f'Successfully assembled v2.0 pack: {len(final_text)} characters.')
print(f'Saved to {pack_path}')
print(f'Saved to {desktop_path}')