<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Raighne&#39;s Blog</title>
    <link>/</link>
    <description>Recent content on Raighne&#39;s Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Wed, 17 Dec 2025 10:41:45 +0800</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Lessons from Leading a Major Refactor</title>
      <link>/posts/lessons_from_a_major_refactor/</link>
      <pubDate>Wed, 17 Dec 2025 10:41:45 +0800</pubDate>
      
      <guid>/posts/lessons_from_a_major_refactor/</guid>
      <description>Recently, I led a major refactor on my team, and here are the lessons I learned from it. None of them are groundbreaking—they’re simple principles we’ve all read about countless times. Yet, as this experience reminded me, they’re surprisingly difficult to put into practice.
Naming Conventions Perhaps because English isn’t my first language, I pay extra attention to naming functions, parameters, and constants clearly and concisely. A good name should be self-explanatory—when you read it, you immediately understand what it represents.</description>
    </item>
    
    <item>
      <title>In 2025 moment.js is still the best Date/Time Javascript package</title>
      <link>/posts/moment-in-js/</link>
      <pubDate>Wed, 05 Mar 2025 22:24:54 +0800</pubDate>
      
      <guid>/posts/moment-in-js/</guid>
      <description>I used moment.js frequently between 2017 and 2022, and it worked well for all my use cases. After 2022, I started using Day.js, a lightweight library designed to replace moment.js, with a size of just 2KB. In my experience, it has worked well in most cases and hasn’t caused any major issues—until this week.
This week, I encountered a serious issue with Day.js. The feature in question involves copying last week’s calendar events to the current week.</description>
    </item>
    
    <item>
      <title>From Senior To Staff</title>
      <link>/posts/from_senior_to_staff/</link>
      <pubDate>Wed, 01 Jan 2025 15:56:57 +0800</pubDate>
      
      <guid>/posts/from_senior_to_staff/</guid>
      <description>Recently, I was entrusted with a new project that presented an exciting opportunity to collaborate closely with our staff engineers. This experience enabled me to observe their decision-making processes and problem-solving strategies firsthand. Reflecting on these interactions, I have distilled several key insights that have been both inspiring and profoundly educational:
Understand the business requirements After five years as a Software Development Engineer (SDE), coding skills are no longer your primary competitive edge.</description>
    </item>
    
    <item>
      <title>All About TCP and TLS Connection</title>
      <link>/posts/all_about_tcp/</link>
      <pubDate>Wed, 27 Mar 2024 21:19:23 +0800</pubDate>
      
      <guid>/posts/all_about_tcp/</guid>
      <description>This article will be continually updated.
TCP handshake TCP need three-way handshake to establish connection and four-way handshake to termination. Here&amp;rsquo;s what we learned from the book, to establish the connection it needs 1.5 RTT (three-way handshake) and to terminate it needs 2 RTT (four-way handshake). The progress details looks like this:
Connection Establishment:
Client(SYN-Sent) &amp;gt; SYN &amp;gt; Server Client(Establish) &amp;lt; SYN + ACK &amp;lt; Server(SYN-Received) Client(Establish) &amp;gt; ACK &amp;gt; Server(Establish) Connection Termination:</description>
    </item>
    
    <item>
      <title>Best Let&#39;s Encrypt Manager for Kong &#43; GKE Autopilot</title>
      <link>/posts/gke_autopilot_best_let_s_encrypt_manager/</link>
      <pubDate>Sun, 10 Sep 2023 09:37:37 +0800</pubDate>
      
      <guid>/posts/gke_autopilot_best_let_s_encrypt_manager/</guid>
      <description>&lt;p&gt;In this article, I will not delve into the basics of TLS/SSL and how SSL works. Additionally, if you are using GKE default ingress, you also may not encounter this issue. Instead, I will focus on why I chose to use Let&amp;rsquo;s Encrypt and how to set up automatic renewal for it in Google Kubernetes Engine (GKE) Autopilot and third-party ingress using Kong.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>TailScale Funnel 实现内网穿透</title>
      <link>/posts/nas_tailscale/</link>
      <pubDate>Sun, 25 Jun 2023 10:09:17 +0800</pubDate>
      
      <guid>/posts/nas_tailscale/</guid>
      <description>&lt;p&gt;前段时间网络上一篇 TailScale 的技术&lt;a href=&#34;https://tailscale.com/blog/how-tailscale-works/#encrypted-tcp-relays-derp&#34;&gt;博文&lt;/a&gt;相当火热，讲述了 TailScale 如何在各种情况下实现打洞，干货满满，全是技术点。本来 QNAP 自带的 myqnapcloud 也够用了，但是被 TailScale 的博文吸引，准备在 NAS 上试用一下。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>七天六晚沙巴/仙本那</title>
      <link>/posts/trip2kk/</link>
      <pubDate>Sun, 28 May 2023 00:12:58 +0000</pubDate>
      
      <guid>/posts/trip2kk/</guid>
      <description>月初去了东马玩了一周，行程定下来后问了一圈同事，结果同事都不知道仙本那，反观国内小红书各种推荐，我心想糟糕又是坑中国人的地方，加上出发前一周又感染甲流，所以对行程没有太多期待，但一周下来感觉太爽了，值得写一篇流水账。
