<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Yejun Su</title>
    <link>https://yejun.dev/zh/posts/</link>
    <description>Recent content in Posts on Yejun Su</description>
    <generator>Hugo</generator>
    <language>zh</language>
    <copyright>&amp;copy; 2026 Yejun Su</copyright>
    <lastBuildDate>Fri, 06 Oct 2023 00:00:00 +0800</lastBuildDate>
    <atom:link href="https://yejun.dev/zh/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>记一次拔智齿的经历</title>
      <link>https://yejun.dev/zh/posts/wisdom-tooth-extraction/</link>
      <pubDate>Fri, 06 Oct 2023 00:00:00 +0800</pubDate>
      <guid>https://yejun.dev/zh/posts/wisdom-tooth-extraction/</guid>
      <description>&lt;p&gt;国庆放假几天牙疼，昨天去家门口的牙科诊所拍了个牙片，不看不知道，一看吓一跳，原来是一颗智齿长歪了，把前面的牙顶坏了。&#xA;牙科诊所的医生贴心地跟我说，去医院拔牙可以用医保，否则自费要1500元。我立刻就在公众号“同济大学附属口腔医院”预约了第二天八点半的门诊。&lt;/p&gt;&#xA;&lt;p&gt;今天闹钟还没响我就醒了，心里默念：牙疼不是病，疼起来真要命！&#xA;吃过早饭，我就开车到医院，找了个附近的小区停车，小区暂时没停车位，门卫很好心地让我停在了小区门口，把车钥匙给他，等会儿有空位了就帮我移车。 一看时间，比预约早到了半个小时。&lt;/p&gt;&#xA;&lt;p&gt;医院有自助服务终端，不用到窗口排队挂号，很方便。要注意的一点是， &lt;strong&gt;挂号时机器还会吐出一张医院的就诊卡，别忘了拿&lt;/strong&gt; 。&#xA;我当时没注意，只拿了挂号单，后来轮到我拔牙的时候，医生说要这个卡才能操作机器，这个地方耽误了点时间。&lt;/p&gt;&#xA;&lt;p&gt;此时还没到就诊时间，我到科室把挂号单交给护士，护士让我把牙片给她，她找了个医生看，医生看了下说可以拔，让我先去验血（如果有半年内的验血报告，可以略过这步）。&#xA;护士还提醒我先吃饱肚子，因为拔牙后要过两个小时才能吃饭，还好我吃过早饭了。&lt;/p&gt;&#xA;&lt;p&gt;半小时后，我拿了验血报告给医生准备拔牙，刚坐上机器，医生问我要就诊卡，我还云里雾里，后来医生跟我说，医院有自己的就诊卡，用来启动机器的。&#xA;我只好折回到挂号窗口排队，好在人不多，只等了一会儿就拿到了卡。&lt;/p&gt;&#xA;&lt;p&gt;返回科室的时候，医生已经做好准备了，他先跟我分析了一下拔牙的风险：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;这颗智齿顶到了它前面的一颗牙齿，所以拔掉之后，前面那颗牙齿失去了智齿的支撑力，可能会有一点点摇晃。&lt;/li&gt;&#xA;&lt;li&gt;智齿的牙根离神经很近，可能会伤到神经，之后三到六个月可能会觉得脸颊麻麻的。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;如果没问题的话就可以签字拔牙了，那我肯定没问题了，在牙疼面前这些都不是事儿💪&lt;/p&gt;&#xA;&lt;p&gt;接下来就正式开始拔牙，先打一针麻醉，等舌头和嘴唇感觉有点麻就可以拔了。我的智齿有点大，要先分成小块，两个医生前前后后切了好几次，用了很大的力气终于拔出来了，大概花了35分钟。&#xA;之后就是缝合伤口，给我一个棉花咬住止血，约了一周以后来拆线。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>2022</title>
      <link>https://yejun.dev/zh/posts/2022-in-review/</link>
      <pubDate>Sun, 22 Jan 2023 00:00:00 +0800</pubDate>
      <guid>https://yejun.dev/zh/posts/2022-in-review/</guid>
      <description>&lt;h2 id=&#34;回顾2022&#34;&gt;回顾2022&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;面试 Tubi 的 Platform Engineer。&#xA;朋友内推，一共有四轮面试，很遗憾的是，在两轮技术面试中我没有表现出足够的程序设计功力，无缘加入😂。&#xA;说起来这也是我第一次参加线上面试，在面试时发生了一些意想不到的情况，积累了宝贵的经验。&#xA;值得一提的是面试的体验很棒，全程有专人安排面试并反馈面试进度，在通知面试结果时，还会详细说明表现好的方面，以及需要提升的方面。&lt;/li&gt;&#xA;&lt;li&gt;看了几本程序设计的书。 尤其喜欢 &lt;a href=&#34;https://www.manning.com/books/grokking-simplicity&#34;&gt;Grokking Simplicity&lt;/a&gt;，它主要讲了使用函数式思想设计可维护、可测试、可重用的程序。&#xA;在团队内部分享了两次（&lt;a href=&#34;https://speakerdeck.com/goofansu/functional-programming-part-1&#34;&gt;1&lt;/a&gt;、&lt;a href=&#34;https://speakerdeck.com/goofansu/functional-programming-part-2&#34;&gt;2&lt;/a&gt;），大家对这本书都很感兴趣。在公司的项目中，我使用了书中提到的设计方法，改进了一个程序的性能（详见 &lt;a href=&#34;https://yejun.dev/posts/a-tour-of-functional-thinking/&#34;&gt;A tour of functional thinking&lt;/a&gt;）。&lt;/li&gt;&#xA;&lt;li&gt;订阅了一些邮件列表。 其中我最喜欢的是 &lt;a href=&#34;https://world.hey.com/jorge&#34;&gt;Jorge Manrubia&lt;/a&gt; 的文章，他经常分享 Domain-Driven Design 在 Rails 中的实现方式。&#xA;特别是 &lt;a href=&#34;https://dev.37signals.com/series/code-i-like/&#34;&gt;Code I Like&lt;/a&gt; 系列，读后大受启发，使用了他的方法改写了一个功能，还跟他交流了一下&lt;a href=&#34;https://gist.github.com/goofansu/f42f0e19fc35a686c8217cfea81bdb5b&#34;&gt;我的实现方式&lt;/a&gt;，他给了很有价值的反馈。&lt;/li&gt;&#xA;&lt;li&gt;用&amp;quot;不背单词&amp;quot;背了雅思常考词汇，一共3837个，用了大概半年背完。 目前没打算考试，不过词汇量的提升对日常使用确实很有帮助。&#xA;后来买了会员，可以使用柯林斯词典，它用简单的英语解释单词，我感觉更容易理解，而且可以培养英语思维，因为大脑不用经历英翻中的过程。关于这点，我是看了&lt;a href=&#34;https://www.youtube.com/watch?v=WxYnyqgO77M&#34;&gt;这个视频&lt;/a&gt;后受到启发的。&lt;/li&gt;&#xA;&lt;li&gt;从 Google Chrome 换到 &lt;a href=&#34;https://arc.net/&#34;&gt;Arc Browser&lt;/a&gt;。&#xA;这个浏览器其实还是基于 Chromium，但是它做了很多大胆的改动，例如标签栏移到左侧，支持创建多个空间，每个空间可以设置不同的 Profile，每个 Profile 是一套独立的设置。&#xA;我设置了两个 Profile，分别对应工作和生活，工作空间只登录公司的 Google Workspace 账号，生活空间则只登录我的个人账号，这样上班用工作空间，下班用个人空间，生活工作两不误。&lt;/li&gt;&#xA;&lt;li&gt;回归 Emacs。 从 Intel 换到 M1 Pro 后，简直是鸟枪换炮，Emacs 运行起来丝般顺滑，GitHub Copilot 收费当然也是原因之一，让我有了抛弃 VSCode 的理由✌️。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;展望2023&#34;&gt;展望2023&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;列了个书单，努力提高程序设计水平🚀（部分参考 &lt;a href=&#34;https://scottming.github.io/2023/01/03/reading-recap-in-2022/&#34;&gt;Scott的读书小结&lt;/a&gt;)。&lt;/li&gt;&#xA;&lt;li&gt;以解决自己的问题为出发点创建练手项目，锻炼编程能力。&lt;/li&gt;&#xA;&lt;li&gt;学习 Emacs Lisp，完善自己的编程体验。&lt;/li&gt;&#xA;&lt;li&gt;多写文章，内容主要是软件开发的经验和心得。&lt;/li&gt;&#xA;&lt;li&gt;帮助团队成员成长。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>初识 scientist gem</title>
      <link>https://yejun.dev/zh/posts/learn-scientist-gem/</link>
      <pubDate>Thu, 31 Mar 2022 00:00:00 +0800</pubDate>
      <guid>https://yejun.dev/zh/posts/learn-scientist-gem/</guid>
      <description>&lt;p&gt;最近项目中的一个功能有性能问题，改进方案很简单，就是用缓存代替实时计算，但是缓存需要及时更新，不能返回错误的结果。&#xA;这个过程需要用生产环境的数据来检验，但是又不能破坏现有的功能，正巧前几天读了 &lt;a href=&#34;https://world.hey.com/jorge/changing-critical-code-paths-with-scientist-a3becb84&#34;&gt;Changing Critical Code Paths With Scientist&lt;/a&gt;, 发现文中提到的 scientist gem 就是解决这个问题的。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;🔬 A Ruby library for carefully refactoring critical paths.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ndash; &lt;a href=&#34;https://github.com/github/scientist&#34;&gt;https://github.com/github/scientist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这个项目的命名很形象，我们开发者就好比是科学家 (scientist)，要改进现有的方案，一个稳妥地方法是进行对照实验 (controlled experiment)，把现有方案设为对照组 (control)，新方案设为实验组 (candidate)，在同一环境、同一时间进行实验，减少不确定的因素带来的影响。&lt;/p&gt;&#xA;&lt;p&gt;下面言归正传，让我们看一下如何使用 scientist。&lt;/p&gt;&#xA;&lt;p&gt;首先，引入 &lt;code&gt;Science&lt;/code&gt; ，它提供了一些 DSL，使用 &lt;code&gt;science&lt;/code&gt; 块可以很方便地定义实验：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Query&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kp&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;Science&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fetch_data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;science&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;fetch-data&amp;#39;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;experiment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;experiment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# control&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;experiment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;try&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# candidate 1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;experiment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;try&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# candidate 2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其次，实现 &lt;code&gt;Scientist::Experiment&lt;/code&gt; ，我把它放在了项目的 &lt;code&gt;config/initializers/scientist.rb&lt;/code&gt; ，&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;require&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;scientist/experiment&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ScientistExperiment&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kp&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;Scientist&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;Experiment&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kp&#34;&gt;attr_accessor&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;:name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;initialize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;vi&#34;&gt;@name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;enabled?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kp&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;raised&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;operation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;super&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;publish&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;puts&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;science.&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;#{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.mismatched&amp;#34;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;matched?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;puts&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;control&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;duration&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;puts&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;candidates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;duration&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;puts&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;observations&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;:name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;no&#34;&gt;ScientistExperiment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;raise_on_mismatches&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kp&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;Rails&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;解释一下几个方法调用：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;enabled?&lt;/code&gt; 返回 true 表示启用实验；&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;publish&lt;/code&gt; 表示发布实验结果，在这里一般是把结果输出到可以查看的地方，比如日志或错误监控系统；&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ScientistExperiment.raise_on_mismatches = true&lt;/code&gt; 表示如果实验结果不一致，就抛出异常，在测试环境中开启这项可以及早发现问题。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;设置完以后启动 Rails 服务，就可以实验了。这种方式适用于在生产环境改进算法、性能、重构，不用担心带来破坏性的问题。&#xA;当然，scientist 也有其局限性：如果实验结果无法比较，或者不能仅通过比较结果来判断方案的可行性，那么它可能就不适用。&#xA;不过，使用 scientist 使我能更平静地改进代码，我想这就足够了。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>新生儿护理宝典</title>
      <link>https://yejun.dev/zh/posts/baby-care-101/</link>
      <pubDate>Mon, 13 Oct 2014 00:00:00 +0800</pubDate>
      <guid>https://yejun.dev/zh/posts/baby-care-101/</guid>
      <description>&lt;p&gt;这些建议是月子中心的一位老医生给的，针对的是1～3个月大的宝贝。&lt;/p&gt;&#xA;&lt;h2 id=&#34;准备物品&#34;&gt;准备物品&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;纽曼斯益生菌（宝宝大便不正常时吃，必备）&lt;/li&gt;&#xA;&lt;li&gt;西甲硅油（宝宝肠绞痛或胀气时吃，必备）&lt;/li&gt;&#xA;&lt;li&gt;小脸盆（宝宝的脸盆要跟大人分开）&lt;/li&gt;&#xA;&lt;li&gt;免洗洗手液（为宝宝换尿布时省去洗手的时间）&lt;/li&gt;&#xA;&lt;li&gt;复方碳酸钙粉（给宝宝补钙）&lt;/li&gt;&#xA;&lt;li&gt;百多邦（屁股或脸上有脓时使用）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;环境&#34;&gt;环境&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;室温：22-28度&lt;/li&gt;&#xA;&lt;li&gt;早晚两次通风换气，家里有人来了之后，要通风&lt;/li&gt;&#xA;&lt;li&gt;平时要穿居家服&lt;/li&gt;&#xA;&lt;li&gt;回家要洗手，每次接触宝宝前要洗手&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;洗澡&#34;&gt;洗澡&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;每天晚上7:00-7:30洗&lt;/li&gt;&#xA;&lt;li&gt;洗澡时室温28度，水温39度（用温度计测一下）&lt;/li&gt;&#xA;&lt;li&gt;每星期只能使用一次沐浴露&lt;/li&gt;&#xA;&lt;li&gt;冲洗步骤：头颈－干毛巾擦干头部－臀部－擦脸&lt;/li&gt;&#xA;&lt;li&gt;洗头时身上穿一件衣服&lt;/li&gt;&#xA;&lt;li&gt;红屁屁的时候，用婴儿皂洗屁股&lt;/li&gt;&#xA;&lt;li&gt;擦脸的毛巾和盆单独使用，经常消毒&lt;/li&gt;&#xA;&lt;li&gt;不要擦粉和油，如果皮肤太干，可以使用食用橄榄油（用锡纸把油加热）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;喂养&#34;&gt;喂养&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;每天晚上7:30-8:30吃奶粉&lt;/li&gt;&#xA;&lt;li&gt;每顿120ml－150ml，不要超过150ml，一天720ml，不要超过900ml（3个月一定要吃到900ml）&lt;/li&gt;&#xA;&lt;li&gt;奶在常温下半小时没吃就不要吃&lt;/li&gt;&#xA;&lt;li&gt;温过一次的奶不能再次加温&lt;/li&gt;&#xA;&lt;li&gt;奶放在冷藏里最多8小时，放在冷冻里可保存3个月&lt;/li&gt;&#xA;&lt;li&gt;喂养建议：在宝贝吃之前的15分钟，先吸出一瓶，等宝贝吃好另一只乳头，再用奶瓶喂（尽量让宝贝吃新鲜的奶）&lt;/li&gt;&#xA;&lt;li&gt;冷冻的奶要先用室温解冻，再温热&lt;/li&gt;&#xA;&lt;li&gt;不要另外喂水，吃到150ml以后可以喂水&lt;/li&gt;&#xA;&lt;li&gt;不要添加菜汁和果汁&lt;/li&gt;&#xA;&lt;li&gt;母乳喂养要补维生素D和复方碳酸钙粉（2次吃奶之间吃，半包＋30ml水）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;晒太阳&#34;&gt;晒太阳&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;没有吃奶的时候进行&lt;/li&gt;&#xA;&lt;li&gt;趴着，衣服撩到腰，屁股对太阳，晒足半小时&lt;/li&gt;&#xA;&lt;li&gt;环境：无风，温度适宜&lt;/li&gt;&#xA;&lt;li&gt;训练宝贝能用手撑住&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;语言训练&#34;&gt;语言训练&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;多跟宝宝说话&lt;/li&gt;&#xA;&lt;li&gt;用笑脸对着宝贝&lt;/li&gt;&#xA;&lt;li&gt;语气平和&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;视觉训练&#34;&gt;视觉训练&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;用颜色鲜明或者反差大的物品，在距离宝宝视力30cm的地方给宝宝看&lt;/li&gt;&#xA;&lt;li&gt;不开顶头灯，不要让宝宝看到灯&lt;/li&gt;&#xA;&lt;li&gt;要看转动的东西，每次不要超过5分钟&lt;/li&gt;&#xA;&lt;li&gt;2岁内不要看电视和电脑屏幕&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;听觉训练&#34;&gt;听觉训练&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;给宝宝听的音乐必须轻柔&lt;/li&gt;&#xA;&lt;li&gt;晚上7:30-8:00在宝宝吃奶的时候，可以放一点舒缓音乐如莫扎特，帮助宝宝睡眠&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;奶瓶消毒&#34;&gt;奶瓶消毒&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;吃完奶要马上洗奶瓶&lt;/li&gt;&#xA;&lt;li&gt;最好使用蒸汽消毒，消毒完以后要及时擦干&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;其他注意事项&#34;&gt;其他注意事项&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;产妇的内衣要单独清洗&lt;/li&gt;&#xA;&lt;li&gt;不要吃过敏的东西，要吃的话，慢慢加量防过敏&lt;/li&gt;&#xA;&lt;li&gt;蛋清最容易过敏，先吃蛋黄，有壳的海鲜容易过敏&lt;/li&gt;&#xA;&lt;li&gt;不要跟宝宝亲嘴，不要擦宝宝的皮肤，要轻轻沾&lt;/li&gt;&#xA;&lt;li&gt;最后挤出的母乳，在宝宝大便薄的时候不要吃，大便干的时候吃&lt;/li&gt;&#xA;&lt;li&gt;大便多的时候要用水清洗，不要用湿纸巾擦&lt;/li&gt;&#xA;&lt;li&gt;屁股皮肤破或者脸上有脓，可以用百多邦&lt;/li&gt;&#xA;&lt;li&gt;鼻子塞住的时候，用棉签＋温水稍微深入一点点转动清洁&lt;/li&gt;&#xA;&lt;li&gt;刚吃完奶时先要给宝宝拍嗝，把宝宝放下平躺时，注意上半身要抬到至少30度，防止吐奶&lt;/li&gt;&#xA;&lt;li&gt;肠道有问题就吃益生菌&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
  </channel>
</rss>
