diff options
31 files changed, 1075 insertions, 461 deletions
diff --git a/2025/10/30/二〇二五年十月三十日/index.html b/2025/10/30/二〇二五年十月三十日/index.html index 93573c37..7c131e16 100644 --- a/2025/10/30/二〇二五年十月三十日/index.html +++ b/2025/10/30/二〇二五年十月三十日/index.html @@ -205,6 +205,11 @@ <nav class="post-nav"> <div class="prev-item"> + <div class="icon arrow-left"></div> + <div class="post-link"> + <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/">Prev</a> + </div> + </div> <div class="next-item"> diff --git a/2025/10/31/二〇二五年十月三十一日/index.html b/2025/10/31/二〇二五年十月三十一日/index.html new file mode 100644 index 00000000..ea6a5153 --- /dev/null +++ b/2025/10/31/二〇二五年十月三十一日/index.html @@ -0,0 +1,282 @@ +<!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> + + 二〇二五年十月三十一日 | + 暮秋小屋 + </title> + + + + <link rel="icon" href="/favicon.ico"> + + + <style> + @font-face { + font-family: CarroisSong; + src: url('/fonts/CarroisSong.ttf'); + } + </style> + + + + <!-- stylesheets list from _config.yml --> + + <link rel="stylesheet" href="/css/style.css"> + + + + + + <!-- 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="mask-border"> + </div> + + <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 search-btn"> + <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"> + + </div> + <div class="post-title"> + + + 二〇二五年十月三十一日 + + + </div> + <span class="post-date"> + Oct 31, 2025 + </span> + </div> + <div class="post-img"> + + <img src="/img/%E6%97%A5%E8%AE%B0/%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.jpg" alt="featured_image"> + + </div> +</div> + <div class="post-content"> + <p>傍晚的海风带着盐的咸味和鱼网的腥气吹上岸。她独自站在礁石上眺望。巨大的海面起伏不定,深蓝的尽头与灰暗的天空交融成一个模糊的线。巨大的落日悬浮其上,像一颗即将坠入海面的橙红心脏。霞光将她的脸庞染成暖色。海风掀起她披在肩上的丝巾,丝巾像一面旗帜在身后猎猎作响。她深深吸了一口气,咸冷的空气涌入肺腑,带着一种辽阔的清醒。</p> +<p>回屋的时候,月亮正上来。阳台上的玻璃亮得像刚刚下过一场雨。她伸手擦了一下,手心一片清凉。她抬头,看见那只鸟又停在那里,歪着头看着她,然后起飞。影子一划而过,落在她的肩上,像一句轻不可闻的话。</p> +<p>她忽然笑了一下,像把窗纱上的一个小结解开。她说:“我替你把玻璃擦亮了。你也在替我把风擦亮。”屋里很安静,灯温柔地照着。她把手伸到光里,让手指被照成透明。透明的东西容易破碎,却也比别的更亮。</p> +<p>时间会带走了一个人,也带走了他的呼吸,他的声音,他掌心的温度。但似乎又留下了些什么</p> +<p>光的颗粒在空气里浮动,在记忆里游走,她闭上眼睛,光从睫毛上滑过,像许多个早晨,像许多个傍晚,像她们再次相遇的无数个灿然的瞬间。她在其中走走停停,像一粒微尘,又像一颗星。</p> + +</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="/2025/10/30/%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%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> + + + <div class="search-popup"> + <div class="search-popup-overlay"> + </div> + <div class="search-popup-window" > + <div class="search-header"> + <div class="search-input-container"> + <input autocomplete="off" autocapitalize="off" maxlength="80" + placeholder="Search Anything" spellcheck="false" + type="search" class="search-input"> + </div> + <div class="search-close-btn"> + <div class="icon close-btn"></div> + </div> + </div> + <div class="search-result-container"> + </div> + </div> +</div> + +<script> + const searchConfig = { + path : "/search.xml", + top_n_per_article: "1", + unescape : "false", + trigger: "auto", + preload: "false" + } +</script> +<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/search.js"></script> +<script src="/js/search.js"></script> + + + + </body> +</html> diff --git a/archives/2025/10/index.html b/archives/2025/10/index.html index ae3021cd..7b2ab30c 100644 --- a/archives/2025/10/index.html +++ b/archives/2025/10/index.html @@ -170,6 +170,24 @@ <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/"> + + 二〇二五年十月三十一日 + + </a> + </div> + + <span class="post-date">Oct 31, 2025</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2025/10/30/%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%E6%97%A5/"> 二〇二五年十月三十日 diff --git a/archives/2025/index.html b/archives/2025/index.html index cc39efec..ab19bcee 100644 --- a/archives/2025/index.html +++ b/archives/2025/index.html @@ -170,6 +170,24 @@ <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/"> + + 二〇二五年十月三十一日 + + </a> + </div> + + <span class="post-date">Oct 31, 2025</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2025/10/30/%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%E6%97%A5/"> 二〇二五年十月三十日 @@ -325,30 +343,12 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2025/07/31/svelte-lazyquery/"> - - 使用 Runed intersection observer 与 tanstack query 实现通用的惰性加载组件 - - </a> - </div> - - <span class="post-date">Jul 31, 2025</span> - </div> - - <div id="paginator"> <div class=paginator> <div class="h-line-primary"></div> <nav class="pagination"> - <span class="page-number current">1</span><a class="page-number" href="/archives/2025/page/2/">2</a><span class="space">…</span><a class="page-number" href="/archives/2025/page/4/">4</a> + <span class="page-number current">1</span><a class="page-number" href="/archives/2025/page/2/">2</a><span class="space">…</span><a class="page-number" href="/archives/2025/page/5/">5</a> </nav> </div> diff --git a/archives/2025/page/2/index.html b/archives/2025/page/2/index.html index f1cb4f69..24bf8902 100644 --- a/archives/2025/page/2/index.html +++ b/archives/2025/page/2/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2025/07/31/svelte-lazyquery/"> + + 使用 Runed intersection observer 与 tanstack query 实现通用的惰性加载组件 + + </a> + </div> + + <span class="post-date">Jul 31, 2025</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2025/07/29/nestjs-nested-object-dto/"> NestJS 嵌套查询参数解析错误分析与解决方案 @@ -325,30 +343,12 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2025/05/08/Multiplayer-Collaborative-Systems-tips/"> - - 多人协作系统中的实现策略 (CRDT,锁等实现方案) - - </a> - </div> - - <span class="post-date">May 8, 2025</span> - </div> - - <div id="paginator"> <div class=paginator> <div class="h-line-primary"></div> <nav class="pagination"> - <a class="page-number" href="/archives/2025/">1</a><span class="page-number current">2</span><a class="page-number" href="/archives/2025/page/3/">3</a><a class="page-number" href="/archives/2025/page/4/">4</a> + <a class="page-number" href="/archives/2025/">1</a><span class="page-number current">2</span><a class="page-number" href="/archives/2025/page/3/">3</a><span class="space">…</span><a class="page-number" href="/archives/2025/page/5/">5</a> </nav> </div> diff --git a/archives/2025/page/3/index.html b/archives/2025/page/3/index.html index aff8af84..94ca7395 100644 --- a/archives/2025/page/3/index.html +++ b/archives/2025/page/3/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2025/05/08/Multiplayer-Collaborative-Systems-tips/"> + + 多人协作系统中的实现策略 (CRDT,锁等实现方案) + + </a> + </div> + + <span class="post-date">May 8, 2025</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2025/05/07/nestjs-bullmq-mail-business/"> NestJS bullmq 邮件发送业务中的小 tips @@ -325,30 +343,12 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2025/03/20/%E8%82%BA%E5%8A%9F%E8%83%BD%E6%A3%80%E6%9F%A5%E6%95%B0%E5%80%BC/"> - - 肺功能检查数值 - - </a> - </div> - - <span class="post-date">Mar 20, 2025</span> - </div> - - <div id="paginator"> <div class=paginator> <div class="h-line-primary"></div> <nav class="pagination"> - <a class="page-number" href="/archives/2025/">1</a><a class="page-number" href="/archives/2025/page/2/">2</a><span class="page-number current">3</span><a class="page-number" href="/archives/2025/page/4/">4</a> + <a class="page-number" href="/archives/2025/">1</a><a class="page-number" href="/archives/2025/page/2/">2</a><span class="page-number current">3</span><a class="page-number" href="/archives/2025/page/4/">4</a><a class="page-number" href="/archives/2025/page/5/">5</a> </nav> </div> diff --git a/archives/2025/page/4/index.html b/archives/2025/page/4/index.html index 1ee8a341..f063589d 100644 --- a/archives/2025/page/4/index.html +++ b/archives/2025/page/4/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2025/03/20/%E8%82%BA%E5%8A%9F%E8%83%BD%E6%A3%80%E6%9F%A5%E6%95%B0%E5%80%BC/"> + + 肺功能检查数值 + + </a> + </div> + + <span class="post-date">Mar 20, 2025</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2025/03/19/%E9%A2%86%E5%9F%9F%E9%A9%B1%E5%8A%A8%E8%AE%BE%E8%AE%A1%E4%B8%AD%E8%81%9A%E5%90%88%E6%A0%B9%E6%8C%81%E4%B9%85%E5%8C%96%E5%92%8C%E4%BA%8B%E4%BB%B6%E5%8F%91%E5%B8%83%E5%8F%AF%E8%83%BD%E5%AF%BC%E8%87%B4%E6%95%B0%E6%8D%AE%E4%B8%8D%E4%B8%80%E8%87%B4%E9%97%AE%E9%A2%98/"> 领域驱动设计中聚合根持久化和事件发布可能导致数据不一致问题 @@ -325,30 +343,12 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2025/01/19/%E8%BA%AB%E4%BD%93%E5%BE%80%E5%89%8D%E5%80%BE%EF%BC%8C%E7%81%B5%E9%AD%82%E5%90%91%E5%90%8E%E6%91%87/"> - - 身体往前倾,灵魂向后摇 - - </a> - </div> - - <span class="post-date">Jan 19, 2025</span> - </div> - - <div id="paginator"> <div class=paginator> <div class="h-line-primary"></div> <nav class="pagination"> - <a class="page-number" href="/archives/2025/">1</a><span class="space">…</span><a class="page-number" href="/archives/2025/page/3/">3</a><span class="page-number current">4</span> + <a class="page-number" href="/archives/2025/">1</a><span class="space">…</span><a class="page-number" href="/archives/2025/page/3/">3</a><span class="page-number current">4</span><a class="page-number" href="/archives/2025/page/5/">5</a> </nav> </div> diff --git a/archives/2025/page/5/index.html b/archives/2025/page/5/index.html new file mode 100644 index 00000000..76f13c55 --- /dev/null +++ b/archives/2025/page/5/index.html @@ -0,0 +1,250 @@ +<!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: 2025 | + 暮秋小屋 + </title> + + + + <link rel="icon" href="/favicon.ico"> + + + <style> + @font-face { + font-family: CarroisSong; + src: url('/fonts/CarroisSong.ttf'); + } + </style> + + + + <!-- stylesheets list from _config.yml --> + + <link rel="stylesheet" href="/css/style.css"> + + + + + + <!-- 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="mask-border"> + </div> + + <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 search-btn"> + <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">2025</div> + + + <div class="post-list-item"> + <div class="post-title"> + <a href="/2025/01/19/%E8%BA%AB%E4%BD%93%E5%BE%80%E5%89%8D%E5%80%BE%EF%BC%8C%E7%81%B5%E9%AD%82%E5%90%91%E5%90%8E%E6%91%87/"> + + 身体往前倾,灵魂向后摇 + + </a> + </div> + + <span class="post-date">Jan 19, 2025</span> + </div> + + + <div id="paginator"> + + <div class=paginator> + <div class="h-line-primary"></div> + <nav class="pagination"> + <a class="page-number" href="/archives/2025/">1</a><span class="space">…</span><a class="page-number" href="/archives/2025/page/4/">4</a><span class="page-number current">5</span> + </nav> + </div> + + </div> +</div> + + </div> + </div> + + <div class="footer"> + <div class="flex-container"> + <div class="footer-text"> + + + 韩暮秋 | + + + 希望路过的人可以添点柴火让这里暖和点 + + </div> + </div> +</div> + + </div> + + + <div class="search-popup"> + <div class="search-popup-overlay"> + </div> + <div class="search-popup-window" > + <div class="search-header"> + <div class="search-input-container"> + <input autocomplete="off" autocapitalize="off" maxlength="80" + placeholder="Search Anything" spellcheck="false" + type="search" class="search-input"> + </div> + <div class="search-close-btn"> + <div class="icon close-btn"></div> + </div> + </div> + <div class="search-result-container"> + </div> + </div> +</div> + +<script> + const searchConfig = { + path : "/search.xml", + top_n_per_article: "1", + unescape : "false", + trigger: "auto", + preload: "false" + } +</script> +<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/search.js"></script> +<script src="/js/search.js"></script> + + + + </body> +</html> diff --git a/archives/index.html b/archives/index.html index 50131fd0..33bf9a1a 100644 --- a/archives/index.html +++ b/archives/index.html @@ -170,6 +170,24 @@ <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/"> + + 二〇二五年十月三十一日 + + </a> + </div> + + <span class="post-date">Oct 31, 2025</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2025/10/30/%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%E6%97%A5/"> 二〇二五年十月三十日 @@ -325,24 +343,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2025/07/31/svelte-lazyquery/"> - - 使用 Runed intersection observer 与 tanstack query 实现通用的惰性加载组件 - - </a> - </div> - - <span class="post-date">Jul 31, 2025</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/10/index.html b/archives/page/10/index.html index affd91b4..3eaa64f8 100644 --- a/archives/page/10/index.html +++ b/archives/page/10/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/"> + + Radiographic Absence of the Left Humeral Head + + </a> + </div> + + <span class="post-date">Oct 25, 2023</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2023/10/25/%E8%82%BA%E7%82%8E%E6%94%AF%E5%8E%9F%E4%BD%93%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9/"> 肺炎支原体注意事项 @@ -325,24 +343,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2023/08/27/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AB%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%83%E6%97%A5/"> - - 二零二三年八月二十七日 - - </a> - </div> - - <span class="post-date">Aug 27, 2023</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/11/index.html b/archives/page/11/index.html index 6fcfc601..97932ab6 100644 --- a/archives/page/11/index.html +++ b/archives/page/11/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2023/08/27/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AB%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%83%E6%97%A5/"> + + 二零二三年八月二十七日 + + </a> + </div> + + <span class="post-date">Aug 27, 2023</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2023/08/21/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AB%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/"> 二零二三年八月二十一日 @@ -325,24 +343,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2023/06/22/%E7%81%AF%E7%AC%BC%E8%8D%89/"> - - 灯笼草 - - </a> - </div> - - <span class="post-date">Jun 22, 2023</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/12/index.html b/archives/page/12/index.html index f98e9af5..8139a610 100644 --- a/archives/page/12/index.html +++ b/archives/page/12/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2023/06/22/%E7%81%AF%E7%AC%BC%E8%8D%89/"> + + 灯笼草 + + </a> + </div> + + <span class="post-date">Jun 22, 2023</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2023/06/17/%E5%8F%91%E7%83%AD%E5%8F%8A%E8%B6%85%E9%AB%98%E7%83%AD%E5%8D%B1%E8%B1%A1/"> 发热及超高热危象 @@ -325,24 +343,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2023/03/14/%E8%9E%BA%E5%86%85%E9%85%AF%E7%89%87/"> - - 螺内酯片 - - </a> - </div> - - <span class="post-date">Mar 14, 2023</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/13/index.html b/archives/page/13/index.html index 35825aba..29925aee 100644 --- a/archives/page/13/index.html +++ b/archives/page/13/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2023/03/14/%E8%9E%BA%E5%86%85%E9%85%AF%E7%89%87/"> + + 螺内酯片 + + </a> + </div> + + <span class="post-date">Mar 14, 2023</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2023/03/14/%E5%91%8B%E5%A1%9E%E7%B1%B3/"> 呋塞米 @@ -325,24 +343,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2023/02/22/%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%8C%E6%97%A5/"> - - 二零二三年二月二十二日 - - </a> - </div> - - <span class="post-date">Feb 22, 2023</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/14/index.html b/archives/page/14/index.html index 7fa53006..58fdfdd9 100644 --- a/archives/page/14/index.html +++ b/archives/page/14/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2023/02/22/%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%8C%E6%97%A5/"> + + 二零二三年二月二十二日 + + </a> + </div> + + <span class="post-date">Feb 22, 2023</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2023/02/02/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E6%97%A5/"> 二零二三年二月二日 @@ -327,24 +345,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2022/01/01/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E4%B8%80%E6%9C%88%E4%B8%80%E6%97%A5/"> - - 二零二二年一月一日 - - </a> - </div> - - <span class="post-date">Jan 1, 2022</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/15/index.html b/archives/page/15/index.html index 1e17be10..22687c0a 100644 --- a/archives/page/15/index.html +++ b/archives/page/15/index.html @@ -165,6 +165,26 @@ + <div class="year-title">2022</div> + + + <div class="post-list-item"> + <div class="post-title"> + <a href="/2022/01/01/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E4%B8%80%E6%9C%88%E4%B8%80%E6%97%A5/"> + + 二零二二年一月一日 + + </a> + </div> + + <span class="post-date">Jan 1, 2022</span> + </div> + + + + + + <div class="year-title">2021</div> diff --git a/archives/page/2/index.html b/archives/page/2/index.html index 7e0cb3a3..93b79143 100644 --- a/archives/page/2/index.html +++ b/archives/page/2/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2025/07/31/svelte-lazyquery/"> + + 使用 Runed intersection observer 与 tanstack query 实现通用的惰性加载组件 + + </a> + </div> + + <span class="post-date">Jul 31, 2025</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2025/07/29/nestjs-nested-object-dto/"> NestJS 嵌套查询参数解析错误分析与解决方案 @@ -325,24 +343,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2025/05/08/Multiplayer-Collaborative-Systems-tips/"> - - 多人协作系统中的实现策略 (CRDT,锁等实现方案) - - </a> - </div> - - <span class="post-date">May 8, 2025</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/3/index.html b/archives/page/3/index.html index a2394235..583c3129 100644 --- a/archives/page/3/index.html +++ b/archives/page/3/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2025/05/08/Multiplayer-Collaborative-Systems-tips/"> + + 多人协作系统中的实现策略 (CRDT,锁等实现方案) + + </a> + </div> + + <span class="post-date">May 8, 2025</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2025/05/07/nestjs-bullmq-mail-business/"> NestJS bullmq 邮件发送业务中的小 tips @@ -325,24 +343,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2025/03/20/%E8%82%BA%E5%8A%9F%E8%83%BD%E6%A3%80%E6%9F%A5%E6%95%B0%E5%80%BC/"> - - 肺功能检查数值 - - </a> - </div> - - <span class="post-date">Mar 20, 2025</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/4/index.html b/archives/page/4/index.html index 50c4857e..bbb4ac5c 100644 --- a/archives/page/4/index.html +++ b/archives/page/4/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2025/03/20/%E8%82%BA%E5%8A%9F%E8%83%BD%E6%A3%80%E6%9F%A5%E6%95%B0%E5%80%BC/"> + + 肺功能检查数值 + + </a> + </div> + + <span class="post-date">Mar 20, 2025</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2025/03/19/%E9%A2%86%E5%9F%9F%E9%A9%B1%E5%8A%A8%E8%AE%BE%E8%AE%A1%E4%B8%AD%E8%81%9A%E5%90%88%E6%A0%B9%E6%8C%81%E4%B9%85%E5%8C%96%E5%92%8C%E4%BA%8B%E4%BB%B6%E5%8F%91%E5%B8%83%E5%8F%AF%E8%83%BD%E5%AF%BC%E8%87%B4%E6%95%B0%E6%8D%AE%E4%B8%8D%E4%B8%80%E8%87%B4%E9%97%AE%E9%A2%98/"> 领域驱动设计中聚合根持久化和事件发布可能导致数据不一致问题 @@ -325,24 +343,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2025/01/19/%E8%BA%AB%E4%BD%93%E5%BE%80%E5%89%8D%E5%80%BE%EF%BC%8C%E7%81%B5%E9%AD%82%E5%90%91%E5%90%8E%E6%91%87/"> - - 身体往前倾,灵魂向后摇 - - </a> - </div> - - <span class="post-date">Jan 19, 2025</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/5/index.html b/archives/page/5/index.html index ca203ec4..0223b02a 100644 --- a/archives/page/5/index.html +++ b/archives/page/5/index.html @@ -165,6 +165,26 @@ + <div class="year-title">2025</div> + + + <div class="post-list-item"> + <div class="post-title"> + <a href="/2025/01/19/%E8%BA%AB%E4%BD%93%E5%BE%80%E5%89%8D%E5%80%BE%EF%BC%8C%E7%81%B5%E9%AD%82%E5%90%91%E5%90%8E%E6%91%87/"> + + 身体往前倾,灵魂向后摇 + + </a> + </div> + + <span class="post-date">Jan 19, 2025</span> + </div> + + + + + + <div class="year-title">2024</div> @@ -325,24 +345,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2024/09/27/Turborepo-%E7%AE%80%E8%BF%B0/"> - - Turborepo 简述 - - </a> - </div> - - <span class="post-date">Sep 27, 2024</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/6/index.html b/archives/page/6/index.html index 9217998a..863d2fa0 100644 --- a/archives/page/6/index.html +++ b/archives/page/6/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2024/09/27/Turborepo-%E7%AE%80%E8%BF%B0/"> + + Turborepo 简述 + + </a> + </div> + + <span class="post-date">Sep 27, 2024</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2024/09/15/%E8%82%A9%E5%91%A8%E7%82%8E%E5%92%8C%E8%82%A9%E8%A2%96%E6%8D%9F%E4%BC%A4%E7%9A%84%E5%8C%BA%E5%88%AB/"> 肩周炎和肩袖损伤的区别 @@ -325,24 +343,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2024/08/02/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E5%85%AB%E6%9C%88%E4%B8%80%E6%97%A5/"> - - 二〇二四年八月一日 - - </a> - </div> - - <span class="post-date">Aug 2, 2024</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/7/index.html b/archives/page/7/index.html index f56a6bea..d217ca90 100644 --- a/archives/page/7/index.html +++ b/archives/page/7/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2024/08/02/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E5%85%AB%E6%9C%88%E4%B8%80%E6%97%A5/"> + + 二〇二四年八月一日 + + </a> + </div> + + <span class="post-date">Aug 2, 2024</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2024/07/23/OCaml-News-2024-6/"> OCaml News 2024-6 @@ -325,24 +343,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2024/05/07/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%BA%94%E6%9C%88%E4%B8%83%E6%97%A5/"> - - 二〇二四年五月七日 - - </a> - </div> - - <span class="post-date">May 7, 2024</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/8/index.html b/archives/page/8/index.html index d144291b..b8517048 100644 --- a/archives/page/8/index.html +++ b/archives/page/8/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2024/05/07/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%BA%94%E6%9C%88%E4%B8%83%E6%97%A5/"> + + 二〇二四年五月七日 + + </a> + </div> + + <span class="post-date">May 7, 2024</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2024/04/08/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E5%9B%9B%E6%9C%88%E5%85%AB%E6%97%A5/"> 二〇二四年四月八日 @@ -325,24 +343,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2024/01/22/Rescript-React-Native/"> - - Rescript and React Native - - </a> - </div> - - <span class="post-date">Jan 22, 2024</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/archives/page/9/index.html b/archives/page/9/index.html index 4a1f0c2c..b7672d20 100644 --- a/archives/page/9/index.html +++ b/archives/page/9/index.html @@ -170,6 +170,24 @@ <div class="post-list-item"> <div class="post-title"> + <a href="/2024/01/22/Rescript-React-Native/"> + + Rescript and React Native + + </a> + </div> + + <span class="post-date">Jan 22, 2024</span> + </div> + + + + + + + + <div class="post-list-item"> + <div class="post-title"> <a href="/2024/01/18/OCaml-News-2024-2/"> OCaml News 2024-2 @@ -327,24 +345,6 @@ </div> - - - - - - <div class="post-list-item"> - <div class="post-title"> - <a href="/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/"> - - Radiographic Absence of the Left Humeral Head - - </a> - </div> - - <span class="post-date">Oct 25, 2023</span> - </div> - - <div id="paginator"> <div class=paginator> diff --git a/categories/gallery/index.html b/categories/gallery/index.html index 2111aa56..c03b74d8 100644 --- a/categories/gallery/index.html +++ b/categories/gallery/index.html @@ -168,6 +168,30 @@ </div> <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/"</a> + + 二〇二五年十月三十一日 + + </a> + </div> + <span class="post-date"> + Oct 31, 2025 + </span> + </div> + <div class="post-img"> + + <img src="/img/%E6%97%A5%E8%AE%B0/%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.jpg" alt="featured_image"> + + </div> + </div> + <div class="h-line-secondary"></div> + + <div class="post-gallery-item"> + <div class="post-info"> + <div class="tag-list"> + + </div> + <div class="post-title"> <a href="/2025/10/30/%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%E6%97%A5/"</a> 二〇二五年十月三十日 @@ -378,30 +402,6 @@ </div> <div class="h-line-secondary"></div> - <div class="post-gallery-item"> - <div class="post-info"> - <div class="tag-list"> - - </div> - <div class="post-title"> - <a href="/2024/12/18/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E5%8D%81%E5%85%AB%E6%97%A5/"</a> - - 二〇二四年十二月十八日 - - </a> - </div> - <span class="post-date"> - Dec 18, 2024 - </span> - </div> - <div class="post-img"> - - <img src="/img/%E6%97%A5%E8%AE%B0/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E5%8D%81%E5%85%AB%E6%97%A5.jpg" alt="featured_image"> - - </div> - </div> - <div class="h-line-secondary"></div> - </div> <div id="paginator"> diff --git a/categories/gallery/page/2/index.html b/categories/gallery/page/2/index.html index ddc1375c..76553aa3 100644 --- a/categories/gallery/page/2/index.html +++ b/categories/gallery/page/2/index.html @@ -168,6 +168,30 @@ </div> <div class="post-title"> + <a href="/2024/12/18/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E5%8D%81%E5%85%AB%E6%97%A5/"</a> + + 二〇二四年十二月十八日 + + </a> + </div> + <span class="post-date"> + Dec 18, 2024 + </span> + </div> + <div class="post-img"> + + <img src="/img/%E6%97%A5%E8%AE%B0/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E5%8D%81%E5%85%AB%E6%97%A5.jpg" alt="featured_image"> + + </div> + </div> + <div class="h-line-secondary"></div> + + <div class="post-gallery-item"> + <div class="post-info"> + <div class="tag-list"> + + </div> + <div class="post-title"> <a href="/2024/11/17/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E5%8D%81%E4%B8%83%E6%97%A5/"</a> 二〇二四年十一月十七日 @@ -378,30 +402,6 @@ </div> <div class="h-line-secondary"></div> - <div class="post-gallery-item"> - <div class="post-info"> - <div class="tag-list"> - - </div> - <div class="post-title"> - <a href="/2024/02/07/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%B8%83%E6%97%A5/"</a> - - 二〇二四年二月七日 - - </a> - </div> - <span class="post-date"> - Feb 7, 2024 - </span> - </div> - <div class="post-img"> - - <img src="/img/%E6%97%A5%E8%AE%B0/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%B8%83%E6%97%A5.jpg" alt="featured_image"> - - </div> - </div> - <div class="h-line-secondary"></div> - </div> <div id="paginator"> diff --git a/categories/gallery/page/3/index.html b/categories/gallery/page/3/index.html index cbb27d53..c03d312c 100644 --- a/categories/gallery/page/3/index.html +++ b/categories/gallery/page/3/index.html @@ -168,6 +168,30 @@ </div> <div class="post-title"> + <a href="/2024/02/07/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%B8%83%E6%97%A5/"</a> + + 二〇二四年二月七日 + + </a> + </div> + <span class="post-date"> + Feb 7, 2024 + </span> + </div> + <div class="post-img"> + + <img src="/img/%E6%97%A5%E8%AE%B0/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%B8%83%E6%97%A5.jpg" alt="featured_image"> + + </div> + </div> + <div class="h-line-secondary"></div> + + <div class="post-gallery-item"> + <div class="post-info"> + <div class="tag-list"> + + </div> + <div class="post-title"> <a href="/2024/01/23/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%B8%80%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%89%E6%97%A5/"</a> 二〇二四年一月二十三日 @@ -378,30 +402,6 @@ </div> <div class="h-line-secondary"></div> - <div class="post-gallery-item"> - <div class="post-info"> - <div class="tag-list"> - - </div> - <div class="post-title"> - <a href="/2023/07/30/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%B8%83%E6%9C%88%E4%B8%89%E5%8D%81%E6%97%A5/"</a> - - 二零二三年七月三十日 - - </a> - </div> - <span class="post-date"> - Jul 30, 2023 - </span> - </div> - <div class="post-img"> - - <img src="/img/%E6%97%A5%E8%AE%B0/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%B8%83%E6%9C%88%E4%B8%89%E5%8D%81%E4%B8%80%E6%97%A5.jpg" alt="featured_image"> - - </div> - </div> - <div class="h-line-secondary"></div> - </div> <div id="paginator"> diff --git a/categories/gallery/page/4/index.html b/categories/gallery/page/4/index.html index 139c2eaf..b70fd6fd 100644 --- a/categories/gallery/page/4/index.html +++ b/categories/gallery/page/4/index.html @@ -168,6 +168,30 @@ </div> <div class="post-title"> + <a href="/2023/07/30/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%B8%83%E6%9C%88%E4%B8%89%E5%8D%81%E6%97%A5/"</a> + + 二零二三年七月三十日 + + </a> + </div> + <span class="post-date"> + Jul 30, 2023 + </span> + </div> + <div class="post-img"> + + <img src="/img/%E6%97%A5%E8%AE%B0/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%B8%83%E6%9C%88%E4%B8%89%E5%8D%81%E4%B8%80%E6%97%A5.jpg" alt="featured_image"> + + </div> + </div> + <div class="h-line-secondary"></div> + + <div class="post-gallery-item"> + <div class="post-info"> + <div class="tag-list"> + + </div> + <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> 二〇二三年六月二十九日 @@ -378,30 +402,6 @@ </div> <div class="h-line-secondary"></div> - <div class="post-gallery-item"> - <div class="post-info"> - <div class="tag-list"> - - </div> - <div class="post-title"> - <a href="/2023/02/01/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%B8%80%E6%97%A5/"</a> - - 二零二三年二月一日 - - </a> - </div> - <span class="post-date"> - Feb 1, 2023 - </span> - </div> - <div class="post-img"> - - <img src="/img/%E6%97%A5%E8%AE%B0/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%B8%80%E6%97%A5.webp" alt="featured_image"> - - </div> - </div> - <div class="h-line-secondary"></div> - </div> <div id="paginator"> diff --git a/categories/gallery/page/5/index.html b/categories/gallery/page/5/index.html index 52f09375..936f750b 100644 --- a/categories/gallery/page/5/index.html +++ b/categories/gallery/page/5/index.html @@ -168,6 +168,30 @@ </div> <div class="post-title"> + <a href="/2023/02/01/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%B8%80%E6%97%A5/"</a> + + 二零二三年二月一日 + + </a> + </div> + <span class="post-date"> + Feb 1, 2023 + </span> + </div> + <div class="post-img"> + + <img src="/img/%E6%97%A5%E8%AE%B0/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%B8%80%E6%97%A5.webp" alt="featured_image"> + + </div> + </div> + <div class="h-line-secondary"></div> + + <div class="post-gallery-item"> + <div class="post-info"> + <div class="tag-list"> + + </div> + <div class="post-title"> <a href="/2023/01/21/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%B8%80%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/"</a> 二零二三年一月二十一日 @@ -378,30 +402,6 @@ </div> <div class="h-line-secondary"></div> - <div class="post-gallery-item"> - <div class="post-info"> - <div class="tag-list"> - - </div> - <div class="post-title"> - <a href="/2021/03/15/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%80%E5%B9%B4%E4%B8%89%E6%9C%88%E5%8D%81%E4%BA%94%E6%97%A5/"</a> - - 二零二一年三月十五日 - - </a> - </div> - <span class="post-date"> - Mar 15, 2021 - </span> - </div> - <div class="post-img"> - - <img src="/img/%E6%97%A5%E8%AE%B0/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%80%E5%B9%B4%E4%B8%89%E6%9C%88%E5%8D%81%E4%BA%94%E6%97%A5.webp" alt="featured_image"> - - </div> - </div> - <div class="h-line-secondary"></div> - </div> <div id="paginator"> diff --git a/categories/gallery/page/6/index.html b/categories/gallery/page/6/index.html index 6507eda4..d15cb46b 100644 --- a/categories/gallery/page/6/index.html +++ b/categories/gallery/page/6/index.html @@ -168,6 +168,30 @@ </div> <div class="post-title"> + <a href="/2021/03/15/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%80%E5%B9%B4%E4%B8%89%E6%9C%88%E5%8D%81%E4%BA%94%E6%97%A5/"</a> + + 二零二一年三月十五日 + + </a> + </div> + <span class="post-date"> + Mar 15, 2021 + </span> + </div> + <div class="post-img"> + + <img src="/img/%E6%97%A5%E8%AE%B0/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%80%E5%B9%B4%E4%B8%89%E6%9C%88%E5%8D%81%E4%BA%94%E6%97%A5.webp" alt="featured_image"> + + </div> + </div> + <div class="h-line-secondary"></div> + + <div class="post-gallery-item"> + <div class="post-info"> + <div class="tag-list"> + + </div> + <div class="post-title"> <a href="/2021/02/16/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%80%E5%B9%B4%E4%BA%8C%E6%9C%88%E5%8D%81%E5%85%AD%E6%97%A5/"</a> 二零二一年二月十六日 diff --git a/img/日记/二〇二五年十月三十一日.jpg b/img/日记/二〇二五年十月三十一日.jpg Binary files differnew file mode 100644 index 00000000..a1371dce --- /dev/null +++ b/img/日记/二〇二五年十月三十一日.jpg @@ -3785,6 +3785,19 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的� </categories> </entry> <entry> + <title>二〇二五年十月三十一日</title> + <url>/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/</url> + <content><![CDATA[<p>傍晚的海风带着盐的咸味和鱼网的腥气吹上岸。她独自站在礁石上眺望。巨大的海面起伏不定,深蓝的尽头与灰暗的天空交融成一个模糊的线。巨大的落日悬浮其上,像一颗即将坠入海面的橙红心脏。霞光将她的脸庞染成暖色。海风掀起她披在肩上的丝巾,丝巾像一面旗帜在身后猎猎作响。她深深吸了一口气,咸冷的空气涌入肺腑,带着一种辽阔的清醒。</p> +<p>回屋的时候,月亮正上来。阳台上的玻璃亮得像刚刚下过一场雨。她伸手擦了一下,手心一片清凉。她抬头,看见那只鸟又停在那里,歪着头看着她,然后起飞。影子一划而过,落在她的肩上,像一句轻不可闻的话。</p> +<p>她忽然笑了一下,像把窗纱上的一个小结解开。她说:“我替你把玻璃擦亮了。你也在替我把风擦亮。”屋里很安静,灯温柔地照着。她把手伸到光里,让手指被照成透明。透明的东西容易破碎,却也比别的更亮。</p> +<p>时间会带走了一个人,也带走了他的呼吸,他的声音,他掌心的温度。但似乎又留下了些什么</p> +<p>光的颗粒在空气里浮动,在记忆里游走,她闭上眼睛,光从睫毛上滑过,像许多个早晨,像许多个傍晚,像她们再次相遇的无数个灿然的瞬间。她在其中走走停停,像一粒微尘,又像一颗星。</p> +]]></content> + <categories> + <category>gallery</category> + </categories> + </entry> + <entry> <title>二〇二五年十月三十日</title> <url>/2025/10/30/%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%E6%97%A5/</url> <content><![CDATA[<p>那是一个无云、风也很小的傍晚。天光从浅到深慢慢往你这边退,像有人慢慢把你从白昼里抱出来。街角的花店门口站着一只猫,它看着路过的车,耳朵偶尔动一下。屋檐下有风铃,轻轻的,叮的一声,时间像也跟着响了一下。</p> @@ -6126,19 +6139,6 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的� </tags> </entry> <entry> - <title>隐藏一些OCaml Effect的机制,让其语法在精神上更接近delimcc</title> - <url>/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/</url> - <content><![CDATA[<p><a href="https://github.com/kayceesrk/delimcc_of_fxhandler">delimcc_of_fxhandler这个库</a>在OCaml5的effect handlers上实现了一些delimcc原语(shift/reset, control/prompt这些):</p> -<figure class="highlight ocaml"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> p = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"><span class="keyword">assert</span> (<span class="literal">[]</span> = push_prompt p (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> <span class="number">1</span>::<span class="number">2</span>::take_subcont p (<span class="keyword">fun</span> _k -> <span class="literal">[]</span>)));</span><br><span class="line"><span class="keyword">assert</span> ([<span class="number">1</span>;<span class="number">2</span>] = push_prompt p (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> <span class="number">1</span>::<span class="number">2</span>::take_subcont p (<span class="keyword">fun</span> k -> push_subcont k <span class="literal">[]</span>)));</span><br><span class="line"><span class="keyword">assert</span> (<span class="number">135</span> =</span><br><span class="line"> <span class="keyword">let</span> p1 = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> p2 = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> p3 = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> pushtwice sk =</span><br><span class="line"> sk (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> sk (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> shift0 p2 (<span class="keyword">fun</span> sk2 -> sk2 (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> sk2 (<span class="keyword">fun</span> <span class="literal">()</span> -> <span class="number">3</span>))) <span class="literal">()</span>))</span><br><span class="line"> <span class="keyword">in</span></span><br><span class="line"> push_prompt p1 (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> push_prompt p2 (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> push_prompt p3 (<span class="keyword">fun</span> <span class="literal">()</span> -> shift0 p1 pushtwice <span class="literal">()</span>) + <span class="number">10</span>) + <span class="number">1</span>) + <span class="number">100</span>);</span><br><span class="line"></span><br><span class="line">print_endline <span class="string">"Success!"</span></span><br></pre></td></tr></table></figure> -<p>另外, <a href="https://github.com/avsm/ocaml/commits/effect-syntax">avsm这里</a>可以看到一些OCaml的Effect Syntax进展。</p> -<p>还有 <a href="https://github.com/dhil/ocaml-multicont">multi-shot continuations in OCaml</a>,在这个仓库里面还讨论了一些有趣的问题,例如,OCaml 编译器和runtime会做出一些假设从而进行一些优化,这些优化在使用multi-shot continutation时是不可取的(或完全错误的)。编译器优化导致错误的一个例子是堆到栈的转换,例如:</p> -<figure class="highlight ocaml"><table><tr><td class="code"><pre><span class="line"><span class="comment">(* An illustration of how the heap to stack optimisation is broken.</span></span><br><span class="line"><span class="comment"> * This example is adapted from de Vilhena and Pottier (2021).</span></span><br><span class="line"><span class="comment"> * file: heap2stack.ml</span></span><br><span class="line"><span class="comment"> * compile: ocamlopt -I $(opam var lib)/multicont multicont.cmxa heap2stack.ml</span></span><br><span class="line"><span class="comment"> * run: ./a.out *)</span></span><br><span class="line"></span><br><span class="line"><span class="comment">(* We first require a little bit of setup. The following declares an</span></span><br><span class="line"><span class="comment"> operation `Twice' which we use to implement multiple returns. *)</span></span><br><span class="line"><span class="keyword">type</span> _ <span class="type">Effect</span>.t += <span class="type">Twice</span> : <span class="built_in">unit</span> <span class="type">Effect</span>.t</span><br><span class="line"></span><br><span class="line"><span class="comment">(* The handler `htwice' interprets `Twice' by simply invoking its</span></span><br><span class="line"><span class="comment"> continuation twice. *)</span></span><br><span class="line"><span class="keyword">let</span> htwice : (<span class="built_in">unit</span>, <span class="built_in">unit</span>) <span class="type">Effect</span>.<span class="type">Deep</span>.handler</span><br><span class="line"> = { retc = (<span class="keyword">fun</span> x -> x)</span><br><span class="line"> ; exnc = (<span class="keyword">fun</span> e -> raise e)</span><br><span class="line"> ; effc = (<span class="keyword">fun</span> (<span class="keyword">type</span> a) (eff : a <span class="type">Effect</span>.t) -></span><br><span class="line"> <span class="keyword">let</span> <span class="keyword">open</span> <span class="type">Effect</span>.<span class="type">Deep</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">match</span> eff <span class="keyword">with</span></span><br><span class="line"> | <span class="type">Twice</span> -> <span class="type">Some</span> (<span class="keyword">fun</span> (k : (a, _) continuation) -></span><br><span class="line"> continue (<span class="type">Multicont</span>.<span class="type">Deep</span>.clone_continuation k) <span class="literal">()</span>;</span><br><span class="line"> continue k <span class="literal">()</span>)</span><br><span class="line"> | _ -> <span class="type">None</span>) }</span><br><span class="line"></span><br><span class="line"><span class="comment">(* Now for the interesting stuff. In the code below, the compiler will</span></span><br><span class="line"><span class="comment"> perform an escape analysis on the reference `i' and deduce that it</span></span><br><span class="line"><span class="comment"> does not escape the local scope, because it is unaware of the</span></span><br><span class="line"><span class="comment"> semantics of `perform Twice', hence the optimiser will transform</span></span><br><span class="line"><span class="comment"> `i' into an immediate on the stack to save a heap allocation. As a</span></span><br><span class="line"><span class="comment"> consequence, the assertion `(!i = 1)' will succeed twice, whereas</span></span><br><span class="line"><span class="comment"> it should fail after the second return of `perform Twice'. *)</span></span><br><span class="line"><span class="keyword">let</span> heap2stack <span class="literal">()</span> =</span><br><span class="line"> <span class="type">Effect</span>.<span class="type">Deep</span>.match_with</span><br><span class="line"> (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> <span class="keyword">let</span> i = <span class="built_in">ref</span> <span class="number">0</span> <span class="keyword">in</span></span><br><span class="line"> <span class="type">Effect</span>.perform <span class="type">Twice</span>;</span><br><span class="line"> i := !i + <span class="number">1</span>;</span><br><span class="line"> <span class="type">Printf</span>.printf <span class="string">"i = %d\n%!"</span> !i;</span><br><span class="line"> <span class="keyword">assert</span> (!i = <span class="number">1</span>))</span><br><span class="line"> <span class="literal">()</span> htwice</span><br><span class="line"></span><br><span class="line"><span class="comment">(* The following does not trigger an assertion failure. *)</span></span><br><span class="line"><span class="keyword">let</span> _ = heap2stack <span class="literal">()</span></span><br><span class="line"></span><br><span class="line"><span class="comment">(* To fix this issue, we can wrap reference allocations in an instance</span></span><br><span class="line"><span class="comment"> of `Sys.opaque_identity'. However, this is not really a viable fix</span></span><br><span class="line"><span class="comment"> in general, as we may not have access to the client code that</span></span><br><span class="line"><span class="comment"> allocates the reference! *)</span></span><br><span class="line"><span class="keyword">let</span> heap2stack' <span class="literal">()</span> =</span><br><span class="line"> <span class="type">Effect</span>.<span class="type">Deep</span>.match_with</span><br><span class="line"> (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> <span class="keyword">let</span> i = <span class="type">Sys</span>.opaque_identity (<span class="built_in">ref</span> <span class="number">0</span>) <span class="keyword">in</span></span><br><span class="line"> <span class="type">Effect</span>.perform <span class="type">Twice</span>;</span><br><span class="line"> i := !i + <span class="number">1</span>;</span><br><span class="line"> <span class="type">Printf</span>.printf <span class="string">"i = %d\n%!"</span> !i;</span><br><span class="line"> <span class="keyword">assert</span> (!i = <span class="number">1</span>))</span><br><span class="line"> <span class="literal">()</span> htwice</span><br><span class="line"></span><br><span class="line"><span class="comment">(* The following triggers an assertion failure. *)</span></span><br><span class="line"><span class="keyword">let</span> _ = heap2stack' <span class="literal">()</span></span><br></pre></td></tr></table></figure> -]]></content> - <tags> - <tag>Technique</tag> - </tags> - </entry> - <entry> <title>金匮要略</title> <url>/2023/03/04/%E9%87%91%E5%8C%AE%E8%A6%81%E7%95%A5/</url> <content><![CDATA[<p>臟腑經絡先後病脈證第一問曰:上工治未病,何也?師曰:夫治未病者,見肝之病,知肝傳脾,當先實脾,四季脾王不受邪,即勿補之;中工不曉相傳,見肝之病,不解實脾,惟治肝也。</p> @@ -7406,6 +7406,19 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的� </tags> </entry> <entry> + <title>隐藏一些OCaml Effect的机制,让其语法在精神上更接近delimcc</title> + <url>/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/</url> + <content><![CDATA[<p><a href="https://github.com/kayceesrk/delimcc_of_fxhandler">delimcc_of_fxhandler这个库</a>在OCaml5的effect handlers上实现了一些delimcc原语(shift/reset, control/prompt这些):</p> +<figure class="highlight ocaml"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> p = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"><span class="keyword">assert</span> (<span class="literal">[]</span> = push_prompt p (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> <span class="number">1</span>::<span class="number">2</span>::take_subcont p (<span class="keyword">fun</span> _k -> <span class="literal">[]</span>)));</span><br><span class="line"><span class="keyword">assert</span> ([<span class="number">1</span>;<span class="number">2</span>] = push_prompt p (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> <span class="number">1</span>::<span class="number">2</span>::take_subcont p (<span class="keyword">fun</span> k -> push_subcont k <span class="literal">[]</span>)));</span><br><span class="line"><span class="keyword">assert</span> (<span class="number">135</span> =</span><br><span class="line"> <span class="keyword">let</span> p1 = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> p2 = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> p3 = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> pushtwice sk =</span><br><span class="line"> sk (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> sk (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> shift0 p2 (<span class="keyword">fun</span> sk2 -> sk2 (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> sk2 (<span class="keyword">fun</span> <span class="literal">()</span> -> <span class="number">3</span>))) <span class="literal">()</span>))</span><br><span class="line"> <span class="keyword">in</span></span><br><span class="line"> push_prompt p1 (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> push_prompt p2 (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> push_prompt p3 (<span class="keyword">fun</span> <span class="literal">()</span> -> shift0 p1 pushtwice <span class="literal">()</span>) + <span class="number">10</span>) + <span class="number">1</span>) + <span class="number">100</span>);</span><br><span class="line"></span><br><span class="line">print_endline <span class="string">"Success!"</span></span><br></pre></td></tr></table></figure> +<p>另外, <a href="https://github.com/avsm/ocaml/commits/effect-syntax">avsm这里</a>可以看到一些OCaml的Effect Syntax进展。</p> +<p>还有 <a href="https://github.com/dhil/ocaml-multicont">multi-shot continuations in OCaml</a>,在这个仓库里面还讨论了一些有趣的问题,例如,OCaml 编译器和runtime会做出一些假设从而进行一些优化,这些优化在使用multi-shot continutation时是不可取的(或完全错误的)。编译器优化导致错误的一个例子是堆到栈的转换,例如:</p> +<figure class="highlight ocaml"><table><tr><td class="code"><pre><span class="line"><span class="comment">(* An illustration of how the heap to stack optimisation is broken.</span></span><br><span class="line"><span class="comment"> * This example is adapted from de Vilhena and Pottier (2021).</span></span><br><span class="line"><span class="comment"> * file: heap2stack.ml</span></span><br><span class="line"><span class="comment"> * compile: ocamlopt -I $(opam var lib)/multicont multicont.cmxa heap2stack.ml</span></span><br><span class="line"><span class="comment"> * run: ./a.out *)</span></span><br><span class="line"></span><br><span class="line"><span class="comment">(* We first require a little bit of setup. The following declares an</span></span><br><span class="line"><span class="comment"> operation `Twice' which we use to implement multiple returns. *)</span></span><br><span class="line"><span class="keyword">type</span> _ <span class="type">Effect</span>.t += <span class="type">Twice</span> : <span class="built_in">unit</span> <span class="type">Effect</span>.t</span><br><span class="line"></span><br><span class="line"><span class="comment">(* The handler `htwice' interprets `Twice' by simply invoking its</span></span><br><span class="line"><span class="comment"> continuation twice. *)</span></span><br><span class="line"><span class="keyword">let</span> htwice : (<span class="built_in">unit</span>, <span class="built_in">unit</span>) <span class="type">Effect</span>.<span class="type">Deep</span>.handler</span><br><span class="line"> = { retc = (<span class="keyword">fun</span> x -> x)</span><br><span class="line"> ; exnc = (<span class="keyword">fun</span> e -> raise e)</span><br><span class="line"> ; effc = (<span class="keyword">fun</span> (<span class="keyword">type</span> a) (eff : a <span class="type">Effect</span>.t) -></span><br><span class="line"> <span class="keyword">let</span> <span class="keyword">open</span> <span class="type">Effect</span>.<span class="type">Deep</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">match</span> eff <span class="keyword">with</span></span><br><span class="line"> | <span class="type">Twice</span> -> <span class="type">Some</span> (<span class="keyword">fun</span> (k : (a, _) continuation) -></span><br><span class="line"> continue (<span class="type">Multicont</span>.<span class="type">Deep</span>.clone_continuation k) <span class="literal">()</span>;</span><br><span class="line"> continue k <span class="literal">()</span>)</span><br><span class="line"> | _ -> <span class="type">None</span>) }</span><br><span class="line"></span><br><span class="line"><span class="comment">(* Now for the interesting stuff. In the code below, the compiler will</span></span><br><span class="line"><span class="comment"> perform an escape analysis on the reference `i' and deduce that it</span></span><br><span class="line"><span class="comment"> does not escape the local scope, because it is unaware of the</span></span><br><span class="line"><span class="comment"> semantics of `perform Twice', hence the optimiser will transform</span></span><br><span class="line"><span class="comment"> `i' into an immediate on the stack to save a heap allocation. As a</span></span><br><span class="line"><span class="comment"> consequence, the assertion `(!i = 1)' will succeed twice, whereas</span></span><br><span class="line"><span class="comment"> it should fail after the second return of `perform Twice'. *)</span></span><br><span class="line"><span class="keyword">let</span> heap2stack <span class="literal">()</span> =</span><br><span class="line"> <span class="type">Effect</span>.<span class="type">Deep</span>.match_with</span><br><span class="line"> (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> <span class="keyword">let</span> i = <span class="built_in">ref</span> <span class="number">0</span> <span class="keyword">in</span></span><br><span class="line"> <span class="type">Effect</span>.perform <span class="type">Twice</span>;</span><br><span class="line"> i := !i + <span class="number">1</span>;</span><br><span class="line"> <span class="type">Printf</span>.printf <span class="string">"i = %d\n%!"</span> !i;</span><br><span class="line"> <span class="keyword">assert</span> (!i = <span class="number">1</span>))</span><br><span class="line"> <span class="literal">()</span> htwice</span><br><span class="line"></span><br><span class="line"><span class="comment">(* The following does not trigger an assertion failure. *)</span></span><br><span class="line"><span class="keyword">let</span> _ = heap2stack <span class="literal">()</span></span><br><span class="line"></span><br><span class="line"><span class="comment">(* To fix this issue, we can wrap reference allocations in an instance</span></span><br><span class="line"><span class="comment"> of `Sys.opaque_identity'. However, this is not really a viable fix</span></span><br><span class="line"><span class="comment"> in general, as we may not have access to the client code that</span></span><br><span class="line"><span class="comment"> allocates the reference! *)</span></span><br><span class="line"><span class="keyword">let</span> heap2stack' <span class="literal">()</span> =</span><br><span class="line"> <span class="type">Effect</span>.<span class="type">Deep</span>.match_with</span><br><span class="line"> (<span class="keyword">fun</span> <span class="literal">()</span> -></span><br><span class="line"> <span class="keyword">let</span> i = <span class="type">Sys</span>.opaque_identity (<span class="built_in">ref</span> <span class="number">0</span>) <span class="keyword">in</span></span><br><span class="line"> <span class="type">Effect</span>.perform <span class="type">Twice</span>;</span><br><span class="line"> i := !i + <span class="number">1</span>;</span><br><span class="line"> <span class="type">Printf</span>.printf <span class="string">"i = %d\n%!"</span> !i;</span><br><span class="line"> <span class="keyword">assert</span> (!i = <span class="number">1</span>))</span><br><span class="line"> <span class="literal">()</span> htwice</span><br><span class="line"></span><br><span class="line"><span class="comment">(* The following triggers an assertion failure. *)</span></span><br><span class="line"><span class="keyword">let</span> _ = heap2stack' <span class="literal">()</span></span><br></pre></td></tr></table></figure> +]]></content> + <tags> + <tag>Technique</tag> + </tags> + </entry> + <entry> <title>领域驱动设计中的“聚合根”</title> <url>/2025/03/13/%E9%A2%86%E5%9F%9F%E9%A9%B1%E5%8A%A8%E8%AE%BE%E8%AE%A1%E4%B8%AD%E7%9A%84%E2%80%9C%E8%81%9A%E5%90%88%E6%A0%B9%E2%80%9D/</url> <content><