diff options
| author | i-shm <[email protected]> | 2026-05-31 10:00:09 +0000 |
|---|---|---|
| committer | i-shm <[email protected]> | 2026-05-31 10:00:09 +0000 |
| commit | dd09a4718ffbfd36b94f841ccd45d816f3b7edcc (patch) | |
| tree | 9769ab8007d47010d13fe5f56615bc1fc19af471 | |
| parent | 34c2384250d0621a40a9dc81d1e05b89e08daa55 (diff) | |
| download | blog-dd09a4718ffbfd36b94f841ccd45d816f3b7edcc.tar.gz | |
deploy: c3f8cb2c8a687273f73fc74e8c483fc5868ba374
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> {</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>) {}</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>) {</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) => {</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>({</span><br><span class="line"> <span class="attr">data</span>: {</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"> },</span><br><span class="line"> });</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>({</span><br><span class="line"> <span class="attr">where</span>: { <span class="attr">id</span>: command.<span class="property">compoundId</span> },</span><br><span class="line"> <span class="attr">data</span>: { <span class="attr">stage</span>: command.<span class="property">result</span> === <span class="string">"promote"</span> ? <span class="string">"candidate"</span> : <span class="string">"lead"</span> },</span><br><span class="line"> });</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (command.<span class="property">result</span> === <span class="string">"promote"</span>) {</span><br><span class="line"> <span class="keyword">await</span> tx.<span class="property">developmentCandidate</span>.<span class="title function_">create</span>({</span><br><span class="line"> <span class="attr">data</span>: { <span class="attr">compoundId</span>: command.<span class="property">compoundId</span> },</span><br><span class="line"> });</span><br><span class="line"> }</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"> });</span><br><span class="line"> }</span><br><span class="line">}</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> {</span><br><span class="line"> <span class="title function_">submit</span>(<span class="attr">input</span>: {</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">"promote"</span> | <span class="string">"optimize"</span> | <span class="string">"pause"</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"> }): <span class="title class_">Promise</span><<span class="title class_">CompoundPromotionDecisionDto</span>>;</span><br><span class="line">}</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> {</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>) {}</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>) {</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>({</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"> });</span><br><span class="line"> }</span><br><span class="line">}</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">{</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>) {}</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>) {</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) => {</span><br><span class="line"> <span class="comment">// 在这里组合 tx-bound store / repository</span></span><br><span class="line"> });</span><br><span class="line"> }</span><br><span class="line">}</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> {</span><br><span class="line"> <span class="title function_">promoteToCandidate</span>(<span class="params"><span class="attr">input</span>: {</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"> }</span>) {</span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">stage</span> !== <span class="string">"lead_optimization"</span>) {</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">"只有先导优化阶段的化合物才能推进为候选化合物"</span>);</span><br><span class="line"> }</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>) {</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">"已锁定数据包的化合物不能重复推进"</span>);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">stage</span> = <span class="string">"candidate"</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"> }</span><br><span class="line"></span><br><span class="line"> <span class="title function_">returnToOptimization</span>(<span class="params"><span class="attr">input</span>: { reason: <span class="built_in">string</span>; actorUserId: <span class="built_in">string</span> }</span>) {</span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">stage</span> !== <span class="string">"lead_optimization"</span>) {</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">"只有评审中的化合物才能退回优化"</span>);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">stage</span> = <span class="string">"lead_optimization"</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"> }</span><br><span class="line">}</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) => {</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">"promote"</span>) {</span><br><span class="line"> compound.<span class="title function_">promoteToCandidate</span>({</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"> });</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (input.<span class="property">result</span> === <span class="string">"optimize"</span>) {</span><br><span class="line"> compound.<span class="title function_">returnToOptimization</span>({</span><br><span class="line"> <span class="attr">reason</span>: input.<span class="property">reason</span> ?? <span class="string">"需要补充结构优化"</span>,</span><br><span class="line"> <span class="attr">actorUserId</span>: input.<span class="property">actorUserId</span>,</span><br><span class="line"> });</span><br><span class="line"> }</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">});</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> {</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><<span class="title class_">Compound</span> | <span class="literal">null</span>>;</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><<span class="built_in">void</span>>;</span><br><span class="line">}</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> {</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><<span class="title class_">Compound</span> | <span class="literal">null</span>>;</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><<span class="built_in">void</span>>;</span><br><span class="line">}</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> = {</span><br><span class="line"> <span class="attr">compound</span>: {</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><<span class="built_in">unknown</span>>;</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><<span class="built_in">unknown</span>>;</span><br><span class="line"> };</span><br><span class="line">};</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> {</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>) {}</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>) {</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"> }</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>) {</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"> }</span><br><span class="line">}</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> {</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>) {</span><br><span class="line"> <span class="variable language_">super</span>(prisma);</span><br><span class="line"> }</span><br><span class="line">}</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) => {</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">});</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> @@ -38,9 +38,8 @@ - - <link rel="preload" href="/fonts/latin-base.woff2" as="font" type="font/woff2" crossorigin> - <link rel="preload" href="/fonts/cjk-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 Binary files differdeleted file mode 100644 index 9105c1a8..00000000 --- a/fonts/CarroisSong.ttf +++ /dev/null diff --git a/fonts/TensentypeCode.woff2 b/fonts/TensentypeCode.woff2 Binary files differnew file mode 100644 index 00000000..0659ed74 --- /dev/null +++ b/fonts/TensentypeCode.woff2 diff --git a/fonts/cjk-common.woff2 b/fonts/cjk-common.woff2 Binary files differdeleted file mode 100644 index 3140f04a..00000000 --- a/fonts/cjk-common.woff2 +++ /dev/null diff --git a/fonts/cjk-ext.woff2 b/fonts/cjk-ext.woff2 Binary files differdeleted file mode 100644 index 6e1b840f..00000000 --- a/fonts/cjk-ext.woff2 +++ /dev/null diff --git a/fonts/latin-base.woff2 b/fonts/latin-base.woff2 Binary files differdeleted file mode 100644 index 6e71c681..00000000 --- a/fonts/latin-base.woff2 +++ /dev/null diff --git a/fonts/latin-ext.woff2 b/fonts/latin-ext.woff2 Binary files differdeleted file mode 100644 index 78abb265..00000000 --- a/fonts/latin-ext.woff2 +++ /dev/null diff --git a/fonts/src/GoogleSansCode-Regular.ttf b/fonts/src/GoogleSansCode-Regular.ttf Binary files differdeleted file mode 100644 index db4d27d3..00000000 --- a/fonts/src/GoogleSansCode-Regular.ttf +++ /dev/null diff --git a/fonts/symbols.woff2 b/fonts/symbols.woff2 Binary files differdeleted file mode 100644 index 59bc5d8d..00000000 --- a/fonts/symbols.woff2 +++ /dev/null @@ -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> @@ -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> && buckets == t.buckets</span><br><span class="line"> && before == <span class="type">Array</span>.unsafe_get buckets i</span><br><span class="line"> && <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 <- length;</span><br><span class="line"> <span class="keyword">if</span> n < length && n < max_buckets_div_2 <span class="keyword">then</span> t.rehash <- 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' v' =</span><br><span class="line"> <span class="keyword">let</span> h = <span class="type">Mix</span>.<span class="built_in">int</span> k' <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', v', 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' v'</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> && buckets == t.buckets</span><br><span class="line"> && before == <span class="type">Array</span>.unsafe_get buckets i</span><br><span class="line"> && <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 <- length;</span><br><span class="line"> <span class="keyword">if</span> n < length && n < max_buckets_div_2 <span class="keyword">then</span> t.rehash <- 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' v' =</span><br><span class="line"> <span class="keyword">let</span> h = <span class="type">Mix</span>.<span class="built_in">int</span> k' <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', v', 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' v'</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> {</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>) {}</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>) {</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) => {</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>({</span><br><span class="line"> <span class="attr">data</span>: {</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"> },</span><br><span class="line"> });</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>({</span><br><span class="line"> <span class="attr">where</span>: { <span class="attr">id</span>: command.<span class="property">compoundId</span> },</span><br><span class="line"> <span class="attr">data</span>: { <span class="attr">stage</span>: command.<span class="property">result</span> === <span class="string">"promote"</span> ? <span class="string">"candidate"</span> : <span class="string">"lead"</span> },</span><br><span class="line"> });</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (command.<span class="property">result</span> === <span class="string">"promote"</span>) {</span><br><span class="line"> <span class="keyword">await</span> tx.<span class="property">developmentCandidate</span>.<span class="title function_">create</span>({</span><br><span class="line"> <span class="attr">data</span>: { <span class="attr">compoundId</span>: command.<span class="property">compoundId</span> },</span><br><span class="line"> });</span><br><span class="line"> }</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"> });</span><br><span class="line"> }</span><br><span class="line">}</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> {</span><br><span class="line"> <span class="title function_">submit</span>(<span class="attr">input</span>: {</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">"promote"</span> | <span class="string">"optimize"</span> | <span class="string">"pause"</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"> }): <span class="title class_">Promise</span><<span class="title class_">CompoundPromotionDecisionDto</span>>;</span><br><span class="line">}</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> {</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>) {}</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>) {</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>({</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"> });</span><br><span class="line"> }</span><br><span class="line">}</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">{</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>) {}</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>) {</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) => {</span><br><span class="line"> <span class="comment">// 在这里组合 tx-bound store / repository</span></span><br><span class="line"> });</span><br><span class="line"> }</span><br><span class="line">}</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> {</span><br><span class="line"> <span class="title function_">promoteToCandidate</span>(<span class="params"><span class="attr">input</span>: {</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"> }</span>) {</span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">stage</span> !== <span class="string">"lead_optimization"</span>) {</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">"只有先导优化阶段的化合物才能推进为候选化合物"</span>);</span><br><span class="line"> }</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>) {</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">"已锁定数据包的化合物不能重复推进"</span>);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">stage</span> = <span class="string">"candidate"</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"> }</span><br><span class="line"></span><br><span class="line"> <span class="title function_">returnToOptimization</span>(<span class="params"><span class="attr">input</span>: { reason: <span class="built_in">string</span>; actorUserId: <span class="built_in">string</span> }</span>) {</span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">stage</span> !== <span class="string">"lead_optimization"</span>) {</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">DomainError</span>(<span class="string">"只有评审中的化合物才能退回优化"</span>);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">stage</span> = <span class="string">"lead_optimization"</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"> }</span><br><span class="line">}</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) => {</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">"promote"</span>) {</span><br><span class="line"> compound.<span class="title function_">promoteToCandidate</span>({</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"> });</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (input.<span class="property">result</span> === <span class="string">"optimize"</span>) {</span><br><span class="line"> compound.<span class="title function_">returnToOptimization</span>({</span><br><span class="line"> <span class="attr">reason</span>: input.<span class="property">reason</span> ?? <span class="string">"需要补充结构优化"</span>,</span><br><span class="line"> <span class="attr">actorUserId</span>: input.<span class="property">actorUserId</span>,</span><br><span class="line"> });</span><br><span class="line"> }</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">});</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> {</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><<span class="title class_">Compound</span> | <span class="literal">null</span>>;</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><<span class="built_in">void</span>>;</span><br><span class="line">}</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> {</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><<span class="title class_">Compound</span> | <span class="literal">null</span>>;</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><<span class="built_in">void</span>>;</span><br><span class="line">}</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> = {</span><br><span class="line"> <span class="attr">compound</span>: {</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><<span class="built_in">unknown</span>>;</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><<span class="built_in">unknown</span>>;</span><br><span class="line"> };</span><br><span class="line">};</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> {</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>) {}</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>) {</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"> }</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>) {</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"> }</span><br><span class="line">}</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> {</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>) {</span><br><span class="line"> <span class="variable language_">super</span>(prisma);</span><br><span class="line"> }</span><br><span class="line">}</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) => {</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">});</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><