Day 0: 到达KK，吃海鲜 提前打印好eVisa早早的到达T4， Auto Gate 直接出关很快捷，飞行了2.5个小时就安全降落亚庇国际机场了，在机场换钱买了sim卡后Grab打车到酒店，马来西亚打车很便宜了，或者说对这才是正常的价格，新加坡打车太贵了。因为甲流刚刚恢复，身体还很虚弱，第一天没有太多活动，办理了入住后就在酒店里休息。中午点了KFC吃，都说马来西亚的KFC是世界上最好吃的KFC，结果踩雷，就是难吃。 我们列了一些小红书上推荐的餐厅（大茄來，莎莎&amp;hellip;等等），最后对比下来我们还是觉得大茄來最好吃，所以KK最后一天中午晚餐都在大茄來吃的，下面是一些推荐菜： 奶油老虎虾几乎是必点的一道菜了，很好吃，两个人一人一只就够了。然后我们第一次看到象鼻螺，很像象鼻蚌，口感很脆很好吃，强烈推荐。 Day 1: 红树林，日落 第二天虚弱的身体恢复的差不多了，于是太太跟旅行社定了半日游。丹绒亚路拥有世界前三的最美日落，于是诞生了一些围绕日落的行程，我们订了下午红树林看长鼻猴看日落，晚上红树林看萤火虫。我不推荐红树林这个行程，环境落后而且不是百分百能看到野生的长鼻猴，看动物为啥不去动物园😂。 虽然海滩是脏兮兮的，但丹绒亚路的日落真的很美，和太太在沙滩漫步，看着太阳慢慢落下，感受阳光一点点消失。还在沙滩上发现了小螃蟹，算是圆了自己的赶海梦。
Day 2: 水上清真寺，Gaya street 没啥可以说的，因为饮食跟新加坡差不多，没发现特别好吃的。水上清真寺也没必要特意来看，看看网络上的照片就可以。
Day 3: 飞仙本那，入住水屋 亚庇国际机场出发飞斗湖机场，到达机场后提前预约的接机已经到了，开车一个小时到达仙本那镇上，路边两遍都是成片棕榈树林，公路起起伏伏，一路风景很美。 接机直接送到码头，码头酒店的船也到了，做了半个小时快艇到了水屋，办理好入住后休息了一会儿就去划船浮潜完了。 海岛生活就是枯燥乏味且chill，看日出看日落，依偎在一起看翡翠色的海，要是能一辈子这样呆着得有多好。 推荐马布岛 mabu resort，跟我们预定的水屋比起来mabu高档太多了。
Day 4: 跳岛游 到达仙本那第二天，预约了跳岛游，这里有个插曲，同行推荐把泳衣穿在里面，于是我就紧急回房间换衣服了，没关窗帘，结果旅行社的船直接从我房间前的海面穿过，尴尬。
我自认为是一个很好的泳者，然后尝试深潜的时候发现：游泳跟潜水真的毫无关系。随着深度加深，看到海底满满的珊瑚，骨导能清楚的听到自己的呼吸，就开始害怕，害怕到不敢呼吸，所以快快的回到了海面。
感叹仙本那自然环境，翡翠色的大海，但是还是要提高保护意识，沙滩海面上飘着很多垃圾。
Day 5: 仙本那镇上 仙本那镇上很小，中午在肥妈吃了一只皮皮虾做椒盐，一个海胆蒸蛋，感觉味道一般般，不如KK的大茄來。 晚上准备在菜市场跟巴瑶族极限拉扯的时候，发现了昨天跳岛游认识的老哥，于是一拍即合我们多买几种海鲜，晚上一起吃。 买了石头鱼，海胆，梭子蟹，苏眉鱼，老虎虾。 极限拉扯，两只石头鱼，一只苏眉鱼，跟老哥讲价讲到120RM拿下，第一次吃石头鱼，好吃，肉质细腻滑嫩，苏眉鱼比起来反而就差很多了。 皮皮虾真的太棒了，我就没见过这么大且带膏的皮皮虾，30RM一只差不多可以拿下来，单为了皮皮虾都可以来一趟仙本那。
Day 6: 回家 行程最后一天，早上斗湖飞亚庇转机回坡，转机间隔两个半小时，所以我们极限操作，落地后打车去大茄來吃我心心念念的龙虾。结果吃完后发现赶不上携程上停止值机的事件了，一路火花带闪电，被司机笑了一路，慌慌忙忙到了海关，又被海关嘲笑。到了登机口，还没开始排队呢。虽然侥幸顺利登机回坡了，但是大家还是提前预留好足够时间。 TIPS: 马币可以在新加坡换，亚庇/仙本那的汇率太差了，甚至不如在JB新山换。 马来西亚的椰子都是有点酸酸的，不好喝。还是得买泰国的椰子。 仙本那日照很强，一定要涂防晒，带好防虫液。 仙本那巴瑶族讲价，可以参考小红书，晚一点比较好讲价。 </description>
    </item>
    
    <item>
      <title>How to implement rate limiting by tier in Kong without the Enterprise Edition</title>
      <link>/posts/kong_rate_limiting/</link>
      <pubDate>Wed, 29 Mar 2023 21:49:33 +0800</pubDate>
      
      <guid>/posts/kong_rate_limiting/</guid>
      <description>&lt;p&gt;Recently, I came across a requirement where I needed to implement rate limiting based on customer group and HTTP method. For instance, I want to limit the number of calls free users can make to GET routes to 1000 per minute and to POST routes to 500 per minute. I am aware that rate-limiting-advance supports rate limiting by customer group, but it requires the Enterprise version. How can I implement rate limiting by HTTP method?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>润to新加坡</title>
      <link>/posts/run_to_singapore/</link>
      <pubDate>Thu, 20 Oct 2022 20:17:54 +0800</pubDate>
      
      <guid>/posts/run_to_singapore/</guid>
      <description>&lt;h3 id=&#34;工作机会&#34;&gt;工作机会&lt;/h3&gt;
