<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>吴润写字的地方</title>
    <link>https://wu.run/</link>
    <description>Recent content on 吴润写字的地方</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-CN</language>
    <lastBuildDate>Wed, 13 May 2026 18:52:54 +0800</lastBuildDate><atom:link href="https://wu.run/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>从零构建 A 股 ETF 动量轮动系统：一个量化新手的完整指南</title>
      <link>https://wu.run/posts/build-etf-momentum-rotation-system-from-scratch/</link>
      <pubDate>Wed, 13 May 2026 18:52:54 +0800</pubDate>
      
      <guid>https://wu.run/posts/build-etf-momentum-rotation-system-from-scratch/</guid>
      <description>一个基于 A 股 ETF 的量化交易信号系统。它会自动分析 13 只 ETF 的历史走势，找出当前最强的几只买入，弱的卖出，同时内置多重风险控制。支持历史回测、参数优化、每日实盘信号推送。
重要声明 本项目源代码不对外公开，仅供内部学习和研究使用。
原因：
量化策略具有高度风险性。 过去的回测表现不代表未来收益，任何人照搬策略参数都可能遭受重大亏损。 参数与市场环境强相关。 当前参数基于 2019-2025 年 A 股数据优化，市场结构变化后可能完全失效。 执行差异会导致完全不同的结果。 回测假设理想化的成交条件，实盘的滑点、延迟、心理因素会显著影响收益。 防止未经理解的盲目使用。 如果不理解策略原理就直接使用，在遇到回撤时很可能恐慌退出，造成不必要的损失。 如果你是通过本文档了解到这个项目的，请务必：
完整阅读本文档，理解策略的原理和局限性 理解&amp;quot;回测收益 ≠ 未来收益&amp;quot;这一核心事实 不要将超过可承受损失范围的资金投入任何量化策略 对自己的投资决策负全部责任 回测实绩总览（2019.01 — 2026.05，T+1 执行） 核心绩效指标 指标 数值 说明 总收益率 180.75% 10 万 → 28 万 年化收益率 15.62% 7 年复合增长 年化波动率 17.39% 价格波动幅度 夏普比率 0.90 风险调整后收益 最大回撤 -19.45% 历史最大跌幅 Calmar 比率 0.80 收益 / 回撤比 总交易笔数 129 7 年约 129 次买卖 总手续费 ¥2,566 占初始资金 2.</description>
    </item>
    
    <item>
      <title>2025 年 8 月 Digest</title>
      <link>https://wu.run/posts/2025-08-digest/</link>
      <pubDate>Sat, 13 Sep 2025 14:08:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/2025-08-digest/</guid>
      <description>自动化 最近一段时间，工作重点在多维表格的自动化实现上。回想刚参加工作时，参加校招新人 Hackathon，所在的小组开发了一个基于 Slack 的寻人 Bot，我们将它命名为 Asteria，最终拿下了第二名。兜兜转转，如今又回到自动化这一主题。看回那时的照片，非常瘦，大概 130 斤都不到。
健身 本月力量训练 22 次。
体重增到了 155 斤。
打牌 这个月和同事打了一次牌，去苏州玩时和朋友也打了一次，感觉打牌已经成了我的月度固定娱乐活动了。</description>
    </item>
    
    <item>
      <title>2025 年 7 月 Digest</title>
      <link>https://wu.run/posts/2025-07-digest/</link>
      <pubDate>Thu, 31 Jul 2025 21:30:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/2025-07-digest/</guid>
      <description>皮皮 这个月 6 号带皮皮去拍照，顺便去了趟五角场的迪卡侬，其余时间就陪皮皮在住处附近溜达。
新闻 NVIDIA 成为全球首个市值突破 4 万亿美元的公司，精准踩中游戏、挖矿、AI 三大风口，彻底改变了科技行业的格局。而它背后的掌舵人黄仁勋，则是美国梦成真的典型代表。他在 15 岁时移民到美国，最早在连锁餐厅 Denny’s 打工，担任洗碗工，后来被提拔为服务员。他曾幽默地表示：「如果我还在 Denny’s 工作，现在应该已经是 Denny’s 的 CEO 了。」如今，他身穿标志性的皮夹克，站在 AI 浪潮的巅峰。
观点 我们常常在新闻中看到狗或孩子被遗忘在车里，最终热死的悲剧。看到这种新闻时，许多人都会想：这种事绝不可能发生在我身上。然而，正是这种想法，才真正埋下了危险的种子。
我们之所以觉得这种错误不会发生，是因为它太愚蠢、太不可原谅，愚蠢到我们无法接受它会出现在自己的生活中。可正是这种下意识的否认，让我们放松了警惕，让悲剧有了发生的空间。只有当我们真正意识到，这种事确实有可能发生在自己身上时，我们才会采取足够的预防措施，它才真正不会发生。
健身 本月力量训练 22 次。
渐渐适应了工作日中午去公司附近健身房训练。虽然牺牲了午休时间，但换来了晚上的自由，整体安排更加高效。
本月只去了两次龙之梦的 Change Pro。漕河泾印象城新开了一家 24/7 健身房，体验了一周，各方面都挺满意，价格略偏高。还体验了公司附近新开的铁馆，器械配置非常出色，已经和搭子决定一起在这里办卡。
训练方面，本月开始将自重引体向上作为背部训练的第一个动作，目前可以完成 5 组，每组 8 个。
饮食方面，也根据自己的身体状态，制定了新的饮食与补剂计划表。
看看本月的训练状态。
打牌 本月打了两次牌。遇到了一模一样的顺金，最后我先开牌，在这种情况下，谁先开牌谁的牌算小，这种小概率事件被我遇到了。
衢州行 19 号开车去衢州，20 号返回上海，跑了将近 900 公里，真是累得不轻。</description>
    </item>
    
    <item>
      <title>2025 年 6 月 Digest</title>
      <link>https://wu.run/posts/2025-06-digest/</link>
      <pubDate>Mon, 30 Jun 2025 23:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/2025-06-digest/</guid>
      <description>西岸 25 号下班后带皮皮去了西岸。虽然是工作日晚间，依旧人潮涌动，餐厅和酒馆都坐满了人。时不时有路人走过来和皮皮玩，但皮皮似乎兴致不高，只顾着四处标记地盘。
在 PATA 店内，皮皮又成了团宠小狗。
播客 本期推荐的播客是孟岩最新一期的 够与多。
阐述了人们常在「够」与「多」之间迷失，真正的「够」应来自内心，而非外界的诱导。从宏观视角批判现代消费文化，节目引用《制造消费者》中的核心观点：
工业社会可以制造两样东西：一样是商品，另外一样是渴望商品的心。
这是批判现代资本主义消费文化的核心论点之一，强调现代社会不仅制造商品本身，还系统性地塑造人们对商品的渴望，广告、橱窗展示、百货公司等手段共同构建出一个「欲望工厂」，让「渴望」本身如同商品一样被批量生产、操控和消费。
这一观点让我不禁思考：我现在渴望的东西，是自己真正想要的吗？还是被「制造出来」的？
我觉得自己做得还不错的一点是：不容易被各类电商节日所裹挟，我通常按需购物。即使在打折季，我也会问自己：我真的需要它吗？这个消费是为了提升生活体验，还是只是为了炫耀、迎合外部评价？如果是后者，那也许就不是我真正需要的东西。
「够」与「多」是两种消费理念的具象代表。总结来看，「够」是内在满足，由好奇心、热爱、成长驱动，「多」是外部攀比，由贪婪、排名、评价驱动。如果活在攀比、外部评价体系中，欲望将无止尽，欲望满足会无聊，不满足会痛苦，即使欲望得到满足，也是从一个监狱走进另一个更大的监狱。
Less is More 这句话是我的座右铭，它从另一个角度定义了什么是「多」。
观影 看了玩命快递 2（Transporter 2），看这部电影有两个原因，主演是杰森·斯坦森，编剧是吕克·贝松。评价是动作不错，剧情一般，整体更像是一部视觉娱乐片。
健身 本月力量训练 22 次。
勇敢的心 29 号下午打了几个小时麻将，晚上小酌几杯后意犹未尽，第二场和朋友去了 Pluto，勇敢的人喝「勇敢的心」，聊到凌晨两点才回家。
相比打麻将，我更喜欢打羽毛球和玩牌。
MBTI 认真做了下 MBTI 测试，结果是 INTJ-A。
GPT 对 INTJ-A 人格的解释 🧠 INTJ-A 是什么人格类型？ INTJ-A 是 MBTI 性格类型之一，全称为：
Introverted（内倾）
NIntuitive（直觉）
Thinking（思维）
Judging（判断）
Assertive（自信型）
这类人格又被称为 “建筑师型（Architect）”，是最稀有的人格之一，尤其在男性中更为罕见。
🧩 四个主维度的含义 缩写 含义 特征描述 I 内倾（Introverted） 喜欢独处、深度思考，独立自主，不爱社交喧闹。 N 直觉（Intuitive） 注重概念、趋势与未来，思维跳跃有创造力。 T 思维（Thinking） 决策靠理性分析，不被情绪左右。 J 判断（Judging） 喜欢计划与结构，目标明确，偏好秩序感。 🔎 A（Assertive 自信型）是什么？ 与 T（Turbulent 动荡型） 相对，INTJ-A 更加：</description>
    </item>
    
    <item>
      <title>2025 年 5 月 Digest</title>
      <link>https://wu.run/posts/2025-05-digest/</link>
      <pubDate>Fri, 30 May 2025 13:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/2025-05-digest/</guid>
      <description>浦康公园 皮皮最近不太开心，周末带皮皮去最喜欢的浦康公园玩。每遇到柴犬，皮皮基本都会龇牙咧嘴、发出低沉的呼声，天生和柴犬玩不到一起。
西岸梦中心 带皮皮去了西岸梦中心，又是一个小狗聚集地。在 PATA 店内，皮皮遇到了很喜欢的柯基妹妹，其主人觉得两只柯基很般配，甚至想它俩生一窝，不过我没接话，后来有点后悔没留联系方式，说不定真能让皮皮成为狗爹。
徐汇滨江绿地 月末周五晚上，带皮皮来这里玩耍。
观影 看了「谍影重重5」，总体评价是可以看，但别有太多的期待。延续手持摄影（Handheld Camera）风格，如果你受不了晃动镜头，那就别看了。
健身 本月力量训练 20 次，另打了 1 次羽毛球和 1 次爬坡。
体重 75 KG，没有很严格控制饮食，腰腹体脂有增加，着手把空腹爬坡纳入训练计划中。
去 Change Pro 健身，来回路上需要一个小时。为了节省时间，在公司附近的健身房也办了卡，工作日去公司附近的健身房，周末去 Change Pro。</description>
    </item>
    
    <item>
      <title>2025 年 4 月 Digest</title>
      <link>https://wu.run/posts/2025-04-digest/</link>
      <pubDate>Sat, 26 Apr 2025 23:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/2025-04-digest/</guid>
      <description>短途旅行 清明三天去桐庐游玩，这里就不细谈旅途中的种种了。我一向把每次出行都当作是唯一一次到访那个目的地，因此过程好坏与否并不重要，重要的是那段独一无二的经历。具体游记参看 清明桐庐行。
