summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2024/12/18/二〇二四年十二月十八日/index.html5
-rw-r--r--2025/01/19/身体往前倾,灵魂向后摇/index.html275
-rw-r--r--2025/02/18/Prisma-关系型数据库的-Self-relations/index.html344
-rw-r--r--2025/02/19/Repository-pattern-in-Typescript/index.html308
-rw-r--r--archives/2025/01/index.html217
-rw-r--r--archives/2025/02/index.html235
-rw-r--r--archives/2025/index.html253
-rw-r--r--archives/index.html66
-rw-r--r--archives/page/10/index.html66
-rw-r--r--archives/page/11/index.html68
-rw-r--r--archives/page/12/index.html260
-rw-r--r--archives/page/2/index.html62
-rw-r--r--archives/page/3/index.html62
-rw-r--r--archives/page/4/index.html62
-rw-r--r--archives/page/5/index.html66
-rw-r--r--archives/page/6/index.html62
-rw-r--r--archives/page/7/index.html62
-rw-r--r--archives/page/8/index.html62
-rw-r--r--archives/page/9/index.html62
-rw-r--r--page/12/index.html230
-rw-r--r--search.xml129
-rw-r--r--tag/index.html38
-rw-r--r--tags/Database/index.html20
-rw-r--r--tags/Life/index.html38
-rw-r--r--tags/Life/page/2/index.html18
-rw-r--r--tags/Music/index.html228
-rw-r--r--tags/Software-Engineering/index.html228
-rw-r--r--tags/Technique/index.html62
-rw-r--r--tags/Technique/page/2/index.html62
-rw-r--r--tags/Technique/page/3/index.html60
-rw-r--r--tags/Technique/page/4/index.html36
-rw-r--r--tags/Typescript/index.html246
-rw-r--r--tags/Web/index.html38
33 files changed, 3560 insertions, 470 deletions
diff --git a/2024/12/18/二〇二四年十二月十八日/index.html b/2024/12/18/二〇二四年十二月十八日/index.html
index 0569c61e..5b0228a4 100644
--- a/2024/12/18/二〇二四年十二月十八日/index.html
+++ b/2024/12/18/二〇二四年十二月十八日/index.html
@@ -176,6 +176,11 @@
<nav class="post-nav">
<div class="prev-item">
+ <div class="icon arrow-left"></div>
+ <div class="post-link">
+ <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/">Prev</a>
+ </div>
+
</div>
<div class="next-item">
diff --git a/2025/01/19/身体往前倾,灵魂向后摇/index.html b/2025/01/19/身体往前倾,灵魂向后摇/index.html
new file mode 100644
index 00000000..6abbd905
--- /dev/null
+++ b/2025/01/19/身体往前倾,灵魂向后摇/index.html
@@ -0,0 +1,275 @@
+<!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>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/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()">
+ Menu
+ </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="/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">
+
+
+ <span class="post-tag">
+ <a href="/tags/Life/">
+ Life
+ </a>
+ </span>
+
+ <span class="post-tag">
+ <a href="/tags/Music/">
+ Music
+ </a>
+ </span>
+
+
+ </div>
+ <div class="post-title">
+
+
+ 身体往前倾,灵魂向后摇
+
+
+ </div>
+ <span class="post-date">
+ Jan 19, 2025
+ </span>
+ </div>
+ <div class="post-img">
+
+ <div class="h-line-primary"></div>
+
+ </div>
+</div>
+ <div class="post-content">
+ <p>后摇( Post-Rock )是用摇滚乐器作非摇滚的用途,吉他对音色和结构的推动作用超过了Riff和主旋律。后摇的关键问题除了电子的启用之外,还有多层次打击乐器的出现。</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 class="icon arrow-left"></div>
+ <div class="post-link">
+ <a href="/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">Prev</a>
+ </div>
+
+ </div>
+ <div class="next-item">
+
+ <div class="icon arrow-right"></div>
+ <div class="post-link">
+ <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/">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/2025/02/18/Prisma-关系型数据库的-Self-relations/index.html b/2025/02/18/Prisma-关系型数据库的-Self-relations/index.html
new file mode 100644
index 00000000..c4c33004
--- /dev/null
+++ b/2025/02/18/Prisma-关系型数据库的-Self-relations/index.html
@@ -0,0 +1,344 @@
+<!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>Prisma 关系型数据库的 Self-relations | 暮秋小屋</title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+<style>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/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()">
+ Menu
+ </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="/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">
+
+
+ <span class="post-tag">
+ <a href="/tags/Technique/">
+ Technique
+ </a>
+ </span>
+
+ <span class="post-tag">
+ <a href="/tags/Web/">
+ Web
+ </a>
+ </span>
+
+ <span class="post-tag">
+ <a href="/tags/Typescript/">
+ Typescript
+ </a>
+ </span>
+
+ <span class="post-tag">
+ <a href="/tags/Database/">
+ Database
+ </a>
+ </span>
+
+
+ </div>
+ <div class="post-title">
+
+
+ Prisma 关系型数据库的 Self-relations
+
+
+ </div>
+ <span class="post-date">
+ Feb 18, 2025
+ </span>
+ </div>
+ <div class="post-img">
+
+ <div class="h-line-primary"></div>
+
+ </div>
+</div>
+ <div class="post-content">
+ <blockquote>
+<p>A relation field can also reference its own model, in this case the relation is called a <em>self-relation</em>. Self-relations can be of any cardinality, 1-1, 1-n and m-n.</p>
+</blockquote>
+<h2 id="一对一"><a href="#一对一" class="headerlink" title="一对一"></a>一对一</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">model User &#123;</span><br><span class="line"> id Int @id @default(autoincrement())</span><br><span class="line"> name String?</span><br><span class="line"> successorId Int? @unique</span><br><span class="line"> successor User? @relation(&quot;BlogOwnerHistory&quot;, fields: [successorId], references: [id])</span><br><span class="line"> predecessor User? @relation(&quot;BlogOwnerHistory&quot;)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<p>User 展现了这样一个模型:</p>
+<ul>
+<li>User 可以有一个或零个前驱(predecessor)</li>
+<li>User 可以有一个或零个后继(successor)</li>
+</ul>
+<p>注意:不能要求前驱和后继都必须存在,这两个必须有一个是可选的,否则没办法创建第一个 User。</p>
+<p>要创建一对一的 self-relation:</p>
+<ul>
+<li>关系的两端都必须定义一个共享相同名称的 <code>@relation</code> 属性(<code>BlogOwnerHistory</code>)</li>
+<li>关系字段必须是<a target="_blank" rel="noopener" href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations#relation-fields">完全注释</a>的。例如 <code>successor</code> 字段需要定义 <code>field</code> 和 <code>references</code> 参数。</li>
+<li>关系字段必须由外键支持。<code>successor</code> 字段由 <code>successorId</code> 外键提供支持,该外键引用 <code>id</code> 字段中的值。<code>successorId</code> 还需要 <code>@unique</code> 属性来保证一对一的关系。****</li>
+</ul>
+<blockquote>
+<p>一对一的 self-relation 需要两个端点,即使这两个端点是同一条数据。</p>
+</blockquote>
+<p>而在关系型数据库中,一对一的 self-relation 可以用如下 SQL 描述:</p>
+<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">TABLE</span> &quot;User&quot; (</span><br><span class="line"> id SERIAL <span class="keyword">PRIMARY</span> KEY,</span><br><span class="line"> &quot;name&quot; TEXT,</span><br><span class="line"> &quot;successorId&quot; <span class="type">INTEGER</span></span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"><span class="keyword">ALTER</span> <span class="keyword">TABLE</span> &quot;User&quot; <span class="keyword">ADD</span> <span class="keyword">CONSTRAINT</span> fk_successor_user <span class="keyword">FOREIGN</span> KEY (&quot;successorId&quot;) <span class="keyword">REFERENCES</span> &quot;User&quot; (id);</span><br><span class="line"></span><br><span class="line"><span class="keyword">ALTER</span> <span class="keyword">TABLE</span> &quot;User&quot; <span class="keyword">ADD</span> <span class="keyword">CONSTRAINT</span> successor_unique <span class="keyword">UNIQUE</span> (&quot;successorId&quot;);</span><br></pre></td></tr></table></figure>
+
+<h2 id="一对多"><a href="#一对多" class="headerlink" title="一对多"></a>一对多</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">model User &#123;</span><br><span class="line"> id Int @id @default(autoincrement())</span><br><span class="line"> name String?</span><br><span class="line"> teacherId Int?</span><br><span class="line"> teacher User? @relation(&quot;TeacherStudents&quot;, fields: [teacherId], references: [id])</span><br><span class="line"> students User[] @relation(&quot;TeacherStudents&quot;)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<p>User 展现了这样一个模型:</p>
+<ul>
+<li>一个 User 只能有零个或一个 teacher</li>
+<li>一个 User 可以有零个或多个 students</li>
+</ul>
+<blockquote>
+<p>可以通过将 <code>teacher</code> 字段设<a target="_blank" rel="noopener" href="https://www.prisma.io/docs/orm/prisma-schema/data-model/models#optional-and-mandatory-fields">为 required</a> 来要求每个 User 都有一名 teacher。</p>
+</blockquote>
+<p>用 SQL 描述 User model:</p>
+<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">TABLE</span> &quot;User&quot; (</span><br><span class="line"> id SERIAL <span class="keyword">PRIMARY</span> KEY,</span><br><span class="line"> &quot;name&quot; TEXT,</span><br><span class="line"> &quot;teacherId&quot; <span class="type">INTEGER</span></span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"><span class="keyword">ALTER</span> <span class="keyword">TABLE</span> &quot;User&quot; <span class="keyword">ADD</span> <span class="keyword">CONSTRAINT</span> fk_teacherid_user <span class="keyword">FOREIGN</span> KEY (&quot;teacherId&quot;) <span class="keyword">REFERENCES</span> &quot;User&quot; (id);</span><br></pre></td></tr></table></figure>
+
+<p><code>teacherId</code> 没有使用 <code>UNIQUE</code> 约束,这代表着多个 students 可以有同一个 teacher</p>
+<h2 id="多对多"><a href="#多对多" class="headerlink" title="多对多"></a>多对多</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">model User &#123;</span><br><span class="line"> id Int @id @default(autoincrement())</span><br><span class="line"> name String?</span><br><span class="line"> followedBy User[] @relation(&quot;UserFollows&quot;)</span><br><span class="line"> following User[] @relation(&quot;UserFollows&quot;)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<ul>
+<li>一个 User 可以被零个或多个 Users 关注</li>
+<li>一个 User 可以关注零个或多个 Users</li>
+</ul>
+<blockquote>
+<p>对于关系型数据库,多对多的关系是隐式的,这意味着 Prisma ORM 会在底层数据库中维护一个 <a target="_blank" rel="noopener" href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#relation-tables">relation table</a>:<br>A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pivot</em> table) connects two or more other tables and therefore creates a <em>relation</em> between them. Creating relation tables is a common data modelling practice in SQL to represent relationships between different entities. In essence it means that “one m-n relation is modeled as two 1-n relations in the database”.</p>
+<p>We recommend using <a target="_blank" rel="noopener" href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations">implicit</a> m-n-relations, where Prisma ORM automatically generates the relation table in the underlying database. <a target="_blank" rel="noopener" href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations">Explicit</a> m-n-relations should be used when you need to store additional data in the relations, such as the date the relation was created.</p>
+</blockquote>
+<p>如果需要需要通过多对多的关系来保存其他字段,也可以创建<a target="_blank" rel="noopener" href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations">显式</a>的多对多 self 关系:</p>
+<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">model User &#123;</span><br><span class="line"> id Int @id @default(autoincrement())</span><br><span class="line"> name String?</span><br><span class="line"> followedBy Follows[] @relation(&quot;followedBy&quot;)</span><br><span class="line"> following Follows[] @relation(&quot;following&quot;)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">model Follows &#123;</span><br><span class="line"> followedBy User @relation(&quot;followedBy&quot;, fields: [followedById], references: [id])</span><br><span class="line"> followedById Int</span><br><span class="line"> following User @relation(&quot;following&quot;, fields: [followingId], references: [id])</span><br><span class="line"> followingId Int</span><br><span class="line"></span><br><span class="line"> @@id([followingId, followedById])</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<p>在关系型数据库中,可以用如下 SQL 描述:</p>
+<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">TABLE</span> &quot;User&quot; (</span><br><span class="line"> id <span class="type">integer</span> <span class="keyword">DEFAULT</span> nextval(<span class="string">&#x27;&quot;User_id_seq&quot;&#x27;</span>::regclass) <span class="keyword">PRIMARY</span> KEY,</span><br><span class="line"> name text</span><br><span class="line">);</span><br><span class="line"><span class="keyword">CREATE</span> <span class="keyword">TABLE</span> &quot;_UserFollows&quot; (</span><br><span class="line"> &quot;A&quot; <span class="type">integer</span> <span class="keyword">NOT</span> <span class="keyword">NULL</span> <span class="keyword">REFERENCES</span> &quot;User&quot;(id) <span class="keyword">ON</span> <span class="keyword">DELETE</span> CASCADE <span class="keyword">ON</span> <span class="keyword">UPDATE</span> CASCADE,</span><br><span class="line"> &quot;B&quot; <span class="type">integer</span> <span class="keyword">NOT</span> <span class="keyword">NULL</span> <span class="keyword">REFERENCES</span> &quot;User&quot;(id) <span class="keyword">ON</span> <span class="keyword">DELETE</span> CASCADE <span class="keyword">ON</span> <span class="keyword">UPDATE</span> CASCADE</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
+
+<h2 id="在同一模型上建立多个-self-relations"><a href="#在同一模型上建立多个-self-relations" class="headerlink" title="在同一模型上建立多个 self-relations"></a>在同一模型上建立多个 self-relations</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">model User &#123;</span><br><span class="line"> id Int @id @default(autoincrement())</span><br><span class="line"> name String?</span><br><span class="line"> teacherId Int?</span><br><span class="line"> teacher User? @relation(&quot;TeacherStudents&quot;, fields: [teacherId], references: [id])</span><br><span class="line"> students User[] @relation(&quot;TeacherStudents&quot;)</span><br><span class="line"> followedBy User[] @relation(&quot;UserFollows&quot;)</span><br><span class="line"> following User[] @relation(&quot;UserFollows&quot;)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<h2 id="REFS"><a href="#REFS" class="headerlink" title="REFS."></a>REFS.</h2><ul>
+<li><a target="_blank" rel="noopener" href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations#relation-fields">fully annotated</a></li>
+<li><a target="_blank" rel="noopener" href="https://www.prisma.io/docs/orm/prisma-schema/data-model/models#optional-and-mandatory-fields">required</a></li>
+<li><a target="_blank" rel="noopener" href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations">implicit</a></li>
+<li><a target="_blank" rel="noopener" href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#relation-tables">relation table</a></li>
+<li><a target="_blank" rel="noopener" href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations">explicit</a></li>
+</ul>
+
+</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 class="icon arrow-left"></div>
+ <div class="post-link">
+ <a href="/2025/02/19/Repository-pattern-in-Typescript/">Prev</a>
+ </div>
+
+ </div>
+ <div class="next-item">
+
+ <div class="icon arrow-right"></div>
+ <div class="post-link">
+ <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/">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/2025/02/19/Repository-pattern-in-Typescript/index.html b/2025/02/19/Repository-pattern-in-Typescript/index.html
new file mode 100644
index 00000000..45e5ddc2
--- /dev/null
+++ b/2025/02/19/Repository-pattern-in-Typescript/index.html
@@ -0,0 +1,308 @@
+<!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>Repository pattern in Typescript | 暮秋小屋</title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+<style>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/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()">
+ Menu
+ </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="/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">
+
+
+ <span class="post-tag">
+ <a href="/tags/Technique/">
+ Technique
+ </a>
+ </span>
+
+ <span class="post-tag">
+ <a href="/tags/Web/">
+ Web
+ </a>
+ </span>
+
+ <span class="post-tag">
+ <a href="/tags/Typescript/">
+ Typescript
+ </a>
+ </span>
+
+ <span class="post-tag">
+ <a href="/tags/Software-Engineering/">
+ Software-Engineering
+ </a>
+ </span>
+
+
+ </div>
+ <div class="post-title">
+
+
+ Repository pattern in Typescript
+
+
+ </div>
+ <span class="post-date">
+ Feb 19, 2025
+ </span>
+ </div>
+ <div class="post-img">
+
+ <div class="h-line-primary"></div>
+
+ </div>
+</div>
+ <div class="post-content">
+ <blockquote>
+<p>The Repository design pattern is a <a target="_blank" rel="noopener" href="https://www.geeksforgeeks.org/structural-design-patterns/">structural pattern</a> that abstracts data access, providing a centralized way to manage data operations. By separating the data layer from business logic, it enhances code maintainability, testability, and flexibility, making it easier to work with various data sources in an application.</p>
+</blockquote>
+<p>抽象化数据访问层的主要作用是将应用的业务逻辑与对数据库的数据访问等实现细节进行解耦。DB 框架的更改不应该影响到应用程序的核心服务,并且它们应该对业务逻辑代码透明。</p>
+<p>业务服务应该只依赖于抽象,而不是实现,数据服务同理。</p>
+<hr>
+<h1 id="Intro"><a href="#Intro" class="headerlink" title="Intro."></a>Intro.</h1><p>例如,此时有一个书籍存储的微服务,并且有一个“添加新书籍”的操作用例,在此用例中可以通过使用 <code>Book</code> 这个 <em>Repository</em> 来添加新书籍,而 <code>Book</code> 具体使用什么数据库,怎么存并不是业务需要关心的事情。</p>
+<h2 id="具体实现方式"><a href="#具体实现方式" class="headerlink" title="具体实现方式"></a>具体实现方式</h2><p>假设有以下实体类型定义:</p>
+<figure class="highlight typescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">class</span> <span class="title class_">Author</span> &#123;</span><br><span class="line"> <span class="attr">firstName</span>: <span class="built_in">string</span>;</span><br><span class="line"> <span class="attr">lastName</span>: <span class="built_in">string</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">class</span> <span class="title class_">Genre</span> &#123;</span><br><span class="line"> <span class="attr">name</span>: <span class="built_in">string</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">class</span> <span class="title class_">Book</span> &#123;</span><br><span class="line"> <span class="attr">title</span>: <span class="built_in">string</span>;</span><br><span class="line"> <span class="attr">author</span>: <span class="title class_">Author</span>;</span><br><span class="line"> <span class="attr">genre</span>: <span class="title class_">Genre</span>;</span><br><span class="line"> <span class="attr">publishDate</span>: <span class="title class_">Date</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<h3 id="抽象化"><a href="#抽象化" class="headerlink" title="抽象化"></a>抽象化</h3><p>第一步是抽象化出一个通用的 <em>Repository</em> ,其中包含通用的操作:</p>
+<figure class="highlight typescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">abstract</span> <span class="keyword">class</span> <span class="title class_">IGenericRepository</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">abstract</span> <span class="title function_">getAll</span>(): <span class="title class_">Promise</span>&lt;T[]&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">abstract</span> <span class="title function_">get</span>(<span class="attr">id</span>: <span class="built_in">string</span>): <span class="title class_">Promise</span>&lt;T&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">abstract</span> <span class="title function_">create</span>(<span class="attr">item</span>: T): <span class="title class_">Promise</span>&lt;T&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">abstract</span> <span class="title function_">update</span>(<span class="attr">id</span>: <span class="built_in">string</span>, <span class="attr">item</span>: T);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<ul>
+<li>这里具体有那些函数可以根据需要(业务)自己定义。</li>
+<li>类型参数 <code>T</code> 表示每个实体。</li>
+</ul>
+<p>接着,定义一个数据服务,其中包含使用 <code>IGenericRepositoiry</code> 定义的具体实例对应的 _Repository_:</p>
+<figure class="highlight typescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">Author</span>, <span class="title class_">Book</span>, <span class="title class_">Genre</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;../entities&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">IGenericRepository</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;./generic-repository.abstract&#x27;</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">abstract</span> <span class="keyword">class</span> <span class="title class_">IDataServices</span> &#123;</span><br><span class="line"> <span class="keyword">abstract</span> <span class="attr">authors</span>: <span class="title class_">IGenericRepository</span>&lt;<span class="title class_">Author</span>&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">abstract</span> <span class="attr">books</span>: <span class="title class_">IGenericRepository</span>&lt;<span class="title class_">Book</span>&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">abstract</span> <span class="attr">genres</span>: <span class="title class_">IGenericRepository</span>&lt;<span class="title class_">Genre</span>&gt;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<ul>
+<li>这里有三个 <em>Repository</em> 分别对应不同的实体。</li>
+<li><code>IGenericRepository</code> 中定义的函数是每个 <em>Repository</em> 公开的通用存储函数。</li>
+</ul>
+<p>以上这些就是对业务中的实体的 <em>Repository</em> 抽象,这样就隔离开了业务和存储逻辑,例如使用 MongoDB,可以实现一个 <code>MongoGenericRepository</code>:</p>
+<figure class="highlight typescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">Model</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;mongoose&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">IGenericRepository</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;../../../core&#x27;</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">class</span> <span class="title class_">MongoGenericRepository</span>&lt;T&gt; <span class="keyword">implements</span> <span class="title class_">IGenericRepository</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">private</span> <span class="attr">_repository</span>: <span class="title class_">Model</span>&lt;T&gt;;</span><br><span class="line"> <span class="keyword">private</span> <span class="attr">_populateOnFind</span>: <span class="built_in">string</span>[];</span><br><span class="line"></span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params">repository: Model&lt;T&gt;, populateOnFind: <span class="built_in">string</span>[] = []</span>) &#123;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">_repository</span> = repository;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">_populateOnFind</span> = populateOnFind;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">getAll</span>(): <span class="title class_">Promise</span>&lt;T[]&gt; &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">_repository</span>.<span class="title function_">find</span>().<span class="title function_">populate</span>(<span class="variable language_">this</span>.<span class="property">_populateOnFind</span>).<span class="title function_">exec</span>();</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">get</span>(<span class="attr">id</span>: <span class="built_in">any</span>): <span class="title class_">Promise</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">_repository</span>.<span class="title function_">findById</span>(id).<span class="title function_">populate</span>(<span class="variable language_">this</span>.<span class="property">_populateOnFind</span>).<span class="title function_">exec</span>();</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">create</span>(<span class="attr">item</span>: T): <span class="title class_">Promise</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">_repository</span>.<span class="title function_">create</span>(item);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">update</span>(<span class="params">id: <span class="built_in">string</span>, item: T</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">_repository</span>.<span class="title function_">findByIdAndUpdate</span>(id, item);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<p>然后实现一个 <code>MongoDataServices</code>:</p>
+<figure class="highlight typescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">Injectable</span>, <span class="title class_">OnApplicationBootstrap</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;@nestjs/common&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">InjectModel</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;@nestjs/mongoose&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">Model</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;mongoose&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">IDataServices</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;../../../core&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">MongoGenericRepository</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;./mongo-generic-repository&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123;</span><br><span class="line"> <span class="title class_">Author</span>,</span><br><span class="line"> <span class="title class_">AuthorDocument</span>,</span><br><span class="line"> <span class="title class_">Book</span>,</span><br><span class="line"> <span class="title class_">BookDocument</span>,</span><br><span class="line"> <span class="title class_">Genre</span>,</span><br><span class="line"> <span class="title class_">GenreDocument</span>,</span><br><span class="line">&#125; <span class="keyword">from</span> <span class="string">&#x27;./model&#x27;</span>;</span><br><span class="line"></span><br><span class="line"><span class="meta">@Injectable</span>()</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">class</span> <span class="title class_">MongoDataServices</span></span><br><span class="line"> <span class="keyword">implements</span> <span class="title class_">IDataServices</span>, <span class="title class_">OnApplicationBootstrap</span></span><br><span class="line">&#123;</span><br><span class="line"> <span class="attr">authors</span>: <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Author</span>&gt;;</span><br><span class="line"> <span class="attr">books</span>: <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Book</span>&gt;;</span><br><span class="line"> <span class="attr">genres</span>: <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Genre</span>&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"></span></span><br><span class="line"><span class="params"> <span class="meta">@InjectModel</span>(Author.name)</span></span><br><span class="line"><span class="params"> <span class="keyword">private</span> AuthorRepository: Model&lt;AuthorDocument&gt;,</span></span><br><span class="line"><span class="params"> <span class="meta">@InjectModel</span>(Book.name)</span></span><br><span class="line"><span class="params"> <span class="keyword">private</span> BookRepository: Model&lt;BookDocument&gt;,</span></span><br><span class="line"><span class="params"> <span class="meta">@InjectModel</span>(Genre.name)</span></span><br><span class="line"><span class="params"> <span class="keyword">private</span> GenreRepository: Model&lt;GenreDocument&gt;,</span></span><br><span class="line"><span class="params"> </span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">onApplicationBootstrap</span>(<span class="params"></span>) &#123;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">authors</span> = <span class="keyword">new</span> <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Author</span>&gt;(<span class="variable language_">this</span>.<span class="property">AuthorRepository</span>);</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">books</span> = <span class="keyword">new</span> <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Book</span>&gt;(<span class="variable language_">this</span>.<span class="property">BookRepository</span>, [</span><br><span class="line"> <span class="string">&#x27;author&#x27;</span>,</span><br><span class="line"> <span class="string">&#x27;genre&#x27;</span>,</span><br><span class="line"> ]);</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">genres</span> = <span class="keyword">new</span> <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Genre</span>&gt;(<span class="variable language_">this</span>.<span class="property">GenreRepository</span>);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<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/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">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/01/index.html b/archives/2025/01/index.html
new file mode 100644
index 00000000..28c19cc9
--- /dev/null
+++ b/archives/2025/01/index.html
@@ -0,0 +1,217 @@
+<!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/1 | 暮秋小屋</title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+<style>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/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()">
+ Menu
+ </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="/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>
+</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/2025/02/index.html b/archives/2025/02/index.html
new file mode 100644
index 00000000..c24a1a6a
--- /dev/null
+++ b/archives/2025/02/index.html
@@ -0,0 +1,235 @@
+<!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/2 | 暮秋小屋</title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+<style>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/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()">
+ Menu
+ </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="/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/02/19/Repository-pattern-in-Typescript/">
+
+ Repository pattern in Typescript
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 19, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">
+
+ Prisma 关系型数据库的 Self-relations
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 18, 2025</span>
+ </div>
+
+
+ <div id="paginator">
+
+ </div>
+</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/2025/index.html b/archives/2025/index.html
new file mode 100644
index 00000000..00746d23
--- /dev/null
+++ b/archives/2025/index.html
@@ -0,0 +1,253 @@
+<!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>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/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()">
+ Menu
+ </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="/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/02/19/Repository-pattern-in-Typescript/">
+
+ Repository pattern in Typescript
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 19, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">
+
+ Prisma 关系型数据库的 Self-relations
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 18, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div 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>
+</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 882dc93c..8956527c 100644
--- a/archives/index.html
+++ b/archives/index.html
@@ -139,19 +139,19 @@
- <div class="year-title">2024</div>
+ <div class="year-title">2025</div>
<div class="post-list-item">
<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 href="/2025/02/19/Repository-pattern-in-Typescript/">
- 二〇二四年十二月十八日
+ Repository pattern in Typescript
</a>
</div>
- <span class="post-date">Dec 18, 2024</span>
+ <span class="post-date">Feb 19, 2025</span>
</div>
@@ -162,14 +162,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/12/15/OCaml-News-2024-7/">
+ <a href="/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">
- OCaml News 2024-7
+ Prisma 关系型数据库的 Self-relations
</a>
</div>
- <span class="post-date">Dec 15, 2024</span>
+ <span class="post-date">Feb 18, 2025</span>
</div>
@@ -180,14 +180,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/11/26/%E5%A6%82%E4%BD%95%E7%AE%A1%E7%90%86%E7%94%A8%E6%88%B7%E7%95%8C%E9%9D%A2%E4%B8%AD%E7%9A%84%E5%8D%B1%E9%99%A9%E6%93%8D%E4%BD%9C/">
+ <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">Nov 26, 2024</span>
+ <span class="post-date">Jan 19, 2025</span>
</div>
@@ -195,17 +195,19 @@
+ <div class="year-title">2024</div>
+
<div class="post-list-item">
<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 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>
</div>
- <span class="post-date">Nov 17, 2024</span>
+ <span class="post-date">Dec 18, 2024</span>
</div>
@@ -216,14 +218,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/11/15/%E8%A5%BF%E6%9F%9A%E5%AF%B9%E8%8D%AF%E7%89%A9%E7%9A%84%E5%BD%B1%E5%93%8D/">
+ <a href="/2024/12/15/OCaml-News-2024-7/">
- 西柚对药物的影响
+ OCaml News 2024-7
</a>
</div>
- <span class="post-date">Nov 15, 2024</span>
+ <span class="post-date">Dec 15, 2024</span>
</div>
@@ -234,14 +236,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/">
+ <a href="/2024/11/26/%E5%A6%82%E4%BD%95%E7%AE%A1%E7%90%86%E7%94%A8%E6%88%B7%E7%95%8C%E9%9D%A2%E4%B8%AD%E7%9A%84%E5%8D%B1%E9%99%A9%E6%93%8D%E4%BD%9C/">
- 10 Tips for Productive FSharp Scripting
+ 如何管理用户界面中的危险操作
</a>
</div>
- <span class="post-date">Oct 18, 2024</span>
+ <span class="post-date">Nov 26, 2024</span>
</div>
@@ -252,14 +254,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/10/18/Building-custom-fibers-library-in-FSharp/">
+ <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/">
- Building custom fibers library in FSharp
+ 二〇二四年十一月十七日
</a>
</div>
- <span class="post-date">Oct 18, 2024</span>
+ <span class="post-date">Nov 17, 2024</span>
</div>
@@ -270,14 +272,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/">
+ <a href="/2024/11/15/%E8%A5%BF%E6%9F%9A%E5%AF%B9%E8%8D%AF%E7%89%A9%E7%9A%84%E5%BD%B1%E5%93%8D/">
- Dealing with complex dependency injection in FSharp
+ 西柚对药物的影响
</a>
</div>
- <span class="post-date">Oct 18, 2024</span>
+ <span class="post-date">Nov 15, 2024</span>
</div>
@@ -288,14 +290,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/10/06/Obsidian-Vault-%E7%9A%84-obsidian-%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%90%84%E6%96%87%E4%BB%B6%E4%BD%9C%E7%94%A8/">
+ <a href="/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/">
- Obsidian Vault 的 .obsidian 目录中的各文件作用
+ 10 Tips for Productive FSharp Scripting
</a>
</div>
- <span class="post-date">Oct 6, 2024</span>
+ <span class="post-date">Oct 18, 2024</span>
</div>
@@ -306,14 +308,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/09/27/Turborepo-%E7%AE%80%E8%BF%B0/">
+ <a href="/2024/10/18/Building-custom-fibers-library-in-FSharp/">
- Turborepo 简述
+ Building custom fibers library in FSharp
</a>
</div>
- <span class="post-date">Sep 27, 2024</span>
+ <span class="post-date">Oct 18, 2024</span>
</div>
@@ -322,7 +324,7 @@
<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/page/2/">2</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/11/">11</a>
+ <span class="page-number current">1</span><a class="page-number" href="/archives/page/2/">2</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/12/">12</a>
</nav>
</div>
diff --git a/archives/page/10/index.html b/archives/page/10/index.html
index e69cec33..dadd40e5 100644
--- a/archives/page/10/index.html
+++ b/archives/page/10/index.html
@@ -144,14 +144,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/02/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">
+ <a href="/2023/03/01/%E6%B0%94%E8%83%B8/">
- 二零二三年二月二十五日
+ 气胸
</a>
</div>
- <span class="post-date">Feb 25, 2023</span>
+ <span class="post-date">Mar 1, 2023</span>
</div>
@@ -162,14 +162,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/02/24/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E5%9B%9B%E6%97%A5/">
+ <a href="/2023/03/01/%E7%BA%AF%E7%89%9B%E5%A5%B6%E5%8F%AF%E4%BB%A5%E5%8A%A0%E7%82%B9%E5%95%A5/">
- 二零二三年二月二十四日
+ 纯牛奶可以加点啥
</a>
</div>
- <span class="post-date">Feb 24, 2023</span>
+ <span class="post-date">Mar 1, 2023</span>
</div>
@@ -180,14 +180,14 @@
<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 href="/2023/02/26/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E5%85%AD%E6%97%A5/">
- 二零二三年二月二十二日
+ 二零二三年二月二十六日
</a>
</div>
- <span class="post-date">Feb 22, 2023</span>
+ <span class="post-date">Feb 26, 2023</span>
</div>
@@ -198,14 +198,14 @@
<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/">
+ <a href="/2023/02/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">
- 二零二三年二月二日
+ 二零二三年二月二十五日
</a>
</div>
- <span class="post-date">Feb 2, 2023</span>
+ <span class="post-date">Feb 25, 2023</span>
</div>
@@ -216,14 +216,14 @@
<div class="post-list-item">
<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 href="/2023/02/24/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E5%9B%9B%E6%97%A5/">
- 二零二三年二月一日
+ 二零二三年二月二十四日
</a>
</div>
- <span class="post-date">Feb 1, 2023</span>
+ <span class="post-date">Feb 24, 2023</span>
</div>
@@ -234,14 +234,14 @@
<div class="post-list-item">
<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 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">Jan 21, 2023</span>
+ <span class="post-date">Feb 22, 2023</span>
</div>
@@ -249,19 +249,17 @@
- <div class="year-title">2022</div>
-
<div class="post-list-item">
<div class="post-title">
- <a href="/2022/12/31/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%B8%89%E5%8D%81%E4%B8%80%E6%97%A5/">
+ <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/">
- 二零二二年十二月三十一日
+ 二零二三年二月二日
</a>
</div>
- <span class="post-date">Dec 31, 2022</span>
+ <span class="post-date">Feb 2, 2023</span>
</div>
@@ -272,14 +270,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2022/11/03/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E6%9C%88%E4%B8%89%E6%97%A5/">
+ <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>
</div>
- <span class="post-date">Nov 3, 2022</span>
+ <span class="post-date">Feb 1, 2023</span>
</div>
@@ -290,14 +288,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2022/10/01/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%8D%81%E6%9C%88%E4%B8%80%E6%97%A5/">
+ <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>
</div>
- <span class="post-date">Oct 1, 2022</span>
+ <span class="post-date">Jan 21, 2023</span>
</div>
@@ -305,17 +303,19 @@
+ <div class="year-title">2022</div>
+
<div class="post-list-item">
<div class="post-title">
- <a href="/2022/09/22/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E4%B9%9D%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%8C%E6%97%A5/">
+ <a href="/2022/12/31/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%B8%89%E5%8D%81%E4%B8%80%E6%97%A5/">
- 二零二二年九月二十二日
+ 二零二二年十二月三十一日
</a>
</div>
- <span class="post-date">Sep 22, 2022</span>
+ <span class="post-date">Dec 31, 2022</span>
</div>
@@ -324,7 +324,7 @@
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/9/">9</a><span class="page-number current">10</span><a class="page-number" href="/archives/page/11/">11</a>
+ <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/9/">9</a><span class="page-number current">10</span><a class="page-number" href="/archives/page/11/">11</a><a class="page-number" href="/archives/page/12/">12</a>
</nav>
</div>
diff --git a/archives/page/11/index.html b/archives/page/11/index.html
index 435285ae..797902d0 100644
--- a/archives/page/11/index.html
+++ b/archives/page/11/index.html
@@ -144,14 +144,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2022/08/21/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%85%AB%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/">
+ <a href="/2022/11/03/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E6%9C%88%E4%B8%89%E6%97%A5/">
- 二零二二年八月二十一日
+ 二零二二年十一月月三日
</a>
</div>
- <span class="post-date">Aug 21, 2022</span>
+ <span class="post-date">Nov 3, 2022</span>
</div>
@@ -162,14 +162,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2022/03/14/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E4%B8%89%E6%9C%88%E5%8D%81%E5%9B%9B%E6%97%A5/">
+ <a href="/2022/10/01/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%8D%81%E6%9C%88%E4%B8%80%E6%97%A5/">
- 二零二二年三月十四日
+ 二零二二年十月一日
</a>
</div>
- <span class="post-date">Mar 14, 2022</span>
+ <span class="post-date">Oct 1, 2022</span>
</div>
@@ -180,14 +180,14 @@
<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 href="/2022/09/22/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E4%B9%9D%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%8C%E6%97%A5/">
- 二零二二年一月一日
+ 二零二二年九月二十二日
</a>
</div>
- <span class="post-date">Jan 1, 2022</span>
+ <span class="post-date">Sep 22, 2022</span>
</div>
@@ -195,19 +195,17 @@
- <div class="year-title">2021</div>
-
<div class="post-list-item">
<div class="post-title">
- <a href="/2021/03/27/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%80%E5%B9%B4%E4%B8%89%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%83%E6%97%A5/">
+ <a href="/2022/08/21/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%85%AB%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/">
- 二零二一年三月二十七日
+ 二零二二年八月二十一日
</a>
</div>
- <span class="post-date">Mar 27, 2021</span>
+ <span class="post-date">Aug 21, 2022</span>
</div>
@@ -218,14 +216,14 @@
<div class="post-list-item">
<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 href="/2022/03/14/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E4%B8%89%E6%9C%88%E5%8D%81%E5%9B%9B%E6%97%A5/">
- 二零二一年三月十五日
+ 二零二二年三月十四日
</a>
</div>
- <span class="post-date">Mar 15, 2021</span>
+ <span class="post-date">Mar 14, 2022</span>
</div>
@@ -236,14 +234,14 @@
<div class="post-list-item">
<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 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">Feb 16, 2021</span>
+ <span class="post-date">Jan 1, 2022</span>
</div>
@@ -251,17 +249,19 @@
+ <div class="year-title">2021</div>
+
<div class="post-list-item">
<div class="post-title">
- <a href="/2021/02/14/%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%9B%9B%E6%97%A5/">
+ <a href="/2021/03/27/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%80%E5%B9%B4%E4%B8%89%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%83%E6%97%A5/">
- 二零二一年二月十四日
+ 二零二一年三月二十七日
</a>
</div>
- <span class="post-date">Feb 14, 2021</span>
+ <span class="post-date">Mar 27, 2021</span>
</div>
@@ -269,19 +269,17 @@
- <div class="year-title">2020</div>
-
<div class="post-list-item">
<div class="post-title">
- <a href="/2020/12/26/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E9%9B%B6%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E5%85%AD%E6%97%A5/">
+ <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>
</div>
- <span class="post-date">Dec 26, 2020</span>
+ <span class="post-date">Mar 15, 2021</span>
</div>
@@ -292,14 +290,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2020/12/09/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E9%9B%B6%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%B9%9D%E6%97%A5/">
+ <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>
</div>
- <span class="post-date">Dec 9, 2020</span>
+ <span class="post-date">Feb 16, 2021</span>
</div>
@@ -310,14 +308,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2020/12/08/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E9%9B%B6%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E5%85%AB%E6%97%A5/">
+ <a href="/2021/02/14/%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%9B%9B%E6%97%A5/">
- 二零二零年十二月八日
+ 二零二一年二月十四日
</a>
</div>
- <span class="post-date">Dec 8, 2020</span>
+ <span class="post-date">Feb 14, 2021</span>
</div>
@@ -326,7 +324,7 @@
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/10/">10</a><span class="page-number current">11</span>
+ <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/10/">10</a><span class="page-number current">11</span><a class="page-number" href="/archives/page/12/">12</a>
</nav>
</div>
diff --git a/archives/page/12/index.html b/archives/page/12/index.html
new file mode 100644
index 00000000..344384fe
--- /dev/null
+++ b/archives/page/12/index.html
@@ -0,0 +1,260 @@
+<!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 | 暮秋小屋</title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+<style>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/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()">
+ Menu
+ </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="/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">2020</div>
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2020/12/26/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E9%9B%B6%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E5%85%AD%E6%97%A5/">
+
+ 二零二零年十二月二十六日
+
+ </a>
+ </div>
+
+ <span class="post-date">Dec 26, 2020</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2020/12/09/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E9%9B%B6%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%B9%9D%E6%97%A5/">
+
+ 二零二零年十二月九日
+
+ </a>
+ </div>
+
+ <span class="post-date">Dec 9, 2020</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2020/12/08/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E9%9B%B6%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E5%85%AB%E6%97%A5/">
+
+ 二零二零年十二月八日
+
+ </a>
+ </div>
+
+ <span class="post-date">Dec 8, 2020</span>
+ </div>
+
+
+ <div id="paginator">
+
+ <div class=paginator>
+ <div class="h-line-primary"></div>
+ <nav class="pagination">
+ <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/11/">11</a><span class="page-number current">12</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/page/2/index.html b/archives/page/2/index.html
index f9d39ee4..07a7f4cd 100644
--- a/archives/page/2/index.html
+++ b/archives/page/2/index.html
@@ -144,14 +144,14 @@
<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/">
+ <a href="/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/">
- 肩周炎和肩袖损伤的区别
+ Dealing with complex dependency injection in FSharp
</a>
</div>
- <span class="post-date">Sep 15, 2024</span>
+ <span class="post-date">Oct 18, 2024</span>
</div>
@@ -162,14 +162,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/">
+ <a href="/2024/10/06/Obsidian-Vault-%E7%9A%84-obsidian-%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%90%84%E6%96%87%E4%BB%B6%E4%BD%9C%E7%94%A8/">
- Advanced C binding using ocaml-ctypes and dune
+ Obsidian Vault 的 .obsidian 目录中的各文件作用
</a>
</div>
- <span class="post-date">Sep 15, 2024</span>
+ <span class="post-date">Oct 6, 2024</span>
</div>
@@ -180,14 +180,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/09/12/Functional-Reactive-Programming-in-F/">
+ <a href="/2024/09/27/Turborepo-%E7%AE%80%E8%BF%B0/">
- Functional Reactive Programming in F#
+ Turborepo 简述
</a>
</div>
- <span class="post-date">Sep 12, 2024</span>
+ <span class="post-date">Sep 27, 2024</span>
</div>
@@ -198,14 +198,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/09/12/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%B9%9D%E6%9C%88%E5%8D%81%E4%BA%8C%E6%97%A5/">
+ <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/">
- 二〇二四年九月十二日
+ 肩周炎和肩袖损伤的区别
</a>
</div>
- <span class="post-date">Sep 12, 2024</span>
+ <span class="post-date">Sep 15, 2024</span>
</div>
@@ -216,14 +216,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/09/08/%E4%B8%AD%E8%80%81%E5%B9%B4%E4%BA%BA%E6%B2%89%E8%BF%B7%E6%89%8B%E6%9C%BA%E7%9A%84%E9%97%AE%E9%A2%98/">
+ <a href="/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/">
- 中老年人沉迷手机的问题
+ Advanced C binding using ocaml-ctypes and dune
</a>
</div>
- <span class="post-date">Sep 8, 2024</span>
+ <span class="post-date">Sep 15, 2024</span>
</div>
@@ -234,14 +234,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/09/07/%E7%BB%99%E5%AD%A9%E5%AD%90%E4%BB%AC%E7%9A%84%E8%AF%9D/">
+ <a href="/2024/09/12/Functional-Reactive-Programming-in-F/">
- 什么玩意儿都是
+ Functional Reactive Programming in F#
</a>
</div>
- <span class="post-date">Sep 7, 2024</span>
+ <span class="post-date">Sep 12, 2024</span>
</div>
@@ -252,14 +252,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/09/01/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%B9%9D%E6%9C%88%E4%B8%80%E6%97%A5/">
+ <a href="/2024/09/12/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%B9%9D%E6%9C%88%E5%8D%81%E4%BA%8C%E6%97%A5/">
- 二〇二四年九月一日
+ 二〇二四年九月十二日
</a>
</div>
- <span class="post-date">Sep 1, 2024</span>
+ <span class="post-date">Sep 12, 2024</span>
</div>
@@ -270,14 +270,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/09/01/%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E6%B0%B4%E5%92%8C%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E5%8F%A3%E6%9C%8D%E6%B6%B2%E7%9A%84%E5%8C%BA%E5%88%AB/">
+ <a href="/2024/09/08/%E4%B8%AD%E8%80%81%E5%B9%B4%E4%BA%BA%E6%B2%89%E8%BF%B7%E6%89%8B%E6%9C%BA%E7%9A%84%E9%97%AE%E9%A2%98/">
- 藿香正气水和藿香正气口服液的区别
+ 中老年人沉迷手机的问题
</a>
</div>
- <span class="post-date">Sep 1, 2024</span>
+ <span class="post-date">Sep 8, 2024</span>
</div>
@@ -288,14 +288,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/08/12/%E7%9B%B4%E7%B3%BB%E8%A1%80%E4%BA%B2%E4%B9%8B%E9%97%B4%E4%B8%8D%E8%83%BD%E7%9B%B4%E6%8E%A5%E8%BE%93%E8%A1%80/">
+ <a href="/2024/09/07/%E7%BB%99%E5%AD%A9%E5%AD%90%E4%BB%AC%E7%9A%84%E8%AF%9D/">
- 直系血亲之间不能直接输血
+ 什么玩意儿都是
</a>
</div>
- <span class="post-date">Aug 12, 2024</span>
+ <span class="post-date">Sep 7, 2024</span>
</div>
@@ -306,14 +306,14 @@
<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 href="/2024/09/01/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%B9%9D%E6%9C%88%E4%B8%80%E6%97%A5/">
- 二〇二四年八月一日
+ 二〇二四年九月一日
</a>
</div>
- <span class="post-date">Aug 2, 2024</span>
+ <span class="post-date">Sep 1, 2024</span>
</div>
@@ -322,7 +322,7 @@
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/archives/">1</a><span class="page-number current">2</span><a class="page-number" href="/archives/page/3/">3</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/11/">11</a>
+ <a class="page-number" href="/archives/">1</a><span class="page-number current">2</span><a class="page-number" href="/archives/page/3/">3</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/12/">12</a>
</nav>
</div>
diff --git a/archives/page/3/index.html b/archives/page/3/index.html
index 2b77cbd6..9a457c42 100644
--- a/archives/page/3/index.html
+++ b/archives/page/3/index.html
@@ -144,14 +144,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/07/23/OCaml-News-2024-6/">
+ <a href="/2024/09/01/%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E6%B0%B4%E5%92%8C%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E5%8F%A3%E6%9C%8D%E6%B6%B2%E7%9A%84%E5%8C%BA%E5%88%AB/">
- OCaml News 2024-6
+ 藿香正气水和藿香正气口服液的区别
</a>
</div>
- <span class="post-date">Jul 23, 2024</span>
+ <span class="post-date">Sep 1, 2024</span>
</div>
@@ -162,14 +162,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/07/09/%E7%A5%9E%E7%BB%8F%E7%B3%BB%E7%BB%9F%E9%87%8D%E7%82%B9/">
+ <a href="/2024/08/12/%E7%9B%B4%E7%B3%BB%E8%A1%80%E4%BA%B2%E4%B9%8B%E9%97%B4%E4%B8%8D%E8%83%BD%E7%9B%B4%E6%8E%A5%E8%BE%93%E8%A1%80/">
- 内护神经系统重点考点
+ 直系血亲之间不能直接输血
</a>
</div>
- <span class="post-date">Jul 9, 2024</span>
+ <span class="post-date">Aug 12, 2024</span>
</div>
@@ -180,14 +180,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/07/01/OCaml-News-2024-4/">
+ <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/">
- OCaml News 2024-4
+ 二〇二四年八月一日
</a>
</div>
- <span class="post-date">Jul 1, 2024</span>
+ <span class="post-date">Aug 2, 2024</span>
</div>
@@ -198,14 +198,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/06/27/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%83%E6%97%A5/">
+ <a href="/2024/07/23/OCaml-News-2024-6/">
- 二〇二四年六月二十七日
+ OCaml News 2024-6
</a>
</div>
- <span class="post-date">Jun 27, 2024</span>
+ <span class="post-date">Jul 23, 2024</span>
</div>
@@ -216,14 +216,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/06/27/OCaml-News-2024-5/">
+ <a href="/2024/07/09/%E7%A5%9E%E7%BB%8F%E7%B3%BB%E7%BB%9F%E9%87%8D%E7%82%B9/">
- OCaml News 2024-5
+ 内护神经系统重点考点
</a>
</div>
- <span class="post-date">Jun 27, 2024</span>
+ <span class="post-date">Jul 9, 2024</span>
</div>
@@ -234,14 +234,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/06/06/NET-AOT-%E4%B8%8B%E7%9A%84-F-%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90%E5%BA%93%E9%80%89%E6%8B%A9/">
+ <a href="/2024/07/01/OCaml-News-2024-4/">
- .NET AOT 下的 F# 命令行参数解析库选择
+ OCaml News 2024-4
</a>
</div>
- <span class="post-date">Jun 6, 2024</span>
+ <span class="post-date">Jul 1, 2024</span>
</div>
@@ -252,14 +252,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/05/20/Rescript-genType-import-%E9%97%AE%E9%A2%98/">
+ <a href="/2024/06/27/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%83%E6%97%A5/">
- Rescript @genType import 问题
+ 二〇二四年六月二十七日
</a>
</div>
- <span class="post-date">May 20, 2024</span>
+ <span class="post-date">Jun 27, 2024</span>
</div>
@@ -270,14 +270,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/05/16/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%BA%94%E6%9C%88%E5%8D%81%E5%85%AD%E6%97%A5/">
+ <a href="/2024/06/27/OCaml-News-2024-5/">
- 二〇二四年五月十六日
+ OCaml News 2024-5
</a>
</div>
- <span class="post-date">May 16, 2024</span>
+ <span class="post-date">Jun 27, 2024</span>
</div>
@@ -288,14 +288,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/05/13/%E7%BB%99%E5%B0%B8%E4%BD%93%E4%B8%8A-ECMO-%E5%B9%B6%E7%BB%B4%E6%8C%81%E5%BF%83%E8%B7%B3/">
+ <a href="/2024/06/06/NET-AOT-%E4%B8%8B%E7%9A%84-F-%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90%E5%BA%93%E9%80%89%E6%8B%A9/">
- 给尸体上 ECMO 并维持心跳
+ .NET AOT 下的 F# 命令行参数解析库选择
</a>
</div>
- <span class="post-date">May 13, 2024</span>
+ <span class="post-date">Jun 6, 2024</span>
</div>
@@ -306,14 +306,14 @@
<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 href="/2024/05/20/Rescript-genType-import-%E9%97%AE%E9%A2%98/">
- 二〇二四年五月七日
+ Rescript @genType import 问题
</a>
</div>
- <span class="post-date">May 7, 2024</span>
+ <span class="post-date">May 20, 2024</span>
</div>
@@ -322,7 +322,7 @@
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/archives/">1</a><a class="page-number" href="/archives/page/2/">2</a><span class="page-number current">3</span><a class="page-number" href="/archives/page/4/">4</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/11/">11</a>
+ <a class="page-number" href="/archives/">1</a><a class="page-number" href="/archives/page/2/">2</a><span class="page-number current">3</span><a class="page-number" href="/archives/page/4/">4</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/12/">12</a>
</nav>
</div>
diff --git a/archives/page/4/index.html b/archives/page/4/index.html
index 4d95ec50..158ddea6 100644
--- a/archives/page/4/index.html
+++ b/archives/page/4/index.html
@@ -144,14 +144,14 @@
<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/">
+ <a href="/2024/05/16/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%BA%94%E6%9C%88%E5%8D%81%E5%85%AD%E6%97%A5/">
- 二〇二四年四月八日
+ 二〇二四年五月十六日
</a>
</div>
- <span class="post-date">Apr 8, 2024</span>
+ <span class="post-date">May 16, 2024</span>
</div>
@@ -162,14 +162,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/04/03/shadow-cljs-proxy/">
+ <a href="/2024/05/13/%E7%BB%99%E5%B0%B8%E4%BD%93%E4%B8%8A-ECMO-%E5%B9%B6%E7%BB%B4%E6%8C%81%E5%BF%83%E8%B7%B3/">
- shadow-cljs 怎么设置代理
+ 给尸体上 ECMO 并维持心跳
</a>
</div>
- <span class="post-date">Apr 3, 2024</span>
+ <span class="post-date">May 13, 2024</span>
</div>
@@ -180,14 +180,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/03/22/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%B8%89%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%8C%E6%97%A5/">
+ <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">Mar 22, 2024</span>
+ <span class="post-date">May 7, 2024</span>
</div>
@@ -198,14 +198,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/02/26/OCaml-News-2024-3/">
+ <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/">
- OCaml News 2024-3
+ 二〇二四年四月八日
</a>
</div>
- <span class="post-date">Feb 26, 2024</span>
+ <span class="post-date">Apr 8, 2024</span>
</div>
@@ -216,14 +216,14 @@
<div class="post-list-item">
<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 href="/2024/04/03/shadow-cljs-proxy/">
- 二〇二四年二月七日
+ shadow-cljs 怎么设置代理
</a>
</div>
- <span class="post-date">Feb 7, 2024</span>
+ <span class="post-date">Apr 3, 2024</span>
</div>
@@ -234,14 +234,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/01/25/%E6%80%A5%E8%AF%8A%E4%B8%8E%E7%81%BE%E9%9A%BE%E5%8C%BB%E5%AD%A6-%E7%83%A7%E4%BC%A4/">
+ <a href="/2024/03/22/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E4%B8%89%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%8C%E6%97%A5/">
- 急诊与灾难医学--烧伤
+ 二〇二四年三月二十二日
</a>
</div>
- <span class="post-date">Jan 25, 2024</span>
+ <span class="post-date">Mar 22, 2024</span>
</div>
@@ -252,14 +252,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/01/23/G-Machine/">
+ <a href="/2024/02/26/OCaml-News-2024-3/">
- G-Machine
+ OCaml News 2024-3
</a>
</div>
- <span class="post-date">Jan 23, 2024</span>
+ <span class="post-date">Feb 26, 2024</span>
</div>
@@ -270,14 +270,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/01/23/%E6%85%A2%E6%80%A7%E8%82%BA%E6%BA%90%E6%80%A7%E5%BF%83%E8%84%8F%E7%97%85/">
+ <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>
</div>
- <span class="post-date">Jan 23, 2024</span>
+ <span class="post-date">Feb 7, 2024</span>
</div>
@@ -288,14 +288,14 @@
<div class="post-list-item">
<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 href="/2024/01/25/%E6%80%A5%E8%AF%8A%E4%B8%8E%E7%81%BE%E9%9A%BE%E5%8C%BB%E5%AD%A6-%E7%83%A7%E4%BC%A4/">
- 二〇二四年一月二十三日
+ 急诊与灾难医学--烧伤
</a>
</div>
- <span class="post-date">Jan 23, 2024</span>
+ <span class="post-date">Jan 25, 2024</span>
</div>
@@ -306,14 +306,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/01/22/Rescript-React-Native/">
+ <a href="/2024/01/23/G-Machine/">
- Rescript and React Native
+ G-Machine
</a>
</div>
- <span class="post-date">Jan 22, 2024</span>
+ <span class="post-date">Jan 23, 2024</span>
</div>
@@ -322,7 +322,7 @@
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/3/">3</a><span class="page-number current">4</span><a class="page-number" href="/archives/page/5/">5</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/11/">11</a>
+ <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/3/">3</a><span class="page-number current">4</span><a class="page-number" href="/archives/page/5/">5</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/12/">12</a>
</nav>
</div>
diff --git a/archives/page/5/index.html b/archives/page/5/index.html
index 823278ef..a12caac2 100644
--- a/archives/page/5/index.html
+++ b/archives/page/5/index.html
@@ -144,14 +144,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/01/18/OCaml-News-2024-2/">
+ <a href="/2024/01/23/%E6%85%A2%E6%80%A7%E8%82%BA%E6%BA%90%E6%80%A7%E5%BF%83%E8%84%8F%E7%97%85/">
- OCaml News 2024-2
+ 慢性肺源性心脏病
</a>
</div>
- <span class="post-date">Jan 18, 2024</span>
+ <span class="post-date">Jan 23, 2024</span>
</div>
@@ -162,14 +162,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/01/08/OCaml-News-2024-1/">
+ <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/">
- OCaml News 2024-1
+ 二〇二四年一月二十三日
</a>
</div>
- <span class="post-date">Jan 8, 2024</span>
+ <span class="post-date">Jan 23, 2024</span>
</div>
@@ -177,19 +177,17 @@
- <div class="year-title">2023</div>
-
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/12/02/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%BA%8C%E6%97%A5/">
+ <a href="/2024/01/22/Rescript-React-Native/">
- 二〇二三年十二月二日
+ Rescript and React Native
</a>
</div>
- <span class="post-date">Dec 2, 2023</span>
+ <span class="post-date">Jan 22, 2024</span>
</div>
@@ -200,14 +198,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/12/01/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%B8%80%E6%97%A5/">
+ <a href="/2024/01/18/OCaml-News-2024-2/">
- 二〇二三年十二月一日
+ OCaml News 2024-2
</a>
</div>
- <span class="post-date">Dec 1, 2023</span>
+ <span class="post-date">Jan 18, 2024</span>
</div>
@@ -218,14 +216,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/11/29/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B9%9D%E6%97%A5/">
+ <a href="/2024/01/08/OCaml-News-2024-1/">
- 二〇二三年十一月二十九日
+ OCaml News 2024-1
</a>
</div>
- <span class="post-date">Nov 29, 2023</span>
+ <span class="post-date">Jan 8, 2024</span>
</div>
@@ -233,17 +231,19 @@
+ <div class="year-title">2023</div>
+
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/">
+ <a href="/2023/12/02/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%BA%8C%E6%97%A5/">
- Adolescent Onset of Acute Heart Failure
+ 二〇二三年十二月二日
</a>
</div>
- <span class="post-date">Nov 21, 2023</span>
+ <span class="post-date">Dec 2, 2023</span>
</div>
@@ -254,14 +254,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/11/16/Fever-of-Unknown-Origin/">
+ <a href="/2023/12/01/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%B8%80%E6%97%A5/">
- Fever of Unknown Origin
+ 二〇二三年十二月一日
</a>
</div>
- <span class="post-date">Nov 16, 2023</span>
+ <span class="post-date">Dec 1, 2023</span>
</div>
@@ -272,14 +272,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/11/06/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E5%85%AD%E6%97%A5/">
+ <a href="/2023/11/29/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B9%9D%E6%97%A5/">
- 二零二三年十一月六日
+ 二〇二三年十一月二十九日
</a>
</div>
- <span class="post-date">Nov 6, 2023</span>
+ <span class="post-date">Nov 29, 2023</span>
</div>
@@ -290,14 +290,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/10/25/%E5%84%BF%E7%AB%A5%E6%96%B0%E5%9E%8B%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92Omicron%E6%A0%AA%E5%92%8C%E8%82%BA%E7%82%8E%E6%94%AF%E5%8E%9F%E4%BD%93%E6%B7%B7%E5%90%88%E6%84%9F%E6%9F%93%E9%87%8D%E7%97%87%E8%82%BA%E7%82%8E1%E4%BE%8B/">
+ <a href="/2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/">
- 儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例
+ Adolescent Onset of Acute Heart Failure
</a>
</div>
- <span class="post-date">Oct 25, 2023</span>
+ <span class="post-date">Nov 21, 2023</span>
</div>
@@ -308,14 +308,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/">
+ <a href="/2023/11/16/Fever-of-Unknown-Origin/">
- Radiographic Absence of the Left Humeral Head
+ Fever of Unknown Origin
</a>
</div>
- <span class="post-date">Oct 25, 2023</span>
+ <span class="post-date">Nov 16, 2023</span>
</div>
@@ -324,7 +324,7 @@
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/4/">4</a><span class="page-number current">5</span><a class="page-number" href="/archives/page/6/">6</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/11/">11</a>
+ <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/4/">4</a><span class="page-number current">5</span><a class="page-number" href="/archives/page/6/">6</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/12/">12</a>
</nav>
</div>
diff --git a/archives/page/6/index.html b/archives/page/6/index.html
index 014280ec..695fc06c 100644
--- a/archives/page/6/index.html
+++ b/archives/page/6/index.html
@@ -144,14 +144,14 @@
<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/">
+ <a href="/2023/11/06/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E5%85%AD%E6%97%A5/">
- 肺炎支原体注意事项
+ 二零二三年十一月六日
</a>
</div>
- <span class="post-date">Oct 25, 2023</span>
+ <span class="post-date">Nov 6, 2023</span>
</div>
@@ -162,14 +162,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/10/22/%E5%86%AC%E5%AD%A3%E5%92%B3%E5%97%BD%E8%BE%A8%E5%88%AB%E6%8C%87%E5%8D%97/">
+ <a href="/2023/10/25/%E5%84%BF%E7%AB%A5%E6%96%B0%E5%9E%8B%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92Omicron%E6%A0%AA%E5%92%8C%E8%82%BA%E7%82%8E%E6%94%AF%E5%8E%9F%E4%BD%93%E6%B7%B7%E5%90%88%E6%84%9F%E6%9F%93%E9%87%8D%E7%97%87%E8%82%BA%E7%82%8E1%E4%BE%8B/">
- 冬季咳嗽辨别指南
+ 儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例
</a>
</div>
- <span class="post-date">Oct 22, 2023</span>
+ <span class="post-date">Oct 25, 2023</span>
</div>
@@ -180,14 +180,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/10/21/OCaml-Core-Int-pow-%E7%9A%84%E5%AE%9E%E7%8E%B0/">
+ <a href="/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/">
- OCaml Core.Int.pow 的实现
+ Radiographic Absence of the Left Humeral Head
</a>
</div>
- <span class="post-date">Oct 21, 2023</span>
+ <span class="post-date">Oct 25, 2023</span>
</div>
@@ -198,14 +198,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/10/13/%E8%82%9D%E5%8A%9F%E8%83%BD%E6%A3%80%E6%9F%A5%E5%8C%96%E9%AA%8C%E5%8D%95/">
+ <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/">
- 肝功能检查化验单阅读指南
+ 肺炎支原体注意事项
</a>
</div>
- <span class="post-date">Oct 13, 2023</span>
+ <span class="post-date">Oct 25, 2023</span>
</div>
@@ -216,14 +216,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/10/12/%E8%A1%80%E5%B8%B8%E8%A7%84%E5%8C%96%E9%AA%8C%E7%BB%93%E6%9E%9C%E9%98%85%E8%AF%BB%E6%8C%87%E5%8D%97/">
+ <a href="/2023/10/22/%E5%86%AC%E5%AD%A3%E5%92%B3%E5%97%BD%E8%BE%A8%E5%88%AB%E6%8C%87%E5%8D%97/">
- 血常规化验结果阅读指南
+ 冬季咳嗽辨别指南
</a>
</div>
- <span class="post-date">Oct 12, 2023</span>
+ <span class="post-date">Oct 22, 2023</span>
</div>
@@ -234,14 +234,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/10/12/%E8%BF%87%E5%BA%A6%E7%96%B2%E5%8A%B3%E7%9A%84%E5%85%AD%E7%A7%8D%E8%A1%A8%E7%8E%B0/">
+ <a href="/2023/10/21/OCaml-Core-Int-pow-%E7%9A%84%E5%AE%9E%E7%8E%B0/">
- 过度疲劳的六种表现
+ OCaml Core.Int.pow 的实现
</a>
</div>
- <span class="post-date">Oct 12, 2023</span>
+ <span class="post-date">Oct 21, 2023</span>
</div>
@@ -252,14 +252,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/10/05/v8%E4%B8%AD%E7%9A%84Number-toString/">
+ <a href="/2023/10/13/%E8%82%9D%E5%8A%9F%E8%83%BD%E6%A3%80%E6%9F%A5%E5%8C%96%E9%AA%8C%E5%8D%95/">
- v8中的Number.toString()
+ 肝功能检查化验单阅读指南
</a>
</div>
- <span class="post-date">Oct 5, 2023</span>
+ <span class="post-date">Oct 13, 2023</span>
</div>
@@ -270,14 +270,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/09/28/A-Brief-History-of-Just-In-Time/">
+ <a href="/2023/10/12/%E8%A1%80%E5%B8%B8%E8%A7%84%E5%8C%96%E9%AA%8C%E7%BB%93%E6%9E%9C%E9%98%85%E8%AF%BB%E6%8C%87%E5%8D%97/">
- A Brief History of Just-In-Time
+ 血常规化验结果阅读指南
</a>
</div>
- <span class="post-date">Sep 28, 2023</span>
+ <span class="post-date">Oct 12, 2023</span>
</div>
@@ -288,14 +288,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/09/13/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%B9%9D%E6%9C%88%E5%8D%81%E4%B8%89%E6%97%A5/">
+ <a href="/2023/10/12/%E8%BF%87%E5%BA%A6%E7%96%B2%E5%8A%B3%E7%9A%84%E5%85%AD%E7%A7%8D%E8%A1%A8%E7%8E%B0/">
- 二零二三年九月十三日
+ 过度疲劳的六种表现
</a>
</div>
- <span class="post-date">Sep 13, 2023</span>
+ <span class="post-date">Oct 12, 2023</span>
</div>
@@ -306,14 +306,14 @@
<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 href="/2023/10/05/v8%E4%B8%AD%E7%9A%84Number-toString/">
- 二零二三年八月二十七日
+ v8中的Number.toString()
</a>
</div>
- <span class="post-date">Aug 27, 2023</span>
+ <span class="post-date">Oct 5, 2023</span>
</div>
@@ -322,7 +322,7 @@
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/5/">5</a><span class="page-number current">6</span><a class="page-number" href="/archives/page/7/">7</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/11/">11</a>
+ <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/5/">5</a><span class="page-number current">6</span><a class="page-number" href="/archives/page/7/">7</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/12/">12</a>
</nav>
</div>
diff --git a/archives/page/7/index.html b/archives/page/7/index.html
index 8ca313df..abd9894c 100644
--- a/archives/page/7/index.html
+++ b/archives/page/7/index.html
@@ -144,14 +144,14 @@
<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/">
+ <a href="/2023/09/28/A-Brief-History-of-Just-In-Time/">
- 二零二三年八月二十一日
+ A Brief History of Just-In-Time
</a>
</div>
- <span class="post-date">Aug 21, 2023</span>
+ <span class="post-date">Sep 28, 2023</span>
</div>
@@ -162,14 +162,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/08/15/tick-thread%E5%9C%A8Multicore-OCaml%E4%B8%AD%E7%9A%84%E4%BD%9C%E7%94%A8/">
+ <a href="/2023/09/13/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%B9%9D%E6%9C%88%E5%8D%81%E4%B8%89%E6%97%A5/">
- tick thread在Multicore OCaml中的作用
+ 二零二三年九月十三日
</a>
</div>
- <span class="post-date">Aug 15, 2023</span>
+ <span class="post-date">Sep 13, 2023</span>
</div>
@@ -180,14 +180,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/08/15/poll-error-attribute-in-OCaml/">
+ <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/">
- 使用 [@poll error] 实现线程安全的数据结构
+ 二零二三年八月二十七日
</a>
</div>
- <span class="post-date">Aug 15, 2023</span>
+ <span class="post-date">Aug 27, 2023</span>
</div>
@@ -198,14 +198,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/08/01/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AB%E6%9C%88%E4%B8%80%E6%97%A5/">
+ <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/">
- 二〇二三年八月一日
+ 二零二三年八月二十一日
</a>
</div>
- <span class="post-date">Aug 1, 2023</span>
+ <span class="post-date">Aug 21, 2023</span>
</div>
@@ -216,14 +216,14 @@
<div class="post-list-item">
<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 href="/2023/08/15/tick-thread%E5%9C%A8Multicore-OCaml%E4%B8%AD%E7%9A%84%E4%BD%9C%E7%94%A8/">
- 二零二三年七月三十日
+ tick thread在Multicore OCaml中的作用
</a>
</div>
- <span class="post-date">Jul 30, 2023</span>
+ <span class="post-date">Aug 15, 2023</span>
</div>
@@ -234,14 +234,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/">
+ <a href="/2023/08/15/poll-error-attribute-in-OCaml/">
- WiscKey: Separating Keys from Values in SSD-conscious Storage
+ 使用 [@poll error] 实现线程安全的数据结构
</a>
</div>
- <span class="post-date">Jul 21, 2023</span>
+ <span class="post-date">Aug 15, 2023</span>
</div>
@@ -252,14 +252,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/06/29/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B9%9D%E6%97%A5/">
+ <a href="/2023/08/01/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AB%E6%9C%88%E4%B8%80%E6%97%A5/">
- 二〇二三年六月二十九日
+ 二〇二三年八月一日
</a>
</div>
- <span class="post-date">Jun 29, 2023</span>
+ <span class="post-date">Aug 1, 2023</span>
</div>
@@ -270,14 +270,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/06/28/%E9%9A%90%E8%97%8F%E4%B8%80%E4%BA%9BOCaml-Effect%E7%9A%84%E6%9C%BA%E5%88%B6%EF%BC%8C%E8%AE%A9%E5%85%B6%E8%AF%AD%E6%B3%95%E5%9C%A8%E7%B2%BE%E7%A5%9E%E4%B8%8A%E6%9B%B4%E6%8E%A5%E8%BF%91delimcc/">
+ <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/">
- 隐藏一些OCaml Effect的机制,让其语法在精神上更接近delimcc
+ 二零二三年七月三十日
</a>
</div>
- <span class="post-date">Jun 28, 2023</span>
+ <span class="post-date">Jul 30, 2023</span>
</div>
@@ -288,14 +288,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/06/28/caml-release-runtime-system%E5%AF%BC%E8%87%B4%E7%9A%84%E6%AD%BB%E9%94%81%E9%97%AE%E9%A2%98/">
+ <a href="/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/">
- caml_release_runtime_system导致的死锁问题
+ WiscKey: Separating Keys from Values in SSD-conscious Storage
</a>
</div>
- <span class="post-date">Jun 28, 2023</span>
+ <span class="post-date">Jul 21, 2023</span>
</div>
@@ -306,14 +306,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/06/22/%E7%81%AF%E7%AC%BC%E8%8D%89/">
+ <a href="/2023/06/29/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B9%9D%E6%97%A5/">
- 灯笼草
+ 二〇二三年六月二十九日
</a>
</div>
- <span class="post-date">Jun 22, 2023</span>
+ <span class="post-date">Jun 29, 2023</span>
</div>
@@ -322,7 +322,7 @@
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/6/">6</a><span class="page-number current">7</span><a class="page-number" href="/archives/page/8/">8</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/11/">11</a>
+ <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/6/">6</a><span class="page-number current">7</span><a class="page-number" href="/archives/page/8/">8</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/12/">12</a>
</nav>
</div>
diff --git a/archives/page/8/index.html b/archives/page/8/index.html
index 002a847f..55ad7c7b 100644
--- a/archives/page/8/index.html
+++ b/archives/page/8/index.html
@@ -144,14 +144,14 @@
<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/">
+ <a href="/2023/06/28/%E9%9A%90%E8%97%8F%E4%B8%80%E4%BA%9BOCaml-Effect%E7%9A%84%E6%9C%BA%E5%88%B6%EF%BC%8C%E8%AE%A9%E5%85%B6%E8%AF%AD%E6%B3%95%E5%9C%A8%E7%B2%BE%E7%A5%9E%E4%B8%8A%E6%9B%B4%E6%8E%A5%E8%BF%91delimcc/">
- 发热及超高热危象
+ 隐藏一些OCaml Effect的机制,让其语法在精神上更接近delimcc
</a>
</div>
- <span class="post-date">Jun 17, 2023</span>
+ <span class="post-date">Jun 28, 2023</span>
</div>
@@ -162,14 +162,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/06/10/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AD%E6%9C%88%E5%8D%81%E6%97%A5/">
+ <a href="/2023/06/28/caml-release-runtime-system%E5%AF%BC%E8%87%B4%E7%9A%84%E6%AD%BB%E9%94%81%E9%97%AE%E9%A2%98/">
- 二零二三年六月十日
+ caml_release_runtime_system导致的死锁问题
</a>
</div>
- <span class="post-date">Jun 10, 2023</span>
+ <span class="post-date">Jun 28, 2023</span>
</div>
@@ -180,14 +180,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/05/24/Rust-%E9%97%AD%E5%8C%85-lifetime-may-not-live-long-enough-%E9%97%AE%E9%A2%98/">
+ <a href="/2023/06/22/%E7%81%AF%E7%AC%BC%E8%8D%89/">
- Rust 闭包 lifetime may not live long enough 问题
+ 灯笼草
</a>
</div>
- <span class="post-date">May 24, 2023</span>
+ <span class="post-date">Jun 22, 2023</span>
</div>
@@ -198,14 +198,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/05/12/C-20-%E5%AE%9E%E7%8E%B0-string-split/">
+ <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/">
- C++ 20 实现 string split
+ 发热及超高热危象
</a>
</div>
- <span class="post-date">May 12, 2023</span>
+ <span class="post-date">Jun 17, 2023</span>
</div>
@@ -216,14 +216,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/05/11/C-vector-%E7%9A%84-push-back-%E5%92%8C-emplace-back/">
+ <a href="/2023/06/10/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AD%E6%9C%88%E5%8D%81%E6%97%A5/">
- C++ vector 的 push_back 和 emplace_back
+ 二零二三年六月十日
</a>
</div>
- <span class="post-date">May 11, 2023</span>
+ <span class="post-date">Jun 10, 2023</span>
</div>
@@ -234,14 +234,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/05/04/C-%E7%9A%84-Trait/">
+ <a href="/2023/05/24/Rust-%E9%97%AD%E5%8C%85-lifetime-may-not-live-long-enough-%E9%97%AE%E9%A2%98/">
- C++ 的 Trait
+ Rust 闭包 lifetime may not live long enough 问题
</a>
</div>
- <span class="post-date">May 4, 2023</span>
+ <span class="post-date">May 24, 2023</span>
</div>
@@ -252,14 +252,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/05/03/Rust-NewType-%E6%A8%A1%E5%BC%8F/">
+ <a href="/2023/05/12/C-20-%E5%AE%9E%E7%8E%B0-string-split/">
- Rust NewType 模式
+ C++ 20 实现 string split
</a>
</div>
- <span class="post-date">May 3, 2023</span>
+ <span class="post-date">May 12, 2023</span>
</div>
@@ -270,14 +270,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/05/02/Rust-Partial-%E8%AF%AD%E4%B9%89/">
+ <a href="/2023/05/11/C-vector-%E7%9A%84-push-back-%E5%92%8C-emplace-back/">
- Rust Partial 语义
+ C++ vector 的 push_back 和 emplace_back
</a>
</div>
- <span class="post-date">May 2, 2023</span>
+ <span class="post-date">May 11, 2023</span>
</div>
@@ -288,14 +288,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/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/">
+ <a href="/2023/05/04/C-%E7%9A%84-Trait/">
- Rust 虚表布局规则介绍
+ C++ 的 Trait
</a>
</div>
- <span class="post-date">May 1, 2023</span>
+ <span class="post-date">May 4, 2023</span>
</div>
@@ -306,14 +306,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/">
+ <a href="/2023/05/03/Rust-NewType-%E6%A8%A1%E5%BC%8F/">
- TypeScript With Rust Errors, No Try Catch, Heresy
+ Rust NewType 模式
</a>
</div>
- <span class="post-date">Apr 30, 2023</span>
+ <span class="post-date">May 3, 2023</span>
</div>
@@ -322,7 +322,7 @@
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/7/">7</a><span class="page-number current">8</span><a class="page-number" href="/archives/page/9/">9</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/11/">11</a>
+ <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/7/">7</a><span class="page-number current">8</span><a class="page-number" href="/archives/page/9/">9</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/12/">12</a>
</nav>
</div>
diff --git a/archives/page/9/index.html b/archives/page/9/index.html
index d21bad38..7d4c93d9 100644
--- a/archives/page/9/index.html
+++ b/archives/page/9/index.html
@@ -144,14 +144,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/04/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">
+ <a href="/2023/05/02/Rust-Partial-%E8%AF%AD%E4%B9%89/">
- 二零二三年四月二十五日
+ Rust Partial 语义
</a>
</div>
- <span class="post-date">Apr 25, 2023</span>
+ <span class="post-date">May 2, 2023</span>
</div>
@@ -162,14 +162,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/04/22/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%8C%E6%97%A5/">
+ <a href="/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/">
- 二零二三年四月二十二日
+ Rust 虚表布局规则介绍
</a>
</div>
- <span class="post-date">Apr 22, 2023</span>
+ <span class="post-date">May 1, 2023</span>
</div>
@@ -180,14 +180,14 @@
<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 href="/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/">
- 螺内酯片
+ TypeScript With Rust Errors, No Try Catch, Heresy
</a>
</div>
- <span class="post-date">Mar 14, 2023</span>
+ <span class="post-date">Apr 30, 2023</span>
</div>
@@ -198,14 +198,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/03/14/%E5%91%8B%E5%A1%9E%E7%B1%B3/">
+ <a href="/2023/04/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">
- 呋塞米
+ 二零二三年四月二十五日
</a>
</div>
- <span class="post-date">Mar 14, 2023</span>
+ <span class="post-date">Apr 25, 2023</span>
</div>
@@ -216,14 +216,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/03/13/%E6%9B%BF%E7%B1%B3%E6%B2%99%E5%9D%A6/">
+ <a href="/2023/04/22/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%8C%E6%97%A5/">
- 替米沙坦
+ 二零二三年四月二十二日
</a>
</div>
- <span class="post-date">Mar 13, 2023</span>
+ <span class="post-date">Apr 22, 2023</span>
</div>
@@ -234,14 +234,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/03/05/%E5%A5%A5%E5%8F%B8%E4%BB%96%E9%9F%A6/">
+ <a href="/2023/03/14/%E8%9E%BA%E5%86%85%E9%85%AF%E7%89%87/">
- 奥司他韦
+ 螺内酯片
</a>
</div>
- <span class="post-date">Mar 5, 2023</span>
+ <span class="post-date">Mar 14, 2023</span>
</div>
@@ -252,14 +252,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/03/04/%E9%87%91%E5%8C%AE%E8%A6%81%E7%95%A5/">
+ <a href="/2023/03/14/%E5%91%8B%E5%A1%9E%E7%B1%B3/">
- 金匮要略
+ 呋塞米
</a>
</div>
- <span class="post-date">Mar 4, 2023</span>
+ <span class="post-date">Mar 14, 2023</span>
</div>
@@ -270,14 +270,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/03/01/%E6%B0%94%E8%83%B8/">
+ <a href="/2023/03/13/%E6%9B%BF%E7%B1%B3%E6%B2%99%E5%9D%A6/">
- 气胸
+ 替米沙坦
</a>
</div>
- <span class="post-date">Mar 1, 2023</span>
+ <span class="post-date">Mar 13, 2023</span>
</div>
@@ -288,14 +288,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/03/01/%E7%BA%AF%E7%89%9B%E5%A5%B6%E5%8F%AF%E4%BB%A5%E5%8A%A0%E7%82%B9%E5%95%A5/">
+ <a href="/2023/03/05/%E5%A5%A5%E5%8F%B8%E4%BB%96%E9%9F%A6/">
- 纯牛奶可以加点啥
+ 奥司他韦
</a>
</div>
- <span class="post-date">Mar 1, 2023</span>
+ <span class="post-date">Mar 5, 2023</span>
</div>
@@ -306,14 +306,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/02/26/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E4%BA%8C%E6%9C%88%E4%BA%8C%E5%8D%81%E5%85%AD%E6%97%A5/">
+ <a href="/2023/03/04/%E9%87%91%E5%8C%AE%E8%A6%81%E7%95%A5/">
- 二零二三年二月二十六日
+ 金匮要略
</a>
</div>
- <span class="post-date">Feb 26, 2023</span>
+ <span class="post-date">Mar 4, 2023</span>
</div>
@@ -322,7 +322,7 @@
<div class=paginator>
<div class="h-line-primary"></div>
<nav class="pagination">
- <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/8/">8</a><span class="page-number current">9</span><a class="page-number" href="/archives/page/10/">10</a><a class="page-number" href="/archives/page/11/">11</a>
+ <a class="page-number" href="/archives/">1</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/8/">8</a><span class="page-number current">9</span><a class="page-number" href="/archives/page/10/">10</a><span class="space">&hellip;</span><a class="page-number" href="/archives/page/12/">12</a>
</nav>
</div>
diff --git a/page/12/index.html b/page/12/index.html
new file mode 100644
index 00000000..b4cfc6df
--- /dev/null
+++ b/page/12/index.html
@@ -0,0 +1,230 @@
+<!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>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/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()">
+ Menu
+ </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="/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="profile">
+ <div class="profile-image">
+
+ <img src="/profile_cover.jpg" alt="featured_image">
+
+ </div>
+ <div class="post-content profile-content">
+ <div class="profile-title">
+ 暮秋小屋
+ </div>
+ <div class="profile-body">
+ 思念、灵感、文档的寄存处
+ </div>
+
+ <div class="profile-link">
+ <a href="/tags/Technique/">计算机科学</a>
+ </div>
+
+ <div class="profile-link">
+ <a href="/tags/Medicine/">医学</a>
+ </div>
+
+ <div class="profile-link">
+ <a href="/tags/Life/">生活</a>
+ </div>
+
+ <div class="profile-link">
+ <a href="/categories/gallery/">日记本</a>
+ </div>
+
+ <div class="profile-link">
+ <a href="/tags/Archive">网页存档</a>
+ </div>
+
+ <div class="profile-link">
+ <a href="/about">关于我</a>
+ </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/search.xml b/search.xml
index 056f21ba..dcb663c0 100644
--- a/search.xml
+++ b/search.xml
@@ -1583,6 +1583,79 @@
</tags>
</entry>
<entry>
+ <title>Prisma 关系型数据库的 Self-relations</title>
+ <url>/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/</url>
+ <content><![CDATA[<blockquote>
+<p>A relation field can also reference its own model, in this case the relation is called a <em>self-relation</em>. Self-relations can be of any cardinality, 1-1, 1-n and m-n.</p>
+</blockquote>
+<h2 id="一对一"><a href="#一对一" class="headerlink" title="一对一"></a>一对一</h2><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">model User &#123;</span><br><span class="line"> id Int @id @default(autoincrement())</span><br><span class="line"> name String?</span><br><span class="line"> successorId Int? @unique</span><br><span class="line"> successor User? @relation(&quot;BlogOwnerHistory&quot;, fields: [successorId], references: [id])</span><br><span class="line"> predecessor User? @relation(&quot;BlogOwnerHistory&quot;)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<p>User 展现了这样一个模型:</p>
+<ul>
+<li>User 可以有一个或零个前驱(predecessor)</li>
+<li>User 可以有一个或零个后继(successor)</li>
+</ul>
+<p>注意:不能要求前驱和后继都必须存在,这两个必须有一个是可选的,否则没办法创建第一个 User。</p>
+<p>要创建一对一的 self-relation:</p>
+<ul>
+<li>关系的两端都必须定义一个共享相同名称的 <code>@relation</code> 属性(<code>BlogOwnerHistory</code>)</li>
+<li>关系字段必须是<a href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations#relation-fields">完全注释</a>的。例如 <code>successor</code> 字段需要定义 <code>field</code> 和 <code>references</code> 参数。</li>
+<li>关系字段必须由外键支持。<code>successor</code> 字段由 <code>successorId</code> 外键提供支持,该外键引用 <code>id</code> 字段中的值。<code>successorId</code> 还需要 <code>@unique</code> 属性来保证一对一的关系。****</li>
+</ul>
+<blockquote>
+<p>一对一的 self-relation 需要两个端点,即使这两个端点是同一条数据。</p>
+</blockquote>
+<p>而在关系型数据库中,一对一的 self-relation 可以用如下 SQL 描述:</p>
+<figure class="highlight sql"><table><tr><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">TABLE</span> &quot;User&quot; (</span><br><span class="line"> id SERIAL <span class="keyword">PRIMARY</span> KEY,</span><br><span class="line"> &quot;name&quot; TEXT,</span><br><span class="line"> &quot;successorId&quot; <span class="type">INTEGER</span></span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"><span class="keyword">ALTER</span> <span class="keyword">TABLE</span> &quot;User&quot; <span class="keyword">ADD</span> <span class="keyword">CONSTRAINT</span> fk_successor_user <span class="keyword">FOREIGN</span> KEY (&quot;successorId&quot;) <span class="keyword">REFERENCES</span> &quot;User&quot; (id);</span><br><span class="line"></span><br><span class="line"><span class="keyword">ALTER</span> <span class="keyword">TABLE</span> &quot;User&quot; <span class="keyword">ADD</span> <span class="keyword">CONSTRAINT</span> successor_unique <span class="keyword">UNIQUE</span> (&quot;successorId&quot;);</span><br></pre></td></tr></table></figure>
+
+<h2 id="一对多"><a href="#一对多" class="headerlink" title="一对多"></a>一对多</h2><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">model User &#123;</span><br><span class="line"> id Int @id @default(autoincrement())</span><br><span class="line"> name String?</span><br><span class="line"> teacherId Int?</span><br><span class="line"> teacher User? @relation(&quot;TeacherStudents&quot;, fields: [teacherId], references: [id])</span><br><span class="line"> students User[] @relation(&quot;TeacherStudents&quot;)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<p>User 展现了这样一个模型:</p>
+<ul>
+<li>一个 User 只能有零个或一个 teacher</li>
+<li>一个 User 可以有零个或多个 students</li>
+</ul>
+<blockquote>
+<p>可以通过将 <code>teacher</code> 字段设<a href="https://www.prisma.io/docs/orm/prisma-schema/data-model/models#optional-and-mandatory-fields">为 required</a> 来要求每个 User 都有一名 teacher。</p>
+</blockquote>
+<p>用 SQL 描述 User model:</p>
+<figure class="highlight sql"><table><tr><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">TABLE</span> &quot;User&quot; (</span><br><span class="line"> id SERIAL <span class="keyword">PRIMARY</span> KEY,</span><br><span class="line"> &quot;name&quot; TEXT,</span><br><span class="line"> &quot;teacherId&quot; <span class="type">INTEGER</span></span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"><span class="keyword">ALTER</span> <span class="keyword">TABLE</span> &quot;User&quot; <span class="keyword">ADD</span> <span class="keyword">CONSTRAINT</span> fk_teacherid_user <span class="keyword">FOREIGN</span> KEY (&quot;teacherId&quot;) <span class="keyword">REFERENCES</span> &quot;User&quot; (id);</span><br></pre></td></tr></table></figure>
+
+<p><code>teacherId</code> 没有使用 <code>UNIQUE</code> 约束,这代表着多个 students 可以有同一个 teacher</p>
+<h2 id="多对多"><a href="#多对多" class="headerlink" title="多对多"></a>多对多</h2><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">model User &#123;</span><br><span class="line"> id Int @id @default(autoincrement())</span><br><span class="line"> name String?</span><br><span class="line"> followedBy User[] @relation(&quot;UserFollows&quot;)</span><br><span class="line"> following User[] @relation(&quot;UserFollows&quot;)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<ul>
+<li>一个 User 可以被零个或多个 Users 关注</li>
+<li>一个 User 可以关注零个或多个 Users</li>
+</ul>
+<blockquote>
+<p>对于关系型数据库,多对多的关系是隐式的,这意味着 Prisma ORM 会在底层数据库中维护一个 <a href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#relation-tables">relation table</a>:<br>A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pivot</em> table) connects two or more other tables and therefore creates a <em>relation</em> between them. Creating relation tables is a common data modelling practice in SQL to represent relationships between different entities. In essence it means that “one m-n relation is modeled as two 1-n relations in the database”.</p>
+<p>We recommend using <a href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations">implicit</a> m-n-relations, where Prisma ORM automatically generates the relation table in the underlying database. <a href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations">Explicit</a> m-n-relations should be used when you need to store additional data in the relations, such as the date the relation was created.</p>
+</blockquote>
+<p>如果需要需要通过多对多的关系来保存其他字段,也可以创建<a href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations">显式</a>的多对多 self 关系:</p>
+<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">model User &#123;</span><br><span class="line"> id Int @id @default(autoincrement())</span><br><span class="line"> name String?</span><br><span class="line"> followedBy Follows[] @relation(&quot;followedBy&quot;)</span><br><span class="line"> following Follows[] @relation(&quot;following&quot;)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">model Follows &#123;</span><br><span class="line"> followedBy User @relation(&quot;followedBy&quot;, fields: [followedById], references: [id])</span><br><span class="line"> followedById Int</span><br><span class="line"> following User @relation(&quot;following&quot;, fields: [followingId], references: [id])</span><br><span class="line"> followingId Int</span><br><span class="line"></span><br><span class="line"> @@id([followingId, followedById])</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<p>在关系型数据库中,可以用如下 SQL 描述:</p>
+<figure class="highlight sql"><table><tr><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">TABLE</span> &quot;User&quot; (</span><br><span class="line"> id <span class="type">integer</span> <span class="keyword">DEFAULT</span> nextval(<span class="string">&#x27;&quot;User_id_seq&quot;&#x27;</span>::regclass) <span class="keyword">PRIMARY</span> KEY,</span><br><span class="line"> name text</span><br><span class="line">);</span><br><span class="line"><span class="keyword">CREATE</span> <span class="keyword">TABLE</span> &quot;_UserFollows&quot; (</span><br><span class="line"> &quot;A&quot; <span class="type">integer</span> <span class="keyword">NOT</span> <span class="keyword">NULL</span> <span class="keyword">REFERENCES</span> &quot;User&quot;(id) <span class="keyword">ON</span> <span class="keyword">DELETE</span> CASCADE <span class="keyword">ON</span> <span class="keyword">UPDATE</span> CASCADE,</span><br><span class="line"> &quot;B&quot; <span class="type">integer</span> <span class="keyword">NOT</span> <span class="keyword">NULL</span> <span class="keyword">REFERENCES</span> &quot;User&quot;(id) <span class="keyword">ON</span> <span class="keyword">DELETE</span> CASCADE <span class="keyword">ON</span> <span class="keyword">UPDATE</span> CASCADE</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
+
+<h2 id="在同一模型上建立多个-self-relations"><a href="#在同一模型上建立多个-self-relations" class="headerlink" title="在同一模型上建立多个 self-relations"></a>在同一模型上建立多个 self-relations</h2><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">model User &#123;</span><br><span class="line"> id Int @id @default(autoincrement())</span><br><span class="line"> name String?</span><br><span class="line"> teacherId Int?</span><br><span class="line"> teacher User? @relation(&quot;TeacherStudents&quot;, fields: [teacherId], references: [id])</span><br><span class="line"> students User[] @relation(&quot;TeacherStudents&quot;)</span><br><span class="line"> followedBy User[] @relation(&quot;UserFollows&quot;)</span><br><span class="line"> following User[] @relation(&quot;UserFollows&quot;)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<h2 id="REFS"><a href="#REFS" class="headerlink" title="REFS."></a>REFS.</h2><ul>
+<li><a href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations#relation-fields">fully annotated</a></li>
+<li><a href="https://www.prisma.io/docs/orm/prisma-schema/data-model/models#optional-and-mandatory-fields">required</a></li>
+<li><a href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations">implicit</a></li>
+<li><a href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#relation-tables">relation table</a></li>
+<li><a href="https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations">explicit</a></li>
+</ul>
+]]></content>
+ <tags>
+ <tag>Technique</tag>
+ <tag>Web</tag>
+ <tag>Typescript</tag>
+ <tag>Database</tag>
+ </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>
@@ -1604,6 +1677,48 @@
</tags>
</entry>
<entry>
+ <title>Repository pattern in Typescript</title>
+ <url>/2025/02/19/Repository-pattern-in-Typescript/</url>
+ <content><![CDATA[<blockquote>
+<p>The Repository design pattern is a <a href="https://www.geeksforgeeks.org/structural-design-patterns/">structural pattern</a> that abstracts data access, providing a centralized way to manage data operations. By separating the data layer from business logic, it enhances code maintainability, testability, and flexibility, making it easier to work with various data sources in an application.</p>
+</blockquote>
+<p>抽象化数据访问层的主要作用是将应用的业务逻辑与对数据库的数据访问等实现细节进行解耦。DB 框架的更改不应该影响到应用程序的核心服务,并且它们应该对业务逻辑代码透明。</p>
+<p>业务服务应该只依赖于抽象,而不是实现,数据服务同理。</p>
+<hr>
+<h1 id="Intro"><a href="#Intro" class="headerlink" title="Intro."></a>Intro.</h1><p>例如,此时有一个书籍存储的微服务,并且有一个“添加新书籍”的操作用例,在此用例中可以通过使用 <code>Book</code> 这个 <em>Repository</em> 来添加新书籍,而 <code>Book</code> 具体使用什么数据库,怎么存并不是业务需要关心的事情。</p>
+<h2 id="具体实现方式"><a href="#具体实现方式" class="headerlink" title="具体实现方式"></a>具体实现方式</h2><p>假设有以下实体类型定义:</p>
+<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">class</span> <span class="title class_">Author</span> &#123;</span><br><span class="line"> <span class="attr">firstName</span>: <span class="built_in">string</span>;</span><br><span class="line"> <span class="attr">lastName</span>: <span class="built_in">string</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">class</span> <span class="title class_">Genre</span> &#123;</span><br><span class="line"> <span class="attr">name</span>: <span class="built_in">string</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">class</span> <span class="title class_">Book</span> &#123;</span><br><span class="line"> <span class="attr">title</span>: <span class="built_in">string</span>;</span><br><span class="line"> <span class="attr">author</span>: <span class="title class_">Author</span>;</span><br><span class="line"> <span class="attr">genre</span>: <span class="title class_">Genre</span>;</span><br><span class="line"> <span class="attr">publishDate</span>: <span class="title class_">Date</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<h3 id="抽象化"><a href="#抽象化" class="headerlink" title="抽象化"></a>抽象化</h3><p>第一步是抽象化出一个通用的 <em>Repository</em> ,其中包含通用的操作:</p>
+<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">abstract</span> <span class="keyword">class</span> <span class="title class_">IGenericRepository</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">abstract</span> <span class="title function_">getAll</span>(): <span class="title class_">Promise</span>&lt;T[]&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">abstract</span> <span class="title function_">get</span>(<span class="attr">id</span>: <span class="built_in">string</span>): <span class="title class_">Promise</span>&lt;T&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">abstract</span> <span class="title function_">create</span>(<span class="attr">item</span>: T): <span class="title class_">Promise</span>&lt;T&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">abstract</span> <span class="title function_">update</span>(<span class="attr">id</span>: <span class="built_in">string</span>, <span class="attr">item</span>: T);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<ul>
+<li>这里具体有那些函数可以根据需要(业务)自己定义。</li>
+<li>类型参数 <code>T</code> 表示每个实体。</li>
+</ul>
+<p>接着,定义一个数据服务,其中包含使用 <code>IGenericRepositoiry</code> 定义的具体实例对应的 _Repository_:</p>
+<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">Author</span>, <span class="title class_">Book</span>, <span class="title class_">Genre</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;../entities&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">IGenericRepository</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;./generic-repository.abstract&#x27;</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">abstract</span> <span class="keyword">class</span> <span class="title class_">IDataServices</span> &#123;</span><br><span class="line"> <span class="keyword">abstract</span> <span class="attr">authors</span>: <span class="title class_">IGenericRepository</span>&lt;<span class="title class_">Author</span>&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">abstract</span> <span class="attr">books</span>: <span class="title class_">IGenericRepository</span>&lt;<span class="title class_">Book</span>&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">abstract</span> <span class="attr">genres</span>: <span class="title class_">IGenericRepository</span>&lt;<span class="title class_">Genre</span>&gt;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<ul>
+<li>这里有三个 <em>Repository</em> 分别对应不同的实体。</li>
+<li><code>IGenericRepository</code> 中定义的函数是每个 <em>Repository</em> 公开的通用存储函数。</li>
+</ul>
+<p>以上这些就是对业务中的实体的 <em>Repository</em> 抽象,这样就隔离开了业务和存储逻辑,例如使用 MongoDB,可以实现一个 <code>MongoGenericRepository</code>:</p>
+<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">Model</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;mongoose&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">IGenericRepository</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;../../../core&#x27;</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">class</span> <span class="title class_">MongoGenericRepository</span>&lt;T&gt; <span class="keyword">implements</span> <span class="title class_">IGenericRepository</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">private</span> <span class="attr">_repository</span>: <span class="title class_">Model</span>&lt;T&gt;;</span><br><span class="line"> <span class="keyword">private</span> <span class="attr">_populateOnFind</span>: <span class="built_in">string</span>[];</span><br><span class="line"></span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params">repository: Model&lt;T&gt;, populateOnFind: <span class="built_in">string</span>[] = []</span>) &#123;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">_repository</span> = repository;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">_populateOnFind</span> = populateOnFind;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">getAll</span>(): <span class="title class_">Promise</span>&lt;T[]&gt; &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">_repository</span>.<span class="title function_">find</span>().<span class="title function_">populate</span>(<span class="variable language_">this</span>.<span class="property">_populateOnFind</span>).<span class="title function_">exec</span>();</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">get</span>(<span class="attr">id</span>: <span class="built_in">any</span>): <span class="title class_">Promise</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">_repository</span>.<span class="title function_">findById</span>(id).<span class="title function_">populate</span>(<span class="variable language_">this</span>.<span class="property">_populateOnFind</span>).<span class="title function_">exec</span>();</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">create</span>(<span class="attr">item</span>: T): <span class="title class_">Promise</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">_repository</span>.<span class="title function_">create</span>(item);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">update</span>(<span class="params">id: <span class="built_in">string</span>, item: T</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">_repository</span>.<span class="title function_">findByIdAndUpdate</span>(id, item);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<p>然后实现一个 <code>MongoDataServices</code>:</p>
+<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">Injectable</span>, <span class="title class_">OnApplicationBootstrap</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;@nestjs/common&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">InjectModel</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;@nestjs/mongoose&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">Model</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;mongoose&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">IDataServices</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;../../../core&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">MongoGenericRepository</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;./mongo-generic-repository&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123;</span><br><span class="line"> <span class="title class_">Author</span>,</span><br><span class="line"> <span class="title class_">AuthorDocument</span>,</span><br><span class="line"> <span class="title class_">Book</span>,</span><br><span class="line"> <span class="title class_">BookDocument</span>,</span><br><span class="line"> <span class="title class_">Genre</span>,</span><br><span class="line"> <span class="title class_">GenreDocument</span>,</span><br><span class="line">&#125; <span class="keyword">from</span> <span class="string">&#x27;./model&#x27;</span>;</span><br><span class="line"></span><br><span class="line"><span class="meta">@Injectable</span>()</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">class</span> <span class="title class_">MongoDataServices</span></span><br><span class="line"> <span class="keyword">implements</span> <span class="title class_">IDataServices</span>, <span class="title class_">OnApplicationBootstrap</span></span><br><span class="line">&#123;</span><br><span class="line"> <span class="attr">authors</span>: <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Author</span>&gt;;</span><br><span class="line"> <span class="attr">books</span>: <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Book</span>&gt;;</span><br><span class="line"> <span class="attr">genres</span>: <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Genre</span>&gt;;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">constructor</span>(<span class="params"></span></span><br><span class="line"><span class="params"> <span class="meta">@InjectModel</span>(Author.name)</span></span><br><span class="line"><span class="params"> <span class="keyword">private</span> AuthorRepository: Model&lt;AuthorDocument&gt;,</span></span><br><span class="line"><span class="params"> <span class="meta">@InjectModel</span>(Book.name)</span></span><br><span class="line"><span class="params"> <span class="keyword">private</span> BookRepository: Model&lt;BookDocument&gt;,</span></span><br><span class="line"><span class="params"> <span class="meta">@InjectModel</span>(Genre.name)</span></span><br><span class="line"><span class="params"> <span class="keyword">private</span> GenreRepository: Model&lt;GenreDocument&gt;,</span></span><br><span class="line"><span class="params"> </span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">onApplicationBootstrap</span>(<span class="params"></span>) &#123;</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">authors</span> = <span class="keyword">new</span> <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Author</span>&gt;(<span class="variable language_">this</span>.<span class="property">AuthorRepository</span>);</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">books</span> = <span class="keyword">new</span> <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Book</span>&gt;(<span class="variable language_">this</span>.<span class="property">BookRepository</span>, [</span><br><span class="line"> <span class="string">&#x27;author&#x27;</span>,</span><br><span class="line"> <span class="string">&#x27;genre&#x27;</span>,</span><br><span class="line"> ]);</span><br><span class="line"> <span class="variable language_">this</span>.<span class="property">genres</span> = <span class="keyword">new</span> <span class="title class_">MongoGenericRepository</span>&lt;<span class="title class_">Genre</span>&gt;(<span class="variable language_">this</span>.<span class="property">GenreRepository</span>);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+
+<p>以上。</p>
+]]></content>
+ <tags>
+ <tag>Technique</tag>
+ <tag>Web</tag>
+ <tag>Typescript</tag>
+ <tag>Software-Engineering</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>
@@ -4080,6 +4195,20 @@
</tags>
</entry>
<entry>
+ <title>身体往前倾,灵魂向后摇</title>
+ <url>/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/</url>
+ <content><![CDATA[<p>后摇( Post-Rock )是用摇滚乐器作非摇滚的用途,吉他对音色和结构的推动作用超过了Riff和主旋律。后摇的关键问题除了电子的启用之外,还有多层次打击乐器的出现。</p>
+<p>现代社会的后摇创作者们不必为任何形式和任何器物所限制,庞大的音乐历史使得任何形式都展现为能为现代人所应用的形式,现代技术所提供的音乐制作功能则使得作为乐器的器物在后摇中不必再被特地强调。</p>
+<p>而对于后摇的受众即聆听者而言,这一现代性的音乐则在正真意义上解放了听众,使得听众成为肆意解读的读者。后摇的解放意义完成了作品自创作完成后从作者向听众的让渡,作品的拥有者不是作者本人,而恰恰是一群无从计数的听众, 作为独特个体而非集体的听众。</p>
+<p>因此,后摇的出现意味着创作者与受众的双向失责。两者在彼此自私自取的艺术行为中消弭了主体与客体这一古老的二分法。</p>
+<p>极致的喧闹与绝对的安静并无区别。</p>
+]]></content>
+ <tags>
+ <tag>Life</tag>
+ <tag>Music</tag>
+ </tags>
+ </entry>
+ <entry>
<title>过度疲劳的六种表现</title>
<url>/2023/10/12/%E8%BF%87%E5%BA%A6%E7%96%B2%E5%8A%B3%E7%9A%84%E5%85%AD%E7%A7%8D%E8%A1%A8%E7%8E%B0/</url>
<content><![CDATA[<ol>
diff --git a/tag/index.html b/tag/index.html
index 8751a3ad..d398ceb3 100644
--- a/tag/index.html
+++ b/tag/index.html
@@ -188,32 +188,44 @@
</span>
<span class="post-tag">
- <a href="/tags/Rescript/">
- Rescript
+ <a href="/tags/Web/">
+ Web
</a>
</span>
<span class="post-tag">
- <a href="/tags/Rust/">
- Rust
+ <a href="/tags/Typescript/">
+ Typescript
</a>
</span>
<span class="post-tag">
- <a href="/tags/Web/">
- Web
+ <a href="/tags/Database/">
+ Database
</a>
</span>
<span class="post-tag">
- <a href="/tags/TypeScript/">
- TypeScript
+ <a href="/tags/Software-Engineering/">
+ Software-Engineering
</a>
</span>
<span class="post-tag">
- <a href="/tags/Database/">
- Database
+ <a href="/tags/Rescript/">
+ Rescript
+ </a>
+ </span>
+
+ <span class="post-tag">
+ <a href="/tags/Rust/">
+ Rust
+ </a>
+ </span>
+
+ <span class="post-tag">
+ <a href="/tags/TypeScript/">
+ TypeScript
</a>
</span>
@@ -246,6 +258,12 @@
Design
</a>
</span>
+
+ <span class="post-tag">
+ <a href="/tags/Music/">
+ Music
+ </a>
+ </span>
</div>
</div>
diff --git a/tags/Database/index.html b/tags/Database/index.html
index 2f331251..8e43f376 100644
--- a/tags/Database/index.html
+++ b/tags/Database/index.html
@@ -146,6 +146,26 @@
+ <div class="year-title">2025</div>
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">
+
+ Prisma 关系型数据库的 Self-relations
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 18, 2025</span>
+ </div>
+
+
+
+
+
+
<div class="year-title">2023</div>
diff --git a/tags/Life/index.html b/tags/Life/index.html
index 118e612a..965d1e5c 100644
--- a/tags/Life/index.html
+++ b/tags/Life/index.html
@@ -146,6 +146,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>
@@ -308,24 +328,6 @@
</div>
-
-
-
-
-
- <div class="post-list-item">
- <div class="post-title">
- <a href="/2023/10/12/%E8%A1%80%E5%B8%B8%E8%A7%84%E5%8C%96%E9%AA%8C%E7%BB%93%E6%9E%9C%E9%98%85%E8%AF%BB%E6%8C%87%E5%8D%97/">
-
- 血常规化验结果阅读指南
-
- </a>
- </div>
-
- <span class="post-date">Oct 12, 2023</span>
- </div>
-
-
<div id="paginator">
<div class=paginator>
diff --git a/tags/Life/page/2/index.html b/tags/Life/page/2/index.html
index 0fbdeea9..68b92aec 100644
--- a/tags/Life/page/2/index.html
+++ b/tags/Life/page/2/index.html
@@ -151,6 +151,24 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/10/12/%E8%A1%80%E5%B8%B8%E8%A7%84%E5%8C%96%E9%AA%8C%E7%BB%93%E6%9E%9C%E9%98%85%E8%AF%BB%E6%8C%87%E5%8D%97/">
+
+ 血常规化验结果阅读指南
+
+ </a>
+ </div>
+
+ <span class="post-date">Oct 12, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/10/12/%E8%BF%87%E5%BA%A6%E7%96%B2%E5%8A%B3%E7%9A%84%E5%85%AD%E7%A7%8D%E8%A1%A8%E7%8E%B0/">
过度疲劳的六种表现
diff --git a/tags/Music/index.html b/tags/Music/index.html
new file mode 100644
index 00000000..50889c6d
--- /dev/null
+++ b/tags/Music/index.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+<meta name="viewport"
+ content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+<meta http-equiv="X-UA-Compatible" content="ie=edge">
+
+ <meta name="author" content="韩暮秋">
+
+
+ <meta name="subtitle" content="暮秋小屋">
+
+
+ <meta name="description" content="这里是暮秋小屋,思念和灵感的寄存处">
+
+
+ <meta name="keywords" content="韩暮秋,MuqiuHan,'Muqiu Han', 'muqiu han', muqiuhan">
+
+
+
+
+<title>Tag: Music | 暮秋小屋</title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+<style>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/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()">
+ Menu
+ </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="/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 id="tag">
+
+
+ <p class="tag-title">
+ / <a href="/tag/">tags</a>
+ / <a href="">Music</a> /
+ </p>
+ <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>
+</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/tags/Software-Engineering/index.html b/tags/Software-Engineering/index.html
new file mode 100644
index 00000000..04f502e7
--- /dev/null
+++ b/tags/Software-Engineering/index.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+<meta name="viewport"
+ content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+<meta http-equiv="X-UA-Compatible" content="ie=edge">
+
+ <meta name="author" content="韩暮秋">
+
+
+ <meta name="subtitle" content="暮秋小屋">
+
+
+ <meta name="description" content="这里是暮秋小屋,思念和灵感的寄存处">
+
+
+ <meta name="keywords" content="韩暮秋,MuqiuHan,'Muqiu Han', 'muqiu han', muqiuhan">
+
+
+
+
+<title>Tag: Software-Engineering | 暮秋小屋</title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+<style>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/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()">
+ Menu
+ </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="/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 id="tag">
+
+
+ <p class="tag-title">
+ / <a href="/tag/">tags</a>
+ / <a href="">Software-Engineering</a> /
+ </p>
+ <div class="post-list">
+
+
+
+
+
+
+ <div class="year-title">2025</div>
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2025/02/19/Repository-pattern-in-Typescript/">
+
+ Repository pattern in Typescript
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 19, 2025</span>
+ </div>
+
+
+ <div id="paginator">
+
+ </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/tags/Technique/index.html b/tags/Technique/index.html
index 1baf6054..0ce05d91 100644
--- a/tags/Technique/index.html
+++ b/tags/Technique/index.html
@@ -146,19 +146,19 @@
- <div class="year-title">2024</div>
+ <div class="year-title">2025</div>
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/12/15/OCaml-News-2024-7/">
+ <a href="/2025/02/19/Repository-pattern-in-Typescript/">
- OCaml News 2024-7
+ Repository pattern in Typescript
</a>
</div>
- <span class="post-date">Dec 15, 2024</span>
+ <span class="post-date">Feb 19, 2025</span>
</div>
@@ -169,14 +169,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/">
+ <a href="/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">
- 10 Tips for Productive FSharp Scripting
+ Prisma 关系型数据库的 Self-relations
</a>
</div>
- <span class="post-date">Oct 18, 2024</span>
+ <span class="post-date">Feb 18, 2025</span>
</div>
@@ -184,17 +184,19 @@
+ <div class="year-title">2024</div>
+
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/10/18/Building-custom-fibers-library-in-FSharp/">
+ <a href="/2024/12/15/OCaml-News-2024-7/">
- Building custom fibers library in FSharp
+ OCaml News 2024-7
</a>
</div>
- <span class="post-date">Oct 18, 2024</span>
+ <span class="post-date">Dec 15, 2024</span>
</div>
@@ -205,9 +207,9 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/">
+ <a href="/2024/10/18/10-Tips-for-Productive-FSharp-Scripting/">
- Dealing with complex dependency injection in FSharp
+ 10 Tips for Productive FSharp Scripting
</a>
</div>
@@ -223,14 +225,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/10/06/Obsidian-Vault-%E7%9A%84-obsidian-%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%90%84%E6%96%87%E4%BB%B6%E4%BD%9C%E7%94%A8/">
+ <a href="/2024/10/18/Building-custom-fibers-library-in-FSharp/">
- Obsidian Vault 的 .obsidian 目录中的各文件作用
+ Building custom fibers library in FSharp
</a>
</div>
- <span class="post-date">Oct 6, 2024</span>
+ <span class="post-date">Oct 18, 2024</span>
</div>
@@ -241,14 +243,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/09/27/Turborepo-%E7%AE%80%E8%BF%B0/">
+ <a href="/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/">
- Turborepo 简述
+ Dealing with complex dependency injection in FSharp
</a>
</div>
- <span class="post-date">Sep 27, 2024</span>
+ <span class="post-date">Oct 18, 2024</span>
</div>
@@ -259,14 +261,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/">
+ <a href="/2024/10/06/Obsidian-Vault-%E7%9A%84-obsidian-%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%90%84%E6%96%87%E4%BB%B6%E4%BD%9C%E7%94%A8/">
- Advanced C binding using ocaml-ctypes and dune
+ Obsidian Vault 的 .obsidian 目录中的各文件作用
</a>
</div>
- <span class="post-date">Sep 15, 2024</span>
+ <span class="post-date">Oct 6, 2024</span>
</div>
@@ -277,14 +279,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/09/12/Functional-Reactive-Programming-in-F/">
+ <a href="/2024/09/27/Turborepo-%E7%AE%80%E8%BF%B0/">
- Functional Reactive Programming in F#
+ Turborepo 简述
</a>
</div>
- <span class="post-date">Sep 12, 2024</span>
+ <span class="post-date">Sep 27, 2024</span>
</div>
@@ -295,14 +297,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/07/23/OCaml-News-2024-6/">
+ <a href="/2024/09/15/Advanced-C-binding-using-ocaml-ctypes-and-dune/">
- OCaml News 2024-6
+ Advanced C binding using ocaml-ctypes and dune
</a>
</div>
- <span class="post-date">Jul 23, 2024</span>
+ <span class="post-date">Sep 15, 2024</span>
</div>
@@ -313,14 +315,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/07/01/OCaml-News-2024-4/">
+ <a href="/2024/09/12/Functional-Reactive-Programming-in-F/">
- OCaml News 2024-4
+ Functional Reactive Programming in F#
</a>
</div>
- <span class="post-date">Jul 1, 2024</span>
+ <span class="post-date">Sep 12, 2024</span>
</div>
diff --git a/tags/Technique/page/2/index.html b/tags/Technique/page/2/index.html
index 6d3d535c..38d2faa6 100644
--- a/tags/Technique/page/2/index.html
+++ b/tags/Technique/page/2/index.html
@@ -151,14 +151,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/06/27/OCaml-News-2024-5/">
+ <a href="/2024/07/23/OCaml-News-2024-6/">
- OCaml News 2024-5
+ OCaml News 2024-6
</a>
</div>
- <span class="post-date">Jun 27, 2024</span>
+ <span class="post-date">Jul 23, 2024</span>
</div>
@@ -169,14 +169,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/06/06/NET-AOT-%E4%B8%8B%E7%9A%84-F-%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90%E5%BA%93%E9%80%89%E6%8B%A9/">
+ <a href="/2024/07/01/OCaml-News-2024-4/">
- .NET AOT 下的 F# 命令行参数解析库选择
+ OCaml News 2024-4
</a>
</div>
- <span class="post-date">Jun 6, 2024</span>
+ <span class="post-date">Jul 1, 2024</span>
</div>
@@ -187,14 +187,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/05/20/Rescript-genType-import-%E9%97%AE%E9%A2%98/">
+ <a href="/2024/06/27/OCaml-News-2024-5/">
- Rescript @genType import 问题
+ OCaml News 2024-5
</a>
</div>
- <span class="post-date">May 20, 2024</span>
+ <span class="post-date">Jun 27, 2024</span>
</div>
@@ -205,14 +205,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/02/26/OCaml-News-2024-3/">
+ <a href="/2024/06/06/NET-AOT-%E4%B8%8B%E7%9A%84-F-%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90%E5%BA%93%E9%80%89%E6%8B%A9/">
- OCaml News 2024-3
+ .NET AOT 下的 F# 命令行参数解析库选择
</a>
</div>
- <span class="post-date">Feb 26, 2024</span>
+ <span class="post-date">Jun 6, 2024</span>
</div>
@@ -223,14 +223,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/01/23/G-Machine/">
+ <a href="/2024/05/20/Rescript-genType-import-%E9%97%AE%E9%A2%98/">
- G-Machine
+ Rescript @genType import 问题
</a>
</div>
- <span class="post-date">Jan 23, 2024</span>
+ <span class="post-date">May 20, 2024</span>
</div>
@@ -241,14 +241,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/01/22/Rescript-React-Native/">
+ <a href="/2024/02/26/OCaml-News-2024-3/">
- Rescript and React Native
+ OCaml News 2024-3
</a>
</div>
- <span class="post-date">Jan 22, 2024</span>
+ <span class="post-date">Feb 26, 2024</span>
</div>
@@ -259,14 +259,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/01/18/OCaml-News-2024-2/">
+ <a href="/2024/01/23/G-Machine/">
- OCaml News 2024-2
+ G-Machine
</a>
</div>
- <span class="post-date">Jan 18, 2024</span>
+ <span class="post-date">Jan 23, 2024</span>
</div>
@@ -277,14 +277,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2024/01/08/OCaml-News-2024-1/">
+ <a href="/2024/01/22/Rescript-React-Native/">
- OCaml News 2024-1
+ Rescript and React Native
</a>
</div>
- <span class="post-date">Jan 8, 2024</span>
+ <span class="post-date">Jan 22, 2024</span>
</div>
@@ -292,19 +292,17 @@
- <div class="year-title">2023</div>
-
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/10/21/OCaml-Core-Int-pow-%E7%9A%84%E5%AE%9E%E7%8E%B0/">
+ <a href="/2024/01/18/OCaml-News-2024-2/">
- OCaml Core.Int.pow 的实现
+ OCaml News 2024-2
</a>
</div>
- <span class="post-date">Oct 21, 2023</span>
+ <span class="post-date">Jan 18, 2024</span>
</div>
@@ -315,14 +313,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/10/05/v8%E4%B8%AD%E7%9A%84Number-toString/">
+ <a href="/2024/01/08/OCaml-News-2024-1/">
- v8中的Number.toString()
+ OCaml News 2024-1
</a>
</div>
- <span class="post-date">Oct 5, 2023</span>
+ <span class="post-date">Jan 8, 2024</span>
</div>
diff --git a/tags/Technique/page/3/index.html b/tags/Technique/page/3/index.html
index e4742b47..42c3238e 100644
--- a/tags/Technique/page/3/index.html
+++ b/tags/Technique/page/3/index.html
@@ -151,14 +151,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/09/28/A-Brief-History-of-Just-In-Time/">
+ <a href="/2023/10/21/OCaml-Core-Int-pow-%E7%9A%84%E5%AE%9E%E7%8E%B0/">
- A Brief History of Just-In-Time
+ OCaml Core.Int.pow 的实现
</a>
</div>
- <span class="post-date">Sep 28, 2023</span>
+ <span class="post-date">Oct 21, 2023</span>
</div>
@@ -169,14 +169,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/08/15/tick-thread%E5%9C%A8Multicore-OCaml%E4%B8%AD%E7%9A%84%E4%BD%9C%E7%94%A8/">
+ <a href="/2023/10/05/v8%E4%B8%AD%E7%9A%84Number-toString/">
- tick thread在Multicore OCaml中的作用
+ v8中的Number.toString()
</a>
</div>
- <span class="post-date">Aug 15, 2023</span>
+ <span class="post-date">Oct 5, 2023</span>
</div>
@@ -187,14 +187,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/08/15/poll-error-attribute-in-OCaml/">
+ <a href="/2023/09/28/A-Brief-History-of-Just-In-Time/">
- 使用 [@poll error] 实现线程安全的数据结构
+ A Brief History of Just-In-Time
</a>
</div>
- <span class="post-date">Aug 15, 2023</span>
+ <span class="post-date">Sep 28, 2023</span>
</div>
@@ -205,14 +205,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/">
+ <a href="/2023/08/15/tick-thread%E5%9C%A8Multicore-OCaml%E4%B8%AD%E7%9A%84%E4%BD%9C%E7%94%A8/">
- WiscKey: Separating Keys from Values in SSD-conscious Storage
+ tick thread在Multicore OCaml中的作用
</a>
</div>
- <span class="post-date">Jul 21, 2023</span>
+ <span class="post-date">Aug 15, 2023</span>
</div>
@@ -223,14 +223,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/06/28/%E9%9A%90%E8%97%8F%E4%B8%80%E4%BA%9BOCaml-Effect%E7%9A%84%E6%9C%BA%E5%88%B6%EF%BC%8C%E8%AE%A9%E5%85%B6%E8%AF%AD%E6%B3%95%E5%9C%A8%E7%B2%BE%E7%A5%9E%E4%B8%8A%E6%9B%B4%E6%8E%A5%E8%BF%91delimcc/">
+ <a href="/2023/08/15/poll-error-attribute-in-OCaml/">
- 隐藏一些OCaml Effect的机制,让其语法在精神上更接近delimcc
+ 使用 [@poll error] 实现线程安全的数据结构
</a>
</div>
- <span class="post-date">Jun 28, 2023</span>
+ <span class="post-date">Aug 15, 2023</span>
</div>
@@ -241,14 +241,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/06/28/caml-release-runtime-system%E5%AF%BC%E8%87%B4%E7%9A%84%E6%AD%BB%E9%94%81%E9%97%AE%E9%A2%98/">
+ <a href="/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/">
- caml_release_runtime_system导致的死锁问题
+ WiscKey: Separating Keys from Values in SSD-conscious Storage
</a>
</div>
- <span class="post-date">Jun 28, 2023</span>
+ <span class="post-date">Jul 21, 2023</span>
</div>
@@ -259,14 +259,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/05/24/Rust-%E9%97%AD%E5%8C%85-lifetime-may-not-live-long-enough-%E9%97%AE%E9%A2%98/">
+ <a href="/2023/06/28/%E9%9A%90%E8%97%8F%E4%B8%80%E4%BA%9BOCaml-Effect%E7%9A%84%E6%9C%BA%E5%88%B6%EF%BC%8C%E8%AE%A9%E5%85%B6%E8%AF%AD%E6%B3%95%E5%9C%A8%E7%B2%BE%E7%A5%9E%E4%B8%8A%E6%9B%B4%E6%8E%A5%E8%BF%91delimcc/">
- Rust 闭包 lifetime may not live long enough 问题
+ 隐藏一些OCaml Effect的机制,让其语法在精神上更接近delimcc
</a>
</div>
- <span class="post-date">May 24, 2023</span>
+ <span class="post-date">Jun 28, 2023</span>
</div>
@@ -277,14 +277,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/05/12/C-20-%E5%AE%9E%E7%8E%B0-string-split/">
+ <a href="/2023/06/28/caml-release-runtime-system%E5%AF%BC%E8%87%B4%E7%9A%84%E6%AD%BB%E9%94%81%E9%97%AE%E9%A2%98/">
- C++ 20 实现 string split
+ caml_release_runtime_system导致的死锁问题
</a>
</div>
- <span class="post-date">May 12, 2023</span>
+ <span class="post-date">Jun 28, 2023</span>
</div>
@@ -295,14 +295,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/05/11/C-vector-%E7%9A%84-push-back-%E5%92%8C-emplace-back/">
+ <a href="/2023/05/24/Rust-%E9%97%AD%E5%8C%85-lifetime-may-not-live-long-enough-%E9%97%AE%E9%A2%98/">
- C++ vector 的 push_back 和 emplace_back
+ Rust 闭包 lifetime may not live long enough 问题
</a>
</div>
- <span class="post-date">May 11, 2023</span>
+ <span class="post-date">May 24, 2023</span>
</div>
@@ -313,14 +313,14 @@
<div class="post-list-item">
<div class="post-title">
- <a href="/2023/05/04/C-%E7%9A%84-Trait/">
+ <a href="/2023/05/12/C-20-%E5%AE%9E%E7%8E%B0-string-split/">
- C++ 的 Trait
+ C++ 20 实现 string split
</a>
</div>
- <span class="post-date">May 4, 2023</span>
+ <span class="post-date">May 12, 2023</span>
</div>
diff --git a/tags/Technique/page/4/index.html b/tags/Technique/page/4/index.html
index c478b65b..25655550 100644
--- a/tags/Technique/page/4/index.html
+++ b/tags/Technique/page/4/index.html
@@ -151,6 +151,42 @@
<div class="post-list-item">
<div class="post-title">
+ <a href="/2023/05/11/C-vector-%E7%9A%84-push-back-%E5%92%8C-emplace-back/">
+
+ C++ vector 的 push_back 和 emplace_back
+
+ </a>
+ </div>
+
+ <span class="post-date">May 11, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2023/05/04/C-%E7%9A%84-Trait/">
+
+ C++ 的 Trait
+
+ </a>
+ </div>
+
+ <span class="post-date">May 4, 2023</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
<a href="/2023/05/03/Rust-NewType-%E6%A8%A1%E5%BC%8F/">
Rust NewType 模式
diff --git a/tags/Typescript/index.html b/tags/Typescript/index.html
new file mode 100644
index 00000000..0b73e0d7
--- /dev/null
+++ b/tags/Typescript/index.html
@@ -0,0 +1,246 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+<meta name="viewport"
+ content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+<meta http-equiv="X-UA-Compatible" content="ie=edge">
+
+ <meta name="author" content="韩暮秋">
+
+
+ <meta name="subtitle" content="暮秋小屋">
+
+
+ <meta name="description" content="这里是暮秋小屋,思念和灵感的寄存处">
+
+
+ <meta name="keywords" content="韩暮秋,MuqiuHan,'Muqiu Han', 'muqiu han', muqiuhan">
+
+
+
+
+<title>Tag: Typescript | 暮秋小屋</title>
+
+
+
+ <link rel="icon" href="/favicon.ico">
+
+
+
+<style>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
+</style>
+
+
+
+ <!-- stylesheets list from _config.yml -->
+
+ <link rel="stylesheet" href="/css/style.css">
+
+
+
+
+
+ <!-- scripts list from _config.yml -->
+
+ <script src="/js/frame.js"></script>
+
+
+
+
+
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/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()">
+ Menu
+ </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="/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 id="tag">
+
+
+ <p class="tag-title">
+ / <a href="/tag/">tags</a>
+ / <a href="">Typescript</a> /
+ </p>
+ <div class="post-list">
+
+
+
+
+
+
+ <div class="year-title">2025</div>
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2025/02/19/Repository-pattern-in-Typescript/">
+
+ Repository pattern in Typescript
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 19, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">
+
+ Prisma 关系型数据库的 Self-relations
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 18, 2025</span>
+ </div>
+
+
+ <div id="paginator">
+
+ </div>
+</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/tags/Web/index.html b/tags/Web/index.html
index bc3976fb..c244272d 100644
--- a/tags/Web/index.html
+++ b/tags/Web/index.html
@@ -146,6 +146,44 @@
+ <div class="year-title">2025</div>
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2025/02/19/Repository-pattern-in-Typescript/">
+
+ Repository pattern in Typescript
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 19, 2025</span>
+ </div>
+
+
+
+
+
+
+
+ <div class="post-list-item">
+ <div class="post-title">
+ <a href="/2025/02/18/Prisma-%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84-Self-relations/">
+
+ Prisma 关系型数据库的 Self-relations
+
+ </a>
+ </div>
+
+ <span class="post-date">Feb 18, 2025</span>
+ </div>
+
+
+
+
+
+
<div class="year-title">2024</div>