&lt;p&gt;去国外工作是上学时期的梦想，但年纪增长、互联网行业下滑，觉得润已经很遥远了，加上在成都这一年的安逸生活，在成都定居结婚生子似乎更顺理成章。一天妻子在刷我手机的时候看到某某直聘上有一个猎头发来的消息，问我为啥不回，本来这一类消息我都不怎么看的，幸亏妻子的强迫症（看到通知小红点必须要点掉）发现了这个工作机会，于是我们两简单的讨论了一下润的可行性，本着试试看的心情我递交了简历。对方很快安排了面试。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>家庭网络的升级</title>
      <link>/posts/homelab/</link>
      <pubDate>Mon, 03 Jan 2022 20:51:53 +0000</pubDate>
      
      <guid>/posts/homelab/</guid>
      <description>经常逛论坛，很早就心水了 Ubnt AC+AP 全家桶的便捷，然而第一套房子装修的时候并没有预留网线，现在又旅居蓉城，想的是装修第二套房子的时候再购买 Ubnt 全家桶。
现在出租屋的网络架构是 R2S (前同事离职前给我的福利，200 的价格收了一套金属壳的 R2S，还送了一张 C10 的卡) +K2P，R2S 当主路由经常会因为 passwall 挂了整个网络都跟着挂，诟病很久了，但一直拖着没有升级，压倒骆驼的最后一根稻草是上周是领导 1:1 视频会议，我的网络挂了十分钟才恢复。不得已把网络升级计划提上日程。
可能是疫情的关系，这几年 UBNT 的设备升级很慢，选购 AP 的时候看论坛里反馈 U6-Pro 好像有 BUG，所以先选购 U6-Lite，等新房子装修好 U6-Lite 放主卧，再购买 U6-Pro 放客厅用。网关和交换机选购的时候一度想购买 UDM-PRO，但是 UDM-PRO 没有 POE+电源，购买之后还需要购买 POE+的交换机。(看欧洲官网，有一款UMD-PRO-SE在早期测试，带 POE+电源，真是真正的 Dream Machine)
设备列表: U6-Lite USG-3P USW-Lite-8-PoE
我的需求：
一条给领导用，不需要翻墙。网关 10.10.10.1 一条给我和家里电视用，需要用 R2S 做单臂路由，需要翻墙。网关 10.10.20.1 一条给智能设备用，要求与其他网络隔离。网关 10.10.30.1 回来跟着张大妈上的教程设置了一下，发现有一些坑，总结如下：
USG 默认为 192.168.1.1 网段，会跟电信猫抢网关，我的建议是一劳永逸的将电信猫设置为 192.168.0.1 USG，USW，WIFI 在 10.10.0.1 网段，AC 放在同一网段也比较好。 AC 里的 WAN 默认网关也是 192.168.1.1，需要你修改后再采用 USG，不然 USG 的设置会被修改，然后陷入死循环。 最后贴几张我的配置图。 使用了快一周了，UBNT 真好。</description>
    </item>
    
    <item>
      <title>DDD笔记</title>
      <link>/posts/ddd/</link>
      <pubDate>Sun, 15 Aug 2021 14:17:03 +0800</pubDate>
      
      <guid>/posts/ddd/</guid>
      <description>应用层尽量简单，不包含业务规则或者知识，而只为下层中的领域对象协调任务，分配工作，使他们互相协作。