播客 听了孟岩的 与自由的距离 这期播客，他提到一句话让我印象很深：附着在自己身上的东西越少，你就会越自由。我一直在思考如何更自由，最近有了一个新体会：不在乎，在乎的东西越少，就越自由，这与孟岩的观点有一定的相似性。
孟岩除了讨论自由的感受，还引用韩炳哲的「倦怠社会」，讨论了现代社会如何通过商品化和信息过载限制个体的自由；​分析在复杂的社会情境中做出选择的困难，以及个人在面对外部环境时的应对方式；通过 Patagonia 的例子，探讨了公司使命与个人使命的关系，并引用亚里士多德的观点，实现潜能、影响他人，是通往幸福的关键。最后孟岩鼓励听众在追求自由的过程中，反思自身的身份和标签，寻找内在的平衡与满足。
这期播客内容丰富，思考深入，推荐一听。
阅读 看了「纳瓦尔宝典」，这本书汇集了 Naval Ravikant 多年来在社交媒体、播客、访谈等场合公开分享的见解。内容分为两部分：How to Get Rich 和 How to Be Happy。
我的收获是：在财富方面，关键在于如何打造杠杆，实现复利；在幸福方面，核心是如何获得内心平和，而非依赖外物。
「纳瓦尔宝典」并不是一本需要线性阅读的书，更像是一部智慧手册，内容上没有很强的上下文关联，随手翻到一页就可以直接阅读。它不提供具体的操作方法，而是帮助读者建立思维方式、价值观和人生观，适合反复翻阅。
健身 本月力量训练 17 次，打羽毛球 1 次。
每次固定器械锻炼中束，右边肩膀都会针刺般疼痛，可能是肱骨前移造成的，平时刻意练习缓解动作，最近一次中束训练，肩膀疼痛降低了很多，后面还需要再观察下。
告知 ChatGPT 当前身体状态，帮我生成了干净增肌的饮食计划。
饮食计划详情 🏋️‍♂️ 训练日饮食计划（约 2500~2700 kcal，蛋白质 150g+） 🍽️ 早餐 馒头 1 个 水煮鸡蛋 2 个 蛋白粉 2 勺（40g） 香蕉 1 根 无糖豆浆 或 低脂牛奶 250ml ✅ 提供蛋白质、碳水和脂肪，启动新陈代谢
🍽️ 午餐 米饭 1 碗（约 150g） 主荤：鸡胸 / 牛肉 / 鱼 100~150g 配菜：青菜 + 豆腐 / 木耳 少油、少盐 ✅ 稳定血糖，提供能量和蛋白质</description>
    </item>
    
    <item>
      <title>清明桐庐行</title>
      <link>https://wu.run/posts/qingming-tonglu-trip/</link>
      <pubDate>Sun, 06 Apr 2025 23:30:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/qingming-tonglu-trip/</guid>
      <description>适逢清明，想着来一趟短途旅行。刚好两个同事和他们的朋友们计划自驾去桐庐，便顺势同行，一行七人，外加皮皮。
第一天 早上八点半集合出发，三百公里不到的路程，不堵车的情况下四个小时就能到达，但清明这样的小长假，路上堵车是必然的，下午三点四十到达大奇山。
大奇山不是很高，爬山的人却很多。没走几步经过一片竹林，有不少竹笋冒出，可惜立有禁止挖笋的警示牌。
此山还有飞瀑、亭台、铁索桥、天池等景色，虽不惊艳，但也值得一看。
正常情况下大奇山三十分钟就可以爬完，由于人多，攀登缓慢，我们爬到天池后，便歇脚合影，并没有登顶。
第二天 计划早上九点从民宿出发，预计行程约一个半小时抵达马岭古道的石舍村。但其实是九点半出发，加上堵车，下午一点才进入石舍村。在村里找了一家饭馆吃饭，饭后玩水、钓鱼。
本次马岭古道徒步起点选在石舍村，终点选在茆坪村，全程约两点五公里。栈道不是很宽，对向来人时略拥挤。不乏有小狗跟着主人一起徒步，皮皮体力不错，全程闷头赶路，不曾看一眼栈道两侧风景。
徒步结束后去吃饭，饭后回民宿玩剧本杀。
第三天 早上起床后，皮皮在院子里玩耍，大家都很喜欢它，皮皮开心地乱窜。
吃完早饭后，大家一起到民宿后山挖竹笋。
随后在民宿老板推荐下，前往分水镇上街头，在河边赏景、钓鱼、遛狗。
朋友捕捉下了皮皮怡然自得的一刻。
一些感受 除了路上堵车让人有些闹心，整体出游体验还是很不错的。倒不是因为风景有多美，更多是因为能抽出时间走走看看，心情自然也就舒畅了起来。</description>
    </item>
    
    <item>
      <title>2025 年 3 月 Digest</title>
      <link>https://wu.run/posts/2025-03-digest/</link>
      <pubDate>Mon, 31 Mar 2025 23:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/2025-03-digest/</guid>
      <description>每天忙忙碌碌，却总觉得虚度光阴。为了将来能清晰回顾每个月的点滴，决定以 Monthly Digest 的形式记录当月的经历与感悟。
踏春 三月一号，气温回暖，下午带着皮皮去它最喜欢的浦康公园。皮皮对一只名叫安安的美卡情有独钟，全程跟在安安身边玩耍，安安的主人对皮皮如此喜欢安安也表示惊讶。 同时也遇到一只和皮皮很像的柯基，它们在一起玩了一会。
健身 本月力量训练 22 次，打羽毛球 3 次。
体重恢复增长，从 72 KG 增长到 74 KG。期间做了 InBody 体测，体脂率是 15.8%，由于测试前吃的很饱，体重偏大，实际体脂率应当更低些。
在有人辅助情况下，开始尝试卧推 60 KG，不过行程质量一般，所以还是尽量做好 50 KG 和 55 KG 的卧推。
哑铃侧平举肩部会疼，干脆使用固定器械推肩锻炼肩前束。
目前相对练的最好部位是手臂和肩部。
阅读 正经阅读为 0，网文看了些，正在看「长安的荔枝」。</description>
    </item>
    
    <item>
      <title>2024 年终总结</title>
      <link>https://wu.run/posts/2024-year-in-review/</link>
      <pubDate>Fri, 17 Jan 2025 22:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/2024-year-in-review/</guid>
      <description>2025 年已到来，按照惯例总结 2024 这一年。
生活 皮皮 皮皮越来越成熟了。一方面，咬鞋子、撕纸和乱啃东西的行为明显减少，另一方面，体态上也更加成年化，性格上还是像个长不大的孩子。
这一年皮皮有一些新的变化。每次出门前，需要带它出去转一圈后并喂点零食，我才能安然出门，否则它就会堵在门口不让我出去。每次回家后，它依然会很兴奋地扑向我，不同的是，短暂的欢迎仪式结束后，它会跳起来扑向它的零食架，示意我给它零食奖励，如果不给零食，它会把热情的欢迎仪式再来一遍，直到给它零食后，它会心满意足去狗窝里品尝美味，这是皮皮每天最开心的时刻。
车 在 11 月份换了车，新车目前开了 1000 公里，总体令人满意，特别是在高速上开启 EAP，基本上不需要自己开，让人轻松不少。现在焕新 Y 可以预订了，粗略看了下更新的内容，感觉有些平庸，没有让人眼前一亮的升级，所以一点不后悔买焕新 3。如果你想了解更多换车细节，可以看这里。
健康 健身 7 月初到 9 月底，居家健身，使用的器械有哑铃、哑铃凳、杠铃和瑜伽垫，平均每周健身 3 次，主要锻炼的部位有胸肩背腹，练后补充蛋白粉，效果显著，增重 6 斤。
11 月份，申驰的龙之梦 Change Pro 开业，就和健身搭子一起去 Change Pro 健身，距离住处 10 公里，开车路上来回需要 1 小时，平均下来每周去 2~3 次。会员费每年 500 块钱，加上每月 60 块钱月卡，上海顶级健身房一年一共 1220 块钱，相当值得。不过停车费每小时 12 块钱，稍微拉低了性价比。
一般都是工作日下班后或者周末去健身，人虽然多，但基本上也不用等器械。
体检 在 2025 年 1 月 11 号，做了体检，各项指标都比较健康，除了低血压这一项，这是第一次在体检中发现低血压，正常值是 60 ~ 100，体检结果是 54，咨询了医生，说是问题不大。
工作 2022 年 1 月 14 日入职，至今已满 3 年。 工作项目没有发生变化，除了业务需求外，花了不少时间做安全相关的事项，这里就不展开了。一整年的 Contributions calendar 如下图。</description>
    </item>
    
    <item>
      <title>换车</title>
      <link>https://wu.run/posts/get-a-new-car/</link>
      <pubDate>Sun, 08 Dec 2024 13:20:25 +0800</pubDate>
      
      <guid>https://wu.run/posts/get-a-new-car/</guid>
      <description>写这篇文章的时候，已提车半个月了。
换车缘由 换车的想法一直存在，过去未能想清楚这件事。什么时候换？换油车还是换电车？具体换哪一款？诸如此类的问题，经过几番纠结，始终没有得到满意的答案。甚至在此期间坚定认为油车更适合我，因为我有较强的续航焦虑感。
试驾 Model Y 对于年轻人来说，如果能接受电车且不讨厌特斯拉品牌，那么特斯拉的邪恶大鼠标 Model Y 是个绕不开的车型。
9 月 17 号，预约了大鼠标的线下试驾。网上车评人对它的评价是：老咕噜棒子。确实，新款 Model Y 即将上市，现在选择现款 Model Y 确实不是一个好时机。但是在 5 年免息和各地置换补贴的加持下，对于预算有限的人来说，它确实是个不错的选择。
整个试驾大约 30 分钟，操控相当不错，转向精准且驾驶体验丝滑，但转向半径较大是个缺点。
试驾结束后，和销售聊了一会，他也很推荐我买大鼠标，认为 Model 3 虽然是新款，但是空间小。虽然大部分时间是一个人开车，但中国人仍然对车的空间有执念，担心哪天不够用。
本次轻度试驾总结一下，大鼠标是个好车，但我有续航焦虑，并且它还是个老款车，新款 2025 年就上市，所以暂不考虑。
选择 Model 3+ 虽然不考虑大鼠标，但是换车的心思还是持续的。看来看去，决定试驾小鼠标 Model 3。
网上的评测，现款 Model Y 的定位是家庭用车，空间大，可以露营睡觉。Model 3 是焕新刚一年，适合常年 1~2 人用车，有着更棒的驾驶体验，但是后排空间相对局促。最大的不同点，小鼠标是屏幕挂档和按键转向灯，在很多人看来这是反人类的设计。实际操作下来，我还是能适应，没有觉得难以接受。
10 月 14 号晚上试驾了标续版焕新 3，整个试驾大约一个多小时，和大鼠标相比，小鼠标更丝滑，驾驶体验更好，有人车合一的感觉。试驾结束后，当即交了订金，预订了长续航版本 Model 3。相比较标准续航版本，长续航版本主要多了适时四驱、音响和续航，这些不同点我是愿意为之买单的。
提车 提车日在 11 月 22 号，提车及自行上牌均在当天完成。
体验 目前开了接近 300 公里，电门基本没有延迟，加速、超车很丝滑，相比油车驾驶体验好很多，更多的体验感受有待发现。</description>
    </item>
    
    <item>
      <title>崇明岛一日游</title>
      <link>https://wu.run/posts/one-day-tour-of-chongming-island/</link>
      <pubDate>Sun, 13 Oct 2024 22:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/one-day-tour-of-chongming-island/</guid>
      <description>来上海已经两年半多了，但一直未曾去过崇明岛，这次临时决定和皮皮一起去看看。没有做太多攻略，景点选择了东滩湿地公园和丁坝，前者可以带皮皮进入，后者可以看海和抓螃蟹。出发前还计划摘橘子，但可惜上岛后没找到合适的果园。
从住处出发，途经中环和沪陕高速。进入崇明岛后，看到一大片金黄色的稻田，竖着一块牌子写着是农科院的实验田，于是停车，走进田埂驻足观望了许久。
继续出发，抵达东滩湿地公园。进园需买票，平日票价为 50 元，周末为 80 元。园内游人稀少，我随机挑了一条路向前走，放眼望去尽是各种树木，路边伴有细窄的河流。
走到一片大草地时，看到边上有一个小湖泊，湖边的芦苇随风摇摆，风景优美，便停下来歇脚。
拍下皮皮悠然自得的样子，它也很享受这一时刻。
接近傍晚时分，离开公园的路上，竟然看到扬子鳄浮出水面，在河里游动。原来公园内有扬子鳄的保护区。多彩的小花、摇曳的芦苇和残败的荷叶构成了秋日的盛景。
开车前往丁坝，大坝边上有卖抓螃蟹工具的摊位，如绑着肉的木棍、长夹子、小桶等。我买了长夹子和小桶，本想着能用夹子夹到螃蟹，但实际操作下来发现大部分螃蟹太精明了，还没夹到就迅速钻进洞里了。于是我改用钓的方法，大约钓到了十几个。玩到天黑，临走前把所有的螃蟹都放生了。</description>
    </item>
    
    <item>
      <title>夜游徐汇滨江绿地</title>
      <link>https://wu.run/posts/night-tour-of-xuhui-riverside-greenland/</link>
      <pubDate>Sat, 06 Jul 2024 11:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/night-tour-of-xuhui-riverside-greenland/</guid>
      <description>白天太热，晚上带皮皮到徐汇滨江绿地玩。</description>
    </item>
    
    <item>
      <title>2023 年终总结</title>
      <link>https://wu.run/posts/2023-year-in-review/</link>
      <pubDate>Fri, 15 Mar 2024 23:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/2023-year-in-review/</guid>
      <description>一如既往，迟来的年终总结，这次比以往更迟些。
