<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
  <channel>
    <title>tunan&#39;s blog</title>
    <link>https://www.tunan.fun</link>
    <description>Here is tunan! Welcome!</description>
    <follow_challenge>
      <feedId>70026857033764864</feedId>
      <userId>56967488590381056</userId>
    </follow_challenge>
    <item>
      <title>周报#25-2025年终总结</title>
      <link>https://www.tunan.fun/blog/annual-summary-2025</link>
      <description>前言 2026年马上就要来了，这也意味着2025年即将结束。这一年仿佛比2020（疫情）后的5年中的任何一年都要漫长。 这种漫长并不是浑浑噩噩度日的无聊��...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;2026年马上就要来了，这也意味着2025年即将结束。这一年仿佛比2020（疫情）后的5年中的任何一年都要漫长。&lt;/p&gt;&#xA;&lt;p&gt;这种漫长并不是浑浑噩噩度日的无聊，而是充实与成就给心理的错觉，客观不变的365天被不断拉长。尤其是现在这个年末的时候，去做今年的总结时，看到年初制定的Plan逐个被完成，成就感爆棚。&lt;/p&gt;&#xA;&lt;p&gt;记录真是一个好习惯，每当我试图去想起今年都发生了什么的事情，我的脑袋就好像是在空转一样，什么也想不起来。而当我去看这一年中记录的一个个item时，忽然有了一种“原来我还做了这件事”的神奇感觉。只不过如果没有这些记录，每一帧的过去都会模糊到难以识别。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;时间会惩罚每一个不记录生活的人。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;当我使用AI把Plans、Actions从Notion中都导出并分析总结后，才发现人在一年真的会做好多事情，想想都觉得不可思议。&lt;/p&gt;&#xA;&lt;p&gt;1年365天真的是一个看似很小的数次和量词的组合，好像转瞬即逝。但如果拆解成小时和分钟，就不会有这种错觉了，年真的是一个漫长的计量单位。&lt;/p&gt;&#xA;&lt;p&gt;即使除去每天8小时的睡眠时间，仍有5800多小时。所以实际上，能做这么多事情也是情理之中的。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;很多复杂的事情交给时间后，日复一日，往往也就变得简单了，贵在持之以恒。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;被占去时间最多的事项自然是工作，要生存，这没有办法。所以这个报告不太会涉及到工作上的内容，因为那和真实的“本我”关系不大，除非是从工作获得了某种启发、得到了某种成长亦或是收获了某个知识，我才会记录下来。&lt;/p&gt;&#xA;&lt;p&gt;接下来就总结一下这一年都发生了大事，计划内的事项都完成了什么。除了哪些较大的计划外，还有哪些事情是值得额外总结在该Report中。又有哪些年初的计划外的，但又随着年中的调整而完成的计划。&lt;/p&gt;&#xA;&lt;p&gt;接下来按照不同的领域将事情进行划分，依次展开。&lt;/p&gt;&#xA;&lt;h2 id=&#34;生活篇&#34;&gt;生活篇&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr class=&#34;header&#34;&gt;&#xA;&lt;th&gt;计划&lt;/th&gt;&#xA;&lt;th&gt;状态&lt;/th&gt;&#xA;&lt;th&gt;时间&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;结婚&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;2025年5月份&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;领证&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;2025年7月份&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;搬家&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;2025年元旦&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;北京旅游&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;2025年4月底&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;哈尔滨旅游&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;2025年春节前&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;蜜月&lt;/td&gt;&#xA;&lt;td&gt;❌&lt;/td&gt;&#xA;&lt;td&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;参加两场朋友婚礼&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;2025年国庆&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;练车&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;2025年10-11月份&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;Q1季度坚持三天早起&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;2025年第一季度&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;更新驾照&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;2025年7月份&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;人生第一本护照&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;2025年第四季度&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;结婚&#34;&gt;结婚&lt;/h3&gt;&#xA;&lt;p&gt;今年最大的变化就是和Maxine真正组成了法律意义上的家庭🏠，但从体感上和往前没什么区别。但从事件的重要程度上看，这绝对是今年一等一的大事情。为了这场婚礼，也是付出了很多时间和心血，最终完美礼成，算是完成了一件比较有标志性的人生事件吧。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.tunan.fun/blog/wedding-record&#34;&gt;【周报#13-结婚大事记】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;【&lt;code&gt;先上车再补票&lt;/code&gt;】我俩先举办了婚礼然后才在一个多月后，终于勤快了一把，顶着炎炎夏日（实际上那天下暴雨了）出门领了证。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.tunan.fun/blog/19-grateful-for-the-grace&#34;&gt;【周报#19-幸运与感恩】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;在婚礼后的两个月，和Maxine一起回东北参加回门宴，仪式上简单无比，我俩甚至不需要穿礼服。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.tunan.fun/blog/came-back-from-northeast&#34;&gt;【周报#20-从东北回来了】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;旅行&#34;&gt;旅行&lt;/h3&gt;&#xA;&lt;p&gt;今年最大的遗憾就是一直还没有机会去度蜜月…因为等到领完证去完东北回杭州后，就一点不想出去了，随后就是双十一、双十二这些购物节，Maxine没有机会请婚假。这个蜜月旅行争取在明年春天出发！&lt;/p&gt;&#xA;&lt;p&gt;春节前去了哈尔滨旅游，这还算不错的一次出行。北京的旅游没啥意思，用Maxine的话说是“更像是去见见朋友”。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.tunan.fun/blog/09-spring-festival-2025&#34;&gt;【周报#10-春节&amp;amp;哈尔滨之旅】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;练车&#34;&gt;练车&lt;/h3&gt;&#xA;&lt;p&gt;这是今年习得的一项最重要的技能！国庆从青岛回杭州后，就一直在考虑要不要买车，纠结了快一个月放弃了——还是太不划算了。但是想要学会开车的念头却一直在，于是买课、上路、自己租车出去玩。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.tunan.fun/blog/10and11of2025&#34;&gt;【周报#24-10&amp;amp;11月的总结】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;我在想，很多事情可能真的只是在脑海中盘算的时候是最难的，当真正去做的时候，也就没有那么难了。&lt;/p&gt;&#xA;&lt;p&gt;虽然现在技术还是不佳，但是租车出去玩没问题了，2026元旦马上就要来了，租了两天车准备去千岛湖玩。在杭州待了这么久还没去过千岛湖呢。&lt;/p&gt;&#xA;&lt;h2 id=&#34;虚无篇&#34;&gt;虚无篇&lt;/h2&gt;&#xA;&lt;p&gt;这是个无法量化成果的小篇章。但却十分重要，我感觉最近一年是我对人生观、价值观、世界观塑造和改变最大的一年，也是心态逐渐走向成熟的一年。&lt;/p&gt;&#xA;&lt;p&gt;仿佛慢慢褪去了部分稚气，慢慢试着更加温儒地对待身边的人。今年发脾气和生气的次数明显少了特别多，无论是工作还是生活当中。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;但我深知自己做得还不够好，甚至29号晚上，还和Maxine闹了一点小矛盾。但好在我俩坚实的情感账户和她的宽容理解，不快的小插曲很快就消弭了。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;至于这其中原因我也不甚了解，可能跟看过的书和在YouTube上的长视频有关系。也可能是一些潜移默化影响我的短视频和电视剧有关。也可能是在工作、生活中遇到的事情、遇到的人教会了自己成长。&lt;/p&gt;&#xA;&lt;p&gt;这些经历和灵感正一步步塑造自己，只不过我很难从繁杂的线团中找到线头罢了。细雨润无声，可能指的就是这种意境吧。&lt;/p&gt;&#xA;&lt;p&gt;如果非要给2025年的“情绪”找一个量化指标，那么大概能从&lt;code&gt;Year weekly veiw&lt;/code&gt;中找到答案。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr class=&#34;header&#34;&gt;&#xA;&lt;th&gt;心情指数（Weekly）&lt;/th&gt;&#xA;&lt;th&gt;2024年&lt;/th&gt;&#xA;&lt;th&gt;2025年&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;五星级&lt;/td&gt;&#xA;&lt;td&gt;16次&lt;/td&gt;&#xA;&lt;td&gt;34次&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;四星级&lt;/td&gt;&#xA;&lt;td&gt;19次&lt;/td&gt;&#xA;&lt;td&gt;10次&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;三星级&lt;/td&gt;&#xA;&lt;td&gt;8次&lt;/td&gt;&#xA;&lt;td&gt;8次&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;二星级&lt;/td&gt;&#xA;&lt;td&gt;4次&lt;/td&gt;&#xA;&lt;td&gt;0次&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;一星级&lt;/td&gt;&#xA;&lt;td&gt;1次&lt;/td&gt;&#xA;&lt;td&gt;0次&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;明显这一年的“Mood”指数比2024年稳定且提高了很多。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20251231115830231.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20251231115830231&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;学习篇&#34;&gt;学习篇&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr class=&#34;header&#34;&gt;&#xA;&lt;th&gt;计划&lt;/th&gt;&#xA;&lt;th&gt;状态&lt;/th&gt;&#xA;&lt;th&gt;日期&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;读完《To kill A mocking bird》&lt;/td&gt;&#xA;&lt;td&gt;❌&lt;/td&gt;&#xA;&lt;td&gt;全年&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;Anki上新记录1500个单词&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;全年&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;完成80次的Native Speaker交流&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;全年&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;数据结构与算法之美&lt;/td&gt;&#xA;&lt;td&gt;❌&lt;/td&gt;&#xA;&lt;td&gt;全年&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;LeeCode刷题100道&lt;/td&gt;&#xA;&lt;td&gt;❌&lt;/td&gt;&#xA;&lt;td&gt;全年&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;从0开始学大数据&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;第三季度&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;后端面试38讲&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;第二季度&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;设计模式之美&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;第三季度&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;Kubernetes学习&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;第四季度&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;领域驱动设计&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;第三季度&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;Model Context Protocol&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;第三季度&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;经济学人阅读&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;第四季度&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ol type=&#34;1&#34;&gt;&#xA;&lt;li&gt;没错，一年多了，我还没读完这本英文小说！目前进度 432/606。立个flag，2026年一月份一定完成。&lt;/li&gt;&#xA;&lt;li&gt;1669 的单词记录量！今年的英文阅读能力大幅提升！&lt;/li&gt;&#xA;&lt;li&gt;和Mango、Sean坚持练习口语。但不知道是不是还是因为没有全英环境、或者每次练习都太随意的原因，口语水平虽然有进步但却没有那么明显。&lt;/li&gt;&#xA;&lt;li&gt;算法还是算了，实在没有动力去学，这是一个愚蠢的2025计划项。&lt;/li&gt;&#xA;&lt;li&gt;其他技术学习目标虽然都完成了，但意义都不大，明年要把大部分精力都投入到㊙️上，所以不会安排这些技术上学习了。&lt;/li&gt;&#xA;&lt;li&gt;唯一值得骄傲的是，能够熟练使用Kubernetes了。&lt;/li&gt;&#xA;&lt;li&gt;从第四季度开始阅读经济学人的文章了，但这个没有去记录，大概读了有10篇了吧。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;今年没有记录短视频&amp;amp;电影&amp;amp;文章的内容（实际上看到喜欢的内容会发在自己telegram上的频道上），但在年度总结时特别不方便，所以明年的OKR中会设立相关plan，这种plan没有明确的Target，只是用来记录，看看这一年究竟看了哪些短暂却有意义的内容。&lt;/p&gt;&#xA;&lt;h2 id=&#34;代码篇&#34;&gt;代码篇&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr class=&#34;header&#34;&gt;&#xA;&lt;th&gt;项目&lt;/th&gt;&#xA;&lt;th&gt;地址&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;数据库表内容对比工具&lt;/td&gt;&#xA;&lt;td&gt;暂未开源&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;AI赋能的数据库处理工具&lt;/td&gt;&#xA;&lt;td&gt;暂未开源&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;PhD Job Platform&lt;/td&gt;&#xA;&lt;td&gt;https://github.com/here-tunan/aiphdwork&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;tunan-blog&lt;/td&gt;&#xA;&lt;td&gt;https://github.com/here-tunan/tunan-blog&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;家庭记账软件&lt;/td&gt;&#xA;&lt;td&gt;https://github.com/here-tunan/my-life&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;AnkiMCPServer&lt;/td&gt;&#xA;&lt;td&gt;https://github.com/here-tunan/mcp-server-anki&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;2025年绝对是AI编程发生巨大变化的一年，使用gemini、claude创造和优化了以上的项目。&lt;/p&gt;&#xA;&lt;h2 id=&#34;博客篇&#34;&gt;博客篇&lt;/h2&gt;&#xA;&lt;p&gt;今年除了优化了自己的博客系统外，还写了不少的周报、翻译、技术分享等内容。&lt;/p&gt;&#xA;&lt;p&gt;个人博客主页：https://www.tunan.fun&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr class=&#34;header&#34;&gt;&#xA;&lt;th&gt;类型&lt;/th&gt;&#xA;&lt;th&gt;数量&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;周报&lt;/td&gt;&#xA;&lt;td&gt;17篇&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;技术类&lt;/td&gt;&#xA;&lt;td&gt;6篇&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;书评&lt;/td&gt;&#xA;&lt;td&gt;2篇&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;翻译&lt;/td&gt;&#xA;&lt;td&gt;2篇&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;读书篇&#34;&gt;读书篇&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr class=&#34;header&#34;&gt;&#xA;&lt;th&gt;书名&lt;/th&gt;&#xA;&lt;th&gt;评分&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;智人之上&lt;/td&gt;&#xA;&lt;td&gt;🌟🌟🌟🌟🌟&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;未来简史&lt;/td&gt;&#xA;&lt;td&gt;🌟🌟🌟&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;亲密关系（第二遍）&lt;/td&gt;&#xA;&lt;td&gt;🌟🌟🌟&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;当下的力量&lt;/td&gt;&#xA;&lt;td&gt;🌟🌟🌟&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;下班后开始新的一天&lt;/td&gt;&#xA;&lt;td&gt;🌟&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;大衰退时代&lt;/td&gt;&#xA;&lt;td&gt;🌟🌟🌟&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;影响力&lt;/td&gt;&#xA;&lt;td&gt;🌟🌟🌟🌟&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;我在北京送快递&lt;/td&gt;&#xA;&lt;td&gt;🌟🌟🌟&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;今年读书读的还是太少了，明年的计划可能还要在此基础上再缩减一些，因为主要精力还要放在㊙️上。&lt;/p&gt;&#xA;&lt;h2 id=&#34;运动篇&#34;&gt;运动篇&lt;/h2&gt;&#xA;&lt;p&gt;基本上一周两次运动还是能保证的。游泳、打羽毛球、打匹克球，夏天的时候游泳比较多一点。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;公司周一组织打羽毛球，周二打匹克球，从这一点看，真的太神仙公司了。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;但现在越来越不喜欢健身了，觉得真的好枯燥。&lt;/p&gt;&#xA;&lt;h2 id=&#34;健康篇&#34;&gt;健康篇&lt;/h2&gt;&#xA;&lt;p&gt;今年睡眠质量有了改善，可能跟换了房子也有一定关系，也可能是今年心态比之前好了很多。&lt;/p&gt;&#xA;&lt;p&gt;颈椎也因为一直游泳打球，从反弓变成了曲度变直，虽然还是有问题，但最起码有了好转了。&lt;/p&gt;&#xA;&lt;p&gt;今年完全没有生病！免疫力提升了不少好像。💪&lt;/p&gt;&#xA;&lt;p&gt;但❗️有个更大问题出现，十一月份的体检疑似糖尿病前期了，想想近一年特别爱在晚上吃水果！并且结婚后体重确实也有上升。这一点在明年还是要格外注意的，要列入年度目标了！&lt;/p&gt;&#xA;&lt;h2 id=&#34;理财篇&#34;&gt;理财篇&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr class=&#34;header&#34;&gt;&#xA;&lt;th&gt;计划&lt;/th&gt;&#xA;&lt;th&gt;状态&lt;/th&gt;&#xA;&lt;th&gt;时间&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;计划全年攒¥【㊙️】&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;全年&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;定投标普/纳斯达克基金¥【㊙️】&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;全年&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;兑换外汇美元储备$【㊙️】&lt;/td&gt;&#xA;&lt;td&gt;✅&lt;/td&gt;&#xA;&lt;td&gt;全年&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;理财依旧还是没有什么长进，基本上还是在以节流为主线，因为开源实在太难了，也很难有精力去研究开源的事情。&lt;/p&gt;&#xA;&lt;p&gt;并且这个经济下行的年代，把自己的钱放银行可能就是普通人最好的选择了吧。&lt;/p&gt;&#xA;&lt;p&gt;坚持和Maxine在my-life系统上进行记账，总共记录了-收入：100+笔 支出：2000+笔的账单。这也为年度财政总结提供了最基本的账面信息。&lt;/p&gt;&#xA;&lt;h2 id=&#34;新添好物&#34;&gt;新添好物&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr class=&#34;header&#34;&gt;&#xA;&lt;th&gt;好物&lt;/th&gt;&#xA;&lt;th&gt;❤️❤️❤️&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;文石Boox Leaf5&lt;/td&gt;&#xA;&lt;td&gt;纸质阅读固然好，但是纸质书实在太占地了，电子阅读器还是香的！&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;Macbook air&lt;/td&gt;&#xA;&lt;td&gt;给Maxine买的，让我们拥抱苹果全家桶吧&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;Bonny羽毛球拍&lt;/td&gt;&#xA;&lt;td&gt;Maxine送我的生日礼物&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;Logi Master3s&lt;/td&gt;&#xA;&lt;td&gt;Master2s有点坏了&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;今年没有添置什么大件，还是算是比较省钱的。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;背屏已经碎得不像话的iphone13还能再战半年！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;&#xA;&lt;p&gt;相较于&lt;a href=&#34;https://www.tunan.fun/blog/report08-2025-new-start#%E5%AD%A6%E4%B9%A0%E8%AE%A1%E5%88%92&#34;&gt;【2024年的计划和总结】&lt;/a&gt;，2025年计划的可执行性设计得不错。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;2025年使用的Notion的OKR的模版做的可视化计划，比2024年写在Markdown文件中的文本计划要好很多，很容易追踪和量化。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;2025年的大部分计划🎯都完成了，获得了“丈夫”的新身份，从世俗角度算是人生迈入了新阶段。今年真正学会了开车上路，英文阅读进步很大，口语虽然水平还是一般，但较之去年肯定也是大有长进。&lt;/p&gt;&#xA;&lt;p&gt;至于2026的新年计划呢，已经记录在Notion中了，部分内容不太想在公共领域揭示，等来年再做总结时，再一一揭晓吧。新的一年我们继续前进！新的一年也注定是要比2025年更忙碌但又幸福的一年。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20251231135547925.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20251231135547925&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;</content:encoded>
      <pubDate>31 Dec 25 14:01 CST</pubDate>
    </item>
    <item>
      <title>周报#24-10&amp;11月的总结</title>
      <link>https://www.tunan.fun/blog/10and11of2025</link>
      <description>前言 &gt; 几近两个月没有静下心来写我的博客了，忙碌是一回事，但拖延的巨大惯性才是根因。 现在我正坐在工位上，想着给我这期的“流水账”起个开头。...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;几近两个月没有静下心来写我的博客了，忙碌是一回事，但拖延的巨大惯性才是根因。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;现在我正坐在工位上，想着给我这期的“流水账”起个开头。也正是因为我工作上终于没有那么忙了，所以才有时间和闲情来续写已阔别两月的博客周报。&lt;/p&gt;&#xA;&lt;p&gt;这两个月虽然没有去按周记录下来，但好在记忆仍然新鲜，现在去补录也不算为时过晚。现在回想起过去两个月发生的事情，一方面觉得时间过得真快，60来天匆匆而过；另一方面又觉得，只要是在认真生活，60天内能做的事情真的又有好多。&lt;/p&gt;&#xA;&lt;p&gt;下面就先按照时间顺序来梳理我这六十天生活中大小不一的琐事、趣事、烦心事吧——有些事情是并行发生的，但这不影响总体上的顺序。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;十月初，国庆回家两天内分别参加妹妹和发小的两场婚礼&lt;/li&gt;&#xA;&lt;li&gt;婚礼结束后，和发小又喝了顿大的&lt;/li&gt;&#xA;&lt;li&gt;国庆回来后，公司正式开始kubernetes的集群迁移，我总算是彻底入门了k8s，负责我们团队的迁移工作&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;写本篇周报的上一个周日，租车自驾和媳妇去湘湖野餐，也是我练车后的一次Test&lt;/li&gt;&#xA;&lt;li&gt;语言学习，持续学习英文，找到了一个很好的英文博客，在duolingo上面学习日文&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;h3 id=&#34;婚礼与聚会&#34;&gt;婚礼与聚会&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;原来我们早已悄悄长大，悄无声息到我们自己都未曾发现&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;朋友们包含我在内，都一个接一个的成家（皆未立业）了——前几天打电话还在跟我母亲谈及此事。&lt;/p&gt;&#xA;&lt;p&gt;在这个时代，一个普通的、来自农村、在这个社会毫无根基的年轻人，想要在30不到的年纪立业显然不是件易事。好在，我和我的朋友们都还算是有份正经工作，温饱也都不成问题。&lt;/p&gt;&#xA;&lt;p&gt;为人夫妻，为人父母，成长好像就是不断给自己身上贴上越来越多的标签。在不同的环境下，所贴标签的闪光度也有所不同。就像我们一群发小聚在一起时（趁着喜事，大家有机会团聚），“国企研究院职工”、“北京在读的高校博士”、“已婚”这些标签都不如“发小”这一标签亮眼。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;跟发小在一起的时候，我仿佛再次看到了小时候的我。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;跟发小聚会跟其他朋友聚会的感觉是不一样的，当你看到那一张张远离你正轨生活，但又熟悉无比的脸庞时，回忆瞬间就被拉回过去。坐在酒桌前略显疲惫的彪形大汉，装载的灵魂确是十几岁的少年。&lt;/p&gt;&#xA;&lt;p&gt;忆往昔、聊今朝、谈未来，推杯换盏，早就把媳妇说少喝点的“劝诫”和“警告”抛之脑后。后半夜，狼狈到去洗手间吐到苦水都出来的男人心想“我下次再不能这么喝了”。其实他心知肚明，那只是对痛苦身体和生气媳妇做出的暂时的保证。&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;为什么👆会有一条分割线，因为有一件事我还是蛮有芥蒂的。因为我算是朋友们离老家较远的，平常回去较少。这几年过年也经常是去东北媳妇儿家里，所以我格外得看中这次的发小聚会。加上本身我就是个心思细腻又特重感情的人，所以我就表现得有些亢奋，极力得促成这次聚会。&lt;/p&gt;&#xA;&lt;p&gt;显然，有的朋友们觉得我期待得有些过了头，说我在群里太能说了，原话是“兄弟你话真密，往上翻了翻全是你的头像，你有点太饥渴，说实话我都不敢去了”——给我浇了一盆冷水。虽然这并没有影响后面我们的聚会时的欢乐，也不会影响未来我质朴的感情。&lt;/p&gt;&#xA;&lt;p&gt;但当时，我仍在笔记本上写下了：“突然没那么期待了”。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;学会收敛自己的情感，也是走向成熟重要的一课。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;美国朋友来杭州&#34;&gt;美国朋友来杭州&lt;/h3&gt;&#xA;&lt;p&gt;由于工作较忙，也实在没有调休了，他和他女朋友来了三天，我只陪他玩了两天周末。&lt;/p&gt;&#xA;&lt;p&gt;周五和周六晚上邀请他们来家里吃饭的——从小家里人就教导，邀请客人来家里做客是山东最高礼仪！🤔&lt;/p&gt;&#xA;&lt;p&gt;周六带朋友去了西湖，植物园，碰巧遇到杭州植物园在做一些展览，叹为观止！虽然比不上大自然的鬼斧神工，但也彰显着人造艺术景观的绚烂多姿。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20251125172226960.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20251125172226960&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;周日带他们去爬了北高峰，傍晚回到酒店，一起看英雄联盟的全球总决赛。看到一半，就按照约定的时间去练车了。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;去年还是在Twitch上一起看直播，没想到今年就是一起看了。&lt;/p&gt;&#xA;&lt;p&gt;周五周六晚上还教两个朋友打麻将🀄️，没想到刚教会我就打不过他们了！！！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;学车与开车&#34;&gt;学车与开车&lt;/h3&gt;&#xA;&lt;p&gt;从国庆回来，有一个想法一直萦绕在心头——买车。国庆回家的时候，看到朋友们都买了车，从市里回乡下十分方便，买车的想法就扎根脑海，挥之不去。回到杭州一个月后，冷静下来不少，买车可能还是没有必要，但是学车却十分重要。开车这项技能对于一个成年人来说算是一项必不可少的社会技能。&lt;/p&gt;&#xA;&lt;p&gt;说干就干，美团找了个驾校，试了一节体验课还不错，就购买了十小时的正式课程。每个周末，一辆贴着实习标记的吉利牌电车蹩脚地穿梭在杭州市内、郊区、高架、隧道。&lt;/p&gt;&#xA;&lt;p&gt;最终，一个月时间就学会了开车。为了避免学完就忘，上个周末特意租了一辆车（大众高尔夫1.2T）和媳妇儿去湘湖郊游了。由于没有倒车影像，在一次倒车时，不幸撞上了，但车身一点损伤都没有，不知道是幸运还是不幸。总之，除了走错路，绕了点路外，总体上还是十分顺利的。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;高尔夫的这小车真好开啊🚗，不愧是小钢炮。最后实在在湘湖找不到车位，一路开车，竟然开到了我们公司之前团建的地方，还是下车后才发现的。说明有车的烦恼也不少啊！不买车除了节省下买车本身要花的钱，每年也省了不少车相关的开销，租车的话一年也花不了多少。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20251126134802137.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20251126134802137&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;体检运动自然&#34;&gt;体检、运动、自然&lt;/h3&gt;&#xA;&lt;p&gt;十月中旬公司组织了一次体检，去浙大二院的体检中心做的，项目还算比较齐全。毛病还是那些毛病，和去年差不了太多。唯一值得担忧的还是自己的肥胖问题，可是减肥真的好难，尤其是结婚之后，虽说没胖多少，但和之前的减肥动力相比却少了不少。&lt;/p&gt;&#xA;&lt;p&gt;值得庆幸的是，颈椎问题有所改善，从去年的反弓变成了今年的曲度变直。这可能跟我今年积极打羽毛球有关系。&lt;/p&gt;&#xA;&lt;p&gt;虽然因为膝盖问题停止了和朋友们每周六晚上的羽毛球活动（强度太大），但还是在恢复了一段时间后积极参加了公司每周一的羽毛球活动。也学会了另一项新的运动——匹克球，强度比羽毛球低不少，但同样能达到锻炼的效果。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;虽然嘴上说减肥是一件很难的事情，但该减还得减啊…&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;除此之外，还和同事、朋友一起在周末去爬山，现在越来越喜欢大自然了，仿佛当置身绿树成荫的山野之中时，真的感受到了与宇宙的联结。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20251126140011133.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20251126140011133&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆同事开车带我和Maxine去富阳爬山，这里有一个很漂亮的小瀑布。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;朋友来杭州的那个周末，周日带他们去爬北高峰，参观财神庙，正好那天小雨窸窣，整个山都被氤氲的雾气包裹着，仙境大概就是如此吧——可惜忘记拍照片了！&lt;/p&gt;&#xA;&lt;p&gt;上周四公司还组织了秋游活动，去了宁波的一个湿地公园，虽不说景色有多么震撼，但秋游本身就是一件十分chilling的事情。&lt;/p&gt;&#xA;&lt;h3 id=&#34;护照&#34;&gt;护照&lt;/h3&gt;&#xA;&lt;p&gt;办理了人生的第一本护照，不知道啥时候能出国一趟，还是值得期待的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;工作代码读书学习&#34;&gt;工作、代码、读书、学习&lt;/h2&gt;&#xA;&lt;h3 id=&#34;kubernetes&#34;&gt;Kubernetes&lt;/h3&gt;&#xA;&lt;p&gt;最近公司在搞Kubernetes的迁移，我是我们开发团队的主要参与者。趁着这个机会总算是把k8s的整体用法都摸清楚了。像什么Ingress、Service、Deployment、Secret都“如数家珍”了。平常其他团队的同事也会来咨询我相关的问题，还是蛮有成就感的。&lt;/p&gt;&#xA;&lt;p&gt;这项技术其实在五六年前（上大四）的时候就听说了，那时候忘记哪个老师让我们学习这项技术，当时是真的看不懂。去老师的公司实习的时候没啥工作任务，就怀着一腔热血去学习它，结果自然是无功而返。&lt;/p&gt;&#xA;&lt;p&gt;因为那个时候的自己只会一个JSP——一项十分古老的JavaWeb编程技术，根本就不懂得软件工程、分布式这些东西，所以学习Kubernetes这种技术无异于缘木求鱼，甚至可以说是还没见过跑呢就想着研究如何飞了。&lt;/p&gt;&#xA;&lt;p&gt;在5年的工作生涯中磕磕绊绊，中间也偶尔会仍然复燃当年的热血想着学习Kubernetes，在极客时间上也买了课程。但有时候学习技术就是这样，你没有机会去实践，你只能懂个概念，并且大部分很快就会忘光。&lt;/p&gt;&#xA;&lt;p&gt;但这不并不代表就不应该去学习这些复杂的技术，这次能够顺利在几天内学会，还是要归功于两方面的原因：&lt;/p&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;h3 id=&#34;公司的竞赛&#34;&gt;公司的竞赛&lt;/h3&gt;&#xA;&lt;p&gt;公司在10.24日开展了一个代码编程的比赛，周期有半个月。先说说结果吧，我们得了第二名🥈，有点可惜。我自认为我们做的还是不错的，付出的时间和精力比其他组都要多得多。主观角度上，我个人还是觉得是因为我们的选题没有第一名有“看头”——他们是一个AI赋能的客户管理系统，而我们是一个AI赋能的SQL查询工具，评委中有的是非技术出身，所以看不到我们选题的技术复杂度和工程的优雅。&lt;/p&gt;&#xA;&lt;p&gt;不过，技术部门的老大在总结时还刻意提了自己的名字，说我们组展示出了程序员的浪漫，所以也算不虚此行。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20251126162404627.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20251126162404627&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;完全以工程化的方式来编码，Next.js+SpringBoot的前后端框架，支持K8s部署，我甚至还特意用WriterSide写了一篇在线文档并部署到了k8s上让同事可以在线访问——这一行为广受好评。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;后续我想把这次竞赛的代码开源到GitHub上。在此留个坑位：&lt;a href=&#34;&#34;&gt;GitHub Link&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;事故&#34;&gt;事故&lt;/h3&gt;&#xA;&lt;p&gt;来这家公司两年多了，虽不能说一个bug没写，但确实没有出过事故。万万没想到，就在我最忙的这段时间，发生了一件小事故，虽然事故很小，但由于我和我领导的关系的敏感，这大概率会影响我这个季度的绩效考评。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I didn’t get along well with my leader…&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;不过出了问题就积极面对、承担，然后尽可能从消极的情绪中走出来。我能明显感受到我在处理消极事情上能力的成长了，我这次很快就从情绪中走出，以前的我可能会因为这件事情影响好几天的睡眠。当然这也要感谢我身边的同事，hx哥（算是我的虚线领导）。&lt;/p&gt;&#xA;&lt;h3 id=&#34;db-diff的工具&#34;&gt;DB DIFF的工具&lt;/h3&gt;&#xA;&lt;p&gt;因为k8s迁移不仅仅是迁几个无状态的服务，连着数据库和所有的中间件都要迁移，为了保证数据迁移质量，hx哥让我研究有没有好用的开源工具，看了一圈都不是很好用，于是花了两天时间自己写了个（当然AI helps me a lot）。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20251126163336733.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20251126163336733&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;后续也想开源出来，因我感觉做的确实还可以。在此留个坑位：&lt;a href=&#34;&#34;&gt;GitHub Link&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;读书&#34;&gt;读书&lt;/h3&gt;&#xA;&lt;p&gt;这两个月读书甚少，因为其他事情太多，总是处在忙碌之中，凡是有了时间，也都献给了能够快速带来多巴胺的Video Game。这两个月只读完了一本《我在北京送快递》。很少发朋友圈的我还特意为这本书发了个朋友圈。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20251126141842528.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20251126141842528&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;此外另外在读的三本书（两本实体书分别放在公司和家里、另一本是电子书），断断续续，希望十二月都能读完。其中情商是第二遍读了，所以读的时候也在做一些系统性的笔记。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;双十一媳妇儿给我买了个文石的阅读器，虽然还是纸质书有质感，但论方便程度阅读器还是无懈可击啊。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;语言学习&#34;&gt;语言学习&lt;/h3&gt;&#xA;&lt;p&gt;持续在Duolingo上学习日文。最近因为美国冬令时+ThanksGiving+比较忙的原因，和Mango的口语练习频率下降了很多。Sean来中国的时候，我也感觉到我的口语进步真的很慢，甚至倒退了，最近每天早上的地铁上都在听英文的博客，既然说得少了就先多听一点吧。&lt;/p&gt;&#xA;&lt;h2 id=&#34;写在最后&#34;&gt;写在最后&lt;/h2&gt;&#xA;&lt;p&gt;如果用关键词总结过去的60天，总体上应该是&lt;code&gt;充实&lt;/code&gt;、&lt;code&gt;忙碌&lt;/code&gt;的。后面慢慢地调整自己的混乱的作息、恢复读书、继续写我的博客周报。&lt;/p&gt;&#xA;&lt;p&gt;十二月份也马上要来了，一年的最后一个月了，看了今年的目标，除了机器学习和刷算法题（实在没有动力）外其他的都差不多完成了，最近一年在一些事情的看法上有了改变，明年的计划方向要调整一下了。后面一个月会好好考虑明年的计划。&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>26 Nov 25 16:57 CST</pubDate>
    </item>
    <item>
      <title>【保姆级教程-从0开始开发MCP服务器】二、使用ClaudeCode连接第一个MCP服务器</title>
      <link>https://www.tunan.fun/blog/mcp-series-02</link>
      <description>前言 这个系列主要是介绍MCP是什么，如何连接MCP Server以及如何自己进行MCP Server开发。 这个系列将包含四篇文章，采取渐进式的学习方式来逐渐掌握MCP�...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;这个系列主要是介绍MCP是什么，如何连接MCP Server以及如何自己进行MCP Server开发。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这个系列将包含四篇文章，采取渐进式的学习方式来逐渐掌握MCP开发： - 先帮助大家理解MCP的核心概念和协议规范 - &lt;strong&gt;尝试在Claude Code中连接几个MCP Servers并感受其所带来的魅力&lt;/strong&gt;（本文内容） - 手动去搭建一个本地的stdio Mcp Server - 如何创建企业级的MCP Server&lt;/p&gt;&#xA;&lt;p&gt;在&lt;a href=&#34;https://www.tunan.fun/blog/mcp-series-01&#34;&gt;上一篇文章&lt;/a&gt;中，主要介绍了MCP的&lt;code&gt;来时路&lt;/code&gt;和深入浅出其概念。在本篇文章中，我们将连接多个不同类型的MCP Servers，体验一下LLMs究竟是如何通过MCP打破和其他软件的壁垒的，感受其强大的魔力！&lt;/p&gt;&#xA;&lt;p&gt;在正式连接MCP服务器之前，还是要花点篇幅讲讲MCP Servers与MCP客户端之间的传输方式。这会帮助我们更好地理解下文中的多种连接方式。&lt;/p&gt;&#xA;&lt;h2 id=&#34;mcp-servers传输方式有哪些&#34;&gt;MCP Servers传输方式有哪些？&lt;/h2&gt;&#xA;&lt;p&gt;下面三种服务器类型是MCP Servers在某一维度上的分类：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;本地stdio服务器&lt;/li&gt;&#xA;&lt;li&gt;远程SSE服务器（已废弃）&lt;/li&gt;&#xA;&lt;li&gt;远程HTTP服务器&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这个维度指的就是其与客户端之间的传输方式，即指LLMs如何和相应的MCP服务器进行通信的。&lt;/p&gt;&#xA;&lt;p&gt;不同的传输方式决定了服务器在使用和开发时很大的不同。接下来我们就依次来讲讲这三种服务器的不同。&lt;/p&gt;&#xA;&lt;h3 id=&#34;本地stdio服务器&#34;&gt;本地stdio服务器&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;stdio&lt;/code&gt;是一个简称，全称是&lt;code&gt;standard input/output&lt;/code&gt;，标准输入/输出。MCP客户端和服务端在本地进程间通过标准输入/输出通信。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb1&#34;&gt;&lt;pre class=&#34;sourceCode txt&#34;&gt;&lt;code class=&#34;sourceCode default&#34;&gt;&lt;span id=&#34;cb1-1&#34;&gt;&lt;a href=&#34;#cb1-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;┌─────────────┐    stdin/stdout    ┌─────────────┐&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-2&#34;&gt;&lt;a href=&#34;#cb1-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;│   Client    │ ◄────────────────► │ MCP Server  │&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-3&#34;&gt;&lt;a href=&#34;#cb1-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;│ (Claude)    │                    │   (stdio)   │&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-4&#34;&gt;&lt;a href=&#34;#cb1-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;└─────────────┘                    └─────────────┘&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;客户端会启动服务器进程，通过JSON-RPC 2.0协议交换消息，服务器进程会随着会话启动和结束。&lt;/p&gt;&#xA;&lt;p&gt;这样做的好处是显而易见的，stdio服务器的生命周期跟随会话，不会在会话结束后仍然占用资源，缺点则是它只能与本地的LLMs客户端建立连接，所以也叫做&lt;code&gt;本地&lt;/code&gt;stdio服务器。&lt;/p&gt;&#xA;&lt;p&gt;之所以要客户端启动stdio，是因为不这样做的话，二者就无法使用stdio进行通信了。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb2&#34;&gt;&lt;pre class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb2-1&#34;&gt;&lt;a href=&#34;#cb2-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;# stdio 通信的实现原理&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb2-2&#34;&gt;&lt;a href=&#34;#cb2-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;父进程 &lt;span class=&#34;kw&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ex&#34;&gt;Client&lt;/span&gt;&lt;span class=&#34;kw&#34;&gt;)&lt;/span&gt; ──&lt;span class=&#34;ex&#34;&gt;fork&lt;/span&gt;/&lt;span class=&#34;ex&#34;&gt;exec&lt;/span&gt;──► 子进程 (Server)&lt;/span&gt;&#xA;&lt;span id=&#34;cb2-3&#34;&gt;&lt;a href=&#34;#cb2-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    │                               │&lt;/span&gt;&#xA;&lt;span id=&#34;cb2-4&#34;&gt;&lt;a href=&#34;#cb2-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    └─── &lt;span class=&#34;ex&#34;&gt;stdin/stdout&lt;/span&gt; 管道 ─────────┘&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;stdin/stdout 是父子进程之间的管道，只有启动进程的父进程才能访问子进程的 stdin/stdout。&lt;/p&gt;&#xA;&lt;p&gt;在下文中，我们将以一个excel_mcp_server的例子来试一下在Claude Code中如何连接本地的stdio类型的服务器。&lt;/p&gt;&#xA;&lt;h3 id=&#34;sse服务器&#34;&gt;SSE服务器&lt;/h3&gt;&#xA;&lt;p&gt;SSE全称是&lt;code&gt;Server-Sent Events&lt;/code&gt;，服务器推送事件，这是一种服务端实时&lt;code&gt;主动&lt;/code&gt;向浏览器推送消息的技术。它有点像&lt;code&gt;WebSocket&lt;/code&gt;技术，但不同的地方在于：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SSE是基于HTTP协议的，WebSocket是基于TCP协议的&lt;/li&gt;&#xA;&lt;li&gt;SSE不是双全工的，只能服务器单向发送消息&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;那客户端是如何进行客户端到服务器的消息传输的呢？用的是HTTP协议的POST请求方式。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb3&#34;&gt;&lt;pre class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb3-1&#34;&gt;&lt;a href=&#34;#cb3-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;┌─────────────┐    &lt;span class=&#34;ex&#34;&gt;GET&lt;/span&gt; /sse     ┌─────────────┐&lt;/span&gt;&#xA;&lt;span id=&#34;cb3-2&#34;&gt;&lt;a href=&#34;#cb3-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;│   &lt;span class=&#34;ex&#34;&gt;Client&lt;/span&gt;    │ ──────────────► │   Server    │&lt;/span&gt;&#xA;&lt;span id=&#34;cb3-3&#34;&gt;&lt;a href=&#34;#cb3-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;│             │                 │             │&lt;/span&gt;&#xA;&lt;span id=&#34;cb3-4&#34;&gt;&lt;a href=&#34;#cb3-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;│             │ ◄──── &lt;span class=&#34;ex&#34;&gt;SSE&lt;/span&gt; ────  │             │ (单向流)&lt;/span&gt;&#xA;&lt;span id=&#34;cb3-5&#34;&gt;&lt;a href=&#34;#cb3-5&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;│             │                 │             │&lt;/span&gt;&#xA;&lt;span id=&#34;cb3-6&#34;&gt;&lt;a href=&#34;#cb3-6&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;│             │ ── &lt;span class=&#34;ex&#34;&gt;POST&lt;/span&gt; /mcp ──►│             │ (请求)&lt;/span&gt;&#xA;&lt;span id=&#34;cb3-7&#34;&gt;&lt;a href=&#34;#cb3-7&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;└─────────────┘                 └─────────────┘&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;但是❗️这个SSE的传输方式被后来的HTTP方式（严谨点讲应该叫做&lt;code&gt;Streamable HTTP&lt;/code&gt;的传输方式）给替代了。从MCP规范版本2025-03-26开始，就更加推荐使用Streamable HTTP了。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;这一改变来自一个&lt;a href=&#34;https://github.com/modelcontextprotocol/modelcontextprotocol/pull/206&#34;&gt;3月24号的PR&lt;/a&gt;（前面我们说过MCP是开源的）,经过一众开发者的Review后，遂即在26号正式推荐了——不得不感叹这速度！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;所以在本系列中我们不会去动手连接和开发该类型的MCP Server了。&lt;/p&gt;&#xA;&lt;h3 id=&#34;streamable-http&#34;&gt;Streamable HTTP&lt;/h3&gt;&#xA;&lt;p&gt;在Streamable HTTP(流式HTTP)传输中，服务器作为独立进程运行，可以处理多个客户端连接。这种传输使用 HTTP POST 和 GET 请求。&lt;/p&gt;&#xA;&lt;p&gt;如果你有Web开发经验，那么你对HTTP肯定不陌生，Streamable HTTP本质上就是基于传统的Web2.0的HTTP协议的，它们的主要区别就在于使用模式和返回处理上。&lt;/p&gt;&#xA;&lt;h4 id=&#34;使用模式&#34;&gt;使用模式&lt;/h4&gt;&#xA;&lt;p&gt;传统的Web2.0 HTTP的API是遵循&lt;a href=&#34;https://learn.microsoft.com/en-us/azure/architecture/best-practices/api-design&#34;&gt;&lt;code&gt;RESTful&lt;/code&gt;风格&lt;/a&gt;的。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb4&#34;&gt;&lt;pre class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb4-1&#34;&gt;&lt;a href=&#34;#cb4-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;# RESTful API - 多个端点，资源导向&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-2&#34;&gt;&lt;a href=&#34;#cb4-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;GET&lt;/span&gt;    /api/users/123        # 获取用户&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-3&#34;&gt;&lt;a href=&#34;#cb4-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;POST&lt;/span&gt;   /api/users            # 创建用户&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-4&#34;&gt;&lt;a href=&#34;#cb4-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;PUT&lt;/span&gt;    /api/users/123        # 更新用户&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-5&#34;&gt;&lt;a href=&#34;#cb4-5&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;DELETE&lt;/span&gt; /api/users/123        # 删除用户&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-6&#34;&gt;&lt;a href=&#34;#cb4-6&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-7&#34;&gt;&lt;a href=&#34;#cb4-7&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;# 每个端点有特定功能&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-8&#34;&gt;&lt;a href=&#34;#cb4-8&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;POST&lt;/span&gt;   /api/calculate&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-9&#34;&gt;&lt;a href=&#34;#cb4-9&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;POST&lt;/span&gt;   /api/upload-file&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-10&#34;&gt;&lt;a href=&#34;#cb4-10&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;GET&lt;/span&gt;    /api/search?q=query&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;但是MCP下的Streamable HTTP是单一端点的：&lt;code&gt;/mcp&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb5&#34;&gt;&lt;pre class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb5-1&#34;&gt;&lt;a href=&#34;#cb5-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;# 单一端点 - RPC 导向&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-2&#34;&gt;&lt;a href=&#34;#cb5-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;POST&lt;/span&gt; /mcp    # 所有操作都通过这一个端点&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-3&#34;&gt;&lt;a href=&#34;#cb5-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;kw&#34;&gt;{&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-4&#34;&gt;&lt;a href=&#34;#cb5-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  &lt;span class=&#34;st&#34;&gt;&amp;quot;jsonrpc&amp;quot;&lt;/span&gt;: &lt;span class=&#34;st&#34;&gt;&amp;quot;2.0&amp;quot;&lt;/span&gt;,&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-5&#34;&gt;&lt;a href=&#34;#cb5-5&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  &lt;span class=&#34;st&#34;&gt;&amp;quot;method&amp;quot;&lt;/span&gt;: &lt;span class=&#34;st&#34;&gt;&amp;quot;tools/call&amp;quot;&lt;/span&gt;,      # 方法名在消息体内&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-6&#34;&gt;&lt;a href=&#34;#cb5-6&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  &lt;span class=&#34;st&#34;&gt;&amp;quot;params&amp;quot;&lt;/span&gt;: &lt;span class=&#34;dt&#34;&gt;{...}&lt;/span&gt;,&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-7&#34;&gt;&lt;a href=&#34;#cb5-7&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  &lt;span class=&#34;st&#34;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;: &lt;span class=&#34;ex&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-8&#34;&gt;&lt;a href=&#34;#cb5-8&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;kw&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-9&#34;&gt;&lt;a href=&#34;#cb5-9&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-10&#34;&gt;&lt;a href=&#34;#cb5-10&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;POST&lt;/span&gt; /mcp    # 同一个端点，不同方法&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-11&#34;&gt;&lt;a href=&#34;#cb5-11&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;kw&#34;&gt;{&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-12&#34;&gt;&lt;a href=&#34;#cb5-12&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  &lt;span class=&#34;st&#34;&gt;&amp;quot;jsonrpc&amp;quot;&lt;/span&gt;: &lt;span class=&#34;st&#34;&gt;&amp;quot;2.0&amp;quot;&lt;/span&gt;,&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-13&#34;&gt;&lt;a href=&#34;#cb5-13&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  &lt;span class=&#34;st&#34;&gt;&amp;quot;method&amp;quot;&lt;/span&gt;: &lt;span class=&#34;st&#34;&gt;&amp;quot;resources/read&amp;quot;&lt;/span&gt;,   # 不同的方法&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-14&#34;&gt;&lt;a href=&#34;#cb5-14&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  &lt;span class=&#34;st&#34;&gt;&amp;quot;params&amp;quot;&lt;/span&gt;: &lt;span class=&#34;dt&#34;&gt;{...}&lt;/span&gt;,&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-15&#34;&gt;&lt;a href=&#34;#cb5-15&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  &lt;span class=&#34;st&#34;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;: &lt;span class=&#34;ex&#34;&gt;2&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb5-16&#34;&gt;&lt;a href=&#34;#cb5-16&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;kw&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;h4 id=&#34;流式处理&#34;&gt;流式处理&lt;/h4&gt;&#xA;&lt;p&gt;传统的HTTP都是无状态连接，客户端发起请求，服务端响应返回结果，然后就结束了。&lt;/p&gt;&#xA;&lt;p&gt;而Streamable HTTP却以流式数据进行响应。流式传输的优势显而易见，相比于传统的响应方式，它不需要等待服务端完全准备好“答案”后再返回给客户端。而是能做到即时反馈，渐进式披露，符合人类的说话和阅读习惯。&lt;/p&gt;&#xA;&lt;p&gt;从技术角度上看，流式处理对服务器的压力也小。传统的一次性返回，内存峰值较高，而流式传输内存使用也更平稳一点。&lt;/p&gt;&#xA;&lt;h2 id=&#34;claude-desktop中使用mcp&#34;&gt;Claude Desktop中使用MCP&lt;/h2&gt;&#xA;&lt;p&gt;前面介绍了MCP Servers的传输方式，在后面去连接不同传输方式的Server时的命令是有稍微的差别的。我们接下来就会去连接多个不同类型的MCP Servers。&lt;/p&gt;&#xA;&lt;p&gt;除了体会不同传输方式的连接的不同之外，更多的是想让首次接触MCP的朋友们去感受MCP真正的魅力所在——打破AI与常规软件间的壁垒。&lt;/p&gt;&#xA;&lt;p&gt;在Claude Code中连接MCP Servers之前，我们先在Claude的桌面程序中小试牛刀一番。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Claude Code是Claude的命令行工具，正是它的出现进一步促进了AI编程工具的进化，继而逐渐取代了Cursor等AI编程工具。而Claude桌面程序就是类似于ChatGPT一样，只是一个问答式的AI产品。Claude桌面程序是免费下载使用的，其中部分MCP工具是可以免费连接使用的，但如果想用到更多的MCP工具则需要升级账号。而Claude Code则是必须付费才能使用的。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;section&#34;&gt;&lt;/h3&gt;&#xA;&lt;p&gt;在Claude Desktop的Setting-&amp;gt;Extensions-&amp;gt;Browse extensions中有多个MCP了。它们分为两部分：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Desktop extensions&lt;/li&gt;&#xA;&lt;li&gt;Web&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;其中Desktop的连接器指的就是连接你电脑上的本地软件的，比如文件系统、谷歌浏览器、苹果电脑下的短信和备忘录等。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250924105637025.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250924105637025&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;而Web下的则是一些非本地软件，一些网站系统。比如Cloudflare、Figma、Notion、Vercel等。（&lt;code&gt;需要升级账户&lt;/code&gt;）&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250924110016174.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250924110016174&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;在这里面安装这些已经内置（指该Connector页面中包含的）的MCP Servers非常容易，本地的直接下载安装，远程的直接连接上就可以了。&lt;/p&gt;&#xA;&lt;p&gt;下面我们就以&lt;code&gt;Read and Write Apple Notes&lt;/code&gt;这个MCP插件来看看MCP究竟能给我们带来什么？我们的用例就是让Claude帮我分析总结一下我过往的旅游备忘录：&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250924110659158.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250924110659158&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;询问Claude，请帮我分析、总结一下我的Notes中旅游Folder下的内容:&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250924110949123.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250924110949123&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Claude成功读取了Notes中的内容，并且给出了相应的分析结果。&lt;strong&gt;MCP确实打破了大模型与本地软件的壁垒了！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;不过有同学可能会问，ChatGPT 的&lt;code&gt;work with&lt;/code&gt;功能早就能实现了与本地软件的交互了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250924111423424.png&#34; alt=&#34;image-20250924111423424&#34; style=&#34;zoom: 67%;&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;MCP的魔力不光是连接本地软件与大模型，而是将所有与大模型连接的方式规范化，所以理论上通过MCP，大模型可以连接到任意的软件与系统之中。&lt;strong&gt;接下来我们就看看在Claude Code中以命令行的方式去连接各种各样的MCP&lt;/strong&gt;（不仅限于上述Connectors页面中的那些了）！&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;除了桌面应用的 Settings &amp;gt; Extensions 界面来浏览和添加扩展外，也可以通过编辑&lt;code&gt;claude_desktop_config.json&lt;/code&gt;配置文件来添加MCP服务器，但这个不是我们本文的重点。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;使用claude-code连接第一个mcp-server&#34;&gt;使用Claude Code连接第一个MCP Server&lt;/h2&gt;&#xA;&lt;h3 id=&#34;claude-code中连接mcp-server的基本命令语法&#34;&gt;Claude Code中连接MCP Server的基本命令语法&lt;/h3&gt;&#xA;&lt;p&gt;安装了Claude Code之后，就可以在终端中以命令行的方式进行MCP Server的安装连接了。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb6&#34;&gt;&lt;pre class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb6-1&#34;&gt;&lt;a href=&#34;#cb6-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;# 基本语法&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb6-2&#34;&gt;&lt;a href=&#34;#cb6-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;claude&lt;/span&gt; mcp add &lt;span class=&#34;op&#34;&gt;&amp;lt;&lt;/span&gt;name&lt;span class=&#34;op&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;op&#34;&gt;&amp;lt;&lt;/span&gt;command&lt;span class=&#34;op&#34;&gt;&amp;gt;&lt;/span&gt; [args...]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;没错，就这么一行命令就可以了，非常的简单。下面我们将从各个案例中逐渐去学习具体的使用方法。&lt;/p&gt;&#xA;&lt;h3 id=&#34;连接notion&#34;&gt;连接Notion&lt;/h3&gt;&#xA;&lt;p&gt;Notion官方自己构建了Notion产品（一个强大的笔记软件）相应的&lt;a href=&#34;https://developers.notion.com/docs/get-started-with-mcp#connect-through-the-notion-app&#34;&gt;Notion MCP Server&lt;/a&gt;（在官网中简称为Notion MCP）。官方推荐使用Streamable HTTP的方式来连接Notion MCP。&lt;/p&gt;&#xA;&lt;p&gt;接下来我们就以Claude Code为例，看如何连接这个Notion MCP。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb7&#34;&gt;&lt;pre class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb7-1&#34;&gt;&lt;a href=&#34;#cb7-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;claude&lt;/span&gt; mcp add --transport http notion https://mcp.notion.com/mcp&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;其中–transport http是规定了传输方式使用http，如果不加默认是stdio传输方式，这就是前文介绍不同传输方式时提到的不同传输方式的服务器在使用上的不同；notion是&lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt;的值，表示给你的mcp server起个名字，后面则是要连接的具体的Streamable HTTP的端点。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb8&#34;&gt;&lt;pre class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb8-1&#34;&gt;&lt;a href=&#34;#cb8-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;claude&lt;/span&gt; mcp add --transport http notion https://mcp.notion.com/mcp&lt;/span&gt;&#xA;&lt;span id=&#34;cb8-2&#34;&gt;&lt;a href=&#34;#cb8-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb8-3&#34;&gt;&lt;a href=&#34;#cb8-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;Added&lt;/span&gt; HTTP MCP server notion with URL: https://mcp.notion.com/mcp to local config&lt;/span&gt;&#xA;&lt;span id=&#34;cb8-4&#34;&gt;&lt;a href=&#34;#cb8-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;File&lt;/span&gt; modified: /Users/yaodao/.claude.json [project: /Users/yaodao/open-project]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;成功添加后，在～/.claude.json中则会自动添加上MCP的配置信息。使用&lt;code&gt;claude mcp list&lt;/code&gt;命令可以查看已添加的mcp servers的状态。&lt;strong&gt;实际上，Claude就是使用配置文件的方式来管理这些MCP Server的&lt;/strong&gt;，后面我们会提到如何使用配置文件的方式来添加MCP Server，在此先按下不表。&lt;/p&gt;&#xA;&lt;p&gt;接下来我们进入Claude Code中，与之对话，看它是否能够与Notion交互。（首次添加会进入Notion鉴权的步骤，按照提示完成鉴权即可）&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb9&#34;&gt;&lt;pre class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb9-1&#34;&gt;&lt;a href=&#34;#cb9-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;claude&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;这次我们的案例是让Notion帮我展示出我本周要做的事情，并把&lt;code&gt;写MCP Server 第二篇的内容&lt;/code&gt;这一事项的状态由进行中变为已完成。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250924115327717.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250924115327717&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;下面是Claude Code的处理过程（省略了一些接口调用，只保留了文字信息）：&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb10&#34;&gt;&lt;pre class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb10-1&#34;&gt;&lt;a href=&#34;#cb10-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;op&#34;&gt;&amp;gt;&lt;/span&gt; 帮我查看&lt;span class=&#34;ex&#34;&gt;Notion&lt;/span&gt;中OKR的本周完成情况，并把写MCP Server第二篇内容的这一项任务标记为已完成&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-2&#34;&gt;&lt;a href=&#34;#cb10-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-3&#34;&gt;&lt;a href=&#34;#cb10-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;⏺ 我来帮您查看&lt;span class=&#34;ex&#34;&gt;Notion&lt;/span&gt;中OKR的本周完成情况，并标记相关任务为已完成。&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-4&#34;&gt;&lt;a href=&#34;#cb10-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-5&#34;&gt;&lt;a href=&#34;#cb10-5&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;⏺ &lt;span class=&#34;ex&#34;&gt;notion&lt;/span&gt; - Search Notion and connected sources (MCP)&lt;span class=&#34;kw&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ex&#34;&gt;query&lt;/span&gt;: &lt;span class=&#34;st&#34;&gt;&amp;quot;OKR 本周&amp;quot;&lt;/span&gt;, query_type: &lt;span class=&#34;st&#34;&gt;&amp;quot;internal&amp;quot;&lt;/span&gt;&lt;span class=&#34;kw&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-6&#34;&gt;&lt;a href=&#34;#cb10-6&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  ⎿  &lt;span class=&#34;kw&#34;&gt;{&lt;/span&gt;                                                                                                                                         &lt;/span&gt;&#xA;&lt;span id=&#34;cb10-7&#34;&gt;&lt;a href=&#34;#cb10-7&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;       &lt;span class=&#34;st&#34;&gt;&amp;quot;results&amp;quot;&lt;/span&gt;:&lt;span class=&#34;bu&#34;&gt; [&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-8&#34;&gt;&lt;a href=&#34;#cb10-8&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;         {&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-9&#34;&gt;&lt;a href=&#34;#cb10-9&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;     … +216 lines (ctrl+o to expand)&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-10&#34;&gt;&lt;a href=&#34;#cb10-10&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-11&#34;&gt;&lt;a href=&#34;#cb10-11&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;⏺ 让我获取本周（Week No. 39）的详细内容：&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-12&#34;&gt;&lt;a href=&#34;#cb10-12&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-13&#34;&gt;&lt;a href=&#34;#cb10-13&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;⏺ 现在让我查看本周要务的详细内容：&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-14&#34;&gt;&lt;a href=&#34;#cb10-14&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-15&#34;&gt;&lt;a href=&#34;#cb10-15&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;⏺ 现在让我查看这个数据源中的具体任务内容：&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-16&#34;&gt;&lt;a href=&#34;#cb10-16&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-17&#34;&gt;&lt;a href=&#34;#cb10-17&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;⏺ 找到了任务！现在让我获取这个任务的详细信息并将其标记为已完成：&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-18&#34;&gt;&lt;a href=&#34;#cb10-18&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-19&#34;&gt;&lt;a href=&#34;#cb10-19&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;⏺ 现在我将把&lt;span class=&#34;st&#34;&gt;&amp;quot;写MCP Server第二篇的内容&amp;quot;&lt;/span&gt;这个任务标记为已完成：&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-20&#34;&gt;&lt;a href=&#34;#cb10-20&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-21&#34;&gt;&lt;a href=&#34;#cb10-21&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;⏺ 任务已成功标记为完成！现在让我查看本周其他任务的完成情况：&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-22&#34;&gt;&lt;a href=&#34;#cb10-22&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-23&#34;&gt;&lt;a href=&#34;#cb10-23&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;⏺ 本周OKR完成情况汇总（Week No. 39）&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-24&#34;&gt;&lt;a href=&#34;#cb10-24&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-25&#34;&gt;&lt;a href=&#34;#cb10-25&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  已完成的任务（Done）：&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-26&#34;&gt;&lt;a href=&#34;#cb10-26&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  - ✅ 写MCP Server第二篇的内容（学习类，不紧急但重要）&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-27&#34;&gt;&lt;a href=&#34;#cb10-27&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  - ✅ 写IDP工作复盘和工作思路工作（工作类，不紧急但重要）&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-28&#34;&gt;&lt;a href=&#34;#cb10-28&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  - ✅ xxxx&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-29&#34;&gt;&lt;a href=&#34;#cb10-29&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-30&#34;&gt;&lt;a href=&#34;#cb10-30&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  进行中的任务（In progress）：&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-31&#34;&gt;&lt;a href=&#34;#cb10-31&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  - 🔄 xxx（工作类，紧急但不重要）&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-32&#34;&gt;&lt;a href=&#34;#cb10-32&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-33&#34;&gt;&lt;a href=&#34;#cb10-33&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  未开始的任务（Not started）：&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-34&#34;&gt;&lt;a href=&#34;#cb10-34&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  - ⏸ 周五报销 打印发票（工作类，紧急且重要）&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-35&#34;&gt;&lt;a href=&#34;#cb10-35&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  - ⏸ 查询一下研修（生活类，不紧急也不重要）&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-36&#34;&gt;&lt;a href=&#34;#cb10-36&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-37&#34;&gt;&lt;a href=&#34;#cb10-37&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  本周完成率约为 62.5%（8个任务中完成5个），主要集中在工作类任务的完成上。&lt;span class=&#34;st&#34;&gt;&amp;quot;写MCP Server第二篇内容&amp;quot;&lt;/span&gt;的任务已成功标记为完成。&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;查看Notion后，该事项也确实标记为了&lt;code&gt;Done&lt;/code&gt;（已完成）状态了。至此就是一个完整的MCP Server添加和使用的过程了。&lt;/p&gt;&#xA;&lt;p&gt;这个Notion MCP Server的连接是通过Streamable HTTP方式连接的，下文中会继续展示在使用stdio服务器的方式。&lt;/p&gt;&#xA;&lt;h2 id=&#34;从社区中去寻找你需要的mcp-servers吧&#34;&gt;从社区中去寻找你需要的MCP Servers吧！&lt;/h2&gt;&#xA;&lt;p&gt;在我的一篇翻译文章&lt;a href=&#34;https://www.tunan.fun/blog/translation-mcp-complete-introduction-2025&#34;&gt;“2025年MCP最全指南🍃”&lt;/a&gt;中谈到了MCP的发展离不开源社区的贡献者，它们为各种软件创建了MCP Servers——LLMs与外部系统的桥梁。目前社区中已经有了超级多的MCP Servers了。&lt;/p&gt;&#xA;&lt;p&gt;你可以在&lt;a href=&#34;https://mcpmarket.com/server&#34;&gt;Browse All MCP Servers&lt;/a&gt;中去查找你所需的“桥梁”。最近在&lt;code&gt;Blue Sky&lt;/code&gt;社交媒体上看到这样一张图，简直笑发财了：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250924134526128.png&#34; alt=&#34;image-20250924134526128&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;这张图形象地展示出，现在MCP Servers的数量“多如牛毛”，使用者却“凤毛麟角”。我觉得这个不是因为MCP Servers的用处不大，而是AI工具的普及度本身就没有很高，除了开发者外，其他行业的人也很少会接触到MCP，至少目前中国大陆应该是这样的。现在大部分的非开发者可能还停留在ChatGPT和DeepSeek的阶段。即使是开发者，部分也还只停留在Cursor的阶段。&lt;/p&gt;&#xA;&lt;p&gt;废话不多说，接下来，我们就从&lt;a href=&#34;https://mcpmarket.com/server&#34;&gt;社区中&lt;/a&gt;随便找一个支持本地stdio的MCP Server来连接一下——&lt;a href=&#34;https://mcpmarket.com/server/excel-2&#34;&gt;&lt;code&gt;Excel MCP Server&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;stdio方式的excel-mcp-server&#34;&gt;stdio方式的Excel MCP Server&lt;/h2&gt;&#xA;&lt;p&gt;这是一个帮助&lt;strong&gt;连接Excel文件的MCP服务器&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;如果没有这个MCP Server，分析Excel是痛苦的，因为大模型不能直接读取xlsx的文件内容，必须要转成csv，但是csv又不支持多sheet，🤣 谁用谁知道。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;我们进入&lt;a href=&#34;https://github.com/haris-musa/excel-mcp-server&#34;&gt;excel-mcp-server的git仓库&lt;/a&gt;查看其使用说明。这个开源工具支持以上三种传输方式，但我们本次只使用本地的方式。&lt;/p&gt;&#xA;&lt;p&gt;这是其Reamde文件给出的本地stdio方式的配置文件：&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb11&#34;&gt;&lt;pre class=&#34;sourceCode json&#34;&gt;&lt;code class=&#34;sourceCode json&#34;&gt;&lt;span id=&#34;cb11-1&#34;&gt;&lt;a href=&#34;#cb11-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;fu&#34;&gt;{&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-2&#34;&gt;&lt;a href=&#34;#cb11-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;   &lt;span class=&#34;dt&#34;&gt;&amp;quot;mcpServers&amp;quot;&lt;/span&gt;&lt;span class=&#34;fu&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;fu&#34;&gt;{&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-3&#34;&gt;&lt;a href=&#34;#cb11-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;      &lt;span class=&#34;dt&#34;&gt;&amp;quot;excel&amp;quot;&lt;/span&gt;&lt;span class=&#34;fu&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;fu&#34;&gt;{&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-4&#34;&gt;&lt;a href=&#34;#cb11-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;         &lt;span class=&#34;dt&#34;&gt;&amp;quot;command&amp;quot;&lt;/span&gt;&lt;span class=&#34;fu&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;st&#34;&gt;&amp;quot;uvx&amp;quot;&lt;/span&gt;&lt;span class=&#34;fu&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-5&#34;&gt;&lt;a href=&#34;#cb11-5&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;         &lt;span class=&#34;dt&#34;&gt;&amp;quot;args&amp;quot;&lt;/span&gt;&lt;span class=&#34;fu&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;ot&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;st&#34;&gt;&amp;quot;excel-mcp-server&amp;quot;&lt;/span&gt;&lt;span class=&#34;ot&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;st&#34;&gt;&amp;quot;stdio&amp;quot;&lt;/span&gt;&lt;span class=&#34;ot&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-6&#34;&gt;&lt;a href=&#34;#cb11-6&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;      &lt;span class=&#34;fu&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-7&#34;&gt;&lt;a href=&#34;#cb11-7&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;   &lt;span class=&#34;fu&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-8&#34;&gt;&lt;a href=&#34;#cb11-8&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;fu&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;这个配置文件我们会在很多开源软件中都看到，但这不是MCP中定义好的配置方式。但由于 Claude Desktop 是最早和最完整的 MCP 客户端实现，其配置格式成为了业界的&lt;strong&gt;事实标准&lt;/strong&gt;。其他开发者自然而然地以它为参考。比如在&lt;a href=&#34;https://github.com/google-gemini/gemini-cli/blob/main/docs/extension.md&#34;&gt;&lt;code&gt;gemini-cli&lt;/code&gt;的扩展中&lt;/a&gt;也是遵循这个json文件的格式的。&lt;/p&gt;&#xA;&lt;p&gt;所以后面如果我们要开发一个开源的MCP Server，我们也需要提供这么一份配置文件供大家理解。&lt;/p&gt;&#xA;&lt;p&gt;我们可以去修改~/.claude.json文件去配置MCP Servers，但这显然不如&lt;code&gt;claude mcp add xxx&lt;/code&gt;来得方便。要把上面的配置文件翻译成命令行语句实在太简单了：&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb12&#34;&gt;&lt;pre class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb12-1&#34;&gt;&lt;a href=&#34;#cb12-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;claude&lt;/span&gt; mcp add excel -- uvx excel-mcp-server stdio&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;&lt;code&gt;claude mcp add&lt;/code&gt; 保持不变，excel还是那个server名称，你随意起名，command指要执行某个命令，args则是参数。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;--&lt;/code&gt;（双破折号）将 Claude 自己的 CLI 标志与传递给 MCP 服务器的命令和参数分开。&lt;code&gt;--&lt;/code&gt; 之前的所有内容都是 Claude 的选项（如 &lt;code&gt;--env&lt;/code&gt;、&lt;code&gt;--scope&lt;/code&gt;），&lt;code&gt;--&lt;/code&gt; 之后的所有内容都是运行 MCP 服务器的实际命令。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;因为&lt;a href=&#34;https://github.com/haris-musa/excel-mcp-server&#34;&gt;该项目&lt;/a&gt;使用的是python语言开发的，为了使用者方便使用，采用uvx工具来一键启动Python MCP 服务器（无需下载源码）。后面还会见到Node.js对应的npx工具。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;我们将在下一篇中自己动手开发一个stdio的MCP Server，将其发布到NPM中之后，就可以直接使用无需源码的npx安装方式了。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;执行上面命令后，进入claude code，让大模型帮助分析我们某个文件夹下的Excel数据。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250924143254919.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250924143254919&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;我们接下来就让Excel MCP Server来获取Excel文件的信息喂给大模型，大模型只负责分析、总结和输出。&lt;/p&gt;&#xA;&lt;p&gt;询问claude，分析&lt;code&gt;/Users/yaodao/Downloads/maxine&lt;/code&gt;路径下的3个xlsx文件（来自做电商运营的媳妇给出的一些电商相关的多达十多个个sheet的excel报表），总结直播间销售额变化趋势以及寻找推广ROI为什么变低的原因。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250924144914770.png&#34; alt=&#34;image-20250924144914770&#34; style=&#34;zoom:67%;&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;到这里是不是MCP的魅力就逐渐凸显出来了，&lt;strong&gt;我们终于跨越了那条阻拦大模型和其他软件间的那条鸿沟了。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;mcp安装范围的额外说明&#34;&gt;MCP安装范围的额外说明&lt;/h2&gt;&#xA;&lt;p&gt;MCP 服务器可以在三个不同的范围级别进行配置，每个级别都有不同的目的来管理服务器可访问性和共享。这不是Claude所独有的，而是MCP生态系统中的通用模式。&lt;/p&gt;&#xA;&lt;p&gt;三个不同的范围分别是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;本地范围（默认范围）：个人服务器、实验性配置或特定于一个项目的敏感凭据（不要将配置文件上传到git上）&lt;/li&gt;&#xA;&lt;li&gt;项目范围：团队共享服务器、项目特定工具或协作所需的服务（可以在git中上传配置到仓库中供多人使用）&lt;/li&gt;&#xA;&lt;li&gt;用户范围：多个项目中需要的个人实用程序、开发工具或经常使用的服务&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在claude code的命令行中使用 &lt;code&gt;--scope&lt;/code&gt; 标志指定配置存储的位置：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;local&lt;/code&gt;（默认）：仅在当前项目中对您可用（在较旧版本中称为 &lt;code&gt;project&lt;/code&gt;）&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;project&lt;/code&gt;：通过 &lt;code&gt;.mcp.json&lt;/code&gt; 文件与项目中的每个人共享&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;user&lt;/code&gt;：在所有项目中对您可用（在较旧版本中称为 &lt;code&gt;global&lt;/code&gt;）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;比如刚刚的Excel MCP Server添加，我们可以使用下面的命令：&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb13&#34;&gt;&lt;pre class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb13-1&#34;&gt;&lt;a href=&#34;#cb13-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;claude&lt;/span&gt; mcp add excel --scope project -- uvx excel-mcp-server stdio&lt;/span&gt;&#xA;&lt;span id=&#34;cb13-2&#34;&gt;&lt;a href=&#34;#cb13-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb13-3&#34;&gt;&lt;a href=&#34;#cb13-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;# 输出内容&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb13-4&#34;&gt;&lt;a href=&#34;#cb13-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;Added&lt;/span&gt; stdio MCP server excel with command: uvx excel-mcp-server stdio to project config&lt;/span&gt;&#xA;&lt;span id=&#34;cb13-5&#34;&gt;&lt;a href=&#34;#cb13-5&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;File&lt;/span&gt; modified: /Users/yaodao/open-project/.mcp.json&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;会发现在该目录下额外创建了一个.mcp.json的配置文件，与之前的配置文件不同了。&lt;/p&gt;&#xA;&lt;p&gt;关于Claude Code中对MCP的使用到这里基本的就结束了，在&lt;a href=&#34;https://docs.claude.com/zh-CN/docs/claude-code/mcp#%E4%BB%8E-json-%E9%85%8D%E7%BD%AE%E6%B7%BB%E5%8A%A0-mcp-%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;Claude Docs-MCP章节中&lt;/a&gt;中还有更多关于这些使用的说明，可以作为一个速查手册去阅读使用。&lt;/p&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;&#xA;&lt;p&gt;本文作为MCP系列的第二篇，重点介绍了如何在Claude Code中连接和使用MCP服务器。连接几个MCP服务器，主要是为了让大家感受MCP给我们生活和工作带来的巨大改变。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;MCP打破了AI与软件间的壁垒&lt;/strong&gt;：无论是本地的Apple Notes、Excel文件，还是云端的Notion服务，都可以通过MCP与大模型无缝交互&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;社区生态正在快速发展&lt;/strong&gt;：虽然目前MCP服务器数量“多如牛毛”而使用者“凤毛麟角”，但这正说明了其巨大的潜力&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在掌握了如何连接和使用MCP服务器后，下一篇文章将带领大家亲手搭建一个本地的stdio MCP Server，从而更深入地理解MCP的工作原理和开发模式。通过实践，我们将真正掌握如何为自己的需求创建定制化的MCP服务器。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;最不重要的一点：如果有对claude code感兴趣，但又暂时没有渠道获取账号的同学可以私信、评论或者在我的博客上联系我嗷～&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content:encoded>
      <pubDate>24 Sep 25 15:33 CST</pubDate>
    </item>
    <item>
      <title>周报#23-我们到底应该如何面对历史</title>
      <link>https://www.tunan.fun/blog/report-23</link>
      <description>前言 本周报记录2025-09-08到2025-09-21双周的琐碎生活。 看《731》 这周去看了战争题材的历史片——《731》。这部剧的观影效果真的一般，它既不像纪录片...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;本周报记录&lt;code&gt;2025-09-08&lt;/code&gt;到&lt;code&gt;2025-09-21&lt;/code&gt;双周的琐碎生活。&lt;/p&gt;&#xA;&lt;h3 id=&#34;看731&#34;&gt;看《731》&lt;/h3&gt;&#xA;&lt;p&gt;这周去看了战争题材的历史片——《731》。这部剧的观影效果真的一般，它既不像纪录片那般真实，又不如商业电影那边能够靠情节、特效、内容而卖得上票。&lt;/p&gt;&#xA;&lt;p&gt;电影中有很多大尺度的血腥、暴力和极度压抑的镜头，观看过程中一度都恶心想吐。看完影片的当天，我甚至没有了吃饭的欲望了——对于我这实属反常。直到现在每每回想起里面的一些血腥镜头还是感到生理不适。&lt;/p&gt;&#xA;&lt;p&gt;除了生理上的天然排斥，心理上自然也会对悲惨遭遇的人们产生悲悯和共情。再配合着血腥的施暴场面，共情催发出了仇恨。于是这部影片的目的达到了。&lt;/p&gt;&#xA;&lt;h3 id=&#34;我们究竟应该以何种目的去回顾历史&#34;&gt;我们究竟应该以何种目的去回顾历史&lt;/h3&gt;&#xA;&lt;p&gt;真的达到了吗？如果这部影片的目的是让中国人不要放弃仇视日本人，或者更加仇视日本人，那么它是起到了一定作用的。前一段时间上映的《南京照相馆》也是如此。&lt;/p&gt;&#xA;&lt;p&gt;我不是在说拍这些影片是错误的，而是应该在拍摄的同时也应该注意一点分寸：让人能够了解历史的国仇家恨，但又应该提醒大家在现代社会，不能始终被国仇家恨所刺激。&lt;/p&gt;&#xA;&lt;p&gt;也很少有影片在讲，日本军国主义的产生是怎样的，病态的武士道精神的起源，这但却极其重要，它能够帮助我们理解这个国家，以及为什么他们会犯下这种种非人的罪行。&lt;/p&gt;&#xA;&lt;p&gt;这些影片，就很像是，抛出一个本身就复杂难解的问题，只希望回答者自己去领悟，也不给出参考答案。可万一回答者普遍悟错了方向呢？也或许他们压根就没希望回答者悟对。&lt;/p&gt;&#xA;&lt;p&gt;成天搞这个对立，那个对立，其实真的很没有意思，反而受伤的是自己。我们回顾历史的目的性应该是，我们能从历史中学习到什么，而不是把过去的仇恨再搬回现在。&lt;/p&gt;&#xA;&lt;p&gt;我们更多的是要从历史中汲取经验与教训，努力发展自我。作为一个有影响力的大国，时刻关注世界上任一角落是否又有军国主义和法西斯主义的萌芽，从而提醒全世界。应该铭记但不又受仇恨的裹挟，无论是个人还是政府，都应该积极地去融入这个全球化的浪潮。现在拉起民族的排斥甚至仇恨情绪并不能缓解当下紧张的经济环境，反而会进一步加剧。&lt;/p&gt;&#xA;&lt;p&gt;同时，日本政府和日本人民也是两码事，你可以痛恨日本政府至今仍不承认部分在二战时期所犯下的罪行，也不道歉，甚至还修改历史教科书。但日本人民不全都是坏人，他们之中也有像大多数中国人一样，矜矜业业、对人友善的人。&lt;/p&gt;&#xA;&lt;p&gt;不过话又说回来了，真正有能力去日本、美国旅游、工作的人，又有几个会因为几部影片而排外的呢？被情绪所影响与绑架、真正受苦难的还是底层老百姓啊，也只有他们才具有为苦难共情的感情基础。&lt;/p&gt;&#xA;&lt;p&gt;愿我的祖国强大繁荣、亲爱的中国人民智慧与幸福❤️ ——写这句话的时候，忍不住又去网易云打开播放了《如愿》&lt;/p&gt;&#xA;&lt;p&gt;国庆回来再见！👀&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>22 Sep 25 11:28 CST</pubDate>
    </item>
    <item>
      <title>2025年MCP最全指南🍃</title>
      <link>https://www.tunan.fun/blog/translation-mcp-complete-introduction-2025</link>
      <description>译者前言 最近在写一些关于MCP的文章https://www.tunan.fun/blog/mcp-series-01，同时也在开发一些MCP Servers 例如 anki-mpc-serverhttps://github.com/here-tunan/mcp-server-anki。...</description>
      <content:encoded>&lt;h2 id=&#34;译者前言&#34;&gt;译者前言&lt;/h2&gt;&#xA;&lt;p&gt;最近在写一些关于&lt;a href=&#34;https://www.tunan.fun/blog/mcp-series-01&#34;&gt;MCP的文章&lt;/a&gt;，同时也在开发一些MCP Servers 例如 &lt;a href=&#34;https://github.com/here-tunan/mcp-server-anki&#34;&gt;anki-mpc-server&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;在这个学习过程中，于&lt;a href=&#34;https://www.keywordsai.co/blog/introduction-to-mcp&#34;&gt;Keywords AI 论坛&lt;/a&gt;上看到了一篇不错的名为 &lt;a href=&#34;https://www.keywordsai.co/blog/introduction-to-mcp&#34;&gt;A Complete Guide to the Model Context Protocol (MCP) in 2025&lt;/a&gt;的博客文章。&lt;/p&gt;&#xA;&lt;p&gt;于是又忍不住，想翻译成中文分享给中文读者观看。下面是正文内容。&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;这是一个很长的文章，大约需要15-20 分钟的阅读时间。可以先收藏后看。等你读完这篇文章后，你就成MCP的专家了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;介绍&#34;&gt;介绍&lt;/h2&gt;&#xA;&lt;p&gt;大语言模型现如今的能力已经是不可思议的了，但它们却经常独立运作。发展AI应用中最大的一个挑战就是以一种可靠且可扩展的方式源文档，为这些模型提供来自外部数据源（文档、数据库、API等）所需的上下文。通常，AI助手和数据源之间的每一次新集成都需要一个定制的解决方案，随之创建出很多难以维护的一次性的连接器。&lt;/p&gt;&#xA;&lt;p&gt;为了解决这个问题，Anthropic（Claude AI助手背后的团队）于2024年晚些时候提出了&lt;code&gt;模型上下文协议（MCP）&lt;/code&gt;。MCP是一个通用开放的标准，用于桥接AI模型和你的数据和工具所在之处，提供上下文信息因此更容易了。在本文中，我们将深入了解什么是MCP，为什么它是必要的，它是如何工作的，对开发者和更宽泛的AI行业意味着什么？&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是mcp&#34;&gt;什么是MCP？&lt;/h2&gt;&#xA;&lt;p&gt;模型上下文协议是一个开放协议，它规范化了应用程序如何提供上下文信息给AI模型（尤其是指&lt;code&gt;LLMs-大语言模型&lt;/code&gt;）。换言之，它是一门框架，定义了AI工具和外部数据源及服务相互联系的通用语言。Anthropic恰如其分地将MCP描述成“像是一个用于AI应用的USB-C端口”——一个通用的连接器，使得AI模型能以一致的方式连接到各种各样的工具和数据库中。就像USB-C规定了我们如何连接设备，MCP也规定了AI系统如何与不同的数据源及功能模块交互。&lt;/p&gt;&#xA;&lt;p&gt;MCP的目的就是消弭AI模型与它们所需的大量信息间的隔阂。它使得开发者能够在AI应用和数据所在的系统之间搭建出安全且双向的连接通路。例如，使用MCP，一个AI助手可以从你的知识库获取文档、查询数据库或者调用一个外部API，所有这些都是基于一个统一协议。&lt;/p&gt;&#xA;&lt;p&gt;这意味着AI应用不用再被“禁锢”，与企业中的信息和工具相隔离。相反，它们可以连续地获得它们所需要的及时性信息和上下文。MCP的最终目的是，在始终拥有正确上下文的情况下，帮助大模型产生更好、更具相关性的结果。&lt;/p&gt;&#xA;&lt;h2 id=&#34;历史与发展&#34;&gt;历史与发展&lt;/h2&gt;&#xA;&lt;p&gt;MCP由Anthropic发展而来，并于2024年年底开源出来，成为了AI领域那个日益增长问题的回应。在那时，业内还没有通用的标准来集成AI模型和外部数据及服务——每次的集成都是定制化且不能互用的。这就导致了Anthropic工程师所说的M×N问题，指的就是M个不同的AI模型连接到N个不同的工具或数据源时的组合激增。每对新组合都需要定制代码，这使得在现实世界应用中的AI系统难以扩展和维护。&lt;/p&gt;&#xA;&lt;p&gt;Anthropic 看到这个痛点后设计了MCP来规范化AI助手和数据源之间的联系方式。他们在2024年的11月份发布了MCP的正式版，并为开发者们提供了正式的规范说明和SDKs(软件开发工具包)以及一套参考实现。从一开始，MCP就被设计成一个开源项目和开放标准，鼓励社区合作而不是依赖于单一的供应商。&lt;/p&gt;&#xA;&lt;p&gt;早期的尝鲜者快速得拥抱起MCP。像Block（原名Square）和Apollo这些公司在MCP的初始发布期间就快速集成了MCP到了他们的系统中，同时像Zed、Replit、Codeium和Sourcegraph这些开发工具提供商也开始使用MCP来增强他们的平台了。&lt;/p&gt;&#xA;&lt;p&gt;这些早期的支持彰显出市场对通用上下文协议的需求。正如 Block的CTO说的，“像模型上下文协议这种的开源技术就是连接AI和现实世界中各应用的桥梁，”强调了MCP在使AI集成易开发和可协作方面所担任的重要角色。&lt;/p&gt;&#xA;&lt;p&gt;将MCP作为一种开放标准，Anthropic走了一条和其他成功开发标准相似的路（用于Web的Http或用于数据库的SQL）。除了Anthropic团队外，开源社区的贡献者们也出了不少力。现如今已经有了多种官方的不同语言的SDKs（Python、TypeScript、Java/Kotlin），以及持续增多的由社区为各种流行软件构建的开源MCP服务器。简言之，MCP开发是由简化AI-data集成的必要性所推动产生的。它的开源特性使其从一开始促使了一个易于合作的生态系统。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么使用mcp&#34;&gt;为什么使用MCP&lt;/h2&gt;&#xA;&lt;p&gt;为什么企业需要MCP，为什么你可能想在你的项目中使用它？简单说，喂给AI模型上下文信息一直颇具挑战，MCP为此提供了优雅的解决方案。下面是一些关键问题以及MCP是如何解决的：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;支离破碎的集成&lt;/strong&gt;：在MCP出现前，如果你想让AI模型来访问，比如说，你的Google Drive，客户数据库，Slack，你可能要实现三种不同的插件或连接器——每个都有独属的API和特性。这种分散性会导致大量的重复性工作、更多的Bug和过时的集成。MCP用一种标准化的协议替代了这些定制化的实现。你可以使用同一套方案嵌入任何数据源和服务到模型中，极大地简化了开发。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;扩展和维护&lt;/strong&gt;：定制化的集成不能自由地扩展。每次API改变或采用一个新模型，你都要重来一遍。随着时间推移，维护将是一个噩梦。设计MCP的明确目的就是解决这种“多对多”的集成问题。使用MCP后，同时支持该协议的AI工具和数据服务可以立即配对，不要再额外写适配代码。这种标准化意味着当在做某种升级时，联系不会轻易中断以及更容易扩展新用例。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;上下文质量和相关性&lt;/strong&gt;：即使是最智能的AI，它也局限于它拥有的训练数据。如果没有便捷的途径去刷新上下文内容，模型可能就给不出具体的、实时的答案，因为它们是没有能力看到实时数据的。MCP确保模型可以经常在它们所需之时去拉取及时性的相关上下文信息。例如，模型会通过MCP连接到你的知识库中并获取确切的信息，而非从训练数据中推测出一个答案。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;互通性&lt;/strong&gt;：在快速发展的AI领域，你可能会尝试不同的LLM和工具。如果没有某种规范，每次转换都需要以一种新方式重新集成。MCP提供了一个不依赖特定供应方的接口，从而可以随意更换底层模型（比如Claude和其他AI系统）或者添加新的工具，只要双方都遵循MCP协议，集成就能始终有效。这种弹性设计节省了开发时间，也避免了锁定在同一个LLMs提供方，对于开发者和组织来说是巨大的双赢。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;安全性和控制&lt;/strong&gt;：提供上下文意味着经常会给AI一些敏感数据。对于将内部数据发送给第三方服务或进入公域之中，许多开发者（合理地）对此有些谨慎和担忧。MCP在设计之初就考虑了安全性方面的最佳实现。因为它是开源协议，你可以在你自己的基础设施上托管MCP服务，不让数据迈过防火墙。你可以通过协议只暴露所需要的数据。MCP的规范化实现也使得监管和执行AI访问数据的方式更容易（例如，特定的数据需要特定的鉴权）。总之，MCP使你不需要担心数据失控，可以安全地分享数据。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;通过解决这些挑战性问题，MCP让构建具有情景理解力的AI应用变得更简单了。开发者再也不用深陷无休止的定制化集成之中了，可以将精力转移到他们应用的核心逻辑之上。并且完全可以相信MCP能够以一致且安全的方式来处理上下文信息。从而实现更快的开发周期和更健壮的AI解决方案。&lt;/p&gt;&#xA;&lt;h2 id=&#34;mcp的主要优点&#34;&gt;MCP的主要优点&lt;/h2&gt;&#xA;&lt;p&gt;为了总结这些优化，下面罗列了在AL/ML应用中使用上下文协议的主要优点。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;提升AI的表现和相关性&lt;/strong&gt;：因为模型可以容易地获取它所需的信息了，所以它能产生更准确的、内容丰富的回答。Anthropic设计MCP的目的是通过打破数据孤岛，帮助“前沿模型产生更好、更相关的响应”。早期的使用者发现，让AI直接获取相关数据（通过MCP）会让其产生更细致和准确的输出——例如，当AI编程助手处于特定的工程项目上下文中，会用更少的推测来产生更有效的代码。&lt;/li&gt;&#xA;&lt;li&gt;跨系统的互通性：MCP是一个开放标准，不绑定在任何单一的AI供应商或数据平台之上。这意味着它可以作为通用桥梁跨立在多方系统之间。一个遵循MCP的数据源可以给任意支持了MCP的AI客户端提供数据，反之亦然，就像是连接任意设备到一个统一端口。这促进了一个丰富的生态系统，来自不同开发者的不同工具和模型可以立即拆箱即用。这为了新集成提供未来保障。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;开发效率和重复利用&lt;/strong&gt;：使用MCP，开发者不需要为新集成再造轮子。你可以对标规范协议进行一次开发并在多个项目中重复使用。现成的MCP 连接器（服务器）数量还在增长，比如为了一些像Google Drive、Slack、GitHub、database等流行服务所做的MCP服务器。你可以很方便的嵌入它们，而不是再写定制代码。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;模块化与可扩展性&lt;/strong&gt;：MCP推崇AI系统中使用模块化的架构。通过一个良好设计的协议将AI模型和数据源解耦开，每个组件可以独立地扩展和升级。需要添加一个新的数据源？直接添加一个新的MCP服务器就可以了。想要同时使用多个AI模型吗？它们可以通过MCP共享相同的上下文来源。这使可组合的AI代理能够像乐高积木一样进行功能的混合搭配。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;增强安全和合规性&lt;/strong&gt;：MCP支持将数据控制在你的基础设施之上，只通过受控的通道交换所需数据。你可以在本地或者云上运行你的MCP服务器，使用鉴权和签名确保安全。这使得满足数据隐私法规又仍然保留强大的AI能力。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;本质上，MCP创造了双赢的局面：模型表现和能力提升，同时为开发者和组织提升了效率、伸缩性和安全性。&lt;/p&gt;&#xA;&lt;h2 id=&#34;mcp是如何工作的实现概览&#34;&gt;MCP是如何工作的？（实现概览）&lt;/h2&gt;&#xA;&lt;p&gt;所以我们如何真正地使用MCP呢？在上层视角，MCP遵循client-server架构去连接AI模型和外部上下文。这里是一个简单的概览：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;MCP 服务器（数据/工具的连接器）&lt;/strong&gt;：一个MCP服务器与特定的数据源和服务相联系，通过MCP规范向外暴露自己。例如，存在针对Google Drive、Git、GitHub、SQL和Slack的MCP服务器。这些MCP服务器通常是开源且可自行修改的。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MCP 客户端（在AI应用中）&lt;/strong&gt;：AI应用中包含MCP的客户端，用于连接MCP服务器并传递上下文/数据给AI模型。Cluade的桌面程序默认包含这个客户端。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;规范化行为（原语&lt;sup&gt;1&lt;/sup&gt;）&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;提示&lt;/strong&gt;&lt;sup&gt;2&lt;/sup&gt;——模型可以用的指示和模版&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;资源&lt;/strong&gt;&lt;sup&gt;3&lt;/sup&gt;——模型可以阅读的结构化文档&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;工具&lt;/strong&gt;&lt;sup&gt;4&lt;/sup&gt;——模型可以执行的功能&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;客户端原语&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;根节点&lt;/strong&gt;&lt;sup&gt;5&lt;/sup&gt;——入口点（如文件夹或数据库域）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;采样&lt;/strong&gt;&lt;sup&gt;6&lt;/sup&gt;——让服务器向模型询问子问题&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;集成工作流&lt;/strong&gt;：开发者通常为他们想接入的数据运行一个MCP服务器并使用SDKs来联结客户端。这种JSON-RPC的抽象化支持多种环境。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;开发者体验&lt;/strong&gt;：SDKs(Python、TypeScript等语言)简化了MCP服务器的实现。Claude甚至可以帮助编写MCP代码。它是开放、可扩展且对开发者友好的。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;mcp的未来和它对ai行业的影响&#34;&gt;MCP的未来和它对AI行业的影响&lt;/h2&gt;&#xA;&lt;p&gt;MCP仍很年轻，但它的发展之路野心勃勃：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;更多的使用者&lt;/strong&gt;：更多的AI工具、平台和模型供应商采纳了MCP，并将集成标准化贯穿到整个行业。这标志着LLMs和工具之间的兼容性可以做到即插即用。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;远程和云上集成&lt;/strong&gt;：基于网络的MCP安全使用一直在增长——云托管的MCP服务器，远程AI代理和企业中心正蓬勃发展。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;多模式的支持&lt;/strong&gt;：MCP最终可处理图像、声音和视频内容。未来的AI可以通过MCP将图表、录制内容或者其他渲染结果纳入到上下文信息中。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;标准化的影响&lt;/strong&gt;：如果MCP获得了广泛的支持，其他工具会天然地实现它——例如提供了MCP端点的CRMs或者项目管理工具，从而实现无缝接入AI。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;社区驱动的治理&lt;/strong&gt;：Anthropic计划为MCP进行开放的管理——可能形成一个独立的标准组织。社区的声音将影响协议的演变。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;&#xA;&lt;p&gt;模型上下文协议在AI世界中是一个振奋人心的发展成果，因为它解决了一个实际的问题：如何将强大的AI模型和它所需且真正有用的外部知识和数据连接起来。通过提供一个共用的上下文协议，MCP使开发者开发智能应用更加简单，这些智能应用的视野和能力也超出了内置的训练集。&lt;/p&gt;&#xA;&lt;p&gt;在这篇文章中，我们介绍了MCP，看到了它为什么被创造出来，它所提供的好处，它是如何工作的以及它的未来方向。对于开发者和科技爱好者而言，MCP代表了朝着更互联、更灵活、更易于协作的AI迈出的重要一步。&lt;/p&gt;&#xA;&lt;p&gt;随着这个标准被接纳，我们可以眺望未来，在未来连接AI模型到新的数据源将和插入一台设备一样简单——由于像MCP这种的创新，身边的AI系统将变得更集成和更加容易理解上下文语境。&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2 id=&#34;注&#34;&gt;注&lt;/h2&gt;&#xA;&lt;ol type=&#34;1&#34;&gt;&#xA;&lt;li&gt;原语-Primitives 在英文里，primitive 本义是 “原始的、基础的、最简单的”。在计算机/数学/工程里，它常常翻译为：基本元素、原语、基础构件。&lt;/li&gt;&#xA;&lt;li&gt;提示-Prompts 是AI中最经常用的英文之一。&lt;/li&gt;&#xA;&lt;li&gt;资源-Resources 指MCP协议中的资源，告诉AI模型MCP服务器都能提供哪些资源。&lt;/li&gt;&#xA;&lt;li&gt;工具-Tools 指MCP协议中的工具方案，告诉AI模型MCP服务器都能提供哪些方法来处理资源。&lt;/li&gt;&#xA;&lt;li&gt;根节点-Roots&lt;/li&gt;&#xA;&lt;li&gt;采样-Sampling 指服务器从模型中“采集”或“获取”对特定子问题的响应样本&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;为了贴合中文读者的语言习惯，全文基本上都是古法翻译的，如有错误之处烦请指出、不吝赐教。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;本文翻译尚未获取授权，如有侵权，请联系我删除&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;原文请点击：&lt;a href=&#34;https://www.keywordsai.co/blog/introduction-to-mcp&#34;&gt;A Complete Guide to the Model Context Protocol (MCP) in 2025&lt;/a&gt;&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>19 Sep 25 17:22 CST</pubDate>
    </item>
    <item>
      <title>【保姆级教程-从0开始开发MCP服务器】一、MCP压根没有你想象得那么难！</title>
      <link>https://www.tunan.fun/blog/mcp-series-01</link>
      <description>前言 这个系列主要是介绍MCP是什么，如何连接MCP Server以及如何自己进行MCP Server开发。 这个系列将包含四篇文章，采取渐进式的学习方式来逐渐掌握MCP�...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;这个系列主要是介绍MCP是什么，如何连接MCP Server以及如何自己进行MCP Server开发。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这个系列将包含四篇文章，采取渐进式的学习方式来逐渐掌握MCP开发： - &lt;strong&gt;先帮助大家理解MCP的核心概念和协议规范&lt;/strong&gt;（本文内容） - 尝试在Claude Code中连接几个MCP Server并感受其所带来的魅力 - 手动去搭建一个本地的stdio Mcp Server - 如何创建企业级的MCP Server&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么要学习mcp&#34;&gt;为什么要学习MCP&lt;/h2&gt;&#xA;&lt;p&gt;学习新知识前，应该先评估它的价值以及所需投入的时间和精力。依我拙见，就当下的阶段，学习MCP的所能带来的价值还是很大的。接下来我先谈谈我的个人观点。&lt;/p&gt;&#xA;&lt;h3 id=&#34;打造更高效的工作流&#34;&gt;打造更高效的工作流&lt;/h3&gt;&#xA;&lt;p&gt;AI的强大之处在于，你给它很少的数据和要求，它就能帮你产生更多的信息，甚至生成代码、文档和图片视频等。我们在使用AI的时候，痛点往往不是AI的能力不行，而是我们不能把存在其他地方(比如数据库、软件等)的数据喂给它，它也不能把分析的结果输出到某个特定的位置。而MCP正是帮助AI进一步扩展其能力边界的技术。&lt;/p&gt;&#xA;&lt;p&gt;我是一个长期的英文学习者，我积累和背诵单词的其中一个场景是这样的：我通过读英文小说来积累单词。当我遇到不懂的单词，先是标注下来，等读完几页后连带着所在句子一起摘录到一个文件中。然后再去翻译网站或者GPT中去查找相关读音和含义，最后逐个记录在Anki（一个符合记忆曲线的背单词的软件）中。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250917144814197.png&#34; alt=&#34;image-20250917144814197&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;在这个过程中，从书上抄写单词和句子到文件中这一步必须由我来完成，AI无法替代（目前无法替代，我也不想让它替代这一步）。但文件的读取、单词读音和含义的查找可以由AI完成。如果能够打通AI和Anki，就可以让AI把查找结果自动写入Anki，我只需要专注于背诵即可——查字典和写入Anki占据了整个流程的很大一部分时间。&lt;/p&gt;&#xA;&lt;p&gt;如果你自己开发了一个Anki MCP Server，你就可以打通上面说的连接，在第三篇文章中，我们就以此为例打造一个anki mcp server。&lt;/p&gt;&#xA;&lt;p&gt;同样的场景还有很多很多，再比如Notion(一个强大的笔记软件)，它自身提供了相应的MCP server了，我只要在AI助手中添加好MCP server，登录完成鉴权后，就可以直接在AI助手去查询我的数据，利用大模型进行数据分析并把我所需的分析结果回写到Notion中。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250917145641418.png&#34; alt=&#34;image-20250917145641418&#34; style=&#34;zoom: 33%;&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;在第二章节中我们将展示如何操作。&lt;/p&gt;&#xA;&lt;p&gt;如果说几年前ChatGPT的出现打开了我们新世界的大门。那么当你现在有能力建立AI与其他软件或者系统的桥梁后，你会发现新世界的大门再次打开了。&lt;/p&gt;&#xA;&lt;h3 id=&#34;提升个人竞争力和技术影响力&#34;&gt;提升个人竞争力和技术影响力&lt;/h3&gt;&#xA;&lt;p&gt;MCP本质上是连接AI模型和外部系统的桥梁，掌握这项技术的人会成为企业AI转型中的关键角色。目前很多企业正在接入AI大模型，而MCP正是连接LLMs和企业系统的桥梁。很多人的KPI中可能也包含创新这一项，如果你能通过自建MCP Server来打通LLMs和你们的企业系统提升企业的软件能力、服务能力、工作效率，这不就是一种创新吗。&lt;/p&gt;&#xA;&lt;p&gt;再说句稍微糙一点的话，在一家小公司里，只有你会开发MCP Server，别人都不会，你为大家介绍这个新工具，大家可能就真的会觉得你挺牛，最起码挺赶时髦。&lt;/p&gt;&#xA;&lt;h3 id=&#34;蓝海市场&#34;&gt;蓝海市场&lt;/h3&gt;&#xA;&lt;p&gt;MCP 是一项新的开放标准，在2024-2025年期间MCP生态系统正在快速增长和融合，相当多的软件都推出了自己家的MCP Server。目前市场上真正了解MCP开发的工程师还很少，但需求却在持续增长。如果你懂得MCP的开发，说不定你就能找到一份不错的相关工作。&lt;/p&gt;&#xA;&lt;p&gt;但我觉得如果怀着找工作的心态来学习MCP Server可能就会丧失学习乐趣了，所以我更多地还是关注前两点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MCP 能给你的生活带来什么&lt;/li&gt;&#xA;&lt;li&gt;MCP 能给你的工作带来什么&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;学习难度&#34;&gt;学习难度&lt;/h2&gt;&#xA;&lt;p&gt;其实开发一个MCP Server并不复杂。如果你是一个有几年工作经验的开发者，你会发现它相当简单——你只需要整合外部系统暴露的能力，将其封装成符合MCP协议的接口即可。&lt;/p&gt;&#xA;&lt;p&gt;MCP协议支持由多种语言来实现。实际上MCP协议在Python和TypeScript中已经有了完善的SDK了，基本上两三天就能学会并且自己搭建出一个小型的Mcp Server。&lt;/p&gt;&#xA;&lt;p&gt;如果你有了像Claude Code、Codex、cursor这些AI代码工具，或许只需要几个小时就能完成——你甚至不需要会Python和TypeScript。&lt;/p&gt;&#xA;&lt;p&gt;所以MCP开发本身并不是一件难事，并且在未来也会有更多其他编程语言的SDK，可能在随后的几年中人人都会开发MCP Server了，但就目前而言，它还是会成为你的增分项——也可以此为乐趣。&lt;/p&gt;&#xA;&lt;h2 id=&#34;mcp-到底是什么东西呢&#34;&gt;MCP 到底是什么东西呢？&lt;/h2&gt;&#xA;&lt;p&gt;MCP 全称是 Model Context Protocol，翻译过来就是模型上下文协议。Model指的就是AI模型，一般指大语言模型（Large language models-LLMs)。在MCP中Context是重点，但协议是关键。&lt;/p&gt;&#xA;&lt;h3 id=&#34;context-上下文信息&#34;&gt;Context 上下文信息&lt;/h3&gt;&#xA;&lt;p&gt;我们先来理解Context（上下文信息）是什么，当你与LLMs对话时，你提出的问题、指令或其他相关信息就是上下文信息。通过提供这些Context，MCP使得AI模型能够超越其训练数据的限制，实时获取最新的信息，从而生成更具针对性和准确性的回答。这就是早期的ChatGPT横空出世时Context的内容，基本上就是自然语言文字内容。&lt;/p&gt;&#xA;&lt;p&gt;随着AI产品的不断进步，慢慢地它有了能读取你的声音、本地文档、网页的能力（最后还是转为自然语言文字），这进一步丰富了Context中的内容。&lt;/p&gt;&#xA;&lt;p&gt;但始终有一些AI难以触及的信息域，比如数据库中的数据，本地软件中的数据等等。现在我们就是要将Context的内容进一步向这些地方去扩展。&lt;/p&gt;&#xA;&lt;h3 id=&#34;通用的协议&#34;&gt;通用的协议&lt;/h3&gt;&#xA;&lt;h4 id=&#34;为什么需要创造一个协议&#34;&gt;为什么需要创造一个协议&lt;/h4&gt;&#xA;&lt;p&gt;思考这样一个场景，如果你是一个LLMs的供应商公司，现在有个客户希望把你们提供的LLMs和其公司内部的数据系统打通。是不是要在LLMs开发读取客户系统的特定代码？&lt;/p&gt;&#xA;&lt;p&gt;如果要服务多个客户，难道要为每个客户定制不同版本的LLMs吗？即使加了一层适配层，也需要为每个客户编写特定的适配代码。如果是一家小公司，依靠出售这种定制化软件服务为生，虽然可行，但难以持续发展。因为它需要消耗大量的人力物力去做与客户系统和功能相关的定制开发，而无法专注于核心的大模型开发。&lt;/p&gt;&#xA;&lt;p&gt;如果能有一个协议或者开发标准，不同的客户只需要各自按照这个协议去实现自己的适配层就可以了。&lt;/p&gt;&#xA;&lt;p&gt;如果你是一个后端开发者，你可能会在此嗅到一点点设计原则和设计模式的味道了。由LLMs规定好协议，使用LLMs的客户自己去实现MCP协议向大模型提供Context，这是“实现依赖抽象”原则的思想。提供一个适配层（即MCP Server）来建立LLMs和提供Context的系统的桥梁，这是适配器模式。&lt;/p&gt;&#xA;&lt;h4 id=&#34;anthropic提出开放标准&#34;&gt;Anthropic提出开放标准&lt;/h4&gt;&#xA;&lt;p&gt;这也是为什么在2024年Anthropic公司（因Claude AI而声名大噪）提出了Model Context Protocol的原因——之一。&lt;/p&gt;&#xA;&lt;p&gt;为什么说是之一呢？因为我们刚刚是站在LLMs的提供方来看的。如果你是使用LLMs的一方，当你按照某个LLMs公司的协议规范实现了适配器并成功接入后，如果需要切换到另一家的LLMs，而两家的协议完全不同，就需要重新开发了。&lt;/p&gt;&#xA;&lt;p&gt;所以这时候Anthropic所提出的MCP是一种通用的、开放的规范，希望所有的LLMs的厂商都能遵守它来开发大模型工具，从而LLMs的使用者也只需要实现一套适配器就可以了。&lt;/p&gt;&#xA;&lt;p&gt;Anthropic对MCP做出了一个十分恰当的比喻，它将MCP描述为“类似于AI应用的USB-C端口”——一个通用的连接器，允许AI模型以一致的方式连接到各种工具和数据库。正如USB-C标准化了我们的设备连接方式一样，MCP也标准化了AI系统与不同数据源和功能接口的方式。&lt;/p&gt;&#xA;&lt;h4 id=&#34;我也想自己定义一个通用协议&#34;&gt;我也想自己定义一个通用协议&lt;/h4&gt;&#xA;&lt;p&gt;为什么是Anthropic提出的？我个人觉得是因为Claude AI的设计者深刻地抓住了用户的痛点（没有通用的连接大模型和手上数据和工具的连接器），这家公司走在了AI发展的最前沿，所以想到建设这样一个规范化的协议。但他可能不是第一个想出这个概念的公司，只不过受其公司本身的影响力，这个协议做到了很好的推广，从而被广泛认可，其他大模型公司也纷纷采纳并实现。&lt;/p&gt;&#xA;&lt;p&gt;理论上，任何普通人都可以来定义一个新的协议，只不过不会有人认可。不是因为创造者将其定义成通用协议所以是通用的，而是因为所有人都知道该协议且接纳，所以成为了通用协议。&lt;/p&gt;&#xA;&lt;h2 id=&#34;初识-mcp-server&#34;&gt;初识 MCP Server&lt;/h2&gt;&#xA;&lt;p&gt;如果我们理解了上面的模型上下文协议，接下来再来理解MCP Server就容易了。我们还是拿刚刚Anki为例子，我们需要建立一个Anki MCP Server，封装Anki的数据访问接口，然后通过LLMs工具（比如Claude Code）来访问它。&lt;/p&gt;&#xA;&lt;p&gt;那么整个链路是这样的：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Claude Code（内置了MCP协议的MCP客户端） → 你的Anki MCP Server → Anki数据库/API&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;由此可见，MCP Server是实现MCP协议的具体实现，充当AI模型与外部系统之间的桥梁。从工程的角度来看，这是一个典型的CS架构（Client-Server）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;&#xA;&lt;p&gt;本文从零开始介绍了MCP（Model Context Protocol）的核心概念，让我们理解了它并非什么高不可攀的技术，而是一个优雅且实用的解决方案。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;关键要点回顾：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol type=&#34;1&#34;&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP的本质&lt;/strong&gt;：它是连接AI模型与外部系统的标准化协议，就像USB-C统一了设备连接方式一样，MCP统一了AI与各种数据源的连接方式。&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;为什么需要MCP&lt;/strong&gt;：&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;解决了LLMs无法直接访问私有数据和系统的痛点&lt;/li&gt;&#xA;&lt;li&gt;避免了为每个客户或每个LLMs厂商重复开发适配层的问题&lt;/li&gt;&#xA;&lt;li&gt;提供了统一的标准，让开发者只需实现一次就能适配多个AI工具&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;3&#34; type=&#34;1&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;学习价值&lt;/strong&gt;：&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;能够打造更高效的个人工作流（这个需要自己去根据自己的场景去挖掘）&lt;/li&gt;&#xA;&lt;li&gt;在企业AI转型中成为关键技术角色&lt;/li&gt;&#xA;&lt;li&gt;目前仍处于蓝海市场，掌握此技术具有先发优势&lt;/li&gt;&#xA;&lt;li&gt;学习成本低，有现成SDK支持，几天就能上手&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;通过本文的学习，相信你已经对MCP有了清晰的认识。它不是什么神秘的黑科技，而是基于成熟的软件设计模式（如适配器模式）和设计原则（如依赖倒置原则）设计出来的一种通用的解决方案。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;下一步的学习路径：&lt;/strong&gt; - 第二篇：实战体验 - 在Claude Code中连接和使用现有的MCP Server，亲身感受MCP带来的能力提升 - 第三篇：动手开发 - 深入MCP协议细节，开发一个本地stdio传输的Anki MCP Server - 第四篇：企业实践 - 构建生产级的HTTP传输远程MCP Server&lt;/p&gt;&#xA;&lt;p&gt;记住，MCP压根没有你想象得那么高大上——它只是一个让AI更好地为我们服务的工具。掌握它，你就掌握了连接AI与各个系统的钥匙。&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>17 Sep 25 15:07 CST</pubDate>
    </item>
    <item>
      <title>🔥 从语言设计者的角度来看：Java String为什么不能被修改？</title>
      <link>https://www.tunan.fun/blog/java-string-design</link>
      <description>前言 很多Java的初学者可能都会有这样的疑问：“我常常听到String对象是不可变的，但当我每看到下面的代码时又深感矛盾，这不是可以变吗？”。...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;很多Java的初学者可能都会有这样的疑问：“我常常听到String对象是不可变的，但当我每看到下面的代码时又深感矛盾，这不是可以变吗？”。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb1&#34;&gt;&lt;pre class=&#34;sourceCode java&#34;&gt;&lt;code class=&#34;sourceCode java&#34;&gt;&lt;span id=&#34;cb1-1&#34;&gt;&lt;a href=&#34;#cb1-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; a = &lt;span class=&#34;st&#34;&gt;&amp;quot;hello, world!&amp;quot;&lt;/span&gt;;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-2&#34;&gt;&lt;a href=&#34;#cb1-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;a = a.&lt;span class=&#34;fu&#34;&gt;replace&lt;/span&gt;(&lt;span class=&#34;st&#34;&gt;&amp;quot;,&amp;quot;&lt;/span&gt;, &lt;span class=&#34;st&#34;&gt;&amp;quot;!&amp;quot;&lt;/span&gt;);&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-3&#34;&gt;&lt;a href=&#34;#cb1-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;System&lt;/span&gt;.&lt;span class=&#34;fu&#34;&gt;out&lt;/span&gt;.&lt;span class=&#34;fu&#34;&gt;println&lt;/span&gt;(a);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;“变量a的值确实发生了改变啊！”&lt;/p&gt;&#xA;&lt;p&gt;这个问题的背后至少涉及到以下几方面的知识内容：&lt;/p&gt;&#xA;&lt;ol type=&#34;1&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;内存机制&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;性能考虑&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;线程安全&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;哈希一致&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;而Java之所以设计 String 为 &lt;strong&gt;不可变 (immutable)&lt;/strong&gt;，又是以上方面交织权衡后的结果。&lt;/p&gt;&#xA;&lt;p&gt;所以很多面试官在面试一些工作经验较少的Java工程师时，会经常将该问题作为面试题之一。以此考察工程经验尚浅的开发者们的基础知识掌握程度。&lt;/p&gt;&#xA;&lt;p&gt;接下来，我们就从一个语言设计者的角度慢慢剖析为什么要将String类型设计成不可变。&lt;/p&gt;&#xA;&lt;h2 id=&#34;你会准备把-string-对象放在哪里&#34;&gt;你会准备把 String 对象放在哪里？&lt;/h2&gt;&#xA;&lt;p&gt;基本上所有语言的内存空间在设计上都是由两部分组成的：栈和堆。JVM的设计也不例外，主要部分就是虚拟机栈（VM Stack）和堆（Heap）。&lt;/p&gt;&#xA;&lt;p&gt;栈中存的是&lt;strong&gt;局部基本类型变量、对象引用和方法&lt;/strong&gt;，它随着方法调用自动分配和释放。而堆中存的是&lt;strong&gt;Java中所有的对象及数组的实际数据&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;我来举个更具体的例子，如果在一个方法中定义一个int基本类型的变量和一个Integer类型的变量：&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb2&#34;&gt;&lt;pre class=&#34;sourceCode java&#34;&gt;&lt;code class=&#34;sourceCode java&#34;&gt;&lt;span id=&#34;cb2-1&#34;&gt;&lt;a href=&#34;#cb2-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;dt&#34;&gt;int&lt;/span&gt; a = &lt;span class=&#34;dv&#34;&gt;200&lt;/span&gt;;&lt;/span&gt;&#xA;&lt;span id=&#34;cb2-2&#34;&gt;&lt;a href=&#34;#cb2-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;Integer&lt;/span&gt; b = &lt;span class=&#34;dv&#34;&gt;200&lt;/span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;两个200的值在内存中的表现是不同的，因为int是基本类型变量，所以这个200会和变量名a一起直接会放在栈中（栈的操作简单，性能更高）。而Integer变量对应这个200的值则会分配到堆内存中，栈中只存储变量名b和堆中这个200所在位置的引用。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250910134104683.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250910134104683&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;同样地，如果声明一个String类型的变量并赋值：&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb3&#34;&gt;&lt;pre class=&#34;sourceCode java&#34;&gt;&lt;code class=&#34;sourceCode java&#34;&gt;&lt;span id=&#34;cb3-1&#34;&gt;&lt;a href=&#34;#cb3-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; s = &lt;span class=&#34;st&#34;&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;它会和Integer一样，在堆内存中开辟一个空间存储“Hello”，变量s和内存引用则存到栈中。&lt;/p&gt;&#xA;&lt;p&gt;如果你是设计师，为什么不把String设计成一个基本类型也放到栈中呢？&lt;/p&gt;&#xA;&lt;p&gt;因为String的长度是不可控的。你可能可以根据业务场景确定下来关系数据库中某个varchar类型的字段的长度，但你却没办法确定一个用于任意场景的String的长度。所以这种长度不固定的类型无法存储到栈中，只能放在堆内存这片“汪洋大海”中（相比栈空间，堆空间确实是海量的）。&lt;/p&gt;&#xA;&lt;p&gt;所以如果让你来选择存储位置——&lt;strong&gt;String 类型变量对应的值一定是要放在堆内存中的&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;字符串常量池性能优化的智慧&#34;&gt;字符串常量池：性能优化的智慧&lt;/h2&gt;&#xA;&lt;p&gt;既然String对象都要存储在堆内存中，那么大量频繁地创建字符串，将会极大程度地影响程序的性能。为了解决这个问题，Java引入了&lt;strong&gt;字符串常量池（String Intern Pool）&lt;/strong&gt;的概念，它的存在就是为了避免相同字符串的重复创建。&lt;/p&gt;&#xA;&lt;p&gt;让我们通过一个具体例子来理解常量池的工作机制：&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb4&#34;&gt;&lt;pre class=&#34;sourceCode java&#34;&gt;&lt;code class=&#34;sourceCode java&#34;&gt;&lt;span id=&#34;cb4-1&#34;&gt;&lt;a href=&#34;#cb4-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; s1 = &lt;span class=&#34;st&#34;&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;;  &lt;span class=&#34;co&#34;&gt;// 字面量方式&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-2&#34;&gt;&lt;a href=&#34;#cb4-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; s2 = &lt;span class=&#34;kw&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt;(&lt;span class=&#34;st&#34;&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;);  &lt;span class=&#34;co&#34;&gt;// new方式&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-3&#34;&gt;&lt;a href=&#34;#cb4-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;System&lt;/span&gt;.&lt;span class=&#34;fu&#34;&gt;out&lt;/span&gt;.&lt;span class=&#34;fu&#34;&gt;println&lt;/span&gt;(s1 == s2);  &lt;span class=&#34;co&#34;&gt;// false (不同引用)&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb4-4&#34;&gt;&lt;a href=&#34;#cb4-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;System&lt;/span&gt;.&lt;span class=&#34;fu&#34;&gt;out&lt;/span&gt;.&lt;span class=&#34;fu&#34;&gt;println&lt;/span&gt;(s1.&lt;span class=&#34;fu&#34;&gt;equals&lt;/span&gt;(s2));  &lt;span class=&#34;co&#34;&gt;// true (内容相同)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;这里发生了什么？&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;String s1 = &#34;hello&#34;&lt;/code&gt;: “hello” 是&lt;strong&gt;编译期常量&lt;/strong&gt;，会被放进&lt;strong&gt;字符串常量池&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;String s2 = new String(&#34;hello&#34;)&lt;/code&gt;: 会在&lt;strong&gt;堆&lt;/strong&gt;上新建一个String对象，内容拷贝自常量池里的 “hello”&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;常量池的演进历史：&lt;/strong&gt; - Java 7之前：字符串常量池位于永久代 - Java 7之后：常量池移到了堆内存中&lt;/p&gt;&#xA;&lt;p&gt;常量池中存储的不是字符串对象本身，而是指向堆中字符串对象的引用。这个优化设计使得相同内容的字符串可以共享内存空间，大大提高了内存使用效率。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;💡 为了全文的简单性，我们将字符串的存储统一描述为存储在堆内存中，但实际的内存管理比这更加精细和优化。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;你会希望string可变吗&#34;&gt;你会希望String可变吗？&lt;/h2&gt;&#xA;&lt;p&gt;如果现在是一名设计者，你会希望String是可变的吗？&lt;/p&gt;&#xA;&lt;p&gt;从现实的角度来看，我会希望它可变，比如我用一个String对象来代表一篇文章的内容，我想改一下文章内容，只要改一下String对象就可以了。&lt;/p&gt;&#xA;&lt;p&gt;但如果String在Java的世界中是可变的，会带来什么问题呢？&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb5&#34;&gt;&lt;pre class=&#34;sourceCode java&#34;&gt;&lt;code class=&#34;sourceCode java&#34;&gt;&lt;span id=&#34;cb5-1&#34;&gt;&lt;a href=&#34;#cb5-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; a = &lt;span class=&#34;st&#34;&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;现在a指向一块内存地址，如果现在有多个线程去修改a的值，即修改同一块内存内容，就一定会出现线程安全问题（这和在多线程中操作同一个List是一样的道理）。&lt;/p&gt;&#xA;&lt;p&gt;如果要解决这个问题，又要进行加锁操作，但是一旦上升到锁操作，性能就会变差。并且String作为一个最常用的类型之一，对它加锁，那这个语言基本上可以退出市场了。&lt;/p&gt;&#xA;&lt;p&gt;除此之外，String还经常作为哈希数据结构（HashMap）的Key，如果一个key-value加入到Hash中，这个key还能随便在其他位置改变，那么这个HashMap也就彻底乱套了。&lt;/p&gt;&#xA;&lt;p&gt;所以有时候挺反直觉的，站在用户的角度上，我们希望String可变，但是这个可变性会造成大量的安全性问题和解决安全性带来的性能问题。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;所以从安全性来看，String不能变。&lt;/strong&gt;大部分语言也是这样设计String的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;可是如果不可变又是怎么修改的呢&#34;&gt;可是如果不可变，又是怎么修改的呢？&lt;/h2&gt;&#xA;&lt;p&gt;就像前面说的，用户当然希望能对一个String的变量来回修改。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb6&#34;&gt;&lt;pre class=&#34;sourceCode java&#34;&gt;&lt;code class=&#34;sourceCode java&#34;&gt;&lt;span id=&#34;cb6-1&#34;&gt;&lt;a href=&#34;#cb6-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; a = &lt;span class=&#34;st&#34;&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;;&lt;/span&gt;&#xA;&lt;span id=&#34;cb6-2&#34;&gt;&lt;a href=&#34;#cb6-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;a = &lt;span class=&#34;st&#34;&gt;&amp;quot;Hello, world!&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;这在Java中当然是允许的，这方便了用户对一个变量值的改变。但实际上，这不叫修改，它不是对&lt;code&gt;Hello&lt;/code&gt;所在的内存内容做了修改，而是新开辟了一块内存空间，并将内存地址重新设置为a变量的引用。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250910141635958.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250910141635958&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;让我们回到最开始的那段代码：&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb7&#34;&gt;&lt;pre class=&#34;sourceCode java&#34;&gt;&lt;code class=&#34;sourceCode java&#34;&gt;&lt;span id=&#34;cb7-1&#34;&gt;&lt;a href=&#34;#cb7-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; a = &lt;span class=&#34;st&#34;&gt;&amp;quot;hello, world!&amp;quot;&lt;/span&gt;;&lt;/span&gt;&#xA;&lt;span id=&#34;cb7-2&#34;&gt;&lt;a href=&#34;#cb7-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;a = a.&lt;span class=&#34;fu&#34;&gt;replace&lt;/span&gt;(&lt;span class=&#34;st&#34;&gt;&amp;quot;,&amp;quot;&lt;/span&gt;, &lt;span class=&#34;st&#34;&gt;&amp;quot;!&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;它实际上并没有修改原来的String，而是返回了一个新的String对象。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250910142127812.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250910142127812&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;strong&gt;String是通过生成一个新的String对象，将新的对象的内存地址重新分配给原来的变量来实现&lt;code&gt;“修改“&lt;/code&gt;的。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;如何做到不可变的&#34;&gt;如何做到不可变的？&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;String类底层使用的是一个char数组，使用private和final进行修饰，并且没有暴露出能够直接修改该char[]的方法，外部无法直接修改这个数组内容；并且String本身也是final修饰的，避免了Java中的继承机制来破坏这种不可变性。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250910142536324.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250910142536324&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;从Java 9开始，String底层实现改为byte数组（byte[]），结合编码标识来存储字符，这是为了节省内存空间（Latin-1字符只需要1个字节）&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;频繁修改岂不是会导致内存浪费和性能下降&#34;&gt;频繁“修改”岂不是会导致内存浪费和性能下降？&lt;/h2&gt;&#xA;&lt;p&gt;是的，如果代码中大量存在类似下面的拼接逻辑：&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb8&#34;&gt;&lt;pre class=&#34;sourceCode java&#34;&gt;&lt;code class=&#34;sourceCode java&#34;&gt;&lt;span id=&#34;cb8-1&#34;&gt;&lt;a href=&#34;#cb8-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; a = &lt;span class=&#34;st&#34;&gt;&amp;quot;xxxx&amp;quot;&lt;/span&gt;;&lt;/span&gt;&#xA;&lt;span id=&#34;cb8-2&#34;&gt;&lt;a href=&#34;#cb8-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; b = &lt;span class=&#34;st&#34;&gt;&amp;quot;xxxx&amp;quot;&lt;/span&gt;;&lt;/span&gt;&#xA;&lt;span id=&#34;cb8-3&#34;&gt;&lt;a href=&#34;#cb8-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; c = a + b;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;确实会大量创建新对象，造成内存浪费以及伴随的性能开销。&lt;/p&gt;&#xA;&lt;p&gt;如果你是设计者，如何避免这个问题呢？我想你一定听说过，使用&lt;strong&gt;StringBuilder&lt;/strong&gt;来实现字符串拼接吧。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb9&#34;&gt;&lt;pre class=&#34;sourceCode java&#34;&gt;&lt;code class=&#34;sourceCode java&#34;&gt;&lt;span id=&#34;cb9-1&#34;&gt;&lt;a href=&#34;#cb9-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;// StringBuilder 示例&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb9-2&#34;&gt;&lt;a href=&#34;#cb9-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;StringBuilder&lt;/span&gt; sb = &lt;span class=&#34;kw&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;bu&#34;&gt;StringBuilder&lt;/span&gt;(&lt;span class=&#34;st&#34;&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;);&lt;/span&gt;&#xA;&lt;span id=&#34;cb9-3&#34;&gt;&lt;a href=&#34;#cb9-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;sb.&lt;span class=&#34;fu&#34;&gt;append&lt;/span&gt;(&lt;span class=&#34;st&#34;&gt;&amp;quot; World&amp;quot;&lt;/span&gt;);&lt;/span&gt;&#xA;&lt;span id=&#34;cb9-4&#34;&gt;&lt;a href=&#34;#cb9-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;sb.&lt;span class=&#34;fu&#34;&gt;insert&lt;/span&gt;(&lt;span class=&#34;dv&#34;&gt;5&lt;/span&gt;, &lt;span class=&#34;st&#34;&gt;&amp;quot;,&amp;quot;&lt;/span&gt;);&lt;/span&gt;&#xA;&lt;span id=&#34;cb9-5&#34;&gt;&lt;a href=&#34;#cb9-5&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;sb.&lt;span class=&#34;fu&#34;&gt;delete&lt;/span&gt;(&lt;span class=&#34;dv&#34;&gt;6&lt;/span&gt;, &lt;span class=&#34;dv&#34;&gt;11&lt;/span&gt;);&lt;/span&gt;&#xA;&lt;span id=&#34;cb9-6&#34;&gt;&lt;a href=&#34;#cb9-6&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;System&lt;/span&gt;.&lt;span class=&#34;fu&#34;&gt;out&lt;/span&gt;.&lt;span class=&#34;fu&#34;&gt;println&lt;/span&gt;(sb); &lt;span class=&#34;co&#34;&gt;// Hello&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;&lt;strong&gt;使用StringBuilder就避免了每次操作都需要生成一个新的String的内存浪费和性能开销了。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;实际上，现代JVM对简单的字符串拼接（如a + b）会自动优化为StringBuilder操作。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;如果你是一个优秀的语言设计者，你自然也会为其创建线程安全的版本：&lt;strong&gt;StringBuffer&lt;/strong&gt;。作为开发者，也应该时刻谨记，一旦涉及到并发多线程场景，一定要使用线程安全的类。&lt;/p&gt;&#xA;&lt;h2 id=&#34;string-真的就不能变吗&#34;&gt;String 真的就不能变吗？&lt;/h2&gt;&#xA;&lt;p&gt;大部分语言中确实不希望String是可变的，但近几年有另一门正在流行的语言把String设计成了可变类型了！&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb10&#34;&gt;&lt;pre class=&#34;sourceCode rust&#34;&gt;&lt;code class=&#34;sourceCode rust&#34;&gt;&lt;span id=&#34;cb10-1&#34;&gt;&lt;a href=&#34;#cb10-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;kw&#34;&gt;let&lt;/span&gt; a &lt;span class=&#34;op&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;st&#34;&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb10-2&#34;&gt;&lt;a href=&#34;#cb10-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;kw&#34;&gt;let&lt;/span&gt; a &lt;span class=&#34;op&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;dt&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;pp&#34;&gt;::&lt;/span&gt;from(&lt;span class=&#34;st&#34;&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;)&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;这是Rust中声明一个字符串的两种方式，看起来和Java没有什么不同。&lt;/p&gt;&#xA;&lt;p&gt;“hello”是字面量，类似于Java中常量池中的字符串；&lt;code&gt;String::from(&#34;hello&#34;)&lt;/code&gt;也和Java一样，会&lt;strong&gt;在堆上分配一个可变的 String 对象&lt;/strong&gt;，内容拷贝自字面量 “hello”。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;但是Rust中的String对象是可变的。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb11&#34;&gt;&lt;pre class=&#34;sourceCode rust&#34;&gt;&lt;code class=&#34;sourceCode rust&#34;&gt;&lt;span id=&#34;cb11-1&#34;&gt;&lt;a href=&#34;#cb11-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;kw&#34;&gt;fn&lt;/span&gt; main() &lt;span class=&#34;op&#34;&gt;{&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-2&#34;&gt;&lt;a href=&#34;#cb11-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;let&lt;/span&gt; s1 &lt;span class=&#34;op&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;st&#34;&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;co&#34;&gt;// &amp;amp;str&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-3&#34;&gt;&lt;a href=&#34;#cb11-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;kw&#34;&gt;mut&lt;/span&gt; s2 &lt;span class=&#34;op&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;dt&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;pp&#34;&gt;::&lt;/span&gt;from(&lt;span class=&#34;st&#34;&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;)&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;co&#34;&gt;// String&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-4&#34;&gt;&lt;a href=&#34;#cb11-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-5&#34;&gt;&lt;a href=&#34;#cb11-5&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;co&#34;&gt;// s1.push_str(&amp;quot; world&amp;quot;); // ❌ 报错：&amp;amp;str 不可变&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-6&#34;&gt;&lt;a href=&#34;#cb11-6&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    s2&lt;span class=&#34;op&#34;&gt;.&lt;/span&gt;push_str(&lt;span class=&#34;st&#34;&gt;&amp;quot; world&amp;quot;&lt;/span&gt;)&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;    &lt;span class=&#34;co&#34;&gt;// ✅ 可以修改&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-7&#34;&gt;&lt;a href=&#34;#cb11-7&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;pp&#34;&gt;println!&lt;/span&gt;(&lt;span class=&#34;st&#34;&gt;&amp;quot;{}&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; s2)&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;       &lt;span class=&#34;co&#34;&gt;// hello world&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb11-8&#34;&gt;&lt;a href=&#34;#cb11-8&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;op&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;那么Rust不需要考虑前面提到的安全性问题吗？&lt;/p&gt;&#xA;&lt;p&gt;这就要讲到Rust的设计哲学之一了：&lt;strong&gt;所有权&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;当一个值被分配给一个变量后，这个变量就是这个值的所有者，如果换了所有者，之前的所有者就都失效了。&lt;/p&gt;&#xA;&lt;p&gt;比如在Java中，假设String是可变的，有一个去除某个字符的方法rm():&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb12&#34;&gt;&lt;pre class=&#34;sourceCode java&#34;&gt;&lt;code class=&#34;sourceCode java&#34;&gt;&lt;span id=&#34;cb12-1&#34;&gt;&lt;a href=&#34;#cb12-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; a = &lt;span class=&#34;st&#34;&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;;&lt;/span&gt;&#xA;&lt;span id=&#34;cb12-2&#34;&gt;&lt;a href=&#34;#cb12-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;bu&#34;&gt;String&lt;/span&gt; b = a;&lt;/span&gt;&#xA;&lt;span id=&#34;cb12-3&#34;&gt;&lt;a href=&#34;#cb12-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb12-4&#34;&gt;&lt;a href=&#34;#cb12-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;a.&lt;span class=&#34;fu&#34;&gt;rm&lt;/span&gt;(&lt;span class=&#34;ch&#34;&gt;&amp;#39;o&amp;#39;&lt;/span&gt;);&lt;/span&gt;&#xA;&lt;span id=&#34;cb12-5&#34;&gt;&lt;a href=&#34;#cb12-5&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;b.&lt;span class=&#34;fu&#34;&gt;rm&lt;/span&gt;(&lt;span class=&#34;ch&#34;&gt;&amp;#39;o&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;那么当a、b就都可以对原来的值进行修改，上面的代码在单线程中执行一点问题没有，但一旦涉及多线程就麻烦了。&lt;/p&gt;&#xA;&lt;p&gt;而Rust通过所有权的限定，直接在源头上阻止两个变量同时对同一个值修改：&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb13&#34;&gt;&lt;pre class=&#34;sourceCode rust&#34;&gt;&lt;code class=&#34;sourceCode rust&#34;&gt;&lt;span id=&#34;cb13-1&#34;&gt;&lt;a href=&#34;#cb13-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;kw&#34;&gt;let&lt;/span&gt; c &lt;span class=&#34;op&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;dt&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;pp&#34;&gt;::&lt;/span&gt;from(&lt;span class=&#34;st&#34;&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;)&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb13-2&#34;&gt;&lt;a href=&#34;#cb13-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;kw&#34;&gt;let&lt;/span&gt; d &lt;span class=&#34;op&#34;&gt;=&lt;/span&gt; c&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb13-3&#34;&gt;&lt;a href=&#34;#cb13-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;pp&#34;&gt;println!&lt;/span&gt;(&lt;span class=&#34;st&#34;&gt;&amp;quot;{}&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; d)&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb13-4&#34;&gt;&lt;a href=&#34;#cb13-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;pp&#34;&gt;println!&lt;/span&gt;(&lt;span class=&#34;st&#34;&gt;&amp;quot;{}&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; c)&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;co&#34;&gt;// ❌ borrow of moved value&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;运行上面的代码后会直接出现&lt;code&gt;borrow of moved value&lt;/code&gt;报错：&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250910145600076.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250910145600076&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;strong&gt;发生了所有权转让后，别说让前面的变量去修改对应的值了，就连读一下这个变量都不被允许了。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;所以Rust以另一种方式解决了String若可变带来的安全性问题。Rust因其安全性而著名，但也因为这些安全性带来了很大的复杂度。如果你是语言开发者你会如何设计呢？作为开发者，你又会选择什么语言来开发你的项目呢？&lt;/p&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;&#xA;&lt;h2 id=&#34;不可变的抉择&#34;&gt;不可变的抉择&lt;/h2&gt;&#xA;&lt;p&gt;通过从设计者的角度深入分析，我们揭开了Java String不可变设计背后的原因、优化：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1. 安全性的考虑&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;线程安全&lt;/strong&gt;：避免多线程环境下的并发修改问题，无需额外同步机制&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;哈希一致性&lt;/strong&gt;：保证HashMap等哈希数据结构的稳定性，确保对象作为key时的可靠性&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;引用安全&lt;/strong&gt;：防止意外的数据篡改，特别是在方法参数传递中&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;2. 内存优化&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;字符串常量池&lt;/strong&gt;：相同内容的字符串共享内存空间，避免重复创建&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;哈希值缓存&lt;/strong&gt;：不可变对象的哈希值计算一次后可永久缓存&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;内存布局优化&lt;/strong&gt;：从Java 9开始使用byte[]替代char[]进一步节省空间&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;3. 设计权衡的艺术&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;牺牲“直接修改”的便利性，换取整个系统的稳定性和性能&lt;/li&gt;&#xA;&lt;li&gt;通过StringBuilder/StringBuffer提供高效的可变字符串操作方案&lt;/li&gt;&#xA;&lt;li&gt;在易用性和安全性之间找到最佳平衡点&lt;/li&gt;&#xA;&lt;li&gt;Java选择不可变+工具类，Rust选择所有权系统，体现了不同的设计哲学&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;理解语言设计背后的思考过程，不仅能帮助我们写出更高质量的代码，更能培养系统性的工程思维。每一个看似简单的设计决策，都蕴含着深刻的技术智慧和无数工程师的经验积累&lt;/strong&gt;。本文产生的契机也是我目前正在看Rust的相关内容，体验到了这两个语言不同的设计哲学。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;两个语言在垃圾回收机制上也有很大的不同&lt;/strong&gt;。Java开发者在面试时也常常被问到GC的原理，如果能在回答的时候再向外延伸到Rust语言是如何做内存回收的内容也一定能增分不少。如果对这方面感兴趣，请留言告诉我。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;如果你喜欢这篇文章，也烦请给我留言评论 谢谢&lt;/strong&gt;😄&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>10 Sep 25 16:09 CST</pubDate>
    </item>
    <item>
      <title>博客折腾#07-友链🎡</title>
      <link>https://www.tunan.fun/blog/blog-07</link>
      <description>友链 初步完成友链的前台展示和后台的增删改查功能 🎉🎉🎉 可以收集和展示我喜欢的博客网站啦！点击导航栏右上角的纸飞机或者点击友链https://www...</description>
      <content:encoded>&lt;h2 id=&#34;友链&#34;&gt;友链&lt;/h2&gt;&#xA;&lt;p&gt;初步完成友链的前台展示和后台的增删改查功能 🎉🎉🎉&lt;/p&gt;&#xA;&lt;p&gt;可以收集和展示我喜欢的博客网站啦！点击导航栏右上角的纸飞机或者点击&lt;a href=&#34;https://www.tunan.fun/friends&#34;&gt;友链&lt;/a&gt;进入～&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250908141808580.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250908141808580&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;交换友链&#34;&gt;交换友链&lt;/h2&gt;&#xA;&lt;p&gt;如果有想加入友链的朋友，&lt;strong&gt;欢迎下方评论区留言&lt;/strong&gt;！&lt;/p&gt;&#xA;&lt;p&gt;加入友链满足两个条件之一即可：网站设计具有审美 or 博客内容不错。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;需要说明的一点，这两个条件均出自我的主观感受，所以并不代表未被我收藏的博客站点就不够优秀。KEEP GRINDING TOGETHER！🐝&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content:encoded>
      <pubDate>08 Sep 25 14:26 CST</pubDate>
    </item>
    <item>
      <title>Report#22-continuous diet</title>
      <link>https://www.tunan.fun/blog/weekly-22</link>
      <description>Preface Here is a record of 2025-08-25-2025-09-07. Recently, my weight dropped to 96kg, a loss of 4kg. This is thanks to healthy eating and a lot of exercise. I am enjoying this feeling, and as my wei...</description>
      <content:encoded>&lt;h2 id=&#34;preface&#34;&gt;Preface&lt;/h2&gt;&#xA;&lt;p&gt;Here is a record of &lt;code&gt;2025-08-25&lt;/code&gt;-&lt;code&gt;2025-09-07&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Recently, my weight dropped to 96kg, a loss of 4kg. This is thanks to healthy eating and a lot of exercise. I am enjoying this feeling, and as my weight decreases, my badminton performance is improving. 😆&lt;/p&gt;&#xA;&lt;p&gt;Next move is to keep grinding! Next two week, I have to and must achieve 93kg.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-things-i-did&#34;&gt;The things I did&lt;/h2&gt;&#xA;&lt;h3 id=&#34;refactored-my-life-project&#34;&gt;Refactored my-life project&lt;/h3&gt;&#xA;&lt;ol type=&#34;1&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Refactored the Excel upload functionality for Wechat and Alipay bills.&lt;/strong&gt; see the &lt;a href=&#34;https://github.com/here-tunan/my-life/commit/8269de4be4291623c7d946eb3ffac5eda9b8ebf2&#34;&gt;commit&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fixed the GBK encoding problem with alipay bill file.&lt;/strong&gt; see the &lt;a href=&#34;https://github.com/here-tunan/my-life/commit/95993ee1f4ce4c4f94dd1e30a7e9048d8c341278&#34;&gt;commit&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Refactored the overall design, and transaction view’s UI&lt;/strong&gt;, see the &lt;a href=&#34;https://github.com/here-tunan/my-life/commit/b2d732161c95c0085f65cdaa73ca1f257888ea7d&#34;&gt;commit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Added Account &amp;amp; Category management; Improved the interaction experience for bill&lt;/strong&gt; see the &lt;a href=&#34;https://github.com/here-tunan/my-life/commit/6434ad4813b57ed31fc5a05411adc830027a07b2&#34;&gt;commit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;My wife gave me feedback: When she uploaded a WeChat or Alipay file, the bills were not sorted correctly by time. This was caused by using a goroutine. I fixed this bug along with other issues.&lt;/strong&gt; see the &lt;a href=&#34;https://github.com/here-tunan/my-life/commit/759a51a665295f4d43c41da8423f416d77ceb764&#34;&gt;commit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;improved-tunan-blog-project&#34;&gt;Improved tunan-blog project&lt;/h3&gt;&#xA;&lt;ol type=&#34;1&#34;&gt;&#xA;&lt;li&gt;🎉 &lt;strong&gt;feature: Added apps management &amp;amp; refactored the ui of the whole website.&lt;/strong&gt; see the &lt;a href=&#34;https://github.com/here-tunan/tunan-blog/commit/d42909e0b668df65c674d2070b15f45d8c7c4d73&#34;&gt;commit&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;🎉 &lt;strong&gt;feature: Enabled simultaneous use of SQLite and MySQL! Updated the Readme!&lt;/strong&gt; see the &lt;a href=&#34;https://github.com/here-tunan/tunan-blog/commit/8cef2f0493fce680e3344a83f0d89f3f66ddc77d&#34;&gt;commit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;🎉 &lt;strong&gt;feature: Improved the UI of article content and TOC with a new font.&lt;/strong&gt; see the &lt;a href=&#34;https://github.com/here-tunan/tunan-blog/commit/93a116552a07062f17c3131d93f1ec3579adcbb1&#34;&gt;commit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;🎉 &lt;strong&gt;feature: Added two new article types and corresponding UI for the ‘translation’ and ‘blog history’ modules.&lt;/strong&gt; see the &lt;a href=&#34;https://github.com/here-tunan/tunan-blog/commit/2fc04a03e8bc1bfd397df7c3ec4b0576c109535a&#34;&gt;commit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;wrote-an-article-to-introduce-the-new-features-of-my-blog&#34;&gt;Wrote an article to introduce the new features of my blog&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.tunan.fun/blog/blogs-ui-improve&#34;&gt;博客折腾#05-UI优化&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;started-a-new-project-aiphdwork&#34;&gt;Started a new project: aiphdwork&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/here-tunan/aiphdwork&#34;&gt;The repo link&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;translated-an-article-in-the-long-run-llms-make-us-dumber&#34;&gt;Translated an article: ‘In the long run, LLMs make us dumber’&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.tunan.fun/blog/llm-makes-us-dumber&#34;&gt;长时间来看，大模型会让我们越来越傻&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;exploring&#34;&gt;Exploring&lt;/h2&gt;&#xA;&lt;h3 id=&#34;books&#34;&gt;Books&lt;/h3&gt;&#xA;&lt;p&gt;《大衰退时代》is done.&lt;/p&gt;&#xA;&lt;p&gt;Next book: 《影响力》&lt;/p&gt;&#xA;&lt;h3 id=&#34;articlesposts&#34;&gt;Articles&amp;amp;Posts&lt;/h3&gt;&#xA;&lt;h4 id=&#34;tech&#34;&gt;Tech&lt;/h4&gt;&#xA;&lt;p&gt;1️⃣ Read some articles in &lt;a href=&#34;https://github.com/ruanyf/weekly/blob/master/docs/issue-356.md&#34;&gt;ruanyf-weekly-blogs&lt;/a&gt;. 🌟🌟&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;2️⃣ A short post about AI coding: &lt;a href=&#34;https://simonwillison.net/2025/Jul/3/adam-gordon-bell/&#34;&gt;A quote from Adam Gordon Bell&lt;/a&gt; 🌟🌟🌟&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I think that a lot of resistance to AI coding tools comes from the same place: fear of losing something that has defined you for so long.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;4️⃣ &lt;a href=&#34;https://desunit.com/blog/in-the-long-run-llms-make-us-dumber/&#34;&gt;In the long run, LLMs make us dumber&lt;/a&gt; 🌟🌟🌟🌟🌟&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The friction of thinking, the awkward struggle to find the right words – that’s mental weightlifting&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;5️⃣ &lt;strong&gt;An article presenting how the author got 100+ stars for his 3 open source projects.&lt;/strong&gt; &lt;a href=&#34;https://blog.ch3nyang.top/post/%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E5%B0%8F%E7%BB%93/&#34;&gt;如何在半年内给 3 个开源项目骗到 100+ stars?&lt;/a&gt; 🌟🌟🌟🌟🌟&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;6️⃣ &lt;a href=&#34;https://guangzhengli.com/blog/zh/vibe-coding-and-context-coding&#34;&gt;谈谈AI编程工具的进化与Vibe Coding&lt;/a&gt; 🌟🌟🌟🌟🌟&lt;/p&gt;&#xA;&lt;p&gt;Excerpts: &amp;gt; 总而言之，好的工程师总是可以选择合适的工具来解决问题，而不是某个工具的信徒，不需要用工具来证明自己的价值。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在短期内，Vibe Coding 会引入缺陷和安全漏洞，长期来看 Vibe Coding 会导致代码难以维护，技术债务堆积，整体系统的可理解性和稳定性大幅降低。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;我看过最形象的一个解释是，让一个非程序员通过 Vibe Coding 来编写一个他们打算维护的大型项目，&lt;a href=&#34;https://blog.val.town/vibe-code&#34;&gt;就相当于在没有先解释债务概念的情况下就给孩子一张信用卡&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;从商业的角度出发，资本将程序员细分为前端、后端、算法甚至更加细分的领域，好处是生产力的提升，细分领域的专注可以更好的技术创新，人才更好培养。而坏处是劳动异化，程序员不再是创意输出者，而是单个领域的生产者，生产过程中的一个螺丝钉，变成了一个失去独立性，方便随时替换的翻译工作者。 这也就意味着 Vibe Coding 还是从根本上革命了编程这个行业，随着 LLM 能力的增长，人们发现 LLM 也能充当这个翻译者后，Vibe Coding 会不断的蚕食和挤压程序员的生存空间。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;当然，我并不是说编程水平一般的程序员就找不到出路了，实际上在 AI 的加持下，一个编程水平一般的程序员，如果有不错的商业嗅觉，加上一定的营销能力，创造的商业价值远比在社会分工中当个螺丝钉要大的多。过去可能需要很多人相互协作才能完成的工作，利用 AI 的杠杆可以大大的缩减工作时间和人员规模，未来的独立开发和小规模的团队协作一定会变得更加主流。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;7️⃣ &lt;a href=&#34;https://mp.weixin.qq.com/s/lBo5lGOg2oRfPTkAE1RXow&#34;&gt;Claude Code之父爆料设计理念&lt;/a&gt; 🌟🌟🌟🌟&lt;/p&gt;&#xA;&lt;p&gt;Excerpts: &amp;gt; 其实没人知道该怎么做 AI。我们都是边做边探索。而最重要的信号就是用户的需求，所以必须听用户的。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;作为程序员，这本身是一种乐趣。但未来会越来越偏向于“你做出了什么”，而不是“你是怎么做的”。我给今天学编程的人一个建议：你依然要掌握这门手艺 —— 学会写代码、学语言、学编译器和运行时、学怎么构建 Web 应用、学系统设计，这些都要会。同时，也要更有创造力。如果你有创业点子或产品想法，现在真的可以直接做出来，这是以前根本不可能的。我们还不知道这会带来什么，但潜力巨大。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;当你真的用 Claude Code 来写代码时，要先想清楚你要做的工作是什么、任务有多大。我脑子里大概分成三类：简单、中等和困难。 简单任务：Claude 基本上一条 prompt 就能完成，比如我现在常常直接在 GitHub 上 &lt;span class=&#34;citation&#34; data-cites=&#34;Claude&#34;&gt;@Claude&lt;/span&gt; 一个 issue，让它直接写一个 PR，这样我就不用占用终端了。 中等任务：我会先在终端里用“计划模式（plan mode）”，Shift+Tab 进入计划模式，先和 Claude 对齐一个计划，等我觉得这个计划靠谱了，再进入“自动执行（auto acceleration）”让它去实现。 困难任务：这时候还是我在主导，Claude 更像是我的搭档工具。我主要自己写代码，Claude 可以帮我做一些代码库研究、原型试验，或者我会让它“vibe code”一些选项，帮我探索系统的边界。但最后大部分实现还是我来写，Claude 可能帮我写一些单元测试。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h4 id=&#34;others&#34;&gt;Others&lt;/h4&gt;&#xA;&lt;p&gt;1️⃣ &lt;a href=&#34;http://youtube.com/post/UgkxxGN3n0PBu2AIpsyhHKS8u3qfENvmeB8q?si=K7-WaWP4v_FqR78s&#34;&gt;刷到一个帖子，一个女生说自己丢过几次手机，但老公很包容，不指责….&lt;/a&gt; 🌟🌟🌟🌟&lt;/p&gt;&#xA;&lt;p&gt;2️⃣ Research about cool people: &lt;a href=&#34;https://www.apa.org/pubs/journals/releases/xge-xge0001799.pdf&#34;&gt;Cool People&lt;/a&gt; 🌟🌟🌟&lt;/p&gt;&#xA;&lt;p&gt;3️⃣ V2ex 上发出的帖子，V友们给出了很多精彩的评论。&lt;a href=&#34;https://www.v2ex.com/t/1157395?p=1#reply18&#34;&gt;长时间来看，大模型会让我们越来越傻&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;感谢回复。你说得很有道理，我也很喜欢“让极简诉求获得传递资格”这句话。帮忙给文章润色和写“八股文”也确实是大家（至少是我自己）最早意识到的 LLM 特别擅长做的事之一。其实类似的事情我们在 LLM 之前也早就在做了，比如 Gmail 写邮件时的 writing suggestions ，比如 Word 里的 Japanese greetings…… 我沿着你的思路继续设想一下的话，未来人类之间的沟通也应该会继续丢弃掉更多传统的繁文缛节。 不过在我的理解里，帖主翻译的这篇文章以及我上面提到的 Derek Muller 所担心的是，关于“学习”这件事有一个经典的理论，那就是“重复的刻意练习”，而如果 AI 把人类自己该做的练习给做了，人类自己就学不会了。 具体到写作这件事：在这里回帖的我们都是经历过语文教育的，我们能自己思考，提出观点，写出来的东西让 AI 润色一下是锦上添花；如果是今后生来就可以方便借助 AI 来写作的人，自己从来不写文章的话，会不会连思考的能力本身都会受到影响？ 这也就是为什么帖主的文章和上面的视频里都不约而同地主张，要先自己独立思考给出答案，然后可以再让 AI 给你反馈（及时的反馈对学习是非常重要的），而不能让 AI 直接把答案告诉你。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;videos&#34;&gt;Videos&lt;/h3&gt;&#xA;&lt;p&gt;1️⃣ EvaEva&lt;/p&gt;&#xA;&lt;p&gt;Recently I followed a new content creator on Bilibili. I like her videos that make me feel vibrant.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://b23.tv/PJjw3sR&#34;&gt;【一日②练 人一天怎么能干这么多事儿？！！-哔哩哔哩】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I admire this line from one of her videos: “I don’t have to check my phone or reply to messages, I won’t be bothered by the messy things outside. So all the sports I like are ones that require a lot of attention.”&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Original Chinese: 不用看手机，不用回消息，不会被外界那种乱七八糟的东西打扰，所以我喜欢的运动都是那种需要很强专注力的那种。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;2️⃣ &lt;a href=&#34;https://www.bilibili.com/video/BV12Ja5zmE8H&#34;&gt;【vlog｜上班前早起一小时能有多快乐｜在读《做难而正确的事》】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;3️⃣ &lt;a href=&#34;https://b23.tv/ctwencv&#34;&gt;【人生回报最高的一件事：培养输出型的爱好-哔哩哔哩】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;潜伏&#34;&gt;《潜伏》&lt;/h4&gt;&#xA;&lt;p&gt;I have finished this drama. There are too many intresting lines from Wu, the head of Tianjin station.🤣&lt;/p&gt;&#xA;&lt;p&gt;I have to say, it’s such a good TV show, with a lot of details that are worth thinking about.&lt;/p&gt;&#xA;&lt;h3 id=&#34;english-learning&#34;&gt;English Learning&lt;/h3&gt;&#xA;&lt;p&gt;Continued to practice with &lt;code&gt;Mango&lt;/code&gt;. During one practice session, we talked about the Chinese food that can easily cause allergies and poisoning in China, ie., mushrooms, mangoes, Peanuts.&lt;/p&gt;&#xA;&lt;p&gt;Kept translating the article: &lt;a href=&#34;https://andrewsinger.substack.com/p/andrew-singer-talks-about-china-and-336?utm_source=share&amp;amp;utm_medium=android&amp;amp;r=4c69tq&amp;amp;triedRedirect=true&#34;&gt;Ganbei! Alcohol Culture in China&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;others-1&#34;&gt;Others&lt;/h3&gt;&#xA;&lt;p&gt;1️⃣ &lt;a href=&#34;https://github.com/Pimzino/claude-code-spec-workflow?tab=readme-ov-file&#34;&gt;【An open source of automated workflows for Claude Code】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Just saved it, I haven’t tried it.&lt;/p&gt;&#xA;&lt;p&gt;2️⃣ &lt;a href=&#34;https://www.liwenzhou.com/posts/Go/cobra/&#34;&gt;【A simple doc on using Cobra】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;exercise&#34;&gt;Exercise&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Played Badminton 4 times.&lt;/li&gt;&#xA;&lt;li&gt;Played Pickleball 2 times.&lt;/li&gt;&#xA;&lt;li&gt;Swam 2 times.&lt;/li&gt;&#xA;&lt;li&gt;Worked out once.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content:encoded>
      <pubDate>07 Sep 25 15:53 CST</pubDate>
    </item>
    <item>
      <title>博客折腾#06-增加翻译文章和博客历史模块👾</title>
      <link>https://www.tunan.fun/blog/blog-06</link>
      <description>前言 继几天前的博客折腾05-博客页面UI全面升级🎨https://www.tunan.fun/blog/blogs-ui-improve后，新增翻译文章模块和博客历史记录模块。...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;继几天前的&lt;a href=&#34;https://www.tunan.fun/blog/blogs-ui-improve&#34;&gt;博客折腾#05-博客页面UI全面升级🎨&lt;/a&gt;后，新增翻译文章模块和博客历史记录模块。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250905212545665.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250905212545665&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;翻译文章模块&#34;&gt;翻译文章模块&lt;/h2&gt;&#xA;&lt;p&gt;有时候看到一些优秀的英文文章真的有一种想用古法翻译的方式给翻译、收录下来。所以单独创建了这样一个模块来单独记录这些文章。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;为了尊重原作者，我也尽量去联系原作者去获得翻译转载的授权&lt;/strong&gt;。比如&lt;a href=&#34;https://www.tunan.fun/blog/llm-makes-us-dumber&#34;&gt;长时间来看，大模型会让我们越来越傻&lt;/a&gt;这篇文章就是一边翻译，一边去&lt;code&gt;Twitter&lt;/code&gt;上联系原作者询问是否可以给予授权。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250905212314637.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250905212314637&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;博客历史记录模块&#34;&gt;博客历史记录模块&lt;/h2&gt;&#xA;&lt;p&gt;最近博客更新太快了，输出的&lt;code&gt;博客折腾&lt;/code&gt;系列的文章可能会很多，如果和其他&lt;code&gt;Blogs&lt;/code&gt;文章放在一起就不满足&lt;code&gt;单一职责变量了&lt;/code&gt;🤣。所以把这种类型的文章单独拿出来做了一个模块，画了一个时间轴。&lt;/p&gt;&#xA;&lt;h2 id=&#34;导航栏&#34;&gt;导航栏&lt;/h2&gt;&#xA;&lt;p&gt;原来导航栏中只有Blogs和Weekly两个模块，现在要加上新的Translation和Blog history后就会有些拥挤，所以干脆把这四部分内容合并到一个下拉菜单中。&lt;/p&gt;&#xA;&lt;h2 id=&#34;commits&#34;&gt;Commits&lt;/h2&gt;&#xA;&lt;p&gt;See the &lt;a href=&#34;https://github.com/here-tunan/tunan-blog/commit/2fc04a03e8bc1bfd397df7c3ec4b0576c109535a&#34;&gt;commit&lt;/a&gt;&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>05 Sep 25 21:29 CST</pubDate>
    </item>
    <item>
      <title>长时间来看，大模型会让我们越来越傻</title>
      <link>https://www.tunan.fun/blog/llm-makes-us-dumber</link>
      <description>译者前言 这是来自@desunit博客https://desunit.com/blog/about/中的一篇文章https://desunit.com/blog/in-the-long-run-llms-make-us-dumber/，这篇文章主要介绍了“长期依赖LLM（语言大模型）的代价”。...</description>
      <content:encoded>&lt;h2 id=&#34;译者前言&#34;&gt;译者前言&lt;/h2&gt;&#xA;&lt;p&gt;这是来自&lt;span class=&#34;citation&#34; data-cites=&#34;desunit博客&#34;&gt;[@desunit博客]&lt;/span&gt;(https://desunit.com/blog/about/)中的&lt;a href=&#34;https://desunit.com/blog/in-the-long-run-llms-make-us-dumber/&#34;&gt;一篇文章&lt;/a&gt;，这篇文章主要介绍了“长期依赖LLM（语言大模型）的代价”。&lt;/p&gt;&#xA;&lt;p&gt;我个人觉得这篇文章还蛮有想法和深刻见解的，也从一定程度上缓解了我对AI工具大行其道的焦虑感，帮助我更好地正确看待和使用AI产品。故将其英文内容翻译成中文，分享收录到我的博客之中。&lt;/p&gt;&#xA;&lt;h2 id=&#34;正文翻译&#34;&gt;正文翻译&lt;/h2&gt;&#xA;&lt;p&gt;当我们把认知负担交由语言大模型时所感到的轻松舒适是有坏处的。认知负担应该存在，如果我们削减太多的认知负担——如果我们停止思考——我们就可能不知道如何思考了。&lt;/p&gt;&#xA;&lt;p&gt;那些一直走捷径抄作业的孩子最终会发现他们完全对学校教了什么一无所知。一直让他们伴侣操持账单和银行业务的人终究一天可能不再能够独自管理了，甚至只是一个简单的支出项。一个从不费心去了解街道名称和路线的人，点那个他们的手机死机的时候就会迷路，甚至不知道如何回家。&lt;/p&gt;&#xA;&lt;p&gt;这就又要回到&lt;code&gt;Nassim Taleb&lt;/code&gt;在他有深刻见解的&lt;a href=&#34;https://www.amazon.com/Antifragile-Things-That-Disorder-Incerto/dp/0812979680&#34;&gt;《反脆弱》&lt;/a&gt;一书中所说的&lt;code&gt;hromesis&lt;/code&gt;&lt;sup&gt;1&lt;/sup&gt;概念了，少量的压力和不适使我们变得更强。&lt;/p&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;/ul&gt;&#xA;&lt;p&gt;大脑也是这样工作的。思考时的阻力，去寻找正确词语时的努力——那就是心灵上的举重。&lt;/p&gt;&#xA;&lt;p&gt;或许这还有一个稍微不同但又神似的例子——&lt;a href=&#34;https://en.wikipedia.org/wiki/Broken_windows_theory&#34;&gt;破窗理论&lt;/a&gt;。该理论说那些可见的混乱迹象——像是涂鸦、垃圾和破窗——表明对混乱的的忽视是可以容忍的，降低了非正式的管控的同时又使得不好的行为更多了，甚至成为了严重的犯罪行为。换句话说，当一些小裂痕没有被解决，它们会级联起来成为一个更大的裂缝。对大模型的持续依赖会让问题越来越严重，直到我们外包出去我们所有的思考活动，变成了只不过是具有生物特征的木偶。&lt;/p&gt;&#xA;&lt;p&gt;最近甚至有研究来支持这个观点。在一项研究中，参与者被分为三组：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;只用大脑：没有其他帮助地写作&lt;/li&gt;&#xA;&lt;li&gt;搜索引擎：使用Google搜索&lt;/li&gt;&#xA;&lt;li&gt;大模型（ChatGPT）：完全依赖ChatGPT&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;结果如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在大模型的组中，83%的人都不能在他们完成写作后从他们自己的文章简短地引述任何内容，然而几乎所有在其他组的人都可以做到。&lt;/li&gt;&#xA;&lt;li&gt;从使用LLM转向独立写作的参与者表现出神经系统活跃度下降和持续的、不高的投入度。&lt;/li&gt;&#xA;&lt;li&gt;从只用大脑转变到大模型的参与者具有很强的回忆并和搜索引擎组展示出相似的神经活跃模式。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://d2u08wkl163w0i.cloudfront.net/blog/wp-content/uploads/2025/08/image-1.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;他们发明了一个新词“认知债务”来描述这种取舍：AI助手快捷的代价可能是长期的认知思维能力的牺牲，像是批判性思维，记忆保持和独立的创造性。你借用了机器的认知能力却也为了付出了代价，这个代价会在之后展现出来，当你自己的思考能力已经变弱时。&lt;/p&gt;&#xA;&lt;p&gt;我一直跟我的孩子们说，大模型确实是一个强有力的工具，但一定要聪明地使用它。不要询问它去解决你的数学方程式；而是提供你自己的答案并且让它说明你可能错在哪里。以独立思考为始，继而装备上AI就会使人知发展变得更健康。这就像是核能力一样，你可以用它进行大规模破坏也可以作为一种清洁能源。&lt;/p&gt;&#xA;&lt;p&gt;持续地依赖AI工具会削弱学习能力，记忆力和创造力。不适感不仅仅是一个讨厌的事情——它还是一个训练场。&lt;/p&gt;&#xA;&lt;p&gt;寻找这种不适感，找出它并且以此激励自己。&lt;/p&gt;&#xA;&lt;h2 id=&#34;注解&#34;&gt;注解&lt;/h2&gt;&#xA;&lt;ol type=&#34;1&#34;&gt;&#xA;&lt;li&gt;hromesis 在生物学和毒理学中，指低剂量应激或毒素对生物体产生的有益效应。在这里译者没有找到很好的中文翻译。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;为了贴合中文读者的语言习惯，全文基本上都是古法翻译的，如有错误之处烦请指出、不吝赐教。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;del&gt;本文翻译尚未获取授权，如有侵权，请联系我删除&lt;/del&gt; 本次翻译已获得原文作者授权&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;原文请点击：&lt;a href=&#34;https://desunit.com/blog/in-the-long-run-llms-make-us-dumber/&#34;&gt;In the long run, LLMs make us dumber&lt;/a&gt;&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>05 Sep 25 21:12 CST</pubDate>
    </item>
    <item>
      <title>博客折腾#05-博客页面UI全面升级🎨</title>
      <link>https://www.tunan.fun/blog/blogs-ui-improve</link>
      <description>前言 继半个月前的博客折腾04-功能大升级https://www.tunan.fun/blog/tunan-blog-big-feature后，最近两周又对博客进行了升级，这次升级的主要内容是对整个博客网站的UI效果升级。...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;继半个月前的&lt;a href=&#34;https://www.tunan.fun/blog/tunan-blog-big-feature&#34;&gt;博客折腾#04-功能大升级&lt;/a&gt;后，最近两周又对博客进行了升级，这次升级的主要内容是对整个博客网站的UI效果升级。&lt;/p&gt;&#xA;&lt;p&gt;GitHub 地址：&lt;a href=&#34;https://github.com/here-tunan/tunan-blog&#34;&gt;here-tunan/tunan-blog&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;我的博客地址：&lt;a href=&#34;https://www.tunan.fun/&#34;&gt;tunan’s blog&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;首页ui的升级&#34;&gt;🎉 首页UI的升级&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250904142753943.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250904142753943&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;1️⃣ 欢迎语👋添加动态效果&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;2️⃣ 欢迎语下方新增简短的个人描述&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;⚙️Backend Engineer&lt;/li&gt;&#xA;&lt;li&gt;🚀Full-Stack Explorer&lt;/li&gt;&#xA;&lt;li&gt;💡Open Source Enthusiast&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;刷新页面时会依次弹出。&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;3️⃣ 新增周报模块：原先只有 &lt;code&gt;Latest Blogs&lt;/code&gt;模块，现在新增了&lt;code&gt;Recent Weekly&lt;/code&gt;模块。&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;4️⃣ 修改 &lt;code&gt;View all&lt;/code&gt; 按钮，原先的静态按钮改成了具有一定动态效果的按钮。&lt;/p&gt;&#xA;&lt;h2 id=&#34;文章列表ui的修改&#34;&gt;🎉 文章列表UI的修改&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250904144738413.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250904144738413&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;1️⃣ 改变标签的位置，从左边移动到右边了&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;2️⃣ 改变列表的样式，间隔、颜色看起来更舒服了&lt;/p&gt;&#xA;&lt;h2 id=&#34;markdown-文章内容渲染的升级&#34;&gt;🎉 Markdown 文章内容渲染的升级&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250904150028206.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250904150028206&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;1️⃣ 右侧的Content（TOC）增加了一些动态的选中效果，调整了间隔&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;2️⃣ 文章和标题的字体换成更好看的&lt;code&gt;霞鹜文楷&lt;/code&gt;字体&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;3️⃣ 优化了引用块的展示，左上角增加了一个半透明的引号标记&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;这是一个引用块，巴拉巴拉…&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;4️⃣ 优化了超链接的样式，左边增加了一个↗️箭头的样式，和鼠标悬停时的效果&lt;/p&gt;&#xA;&lt;p&gt;这是我的&lt;a href=&#34;https://www.tunan.fun/&#34;&gt;博客首页&lt;/a&gt;，欢迎点击右上角的&lt;code&gt;Discord&lt;/code&gt;或者&lt;code&gt;GitHub&lt;/code&gt;来找我联系。&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;5️⃣ 优化了间隔线的样式，蓝色的渐变色彩和合适的上下文间隔距离。见下面👇的这条线&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;6️⃣ 标题下方的下划线，增加渐变效果&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;7️⃣ 代码块样式，上方增加一个渐变色的边框&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb1&#34;&gt;&lt;pre class=&#34;sourceCode css&#34;&gt;&lt;code class=&#34;sourceCode css&#34;&gt;&lt;span id=&#34;cb1-1&#34;&gt;&lt;a href=&#34;#cb1-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;/** markdown style **/&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-2&#34;&gt;&lt;a href=&#34;#cb1-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;/** 引入霞鹜文楷字体 **/&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-3&#34;&gt;&lt;a href=&#34;#cb1-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;im&#34;&gt;@import&lt;/span&gt; &lt;span class=&#34;fu&#34;&gt;url(&lt;/span&gt;&lt;span class=&#34;st&#34;&gt;&amp;#39;https://cdn.jsdelivr.net/npm/lxgw-wenkai-webfont@1.1.0/style.css&amp;#39;&lt;/span&gt;&lt;span class=&#34;fu&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-4&#34;&gt;&lt;a href=&#34;#cb1-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;im&#34;&gt;@import&lt;/span&gt; &lt;span class=&#34;fu&#34;&gt;url(&lt;/span&gt;&lt;span class=&#34;st&#34;&gt;&amp;#39;https://cdn.jsdelivr.net/npm/lxgw-wenkai-screen-webfont@1.1.0/style.css&amp;#39;&lt;/span&gt;&lt;span class=&#34;fu&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-5&#34;&gt;&lt;a href=&#34;#cb1-5&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-6&#34;&gt;&lt;a href=&#34;#cb1-6&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;/** 中英文混排字体优化 **/&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-7&#34;&gt;&lt;a href=&#34;#cb1-7&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;fu&#34;&gt;.markdown-body&lt;/span&gt; {&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-8&#34;&gt;&lt;a href=&#34;#cb1-8&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;font-family&lt;/span&gt;: &lt;span class=&#34;st&#34;&gt;&amp;quot;LXGW WenKai Screen&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;st&#34;&gt;&amp;quot;LXGW WenKai&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; -apple-system&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; BlinkMacSystemFont&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; &lt;/span&gt;&#xA;&lt;span id=&#34;cb1-9&#34;&gt;&lt;a href=&#34;#cb1-9&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;                 &lt;span class=&#34;st&#34;&gt;&amp;quot;Segoe UI&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; Roboto&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;st&#34;&gt;&amp;quot;PingFang SC&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;st&#34;&gt;&amp;quot;Hiragino Sans GB&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; &lt;/span&gt;&#xA;&lt;span id=&#34;cb1-10&#34;&gt;&lt;a href=&#34;#cb1-10&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;                 &lt;span class=&#34;st&#34;&gt;&amp;quot;Noto Sans CJK SC&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;st&#34;&gt;&amp;quot;Source Han Sans SC&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;st&#34;&gt;&amp;quot;Microsoft YaHei&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; &lt;/span&gt;&#xA;&lt;span id=&#34;cb1-11&#34;&gt;&lt;a href=&#34;#cb1-11&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;                 &lt;span class=&#34;st&#34;&gt;&amp;quot;WenQuanYi Micro Hei&amp;quot;&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;dv&#34;&gt;sans-serif&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-12&#34;&gt;&lt;a href=&#34;#cb1-12&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;font-feature-settings&lt;/span&gt;: &lt;span class=&#34;st&#34;&gt;&amp;quot;kern&amp;quot;&lt;/span&gt; &lt;span class=&#34;dv&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-13&#34;&gt;&lt;a href=&#34;#cb1-13&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    text-rendering: optimizeLegibility&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-14&#34;&gt;&lt;a href=&#34;#cb1-14&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    -webkit-font-smoothing: antialiased&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-15&#34;&gt;&lt;a href=&#34;#cb1-15&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    -moz-osx-font-smoothing: grayscale&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-16&#34;&gt;&lt;a href=&#34;#cb1-16&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;line-height&lt;/span&gt;: &lt;span class=&#34;dv&#34;&gt;1.75&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-17&#34;&gt;&lt;a href=&#34;#cb1-17&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;letter-spacing&lt;/span&gt;: &lt;span class=&#34;dv&#34;&gt;0.02&lt;/span&gt;&lt;span class=&#34;dt&#34;&gt;em&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-18&#34;&gt;&lt;a href=&#34;#cb1-18&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;}&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-19&#34;&gt;&lt;a href=&#34;#cb1-19&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-20&#34;&gt;&lt;a href=&#34;#cb1-20&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;/* 英文段落优化 */&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-21&#34;&gt;&lt;a href=&#34;#cb1-21&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;fu&#34;&gt;.markdown-body&lt;/span&gt; p&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; &lt;/span&gt;&#xA;&lt;span id=&#34;cb1-22&#34;&gt;&lt;a href=&#34;#cb1-22&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;fu&#34;&gt;.markdown-body&lt;/span&gt; li {&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-23&#34;&gt;&lt;a href=&#34;#cb1-23&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;text-align&lt;/span&gt;: &lt;span class=&#34;dv&#34;&gt;justify&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-24&#34;&gt;&lt;a href=&#34;#cb1-24&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;text-justify&lt;/span&gt;: inter-ideograph&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-25&#34;&gt;&lt;a href=&#34;#cb1-25&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;word-break&lt;/span&gt;: break-word&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-26&#34;&gt;&lt;a href=&#34;#cb1-26&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;overflow-wrap&lt;/span&gt;: break-word&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-27&#34;&gt;&lt;a href=&#34;#cb1-27&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;8️⃣ 表格样式&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr class=&#34;header&#34;&gt;&#xA;&lt;th&gt;我是表头&lt;/th&gt;&#xA;&lt;th&gt;我也是&lt;/th&gt;&#xA;&lt;th&gt;我才是&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;完美的一次UI展示&lt;/td&gt;&#xA;&lt;td&gt;驴唇不对马嘴的表格&lt;/td&gt;&#xA;&lt;td&gt;只是用来展示而已&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;even&#34;&gt;&#xA;&lt;td&gt;检查一下你的精神状态吧&lt;/td&gt;&#xA;&lt;td&gt;如何做一个高能量的人&lt;/td&gt;&#xA;&lt;td&gt;兰州拉面就是美食&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr class=&#34;odd&#34;&gt;&#xA;&lt;td&gt;Vibe Coding 让我丧失了写代码的了&lt;/td&gt;&#xA;&lt;td&gt;多吃沙拉多吃沙拉&lt;/td&gt;&#xA;&lt;td&gt;如何成为一个羽毛球高手&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;后台新增devices-和-apps-的管理模块&#34;&gt;🎉 后台新增Devices 和 Apps 的管理模块&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250904150945187.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250904150945187&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;为了开源同时兼容mysql和sqlite&#34;&gt;🏠 为了开源：同时兼容Mysql和sqlite&lt;/h2&gt;&#xA;&lt;p&gt;我这个博客一开始是基于&lt;code&gt;Sqlite3&lt;/code&gt;的，因为我的服务器很小，只能用&lt;code&gt;Sqlite3&lt;/code&gt;这种轻量级的。但为了后续有朋友们需要&lt;code&gt;mysql&lt;/code&gt;的支持，提前做好准备！！！&lt;/p&gt;&#xA;&lt;p&gt;只需要在配置文件中进行配置，就能一键切换数据库。See &lt;a href=&#34;https://github.com/here-tunan/tunan-blog&#34;&gt;Readme&lt;/a&gt;&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;文章内容页：对Markdown渲染样式进行了深度美化，包括右侧目录（TOC）的动态效果、更换为“霞鹜文楷”字体、优化了引用块、超链接、分割线、标题下划线、代码块和表格的样式。&lt;/li&gt;&#xA;&lt;li&gt;后台功能增强：新增了“Devices”和“Apps”的管理模块。&lt;/li&gt;&#xA;&lt;li&gt;技术架构改进：为了方便他人使用和部署，项目增加了对 MySQL 数据库的支持，现在可以与 SQLite 一键切换，增强了项目的开源友好度。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All commits:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/here-tunan/tunan-blog/commit/d42909e0b668df65c674d2070b15f45d8c7c4d73&#34;&gt;🎉feature: add apps management &amp;amp; refactor the ui of the whole website.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/here-tunan/tunan-blog/commit/8cef2f0493fce680e3344a83f0d89f3f66ddc77d&#34;&gt;🎉feature: Simultaneously use sqlite and mysql! Update Readme!&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/here-tunan/tunan-blog/commit/93a116552a07062f17c3131d93f1ec3579adcbb1&#34;&gt;🎉feature: Improve the UI of article content and TOC: using a new font!&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;最后，如果你喜欢我的开源博客项目，请帮我点点&lt;a href=&#34;https://github.com/here-tunan/tunan-blog&#34;&gt;GitHub&lt;/a&gt;上的&lt;code&gt;Star&lt;/code&gt;。最近也在想要给博客做一个友链功能，如果你觉得你的博客还不错，同时你也一直在坚持创作，请务必在评论区留言！谢谢大家的观看。&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>04 Sep 25 15:28 CST</pubDate>
    </item>
    <item>
      <title>博客折腾#04-大升级（管理后台&amp;埋点&amp;页面优化&amp;项目模块）😆</title>
      <link>https://www.tunan.fun/blog/tunan-blog-big-feature</link>
      <description>前言 距离上次折腾博客已经过去很久了，最近在AI的帮助下，我为我的博客进行了一次比较大的升级，这篇文章将会记录本次博客升级的主要内容。...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;距离上次折腾博客已经过去很久了，最近在AI的帮助下，我为我的博客进行了一次比较大的升级，这篇文章将会记录本次博客升级的主要内容。&lt;/p&gt;&#xA;&lt;h2 id=&#34;功能更新&#34;&gt;功能更新&lt;/h2&gt;&#xA;&lt;h3 id=&#34;服务端渲染ssr&#34;&gt;1. 服务端渲染（SSR）&lt;/h3&gt;&#xA;&lt;p&gt;为了提升网站的加载速度和SEO，我将博客的大部分页面都从客户端渲染（CSR）改成了服务端渲染（SSR）。&lt;/p&gt;&#xA;&lt;p&gt;将原来的&lt;code&gt;Axios&lt;/code&gt;换成了原生的&lt;code&gt;Fecth&lt;/code&gt;请求，同时增加缓存机制，比如文章内容缓存5分钟的设置。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb1&#34;&gt;&lt;pre class=&#34;sourceCode js&#34;&gt;&lt;code class=&#34;sourceCode javascript&#34;&gt;&lt;span id=&#34;cb1-1&#34;&gt;&lt;a href=&#34;#cb1-1&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;span class=&#34;kw&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;kw&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fu&#34;&gt;getArticle&lt;/span&gt;(slug&lt;span class=&#34;op&#34;&gt;:&lt;/span&gt; string) {&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-2&#34;&gt;&lt;a href=&#34;#cb1-2&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;  &lt;span class=&#34;cf&#34;&gt;try&lt;/span&gt; {&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-3&#34;&gt;&lt;a href=&#34;#cb1-3&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;const&lt;/span&gt; response &lt;span class=&#34;op&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;cf&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;fu&#34;&gt;fetch&lt;/span&gt;(&lt;span class=&#34;vs&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;sc&#34;&gt;${&lt;/span&gt;API_URL&lt;span class=&#34;sc&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;vs&#34;&gt;/article?slug=&lt;/span&gt;&lt;span class=&#34;sc&#34;&gt;${&lt;/span&gt;slug&lt;span class=&#34;sc&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;vs&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; {&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-4&#34;&gt;&lt;a href=&#34;#cb1-4&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;      &lt;span class=&#34;dt&#34;&gt;next&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;:&lt;/span&gt; { &lt;span class=&#34;dt&#34;&gt;revalidate&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;dv&#34;&gt;300&lt;/span&gt; }&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;co&#34;&gt;// Revalidate every 5 mins&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-5&#34;&gt;&lt;a href=&#34;#cb1-5&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    })&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-6&#34;&gt;&lt;a href=&#34;#cb1-6&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-7&#34;&gt;&lt;a href=&#34;#cb1-7&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;cf&#34;&gt;if&lt;/span&gt; (&lt;span class=&#34;op&#34;&gt;!&lt;/span&gt;response&lt;span class=&#34;op&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;at&#34;&gt;ok&lt;/span&gt;) {&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-8&#34;&gt;&lt;a href=&#34;#cb1-8&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;      &lt;span class=&#34;cf&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kw&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;co&#34;&gt;// Or handle errors more specifically&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-9&#34;&gt;&lt;a href=&#34;#cb1-9&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    }&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-10&#34;&gt;&lt;a href=&#34;#cb1-10&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-11&#34;&gt;&lt;a href=&#34;#cb1-11&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;op&#34;&gt;...&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-12&#34;&gt;&lt;a href=&#34;#cb1-12&#34; aria-hidden=&#34;true&#34;&gt;&lt;/a&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;h3 id=&#34;关于about页面改造&#34;&gt;2. 关于（About）页面改造&lt;/h3&gt;&#xA;&lt;p&gt;About 页面进行了全面的优化和内容补充。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;个人介绍&lt;/strong&gt;：优化了中英文介绍，使其更加简洁。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;设备和App&lt;/strong&gt;：新增了“我的设备”和“常用App”模块。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;我的阅读&lt;/strong&gt;：增加了正在阅读和已读的书籍列表。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;GitHub Contributions&lt;/strong&gt;：集成了 GitHub Contributions 热力图，展示近一年的代码提交记录。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;见：https://www.tunan.fun/about&lt;/p&gt;&#xA;&lt;h3 id=&#34;埋点建设&#34;&gt;3. 埋点建设&lt;/h3&gt;&#xA;&lt;p&gt;为了更好地了解博客的访问情况，我增加了全站的访问埋点。主要会记录访问的页面，访问者的浏览器和ip地址。&lt;/p&gt;&#xA;&lt;h3 id=&#34;项目展示模块&#34;&gt;4. 项目展示模块&lt;/h3&gt;&#xA;&lt;p&gt;新增了项目展示页面，用于陈列我的个人项目。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;项目列表&lt;/strong&gt;：展示我的个人项目。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;GitHub Star History&lt;/strong&gt;：可以查看项目在GitHub上的Star增长历史。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;image-text&#34; style=&#34;text-align: center;&#34;&gt;&#xA;&lt;p&gt;&lt;img src=&#39;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250825142949731.png&#39; style=&#34;width: 60%; height: auto; display: block; margin: 0 auto;&#34;/&gt; &lt;img src=&#39;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250825143132898.png&#39; style=&#34;width: 60%; height: auto; display: block; margin: 0 auto;&#34;/&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;后台管理页面&#34;&gt;5. 后台管理页面&lt;/h3&gt;&#xA;&lt;p&gt;这次最大的更新是增加了一个后台管理页面，以后更新博客内容再也不用手动修改数据库和上传文件了。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;JWT登录&lt;/strong&gt;：使用JWT实现了安全的后台登录功能。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;RSS文件生成&lt;/strong&gt;：可以在后台一键生成最新的RSS订阅文件。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;文章/书籍管理&lt;/strong&gt;：提供了对博客文章和阅读书籍的增删改查功能。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;埋点数据看板&lt;/strong&gt;：后台可以直观地看到网站的访问数据。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250825143325959.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250825143325959&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;uiux-优化&#34;&gt;6. UI/UX 优化&lt;/h3&gt;&#xA;&lt;p&gt;对博客的UI和UX进行了一些细节优化。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;新增图标&lt;/strong&gt;：增加了 Folo、RSS 和 Discord 的社交图标。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;GitHub图标&lt;/strong&gt;：将原先的按钮样式改成了更简洁的图标样式。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;页脚信息&lt;/strong&gt;：博客底部新增了网站运行时间、总访问量和一句随机的问候语。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250825143929897.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250825143929897&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;服务器脚本&#34;&gt;7. 服务器脚本&lt;/h3&gt;&#xA;&lt;p&gt;为了方便部署和维护，编写了 &lt;code&gt;start&lt;/code&gt;、&lt;code&gt;stop&lt;/code&gt;、&lt;code&gt;restart&lt;/code&gt; 等一系列服务器管理脚本。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250825143958077.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250825143958077&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;&#xA;&lt;p&gt;在AI的辅助下，这次博客升级的效率非常高，很多之前想做但一直拖延的功能都得以快速实现。后面我只要想好我要什么，就能快速增加上。下次，做个难度高一点的，多语言如何？😆&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>25 Aug 25 14:41 CST</pubDate>
    </item>
    <item>
      <title>周报#21-Vibe Coding</title>
      <link>https://www.tunan.fun/blog/vibe-coding</link>
      <description>前言 本文记录 2025-08-11-2025-08-24的双周生活。 本周报主要想记录三件事情，一是第一周周末去宁波参加了公司的两天的培训，培训内容是关于IPDIntegrated ...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;本文记录 &lt;code&gt;2025-08-11&lt;/code&gt;-&lt;code&gt;2025-08-24&lt;/code&gt;的双周生活。&lt;/p&gt;&#xA;&lt;p&gt;本周报主要想记录三件事情，一是第一周周末去宁波参加了公司的两天的培训，培训内容是关于&lt;a href=&#34;http://cloud.tencent.com/developer/article/2307858&#34;&gt;IPD(Integrated Product Development)&lt;/a&gt;的；二是这周除了一直在用&lt;code&gt;gemini-cli&lt;/code&gt;外，又上车买了&lt;code&gt;claude-cli&lt;/code&gt;，持续用AI优化我的博客；三是周六媳妇过生日，一起吃蛋糕看电影啦。&lt;/p&gt;&#xA;&lt;p&gt;这个周边的标题是&lt;code&gt;Vibe Coding&lt;/code&gt;，这个概念已经火了好几个月了，但实际上我最近才开始真正的使用它来沉浸地写代码。所以这周算是我真正&lt;code&gt;Vibe Coding&lt;/code&gt;的开始。&lt;/p&gt;&#xA;&lt;h2 id=&#34;ipd-培训&#34;&gt;IPD 培训&lt;/h2&gt;&#xA;&lt;p&gt;周五和周六两天的时间，从杭州到宁波去参加公司组织的IPD课程培训。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Integrated Product  Development&lt;/code&gt;，来自华为的集成产品开发的一套体系，它最早是来自IBM公司的。主要的内容就是关于企业最佳管理实践的。&lt;/p&gt;&#xA;&lt;p&gt;培训的内容比较多，但时间却只有一天多一点，所以很难彻底得搞懂里面的一些内容，不过还是多多少少还是学习了一些新的关于需求管理和项目管理的新方法。可能目前在所处的位置上不能去实践这些方法，但对自己未来的道路一定还是有用的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;vibe-coding&#34;&gt;VIBE CODING 🐮&lt;/h2&gt;&#xA;&lt;p&gt;太牛了只能说，最近这两周疯狂地在压榨&lt;code&gt;gemini&lt;/code&gt;和&lt;code&gt;claude&lt;/code&gt;去给我优化我的博客。 我增加了太多的新功能在我的博客中，这些功能都是老早就设置的&lt;code&gt;todo items&lt;/code&gt;，但我一直懒得去搞。目前为止AI对我来说最大的作用就是就是使我的想法快速落地，减少我开始开发所需下定的决心和开发时的时间成本。&lt;/p&gt;&#xA;&lt;p&gt;两周时间，增加了很多功能： - 整体优化：将大部分页面改成服务端渲染，加快页面加载速度 - &lt;code&gt;About&lt;/code&gt; 页面优化 - 个人介绍优化，去掉了中文内容，英文部分修改 - 个人介绍增加设备和Apps模块 - 个人介绍增加我的阅读书籍内容 - 个人介绍页面增加 GitHub Contributions 热力图模块 - 埋点建设：增加页面的埋点记录情况 - 增加项目展示模块 - 项目展示 - &lt;code&gt;github star history&lt;/code&gt;展示 - 建设后台页面（之前一直没有后台页面，都是手动修改sqlite的数据库，上传到服务器的） - JWT登录功能 - 后台生成Rss文件 - 博客文章管理功能 - 书籍管理功能 - 埋点展示功能 - 修改&lt;code&gt;Readme&lt;/code&gt;文件，支持中英文的介绍 - 一些UI优化和新增 - &lt;code&gt;Folo&lt;/code&gt;的订阅图标 - &lt;code&gt;Rss&lt;/code&gt;的图标 - &lt;code&gt;DIscord&lt;/code&gt;的图标 - &lt;code&gt;Github&lt;/code&gt;由原先的按钮变成了图标 - 博客底部新增 运行时间、访问量、好看的问候语的UI展示 - 服务器脚本：start、stop、restart等脚本编写&lt;/p&gt;&#xA;&lt;p&gt;具体的内容我会写在这篇文章中：&lt;a href=&#34;https://www.tunan.fun/blog/tunan-blog-big-feature&#34;&gt;博客折腾#04-功能大升级&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;maxine-的生日&#34;&gt;Maxine 的生日🎂&lt;/h2&gt;&#xA;&lt;p&gt;这次的生日过得很平淡，生日前一晚去吃了牛肉火锅，生日当天本打算去吃烤肉，但是距离太远，身体不爽等原因就没有去。&lt;/p&gt;&#xA;&lt;p&gt;生日当天早上起来做了手擀面给媳妇吃，但由于技术不佳，我做的手擀面煮完了之后都有点断掉了，没有太长🤣 估计是我整的不够劲道，下次要尝试改进一下，但不得不说我做的炝锅面是真的香，两个人怒干两大碗。&lt;/p&gt;&#xA;&lt;p&gt;随后就是中午简单做了个排骨，买了点螃蟹吃，下午去看成龙的新电影《捕风捉影》。&lt;/p&gt;&#xA;&lt;p&gt;这次生日最大的遗憾就是，我提前几天居然忘记了查看日历，忘记了她的生日，还是在&lt;code&gt;Maxine&lt;/code&gt;的提醒下才想起来的，因为这个还闹了一点点小矛盾。&lt;/p&gt;&#xA;&lt;p&gt;下次再过生日，&lt;code&gt;Maxine&lt;/code&gt;就三十岁了，我俩好像快三十了还是&lt;code&gt;一事无成&lt;/code&gt;(世俗意义上的：无车、无房、无娃)。&lt;/p&gt;&#xA;&lt;p&gt;但其实最大的问题不在于是否拥有了这些物质上的东西，而是我们的内心好像经常得不到满足。&lt;/p&gt;&#xA;&lt;p&gt;得不到满足的原因有很多，更多的我觉得还是精神方面的。这一点和我们两的懒惰也有很大的关系，一到了周末就闷在屋子里，玩手机、玩电脑。我也有在考虑，是否应该寻求某种新的生活方式，打破这种僵局，比如更多地出去走走看看。&lt;/p&gt;&#xA;&lt;p&gt;希望三十岁到来之前，能够是一个充满电量的自己。&lt;/p&gt;&#xA;&lt;div class=&#34;image-text&#34; style=&#34;text-align: center;&#34;&gt;&#xA;&lt;img src=&#39;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250825140147461.png&#39; style=&#34;width: 60%; height: auto; display: block; margin: 0 auto;&#34;/&gt;&#xA;&lt;p&gt;&#xA;祝你未来的每一天，都能继续保持明媚☀️&#xA;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;输入与探索&#34;&gt;输入与探索&lt;/h2&gt;&#xA;&lt;h3 id=&#34;书籍&#34;&gt;书籍&lt;/h3&gt;&#xA;&lt;p&gt;继续读《大衰退时代》和《微观经济学》。&lt;/p&gt;&#xA;&lt;h3 id=&#34;视频&#34;&gt;视频&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://b23.tv/Ry2YkkG&#34;&gt;【日复一日的平淡，是我变强的底气-哔哩哔哩】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;喜欢看这种有力量的视频，佩服这种日复一日的坚持，是我所达不到的境界。&lt;/p&gt;&#xA;&lt;h3 id=&#34;英文学习&#34;&gt;英文学习&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;mango&lt;/code&gt;从中国旅游回美国后，我们又开始了日常的练习了，最近在一起读的文章是：&lt;a href=&#34;https://andrewsinger.substack.com/p/andrew-singer-talks-about-china-and-336?utm_source=share&amp;amp;utm_medium=android&amp;amp;r=4c69tq&amp;amp;triedRedirect=true&#34;&gt;Ganbei! Alcohol Culture in China&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;输出&#34;&gt;输出&lt;/h2&gt;&#xA;&lt;p&gt;一直想在团队内部推广&lt;code&gt;Code Review&lt;/code&gt;，结果团队内的同学可能并不感冒。我其实理解，因为国企内的技术热情少得可怜…&lt;/p&gt;&#xA;&lt;p&gt;但我还是写了一篇文章来分享，就算是对自己的一种敦诫吧：&lt;a href=&#34;https://www.tunan.fun/blog/talk-about-code-review&#34;&gt;谈谈Code Review&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;运动&#34;&gt;运动&lt;/h2&gt;&#xA;&lt;p&gt;这周打了三次羽毛，因为最近晚上总是熬夜（尤其是第一周，入坑星露谷后，天天晚上想着回家种地挖矿），所以休息得不好，下周要重新调整作息了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;下周计划&#34;&gt;下周计划&lt;/h2&gt;&#xA;&lt;p&gt;后面的两周，要好好调整作息，早睡早起，周末如果天气不那么热的话，应该会出去玩玩。&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>25 Aug 25 14:07 CST</pubDate>
    </item>
    <item>
      <title>周报#20-从东北回来啦</title>
      <link>https://www.tunan.fun/blog/came-back-from-northeast</link>
      <description>前言 本文记录 2025-07-11-2025-08-10的近一个月的生活。 回东北啦 七月中旬和Maxine一起请婚假回她家，办了回门宴。原定在家待5天，因为妈妈实在不舍得我...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;本文记录 &lt;code&gt;2025-07-11&lt;/code&gt;-&lt;code&gt;2025-08-10&lt;/code&gt;的近一个月的生活。&lt;/p&gt;&#xA;&lt;h3 id=&#34;回东北啦&#34;&gt;回东北啦&lt;/h3&gt;&#xA;&lt;p&gt;七月中旬和&lt;code&gt;Maxine&lt;/code&gt;一起请婚假回她家，办了回门宴。原定在家待5天，因为妈妈实在不舍得我俩（实际上是舍不得她闺女🤣），我建议再请两天连着周末就在家呆了十天。&lt;/p&gt;&#xA;&lt;p&gt;这十天里面有两天都是在路上，从杭州到密山下的一个农场，即使是坐飞机也要整整一个白天的时间（早上四五点起来坐车去赶高铁、转飞机，直到晚上才能到家）。&lt;/p&gt;&#xA;&lt;p&gt;这次去东北最大的体验就是&lt;code&gt;热🔥&lt;/code&gt;+&lt;code&gt;舒适&lt;/code&gt;。我没有想到东北这么的热，这里还没有空调，甚至我回杭州的前一天，发现我竟然被热出了热疹子。不用上班的日子也是真的舒服啊，没啥事就在家打打游戏、去二姨家打打扑克或者去乡下接触大自然。并且每天都是饭来张口，不是丈母娘给做饭就是去二姨家吃饭，再就是请客吃饭下馆子。总之这十天里，我胖了四五斤。&lt;/p&gt;&#xA;&lt;h3 id=&#34;看这一片稻海&#34;&gt;看这一片稻海&lt;/h3&gt;&#xA;&lt;p&gt;我最喜欢的事情就是老丈人开车带我们去乡下了。东北实在太大了，土地辽阔，一片稻田和苞米地真的远远望不到头。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250805165501754.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250805165501754&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;一大早的东北，天气还是很凉爽的，相当惬意地望着一片稻海。&lt;/p&gt;&#xA;&lt;h3 id=&#34;兴凯湖之行&#34;&gt;兴凯湖之行&lt;/h3&gt;&#xA;&lt;p&gt;媳妇儿的家是在密山市下的一个农场里。而密山市的旁边就是俄罗斯了，在地图软件上可以清楚得看到有一个很大的湖处在边境线上。偌大的兴凯湖被分成两部分，小的一部分是中国的。&lt;/p&gt;&#xA;&lt;p&gt;这好像是我第一次见到这么大的湖，一眼望不到头。虽说见海已经很多次了，但是看到这湖还是会有种心潮澎湃的感觉。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250805165901450.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250805165901450&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;我爱菜园子&#34;&gt;我爱菜园子&lt;/h3&gt;&#xA;&lt;p&gt;我骨子里还是个喜欢种地的少年啊！持续干旱的天气让老丈人家在农村的菜园子里的菜都蔫巴了，我便自告奋勇去浇园子了。从地下深处抽出的水从管子里喷出的时候，那天然的沁凉感是炎炎夏日不可多得的美好。&lt;/p&gt;&#xA;&lt;p&gt;浇地的时候，我还去采摘园子里结出的瓜果蔬菜了，收获满满。我知道种地是一件很累的事情，但种菜还相对轻松一点。并且自己种出来的菜好吃、健康，还有满满的成就感。&lt;/p&gt;&#xA;&lt;p&gt;这种田园生活正是我所向往的，这更坚定了我做远程工作和和早日退休的想法！什么时候我能找到一份远程的工作或者45岁就退休，我也回到这乡村去生活！&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250805171117076.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250805171117076&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;最后这张图是浇地那天，从连队回农场路上拍的。晚霞，你明明那么美，我却很少驻足，又或是你总被遮掩在那高楼大厦之后…&lt;/p&gt;&#xA;&lt;h3 id=&#34;返航杭&#34;&gt;返航（杭）&lt;/h3&gt;&#xA;&lt;p&gt;回到杭州后，一切都回归到了正轨，学习、健身、工作。还有就是十多天没玩CSGO，在回来后的第一个周末我玩了个痛快。&lt;/p&gt;&#xA;&lt;p&gt;从休假到上班，基本上没有过渡，还是有些不适应，幸好工作不忙。&lt;/p&gt;&#xA;&lt;p&gt;八月的第二个周，终于静下心来去杭州图书馆看书学习了，在图书馆的效率就是高啊！以后还是要强迫自己走出家门，在家里压根一点都学不进去，最起码现在还没有养成在家里学习的习惯。&lt;/p&gt;&#xA;&lt;p&gt;下面的内容则是记录，我从回来后的一些内容吧！&lt;/p&gt;&#xA;&lt;h2 id=&#34;输入与探索&#34;&gt;输入与探索&lt;/h2&gt;&#xA;&lt;h3 id=&#34;书籍&#34;&gt;书籍&lt;/h3&gt;&#xA;&lt;h4 id=&#34;大衰退时代&#34;&gt;《大衰退时代》&lt;/h4&gt;&#xA;&lt;p&gt;新买了几本书，开始看新书了——《大衰退时代》。这是第一遍读这本书，第一遍读是粗略读，后面等到了第二次读（应该在年底）的时候再写书评吧。&lt;/p&gt;&#xA;&lt;p&gt;计划在八月份读完这本书。&lt;/p&gt;&#xA;&lt;h4 id=&#34;taking-side&#34;&gt;Taking Side&lt;/h4&gt;&#xA;&lt;p&gt;计划在八月份读完 导读和Issue1 （刚在杭州图书馆读完了导读部分）这本书里的长单词、长难句实在太多了，内容过于扎实，有点难读。&lt;/p&gt;&#xA;&lt;h3 id=&#34;文章-视频&#34;&gt;文章 &amp;amp; 视频&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://b23.tv/j5Am2CB&#34;&gt;【蓝战非发家史:“努力有用，世界上就没有穷逼了！”-哔哩哔哩】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://b23.tv/0MTPn7O&#34;&gt;【一定要学会跟人起冲突-哔哩哔哩】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/qzC_O-r9B5g?si=_CbdB-72ivvpmJe-&#34;&gt;讲清楚什么是通缩？【我们不需要在寒冬里开鲜花，但一定要在春天来临时手里握着种子。】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://b23.tv/rYoNdoZ&#34;&gt;【全网吹捧的“迈巴赫小公主”，背后藏着祸害中国女生的隐形洗脑-哔哩哔哩】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.douchi.space/top-10/#gsc.tab=0&#34;&gt;你有哪些top10的技能点-椒盐豆豉&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/wxzATAYGmXA?si=TVuJryHOyORf1Bm2&#34;&gt;【中国30省半年报全解析-你应该选择哪个省去发展】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.eet-china.com/mp/a122525.html&#34;&gt;不要再无脑背诵面向对象三大特性了&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.pseudoyu.com/posts/weekly_review_100&#34;&gt;过去这十年-pseudoyu&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/google/eng-practices&#34;&gt;【Google’s Engineering Practices Documentation】&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;podcast&#34;&gt;Podcast&lt;/h3&gt;&#xA;&lt;h3 id=&#34;课程&#34;&gt;课程&lt;/h3&gt;&#xA;&lt;h4 id=&#34;后端38讲&#34;&gt;《后端38讲》&lt;/h4&gt;&#xA;&lt;p&gt;极客时间上的《后端38讲》，内容深度不够，只能作为一个架构师的入门课程，很快就看完了。十分满分的话我给五分吧。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250731151803198.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250731151803198&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h4 id=&#34;设计模式之美&#34;&gt;《设计模式之美》&lt;/h4&gt;&#xA;&lt;p&gt;就是因为看了《后端38讲》里的设计原则和模式的内容，所以在自己的IDP（见下文）中设立了一个设计模式的课程学习。趁着最近工作不忙，疯狂地在工作完成后快速学习这门课。&lt;/p&gt;&#xA;&lt;p&gt;花了三四天时间就看完了这门课程了（大约有12h的学习时间）。实际上，这门课里的内容自己也大都知道了，收获不是很大，就当是巩固知识扩展盲区了。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250805172539735.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250805172539735&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;英文学习&#34;&gt;英文学习&lt;/h3&gt;&#xA;&lt;h3 id=&#34;其他&#34;&gt;其他&lt;/h3&gt;&#xA;&lt;p&gt;公司组织青年培训计划，让编写自己的IDP（Individual Development Plan），我认真写了一下。如果把它当成一种OKR，都完成了的话，进步一定会很大。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250731153934517.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250731153934517&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;输出&#34;&gt;输出&lt;/h2&gt;&#xA;&lt;p&gt;写了一篇关于 Code Review 的博客文章：&lt;a href=&#34;https://www.tunan.fun/blog/talk-about-code-review&#34;&gt;谈谈Code Review&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;运动饮食&#34;&gt;运动&amp;amp;饮食&lt;/h2&gt;&#xA;&lt;p&gt;一个月打羽毛球6次！（但我的球技还是没有啥进步）。游泳、健身也开始做了。&lt;/p&gt;&#xA;&lt;p&gt;饮食：开始吃沙拉了，最近一家叫橄榄时光的沙拉还挺好吃的，是一种地中海式风格的沙拉，很喜欢吃他家的鹰嘴豆辣酱。&lt;/p&gt;&#xA;&lt;h2 id=&#34;有趣的事情&#34;&gt;有趣的事情&lt;/h2&gt;&#xA;&lt;h3 id=&#34;乌龙&#34;&gt;乌龙&lt;/h3&gt;&#xA;&lt;p&gt;记录一下很小的有趣的事情。周六和朋友约球，一个朋友不能来，导致我们四缺一。另一个朋友就在小红书上招聘，果然找到了人。&lt;/p&gt;&#xA;&lt;p&gt;等我们到了场馆，联系他的时候，他说他到了，但就是看不到他。最后他说，他是温州的，温州也有一个黄龙体育中心！真是笑死我了🤣&lt;/p&gt;&#xA;&lt;h3 id=&#34;中奖&#34;&gt;中奖&lt;/h3&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250809135737322.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250809135737322&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;code&gt;Maxine&lt;/code&gt;&lt;a href=&#34;https://www.tunan.fun/blog/19-grateful-for-the-grace&#34;&gt;又中奖了&lt;/a&gt;？这是什么神仙体质？&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>09 Aug 25 21:52 CST</pubDate>
    </item>
    <item>
      <title>谈谈Code Review</title>
      <link>https://www.tunan.fun/blog/talk-about-code-review</link>
      <description>前言 你的代码，敢拿给同事看吗？作为一个开发者，你又是如何看待Code Review（代码审查）的呢？你所在的公司有组织Code Review吗？ 不妨先花三秒钟，在心里给自己一个答案。...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;你的代码，敢拿给同事看吗？作为一个开发者，你又是如何看待Code Review（代码审查）的呢？你所在的公司有组织Code Review吗？&lt;/p&gt;&#xA;&lt;p&gt;不妨先花三秒钟，在心里给自己一个答案。如果感兴趣，我们再一同看看我对这件事的一些拙见。&lt;/p&gt;&#xA;&lt;p&gt;本文主要专注于“为什么Code Review很重要？”，“好的Code Review标准是什么？”，以及“如何优雅地进行Code Review？”。&lt;/p&gt;&#xA;&lt;p&gt;本文并不打算探讨为什么很多团队没有Code Review——原因可能有很多，比如项目太赶、人员不足，或者只是单纯的“懒得搞”，相信大家心里都有数。&lt;/p&gt;&#xA;&lt;p&gt;这世界上的事大多有利有弊，Code Review也不例外。但我个人认为，如果把时间线拉长到整个职业生涯，做Code Review这件事，绝对是利大于弊的。&lt;/p&gt;&#xA;&lt;p&gt;那么，我们开始吧。&lt;/p&gt;&#xA;&lt;h2 id=&#34;code-review-的意义&#34;&gt;Code Review 的意义&lt;/h2&gt;&#xA;&lt;h3 id=&#34;个人成长加速器&#34;&gt;个人成长加速器&lt;/h3&gt;&#xA;&lt;p&gt;在工作中，我们很容易满足于“代码能跑就行”，然后把一堆技术债藏在“以后再优化”的牌子后面。如果自己不主动去阅读开源代码或者啃设计模式的硬书，很容易就会在自己的小世界里原地踏步。&lt;/p&gt;&#xA;&lt;p&gt;这时，Code Review就像一个强行给你开启的“被动学习”技能。团队里总有那么几个比自己的厉害的同事，他们的代码、设计、甚至是一个变量名，都能让你恍然大悟：“原来代码还能这么写！”&lt;/p&gt;&#xA;&lt;p&gt;此外，当你知道你的代码即将被公开评审的时候，这就像你知道第二天要见丈母娘，今天总得把胡子刮干净、衣服穿整洁了。这会“逼”着你写出更清晰、更健壮的代码，而不是那种“半年后连自己都看不懂”的代码。这本身就是一种飞速的成长。&lt;/p&gt;&#xA;&lt;h3 id=&#34;代码质量的金钟罩&#34;&gt;代码质量的“金钟罩”&lt;/h3&gt;&#xA;&lt;p&gt;当你知道你的代码需要拿到团队其他人面前“过堂”时，你会下意识地提升对自己的要求：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;逻辑是否严谨？&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;设计是否合理？&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;命名和注释是否像人话？&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;文档有没有更新？&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;团队的代码风格跟上了吗？&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;可读性怎么样，会不会逼疯下一个接手的人？&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;单元测试写了吗？覆盖率达标了吗？&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;“三个臭皮匠，顶个诸葛亮”。一个人的智慧终究有限，但经过整个团队审视和改进的代码，凝聚的是集体的智慧。这能有效防止代码库逐渐腐化，变成一个谁也不敢碰的“屎山”，即使面对未来的需求变更，也能保持从容。&lt;/p&gt;&#xA;&lt;h3 id=&#34;代码是团队的不是私有财产&#34;&gt;代码是团队的，不是“私有财产”&lt;/h3&gt;&#xA;&lt;p&gt;经过Code Review之后，代码的Ownership就从个人自然地过渡到了整个团队。&lt;/p&gt;&#xA;&lt;p&gt;这样，当张三休假去马尔代夫的时候，李四不至于对着张三的代码瑟瑟发抖，想改个bug却无从下手，最后只能去翻几个月前的聊天记录和早已过时的技术文档（如果还有的话）。代码被团队成员所熟悉，后续的维护和迭代才能如丝般顺滑。&lt;/p&gt;&#xA;&lt;p&gt;所以，Code Review不仅是为代码库的健康演进上了一道保险，也是为未来的自己和同事铺平了道路。&lt;/p&gt;&#xA;&lt;h3 id=&#34;塑造卓越的团队技术文化&#34;&gt;塑造卓越的团队技术文化&lt;/h3&gt;&#xA;&lt;p&gt;当Code Review成为常态，它会潜移默化地塑造一种追求卓越、开放沟通、共同担当的文化。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;高效沟通&lt;/strong&gt;：围绕具体代码的讨论，是技术交流最直接、最有效的方式。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;良好氛围&lt;/strong&gt;：大家互相学习，共同进步，而不是互相指责。在Review中，我们传递的是知识和建议，而不是冰冷的批评。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;技术自律&lt;/strong&gt;：当每个人都清楚自己的代码会被审视，自然会用更高的标准要求自己，整个团队的技术水平也会水涨船高。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;code-review-的标准与目标&#34;&gt;Code Review 的标准与目标&lt;/h2&gt;&#xA;&lt;p&gt;那么，一次好的Code Review应该关注什么？我们的目标又是什么？ 1. &lt;strong&gt;正确性 (Correctness)&lt;/strong&gt;：这是底线，代码得完成它该做的事，正确处理各种边界和异常。不然我们就是在浪费大家的时间，还不如去摸鱼。 2. &lt;strong&gt;设计 (Design)&lt;/strong&gt;：好的设计让代码像乐高，随便拼；坏的设计让代码像屎山，只能往上堆。代码的架构、模块划分是否合理，决定了它能活多久。 3. &lt;strong&gt;可读性与规范 (Readability &amp;amp; Style)&lt;/strong&gt;：代码是写给人看的，顺便给机器运行。如果你的代码只有上帝和你自己能看懂，那半年后就只剩上帝了。 4. &lt;strong&gt;测试 (Testing)&lt;/strong&gt;：单元测试是代码质量的最后一道防线。是否有对应的单元测试？测试是否覆盖了核心逻辑和关键路径？测试本身是否写得清晰、易于维护？如果编写不出好的单元测试，往往是因为设计上不够高内聚、低耦合。 5. 还有一些安全性和性能方面的关注，但我个人认为但这些不应该是在Code Review中特别关注的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;如何优雅地进行-code-review&#34;&gt;如何优雅地进行 Code Review&lt;/h2&gt;&#xA;&lt;p&gt;明确了目标，我们还需要方法论，这需要作者（Author）和审查者（Reviewer）共同努力。&lt;/p&gt;&#xA;&lt;h3 id=&#34;对于作者-author&#34;&gt;对于作者 (Author)&lt;/h3&gt;&#xA;&lt;ol type=&#34;1&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;提交前先当自己的“魔鬼”&lt;/strong&gt;：在发起Review前，自己先完整地过一遍，像Reviewer一样挑剔。你会惊讶地发现自己能揪出不少低级错误。（查看解决IDE的警告、让AI帮忙审查都是有效的手段）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PR/MR 保持“小而美”&lt;/strong&gt;：一个提交只做一件事。一个几千行代码的PR，对Reviewer来说不是惊喜，是惊吓。这相当于直接往别人脸上扔了一本《战争与和平》，还要求对方划出里面的错别字。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;写好PR描述&lt;/strong&gt;：清晰地解释这个提交的“&lt;strong&gt;为什么&lt;/strong&gt;”（Why）和“&lt;strong&gt;是什么&lt;/strong&gt;”（What）。如果实现复杂，简单讲讲你的设计思路，能让Reviewer更快进入状态。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;心态开放，拥抱反馈&lt;/strong&gt;：记住，Review的目标是把代码变好，不是对你个人的否定。把每一次有价值的反馈，都看作一次免费的学习机会。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;对于审查者-reviewer&#34;&gt;对于审查者 (Reviewer)&lt;/h3&gt;&#xA;&lt;ol type=&#34;1&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;先理解，再发言&lt;/strong&gt;：先看PR描述和相关任务，明白它要解决什么问题。带着目标去审查，事半功倍。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;当导师，不当“终结者”&lt;/strong&gt;：多提“建议”和“问题”，少下“命令”。多用“我们”，少用“你”。比如：“我们这样改会不会更清晰？”听起来就比“你这里写得太烂了”要顺耳得多。别忘了，对写得好的地方要不吝赞美！ 这里还有一个来自&lt;a href=&#34;https://github.com/google/eng-practices/blob/master/review/index.md&#34;&gt;Google文档&lt;/a&gt; 中的建议，如果你觉得某个地方需要标注出来，但又不是特别重要必须要开发者去改，那么可以在 评论的开头加一个前缀Nit（Nitpick 表示吹毛求疵）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;分清主次，抓大放小&lt;/strong&gt;：分清哪些是必须改的严重问题（逻辑错误、设计缺陷），哪些是建议性改进。不要因为一个变量名是&lt;code&gt;userList&lt;/code&gt;还是&lt;code&gt;users&lt;/code&gt;而阻塞一个紧急的bug修复，别捡了芝麻丢了西瓜。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;及时响应，别让人等太久&lt;/strong&gt;：及时的反馈是对作者的尊重。如果暂时没空，可以先回复一下，告知对方你大概什么时候会看。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;授人以渔，给出方案&lt;/strong&gt;：对于你指出的问题，如果可以，尽量给出具体的修改建议或代码示例，这远比单纯地“指指点点”更有帮助。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;&#xA;&lt;p&gt;Code Review 绝不仅仅是“找茬”，它是一种深刻的团队协作和知识传递的仪式。 它或许会花费一些时间，但正如本文开头所说，如果把时间的卡尺扩展到整个职业生涯，它所带来的个人成长、代码质量提升和团队文化建设的收益，将远远超过投入的成本。它或许会让你少写几行代码，多花几分钟讨论，但从长远看，这笔投资的回报率高得惊人。&lt;/p&gt;&#xA;&lt;p&gt;它迫使我们放慢脚步，去思考、去沉淀，最终写出更健壮、更优雅的代码。&lt;/p&gt;&#xA;&lt;p&gt;希望我们都能爱上Code Review，享受这个和代码、和同事一起“打怪升级”的过程。&lt;/p&gt;&#xA;&lt;p&gt;PS: 推荐阅读 &lt;a href=&#34;https://github.com/google/eng-practices/blob/master/review/index.md&#34;&gt;Google eng-practices about Code Review Doc&lt;/a&gt;&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>08 Aug 25 04:11 CST</pubDate>
    </item>
    <item>
      <title>周报#19-幸运与感恩</title>
      <link>https://www.tunan.fun/blog/19-grateful-for-the-grace</link>
      <description>前言 本周报记录在2025-07-07-2025-07-17的生活。 因为这周五请了婚假，要回东北媳妇家，办回门宴，下周四才回来，这周末可能没时间写周报了。...</description>
      <content:encoded>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;本周报记录在&lt;code&gt;2025-07-07&lt;/code&gt;-&lt;code&gt;2025-07-17&lt;/code&gt;的生活。&lt;/p&gt;&#xA;&lt;p&gt;因为这周五请了婚假，要回东北媳妇家，办回门宴，下周四才回来，这周末可能没时间写周报了。&lt;/p&gt;&#xA;&lt;p&gt;但最近十天发生的事情却不少，想着还是早点把这两周的周报发出来，避免记忆生锈，晚些时候写起来那股新鲜劲都暗淡了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/telegram-cloud-photo-size-5-6301040640884064445-y.jpg&#34; alt=&#34;telegram-cloud-photo-size-5-6301040640884064445-y&#34; style=&#34;zoom: 33%;&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;如上图所示，Got a marriage certification with &lt;code&gt;Maxine&lt;/code&gt;。现在我们是法律认可的夫妻了，虽然我们之间的关系似乎不需要一个证件来锁定或证明。&lt;/p&gt;&#xA;&lt;p&gt;领证那天是工作日，但还是有不少新人在排队等待，并且几乎除了我们之外的所有新人都带着跟拍来，想记录下这完美的一刻。素颜朝天的&lt;code&gt;Maxine&lt;/code&gt;和胡子拉碴的我反而显得有点和周围格格不入。&lt;/p&gt;&#xA;&lt;p&gt;在等待婚姻登记处开门的时候，我们俩就在那个小公园里逛了逛，发现一个彩票站，于是想着这么个特殊的日子要不就买一张刮刮乐吧。&lt;code&gt;Maxine&lt;/code&gt;选了一张，一开始以为是30元的，没想要到50元，于是还是斥巨资买了下来——&lt;strong&gt;中了80&lt;/strong&gt;！&lt;/p&gt;&#xA;&lt;p&gt;然后继续等待开门的时候，&lt;code&gt;Maxine&lt;/code&gt;在小红书上查了查杭州市有什么领证福利，结果看到领证后还可以再免费拿一张价值二十元刮刮乐。等开门后，花了十几分钟排队、领证，很快就结束了。然后回到那个彩票站，又领了一张——&lt;strong&gt;又中50&lt;/strong&gt;！&lt;/p&gt;&#xA;&lt;p&gt;彩票站的人也为我们感到开心，问我们需不需要拍照（公益性质的），不过我们婉拒了，因为我们的确不需要这种仪式感了，其次是我们那个状态，不敢想象拍出来的照片得多难看🤣&lt;/p&gt;&#xA;&lt;p&gt;当领完证的时候，我和&lt;code&gt;Maxine&lt;/code&gt;在讨论，其实我们先办婚礼再领证就挺好的，因为先办完婚礼，基本上所有风险点就没了，领证只是顺水推舟的事情。多少人领完证后，又在办婚礼的时候矛盾迭出，最后支离破碎的…&lt;/p&gt;&#xA;&lt;p&gt;并且等办完了婚礼后，想领证时的这种没必要的小仪式感好像也没必要了（当然，生活还是需要浪漫和仪式）。&lt;/p&gt;&#xA;&lt;p&gt;其实在中奖后，我心里那头贪婪的😈又在作祟了：再买一张吧，毕竟你已经赚了，说不定还能赚个更大的。但幸好，理智再一次战胜了它，并且&lt;code&gt;Maxine&lt;/code&gt;也没有表现出想再刮一张，我很欣赏她的一点就是，她内心情绪的起伏总是很平缓，这也是她比我更加乐观的原因之一。&lt;/p&gt;&#xA;&lt;p&gt;我们随后又讨论说，其实不刮新的一张是对的，因为从理性角度看，买一张刮刮乐中奖的概率毕竟是很低的。我们花钱买了一张，免费领了一张，两张都中奖了，这是老天对我们的眷顾。&lt;/p&gt;&#xA;&lt;p&gt;我理解为这是老天爷因为看我们喜结连理替我们感到开心，所以愿意让我们喜上加喜，但如果想继续贪婪，可能就会辜负这份恩赐了。&lt;/p&gt;&#xA;&lt;p&gt;虽然80块对我们来说不是很多，但在这样的日子收获一笔&lt;code&gt;windfall&lt;/code&gt;也真得足够让我们开心一整天了。我们一直说，我们真的做什么事情都很幸运，就拿备婚来说，我们拍婚纱的当天天气不冷不热也不下雨，这很难得。因为前面几天和后面几天的杭州天气都不是很好，杭州三月的天气确实是阴晴不定。婚礼前几天被告知我们的化妆师因为个人身体原因实在不能跟妆了，给我们换了一个。一开始我们还很担心，但五一回家后试妆发现比之前那个还要好！婚礼当天也是，本来都说没雨，但天气预报突然广播有雨了，中午天都阴沉沉的了，但几滴小雨根本不碍事，等到婚礼仪式举行的时候反而天气凉爽的很。这些都是我们人为控制不了的事情，但却都幸运的刚刚好。&lt;/p&gt;&#xA;&lt;p&gt;我说我可能从小就是个运气好的小孩，&lt;code&gt;Maxine&lt;/code&gt;说她也是。我问，如果我们那两张没中呢？其实这才是真正需要思考的问题。因为损失厌恶往往会对心情造成很大的破坏，那天我们也不会想到我们一直是很幸运的人。&lt;/p&gt;&#xA;&lt;p&gt;两张彩票都不中其实才是常态，如果我们能够在不中的情况下还保持领证的好心情，那才是真正的幸运。我们才是上帝也好、佛祖也好，反正某个神灵真正的宠儿。因为这才是普通人所不具备的特性。&lt;/p&gt;&#xA;&lt;p&gt;如果是生活中的小确幸发生了，那我们确实应该感恩；但如果没发生也请不要悲伤或者怨天尤人，否则好运会离你越来越远，努力修炼去保持一颗平常心。&lt;/p&gt;&#xA;&lt;p&gt;也要时刻保持感恩的心，感恩生活中的美好，感恩一直善良、努力的自己。&lt;/p&gt;&#xA;&lt;h2 id=&#34;输入与探索&#34;&gt;输入与探索&lt;/h2&gt;&#xA;&lt;h3 id=&#34;书籍&#34;&gt;书籍&lt;/h3&gt;&#xA;&lt;p&gt;读了一点《多巴胺力量》这本书，但实在读不进去，感觉这本书很一般。&lt;/p&gt;&#xA;&lt;h4 id=&#34;taking-side-社会篇&#34;&gt;Taking Side 社会篇&lt;/h4&gt;&#xA;&lt;p&gt;遂在第二周从书架上拿出来之前买了还一直没看的一本英文书：&lt;em&gt;Taking Sides&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;这本书内容相当扎实，当时买了一直不看就是因为它里面的句子太复杂，很多单词我都不认识，读起来相当吃力。&lt;/p&gt;&#xA;&lt;p&gt;一年的英文学习后，再来读这本书，虽然还是读得很慢，但已经没有之前那么抗拒了。&lt;/p&gt;&#xA;&lt;p&gt;这也让我认识到，当去做一件当下自己能力不足以完成的任务时，很容易就无疾而终，不如先做一些适当难度等级的任务。&lt;/p&gt;&#xA;&lt;p&gt;随着Capacity和Ability的增进，慢慢的以前那些困难的任务也就容易完成了，从而更加使得技能提升。&lt;/p&gt;&#xA;&lt;h3 id=&#34;文章&#34;&gt;文章&lt;/h3&gt;&#xA;&lt;h3 id=&#34;视频&#34;&gt;视频&lt;/h3&gt;&#xA;&lt;h4 id=&#34;breaking-bad&#34;&gt;Breaking Bad&lt;/h4&gt;&#xA;&lt;p&gt;之前看过 &lt;em&gt;Breaking Bad&lt;/em&gt;，整整五季都看过了 。&lt;/p&gt;&#xA;&lt;p&gt;这次看是在&lt;code&gt;Netflix&lt;/code&gt;上看的，主要是在通勤路上打发时间用，关掉中文字幕去看，基本上也能看懂了，这是学习英语路上的一个&lt;code&gt;重大转折点&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这一年多的英文学习，自己进步最大的就是阅读能力，除了词汇量和短语的增长外，更重要的是对词汇的熟悉程度和快速理解的能力。&lt;/p&gt;&#xA;&lt;p&gt;两个星期看了三季了，天知道这两周我花了多少时间在这上面。幸好从第三季开始就没有那么精彩了，我也应该收收心多把时间放在正八经的阅读和学习上了。&lt;/p&gt;&#xA;&lt;h4 id=&#34;信息归处一目了然用-glance-打造家庭服务器仪表盘&#34;&gt;信息归处，一目了然：用 Glance 打造家庭服务器仪表盘&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sspai.com/post/100683&#34;&gt;信息归处，一目了然：用 Glance 打造家庭服务器仪表盘&lt;/a&gt; 看了这个后，甚至有了想搭建家庭服务器的冲动，但冷静下来发现“为了吃口醋还特意包顿饺子”的亏本买卖实在不划算。&lt;/p&gt;&#xA;&lt;p&gt;但有一天，等有了自己的小家了，我也会搭建&lt;a href=&#34;https://sspai.com/post/82512&#34;&gt;这样一套服务中心&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;h4 id=&#34;兴趣专业商业思维&#34;&gt;兴趣+专业+商业思维&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/OpTHwyHza24?si=UpmlcQUoYkiPDDlY&#34;&gt;年輕人翻身無望！ 付鵬說未來五到十年只有一次機會，要做好這幾點。&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;要想在这衰退的时代里保持财富不流失甚至增长，更要有清晰的头脑，高度的认知。&lt;/p&gt;&#xA;&lt;p&gt;如何抓住感兴趣的事物（保持好奇心），并在此之上变得专业，通过商业思维进行变现？这是近十几年都应该去认真思考和实践的命题。&lt;/p&gt;&#xA;&lt;h3 id=&#34;podcast&#34;&gt;Podcast&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.npr.org/transcripts/1255526971&#34;&gt;Made in America: Planet Money&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;课程&#34;&gt;课程&lt;/h3&gt;&#xA;&lt;h3 id=&#34;英文学习&#34;&gt;英文学习&lt;/h3&gt;&#xA;&lt;p&gt;最近只和&lt;code&gt;Mango&lt;/code&gt;练习了一次，这次只是单纯地摆了摆龙门阵。光是我最近公司发生的一系列事情，就足够撑满1.5hour的topic了。&lt;/p&gt;&#xA;&lt;p&gt;至于最近都发生了啥，本来想在下文&lt;code&gt;守得云开见月明&lt;/code&gt;中好好讲讲的，但还是涉及到一些个人和公司的隐私，想想还是算了。&lt;/p&gt;&#xA;&lt;p&gt;但还是可以用学到的两句英文简单概括一下： &lt;code&gt;I am finally done with my current leader.&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;I&#39;ve been vindicated!&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;做了哪些事儿&#34;&gt;做了哪些事儿&lt;/h2&gt;&#xA;&lt;h3 id=&#34;记账软件迭代&#34;&gt;记账软件迭代&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://life.tunan.fun/#/transaction-record&#34;&gt;记账首页-增加类型、账户的筛选项&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;这是上周&lt;code&gt;Maxine&lt;/code&gt;提出的功能迭代。因为她觉得只有时间和收支两个筛选项根本不够。这个功能其实很简单，可能让我花个十几分钟就能搞定，但是实际上只用了3分钟！！！&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;VIBE-CODING！&lt;/code&gt;我让&lt;code&gt;Gemini-CLI&lt;/code&gt;去给我实现了这个功能。他分两步来修改我的代码，第一步是修改前端的vue文件，紧接着在后端工程中修改相应的API和仓储层代码。&lt;/p&gt;&#xA;&lt;p&gt;最厉害的地方在于我只用了十几个字描述的功能，它一次性就成功了！我需要做的只是重新打包部署然后告诉媳妇更新了…不得不感叹现在AI的发展真是令人瞠目结舌。&lt;/p&gt;&#xA;&lt;p&gt;除了&lt;code&gt;Gemini-CLI&lt;/code&gt;外，最近两周用的最多的还是&lt;code&gt;JetBrains&lt;/code&gt;的&lt;code&gt;Junie Pro&lt;/code&gt;，这个更加流畅，在IDE中使用起来更加方便，交互也更好。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250714145644397.png&#34; alt=&#34;image-20250714145644397&#34; style=&#34;zoom: 67%;&#34; /&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;运动&#34;&gt;运动&lt;/h2&gt;&#xA;&lt;p&gt;这两周运动的比较少。 - 游泳一次 - 羽毛球三次&lt;/p&gt;&#xA;&lt;h2 id=&#34;有趣的事情&#34;&gt;有趣的事情&lt;/h2&gt;&#xA;&lt;p&gt;媳妇儿让我帮她趁着夏日促销在&lt;code&gt;Steam&lt;/code&gt;上买一些游戏。买了几个后发现她爱玩的没有几个，反而其中一个叫&lt;code&gt;星露谷物语&lt;/code&gt;的游戏我玩起劲了。&lt;/p&gt;&#xA;&lt;p&gt;好家伙，一玩我就玩了周日的一下午，这游戏实在太解压了。我也已经好久没玩这种养成类的游戏了，感觉上次玩这种类似的游戏还要是十几年前玩洛克王国的时候。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250710092001159.png&#34; alt=&#34;image-20250710092001159&#34; style=&#34;zoom: 33%;&#34; /&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;守得云开见月明&#34;&gt;守得云开见月明&lt;/h2&gt;&#xA;&lt;p&gt;todo…&lt;/p&gt;&#xA;&lt;p&gt;是关于公司的事情，有点像是&lt;code&gt;corporate politics&lt;/code&gt;。或许等到时机合适的时候，再回头补齐这段记忆。反正是好事情啦，最起码目前看是这样。&lt;/p&gt;&#xA;&lt;p&gt;只能说&lt;code&gt;恶人必有恶报，作茧必将自缚&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;最后&#34;&gt;最后&lt;/h2&gt;&#xA;&lt;p&gt;明天就要🛫去媳妇家了，可惜只有短短的六天时间，路上就要花两天，因为媳妇儿家实在太远了！！！但这次去又能吃到丈母娘做的好吃的了，哈哈哈。我可真是个馋女婿。&lt;/p&gt;&#xA;&lt;p&gt;下周回来后尽快↩︎恢复工作学习状态，假期期间也要坚持每日的Anki打卡。我还决定把 &lt;em&gt;TakingSide&lt;/em&gt; 带回去，准备在她家继续保持阅读。&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>17 Jul 25 18:52 CST</pubDate>
    </item>
    <item>
      <title>Report#18-July means hot</title>
      <link>https://www.tunan.fun/blog/18-hot-july</link>
      <description>Preface This post records my peaceful but not boring life over the last two weeks: 2025-06-30-2025-07-06. Welcome to July! 🎉 But unfortunately, I hate July, because Jult means hot and I get sweaty ...</description>
      <content:encoded>&lt;h2 id=&#34;preface&#34;&gt;Preface&lt;/h2&gt;&#xA;&lt;p&gt;This post records my peaceful but not boring life over the last two weeks: &lt;code&gt;2025-06-30&lt;/code&gt;-&lt;code&gt;2025-07-06&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Welcome to July! 🎉 But unfortunately, I hate July, because Jult means hot and I get sweaty so easily.&lt;/p&gt;&#xA;&lt;p&gt;I’ve been swimming more this week because swimming is one of the few sports that can be done in the summer. ## Exploring ### Books 《下班后开始新的一天》&lt;/p&gt;&#xA;&lt;p&gt;I am done reading, and I wrote a book review about it: &lt;a href=&#34;https://www.tunan.fun/blog/book-review-new-day-after-work&#34;&gt;书评-下班后开始新的一天&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It helps me manage my time after work better.&lt;/p&gt;&#xA;&lt;h3 id=&#34;articlesposts&#34;&gt;Articles&amp;amp;Posts&lt;/h3&gt;&#xA;&lt;h4 id=&#34;x-happiness-increases-are-possible-and-this-is-an-underrated-fact&#34;&gt;10x happiness increases are possible, and this is an underrated fact&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sashachapin.substack.com/p/10x-happiness-increases-are-possible&#34;&gt;10x happiness increases are possible, and this is an underrated fact&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;年-5份工作-4次gap&#34;&gt;10年 5份工作 4次gap&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.douchi.space/career-gaps/#gsc.tab=0&#34;&gt;10年 5份工作 4次gap&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;tracking-my-mood-every-day-for-1-year&#34;&gt;Tracking my mood every day for 1 year&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.neilchen.co/blog/mood&#34;&gt;Tracking my mood every day for 1 year&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;videos&#34;&gt;Videos&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/_KqWctjw9kY?si=eONn-Sp89GSlY-0n&#34;&gt;Time Value of Money&lt;/a&gt; The video explains a concept that a certain amount of money today is worth more than the same amount in the future due to its potential earning capacity.&lt;/p&gt;&#xA;&lt;p&gt;In China, most children, including myself, are not taught this concept, which is very significant in your life.&lt;/p&gt;&#xA;&lt;h3 id=&#34;podcast&#34;&gt;Podcast&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://podcasts.apple.com/cn/podcast/planet-money/id290783428?i=1000715500118&#34;&gt;A thought experiment on how to fix the national debt problem&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;courses&#34;&gt;Courses&lt;/h3&gt;&#xA;&lt;p&gt;Nope.&lt;/p&gt;&#xA;&lt;h2 id=&#34;english-learning&#34;&gt;English Learning&lt;/h2&gt;&#xA;&lt;p&gt;Read &lt;a href=&#34;https://www.raptitude.com/2022/01/everything-must-be-paid-for-twice/&#34;&gt;an article&lt;/a&gt; with Mango.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250705153807295.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250705153807295&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;We did a good job!&lt;/p&gt;&#xA;&lt;h2 id=&#34;exercise&#34;&gt;Exercise&lt;/h2&gt;&#xA;&lt;p&gt;I played badminton twice and went swimming twice this week.&lt;/p&gt;&#xA;&lt;p&gt;The summer is so hot. The temperature in Hangzhou is almost 40 degrees Celsius. If you go outside for even 1 minute, you will start sweating.&lt;/p&gt;&#xA;&lt;h2 id=&#34;bad-things&#34;&gt;Bad Things&lt;/h2&gt;&#xA;&lt;p&gt;This week, I had a falling out with my leader. I can’t stand him anymore. He is so narrow-minded and stingy.&lt;/p&gt;&#xA;&lt;p&gt;Now, I’m not worried about it, because I know most of my colleagues and other leaders support me. My mental state has been improving during this year. I won’t let it bother me, even though the situation sucks.&lt;/p&gt;&#xA;&lt;h2 id=&#34;interesting-things&#34;&gt;Interesting things&lt;/h2&gt;&#xA;&lt;h3 id=&#34;deposit-money&#34;&gt;Deposit money&lt;/h3&gt;&#xA;&lt;p&gt;We checked the income and outcome of , even though our salary is not high, we saved some money because we were frugal.&lt;/p&gt;&#xA;&lt;p&gt;We went to deposit money this week. I learned the yearly rate of Dollars is higher than RMB, I am considering if I should exchange more USD.&lt;/p&gt;&#xA;&lt;p&gt;China is in a period of deflation right now, and I feel reluctant to spend, so all I want to do is save money.&lt;/p&gt;&#xA;&lt;h3 id=&#34;reading-day&#34;&gt;Reading day&lt;/h3&gt;&#xA;&lt;p&gt;We started the first session of the “Reading day” activity. We took turns sharing our thoughts and learning outcomes.&lt;/p&gt;&#xA;&lt;p&gt;We will continue doing it in the future. It’s a great opportunity to help &lt;code&gt;Maxine&lt;/code&gt; develop a reading habit.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250705155127268.png&#34; alt=&#34;image-20250705155127268&#34; style=&#34;zoom: 50%;&#34; /&gt;&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>07 Jul 25 04:00 CST</pubDate>
    </item>
    <item>
      <title>书评#02-下班后开启新的一天</title>
      <link>https://www.tunan.fun/blog/book-review-new-day-after-work</link>
      <description>上周末去杭州市图书馆借了两本书《下班后开始新的一天》和《多巴胺力量》，这周把第一本读完了，试着写写这本书的书评，或者可以说是对看书过程中笔记的总结。...</description>
      <content:encoded>&lt;p&gt;上周末去杭州市图书馆借了两本书《下班后开始新的一天》和《多巴胺力量》，这周把第一本读完了，试着写写这本书的书评，或者可以说是对看书过程中笔记的总结。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;John Ruskin&lt;/code&gt; 说：“人生不是逝去，而是充实，我们不是在‘度过’每一天，而是在用自己所拥有的东西‘填满’每一天”。&lt;/p&gt;&#xA;&lt;p&gt;这句话仔细思量起来很有启示意义。我总感觉生活没有意思和意义。尤其是当生活没有新鲜感，大部分时间又投入在工作上的时候。&lt;/p&gt;&#xA;&lt;p&gt;很多时候，周一早上睁开眼睛就觉得是噩梦的开始，因为又要上五天班了。一大早先在微信群里和朋友们相互抱怨一声“周一又开始了，啥时候能上四休三啊”。&lt;/p&gt;&#xA;&lt;p&gt;“上班-&amp;gt;苦等周末-&amp;gt;周末什么都不做—&amp;gt;上班” 成了死循环，好久之前的我就是这个样子。周五我可能会在我的&lt;code&gt;Notion&lt;/code&gt;上早就记好了周末要干什么，但完不成这些&lt;code&gt;todo items&lt;/code&gt;却是常态.因为要完成那些事情基本上要占据我所有的周末时间。如果有个周末过得过于“颓废”，周日失眠便是一定的了。&lt;/p&gt;&#xA;&lt;p&gt;在没有读这本书之前，其实上述情况已经有所改变。我也会在工作日做一些事情，比如运动、读书、学习或者和语言学习伙伴约定练习。只不过缺少一些方式方法，导致经常有时候常常不知要干啥、完不成计划或者效率很低也长期不见成效。&lt;/p&gt;&#xA;&lt;p&gt;所以这本书，对于更多的是一些思维的强化和一些技巧的习得。我本身可能并不需要被告知应该珍惜时间，因为我早已深知时间的重要性。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;如果把事情都挤在周末，那就好像这个礼拜一天都没有休息。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;我经常把周末排满，等待周末来了后再大展拳脚。但等周末来了后，会发现各种事情阻碍了这些计划的实现：睡懒觉、想玩游戏、给媳妇做顿好吃的、出去玩等等。&lt;/p&gt;&#xA;&lt;p&gt;这就是我说的思维强化，我能亲身感受到这样的周末会很累，但我没有思考过“好像这个礼拜天都没有休息”，也不曾改变。书里明确写出的观点使我醍醐灌顶，强化了这个想法：我不应该把计划都排在周末。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;当你觉得时间很充裕的时候，效率就会下降，拥有大量的自由时间，反而呢需要更多的自制力。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这也是思维强化，明明一些观点是常识性的，但一旦用文字描述出来后就会给人以震撼。这就是为什么周末任务总是排的过多且完不成的原因。在制定计划的时候往往想着周末我有一大片的可分配的自由时间，我能做很多事情。但实际上真到了周末，你可能会想，我还有很多时间，我先玩会游戏放松一下吧，毕竟都上了一星期班了！&lt;/p&gt;&#xA;&lt;p&gt;这也引出了本书的主题——下班后的时间也需要利用起来，并且提高下班时间的利用率！&lt;/p&gt;&#xA;&lt;p&gt;我下班后也不喜欢做事情，只想躺着玩玩手机或者看看电视，对于我来说这往往是因为多方面原因：&lt;/p&gt;&#xA;&lt;ol type=&#34;1&#34;&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;/ol&gt;&#xA;&lt;p&gt;实际上我在没读这本书之前，已经在逐步解决这些问题了，比如： 1. 我会在早上或者晚上读书，因为这是我明确的要在某个时间段中要做完的事情，并且读书给我带来的知识让我觉得我在进步； 2. 我会去运动，因为我做的运动都是我喜欢的——打羽毛球。最近开始游泳，不过不是因为我自己，而是天气现在太热了，并且有媳妇陪伴，我才会晚上去游泳； 3. 我会安排每周几次和我的语伴练习英文，因为英文的进步是我生活中为数不多的成就感的来源，并且有人一起相互进步和监督也是能坚持下去的重要原因； 4. 学习技术和编程。这一点我做的不好，因为这件事情往往会命中上述的所有原因：不明确目的、无聊且耗费精力、不着急、过于复杂&lt;/p&gt;&#xA;&lt;p&gt;但实际上第四点对我的职业生涯和整个人生非常重要，即使为了我需要有副业收入，可能也是我的主业技能——编程所带来的。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;找到自己喜欢做的事情，尽情去做。下班后，用自己喜欢的事情来充实时间并非消耗，而是在积攒能量。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;试试看想着做自己喜欢做的事情，在晚上的时间里一点点挑战一下开展副业，不要小看这些年轻时就开始做的副业，它们说不定就能够养活60岁以后的你。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;我并非不喜欢编程，甚至我有一点点喜欢。我应该调整的是我的策略，我应该少一点去学习什么“算法”和“机器学习”这种课程，而是去做一些自己感兴趣的APP，或者学习一些见效快的，比如前端编程。&lt;/p&gt;&#xA;&lt;p&gt;为什么应该在下班后减少学习“算法和机器学习”这种课程，因为这些事情带来的心理压力实在太大了，它们直接命中了上文中的2、3、4点原因。在该书中给出了“如何找出下班后能做的事情”的方法，这个还是蛮可以借鉴的： &amp;gt; - 选择那些能够让你稍微忙起来，但压力比较小的事情（像读书、和语言伙伴练习英文口语、运动就属于这一类，但学习某个专业技术和课程就属于压力较大的那种） &amp;gt; - 提前计算所需的时间和费用 &amp;gt; - 先试一试，不合适就干脆放弃&lt;/p&gt;&#xA;&lt;p&gt;如何从“好累，又是疲惫的一天”转变为“没关系，真正属于我的一天现在才开始”。疲惫很大的原因，是因为在工作中没有成就感，而成就感又是对抗疲劳感最强大的武器。现代社会中，基本上每个人都是一颗小小的螺丝钉，工作中没有成就感是很正常的一件事情。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;不要把全部价值都放在本职工作上，如果能在下班后拿出一部分精力培养另一门技能、兴趣或者副业，就会收获成就感，生活也会慢慢丰富充实起来。在这种情绪下，反而会更喜欢自己的工作。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;对此我也有亲身体会，几年前自己练习游泳，因为没有时间，只能早上六点就起床去游泳馆游泳，按理说起得早又很累，投入到工作的精力会很少。但实际上，游泳完后，一天的工作效率都会增高，心情也会好很多。这当然有多方面原因，但成就感和充实感一定在其中起了关键作用。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;自己去寻找自己喜欢和想做的事情，这样的经验很宝贵，因为在工作中总是按照别人的指示在做事情。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这是一种对自己主动能力的锻炼，自己积极去寻找要做的事情，尽量去制定合理的计划，按计划有效完成，这都是对个人能力的锻炼。&lt;/p&gt;&#xA;&lt;p&gt;探索最适合自己的副业，作者给出了五种副业类型： &amp;gt; - A型：能够熟练使用Excel、Photoshop等程序； &amp;gt; - B型：喜欢用文字整理想法； &amp;gt; - C型：喜欢画画，喜欢可爱的东西； &amp;gt; - D型：喜欢到处拍照； &amp;gt; - E型: 喜欢钻研某个特定领域。&lt;/p&gt;&#xA;&lt;p&gt;目前我在做的是B型，我坚持读书，输出博客等，在未来我可能会在E型上做一些事情，比如等技术达到某种水平，做一些技术相关的视频号。&lt;/p&gt;&#xA;&lt;p&gt;当选定了目标后，后面就是线路图： &amp;gt; 1. 锚定目标 2. 寻找意义 3. 确定项目 4. 制定行动计划。但我觉得这个对我的意义不大。&lt;/p&gt;&#xA;&lt;p&gt;作者还提到了曼陀罗计划表的制定，这个对我来说也作用不大，因为我更倾向于《高效能人士的七个习惯》中的“以始为终”的指导法则。&lt;/p&gt;&#xA;&lt;p&gt;但书中提到的另一个计划表——每日计划表/每日回顾表对我有很大的帮助。我之前都一直践行现代的、高效的四象限时间管理法，甚至有点鄙夷以每天固定时间干什么事情的日程管理法。&lt;/p&gt;&#xA;&lt;p&gt;但实际上，我却忽略了后者的优势：如果你按照精准的时间管理，你再次回顾时就能知道自己做事的具体效率以及后续的改进措施。&lt;/p&gt;&#xA;&lt;p&gt;利用时间轴计划表来回顾： &amp;gt; 每隔一个小时就记录一下；记录得详细一点；总结什么时间段做什么事情最有效率；如果是初尝试的事情，不妨比预估的多排1.5倍。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;制作晚间日程计划表。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;现在我认可作者的做法，所以我也要做到知行合一，最近也在这样做，从而检查和解决我的晚间工作效率问题。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;时间管理中最大的敌人不是休息时间，而是既没有好好休息，也没有好好工作，只是马马虎虎地度过的时间。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;解决这个问题我想有三个方面需要做： 1. 合理地安排计划，而不是盲目自信地安排。比如把某个原本周末要做的事情分配到某个工作日，比如这周原打算在周末进行上半年的家庭财政情况就在周五晚上完成了，周末又少了一个todo item。 2. 精简任务类型。我总是想做太多事情，总是有焦虑感推动我一直想学习更多的内容，但其实这些任务完不成不说还更加加重了焦虑感。 3.提升效率和设置deadline。比如写书评这件事，就可以安排在某个工作日晚上，沉浸式的花两三个小时就能写完，这样子周末又少了很大的负担。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;如果赋予了某件事情太大的意义，那么无论是开始行动还是失败，都会产生过多的情绪，而情绪本身就会耗去很大的能量，让我们患得患失，心力交瘁。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;与其强迫自己重复做没有意思的事情，不如动动脑筋，努力想想怎样才能让事情变得有趣一点。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这就是我上问中说的，既然喜欢编程，就去搞搞前端，搞搞自己的网站和记账系统，而不是坚持每晚去学习什么机器学习和大数据等。把这些困难的事情放在周末或者上班的时间，也不要过多地将其赋予过多的意义，学得会是收获，学不会是正常。&lt;/p&gt;&#xA;&lt;p&gt;坚持不下去的时候，我该…&lt;/p&gt;&#xA;&lt;blockquote&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;每天进步1%，一年后就可以增长37倍；&lt;/li&gt;&#xA;&lt;li&gt;我们的原点只是想在下班后的时间里，做些对自己有意义的事，或者只是坚持自己的兴趣爱好。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;总结：本书，推荐指数 🌟🌟🌟 （满分是5颗🌟）。书中里面的一些技巧有一定的作用，但读这本书更多的是对“认同下班时间很重要”的思想的强化。只有思想不断强化，这些技巧才会利用起来。&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>06 Jul 25 01:58 CST</pubDate>
    </item>
    <item>
      <title>周报#17-大多数事情需要支付两次</title>
      <link>https://www.tunan.fun/blog/17-has-to-paid-twice</link>
      <description>&gt; 🪄 GEMINI CLI&#39;S ABSTRACT: 这篇周报的核心是作者对个人成长方式的反思，重点围绕“所有东西都需支付两次”和“要深入，而非更广”两个主题。...</description>
      <content:encoded>&lt;blockquote&gt;&#xA;&lt;p&gt;🪄 GEMINI CLI’S ABSTRACT: 这篇周报的核心是作者对个人成长方式的反思，重点围绕“所有东西都需支付两次”和“要深入，而非更广”两个主题。作者意识到，自己常因焦虑而追求广度，不断获取新书、学习新技术，但仅完成了“第一次支付”（获取），却缺少投入时间精力的“第二次支付”（深入使用和吸收）。他并非要停止探索，而是在反思自己应在选定的领域投入更多精力，克服浅尝辄止的习惯，通过深入钻研来代替广泛涉猎，从而缓解焦虑，获得真正的进步。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;本周报记录&lt;code&gt;2025-06-16&lt;/code&gt;到&lt;code&gt;2025-06-28&lt;/code&gt;的两周生活。&lt;/p&gt;&#xA;&lt;p&gt;最近因为工作内容的变动，要做大数据相关的内容，因为之前没有接触过，所以最近在开始学习大数据相关的内容。&lt;/p&gt;&#xA;&lt;p&gt;MachineLearning 的学习只能先搁置一下（我一定会回来的！🦭）。&lt;/p&gt;&#xA;&lt;p&gt;本周的主题是&lt;code&gt;所有东西都需要支付两次&lt;/code&gt;和&lt;code&gt;深入，而不是更广泛&lt;/code&gt;。这来自我看到的两篇文章（后文中会见到）。&lt;/p&gt;&#xA;&lt;p&gt;我总是焦虑地去摄取、记录，却很少停下来去吸收和回顾。往往容易买一件东西，只享受下单和货物刚到时的快感，却没有做到物尽其用。&lt;/p&gt;&#xA;&lt;p&gt;学习新知识也是这样，总是学个皮毛就没有了坚持下去的动力。这是因为焦虑总是推动我去学习更多，而不是让自己学得更深。&lt;/p&gt;&#xA;&lt;p&gt;后面也要慢慢改正这些错误的习惯和不易察觉的错误观念，等真正深入去做的时候，或许焦虑感也会消失，并且也能真正地获得进步。&lt;/p&gt;&#xA;&lt;h2 id=&#34;输入与探索&#34;&gt;输入与探索&lt;/h2&gt;&#xA;&lt;h3 id=&#34;文章&#34;&gt;文章&lt;/h3&gt;&#xA;&lt;h4 id=&#34;书非借不能读也&#34;&gt;书非借不能读也 🌟🌟🌟🌟🌟&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ruanyf/weekly/blob/master/docs/issue-333.md#%E4%B8%80%E5%88%87%E9%83%BD%E8%A6%81%E6%94%AF%E4%BB%98%E4%B8%A4%E6%AC%A1&#34;&gt;一切都要支付两次&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.raptitude.com/2022/01/everything-must-be-paid-for-twice/&#34;&gt;Everything Must Be Paid for Twice&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;人们买书却不读，是因为没有意识到每样东西都需要两次支付。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;第一次是货币支付，你付出货币，得到自己想要的东西，比如一本书，一个 App，一辆自行车，一颗卷心菜等等。但是，你还必须支付第二次，才能真正消费这个东西。这次你付出的是你的时间和努力，来获得它的收益。第二次支付可能比第一次支付贵得多。假设一本书的第一次支付是20元，第二次支付可能就是10小时的阅读时间。只有支付第二次，你才算真正消费了这本书。如果没有第二次支付，第一次支付就意义不大了，跟把钱扔进垃圾箱差不多。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;One financial lesson they should teach in school is that most of the things we buy have to be paid for twice. There’s the first price, usually paid in dollars, just to gain possession of the desired thing, whatever it is: a book, a budgeting app, a unicycle, a bundle of kale. But then, in order to make use of the thing, you must also pay a second price. This is the effort and initiative required to gain its benefits, and it can be much higher than the first price.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h4 id=&#34;go-deeper-not-wider&#34;&gt;Go Deeper, Not Wider 🌟🌟🌟🌟🌟&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.raptitude.com/2017/12/go-deeper-not-wider/&#34;&gt;Go Deeper, Not Wider&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在许多其他财产中，我有一套水彩画、一把吉他和放大器，以及一堆“学习法语”书籍。如果让我和这些物品呆在牢里，我一定会成为我购买这些东西时想成为的有成就的吉他手、画家和通晓多种语言的人。但新的选择似乎一直在进入我的生活，所以我逐渐远离了旧的选择。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;能够自由地不断扩大我们的兴趣，真是太好了。但与许多奢侈品一样，它有一个阴险的缺点 。不断地分支使我们更难深入探索任何给定的可能性，因为当旧的新事物达到困难或无聊的部分时，总是可以转向更多的 “新”。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;有时候我们需要停下脚步，去 Go Deeper。这可能就是我焦虑的原因，总是一时兴起去学某个技术，但又静不下心来去耐心研究他，所以导致我什么都学不好。&lt;/p&gt;&#xA;&lt;p&gt;读书也是这样，我能倒回去看两遍的书也很少，甚至很多新书我都没有看。&lt;/p&gt;&#xA;&lt;p&gt;我也应该静下心来，适当地去Go Deeper，Not Wider。 #### MapReduce Tutorial-tutorialspoint &lt;a href=&#34;https://www.tutorialspoint.com/map_reduce/index.htm&#34;&gt;MapReduce Tutorial-tutorialspoint&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;claude-code-首席工程师揭秘-ai-如何重塑开发日常&#34;&gt;Claude Code 首席工程师揭秘 AI 如何重塑开发日常！&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://news.qq.com/rain/a/20250610A01XG500&#34;&gt;Claude Code 首席工程师揭秘 AI 如何重塑开发日常！&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;最近 &lt;code&gt;Claude Code&lt;/code&gt;的风头正足啊，但是它的订阅实在太贵了, &lt;code&gt;Fantastic, expensive though.&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250627104559570.png&#34; alt=&#34;image-20250627104559570&#34; style=&#34;zoom: 50%;&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;好不容易注册号&lt;code&gt;Claude&lt;/code&gt;的账号，用&lt;code&gt;ClaudeCode&lt;/code&gt;的时候没有免费尝鲜，必须充值！遂放弃，我还是先用&lt;code&gt;ChatGPT&lt;/code&gt;和我的&lt;code&gt;Jetbrains AI assistant&lt;/code&gt;吧。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;我觉得现在这个行业正在转向一个由你来“指挥”AI 智能体编写代码的时代。更多的是审查代码，而不是手写代码。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h4 id=&#34;claude-code-完全指南&#34;&gt;Claude Code 完全指南&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.axiaoxin.com/post/claude-code-full-guide/&#34;&gt;Claude Code 完全指南&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;gemini-cli-的初体验&#34;&gt;Gemini CLI 的初体验&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.google/technology/developers/introducing-gemini-cli-open-source-ai-agent/&#34;&gt;Gemini CLI&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/google-gemini/gemini-cli&#34;&gt;Gemini CLI GITHUB&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/authentication.md#workspace-gca&#34;&gt;gemini-authentication&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Claude Code&lt;/code&gt;用不了，但&lt;code&gt;Gemini CLI&lt;/code&gt;出来了可以尝鲜。都给我卷起来！！！&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250627173154547.png&#34; alt=&#34;image-20250627173154547&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;To use Gemini CLI free-of-charge, simply login with a personal Google account to get a free Gemini Code Assist license. That free license gets you access to Gemini 2.5 Pro and its massive 1 million token context window. To ensure you rarely, if ever, hit a limit during this preview, we offer the industry’s largest allowance: 60 model requests per minute and 1,000 requests per day at no charge.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;课程&#34;&gt;课程&lt;/h3&gt;&#xA;&lt;p&gt;这两周看完了极客时间上的《从0开始学习大数据》的课程。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;最近工作刚开始开展，还处于和外部公司沟通阶段，所以前期有很多时间都在自学大数据阶段.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Ingesting and digesting dramatically！ 🤪&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这是第一次接触 &lt;code&gt;HDFS&lt;/code&gt;,&lt;code&gt;Hadoop&lt;/code&gt;,&lt;code&gt;MapReduce&lt;/code&gt;,&lt;code&gt;Hive&lt;/code&gt;,&lt;code&gt;Spark&lt;/code&gt;,&lt;code&gt;Flink&lt;/code&gt; 这些名词。&lt;/p&gt;&#xA;&lt;p&gt;除了对大数据做了一个基本入门外，作者有一些话也让人印象深刻，应该摘抄下来，时刻回过头来看看，写在本文的最后。&lt;/p&gt;&#xA;&lt;p&gt;读了一篇PPT和两篇关于Spark的论文：&lt;/p&gt;&#xA;&lt;p&gt;https://people.csail.mit.edu/matei/papers/2010/hotcloud_spark.pdf&lt;/p&gt;&#xA;&lt;p&gt;https://cds.iisc.ac.in/wp-content/uploads/DS256.2017.L15.Spark_.RDD_.pdf&lt;/p&gt;&#xA;&lt;p&gt;https://www2.eecs.berkeley.edu/Pubs/TechRpts/2011/EECS-2011-82.pdf&lt;/p&gt;&#xA;&lt;h3 id=&#34;书籍&#34;&gt;书籍&lt;/h3&gt;&#xA;&lt;p&gt;《思考快与慢》，这周读完了这本书。🎉 这周会把书评写一下。&lt;/p&gt;&#xA;&lt;p&gt;《自卑与超越》这本书实在是看不进去，放弃了，这个周末要去杭州市图书馆借《当下的力量》看（但没借到）。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;书非借而不能读也。🤣 (实际上是因为真的不想买书了，每次搬家都好费劲。)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;此外，&lt;code&gt;Maxine&lt;/code&gt;终于主动想要养成读书的习惯了！于是我们制定了一个读书日计划：&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250624160105168.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250624160105168&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;这周日来图书馆借了两本新书：《多巴胺的力量》、《下班后开始新的一天》。不知道好不好看，08-08之前就要读完换掉这两本书了。&lt;/p&gt;&#xA;&lt;h3 id=&#34;视频&#34;&gt;视频&lt;/h3&gt;&#xA;&lt;p&gt;这周开启新剧，在Netflix上看 &lt;em&gt;Sex Education&lt;/em&gt;(性爱自修室)。&lt;/p&gt;&#xA;&lt;p&gt;真的好喜欢&lt;code&gt;Eric&lt;/code&gt;啊，善良重感情，从懦弱慢慢走向勇敢，看到了他的蜕变。也喜欢他老爹，一个成熟稳重坚强的典型黑人男性代表。&lt;/p&gt;&#xA;&lt;p&gt;有一集是&lt;code&gt;Otis&lt;/code&gt;帮助&lt;code&gt;Jackson&lt;/code&gt;出坏主意-给&lt;code&gt;Maeve&lt;/code&gt;制造大场景的浪漫（&lt;code&gt;Otis&lt;/code&gt;听说&lt;code&gt;Maeve&lt;/code&gt;不喜欢这种，觉得幼稚尴尬）。&lt;/p&gt;&#xA;&lt;p&gt;在看这部分剧情的时候，&lt;code&gt;Maxine&lt;/code&gt;跟我说&lt;code&gt;Maeve&lt;/code&gt;肯定会觉得尴尬的，我说不是的，&lt;code&gt;Maeve&lt;/code&gt;一定会很感动。&lt;/p&gt;&#xA;&lt;p&gt;因为她一直以来都因为她的家庭自卑，她嘴上说不喜欢巨大的浪漫场景只是她的保护色，她觉得不会有人这样为她做，但一旦有人为她这样做了，其实她会很开心。&lt;/p&gt;&#xA;&lt;p&gt;最后果然如此。咱也得到了来自老婆的吹捧，说我心理学的书没白看，哈哈哈。&lt;/p&gt;&#xA;&lt;h3 id=&#34;英文学习&#34;&gt;英文学习&lt;/h3&gt;&#xA;&lt;p&gt;和&lt;code&gt;Mango&lt;/code&gt;读&lt;a href=&#34;https://limboy.me/posts/value-oriented-life&#34;&gt;以终为始，面向价值观生活&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;h4 id=&#34;the-order-of-abjective&#34;&gt;The order of abjective&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dictionary.cambridge.org/us/grammar/british-grammar/adjectives-order&#34;&gt;The order of abjective&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Mango&lt;/code&gt;发给我的。&lt;/p&gt;&#xA;&lt;h3 id=&#34;go-升级&#34;&gt;Go 升级&lt;/h3&gt;&#xA;&lt;p&gt;今天想在本地泡一下我的Go代码时，发现没法Debug了。在网上搜索了一通，相关链接：&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://neojos.com/blog/2024/10-01-go%E8%AF%AD%E8%A8%80goland%E7%BC%96%E8%BE%91%E5%99%A8debug%E5%A4%B1%E6%95%88/&#34;&gt;Go语言GoLand debug失效问题修复&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/login?return_to=https://github.com/golang/go/issues/61229&#34;&gt;cmd/link: issues with Apple’s new linker in Xcode 15 #61229&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;和我一模一样，我也是前几天升级了&lt;code&gt;xcode-select&lt;/code&gt;，但是文章中给出的方法我并不适用。我直接将Go从我的原先的&lt;code&gt;1.21.1&lt;/code&gt;升级到了&lt;code&gt;1.24.4&lt;/code&gt;，然后就可以了。&lt;/p&gt;&#xA;&lt;p&gt;每次要升级一个框架和一个语言时，往往不是为了它们的新特性，而是出于某种限制和问题☔️。&lt;/p&gt;&#xA;&lt;h2 id=&#34;运动&#34;&gt;运动&lt;/h2&gt;&#xA;&lt;p&gt;还是每周六必约的羽毛球，这周打了三次球，两次和朋友们打的，一次是公司组织打的。夏天真的来了，和朋友打羽毛球🏸，强度太高，在没有空调的球馆打球，全身都要湿透了。但这也跟我自身体质有关系。&lt;/p&gt;&#xA;&lt;p&gt;把游泳卡续费了，天气越来越热了，以后要🏊锻炼了！&lt;/p&gt;&#xA;&lt;h2 id=&#34;有趣的事情&#34;&gt;有趣的事情&lt;/h2&gt;&#xA;&lt;h3 id=&#34;冷水澡&#34;&gt;冷水澡&lt;/h3&gt;&#xA;&lt;p&gt;前几天看了一个视频，大概意思是研究表明断食、洗冷水澡和游泳都能促进脑细胞的再生。视频链接找不到了，当时在想洗冷水澡真能行吗？&lt;/p&gt;&#xA;&lt;p&gt;看了这篇博客&lt;a href=&#34;https://limboy.me/posts/code-shower&#34;&gt;冷水澡&lt;/a&gt;后，我再次萌生了要不要试一试的冲动。&lt;/p&gt;&#xA;&lt;p&gt;结果一发不可收拾，我现在真的已经爱上洗冷水澡了，每次洗完后都感觉好舒服，只有一开始触碰到冷水的时候会不舒服。&lt;/p&gt;&#xA;&lt;p&gt;《睡眠革命》书里好像也是推荐洗冷水澡。&lt;/p&gt;&#xA;&lt;p&gt;改天也好好研究一下这方面的原理，但直觉告诉我洗冷水澡时的缺氧和游泳时会缺氧的一致性可能是与脑细胞再生相关的。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;切勿运动完后直接洗冷水澡。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;等我试验一个月，看看我是不是真得能变聪明点。🐽&lt;/p&gt;&#xA;&lt;h3 id=&#34;图书馆学习&#34;&gt;图书馆学习&lt;/h3&gt;&#xA;&lt;p&gt;周日一大早就来了杭州图书馆，一是为了学习，完成todo-list，二是来借书《当下的力量》——没借到！在别的馆藏。&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://yaodao-images.oss-cn-hangzhou.aliyuncs.com/blog/image-20250629104949796.png&#34; alt=&#34;&#34; /&gt;&lt;figcaption&gt;image-20250629104949796&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;附件&#34;&gt;附件 📎&lt;/h2&gt;&#xA;&lt;h3 id=&#34;从0开始学习大数据课程内容原本摘抄&#34;&gt;《从0开始学习大数据》课程内容原本摘抄&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;这里有一条关于问题的定律分享给你：我们常常意识不到问题的存在，直到有人解决了这些问题。 直向曲中求，对于复杂的问题，越是直截了当越是得不到答案。 迂回曲折地提出问题，一起思考问题背后的规律，才能逐渐发现问题的本质。通过这种方式，既能达成共识，不会有违常识，又可能产生洞见，使产品和方案呈现闪光点。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;优秀的工程师不应该害怕需求变更，而应该欢迎需求变革，因为优秀的工程师已经为需求变更做好了设计，如果没有需求变更，那就显示不出自己和只会重复的平庸工程师的区别。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;同一类问题的解决方案通常也是相似的。一个解决方案可以解决重复出现的同类问题，这种解决方案就叫作模式。模式几乎是无处不在的，一旦一个解决方案被证明是行之有效的，就会被重复尝试解决同类的问题。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在我看来，编程需要天分；而架构设计，真的是孰能生巧。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;从按照需求进行业务功能开发的程序员进阶到软件架构师，并不是随着经验积累、工作年限的增加就能自动完成的。如果你一直按照别人给定的技术架构和业务需求开发代码，你很难从更高的层面去思考软件的架构是如何设计出来的，也缺乏明确的目标去掌握那些真正有难度的、底层的技术。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;人如何进行高效的思考，一方面是天分，一方面可以通过训练提高。我见过最厉害的人，他的思考过程如飞鸿掠影，不留痕迹；讨论问题的时候，往往只描述清楚问题，还没展开讨论，他就能直指问题的根源，其他人再争论半天，才发现确实如他所言。还有一种人，他会详细分析各种可能的原因，排查、分析、否定各种可能，最后找到问题的结症。因为过程严谨、思路清晰，所以通常也能解决真正的问题。 前一种，我想大概主要靠天分，而后一种，其实就是使用金字塔方法。但是在实际中，我却经常见到第三种情况：没有前一种的天分，也不愿付出后一种的努力，思考过程天马行空，抓不住重点，找不到突破口，越想越乱，越思考越糊涂。其实，金字塔方法并不难掌握，只要用心学习、训练，每个人都可以学会这种思考方法。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;导致这个现象的一个原因是整个工作流程缺乏反馈，运营不断提需求，产品不断做设计，工程师忙着“搬砖”，自己做的工作对公司业务有多大价值却缺乏思考，为了工作而工作。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;顶尖的高手，总是能从看似不相干的事物之间找到其联系与规律，并加以利用，产生出化腐朽为神奇的功效。我们应该对数据保持敏感与好奇，不断将现实发生的事情与数据关联起来，去思考、去分析，用数据推断出来的结论指导现实的工作，再根据现实的反馈修正自己的方法与思维，顶尖高手就是在这样的训练中不断修炼出来的。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;有的时候，并不是努力就有回报，越是确定的领域，努力越不重要。这些确定的领域，重要的是资源、关系、等级、资历，蛋糕已经做好，努力并不能多分到蛋糕。而在不确定的领域，有可能做出新的蛋糕，在这些地方重要的是努力、聪明、野心、欲望，努力加上运气，就有可能创出自己的一片天地。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;这个世界很多事情，都是回头再看的时候，才觉得轰轰烈烈，处在浪潮之巅；而身在其中的时候，只是觉得平淡，甚至煎熬。反而很多一开始就轰轰烈烈的事情，回头再看大多却是一地鸡毛。2018年IT领域最重要的两项技术，区块链和人工智能，正是如此。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;文章以终为始面向价值观生活的英文翻译&#34;&gt;文章《以终为始，面向价值观生活》的英文翻译&lt;/h3&gt;&#xA;&lt;p&gt;I don’t kown when it started, But I’ve developed an indescribale fear of flying. I’m afriad of being carried ten thousand meters above the ground by a gaint steel bird, afraid of the &lt;strong&gt;unpredictable&lt;/strong&gt; turbulencem and even more afraid of my own &lt;strong&gt;helplessness&lt;/strong&gt; &lt;strong&gt;in the face of it all&lt;/strong&gt;. Yet life is full of moments &lt;strong&gt;when&lt;/strong&gt; flying is &lt;strong&gt;unavoidable&lt;/strong&gt;, instead it &lt;strong&gt;prompted&lt;/strong&gt; me a kind reverse thinking: if I were to &lt;strong&gt;tragically&lt;/strong&gt; lose my life in a flight one day, looking back &lt;strong&gt;on&lt;/strong&gt; my whole life, would I have any &lt;strong&gt;regrets&lt;/strong&gt;?&lt;/p&gt;&#xA;&lt;p&gt;The answer is definitely yes. Too many classic books and movies remain unapprecaited, too many satisfying works of my own have yet to be truly born, and too many people I respect that I haven’t had time to develop friendships with yet… This kind of “&lt;strong&gt;end-of-life reflection&lt;/strong&gt;” thinking is &lt;strong&gt;unexpectedly&lt;/strong&gt; effective. &lt;strong&gt;It’s best done&lt;/strong&gt; in a quiet setting, one where you won’t be disturbed or distracted by electronic devices, such as when taking a bath.&lt;/p&gt;&#xA;&lt;p&gt;These answers &lt;strong&gt;are like&lt;/strong&gt; seashells &lt;strong&gt;scattered&lt;/strong&gt; on the beach, guiding me to &lt;strong&gt;catch a glimpse of&lt;/strong&gt; the values buried deep &lt;strong&gt;within&lt;/strong&gt; my heart. Even if I have never systematically reflected on the concept of “values,” I still carry, deep in my &lt;strong&gt;subconscious&lt;/strong&gt;, an invisible standard for what is worth doing and what is not — an implicit set of values.&lt;/p&gt;&#xA;&lt;p&gt;Making this implicit set of values explicit is especially important. Only then can we clearly recognize whether the standards we’ve followed for so long truly align with our deepest inner expectations. For example, I’ve always believed that “learning” is important, but if I spend most of my time watching short videos, then my actions are at odds with my &lt;em&gt;ideal values&lt;/em&gt;. “Learning” may still be present in my &lt;em&gt;actual value system&lt;/em&gt;, but it might rank &lt;strong&gt;below&lt;/strong&gt; &lt;em&gt;pleasure&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To go further, we need to dig deeper and refine these values. It’s not enough to just stay at &lt;strong&gt;vague&lt;/strong&gt; concepts like “reading,” “creation,” and “friendship.” Ask yourself: what types of books do I want to read? Are they literary classics, or historical &lt;strong&gt;biographies&lt;/strong&gt;? Why are these books valuable to me? Is it because they expand my &lt;strong&gt;perspective&lt;/strong&gt;, or because they bring me &lt;strong&gt;spiritual&lt;/strong&gt; &lt;strong&gt;comfort&lt;/strong&gt;? In which area do I want to create? Writing, painting, or programming? What is the standard of success? Is it &lt;strong&gt;recognition&lt;/strong&gt;, or self-expression? What kind of friendship do I expect? Mutual support, or &lt;strong&gt;shared&lt;/strong&gt; growth?&lt;/p&gt;&#xA;&lt;p&gt;It’s important to note that different values often conflict with each other. For example, the &lt;strong&gt;relentless&lt;/strong&gt; pursuit of career success may &lt;strong&gt;inevitably&lt;/strong&gt; squeeze out precious time （spent） with family. &lt;strong&gt;In such cases&lt;/strong&gt;, we need to carefully weigh: which value is more important to me? What am I willing to &lt;strong&gt;sacrifice&lt;/strong&gt; in order to pursue certain core values? How can I skillfully balance different values to achieve a more fulfilling and complete life experience? Prioritizing our values can help us make wiser decisions that are more in line with（贴合） our true inner desires when faced with life’s choices.&lt;/p&gt;&#xA;&lt;p&gt;Once we have a list of values and their corresponding &lt;strong&gt;hierarchy&lt;/strong&gt;, we need to integrate these explicit values into our daily lives. We should &lt;strong&gt;examine&lt;/strong&gt; how we allocate our time: what do we spend the most time &lt;strong&gt;on&lt;/strong&gt; each day, week, or month? Do these activities &lt;strong&gt;align with&lt;/strong&gt; our values? Based on our values, we can set both long-term and short-term goals. For example, if I believe that “learning” is important, I could set a goal to read a certain number of hours each week. &lt;strong&gt;When faced with&lt;/strong&gt; a choice, we should ask ourselves: does this choice align with my values? Will it &lt;strong&gt;bring me closer to&lt;/strong&gt; the person I want to become?&lt;/p&gt;&#xA;&lt;p&gt;Regular &lt;strong&gt;reflection&lt;/strong&gt; is also essential—to examine whether our actions &lt;strong&gt;remain aligned with&lt;/strong&gt; our values. If we find ourselves &lt;strong&gt;drifting off course&lt;/strong&gt;, we should make timely adjustments. This is inevitably a journey of ongoing exploration and dynamic &lt;strong&gt;recalibration&lt;/strong&gt;—there is no one-size-fits-all answer. What truly matters is that, through continuous self-reflection and personal growth, we gradually discover the way of life &lt;strong&gt;that best aligns with&lt;/strong&gt; our true nature.&lt;/p&gt;&#xA;&lt;p&gt;Returning to the original fear—it is &lt;strong&gt;precisely&lt;/strong&gt; this awareness of life’s brevity that drives us to contemplate the meaning of our &lt;strong&gt;existence&lt;/strong&gt; more urgently. The essence of “begin with the end in mind” lies in this:（colon） imagine yourself at the end of your life, looking back—what would you hope to see? What have you accomplished? Where have you been? Have you watched your children grow up happily by your side? Or simply lived a quiet and steady life?&lt;/p&gt;&#xA;&lt;p&gt;If your entire life were &lt;strong&gt;condensed&lt;/strong&gt; into a 10-minute short film and shown to those attending your &lt;strong&gt;memorial&lt;/strong&gt;, would you feel ashamed—or proud?&lt;/p&gt;&#xA;&lt;p&gt;An ideal life is one &lt;strong&gt;in which&lt;/strong&gt; you could die at any moment &lt;strong&gt;without regret&lt;/strong&gt;.&lt;/p&gt;&#xA;</content:encoded>
      <pubDate>30 Jun 25 04:19 CST</pubDate>
    </item>
  </channel>
</rss>