summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2020/12/08/二零二零年十二月八日/index.html5
-rw-r--r--2020/12/09/二零二零年十二月九日/index.html5
-rw-r--r--2020/12/26/二零二零年十二月二十六日/index.html5
-rw-r--r--2021/02/14/二零二一年二月十四日/index.html5
-rw-r--r--2021/02/16/二零二一年二月十六日/index.html5
-rw-r--r--2021/03/15/二零二一年三月十五日/index.html5
-rw-r--r--2021/03/27/二零二一年三月二十七日/index.html5
-rw-r--r--2022/01/01/二零二二年一月一日/index.html5
-rw-r--r--2022/03/14/二零二二年三月十四日/index.html5
-rw-r--r--2022/08/21/二零二二年八月二十一日/index.html5
-rw-r--r--2022/09/22/二零二二年九月二十二日/index.html5
-rw-r--r--2022/10/01/二零二二年十月一日/index.html5
-rw-r--r--2022/11/03/二零二二年十一月月三日/index.html5
-rw-r--r--2022/12/31/二零二二年十二月三十一日/index.html5
-rw-r--r--2023/01/21/二零二三年一月二十一日/index.html5
-rw-r--r--2023/02/01/二零二三年二月一日/index.html5
-rw-r--r--2023/02/02/二零二三年二月二日/index.html5
-rw-r--r--2023/02/22/二零二三年二月二十二日/index.html5
-rw-r--r--2023/02/24/二零二三年二月二十四日/index.html5
-rw-r--r--2023/02/25/二零二三年二月二十五日/index.html5
-rw-r--r--2023/02/26/二零二三年二月二十六日/index.html5
-rw-r--r--2023/03/01/气胸/index.html5
-rw-r--r--2023/03/01/纯牛奶可以加点啥/index.html5
-rw-r--r--2023/03/04/金匮要略/index.html5
-rw-r--r--2023/03/05/奥司他韦/index.html5
-rw-r--r--2023/03/13/替米沙坦/index.html5
-rw-r--r--2023/03/14/呋塞米/index.html5
-rw-r--r--2023/03/14/螺内酯片/index.html5
-rw-r--r--2023/04/25/二零二三年四月二十五日/index.html5
-rw-r--r--2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html5
-rw-r--r--2023/05/01/Rust-虚表布局规则介绍/index.html5
-rw-r--r--2023/05/02/Rust-Partial-语义/index.html5
-rw-r--r--2023/05/03/Rust-NewType-模式/index.html5
-rw-r--r--2023/05/24/Rust-闭包-lifetime-may-not-live-long-enough-问题/index.html5
-rw-r--r--2023/06/10/二零二三年六月十日/index.html5
-rw-r--r--2023/06/17/发热及超高热危象/index.html5
-rw-r--r--2023/06/22/灯笼草/index.html5
-rw-r--r--2023/06/28/caml-release-runtime-system导致的死锁问题/index.html5
-rw-r--r--2023/06/28/隐藏一些OCaml-Effect的机制,让其语法在精神上更接近delimcc/index.html5
-rw-r--r--2023/06/29/二〇二三年六月二十九日/index.html5
-rw-r--r--2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html5
-rw-r--r--2023/07/30/二零二三年七月三十日/index.html5
-rw-r--r--2023/08/01/二〇二三年八月一日/index.html5
-rw-r--r--2023/08/15/poll-error-attribute-in-OCaml/index.html5
-rw-r--r--2023/08/15/tick-thread在Multicore-OCaml中的作用/index.html5
-rw-r--r--2023/08/21/二零二三年八月二十一日/index.html5
-rw-r--r--2023/08/27/二零二三年八月二十七日/index.html5
-rw-r--r--2023/09/13/二零二三年九月十三日/index.html5
-rw-r--r--2023/09/28/A-Brief-History-of-Just-In-Time/index.html5
-rw-r--r--2023/10/05/v8中的Number-toString/index.html5
-rw-r--r--2023/10/12/血常规化验结果阅读指南/index.html5
-rw-r--r--2023/10/12/过度疲劳的六种表现/index.html5
-rw-r--r--2023/10/13/肝功能检查化验单/index.html5
-rw-r--r--2023/10/21/OCaml-Core-Int-pow-的实现/index.html5
-rw-r--r--2023/10/22/冬季咳嗽辨别指南/index.html5
-rw-r--r--2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/index.html5
-rw-r--r--2023/10/25/儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例/index.html5
-rw-r--r--2023/10/25/肺炎支原体注意事项/index.html5
-rw-r--r--2023/11/06/二零二三年十一月六日/index.html5
-rw-r--r--2023/11/16/Fever-of-Unknown-Origin/index.html5
-rw-r--r--2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/index.html5
-rw-r--r--2023/11/29/二〇二三年十一月二十九日/index.html5
-rw-r--r--2023/12/01/二〇二三年十二月一日/index.html5
-rw-r--r--2023/12/02/二〇二三年十二月二日/index.html5
-rw-r--r--2024/01/08/OCaml-News-2024-1/index.html5
-rw-r--r--2024/01/18/OCaml-News-2024-2/index.html5
-rw-r--r--2024/01/22/Rescript-React-Native/index.html5
-rw-r--r--2024/01/23/G-Machine/index.html5
-rw-r--r--2024/01/23/二〇二四年一月二十三日/index.html5
-rw-r--r--2024/01/23/慢性肺源性心脏病/index.html5
-rw-r--r--2024/01/25/急诊与灾难医学-烧伤/index.html5
-rw-r--r--2024/02/07/二〇二四年二月七日/index.html5
-rw-r--r--2024/02/26/OCaml-News-2024-3/index.html5
-rw-r--r--2024/03/22/二〇二四年三月二十二日/index.html5
-rw-r--r--2024/04/03/shadow-cljs-proxy/index.html5
-rw-r--r--2024/04/08/二〇二四年四月八日/index.html5
-rw-r--r--2024/05/07/二〇二四年五月七日/index.html5
-rw-r--r--2024/05/13/给尸体上-ECMO-并维持心跳/index.html5
-rw-r--r--2024/05/16/二〇二四年五月十六日/index.html5
-rw-r--r--2024/05/20/Rescript-genType-import-问题/index.html5
-rw-r--r--2024/06/06/NET-AOT-下的-F-命令行参数解析库选择/index.html5
-rw-r--r--2024/06/27/OCaml-News-2024-5/index.html5
-rw-r--r--2024/06/27/二〇二四年六月二十七日/index.html5
-rw-r--r--2024/07/01/OCaml-News-2024-4/index.html5
-rw-r--r--2024/07/09/神经系统重点/index.html5
-rw-r--r--2024/07/23/OCaml-News-2024-6/index.html5
-rw-r--r--2024/08/02/二〇二四年八月一日/index.html5
-rw-r--r--2024/08/12/直系血亲之间不能直接输血/index.html5
-rw-r--r--2024/09/01/二〇二四年九月一日/index.html5
-rw-r--r--2024/09/01/藿香正气水和藿香正气口服液的区别/index.html5
-rw-r--r--2024/09/07/给孩子们的话/index.html5
-rw-r--r--2024/09/08/中老年人沉迷手机的问题/index.html5
-rw-r--r--2024/09/12/Functional-Reactive-Programming-in-F/index.html5
-rw-r--r--2024/09/12/二〇二四年九月十二日/index.html5
-rw-r--r--2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/index.html5
-rw-r--r--2024/09/15/肩周炎和肩袖损伤的区别/index.html5
-rw-r--r--2024/09/27/Turborepo-简述/index.html5
-rw-r--r--2024/10/06/Obsidian-Vault-的-obsidian-目录中的各文件作用/index.html5
-rw-r--r--2024/10/18/10-Tips-for-Productive-FSharp-Scripting/index.html5
-rw-r--r--2024/10/18/Building-custom-fibers-library-in-FSharp/index.html5
-rw-r--r--2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/index.html5
-rw-r--r--2024/11/15/西柚对药物的影响/index.html5
-rw-r--r--2024/11/17/二〇二四年十一月十七日/index.html5
-rw-r--r--2024/11/26/如何管理用户界面中的危险操作/index.html5
-rw-r--r--2024/12/15/OCaml-News-2024-7/index.html5
-rw-r--r--2024/12/18/二〇二四年十二月十八日/index.html5
-rw-r--r--2025/01/19/身体往前倾,灵魂向后摇/index.html5
-rw-r--r--2025/02/10/实时搜索中的防抖函数/index.html5
-rw-r--r--2025/02/11/从事件风暴看领域驱动设计/index.html5
-rw-r--r--2025/02/18/Prisma-关系型数据库的-Self-relations/index.html5
-rw-r--r--2025/02/19/Repository-pattern-in-Typescript/index.html5
-rw-r--r--2025/02/24/二〇二五年二月二十四日/index.html5
-rw-r--r--2025/03/13/领域驱动设计中的“聚合根”/index.html5
-rw-r--r--2025/03/14/DDD-中的-Ubiquitous-Languages/index.html5
-rw-r--r--2025/03/17/二〇二五年三月十七日/index.html5
-rw-r--r--2025/03/19/领域驱动设计中聚合根持久化和事件发布可能导致数据不一致问题/index.html5
-rw-r--r--2025/03/20/TDD-和-DDD-的一些小想法/index.html5
-rw-r--r--2025/03/20/肺功能检查数值/index.html5
-rw-r--r--2025/03/25/Scala-3-Capture-Checking/index.html5
-rw-r--r--2025/03/30/F-重载解析问题/index.html5
-rw-r--r--2025/03/30/libdecor-gtk-WARNING-Failed-to-initialize-GTK/index.html5
-rw-r--r--2025/03/31/在F-中处理复杂依赖注入的实践指南/index.html5
-rw-r--r--2025/04/02/N-1-selects-problem-与-Prisma-ORM/index.html5
-rw-r--r--2025/04/03/二〇二五年五月三日/index.html5
-rw-r--r--2025/04/13/uuidv7-rdbms/index.html5
-rw-r--r--2025/04/20/linux-amd-screen-boom/index.html5
-rw-r--r--2025/05/07/nestjs-bullmq-mail-business/index.html5
-rw-r--r--2025/05/08/Multiplayer-Collaborative-Systems-tips/index.html5
-rw-r--r--2025/05/12/二〇二五年五月十二日/index.html5
-rw-r--r--2025/05/27/vertical-slicing-practice/index.html5
-rw-r--r--2025/06/10/二〇二五年六月十日/index.html5
-rw-r--r--2025/06/29/二〇二五年六月二十九日/index.html5
-rw-r--r--2025/06/30/ibs/index.html5
-rw-r--r--2025/07/08/dadgad/index.html5
-rw-r--r--2025/07/11/fuck-hcho/index.html5
-rw-r--r--2025/07/11/rep-date/index.html5
-rw-r--r--2025/07/29/nestjs-nested-object-dto/index.html5
-rw-r--r--2025/07/31/svelte-lazyquery/index.html5
-rw-r--r--2025/08/13/nestjs-enableImplicitConversion-and-transform/index.html5
-rw-r--r--2025/09/09/database-fk-design-in-clinical-medicine/index.html5
-rw-r--r--2025/09/24/二〇二五年九月二十四日/index.html5
-rw-r--r--2025/10/19/Gram-stain/index.html5
-rw-r--r--2025/10/19/二〇二五年十月十九日/index.html5
-rw-r--r--2025/10/19/极简主义生活的本质/index.html5
-rw-r--r--2025/10/24/Neutrophils-are-a-double-edged-sword/index.html5
-rw-r--r--2025/10/28/sufactants/index.html5
-rw-r--r--2025/10/29/库欣综合征/index.html5
-rw-r--r--2025/10/30/二〇二五年十月三十日/index.html5
-rw-r--r--2025/10/31/二〇二五年十月三十一日/index.html5
-rw-r--r--2025/11/07/二〇二五年十一月七日/index.html5
-rw-r--r--2025/11/08/后摇的-Graphic-EQ-APO-Presets/index.html5
-rw-r--r--2025/11/26/二〇二五年十一月二十六日/index.html5
-rw-r--r--2025/11/27/二〇二五年十一月二十七日/index.html5
-rw-r--r--2025/11/29/FDA-仿制药流程/index.html5
-rw-r--r--2025/12/19/临床研究中盲态规则存在的原因/index.html5
-rw-r--r--2025/12/19/二〇二五年十二月十九日/index.html5
-rw-r--r--2025/12/20/谈谈软件工程/index.html5
-rw-r--r--2025/12/27/意向性治疗原则/index.html5
-rw-r--r--2025/12/29/FHIR-记录患者的用药记录/index.html5
-rw-r--r--2025/12/29/TSOPT-检查/index.html5
-rw-r--r--2025/12/30/乙酰半脱氨酸的药理学与药代动力学特性/index.html5
-rw-r--r--2026/01/09/药物研发中的制药成本/index.html5
-rw-r--r--2026/02/16/老年人营养误区/index.html5
-rw-r--r--2026/03/06/Tacrolimus-for-Stasis-Dermatitis-in-Palliative-Heart-Failure-and-COPD/index.html5
-rw-r--r--2026/03/12/简单说说-FHIR-Transaction-Bundle/index.html5
-rw-r--r--2026/03/16/Nginx-前后端同域分流/index.html5
-rw-r--r--2026/03/21/小谈-NestJS-Zod/index.html5
-rw-r--r--2026/03/22/在-OCaml-中通过-CTypes-绑定-libseccomp/index.html5
-rw-r--r--2026/04/21/二〇二六年四月二十一日/index.html10
-rw-r--r--2026/05/28/如何在-DDD-CQRS-中处理跨聚合的事务/index.html303
-rw-r--r--about.html5
-rw-r--r--archives/2020/12/index.html5
-rw-r--r--archives/2020/index.html5
-rw-r--r--archives/2021/02/index.html5
-rw-r--r--archives/2021/03/index.html5
-rw-r--r--archives/2021/index.html5
-rw-r--r--archives/2022/01/index.html5
-rw-r--r--archives/2022/03/index.html5
-rw-r--r--archives/2022/08/index.html5
-rw-r--r--archives/2022/09/index.html5
-rw-r--r--archives/2022/10/index.html5
-rw-r--r--archives/2022/11/index.html5
-rw-r--r--archives/2022/12/index.html5
-rw-r--r--archives/2022/index.html5
-rw-r--r--archives/2023/01/index.html5
-rw-r--r--archives/2023/02/index.html5
-rw-r--r--archives/2023/03/index.html5
-rw-r--r--archives/2023/04/index.html5
-rw-r--r--archives/2023/05/index.html5
-rw-r--r--archives/2023/06/index.html5
-rw-r--r--archives/2023/07/index.html5
-rw-r--r--archives/2023/08/index.html5
-rw-r--r--archives/2023/09/index.html5
-rw-r--r--archives/2023/10/index.html5
-rw-r--r--archives/2023/11/index.html5
-rw-r--r--archives/2023/12/index.html5
-rw-r--r--archives/2023/index.html5
-rw-r--r--archives/2023/page/2/index.html5
-rw-r--r--archives/2023/page/3/index.html5
-rw-r--r--archives/2023/page/4/index.html5
-rw-r--r--archives/2023/page/5/index.html5
-rw-r--r--archives/2024/01/index.html5
-rw-r--r--archives/2024/02/index.html5
-rw-r--r--archives/2024/03/index.html5
-rw-r--r--archives/2024/04/index.html5
-rw-r--r--archives/2024/05/index.html5
-rw-r--r--archives/2024/06/index.html5
-rw-r--r--archives/2024/07/index.html5
-rw-r--r--archives/2024/08/index.html5
-rw-r--r--archives/2024/09/index.html5
-rw-r--r--archives/2024/10/index.html5
-rw-r--r--archives/2024/11/index.html5
-rw-r--r--archives/2024/12/index.html5
-rw-r--r--archives/2024/index.html5
-rw-r--r--archives/2024/page/2/index.html5
-rw-r--r--archives/2024/page/3/index.html5
-rw-r--r--archives/2024/page/4/index.html5
-rw-r--r--archives/2024/page/5/index.html5
-rw-r--r--archives/2025/01/index.html5
-rw-r--r--archives/2025/02/index.html5
-rw-r--r--archives/2025/03/index.html5
-rw-r--r--archives/2025/04/index.html5
-rw-r--r--archives/2025/05/index.html5
-rw-r--r--archives/2025/06/index.html5
-rw-r--r--archives/2025/07/index.html5
-rw-r--r--archives/2025/08/index.html5
-rw-r--r--archives/2025/09/index.html5
-rw-r--r--archives/2025/10/index.html5
-rw-r--r--archives/2025/11/index.html5
-rw-r--r--archives/2025/12/index.html5
-rw-r--r--archives/2025/index.html5
-rw-r--r--archives/2025/page/2/index.html5
-rw-r--r--archives/2025/page/3/index.html5
-rw-r--r--archives/2025/page/4/index.html5
-rw-r--r--archives/2025/page/5/index.html5
-rw-r--r--archives/2025/page/6/index.html5
-rw-r--r--archives/2026/01/index.html5
-rw-r--r--archives/2026/02/index.html5
-rw-r--r--archives/2026/03/index.html5
-rw-r--r--archives/2026/04/index.html5
-rw-r--r--archives/2026/05/index.html206
-rw-r--r--archives/2026/index.html23
-rw-r--r--archives/index.html41
-rw-r--r--archives/page/10/index.html41
-rw-r--r--archives/page/11/index.html41
-rw-r--r--archives/page/12/index.html41
-rw-r--r--archives/page/13/index.html41
-rw-r--r--archives/page/14/index.html41
-rw-r--r--archives/page/15/index.html41
-rw-r--r--archives/page/16/index.html41
-rw-r--r--archives/page/17/index.html23
-rw-r--r--archives/page/2/index.html41
-rw-r--r--archives/page/3/index.html41
-rw-r--r--archives/page/4/index.html41
-rw-r--r--archives/page/5/index.html41
-rw-r--r--archives/page/6/index.html41
-rw-r--r--archives/page/7/index.html41
-rw-r--r--archives/page/8/index.html41
-rw-r--r--archives/page/9/index.html41
-rw-r--r--categories/gallery/index.html5
-rw-r--r--categories/gallery/page/2/index.html5
-rw-r--r--categories/gallery/page/3/index.html5
-rw-r--r--categories/gallery/page/4/index.html5
-rw-r--r--categories/gallery/page/5/index.html5
-rw-r--r--categories/gallery/page/6/index.html5
-rw-r--r--css/font-slices.css37
-rw-r--r--css/style.css103
-rw-r--r--fonts/CarroisSong.ttfbin4915204 -> 0 bytes
-rw-r--r--fonts/TensentypeCode.woff2bin0 -> 1416832 bytes
-rw-r--r--fonts/cjk-common.woff2bin431544 -> 0 bytes
-rw-r--r--fonts/cjk-ext.woff2bin1220816 -> 0 bytes
-rw-r--r--fonts/latin-base.woff2bin25024 -> 0 bytes
-rw-r--r--fonts/latin-ext.woff2bin22076 -> 0 bytes
-rw-r--r--fonts/src/GoogleSansCode-Regular.ttfbin1893976 -> 0 bytes
-rw-r--r--fonts/symbols.woff2bin13740 -> 0 bytes
-rw-r--r--index.html5
-rw-r--r--page/10/index.html5
-rw-r--r--page/11/index.html5
-rw-r--r--page/12/index.html5
-rw-r--r--page/13/index.html5
-rw-r--r--page/14/index.html5
-rw-r--r--page/15/index.html5
-rw-r--r--page/16/index.html5
-rw-r--r--page/17/index.html5
-rw-r--r--page/2/index.html5
-rw-r--r--page/3/index.html5
-rw-r--r--page/4/index.html5
-rw-r--r--page/5/index.html5
-rw-r--r--page/6/index.html5
-rw-r--r--page/7/index.html5
-rw-r--r--page/8/index.html5
-rw-r--r--page/9/index.html5
-rw-r--r--search.xml91
-rw-r--r--search/index.html5
-rw-r--r--tag/index.html5
-rw-r--r--tags/Archive/index.html5
-rw-r--r--tags/Design/index.html5
-rw-r--r--tags/Life/index.html5
-rw-r--r--tags/Life/page/2/index.html5
-rw-r--r--tags/Life/page/3/index.html5
-rw-r--r--tags/Medicine/index.html5
-rw-r--r--tags/Medicine/page/2/index.html5
-rw-r--r--tags/Medicine/page/3/index.html5
-rw-r--r--tags/Medicine/page/4/index.html5
-rw-r--r--tags/Music/index.html5
-rw-r--r--tags/Technique/index.html43
-rw-r--r--tags/Technique/page/2/index.html43
-rw-r--r--tags/Technique/page/3/index.html43
-rw-r--r--tags/Technique/page/4/index.html43
-rw-r--r--tags/Technique/page/5/index.html43
-rw-r--r--tags/Technique/page/6/index.html43
-rw-r--r--tags/Technique/page/7/index.html224
-rw-r--r--tags/UI-UX/index.html5
313 files changed, 1888 insertions, 1416 deletions
diff --git a/2020/12/08/二零二零年十二月八日/index.html b/2020/12/08/二零二零年十二月八日/index.html
index 1d69d902..ce15c3eb 100644
--- a/2020/12/08/二零二零年十二月八日/index.html
+++ b/2020/12/08/二零二零年十二月八日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2020/12/09/二零二零年十二月九日/index.html b/2020/12/09/二零二零年十二月九日/index.html
index 17d26eda..6d2d63ab 100644
--- a/2020/12/09/二零二零年十二月九日/index.html
+++ b/2020/12/09/二零二零年十二月九日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2020/12/26/二零二零年十二月二十六日/index.html b/2020/12/26/二零二零年十二月二十六日/index.html
index a4afaf68..824d9567 100644
--- a/2020/12/26/二零二零年十二月二十六日/index.html
+++ b/2020/12/26/二零二零年十二月二十六日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2021/02/14/二零二一年二月十四日/index.html b/2021/02/14/二零二一年二月十四日/index.html
index c2bf9b10..98c54c74 100644
--- a/2021/02/14/二零二一年二月十四日/index.html
+++ b/2021/02/14/二零二一年二月十四日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2021/02/16/二零二一年二月十六日/index.html b/2021/02/16/二零二一年二月十六日/index.html
index 748edfb1..d82714cf 100644
--- a/2021/02/16/二零二一年二月十六日/index.html
+++ b/2021/02/16/二零二一年二月十六日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2021/03/15/二零二一年三月十五日/index.html b/2021/03/15/二零二一年三月十五日/index.html
index a5c965ba..d770ad03 100644
--- a/2021/03/15/二零二一年三月十五日/index.html
+++ b/2021/03/15/二零二一年三月十五日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2021/03/27/二零二一年三月二十七日/index.html b/2021/03/27/二零二一年三月二十七日/index.html
index b3870dbe..20a1b19c 100644
--- a/2021/03/27/二零二一年三月二十七日/index.html
+++ b/2021/03/27/二零二一年三月二十七日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2022/01/01/二零二二年一月一日/index.html b/2022/01/01/二零二二年一月一日/index.html
index 8cd2eb0e..0b2bd75c 100644
--- a/2022/01/01/二零二二年一月一日/index.html
+++ b/2022/01/01/二零二二年一月一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2022/03/14/二零二二年三月十四日/index.html b/2022/03/14/二零二二年三月十四日/index.html
index 39fd7ffb..b3cbc0c3 100644
--- a/2022/03/14/二零二二年三月十四日/index.html
+++ b/2022/03/14/二零二二年三月十四日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2022/08/21/二零二二年八月二十一日/index.html b/2022/08/21/二零二二年八月二十一日/index.html
index 78643915..9cc02214 100644
--- a/2022/08/21/二零二二年八月二十一日/index.html
+++ b/2022/08/21/二零二二年八月二十一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2022/09/22/二零二二年九月二十二日/index.html b/2022/09/22/二零二二年九月二十二日/index.html
index ee4963ba..42b54180 100644
--- a/2022/09/22/二零二二年九月二十二日/index.html
+++ b/2022/09/22/二零二二年九月二十二日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2022/10/01/二零二二年十月一日/index.html b/2022/10/01/二零二二年十月一日/index.html
index 78f72e2b..c119f5b5 100644
--- a/2022/10/01/二零二二年十月一日/index.html
+++ b/2022/10/01/二零二二年十月一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2022/11/03/二零二二年十一月月三日/index.html b/2022/11/03/二零二二年十一月月三日/index.html
index 94e41da7..40fba804 100644
--- a/2022/11/03/二零二二年十一月月三日/index.html
+++ b/2022/11/03/二零二二年十一月月三日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2022/12/31/二零二二年十二月三十一日/index.html b/2022/12/31/二零二二年十二月三十一日/index.html
index ebcdd4c5..202d0271 100644
--- a/2022/12/31/二零二二年十二月三十一日/index.html
+++ b/2022/12/31/二零二二年十二月三十一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/01/21/二零二三年一月二十一日/index.html b/2023/01/21/二零二三年一月二十一日/index.html
index 10ca114b..42a23f8e 100644
--- a/2023/01/21/二零二三年一月二十一日/index.html
+++ b/2023/01/21/二零二三年一月二十一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/02/01/二零二三年二月一日/index.html b/2023/02/01/二零二三年二月一日/index.html
index 67cc0286..1baa8721 100644
--- a/2023/02/01/二零二三年二月一日/index.html
+++ b/2023/02/01/二零二三年二月一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/02/02/二零二三年二月二日/index.html b/2023/02/02/二零二三年二月二日/index.html
index fe55b00f..5034fa7b 100644
--- a/2023/02/02/二零二三年二月二日/index.html
+++ b/2023/02/02/二零二三年二月二日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/02/22/二零二三年二月二十二日/index.html b/2023/02/22/二零二三年二月二十二日/index.html
index 0b516332..1f3a4af7 100644
--- a/2023/02/22/二零二三年二月二十二日/index.html
+++ b/2023/02/22/二零二三年二月二十二日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/02/24/二零二三年二月二十四日/index.html b/2023/02/24/二零二三年二月二十四日/index.html
index ddc7d4c0..e47689b2 100644
--- a/2023/02/24/二零二三年二月二十四日/index.html
+++ b/2023/02/24/二零二三年二月二十四日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/02/25/二零二三年二月二十五日/index.html b/2023/02/25/二零二三年二月二十五日/index.html
index 176f0564..ba2ea2a8 100644
--- a/2023/02/25/二零二三年二月二十五日/index.html
+++ b/2023/02/25/二零二三年二月二十五日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/02/26/二零二三年二月二十六日/index.html b/2023/02/26/二零二三年二月二十六日/index.html
index def607ed..923476b1 100644
--- a/2023/02/26/二零二三年二月二十六日/index.html
+++ b/2023/02/26/二零二三年二月二十六日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/03/01/气胸/index.html b/2023/03/01/气胸/index.html
index ae5cdee3..31b92f6b 100644
--- a/2023/03/01/气胸/index.html
+++ b/2023/03/01/气胸/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/03/01/纯牛奶可以加点啥/index.html b/2023/03/01/纯牛奶可以加点啥/index.html
index 295aa793..9e518048 100644
--- a/2023/03/01/纯牛奶可以加点啥/index.html
+++ b/2023/03/01/纯牛奶可以加点啥/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/03/04/金匮要略/index.html b/2023/03/04/金匮要略/index.html
index 254cee39..3d329af3 100644
--- a/2023/03/04/金匮要略/index.html
+++ b/2023/03/04/金匮要略/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/03/05/奥司他韦/index.html b/2023/03/05/奥司他韦/index.html
index d45ef81a..cfd1ed96 100644
--- a/2023/03/05/奥司他韦/index.html
+++ b/2023/03/05/奥司他韦/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/03/13/替米沙坦/index.html b/2023/03/13/替米沙坦/index.html
index e32879e4..4bc06aab 100644
--- a/2023/03/13/替米沙坦/index.html
+++ b/2023/03/13/替米沙坦/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/03/14/呋塞米/index.html b/2023/03/14/呋塞米/index.html
index 240fc580..8ecf6158 100644
--- a/2023/03/14/呋塞米/index.html
+++ b/2023/03/14/呋塞米/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/03/14/螺内酯片/index.html b/2023/03/14/螺内酯片/index.html
index 93c88cf7..df9b1e6f 100644
--- a/2023/03/14/螺内酯片/index.html
+++ b/2023/03/14/螺内酯片/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/04/25/二零二三年四月二十五日/index.html b/2023/04/25/二零二三年四月二十五日/index.html
index 7d0b7713..57928f8d 100644
--- a/2023/04/25/二零二三年四月二十五日/index.html
+++ b/2023/04/25/二零二三年四月二十五日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html b/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html
index f565c06c..5cae669f 100644
--- a/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html
+++ b/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/05/01/Rust-虚表布局规则介绍/index.html b/2023/05/01/Rust-虚表布局规则介绍/index.html
index 5da024fe..c6127478 100644
--- a/2023/05/01/Rust-虚表布局规则介绍/index.html
+++ b/2023/05/01/Rust-虚表布局规则介绍/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/05/02/Rust-Partial-语义/index.html b/2023/05/02/Rust-Partial-语义/index.html
index 36da6ec5..2bc88f5b 100644
--- a/2023/05/02/Rust-Partial-语义/index.html
+++ b/2023/05/02/Rust-Partial-语义/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/05/03/Rust-NewType-模式/index.html b/2023/05/03/Rust-NewType-模式/index.html
index 5b367460..446d5acc 100644
--- a/2023/05/03/Rust-NewType-模式/index.html
+++ b/2023/05/03/Rust-NewType-模式/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/05/24/Rust-闭包-lifetime-may-not-live-long-enough-问题/index.html b/2023/05/24/Rust-闭包-lifetime-may-not-live-long-enough-问题/index.html
index 7fd7fd22..bd5387a9 100644
--- a/2023/05/24/Rust-闭包-lifetime-may-not-live-long-enough-问题/index.html
+++ b/2023/05/24/Rust-闭包-lifetime-may-not-live-long-enough-问题/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/06/10/二零二三年六月十日/index.html b/2023/06/10/二零二三年六月十日/index.html
index 26083d6b..1cdd96cc 100644
--- a/2023/06/10/二零二三年六月十日/index.html
+++ b/2023/06/10/二零二三年六月十日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/06/17/发热及超高热危象/index.html b/2023/06/17/发热及超高热危象/index.html
index 6ea0ad43..eb001306 100644
--- a/2023/06/17/发热及超高热危象/index.html
+++ b/2023/06/17/发热及超高热危象/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/06/22/灯笼草/index.html b/2023/06/22/灯笼草/index.html
index 52f88c4a..8c0080cb 100644
--- a/2023/06/22/灯笼草/index.html
+++ b/2023/06/22/灯笼草/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/06/28/caml-release-runtime-system导致的死锁问题/index.html b/2023/06/28/caml-release-runtime-system导致的死锁问题/index.html
index 29c43428..36f3b815 100644
--- a/2023/06/28/caml-release-runtime-system导致的死锁问题/index.html
+++ b/2023/06/28/caml-release-runtime-system导致的死锁问题/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/06/28/隐藏一些OCaml-Effect的机制,让其语法在精神上更接近delimcc/index.html b/2023/06/28/隐藏一些OCaml-Effect的机制,让其语法在精神上更接近delimcc/index.html
index 75fee214..ad550e6f 100644
--- a/2023/06/28/隐藏一些OCaml-Effect的机制,让其语法在精神上更接近delimcc/index.html
+++ b/2023/06/28/隐藏一些OCaml-Effect的机制,让其语法在精神上更接近delimcc/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/06/29/二〇二三年六月二十九日/index.html b/2023/06/29/二〇二三年六月二十九日/index.html
index 4e5b474b..72290520 100644
--- a/2023/06/29/二〇二三年六月二十九日/index.html
+++ b/2023/06/29/二〇二三年六月二十九日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html b/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html
index 601f45dd..41493658 100644
--- a/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html
+++ b/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/07/30/二零二三年七月三十日/index.html b/2023/07/30/二零二三年七月三十日/index.html
index 7b806c1b..cd9bb534 100644
--- a/2023/07/30/二零二三年七月三十日/index.html
+++ b/2023/07/30/二零二三年七月三十日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/08/01/二〇二三年八月一日/index.html b/2023/08/01/二〇二三年八月一日/index.html
index 70653eef..bdaa438c 100644
--- a/2023/08/01/二〇二三年八月一日/index.html
+++ b/2023/08/01/二〇二三年八月一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/08/15/poll-error-attribute-in-OCaml/index.html b/2023/08/15/poll-error-attribute-in-OCaml/index.html
index 6e830f51..e69b70f9 100644
--- a/2023/08/15/poll-error-attribute-in-OCaml/index.html
+++ b/2023/08/15/poll-error-attribute-in-OCaml/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/08/15/tick-thread在Multicore-OCaml中的作用/index.html b/2023/08/15/tick-thread在Multicore-OCaml中的作用/index.html
index d46199d7..5e59f0ff 100644
--- a/2023/08/15/tick-thread在Multicore-OCaml中的作用/index.html
+++ b/2023/08/15/tick-thread在Multicore-OCaml中的作用/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/08/21/二零二三年八月二十一日/index.html b/2023/08/21/二零二三年八月二十一日/index.html
index 5376754a..da94f435 100644
--- a/2023/08/21/二零二三年八月二十一日/index.html
+++ b/2023/08/21/二零二三年八月二十一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/08/27/二零二三年八月二十七日/index.html b/2023/08/27/二零二三年八月二十七日/index.html
index d1604b58..33d4fc69 100644
--- a/2023/08/27/二零二三年八月二十七日/index.html
+++ b/2023/08/27/二零二三年八月二十七日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/09/13/二零二三年九月十三日/index.html b/2023/09/13/二零二三年九月十三日/index.html
index 8ac30a29..38a82dc2 100644
--- a/2023/09/13/二零二三年九月十三日/index.html
+++ b/2023/09/13/二零二三年九月十三日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/09/28/A-Brief-History-of-Just-In-Time/index.html b/2023/09/28/A-Brief-History-of-Just-In-Time/index.html
index 51e5a199..70c0fd70 100644
--- a/2023/09/28/A-Brief-History-of-Just-In-Time/index.html
+++ b/2023/09/28/A-Brief-History-of-Just-In-Time/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/10/05/v8中的Number-toString/index.html b/2023/10/05/v8中的Number-toString/index.html
index 1018d1f2..73c91a0a 100644
--- a/2023/10/05/v8中的Number-toString/index.html
+++ b/2023/10/05/v8中的Number-toString/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/10/12/血常规化验结果阅读指南/index.html b/2023/10/12/血常规化验结果阅读指南/index.html
index e8ebb07f..88ba3077 100644
--- a/2023/10/12/血常规化验结果阅读指南/index.html
+++ b/2023/10/12/血常规化验结果阅读指南/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/10/12/过度疲劳的六种表现/index.html b/2023/10/12/过度疲劳的六种表现/index.html
index 5e83d612..a7703313 100644
--- a/2023/10/12/过度疲劳的六种表现/index.html
+++ b/2023/10/12/过度疲劳的六种表现/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/10/13/肝功能检查化验单/index.html b/2023/10/13/肝功能检查化验单/index.html
index 9aa3b4f1..b6e7d12d 100644
--- a/2023/10/13/肝功能检查化验单/index.html
+++ b/2023/10/13/肝功能检查化验单/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/10/21/OCaml-Core-Int-pow-的实现/index.html b/2023/10/21/OCaml-Core-Int-pow-的实现/index.html
index 247dd43f..8ff5109e 100644
--- a/2023/10/21/OCaml-Core-Int-pow-的实现/index.html
+++ b/2023/10/21/OCaml-Core-Int-pow-的实现/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/10/22/冬季咳嗽辨别指南/index.html b/2023/10/22/冬季咳嗽辨别指南/index.html
index 77609ee3..ce546499 100644
--- a/2023/10/22/冬季咳嗽辨别指南/index.html
+++ b/2023/10/22/冬季咳嗽辨别指南/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/index.html b/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/index.html
index a91f8be5..15015f66 100644
--- a/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/index.html
+++ b/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/10/25/儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例/index.html b/2023/10/25/儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例/index.html
index 0f2e9823..232c565f 100644
--- a/2023/10/25/儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例/index.html
+++ b/2023/10/25/儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/10/25/肺炎支原体注意事项/index.html b/2023/10/25/肺炎支原体注意事项/index.html
index 88cff218..7ed9f4f5 100644
--- a/2023/10/25/肺炎支原体注意事项/index.html
+++ b/2023/10/25/肺炎支原体注意事项/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/11/06/二零二三年十一月六日/index.html b/2023/11/06/二零二三年十一月六日/index.html
index 5e9acf2e..bfa1e35e 100644
--- a/2023/11/06/二零二三年十一月六日/index.html
+++ b/2023/11/06/二零二三年十一月六日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/11/16/Fever-of-Unknown-Origin/index.html b/2023/11/16/Fever-of-Unknown-Origin/index.html
index c647f0f4..0d650c53 100644
--- a/2023/11/16/Fever-of-Unknown-Origin/index.html
+++ b/2023/11/16/Fever-of-Unknown-Origin/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/index.html b/2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/index.html
index 678a299a..747bb9d1 100644
--- a/2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/index.html
+++ b/2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/11/29/二〇二三年十一月二十九日/index.html b/2023/11/29/二〇二三年十一月二十九日/index.html
index cc9adcd3..4bfda875 100644
--- a/2023/11/29/二〇二三年十一月二十九日/index.html
+++ b/2023/11/29/二〇二三年十一月二十九日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/12/01/二〇二三年十二月一日/index.html b/2023/12/01/二〇二三年十二月一日/index.html
index 821dcd96..6cf2fcf2 100644
--- a/2023/12/01/二〇二三年十二月一日/index.html
+++ b/2023/12/01/二〇二三年十二月一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2023/12/02/二〇二三年十二月二日/index.html b/2023/12/02/二〇二三年十二月二日/index.html
index 78291d11..f57efdde 100644
--- a/2023/12/02/二〇二三年十二月二日/index.html
+++ b/2023/12/02/二〇二三年十二月二日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/01/08/OCaml-News-2024-1/index.html b/2024/01/08/OCaml-News-2024-1/index.html
index 5e8ee81e..13818477 100644
--- a/2024/01/08/OCaml-News-2024-1/index.html
+++ b/2024/01/08/OCaml-News-2024-1/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/01/18/OCaml-News-2024-2/index.html b/2024/01/18/OCaml-News-2024-2/index.html
index ac4f2ff4..6a834ffd 100644
--- a/2024/01/18/OCaml-News-2024-2/index.html
+++ b/2024/01/18/OCaml-News-2024-2/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/01/22/Rescript-React-Native/index.html b/2024/01/22/Rescript-React-Native/index.html
index a9981345..d914a8ef 100644
--- a/2024/01/22/Rescript-React-Native/index.html
+++ b/2024/01/22/Rescript-React-Native/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/01/23/G-Machine/index.html b/2024/01/23/G-Machine/index.html
index 1406936f..b70934a9 100644
--- a/2024/01/23/G-Machine/index.html
+++ b/2024/01/23/G-Machine/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/01/23/二〇二四年一月二十三日/index.html b/2024/01/23/二〇二四年一月二十三日/index.html
index cded054a..83978b49 100644
--- a/2024/01/23/二〇二四年一月二十三日/index.html
+++ b/2024/01/23/二〇二四年一月二十三日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/01/23/慢性肺源性心脏病/index.html b/2024/01/23/慢性肺源性心脏病/index.html
index 039f2aff..9330d9af 100644
--- a/2024/01/23/慢性肺源性心脏病/index.html
+++ b/2024/01/23/慢性肺源性心脏病/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/01/25/急诊与灾难医学-烧伤/index.html b/2024/01/25/急诊与灾难医学-烧伤/index.html
index c458998d..0495f04e 100644
--- a/2024/01/25/急诊与灾难医学-烧伤/index.html
+++ b/2024/01/25/急诊与灾难医学-烧伤/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/02/07/二〇二四年二月七日/index.html b/2024/02/07/二〇二四年二月七日/index.html
index 05fba6ce..e0ff6026 100644
--- a/2024/02/07/二〇二四年二月七日/index.html
+++ b/2024/02/07/二〇二四年二月七日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/02/26/OCaml-News-2024-3/index.html b/2024/02/26/OCaml-News-2024-3/index.html
index 55363bdc..ce9ae841 100644
--- a/2024/02/26/OCaml-News-2024-3/index.html
+++ b/2024/02/26/OCaml-News-2024-3/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/03/22/二〇二四年三月二十二日/index.html b/2024/03/22/二〇二四年三月二十二日/index.html
index 8837b3a6..4e8e61f2 100644
--- a/2024/03/22/二〇二四年三月二十二日/index.html
+++ b/2024/03/22/二〇二四年三月二十二日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/04/03/shadow-cljs-proxy/index.html b/2024/04/03/shadow-cljs-proxy/index.html
index 7a618fda..3395d92c 100644
--- a/2024/04/03/shadow-cljs-proxy/index.html
+++ b/2024/04/03/shadow-cljs-proxy/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/04/08/二〇二四年四月八日/index.html b/2024/04/08/二〇二四年四月八日/index.html
index 4da77c56..c86256f5 100644
--- a/2024/04/08/二〇二四年四月八日/index.html
+++ b/2024/04/08/二〇二四年四月八日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/05/07/二〇二四年五月七日/index.html b/2024/05/07/二〇二四年五月七日/index.html
index 154deaee..c446347b 100644
--- a/2024/05/07/二〇二四年五月七日/index.html
+++ b/2024/05/07/二〇二四年五月七日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/05/13/给尸体上-ECMO-并维持心跳/index.html b/2024/05/13/给尸体上-ECMO-并维持心跳/index.html
index 4c8438f6..5ba8da08 100644
--- a/2024/05/13/给尸体上-ECMO-并维持心跳/index.html
+++ b/2024/05/13/给尸体上-ECMO-并维持心跳/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/05/16/二〇二四年五月十六日/index.html b/2024/05/16/二〇二四年五月十六日/index.html
index 13e3a91a..3d373319 100644
--- a/2024/05/16/二〇二四年五月十六日/index.html
+++ b/2024/05/16/二〇二四年五月十六日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/05/20/Rescript-genType-import-问题/index.html b/2024/05/20/Rescript-genType-import-问题/index.html
index c65d806e..a2c689c8 100644
--- a/2024/05/20/Rescript-genType-import-问题/index.html
+++ b/2024/05/20/Rescript-genType-import-问题/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/06/06/NET-AOT-下的-F-命令行参数解析库选择/index.html b/2024/06/06/NET-AOT-下的-F-命令行参数解析库选择/index.html
index 2f9807be..c19eb3f3 100644
--- a/2024/06/06/NET-AOT-下的-F-命令行参数解析库选择/index.html
+++ b/2024/06/06/NET-AOT-下的-F-命令行参数解析库选择/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/06/27/OCaml-News-2024-5/index.html b/2024/06/27/OCaml-News-2024-5/index.html
index 5740cd55..ae43790f 100644
--- a/2024/06/27/OCaml-News-2024-5/index.html
+++ b/2024/06/27/OCaml-News-2024-5/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/06/27/二〇二四年六月二十七日/index.html b/2024/06/27/二〇二四年六月二十七日/index.html
index 1972ab89..e2b19e27 100644
--- a/2024/06/27/二〇二四年六月二十七日/index.html
+++ b/2024/06/27/二〇二四年六月二十七日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/07/01/OCaml-News-2024-4/index.html b/2024/07/01/OCaml-News-2024-4/index.html
index e5b83ed2..a49120e2 100644
--- a/2024/07/01/OCaml-News-2024-4/index.html
+++ b/2024/07/01/OCaml-News-2024-4/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/07/09/神经系统重点/index.html b/2024/07/09/神经系统重点/index.html
index ab95a5e6..d79d0b85 100644
--- a/2024/07/09/神经系统重点/index.html
+++ b/2024/07/09/神经系统重点/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/07/23/OCaml-News-2024-6/index.html b/2024/07/23/OCaml-News-2024-6/index.html
index b8b5a204..ba7eaf86 100644
--- a/2024/07/23/OCaml-News-2024-6/index.html
+++ b/2024/07/23/OCaml-News-2024-6/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/08/02/二〇二四年八月一日/index.html b/2024/08/02/二〇二四年八月一日/index.html
index fe8ddce0..25e25326 100644
--- a/2024/08/02/二〇二四年八月一日/index.html
+++ b/2024/08/02/二〇二四年八月一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/08/12/直系血亲之间不能直接输血/index.html b/2024/08/12/直系血亲之间不能直接输血/index.html
index ebb5ab60..0877d807 100644
--- a/2024/08/12/直系血亲之间不能直接输血/index.html
+++ b/2024/08/12/直系血亲之间不能直接输血/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/09/01/二〇二四年九月一日/index.html b/2024/09/01/二〇二四年九月一日/index.html
index 1573f813..fc99bd6e 100644
--- a/2024/09/01/二〇二四年九月一日/index.html
+++ b/2024/09/01/二〇二四年九月一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/09/01/藿香正气水和藿香正气口服液的区别/index.html b/2024/09/01/藿香正气水和藿香正气口服液的区别/index.html
index 825c68ac..da9362ee 100644
--- a/2024/09/01/藿香正气水和藿香正气口服液的区别/index.html
+++ b/2024/09/01/藿香正气水和藿香正气口服液的区别/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/09/07/给孩子们的话/index.html b/2024/09/07/给孩子们的话/index.html
index f82de4b4..6d2ab1c4 100644
--- a/2024/09/07/给孩子们的话/index.html
+++ b/2024/09/07/给孩子们的话/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/09/08/中老年人沉迷手机的问题/index.html b/2024/09/08/中老年人沉迷手机的问题/index.html
index 9cf17ba4..2425f104 100644
--- a/2024/09/08/中老年人沉迷手机的问题/index.html
+++ b/2024/09/08/中老年人沉迷手机的问题/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/09/12/Functional-Reactive-Programming-in-F/index.html b/2024/09/12/Functional-Reactive-Programming-in-F/index.html
index bf686984..c8aaea5d 100644
--- a/2024/09/12/Functional-Reactive-Programming-in-F/index.html
+++ b/2024/09/12/Functional-Reactive-Programming-in-F/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/09/12/二〇二四年九月十二日/index.html b/2024/09/12/二〇二四年九月十二日/index.html
index e6e45913..8c0e3bb2 100644
--- a/2024/09/12/二〇二四年九月十二日/index.html
+++ b/2024/09/12/二〇二四年九月十二日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/index.html b/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/index.html
index 1bbd348e..a0402b0d 100644
--- a/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/index.html
+++ b/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/09/15/肩周炎和肩袖损伤的区别/index.html b/2024/09/15/肩周炎和肩袖损伤的区别/index.html
index c3d9088b..637f24bd 100644
--- a/2024/09/15/肩周炎和肩袖损伤的区别/index.html
+++ b/2024/09/15/肩周炎和肩袖损伤的区别/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/09/27/Turborepo-简述/index.html b/2024/09/27/Turborepo-简述/index.html
index 5cbb33ba..bb3e6782 100644
--- a/2024/09/27/Turborepo-简述/index.html
+++ b/2024/09/27/Turborepo-简述/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/10/06/Obsidian-Vault-的-obsidian-目录中的各文件作用/index.html b/2024/10/06/Obsidian-Vault-的-obsidian-目录中的各文件作用/index.html
index 54fc0030..7f4c1f85 100644
--- a/2024/10/06/Obsidian-Vault-的-obsidian-目录中的各文件作用/index.html
+++ b/2024/10/06/Obsidian-Vault-的-obsidian-目录中的各文件作用/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/index.html b/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/index.html
index de7d4eee..3081eb53 100644
--- a/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/index.html
+++ b/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/10/18/Building-custom-fibers-library-in-FSharp/index.html b/2024/10/18/Building-custom-fibers-library-in-FSharp/index.html
index fb5c84dd..87fad708 100644
--- a/2024/10/18/Building-custom-fibers-library-in-FSharp/index.html
+++ b/2024/10/18/Building-custom-fibers-library-in-FSharp/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/index.html b/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/index.html
index 23777180..2da1a6be 100644
--- a/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/index.html
+++ b/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/11/15/西柚对药物的影响/index.html b/2024/11/15/西柚对药物的影响/index.html
index 6019ebc0..277c2101 100644
--- a/2024/11/15/西柚对药物的影响/index.html
+++ b/2024/11/15/西柚对药物的影响/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/11/17/二〇二四年十一月十七日/index.html b/2024/11/17/二〇二四年十一月十七日/index.html
index 0ca61e20..8a4020c1 100644
--- a/2024/11/17/二〇二四年十一月十七日/index.html
+++ b/2024/11/17/二〇二四年十一月十七日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/11/26/如何管理用户界面中的危险操作/index.html b/2024/11/26/如何管理用户界面中的危险操作/index.html
index 4e5d7c85..5f3620cd 100644
--- a/2024/11/26/如何管理用户界面中的危险操作/index.html
+++ b/2024/11/26/如何管理用户界面中的危险操作/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/12/15/OCaml-News-2024-7/index.html b/2024/12/15/OCaml-News-2024-7/index.html
index 60930579..1ccb2a1e 100644
--- a/2024/12/15/OCaml-News-2024-7/index.html
+++ b/2024/12/15/OCaml-News-2024-7/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2024/12/18/二〇二四年十二月十八日/index.html b/2024/12/18/二〇二四年十二月十八日/index.html
index dfb3758b..8f9c7591 100644
--- a/2024/12/18/二〇二四年十二月十八日/index.html
+++ b/2024/12/18/二〇二四年十二月十八日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/01/19/身体往前倾,灵魂向后摇/index.html b/2025/01/19/身体往前倾,灵魂向后摇/index.html
index 071e221c..7c497e1a 100644
--- a/2025/01/19/身体往前倾,灵魂向后摇/index.html
+++ b/2025/01/19/身体往前倾,灵魂向后摇/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/02/10/实时搜索中的防抖函数/index.html b/2025/02/10/实时搜索中的防抖函数/index.html
index adbfb635..e5702127 100644
--- a/2025/02/10/实时搜索中的防抖函数/index.html
+++ b/2025/02/10/实时搜索中的防抖函数/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/02/11/从事件风暴看领域驱动设计/index.html b/2025/02/11/从事件风暴看领域驱动设计/index.html
index a6a69223..989dd1ca 100644
--- a/2025/02/11/从事件风暴看领域驱动设计/index.html
+++ b/2025/02/11/从事件风暴看领域驱动设计/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/02/18/Prisma-关系型数据库的-Self-relations/index.html b/2025/02/18/Prisma-关系型数据库的-Self-relations/index.html
index ab25a45d..a1348576 100644
--- a/2025/02/18/Prisma-关系型数据库的-Self-relations/index.html
+++ b/2025/02/18/Prisma-关系型数据库的-Self-relations/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/02/19/Repository-pattern-in-Typescript/index.html b/2025/02/19/Repository-pattern-in-Typescript/index.html
index e3acd66b..3155b1d4 100644
--- a/2025/02/19/Repository-pattern-in-Typescript/index.html
+++ b/2025/02/19/Repository-pattern-in-Typescript/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/02/24/二〇二五年二月二十四日/index.html b/2025/02/24/二〇二五年二月二十四日/index.html
index 590a1d8a..ce62f44b 100644
--- a/2025/02/24/二〇二五年二月二十四日/index.html
+++ b/2025/02/24/二〇二五年二月二十四日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/03/13/领域驱动设计中的“聚合根”/index.html b/2025/03/13/领域驱动设计中的“聚合根”/index.html
index 8753dde4..570337fe 100644
--- a/2025/03/13/领域驱动设计中的“聚合根”/index.html
+++ b/2025/03/13/领域驱动设计中的“聚合根”/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/03/14/DDD-中的-Ubiquitous-Languages/index.html b/2025/03/14/DDD-中的-Ubiquitous-Languages/index.html
index 4bd13aa6..1814b491 100644
--- a/2025/03/14/DDD-中的-Ubiquitous-Languages/index.html
+++ b/2025/03/14/DDD-中的-Ubiquitous-Languages/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/03/17/二〇二五年三月十七日/index.html b/2025/03/17/二〇二五年三月十七日/index.html
index 7b905d1d..dbe16d06 100644
--- a/2025/03/17/二〇二五年三月十七日/index.html
+++ b/2025/03/17/二〇二五年三月十七日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/03/19/领域驱动设计中聚合根持久化和事件发布可能导致数据不一致问题/index.html b/2025/03/19/领域驱动设计中聚合根持久化和事件发布可能导致数据不一致问题/index.html
index e51d9753..5cbb9bfc 100644
--- a/2025/03/19/领域驱动设计中聚合根持久化和事件发布可能导致数据不一致问题/index.html
+++ b/2025/03/19/领域驱动设计中聚合根持久化和事件发布可能导致数据不一致问题/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/03/20/TDD-和-DDD-的一些小想法/index.html b/2025/03/20/TDD-和-DDD-的一些小想法/index.html
index e5eda049..6f75eea3 100644
--- a/2025/03/20/TDD-和-DDD-的一些小想法/index.html
+++ b/2025/03/20/TDD-和-DDD-的一些小想法/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/03/20/肺功能检查数值/index.html b/2025/03/20/肺功能检查数值/index.html
index 3c7770eb..27be9213 100644
--- a/2025/03/20/肺功能检查数值/index.html
+++ b/2025/03/20/肺功能检查数值/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/03/25/Scala-3-Capture-Checking/index.html b/2025/03/25/Scala-3-Capture-Checking/index.html
index d59abf84..0cec0aab 100644
--- a/2025/03/25/Scala-3-Capture-Checking/index.html
+++ b/2025/03/25/Scala-3-Capture-Checking/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/03/30/F-重载解析问题/index.html b/2025/03/30/F-重载解析问题/index.html
index 0da9d9b8..1e669dec 100644
--- a/2025/03/30/F-重载解析问题/index.html
+++ b/2025/03/30/F-重载解析问题/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/03/30/libdecor-gtk-WARNING-Failed-to-initialize-GTK/index.html b/2025/03/30/libdecor-gtk-WARNING-Failed-to-initialize-GTK/index.html
index df524a42..e31ae594 100644
--- a/2025/03/30/libdecor-gtk-WARNING-Failed-to-initialize-GTK/index.html
+++ b/2025/03/30/libdecor-gtk-WARNING-Failed-to-initialize-GTK/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/03/31/在F-中处理复杂依赖注入的实践指南/index.html b/2025/03/31/在F-中处理复杂依赖注入的实践指南/index.html
index c07f7836..7bd44da1 100644
--- a/2025/03/31/在F-中处理复杂依赖注入的实践指南/index.html
+++ b/2025/03/31/在F-中处理复杂依赖注入的实践指南/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/04/02/N-1-selects-problem-与-Prisma-ORM/index.html b/2025/04/02/N-1-selects-problem-与-Prisma-ORM/index.html
index 9afffe96..b7480068 100644
--- a/2025/04/02/N-1-selects-problem-与-Prisma-ORM/index.html
+++ b/2025/04/02/N-1-selects-problem-与-Prisma-ORM/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/04/03/二〇二五年五月三日/index.html b/2025/04/03/二〇二五年五月三日/index.html
index a1f6c2aa..98123d02 100644
--- a/2025/04/03/二〇二五年五月三日/index.html
+++ b/2025/04/03/二〇二五年五月三日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/04/13/uuidv7-rdbms/index.html b/2025/04/13/uuidv7-rdbms/index.html
index 703a539f..94344306 100644
--- a/2025/04/13/uuidv7-rdbms/index.html
+++ b/2025/04/13/uuidv7-rdbms/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/04/20/linux-amd-screen-boom/index.html b/2025/04/20/linux-amd-screen-boom/index.html
index c0dcfc68..c55b7b21 100644
--- a/2025/04/20/linux-amd-screen-boom/index.html
+++ b/2025/04/20/linux-amd-screen-boom/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/05/07/nestjs-bullmq-mail-business/index.html b/2025/05/07/nestjs-bullmq-mail-business/index.html
index a983ad14..10baaa95 100644
--- a/2025/05/07/nestjs-bullmq-mail-business/index.html
+++ b/2025/05/07/nestjs-bullmq-mail-business/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/05/08/Multiplayer-Collaborative-Systems-tips/index.html b/2025/05/08/Multiplayer-Collaborative-Systems-tips/index.html
index dfd3002c..9e6313a8 100644
--- a/2025/05/08/Multiplayer-Collaborative-Systems-tips/index.html
+++ b/2025/05/08/Multiplayer-Collaborative-Systems-tips/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/05/12/二〇二五年五月十二日/index.html b/2025/05/12/二〇二五年五月十二日/index.html
index 058947f0..6a01d10c 100644
--- a/2025/05/12/二〇二五年五月十二日/index.html
+++ b/2025/05/12/二〇二五年五月十二日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/05/27/vertical-slicing-practice/index.html b/2025/05/27/vertical-slicing-practice/index.html
index 0440e387..1c1745f2 100644
--- a/2025/05/27/vertical-slicing-practice/index.html
+++ b/2025/05/27/vertical-slicing-practice/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/06/10/二〇二五年六月十日/index.html b/2025/06/10/二〇二五年六月十日/index.html
index 691a293b..a65a500b 100644
--- a/2025/06/10/二〇二五年六月十日/index.html
+++ b/2025/06/10/二〇二五年六月十日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/06/29/二〇二五年六月二十九日/index.html b/2025/06/29/二〇二五年六月二十九日/index.html
index 61c300de..3abf60ec 100644
--- a/2025/06/29/二〇二五年六月二十九日/index.html
+++ b/2025/06/29/二〇二五年六月二十九日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/06/30/ibs/index.html b/2025/06/30/ibs/index.html
index ac1fba70..5ca9d70b 100644
--- a/2025/06/30/ibs/index.html
+++ b/2025/06/30/ibs/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/07/08/dadgad/index.html b/2025/07/08/dadgad/index.html
index fcda9cb0..c0966a70 100644
--- a/2025/07/08/dadgad/index.html
+++ b/2025/07/08/dadgad/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/07/11/fuck-hcho/index.html b/2025/07/11/fuck-hcho/index.html
index 87ace984..a03289bb 100644
--- a/2025/07/11/fuck-hcho/index.html
+++ b/2025/07/11/fuck-hcho/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/07/11/rep-date/index.html b/2025/07/11/rep-date/index.html
index 4616b458..d7cacebd 100644
--- a/2025/07/11/rep-date/index.html
+++ b/2025/07/11/rep-date/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/07/29/nestjs-nested-object-dto/index.html b/2025/07/29/nestjs-nested-object-dto/index.html
index e7bac87d..62d39910 100644
--- a/2025/07/29/nestjs-nested-object-dto/index.html
+++ b/2025/07/29/nestjs-nested-object-dto/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/07/31/svelte-lazyquery/index.html b/2025/07/31/svelte-lazyquery/index.html
index 10e65aae..12647c2c 100644
--- a/2025/07/31/svelte-lazyquery/index.html
+++ b/2025/07/31/svelte-lazyquery/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/08/13/nestjs-enableImplicitConversion-and-transform/index.html b/2025/08/13/nestjs-enableImplicitConversion-and-transform/index.html
index ed44238c..d3fa065d 100644
--- a/2025/08/13/nestjs-enableImplicitConversion-and-transform/index.html
+++ b/2025/08/13/nestjs-enableImplicitConversion-and-transform/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/09/09/database-fk-design-in-clinical-medicine/index.html b/2025/09/09/database-fk-design-in-clinical-medicine/index.html
index 97d72a0f..aa32b1f1 100644
--- a/2025/09/09/database-fk-design-in-clinical-medicine/index.html
+++ b/2025/09/09/database-fk-design-in-clinical-medicine/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/09/24/二〇二五年九月二十四日/index.html b/2025/09/24/二〇二五年九月二十四日/index.html
index faa588b0..35296497 100644
--- a/2025/09/24/二〇二五年九月二十四日/index.html
+++ b/2025/09/24/二〇二五年九月二十四日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/10/19/Gram-stain/index.html b/2025/10/19/Gram-stain/index.html
index fd505e5e..b4cd26df 100644
--- a/2025/10/19/Gram-stain/index.html
+++ b/2025/10/19/Gram-stain/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/10/19/二〇二五年十月十九日/index.html b/2025/10/19/二〇二五年十月十九日/index.html
index 4ef96e22..8517786e 100644
--- a/2025/10/19/二〇二五年十月十九日/index.html
+++ b/2025/10/19/二〇二五年十月十九日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/10/19/极简主义生活的本质/index.html b/2025/10/19/极简主义生活的本质/index.html
index 756f1e98..1820a06a 100644
--- a/2025/10/19/极简主义生活的本质/index.html
+++ b/2025/10/19/极简主义生活的本质/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/10/24/Neutrophils-are-a-double-edged-sword/index.html b/2025/10/24/Neutrophils-are-a-double-edged-sword/index.html
index b3d73d31..e9abaf99 100644
--- a/2025/10/24/Neutrophils-are-a-double-edged-sword/index.html
+++ b/2025/10/24/Neutrophils-are-a-double-edged-sword/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/10/28/sufactants/index.html b/2025/10/28/sufactants/index.html
index f9927c25..c64ac728 100644
--- a/2025/10/28/sufactants/index.html
+++ b/2025/10/28/sufactants/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/10/29/库欣综合征/index.html b/2025/10/29/库欣综合征/index.html
index 9de3be81..0f98eb53 100644
--- a/2025/10/29/库欣综合征/index.html
+++ b/2025/10/29/库欣综合征/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/10/30/二〇二五年十月三十日/index.html b/2025/10/30/二〇二五年十月三十日/index.html
index d9f42cdf..cde8306c 100644
--- a/2025/10/30/二〇二五年十月三十日/index.html
+++ b/2025/10/30/二〇二五年十月三十日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/10/31/二〇二五年十月三十一日/index.html b/2025/10/31/二〇二五年十月三十一日/index.html
index 0dd45c00..e5ee5b84 100644
--- a/2025/10/31/二〇二五年十月三十一日/index.html
+++ b/2025/10/31/二〇二五年十月三十一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/11/07/二〇二五年十一月七日/index.html b/2025/11/07/二〇二五年十一月七日/index.html
index 8bd1518d..feb1ba4c 100644
--- a/2025/11/07/二〇二五年十一月七日/index.html
+++ b/2025/11/07/二〇二五年十一月七日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/11/08/后摇的-Graphic-EQ-APO-Presets/index.html b/2025/11/08/后摇的-Graphic-EQ-APO-Presets/index.html
index 5fd47a3a..643179c5 100644
--- a/2025/11/08/后摇的-Graphic-EQ-APO-Presets/index.html
+++ b/2025/11/08/后摇的-Graphic-EQ-APO-Presets/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/11/26/二〇二五年十一月二十六日/index.html b/2025/11/26/二〇二五年十一月二十六日/index.html
index 115aebf6..fe23a905 100644
--- a/2025/11/26/二〇二五年十一月二十六日/index.html
+++ b/2025/11/26/二〇二五年十一月二十六日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/11/27/二〇二五年十一月二十七日/index.html b/2025/11/27/二〇二五年十一月二十七日/index.html
index 802daf79..b99570bf 100644
--- a/2025/11/27/二〇二五年十一月二十七日/index.html
+++ b/2025/11/27/二〇二五年十一月二十七日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/11/29/FDA-仿制药流程/index.html b/2025/11/29/FDA-仿制药流程/index.html
index ba568511..3b039e86 100644
--- a/2025/11/29/FDA-仿制药流程/index.html
+++ b/2025/11/29/FDA-仿制药流程/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/12/19/临床研究中盲态规则存在的原因/index.html b/2025/12/19/临床研究中盲态规则存在的原因/index.html
index f9bdae30..9ab97e31 100644
--- a/2025/12/19/临床研究中盲态规则存在的原因/index.html
+++ b/2025/12/19/临床研究中盲态规则存在的原因/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/12/19/二〇二五年十二月十九日/index.html b/2025/12/19/二〇二五年十二月十九日/index.html
index 9d4fb08d..7ba7c05f 100644
--- a/2025/12/19/二〇二五年十二月十九日/index.html
+++ b/2025/12/19/二〇二五年十二月十九日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/12/20/谈谈软件工程/index.html b/2025/12/20/谈谈软件工程/index.html
index 7285d56f..f4ae747d 100644
--- a/2025/12/20/谈谈软件工程/index.html
+++ b/2025/12/20/谈谈软件工程/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/12/27/意向性治疗原则/index.html b/2025/12/27/意向性治疗原则/index.html
index 21d28e79..293b09d1 100644
--- a/2025/12/27/意向性治疗原则/index.html
+++ b/2025/12/27/意向性治疗原则/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/12/29/FHIR-记录患者的用药记录/index.html b/2025/12/29/FHIR-记录患者的用药记录/index.html
index 093bf021..905107da 100644
--- a/2025/12/29/FHIR-记录患者的用药记录/index.html
+++ b/2025/12/29/FHIR-记录患者的用药记录/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/12/29/TSOPT-检查/index.html b/2025/12/29/TSOPT-检查/index.html
index f9852008..facc6d1f 100644
--- a/2025/12/29/TSOPT-检查/index.html
+++ b/2025/12/29/TSOPT-检查/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2025/12/30/乙酰半脱氨酸的药理学与药代动力学特性/index.html b/2025/12/30/乙酰半脱氨酸的药理学与药代动力学特性/index.html
index 93717500..429137c4 100644
--- a/2025/12/30/乙酰半脱氨酸的药理学与药代动力学特性/index.html
+++ b/2025/12/30/乙酰半脱氨酸的药理学与药代动力学特性/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2026/01/09/药物研发中的制药成本/index.html b/2026/01/09/药物研发中的制药成本/index.html
index 88cdd268..fbbcd955 100644
--- a/2026/01/09/药物研发中的制药成本/index.html
+++ b/2026/01/09/药物研发中的制药成本/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2026/02/16/老年人营养误区/index.html b/2026/02/16/老年人营养误区/index.html
index d1e76a13..c07ffc36 100644
--- a/2026/02/16/老年人营养误区/index.html
+++ b/2026/02/16/老年人营养误区/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2026/03/06/Tacrolimus-for-Stasis-Dermatitis-in-Palliative-Heart-Failure-and-COPD/index.html b/2026/03/06/Tacrolimus-for-Stasis-Dermatitis-in-Palliative-Heart-Failure-and-COPD/index.html
index a1ee0123..31169faa 100644
--- a/2026/03/06/Tacrolimus-for-Stasis-Dermatitis-in-Palliative-Heart-Failure-and-COPD/index.html
+++ b/2026/03/06/Tacrolimus-for-Stasis-Dermatitis-in-Palliative-Heart-Failure-and-COPD/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2026/03/12/简单说说-FHIR-Transaction-Bundle/index.html b/2026/03/12/简单说说-FHIR-Transaction-Bundle/index.html
index 7b639cf2..0fe21507 100644
--- a/2026/03/12/简单说说-FHIR-Transaction-Bundle/index.html
+++ b/2026/03/12/简单说说-FHIR-Transaction-Bundle/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2026/03/16/Nginx-前后端同域分流/index.html b/2026/03/16/Nginx-前后端同域分流/index.html
index 2440d2b2..cc6d8d89 100644
--- a/2026/03/16/Nginx-前后端同域分流/index.html
+++ b/2026/03/16/Nginx-前后端同域分流/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2026/03/21/小谈-NestJS-Zod/index.html b/2026/03/21/小谈-NestJS-Zod/index.html
index 2100383d..b3c60544 100644
--- a/2026/03/21/小谈-NestJS-Zod/index.html
+++ b/2026/03/21/小谈-NestJS-Zod/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2026/03/22/在-OCaml-中通过-CTypes-绑定-libseccomp/index.html b/2026/03/22/在-OCaml-中通过-CTypes-绑定-libseccomp/index.html
index 544e8db0..8377b498 100644
--- a/2026/03/22/在-OCaml-中通过-CTypes-绑定-libseccomp/index.html
+++ b/2026/03/22/在-OCaml-中通过-CTypes-绑定-libseccomp/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/2026/04/21/二〇二六年四月二十一日/index.html b/2026/04/21/二〇二六年四月二十一日/index.html
index f5d9db15..5a25d0d6 100644
--- a/2026/04/21/二〇二六年四月二十一日/index.html
+++ b/2026/04/21/二〇二六年四月二十一日/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -265,6 +264,11 @@
<nav class="post-nav">
<div class="prev-item">
+ <div class="icon arrow-left"></div>
+ <div class="post-link">
+ <a href="/2026/05/28/%E5%A6%82%E4%BD%95%E5%9C%A8-DDD-CQRS-%E4%B8%AD%E5%A4%84%E7%90%86%E8%B7%A8%E8%81%9A%E5%90%88%E7%9A%84%E4%BA%8B%E5%8A%A1/">Prev</a>
+ </div>
+
</div>
<div class="next-item">
diff --git a/2026/05/28/如何在-DDD-CQRS-中处理跨聚合的事务/index.html b/2026/05/28/如何在-DDD-CQRS-中处理跨聚合的事务/index.html
new file mode 100644
index 00000000..e7a633da
--- /dev/null
+++ b/2026/05/28/如何在-DDD-CQRS-中处理跨聚合的事务/index.html
@@ -0,0 +1,303 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+<meta http-equiv="X-UA-Compatible" content="ie=edge">
+
+ <meta name="author" content="韩暮秋">
+
+
+ <meta name="subtitle" content="暮秋小屋">
+
+
+ <meta name="description" content="这里是暮秋小屋,思念和灵感的寄存处">
+
+
+ <meta name="keywords" content="韩暮秋,MuqiuHan,'Muqiu Han', 'muqiu han', muqiuhan">
+
+
+
+
+ <title>
+
+ 如何在 DDD + CQRS 中处理跨聚合的事务 |
+ 暮秋小屋
+ </title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script
+ src="/js/menu.js"></script>
+
+
+
+
+
+ <script
+ src="https://polyfill.alicdn.com/polyfill.js?features=es6"></script>
+ <script
+ id="MathJax-script"
+ async
+ src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/mathjax/3.2.0/es5/tex-mml-chtml.js"></script>
+
+
+
+
+ <meta name="generator" content="Hexo 6.3.0"></head>
+ <body>
+ <div class="wrapper">
+
+ <div class="header">
+ <div class="flex-container">
+ <div class="header-inner">
+ <div class="site-brand-container">
+ <a href="/">
+
+ 暮秋小屋
+
+ </a>
+ </div>
+ <div id="menu-btn" class="menu-btn" onclick="toggleMenu()">
+ 菜单
+ </div>
+ <nav class="site-nav">
+ <ul class="menu-list">
+
+
+ <li class="menu-item">
+ <a href="/">
+ 主页
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/categories/gallery/">
+ 日记本
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Medicine/">
+ 泛医学
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Technique/">
+ 计算机
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Life/">
+ 生活
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/archives">
+ 全部
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/about">
+ 关于
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/search">搜索</a>
+ </li>
+
+ </ul>
+ </nav>
+ </div>
+ </div>
+</div>
+
+
+ <div class="main">
+ <div class="flex-container">
+ <article id="post">
+
+
+ <div class="post-head">
+ <div class="post-info">
+ <div class="tag-list">
+
+
+ <span class="post-tag">
+ <a href="/tags/Technique/">
+ Technique
+ </a>
+ </span>
+
+
+ </div>
+ <div class="post-title">
+
+
+ 如何在 DDD + CQRS 中处理跨聚合的事务
+
+
+ </div>
+ <span class="post-date">
+ May 28, 2026
+ </span>
+ </div>
+ <div class="post-img">
+
+ <div class="h-line-primary"></div>
+
+ </div>
+</div>
+ <div class="post-content">
+ <p>假设系统里有一个模块,用来管理化合物从 hit、lead 到 candidate 的推进。</p>
+<p>药化团队合成了一批化合物。生物团队上传活性、选择性、ADME、早期毒理等实验结果。项目负责人看完某个化合物的数据包后,要做一个决策:</p>
+<ul>
+<li>推进为候选化合物。</li>
+<li>退回继续优化。</li>
+<li>暂停该方向。</li>
+</ul>
+<p>提交这个决策时,系统通常要做这些事:</p>
+<ul>
+<li>写入一条候选化合物推进决策。</li>
+<li>改变化合物当前研发阶段。</li>
+<li>如果推进成功,创建候选药物档案。</li>
+<li>关闭当前评审责任。</li>
+<li>锁定本次使用的实验数据包版本。</li>
+<li>写入审计事件,说明阶段变化依据哪一次数据评审。</li>
+</ul>
+<p>这些写入必须一起成功。不能出现决策已经提交,但化合物阶段没变, 或是候选药物档案已创建,但数据包没有锁定等问题。</p>
+<p>最直接的实现,是在 Command Handler 里注入 Prisma,然后开事务:</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">SubmitCompoundPromotionDecisionHandler</span> &#123;</span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"><span class="keyword">private</span> <span class="keyword">readonly</span> <span class="attr">prisma</span>: <span class="title class_">PrismaClient</span></span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">async</span> <span class="title function_">execute</span>(<span class="params"><span class="attr">command</span>: <span class="title class_">SubmitCompoundPromotionDecision</span></span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">prisma</span>.$transaction(<span class="title function_">async</span> (tx) =&gt; &#123;</span><br><span class="line"> <span class="keyword">const</span> decision = <span class="keyword">await</span> tx.<span class="property">compoundDecision</span>.<span class="title function_">create</span>(&#123;</span><br><span class="line"> <span class="attr">data</span>: &#123;</span><br><span class="line"> <span class="attr">compoundId</span>: command.<span class="property">compoundId</span>,</span><br><span class="line"> <span class="attr">result</span>: command.<span class="property">result</span>,</span><br><span class="line"> <span class="attr">reason</span>: command.<span class="property">reason</span>,</span><br><span class="line"> <span class="attr">decidedBy</span>: command.<span class="property">actorUserId</span>,</span><br><span class="line"> &#125;,</span><br><span class="line"> &#125;);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">await</span> tx.<span class="property">compound</span>.<span class="title function_">update</span>(&#123;</span><br><span class="line"> <span class="attr">where</span>: &#123; <span class="attr">id</span>: command.<span class="property">compoundId</span> &#125;,</span><br><span class="line"> <span class="attr">data</span>: &#123; <span class="attr">stage</span>: command.<span class="property">result</span> === <span class="string">&quot;promote&quot;</span> ? <span class="string">&quot;candidate&quot;</span> : <span class="string">&quot;lead&quot;</span> &#125;,</span><br><span class="line"> &#125;);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (command.<span class="property">result</span> === <span class="string">&quot;promote&quot;</span>) &#123;</span><br><span class="line"> <span class="keyword">await</span> tx.<span class="property">developmentCandidate</span>.<span class="title function_">create</span>(&#123;</span><br><span class="line"> <span class="attr">data</span>: &#123; <span class="attr">compoundId</span>: command.<span class="property">compoundId</span> &#125;,</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">await</span> tx.<span class="property">reviewAssignment</span>.<span class="title function_">update</span>(...);</span><br><span class="line"> <span class="keyword">await</span> tx.<span class="property">auditEvent</span>.<span class="title function_">create</span>(...);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> decision;</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>但它把几个层次混在了一起。</p>
+<p>Command Handler 本来应该编排业务流程,但现在它编排了数据库表的更新顺序。</p>
+<p>化合物阶段变化本来应该由 <code>Compound</code> 聚合判断。比如只有 <code>lead_optimization</code> 阶段的化合物才能推进到 <code>candidate</code>,已经暂停的化合物不能直接推进。现在这条规则可能散落在 <code>tx.compound.update</code> 前后的 if 判断里。</p>
+<p>事务边界本来属于用例。现在它由具体 ORM 的 <code>$transaction</code> 暴露在 Command Handler 里。换 ORM、拆 outbox、改审计事件写法,Command Handler 都要动。</p>
+<hr>
+<p>如果把这段逻辑挪到 repository 里:</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">compoundRepository.<span class="title function_">submitPromotionDecision</span>(command);</span><br></pre></td></tr></table></figure>
+<p>这看起来把 Prisma 从 Command Handler 里拿掉了。但如果 <code>compoundRepository</code> 内部仍然创建决策、更新化合物、创建候选药物档案、关闭责任、写审计事件,那只是把混乱换了一个地方,因为 Repository 的核心职责应该只是持久化聚合,例如:</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">compoundRepository.<span class="title function_">findById</span>(id);</span><br><span class="line">compoundRepository.<span class="title function_">save</span>(compound);</span><br><span class="line">compoundDecisionRepository.<span class="title function_">save</span>(decision);</span><br><span class="line">developmentCandidateRepository.<span class="title function_">save</span>(candidate);</span><br></pre></td></tr></table></figure>
+<p>如果一个 <code>CompoundRepository</code> 开始保存 <code>CompoundDecision</code>、<code>DevelopmentCandidate</code>、<code>ReviewAssignment</code>、<code>AuditEvent</code>,它就不再只是 Compound 的 repository。它变成了一个跨模块事务服务,只是名字还叫 repository。</p>
+<hr>
+<p>所以这里我的解决方案之一是在 application 层定义一个 Unit of Work port,它表达的是一个具体业务动作:提交候选化合物推进决策。</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">interface</span> <span class="title class_">SubmitCompoundPromotionDecisionUnitOfWork</span> &#123;</span><br><span class="line"> <span class="title function_">submit</span>(<span class="attr">input</span>: &#123;</span><br><span class="line"> <span class="attr">compoundId</span>: <span class="built_in">string</span>;</span><br><span class="line"> <span class="attr">dataPackageId</span>: <span class="built_in">string</span>;</span><br><span class="line"> <span class="attr">result</span>: <span class="string">&quot;promote&quot;</span> | <span class="string">&quot;optimize&quot;</span> | <span class="string">&quot;pause&quot;</span>;</span><br><span class="line"> <span class="attr">reason</span>?: <span class="built_in">string</span>;</span><br><span class="line"> <span class="attr">actorUserId</span>: <span class="built_in">string</span>;</span><br><span class="line"> &#125;): <span class="title class_">Promise</span>&lt;<span class="title class_">CompoundPromotionDecisionDto</span>&gt;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>Command Handler 依赖这个端口,而不是依赖 Prisma。</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">SubmitCompoundPromotionDecisionHandler</span> &#123;</span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"></span></span><br><span class="line"><span class="params"> <span class="keyword">private</span> <span class="keyword">readonly</span> <span class="attr">unitOfWork</span>: <span class="title class_">SubmitCompoundPromotionDecisionUnitOfWork</span>,</span></span><br><span class="line"><span class="params"> </span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">async</span> <span class="title function_">execute</span>(<span class="params"><span class="attr">command</span>: <span class="title class_">SubmitCompoundPromotionDecision</span></span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">unitOfWork</span>.<span class="title function_">submit</span>(&#123;</span><br><span class="line"> <span class="attr">compoundId</span>: command.<span class="property">compoundId</span>,</span><br><span class="line"> <span class="attr">dataPackageId</span>: command.<span class="property">dataPackageId</span>,</span><br><span class="line"> <span class="attr">result</span>: command.<span class="property">result</span>,</span><br><span class="line"> <span class="attr">reason</span>: command.<span class="property">reason</span>,</span><br><span class="line"> <span class="attr">actorUserId</span>: command.<span class="property">actorUserId</span>,</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>这段代码没有事务细节。它只转交命令意图。</p>
+<p>具体事务放在 infrastructure:</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">PrismaSubmitCompoundPromotionDecisionUnitOfWork</span></span><br><span class="line"> <span class="keyword">implements</span> <span class="title class_">SubmitCompoundPromotionDecisionUnitOfWork</span></span><br><span class="line">&#123;</span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"><span class="keyword">private</span> <span class="keyword">readonly</span> <span class="attr">prisma</span>: <span class="title class_">PrismaClient</span></span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">async</span> <span class="title function_">submit</span>(<span class="params"><span class="attr">input</span>: <span class="title class_">SubmitCompoundPromotionDecisionInput</span></span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">prisma</span>.$transaction(<span class="title function_">async</span> (tx) =&gt; &#123;</span><br><span class="line"> <span class="comment">// 在这里组合 tx-bound store / repository</span></span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>这样就把“业务事务边界”和“命令入口”分开,Command Handler 不需要知道用 Prisma 还是别的 ORM。它也不需要知道事务里要调用哪些表。它只知道这个命令由一个原子用例完成。</p>
+<p>但聚合仍然要负责状态规则,Unit of Work 不能变成新的数据库脚本,在事务内部,仍然应该先读取聚合,让聚合执行状态变化,再保存聚合。</p>
+<p>例如 <code>Compound</code> 聚合可以这样表达规则:</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Compound</span> &#123;</span><br><span class="line"> <span class="title function_">promoteToCandidate</span>(<span class="params"><span class="attr">input</span>: &#123;</span></span><br><span class="line"><span class="params"> dataPackageId: <span class="built_in">string</span>;</span></span><br><span class="line"><span class="params"> actorUserId: <span class="built_in">string</span>;</span></span><br><span class="line"><span class="params"> &#125;</span>) &#123;</span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">stage</span> !== <span class="string">&quot;lead_optimization&quot;</span>) &#123;</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">&quot;只有先导优化阶段的化合物才能推进为候选化合物&quot;</span>);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">lockedDataPackageId</span> !== <span class="literal">null</span>) &#123;</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">&quot;已锁定数据包的化合物不能重复推进&quot;</span>);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">stage</span> = <span class="string">&quot;candidate&quot;</span>;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">lockedDataPackageId</span> = input.<span class="property">dataPackageId</span>;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">updatedByUserId</span> = input.<span class="property">actorUserId</span>;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">returnToOptimization</span>(<span class="params"><span class="attr">input</span>: &#123; reason: <span class="built_in">string</span>; actorUserId: <span class="built_in">string</span> &#125;</span>) &#123;</span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">stage</span> !== <span class="string">&quot;lead_optimization&quot;</span>) &#123;</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">&quot;只有评审中的化合物才能退回优化&quot;</span>);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">stage</span> = <span class="string">&quot;lead_optimization&quot;</span>;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">optimizationReason</span> = input.<span class="property">reason</span>;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">updatedByUserId</span> = input.<span class="property">actorUserId</span>;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>Unit of Work 在事务里调用这些方法:</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">await</span> prisma.$transaction(<span class="title function_">async</span> (tx) =&gt; &#123;</span><br><span class="line"> <span class="keyword">const</span> compoundStore = <span class="keyword">new</span> <span class="title class_">PrismaCompoundStore</span>(tx);</span><br><span class="line"> <span class="keyword">const</span> compound = <span class="keyword">await</span> compoundStore.<span class="title function_">findById</span>(input.<span class="property">compoundId</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (input.<span class="property">result</span> === <span class="string">&quot;promote&quot;</span>) &#123;</span><br><span class="line"> compound.<span class="title function_">promoteToCandidate</span>(&#123;</span><br><span class="line"> <span class="attr">dataPackageId</span>: input.<span class="property">dataPackageId</span>,</span><br><span class="line"> <span class="attr">actorUserId</span>: input.<span class="property">actorUserId</span>,</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (input.<span class="property">result</span> === <span class="string">&quot;optimize&quot;</span>) &#123;</span><br><span class="line"> compound.<span class="title function_">returnToOptimization</span>(&#123;</span><br><span class="line"> <span class="attr">reason</span>: input.<span class="property">reason</span> ?? <span class="string">&quot;需要补充结构优化&quot;</span>,</span><br><span class="line"> <span class="attr">actorUserId</span>: input.<span class="property">actorUserId</span>,</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">await</span> compoundStore.<span class="title function_">save</span>(compound);</span><br><span class="line"> <span class="keyword">await</span> decisionStore.<span class="title function_">save</span>(decision);</span><br><span class="line"> <span class="keyword">await</span> candidateStore.<span class="title function_">createIfPromoted</span>(...);</span><br><span class="line"> <span class="keyword">await</span> assignmentStore.<span class="title function_">closeCurrent</span>(...);</span><br><span class="line"> <span class="keyword">await</span> auditStore.<span class="title function_">append</span>(...);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
+<p>而为了让事务里的代码复用聚合持久化逻辑,我们需要一种 tx-bound repository 或 store。</p>
+<p>最粗暴的写法是在领域 repository interface 里加一个可选事务参数:</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> <span class="title class_">CompoundRepository</span> &#123;</span><br><span class="line"> <span class="title function_">findById</span>(<span class="attr">id</span>: <span class="built_in">string</span>, <span class="attr">tx</span>?: <span class="title class_">Prisma</span>.<span class="property">TransactionClient</span>): <span class="title class_">Promise</span>&lt;<span class="title class_">Compound</span> | <span class="literal">null</span>&gt;;</span><br><span class="line"> <span class="title function_">save</span>(<span class="attr">compound</span>: <span class="title class_">Compound</span>, <span class="attr">tx</span>?: <span class="title class_">Prisma</span>.<span class="property">TransactionClient</span>): <span class="title class_">Promise</span>&lt;<span class="built_in">void</span>&gt;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>但它又把 Prisma 带进了领域层。就算把 <code>Prisma.TransactionClient</code> 包成 <code>TransactionClient</code> 类型别名,领域接口仍然在为基础设施妥协。</p>
+<p>我更倾向于把 tx-bound 能力留在 infrastructure,领域层只定义干净的 repository port:</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">interface</span> <span class="title class_">CompoundRepository</span> &#123;</span><br><span class="line"> <span class="title function_">findById</span>(<span class="attr">id</span>: <span class="built_in">string</span>): <span class="title class_">Promise</span>&lt;<span class="title class_">Compound</span> | <span class="literal">null</span>&gt;;</span><br><span class="line"> <span class="title function_">save</span>(<span class="attr">compound</span>: <span class="title class_">Compound</span>): <span class="title class_">Promise</span>&lt;<span class="built_in">void</span>&gt;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>infrastructure 层拆一个 store,接收最小持久化客户端:</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> <span class="title class_">CompoundStoreClient</span> = &#123;</span><br><span class="line"> <span class="attr">compound</span>: &#123;</span><br><span class="line"> <span class="title function_">findUnique</span>(<span class="attr">args</span>: <span class="built_in">unknown</span>): <span class="title class_">Promise</span>&lt;<span class="built_in">unknown</span>&gt;;</span><br><span class="line"> <span class="title function_">update</span>(<span class="attr">args</span>: <span class="built_in">unknown</span>): <span class="title class_">Promise</span>&lt;<span class="built_in">unknown</span>&gt;;</span><br><span class="line"> &#125;;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">PrismaCompoundStore</span> <span class="keyword">implements</span> <span class="title class_">CompoundRepository</span> &#123;</span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"><span class="keyword">private</span> <span class="keyword">readonly</span> <span class="attr">client</span>: <span class="title class_">CompoundStoreClient</span></span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">async</span> <span class="title function_">findById</span>(<span class="params"><span class="attr">id</span>: <span class="built_in">string</span></span>) &#123;</span><br><span class="line"> <span class="keyword">const</span> record = <span class="keyword">await</span> <span class="variable language_">this</span>.<span class="property">client</span>.<span class="property">compound</span>.<span class="title function_">findUnique</span>(...);</span><br><span class="line"> <span class="keyword">return</span> <span class="title class_">Compound</span>.<span class="title function_">restore</span>(record);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">async</span> <span class="title function_">save</span>(<span class="params"><span class="attr">compound</span>: <span class="title class_">Compound</span></span>) &#123;</span><br><span class="line"> <span class="keyword">const</span> snapshot = compound.<span class="title function_">toSnapshot</span>();</span><br><span class="line"> <span class="keyword">await</span> <span class="variable language_">this</span>.<span class="property">client</span>.<span class="property">compound</span>.<span class="title function_">update</span>(...);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>普通 repository 可以继承这个 store,传完整 Prisma client:</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">PrismaCompoundRepository</span> <span class="keyword">extends</span> <span class="title class_ inherited__">PrismaCompoundStore</span> &#123;</span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"><span class="attr">prisma</span>: <span class="title class_">PrismaClient</span></span>) &#123;</span><br><span class="line"> <span class="variable language_">super</span>(prisma);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>Unit of Work 在事务里传 tx:</p>
+<figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">await</span> prisma.$transaction(<span class="title function_">async</span> (tx) =&gt; &#123;</span><br><span class="line"> <span class="keyword">const</span> compoundStore = <span class="keyword">new</span> <span class="title class_">PrismaCompoundStore</span>(tx);</span><br><span class="line"> <span class="keyword">const</span> compound = <span class="keyword">await</span> compoundStore.<span class="title function_">findById</span>(input.<span class="property">compoundId</span>);</span><br><span class="line"> <span class="comment">// ...</span></span><br><span class="line"> <span class="keyword">await</span> compoundStore.<span class="title function_">save</span>(compound);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
+
+</div>
+
+<script>
+ window.onload = detectors();
+</script>
+ <div class="post-footer">
+ <div class="h-line-primary"></div>
+ <nav class="post-nav">
+ <div class="prev-item">
+
+ </div>
+ <div class="next-item">
+
+ <div class="icon arrow-right"></div>
+ <div class="post-link">
+ <a href="/2026/04/21/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%85%AD%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/">Next</a>
+ </div>
+
+ </div>
+ </nav>
+</div>
+
+
+ <div class="post-comment">
+
+
+
+
+
+
+
+</div>
+
+
+</article>
+ </div>
+ </div>
+
+ <div class="footer">
+ <div class="flex-container">
+ <div class="footer-text">
+
+
+ 韩暮秋 |
+
+
+ 希望路过的人可以添点柴火让这里暖和点
+
+ </div>
+ </div>
+</div>
+
+
+ </div>
+
+ <script src="/js/mermaid-zoom.js"></script>
+
+ </body>
+</html>
diff --git a/about.html b/about.html
index fcadf8e1..3894eaca 100644
--- a/about.html
+++ b/about.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2020/12/index.html b/archives/2020/12/index.html
index 46ad6158..132fcd8c 100644
--- a/archives/2020/12/index.html
+++ b/archives/2020/12/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2020/index.html b/archives/2020/index.html
index 2395247a..349397f5 100644
--- a/archives/2020/index.html
+++ b/archives/2020/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2021/02/index.html b/archives/2021/02/index.html
index a720ed3e..db081111 100644
--- a/archives/2021/02/index.html
+++ b/archives/2021/02/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2021/03/index.html b/archives/2021/03/index.html
index 724fa59e..d98a543d 100644
--- a/archives/2021/03/index.html
+++ b/archives/2021/03/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2021/index.html b/archives/2021/index.html
index f7d41a08..2612eb9a 100644
--- a/archives/2021/index.html
+++ b/archives/2021/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2022/01/index.html b/archives/2022/01/index.html
index 40d0729d..8f7fe397 100644
--- a/archives/2022/01/index.html
+++ b/archives/2022/01/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2022/03/index.html b/archives/2022/03/index.html
index 77f2fa83..0119ec42 100644
--- a/archives/2022/03/index.html
+++ b/archives/2022/03/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2022/08/index.html b/archives/2022/08/index.html
index 1c1df89f..ca403024 100644
--- a/archives/2022/08/index.html
+++ b/archives/2022/08/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2022/09/index.html b/archives/2022/09/index.html
index a906adf5..d6b70905 100644
--- a/archives/2022/09/index.html
+++ b/archives/2022/09/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2022/10/index.html b/archives/2022/10/index.html
index 906216ab..0de5b78a 100644
--- a/archives/2022/10/index.html
+++ b/archives/2022/10/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2022/11/index.html b/archives/2022/11/index.html
index 525f0676..02d20aae 100644
--- a/archives/2022/11/index.html
+++ b/archives/2022/11/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2022/12/index.html b/archives/2022/12/index.html
index c92954f9..aad80900 100644
--- a/archives/2022/12/index.html
+++ b/archives/2022/12/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2022/index.html b/archives/2022/index.html
index c6f8dd23..9715dae8 100644
--- a/archives/2022/index.html
+++ b/archives/2022/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/01/index.html b/archives/2023/01/index.html
index 42381112..7009587a 100644
--- a/archives/2023/01/index.html
+++ b/archives/2023/01/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/02/index.html b/archives/2023/02/index.html
index f24336ce..12f16403 100644
--- a/archives/2023/02/index.html
+++ b/archives/2023/02/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/03/index.html b/archives/2023/03/index.html
index 6c717f23..975267af 100644
--- a/archives/2023/03/index.html
+++ b/archives/2023/03/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/04/index.html b/archives/2023/04/index.html
index 3fd277f0..230277d2 100644
--- a/archives/2023/04/index.html
+++ b/archives/2023/04/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/05/index.html b/archives/2023/05/index.html
index 0cd0f640..b4115658 100644
--- a/archives/2023/05/index.html
+++ b/archives/2023/05/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/06/index.html b/archives/2023/06/index.html
index d4cbc684..a59c72b9 100644
--- a/archives/2023/06/index.html
+++ b/archives/2023/06/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/07/index.html b/archives/2023/07/index.html
index 2994a407..420985f4 100644
--- a/archives/2023/07/index.html
+++ b/archives/2023/07/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/08/index.html b/archives/2023/08/index.html
index 3eb3d86e..ba6cc193 100644
--- a/archives/2023/08/index.html
+++ b/archives/2023/08/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/09/index.html b/archives/2023/09/index.html
index 4de15697..be342702 100644
--- a/archives/2023/09/index.html
+++ b/archives/2023/09/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/10/index.html b/archives/2023/10/index.html
index 20adceb0..80f76ce7 100644
--- a/archives/2023/10/index.html
+++ b/archives/2023/10/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/11/index.html b/archives/2023/11/index.html
index 90ad8a8f..566ea6cb 100644
--- a/archives/2023/11/index.html
+++ b/archives/2023/11/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/12/index.html b/archives/2023/12/index.html
index 9282c68f..5af4cd91 100644
--- a/archives/2023/12/index.html
+++ b/archives/2023/12/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/index.html b/archives/2023/index.html
index eafd767e..b1f44d09 100644
--- a/archives/2023/index.html
+++ b/archives/2023/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/page/2/index.html b/archives/2023/page/2/index.html
index 6d516ca5..7cc8d9a8 100644
--- a/archives/2023/page/2/index.html
+++ b/archives/2023/page/2/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/page/3/index.html b/archives/2023/page/3/index.html
index 91db144c..d0238c39 100644
--- a/archives/2023/page/3/index.html
+++ b/archives/2023/page/3/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/page/4/index.html b/archives/2023/page/4/index.html
index 72a4baa8..29fe8322 100644
--- a/archives/2023/page/4/index.html
+++ b/archives/2023/page/4/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2023/page/5/index.html b/archives/2023/page/5/index.html
index b9477c2c..73e6dab4 100644
--- a/archives/2023/page/5/index.html
+++ b/archives/2023/page/5/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/01/index.html b/archives/2024/01/index.html
index 5afc78b4..2c61b4bb 100644
--- a/archives/2024/01/index.html
+++ b/archives/2024/01/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/02/index.html b/archives/2024/02/index.html
index b7436948..4ac4ae2d 100644
--- a/archives/2024/02/index.html
+++ b/archives/2024/02/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/03/index.html b/archives/2024/03/index.html
index dd1fd35a..93a6c319 100644
--- a/archives/2024/03/index.html
+++ b/archives/2024/03/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/04/index.html b/archives/2024/04/index.html
index 36f98211..a70bb3a6 100644
--- a/archives/2024/04/index.html
+++ b/archives/2024/04/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/05/index.html b/archives/2024/05/index.html
index 5b2828c0..d509f258 100644
--- a/archives/2024/05/index.html
+++ b/archives/2024/05/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/06/index.html b/archives/2024/06/index.html
index aa6c4f8e..38dafe61 100644
--- a/archives/2024/06/index.html
+++ b/archives/2024/06/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/07/index.html b/archives/2024/07/index.html
index 95b1f542..06306f55 100644
--- a/archives/2024/07/index.html
+++ b/archives/2024/07/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/08/index.html b/archives/2024/08/index.html
index 2cb8be4c..6b14aae1 100644
--- a/archives/2024/08/index.html
+++ b/archives/2024/08/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/09/index.html b/archives/2024/09/index.html
index c5a664aa..21eb6abd 100644
--- a/archives/2024/09/index.html
+++ b/archives/2024/09/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/10/index.html b/archives/2024/10/index.html
index 957710c9..3e6266e8 100644
--- a/archives/2024/10/index.html
+++ b/archives/2024/10/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/11/index.html b/archives/2024/11/index.html
index b52b383b..3491bbb3 100644
--- a/archives/2024/11/index.html
+++ b/archives/2024/11/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/12/index.html b/archives/2024/12/index.html
index bd9fd0d7..5e8b8bf2 100644
--- a/archives/2024/12/index.html
+++ b/archives/2024/12/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/index.html b/archives/2024/index.html
index cc7108b1..01fdf6cb 100644
--- a/archives/2024/index.html
+++ b/archives/2024/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/page/2/index.html b/archives/2024/page/2/index.html
index 2630d59c..f7ec0613 100644
--- a/archives/2024/page/2/index.html
+++ b/archives/2024/page/2/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/page/3/index.html b/archives/2024/page/3/index.html
index 120b5a29..132cf6b8 100644
--- a/archives/2024/page/3/index.html
+++ b/archives/2024/page/3/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/page/4/index.html b/archives/2024/page/4/index.html
index f94e06a1..9f46f4df 100644
--- a/archives/2024/page/4/index.html
+++ b/archives/2024/page/4/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2024/page/5/index.html b/archives/2024/page/5/index.html
index a7cc003b..8bd859f4 100644
--- a/archives/2024/page/5/index.html
+++ b/archives/2024/page/5/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/01/index.html b/archives/2025/01/index.html
index 53e6055f..14e3c94b 100644
--- a/archives/2025/01/index.html
+++ b/archives/2025/01/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/02/index.html b/archives/2025/02/index.html
index 4076bcf7..2f3b9b9f 100644
--- a/archives/2025/02/index.html
+++ b/archives/2025/02/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/03/index.html b/archives/2025/03/index.html
index 1cb9fc76..93a77f52 100644
--- a/archives/2025/03/index.html
+++ b/archives/2025/03/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/04/index.html b/archives/2025/04/index.html
index e4dcf177..7eeddb56 100644
--- a/archives/2025/04/index.html
+++ b/archives/2025/04/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/05/index.html b/archives/2025/05/index.html
index 9978f215..9b5f977a 100644
--- a/archives/2025/05/index.html
+++ b/archives/2025/05/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/06/index.html b/archives/2025/06/index.html
index 59ec223d..a0947217 100644
--- a/archives/2025/06/index.html
+++ b/archives/2025/06/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/07/index.html b/archives/2025/07/index.html
index a5f43f9d..b93ea9bf 100644
--- a/archives/2025/07/index.html
+++ b/archives/2025/07/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/08/index.html b/archives/2025/08/index.html
index f1844039..5d34bf09 100644
--- a/archives/2025/08/index.html
+++ b/archives/2025/08/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/09/index.html b/archives/2025/09/index.html
index 58cefc30..98db57ae 100644
--- a/archives/2025/09/index.html
+++ b/archives/2025/09/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/10/index.html b/archives/2025/10/index.html
index 1f2f9c98..0078ec12 100644
--- a/archives/2025/10/index.html
+++ b/archives/2025/10/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/11/index.html b/archives/2025/11/index.html
index 72a9c7d3..5c1848b4 100644
--- a/archives/2025/11/index.html
+++ b/archives/2025/11/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/12/index.html b/archives/2025/12/index.html
index 71a5390f..c91a4b59 100644
--- a/archives/2025/12/index.html
+++ b/archives/2025/12/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/index.html b/archives/2025/index.html
index d9295f5d..b0c2ecfc 100644
--- a/archives/2025/index.html
+++ b/archives/2025/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/page/2/index.html b/archives/2025/page/2/index.html
index fd138c71..5ca551fc 100644
--- a/archives/2025/page/2/index.html
+++ b/archives/2025/page/2/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/page/3/index.html b/archives/2025/page/3/index.html
index 955c4df4..7e515de1 100644
--- a/archives/2025/page/3/index.html
+++ b/archives/2025/page/3/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/page/4/index.html b/archives/2025/page/4/index.html
index 25116416..c812d35a 100644
--- a/archives/2025/page/4/index.html
+++ b/archives/2025/page/4/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/page/5/index.html b/archives/2025/page/5/index.html
index fc3a0b03..55e7c296 100644
--- a/archives/2025/page/5/index.html
+++ b/archives/2025/page/5/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2025/page/6/index.html b/archives/2025/page/6/index.html
index fbfe2443..dbe7ef74 100644
--- a/archives/2025/page/6/index.html
+++ b/archives/2025/page/6/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2026/01/index.html b/archives/2026/01/index.html
index e1d6a874..4c561f8f 100644
--- a/archives/2026/01/index.html
+++ b/archives/2026/01/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2026/02/index.html b/archives/2026/02/index.html
index 6bc1fd5a..49069411 100644
--- a/archives/2026/02/index.html
+++ b/archives/2026/02/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2026/03/index.html b/archives/2026/03/index.html
index 09eb5047..974f38bb 100644
--- a/archives/2026/03/index.html
+++ b/archives/2026/03/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2026/04/index.html b/archives/2026/04/index.html
index 56d46efd..dec0adc6 100644
--- a/archives/2026/04/index.html
+++ b/archives/2026/04/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/archives/2026/05/index.html b/archives/2026/05/index.html
new file mode 100644
index 00000000..9ac32c22
--- /dev/null
+++ b/archives/2026/05/index.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+<meta http-equiv="X-UA-Compatible" content="ie=edge">
+
+ <meta name="author" content="韩暮秋">
+
+
+ <meta name="subtitle" content="暮秋小屋">
+
+
+ <meta name="description" content="这里是暮秋小屋,思念和灵感的寄存处">
+
+
+ <meta name="keywords" content="韩暮秋,MuqiuHan,'Muqiu Han', 'muqiu han', muqiuhan">
+
+
+
+
+ <title>
+
+ Archive: 2026/5 |
+ 暮秋小屋
+ </title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script
+ src="/js/menu.js"></script>
+
+
+
+
+
+ <script
+ src="https://polyfill.alicdn.com/polyfill.js?features=es6"></script>
+ <script
+ id="MathJax-script"
+ async
+ src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/mathjax/3.2.0/es5/tex-mml-chtml.js"></script>
+
+
+
+
+ <meta name="generator" content="Hexo 6.3.0"></head>
+ <body>
+ <div class="wrapper">
+
+ <div class="header">
+ <div class="flex-container">
+ <div class="header-inner">
+ <div class="site-brand-container">
+ <a href="/">
+
+ 暮秋小屋
+
+ </a>
+ </div>
+ <div id="menu-btn" class="menu-btn" onclick="toggleMenu()">
+ 菜单
+ </div>
+ <nav class="site-nav">
+ <ul class="menu-list">
+
+
+ <li class="menu-item">
+ <a href="/">
+ 主页
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/categories/gallery/">
+ 日记本
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Medicine/">
+ 泛医学
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Technique/">
+ 计算机
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Life/">
+ 生活
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/archives">
+ 全部
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/about">
+ 关于
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/search">搜索</a>
+ </li>
+
+ </ul>
+ </nav>
+ </div>
+ </div>
+</div>
+
+
+ <div class="main">
+ <div class="flex-container">
+ <div class="post-list">
+
+
+
+
+
+
+ <div class="year-title">2026</div>
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2026/05/28/%E5%A6%82%E4%BD%95%E5%9C%A8-DDD-CQRS-%E4%B8%AD%E5%A4%84%E7%90%86%E8%B7%A8%E8%81%9A%E5%90%88%E7%9A%84%E4%BA%8B%E5%8A%A1/">
+
+ 如何在 DDD + CQRS 中处理跨聚合的事务
+
+ </a>
+ </div>
+
+ <span class="post-date">May 28, 2026</span>
+ </div>
+
+
+ <div id="paginator">
+
+ </div>
+</div>
+
+ </div>
+ </div>
+
+ <div class="footer">
+ <div class="flex-container">
+ <div class="footer-text">
+
+
+ 韩暮秋 |
+
+
+ 希望路过的人可以添点柴火让这里暖和点
+
+ </div>
+ </div>
+</div>
+
+
+ </div>
+
+ <script src="/js/mermaid-zoom.js"></script>
+
+ </body>
+</html>
diff --git a/archives/2026/index.html b/archives/2026/index.html
index 527b24c0..64aceada 100644
--- a/archives/2026/index.html
+++ b/archives/2026/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2026/05/28/%E5%A6%82%E4%BD%95%E5%9C%A8-DDD-CQRS-%E4%B8%AD%E5%A4%84%E7%90%86%E8%B7%A8%E8%81%9A%E5%90%88%E7%9A%84%E4%BA%8B%E5%8A%A1/">
+
+ 如何在 DDD + CQRS 中处理跨聚合的事务
+
+ </a>
+ </div>
+
+ <span class="post-date">May 28, 2026</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2026/04/21/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%85%AD%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/">
二〇二六年四月二十一日
diff --git a/archives/index.html b/archives/index.html
index 8ad5fc82..dd73010a 100644
--- a/archives/index.html
+++ b/archives/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2026/05/28/%E5%A6%82%E4%BD%95%E5%9C%A8-DDD-CQRS-%E4%B8%AD%E5%A4%84%E7%90%86%E8%B7%A8%E8%81%9A%E5%90%88%E7%9A%84%E4%BA%8B%E5%8A%A1/">
+
+ 如何在 DDD + CQRS 中处理跨聚合的事务
+
+ </a>
+ </div>
+
+ <span class="post-date">May 28, 2026</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2026/04/21/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%85%AD%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/">
二〇二六年四月二十一日
@@ -322,24 +339,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/12/29/FHIR-%E8%AE%B0%E5%BD%95%E6%82%A3%E8%80%85%E7%9A%84%E7%94%A8%E8%8D%AF%E8%AE%B0%E5%BD%95/">
-
- FHIR 记录患者的用药记录
-
- </a>
- </div>
-
- <span class="post-date">Dec 29, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/10/index.html b/archives/page/10/index.html
index a29280f1..08f17cce 100644
--- a/archives/page/10/index.html
+++ b/archives/page/10/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/05/20/Rescript-genType-import-%E9%97%AE%E9%A2%98/">
+
+ Rescript @genType import 问题
+
+ </a>
+ </div>
+
+ <span class="post-date">May 20, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/05/16/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%BA%94%E6%9C%88%E5%8D%81%E5%85%AD%E6%97%A5/">
二〇二四年五月十六日
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/01/23/G-Machine/">
-
- G-Machine
-
- </a>
- </div>
-
- <span class="post-date">Jan 23, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/11/index.html b/archives/page/11/index.html
index c797fb9a..026cce38 100644
--- a/archives/page/11/index.html
+++ b/archives/page/11/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/01/23/G-Machine/">
+
+ G-Machine
+
+ </a>
+ </div>
+
+ <span class="post-date">Jan 23, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/01/23/%E6%85%A2%E6%80%A7%E8%82%BA%E6%BA%90%E6%80%A7%E5%BF%83%E8%84%8F%E7%97%85/">
慢性肺源性心脏病
@@ -322,24 +339,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/11/16/Fever-of-Unknown-Origin/">
-
- Fever of Unknown Origin
-
- </a>
- </div>
-
- <span class="post-date">Nov 16, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/12/index.html b/archives/page/12/index.html
index 4792caae..dc5b5309 100644
--- a/archives/page/12/index.html
+++ b/archives/page/12/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/11/16/Fever-of-Unknown-Origin/">
+
+ Fever of Unknown Origin
+
+ </a>
+ </div>
+
+ <span class="post-date">Nov 16, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/11/06/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E5%85%AD%E6%97%A5/">
二零二三年十一月六日
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/10/05/v8%E4%B8%AD%E7%9A%84Number-toString/">
-
- v8中的Number.toString()
-
- </a>
- </div>
-
- <span class="post-date">Oct 5, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/13/index.html b/archives/page/13/index.html
index 1dd4b282..c41bece8 100644
--- a/archives/page/13/index.html
+++ b/archives/page/13/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/10/05/v8%E4%B8%AD%E7%9A%84Number-toString/">
+
+ v8中的Number.toString()
+
+ </a>
+ </div>
+
+ <span class="post-date">Oct 5, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/09/28/A-Brief-History-of-Just-In-Time/">
A Brief History of Just-In-Time
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/06/29/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B9%9D%E6%97%A5/">
-
- 二〇二三年六月二十九日
-
- </a>
- </div>
-
- <span class="post-date">Jun 29, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/14/index.html b/archives/page/14/index.html
index 54d44565..4ca7f2d9 100644
--- a/archives/page/14/index.html
+++ b/archives/page/14/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/06/29/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B9%9D%E6%97%A5/">
+
+ 二〇二三年六月二十九日
+
+ </a>
+ </div>
+
+ <span class="post-date">Jun 29, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/06/28/%E9%9A%90%E8%97%8F%E4%B8%80%E4%BA%9BOCaml-Effect%E7%9A%84%E6%9C%BA%E5%88%B6%EF%BC%8C%E8%AE%A9%E5%85%B6%E8%AF%AD%E6%B3%95%E5%9C%A8%E7%B2%BE%E7%A5%9E%E4%B8%8A%E6%9B%B4%E6%8E%A5%E8%BF%91delimcc/">
隐藏一些OCaml Effect的机制,让其语法在精神上更接近delimcc
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/">
-
- TypeScript With Rust Errors, No Try Catch, Heresy
-
- </a>
- </div>
-
- <span class="post-date">Apr 30, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/15/index.html b/archives/page/15/index.html
index 24d29fa6..4ad45855 100644
--- a/archives/page/15/index.html
+++ b/archives/page/15/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/">
+
+ TypeScript With Rust Errors, No Try Catch, Heresy
+
+ </a>
+ </div>
+
+ <span class="post-date">Apr 30, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/04/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">
二零二三年四月二十五日
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/02/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">
-
- 二零二三年二月二十五日
-
- </a>
- </div>
-
- <span class="post-date">Feb 25, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/16/index.html b/archives/page/16/index.html
index 785414ae..1a6ff455 100644
--- a/archives/page/16/index.html
+++ b/archives/page/16/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/02/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">
+
+ 二零二三年二月二十五日
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 25, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/02/24/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E5%9B%9B%E6%97%A5/">
二零二三年二月二十四日
@@ -322,24 +339,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2022/08/21/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%85%AB%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/">
-
- 二零二二年八月二十一日
-
- </a>
- </div>
-
- <span class="post-date">Aug 21, 2022</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/17/index.html b/archives/page/17/index.html
index addee22f..5694cd83 100644
--- a/archives/page/17/index.html
+++ b/archives/page/17/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2022/08/21/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%85%AB%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/">
+
+ 二零二二年八月二十一日
+
+ </a>
+ </div>
+
+ <span class="post-date">Aug 21, 2022</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2022/03/14/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E4%B8%89%E6%9C%88%E5%8D%81%E5%9B%9B%E6%97%A5/">
二零二二年三月十四日
diff --git a/archives/page/2/index.html b/archives/page/2/index.html
index e05249eb..4652a99d 100644
--- a/archives/page/2/index.html
+++ b/archives/page/2/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/12/29/FHIR-%E8%AE%B0%E5%BD%95%E6%82%A3%E8%80%85%E7%9A%84%E7%94%A8%E8%8D%AF%E8%AE%B0%E5%BD%95/">
+
+ FHIR 记录患者的用药记录
+
+ </a>
+ </div>
+
+ <span class="post-date">Dec 29, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/12/29/TSOPT-%E6%A3%80%E6%9F%A5/">
TSOPT 检查
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/11/07/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E4%B8%83%E6%97%A5/">
-
- 二〇二五年十一月七日
-
- </a>
- </div>
-
- <span class="post-date">Nov 7, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/3/index.html b/archives/page/3/index.html
index 9b22d208..09339a00 100644
--- a/archives/page/3/index.html
+++ b/archives/page/3/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/11/07/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E4%B8%83%E6%97%A5/">
+
+ 二〇二五年十一月七日
+
+ </a>
+ </div>
+
+ <span class="post-date">Nov 7, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/10/31/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E5%8D%81%E6%9C%88%E4%B8%89%E5%8D%81%E4%B8%80%E6%97%A5/">
二〇二五年十月三十一日
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/09/09/database-fk-design-in-clinical-medicine/">
-
- 在临床医疗领域中的数据库外键设计取舍
-
- </a>
- </div>
-
- <span class="post-date">Sep 9, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/4/index.html b/archives/page/4/index.html
index f3617d0a..25bc9408 100644
--- a/archives/page/4/index.html
+++ b/archives/page/4/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/09/09/database-fk-design-in-clinical-medicine/">
+
+ 在临床医疗领域中的数据库外键设计取舍
+
+ </a>
+ </div>
+
+ <span class="post-date">Sep 9, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/08/13/nestjs-enableImplicitConversion-and-transform/">
NestJS 中 enableImplicitConversion 与 @Transform 的冲突
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/05/27/vertical-slicing-practice/">
-
- Vertical slicing 在开发中的实践探索
-
- </a>
- </div>
-
- <span class="post-date">May 27, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/5/index.html b/archives/page/5/index.html
index b1826e0e..d7939fd3 100644
--- a/archives/page/5/index.html
+++ b/archives/page/5/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/05/27/vertical-slicing-practice/">
+
+ Vertical slicing 在开发中的实践探索
+
+ </a>
+ </div>
+
+ <span class="post-date">May 27, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/05/12/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E4%BA%94%E6%9C%88%E5%8D%81%E4%BA%8C%E6%97%A5/">
二〇二五年五月十二日
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/03/30/libdecor-gtk-WARNING-Failed-to-initialize-GTK/">
-
- libdecor-gtk-WARNING Failed to initialize GTK in VSCode on Wayland
-
- </a>
- </div>
-
- <span class="post-date">Mar 30, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/6/index.html b/archives/page/6/index.html
index b6713302..caf6ed8f 100644
--- a/archives/page/6/index.html
+++ b/archives/page/6/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/03/30/libdecor-gtk-WARNING-Failed-to-initialize-GTK/">
+
+ libdecor-gtk-WARNING Failed to initialize GTK in VSCode on Wayland
+
+ </a>
+ </div>
+
+ <span class="post-date">Mar 30, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/03/25/Scala-3-Capture-Checking/">
Scala 3 (Capture Checking)
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">
-
- Prisma 关系型数据库的 Self-relations
-
- </a>
- </div>
-
- <span class="post-date">Feb 18, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/7/index.html b/archives/page/7/index.html
index 83f1b02d..5e6464b5 100644
--- a/archives/page/7/index.html
+++ b/archives/page/7/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">
+
+ Prisma 关系型数据库的 Self-relations
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 18, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/02/11/%E4%BB%8E%E4%BA%8B%E4%BB%B6%E9%A3%8E%E6%9A%B4%E7%9C%8B%E9%A2%86%E5%9F%9F%E9%A9%B1%E5%8A%A8%E8%AE%BE%E8%AE%A1/">
从事件风暴看领域驱动设计
@@ -322,24 +339,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/10/18/Building-custom-fibers-library-in-FSharp/">
-
- Building custom fibers library in FSharp
-
- </a>
- </div>
-
- <span class="post-date">Oct 18, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/8/index.html b/archives/page/8/index.html
index 703fd6b3..7990718f 100644
--- a/archives/page/8/index.html
+++ b/archives/page/8/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/10/18/Building-custom-fibers-library-in-FSharp/">
+
+ Building custom fibers library in FSharp
+
+ </a>
+ </div>
+
+ <span class="post-date">Oct 18, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/">
Dealing with complex dependency injection in FSharp
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/09/01/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%B9%9D%E6%9C%88%E4%B8%80%E6%97%A5/">
-
- 二〇二四年九月一日
-
- </a>
- </div>
-
- <span class="post-date">Sep 1, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/archives/page/9/index.html b/archives/page/9/index.html
index d37dae99..6c67756c 100644
--- a/archives/page/9/index.html
+++ b/archives/page/9/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -165,6 +164,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/09/01/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%B9%9D%E6%9C%88%E4%B8%80%E6%97%A5/">
+
+ 二〇二四年九月一日
+
+ </a>
+ </div>
+
+ <span class="post-date">Sep 1, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/09/01/%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E6%B0%B4%E5%92%8C%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E5%8F%A3%E6%9C%8D%E6%B6%B2%E7%9A%84%E5%8C%BA%E5%88%AB/">
藿香正气水和藿香正气口服液的区别
@@ -320,24 +337,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/05/20/Rescript-genType-import-%E9%97%AE%E9%A2%98/">
-
- Rescript @genType import 问题
-
- </a>
- </div>
-
- <span class="post-date">May 20, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/categories/gallery/index.html b/categories/gallery/index.html
index 6a41d701..38bedc2d 100644
--- a/categories/gallery/index.html
+++ b/categories/gallery/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/categories/gallery/page/2/index.html b/categories/gallery/page/2/index.html
index 6e0cb28d..efcf134b 100644
--- a/categories/gallery/page/2/index.html
+++ b/categories/gallery/page/2/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/categories/gallery/page/3/index.html b/categories/gallery/page/3/index.html
index 104d6aaf..03227bd5 100644
--- a/categories/gallery/page/3/index.html
+++ b/categories/gallery/page/3/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/categories/gallery/page/4/index.html b/categories/gallery/page/4/index.html
index 77ec942c..5bd9eb8e 100644
--- a/categories/gallery/page/4/index.html
+++ b/categories/gallery/page/4/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/categories/gallery/page/5/index.html b/categories/gallery/page/5/index.html
index 72dde9ad..5ab127a5 100644
--- a/categories/gallery/page/5/index.html
+++ b/categories/gallery/page/5/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/categories/gallery/page/6/index.html b/categories/gallery/page/6/index.html
index 035afcc8..d4bd5611 100644
--- a/categories/gallery/page/6/index.html
+++ b/categories/gallery/page/6/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/css/font-slices.css b/css/font-slices.css
index b7a33b98..59ad245c 100644
--- a/css/font-slices.css
+++ b/css/font-slices.css
@@ -1,40 +1,7 @@
@font-face {
- font-family: 'GoogleSansCode';
+ font-family: 'TensentypeCode';
font-style: normal;
font-weight: 400;
font-display: swap;
- src: url("/fonts/latin-base.woff2") format('woff2');
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F;
-}
-@font-face {
- font-family: 'GoogleSansCode';
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: url("/fonts/latin-ext.woff2") format('woff2');
- unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-@font-face {
- font-family: 'GoogleSansCode';
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: url("/fonts/cjk-common.woff2") format('woff2');
- unicode-range: U+4E00-62FF;
-}
-@font-face {
- font-family: 'GoogleSansCode';
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: url("/fonts/cjk-ext.woff2") format('woff2');
- unicode-range: U+6300-9FFF, U+3400-4DBF;
-}
-@font-face {
- font-family: 'GoogleSansCode';
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: url("/fonts/symbols.woff2") format('woff2');
- unicode-range: U+3000-303F, U+FF00-FFEF;
+ src: url("/fonts/TensentypeCode.woff2") format('woff2');
}
diff --git a/css/style.css b/css/style.css
index 14c70acb..3ba2572b 100644
--- a/css/style.css
+++ b/css/style.css
@@ -251,44 +251,11 @@ template {
font-weight: normal;
}
@font-face {
- font-family: 'GoogleSansCode';
+ font-family: 'TensentypeCode';
font-style: normal;
font-weight: 400;
font-display: swap;
- src: url("/fonts/latin-base.woff2") format('woff2');
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F;
-}
-@font-face {
- font-family: 'GoogleSansCode';
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: url("/fonts/latin-ext.woff2") format('woff2');
- unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-@font-face {
- font-family: 'GoogleSansCode';
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: url("/fonts/cjk-common.woff2") format('woff2');
- unicode-range: U+4E00-62FF;
-}
-@font-face {
- font-family: 'GoogleSansCode';
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: url("/fonts/cjk-ext.woff2") format('woff2');
- unicode-range: U+6300-9FFF, U+3400-4DBF;
-}
-@font-face {
- font-family: 'GoogleSansCode';
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: url("/fonts/symbols.woff2") format('woff2');
- unicode-range: U+3000-303F, U+FF00-FFEF;
+ src: url("/fonts/TensentypeCode.woff2") format('woff2');
}
body {
margin: 0;
@@ -328,7 +295,7 @@ input {
border: none;
}
body {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.9375rem;
line-height: 1.375rem;
@@ -361,7 +328,7 @@ input[type="search"]::-webkit-search-results-decoration {
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-bottom: 1px solid #e4e4e7;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.8125rem;
line-height: 1.125rem;
@@ -494,7 +461,7 @@ input[type="search"]::-webkit-search-results-decoration {
.footer {
margin-top: auto;
border-top: 1px solid #e4e4e7;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.6875rem;
line-height: 1.125rem;
@@ -527,7 +494,7 @@ input[type="search"]::-webkit-search-results-decoration {
.year-title {
margin-top: 2rem;
margin-bottom: 0.75rem;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 1.625rem;
line-height: 2rem;
@@ -541,7 +508,7 @@ input[type="search"]::-webkit-search-results-decoration {
}
.post-list-item .post-title {
flex-grow: 1;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.9375rem;
line-height: 1.375rem;
@@ -551,7 +518,7 @@ input[type="search"]::-webkit-search-results-decoration {
margin-left: 1.5rem;
min-width: 8rem;
text-align: right;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.8125rem;
line-height: 1.125rem;
@@ -591,14 +558,14 @@ input[type="search"]::-webkit-search-results-decoration {
}
.post-gallery-item .post-info .post-title {
margin-bottom: 0.75rem;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 1.625rem;
line-height: 2rem;
color: #09090b;
}
.post-gallery-item .post-info .post-date {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.8125rem;
line-height: 1.125rem;
@@ -634,7 +601,7 @@ input[type="search"]::-webkit-search-results-decoration {
}
.pagination {
margin-top: 0.75rem;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.8125rem;
line-height: 1.125rem;
@@ -694,14 +661,14 @@ input[type="search"]::-webkit-search-results-decoration {
color: #71717a;
}
.profile .profile-content .profile-title {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 1.625rem;
line-height: 2rem;
color: #09090b;
}
.profile .profile-content .profile-body {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.9375rem;
line-height: 1.375rem;
@@ -766,7 +733,7 @@ input[type="search"]::-webkit-search-results-decoration {
border: 1px solid #e4e4e7;
border-radius: 0.25rem;
background: #fff;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
}
.search-input:focus {
@@ -805,7 +772,7 @@ input[type="search"]::-webkit-search-results-decoration {
text-decoration: underline;
}
.search-result-item .search-result {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.9375rem;
line-height: 1.375rem;
@@ -831,63 +798,63 @@ h6 {
margin-bottom: 0.75rem;
}
h1 {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 1.625rem;
line-height: 2rem;
color: #09090b;
}
h2 {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 1.375rem;
line-height: 1.75rem;
color: #09090b;
}
h3 {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 1.0625rem;
line-height: 1.375rem;
color: #09090b;
}
h4 {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.9375rem;
line-height: 1.25rem;
color: #09090b;
}
h5 {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.875rem;
line-height: 1.125rem;
color: #09090b;
}
h6 {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.875rem;
line-height: 1.125rem;
color: #09090b;
}
p {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.9375rem;
line-height: 1.375rem;
color: #09090b;
}
strong {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.9375rem;
line-height: 1.375rem;
color: #09090b;
}
em {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.9375rem;
font-style: italic;
@@ -895,7 +862,7 @@ em {
color: #09090b;
}
del {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.9375rem;
line-height: 1.375rem;
@@ -933,7 +900,7 @@ blockquote blockquote {
margin-bottom: 0;
}
.post-content li {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.9375rem;
line-height: 1.375rem;
@@ -969,7 +936,7 @@ blockquote blockquote {
}
dl dt {
padding: 0.5rem 0;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.9375rem;
line-height: 1.375rem;
@@ -991,14 +958,14 @@ dl dd {
}
.post-head .post-info .post-title {
margin-bottom: 0.75rem;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 1.625rem;
line-height: 2rem;
color: #09090b;
}
.post-head .post-info .post-date {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.8125rem;
line-height: 1.125rem;
@@ -1024,7 +991,7 @@ dl dd {
margin-top: 0.75rem;
display: flex;
flex-wrap: wrap;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.8125rem;
line-height: 1.125rem;
@@ -1061,18 +1028,18 @@ dl dd {
color: #09090b !important;
}
code {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 0.8125rem;
line-height: 0.9375rem;
color: #2563eb;
font-weight: 400;
}
.code pre span {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 0.8125rem;
line-height: 0.9375rem;
color: #52525b;
@@ -1432,7 +1399,7 @@ hr {
color: #71717a;
}
.post-tag {
- font-family: 'GoogleSansCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+ font-family: 'TensentypeCode', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 400;
font-size: 0.6875rem;
line-height: 0.875rem;
diff --git a/fonts/CarroisSong.ttf b/fonts/CarroisSong.ttf
deleted file mode 100644
index 9105c1a8..00000000
--- a/fonts/CarroisSong.ttf
+++ /dev/null
Binary files differ
diff --git a/fonts/TensentypeCode.woff2 b/fonts/TensentypeCode.woff2
new file mode 100644
index 00000000..0659ed74
--- /dev/null
+++ b/fonts/TensentypeCode.woff2
Binary files differ
diff --git a/fonts/cjk-common.woff2 b/fonts/cjk-common.woff2
deleted file mode 100644
index 3140f04a..00000000
--- a/fonts/cjk-common.woff2
+++ /dev/null
Binary files differ
diff --git a/fonts/cjk-ext.woff2 b/fonts/cjk-ext.woff2
deleted file mode 100644
index 6e1b840f..00000000
--- a/fonts/cjk-ext.woff2
+++ /dev/null
Binary files differ
diff --git a/fonts/latin-base.woff2 b/fonts/latin-base.woff2
deleted file mode 100644
index 6e71c681..00000000
--- a/fonts/latin-base.woff2
+++ /dev/null
Binary files differ
diff --git a/fonts/latin-ext.woff2 b/fonts/latin-ext.woff2
deleted file mode 100644
index 78abb265..00000000
--- a/fonts/latin-ext.woff2
+++ /dev/null
Binary files differ
diff --git a/fonts/src/GoogleSansCode-Regular.ttf b/fonts/src/GoogleSansCode-Regular.ttf
deleted file mode 100644
index db4d27d3..00000000
--- a/fonts/src/GoogleSansCode-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/fonts/symbols.woff2 b/fonts/symbols.woff2
deleted file mode 100644
index 59bc5d8d..00000000
--- a/fonts/symbols.woff2
+++ /dev/null
Binary files differ
diff --git a/index.html b/index.html
index 50210d9d..7568f873 100644
--- a/index.html
+++ b/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/10/index.html b/page/10/index.html
index aa7f9e69..e6180492 100644
--- a/page/10/index.html
+++ b/page/10/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/11/index.html b/page/11/index.html
index aa7f9e69..e6180492 100644
--- a/page/11/index.html
+++ b/page/11/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/12/index.html b/page/12/index.html
index ed8ae801..3a792202 100644
--- a/page/12/index.html
+++ b/page/12/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/13/index.html b/page/13/index.html
index aa7f9e69..e6180492 100644
--- a/page/13/index.html
+++ b/page/13/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/14/index.html b/page/14/index.html
index aa7f9e69..e6180492 100644
--- a/page/14/index.html
+++ b/page/14/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/15/index.html b/page/15/index.html
index aa7f9e69..e6180492 100644
--- a/page/15/index.html
+++ b/page/15/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/16/index.html b/page/16/index.html
index aa7f9e69..e6180492 100644
--- a/page/16/index.html
+++ b/page/16/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/17/index.html b/page/17/index.html
index aa7f9e69..e6180492 100644
--- a/page/17/index.html
+++ b/page/17/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/2/index.html b/page/2/index.html
index ed8ae801..3a792202 100644
--- a/page/2/index.html
+++ b/page/2/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/3/index.html b/page/3/index.html
index aa7f9e69..e6180492 100644
--- a/page/3/index.html
+++ b/page/3/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/4/index.html b/page/4/index.html
index aa7f9e69..e6180492 100644
--- a/page/4/index.html
+++ b/page/4/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/5/index.html b/page/5/index.html
index aa7f9e69..e6180492 100644
--- a/page/5/index.html
+++ b/page/5/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/6/index.html b/page/6/index.html
index ed8ae801..3a792202 100644
--- a/page/6/index.html
+++ b/page/6/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/7/index.html b/page/7/index.html
index aa7f9e69..e6180492 100644
--- a/page/7/index.html
+++ b/page/7/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/8/index.html b/page/8/index.html
index aa7f9e69..e6180492 100644
--- a/page/8/index.html
+++ b/page/8/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/page/9/index.html b/page/9/index.html
index aa7f9e69..e6180492 100644
--- a/page/9/index.html
+++ b/page/9/index.html
@@ -37,9 +37,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/search.xml b/search.xml
index b7441f2b..661b696b 100644
--- a/search.xml
+++ b/search.xml
@@ -3431,20 +3431,6 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</tags>
</entry>
<entry>
- <title>使用 [@poll error] 实现线程安全的数据结构</title>
- <url>/2023/08/15/poll-error-attribute-in-OCaml/</url>
- <content><![CDATA[<p>OCaml的标准库提供了许多mutable的数据结构,比如Hashtbl, Queue, Stack之类的,但是这些数据结构都不是线程安全的。在 OCaml 4 和 OCaml 5 中,单个Domain中一次只能运行一个线程。换句话说,单个Domain中的线程仍然不会并行运行,除非在不同所的Domain中。</p>
-<p>而在单个Domain中 OCaml 的 runtime 是通过在safe point期间半抢占式的切换线程。也就是说,线程切换只会发生在safe point期间。例如内存分配就是是safe point。这意味着在没有safe point的代码块内,可以在Domain内原子性地进行多次读写或访问操作,因为线程没被切换。</p>
-<p>OCaml 编译器提供了一个名为 <a href="https://github.com/ocaml/ocaml/pull/10462"><code>[@poll error]</code></a> 的annotation,可以在函数中使用它来确保该函数不包含safe point。</p>
-<p>所以通过使用 <code>[@poll error]</code> 就可以创建在Domain内原子性执行的函数,也就是说,基于此特性可以实现单个Domain内线程安全的数据结构,例如 thread-table 便是使用这个特性实现的 Hash Table。可以看看它的 add 函数的实现:</p>
-<figure class="highlight ocaml"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span>[@poll error] add_atomically t buckets n i before after =</span><br><span class="line"> t.rehash = <span class="number">0</span> &amp;&amp; buckets == t.buckets</span><br><span class="line"> &amp;&amp; before == <span class="type">Array</span>.unsafe_get buckets i</span><br><span class="line"> &amp;&amp; <span class="keyword">begin</span></span><br><span class="line"> <span class="type">Array</span>.unsafe_set buckets i after;</span><br><span class="line"> <span class="keyword">let</span> length = t.length + <span class="number">1</span> <span class="keyword">in</span></span><br><span class="line"> t.length &lt;- length;</span><br><span class="line"> <span class="keyword">if</span> n &lt; length &amp;&amp; n &lt; max_buckets_div_2 <span class="keyword">then</span> t.rehash &lt;- n * <span class="number">2</span>;</span><br><span class="line"> <span class="literal">true</span></span><br><span class="line"> <span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="keyword">rec</span> add t k&#x27; v&#x27; =</span><br><span class="line"> <span class="keyword">let</span> h = <span class="type">Mix</span>.<span class="built_in">int</span> k&#x27; <span class="keyword">in</span></span><br><span class="line"> maybe_rehash t;</span><br><span class="line"> <span class="keyword">let</span> buckets = t.buckets <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> n = <span class="type">Array</span>.length buckets <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> i = h <span class="keyword">land</span> (n - <span class="number">1</span>) <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> before = <span class="type">Array</span>.unsafe_get buckets i <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> after = <span class="type">Cons</span> (k&#x27;, v&#x27;, before) <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">if</span> not (add_atomically t buckets n i before after) <span class="keyword">then</span> add t k&#x27; v&#x27;</span><br></pre></td></tr></table></figure>
-<p>相比使用 Stdlib.Mutex,这种无锁实现会有更好的性能(特别是对于只读操作),并且还允许例如信号处理之类的上下文操作。</p>
-]]></content>
- <tags>
- <tag>Technique</tag>
- </tags>
- </entry>
- <entry>
<title>除权除息日,股价调整与分红</title>
<url>/2025/07/11/rep-date/</url>
<content><![CDATA[<p>例如:</p>
@@ -3492,6 +3478,20 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</tags>
</entry>
<entry>
+ <title>使用 [@poll error] 实现线程安全的数据结构</title>
+ <url>/2023/08/15/poll-error-attribute-in-OCaml/</url>
+ <content><![CDATA[<p>OCaml的标准库提供了许多mutable的数据结构,比如Hashtbl, Queue, Stack之类的,但是这些数据结构都不是线程安全的。在 OCaml 4 和 OCaml 5 中,单个Domain中一次只能运行一个线程。换句话说,单个Domain中的线程仍然不会并行运行,除非在不同所的Domain中。</p>
+<p>而在单个Domain中 OCaml 的 runtime 是通过在safe point期间半抢占式的切换线程。也就是说,线程切换只会发生在safe point期间。例如内存分配就是是safe point。这意味着在没有safe point的代码块内,可以在Domain内原子性地进行多次读写或访问操作,因为线程没被切换。</p>
+<p>OCaml 编译器提供了一个名为 <a href="https://github.com/ocaml/ocaml/pull/10462"><code>[@poll error]</code></a> 的annotation,可以在函数中使用它来确保该函数不包含safe point。</p>
+<p>所以通过使用 <code>[@poll error]</code> 就可以创建在Domain内原子性执行的函数,也就是说,基于此特性可以实现单个Domain内线程安全的数据结构,例如 thread-table 便是使用这个特性实现的 Hash Table。可以看看它的 add 函数的实现:</p>
+<figure class="highlight ocaml"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span>[@poll error] add_atomically t buckets n i before after =</span><br><span class="line"> t.rehash = <span class="number">0</span> &amp;&amp; buckets == t.buckets</span><br><span class="line"> &amp;&amp; before == <span class="type">Array</span>.unsafe_get buckets i</span><br><span class="line"> &amp;&amp; <span class="keyword">begin</span></span><br><span class="line"> <span class="type">Array</span>.unsafe_set buckets i after;</span><br><span class="line"> <span class="keyword">let</span> length = t.length + <span class="number">1</span> <span class="keyword">in</span></span><br><span class="line"> t.length &lt;- length;</span><br><span class="line"> <span class="keyword">if</span> n &lt; length &amp;&amp; n &lt; max_buckets_div_2 <span class="keyword">then</span> t.rehash &lt;- n * <span class="number">2</span>;</span><br><span class="line"> <span class="literal">true</span></span><br><span class="line"> <span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="keyword">rec</span> add t k&#x27; v&#x27; =</span><br><span class="line"> <span class="keyword">let</span> h = <span class="type">Mix</span>.<span class="built_in">int</span> k&#x27; <span class="keyword">in</span></span><br><span class="line"> maybe_rehash t;</span><br><span class="line"> <span class="keyword">let</span> buckets = t.buckets <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> n = <span class="type">Array</span>.length buckets <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> i = h <span class="keyword">land</span> (n - <span class="number">1</span>) <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> before = <span class="type">Array</span>.unsafe_get buckets i <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> after = <span class="type">Cons</span> (k&#x27;, v&#x27;, before) <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">if</span> not (add_atomically t buckets n i before after) <span class="keyword">then</span> add t k&#x27; v&#x27;</span><br></pre></td></tr></table></figure>
+<p>相比使用 Stdlib.Mutex,这种无锁实现会有更好的性能(特别是对于只读操作),并且还允许例如信号处理之类的上下文操作。</p>
+]]></content>
+ <tags>
+ <tag>Technique</tag>
+ </tags>
+ </entry>
+ <entry>
<title>shadow-cljs 怎么设置代理</title>
<url>/2024/04/03/shadow-cljs-proxy/</url>
<content><![CDATA[<p>The library pomegranate used for retrieving maven dependencies does not read <code>.m2/settings.xml</code>. You can however set the :proxy config either in <code>shadow-cljs.edn</code> directly or <code>~/.shadow-cljs/config.edn</code>.</p>
@@ -5398,6 +5398,69 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</tags>
</entry>
<entry>
+ <title>如何在 DDD + CQRS 中处理跨聚合的事务</title>
+ <url>/2026/05/28/%E5%A6%82%E4%BD%95%E5%9C%A8-DDD-CQRS-%E4%B8%AD%E5%A4%84%E7%90%86%E8%B7%A8%E8%81%9A%E5%90%88%E7%9A%84%E4%BA%8B%E5%8A%A1/</url>
+ <content><![CDATA[<p>假设系统里有一个模块,用来管理化合物从 hit、lead 到 candidate 的推进。</p>
+<p>药化团队合成了一批化合物。生物团队上传活性、选择性、ADME、早期毒理等实验结果。项目负责人看完某个化合物的数据包后,要做一个决策:</p>
+<ul>
+<li>推进为候选化合物。</li>
+<li>退回继续优化。</li>
+<li>暂停该方向。</li>
+</ul>
+<p>提交这个决策时,系统通常要做这些事:</p>
+<ul>
+<li>写入一条候选化合物推进决策。</li>
+<li>改变化合物当前研发阶段。</li>
+<li>如果推进成功,创建候选药物档案。</li>
+<li>关闭当前评审责任。</li>
+<li>锁定本次使用的实验数据包版本。</li>
+<li>写入审计事件,说明阶段变化依据哪一次数据评审。</li>
+</ul>
+<p>这些写入必须一起成功。不能出现决策已经提交,但化合物阶段没变, 或是候选药物档案已创建,但数据包没有锁定等问题。</p>
+<p>最直接的实现,是在 Command Handler 里注入 Prisma,然后开事务:</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">SubmitCompoundPromotionDecisionHandler</span> &#123;</span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"><span class="keyword">private</span> <span class="keyword">readonly</span> <span class="attr">prisma</span>: <span class="title class_">PrismaClient</span></span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">async</span> <span class="title function_">execute</span>(<span class="params"><span class="attr">command</span>: <span class="title class_">SubmitCompoundPromotionDecision</span></span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">prisma</span>.$transaction(<span class="title function_">async</span> (tx) =&gt; &#123;</span><br><span class="line"> <span class="keyword">const</span> decision = <span class="keyword">await</span> tx.<span class="property">compoundDecision</span>.<span class="title function_">create</span>(&#123;</span><br><span class="line"> <span class="attr">data</span>: &#123;</span><br><span class="line"> <span class="attr">compoundId</span>: command.<span class="property">compoundId</span>,</span><br><span class="line"> <span class="attr">result</span>: command.<span class="property">result</span>,</span><br><span class="line"> <span class="attr">reason</span>: command.<span class="property">reason</span>,</span><br><span class="line"> <span class="attr">decidedBy</span>: command.<span class="property">actorUserId</span>,</span><br><span class="line"> &#125;,</span><br><span class="line"> &#125;);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">await</span> tx.<span class="property">compound</span>.<span class="title function_">update</span>(&#123;</span><br><span class="line"> <span class="attr">where</span>: &#123; <span class="attr">id</span>: command.<span class="property">compoundId</span> &#125;,</span><br><span class="line"> <span class="attr">data</span>: &#123; <span class="attr">stage</span>: command.<span class="property">result</span> === <span class="string">&quot;promote&quot;</span> ? <span class="string">&quot;candidate&quot;</span> : <span class="string">&quot;lead&quot;</span> &#125;,</span><br><span class="line"> &#125;);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (command.<span class="property">result</span> === <span class="string">&quot;promote&quot;</span>) &#123;</span><br><span class="line"> <span class="keyword">await</span> tx.<span class="property">developmentCandidate</span>.<span class="title function_">create</span>(&#123;</span><br><span class="line"> <span class="attr">data</span>: &#123; <span class="attr">compoundId</span>: command.<span class="property">compoundId</span> &#125;,</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">await</span> tx.<span class="property">reviewAssignment</span>.<span class="title function_">update</span>(...);</span><br><span class="line"> <span class="keyword">await</span> tx.<span class="property">auditEvent</span>.<span class="title function_">create</span>(...);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> decision;</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>但它把几个层次混在了一起。</p>
+<p>Command Handler 本来应该编排业务流程,但现在它编排了数据库表的更新顺序。</p>
+<p>化合物阶段变化本来应该由 <code>Compound</code> 聚合判断。比如只有 <code>lead_optimization</code> 阶段的化合物才能推进到 <code>candidate</code>,已经暂停的化合物不能直接推进。现在这条规则可能散落在 <code>tx.compound.update</code> 前后的 if 判断里。</p>
+<p>事务边界本来属于用例。现在它由具体 ORM 的 <code>$transaction</code> 暴露在 Command Handler 里。换 ORM、拆 outbox、改审计事件写法,Command Handler 都要动。</p>
+<hr>
+<p>如果把这段逻辑挪到 repository 里:</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line">compoundRepository.<span class="title function_">submitPromotionDecision</span>(command);</span><br></pre></td></tr></table></figure>
+<p>这看起来把 Prisma 从 Command Handler 里拿掉了。但如果 <code>compoundRepository</code> 内部仍然创建决策、更新化合物、创建候选药物档案、关闭责任、写审计事件,那只是把混乱换了一个地方,因为 Repository 的核心职责应该只是持久化聚合,例如:</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line">compoundRepository.<span class="title function_">findById</span>(id);</span><br><span class="line">compoundRepository.<span class="title function_">save</span>(compound);</span><br><span class="line">compoundDecisionRepository.<span class="title function_">save</span>(decision);</span><br><span class="line">developmentCandidateRepository.<span class="title function_">save</span>(candidate);</span><br></pre></td></tr></table></figure>
+<p>如果一个 <code>CompoundRepository</code> 开始保存 <code>CompoundDecision</code>、<code>DevelopmentCandidate</code>、<code>ReviewAssignment</code>、<code>AuditEvent</code>,它就不再只是 Compound 的 repository。它变成了一个跨模块事务服务,只是名字还叫 repository。</p>
+<hr>
+<p>所以这里我的解决方案之一是在 application 层定义一个 Unit of Work port,它表达的是一个具体业务动作:提交候选化合物推进决策。</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">interface</span> <span class="title class_">SubmitCompoundPromotionDecisionUnitOfWork</span> &#123;</span><br><span class="line"> <span class="title function_">submit</span>(<span class="attr">input</span>: &#123;</span><br><span class="line"> <span class="attr">compoundId</span>: <span class="built_in">string</span>;</span><br><span class="line"> <span class="attr">dataPackageId</span>: <span class="built_in">string</span>;</span><br><span class="line"> <span class="attr">result</span>: <span class="string">&quot;promote&quot;</span> | <span class="string">&quot;optimize&quot;</span> | <span class="string">&quot;pause&quot;</span>;</span><br><span class="line"> <span class="attr">reason</span>?: <span class="built_in">string</span>;</span><br><span class="line"> <span class="attr">actorUserId</span>: <span class="built_in">string</span>;</span><br><span class="line"> &#125;): <span class="title class_">Promise</span>&lt;<span class="title class_">CompoundPromotionDecisionDto</span>&gt;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>Command Handler 依赖这个端口,而不是依赖 Prisma。</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">SubmitCompoundPromotionDecisionHandler</span> &#123;</span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"></span></span><br><span class="line"><span class="params"> <span class="keyword">private</span> <span class="keyword">readonly</span> <span class="attr">unitOfWork</span>: <span class="title class_">SubmitCompoundPromotionDecisionUnitOfWork</span>,</span></span><br><span class="line"><span class="params"> </span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">async</span> <span class="title function_">execute</span>(<span class="params"><span class="attr">command</span>: <span class="title class_">SubmitCompoundPromotionDecision</span></span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">unitOfWork</span>.<span class="title function_">submit</span>(&#123;</span><br><span class="line"> <span class="attr">compoundId</span>: command.<span class="property">compoundId</span>,</span><br><span class="line"> <span class="attr">dataPackageId</span>: command.<span class="property">dataPackageId</span>,</span><br><span class="line"> <span class="attr">result</span>: command.<span class="property">result</span>,</span><br><span class="line"> <span class="attr">reason</span>: command.<span class="property">reason</span>,</span><br><span class="line"> <span class="attr">actorUserId</span>: command.<span class="property">actorUserId</span>,</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>这段代码没有事务细节。它只转交命令意图。</p>
+<p>具体事务放在 infrastructure:</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">PrismaSubmitCompoundPromotionDecisionUnitOfWork</span></span><br><span class="line"> <span class="keyword">implements</span> <span class="title class_">SubmitCompoundPromotionDecisionUnitOfWork</span></span><br><span class="line">&#123;</span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"><span class="keyword">private</span> <span class="keyword">readonly</span> <span class="attr">prisma</span>: <span class="title class_">PrismaClient</span></span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">async</span> <span class="title function_">submit</span>(<span class="params"><span class="attr">input</span>: <span class="title class_">SubmitCompoundPromotionDecisionInput</span></span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">prisma</span>.$transaction(<span class="title function_">async</span> (tx) =&gt; &#123;</span><br><span class="line"> <span class="comment">// 在这里组合 tx-bound store / repository</span></span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>这样就把“业务事务边界”和“命令入口”分开,Command Handler 不需要知道用 Prisma 还是别的 ORM。它也不需要知道事务里要调用哪些表。它只知道这个命令由一个原子用例完成。</p>
+<p>但聚合仍然要负责状态规则,Unit of Work 不能变成新的数据库脚本,在事务内部,仍然应该先读取聚合,让聚合执行状态变化,再保存聚合。</p>
+<p>例如 <code>Compound</code> 聚合可以这样表达规则:</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Compound</span> &#123;</span><br><span class="line"> <span class="title function_">promoteToCandidate</span>(<span class="params"><span class="attr">input</span>: &#123;</span></span><br><span class="line"><span class="params"> dataPackageId: <span class="built_in">string</span>;</span></span><br><span class="line"><span class="params"> actorUserId: <span class="built_in">string</span>;</span></span><br><span class="line"><span class="params"> &#125;</span>) &#123;</span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">stage</span> !== <span class="string">&quot;lead_optimization&quot;</span>) &#123;</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">&quot;只有先导优化阶段的化合物才能推进为候选化合物&quot;</span>);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">lockedDataPackageId</span> !== <span class="literal">null</span>) &#123;</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">&quot;已锁定数据包的化合物不能重复推进&quot;</span>);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">stage</span> = <span class="string">&quot;candidate&quot;</span>;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">lockedDataPackageId</span> = input.<span class="property">dataPackageId</span>;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">updatedByUserId</span> = input.<span class="property">actorUserId</span>;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">returnToOptimization</span>(<span class="params"><span class="attr">input</span>: &#123; reason: <span class="built_in">string</span>; actorUserId: <span class="built_in">string</span> &#125;</span>) &#123;</span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">stage</span> !== <span class="string">&quot;lead_optimization&quot;</span>) &#123;</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">&quot;只有评审中的化合物才能退回优化&quot;</span>);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">stage</span> = <span class="string">&quot;lead_optimization&quot;</span>;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">optimizationReason</span> = input.<span class="property">reason</span>;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">updatedByUserId</span> = input.<span class="property">actorUserId</span>;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>Unit of Work 在事务里调用这些方法:</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line"><span class="keyword">await</span> prisma.$transaction(<span class="title function_">async</span> (tx) =&gt; &#123;</span><br><span class="line"> <span class="keyword">const</span> compoundStore = <span class="keyword">new</span> <span class="title class_">PrismaCompoundStore</span>(tx);</span><br><span class="line"> <span class="keyword">const</span> compound = <span class="keyword">await</span> compoundStore.<span class="title function_">findById</span>(input.<span class="property">compoundId</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (input.<span class="property">result</span> === <span class="string">&quot;promote&quot;</span>) &#123;</span><br><span class="line"> compound.<span class="title function_">promoteToCandidate</span>(&#123;</span><br><span class="line"> <span class="attr">dataPackageId</span>: input.<span class="property">dataPackageId</span>,</span><br><span class="line"> <span class="attr">actorUserId</span>: input.<span class="property">actorUserId</span>,</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (input.<span class="property">result</span> === <span class="string">&quot;optimize&quot;</span>) &#123;</span><br><span class="line"> compound.<span class="title function_">returnToOptimization</span>(&#123;</span><br><span class="line"> <span class="attr">reason</span>: input.<span class="property">reason</span> ?? <span class="string">&quot;需要补充结构优化&quot;</span>,</span><br><span class="line"> <span class="attr">actorUserId</span>: input.<span class="property">actorUserId</span>,</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">await</span> compoundStore.<span class="title function_">save</span>(compound);</span><br><span class="line"> <span class="keyword">await</span> decisionStore.<span class="title function_">save</span>(decision);</span><br><span class="line"> <span class="keyword">await</span> candidateStore.<span class="title function_">createIfPromoted</span>(...);</span><br><span class="line"> <span class="keyword">await</span> assignmentStore.<span class="title function_">closeCurrent</span>(...);</span><br><span class="line"> <span class="keyword">await</span> auditStore.<span class="title function_">append</span>(...);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
+<p>而为了让事务里的代码复用聚合持久化逻辑,我们需要一种 tx-bound repository 或 store。</p>
+<p>最粗暴的写法是在领域 repository interface 里加一个可选事务参数:</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line"><span class="keyword">interface</span> <span class="title class_">CompoundRepository</span> &#123;</span><br><span class="line"> <span class="title function_">findById</span>(<span class="attr">id</span>: <span class="built_in">string</span>, <span class="attr">tx</span>?: <span class="title class_">Prisma</span>.<span class="property">TransactionClient</span>): <span class="title class_">Promise</span>&lt;<span class="title class_">Compound</span> | <span class="literal">null</span>&gt;;</span><br><span class="line"> <span class="title function_">save</span>(<span class="attr">compound</span>: <span class="title class_">Compound</span>, <span class="attr">tx</span>?: <span class="title class_">Prisma</span>.<span class="property">TransactionClient</span>): <span class="title class_">Promise</span>&lt;<span class="built_in">void</span>&gt;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>但它又把 Prisma 带进了领域层。就算把 <code>Prisma.TransactionClient</code> 包成 <code>TransactionClient</code> 类型别名,领域接口仍然在为基础设施妥协。</p>
+<p>我更倾向于把 tx-bound 能力留在 infrastructure,领域层只定义干净的 repository port:</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">interface</span> <span class="title class_">CompoundRepository</span> &#123;</span><br><span class="line"> <span class="title function_">findById</span>(<span class="attr">id</span>: <span class="built_in">string</span>): <span class="title class_">Promise</span>&lt;<span class="title class_">Compound</span> | <span class="literal">null</span>&gt;;</span><br><span class="line"> <span class="title function_">save</span>(<span class="attr">compound</span>: <span class="title class_">Compound</span>): <span class="title class_">Promise</span>&lt;<span class="built_in">void</span>&gt;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>infrastructure 层拆一个 store,接收最小持久化客户端:</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line"><span class="keyword">type</span> <span class="title class_">CompoundStoreClient</span> = &#123;</span><br><span class="line"> <span class="attr">compound</span>: &#123;</span><br><span class="line"> <span class="title function_">findUnique</span>(<span class="attr">args</span>: <span class="built_in">unknown</span>): <span class="title class_">Promise</span>&lt;<span class="built_in">unknown</span>&gt;;</span><br><span class="line"> <span class="title function_">update</span>(<span class="attr">args</span>: <span class="built_in">unknown</span>): <span class="title class_">Promise</span>&lt;<span class="built_in">unknown</span>&gt;;</span><br><span class="line"> &#125;;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">PrismaCompoundStore</span> <span class="keyword">implements</span> <span class="title class_">CompoundRepository</span> &#123;</span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"><span class="keyword">private</span> <span class="keyword">readonly</span> <span class="attr">client</span>: <span class="title class_">CompoundStoreClient</span></span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">async</span> <span class="title function_">findById</span>(<span class="params"><span class="attr">id</span>: <span class="built_in">string</span></span>) &#123;</span><br><span class="line"> <span class="keyword">const</span> record = <span class="keyword">await</span> <span class="variable language_">this</span>.<span class="property">client</span>.<span class="property">compound</span>.<span class="title function_">findUnique</span>(...);</span><br><span class="line"> <span class="keyword">return</span> <span class="title class_">Compound</span>.<span class="title function_">restore</span>(record);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">async</span> <span class="title function_">save</span>(<span class="params"><span class="attr">compound</span>: <span class="title class_">Compound</span></span>) &#123;</span><br><span class="line"> <span class="keyword">const</span> snapshot = compound.<span class="title function_">toSnapshot</span>();</span><br><span class="line"> <span class="keyword">await</span> <span class="variable language_">this</span>.<span class="property">client</span>.<span class="property">compound</span>.<span class="title function_">update</span>(...);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>普通 repository 可以继承这个 store,传完整 Prisma client:</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">PrismaCompoundRepository</span> <span class="keyword">extends</span> <span class="title class_ inherited__">PrismaCompoundStore</span> &#123;</span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"><span class="attr">prisma</span>: <span class="title class_">PrismaClient</span></span>) &#123;</span><br><span class="line"> <span class="variable language_">super</span>(prisma);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>Unit of Work 在事务里传 tx:</p>
+<figure class="highlight ts"><table><tr><td class="code"><pre><span class="line"><span class="keyword">await</span> prisma.$transaction(<span class="title function_">async</span> (tx) =&gt; &#123;</span><br><span class="line"> <span class="keyword">const</span> compoundStore = <span class="keyword">new</span> <span class="title class_">PrismaCompoundStore</span>(tx);</span><br><span class="line"> <span class="keyword">const</span> compound = <span class="keyword">await</span> compoundStore.<span class="title function_">findById</span>(input.<span class="property">compoundId</span>);</span><br><span class="line"> <span class="comment">// ...</span></span><br><span class="line"> <span class="keyword">await</span> compoundStore.<span class="title function_">save</span>(compound);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
+]]></content>
+ <tags>
+ <tag>Technique</tag>
+ </tags>
+ </entry>
+ <entry>
<title>如何管理用户界面中的危险操作</title>
<url>/2024/11/26/%E5%A6%82%E4%BD%95%E7%AE%A1%E7%90%86%E7%94%A8%E6%88%B7%E7%95%8C%E9%9D%A2%E4%B8%AD%E7%9A%84%E5%8D%B1%E9%99%A9%E6%93%8D%E4%BD%9C/</url>
<content><![CDATA[<blockquote>
diff --git a/search/index.html b/search/index.html
index f5110bce..43bca430 100644
--- a/search/index.html
+++ b/search/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tag/index.html b/tag/index.html
index 5530b072..9b92ecbe 100644
--- a/tag/index.html
+++ b/tag/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tags/Archive/index.html b/tags/Archive/index.html
index 9d12eccd..6c222e42 100644
--- a/tags/Archive/index.html
+++ b/tags/Archive/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tags/Design/index.html b/tags/Design/index.html
index 299ad100..0769872b 100644
--- a/tags/Design/index.html
+++ b/tags/Design/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tags/Life/index.html b/tags/Life/index.html
index c59b4278..db24f7f9 100644
--- a/tags/Life/index.html
+++ b/tags/Life/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tags/Life/page/2/index.html b/tags/Life/page/2/index.html
index f4937fbb..3ed0be73 100644
--- a/tags/Life/page/2/index.html
+++ b/tags/Life/page/2/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tags/Life/page/3/index.html b/tags/Life/page/3/index.html
index 7cf32e0f..2809cfa1 100644
--- a/tags/Life/page/3/index.html
+++ b/tags/Life/page/3/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tags/Medicine/index.html b/tags/Medicine/index.html
index 931af522..e820cbb5 100644
--- a/tags/Medicine/index.html
+++ b/tags/Medicine/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tags/Medicine/page/2/index.html b/tags/Medicine/page/2/index.html
index 6219541d..9b8c992f 100644
--- a/tags/Medicine/page/2/index.html
+++ b/tags/Medicine/page/2/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tags/Medicine/page/3/index.html b/tags/Medicine/page/3/index.html
index 89d00e92..7c1d5ff6 100644
--- a/tags/Medicine/page/3/index.html
+++ b/tags/Medicine/page/3/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tags/Medicine/page/4/index.html b/tags/Medicine/page/4/index.html
index b92f81ad..6ef69f30 100644
--- a/tags/Medicine/page/4/index.html
+++ b/tags/Medicine/page/4/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tags/Music/index.html b/tags/Music/index.html
index 4ebe27f9..7cd222d3 100644
--- a/tags/Music/index.html
+++ b/tags/Music/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
diff --git a/tags/Technique/index.html b/tags/Technique/index.html
index f39ecfae..87dfc0a7 100644
--- a/tags/Technique/index.html
+++ b/tags/Technique/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -172,6 +171,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2026/05/28/%E5%A6%82%E4%BD%95%E5%9C%A8-DDD-CQRS-%E4%B8%AD%E5%A4%84%E7%90%86%E8%B7%A8%E8%81%9A%E5%90%88%E7%9A%84%E4%BA%8B%E5%8A%A1/">
+
+ 如何在 DDD + CQRS 中处理跨聚合的事务
+
+ </a>
+ </div>
+
+ <span class="post-date">May 28, 2026</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2026/03/22/%E5%9C%A8-OCaml-%E4%B8%AD%E9%80%9A%E8%BF%87-CTypes-%E7%BB%91%E5%AE%9A-libseccomp/">
在 OCaml 中通过 CTypes 绑定 libseccomp
@@ -329,30 +346,12 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/07/29/nestjs-nested-object-dto/">
-
- NestJS 嵌套查询参数解析错误分析与解决方案
-
- </a>
- </div>
-
- <span class="post-date">Jul 29, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <span class="page-number current">1</span><a class="page-number" href="/tags/Technique/page/2/">2</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/6/">6</a>
+ <span class="page-number current">1</span><a class="page-number" href="/tags/Technique/page/2/">2</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/7/">7</a>
</nav>
</div>
diff --git a/tags/Technique/page/2/index.html b/tags/Technique/page/2/index.html
index 8ad67e54..700c9cd8 100644
--- a/tags/Technique/page/2/index.html
+++ b/tags/Technique/page/2/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -172,6 +171,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/07/29/nestjs-nested-object-dto/">
+
+ NestJS 嵌套查询参数解析错误分析与解决方案
+
+ </a>
+ </div>
+
+ <span class="post-date">Jul 29, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/05/27/vertical-slicing-practice/">
Vertical slicing 在开发中的实践探索
@@ -327,30 +344,12 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2025/03/25/Scala-3-Capture-Checking/">
-
- Scala 3 (Capture Checking)
-
- </a>
- </div>
-
- <span class="post-date">Mar 25, 2025</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/tags/Technique/">1</a><span class="page-number current">2</span><a class="page-number" href="/tags/Technique/page/3/">3</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/6/">6</a>
+ <a class="page-number" href="/tags/Technique/">1</a><span class="page-number current">2</span><a class="page-number" href="/tags/Technique/page/3/">3</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/7/">7</a>
</nav>
</div>
diff --git a/tags/Technique/page/3/index.html b/tags/Technique/page/3/index.html
index d2f2d7fc..275f5ca1 100644
--- a/tags/Technique/page/3/index.html
+++ b/tags/Technique/page/3/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -172,6 +171,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2025/03/25/Scala-3-Capture-Checking/">
+
+ Scala 3 (Capture Checking)
+
+ </a>
+ </div>
+
+ <span class="post-date">Mar 25, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2025/03/20/TDD-%E5%92%8C-DDD-%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B0%8F%E6%83%B3%E6%B3%95/">
TDD 和 DDD 的一些小想法
@@ -329,30 +346,12 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/">
-
- 10 Tips for Productive FSharp Scripting
-
- </a>
- </div>
-
- <span class="post-date">Oct 18, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/tags/Technique/">1</a><a class="page-number" href="/tags/Technique/page/2/">2</a><span class="page-number current">3</span><a class="page-number" href="/tags/Technique/page/4/">4</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/6/">6</a>
+ <a class="page-number" href="/tags/Technique/">1</a><a class="page-number" href="/tags/Technique/page/2/">2</a><span class="page-number current">3</span><a class="page-number" href="/tags/Technique/page/4/">4</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/7/">7</a>
</nav>
</div>
diff --git a/tags/Technique/page/4/index.html b/tags/Technique/page/4/index.html
index e544446b..9fa1fe18 100644
--- a/tags/Technique/page/4/index.html
+++ b/tags/Technique/page/4/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -172,6 +171,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/">
+
+ 10 Tips for Productive FSharp Scripting
+
+ </a>
+ </div>
+
+ <span class="post-date">Oct 18, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/10/18/Building-custom-fibers-library-in-FSharp/">
Building custom fibers library in FSharp
@@ -327,30 +344,12 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2024/06/06/NET-AOT-%E4%B8%8B%E7%9A%84-F-%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90%E5%BA%93%E9%80%89%E6%8B%A9/">
-
- .NET AOT 下的 F# 命令行参数解析库选择
-
- </a>
- </div>
-
- <span class="post-date">Jun 6, 2024</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/tags/Technique/">1</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/3/">3</a><span class="page-number current">4</span><a class="page-number" href="/tags/Technique/page/5/">5</a><a class="page-number" href="/tags/Technique/page/6/">6</a>
+ <a class="page-number" href="/tags/Technique/">1</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/3/">3</a><span class="page-number current">4</span><a class="page-number" href="/tags/Technique/page/5/">5</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/7/">7</a>
</nav>
</div>
diff --git a/tags/Technique/page/5/index.html b/tags/Technique/page/5/index.html
index 0492a6d7..7dad80a1 100644
--- a/tags/Technique/page/5/index.html
+++ b/tags/Technique/page/5/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -172,6 +171,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2024/06/06/NET-AOT-%E4%B8%8B%E7%9A%84-F-%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90%E5%BA%93%E9%80%89%E6%8B%A9/">
+
+ .NET AOT 下的 F# 命令行参数解析库选择
+
+ </a>
+ </div>
+
+ <span class="post-date">Jun 6, 2024</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2024/05/20/Rescript-genType-import-%E9%97%AE%E9%A2%98/">
Rescript @genType import 问题
@@ -329,30 +346,12 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/09/28/A-Brief-History-of-Just-In-Time/">
-
- A Brief History of Just-In-Time
-
- </a>
- </div>
-
- <span class="post-date">Sep 28, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/tags/Technique/">1</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/4/">4</a><span class="page-number current">5</span><a class="page-number" href="/tags/Technique/page/6/">6</a>
+ <a class="page-number" href="/tags/Technique/">1</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/4/">4</a><span class="page-number current">5</span><a class="page-number" href="/tags/Technique/page/6/">6</a><a class="page-number" href="/tags/Technique/page/7/">7</a>
</nav>
</div>
diff --git a/tags/Technique/page/6/index.html b/tags/Technique/page/6/index.html
index 5c1250e8..197a86f7 100644
--- a/tags/Technique/page/6/index.html
+++ b/tags/Technique/page/6/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
@@ -172,6 +171,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/09/28/A-Brief-History-of-Just-In-Time/">
+
+ A Brief History of Just-In-Time
+
+ </a>
+ </div>
+
+ <span class="post-date">Sep 28, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/08/15/tick-thread%E5%9C%A8Multicore-OCaml%E4%B8%AD%E7%9A%84%E4%BD%9C%E7%94%A8/">
tick thread在Multicore OCaml中的作用
@@ -327,30 +344,12 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/">
-
- TypeScript With Rust Errors, No Try Catch, Heresy
-
- </a>
- </div>
-
- <span class="post-date">Apr 30, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/tags/Technique/">1</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/5/">5</a><span class="page-number current">6</span>
+ <a class="page-number" href="/tags/Technique/">1</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/5/">5</a><span class="page-number current">6</span><a class="page-number" href="/tags/Technique/page/7/">7</a>
</nav>
</div>
diff --git a/tags/Technique/page/7/index.html b/tags/Technique/page/7/index.html
new file mode 100644
index 00000000..7ca27f31
--- /dev/null
+++ b/tags/Technique/page/7/index.html
@@ -0,0 +1,224 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+<meta http-equiv="X-UA-Compatible" content="ie=edge">
+
+ <meta name="author" content="韩暮秋">
+
+
+ <meta name="subtitle" content="暮秋小屋">
+
+
+ <meta name="description" content="这里是暮秋小屋,思念和灵感的寄存处">
+
+
+ <meta name="keywords" content="韩暮秋,MuqiuHan,'Muqiu Han', 'muqiu han', muqiuhan">
+
+
+
+
+ <title>
+
+ Tag: Technique |
+ 暮秋小屋
+ </title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script
+ src="/js/menu.js"></script>
+
+
+
+
+
+ <script
+ src="https://polyfill.alicdn.com/polyfill.js?features=es6"></script>
+ <script
+ id="MathJax-script"
+ async
+ src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/mathjax/3.2.0/es5/tex-mml-chtml.js"></script>
+
+
+
+
+ <meta name="generator" content="Hexo 6.3.0"></head>
+ <body>
+ <div class="wrapper">
+
+ <div class="header">
+ <div class="flex-container">
+ <div class="header-inner">
+ <div class="site-brand-container">
+ <a href="/">
+
+ 暮秋小屋
+
+ </a>
+ </div>
+ <div id="menu-btn" class="menu-btn" onclick="toggleMenu()">
+ 菜单
+ </div>
+ <nav class="site-nav">
+ <ul class="menu-list">
+
+
+ <li class="menu-item">
+ <a href="/">
+ 主页
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/categories/gallery/">
+ 日记本
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Medicine/">
+ 泛医学
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Technique/">
+ 计算机
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/tags/Life/">
+ 生活
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/archives">
+ 全部
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/about">
+ 关于
+ </a>
+ </li>
+
+
+
+ <li class="menu-item">
+ <a href="/search">搜索</a>
+ </li>
+
+ </ul>
+ </nav>
+ </div>
+ </div>
+</div>
+
+
+ <div class="main">
+ <div class="flex-container">
+ <div id="tag">
+
+
+ <p class="tag-title">
+ / <a href="/tag/">tags</a>
+ / <a href="">Technique</a> /
+ </p>
+ <div class="post-list">
+
+
+
+
+
+
+ <div class="year-title">2023</div>
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/">
+
+ TypeScript With Rust Errors, No Try Catch, Heresy
+
+ </a>
+ </div>
+
+ <span class="post-date">Apr 30, 2023</span>
+ </div>
+
+
+ <div id="paginator">
+
+ <div class=paginator>
+ <div class="h-line-primary"></div>
+ <nav class="pagination">
+ <a class="page-number" href="/tags/Technique/">1</a><span class="space">&hellip;</span><a class="page-number" href="/tags/Technique/page/6/">6</a><span class="page-number current">7</span>
+ </nav>
+ </div>
+
+ </div>
+</div>
+
+
+
+
+</div>
+ </div>
+ </div>
+
+ <div class="footer">
+ <div class="flex-container">
+ <div class="footer-text">
+
+
+ 韩暮秋 |
+
+
+ 希望路过的人可以添点柴火让这里暖和点
+
+ </div>
+ </div>
+</div>
+
+
+ </div>
+
+ <script src="/js/mermaid-zoom.js"></script>
+
+ </body>
+</html>
diff --git a/tags/UI-UX/index.html b/tags/UI-UX/index.html
index 0116d3bc..1a9bbd65 100644
--- a/tags/UI-UX/index.html
+++ b/tags/UI-UX/index.html
@@ -38,9 +38,8 @@
-
- <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin>
- <link rel="preload" href="/fonts/cjk-common.woff2" as="font" type="font/woff2" crossorigin>
+
+ <link rel="preload" href="/fonts/TensentypeCode.woff2" as="font" type="font/woff2" crossorigin>