这一次，按照不同的事物，平铺直叙记录这一年。
英语 在同事的推荐下，和她的外教上一对一口语课，费用方面也是极具性价比，一小时 150 块钱。这位外教在中国工作多年，妻子是中国人，现在在英国工作，兼职教授口语课，他的汉语口头禅是：“没有钱”。
我上课的时间是周日下午 3 点，对应英国的早上 7 点，后来知道他基本是每周七天连轴转，全职工作、兼职工作，还要做网站，没错，他甚至会做网站。他坦言自己几乎没有休息时间。因为个人生活和健康无法维持这样高强度的工作状态，最终他不得不结束我们的课程，我和另外的两个同事都深感遗憾，因为他教的很好也很认真。他同时推荐了其他外教，不过我们都没有接受。
每次上课前，都会让我选一个话题，他会提前准备材料，课上围绕这个话题展开。聊到英国，他就会抱怨英国政府不作为，年轻人懒惰不求上进，工作不努力，社会一片糟糕。聊到社交媒体，他不理解人们为什么会花大量时间刷 TikTok，认为短视频毫无意义。在交流中，我们的观点确实会发生一些碰撞。
虽是口语课，我自己感觉口语上的进步不明显，倒是听的方面有感知上的提升。
车 2022 年 10 月份报名驾校学车，不过当时就去学了一次。突然有一天，意识到在上海我需要一辆车了。在 2023 年 7 月份和 8 月份，每周末顶着大太阳去学车，一个多月的时间，顺利拿到驾照。然后直接买车，一气呵成。拿到车不到一个月的时间，在国庆假期上高速往返安徽，当然新手期此行为极不提倡。
由于周一到周五工作日上下班不需要开车，只有周末出去玩才开车，平均下来两周用一次车，车子平时放在公司地库，一个月停车费 600 块钱，这样算下来好像打车更省钱。
皮皮 皮皮的体型趋向稳定，比其他的柯基瘦一些，现在大概是 23 斤。精力充沛，每次回来都会很兴奋的扑向我，不知疲倦。有时候觉得它过于活泼，比如晚上跑酷、瞎叫唤，让我头疼。但转念一想，它之所以能如此精力旺盛是因为年轻，等到中年后，它的体力不再能支撑如此活泼时，我想我会更加想念它现在的样子。
健康 11 月份在爱康国宾做了公司年度体检，各项指标正常，除了「颈椎生理曲度变直」这一项，显而易见，这和我不正确的坐姿有很大关系，后面会多加注意，不过一时半会改正也比较难。
ChatGPT 过去一年里，大语言模型始终是一个备受热议的话题。各种各样的大模型层出不穷，让人眼花缭乱。工作中基本上每天都在使用 ChatGPT。探索新的或者不熟悉的领域时，它能帮助我快速解决问题。尽管它的回答可能不完全正确，但它能迅速接近正确答案。显而易见它比传统的搜索引擎更好用。
理财 我在 2023 年 6 月 7 日建仓了比特币，当时价格约为 2.63 万刀。现在看来，那实际上是一个很好的买入点。但可惜的是，我没有抓住机会，当价格升至 3.8 万刀时，我将所有的比特币卖出了。为什么说可惜呢？因为更早时候，我曾购买过 7000 刀的比特币和 140 刀的以太坊，赚不到自己认知以外的钱，我很快就卖掉了它们。因此，一切都没有改变。而现在比特币再次突破新高，这意味着无论在何时购买比特币，都会赚到钱。
一些感悟 身处垃圾时间，离谱的事越来越多，降低期望，顺势而为，让自己少些焦虑和内耗。</description>
    </item>
    
    <item>
      <title>踏春之浦康休闲公园</title>
      <link>https://wu.run/posts/spring-outing-in-the-pukang-park/</link>
      <pubDate>Sun, 10 Mar 2024 19:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/spring-outing-in-the-pukang-park/</guid>
      <description>去年十月中旬第一次带皮皮去浦康公园，说是公园，其实是开放式的大片草地，是溜娃、遛狗、露营的好去处。
下午两点出头和皮皮到达公园，由于气温还是低了些，伴风，微冷，大约下午三点四十分左右离开这里结束了 2024 年首次踏春之行。</description>
    </item>
    
    <item>
      <title>香港澳门行</title>
      <link>https://wu.run/posts/hong-kong-and-macau-tour/</link>
      <pubDate>Fri, 16 Feb 2024 18:00:59 +0800</pubDate>
      
      <guid>https://wu.run/posts/hong-kong-and-macau-tour/</guid>
      <description>年前休假，去了香港和澳门。
香港 第一天 飞抵深圳宝安机场后，从福田口岸坐高铁到香港西九龙。
到达九龙后，在便利店买香港的流量卡，然后打车去往红磡的嘉里酒店，4 公里的路程，花了 50 多港币，老爷子加老爷车，速度可一点都不慢。
酒店在维港边上，离星光大道不远。
傍晚搭乘地铁去旺角，从旺角走到油麻地，一路南下走到维港星光大道已是夜晚九十点钟。
最后沿着星光大道走回酒店。
第二天 在酒店附近的黄埔花园总站乘坐双层公交巴士去往尖沙咀码头。
在尖沙咀码头乘坐天星小轮去往中环。
上岸后，附近就是香港地标建筑摩天轮，排队接近 1 小时，一次坐三圈。
随后前往太平山缆车处，乘坐缆车抵达太平山顶。
很遗憾，天公不作美，本就是阴天，山上大雾，没多久就下起了大雨，山顶俯瞰港岛夜景计划泡汤。
山顶有奈雪，喝了一杯。
下山后，在中环乘坐地铁到油麻地，晚饭在興記煲仔飯吃的，这家店名气很大，本地人和外地人在门口排队等候，可我觉得味道一般。
第三天 在尖沙咀码头乘坐天星小轮去往湾仔，下船后随便走走，走到华嫂冰室吃了午饭。吃完饭找到去往坚尼地城的叮叮车，票价统一 3 港币。中途下了车，没有抵达坚尼地城。乘坐地铁返回酒店取行李，酒店楼下就是红磡码头，直接乘坐轮船到北角。
到达港澳码头，乘船到澳门氹仔客运码头。
澳门 抵达酒店后，直奔威尼斯人。
第四天 去往澳门半岛，顺便去了新葡京，中午时分抵达大三巴牌坊。
下午去了永利酒店，看了传说中 20 亿打造的纯金发财树，给了我一点点的震撼。傍晚乘坐永利的发财车去往永利皇宫，观看音乐喷泉，这个喷泉还是值得一睹。
来都来了，继续和骰宝斗智斗勇，最终结果是不输不赢。
第五天 睡到晌午，乘船到深圳蛇口，晚上打道回府飞回去。
一些感受 支付 香港大部分场合支持微信支付，但并不是所有的店都很乐意接受国内的移动支付方式，另外人民币流通程度不及港币。可以兑换一点港币更方便些，因为酒店可能需要现金押金，的士可能只收现金。
出行 香港和澳门打车都比较贵，香港的士起步价 27 港币。在香港，使用 Google Map 更靠谱。在澳门，高德地图还凑合。
饮食 由于对粤菜无感，在香港吃了小肥羊、麦当劳、興記煲仔飯和华嫂冰室，在澳门吃了麦当劳和海王冰室。怎么说呢，下次去还吃可乐鸡腿大薯条。
Farewell 东方之珠巅峰已过，维多利亚港的浪花已渐渐褪色，唯有记忆更加珍贵。</description>
    </item>
    
    <item>
      <title>读「投资第一课」有感</title>
      <link>https://wu.run/posts/youzhiyouxing-investment-course/</link>
      <pubDate>Sat, 10 Jun 2023 10:01:49 +0800</pubDate>
      
      <guid>https://wu.run/posts/youzhiyouxing-investment-course/</guid>
      <description>最近看了有知有行的「投资第一课」 有感。
题外话 有知有行是一家成立于 2020 年的公司，创始人是孟岩。如果没有听说过有知有行，你可能听过财帮子、且慢，它们也是孟岩创办的。
毕业后第一份正式工作是在知乎，那时候还不知道孟岩。有次孟岩来公司做分享，主题是如何投资理财，我就去听了分享。当时孟岩还在做且慢，且慢和知乎同在 768 园区，之后偶尔能在园区里碰到孟岩，这一晃四年过去了。
孟岩也是「投资第一课」的作者之一，如果你想了解孟岩这个人，不妨听听他的「无人知晓」播客，在苹果 Podcasts 和小宇宙都能搜到。
读后感 虽然距离孟岩那次线下分享已过去很久，看完「投资第一课」后能感受到他的投资理念没有发生太大的变化，推崇价值投资。以下列举其中一些观点和认知。
钱从哪里来 我们都想获取更多的钱，因为钱可以买来我们想要的产品和服务。钱是人类财富狭义的具象代表，那么钱或者说人类财富为什么会增长？
答案是：自然资源 + 劳动 + 技术
投资什么 从 19 世纪开始人类财富急剧增长，其中有一股重要力量：公司，也是我们投资的重要对象。当我们买公司股票时候，其实就是「买」公司所有权一部分。
作者介绍了最近两百年（1802 - 2002），相比较于股票、国债、黄金等，股票的长期收益是最大的，当然这里没有把比特币纳入比较范围。这也是支撑我们为什么要买股票的一个重要原因。
买什么 既然要买股票，那我们应该买什么公司的股票？这个问题没法给出具体答案，基本上大多数股票在不同的时间节点都有人买入和卖出。那我们还是想得到选择买哪些公司股票的参考依据。
结论是：公司股价 = 内在价值 x 估值
内在价值是客观的，估值受人们对公司的预期和情绪影响，比如每当大公司财报发布后，公司股价可能有个比较大的波动，一方面是财报向外披露了重要的公司财务信息，另一方面，人们根据公司财务信息，会去判断和预测这家公司未来一段时间里的走向。所以会看到财报发布后，公司正在盈利，甚至利润率相较于之前周期更大，但是毫不影响股价下跌，这里很可能是受不及市场预期影响。
长期来看，一家公司的股价是由内在价值决定的，同时受人们的预期和情绪影响。回到买什么公司股票这个问题上，显而易见，应该买优质公司的股票，行业龙头企业的股票。
选择优质公司对于普通人来说是有难度的，这里作者推荐「指数基金」，除了可以分散分险之外，还可以捕获到能带来长期回报的好公司。
什么时候买 再优质的公司，股价不可能每时每刻都在增长，好公司不等于好股票，问题来了，那什么时候买？不同流派给出不同的答案，价值投资流派认为，当市场价格低于内在价值，并有足够的安全边际（尽可能的便宜），就是买入的时候。
什么时候卖 同样的，当公司的股价逼近或者甚至超出内在价值时，就是卖出的时候。
最后 投资的魅力在于，你永远不知道是什么样的人在市场中赚钱和亏钱，而每个人都想成为赚钱的人。
「投资第一课」阐述了投资的基本原理和实操建议，上述只是其中的一部分，如果你也感兴趣，也不妨通读一下，相信会有一些收获的。</description>
    </item>
    
    <item>
      <title>皮皮玩球</title>
      <link>https://wu.run/posts/pippi-playing-ball/</link>
      <pubDate>Sun, 28 May 2023 19:28:20 +0800</pubDate>
      
      <guid>https://wu.run/posts/pippi-playing-ball/</guid>
      <description>下午和皮皮出来玩球，皮皮开心到模糊。</description>
    </item>
    
    <item>
      <title>Chrome 插件推荐</title>
      <link>https://wu.run/posts/chrome-plugins-recommendation/</link>
      <pubDate>Sat, 27 May 2023 18:34:22 +0800</pubDate>
      
      <guid>https://wu.run/posts/chrome-plugins-recommendation/</guid>
      <description>推荐一些自用的 Chrome 插件。
Adblock: 屏蔽广告
JSON Formatter: 格式化接口的 JSON 数据
Language Reactor: 看油管视频，实时自动生成翻译，划词翻译
OpenAI Translator: 通过 ChatGPT 划词翻译、润色、生产摘要、分析和解释代码。需要配置 OpenAI 的 API Key 才能使用
Performance-Analyser: 网页性能分析
Saladict: 沙拉划词翻译
Tampermonkey: 油猴脚本
Vimium: 像使用 Vim 一样使用 Chrome，无需使用鼠标
Authy: 两次验证</description>
    </item>
    
    <item>
      <title>Go 并发之道：并发介绍</title>
      <link>https://wu.run/posts/chapter-1-of-concurrency-in-go/</link>
      <pubDate>Sat, 15 Apr 2023 23:07:15 +0000</pubDate>
      
      <guid>https://wu.run/posts/chapter-1-of-concurrency-in-go/</guid>
      <description>本文是 Concurrency in Go 这本书的第一章「并发介绍」的阅读笔记。