Layered Architecture 用户界面层 应用层 领域层 基础设施层 各层之间是松散链接的，依赖关系只能是单向的，上层调用下层的公共接口。
1 Entity 和 Value Object Entity 应该具唯一的标识 Value Object 只关注他们的属性，不关注他们是谁 alueObject 不会「单独存在」，而是附属于某个 Entity ValueObject 的生命周期会与所附属的 Entity 绑定在一起
example： 用户保存的地址是 Entity。 用户下订单保存在订单中的地址是 Value Object。
2 Factory 被创建的对应不适合承担复杂的装配操作，让客户直接创建又会使客户的创建陷入混乱，破坏被装配对象和 Aggregate 的封装，导致客户和被创建对象的实现之间产生过于紧密的耦合。所以需要添加一些新元素，不对应模型中的任何事物，又确实承担领域层的部分职责。但它仍是领域设计的一部分。
example:
class Order { constructor( order: OrderProperties, payment: PaymentProperties, deliveryInfo: DeliveryInfoProperties, promo: PromoProperties ) { if (order == null) { throw new Error(&amp;#34;order cannot be null.&amp;#34;); } if (!order.payoutStatus) { this.order.properties.payoutStatus = PayoutStatus.PENDING; } if (!</description>
    </item>
    
    <item>
      <title>大金ModBus模块homebridge</title>
      <link>/posts/homebridge/</link>
      <pubDate>Sat, 06 Feb 2021 13:48:10 +0800</pubDate>
      
      <guid>/posts/homebridge/</guid>
      <description>&lt;p&gt;Update 2025-01-11: 已更换中弘模块，旧 ModBus 已拆除。&lt;/p&gt;
&lt;p&gt;家里工作两年的网关出了问题，尝试恢复的时候发现还是有点难度，缺乏可用的文档。所以整理一下备份出来。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>惊呼“原来这样啊” -《鸡尾酒法典》读手感</title>
      <link>/posts/cocktail/</link>
      <pubDate>Tue, 08 Dec 2020 20:41:02 +0800</pubDate>
      
      <guid>/posts/cocktail/</guid>
      <description>听了最新一期的杯弓舌瘾讲鸡尾酒，简直推翻了我所有之前对鸡尾酒的理解，第一时间下单了《鸡尾酒法典》了。
1、古典鸡尾酒 Old fas hioned 古典鸡尾酒的基酒都是威士忌，老式的配方为 一块方糖 + 两滴苦精 + 两盎波本司威士忌 装饰：一个柠檬皮或者一个橙皮卷
特点：
以烈酒为核心 少许甜味来平衡 苦精和装饰来调味 2、马天尼 Martini 马天尼分金酒和伏特加两种核心，如果核心是伏特加，味美思的用量一定要减少，金酒有很强的植物风味。 酒+酒 装饰：一个柠檬皮或者一颗橄榄
3、Daiquiri 大吉利 大吉利是众多酸酒中的一款，配方由基酒、柑橘类果汁和糖组成，核心是朗姆酒 大吉利和黛西的区别：大吉利用利口酒调位，为黛西以利口酒为核心
4、Sidecar 边车 基酒+利口酒+果汁
你能信长岛冰茶也是属于Sidecar Highball 酒+软饮料 你能信 血腥玛丽 属于 Highball
Flip 酒+蛋白质（牛奶或鸡蛋</description>
    </item>
    
    <item>
      <title>selenium爬虫小记</title>
      <link>/posts/selenium_crawler/</link>
      <pubDate>Fri, 16 Mar 2018 14:22:08 +0800</pubDate>
      
      <guid>/posts/selenium_crawler/</guid>
      <description>&lt;p&gt;刚刚学代码的时候就想写个爬虫，爬一点有意思的东西，也试着爬豆瓣知乎的一些内容，然而在内容值钱的年代，爬虫越来越难，最近接触到selenium自动化测试，想着用这个做爬虫岂不美哉。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>近日面试总结</title>
      <link>/posts/ablout_interview/</link>
      <pubDate>Sat, 01 Oct 2016 18:15:34 +0800</pubDate>
      
      <guid>/posts/ablout_interview/</guid>
      <description>进入大四，找实习成了一件非常重要的事情，由于学校里还有课程没有结束，毕设的课题老师也没有选定，没敢大规模的投递简历，就试着投了两份简历给心仪的公司，座标都是上海的互联网公司，办事的效率都很高也很灵活，知道我还在学校，便安排了电话面试。第一次难免是紧张的，在面试的半个小时里面，多次处于颤抖状态，所以面试的自我感觉不是很好，又挨着国庆放假，所以最终结果还没有出来，但我感觉十有八九没戏了。
两家面试的流程都是差不多，先让你自我介绍一下，第一次面试太紧张，准备了技术方面的问题，没准备到这里，回答的不是很好，介绍了自己的基本信息，笼统的说了下大学的学习生活，最后也就没话说了。其实应该自信一下，突出介绍自己的优点，要给面试官留下好的印象。比如介绍自己通信工程专业，从大二开始自学计算机专业的内容，这里就应该大方的说出来自己的学习能力强，对技术有追求，肯钻研新技术。我说学习了计算机原理、网络、数据结构、算法一些知识，面试官就问我这些知识对现在的开发有哪些帮助，我回答，虽然有些平时用的少，但这些都是程序员的基本修养，能够加深对工程底层的理解。像数据结构和算法这些在后端里用到的就很多了。。。。
第一个面试是 Nodejs 后端的实习，面试官开始问我技术上面的问题，先问了计算机网络方面的知识，A 发送消息给 B，经由 C 中转，这中间经历了那些过程？
我没思考就随口说了起来，事后证明自己大错特错，讲了一大堆后，面试官跟我说其实你并没有理解。更加紧张了。其实面试官要得就是消息从 A 先将消息转成二进制发送给 C，C 再转发给 B，B 收到消息后再将二进制消息转换成原始消息。就是这么简单的答案，我绕了一个大圈没讲清楚。
然后问我算法问题，问我遍历二叉树有几种方式？我回想起来，有三种，前序遍历、中序遍历和后续遍历。面试官让我写出前序遍历的 Code，本来准备想写个递归的 Code，结果想了半天没能回答出来，只好不好意思的跟面试官说想不出来。又问我枚举，当时头脑一片空白，跟面试管说了不知道。这个时候想死的心都有了，数据结构这门课是大三上学期开得课，是我认真学的也是最后考试考得不错的课程之一，结果没怎么用，现在忘记成这个样子，面试到这里已经心灰意冷了。
递归算法 public void preOrderTraversalRecursive(BitNode node) { if(node ==null) return; System.out.print(node.val+&amp;#34;,&amp;#34;); preOrderTraversalRecursive(node.left); preOrderTraversalRecursive(node.right); } 非递归算法 public void preOrderTraversal() { Stack&amp;lt;BitNode&amp;gt; stack=new Stack&amp;lt;BitNode&amp;gt;(); BitNode node; if(root!=null) { stack.push(root); while(stack.size()&amp;gt;0) { node=stack.pop(); System.out.print(node.val+&amp;#34;,&amp;#34;); if(node.right!=null) stack.push(node.right); if(node.left!=null) stack.push(node.left); } } } 接下里问我的问题，我也没回答的多好，反正面试的很差，我都不记得还问了啥了。
第二个面试的前端，面试官先问我 CSS 跟 JavaScript 哪一个学得好一点，我说 CSS，接着问了我一些 CSS3 的新特性，圆角和阴影怎么使用。我回答：border-radius、text-shadow。
接着让我些一个水平居中 Div，我写了这个：
div { position: absolute; width: 100px; height: 100px margin: auto; top: 0; left: 0; bottom: 0; right: 0; } 面试官说这样会把内容撑开，可能是口头描述，我还没有意识到自己的错，面试官表示行了，继续下面的问题把。</description>
    </item>
    
    <item>
      <title>《原码,反码,补码》笔记</title>
      <link>/posts/computer_code/</link>
      <pubDate>Sun, 15 Mar 2015 13:47:58 +0800</pubDate>
      
      <guid>/posts/computer_code/</guid>
      <description>大一第一学期学的《C 语言程序设计》的时候就接触到原码，反码和补码了，当时也没有认真听，只是稍微了解了一下，并没有留下太多记忆深刻的东西，这学期的专业课《数字电子技术基础》又讲到了，便把内容整理了出来，方便自己和大家理解
机器数和真值 1、机器数
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。
机器数是带符号的，在计算机用一个数的最高位存放符号, 正数为 0, 负数为 1.
比如，十进制中的数 +3 ，计算机字长为 8 位，转换成二进制就是 00000011。如果是 -3 ，就是 10000011 。
那么，这里的 00000011 和 10000011 就是机器数。
2、真值
因为第一位是符号位，所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011，其最高位 1 代表负，其真正数值是 -3 而不是形式值 131（10000011 转换成十进制等于 131）。所以，为区别起见，将带符号位的机器数对应的真正数值称为机器数的真值。
例：0000 0001 的真值 = +000 0001 = +1，1000 0001 的真值 = –000 0001 = –1
I
原码, 反码, 补码的基础概念和计算方法. 原码 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是 8 位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001</description>
    </item>
    
    <item>
      <title>如何管理好自己的密码</title>
      <link>/posts/password_mangement/</link>
      <pubDate>Wed, 11 Mar 2015 18:05:36 +0800</pubDate>
      
      <guid>/posts/password_mangement/</guid>
      <description>&lt;p&gt;微博，QQ，邮箱，App Store，淘宝，支付宝，支付，各种论坛，密码已经乱成一锅粥，把鸡蛋都放在一个篮子里（所有的密码都设置为相同），就要承担一个密码泄露后其他帐号不再安全的风险。把鸡蛋放在不同的篮子里（每个网站用不同的密码），又担心密码太多，每个网站又都有自己的密码规则，连自己都会忘记的尴尬。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>情人节的时候，我在想爷爷</title>
      <link>/posts/valentines_day/</link>
      <pubDate>Sat, 14 Feb 2015 18:33:01 +0800</pubDate>
      
      <guid>/posts/valentines_day/</guid>
      <description>&lt;p&gt;今天是情人节啊，大家情人节快乐啊！你们应该都在电影院陪对象呢吧，我呢，我情人节在医院，是啊，医院。&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
