summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2025/11/26/二〇二五年十一月二十六日/index.html8
-rw-r--r--search.xml418
2 files changed, 213 insertions, 213 deletions
diff --git a/2025/11/26/二〇二五年十一月二十六日/index.html b/2025/11/26/二〇二五年十一月二十六日/index.html
index 757d9c09..f70d5dad 100644
--- a/2025/11/26/二〇二五年十一月二十六日/index.html
+++ b/2025/11/26/二〇二五年十一月二十六日/index.html
@@ -187,10 +187,10 @@
<p>我蹲在地铁口的台阶上,指尖戳着手机屏保里的枇杷树。屏幕亮度调得很低,像浸在晚春的雾里,那是去年清明回家拍的,老家后山上的枇杷树正开着花,淡白色的瓣子落得他肩头都是,陈桉站在树底下笑,说我像个移动的花筐。</p>
<p>吸了吸鼻子,风裹着槐花香吹过来,混着煎饼果子的油味,我把手机塞进包里。包里还装着早上买的包子,凉得发硬。</p>
<p>地铁呼啸着进站,我跟着人群挤上去,肩膀被撞了一下,电脑包的背带勒得锁骨发疼。旁边的阿姨抱着个小孩,小孩手里举着根糖葫芦,糖稀滴在我的裤子上,留下个黏糊糊的印子。我盯着那个印子,忽然想起小时候陈桉带我去镇上买糖葫芦,我咬得太急,糖稀粘在下巴上,陈桉用袖子给我擦,结果把我的脸擦得更花,两个人笑得上气不接下气,连卖糖葫芦的老爷爷都跟着笑。</p>
-<p>&quot;下一站,国贸。&quot;地铁广播里的女声冷冰冰的。我拽了拽背包带,往车门方向挪了挪。国贸站的人永远那么多,像一群被挤散的蚂蚁,我跟着人流往出口走,鞋子踩在瓷砖上,发出清脆的响声。</p>
+<p>&quot;下一站,国贸。&quot;地铁广播里的女声冷冰冰的。我拽了拽背包带,往车门方向挪了挪。国贸站的人永远那么多,像一群被挤散的蚂蚁,我跟着人流往出口走,鞋子踩在瓷砖上,发出沉闷的响声。</p>
<p>出了地铁口,天空已经暗下来,写字楼的灯光像撒了一地碎钻。我抬头看了眼自己公司的楼层,窗户里还亮着灯,叹了口气,摸出手机给同事发消息:“我到楼下了,需求改好了吗?”</p>
<p>同时回复得很快:&quot;改好了,就等你过来审。&quot;后面跟着个哭脸表情。</p>
-<p>我把手机放进兜里,往写字楼走。路过便利店的时候停下来,买了瓶冰可乐。可乐罐贴在脸上,凉意透过皮肤渗进骨头里,想起去年晚春,陈桉带我去山上玩,我们坐在山顶的石头上,陈桉举着瓶橘子汽水,说:“暮秋,你看,山下的房子像不像积木?”,顺着她的手指看过去,真的,那些低矮的房子挤在一起,像她小时候玩的积木。陈桉又说:“等我长大了,要站在更高的地方,看更远的风景。”,我问:&quot;那我呢?&quot;陈桉笑:“你当然要跟着我啊,不然谁给我买橘子汽水?”</p>
+<p>我把手机放进兜里,往写字楼走。路过便利店的时候停下来,买了瓶冰可乐。可乐罐贴在脸上,凉意透过皮肤渗进骨头里,想起去年晚春,陈桉带我去山上玩,我们坐在山顶的石头上,陈桉举着瓶橘子汽水,说:“暮秋,你看,山下的房子像不像积木?”,顺着她的手指看过去,真的,那些低矮的房子挤在一起,像我们小时候玩的积木。陈桉又说:“等我长大了,要站在更高的地方,看更远的风景。”,我问:&quot;那我呢?&quot;陈桉笑:“你当然要跟着我啊,不然谁给我买橘子汽水?”</p>
<p>回过神,接过可乐,付了钱。走出便利店,风更大了,吹得我的头发乱飘,用手理了理,继续往写字楼走。</p>
<p>加班到十点,出来的时候街上的人已经很少了,路灯把影子拉得很长。</p>
<p>我拦了辆出租车,报了地址。司机师傅开着收音机,里面在放老歌:“春风它吹醒了大地,吹绿了杨柳,吹开了桃花…”</p>
@@ -200,10 +200,10 @@
<p>手机在沙发上震动,我拿起来看,是陈桉的消息:&quot;暮秋,今天山上的枇杷开始结果了,比去年的大。&quot;后面跟着张照片,照片里的枇杷挂在枝头,青绿色的,像小拳头。</p>
<p>我盯着照片,手指在屏幕上划了划,回复:“我昨天梦见你了,你站在山巅喊我。”</p>
<p>陈桉回复得很快:&quot;那是因为我想你了啊。&quot;后面跟着个笑脸表情。</p>
-<p>我笑了笑,把手机放下。走到窗户边,推开窗户,风卷着晚春的味道进来——有槐花香,有青草味,还有一点点枇杷花的味道。抬头看星星,天上的星星很少,但很亮,像家乡的星星。突然想起陈桉说的,那些星星是祖先的眼睛,在看着我们。</p>
+<p>我笑了笑,把手机放下。走到窗户边,推开窗户,风卷着晚春的味道进来——有槐花香,有青草味,还有一点点枇杷花的味道。抬头看星星,天上的星星很少,但很亮,像家乡的星星。想起陈桉说的,那些星星是祖先的眼睛,在看着我们。</p>
<p>忽然听见楼下有猫叫,探出头去,看见一只黑白相间的猫,正蹲在楼下的台阶上,盯着我看,我对着猫招了招手,猫叫了一声,转身跑了。</p>
<p>再缩回身子,关上窗户,回到沙发上。拿起手机,又看了看陈桉的消息。然后,我打开日记,写下:“今天的晚春,风里有枇杷花的味道。我梦见陈桉,她站在山巅,喊我’暮秋,快上来’。我想,也许我该回去看看了。”</p>
-<p>放下笔,静静地靠在沙发上,闭上眼睛。窗外的风还在吹,吹得窗帘沙沙作响。我想起小时候,陈桉带我去山上玩,我们躺在草地上,看星星。陈桉说:“暮秋,等我们老了,还要一起去山上看星星。”,我问:&quot;那如果我走了呢?&quot;陈桉说:“那我就站在山巅,喊你的名字,直到你听见。”</p>
+<p>放下笔,静静地靠在沙发上,闭上眼睛。窗外的风还在吹,吹得窗帘沙沙作响。又想起小时候,陈桉带我去山上玩,我们躺在草地上,看星星。陈桉说:“暮秋,等我们老了,还要一起去山上看星星。”,我问:&quot;那如果我走了呢?&quot;陈桉说:“那我就站在山巅,喊你的名字,直到你听见。”</p>
<p>我笑了,眼泪却顺着眼角流下来,摸出手机,给陈桉发了条消息:“明年晚春,我回去陪你摘枇杷。”</p>
<p>消息送达那一刻,突然听见窗外的风里,有个熟悉的声音在喊:“暮秋,快上来。”</p>
<p>我睁开眼睛,窗外的星星很亮,像陈桉的眼睛。</p>
diff --git a/search.xml b/search.xml
index 263c14ac..5f5c78e5 100644
--- a/search.xml
+++ b/search.xml
@@ -1315,6 +1315,79 @@ await prisma.$transaction(async tx =&gt; &#123;
</tags>
</entry>
<entry>
+ <title>OCaml News 2024-5</title>
+ <url>/2024/06/27/OCaml-News-2024-5/</url>
+ <content><![CDATA[<h2 id="语言的发展"><a class="header-anchor" href="#语言的发展">¶</a>语言的发展</h2>
+<ul>
+<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/13097">Immutable arrays #13097: This PR proposes to add immutable arrays to OCaml.</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/13199">Support running native debuggers in ocamltest #13199</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/13152">The Pattern-Matching Bug: fix totality information by gasche · Pull Request #13152 · ocaml/ocaml</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/11974%23discussion_r1621832545">Add loongarch architecture support #11974</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/13101">Add Stdlib.todo #13101</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//tarides.com/blog/2024-06-26-enhancing-the-ocaml-org-community-page-boosting-ux-and-ui-based-on-user-research/">Enhancing the OCaml.org Community Page: Boosting UX and UI Based on User Research.</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//tarides.com/blog/2024-05-22-launching-the-first-class-windows-project/">Launching the First-Class Windows Project</a>.</li>
+</ul>
+<h2 id="新消息"><a class="header-anchor" href="#新消息">¶</a>新消息</h2>
+<ul>
+<li>
+<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-project-wide-occurrences-in-merlin-and-lsp/14847">[ANN] Project wide occurrences in Merlin and LSP</a>.</p>
+</li>
+<li>
+<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-opam-2-2-0-rc1-release/14842">[ANN] opam 2.2.0 rc1 release</a>.</p>
+</li>
+<li>
+<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-first-release-of-baby/14840">[ANN] First release of baby</a>.</p>
+</li>
+<li>
+<p><a href="https://link.zhihu.com/?target=https%3A//github.com/fpottier/baby">baby</a> is an OCaml library that offers several implementations of balanced binary search trees.</p>
+</li>
+<li>
+<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-preview-of-stripe-client-and-mock-server-dkstdrestapis/14841">[ANN] Preview of Stripe client and mock server - DkStdRestApis</a>.</p>
+</li>
+<li>
+<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-caisar-release-2-0-a-platform-for-characterizing-ai-safety-and-robustness/14831">[ANN] CAISAR release 2.0, a platform for characterizing AI safety and robustness</a>.</p>
+</li>
+<li>
+<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-forester-4-1/14800">[ANN] Forester 4.1</a>.</p>
+</li>
+<li>
+<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-dream-html-pure-html-3-5-2/14808">[ANN] dream-html &amp; pure-html 3.5.2</a></p>
+</li>
+</ul>
+<h2 id="有价值的文章"><a class="header-anchor" href="#有价值的文章">¶</a>有价值的文章</h2>
+<ul>
+<li><a href="https://link.zhihu.com/?target=https%3A//tarides.com/blog/2024-06-19-keeping-up-with-the-compiler-how-we-help-maintain-the-ocaml-language/">Keeping Up With the Compiler: How we Help Maintain the OCaml Language</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/10995">Explain mapping between OCaml memory model and C.</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//xavierleroy.org/CdF/2023-2024/index.html">Control structures – Xavier Leroy</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//dev.to/chshersh/8-months-of-ocaml-after-8-years-of-haskell-in-production-h96">8 months of OCaml after 8 years of Haskell in production</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//hypirion.com/musings/getting-ocaml-through-the-eye-of-a-needle">Getting OCaml Through the Eye of a Needle</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//tarides.com/blog/2024-06-05-secure-from-the-ground-up-introducing-the-fides-project-combining-risc-v-and-mirageos/">Secure From the Ground Up: Introducing the FIDES Project Combining RISC-V and MirageOS.</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//tarides.com/blog/2024-05-29-effective-ml-through-merlin-s-destruct-command/">Effective ML Through Merlin’s Destruct Command.</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//blog.osau.re/articles/reproducible.html">Dinosaure’s website - Reproducibility!</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/experiments-in-jitting/14853">Experiments in JITting</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/how-to-write-an-efficient-cp-r-clone-with-eio/14848">How to write an efficient ‘cp -R’ clone with Eio?</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/generating-infix-extension-nodes-with-ppxlib/14833">Generating infix extension nodes with Ppxlib</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/this-made-my-day-float-to-string-and-string-of-float-without-loss-of-precision/14825">This made my day (float to string and string of float without loss of precision)</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/help-with-cryptic-dependency-cycle-compile-errors-using-dune-build/14864">Help with cryptic dependency cycle compile errors using <code>dune build</code></a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/why-does-relaxed-value-restriction-treat-function-types-differently/14802">Why does relaxed value restriction treat function types differently?</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/binding-existentials-in-a-non-uniform-gadt/14809">Binding existentials in a non-uniform GADT</a>.</li>
+</ul>
+<h2 id="有趣的项目"><a class="header-anchor" href="#有趣的项目">¶</a>有趣的项目</h2>
+<ul>
+<li><a href="https://link.zhihu.com/?target=https%3A//ocaml.org/p/ocaml-index/latest">ocaml-index 1.0 (latest) · OCaml Package: A tool that indexes value usages from cmt files</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//ocaml.org/p/fileutils/latest">fileutils 0.6.4 (latest) · OCaml Package: API to manipulate files (POSIX like) and filenames.</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//ocaml.org/p/pure-html/latest">pure-html 3.5.2 (latest) · OCaml Package</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//github.com/fpottier/baby">GitHub - fpottier/baby: A balanced binary search tree library for OCaml</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//github.com/akabe/ocaml-jupyter">GitHub - akabe/ocaml-jupyter: An OCaml kernel for Jupyter (IPython) notebook</a>.</li>
+<li><a href="https://link.zhihu.com/?target=https%3A//github.com/robur-coop/orb">Github - robur-coop/orb: check opam package reproductibility.</a></li>
+<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml-multicore/dscheck%23motivation">Github - ocaml-multicore/dscheck: Experimental model checker for testing concurrent algorithms.</a></li>
+</ul>
+]]></content>
+ <tags>
+ <tag>Technique</tag>
+ </tags>
+ </entry>
+ <entry>
<title>OCaml News 2024-4</title>
<url>/2024/07/01/OCaml-News-2024-4/</url>
<content><![CDATA[<h2 id="那么接下来"><a class="header-anchor" href="#那么接下来">¶</a>那么接下来</h2>
@@ -1486,79 +1559,6 @@ await prisma.$transaction(async tx =&gt; &#123;
</tags>
</entry>
<entry>
- <title>OCaml News 2024-5</title>
- <url>/2024/06/27/OCaml-News-2024-5/</url>
- <content><![CDATA[<h2 id="语言的发展"><a class="header-anchor" href="#语言的发展">¶</a>语言的发展</h2>
-<ul>
-<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/13097">Immutable arrays #13097: This PR proposes to add immutable arrays to OCaml.</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/13199">Support running native debuggers in ocamltest #13199</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/13152">The Pattern-Matching Bug: fix totality information by gasche · Pull Request #13152 · ocaml/ocaml</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/11974%23discussion_r1621832545">Add loongarch architecture support #11974</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/13101">Add Stdlib.todo #13101</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//tarides.com/blog/2024-06-26-enhancing-the-ocaml-org-community-page-boosting-ux-and-ui-based-on-user-research/">Enhancing the OCaml.org Community Page: Boosting UX and UI Based on User Research.</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//tarides.com/blog/2024-05-22-launching-the-first-class-windows-project/">Launching the First-Class Windows Project</a>.</li>
-</ul>
-<h2 id="新消息"><a class="header-anchor" href="#新消息">¶</a>新消息</h2>
-<ul>
-<li>
-<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-project-wide-occurrences-in-merlin-and-lsp/14847">[ANN] Project wide occurrences in Merlin and LSP</a>.</p>
-</li>
-<li>
-<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-opam-2-2-0-rc1-release/14842">[ANN] opam 2.2.0 rc1 release</a>.</p>
-</li>
-<li>
-<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-first-release-of-baby/14840">[ANN] First release of baby</a>.</p>
-</li>
-<li>
-<p><a href="https://link.zhihu.com/?target=https%3A//github.com/fpottier/baby">baby</a> is an OCaml library that offers several implementations of balanced binary search trees.</p>
-</li>
-<li>
-<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-preview-of-stripe-client-and-mock-server-dkstdrestapis/14841">[ANN] Preview of Stripe client and mock server - DkStdRestApis</a>.</p>
-</li>
-<li>
-<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-caisar-release-2-0-a-platform-for-characterizing-ai-safety-and-robustness/14831">[ANN] CAISAR release 2.0, a platform for characterizing AI safety and robustness</a>.</p>
-</li>
-<li>
-<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-forester-4-1/14800">[ANN] Forester 4.1</a>.</p>
-</li>
-<li>
-<p><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/ann-dream-html-pure-html-3-5-2/14808">[ANN] dream-html &amp; pure-html 3.5.2</a></p>
-</li>
-</ul>
-<h2 id="有价值的文章"><a class="header-anchor" href="#有价值的文章">¶</a>有价值的文章</h2>
-<ul>
-<li><a href="https://link.zhihu.com/?target=https%3A//tarides.com/blog/2024-06-19-keeping-up-with-the-compiler-how-we-help-maintain-the-ocaml-language/">Keeping Up With the Compiler: How we Help Maintain the OCaml Language</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml/ocaml/pull/10995">Explain mapping between OCaml memory model and C.</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//xavierleroy.org/CdF/2023-2024/index.html">Control structures – Xavier Leroy</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//dev.to/chshersh/8-months-of-ocaml-after-8-years-of-haskell-in-production-h96">8 months of OCaml after 8 years of Haskell in production</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//hypirion.com/musings/getting-ocaml-through-the-eye-of-a-needle">Getting OCaml Through the Eye of a Needle</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//tarides.com/blog/2024-06-05-secure-from-the-ground-up-introducing-the-fides-project-combining-risc-v-and-mirageos/">Secure From the Ground Up: Introducing the FIDES Project Combining RISC-V and MirageOS.</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//tarides.com/blog/2024-05-29-effective-ml-through-merlin-s-destruct-command/">Effective ML Through Merlin’s Destruct Command.</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//blog.osau.re/articles/reproducible.html">Dinosaure’s website - Reproducibility!</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/experiments-in-jitting/14853">Experiments in JITting</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/how-to-write-an-efficient-cp-r-clone-with-eio/14848">How to write an efficient ‘cp -R’ clone with Eio?</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/generating-infix-extension-nodes-with-ppxlib/14833">Generating infix extension nodes with Ppxlib</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/this-made-my-day-float-to-string-and-string-of-float-without-loss-of-precision/14825">This made my day (float to string and string of float without loss of precision)</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/help-with-cryptic-dependency-cycle-compile-errors-using-dune-build/14864">Help with cryptic dependency cycle compile errors using <code>dune build</code></a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/why-does-relaxed-value-restriction-treat-function-types-differently/14802">Why does relaxed value restriction treat function types differently?</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//discuss.ocaml.org/t/binding-existentials-in-a-non-uniform-gadt/14809">Binding existentials in a non-uniform GADT</a>.</li>
-</ul>
-<h2 id="有趣的项目"><a class="header-anchor" href="#有趣的项目">¶</a>有趣的项目</h2>
-<ul>
-<li><a href="https://link.zhihu.com/?target=https%3A//ocaml.org/p/ocaml-index/latest">ocaml-index 1.0 (latest) · OCaml Package: A tool that indexes value usages from cmt files</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//ocaml.org/p/fileutils/latest">fileutils 0.6.4 (latest) · OCaml Package: API to manipulate files (POSIX like) and filenames.</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//ocaml.org/p/pure-html/latest">pure-html 3.5.2 (latest) · OCaml Package</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//github.com/fpottier/baby">GitHub - fpottier/baby: A balanced binary search tree library for OCaml</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//github.com/akabe/ocaml-jupyter">GitHub - akabe/ocaml-jupyter: An OCaml kernel for Jupyter (IPython) notebook</a>.</li>
-<li><a href="https://link.zhihu.com/?target=https%3A//github.com/robur-coop/orb">Github - robur-coop/orb: check opam package reproductibility.</a></li>
-<li><a href="https://link.zhihu.com/?target=https%3A//github.com/ocaml-multicore/dscheck%23motivation">Github - ocaml-multicore/dscheck: Experimental model checker for testing concurrent algorithms.</a></li>
-</ul>
-]]></content>
- <tags>
- <tag>Technique</tag>
- </tags>
- </entry>
- <entry>
<title>OCaml News 2024-6</title>
<url>/2024/07/23/OCaml-News-2024-6/</url>
<content><![CDATA[<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line"> ^o3</span><br><span class="line">~/\_/\_|)</span><br><span class="line">|/=_=\|</span><br><span class="line">&quot; &quot;</span><br></pre></td></tr></table></figure>
@@ -2001,28 +2001,6 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
- <title>Radiographic Absence of the Left Humeral Head</title>
- <url>/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/</url>
- <content><![CDATA[<p>A 67-year-old man with thoracolumbar scoliosis, poor mobility, and history of frequent falls presented to the emergency department with 2 months of left shoulder pain, stiffness and reduced range of motion, and numbness and paresthesias in his left upper extremity.</p>
-<p>Ten years prior to presentation, he underwent surgical decompression for syringomyelia.</p>
-<p>A magnetic resonance imaging (MRI) scan of his cervical and thoracic spine performed 2 years prior to presentation revealed a recurrent syrinx extending from Cl C1 to T11, which was not resected because it did not cause symptoms at that time.</p>
-<p>On physical examination, he had mild tenderness to palpation and reduced range of motion of the left shoulder with abduction and flexion limited to 120° (normal range of motion, 180°).</p>
-<p>The left scapular muscles were atrophic, and pain and temperature sensation were reduced in his proximal left arm, and dorsal aspect of his left shoulder.</p>
-<p>His complete blood cell count, serum glucose levels, C-reactive protein levels, and erythrocyte sedimentation rate were normal.</p>
-<p>Results of tests for rheumatoid factor and antinuclear antibody were negative.</p>
-<p>Left shoulder radiograph showed complete absence of the left humeral head and a well-demarcated smooth osseous margin of the proximal humerus with associated soft tissue swelling and periarticular calcification.</p>
-<p>A chest radiograph taken 2 years prior revealed a normal left shoulder joint. The patient was hospitalized for further evaluation and treatment.</p>
-<ul>
-<li><a href="/papers/Radiographic%20Absence%20of%20the%20Left%20Humeral%20Head.pdf">报告原档</a></li>
-</ul>
-<p>这里提到了一种罕见的进展性疾病, 叫Charcot肩, 是一种神经性关节病变,特点是关节迅速被破坏和相关软组织肿胀。患者通常表现为肩部逐渐增大的肿胀,可能伴有疼痛或无痛,肩部无力和活动范围减少。<br>
-大约80%的Charcot肩患者有脊髓空洞症, 表现为脊髓中的液体充满腔体</p>
-]]></content>
- <tags>
- <tag>Medicine</tag>
- </tags>
- </entry>
- <entry>
<title>Repository pattern in Typescript</title>
<url>/2025/02/19/Repository-pattern-in-Typescript/</url>
<content><![CDATA[<blockquote>
@@ -2062,6 +2040,28 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
+ <title>Radiographic Absence of the Left Humeral Head</title>
+ <url>/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/</url>
+ <content><![CDATA[<p>A 67-year-old man with thoracolumbar scoliosis, poor mobility, and history of frequent falls presented to the emergency department with 2 months of left shoulder pain, stiffness and reduced range of motion, and numbness and paresthesias in his left upper extremity.</p>
+<p>Ten years prior to presentation, he underwent surgical decompression for syringomyelia.</p>
+<p>A magnetic resonance imaging (MRI) scan of his cervical and thoracic spine performed 2 years prior to presentation revealed a recurrent syrinx extending from Cl C1 to T11, which was not resected because it did not cause symptoms at that time.</p>
+<p>On physical examination, he had mild tenderness to palpation and reduced range of motion of the left shoulder with abduction and flexion limited to 120° (normal range of motion, 180°).</p>
+<p>The left scapular muscles were atrophic, and pain and temperature sensation were reduced in his proximal left arm, and dorsal aspect of his left shoulder.</p>
+<p>His complete blood cell count, serum glucose levels, C-reactive protein levels, and erythrocyte sedimentation rate were normal.</p>
+<p>Results of tests for rheumatoid factor and antinuclear antibody were negative.</p>
+<p>Left shoulder radiograph showed complete absence of the left humeral head and a well-demarcated smooth osseous margin of the proximal humerus with associated soft tissue swelling and periarticular calcification.</p>
+<p>A chest radiograph taken 2 years prior revealed a normal left shoulder joint. The patient was hospitalized for further evaluation and treatment.</p>
+<ul>
+<li><a href="/papers/Radiographic%20Absence%20of%20the%20Left%20Humeral%20Head.pdf">报告原档</a></li>
+</ul>
+<p>这里提到了一种罕见的进展性疾病, 叫Charcot肩, 是一种神经性关节病变,特点是关节迅速被破坏和相关软组织肿胀。患者通常表现为肩部逐渐增大的肿胀,可能伴有疼痛或无痛,肩部无力和活动范围减少。<br>
+大约80%的Charcot肩患者有脊髓空洞症, 表现为脊髓中的液体充满腔体</p>
+]]></content>
+ <tags>
+ <tag>Medicine</tag>
+ </tags>
+ </entry>
+ <entry>
<title>Rescript and React Native</title>
<url>/2024/01/22/Rescript-React-Native/</url>
<content><![CDATA[<p>Rescript 对 React Native 的支持还算可以,但如今的 RN 已经是 Expo 的 RN 了,所以仍然有些落后,在这个 template 中,我测试了 rescript + rescript-react-native + expo + nativewind 的组合,可以跑起来:</p>
@@ -2115,28 +2115,6 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
- <title>Rust NewType 模式</title>
- <url>/2023/05/03/Rust-NewType-%E6%A8%A1%E5%BC%8F/</url>
- <content><![CDATA[<p>New Type模式是一种软件设计模式,用于在已有类型的基础上创建一个新的类型。在Rust中,这通常是通过定义一个结构体,其中只包含一个单一成员。这个结构体(New Type)对外提供了一个新的、独立的类型,用于对原始类型增加额外的语义或限制。</p>
-<h2 id="加强类型安全"><a class="header-anchor" href="#加强类型安全">¶</a>加强类型安全</h2>
-<figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">Meters</span>(<span class="type">f64</span>);</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Feet</span>(<span class="type">f64</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="variable">length_in_meters</span> = <span class="title function_ invoke__">Meters</span>(<span class="number">100.0</span>);</span><br><span class="line"><span class="keyword">let</span> <span class="variable">length_in_feet</span> = <span class="title function_ invoke__">Feet</span>(<span class="number">328.084</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 编译器会防止以下代码执行,因为类型不匹配</span></span><br><span class="line"><span class="comment">// let wrong_length = Meters(length_in_feet); // 编译错误</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 正确的构造</span></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">add_lengths</span>(length1: Meters, length2: Meters) <span class="punctuation">-&gt;</span> Meters &#123;</span><br><span class="line"> <span class="title function_ invoke__">Meters</span>(length1.<span class="number">0</span> + length2.<span class="number">0</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-<p>这个例子使用 newtype 模式避免将原始类型f64用于不同的量度,从而增强了类型的安全性。</p>
-<h2 id="实现特定-trait"><a class="header-anchor" href="#实现特定-trait">¶</a>实现特定 trait</h2>
-<figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">Kilometers</span>(<span class="type">f64</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">impl</span> <span class="title class_">Kilometers</span> &#123;</span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">to_miles</span>(&amp;<span class="keyword">self</span>) <span class="punctuation">-&gt;</span> <span class="type">f64</span> &#123;</span><br><span class="line"> <span class="keyword">self</span>.<span class="number">0</span> * <span class="number">0.621371</span></span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="variable">distance</span> = <span class="title function_ invoke__">Kilometers</span>(<span class="number">10.0</span>);</span><br><span class="line"><span class="built_in">println!</span>(<span class="string">&quot;The distance in miles is &#123;&#125;&quot;</span>, distance.<span class="title function_ invoke__">to_miles</span>());</span><br></pre></td></tr></table></figure>
-<p>这里,Kilometers有一个方法to_miles,该方法是不会影响其他f64数据的。如果我们有另一个表示温度的f64类型,就不会意外调用到与距离相关的方法。</p>
-<p>New Type模式同样适用于对<code>Box&lt;dyn SomeTrait&gt;</code>类型的包装,这可以在需要动态分派(动态调用实现了某个接口的不同类型的对象的方法)的时候提供便利。通过创建一个New Type来包装这样的<code>Box&lt;dyn SomeTrait&gt;</code>类型,可以提供自定义的方法或实现更多的trait,同时也可以让API更加清晰和易于使用。</p>
-<h2 id="零成本抽象"><a class="header-anchor" href="#零成本抽象">¶</a>零成本抽象</h2>
-<p>在Rust中,New Type模式不仅是类型安全的,还是一种零成本抽象。这是因为Rust编译器在编译时期会进行足够的优化,以确保New Type的使用没有运行时开销。 Rust的零成本抽象原则确保了抽象不会引入额外的运行时成本。例如,当你使用Meters这样的New Type时,Rust确保:</p>
-<ol>
-<li>无额外内存开销:Meters只包含一个f64,在内存中的表现和单独的f64是一样的。</li>
-<li>无额外运行时开销:使用Meters时,性能和直接使用f64完全相同。编译器会移除任何关于New Type的包装和解包的代码。</li>
-</ol>
-]]></content>
- <tags>
- <tag>Technique</tag>
- </tags>
- </entry>
- <entry>
<title>Rust Partial 语义</title>
<url>/2023/05/02/Rust-Partial-%E8%AF%AD%E4%B9%89/</url>
<content><![CDATA[<blockquote>
@@ -2165,6 +2143,28 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
+ <title>Rust NewType 模式</title>
+ <url>/2023/05/03/Rust-NewType-%E6%A8%A1%E5%BC%8F/</url>
+ <content><![CDATA[<p>New Type模式是一种软件设计模式,用于在已有类型的基础上创建一个新的类型。在Rust中,这通常是通过定义一个结构体,其中只包含一个单一成员。这个结构体(New Type)对外提供了一个新的、独立的类型,用于对原始类型增加额外的语义或限制。</p>
+<h2 id="加强类型安全"><a class="header-anchor" href="#加强类型安全">¶</a>加强类型安全</h2>
+<figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">Meters</span>(<span class="type">f64</span>);</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Feet</span>(<span class="type">f64</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="variable">length_in_meters</span> = <span class="title function_ invoke__">Meters</span>(<span class="number">100.0</span>);</span><br><span class="line"><span class="keyword">let</span> <span class="variable">length_in_feet</span> = <span class="title function_ invoke__">Feet</span>(<span class="number">328.084</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 编译器会防止以下代码执行,因为类型不匹配</span></span><br><span class="line"><span class="comment">// let wrong_length = Meters(length_in_feet); // 编译错误</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 正确的构造</span></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">add_lengths</span>(length1: Meters, length2: Meters) <span class="punctuation">-&gt;</span> Meters &#123;</span><br><span class="line"> <span class="title function_ invoke__">Meters</span>(length1.<span class="number">0</span> + length2.<span class="number">0</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>这个例子使用 newtype 模式避免将原始类型f64用于不同的量度,从而增强了类型的安全性。</p>
+<h2 id="实现特定-trait"><a class="header-anchor" href="#实现特定-trait">¶</a>实现特定 trait</h2>
+<figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">Kilometers</span>(<span class="type">f64</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">impl</span> <span class="title class_">Kilometers</span> &#123;</span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">to_miles</span>(&amp;<span class="keyword">self</span>) <span class="punctuation">-&gt;</span> <span class="type">f64</span> &#123;</span><br><span class="line"> <span class="keyword">self</span>.<span class="number">0</span> * <span class="number">0.621371</span></span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="variable">distance</span> = <span class="title function_ invoke__">Kilometers</span>(<span class="number">10.0</span>);</span><br><span class="line"><span class="built_in">println!</span>(<span class="string">&quot;The distance in miles is &#123;&#125;&quot;</span>, distance.<span class="title function_ invoke__">to_miles</span>());</span><br></pre></td></tr></table></figure>
+<p>这里,Kilometers有一个方法to_miles,该方法是不会影响其他f64数据的。如果我们有另一个表示温度的f64类型,就不会意外调用到与距离相关的方法。</p>
+<p>New Type模式同样适用于对<code>Box&lt;dyn SomeTrait&gt;</code>类型的包装,这可以在需要动态分派(动态调用实现了某个接口的不同类型的对象的方法)的时候提供便利。通过创建一个New Type来包装这样的<code>Box&lt;dyn SomeTrait&gt;</code>类型,可以提供自定义的方法或实现更多的trait,同时也可以让API更加清晰和易于使用。</p>
+<h2 id="零成本抽象"><a class="header-anchor" href="#零成本抽象">¶</a>零成本抽象</h2>
+<p>在Rust中,New Type模式不仅是类型安全的,还是一种零成本抽象。这是因为Rust编译器在编译时期会进行足够的优化,以确保New Type的使用没有运行时开销。 Rust的零成本抽象原则确保了抽象不会引入额外的运行时成本。例如,当你使用Meters这样的New Type时,Rust确保:</p>
+<ol>
+<li>无额外内存开销:Meters只包含一个f64,在内存中的表现和单独的f64是一样的。</li>
+<li>无额外运行时开销:使用Meters时,性能和直接使用f64完全相同。编译器会移除任何关于New Type的包装和解包的代码。</li>
+</ol>
+]]></content>
+ <tags>
+ <tag>Technique</tag>
+ </tags>
+ </entry>
+ <entry>
<title>Rust 虚表布局规则介绍</title>
<url>/2023/05/01/Rust-%E8%99%9A%E8%A1%A8%E5%B8%83%E5%B1%80%E8%A7%84%E5%88%99%E4%BB%8B%E7%BB%8D/</url>
<content><![CDATA[<p>在 Rust 中,一个指向未知大小对象(!Sized)的引用或指针被实现为一个由两个 usize 大小的域构成的胖指针。这两个域中,其中一个域保存了被引用或被指向的对象的地址,另一个域保存了一个名为 metadata 的数据。对于 slice 的引用或指针来说,其 metadata 为 slice 的长度。对于 trait object 的引用或指针来说,其 metadata 为虚表(vtable)地址。与 C++ 虚表类似,Rust 虚表的存在使得诸多动态语言特性得以实现,例如动态派发(dynamic dispatch)、向上转换(upcasting)、向下转换(downcast)等。本文将对 Rust 中虚表的布局规则进行简要介绍,并在此过程中对 Rust 中若干动态特性的实现方法进行简要介绍。</p>
@@ -2831,6 +2831,83 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
+ <title>肠易激综合征 (IBS) 的病理学与药物治疗</title>
+ <url>/2025/06/30/ibs/</url>
+ <content><![CDATA[<p>肠易激综合征 (Irritable Bowel Syndrome, IBS) 是一种常见的功能性胃肠病。其核心特征是在没有发现任何器质性病变(如炎症、溃疡或肿瘤)的情况下,患者长期经历腹痛、腹胀,并伴有排便习惯的改变(腹泻、便秘或两者交替)。</p>
+<h3 id="一、-肠易激综合征的病理生理学"><a class="header-anchor" href="#一、-肠易激综合征的病理生理学">¶</a>一、 肠易激综合征的病理生理学</h3>
+<p>IBS 的病理生理机制非常复杂,并非由单一原因导致,而是多种因素相互作用的结果。目前的医学研究认为,其主要与以下几个核心机制有关:</p>
+<h4 id="1-脑-肠轴功能紊乱-Disorders-of-the-Brain-Gut-Axis"><a class="header-anchor" href="#1-脑-肠轴功能紊乱-Disorders-of-the-Brain-Gut-Axis">¶</a>1. 脑-肠轴功能紊乱 (Disorders of the Brain-Gut Axis)</h4>
+<p>这是 IBS 最核心的病理机制。大脑和肠道通过神经、内分泌和免疫系统形成一个双向沟通的“脑-肠轴”。在 IBS 患者中,这个轴的功能出现紊乱。</p>
+<ul>
+<li><strong>自上而下:</strong> 心理压力、焦虑、抑郁等负面情绪可以直接通过大脑影响肠道的运动、感觉和分泌功能,从而诱发或加重症状。</li>
+<li><strong>自下而上:</strong> 肠道内的信号(如食物、气体、肠道菌群代谢产物)被过度放大后传给大脑,导致大脑对这些正常刺激产生过度反应,表现为疼痛和不适。</li>
+</ul>
+<h4 id="2-内脏高敏感性-Visceral-Hypersensitivity"><a class="header-anchor" href="#2-内脏高敏感性-Visceral-Hypersensitivity">¶</a>2. 内脏高敏感性 (Visceral Hypersensitivity)</h4>
+<p>这是指 IBS 患者的肠道对各种刺激(如食物、气体、肠壁的牵拉)异常敏感。正常人可以耐受的肠道内压力或活动,在 IBS 患者身上却会引发强烈的腹痛、急便感或不适。这种“放大”的感觉是 IBS 腹痛的主要原因。</p>
+<h4 id="3-胃肠动力异常-Altered-Gut-Motility"><a class="header-anchor" href="#3-胃肠动力异常-Altered-Gut-Motility">¶</a>3. 胃肠动力异常 (Altered Gut Motility)</h4>
+<p>肠道肌肉的收缩和舒张节律出现问题,导致食物和粪便在肠道内的转运速度异常。</p>
+<ul>
+<li><strong>转运过快:</strong> 肠道内容物过快通过结肠,水分来不及被充分吸收,导致腹泻(IBS-D)。</li>
+<li><strong>转运过慢:</strong> 肠道蠕动乏力,粪便在结肠内停留时间过长,水分被过度吸收,导致便秘(IBS-C)。</li>
+<li><strong>节律紊乱:</strong> 有时快有时慢,导致腹泻与便秘交替出现(IBS-M)。</li>
+</ul>
+<h4 id="4-肠道微生态失调-Alteration-in-Gut-Microbiota"><a class="header-anchor" href="#4-肠道微生态失调-Alteration-in-Gut-Microbiota">¶</a>4. 肠道微生态失调 (Alteration in Gut Microbiota)</h4>
+<p>IBS 患者的肠道菌群组成和功能与健康人存在差异。有害菌可能增多,有益菌(如双歧杆菌、乳酸杆菌)可能减少。这些失调的菌群会影响肠道屏障功能、产生过多气体、并激活免疫系统,导致腹胀和腹泻。</p>
+<h4 id="5-肠道低度炎症与免疫激活-Low-Grade-Inflammation-and-Immune-Activation"><a class="header-anchor" href="#5-肠道低度炎症与免疫激活-Low-Grade-Inflammation-and-Immune-Activation">¶</a>5. 肠道低度炎症与免疫激活 (Low-Grade Inflammation and Immune Activation)</h4>
+<p>部分 IBS 患者的肠道黏膜中可以观察到轻微的炎症反应,例如肥大细胞等免疫细胞数量增多并被激活。这些细胞会释放组胺、5-羟色胺等物质,直接刺激肠道神经,引起疼痛和动力异常。这种情况尤其在感染性肠炎后发生的 IBS(PI-IBS)中更为常见。</p>
+<h4 id="6-遗传与饮食因素"><a class="header-anchor" href="#6-遗传与饮食因素">¶</a>6. 遗传与饮食因素</h4>
+<ul>
+<li><strong>遗传:</strong> IBS具有一定的家族聚集性,提示可能存在遗传易感性。</li>
+<li><strong>饮食:</strong> 某些食物,特别是含有高<strong>FODMAPs</strong>(可发酵的寡糖、双糖、单糖和多元醇)的食物,在小肠内难以被吸收,进入大肠后被细菌快速发酵,产生大量气体并增加肠道渗透压,从而诱发腹胀、腹痛和腹泻。</li>
+</ul>
+<h3 id="二、-肠易激综合征的药物治疗"><a class="header-anchor" href="#二、-肠易激综合征的药物治疗">¶</a>二、 肠易激综合征的药物治疗</h3>
+<blockquote>
+<p>IBS的治疗需要个体化,所有药物都应在医生指导下使用。医生应该根据具体的 IBS 亚型(腹泻型、便秘型、混合型)和主要症状来选择最合适的药物。</p>
+</blockquote>
+<h4 id="针对主要症状的药物"><a class="header-anchor" href="#针对主要症状的药物">¶</a>针对主要症状的药物</h4>
+<p><strong>1. 针对腹痛和腹胀(解痉药)</strong></p>
+<p>这类药物通过放松肠道平滑肌,缓解肠道痉挛来减轻疼痛。</p>
+<ul>
+<li><strong>匹维溴铵 (Pinaverium Bromide):</strong> 作用于肠道平滑肌的钙离子通道,选择性高,副作用较小。</li>
+<li><strong>奥替溴铵 (Otilonium Bromide):</strong> 与匹维溴铵类似,对结肠有较高的亲和力。</li>
+<li><strong>马来酸曲美布汀 (Trimebutine Maleate):</strong> 具有双向调节作用,在肠道动力过快时抑制它,过慢时促进它,对腹痛、腹泻和便秘都有一定效果。</li>
+<li><strong>薄荷油 (Peppermint Oil):</strong> 是一种天然的解痉剂,其肠溶胶囊可以有效缓解腹痛和腹胀。</li>
+</ul>
+<p><strong>2. 针对腹泻 (IBS-D)</strong></p>
+<ul>
+<li><strong>洛哌丁胺 (Loperamide):</strong> 是一种止泻药,能减慢肠道蠕动,增加水分吸收。适用于急性腹泻发作,但不宜长期连续使用。</li>
+<li><strong>蒙脱石散 (Montmorillonite Powder):</strong> 是一种肠道黏膜保护剂,能吸附肠道内的病菌和毒素,并覆盖在肠壁上形成保护层。</li>
+<li><strong>利福昔明 (Rifaximin):</strong> 一种几乎不被肠道吸收的抗生素,可以调节肠道菌群,减少有害菌和产气,对改善腹泻和腹胀有良好效果。</li>
+<li><strong>5-HT₃受体拮抗剂(如阿洛司琼 Alosetron):</strong> 能显著减缓肠道转运、减轻内脏敏感性。因可能引起严重便秘和缺血性结肠炎等副作用,使用受到严格限制,通常仅用于其他治疗无效的重度女性IBS-D患者。</li>
+<li><strong>胆汁酸螯合剂(如考来烯胺 Cholestyramine):</strong> 适用于因胆汁酸吸收不良导致的腹泻型IBS。</li>
+</ul>
+<p><strong>3. 针对便秘 (IBS-C)</strong></p>
+<ul>
+<li><strong>容积性泻药(如欧车前、聚卡波非钙):</strong> 通过吸收水分增加粪便体积,刺激肠道蠕动。使用时需饮用足量水,否则可能加重便秘。</li>
+<li><strong>渗透性泻药(如聚乙二醇 PEG、乳果糖):</strong> 通过在肠道内形成高渗环境,将水分保留在肠腔内,软化粪便,促进排便。相对安全,适合长期使用。</li>
+<li><strong>促分泌药:</strong>
+<ul>
+<li><strong>鲁比前列酮 (Lubiprostone):</strong> 激活肠道氯离子通道,增加肠液分泌,软化粪便。</li>
+<li><strong>利那洛肽 (Linaclotide)、普卡那肽 (Plecanatide):</strong> 激活鸟苷酸环化酶-C,促进肠液分泌,并能一定程度上缓解腹痛。</li>
+</ul>
+</li>
+</ul>
+<p><strong>4. 调节脑-肠轴功能的药物(精神类药物)</strong></p>
+<p>对于伴有明显焦虑、抑郁或常规治疗无效的顽固性腹痛患者,医生可能会考虑使用低剂量的抗抑郁药。</p>
+<ul>
+<li><strong>三环类抗抑郁药 (TCAs)(如阿米替林):</strong> 低剂量使用可以有效缓解IBS的慢性腹痛,其抗胆碱能作用也有助于控制腹泻。</li>
+<li><strong>选择性5-羟色胺再摄取抑制剂 (SSRIs)(如氟西汀、帕罗西汀):</strong> 可用于伴有便秘和焦虑的IBS患者。</li>
+</ul>
+<ol start="5">
+<li>益生菌 (Probiotics)</li>
+</ol>
+<p>补充特定的益生菌菌株(如某些双歧杆菌和乳酸杆菌)有助于恢复肠道微生态平衡,改善腹胀和总体症状。不同菌株效果各异,需根据产品说明和医生建议选用。</p>
+]]></content>
+ <tags>
+ <tag>Medicine</tag>
+ </tags>
+ </entry>
+ <entry>
<title>由甲醛开始的碎碎念</title>
<url>/2025/07/11/fuck-hcho/</url>
<content><![CDATA[<p>前几天和群友聊到甲醛相关的东东,有点好奇甲醛进入人体之后的一系列反应,于逝,<s>我去吸了两口</s> ,先来看看一些无聊的总结:</p>
@@ -2930,83 +3007,6 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
- <title>肠易激综合征 (IBS) 的病理学与药物治疗</title>
- <url>/2025/06/30/ibs/</url>
- <content><![CDATA[<p>肠易激综合征 (Irritable Bowel Syndrome, IBS) 是一种常见的功能性胃肠病。其核心特征是在没有发现任何器质性病变(如炎症、溃疡或肿瘤)的情况下,患者长期经历腹痛、腹胀,并伴有排便习惯的改变(腹泻、便秘或两者交替)。</p>
-<h3 id="一、-肠易激综合征的病理生理学"><a class="header-anchor" href="#一、-肠易激综合征的病理生理学">¶</a>一、 肠易激综合征的病理生理学</h3>
-<p>IBS 的病理生理机制非常复杂,并非由单一原因导致,而是多种因素相互作用的结果。目前的医学研究认为,其主要与以下几个核心机制有关:</p>
-<h4 id="1-脑-肠轴功能紊乱-Disorders-of-the-Brain-Gut-Axis"><a class="header-anchor" href="#1-脑-肠轴功能紊乱-Disorders-of-the-Brain-Gut-Axis">¶</a>1. 脑-肠轴功能紊乱 (Disorders of the Brain-Gut Axis)</h4>
-<p>这是 IBS 最核心的病理机制。大脑和肠道通过神经、内分泌和免疫系统形成一个双向沟通的“脑-肠轴”。在 IBS 患者中,这个轴的功能出现紊乱。</p>
-<ul>
-<li><strong>自上而下:</strong> 心理压力、焦虑、抑郁等负面情绪可以直接通过大脑影响肠道的运动、感觉和分泌功能,从而诱发或加重症状。</li>
-<li><strong>自下而上:</strong> 肠道内的信号(如食物、气体、肠道菌群代谢产物)被过度放大后传给大脑,导致大脑对这些正常刺激产生过度反应,表现为疼痛和不适。</li>
-</ul>
-<h4 id="2-内脏高敏感性-Visceral-Hypersensitivity"><a class="header-anchor" href="#2-内脏高敏感性-Visceral-Hypersensitivity">¶</a>2. 内脏高敏感性 (Visceral Hypersensitivity)</h4>
-<p>这是指 IBS 患者的肠道对各种刺激(如食物、气体、肠壁的牵拉)异常敏感。正常人可以耐受的肠道内压力或活动,在 IBS 患者身上却会引发强烈的腹痛、急便感或不适。这种“放大”的感觉是 IBS 腹痛的主要原因。</p>
-<h4 id="3-胃肠动力异常-Altered-Gut-Motility"><a class="header-anchor" href="#3-胃肠动力异常-Altered-Gut-Motility">¶</a>3. 胃肠动力异常 (Altered Gut Motility)</h4>
-<p>肠道肌肉的收缩和舒张节律出现问题,导致食物和粪便在肠道内的转运速度异常。</p>
-<ul>
-<li><strong>转运过快:</strong> 肠道内容物过快通过结肠,水分来不及被充分吸收,导致腹泻(IBS-D)。</li>
-<li><strong>转运过慢:</strong> 肠道蠕动乏力,粪便在结肠内停留时间过长,水分被过度吸收,导致便秘(IBS-C)。</li>
-<li><strong>节律紊乱:</strong> 有时快有时慢,导致腹泻与便秘交替出现(IBS-M)。</li>
-</ul>
-<h4 id="4-肠道微生态失调-Alteration-in-Gut-Microbiota"><a class="header-anchor" href="#4-肠道微生态失调-Alteration-in-Gut-Microbiota">¶</a>4. 肠道微生态失调 (Alteration in Gut Microbiota)</h4>
-<p>IBS 患者的肠道菌群组成和功能与健康人存在差异。有害菌可能增多,有益菌(如双歧杆菌、乳酸杆菌)可能减少。这些失调的菌群会影响肠道屏障功能、产生过多气体、并激活免疫系统,导致腹胀和腹泻。</p>
-<h4 id="5-肠道低度炎症与免疫激活-Low-Grade-Inflammation-and-Immune-Activation"><a class="header-anchor" href="#5-肠道低度炎症与免疫激活-Low-Grade-Inflammation-and-Immune-Activation">¶</a>5. 肠道低度炎症与免疫激活 (Low-Grade Inflammation and Immune Activation)</h4>
-<p>部分 IBS 患者的肠道黏膜中可以观察到轻微的炎症反应,例如肥大细胞等免疫细胞数量增多并被激活。这些细胞会释放组胺、5-羟色胺等物质,直接刺激肠道神经,引起疼痛和动力异常。这种情况尤其在感染性肠炎后发生的 IBS(PI-IBS)中更为常见。</p>
-<h4 id="6-遗传与饮食因素"><a class="header-anchor" href="#6-遗传与饮食因素">¶</a>6. 遗传与饮食因素</h4>
-<ul>
-<li><strong>遗传:</strong> IBS具有一定的家族聚集性,提示可能存在遗传易感性。</li>
-<li><strong>饮食:</strong> 某些食物,特别是含有高<strong>FODMAPs</strong>(可发酵的寡糖、双糖、单糖和多元醇)的食物,在小肠内难以被吸收,进入大肠后被细菌快速发酵,产生大量气体并增加肠道渗透压,从而诱发腹胀、腹痛和腹泻。</li>
-</ul>
-<h3 id="二、-肠易激综合征的药物治疗"><a class="header-anchor" href="#二、-肠易激综合征的药物治疗">¶</a>二、 肠易激综合征的药物治疗</h3>
-<blockquote>
-<p>IBS的治疗需要个体化,所有药物都应在医生指导下使用。医生应该根据具体的 IBS 亚型(腹泻型、便秘型、混合型)和主要症状来选择最合适的药物。</p>
-</blockquote>
-<h4 id="针对主要症状的药物"><a class="header-anchor" href="#针对主要症状的药物">¶</a>针对主要症状的药物</h4>
-<p><strong>1. 针对腹痛和腹胀(解痉药)</strong></p>
-<p>这类药物通过放松肠道平滑肌,缓解肠道痉挛来减轻疼痛。</p>
-<ul>
-<li><strong>匹维溴铵 (Pinaverium Bromide):</strong> 作用于肠道平滑肌的钙离子通道,选择性高,副作用较小。</li>
-<li><strong>奥替溴铵 (Otilonium Bromide):</strong> 与匹维溴铵类似,对结肠有较高的亲和力。</li>
-<li><strong>马来酸曲美布汀 (Trimebutine Maleate):</strong> 具有双向调节作用,在肠道动力过快时抑制它,过慢时促进它,对腹痛、腹泻和便秘都有一定效果。</li>
-<li><strong>薄荷油 (Peppermint Oil):</strong> 是一种天然的解痉剂,其肠溶胶囊可以有效缓解腹痛和腹胀。</li>
-</ul>
-<p><strong>2. 针对腹泻 (IBS-D)</strong></p>
-<ul>
-<li><strong>洛哌丁胺 (Loperamide):</strong> 是一种止泻药,能减慢肠道蠕动,增加水分吸收。适用于急性腹泻发作,但不宜长期连续使用。</li>
-<li><strong>蒙脱石散 (Montmorillonite Powder):</strong> 是一种肠道黏膜保护剂,能吸附肠道内的病菌和毒素,并覆盖在肠壁上形成保护层。</li>
-<li><strong>利福昔明 (Rifaximin):</strong> 一种几乎不被肠道吸收的抗生素,可以调节肠道菌群,减少有害菌和产气,对改善腹泻和腹胀有良好效果。</li>
-<li><strong>5-HT₃受体拮抗剂(如阿洛司琼 Alosetron):</strong> 能显著减缓肠道转运、减轻内脏敏感性。因可能引起严重便秘和缺血性结肠炎等副作用,使用受到严格限制,通常仅用于其他治疗无效的重度女性IBS-D患者。</li>
-<li><strong>胆汁酸螯合剂(如考来烯胺 Cholestyramine):</strong> 适用于因胆汁酸吸收不良导致的腹泻型IBS。</li>
-</ul>
-<p><strong>3. 针对便秘 (IBS-C)</strong></p>
-<ul>
-<li><strong>容积性泻药(如欧车前、聚卡波非钙):</strong> 通过吸收水分增加粪便体积,刺激肠道蠕动。使用时需饮用足量水,否则可能加重便秘。</li>
-<li><strong>渗透性泻药(如聚乙二醇 PEG、乳果糖):</strong> 通过在肠道内形成高渗环境,将水分保留在肠腔内,软化粪便,促进排便。相对安全,适合长期使用。</li>
-<li><strong>促分泌药:</strong>
-<ul>
-<li><strong>鲁比前列酮 (Lubiprostone):</strong> 激活肠道氯离子通道,增加肠液分泌,软化粪便。</li>
-<li><strong>利那洛肽 (Linaclotide)、普卡那肽 (Plecanatide):</strong> 激活鸟苷酸环化酶-C,促进肠液分泌,并能一定程度上缓解腹痛。</li>
-</ul>
-</li>
-</ul>
-<p><strong>4. 调节脑-肠轴功能的药物(精神类药物)</strong></p>
-<p>对于伴有明显焦虑、抑郁或常规治疗无效的顽固性腹痛患者,医生可能会考虑使用低剂量的抗抑郁药。</p>
-<ul>
-<li><strong>三环类抗抑郁药 (TCAs)(如阿米替林):</strong> 低剂量使用可以有效缓解IBS的慢性腹痛,其抗胆碱能作用也有助于控制腹泻。</li>
-<li><strong>选择性5-羟色胺再摄取抑制剂 (SSRIs)(如氟西汀、帕罗西汀):</strong> 可用于伴有便秘和焦虑的IBS患者。</li>
-</ul>
-<ol start="5">
-<li>益生菌 (Probiotics)</li>
-</ol>
-<p>补充特定的益生菌菌株(如某些双歧杆菌和乳酸杆菌)有助于恢复肠道微生态平衡,改善腹胀和总体症状。不同菌株效果各异,需根据产品说明和医生建议选用。</p>
-]]></content>
- <tags>
- <tag>Medicine</tag>
- </tags>
- </entry>
- <entry>
<title>Linux 下 AMD 显卡屏幕画面闪烁问题修复方案</title>
<url>/2025/04/20/linux-amd-screen-boom/</url>
<content><![CDATA[<p>不知道我们所说的闪烁是不是一个东西,在我的笔记本上,闪烁是指偶发的屏幕中出现部分彩色雪花。</p>
@@ -3336,17 +3336,6 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</tags>
</entry>
<entry>
- <title>tick thread在Multicore OCaml中的作用</title>
- <url>/2023/08/15/tick-thread%E5%9C%A8Multicore-OCaml%E4%B8%AD%E7%9A%84%E4%BD%9C%E7%94%A8/</url>
- <content><![CDATA[<p>Multicore OCaml的程序在启动时会运行一个 tick thread,其实现如下:</p>
-<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="comment">/* The tick thread: posts a SIGPREEMPTION signal periodically */</span></span><br><span class="line"></span><br><span class="line"><span class="type">static</span> <span class="type">void</span> * <span class="title function_">caml_thread_tick</span><span class="params">(<span class="type">void</span> * arg)</span></span><br><span class="line">&#123;</span><br><span class="line"> <span class="class"><span class="keyword">struct</span> <span class="title">timeval</span> <span class="title">timeout</span>;</span></span><br><span class="line"> <span class="type">sigset_t</span> mask;</span><br><span class="line"></span><br><span class="line"> <span class="comment">/* Block all signals so that we don&#x27;t try to execute an OCaml signal handler*/</span></span><br><span class="line"> sigfillset(&amp;mask);</span><br><span class="line"> pthread_sigmask(SIG_BLOCK, &amp;mask, <span class="literal">NULL</span>);</span><br><span class="line"> <span class="keyword">while</span>(! caml_tick_thread_stop) &#123;</span><br><span class="line"> <span class="comment">/* select() seems to be the most efficient way to suspend the</span></span><br><span class="line"><span class="comment"> thread for sub-second intervals */</span></span><br><span class="line"> timeout.tv_sec = <span class="number">0</span>;</span><br><span class="line"> timeout.tv_usec = Thread_timeout * <span class="number">1000</span>;</span><br><span class="line"> select(<span class="number">0</span>, <span class="literal">NULL</span>, <span class="literal">NULL</span>, <span class="literal">NULL</span>, &amp;timeout);</span><br><span class="line"> <span class="comment">/* The preemption signal should never cause a callback, so don&#x27;t</span></span><br><span class="line"><span class="comment"> go through caml_handle_signal(), just record signal delivery via</span></span><br><span class="line"><span class="comment"> caml_record_signal(). */</span></span><br><span class="line"> caml_record_signal(SIGPREEMPTION);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">NULL</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-<p>这是因为Multicore OCaml的GC目前需要一个进程(或一个Domain)中的所有线程一起参与以避免并发访问。如果一个线程在system call上被阻塞,那么整个Domain就会被卡住,直到该线程可以参与当前的垃圾收集。为了避免这个问题,tick 线程可以代替被阻塞的线程执行垃圾收集操作。</p>
-]]></content>
- <tags>
- <tag>Technique</tag>
- </tags>
- </entry>
- <entry>
<title>UUID v7 是如何加快 RDBMS 索引速度的</title>
<url>/2025/04/13/uuidv7-rdbms/</url>
<content><![CDATA[<p>UUID v7 之所以能显著提升关系型数据库(尤其是采用聚集索引的 MySQL InnoDB)在插入和查询速度,主要归功于它在 ID 中引入了“可排序的时间戳前缀”,从而大幅减少了 B-Tree 索引页分裂(page split)和数据碎片化。这里分几点来说:</p>
@@ -3381,6 +3370,17 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</tags>
</entry>
<entry>
+ <title>tick thread在Multicore OCaml中的作用</title>
+ <url>/2023/08/15/tick-thread%E5%9C%A8Multicore-OCaml%E4%B8%AD%E7%9A%84%E4%BD%9C%E7%94%A8/</url>
+ <content><![CDATA[<p>Multicore OCaml的程序在启动时会运行一个 tick thread,其实现如下:</p>
+<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="comment">/* The tick thread: posts a SIGPREEMPTION signal periodically */</span></span><br><span class="line"></span><br><span class="line"><span class="type">static</span> <span class="type">void</span> * <span class="title function_">caml_thread_tick</span><span class="params">(<span class="type">void</span> * arg)</span></span><br><span class="line">&#123;</span><br><span class="line"> <span class="class"><span class="keyword">struct</span> <span class="title">timeval</span> <span class="title">timeout</span>;</span></span><br><span class="line"> <span class="type">sigset_t</span> mask;</span><br><span class="line"></span><br><span class="line"> <span class="comment">/* Block all signals so that we don&#x27;t try to execute an OCaml signal handler*/</span></span><br><span class="line"> sigfillset(&amp;mask);</span><br><span class="line"> pthread_sigmask(SIG_BLOCK, &amp;mask, <span class="literal">NULL</span>);</span><br><span class="line"> <span class="keyword">while</span>(! caml_tick_thread_stop) &#123;</span><br><span class="line"> <span class="comment">/* select() seems to be the most efficient way to suspend the</span></span><br><span class="line"><span class="comment"> thread for sub-second intervals */</span></span><br><span class="line"> timeout.tv_sec = <span class="number">0</span>;</span><br><span class="line"> timeout.tv_usec = Thread_timeout * <span class="number">1000</span>;</span><br><span class="line"> select(<span class="number">0</span>, <span class="literal">NULL</span>, <span class="literal">NULL</span>, <span class="literal">NULL</span>, &amp;timeout);</span><br><span class="line"> <span class="comment">/* The preemption signal should never cause a callback, so don&#x27;t</span></span><br><span class="line"><span class="comment"> go through caml_handle_signal(), just record signal delivery via</span></span><br><span class="line"><span class="comment"> caml_record_signal(). */</span></span><br><span class="line"> caml_record_signal(SIGPREEMPTION);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">NULL</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>这是因为Multicore OCaml的GC目前需要一个进程(或一个Domain)中的所有线程一起参与以避免并发访问。如果一个线程在system call上被阻塞,那么整个Domain就会被卡住,直到该线程可以参与当前的垃圾收集。为了避免这个问题,tick 线程可以代替被阻塞的线程执行垃圾收集操作。</p>
+]]></content>
+ <tags>
+ <tag>Technique</tag>
+ </tags>
+ </entry>
+ <entry>
<title>v8中的Number.toString()</title>
<url>/2023/10/05/v8%E4%B8%AD%E7%9A%84Number-toString/</url>
<content><![CDATA[<p>这里讲一下JavaScript中<code>Number.toString()</code>的实现, 以V8为例。</p>
@@ -3845,10 +3845,10 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
<content><![CDATA[<p>我蹲在地铁口的台阶上,指尖戳着手机屏保里的枇杷树。屏幕亮度调得很低,像浸在晚春的雾里,那是去年清明回家拍的,老家后山上的枇杷树正开着花,淡白色的瓣子落得他肩头都是,陈桉站在树底下笑,说我像个移动的花筐。</p>
<p>吸了吸鼻子,风裹着槐花香吹过来,混着煎饼果子的油味,我把手机塞进包里。包里还装着早上买的包子,凉得发硬。</p>
<p>地铁呼啸着进站,我跟着人群挤上去,肩膀被撞了一下,电脑包的背带勒得锁骨发疼。旁边的阿姨抱着个小孩,小孩手里举着根糖葫芦,糖稀滴在我的裤子上,留下个黏糊糊的印子。我盯着那个印子,忽然想起小时候陈桉带我去镇上买糖葫芦,我咬得太急,糖稀粘在下巴上,陈桉用袖子给我擦,结果把我的脸擦得更花,两个人笑得上气不接下气,连卖糖葫芦的老爷爷都跟着笑。</p>
-<p>&quot;下一站,国贸。&quot;地铁广播里的女声冷冰冰的。我拽了拽背包带,往车门方向挪了挪。国贸站的人永远那么多,像一群被挤散的蚂蚁,我跟着人流往出口走,鞋子踩在瓷砖上,发出清脆的响声。</p>
+<p>&quot;下一站,国贸。&quot;地铁广播里的女声冷冰冰的。我拽了拽背包带,往车门方向挪了挪。国贸站的人永远那么多,像一群被挤散的蚂蚁,我跟着人流往出口走,鞋子踩在瓷砖上,发出沉闷的响声。</p>
<p>出了地铁口,天空已经暗下来,写字楼的灯光像撒了一地碎钻。我抬头看了眼自己公司的楼层,窗户里还亮着灯,叹了口气,摸出手机给同事发消息:“我到楼下了,需求改好了吗?”</p>
<p>同时回复得很快:&quot;改好了,就等你过来审。&quot;后面跟着个哭脸表情。</p>
-<p>我把手机放进兜里,往写字楼走。路过便利店的时候停下来,买了瓶冰可乐。可乐罐贴在脸上,凉意透过皮肤渗进骨头里,想起去年晚春,陈桉带我去山上玩,我们坐在山顶的石头上,陈桉举着瓶橘子汽水,说:“暮秋,你看,山下的房子像不像积木?”,顺着她的手指看过去,真的,那些低矮的房子挤在一起,像她小时候玩的积木。陈桉又说:“等我长大了,要站在更高的地方,看更远的风景。”,我问:&quot;那我呢?&quot;陈桉笑:“你当然要跟着我啊,不然谁给我买橘子汽水?”</p>
+<p>我把手机放进兜里,往写字楼走。路过便利店的时候停下来,买了瓶冰可乐。可乐罐贴在脸上,凉意透过皮肤渗进骨头里,想起去年晚春,陈桉带我去山上玩,我们坐在山顶的石头上,陈桉举着瓶橘子汽水,说:“暮秋,你看,山下的房子像不像积木?”,顺着她的手指看过去,真的,那些低矮的房子挤在一起,像我们小时候玩的积木。陈桉又说:“等我长大了,要站在更高的地方,看更远的风景。”,我问:&quot;那我呢?&quot;陈桉笑:“你当然要跟着我啊,不然谁给我买橘子汽水?”</p>
<p>回过神,接过可乐,付了钱。走出便利店,风更大了,吹得我的头发乱飘,用手理了理,继续往写字楼走。</p>
<p>加班到十点,出来的时候街上的人已经很少了,路灯把影子拉得很长。</p>
<p>我拦了辆出租车,报了地址。司机师傅开着收音机,里面在放老歌:“春风它吹醒了大地,吹绿了杨柳,吹开了桃花…”</p>
@@ -3858,10 +3858,10 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
<p>手机在沙发上震动,我拿起来看,是陈桉的消息:&quot;暮秋,今天山上的枇杷开始结果了,比去年的大。&quot;后面跟着张照片,照片里的枇杷挂在枝头,青绿色的,像小拳头。</p>
<p>我盯着照片,手指在屏幕上划了划,回复:“我昨天梦见你了,你站在山巅喊我。”</p>
<p>陈桉回复得很快:&quot;那是因为我想你了啊。&quot;后面跟着个笑脸表情。</p>
-<p>我笑了笑,把手机放下。走到窗户边,推开窗户,风卷着晚春的味道进来——有槐花香,有青草味,还有一点点枇杷花的味道。抬头看星星,天上的星星很少,但很亮,像家乡的星星。突然想起陈桉说的,那些星星是祖先的眼睛,在看着我们。</p>
+<p>我笑了笑,把手机放下。走到窗户边,推开窗户,风卷着晚春的味道进来——有槐花香,有青草味,还有一点点枇杷花的味道。抬头看星星,天上的星星很少,但很亮,像家乡的星星。想起陈桉说的,那些星星是祖先的眼睛,在看着我们。</p>
<p>忽然听见楼下有猫叫,探出头去,看见一只黑白相间的猫,正蹲在楼下的台阶上,盯着我看,我对着猫招了招手,猫叫了一声,转身跑了。</p>
<p>再缩回身子,关上窗户,回到沙发上。拿起手机,又看了看陈桉的消息。然后,我打开日记,写下:“今天的晚春,风里有枇杷花的味道。我梦见陈桉,她站在山巅,喊我’暮秋,快上来’。我想,也许我该回去看看了。”</p>
-<p>放下笔,静静地靠在沙发上,闭上眼睛。窗外的风还在吹,吹得窗帘沙沙作响。我想起小时候,陈桉带我去山上玩,我们躺在草地上,看星星。陈桉说:“暮秋,等我们老了,还要一起去山上看星星。”,我问:&quot;那如果我走了呢?&quot;陈桉说:“那我就站在山巅,喊你的名字,直到你听见。”</p>
+<p>放下笔,静静地靠在沙发上,闭上眼睛。窗外的风还在吹,吹得窗帘沙沙作响。又想起小时候,陈桉带我去山上玩,我们躺在草地上,看星星。陈桉说:“暮秋,等我们老了,还要一起去山上看星星。”,我问:&quot;那如果我走了呢?&quot;陈桉说:“那我就站在山巅,喊你的名字,直到你听见。”</p>
<p>我笑了,眼泪却顺着眼角流下来,摸出手机,给陈桉发了条消息:“明年晚春,我回去陪你摘枇杷。”</p>
<p>消息送达那一刻,突然听见窗外的风里,有个熟悉的声音在喊:“暮秋,快上来。”</p>
<p>我睁开眼睛,窗外的星星很亮,像陈桉的眼睛。</p>