为什么并发编程难 并发编程难不需要太多的解释。有时候需要很长时间或者较大的并发量，才能发现并发问题。幸运的是，这些问题是有共性的，我们讨论它们是如何产生的、产生的原因和如何解决它们。
竞争条件 如果两个或者多个操作必须按照正确的顺序执行，然而程序并没有保证这个顺序，就会发生竞争条件（Race Conditions），导致意想不到的 Bug。 大多数情况下，会出现在所谓的数据竞争（data race）中，当一个并发操作尝试读取变量，而在某个不确定的时间另一个并发操作尝试写入这个变量。下面是个例子：
func main() { var data int go func() { data++ }() if data == 0 { fmt.Printf(&amp;#34;the value is %d&amp;#34;, data) } } 上面代码有三处地方试图访问 data 变量：data++、if data == 0 判断、打印 data。data++ 操作在一个协程里，导致程序执行的顺序是不确定的，有三种可能的结果：
不打印任何东西。data++ 在 if data == 0 之前执行 打印 &amp;ldquo;the value is 0&amp;rdquo;。if data == 0 和打印 data 都在 data++ 之前执行 打印 &amp;ldquo;the value is 1&amp;rdquo;。if data == 0 在 data++ 之前执行，但 data++ 在打印 data 之前执行 大多数情况下，引入数据竞争的原因是我们使用顺序性思维来思考问题。如上面的代码，会习惯性假设协程中的 data++ 会在 if 语句之前执行。</description>
    </item>
    
    <item>
      <title>The Night Agent</title>
      <link>https://wu.run/posts/the-night-agent/</link>
      <pubDate>Sat, 15 Apr 2023 20:14:45 +0000</pubDate>
      
      <guid>https://wu.run/posts/the-night-agent/</guid>
      <description>The Night Agent 是奈飞三月份的新剧，中文名是暗夜情报员，一共十集。
由地铁爆炸开头，讲述一个工作是随时待命在一个很少会响的电话（It ralely rings）边上的 FBI 探员，一次电话响起，他很快卷入一场政治阴谋的故事。
整体上剧情比较紧凑，前不久我花了一天看完，该剧值得一看，推荐一下。</description>
    </item>
    
    <item>
      <title>我是如何使用 ChatGPT 的</title>
      <link>https://wu.run/posts/how-do-i-use-chatgpt/</link>
      <pubDate>Fri, 14 Apr 2023 23:09:23 +0000</pubDate>
      
      <guid>https://wu.run/posts/how-do-i-use-chatgpt/</guid>
      <description>我使用 ChatGPT 的场景比较单一，绝大部分时候使用搜索引擎。
偶尔会用它帮我 review 一段不涉及敏感的代码，如在 Cursor 里选中需要 review 的代码块，给出 review 的结果。
另外，通过 Vercel 部署了 ChatGPT Next Web，方便自己使用。</description>
    </item>
    
    <item>
      <title>2022 年终总结</title>
      <link>https://wu.run/posts/2022-year-in-review/</link>
      <pubDate>Mon, 06 Feb 2023 21:40:06 +0000</pubDate>
      
      <guid>https://wu.run/posts/2022-year-in-review/</guid>
      <description>前言 迟来的年终总结。本来不打算写 2022 年终总结，因为 2022 年是乏味甚至不想回忆的一年，没什么可值得写的。但最近几天看了一些别人的年终总结，有些感触，虽然有很多记忆已经变得模糊，还是希望能坐下来，记录过去一年发生的事儿和自己的一些思考。
生活 1 月 1 日离开北京，来到上海，开启新的生活。1 月 3 日，在即将入职的公司附近找到了合适的房子搬了进去，实现了走路上下班。1 月 14 日入职现在的公司，开始新的工作。
过完年没多久，上海疫情爆发，3 月 14 日开始远程办公，一直持续到 6 月 13 日。在这段时间里，经历了听上去很离谱但确实发生的事，如物资匮乏、以物易物。还听闻有朋友和同事，期间每日泡面度过。因为住在徐汇，社区物资发的还算频繁，加上在各大平台抢到的物资和公司空投的物资，算是饿不着肚子。不过零食和可乐类的紧俏物资还是很难买得到。
4 月份，考虑是否养只柯基。一来是经过一段时间的封锁，生活实在是枯燥。二来在北京的时候，室友养的柯基给我带来了很多的快乐。最后下定决心，在闲鱼上「随缘」找到了合适的小柯基，4月 30 日那天下午，装在箱子里的小柯基通过顺丰同城小送到小区门口，门口的防疫人员对着箱子一顿猛喷消毒水（他们以为是物资）。就这样我终于有了属于自己的小狗，名为「皮皮」（北京室友的柯基名为「波波」）。
6 月中旬，随着防疫政策的变化，可以回到公司办公。进公司还是需要 72 小时核酸阴性证明，持续很长时间每周需要做两到三次核酸。
12 月中旬，租住一年的房子快要到期，希望继续能走路上下班，并且考虑到皮皮，需要租住一楼的房子，这样既可以让皮皮在屋子里跑动不扰民，又可以避免抱皮皮上下楼。最后搬到同小区隔壁的一栋楼里。
随着防疫政策放开，搬进新房子没两天，就感染上了 COVID-19，直接症状是：发烧四五天，浑身酸痛和咽喉疼痛大约十天左右。好在年轻，都扛了过去。
工作 年初加入一家游戏公司，工作内容是偏互联网的。有时候会比较忙，整体上我对现在的工作是满意的。
博客 过去一年里，基本没有写博客，想一想直接原因大概是有点逃避写东西，根本原因是没有什么有效输入，那输出自然就少了。
还是一如既往的喜欢去发现别人的博客，了解其他人的文字记录，是个很有趣的过程。随着中文互联网越来越封闭，能发现一个质量上乘的博客真的会让人兴奋，不得又感慨在外网博客数量和质量都明显高于中文互联网一大截。
最近有在尝试听小宇宙，也会寻找其中有意思的播客，听见不一样的生活方式和人生见解。
最后，我想说能坚持写博客和做播客的人们，很特立独行，也很酷。
值得说的事 这一年发生了不少值得说的事。如疫情、「润」学、裁员、ChatGPT。
疫情 疫情三年，每个人的感受是不一样的。放开有一段时间了，再回头看，仿佛一切都没有发生，媒体没有记忆，人们也没有记忆。苦难不值得回忆，也不在这里赘述，各自感受就好。
「润」学 在 2022 年推特中文圈里，随处可见大家在聊「润」学。它就像一根稻草，仿佛「润」出去就可以脱胎换骨、重获新生。但是现实是残酷的，无论是语言、技能还是亲情羁绊，让大部分人对这根稻草可望不可及。每个人对「润」这件事有自己的看法，「润」与不「润」，没有对错，只有合不合适自己。
裁员 国内裁员消息不断，后来北美大厂裁员消息也是甚嚣尘上，包括 Microsoft、Google、Meta 等等。作为一个亲身经历过裁员的打工人，只能说寒冬凛冽。如果大厂足额赔偿，被裁相对来说还算好。而对于那些给不了足额赔偿的小厂打工人来说，被裁真的很难。
这两天在小宇宙听了一期 你在 meta 被裁了，我在 bytedance 裸辞了，我们决定不回大厂上班了！ 播客，讲述的是被裁后，不再打工开始做数字游民的故事，不妨听一听。
ChatGPT 年末一个重磅消息，OpenAI 公司发布 ChatGPT。以前也有很多聊天机器人，然而 ChatGPT 和它们不一样，因为它真的不像是机器人。刚发布就在推特上引爆讨论，有的人用它做代码 Code Review，有的人用它写剧本，还有的人在它的协助下通过写脚本用 Excel 完成复杂的数据分析和数据可视化。真正的人工智能离我们很远，这是大多数人的看法，随着 ChatGPT 的火爆，我们不得不重新审视这一观点。最近 Google、Quora 和百度，都相继推出自家类似的产品，可以都体验下。</description>
    </item>
    
    <item>
      <title>在 Ubuntu 上搭建 MinIO</title>
      <link>https://wu.run/posts/install-minio-on-ubuntu/</link>
      <pubDate>Tue, 20 Sep 2022 22:08:09 +0000</pubDate>
      
      <guid>https://wu.run/posts/install-minio-on-ubuntu/</guid>
      <description>MinIO 是一个比较常用的对象存储服务（OSS），本文主要简单的介绍下在 Ubuntu 上搭建 MinIO 服务，并提供公网访问。
运行 MinIO 支持多种运行方式，这里选择通过 Docker 运行
mkdir -p ~/minio/data docker run -d -p 9000:9000 -p 9001:9001 --restart=always --name minio -v ~/minio/data:/data -e &amp;#34;MINIO_ROOT_USER=xxx&amp;#34; -e &amp;#34;MINIO_ROOT_PASSWORD=123456&amp;#34; quay.io/minio/minio server /data --console-address &amp;#34;:9001&amp;#34; ~/minio/data 是 MinIO 实际存放文件的位置，9001 是 Console 的端口，9000 是 API Server 的端口。 Console 如果不指定端口，每次运行会随机使用一个端口，不方便我们用 Nginx 代理。
代理 在机器上，使用 Nginx 代理 MinIO，增加如下配置
# MinIO Subdomain Configuration (minio.wu.run) server { listen 443 ssl; server_name minio.wu.run; ssl_certificate /etc/letsencrypt/live/wu.run/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/wu.</description>
    </item>
    
    <item>
      <title>2021 年终总结</title>
      <link>https://wu.run/posts/2021-summary/</link>
      <pubDate>Fri, 31 Dec 2021 15:29:12 +0000</pubDate>
      
      <guid>https://wu.run/posts/2021-summary/</guid>
      <description>前言 终于开始写 2021 年终总结了，本想看下大家的年终总结，就顺手搜了下：
发现 GitHub 上有个仓库专门收集大家的 2021 年终总结，点进去后发现我的这篇总结文章被收录在其中，而我这篇总结文章是 2021 年年末创建的，内容却一直没有开始动手写，实属拖延症有点厉害。
关于工作 在十一月份前，工作上没有太大的变化，早上从永泰庄地铁站出发，到达团结湖地铁站，办公点在三里屯SOHO，中午和伙伴们一起吃饭遛弯，下午经常下来买喝的，还算安稳。在十月，因公司的调整，需要出来找新的工作机会。因为自身的一些原因的考量，同时投递了北京和上海的工作机会，经过面试、权衡后，最终选择了一家在上海的二次元游戏公司，这是一个艰难的决定。
关于生活 生活上没有发生太大的变化，但由于新的工作地在上海，所以我要离开北京了。
2018 年三月第一次来北京，然后面试，加入知乎，开始了北漂之旅。时间过的很快，经历了三家公司，接近 4 年的时间就这么过去了。我知道自己会离开北京，但从来没有想到会这么快，这么突然。2022 年 1 月 1 日，行李寄往上海，随即当天坐车离开北京。
也离开了室友养的柯基，在过去接近两年的时间里，它给我带来很多的欢乐。
关于阅读 一年里，除了面试期间，看了不少的书，其他时候并没有连续阅读，这点是需要加强的，期待在新的一年里有所突破。
关于写作 在 2021 年，在博客里写了 10+ 篇文章。我并没有给自己制定要写多少篇的目标，纯粹是有时间、有精力加上愿意写，我才会去写。看到一个说法，当你打算去做一件事时，先搞清楚动机,「自己想做」或「为了向他人证明」或「大家都这样做」。然后只做「自己想做」的事，你会快乐很多。 所以我期待未来更加坚持做自己想做的事，当然不仅仅是写文章这件事。
由于博客的域名是二月底更换的，所以 GA 上没有前两个月数据，总体来看，平均每个月大概有 6000+ 个用户访问我的博客。我对这个数字不是特别在意，写博客文章最大的意义对于我来说是思考和记录，然后能帮助他人就更好了，哪怕是一点点的帮助。
一些思考 在当下，我认为批判性思维（Critical thinking）是尤为重要的。互联网的发展和普及，给信息传播带来巨大的效率提升。但是同时，信息割裂、信息孤岛现象越来越明显。特别是越来越精准的推荐算法之下，人们更多看到的是人们愿意看到的，是算法在喂人们。
看透事实本质，首先需要了解事情真相，然后才能有观点。但很多时候，我们看到的不是真的事实，或者看不到事实的全部面貌，甚至有时候我们「被喂」的只有观点，这是可怕的。所以，在 2021 年，我更加有意识的多方面了解事实与真相，通过国内外的信息源，作为旁观者，审视、思考他人观点，这是一个比较有意思的过程。
一些时刻 7 月 11 日 奥森
4 月 10 日 玉渊潭
9 月 21 日 浦东机场
10 月 31 日 恭王府
总结 一年里发生了很多事，有好有坏。每一年都有新变化，不变的是岁月流逝。期望在新的一年里，用更好的心态迎接每一次变化。</description>
    </item>
    
    <item>
      <title>Golang 不可寻址的理解</title>
      <link>https://wu.run/posts/not-addressable-in-golang/</link>
      <pubDate>Fri, 12 Nov 2021 19:41:34 +0000</pubDate>
      
      <guid>https://wu.run/posts/not-addressable-in-golang/</guid>
      <description>如果没有听过 Golang 的不可寻址（not addressable）相关概念，没有关系，从字面上看，就是无法获取值的地址。先举个简单的例子：
package main import &amp;#34;fmt&amp;#34; func main() { m := map[int]string{0: &amp;#34;hello&amp;#34;} fmt.Printf(&amp;#34;%p&amp;#34;, &amp;amp;m[0]) } m 是 map[int]string 类型，只包含一个键值对，打印这个键值对的值的地址，直接编译错误：cannot take the address of m[0]，无法获取 map 中值的地址。这是个比较常见的不可寻址的例子。原因也比较简单，map 类型是通过哈希表实现的，随着 map 元素的增多，可能触发扩容，那么 map 的值的位置发生改变，即其地址会发生变化，所以无法对 map 的值寻址。另一方面，如果元素不存在于map 中，返回零值，而零值是不可变对象，是不能寻址的（golang 中不可变对象是不可寻址的，如常量）。
再看个稍微复杂的例子，在Golang wiki 的 MethodSets 有这样一句话：
The concrete value stored in an interface is not addressable, in the same way that a map element is not addressable.
意思具体值赋值给 interface 类型后与 map 中的元素一样是不可寻址的。先不去理解这句话，先看个例子：
package main const NewName = &amp;#34;run.</description>
    </item>
    
    <item>
      <title>Golang 的 defer 关键字使用注意事项</title>
      <link>https://wu.run/posts/defer-keyword-in-golang/</link>
      <pubDate>Wed, 10 Nov 2021 00:37:46 +0000</pubDate>
      
      <guid>https://wu.run/posts/defer-keyword-in-golang/</guid>
      <description>Golang 提供了 defer 关键字，用于函数退出前执行收尾工作，基本的使用方法就不再赘述了。总结了一些可能踩坑的地方。
defer 执行顺序 package main import &amp;#34;fmt&amp;#34; func TestFunc() { defer func() { fmt.Println(&amp;#34;A&amp;#34;) }() defer func() { fmt.Println(&amp;#34;B&amp;#34;) }() defer func() { fmt.Println(&amp;#34;C&amp;#34;) }() } func main() { TestFunc() } 执行结果是：
C B A 即 defer 执行先后顺序与代码顺序是相反的，是后进先出的顺序。
defer 与 return 执行顺序 package main import &amp;#34;fmt&amp;#34; func deferFunc() int { fmt.Println(&amp;#34;defer func running&amp;#34;) return 0 } func returnFunc() int { fmt.Println(&amp;#34;return func running&amp;#34;) return 0 } func TestFunc() int { defer deferFunc() return returnFunc() } func main() { TestFunc() } 执行结果是：</description>
    </item>
    
    <item>
      <title>恭王府</title>
      <link>https://wu.run/posts/gongwangfu/</link>
      <pubDate>Sun, 31 Oct 2021 14:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/gongwangfu/</guid>
      <description>和室友一起去恭王府和后海，这也是离开北京前记录一下这里秋天的样子。</description>
    </item>
    
    <item>
      <title>强制删除 k8s terminating 状态命名空间</title>
      <link>https://wu.run/posts/force-delete-k8s-terminating-namespace/</link>
      <pubDate>Sun, 10 Oct 2021 18:34:06 +0000</pubDate>
      
      <guid>https://wu.run/posts/force-delete-k8s-terminating-namespace/</guid>
      <description>当删除一个命名空间时，未完全删除时中断了删除操作，这时命名空间处于 terminating 状态。一种解决方式是，再次删除，命令后加上 --force 选项，如：
kubectl delete ns &amp;lt;terminating-namespace&amp;gt; --force 但往往还是不行，这时需要使用接口删除这个命名空间。
首先，将 terminating 状态的命名空间信息导出到 json 文件：
kubectl get ns &amp;lt;terminating-namespace&amp;gt; -o json &amp;gt; temp.json 这时当前目录下会有一个 tmp.json 的文件，编辑该文件，将 finalizers 的值置空（置为空数组）。
其次，打开 proxy：
kubectl proxy 打开一个新的命令行终端，在 temp.json 文件所在位置调下面的接口：
curl -k -H &amp;#34;Content-Type: application/json&amp;#34; -X PUT --data-binary @temp.json http://127.0.0.1:8001/api/v1/namespaces/&amp;lt;terminating-namespace&amp;gt;/finalize 其中 &amp;lt;terminating-namespace&amp;gt; 改为需要删除的 terminating 状态的命名空间的名字。
最后验证下：
kubectl get ns 不会再有这个 terminating 状态的命名空间了。</description>
    </item>
    
    <item>
      <title>PromQL 计算 CPU 使用率</title>
      <link>https://wu.run/posts/promql-calculate-cpu-utilization/</link>
      <pubDate>Wed, 11 Aug 2021 11:50:20 +0000</pubDate>
      
      <guid>https://wu.run/posts/promql-calculate-cpu-utilization/</guid>
      <description>本文主要介绍如何使用 PromQL 计算 CPU 的使用（利用）率。
CPU 模式 在介绍之前，先了解下 CPU 的模式有哪些。在 Linux 机器上，使用 top 命令：
~# top top - 12:13:21 up 93 days, 14:10, 1 user, load average: 0.00, 0.02, 0.00 Tasks: 132 total, 1 running, 131 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.0 us, 0.3 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 可以看到 CPU 一共有八种模式（状态），后面跟的数值是该模式的使用率，模式分别是：
us: user 模式 sy: system 模式 ni: nice 模式 id: idle 模式 wa: iowait 模式 hi: hardware interrupt 模式 si: software interrupt 模式 st: steal 模式 其中，user、system 和 idle 是 CPU 主要的模式。</description>
    </item>
    
    <item>
      <title>PromQL 如何计算变化（率）</title>
      <link>https://wu.run/posts/how-exactly-does-promql-calculate-rates/</link>
      <pubDate>Mon, 09 Aug 2021 19:45:43 +0000</pubDate>
      
      <guid>https://wu.run/posts/how-exactly-does-promql-calculate-rates/</guid>
      <description>Counter（计数器） 是 Prometheus 四种指标类型（metric type）之一，该指标特点是值会一直增加，代表积累的数量。应对诸如此类的问题：一共有多少请求处理过？花了多长时间处理请求？对于 Counter，由于是单调递增的积累量，直接使用是没有太大的意义，我们更关心 Counter 指标在一段时间内的变化量，或者是变化率。
PromQL 有三个常见的函数和变化（率）相关，分别是：increase()、rate()、irate()。
increase increase(v range-vector)，参数 v 是一个区间向量。该函数计算的结果是该区间的增长量。如：
increase(node_cpu_seconds_total{instance=&amp;#34;172.22.21.143:9100&amp;#34;, cpu=&amp;#34;0&amp;#34;, mode=&amp;#34;idle&amp;#34;}[2m]) 上述查询表示，主机 172.22.21.143 的第 0 个 CPU 在过去 2 分钟时间里，idle 状态所占时长为 81.05s。
需要注意的是，像 http_requests_total 这样的 Counter 指标，返回的是 http 请求总数量，该值一定是一个大于等于 0 的整数。但是使用 increase 函数后，返回一段时间的增量值，该值可能不是整数，而是一个小数，原因是如果查询区间的时间与采样时间不重合，没有办法拿到准确的值。Prometheus 的策略会根据范围内的样本点的值进行线性估算，该方法学名是线性外插（Linear Exrapolation），就可能会产生小数。该策略不仅用于 increase 函数，还用于 delta 和 rate 函数。
rate rate(v range-vector)，可以直接计算区间向量在时间窗口内平均变化率。对于快速变化的 Counter，如果使用 rate，因为其计算的是平均变化率，很容易把峰值削平。除非我们把时间间隔设置的足够小，才能够减弱这种效应。
irate irate(v range-vector)，同样用于计算区间向量的变化率，但是其表示的是瞬时增长率。会取最后两个样本值计算瞬时变化率。所以相比较 rate 具有更高的灵敏度。
参考 Prometheus Extrapolation 原理解析 </description>
    </item>
    
    <item>
      <title>Trickster 使用</title>
      <link>https://wu.run/posts/speed-up-tsdb-by-trickster/</link>
      <pubDate>Thu, 22 Jul 2021 11:29:21 +0000</pubDate>
      
      <guid>https://wu.run/posts/speed-up-tsdb-by-trickster/</guid>
      <description>介绍 Trickster 是 comcast 开源的 HTTP 反向代理缓存，能够加快 TSDB（时间序列数据库，如 Prometheus）查询速度。
目的 在 k8s 集群里使用 Trickster 代理 Prometheus，验证 Trickster 能够加快 Grafana 查询的速度。
注：集群中已部署 Prometheus 和 Grafana
安装 根据官方文档，Trickster 提供以下安装方式：
Docker k8s Helm 源码安装 本次通过 Helm 安装，安装步骤见这里。
通过 Helm 安装 添加 Trickster Helm repo：
helm repo add tricksterproxy https://helm.tricksterproxy.io 查看是否添加成功：
# helm search repo tricksterproxy NAME CHART VERSION	APP VERSION	DESCRIPTION tricksterproxy/trickster	1.5.4 1.1 Trickster is an HTTP Reverse Proxy Cache and ti.</description>
    </item>
    
    <item>
      <title>奥森的向日葵</title>
      <link>https://wu.run/posts/olympic-park-sunflower/</link>
      <pubDate>Sun, 11 Jul 2021 18:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/olympic-park-sunflower/</guid>
      <description>住在奥森附近，听说那儿的向日葵开的挺好，下午和朋友们一起去看看。</description>
    </item>
    
    <item>
      <title>Go Modules - checksum mismatch 错误解决</title>
      <link>https://wu.run/posts/checksum-mismatch-error/</link>
      <pubDate>Sun, 16 May 2021 16:54:14 +0000</pubDate>
      
      <guid>https://wu.run/posts/checksum-mismatch-error/</guid>
      <description>问题描述 本地执行了 go clean -modcache 后，执行 go mod download，出现错误：
verifying git.xxx.com/neirong/app-framework@v0.7.8/go.mod: checksum mismatch downloaded: h1:/8A+C1sjRPdK/06I7b2egOVjo8+ECKV3vJ3Cqz5vEzc= go.sum: h1:7HfHuMOcinPkTDMNEf6Otcy4+TBvDQ/+f2UO0N23l3o= SECURITY ERROR 一般遇到 checksum mismatch 错误，直接删除 go.sum 后，执行 go clean -modcache，再执行 go mod download 即可。我也确实这么做的，执行后，不再报错。当我把新的 go.sum 文件提交到 GitLab，跑 lint 时出现同样的错误：
verifying git.xxx.com/neirong/app-framework@v0.7.8/go.mod: checksum mismatch downloaded: h1:/8A+C1sjRPdK/06I7b2egOVjo8+ECKV3vJ3Cqz5vEzc= go.sum: h1:7HfHuMOcinPkTDMNEf6Otcy4+TBvDQ/+f2UO0N23l3o= SECURITY ERROR 即 app-framework@v0.7.8/go.mod 下载后计算得到的 hash（老的）与新生成 go.sum 里的 hash（新的）不一致。
解决过程 判断 GitLab 跑 lint 时是否有模块缓存，结论：GitLab 跑 lint 是新起的容器，没有缓存
因为 go env 的 proxy 设置了公司的 proxy 地址，且 app-framework@v0.</description>
    </item>
    
    <item>
      <title>CDN 使用初探</title>
      <link>https://wu.run/posts/what-is-a-cdn/</link>
      <pubDate>Sun, 09 May 2021 16:15:33 +0000</pubDate>
      
      <guid>https://wu.run/posts/what-is-a-cdn/</guid>
      <description>CDN 是什么 CDN（Content Delivery Network），即内容分发网络，是指一组在地理上分散的服务器，它们协同工作以提供互联网内容的快速交付。
CDN 可以快速加载互联网内容，包括 HTML 页面、javascript 文件、CSS 文件、图像和视频等。
使用 CDN 的原因 缩短网站加载时间 - 通过使用附近的 CDN 服务器，将内容分发到网站访问者附近，访问者将能体验到更快的页面加载时间。由于访问者更倾向于离开加载缓慢的网站，CDN 可以降低跳出率并增加访问者在该网站上停留的时间。换句话说，网站速度越快，意味着更强的用户粘性。
减少带宽成本 - 网站托管的带宽成本是网站的主要费用。通过缓存和其他优化，CDN 能够减少源站必须提供的数据量，从而降低网站所有者的托管成本。
增加内容可用性和冗余 - 大流量或硬件故障可能会扰乱正常的网站功能。由于 CDN 具有分布式特性，因此与许多源站相比，CDN 可以更好地处理更多流量并对硬件故障容灾。
改善网站安全性 - CDN 可以通过提供 DDoS 防护、安全证书的改进以及其他优化措施来提高网站的安全性。
具体使用 wu.run 是静态网站，一开始是托管在 GitHub 上，网站里的图片是放在免费的图床上。但是免费的图床不稳定，很容易就不能访问。后来，网站托管在阿里云轻量服务器上，网站的图片也是放在上面，但是服务器的带宽有限，图片较大时，访问体验较差。所以就想使用 CDN 加速图片访问速度。
云服务厂商基本都支持 CDN 服务，这里我选择了七牛云，因为七牛云提供每月 10G 免费流量。使用国内 CDN 服务的前提条件是需要有一个已备案的域名。不同云服务厂商 CDN 服务配置流程基本相同。
添加 CDN 域名 如七牛云添加 CDN 域名，包含三部分：域名配置、源站配置、缓存配置。
域名配置，填写需要加速的域名，这里我是使用二级域名：cdn.wu.run 作为 CDN 加速域名。你也可以使用类似 static.example.com 域名，这样的域名一看就知道大概率是 CDN 域名。
源站配置，所谓的源站，就是 CDN 缓存不存在或者 CDN 缓存失效时，从哪个地方拉取这些文件。这里我使用的七牛云的对象存储作为源站，即图片都存储在对象存储中，CDN 缓存不存在或者 CDN 缓存失效时，从这个对象存储中拉取。当然，源站可以不仅是七牛云对象存储，还可以是源站域名、IP 地址，以及高级设置中设置主备路线。</description>
    </item>
    
    <item>
      <title>k8s 介绍</title>
      <link>https://wu.run/posts/an-introduction-to-k8s/</link>
      <pubDate>Tue, 20 Apr 2021 22:53:40 +0000</pubDate>
      
      <guid>https://wu.run/posts/an-introduction-to-k8s/</guid>
      <description>本文是翻译，原文：An introduction to Kubernetes
这篇博客将介绍 Kubernetes（k8s），以便你了解其背后的动机、它是什么以及如何使用它。在后续的文章中，我将讨论在数据科学类型应用程序中使用 k8s 更加具体的例子。而本文的重点是首先帮助你建立对基本概念的理解。
需要注意的是，我将假设你熟悉容器技术，如 Docker。如果你没有构建、运行容器镜像的经历，我建议你先看这里再读这篇文章。
k8s 是什么 k8s 通常被描述为一个容器编排（container orchestration） 平台。为了理解这个含义，让我们重新审视容器的作用，这有助于知道容器有哪些不足，以及 k8s 如何弥补这些不足。
为什么我们喜欢使用容器？ 容器提供了一个轻量级的机制来隔离应用程序的环境。对于一个给定的应用程序，我们可以指定其配置和所需要安装的依赖，而不用担心其与同一台物理机上其他的应用程序发生冲突。我们将每个应用程序封装在 容器镜像（container image） 中，容器镜像可以可靠地运行在任何机器（只要机器有能力运行容器镜像）上，能够提供可移植的能力，即支持应用开发到部署的平滑过渡。此外，因为每个应用是独立的，不用担心环境冲突，所以在同一台物理机上可以部署多个容器，实现更高的资源（内存和 CPU）利用率，最终降低成本。
使用容器，会有哪些不足？ 比如，你的容器挂掉了会发生什么？或者更糟糕，容器发生错误，又或者机器运行容器失败会发生什么？要知道，容器是没有 容错（fault tolerance） 的能力。或者你有多个容器需要通信，如何在容器之间建立通信网络？当你启动、终止单个容器时，这种情况会发生什么变化？容器网络很容易变成一团混乱。最后，假设你的生产环境有多个机器，你将如何抉择使用哪个机器运行你的容器？
k8s 作为容器编排平台。 使用 k8s，我们可以解决很多上面提到的问题。
管弦乐队的指挥掌握着音乐表演的效果，并与音乐家们沟通，以协调他们各自的乐器，从而达到表演的总体效果。作为一个系统的架构师，你的工作只是编写音乐（指定要运行的容器），然后将控制权交给管弦乐队的指挥（容器编排平台）从而来实现这一目标。
k8s 管理着每个容器的全生命周期，如根据需要启动或停止容器。如果一个容器意外关闭，k8s 将会运行另一个容器快速代替它。
除此之外，k8s 提供一种机制，可以让应用程序相互通信，即使在底层单个容器正在被创建或正在被销毁的时候。
最后，给定要运行的一组容器和集群上的一组机器，k8s 检查每个容器并调度应用程序到最佳机器上。要了解为什么这是很有价值的，请观看 Kelsey Hightower（17:47-20:55）使用俄罗斯方块示例游戏解释自动化部署和容器编排之间的区别。
设计原则 现在我们大体上了解了 k8s 是什么，让我们花点时间讨论下 k8s 背后设计原则动机。它有助于让我们理解这些原则，以便你可以按预期使用该工具。
声明式 也许 k8s 最重要的设计原则就是，我们只需要简单地定义系统期望的状态（desired state） ，让 k8s 自动化工作，以确保 实际的状态（actual state） 与我们期望的状态一致。这使你免于承担大多数损坏时修理它们的责任。你只需要声明理想状态下系统应该是什么样子即可。当系统真实的状态与期望的状态不一致时，k8s 自动代替你处理这些问题。这使得我们的系统能够 自我修复（self-healing） 对问题做出反应，而无需人工干预。
系统的状态（state）是由一组 对象（objects） 定义的。每个 k8s 对象都有一个清单（specification），包含你期望的状态和当前实际的状态。k8s 维护所有对象的清单列表，并不断轮询每个对象，以确保其状态与清单相同。如果一个对象没有响应，k8s 将会使用新版本的代替它。如果某个对象偏离了清单，k8s 将发出必要的命令使对象回到期望的状态。</description>
    </item>
    
    <item>
      <title>再探 798</title>
      <link>https://wu.run/posts/798-art-dist/</link>
      <pubDate>Sun, 04 Apr 2021 20:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/798-art-dist/</guid>
      <description>这是第二次来 798，途径望京的熊猫雕塑地标，过来感受下「艺术」。</description>
    </item>
    
    <item>
      <title>解决 gin 路由冲突问题</title>
      <link>https://wu.run/posts/solve-gin-router-path-conflict/</link>
      <pubDate>Fri, 19 Mar 2021 10:19:45 +0000</pubDate>
      
      <guid>https://wu.run/posts/solve-gin-router-path-conflict/</guid>
      <description>使用 gin 框架时，如果有两个这样的路由：
GET /users/:id GET /users/info gin 会报错：
panic: &amp;#39;info&amp;#39; in new path &amp;#39;/users/info&amp;#39; conflicts with existing wildcard &amp;#39;:id&amp;#39; in existing prefix &amp;#39;/users/:id&amp;#39; 原因是这两个路由拥有一致的 HTTP 方法（指 GET/POST/PUT/DELETE 等）和请求路径前缀，且在相同的路由位置上，第一个路由是 wildcard（指 :id 这种形式）参数，第二个路由是普通字符串 info，那么就会发生路由冲突。 发生冲突该如何解决？
router.GET(&amp;#34;/users/:id&amp;#34;, func(ctx *gin.Context) { switch c.Param(&amp;#34;id&amp;#34;) { case &amp;#34;info&amp;#34;: handlers.getUserInfo(ctx) default: handlers.GetUser(ctx) } }) 思路是 :id 这个通配结果如果是 info，则拦截下来，走 /users/info 对应的 handler 逻辑；:id 通配结果非 info，则走 /users/:id 对应的 handler 逻辑。虽然不太好看，但能解决问题。
稍微复杂的路由冲突可能是这样的：
GET /:channelID/:programID GET /redirect/:channelID/:programID :channelID 与 redirect 冲突，并且两个路由的层级是不一样的，第一个有两级，第二个有三级，如何解决？</description>
    </item>
    
    <item>
      <title>wu.run 域名正式使用</title>
      <link>https://wu.run/posts/get-wu-run-domain/</link>
      <pubDate>Sat, 20 Feb 2021 11:04:52 +0000</pubDate>
      
      <guid>https://wu.run/posts/get-wu-run-domain/</guid>
      <description>很早的时候，博客没有独立的域名，托管在 GitHub 上，使用 rundouble.github.io 这个域名。后来想注册 wurun.com 和 wurun.me 这两个域名，然而都被人捷足先登注册了。
在 2016-09-06 退而求其次的注册了 iamwr.com 域名，iamwr 是 i am wurun 的缩写，一直用到现在。这个域名虽然是 .com 后缀，但是 iamwr 并不能很好的被记忆。后来发现有 .run 这个顶级域名后缀，搜索 wu.run 这个域名还没有被注册。于是在 2021-02-02 注册了这个域名。
选择 wu.run 这个域名的原因是显而易见的，这个域名正好是我的名字的全拼，与 ele.me(饿了么官网) 这个域名有异曲同工之妙。
不出意外的话，wu.run 这个域名将会伴随我很长时间。</description>
    </item>
    
    <item>
      <title>GoLand 使用指南</title>
      <link>https://wu.run/posts/goland-usage/</link>
      <pubDate>Mon, 01 Feb 2021 16:11:50 +0000</pubDate>
      
      <guid>https://wu.run/posts/goland-usage/</guid>
      <description>介绍下 GoLand 的一些使用方法。
插件使用 GoLand 允许用户自定义安装功能不同的插件。
如何安装插件 在 Preferences 中的 Plugins，可以在 Marketplace 中搜索想要安装的插件
常用插件 GitToolBox 插件 GitToolBox 插件是丰富 git 相关的功能，安装后重启 GoLand，在 Other Settings 中使用其功能
常用功能有自动定时 fetch 远端代码，配置 commit message 规则等。
Material Theme UI 插件 如果想让 GoLand 的 UI 是 Material Design，可以安装 Material Theme UI 插件。
Lint 使用 在 GoLand 中，可以自动执行 lint 检查。首先确定已安装 golangci-lint 工具，其次保证根目录下有 golangci-lint 的配置文件，该文件可以参考：.golangci.example.yml。在 Preferences 中找到 File Watchers，添加 golangci-lint
双击编辑其配置
Arguments 设置运行的参数，默认就可以。这里 -v 是 verbose 的意思，每次运行 lint 输出更详细的内容。配置好后，每次保存文件时，自动运行 lint 检查。</description>
    </item>
    
    <item>
      <title>macOS 软件推荐</title>
      <link>https://wu.run/posts/mac-software-recommendation/</link>
      <pubDate>Sat, 02 Jan 2021 23:11:09 +0000</pubDate>
      
      <guid>https://wu.run/posts/mac-software-recommendation/</guid>
      <description>推荐一些 macOS 下自己觉得还不错的软件，不定期更新。
编程 JetBrains 家族: PyCharm、GoLand 等 IDE
VSCode: 插件丰富，很多人使用
Navicat: 数据库 GUI，专业版支持多种类型数据库
TablePlus: 数据库 GUI，我只用来看 Redis
工具 HomeBrew: 包管理工具
Iterm2: 命令行工具，配合 zsh 使用更佳
Postman: API 开发工具
Charles: 抓包神器
百度输入法: 很良心的输入法
效率 Sourcetree: git GUI 工具
文档 Skim: PDF 阅读器
Typora: markdown 的编辑、阅读器
Sublime: 插件丰富、使用方便的编辑器
笔记 Notion: 现在需要科学上网才可用
有道云笔记: 基本上每个工作日我都有使用
系统 iStat Menu: 主要用来在状态栏看硬件资源和网络使用情况</description>
    </item>
    
    <item>
      <title>2020 这一年</title>
      <link>https://wu.run/posts/2020-summary/</link>
      <pubDate>Sun, 27 Dec 2020 14:33:48 +0000</pubDate>
      
      <guid>https://wu.run/posts/2020-summary/</guid>
      <description>这篇是个人 2020 年终总结，简短地记录下这一年。
时间轴 在手机相册里，挑出这一年有代表性的照片，按照月份列了出来。
一月 和朋友小聚
放假回家的地铁
二月 过完年从平西府搬到西三旗，然后远程办公
这是新室友养的柯基
五月 去圆明园溜达一圈
中午的 768 园区
七月 遛狗
九月 苏州小聚
工作 由于疫情的影响，过完年有一段时间是远程办公，这也是第一次体验 WFH，一些不适应。
在年中的时候，自己突然地有离职的想法，并提了离职。九月入职新公司，然而很不幸，因为一些原因，我又提了离职，在十一月底入职新公司。
现在的公司规模虽然小了点，但是整体比较符合我的期望，工作内容和技术栈都发生了比较大的变化，希望在 2021 年能够有所突破和成长。
今年工作中印象最深刻的事，在第一家公司提了离职后，经理约我聊聊。聊了很多，最大的收获是自己要知道自己的个人 OKR 是怎么样的，如何去拆解好 O，是否定期回顾、检查了 KRs，离职是否是为了更好地达成目标。要弄清除自己到底想要什么，每一次重大的抉择是否是围绕目标，是否对完成目标有帮助作用。如果目标比较抽象，可以选择一个人作为榜样，这样可以具象目标。给了我比较大的启发，虽然之前知道这些道理，但并没有意识到该如何 step by step 去更靠近自己想要的目标。
生活 疫情对生活有一定的影响，总体来说影响不算大。其他方面没有什么大的改变，比较常态。没有变化就是最好的消息。
总结 这是第一次尝试写年末总结(其实是流水账)，也没想好写些什么。时间过的越来越快，希望新的一年能够更好点。</description>
    </item>
    
    <item>
      <title>Python 循环列表删除元素的注意事项</title>
      <link>https://wu.run/posts/python-traversal-delete-needing-attention/</link>
      <pubDate>Wed, 11 Nov 2020 21:31:30 +0000</pubDate>
      
      <guid>https://wu.run/posts/python-traversal-delete-needing-attention/</guid>
      <description>示例一 运行以下 Python 代码，结果是什么？
data = [1, 2, 3, 4, 5] for i in data: data.remove(i) print(data) 如果你的答案是 [2, 4]，那就不用往下看了。
结果说明 当循环第一次删除元素 1 后，后面的元素后往前移动，这时 data = [2, 3, 4, 5]
此时，指针会指向新 data 中第二个元素，即 3，执行 remove，后面的元素后往前移动，这时 data = [2, 4, 5]
这时，指针会指向新 data 中第三个元素，即 5，执行 remove，这时 data = [2, 4]，且 5 为新 data 中最后一个元素，遍历结束
示例二 比如，按照一定要求将列表中元素筛选出来。
data = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for i in data: if i &amp;gt; 5: pass else: data.</description>
    </item>
    
    <item>
      <title>Mac 下的定时任务工具：Launchctl</title>
      <link>https://wu.run/posts/mac-launchctl-guidance/</link>
      <pubDate>Wed, 27 Mar 2019 23:58:54 +0000</pubDate>
      
      <guid>https://wu.run/posts/mac-launchctl-guidance/</guid>
      <description>Launchctl 的介绍 Launchctl 是 Mac 系统自带的定时任务工具，与 crontab 功能类似。
Launchctl 的使用 以简单的例子展示如何使用 Launchctl，比如现有一个位于 /Users/rundouble/Desktop 目录的 run.sh 脚本，脚本内容如下：
#!/bin/sh echo `date` 并执行 chmod a+x run.sh 获取执行权限。
期望每 30 秒钟以定时任务运行上面的脚本。
首先，切换到管理员权限：
sudo su 进入 /Library/LaunchDaemons 目录下：
cd /Library/LaunchDaemons 创建 com.iamwr.launchctl.demo.agent.plist 定时任务描述文件：
vim com.iamwr.launchctl.demo.agent.plist 输入以下内容：
&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt; &amp;lt;!DOCTYPE plist PUBLIC &amp;#34;-//Apple//DTD PLIST 1.0//EN&amp;#34; &amp;#34;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;#34;&amp;gt; &amp;lt;plist version=&amp;#34;1.0&amp;#34;&amp;gt; &amp;lt;dict&amp;gt; &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt; &amp;lt;string&amp;gt;com.iamwr.launchctl.demo.agent&amp;lt;/string&amp;gt; &amp;lt;key&amp;gt;Program&amp;lt;/key&amp;gt; &amp;lt;string&amp;gt;/Users/rundouble/Desktop/run.sh&amp;lt;/string&amp;gt; &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt; &amp;lt;array&amp;gt; &amp;lt;string&amp;gt;/Users/rundouble/Desktop/run.sh&amp;lt;/string&amp;gt; &amp;lt;/array&amp;gt; &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt; &amp;lt;true/&amp;gt; &amp;lt;key&amp;gt;StartInterval&amp;lt;/key&amp;gt; &amp;lt;integer&amp;gt;30&amp;lt;/integer&amp;gt; &amp;lt;key&amp;gt;StandardOutPath&amp;lt;/key&amp;gt; &amp;lt;string&amp;gt;/Users/rundouble/Desktop/run.log&amp;lt;/string&amp;gt; &amp;lt;key&amp;gt;StandardErrorPath&amp;lt;/key&amp;gt; &amp;lt;string&amp;gt;/Users/rundouble/Desktop/run.</description>
    </item>
    
    <item>
      <title>Linux 服务器搭建 VNC 可视化桌面</title>
      <link>https://wu.run/posts/linux-vnc/</link>
      <pubDate>Tue, 29 Jan 2019 14:36:00 +0000</pubDate>
      
      <guid>https://wu.run/posts/linux-vnc/</guid>
      <description>背景 大多数情况下，我们只需要远程连接到 Linux 服务器通过命令进行操作。但有时候，我们需要在远程可视化这些机器上的操作，则需要使用 VNC 搭建桌面，以 Ubuntu 16.04 LTS 为例。
步骤 检查更新：
apt-get upgrade 安装 VNC，安装过程中需要输入 Y 确认：
apt-get install vnc4server 启动 VNC，并设置远程连接桌面的密码：
vncserver gnome 桌面的安装和配置：
sudo apt-get install x-window-system-core 安装登录管理器：
sudo apt-get install gdm 安装 Ubuntu 桌面：
sudo apt-get install ubuntu-desktop 安装 gnome 配套软件：
sudo apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal 修改 VNC 配置文件：
vim ~/.vnc/xstartup 修改为：
#!/bin/sh # Uncomment the following two lines for normal desktop: export XKL_XMODMAP_DISABLE=1 unset SESSION_MANAGER # exec /etc/X11/xinit/xinitrc unset DBUS_SESSION_BUS_ADDRESS gnome-panel &amp;amp; gnome-settings-daemon &amp;amp; metacity &amp;amp; nautilus &amp;amp; gnome-terminal &amp;amp; 杀死原桌面进程：</description>
    </item>
    
    <item>
      <title>Jenkins 个别 job 页面打开超时的解决方法</title>
      <link>https://wu.run/posts/jenkins-504-error/</link>
      <pubDate>Fri, 28 Dec 2018 16:19:15 +0000</pubDate>
      
      <guid>https://wu.run/posts/jenkins-504-error/</guid>
      <description>背景 最近公司移动端使用的的持续集成系统 Jenkins 打开某些 job 页面 报出 504 超时错误。
而 Jenkins 其他页面都是正常的，可以快速访问，为了临时解决这个超时问题，只是重启了 Jenkins 服务，重启后，该 job 页面可以正常访问。过了几天，又发现了另一个 job 页面打开也是 504 超时，而其他的 Jenkins 页面也都是正常的。
解决步骤 登上 Jenkins 所在的机器，查看了 Jenkins 的日志，并没有发现错误异常。
查看 Nginx 的日志，发现：upstream timed out (110: Connection timed out) while reading response header from upstream。
修改 Jenkins 服务的 Nginx 配置，添加了 proxy_read_timeout 180s; 和 proxy_send_timeout 180s; 设置了后端服务响应请求和传回数据的时间为 3 分钟。
重新加载 Nginx 配置：nginx -s reload
再次打开 504 的页面，原来请求时长一分钟后请求不到数据直接报错，这个时候并没有报错，而是一直等待请求响应，在将近两分钟的时候，页面成功访问。
虽然打开了原本 504 的页面，但并没有解决实质性问题。为了彻底解决这个问题，重新审视前后两个出现 504 错误的 job，发现构建的总次数都接近 2W+，猜测可能构建的次数较多导致的。但是，查看了其他的 job，也有总构建次数达到 2W+ 的，但打开页面并没有出现 504。</description>
    </item>
    
    <item>
      <title>遇见 Aamir Khan</title>
      <link>https://wu.run/posts/meeting-aamir-khan-for-the-first-time/</link>
      <pubDate>Tue, 25 Dec 2018 22:30:55 +0000</pubDate>
      
      <guid>https://wu.run/posts/meeting-aamir-khan-for-the-first-time/</guid>
      <description>在四季酒店参加阿米尔·汗「逆着海浪游泳」主题的分享，活动最后与他合影。</description>
    </item>
    
    <item>
      <title>Hexo 从 GitHub 到阿里云</title>
      <link>https://wu.run/posts/hexo-from-github-2-aliyun/</link>
      <pubDate>Thu, 20 Dec 2018 23:53:48 +0000</pubDate>
      
      <guid>https://wu.run/posts/hexo-from-github-2-aliyun/</guid>
      <description>全文已在知乎发布：Hexo 从 GitHub 到阿里云
背景 RunDouble&amp;rsquo;s Blog 从建站以来静态页面都是同时托管在 GitHub Pages 和 Coding Pages 上，_config.yml 的 deploy 块如下：
# Deployment ## Docs: https://hexo.io/docs/deployment.html deploy: type: git repo: github: git@github.com:RunDouble/rundouble.github.io.git,master coding: git@git.coding.net:RunDouble/RunDouble.git,master 国内访问解析到 Coding Pages 上，境外访问解析到 GitHub Pages 上：
网站图床选择的是七牛云，免费的，但下半年收到七牛云的邮件，被告知图床链接的域名是测试域名，需要被收回，说白了就是原来的图床链接都失效了，除非绑定已备案的自定义域名进行访问。
但是，我的网站域名并没有备案，即无法提供给七牛云替换图床的域名，其次，即使是备案了，也不一定继续使用七牛云。面对这样的问题，也为了以后不再因为图床的事而折腾，索性就把网站域名备案，并购买了阿里云轻量应用服务器。
购买空间 在阿里云上购买了轻量应用服务器，Ubuntu 16.04 LTS 系统、1 个核心、2G 内存、每月 1000G 流量、限峰值带宽 5 Mbps 的配置，基本能满足个人网站的需求。阿里云的 ESC 实例也是不错的选择。因为习惯用 Ubuntu，所以选择它作为系统。
备案 在国内，备案这件事经常被人诟病，诟病的原因不是这件事不好，而是因为备案手续较多，时间较长。但是，为了以后不想再折腾，还是决定备案。在阿里云上连续购买轻量应用服务器或者 ESC 实例大于等于三个月，阿里云都支持备案。一般整备案流程个时长大概半个月，主要时间花在等待地方通信管理局审核。当然，备不备案这件事，因人而异。
环境搭建 安装 Nginx 购买阿里云服务器后，会获得该服务器的公网 IP，使用该 IP，ssh 登录到服务器上。Hexo 实质是静态网站，选择 Nginx 作为静态 Http 服务器，将服务器上的静态资源（如 HTML、图片）通过 Http 协议展现给客户端。使用命令安装 Nginx:</description>
    </item>
    
    <item>
      <title>『从未说出口的秘密』词云分析</title>
      <link>https://wu.run/posts/secret-answers-to-wordcloud/</link>
      <pubDate>Sat, 17 Nov 2018 20:54:50 +0000</pubDate>
      
      <guid>https://wu.run/posts/secret-answers-to-wordcloud/</guid>
      <description>前言 无意间发现知乎上这个问题，想知道大家都有怎样的经历和故事，所以决定爬取这个问题下所有的回答内容，通过词云展示所有回答中关键词的词频。
你有什么从未说出口的秘密可以分享？
步骤 爬取该回答下 9000+ 个回答的内容存储到文件
由于知乎的回答中包含富文本，需要用正则对存储在文件中的回答内容中的 html 标签去除
回答基本都是中文，使用 Jieba 对回答进行分词，分词的同时，需要将一些分词是停词的去除，比如使用 fwwdn/sensitive-stop-words 停词表
使用 WordCloud 生成回答内容的词云
结果 同时也爬取了另一个回答：
你有哪些秘密只能匿名说出来
总结 从两张图中不难发现所有人的秘密中，一部分是关于亲密关系，如友情，爱情、亲情，相关的词频很高，甚至可以浮想这些关系中有多少是假性亲密关系。另一部分是生活关系，如工作、师生、同学关系相关的词频也不低。最后还有一部分秘密关于是『自己』。
人们常说，要明白多少道理，才能过好这一生？其实还有，要隐藏多少秘密，才能过好这一生？</description>
    </item>
    
    <item>
      <title>768 的秋天</title>
      <link>https://wu.run/posts/768-park-scenery/</link>
      <pubDate>Fri, 09 Nov 2018 12:30:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/768-park-scenery/</guid>
      <description>午饭后在 768 园区里溜达，见风景不错便拍了几张照片。</description>
    </item>
    
    <item>
      <title>北戴河 Outing</title>
      <link>https://wu.run/posts/beidaihe-outing/</link>
      <pubDate>Fri, 07 Sep 2018 12:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/beidaihe-outing/</guid>
      <description>来知乎半年第一次 Outing，目的地是北戴河，因为是九月初，海边略微有点冷，不过玩的蛮开心的。
在知乎第二次 Outing 有事请假没有去，在第三次 Outing 前离职，所以这也是我在知乎唯一一次 Outing。</description>
    </item>
    
    <item>
      <title>飞盘记</title>
      <link>https://wu.run/posts/learning-frisbee/</link>
      <pubDate>Sun, 15 Jul 2018 22:00:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/learning-frisbee/</guid>
      <description>工作日晚上去了几次奥森，和同事们一起玩飞盘，感谢 Ta 们耐心指导。
周末在清华操场练习。</description>
    </item>
    
    <item>
      <title>三里屯夜景</title>
      <link>https://wu.run/posts/sanlitun-night-view/</link>
      <pubDate>Sat, 30 Jun 2018 19:11:00 +0800</pubDate>
      
      <guid>https://wu.run/posts/sanlitun-night-view/</guid>
      <description>两个好朋友来北京看我，途径三里屯，这也是我们三人第一次来三里屯，遂用手机拍下几张照片。</description>
    </item>
    
    <item>
      <title>爬虫图解：轮子哥关注了哪些人</title>
      <link>https://wu.run/posts/vczh-followers-analysis/</link>
      <pubDate>Mon, 09 Apr 2018 23:09:39 +0000</pubDate>
      
      <guid>https://wu.run/posts/vczh-followers-analysis/</guid>
      <description>前言 本文以知乎大V轮子哥关注的用户列表作为爬虫对象，爬取每个用户的 url_token、昵称、性别、该用户关注其他用户的数量、回答数、文章数、一句话介绍和头像的链接。并将这些数据持久化存储在数据库中，将用户头像下载到本地。最后简单使用 Python 中的 matplotlib 库将爬取的部分信息可视化。
爬虫思路 打开轮子哥知乎上关注的用户列表 ，调出 Chrome 的开发者工具（Developer Tools），重新刷新页面，选择 XHR，第一个就是我们需要的请求信息：
我们观察 请求头 Headers，得知实际该页面的数据请求 URL 为：
分析这个 URL 的字段，其中 excited-vczh 为轮子哥的 url_token，是知乎识别唯一用户的字段，followees 代表是轮子哥的关注列表，如果是 followers，代表轮子哥的粉丝列表，不难发现 URL 中间部分包含 data、answer_count、articles_count、gender、follower_count 等字段信息，而这些信息正是我们想要的。再看最后的两个字段是 offset，代表用户列表页起始数量，limit 代表每页返回用户信息的数量。
点击 Preview，可以看到格式化后响应的 JSON 数据，源数据可以在 Response 查看。
查看 JSON 数据结构:
根据字段见名知意，其中 avatar_url 就是用户头像链接，avatar_url_template 是头像的路由模板，在该链接中有个 {size} 参数，当我们点击查看网页源码发现，size 为 xll 表示头像大图，所以在程序中，我们每爬到这个链接都需要把 {size} 参数替换成 xll，这样就可以爬取用户较为清楚的头像，这个 JSON 中还有个 badge 字段，表示该用户所获得的徽章，也就是在知乎的成就，比如各个领域的高质量答主，但不是本次爬虫所关心的。每一次请求，都是 20 条用户数据：
那么问题来了，这时我们确实能够爬虫这 20 个被轮子哥关注的用户的一些数据，但是轮子哥关注的用户肯定不止 20 个，那么其他用户的数据该怎么爬？继续观察 JSON 数据：
有个 paging 字段，该字段下封装了 is_end、totals、previous、is_start、next 五个参数，分别代表：</description>
    </item>
    
    <item>
      <title>2017-06-30</title>
      <link>https://wu.run/posts/2017-06-30/</link>
      <pubDate>Fri, 30 Jun 2017 03:05:06 +0000</pubDate>
      
      <guid>https://wu.run/posts/2017-06-30/</guid>
      <description>前几天想注册 wurun.me 这个域名，发现被人注册过了，好奇看看这个域名的主人做的是什么网站，点开后是这样的：
发现这个域名是程序猿父亲给他的儿子注册的，巧的是，他的儿子也叫吴润，论程序猿的父爱。
昨晚从实验室搬了出来，也把博客系统迁移到了自己的电脑上，也算是结束了一段经历。
2017 的上半年就这样结束了，但行好事，莫问前程。</description>
    </item>
    
    <item>
      <title>GitHub&#43;Hexo 搭建个人网站详细教程</title>
      <link>https://wu.run/posts/github-and-hexo-build-a-personal-website-detailed-tutorial/</link>
      <pubDate>Wed, 17 May 2017 19:47:35 +0000</pubDate>
      
      <guid>https://wu.run/posts/github-and-hexo-build-a-personal-website-detailed-tutorial/</guid>
      <description>GitHub+Hexo 搭建个人网站详细教程 首发于知乎专栏 CS专业那些事 ，欢迎阅读</description>
    </item>
    
    <item>
      <title>特朗普税改</title>
      <link>https://wu.run/posts/trump-tax-plan/</link>
      <pubDate>Mon, 01 May 2017 19:33:40 +0000</pubDate>
      
      <guid>https://wu.run/posts/trump-tax-plan/</guid>
      <description>以下是 华尔街见闻APP 微博关于特朗普税改计划内容图：
可以看出税改计划主要集中于减少企业税率、降低个人税负、 留存海外的利润一次性征税 三个方面。从目前来看白宫想要力争在今年通过税改法案，大幅度的减税，尤其是给富人减税、加重政府财政赤字（据美国国会税务联合委员会的测算：如果实施税改计划，将公司税下调至 15%，意味着美国政府在未来 10 年内，将失去 2 万亿美元财政收入），而任何加大政府赤字的法案都会面临重重阻力，使得国会能否通过此法案还是一个巨大的未知数。
在 Trump 上台百日之际，推出税改法案，确实是大刀阔斧，想通过企业大幅度的减税来增加企业利润振兴美国实体经济和兑现大选承诺，但 Trump 又想加强基础建设，这无疑需要更多的钱去投入，一方面减少政府财政收入，另一方面增加政府的基建投入这是一对矛盾关系。
其次，新一轮税改可能带动他国的税改。人民日报也刊文表示，美国减税计划可挑起税务战
总结特朗普政府的税改计划：big changes,big unknowns.</description>
    </item>
    
    <item>
      <title>如果有一天，苹果和微信只能选一个，你会选哪一个？</title>
      <link>https://wu.run/posts/apple-or-wechat/</link>
      <pubDate>Tue, 25 Apr 2017 12:19:14 +0000</pubDate>
      
      <guid>https://wu.run/posts/apple-or-wechat/</guid>
      <description>问题来源：如何看待 iOS 版微信公众平台赞赏功能因苹果相关政策被腾讯关闭？
苹果的 iOS 是系统层，是直接对手机硬件进行操作，腾讯的 iOS 版微信是构建于系统之上的应用层，通俗的说苹果提供 API 供微信这样的应用开发者使用。作为用户，购买苹果手机已经支付了相当可观的费用，作为应用开发者，每年缴纳了 99 刀的开发者账号费用，也就是说苹果公司在手机硬件本身与软件开发方面都有大量的收入来源，这也是闭源系统应得利益。而现在， 苹果新条款 3.1.1 中指出，App 不得包含指引客户使用非 IAP（iOS 应用内付费）机制进行购买的按钮、外部链接或其他行动号召用语。最直白的解释是：老子（苹果）不满足已有的系统层的利益，老子要插手介入应用层，需要在应用层分一勺羹。
微信众多用户数量是由于微信应用本身对用户具有极大的吸引力，以及其自身优越性决定，而与微信在什么系统上是无关的。也就是说，微信公众平台的知识赞赏功能是与公众平台的信息发布者，信息阅读者，和微信是直接相关的，而与承载微信的 iOS 系统是间接相关的。通过这种系统垄断的优势，强迫应用开发者与应用使用者付出更高的代价是不合理的。
手机终端生态体系包含硬件厂商、手机厂商、运营商、开发者等组成， 手机厂商可以肆意掠夺开发者的利益，那么，是不是可以理解运营商也可以染指开发者利益？要知道，在中国运营商的垄断的地位不知道比苹果高到哪里去。最终两个大佬的互撕，受伤的是内容作者。
回到一开始的问题：如果有一天，苹果和微信只能选一个，你会选哪一个？
很多人内心的想法是：去比较、去思量能否接受被诟病（至少有人这么认为）的安卓系统。我的答案是 iPhone 不是必须的，但微信是刚需。iOS 版微信公众平台赞赏功能因苹果相关政策被关闭最本质的问题在于：除去苹果系统，也只剩下安卓一家独大，暴露的是系统垄断后带来的贪婪。这一点，苹果应该向某软学习，很多时候做人比技术更重要，对企业也是这样。</description>
    </item>
    
    <item>
      <title>About</title>
      <link>https://wu.run/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://wu.run/about/</guid>
      <description>那时我们有梦，关于文学，关于爱情，关于穿越世界的旅行。 如今我们深夜饮酒，杯子碰到一起，都是梦破碎的声音。
👋 关于我 你好，我是吴润。现居上海，18 年毕业后，一直在互联网行业打工，曾在知乎、百度、蜻蜓 FM 工作过。非典型程序员，写代码为生，也关注生活的细节与真实。
📝 关于博客 本博客是由 Hugo 强力驱动，托管在阿里云。博客是一种社交形式，社交的本质是 Capture and Share，博客内容不固定，感谢你花时间阅读。没有点赞和转发，也不关心浏览量，如果你愿意留下来多看几篇，我很欢迎，也可以订阅 RSS。
💬 联系我 如果你也写博客，或读完文章后有什么想说的，欢迎评论区交流。
你也可以通过以下方式找到我：
✉️ : rundouble2012@gmail.com 𝐈𝐧𝐬𝐭𝐚𝐠𝐫𝐚𝐦: run_double 🛠️ 博客变更记录 2017-04-24: 建站
2017-07-03：更换域名至 iamwr.com
2017-08-19：增加 LiveRe 评论功能
2018-12-20: 网站从 GitHub Pages 和 Coding Pages 迁移至阿里云
2021-02-19: 启用 wu.run 域名，重新启用 Disqus 评论功能
2021-03-26: iamwr.com 重定向至 wu.run
2023-05-09: 博客系统从 Hexo 切换为 Hugo
2025-04-09: 增加 Twikoo 评论功能</description>
    </item>
    
    <item>
      <title>Links</title>
      <link>https://wu.run/links/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://wu.run/links/</guid>
      <description>这个页面记录了一些在互联网上漫游时遇见的博客。
这些博客或许文风独特，或许内容深刻，也可能只是单纯地「喜欢」。
CodeSky 代码之空 ANQI.ROCKS 月夜Moonlight 1900 Randy&amp;rsquo;s Blog 她的蓝 Random Thoughts 涛叔 Beyond the Void 0x01 byte 卡瓦邦噶！ </description>
    </item>
    
    <item>
      <title>Memos</title>
      <link>https://wu.run/memos/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://wu.run/memos/</guid>
      <description></description>
    </item>
    
  </channel>
</rss>
