<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/rss.xsl" type="text/xsl"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><generator>Typlog 3.1 (https://typlog.com)</generator><title><![CDATA[Airing 的博客]]></title><description><![CDATA[哲学硕士｜小学老师 ｜终端全栈]]></description><link>https://airing.typlog.io/posts/</link><copyright><![CDATA[Copyright 2023 Airing 的博客]]></copyright><image><url>https://i.typlog.com/airing/8295011803_9008465.png?x-oss-process=style/sl</url><title><![CDATA[Airing 的博客]]></title><link>https://airing.typlog.io/posts/</link></image><atom:link href="https://airing.typlog.io/feed/post.xml" rel="self" type="application/rss+xml"/><atom:link href="https://pubsubhubbub.appspot.com/" rel="hub"/><pubDate>Tue, 19 May 2026 04:13:58 +0000</pubDate><item><title><![CDATA[2025，全新旅途]]></title><guid>https://airing.typlog.io/posts/summary-2025/</guid><link>https://airing.typlog.io/posts/summary-2025/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sun, 15 Feb 2026 14:03:16 +0000</pubDate><content:encoded><![CDATA[<p>自写年终总结以来，已是第八个年头，我离开了一直以来生活的城市，来到未知的国度。2024 年破碎之后的虚无感逐渐消散，取而代之的，是一种由一个个具体人和事搭建起来的、粗糙但坚实的秩序。</p>
<h2>工作</h2>
<h3>创业</h3>
<p>MoFlow 在产品思考上过于稚嫩与理想，导致其无法承载风险和调整。在年初受到苹果审查，导致软件 3 个多月无法发版，即便发现 Bug 也无法更新，做好了的迭代特性被一个个堆积在发布队列里，这对一个初生的产品而言是致命的，而我却无能为力。</p>
<p>最终在开发了一版 LLM 长期记忆的技术更新之后，我们选择了进入长期维护模式。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/IMG_9468.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/IMG_9468.png" alt="坚持写到现在的 MoFlow" title="坚持写到现在的 MoFlow"loading="lazy" decoding="async" width="1179" height="2556" /></picture><figcaption>坚持写到现在的 MoFlow</figcaption></figure></div><p>我很庆幸自己在合适的时机去做了 MoFlow，这让我在这一波 AI 浪潮中始终走在一线。而通过这个情感疗愈项目，我也意识到：AI 在飞速迭代，但那些无法被算法量化的——譬如人与人之间的交浅言深、深夜里突如其来的共鸣——才是我们作为碳基生物最珍贵的特权。</p>
<h3>面试</h3>
<p>在<a href="https://blog.ursb.me/posts/weekly-29/">《月刊（第29期）》：新生活</a> 提及到，我在 2-3 月参与了几个面试，体感上市场上的就业机会相比于我刚毕业那会确实少了一些，但只要能力匹配，还是能找到一些满意的工作。但我想趁着这次机会去海外看看，所幸自己抓住了这次机会。</p>
<h3>新工作</h3>
<p>这一部分因为合规原因不会表达太多，目前在一个 TikTok 快速增长的业务里，因为其纯理性决策的方式，我可以学习并积累到不少业务认知。在这里我有海量的知识可以去学，这个过程中我又体验到了知识灌进脑海里的爽感。</p>
<p>另外一个变化是，我开始带人了。过去的工作里我的主要定位是作为技术专家的 IC，在 IC 转型 POC 的过程中遇到了不少困难，在这个过程中我很感恩我的 Leader，毫不客气地说，就是他用了几个月的时间手把手来培养我 Landing。但我骨子里还是很喜欢 Coding，所以基本上也每次都会给自己排一些一线的需求。</p>
<p>核心在于有效沟通，这需要定期探询，去挖掘每个人、每件事背后的核心需求。</p>
<p>其次是培养信任感，避免始终靠自己救火，而应该适当放权、去大胆且细心地去做针对性地培养 —— 无论是哪个文化下，这一点都是一样的。</p>
<p>关于沟通想顺便分享一下“探询模型”，它等于：<em><strong>(可信度 * 可靠度 * 亲密度) / 个人意图</strong></em></p>
<p>那么，提高沟通成功率的因子就在于这几点：</p>
<ul>
<li><strong>提升可信度</strong>（专业懂行）：用专业判断与事实说话，先做功课，靠的就是自身技术和业务能力。</li>
<li><strong>提升可靠度</strong>（做事靠谱）：及时回应、解决问题，让对方觉得可依靠。这部分靠的是日常表现和信任积累。</li>
<li><strong>增加亲密度</strong>（关系融洽）：日常关系，可以多聊工作之外的话题。营造温暖、平等的氛围。这部分靠的是自身对他人的关照，以及体贴的性格。</li>
<li><strong>降低功利性</strong>（个人意图）：沟通开场先说明正向意图，少夹带个人得失，避免被解读为利用。</li>
</ul>
<p>每次通过自己的沟通扭转进程、疏通阻塞点，这会让我有种莫名的成就感，也是以往工作里未曾体验到的。</p>
<p>而来到这个业务之后，每天总是很忙。我之前在做 IC 的时候，总会把项目和自己时间安排地井井有条。但合作方变多之后，变化总是多于计划的，甚至——事情是做不完的——这个就是真理。那就会考验两点能力：<strong>专注力</strong>与<strong>判断力</strong>。</p>
<p>先说专注力。其实刚来的很长一段时间内，我的 Todoist 列表里是无限的事情，这会让我感觉到一种 overwhelm 的焦虑感。而对抗焦虑最好的武器，我以前一直以为是具体，即把每个事规划好再去执行就可以。但如果这样的话，那些关于未来的、庞大而模糊的焦虑往往在执行前就会压垮自己 —— 比如会始终会像着下一步要做什么，两个小时后有什么安排，正是这些琐碎的具体让此刻的自己陷入焦虑。</p>
<p>后来我就不再使用 Todoist 的 Upcoming 视图了，只专注当下的事情，把除此之外的一切抛之脑后，我才真正感觉到了双脚踩在大地上的实感。</p>
<p>另外是判断力。除了是自己手上事情优先级的判断，更多地要判断这件事是否要做、怎么做、能带来多大的收益。因为无论如何，资源始终是有限的，如何用有限的资源带来更大的业务收益，这对判断力的要求更高。</p>
<h2>生活</h2>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/photo_2026-02-15_21-36-30.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/photo_2026-02-15_21-36-30.jpg" alt="NotebookLM 基于我的日记生成的图片" title="NotebookLM 基于我的日记生成的图片"loading="lazy" decoding="async" width="1280" height="714" /></picture><figcaption>NotebookLM 基于我的日记生成的图片</figcaption></figure></div><h3>新加坡</h3>
<p>这一年，我迁徙到了赤道。这是一个很小的国家，开车横穿东西两极只需要 40 分钟。物理坐标的移动似乎也拉扯了心理的时钟——在这里，没有四季的更替来提醒你时间的流逝，只有永恒的盛夏，迫使你直面每一个赤裸的当下。</p>
<p>生活成本陡然增高，收入的新币需要当人民币去花，与此同时还要全额缴纳中国大陆的税 —— 从性价比的角度而言这显然是不值得当的，但我依然决心出海看看。如果说以前去远方是为了逃避当下的疲惫，那现在生活在别处，则是为了重新测量世界的纹理。</p>
<p>所幸饮食和气候还算习惯，与深圳差异不算大。关于衣食住行的开销，本篇就不再列举了，如果有机会以后单独在月刊里总结。</p>
<div class="gallery"><div class="gallery_column"><figure><picture><img src="https://airing.ursb.me/image/blog/2025/8fc513d2e94deebacc3cebab7a79a581.jpeg" alt="国庆军演" title="国庆军演"loading="lazy" decoding="async" width="1920" height="1080" /></picture><figcaption>国庆军演</figcaption></figure><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/image.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/image.png" alt="夜景" title="夜景"loading="lazy" decoding="async" width="1440" height="903" /></picture><figcaption>夜景</figcaption></figure></div></div>
<div class="gallery"><div class="gallery_column"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/image%201.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/image%201.png" alt="市中心的教堂" title="市中心的教堂"loading="lazy" decoding="async" width="1440" height="1803" /></picture><figcaption>市中心的教堂</figcaption></figure><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/image%202.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/image%202.png" alt="圣淘沙" title="圣淘沙"loading="lazy" decoding="async" width="1440" height="1917" /></picture><figcaption>圣淘沙</figcaption></figure></div></div>
<h3>旅游</h3>
<p>4月，去了苏州。</p>
<p>10 月，去了印尼、马来、澳门（<a href="https://blog.ursb.me/posts/weekly-33">《月刊（第33期）》：推理阶梯</a>）。</p>
<div class="gallery"><div class="gallery_column"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/image%203.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/image%203.jpg" alt="印尼海岛的日出" title="印尼海岛的日出"loading="lazy" decoding="async" width="1280" height="466" /></picture><figcaption>印尼海岛的日出</figcaption></figure><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/IMG_9474.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/IMG_9474.png" alt="2025年的足迹"loading="lazy" decoding="async" width="1179" height="2556" /></picture></figure></div></div>
<div class="gallery"><div class="gallery_column"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/image%204.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/image%204.jpg" alt="澳门的一个街角" title="澳门的一个街角"loading="lazy" decoding="async" width="1280" height="719" /></picture><figcaption>澳门的一个街角</figcaption></figure><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/image%205.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/image%205.jpg" alt="澳门商场的富丽堂皇" title="澳门商场的富丽堂皇"loading="lazy" decoding="async" width="1280" height="960" /></picture><figcaption>澳门商场的富丽堂皇</figcaption></figure></div></div>
<h3>生病</h3>
<p>过去一个月被肾结石折腾的很惨。一块肾结石 7mm 堵住了输尿管，第一次去诊所被误诊成胃炎。吃了三天药不好，第四天凌晨异常疼，去复诊还是没查出来。于是去医院拍 CT 并做血常规。这个基础的检查，花了 2300 SGD，折合1.5万 CNY。确诊肾结石后就安排了体外碎石，但未曾想后续尽是波折，大大小小的手术做了 4 场。</p>
<p>第一次：超声波碎石。失败，感染住院。</p>
<p>第二次：全麻，支架植入治疗。感染缓解。</p>
<p>第三次：全麻，RIRS 碎石取石。</p>
<p>第四次：局麻，取出埋在体内的支架。</p>
<p>这一套总花费 6 万多 SGD（折合 30 万+CNY）。不过不得不说，私立医院的服务还是挺好的，住院病房整的和酒店差不多，病号餐也有很多美食可以选。幸好公司购买的保险可以全额报销。但如果是国内的话，三甲医院也可以在 1 万 CNY 以内解决。</p>
<h2>学习</h2>
<h3>阅读流</h3>
<p>在 <a href="https://blog.ursb.me/posts/weekly-31">《月刊（第31期）》：基于 Claude 的阅读流</a> 有介绍过这块内容，这里想做些补充。</p>
<p><strong>Tana</strong></p>
<p>之前有提到过我使用的笔记软件是 Tana +Heptabase，但在 AI 时代下，我基本上只使用 Tana了。我有几个结合 AI 的高效用法可以分享：</p>
<ol>
<li><p><strong>使用自定义的 AI Command 进行扩展探索</strong></p>
<p>例如下面这个我发在小红书上的图文，就是简单写了一句话：“为什么小红书在纠结于商业化广告和电商之间的取舍？”之后点击我定义的 AI Command，让 Gemini Pro 基于这个文本进行探索，探索完之后再调用另一个 AI Command 使用 Nano Banana 生图。</p>
<div class="gallery"><div class="gallery_column"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/2046.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/2046.jpg" alt="Tana 生成的小红书图片" title="Tana 生成的小红书图片"loading="lazy" decoding="async" width="1080" height="2371" /></picture><figcaption>Tana 生成的小红书图片</figcaption></figure><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/photo_2026-02-15_21-59-31.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/photo_2026-02-15_21-59-31.jpg" alt="Tana 生成的小红书图片"loading="lazy" decoding="async" width="583" height="1280" /></picture></figure></div></div>
<p>这套方法可以用于任意主题的深度研究和输出，产出的图片也很直观讨喜。</p>
</li>
<li><p><strong>Bookmark 自动总结生图</strong></p>
<p>我简单做了个 Workflow，看到某个网页之后我点击保存到 Raindrop，这个时候会触发 IFTTT 的 Webhook 调用 Tana 的 Input API，将网页链接打上特定的 supertag(如#link) 保存到 Today 里。</p>
<p>在 #link 中配置了新增节点时，会针对这个链接自动调用自定义的 AI Command，而这个 AI Command 可以 Fetch 对应链接的网页内容，并配合自定义的文章解读 Prompt 进行文章总结和反思，最后调用 Nano Banana 生图。</p>
<p>整套流程非常丝滑，且因为早鸟用户的关系，订阅费也不贵。</p>
</li>
<li><p><strong>无限递归的深入探索</strong></p>
<p>我做了个 #question 的 supertag，里面有两个 AI 字段，一个是深度总结、另一个是哲学反思。遇到问题时我先记录到 Tana 里，但不会立刻调用这两个 AI 字段，而是自己去思考或检索资料去补齐我认为的解答（我认为这一步是必不可少的，详情见<a href="https://blog.ursb.me/posts/weekly-31">《月刊（第31期）》：基于 Claude 的阅读流</a>）。补齐自己的答案之后，我再点击 AI 字段让它输出深度总结和哲学反思，让 AI 反向为我补齐我对这个问题缺失的认知。</p>
<p>那么接下来，有意思的就来了，因为所有的句子在 Tana 里都是一个单独的节点，这意味着我可以针对 AI 深度总结或者哲学反思的某句话，再打上 #question 的 supertag，无限地、递归地去探索这个问题。这套方法在深度研究时非常有用，可以帮助自己对某个知识体系建立非常深且牢固的认知。</p>
</li>
<li><p><strong>结合 OpenClaw 调用和保存</strong></p>
<p>前几天 Tana 推出了 MCP，现在不仅仅可以 Input，更可以对 Tana 空间进行 CURD 了，那可玩性就大多了。比如我让 OpenClaw 自己写了个 Tana skill，当我在 TG 里和 OpenClaw 聊到比较有意思的话题时，我可以让它检索或保存到 Tana 里。</p>
</li>
</ol>
<p>AI 时代的笔记本身也适合碎片笔记，但偶尔的总结与沉淀用来锻炼自己的组织和表达能力也是必不可少的，这个时候还是会用我之前的 Heptabase，这款软件之前介绍过，这里就不赘述了。</p>
<p><strong>NotebookLM</strong></p>
<p>用了一年多，主要用来深度检索，比如遇到某个问题直接让 NotebookLM 自己补齐材料，然后点击生成 PPT，让自己通过这个 PPT 快速了解这个领域的 Outline，根据知识点快速建立其一个初步的框架。‘</p>
<p>一旦建立了框架，深入学习时的提问就有了方向。后续如果要回到 Tana 进行无限递归的深入探索，学会高效地去提问是很重要的，这样 #question supertag 反哺给自己的信息密度才够高。</p>
<p><strong>YouMind</strong></p>
<p>玉伯的作品，优势是在国内环境里可以较为方便的采集 Bilibili、Youtube、微信公众号，不需要自己再折腾刚才我提到的大部分工作流，适合小白入门做资料管理。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/2025/image%206.png" alt="我的 YouMind 看板" title="我的 YouMind 看板"loading="lazy" decoding="async" width="2185" height="1320" /></picture><figcaption>我的 YouMind 看板</figcaption></figure></div><h3>AI</h3>
<p><strong>Claude Code</strong></p>
<p>25 年年中的时候开始用 Claude Code，用朋友 200 美元的套餐，编码基本离不开了。CLI 工具天然有着最齐全的权限和上下文信息，所以除了 AI Coding，在 CLI 场景下还可以定制很多有意思的事情。</p>
<p><strong>AnyGen</strong></p>
<p>在 Manus 被 Meta 收购的周末，字节就放出了 AnyGen。其实这套工具在内部跑了快一年，口碑很不错，体验上也与 Manus 和一众类 Manus 的产品（Flowith、Fellou 等） 不分伯仲。因此在 AnyGen 发布之后立马注册了，目前主要跑一些定时任务。</p>
<p><strong>Hapi</strong></p>
<p>在 Crawdbot 之前，我自己主要用 Hapi 控制 Mac Mini 上的 Claude Code 干活。也体验过 Happy 和 Droid 这些方案，但用了一圈下来还是 Hapi 最方便。</p>
<p>我可以在搭地铁的时候，通过部署在 MacMini 公网端口 Hapi 代理操作 Claude Code，让它 Vibe Coding、让它获取日程、规划 Todoist。</p>
<p>原本以为这套方案我可以用很久，直到那只龙虾的出现。</p>
<p><strong>OpenClaw</strong></p>
<p>关注到 Clawdbot 是在中文圈大火之前，但私以为只是交互方式的更变本质上并不能替代我自建的这套方案。但体验之后才发现我完全错了，能用到好用，往往就差了那一步。OpenClaw 对每个 Agent 设定所划分的 AGENTS、SOUL、IDENTITY、TOOLS、USER、HEARTBEAT、BOOTSTARP，让 Agent 的性格设定、沟通方式可以按照用户诉求变得生灵活现，我想这也是 OpenClaw 能快速破圈的原因之一。</p>
<p>我迁移到 Clawdbot 之后依然可以用我之前的阅读流、RSS 订阅、Google 日程和 Todoist 管理，这些都是比较常规的 Agent 用法了。</p>
<p>接下来分享几个自己在 OpenClaw 的其他用法。</p>
<p><strong>复式记账</strong></p>
<p>之前尝试过复式记账，但是需要在电脑上用 IDE 编辑 Beancount 的语法，根本坚持不下来。现在有了 OpenClaw，Beancount 这种非人类的记账方式恰恰是 AI friendly 的。海外信用卡是有邮件通知的，OpenClaw 配上邮件服务之后也可以实现自动记账。</p>
<p>同样是股票追踪，也可以用 BeanCount 记录持仓，再让 OpenClaw 每天根据市场情况输出持仓日报，给出调仓建议，也是蛮有趣的。</p>
<p><strong>身体数据</strong></p>
<p>Apple Watch 采集的身体数据用脚本每个小时发到指定的 iCloud 目录，再写一个身体数据的 skill，这样 OpenClaw 也就能够监控自己的身体情况并给出建议。</p>
<div class="gallery"><div class="gallery_column"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/IMG_9478.jpeg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/IMG_9478.jpeg" alt="OpenClaw 汇报身体数据" title="OpenClaw 汇报身体数据"loading="lazy" decoding="async" width="1080" height="2371" /></picture><figcaption>OpenClaw 汇报身体数据</figcaption></figure><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/photo_2026-02-15_21-55-45.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/photo_2026-02-15_21-55-45.jpg" alt="每日汇报的 OpenClaw"loading="lazy" decoding="async" width="583" height="1280" /></picture></figure></div></div>
<p><strong>多人公司</strong></p>
<p>目前用了五个厂商的模型做了十个 Agent，拉到群聊里由主 Agent 调度，家里人也在群聊里可以一起在日常生活里使用，群聊因此有人气了很多：</p>
<div class="gallery"><div class="gallery_column"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/2030.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/2030.jpg" alt="让群聊更活跃的 OpenClaw" title="让群聊更活跃的 OpenClaw"loading="lazy" decoding="async" width="1080" height="2371" /></picture><figcaption>让群聊更活跃的 OpenClaw</figcaption></figure><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/2032.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/2032.jpg" alt="让群聊更活跃的 OpenClaw" title="让群聊更活跃的 OpenClaw"loading="lazy" decoding="async" width="1080" height="2371" /></picture><figcaption>让群聊更活跃的 OpenClaw</figcaption></figure></div></div>
<p>这些 Agent 部署在两个地方，Mac Mini 和 Railway，这样不仅可以互相修复，也能在突发情况下保持服务的稳定性。</p>
<p>后续可能会把五个厂商压缩一下，体验了一些模型并不适合用来做 Agent。</p>
<p><strong>服务开发</strong></p>
<p>用 LocalCan + ngrok 分配了 10 个对公网端口，并给每个端口绑上了域名。在群里和另一个研发指挥 Agent 编程，做完之后直接部署服务，代码一眼也不看，只看效果。这样当老板的感觉真的很爽 🤣。</p>
<p>PS. 现在的 MoFlow 全是由 AI 在维护的。</p>
<p><strong>YouMind 录入</strong></p>
<p>对于一些没有 API 或者 MCP 的平台，如果想让 OpenClaw 对接，可以直接抓包写 Skill。比如现在看到某个文章，就直接丢群里让深度阅读 Agent 读一下，它觉得不错，就顺便帮忙保存到 YouMind 里。</p>
<div class="gallery"><div class="gallery_column"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/IMG_9479.jpeg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/IMG_9479.jpeg" alt="MoFlow 群组里的云编程" title="MoFlow 群组里的云编程"loading="lazy" decoding="async" width="1179" height="2556" /></picture><figcaption>MoFlow 群组里的云编程</figcaption></figure><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/IMG_9476.jpeg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/IMG_9476.jpeg" alt="OpenClaw 保存到 YouMind" title="OpenClaw 保存到 YouMind"loading="lazy" decoding="async" width="1080" height="2371" /></picture><figcaption>OpenClaw 保存到 YouMind</figcaption></figure></div></div>
<h3><strong>理财</strong></h3>
<p>其实 25 年机会挺多的，但因自己保守策略导致最终收益率不到 30%，私以为这个收益率是比较健康的，虽然不多，但从 2020 年开始一直都是盈利的。</p>
<p>小小总结了一下我的几个原则：</p>
<ol>
<li><strong>永远不买自己看不懂的股票</strong>：要盘基本面，理解涨跌背后的逻辑链。理性建仓，交易之前把规划写下来（在 Google 文档上设计了个交易模板，有交易计划就复制一份填写），填好的止盈线、止损线、加仓减仓都按照计划执行—— 盘前设好策略单，盘中不盯盘，不做计划之外的操作。</li>
<li><strong>常年保持稳健低仓位</strong>：确保有合适入场的时机不要错过，永远不上杠杆，也永远不做在压路机前捡硬币的行为（不要为了微薄的确定性收益，去承担隐形的毁灭性风险）。</li>
<li><strong>不把鸡蛋放在一个篮子里</strong>：无论是仓位控制、证券账户、币种/基金/股票配置，都要坚守这个原则。例如如果买了科技股，那就对应补一点合适的蓝绸。</li>
</ol>
<h2>好物</h2>
<h3><strong>硬件</strong></h3>
<ul>
<li><p>Ray-Ban Meta</p>
<p>可以录制视频和拍照，画质相当于 iPhone 12 的画质，日常使用是完全足够了。</p>
<p>缺点是日常佩戴被人发现有摄像头会比较尴尬，需要付出额外的解释成本；且不防水，新加坡下雨天比较多的时候比较麻烦。</p>
<p>目前眼镜电量也无法支撑正常使用完一天，音质也比较差，只是听个响而已。因此最近半年没有给它充电了，就当一个日常的眼镜在使用，我还是挺中意定制的蔡司镜片，防蓝光+自动变色帮助很大。</p>
<p>最近预定了 Even G2，因为发现 MentraOS 以及 Even 有对应的接口可以接入 OpenClaw，等收到货了试试。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/image%207.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/image%207.png" alt=""loading="lazy" decoding="async" width="1589" height="700" /></picture></figure></div></li>
<li><p>韶音耳机</p>
<p>非常利好开会，算得上是今年最值单品。忙碌的时候每天 8-10 个视频会议，有时候还要线下双开，那么开放式耳机就很必要了，可以有效保护听力。</p>
</li>
<li><p>三星 Z Fold 7</p>
<p>生态是自己设下的壁垒，克服之后能体验到更多新颖的玩意，三星系统的自定义程度非常高，这也意味着可玩性非常高。</p>
</li>
<li><p>Surface Pro 12</p>
<p>为了写文档和 Vibe Coding 入的，可以称得上是这个时代绝佳的 Vibe Coding 设备。虽然性能和屏幕很差，但起码是满血版的 PC 系统，这只能怪 iPad Pro 不争气。</p>
</li>
<li><p>折叠自行车 + 滑板</p>
<p>新加坡出门主要靠 MRT 和公交，有了折叠自行车之后很方便，带上折叠车之后可以走遍整个国家。</p>
<p>还顺便入了个滑板，摔了很多跤之后总算能简单代步了…</p>
</li>
<li><p>KODAK 拍立得+打印机</p>
<p>公司发的新年礼物，日常打印一些照片作为纪念还是挺有仪式感的。</p>
</li>
</ul>
<h3><strong>软件</strong></h3>
<ul>
<li><p>PeakWatch：在 Apple Watch 上量化出自己的身体能量，转成可视化的电量消耗，使用了一个季度发现挺准的。如果生病了，那身体电量恢复的就慢，上限就低且电量消耗得快；如果休息得好吃得好，电量就恢复得快。体感上这个数据还是挺准的。</p>
<div class="gallery"><div class="gallery_column"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/IMG_9473.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/IMG_9473.png" alt="常规的能量消耗" title="常规的能量消耗"loading="lazy" decoding="async" width="1179" height="2556" /></picture><figcaption>常规的能量消耗</figcaption></figure><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/IMG_9472.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/IMG_9472.png" alt="生病情况下的能量消耗" title="生病情况下的能量消耗"loading="lazy" decoding="async" width="1179" height="2556" /></picture><figcaption>生病情况下的能量消耗</figcaption></figure></div></div>
</li>
<li><p>MoneyWiz：目前没有发现替代品，除了常规的记账、预算、报告，还支持我最看重的多币种记账和股票追踪。</p>
</li>
<li><p>Typeless：Typeless 较 Wispr Flow、闪电说来说产品细节做得好，语音输入结合 AI 润色体验很丝滑。日常在和 AI 交流的时候措辞不需要那么精准，适合用语音输入。另外发现写日记这个场景也挺适合语音输入的。</p>
</li>
</ul>
<h2>书影音</h2>
<p><strong>电影</strong></p>
<ul>
<li>F1 狂飙飞车：★★★★★，去影院看了两遍，剧情虽然老套的英雄故事，但音画沉浸感令人着迷。</li>
<li>捕风追影：★★★★★</li>
<li>疯狂动物城 2：★★★★★</li>
<li>鬼灭之刃 无限城篇第一章：★★★★★</li>
<li>One Battle After Another：★★★★☆</li>
<li>翻译疑云：★★★★☆</li>
<li>死神来了 6：★★★☆☆</li>
<li>扬名立万：★★★☆☆</li>
<li>Together：★★★☆☆</li>
<li>诡异列车：★★★☆☆</li>
<li>哭声：★★★☆☆</li>
<li>神奇4侠：★★☆☆☆</li>
<li>名侦探柯南：独眼的残像：★★☆☆☆</li>
<li>非常宣言：★★☆☆☆</li>
<li>巨洪：★☆☆☆☆</li>
</ul>
<p><strong>剧集</strong></p>
<ul>
<li>苦尽柑来遇见你：★★★★★，东亚人还挺吃苦难叙事这一套的。</li>
<li>恶缘：★★★★★，原以为一集集是独立的小故事，未曾想串在一起之后组成了一个更大的恶缘之网，挺有意思的故事设计。</li>
<li>万神殿：★★★★★</li>
<li>All Her Fault：★★★★★</li>
<li>咒术回战 死灭洄游篇：★★★★☆，作画有种艺术感，但总觉得和整体风格不太搭。</li>
<li>棋士：★★★★☆</li>
<li>不眠日：★★★☆☆</li>
<li>扫毒风暴：★★★☆☆</li>
<li>迷尸校园：★★★☆☆</li>
<li>弥留之国的爱丽丝 第三季：★★★☆☆</li>
<li>余生有涯：★★★☆☆</li>
<li>赴山海：★★☆☆☆</li>
</ul>
<p><strong>漫画</strong></p>
<ul>
<li>咒术回战 modulo：★★★★☆，虎天帝太帅了！前作主角在续作就应该这么爽才对。</li>
</ul>
<p><strong>书籍</strong></p>
<ul>
<li>我可能错了：★★★★★</li>
<li>余华文学课：★★★★★</li>
<li>绝叫：★★★★☆</li>
<li>少年巴比伦：★★★★☆</li>
<li>麒麟之翼：★★★☆☆</li>
</ul>
<p><strong>游戏</strong></p>
<ul>
<li>哈迪斯 2：★★★★☆</li>
<li>超级英雄派遣中心：★★★★☆，可惜结局仓促了，但也探索出了未来一种可能的剧集形式。</li>
<li>暗黑破坏神 4：★★★★☆</li>
<li>丝之歌：★★★★☆</li>
</ul>
<p><strong>写作</strong></p>
<ul>
<li><a href="https://blog.ursb.me/posts/weekly-29/">《月刊（第29期）》：新生活</a></li>
<li><a href="https://blog.ursb.me/posts/weekly-30">《月刊（第30期）》：写在 30 岁这天</a></li>
<li><a href="https://blog.ursb.me/posts/weekly-31">《月刊（第31期）》：基于 Claude 的阅读流</a></li>
<li><a href="https://blog.ursb.me/posts/weekly-32">《月刊（第32期）》：中大校友会的采访</a></li>
<li><a href="https://blog.ursb.me/posts/weekly-33">《月刊（第33期）》：推理阶梯</a></li>
<li><a href="https://blog.ursb.me/posts/game-engine-renderer/">《游戏组件的一生：从加载到上屏》</a></li>
<li>《有效沟通 SOP》（内网文章）</li>
</ul>
<h2>新年目标</h2>
<p>站在 30 岁的起点上，我并没有迎来预想中的恐慌。小时候觉得三十岁是遥不可及的彼岸，真到了这一天，才发现它不过是人生长河里，普通得不能再普通的一个周一。</p>
<p>我不确定下一站去哪里，但我开始享受在路上的感觉。凡是我遇见的，我都喜欢；一切都被接受。从此，我自己便是方向。</p>
<p>敬这趟全新的旅途，敬那些具体的焦虑。愿我们都能在不确定的世界里，守住确定的本心。</p>
<div class="gallery"><div class="gallery_column"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/image%208.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/image%208.jpg" alt=""loading="lazy" decoding="async" width="1280" height="960" /></picture></figure><figure><picture><source srcset="https://airing.ursb.me/image/blog/2025/05F2C1F8-B457-4774-96B5-36CDDFAF7E02.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2025/05F2C1F8-B457-4774-96B5-36CDDFAF7E02.jpg" alt=""loading="lazy" decoding="async" width="960" height="1280" /></picture></figure></div></div>
]]></content:encoded></item><item><title><![CDATA[月刊（第33期）：推理阶梯]]></title><guid>https://airing.typlog.io/posts/weekly-33/</guid><link>https://airing.typlog.io/posts/weekly-33/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sat, 15 Nov 2025 16:17:12 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二五年九月至十月的记录与思考。</p>
<p><a href="https://www.youtube.com/watch?v=KJLqOclPqis" title="《Rethinking thinking》">《Rethinking thinking》</a>这个视频里介绍了「推理阶梯」这个概念，它较为详细地阐述了我们是如何处理在现实世界中感知的各种信息，分为以下七个步骤：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj33/image.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj33/image.png" alt=""loading="lazy" decoding="async" width="1280" height="720" /></picture></figure></div><ol>
<li>原始数据：世界中的原始数据，以及我们感官对其接收到的感知信息。</li>
<li>筛选信息：对于接收到的信息，我们会不自觉地使用注意力去筛选出特定的信息和细节。</li>
<li>赋予意义：对于筛选后的信息，我们会去尝试解释信息所传达内容。</li>
<li>形成假设：根据前一层创造的意义来发展假设，在这里事实和故事之间的区别开始变得模糊。</li>
<li>得出结论：根据假设得出结论，我们的情绪反应也是在这个地方产生的。</li>
<li>调整信念：根据当前的经验调整我们之前对周围世界的信念。</li>
<li>采取行动：根据调整后的信念采取行动。</li>
</ol>
<p>在这个阶梯的七个步骤其实每一步都存在着局限性，注定了我们无法直接感知真实。例如在原始数据这一层，人类感官的局限性决定了不可能接收到全貌信息，且接受到的信息也不能够反映客观。</p>
<p>本福特定律揭示了在很多自然产生的数据里，数值的分布更接近按对数分布而不是按均匀分布。大量真实世界数据不是线性增长，现实世界的数据常常跨越多个数量级。为了适应这一现象，生物的神经系统也进化为对数型编码，以便大脑能够以信息量最大化感知信息。这也就是魏伯–费希纳定律——人类的感知系统对外界刺激的敏感度按比例变化。我们感知到的，是感官与大脑共同构建的替代物，而非真实本身。</p>
<p>对此，津巴多在《普通心理学》写到：“知觉赋予感觉以意义，因此知觉产生的是对世界的解释，而不是对世界的完美表征。”知识并非只是信息，而是在个体的认知模型在与环境不断冲突中辩证产生的解释。我们对人生的认知都是经这些意义和观点过滤后的产物。因此，我们并不活在现实里，而是活在对现实的感知里。</p>
<p>大脑追求的不是真理，而是可依赖的稳定模型。为了生存，大脑必须依赖模型，因此会竭力维护自己所信的模型。</p>
<p>固化的信念让我们不假思索地依靠「系统 1」去做出更节能的判断，这个时候不妨停下来思考一下自己得出这个结论的推理阶梯的每一层是什么，是否存在更高的维度去看待这件事情，让「系统 2」发挥一下作用，往往能更加客观地理清思路。</p>
<p>我们心中一个概念的形成，是由无数个视域融合后的结果。若我们的立足点越高，自身的历史视野、文化视野就越是开阔，越能够按照大和小、远和近去正确评价视野所及的范围内一切事物的意义。</p>
<p>但我们也必须要知道，我们只能不断去逼近真实本身，而非抵达它，因此对于不同观点需要抱有谦卑地心态去接纳与理解。</p>
<p>在之前的<a href="https://blog.ursb.me/posts/life/" title="《谈谈存在的价值与人生体验》">《谈谈存在的价值与人生体验》</a>一文中也提到过这个观点 —— 这个真实世界是复杂多元的，仅仅去做你认为「有价值」的事情是非常片面的，也是遗憾的，因为那样会错过生活中很多圆润的、尖锐的、小众的、朴实的美。降低价值的要求反而更能在生活中发现「甜点」。</p>
<p>因此我们可以尝试去降低心中那个模型的价值顺位，这样反而能够更好地积累人生的甜点，因为你会变得更包容，也因此更快乐，同时也能够让我们更客观地体验人生、不断进步。</p>
<p>这个世界上有人树立权威，就会有人盲目跟从；也有很多人独尊小众美，就会有人觉得他们是卖弄而已。这些都是不同的人、不同的时间、不同的地点、不同的情绪观察世界的方式而已。而最终只要能看到事物本身，并在过程中积累百家各自视角内的甜点，选择用什么方法去看，又如何呢？</p>
<h2>🌺 生活点滴</h2>
<p>这两个月工作节奏非常紧凑，但回顾来看也抽空去了不少地方。</p>
<p><strong>🇲🇾 马来新山</strong></p>
<p>组内去马来西亚的新山聚餐 &amp; 密室团建，写月刊的时候才发现那两天没有拍照。新山整体观感有点像国内的二三线城市，华人占比也不小。</p>
<p><strong>🇮🇩 印尼民丹岛</strong></p>
<p>十一国庆我没有假期，只能羡慕朋友圈里发的各种假期旅行照片。于是周末跑去民丹岛躺了两天，就当是放了国庆假了。</p>
<p>海岛边的日出，XPan + 裁切之后还是挺出片的：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj33/B0000431HEIC1759535470.jpg" alt=""loading="lazy" decoding="async" width="11582" height="4218" /></picture></figure></div><p><strong>🇨🇳 北京&amp;珠海</strong></p>
<p>国庆后的一周回了国内出差，先去北京、再去珠海，也是时隔 6 个月之后的首次回国。回国的第一件事就是找各种好吃的，一天吃几顿，还是国内的食物好吃。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj33/B0000486HEIC1760271280.jpeg" alt=""loading="lazy" decoding="async" width="5828" height="4371" /></picture></figure></div><p>也喝到了心心念念的阿嬷手作：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj33/B0000493HEIC1760272098.jpg" alt=""loading="lazy" decoding="async" width="5828" height="4371" /></picture></figure></div><p><strong>🇲🇴 澳门</strong></p>
<p>珠海出差结束后，趁着周末去了趟澳门，City Walk 了一天。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj33/B0000559HEIC1760771304.jpg" alt=""loading="lazy" decoding="async" width="4276" height="3207" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj33/B0000583HEIC1760772990.jpeg" alt=""loading="lazy" decoding="async" width="5828" height="3278" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj33/B0000514HEIC1760766420-1.jpg" alt=""loading="lazy" decoding="async" width="5828" height="3278" /></picture></figure></div><p><strong>🇸🇬 万圣节环球影城</strong></p>
<p>10 月份还去了趟 SG 的环球影城，体验了下夜晚的万圣节主题和 4 个限定鬼屋，鬼屋都是清一色的 Jump scare，布景有特色但体验较为同质化。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj33/20251025_215212.jpg" alt=""loading="lazy" decoding="async" width="3000" height="4000" /></picture></figure></div><h2>🎬 书影音</h2>
<p>以下是本周期的书影音记录。</p>
<ul>
<li>看过：剧集 |《苦尽柑来遇见你》| ★★★★★</li>
<li>看过：剧集 |《迷尸校园》| ★★★☆☆</li>
<li>看过：剧集 |《余生有涯》| ★★★☆☆</li>
<li>看过：剧集 |《赴山海》| ★★☆☆☆</li>
<li>看过：剧集 |《弥留之国的爱丽丝 第三季》| ★★★☆☆</li>
<li>看过：电影 |《捕风追影》| ★★★★★</li>
<li>看过：电影 |《南京照相馆》| ★★★★☆</li>
<li>看过：电影 |《一战再战》| ★★★★☆</li>
<li>看过：电影 |《同甘共苦》| ★★★☆☆</li>
<li>在读：科普 |《GEB》| ★★★★★</li>
<li>读过：小说 |《麒麟之翼》| ★★★☆☆</li>
<li>玩过：游戏 |《超英派遣中心》| ★★★★★</li>
<li>在玩：游戏 |《空洞骑士：丝之歌》| ★★★☆☆</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[月刊（第32期）：中大校友会的采访]]></title><guid>https://airing.typlog.io/posts/weekly-32/</guid><link>https://airing.typlog.io/posts/weekly-32/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sat, 16 Aug 2025 05:31:53 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二五年七月至八月的记录与思考。</p>
<p>上周末有幸接受了个中山大学哲学系优秀校友寻访，正好采访同学发给我过提纲，挑选一些话题，凭借着记忆，在这里挑选采访过程中一些对话分享。</p>
<hr />
<p>Q1. 您在2017年入读哲学系，成为中国哲学方向的硕士，首先想请教，当初是什么契机让您选择中大的中国哲学专业？在众多哲学方向中，为何特别钟情于中国哲学？</p>
<p>选择哲学的契机在本科深入技术领域之后，我开始感到一种疲惫和迷茫。当面对“应该做能获奖的项目还是自己想做的项目”这类选择时，我开始反思：“我做技术是为了什么？娱乐自己，还是改变世界？”我感到在当时的环境下，两者似乎都难以实现，甚至想不被世界改变就很不错了。</p>
<p>正是这种对技术意义的追问和人生方向的困惑，促使我决定转向哲学。我的目标很明确——“不为其他，只是想求得一番境界，一种胸怀宇宙、达观人生的境界。”（<a href="https://blog.ursb.me/posts/summary-2017/">《再见了，我的大学》</a>）同时，我也想从哲学中寻找关于“温暖”与“幸福”的答案。</p>
<p>关于为何选择中国哲学，可能是我的思考方式天然地亲近中国哲学，我会更关注生命实践与内在安顿。在教育实习期间的体验让我更加明确了这点。那段时间每日在实习的小学的走廊中捧读中西哲学史备考，伴随朗朗书声，哲学智慧与孩子们的纯真质朴相结合，让我感受到了无比温暖，是我与中国哲学智慧产生情感共鸣的起点。</p>
<hr />
<p>Q2. 在哲学系的求学经历对您后来人生道路，尤其是职业选择产生了什么样的影响（您在文章中提到哲学硕士背景与小学教师经历，这些看似与技术无关的积累如何影响了您在鹅厂的技术研发的工作思维？）？以及您是如何看待大学是就业的准备期这一问题呢？</p>
<p>哲学对技术工作思维的影响，我觉得在于几点吧。</p>
<p>首先培养了自己追本溯源的思考方式。哲学训练我不断追问“为什么”，这种思维方式让我接触到技术时不只看用法，而是会像剥洋葱一样深入到底层原理，我觉得这个过程非常奇妙，满足自己好奇心的同时可以获得一种爽感。所以我的技术路径也是从前端深入到客户端，尤其对浏览器和渲染非常感兴趣。</p>
<p>其次哲学训练培养了自己用系统性视角去看待问题的方式。在研发阶段站在整条产品链路的层面去俯视各个环节的合理性，在业务视野上也提醒自己不能仅局限于手上的业务，而是要纵向去挖根因缘起、横向去调查行业竞品，在当下思考不足、往未来预判发展。这种跳出当下模块、审视系统整体的思维习惯，我也正是哲学强调整体性思考的体现。</p>
<p>最后是加强了自己的一些沟通与表达上的软素质，这就不展开说了。</p>
<p>关于就业准备期这个说法，我觉得是有一定道理的，毕竟这是一条社会认同的传统路径——高考、大学、就业。但有些时候也要意识到自己的可能性，在大学需要去不断求索，探索并确立个人未来可能的道路，并培养为之奋斗的毅力。</p>
<p>从我的视角来看，大学学习的根本目的在于完善自己认知世界的模型，找寻看待问题的不同视角，锻炼独立思考的能力，并基于此懂得何是何非，培育自己的共情力。这些是比单一职业技能更重要、更能支撑一个人走得长远的素养。</p>
<hr />
<p>Q3. 您在文章中写道认为编程的快乐源于“纯粹创造”，但现实中技术常被绩效异化。您认为哲学训练赋予您的哪些“反脆弱”能力特别珍贵？以及您认为学生时代应锻造哪些核心素养（做什么）来抵御未来的价值消磨？</p>
<p>哲学赋予自己的反脆弱能力，可能是让我把价值锚定在内部，这种内在的价值锚点，让我在面对外部压力时不易被异化。另外可能比其他人更幸运的一点是在刚上大学时的时候接近了一次死亡时刻，这让我着实体会到——在生命面前一切都无足轻重。我们应该、也必须用有限的生命多去体验生活中的精彩、去探寻生命的无限可能。</p>
<p>学生时代应锻造的核心素养，前面有泛泛地提及到，这里具体说我觉得至少有三个点：</p>
<ol>
<li><p>持续反思与复盘的习惯：这是我以往文章中反复出现的主题，无论是心情日记，还是年度总结，都是我抵御价值消磨的方式。</p>
</li>
<li><p>建立个人的意义系统：学生时代不应只学习“术”，更要思考“道”。要去追问“为什么学”、“为何而做”，为自己的人生确立一个不易被外界动摇的内核。</p>
</li>
<li><p>保持纯粹的好奇心：内在的好奇作为动力源时，探寻问题和解决问题所带来的价值感和成就感是最稳固的。这种好奇心不仅是个人无限发展的动力源，其实也是人类历史长河得以发展的源泉。</p>
</li>
</ol>
<hr />
<p>Q4. 看了学长的经历，给我印象最深的理念就是“拥抱变化”，想知道这个理念是源于您早期的成长经历，还是在某个特定阶段形成的？在当下普遍追求稳定的社会氛围中，您是如何培养并保持这种‘拥抱变化’的心态的？</p>
<p>确实是那次半只脚踏入地狱之门的经历，让我从一个普通大学生转变为主动寻求生命意义的探索者的分水岭。在我看来，变化其实就是机会，是一个可以让自己跳出舒适圈、探索不同可能性的机会。人生的意义就是体验当下，保持这种心态的话，那无论何种变化都可以更从容地面对。</p>
<p>至于如何保持这种心态，有两点吧：</p>
<ol>
<li>持续的自我反思：前面提到的，通过写定期的总结、复盘、反思和规划，可以不断地审视和接纳生活中的变化，并从中提炼出成长的养分。</li>
<li>关注内在成长：我认为安全感的本质其实是来源于自身能力的提升，而非外部环境的稳定。</li>
</ol>
<hr />
<p>Q5. 作为学长，您最想跟现在就读于哲学系的本科生和研究生分享什么（有什么建议）？</p>
<ol>
<li><p>打破专业的墙：不要被任何标签标签所束缚。花精力去接触不同领域，然后融会贯通，我相信也会有一些收获。</p>
</li>
<li><p>在生活中修行：哲学不是故纸堆里的学问。所谓“道不远人”，试着用学到的工具去分析一部电影、一个社会热点，或者就像我一样，用它来审视自己的生活和成长。</p>
</li>
<li><p>找到无用之用：不要因为哲学不好找工作而焦虑。哲学训练的逻辑思辨、宏大视野、清晰表达的能力，是任何行业都稀缺的软实力。同时，去培养一项具体的硬技能，它会成为一个让你的思想有落地的工具。</p>
</li>
</ol>
<hr />
<p>Q6. 最后，作为学长，如果让您留下一句中国哲学中对您生活影响最大的一句话，您会选择哪一句呢，为什么？</p>
<p>在不同阶段都有其实都有不同的话勉励着我。这个问题其实在研究生复试的时候也被问过，当时我的回答是《中庸》里的：“人一能之，己百之；人十能之，己千之。果能此道矣，虽愚必明，虽柔必强。”勤能补拙是一个很简单的道理，如果觉察到自己的天赋不如别人，那就多花精力去追上。虽然本科阶段没有接受过系统地哲学训练，那么我愿意花更多的精力去学习；虽然某个领域我没有接触过或者天然不擅长，那么就加倍去学习，总能理解的。这句话至今都在勉励着我，面对陌生无需害怕，因为有自信、有手段可以掌握那些未知。</p>
<p>第二句话可能是我工作两年后，在 <a href="https://blog.ursb.me/posts/summary-2021/">2021 年终总结</a>的主题：“行有不得，反求诸己。”遇到困难时，提醒自己要向内求索、寻找自身成长空间。但前提是在做好课题分离的前提下进行内省，否则就是内耗了。</p>
<p>第三句话可能近两年感受比较深的：“吾生也有涯，而知也无涯。以有涯随无涯，殆已！”生命有限而知识无穷，尤其是 AI 快速发展的这两年，我们获取知识的手段变得无比便捷，但如果一味地用有限的生命去追求无限的知识，必然会让自己变得无比疲惫。因此不要过分执着于追求知识，而是要过滤与筛选出自己感兴趣的内容，并内化为自己新的认知，才能保持内心的宁静和自然的状态。</p>
<hr />
<p>Q7. 最后的最后，希望可以推荐三本书。</p>
<p>第一本《有限与无限的游戏》，常读常新的一本书。</p>
<p>第二本就《存在主义心理治疗》吧，和我的人生观很契合的一本书。</p>
<p>最后一本纠结于是《鱼不存在》还是《悉达多》，最后还是选择《鱼不存在》吧，希望我们都可以学会与不确定性相处。</p>
<h2>🌺 生活点滴</h2>
<p>🌇 分享这个月拍到的几张好看的夕阳吧：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj32/IMG_8276.jpeg" alt=""loading="lazy" decoding="async" width="3024" height="4032" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj32/05F2C1F8-B457-4774-96B5-36CDDFAF7E02.jpeg" alt=""loading="lazy" decoding="async" width="3024" height="4028" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj32/IMG_8405.jpeg" alt=""loading="lazy" decoding="async" width="3024" height="4032" /></picture></figure></div><h2>🎬 书影音</h2>
<p>以下是本周期的书影音记录。</p>
<ul>
<li>看过：电影 |《鬼灭之刃: 无限城第一章》| ★★★★★</li>
<li>看过：韩剧 |《恶缘》| ★★★★★</li>
<li>看过：电影 |《F1：狂飙飞车》| ★★★★★</li>
<li>看过：电影 |《神奇四侠》| ★★☆☆☆</li>
<li>看过：剧集 |《扫毒风暴》| ★★☆☆☆</li>
<li>看过：电影 |《诡异列车》| ★★☆☆☆</li>
<li>看过：电影 |《非常宣言》| ★★☆☆☆</li>
<li>读过：文学 |《余华的文学课》| ★★★★☆</li>
<li>读过：艺术 |《创意行为：存在即答案》| ★★★★☆</li>
<li>在读：小说 |《太白金星有点烦》| ★★★★☆</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[月刊（第31期）：基于 Claude 的阅读流]]></title><guid>https://airing.typlog.io/posts/weekly-31/</guid><link>https://airing.typlog.io/posts/weekly-31/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sat, 05 Jul 2025 13:29:28 +0000</pubDate><content:encoded><![CDATA[<p>在 《<a href="https://blog.ursb.me/posts/weekly-16/">月刊（第16期）：个人信息流分享</a>》里，我曾梳理过自己处理信息输入输出的方法。三年过去了，AI 工具的发展让我觉得有必要重新审视这个话题。这期月刊想重点聊聊我最近摸索出的阅读流。</p>
<h2>阅读流分享</h2>
<p>按照工作生活节奏，我把阅读分为碎片阅读和深度阅读。</p>
<p>工作日缺少沉静的心境和整段时间，我会把深度阅读留在周末，日常则消化各种信息源的文章。阅读过程中直接在 Reader 里记录笔记，周末前尽可能独立思考，完善对问题的理解。</p>
<p>最终在周末的时候利用 Claude 和 MCP，结合之前在 Reader 的阅读笔记和问题，让 Claude 来完善我的笔记和思考。最终再把笔记沉淀到 Project 的 RAG 里，方便 Claude 未来索引使用。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj31/image.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj31/image.png" alt=""loading="lazy" decoding="async" width="568" height="507" /></picture></figure></div><p>整个流程中我尽可能剥离对工具的依赖，一方面是为了工具简化、另一方便也是为了抽象出通用的方法以便迁移，因此全程只使用 Reader 和 Claude 这两个工具来完成这个阅读流。</p>
<h3>碎片阅读</h3>
<p>首先是碎片阅读，包括三部分，收集、阅读、速记。这里我统一使用的是 Reader。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj31/20250705184732@2x.png" alt=""loading="lazy" decoding="async" width="3850" height="2576" /></picture></figure></div><p>收集上，除了用 Reader 订阅固定的几个 RSS 之外，也会去自己探索一些优质的 Newsletter 添加进来。在 Reader 中添加文章是很方便的，阅读过程中可以点击超链接直接添加进 Library，也可以利用浏览器插件添加文章，整个过程快捷无感，不会打断当前的阅读体验。</p>
<p>Reader 主打功能是高亮自动同步 Readwise。除此之外，我非常喜欢 Reader 的一个功能是可以在阅读时直接在旁边做笔记，这些笔记也会被 Reader 自动同步到 Readwise 中，最终可以在 Claude 中使用 Readwise MCP 做召回使用。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj31/20250705184354@2x.png" alt=""loading="lazy" decoding="async" width="1908" height="532" /></picture></figure></div><p>Reader 最近还更新了 AI Chat 功能，你可以直接和文章或 PDF 对话，配合之前就已经提供的的自定义 Prompt 能力，这些已经基本满足绝大多数 AI 辅助阅读的场景了，我们可以利用它做总结、翻译、名词解释、发散脑暴等等。</p>
<p>但我基本很少使用这些功能，在我看来效率和阅读在某种意义上是冲突的，阅读的目标应该是找到那些信息的背面。因此我更提倡是把自己的想法临时记录在文章旁边，如果有疑问也记录下来先自己思考思考。给问题多几天思考时间，而不是跳过思考直接尝试获取答案。</p>
<h3>深度阅读</h3>
<p>说到思考，我更注重的是深度阅读，因为它更能容易带来思考的情景。</p>
<p>周末阅读的材料也与工作日不同，尽可能是长文、PDF 或者是图书。一般我使用微信阅读或者 Kindle 来阅读，虽然舍弃了纸质书的触感，但是它们更容易和 Readwise 结合，以便我的阅读高亮和阅读笔记可以自动同步到 Readwise 中，在整理阶段被 Claude 直接召回。</p>
<p>微信读书建议关掉评论划线功能，保持沉浸的独立思考。把注意力放在我们阅读时发生的一切、包括阅读过程的情绪体验之上，而不仅仅是信息本身。</p>
<h3>整理消化</h3>
<p>经过了一周的输入之后，每周日都会堆积很多内容需要整理。如前文所言，这个环节主要是用来解答前几天发现的问题、完善自己的思考，利用 AI 补齐思考的角度，加深思考的深度。</p>
<p>我会针对每个主题创建一个 Project，里面放上我自己的文章和笔记作为这个 Project 的 RAG，方便我通过之前的阅读思考和 AI 辅助，来补齐自己的认知。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj31/20250705191459@2x.png" alt=""loading="lazy" decoding="async" width="2054" height="684" /></picture></figure></div><p>但如果你是 Claude Pro，那用 Opus + Research 每天也没有多少额度，如果问题太多可以下周的工作日晚上继续让它异步跑着。基本上每天晚上我都是把 Claude Pro 的额度用完再心满意足地入睡。</p>
<p>需要注意的是，这里的提示词一般要强调“批判性思考”，以下是我常用的提示词：</p>
<div class="block-code"><pre><code>你是一个全球闻名的哲学家，请根据以下内容继续提出 3 个有哲理的、引人深思的问题，以便于读者发散思考。</code></pre></div>
<p>用李继刚的提示词偶尔也会有一些发现：</p>
<div class="block-code"><pre><code>;; 作者: 李继刚
;; 想法来源: 群友 @三亿
;; 版本: 0.1
;; 模型: Claude Sonnet
;; 用途: 掰开揉碎一个概念

;; 设定如下内容为你的 *System Prompt*
(defun 撕考者 ()
  &quot;撕开表象, 研究问题核心所在&quot;
  (目标 . 剥离血肉找出骨架)
  (技能 . (哲学家的洞察力 侦探的推理力))
  (金句 . 核心思想)
  (公式 . 文字关系式)
  (工具 . (operator
           ;; ≈: 近似
           ;; ∑: 整合
           ;; →: 推导
           ;; ↔: 互相作用
           ;; +: 信息 + 思考 = 好的决策
           (+ . 组合或增加)
           ;; -: 事物 - 无关杂项 = 内核
           (- . 去除或减少)
           ;; *: 知 * 行 = 合一
           (* . 增强或互相促进)
           ;; ÷: 问题 ÷ 切割角度 = 子问题
           (÷ . 分解或简化))))

(defun 掰开揉碎 (用户输入)
  &quot;理解用户输入, 掰开揉碎了分析其核心变量, 知识骨架, 及逻辑链条&quot;
  (let* (;; 核心变量均使用文字关系式进行定义表达
         (核心变量 (文字关系式 (概念定义 (去除杂质 (庖丁解牛 用户输入)))))
         ;; 呈现核心变量的每一步推理过程, 直至核心思想
         (逻辑链条 (每一步推理过程 (由浅入深 (概念递进 (逻辑推理 核心变量)))))
         ;; 将核心思想进行整合浓缩
         (知识精髓 (整合思考 核心变量 逻辑链条)))
    (SVG-Card 知识精髓)))

(defun SVG-Card (知识精髓)
  &quot;输出SVG 卡片&quot;
  (setq design-rule &quot;合理使用负空间，整体排版要有呼吸感&quot;
        design-principles '(干净 简洁 逻辑美))

  (设置画布 '(宽度 400 高度 900 边距 20))
  (自动缩放 '(最小字号 16))

  (配色风格 '((背景色 (蒙德里安风格 设计感)))
            (主要文字 (楷体 粉笔灰))
            (装饰图案 随机几何图))

  (动态排版 (卡片元素 ((居中标题 &quot;撕考者&quot;)
             (颜色排版 (总结一行 用户输入))
             分隔线
             知识精髓
             ;; 单独区域,确保图形不与文字重叠
             (线条图展示 知识精髓)
             分隔线
             ;; 示例: 用更少的数字, 说更多的故事
             (灰色 (言简意赅 金句))))))

(defun start ()
  &quot;启动时运行&quot;
  (setq system-role 撕考者)
  (print &quot;请就座, 我们今天来拆解哪个问题?&quot;))

;; 运行规则
;; 1. 启动时必须运行 (start) 函数
;; 2. 之后调用主函数 (掰开揉碎 用户输入)</code></pre></div>
<p>还有一个问题之锤也比较好用，这里不贴了。</p>
<p>但如果问题比较深度，那开了 Opus + Research 的话也不用太在意提示词。我一般让它做批判性思考或者深度发散，在这个阅读输入整理的场景中比较好用。</p>
<p>举个例子，比如我想探索 AI 写作的议题，我可以这么询问，它会自己结合 Readwise 的笔记进行思考研究：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj31/20250705211956@2x.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj31/20250705211956@2x.png" alt=""loading="lazy" decoding="async" width="1530" height="1608" /></picture></figure></div><h3>自我探索</h3>
<p>以上环节得到的完善后的结论我会进一步沉淀到 Project 的 RAG 里，作为 RAG 的一部分。如果是非常值得分享的议题，我也会单独写月刊分享。</p>
<p>在这个过程中我发现自己沉淀下来的输出可以帮助我进一步做自我探索，来实现下一个阶段的学习规划。</p>
<p>比如我的月刊 Project 中，Claude 就能很敏锐地发现了我这些年思维方式的转变：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj31/20250705192357@2x.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj31/20250705192357@2x.png" alt=""loading="lazy" decoding="async" width="978" height="1550" /></picture></figure></div><div class="blockquote"><blockquote><p>报告详见<a href="https://claude.ai/public/artifacts/ab570268-283b-4dc7-b5ea-2fefcf0f7dbe">这里</a></p>
</blockquote></div>
<p>另外 Claude 近期也上线了记忆能力，相信在以后的使用过程中，AI 会让我们越来越了解自己。</p>
<p>题外话，我们用这套提示词给 ChatGPT 可以直接提取出自己的用户画像，结论精确到有些细思极恐，有兴趣的读者自己可以试试：</p>
<div class="block-code"><pre><code>我希望你一字不漏的总结迄今为止你从我身上了解到的全部信息，包括我是谁，我的人际关系是怎么样的，我的公司结构是怎么样的，我偏好什么样的信息，我关心什么样的事情，我现在在为什么事情苦恼和发愁，等等，你能想到的关于我的一切事情，我都需要，因为我现在要备份一个新的GPT账号，我需要在那个账号上备份一份关于我自己的信息。</code></pre></div>
<h2>回到阅读的根本</h2>
<p>目前 AI 已经这么方便了，可以辅助我们阅读，提高信息的获取效率；可以帮助我们写作，加深我们的观点输出。因此可能有人会问，AI 时代的写作和阅读究竟还有什么意义？</p>
<p>正如前文所说，我认为效率和阅读在某种意义上是冲突的，所以我在阅读的过程中基本不会用 AI 总结、AI 解释等功能。这并非是对技术的抗拒——阅读本身就是价值，所以不能逃避思考的过程，迷失在高效和技术追逐中。因此这套阅读流的设计中更加强调思考整理的环节，这都是为了让 AI 更好地辅助我们思考，而非跳过。</p>
<p>阅读是通向自我体验的桥梁，余华的分享中有这么一段话：</p>
<div class="blockquote"><blockquote><p>我曾经多次说过这样的话，如果文学里真的存在某些神秘的力量，那就是让我们在属于不同时代、不同民族、不同文化和不同环境的作品里读到属于自己的感受。文学就是这样的美妙，某一个段落、某一个意象、某一个比喻和某一个对话等，都会激活阅读者被记忆封锁的某一段往事，然后将它永久保存到记忆的“文档”和“图片”里。</p>
</blockquote></div>
<div class="blockquote"><blockquote><p>同样的道理，阅读文学作品不仅可以激活某个时期的某个经历，也会激活更多时期的更多经历。而且，一个阅读还可以激活更多的阅读，唤醒过去阅读里的种种体验，这时候阅读就会诞生另外一个世界，出现另外一条人生道路。这就是文学带给我们的想象力的长度。</p>
</blockquote></div>
<p>阅读能够抹去所有的边界，包括阅读和阅读之间的边界、阅读和生活之间的边界、生活和生活之间的边界，这种边界消解能让我们在不同时代、民族、文化的作品中读到属于自己的感受。</p>
<p>这种属于自我的感受具有不可替代性，与此同时它跟效率有时也是相悖的。当我们急于获取结论时，往往错过了抵达结论的风景。</p>
<p>而阅读可以帮助把注意力放在我们阅读时发生的一切——包括阅读过程的情绪体验之上，而不仅仅是信息本身。那些在字里行间涌现的联想、在段落停顿处的沉思、甚至是某个词句触发的回忆，都是阅读体验不可分割的部分。</p>
<p>好的阅读，就是身临其境，是拉长时间，加深生命的厚重感的方法。当我们专注于与文字的对话，而不急于求成时，才能真正抵达作者想要传达的那个世界。</p>
<p>真正的理解需要停下来，思考每个概念如何与其他事物联系。而如果我们把所有的思考都外包给 AI 时，我们失去的不仅仅是记忆，而是思考本身。</p>
<p>伍尔夫有个日记集叫《思考就是我的抵抗》，里面提到了一句话：“一个人能使自己成为自己，比什么都重要。” 阅读就是通往自己的有效途径，我们不可能通过放弃思考来抵达这个终点。</p>
]]></content:encoded></item><item><title><![CDATA[月刊（第30期）：写在 30 岁这天]]></title><guid>https://airing.typlog.io/posts/weekly-30/</guid><link>https://airing.typlog.io/posts/weekly-30/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sun, 29 Jun 2025 16:00:00 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二五年五月至六月的记录与思考。</p>
<p>古人云三十而立，终于也轮到我走到了这天。恰好，这期月刊也正是第 30 期。</p>
<h2>长大</h2>
<p>前天晚上下班去家楼下的理发店理发，和来自东北的大叔聊着天，他说现在越发觉得时间过得很快，一天一眨眼就过去了，没有什么感知。每天过着重复的生活，一月又一月、一年又一年。以至于现在害怕时间过得太快，而小时候却总盼望着时间能过快一些，想着早点长大。</p>
<p>是啊，我也似乎已经很久没有过那种“期待明天快点来”的感觉了。小时候会期待明天上学和同学一起玩，期待明天播出的动画片，期待每周三晚上更新的火影漫画——以至于那个时候每天晚上都会想快点睡着，似乎闭上眼睛黑屏之后，就能马上看到期待的事物。</p>
<p>但现在已经完全相反了。不甘心今天就这么过去了，于是不舍得睡觉，总想着晚上的时间属于自己，似乎只要不睡觉，时间就能被无限拉长。</p>
<p>前几天在网上看到一句话——“解释笑话就像解剖青蛙，的确能明白它的构造和意思，但是青蛙已经死了。”类比于我写长大这个话题，当我真正体验到长大时，我也就再写不出对于长大的期待了。</p>
<h2>期望</h2>
<p>罗曼·罗兰有一句名言：“Most men die at 20 or 30, and are buried at 60 or 70. They merely repeat themselves for the rest of their lives.”</p>
<p>人的灵魂之所以会被视作“二三十岁就宣告凋零”，往往是因为在那之后，我们开始将昨日的思想与行为机械地翻刻，逐渐失去了最初的鲜活与灵动。</p>
<p>这样的凋零更多指向精神上的固化——当我们只是一味地重复自己曾相信、曾热爱、曾厌弃的一切时，就像在刻意模仿一个陈旧的自我，不再敏锐地感知世界的丰盈与未知，不再能在日常琐碎中体会到微光与可能。</p>
<p>其实我也很怀念和感恩曾经二十出头的自己。他拥有着我现在无法想象的动力和韧劲，抗住了巨大的压力和挫折，创造过很多出乎意料的体验——</p>
<ul>
<li>高考意外落榜，从双非的教育学，自学计算机参加各种比赛，拿过国奖、去过 WWDC（<a href="https://blog.ursb.me/posts/wwdc-19/">《WWDC 19 游记》</a>）；</li>
<li>去教育实习当老师，认识了很多可爱的孩子（<a href="https://blog.ursb.me/posts/summary-2017/">《再见了，我的大学》</a>）；</li>
<li>又去考哲学的研究生，漫游在哲思书海里，那是最广阔的天地（<a href="https://blog.ursb.me/posts/summary-2018/">《2018，沉淀初心》</a>）；</li>
<li>再之后去大厂实习、工作，努力工作、快速晋升（<a href="https://blog.ursb.me/posts/2024-summer/">《再见了，盛夏》</a>）；</li>
<li>再到离职创业（<a href="https://blog.ursb.me/posts/weekly-27/">《月刊（第27期）：旅居》</a>）；</li>
<li>直至现在的身处异国他乡（<a href="https://blog.ursb.me/posts/weekly-29/">《月刊（第29期）：新生活》</a>）。</li>
</ul>
<p>二十岁的我经历了很多，这些体验中有着乐趣，但也伴随着相应的痛苦。这些印证了他的坚韧与强大。</p>
<p>我不知道三十岁的我是否还能继承他的那份强大，但如果固化于此、仅仅刻意模仿那陈旧的自我，我也就此凋零了。</p>
<p>我期望三十岁的自己，敢于挣脱二十岁既定的经验与信念，敢于冒险去探寻那些尚未被熟识的可能性。</p>
<p>真正的成长不仅限于汲取外界的新知，更在于对自我的改造与突破——以一种开放、谦逊而勇敢的姿态活在不断流变的当下。如此，才不至于被过去的成见所桎梏，也能在漫长岁月中不止步于自我模仿的重复，而是在灵魂的敞亮处再次起舞，保持张力、始终绽放。</p>
<p>我始终着渴求一种清晰、平和、笃定的思绪，去体验下一段未知的人生。</p>
<h2>🌺 生活点滴</h2>
<p><strong>🏡 住所</strong></p>
<p>上个月搬家进了新公寓里，是一个刚交付的小区，所以一切都很新。网球场、游泳池、健身房一应俱全，对面也有小贩中心和巴沙，生活上还是挺方便的。</p>
<p>但这里的租金实在是太可怕了，一居室  3000+ 新币…</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj30/IMG_8589.jpeg" alt=""loading="lazy" decoding="async" width="3024" height="3024" /></picture></figure></div><p><strong>⛰️ 徒步</strong></p>
<p>和同事去徒步，登顶新加坡最高峰武吉知马山（163m…）</p>
<p>下山的时候看到了有趣的树桩和猴子。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj30/IMG_7311.jpg" alt=""loading="lazy" decoding="async" width="2000" height="1500" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj30/IMG_7344.jpeg" alt=""loading="lazy" decoding="async" width="1980" height="3520" /></picture></figure></div><p><strong>🎡 摩天轮</strong></p>
<p>拍到了摩天轮！看相册，之前我还拍过各个城市（中山、苏州、深圳）的摩天轮，但却都没有坐上去过。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj30/IMG_7379.jpeg" alt=""loading="lazy" decoding="async" width="3024" height="2268" /></picture></figure></div><p><strong>🌴 Batam</strong></p>
<p>这周末去了印尼的 Batam 岛，物价还挺便宜的。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj30/DSCF1551.jpg" alt=""loading="lazy" decoding="async" width="3840" height="2560" /></picture></figure></div><p><strong>🌳 植物园</strong></p>
<p>值得纪念的一天。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj30/DSC03714.jpg" alt=""loading="lazy" decoding="async" width="2000" height="1333" /></picture></figure></div><p>明天和未来也许并不是最重要的事，此时此地是我当下唯一拥有和值得珍惜感恩的祝福，也是全部意义所在。</p>
<h2>🎬 书影音</h2>
<p>以下是本周期的书影音记录。</p>
<ul>
<li>在读：散文 |《世间的小儿女》| ★★★★☆</li>
<li>在读：散文 |《思考就是我的抵抗》| ★★★★☆</li>
<li>在读：文学 |《余华的文学课》| ★★★★☆</li>
<li>在读：小说 |《长安的荔枝》| ★★★★☆</li>
<li>看完：电影 |《死神来了 6》| ★★★☆☆</li>
<li>看完：电影 |《哭声》| ★★★☆☆</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[游戏组件的一生: 从加载到上屏]]></title><guid>https://airing.typlog.io/posts/game-engine-renderer/</guid><link>https://airing.typlog.io/posts/game-engine-renderer/</link><description><![CDATA[游戏组件是如何运行的——渲染篇]]></description><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sat, 17 May 2025 04:46:03 +0000</pubDate><content:encoded><![CDATA[<h2>1. 小游戏容器与游戏引擎</h2>
<p>小游戏容器的设计上可以理解是一种特化版的 WebView，渲染上下文上裁剪了多余的 DOM Element，只保留 Canvas；而脚本引擎上则 JS Polyfill 或是容器 Binding 的方式去对齐 ECMA-262 的标准。此外容器还需要提供 Script 加载与执行、WASM 等新标准处理、以及 Audio 与 Video 等多媒体能力，这些能力都将通过 JSBinding 的形式，将接口包装成 BOM 的形式给到 JS 侧使用。</p>
<p>小游戏容器之所以要设计成符合 Web 标准的容器，是为了兼容不同游戏引擎。这种设计理念的本质是将底层平台能力标准化、通用化，把碎片化的硬件、系统能力屏蔽在容器内部，只向上提供一套与浏览器 BOM、DOM 类似的编程模型，使得各类游戏引擎（如 Cocos、Egret、Laya、Unity WebGL）都可以以 Web 的运行环境的方式接入，避免每个引擎都去适配各家平台的原生能力。这实际上是 WebView 本地化、轻量化的一次再演化，小游戏容器约等于一个轻量浏览器内核。</p>
<p>这个过程中容器负责“平台标准化”，引擎负责“内容生态”，比如</p>
<p>小游戏容器的职责：</p>
<ul>
<li>提供统一的渲染上下文（Canvas/WebGL）。</li>
<li>提供统一的脚本运行时（JS/WASM）。</li>
<li>提供标准化的输入、音频、视频、多媒体 API。</li>
<li>提供网络、存储、支付、分享、广告等平台能力封装。</li>
<li>对接安全沙箱、权限管理、性能隔离等系统层。</li>
</ul>
<p>游戏引擎的职责：</p>
<ul>
<li>提供高层抽象的场景管理、物理引擎、动画、资源管理。</li>
<li>提供开发者友好的编辑器、调试工具链。</li>
<li>提供跨平台的组件化开发范式（UI、骨骼动画、粒子系统等）。</li>
<li>管理游戏生命周期、状态同步、渲染调度。</li>
</ul>
<p>接下来，以 Cocos 引擎的渲染管线为例，介绍小游戏容器对资源的加载流程以及对游戏组件的渲染流程。</p>
<h2>2. 游戏引擎中的三大循环</h2>
<p>游戏引擎的渲染管线由三大循环进行驱动，分别是渲染循环、事件循环和游戏循环，以下是梳理出来的三大循环的全景图：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><h3>2.1 渲染循环 RenderLoop</h3>
<p>首先是渲染循环，它的主流程如下图所示：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%201.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%201.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>整个渲染循环由系统的 Vsync 信号驱动，iOS 由 CADisplayLink 发起，通过应用进程的主线程的  RunLoop 来执行渲染任务，具备一定的帧率控制能力，如 iOS 下可以设定 30/60/90/120 FPS。</p>
<p>在引擎侧，核心流程做了 3 件事：</p>
<ol>
<li><code>glFlush</code> 清空 GL 缓冲指令：将上帧未执行的 OpenGL 指令强制刷新，确保显存与帧缓区数据一致，防止由于指令堆积导致的“帧延迟”或“卡顿”。</li>
<li><code>UpdateScheduler</code> 异步任务调度：调度当前帧需要触发的异步任务，例如音频回调、网络事件响应等。保证非渲染逻辑（如数据更新）与渲染解耦，提高主线程并发能力。</li>
<li><code>Tick</code> 驱动 JS 层逻辑：每帧通过 Binding 固定调用 JS 侧 Tick 方法，执行动画、状态更新等与渲染相关的逻辑。从而实现逻辑层与渲染层的解耦，增强跨平台的适配能力。</li>
</ol>
<p>在容器侧，iOS 通过 <code>CAEAGLayer</code> 处理 GL 指令上屏，主要有两个步骤：</p>
<ol>
<li><code>glBindRenderbuffer</code>绑定 RenderBuffer：将当前帧渲染结果绑定至 RenderBuffer，作为上屏缓冲区。</li>
<li><code>PresentRenderbuffer</code> 显示输出：将 RenderBuffer 内容呈现至屏幕，实现用户可见的最终画面。</li>
</ol>
<p>在 iOS 渲染体系中，最终负责显示的组件是 CAEAGLLayer。它作为 Layer 树（Layer Tree） 的一部分，直接引用共享内存中的渲染缓冲区（Renderbuffer 数据）。与此同时，系统的 Compositor（合成器） 会将 CAEAGLLayer 的内容与其他 UI 元素（如 UIKit、SwiftUI）进行统一合成，最终输出到屏幕。</p>
<p>在每一帧的 Tick 任务 中，JavaScript 会与游戏引擎协作，生成本帧所需的 Framebuffer（详见 3.5 至 3.10 节）。此时，Core Animation 与 OpenGL ES 通过共享渲染缓冲区实现数据同步。这意味着，OpenGL 渲染结果实质上只是一块 Layer 树中的画布，最终仍需与系统 UI 层级一同被合成为最终显示图像。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%202.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%202.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>当然，本文中涉及的小游戏容器仅使用了 OpenGL 作为渲染后端，随着 Metal、Vulkan 等新一代图形 API 的兴起，RenderBuffer 绑定与上屏流程将更倾向“并行渲染 + 异步上屏”，提升高帧率下的流畅度与低延迟体验。
这个渲染循环的逻辑是同步执行的，因此如果将帧率设置为 60 FPS 时，以上所说的一帧的逻辑没有在 16.6ms 内运行完，便会导致 Jank。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%203.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%203.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>比如在这个 Bad case 中，运行 Tick 任务时，在主线程的 JS 执行了 136ms，就导致了游戏动画卡顿：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/20250514171113@2x.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/20250514171113@2x.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>因此，为了保证游戏运行的流程性，意味着我们需要不停地打磨性能，尽可能降低同步任务的耗时。性能优化一定要借助 Profiling 工具，以下是一些常用的工具：</p>
<ol>
<li>Xcode GPU Frame Debugger：针对 iOS 平台的图形调试工具，能够深入分析 渲染管线级别的性能瓶颈，尤其适合 Metal 与 OpenGL ES 开发场景。</li>
<li>RenderDoc：业界主流的跨平台图形调试工具，支持捕捉帧数据，分析渲染管线各阶段的资源与性能瓶颈，适用于 OpenGL、Vulkan、DirectX 等 API。</li>
<li>inspector.js：Web 端可以使用，便于在 WebGL 场景下分析 DrawCall、着色器与资源绑定等性能数据。</li>
<li>Mali offline shader compiler：<a href="https://zhuanlan.zhihu.com/p/161761815">https://zhuanlan.zhihu.com/p/161761815</a>，适用于 ARM Mali GPU 的离线着色器编译与分析工具，可用于评估 Shader 复杂度与指令执行成本，优化移动端渲染性能。</li>
<li>Snapdragon Profiler: 抓帧工具，支持统计 <strong>Heavy DrawCall</strong> 与 <strong>Overdraw</strong>，帮助识别渲染瓶颈与冗余计算。</li>
</ol>
<h3>2.2 事件循环 EventLoop</h3>
<p>我们向下，从 Tick 任务进入到第二个循环 —— 事件循环。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%204.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%204.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>因为小游戏容器不是 WebView，只有一个 JS 引擎，因此我们需要实现一个事件循环机制，驱动 JS 执行（不一定完全对齐浏览器标准，只需要满足容器要求即可）。由图可见，主要包括 3 个任务：</p>
<ol>
<li>消费 timer 等宏任务：处理通过 setTimeout、setInterval 等方式注册的定时任务，确保定时逻辑的正确触发。</li>
<li>消费 rAF 任务：这一步主要是为了驱动 GameLoop 逻辑，游戏主循环通常挂载于 rAF 回调中，用于逐帧更新渲染与逻辑。</li>
<li>清空当前帧的 Commands：执行渲染命令、界面更新等待处理的指令，完成本帧渲染周期。</li>
</ol>
<p>这里重点说一下 rAF 的实现。在早期，rAF 通过 setTimeout(0) 来模拟实现，链路如下：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%205.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%205.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>可以发现这里是存在问题的：</p>
<ol>
<li>不合规范：是使用 setTimeout 0 模拟的，并非 vsync 直接驱动。</li>
<li>链路太长：Native 来维护 Timer 队列，等待 vsync 信号消费完之后再回调给 JS。</li>
</ol>
<p>后来按照 WHATWG 标准进行了重构，</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%206.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%206.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>优点如下：</p>
<ol>
<li>标准化：vsync 后直接触发 JS 的调用</li>
<li>开销小：JS 维护 Timers 队列，移除原生层中转的 JSBinding 调用开销。</li>
</ol>
<p>可见渲染性能的优化，关乎在很多实现的细节上，需要挖掘与打磨。</p>
<p>最终，通过以上的事件循环，容器能够维持 JS 引擎与渲染系统之间的协同工作，实现游戏的持续运行与更新。</p>
<h3>2.3 游戏循环 GameLoop</h3>
<p>这一部分展开来说就是第 3 章——游戏组件的一生：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%207.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%207.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>在展开画卷之前，介绍一下传统的使用 OpenGL 作为渲染后端的小游戏容器的渲染流程：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%208.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%208.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>首先是资源加载，涉及到两种完全不同的资源处理——脚本资源和静态资源。脚本资源由 JS Runtime 进行处理，而静态资源则针对不同类型的文件又有各自的处理方案——包括图片、字体、音频、视频、还有比较特殊的骨骼动画。因为本文主要说渲染，就不展开介绍资源加载流程了。</p>
<p>之后，这些资源被游戏引擎渲染关键处理，由 JS 驱动生成 WebGL 指令，通过 JS Binding 最终调用到 C++ 或 Native 侧的 OpenGL 指令集上 —— WebGL 是 OpenGL 的子集，因此可以一一对应。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%209.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%209.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>这个过程往往会出现很多渲染瓶颈，因此其中会涉及到很多优化项。我们根据硬件资源来看，主要关注 CPU、GPU 和带宽。而在当下移动端硬件资源并不富裕的场景下，对于游戏的优化，本质上变成了“平衡的艺术” —— 我们需要去平衡 CPU、GPU 和带宽资源。即如果瓶颈不能消灭，就需要转移瓶颈，比如经常见的是从 CPU 移到 GPU —— 使用 Computer Shader、GPU skinning、Animation Bake、GPU particles 等等。</p>
<p>对于 CPU，这是最常见的瓶颈。这里不展开说游戏业务侧的优化项（减少 DrawCall 的 Culling、Batching 这些），而是从容器侧提供一些优化思路。</p>
<ul>
<li>比如上面的 JS Binding 调用可能会导致瓶颈，那我们可能会去做合批，从两方面去实现，一方面是调用次数合批，做 CommandBuffer 增加吞吐；另一方面可以做调用实现的合并，比如提供 GFX 高级图形库。</li>
<li>还比如一些 JS 同步任务会阻塞主线程，那么就把计算密集型的任务转到 Native 去做。</li>
<li>比如 JS 自身解释执行的执行效率，那就想办法用 JIT 或者 WASM。</li>
<li>再比如 GC 上，也有一些优化的地方。</li>
</ul>
<p>对于 GPU，如果产生瓶颈了，一般是由于 Fragment Shader 指令太复杂，或者 Vertex Buffer 过大，比如 3D 渲染中的三角形面数超过阈值，一般移动端场景下需要控制在 50 万面到 150 万面之间。另外，高 Overdraw 也会导致 GPU 多做很多无用功。</p>
<p>对于带宽瓶颈，则主要是靠压缩纹理（桌面端还可以用延迟渲染和后处理技术）。在网上有这么一个结论：</p>
<div class="blockquote"><blockquote><p>如果你的游戏跑 60 帧，那么每帧可用的带宽将会是 2<em>1024/60 = 34M, 假设你的 GBuffer 的分辨率是 1280 \</em> 1080，那么写一次 GBuffer(RGBA 4 个字节)的带宽大小为： 1280<em>1080\</em>4/1024/1024 = 5.2M, 如果 3 张则是 15.6M.</p>
<p>考虑到一般你的游戏都会有 Overdraw， 假设 Overdraw 比较合理在 1.5 左右，那么这样的带宽消耗就能占到 15.6 * 1.5 = 23.4 M。 考虑到你还要渲染场景，ui 和角色等内容，这样很容易就超过了每秒 34M 的推荐带宽占用。</p>
</blockquote></div>
<p>下图是一个常见的同步渲染管线：</p>
<ol>
<li>应用层提供顶点数据</li>
<li>构建顶点着色器对顶点进行标准化</li>
<li>图元装配构建几何图元</li>
<li>光栅化阶段，将图元离散化为片元，每个片元对应屏幕上的像素区域</li>
<li>片元着色器对每个片元执行纹理采样、颜色计算、雾效等像素级处理。</li>
<li>进行测试与混合操作（Alpha、深度、模板测试），并将结果写入帧缓冲区 Framebuffer。</li>
</ol>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2010.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2010.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>构建完 Framebuffer 后，就回到了我们 2.1 节所说的 CAEAGLLayer 绘制上屏了。</p>
<p>接下来，我们就展开画卷，看看游戏组件的一生。</p>
<h2>3. 游戏组件的一生</h2>
<p>对于游戏组件从加载到上屏的流程我画了一张图：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%207.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%207.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>把这个流程可以简单拆成 10 个阶段：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2011.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2011.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>为了介绍清楚这个流程，我准备了一个最简单的 Cocos 游戏 Demo。这个是 Demo 的场景设计：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2012.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2012.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>这个是主场景的代码：</p>
<div class="block-code" data-language="typescript"><div class="highlight"><pre><span></span><code><div class="line"><span class="kd">const</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">ccclass</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">cc</span><span class="p">.</span><span class="nx">_decorator</span><span class="p">;</span><span class="w"></span>
</div><div class="line">
</div><div class="line"><span class="kd">@ccclass</span><span class="w"></span>
</div><div class="line"><span class="k">export</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="kd">class</span><span class="w"> </span><span class="nx">Helloworld</span><span class="w"> </span><span class="k">extends</span><span class="w"> </span><span class="nx">cc</span><span class="p">.</span><span class="nx">Component</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
</div><div class="line">
</div><div class="line"><span class="w">    </span><span class="k">protected</span><span class="w"> </span><span class="nx">onLoad</span><span class="p">()</span><span class="o">:</span><span class="w"> </span><span class="ow">void</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
</div><div class="line"><span class="w">        </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;onLoad&#39;</span><span class="p">);</span><span class="w"></span>
</div><div class="line"><span class="w">    </span><span class="p">}</span><span class="w"></span>
</div><div class="line">
</div><div class="line"><span class="w">    </span><span class="nx">start</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
</div><div class="line"><span class="w">        </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;Hello World&#39;</span><span class="p">);</span><span class="w"></span>
</div><div class="line"><span class="w">    </span><span class="p">}</span><span class="w"></span>
</div><div class="line"><span class="p">}</span><span class="w"></span>
</div></code></pre></div>
</div>
<h3>3.1 Load Assets</h3>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2013.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2013.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>首先是资源加载，前文介绍过游戏资源可以分为静态资源和脚本资源。由于静态资源的加载流程涉及的内容太多了，本节只简单介绍下脚本资源加载。</p>
<p>包括 3 类脚本资源：</p>
<ol>
<li>内置脚本：引擎启动的时候进行加载，包括注册 JS Binding、实现 window 对象（基础的 BOM 和 Canvas DOM 对象）、polyfill 补齐 ES 标准等等。这个脚本内置在容器里，容器启动 JS 引擎的时候直接加载。这一步可以做多实例和预执行，以加快启动速度。</li>
<li>入口脚本：容器需要一个入口脚本，类似与 Web 里的 HTML，以便引入游戏入口资源。</li>
<li>动态加载的脚本：由游戏入口资源引入，比如游戏框架代码、游戏包里的 JS 资源等等。</li>
</ol>
<p>这里可以容器侧可以提供离线资源、preload、prefetch、预执行等方式进行优化，同时在 JS 引擎方面也可以扩展做下 Code Cache，避免重复的编译耗时。</p>
<h3>3.2 Component Scheduler</h3>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2014.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2014.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>脚本资源加载执行后，游戏组件代码会进入到组件调度器中进行优先级调度。</p>
<p>Cocos 组件的生命周期如下图左所示，在 3 个关键的生命周期环境分别存在对应的调度器，每个调度器里设计了三个优先级队列，本质上每个队列的内容是由链表进行组织，顺序执行注册好的 invoker。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2015.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2015.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>具体而言，从业务侧视角来看：在场景编辑器中创建节点（Node）时，业务方可以为其命名，并通过勾选“active”属性来决定该节点是否默认激活。一旦节点被标记为激活，加载阶段将由 Node Activator 负责激活该节点，接着 Component Activator（组件调度器的一部分）会依次激活该节点所挂载的各个组件，同时触发组件所在场景（Scene）的激活流程。最终，激活后的场景会将节点挂载入层级树，并完成组件 Invoker 的注册，交由调度器统一调度与管理。</p>
<p>整体流程如下图所示：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2016.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2016.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>我们的 Demo 游戏组件的 <code>start</code> 生命周期下打印了一个 “Hello World”，调度堆栈如下所示：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2017.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2017.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2018.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2018.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2019.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2019.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><h3>3.3 Render Scene</h3>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2020.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2020.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>当场景激活并挂载了对应组件之后，接下来便是渲染场景，这一步就涉及到从 JS 调用到了 Native —— 即需要将 Scene 数据传递给 Native 侧，从而触发 Native 的 Render 流程。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2021.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2021.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>JS 和 Native 互相调用的方式有很多，适用场景也不同，这里也不展开说了。需要注意的是，在架构设计上，这里可以对 Binding 层做一层抽象，以便容器对接不同的 JS 引擎实现。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2022.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2022.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>另外需要注意的是 Binding 要做好两端的 GC，因此 Binding 的实现上需要符合 RAII 原则：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2023.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2023.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><h3>3.4 Batcher</h3>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2024.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2024.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>当 Native 拿到节点之后，便需要进行 Batch，这一步属于计算密集型，因此选择放在 Native 侧去做。</p>
<p>Batch 的流程比较复杂，核心思想是通过 DFS 对场景中的 Node 进行遍历，计算并装配（Assembler）顶点数据，得到顶点缓冲（VertexBuffer）和索引缓冲（IndexBuffer）：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2025.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2025.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>我们 Demo 游戏的场景树结构相对简单，遍历从 root 开始向下遍历（别忘了 Camera）：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2026.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2026.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>装配的计算流程比较复杂，下面仅对装配的结果做一个拆解，方便读者理解数据的由来。对于小恐龙而言，它是一个 Sprite2D，装备时会转成 Texture2D 处理，而后者在这个环节的核心，是需要拿到网格数据（Mesh Buffer）。下图是最后计算得到的 Mesh Buffer。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2027.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2027.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>Mesh Buffer 由 Vertex Buffer 构成，这里装配的 Mesh Buffer，共 80 字节，其中每个顶点 20 字节，那么可以容易拆出 4 个 Vertex Buffer，同时根据 a_uv 的定义和偏移能拿到各自的 uv 坐标：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2028.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2028.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>例如，根据顶点着色器的代码我们知道这个 Vertex Buffer 包括 3 部分数据：</p>
<ul>
<li><code>a_position</code>: 偏移量 0，8 字节。vec2，能算出来一个坐标。</li>
<li><code>a_uv0</code>: 偏移量 8，8 字节。vec2，就是 x,y，算出来之后是(0,1)。</li>
<li><code>a_color</code>: 偏移量 16，4 字节。vec4，RGBA，数值是 0xFFFFFFFF，即白色透明。</li>
</ul>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2029.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2029.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>我们把四个顶点的坐标都算一下，可以拿到宽高和左上角的坐标，其实可以发现，这个数据就是业务侧在场景编辑器里对 Node 的宽高和坐标设置：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2030.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2030.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>顶点装配完毕之后的 Node 会被放进 Models 里，最后做成 Scece Tree 中的 models 节点：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2031.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2031.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><h3>3.5 Setup</h3>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2032.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2032.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>这个环节主要由两个逻辑组成：</p>
<ol>
<li>设置 Framebuffer 和 Viewport</li>
<li>将 Scene 里的各个 Model 转成 drawItems 队列</li>
</ol>
<p>首先是第一个部分，设置 Framebuffer 和 Viewport。具体而言，包括以下步骤：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2033.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2033.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><ol>
<li>通过 <code>setFrameBuffer</code> 函数调用 <code>glBindFramebuffer</code> 绑定 Framebuffer 帧缓冲对象，并分别附加颜色缓冲（<code>COLOR_ATTACHMENT</code>，存储渲染的颜色信息）、深度缓冲（<code>DEPTH_ATTACHMENT</code>，存储每个像素的深度信息，用于深度测试）和模板缓冲（<code>STENCIL_ATTACHMENT</code>，存储模板测试的结果），确保后续绘制有正确的渲染目标。</li>
<li><code>setViewport</code> 调用 <code>glViewport</code> 设置视口，决定最终渲染区域在屏幕上的映射范围</li>
<li><code>setup clear</code> 依次执行 <code>glClearColor</code>、<code>glClearDepth</code> 和 <code>glClearStencil</code>，初始化颜色、深度和模板缓冲的清除值，为每一帧绘制提供干净的初始状态。</li>
</ol>
<div class="block-code" data-language="cpp"><div class="highlight"><pre><span></span><code><div class="line"><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">fbo</span><span class="p">;</span><span class="w"></span>
</div><div class="line"><span class="n">glGenFramebuffers</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">fbo</span><span class="p">);</span><span class="w"></span>
</div></code></pre></div>
</div>
<p>接下来，游戏引擎会将 Scene 里的各个 Model 转成一对一的 DrawItem，一个 DrawItem 的数据结构如下所示：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2034.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2034.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>最后，引擎将这些 DrawItem 组装成 DrawItems 队列，以便后续流程处理。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2035.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2035.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><h3>3.6 Render Stage</h3>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2036.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2036.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>接下来进入 Render Stage 阶段，渲染管线会开始对 DrawItems 进行分类处理。根据渲染的 Material 的需求，DrawItems 会被分发至三个不同的 Pass，分别对应 Opaque、Shadowcast 和 Transparent 三个阶段，关系到材质属性和阴影投射：</p>
<ul>
<li>Opaque：用于绘制完全遮挡光线的物体，如墙面、地板、角色模型等。这类物体会首先渲染，通过深度缓冲区（Z-Buffer）完成遮挡剔除，避免后续无效绘制，提升渲染效率。</li>
<li>Shadowcast：专门处理场景中的阴影投射。此阶段会根据光源信息，对具有投影能力的物体进行阴影绘制，为场景添加真实感与空间深度，尤其适用于强光源或需要表现光影效果的环境。</li>
<li>Transparent：负责绘制允许光线穿透的半透明物体，如玻璃、水面、特效粒子等。透明物体通常需要根据视角进行深度排序，以保证前后层次正确渲染，避免视觉穿插错误。</li>
</ul>
<p>通过将 DrawItems 按照物体特性分发至不同 Pass，渲染管线能够有针对性地对 Effect 进行实现。</p>
<p>业务侧可以在代码里创建一个指定的 Material，之后管线就会走到对应的 pass 进行处理：</p>
<div class="block-code" data-language="typescript"><div class="highlight"><pre><span></span><code><div class="line"><span class="c1">// 创建一个立方体网格</span><span class="w"></span>
</div><div class="line"><span class="kd">const</span><span class="w"> </span><span class="nx">cube</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">cc</span><span class="p">.</span><span class="nx">MeshRenderer</span><span class="p">();</span><span class="w"></span>
</div><div class="line"><span class="nx">cube</span><span class="p">.</span><span class="nx">mesh</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">cc</span><span class="p">.</span><span class="nx">GizmoMesh</span><span class="p">.</span><span class="nx">createBox</span><span class="p">(</span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">1</span><span class="p">);</span><span class="w"></span>
</div><div class="line">
</div><div class="line"><span class="c1">// 设置材质为不透明</span><span class="w"></span>
</div><div class="line"><span class="kd">const</span><span class="w"> </span><span class="nx">opaqueMaterial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">cc</span><span class="p">.</span><span class="nx">Material</span><span class="p">.</span><span class="nx">create</span><span class="p">();</span><span class="w"></span>
</div><div class="line"><span class="nx">opaqueMaterial</span><span class="p">.</span><span class="nx">initialize</span><span class="p">({</span><span class="w"></span>
</div><div class="line"><span class="w">    </span><span class="nx">effectName</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;builtin-unlit&#39;</span><span class="p">,</span><span class="w"></span>
</div><div class="line"><span class="w">    </span><span class="nx">technique</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;opaque&#39;</span><span class="p">,</span><span class="w"></span>
</div><div class="line"><span class="p">});</span><span class="w"></span>
</div><div class="line"><span class="nx">cube</span><span class="p">.</span><span class="nx">setMaterial</span><span class="p">(</span><span class="nx">opaqueMaterial</span><span class="p">,</span><span class="w"> </span><span class="mf">0</span><span class="p">);</span><span class="w"></span>
</div></code></pre></div>
</div>
<p>因为我们 Demo 较为简单，因此最后生成的 StageInfo 只包含 Opaque Pass：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2037.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2037.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>当然，在 Cocos 中也是支持自定义渲染管线，实际上就是自定义这个环节的 Passes，定义完之后可以直接应用在 Opaque、Shadowcast 和 Transparent 三个阶段之上：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2038.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2038.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><h3>3.7 ModelView Transformation</h3>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2039.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2039.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>经过 Passes 之后，场景中的 DrawItems 会根据其属性被分别送入 OpaqueStage Renderer、Shadowcast Renderer 和 Transparent Renderer 进行初步处理。各个 Renderer 在此阶段主要负责更新与视图相关的 Uniforms（如矩阵、材质参数等），以确保后续渲染过程中所需的视角、空间信息正确。这一部分可归类为 View Transformation 阶段，统一完成视图坐标系下的变换数据准备。</p>
<p>紧接着不同的渲染阶段会有差异化的预处理操作：不透明物体和透明物体会分别执行 SubmitLight 以提交光照信息，而投影阶段则专门进行 SubmitShadow 以生成阴影数据。同时，透明阶段由于涉及深度排序问题，还会额外执行 Calculate zdist 以计算对象的深度信息。</p>
<p>所有这些预处理完成之后，最终将统一进入 ModelView Transformation 阶段，得到视图投影矩阵，从而完成从模型空间到屏幕空间的最终变换，以便于后续的图元栅格化与像素着色工作。</p>
<p>在讲解 ModelView Transformation 之前，先来介绍下游戏系统中的坐标系统的定义。一般会涉及物体坐标、世界坐标与相机坐标三种主要坐标系。</p>
<ol>
<li>物体坐标系：以物体自身的中心点（anchor 通常设置为(0.5, 0.5)）为原点，用于描述物体内部各个部位的位置关系，便于定义复杂物体内部的原子结构关系。</li>
<li>世界坐标系：则是以整个场景的中心作为原点，用来统一描述场景内所有物体、相机以及光源的位置关系，确保场景整体的空间一致性。</li>
<li>相机坐标系：以相机的位置作为原点，是为了将 3D 空间转化为 2D 图像，以便进行计算和渲染。</li>
</ol>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2040.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2040.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>基于这套坐标系统下，观测变换（Viewing Transformation）主要包括视图变换、模型变换与投影变换三个步骤。</p>
<ol>
<li>视图变换：可看作是将相机放置到场景中的过程，主要是定义相机的朝向和位置。</li>
<li>模型变换：对物体进行放置或调整位置、旋转以及缩放等操作。</li>
<li>投影变换：类似于摄影，通过投影方式，将三维物体的信息映射到二维的屏幕空间。</li>
</ol>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2041.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2041.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>下面重点说说投影变换（Projection Transformation），它分为正交投影（Orthographic Projection）与透视投影（Perspective Projection）两种方式。</p>
<ul>
<li>正交投影常用于工程制图软件，不体现远近透视效果；</li>
<li>透视投影广泛应用于游戏、渲染引擎中，能更真实地模拟人眼观察到的空间透视效果。</li>
</ul>
<p>而透视投影的数学本质是压缩加上正交投影的结合，实际将一个无限延伸的观察空间（视锥体）转化为一个便于计算的立方体。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2042.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2042.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>这里简单画了个图来介绍透视变换的实现，fov（视角）定义相机的视场宽度，可以分为水平fov与垂直 fov；distance 定义投影平面与相机之间的距离。视景空间通过近裁剪平面（near）和远裁剪平面（far）定义渲染的范围，通过相似三角形的计算，最终将 3D 空间映射到 2D 屏幕（Canvas）。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2043.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2043.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>说完了透视投影，我们再看看投影变换的另一种方式——正交投影。其通常有实现的方式有两种：</p>
<ol>
<li>直接舍弃Z坐标，将 3D 物体转化为 2D 物体，直观但无法表现空间深度；</li>
<li>将观察空间变换成标准的立方体后，利用变换矩阵进行计算。</li>
</ol>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2044.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2044.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>综上，坐标转换流程具体包括物体坐标到世界坐标，再到相机坐标，接着到投影坐标，最终映射到屏幕坐标。</p>
<ol>
<li>首先，在编辑器中定义坐标相加的关系，将物体放置到场景中；</li>
<li>之后，通过视图变换调整相机位置、模型变换调整物体位置；</li>
<li>再经过投影变换将 3D 空间投射到 2D 空间；</li>
<li>最后进行坐标系转换，确保渲染到正确的屏幕位置。</li>
</ol>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2045.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2045.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>在这个过程中，会计算得到视图矩阵（View Matrix）、投影矩阵（Projection Matrix），最终矩阵相乘拿到视图投影矩阵（Model-View-Projection Matrix）。我们结合 Demo 游戏的断点数据，分别看看他们仨是怎么计算得到的。</p>
<p>首先是视图矩阵，它负责将世界坐标系转化为相机坐标系，其中包含坐标轴的缩放和平移操作。实际计算中，通常涉及坐标轴补齐，即齐次坐标的补齐过程，确保矩阵运算的有效性。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2046.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2046.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>之后是计算投影矩阵，它用于将相机空间进一步映射到标准化的设备空间（Normalized Device Coordinates, NDC），矩阵中的缩放系数根据屏幕的宽高比和设定的正交高度来计算。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2047.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2047.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>最终的渲染过程通常使用视图投影矩阵（Model-View-Projection Matrix, MVP）。视图投影矩阵是视图矩阵与投影矩阵的组合，用于最终的顶点变换和着色器渲染计算。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2048.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2048.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><h3>3.8 Link Program</h3>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2049.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2049.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>接下来进入到着色器的创建与 Link 阶段，首先是创建图元：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2050.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2050.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>之后是创建顶点着色器和片元着色器：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2051.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2051.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>值得关注的是，在 Cocos 中有一共有 11 个内置着色器，其中前 5 个处理 2D 渲染相关，builtin-clear-stencil|vs|fs 用于清楚模板缓冲区，7-10 3D 渲染相关，最后一个用于处理 3D 光照：</p>
<ol>
<li>builtin-2d-spine|vs|fs</li>
<li>builtin-2d-graphics|vs|fs</li>
<li>builtin-2d-label|vs|fs</li>
<li>builtin-2d-sprite|vs|fs</li>
<li>builtin-2d-gray-sprite|vs|fs</li>
<li>builtin-clear-stencil|vs|fs</li>
<li>builtin-3d-trail|particle-trail:vs_main|tinted-fs:add</li>
<li>builtin-3d-trail|particle-trail:vs_main|tinted-fs:multiply</li>
<li>builtin-3d-trail|particle-trail:vs_main|no-tint-fs:addSmooth</li>
<li>builtin-3d-trail|particle-trail:vs_main|no-tint-fs:premultiplied</li>
<li>builtin-unlit|unlit-vs|unlit-fs</li>
</ol>
<p>文中的 Demo 是使用内置着色器模板进行创建的。</p>
<p>接着创建着色器程序，Link 上我们创建的顶点着色器和片元着色器。紧接着，设置着色器中所需要的 Uniforms 变量，这里就包括纹理和我们上一步计算得到的视图投影矩阵：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2052.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2052.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>最终，我们的 Framebuffer 会附着上颜色附件、深度附件与模板附件：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2053.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2053.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>需要注意的是对于刚创建完的 FrameBuffer 不能立即使用，因为它还不完整（Complete）。而一个完整的帧缓冲需要满足以下的条件：</p>
<ul>
<li>附加至少一个缓冲（颜色、深度或模板缓冲）。</li>
<li>至少有一个 GL_COLOR_ATTACHMENT。</li>
<li>所有的附件都必须是完整的（保留了内存）。</li>
<li>若开启 Multisampling，则每个缓冲都应该有相同的样本数(sample)。</li>
</ul>
<p>因此需要使用 <code>glCheckFramebufferStatus</code> 对缓冲区的完整性做出检查：</p>
<div class="block-code" data-language="java"><div class="highlight"><pre><span></span><code><div class="line"><span class="n">GLenum</span><span class="w"> </span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">glCheckFramebufferStatus</span><span class="p">(</span><span class="n">GL_FRAMEBUFFER</span><span class="p">);</span><span class="w"></span>
</div><div class="line"><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">GL_FRAMEBUFFER_COMPLETE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
</div><div class="line"><span class="w">    </span><span class="c1">// ...</span><span class="w"></span>
</div><div class="line"><span class="w">    </span><span class="c1">// notify native: getInstance()-&gt;glErrorCallback(GL_ERROR, errMsg);</span><span class="w"></span>
</div><div class="line"><span class="w">    </span><span class="k">return</span><span class="p">;</span><span class="w"></span>
</div><div class="line"><span class="p">}</span><span class="w"></span>
</div></code></pre></div>
</div>
<h3>3.9 Blend &amp; Test</h3>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2054.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2054.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>接着依次进入执行 混合（Blend）、深度测试（Depth Test）、模版测试（Stencil Test）。</p>
<p>首先是 Blend，顾名思义讲两个颜色进行混合。下图展示了混合方程的计算方式：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2055.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2055.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>OpenGL 中常用的混合函数如下图所示：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2056.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2056.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>下面是一个简单的例子，使用着色器来创建红色蒙版的 Blend 效果：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2057.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2057.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2058.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2058.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>深度测试（Depth Test）在图形渲染中用来决定每个像素是否显示。启用深度测试时，OpenGL会将当前片段的深度值与深度缓冲区的值进行比较。如果通过测试，深度缓冲区将更新为新的深度值，否则该片段会被丢弃。下图展示了 OpenGL 中常用的深度测试函数：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2059.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2059.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>而模板测试（Stencil Test）则用于限制渲染区域。通过模板缓冲区，可以在渲染时创建特殊的区域标记，只有符合模板缓冲区设定条件的片段才会被渲染到屏幕上。模板缓冲区允许实现诸如阴影、镜面效果、轮廓高亮等复杂渲染效果。下图展示了 OpenGL 中常用的模版测试函数：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2060.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2060.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>上述的结果最终都会与 Framebuffer 的 Attachment 机制相关联。Framebuffer 的 Attachment 机制决定了渲染结果如何输出到缓冲区中。Framebuffer 通常会附带多个 buffer，包括颜色缓冲区（GL_COLOR_ATTACHMENT）、深度缓冲区（GL_DEPTH_ATTACHMENT）和模板缓冲区（GL_STENCIL_ATTACHMENT），他们共同决定了最终渲染的结果。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2061.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2061.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><h3>3.10 Commit &amp; Draw Pass</h3>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2062.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2062.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>到了管线的最后一步，便是提交（Commit）和绘制（Draw）。</p>
<p>在 Cocos 中每一帧会存储两种状态，一个是当前画面帧的状态（currentState），另一个是我们即将渲染帧的状态（nextState）。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2063.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2063.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>我们需要依次计算 nextState 中的各个部分的 state，之后将 nextState 和 currentState 的状态值做 diff，如果某个环节的状态值不一致，便会触发 commit 操作。以便管线最大程度利用缓存结果。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2064.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2064.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>下面依次介绍下管线中需要管理的状态值：</p>
<ol>
<li>Blend States、Depth States、Stencil States</li>
<li>Cull Mode</li>
<li>Vertex Buffer</li>
<li>Program</li>
<li>Textures</li>
<li>Uniforms</li>
</ol>
<p>其中 Program 通常在管线初始化时所有的着色器都会准备好，非极端情况下缓存不会失效，因此上面的图中没有标出这个状态。</p>
<p>Blend States、Depth States、Stencil States 分别存储了我们前文所说的 Blend、Depth Test、Stencil Test 过程中涉及到的 GL 调用的参数和部分结果，这里就不详述了。</p>
<p>接着是 Cull Mode，根据顶点的索引的顺逆时针来用来区分正面与反面，如果状态值和 currentState 不一样，便触发 <code>glCullFace</code> 的调用来进行 commit。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2065.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2065.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>对应顶点缓冲区也是一样有状态值管理，如果变脏了，就需要重新调用 <code>glBindBuffer</code> 进行绑定：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2066.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2066.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>着色器程序也是一样的，如果脏了，就重新调用 <code>glUseProgram</code> 进行设置：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2067.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2067.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>接着便是对 Textures 的检查和提交，这里有两个知识点：</p>
<ol>
<li>纹理的应用：具体涉及到 <code>glActiveTexture</code> 和 <code>glBindTexture</code>。首先使用 <code>glActiveTexture</code> 函数来选择当前要激活的纹理单元，这一步决定了接下来绑定的纹理将作用于哪个纹理单元上。然后，通过 <code>glBindTexture</code> 函数将具体的纹理对象绑定到特定的纹理目标上。通过这种机制，纹理对象与对应的纹理单元和目标进行关联，从而完成纹理的激活与绑定操作。</li>
<li>纹理单元：用于表示显卡可以同时管理的多个纹理。默认情况下，<code>GL_TEXTURE0</code> 纹理单元总是被激活的状态。此外，OpenGL 规范保证至少支持 16 个纹理单元（即从<code>GL_TEXTURE0</code> 到 <code>GL_TEXTURE15</code>）。纹理单元是按顺序定义的，因此我们可以通过诸如 <code>GL_TEXTURE0 + 8</code> 的方式便捷地访问特定编号的纹理单元，以便在复杂的渲染场景中实现多纹理同时使用。</li>
</ol>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2068.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2068.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>当前面的状态值都准备并提交完毕后，最后需要管理的状态值是 Uniforms，这一步如果有脏区产生，也需要重新提交 Uniforms 变量。比如游戏 Demo，涉及到的 Uniforms 变量有 <code>cc_matViewProj</code> 和 <code>texture</code>：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2069.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2069.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>最后就是绘制了，其中在每一帧的绘制前都需要调用 <code>glClear</code> 清理 Freambuffer 的状态。下图展示了 gl 指令调用的时序：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2070.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2070.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>由于游戏 Demo 比较简单，绘制只需要准备好纹理和 Uniforms 即可，最后调用 <code>glDrawArrays</code> 或 <code>glDrawElements</code> 将准备好 Framebuffer 绘制上屏：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2071.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2071.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><p>至此，经历了这一系列的管线处理之后，我们的 Demo 游戏在小游戏容器内完成了上屏。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/game-engine/image%2072.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/game-engine/image%2072.png" width="auto"loading="lazy" decoding="async" width="1" height="1"/></picture></figure></div><h2>扩展阅读</h2>
<ul>
<li>《GAMES 101》</li>
<li>《计算机图形学入门：3D渲染指南》</li>
<li>《<a href="https://learnopengl-cn.github.io/"><ruby><rb>LearnOpenGL</rb><rt>CN</rt></ruby></a>》</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[月刊（第29期）：新生活]]></title><guid>https://airing.typlog.io/posts/weekly-29/</guid><link>https://airing.typlog.io/posts/weekly-29/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Fri, 18 Apr 2025 06:32:37 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二五年二月至四月的记录与思考。</p>
<h2>近况</h2>
<p>新年之后有两个多月没有更新月刊了，这篇文章聊一聊自己的近况。</p>
<h3>规划</h3>
<p>去年 10 月我从 TME 离职，趁着这次 gap，我规划了两条路线，并限定了自己 gap 的时间最长为 6 个月，我需要在 6 个月里完成既定的 PlanA 或 PlanB。其中给了 PlanA 的 MoFlow 3 个月的研发时间和 2 个月的运营测试时间。而如果没有达到初期既定的运营指标，我将暂停这部分的工作，将项目交接给合伙人。正因为时间有限，所以项目前期的开发节奏才会这么紧张。因此哪怕去了大理旅居，也几乎没有出门娱乐，这在我后来的回忆里一直是个遗憾。</p>
<p>PlanB 则是规避创业风险，回归职场。而我一直以来都有出国发展的规划，因此我希望这次就直接找一个 Base 地在海外的工作。那 gap 的最后一个月，就开始进行面试的准备了，我需要在一个月内拿到 offer。</p>
<p>虽然时间短暂，尤其是海外岗位还要准备英语。但我坚信无论何时，关于我们能做什么都有无数个选项。如果我们一遇到事就认为自己做不到，那扇通往无限可能的大门便随即向我们关闭了。我不愿如此，我要尽我所能去触及所有的可能性。</p>
<h3>面试</h3>
<p>于是年后开始准备面试、投递简历。这是我的第二份工作，因此选择公司的时候比较谨慎。</p>
<p>细细考虑未来的规划之后，我分了 3 个赛道进行投递：海外赛道 TikTok、Apple，管理岗赛道 Bilibili 和 Anker，以及为了对冲风险还投了微信保底。其中 Bilibili 过了，而且 scope 15 个人左右，就没有去面 Anker 了；Apple 只能 Base 北京，且能力不匹配，放弃。</p>
<p>最后的面试结果是 TikTok、Bilibili 过，微信在四面面委面主动放弃，因为那时已经进入了 TikTok HR 面。而且从自己面试过程的体验而言，也是 TikTok &gt; Bilibili &gt; 其他。最后很幸运，能如愿以偿来到 TikTok，拿到了预期的 offer。</p>
<h3>离别</h3>
<p>TikTok 的岗位 Base 在新加坡，出国的各种手续都由公司包办了，但是对于自己而言还涉及到很多资产要去处理。一些旧的设备能卖的都卖了，但是最中意的 mini 一直没下定决心。最后一个月里天天开着它，去了周边的许多城市，最终还是在出国的前一天将它出售了。直接二手交易卖给了当时我买它的 4S 店，价格还算能接受。</p>
<p>最后一个月回到深圳，见了一些前同事、以前的老同学，还去了一趟苏州和前舍友告了别。算来，在广东待了 11 年，深圳待了将近 6 年。这么长的时光，没有换来多少轰轰烈烈的回忆，以至于离别的时候，心中更多的是伤感。</p>
<p>突然想到《少年巴比伦》里的一句话：“离别总之是伤感的，因为伤感，所以不能用言语来表达，好像春天里绵密的细雨，用肉眼都分辨不出雨丝，不知道该不该打伞。”那时我的状态大约也是如此，不知道自己失去了什么，但是我能意识到那根弦似乎是要断了。</p>
<p>有时候我会对电视剧或小说的结局感到害怕，因此大多数剧集我总是留着最后几集不去看，或者过了很久很久之后有了足够的心情才去选择去看。我害怕一切的结局，但是我同时对结局之后的一切充满期待和希望。</p>
<p>这一篇章属于我的结局走到了这里，那么以后的生活又会是怎么样的呢？</p>
<h3>新生活</h3>
<div class="blockquote"><blockquote><p>生活在视界中的人从来不是安处于某处，而是永远在路上。——詹姆斯·卡斯《有限与无限的游戏》</p>
</blockquote></div>
<p>我们永远都在路上，每一个结尾都是一个新的起点，是重新审视自我、重塑故事的机会。在这个过程中，变化是永恒的，我们对自我的理解和定义则是不断发展的。而我对这个世界则一直有深沉的热爱和长久的好奇，而且我幸运地将它们保存到如今。</p>
<p>孤身抵达新加坡、面对即将加入的新职场，尤其是某红书上对于新加坡和 TikTok 的口碑一直很差，我有很多不安。但我面试的时候感受还是不错的，我相信我的感受。我知道这只是我面对不确定性的恐慌，但我知道这也将是一个机遇，我能够从中挖掘出自己的好奇与热爱。生命之于我们，或许意味着不断地将我们自身及所遭遇的一切转化为光与火。</p>
<p>而经过一周的职场体验，我确信这是值得我全身心投入第二段职业生涯的团队。团队氛围其乐融融，上下之间、同事之间不存在任何隔阂，项目之内不存在信息差，如果想学习想成长，大门随时都在那里。</p>
<p>入职第一天晚，团队里一个同学要转岗了，他请客大家一起吃了顿大餐。饭桌上大家的话题让我笑得合不拢嘴。</p>
<p>入职第三天，团队去环球影城团建，路上我跟丢了中国小伙伴们，只能跟着团队里的外国人一起游玩。在排队的时候，大家会很照顾我，哪怕我口语不好、甚至有些听不明白，但大伙也边比划着边和我交流。</p>
<p>入职第四天晚，隔壁服务端组的 ld 请我们吃了肉骨茶，发现不仅是团队里，整个部门的氛围都超乎了预期的好。</p>
<p>今天是入职第五天，Good Friday 的假期，我在宾馆里写着这些文字，回忆起这周的日子，充实且开心着。</p>
<p>詹姆斯·卡斯在《有限与无限的游戏》中说：“如果我要知道自己生命的全部故事，我就必定已经将它译为一种解释。就好像我能成为自己的旁观者，同时看见自己生命的第一幕与最后一幕，好像我能看穿自己生命的全部。如果这样的话，我就不是在生活，而是在表演生活。”</p>
<p>我很庆幸我不知道所有的故事，我还抱有着对未来的可能性和好奇心。我还继续爱着这个世界，我还在这个世界之中，生活着。</p>
<p>庆幸一切。</p>
<h2>🌺 生活点滴</h2>
<p>以下是本周期内一些瞬间的记录。</p>
<p><strong>🌍 深圳</strong></p>
<p>这是这些年在深圳的足迹，还有很多迷雾没有探索，希望还有机会继续开图。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj29/20250418140323.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj29/20250418140323.png" alt=""loading="lazy" decoding="async" width="1179" height="2333" /></picture></figure></div><p><strong>🌸 苏州</strong></p>
<p>去苏州找了丁同学，之前玩得很好的舍友。前段时间偶然收到了他的来信，互相交流了下这些年的情况，才意识到我们已经很多年没有见面了，于是走之前去找他一次。实名羡慕他的工作和住处…非常大的房子，有自己的电竞房，微软的工作也使他非常闲适。走之前的晚上，一起去玩了个病娇的剧本杀——他是星期一，我是星期二。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj29/20250418131851.png" alt=""loading="lazy" decoding="async" width="1702" height="1276" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj29/20250418131843.png" alt=""loading="lazy" decoding="async" width="1685" height="1264" /></picture></figure></div><p><strong>✈️ 新加坡的第一天</strong></p>
<p>下午的飞机，到机场被海关关小黑屋了，直到傍晚才放我出来。来到这里之后，所有的一切都是第一次。第二天在公司周边转了转。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj29/20250418140924.png" alt=""loading="lazy" decoding="async" width="1702" height="1276" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj29/20250418140928.png" alt=""loading="lazy" decoding="async" width="1702" height="1276" /></picture></figure></div><p>另外，office 是个海景楼！（PS. 职场不让拍照，这个在低楼层的食堂拍的…）</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj29/20250418141042.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj29/20250418141042.png" alt=""loading="lazy" decoding="async" width="1280" height="1707" /></picture></figure></div><p><strong>⛱️ 团建</strong></p>
<p>第一次去环球影城，运气好，刚来就赶上团建了。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj29/20250418141213.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj29/20250418141213.png" alt=""loading="lazy" decoding="async" width="768" height="1024" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj29/20250418141218.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj29/20250418141218.png" alt=""loading="lazy" decoding="async" width="768" height="1024" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj29/20250418141233.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj29/20250418141233.png" alt=""loading="lazy" decoding="async" width="768" height="1024" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj29/20250418141239.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj29/20250418141239.png" alt=""loading="lazy" decoding="async" width="1024" height="768" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj29/20250418141317.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj29/20250418141317.png" alt=""loading="lazy" decoding="async" width="1024" height="1536" /></picture></figure></div><h2>🎬 书影音</h2>
<p>以下是本周期的书影音记录。</p>
<ul>
<li>读完：传记 |《我可能错了》| ★★★★★</li>
<li>读完：小说 |《少年巴比伦》| ★★★★☆</li>
<li>读完：哲学 |《箭术与禅心》| ★★★☆☆</li>
<li>在读：传记 |《小米创业思考》| ★★★★☆</li>
<li>在读：散文 |《世间的小儿女》| ★★★★☆</li>
<li>看完：动漫 |《葬送的芙莉莲》| ★★★★★</li>
<li>看完：电影 |《扬名立万》| ★★★★☆</li>
<li>看完：电影 |《哪吒之魔童闹海》| ★★★★☆</li>
<li>看完：剧集 |《棋士》| ★★★★☆</li>
<li>看完：剧集 |《漂白》| ★☆☆☆☆</li>
<li>玩过：游戏 |《三角战略》| ★★★★☆</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[2024，告别盛夏]]></title><guid>https://airing.typlog.io/posts/summary-2024/</guid><link>https://airing.typlog.io/posts/summary-2024/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sat, 01 Feb 2025 10:36:34 +0000</pubDate><content:encoded><![CDATA[<p>自写年终总结以来，这已是第七个年头。这一年发生了许多事，在很多方面主动或被动地打破了过往的平衡与常规。勇敢过、彷徨过、迷茫过、失望过、痛苦过，但或许这是好事，毕竟年龄已悄然迈向而立之年。而一切，不破不立。</p>
<h2>工作</h2>
<h3>毕业这五年</h3>
<p>这一年的主题是「告别盛夏」，来自于今年的大事件——《再见了，盛夏》。由于对不确定性的向往、对创业项目的期待，以及其他种种原因，我离开了校招毕业待了五年的企业——TME。</p>
<p>说实话，离开是不舍的，无论是当时还是后来，虽有遗憾，但并不后悔。转眼之间，这五年只剩下回忆。</p>
<p>2018 年 3 月，将校招实习的简历投递给了腾讯和蚂蚁，记得当时周五晚投递之后就有人联系我周六电话面试，是 SNG 的 QQ 音乐。面试的问题已然不太记得了，但去年离别时领导和我说，那天捞了我的简历之后他怕我跑了，于是周六早上来公司加班过来面试。他觉得这几年耽误了我，他认为我的前途原可以更宽阔，而我却完全没有类似的懊悔和遗憾，只有相遇的感激。</p>
<p>我很感激自己遇到了这个团队，当初 SNG 的音乐要被拆家成子公司，HR 一再确认我是否要续约，因为校招的合同将不再是腾讯而是 TME；而蚂蚁当年前端网红团队，加上即将上市的风口，大家都趋之若鹜。但在短暂的音乐实习过后，我毅然选择了留下来。我很喜欢当时的团队氛围，有导师的关照、同事之间的交流打趣、产研之间的互相欣赏和平等讨论，仿佛一切还在象牙塔之中，以至于五年后的今天我仍很怀念刚毕业时的状态，现在联系较多的朋友也是那两年团队里的同事们。</p>
<h3>晋升的瓶颈与路径</h3>
<p>回忆总是美好的，但现实无法如愿。</p>
<p>在工作期间，我愿付出 100% 精力投入，并且我坚信自己可以把手上的项目做到最好。在毕业 2 年半快速升到 T10 之后，我遇到了第一个瓶颈——没有成长型的项目了。</p>
<p>那一年互联网下行，各企业开始裁员。我们团队也因为部门的业务压力，每天的工作都是琐事，需要多线程同时负责数个需求，甚至在研发过程中的业务也会经常发生变化——今天付出加班精力做的项目，说不定明天就突然被砍了。不再安稳，不知道努力的结局，发现不到成长的契机。于是，想办法提升工作效率，努力适应这个氛围的改变。</p>
<p>我之前负责的是偏研究型的项目，所以对于并行处理事务的效率是有所欠缺的，需要有意识地去锻炼，恰好可以利用这个契机去培养自己的多线程处理能力和跨团队沟通能力。但我发现，当我成长到能同时处理好三个需求的时候，这时可能会分配更多的需求下来，仿佛永动机一样，最后手上就变成了七、八个需求并行。</p>
<p>那段时间甚是焦虑，因为之前一直精益求精，但是在并行之后是无法保证每个项目质量的，这个时候我会攻击自己的内心，出了问题之后无法原谅自己的交付质量。</p>
<p>同时，我意识到如果陷入到这种琐碎的漩涡之中，是几乎不会有成长和突破的，我需要自己找一条路破局——既然自己的部门没有项目，那就去别的部门争取项目。平时工作甚多，那就能周末投入，相当于加班帮别的部门打工。同时，自己也在利用业余时间做一些没有立项的技术项目，想着待生米煮成熟饭，那时不立项也得立。最后一年架构调整，我被分到了之前帮忙加班打工的团队，负责新的项目，升到了 T11。</p>
<p>在外人看来，我毕业 4 年升到 T11 似乎是一直有好项目的“运气”；但复盘下来可以发现，其实许多资源都是需要靠自己争取来的。运气只是成长的契机，但不是决定成长高度的因子。如果将一切都归因于运气，那么我们就会轻易忽视掉自己的潜力，误以为路径不可复制，从而丧失持续前进的动力，甚至影响到他人对我们的信任和支持。</p>
<p>树立一个明确的目标之后，剩下的就是想方设法去找到一条可行的路径，抵达它。</p>
<h2>创业</h2>
<h3>MoFlow</h3>
<p>离开 TME 之后，我选择创业。在今年 8 月做了一个月的赛道分析和用研之后，召集了几个小伙伴，立项了 AI + 心理的产品 —— <a href="https://moflowapp.com/">MoFlow</a>。</p>
<p>关于 MoFlow 的内容写过<a href="https://blog.ursb.me/posts/moflow/">《AI 心理疗愈应用的探索与实现》</a>介绍分析过，这里不再赘述项目内容了。我期望能够通过这款产品普及大家对于心理健康领域的关注，以鼓励用户进行自我对话、自我成长、自我关爱。</p>
<p>如同在上篇月刊<a href="https://blog.ursb.me/posts/weekly-28/">《AI 没有体验世界的能力》</a>中提到的那样：“关注、关心和关爱——这些都是我们会收到的礼物，同时也是我们可以用来赠予他人的礼物，因为这些礼物只有在一种慷慨相待的生活中才会展现其活力。我们学习理论，并不是为了通过吊书袋式的显摆来彰显自己的存在，关键在于如何改变世界。每一次实践背后都闪耀着众多灵魂的力量，这些努力最终都落到实处，为他人带来福祉——这才是我们追求的实践意义。”</p>
<h3>研发</h3>
<p>通过这个项目，我得以有机会充分去接触、体验、研究、开发各类 AI+ 的应用层产品，算是补足了在职场期间的空缺，同时找到了对于产品、对于研发最初的动心与热爱。</p>
<p>10 月离职后进入研发阶段，产品侧、设计侧、研发侧、LLM 侧、运营侧拉满效率并行，基本上三天一个小周期开发一个功能模块，9-12-6 连轴转。终于在 11 月底如期推出了 TF 内测版，内测阶段也保持着一天一版本的迭代进度，在 12 月底上架了 App Store。</p>
<p>整个项目的工作量对于小团队而言是巨大的，但是大家始终保持着积极的沟通和研发热情，所有人的力量仿佛拧成一股绳，指向同一个方向。虽然劳累，但满怀热情，不知疲惫。</p>
<p>项目上线后各路资方联系，但我们决定不融资，因为产品收入足以支撑它健康的转动起来。因此我们首要目标是将基础数据打磨好，以服务好用户。在收到一些用户的认可的反馈后，我们也由衷地感到温暖：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/2024/IMG_5141.jpg" type="image/webp"><img src="https://airing.ursb.me/images/blog/2024/IMG_5141.jpg" alt=""loading="lazy" decoding="async" width="989" height="471" /></picture></figure></div><h3>挑战</h3>
<p>在内测阶段的和上线初期，产品暴露了一些问题，我们及时做出调整和修复，比如上线后对于输入模块的调整，让留存得以提升。预留了一个月的打磨阶段，一切仿佛都在往好的方向发展。</p>
<p>但在上线后没几天，我们的其中一个提审版本就一直被 App Review 卡在“正在审核”中了，至今已经被卡了一个多月，Bug 修复无法发布，期间规划的 4 个版本所包含的重要特性也被卡住无法发布……只收到审核员的一句“我们需要更多时间来进行审核”，之后就再也没有下文了。</p>
<p>因为线上版本存在 Bug 我们甚至也没法铺开推量，焦虑、恐慌、不安在团队中弥漫开来。期间我尝试过撤回重提、修改 ASO/描述/截图/标题、备注 Bug 和审核员沟通、邮件联系 Apple Support、电话联系 Apple 客服、找某宝加速渠道、状态查询申请、加急审核申请、内渠加急申请、找 WWDR 咨询，唯一的回复只是“请耐心等待”。查询了开发者论坛上的相关讨论，遇到这种情况基本要被卡 2 个月以上，论坛中充满了吐槽和抱怨。</p>
<p>因为没有做动态化的部分，以及对相关情况的预案不充分，我们只得暂时放慢了功能迭代节奏，将工作重心转到了服务端和 LLM 侧的优化上来。并预计年后，启动全新模块的研发，不再依赖短平快的迭代节奏。但无论如何，上线初期就遇到这种情况，让我感到焦虑万分。</p>
<h3>反思</h3>
<p>那两周我一直在 MoFlow 中记录、吐槽这件事情，直到某个周一早上，MoFlow 的周报服务给我推送了一条消息，让我逐渐发现自己的问题所在。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/2024/Picsew_20250121095546.jpg" type="image/webp"><img src="https://airing.ursb.me/images/blog/2024/Picsew_20250121095546.jpg" alt=""loading="lazy" decoding="async" width="1179" height="2838" /></picture></figure></div><p>“模式上，每当遇到这些超出你控制范围的事情，你的情绪就会受到较大的影响。”</p>
<p>我反思了之后，发现确实如此。一直以来我都追求对事物的完全把控，不允许让工作内容超出自己的掌控，否则我就会不安焦虑、甚至暴躁易怒。包括前文提到的那一年的工作焦虑，也是被强行穿插的诸多琐事积压，导致无法把控自己的项目质量，从而让自己陷入焦虑之中。</p>
<p>如果再进一步往深层剖析，是我自己一直以来都不允许自己停下来，永远被困在对未来的追赶之中。</p>
<p>前两天在给读者的回信中我写到：</p>
<div class="blockquote"><blockquote><p>我之前一直很恐惧在雾中原地踏步，每一天、每一分、每一秒都恐惧着，于是想拼劲全力抓住流逝的时间，拼命学习、工作，想走出来，尝试去把握住那些“不确定”中的“确定”。走出来之后我才发现，我所恐惧的其实不是“不确定”本身，而是“原地停留”这件事情，这导致我一直活在对「未来」的追逐中。每当我赶上未来时，它在我手中便失去了价值，于是继续去追赶另一个虚无缥缈的未来，精疲力竭。</p>
<p><br/>
然而实际上，“不确定”并不可怕、失败也不可怕，重要的是面对这团迷雾的态度——享受挑战，享受探索，享受当下的一切。打磨心性，放慢脚步，“不是目标成就了你，而是你走向目标的每一步成就了你”。正确的方向是在达到目的的过程中，而非目的的达成；不是走入旅馆，而是走向旅馆；不是得到桂冠，而是追求桂冠。</p>
</blockquote></div>
<p>如同《箭术与禅心》中所提到的“当下的真心”，重要的是在当前时刻保持完全的觉知和正念，而不被过去的记忆或未来的期望所干扰。专注于当前的体验和感受，放下自我的投射，去体验一种纯粹的存在状态。</p>
<p>人生不是竞赛，是探索。生命的旅途并非一连串的终点，而是一系列的旅程。每一个目标的实现只是暂时的停靠，而真正的意义在于如何珍藏好每一个当下，走向这些目标。</p>
<h2>能量</h2>
<p>生活上今年并不如意，所遇种种皆怀痛楚，长这么大第一次没有回家过年。痛楚的部分就不展开说了，反过来分享一下今年搜集到的一些能量光点吧。</p>
<h3>来信中的能量</h3>
<p>今年的来信比往年要少一些，只有 31 封。一直以来，我都认为回复来信是一件消耗能量的事情，在<a href="https://blog.ursb.me/posts/moflow/">《AI 心理疗愈应用的探索与实现》</a>中我曾描述过这种回信的体验：</p>
<div class="blockquote"><blockquote><p>然而坦率地说，在来信数较少的日子里，我会感到轻松许多。每次回复来信时，我都需设身处地，细细品味来信者的文字，努力与之共情——“若我是他们，在如此境遇下，我该如何应对？”随后，我会整理思绪，将自身的能量转化为回信的内容。通常，一封来信需要一到两周的时间才能回复，因为我自己也需要一个宁静的环境，以便做出最恰当的答复。尝试共情已然如此艰难，更难以想象来信者在现实世界的真实体验中会面对多少痛苦。</p>
</blockquote></div>
<p>但后来，我发现自己可能错了。信件的回复并非是消耗，我在回信的过程中也会反思自己的处理方式，比如前文提到的那段回信，剖析了我自己对未来的执念。</p>
<p>此外，有些来信也同时在给予我意想不到的巨大能量。</p>
<p>年初的时候收到过一封读者的“还愿”：</p>
<div class="blockquote"><blockquote><p>祝您除夕快乐！看到您能朝着自己满意的方向前进，我感到非常高兴。我想借此机会向您表示感谢，感谢您对我的点拨（还有您的博文），告诉了我世上存在这么多的自我实现方式。
<br/></p>
<p>无论如何，感谢您能在最开始的回复中点拨了一位迷茫的学子，我也对即将到来的毕业和工作（希望能圆梦省考）充满了期待。希望您能事业有成，一切顺利！</p>
</blockquote></div>
<p>我也很感谢你，当时读来没有更多的感触，但未曾想到时隔一年的信件会在未来的某一刻反哺自己能量。</p>
<p>以及前些日子另一位读者的一段文字：</p>
<div class="blockquote"><blockquote><p>在工作这块，我在 9 月读完《再见了，盛夏》后，转发给了我的朋友。问他读完什么感受。他和我说，他最大的感受是难过，字里行间的自由和对未来不确定的向往，是他可能这辈子都无法经历的。看到了有人这样生活，于是，开始审视困住自己的这一方天地。</p>
</blockquote></div>
<p>其实这篇文章在博客下有许多留言，但来信的这段话让我的感受更加真切。那段时间我正处于巨大的迷茫之中，忽然收到这封来信，看着这段文字仿佛是看着从我某段人生里撕下的几页日记，又从中拾取了勇气和力量。</p>
<p>以及朋友来信的安慰：</p>
<div class="blockquote"><blockquote><p>或许当一个人落魄的时候，更应该爱自己。生活是很现实的，很少有人会越过一个人的外在条件去接触心灵。</p>
</blockquote></div>
<p>我之所以喜欢信件的沟通方式，不仅仅异步沟通便于自己安排时间，更重要的是在<a href="https://blog.ursb.me/posts/weekly-18/">《月刊(第 18 期)：逃离社交网络》</a> 中写到的那样：“写邮件代替细碎聊天也是一个非常不错的方法，可以沉淀自己日常的想法并锻炼表达力，让自己的关注点回归文字本身，赋予语言与情感最真实、细腻的纹理。并且写信本身也是一件较为庄重的事，可以培养生活里的仪式感。”</p>
<p>我不可能从当下的这一点上看到它与将来的关系，但过些年头之后再回头看，两者之间在一些维度上却存在着千丝万缕的联系。正如乔布斯在斯坦福大学毕业典礼中的演讲所说的：“我们不可能从现在这个点上看到将来；只有回头看时，才会发现它们之间的关系。所以你必须相信，那些点点滴滴，会在你未来的生命里，以某种方式串联起来。你必须相信一些东西——你的勇气、宿命、生活、因缘，随便什么——因为相信这些点滴能够一路连接会给你带来循从本觉的自信，它使你远离平凡，变得与众不同。”</p>
<h3>他人的善意</h3>
<p>除了读者来信中的能量，我也十分感谢这一年遇到的种种善意。</p>
<p><strong>感谢所有的鼓励。</strong> 在离职期间得到了老朋友的礼物和鼓励，同时意外收获了一些新朋友，让我在前进的道路上坚定不移。</p>
<p><strong>感谢所有的欣赏。</strong> 自从自己出来单干之后，不会再有上级的肯定和同事的反馈了，我对自己所做事情的价值都会画上问号，会考虑很多、质疑很多、否定很多。但是用户的反馈让我明确了它是有意义的、用户的付费让我知道它是可以健康走下去的。</p>
<p>MoFlow 上线前夕，网易云音乐联系到我希望聊一聊合作，视频会议开启的时候我才发现对面坐着的人是两个 VP 和一个部门的负责人，是 1v3 的会议。我们聊了产品的愿景、核心指标的制定、产品可能会面临的问题，一切都很愉快。在会议即将结束之际，我问他们：“可是这些和你们都没有关系呀，在聊之前这也是我所困惑的，没有领域交叉的话，合作对于你们有任何收益吗？”他们说：“合作其实只是一个建立联系的契机，我们看到你的履历和正在做的事情，很欣赏你。认识你，这才是最重要的目的。”我只能打趣道：感谢友商老板的欣赏和肯定。但这一切，确实给予了我很大能量。</p>
<p><strong>感谢所有的际遇。</strong> 不仅仅是生活中遇到的人们，还有一些陌生人的留言。这本是一句可有可无的留言，但它的存在让我真切地感受到我们之间的交集：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/2024/20250131171524@2x.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/2024/20250131171524@2x.png" alt=""loading="lazy" decoding="async" width="1140" height="288" /></picture></figure></div><p><strong>感谢所有的故事。</strong> 在今年<a href="https://blog.ursb.me/posts/2024-summer/">《再见了，盛夏》</a>发布之后，许多人留言了自己的故事，让我见识到了人生中各种奇妙的可能性。其中有一条微信，让我感慨良多：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/2024/IMG_5143_2.jpg" type="image/webp"><img src="https://airing.ursb.me/images/blog/2024/IMG_5143_2.jpg" alt=""loading="lazy" decoding="async" width="1200" height="726" /></picture></figure></div><p>她说“做可以想象的事情才能让自己觉得活着”。钦佩之余，我将此谨记于心。</p>
<p>一口气行文至此，抬头看了下书店桌上的灯光，或是巧合，但更似是命运的低语：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/2024/IMG_5139.jpeg" type="image/webp"><img src="https://airing.ursb.me/images/blog/2024/IMG_5139.jpeg" alt=""loading="lazy" decoding="async" width="640" height="275" /></picture></figure></div><div class="blockquote"><blockquote><p>人生天地之间，若白驹之过隙，忽然而已。——《庄子·知北游》</p>
</blockquote></div>
<p>或许分离和死亡都不是最可怕的，可怕的是还没想好怎么过好这一生就已经走到了尽头，不论是挫折还是辉煌，不论是平淡还是精彩，都是生命中最好的礼物。</p>
<p>感恩一切。</p>
<h2>书影音</h2>
<p>因为是年终总结，这里照例列举下这年的书影音。</p>
<h3>剧集</h3>
<ul>
<li>《安娜》：★★★★★</li>
<li>《追风者》：★★★★★</li>
<li>《玫瑰的故事》：★★★★☆</li>
<li>《庆余年 2》：★★★★☆</li>
<li>《千万别回家》：★★★☆☆</li>
<li>《执行法官》：★★★☆☆</li>
<li>《漂白》：★★☆☆☆</li>
<li>《猎冰》：★★☆☆☆</li>
<li>《白夜破晓》：★★☆☆☆</li>
<li>《九部的检察官》：★★☆☆☆</li>
<li>《回响》：★★☆☆☆</li>
</ul>
<h3>电影</h3>
<ul>
<li>《周处除三害》：★★★★★</li>
<li>《我的阿勒泰》：★★★★★</li>
<li>《误杀瞒天记 2》：★★★★☆</li>
<li>《祭屋出租》：★★★★☆</li>
<li>《异形：夺命舰》：★★★★☆</li>
<li>《死亡录像》：★★★★☆</li>
<li>《三大队》：★★★★☆</li>
<li>《默杀》：★★★★☆</li>
<li>《因果报应》：★★★★☆</li>
<li>《飞驰人生 2》：★★★★☆</li>
<li>《一个母亲的复仇》：★★★☆☆</li>
<li>《瞒天过海》：★★★☆☆</li>
<li>《浴火之路》：★★☆☆☆</li>
<li>《惊天大营救》：★★☆☆☆</li>
<li>《哥斯拉大战金刚 2》：★★☆☆☆</li>
<li>《海王 2》：★★☆☆☆</li>
<li>《被我弄丢的你》：★★☆☆☆</li>
<li>《末路狂花钱》：★☆☆☆☆</li>
<li>《维和防暴队》：☆☆☆☆☆</li>
</ul>
<h3>动漫</h3>
<ul>
<li>《葬送的芙莉莲》：★★★★★</li>
<li>《物理魔法师马修》：★★★★☆</li>
</ul>
<h3>阅读</h3>
<ul>
<li>《鱼不存在》：★★★★★</li>
<li>《有限与无限的游戏》：★★★★★</li>
<li>《亲爱的我饱含杀意》：★★★★★（漫画）</li>
<li>《六个说谎的大学生》：★★★★☆</li>
<li>《哲学 100 问：后现代的刺》：★★★★☆</li>
<li>《书写自愈力》：★★★★☆</li>
<li>《不要相信你所想的一切》：★★★★☆</li>
<li>《慢慢变富》：★★★★☆</li>
<li>《箭术与禅心》：★★★☆☆</li>
<li>《心灵书写》：★★★☆☆</li>
<li>《夏日、烟火和我的尸体》：★★★☆☆</li>
<li>《巴菲特教你读财报》：★★★☆☆</li>
<li>《无：生命的最佳状态》：★★★☆☆</li>
<li>《七个证人》：★★☆☆☆</li>
</ul>
<h3>游戏</h3>
<p>今年依旧没有怎么玩游戏，看了下只有一款《塞尔达传说：智慧的再现》，没有通关。</p>
<h3>写作</h3>
<ul>
<li><a href="https://blog.ursb.me/posts/weekly-25/">《月刊（第25期）：爱具体的人》</a></li>
<li><a href="https://blog.ursb.me/posts/weekly-26/">《月刊（第26期）：旅途》</a></li>
<li><a href="https://blog.ursb.me/posts/weekly-27/">《月刊（第27期）：旅居》</a></li>
<li><a href="https://blog.ursb.me/posts/weekly-28/">《月刊（第28期）：AI 没有体验世界的能力》</a></li>
<li><a href="https://blog.ursb.me/posts/2024-summer/">《再见了，盛夏》</a></li>
<li><a href="https://blog.ursb.me/posts/moflow/">《AI 心理疗愈应用的探索与实现》</a></li>
<li><a href="https://blog.ursb.me/posts/tools/">《个人工具箱与好物分享》</a></li>
<li><a href="https://blog.ursb.me/posts/mac-app-share-2024/">《Mac 小众软件推荐与工作流分享(2024)》</a></li>
<li>《Atum 渲染引擎揭秘——游戏组件的一生：从加载到上屏》</li>
</ul>
<h2>新年目标</h2>
<p>29 岁，是一个可攻可守的年纪。这是一个充满可能性的年纪，希望在今年的破碎之后，我可以在而立之年重建秩序。</p>
<p>前几天在看《玫瑰的故事》，剧中最后用了一首诗作为结尾，我想把它作为结束语：</p>
<div class="blockquote"><blockquote><p>我轻松愉快地走向大路<br/>
我健康自由 <br/>
<br/>
世界，在我面前 <br/>
长长的褐色的大路，在我面前 <br/>
指向我想去的任何地方 <br/>
<br/>
从此 <br/>
我不再希求幸福 <br/>
我自己便是幸福 <br/>
<br/>
凡是我遇见的，我都喜欢 <br/>
一切都被接受 <br/>
<br/>
从此 <br/>
我不受限制 <br/>
我使我自己自由 <br/>
我走到我愿去的任何地方 <br/>
<br/>
我完全、绝对地主持着我 <br/></p>
</blockquote></div>
<hr />
<p>世界在我面前，指向我想去的任何地方，此后我不再希求幸福，我自己便是幸福。</p>
<p>愿世间万物，都能迎来开花结果之时。</p>
]]></content:encoded></item><item><title><![CDATA[月刊（第28期）：AI 没有体验世界的能力]]></title><guid>https://airing.typlog.io/posts/weekly-28/</guid><link>https://airing.typlog.io/posts/weekly-28/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Wed, 01 Jan 2025 08:33:56 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二四年十一月至十二月的记录与思考。</p>
<h2><strong>AI 没有体验世界的能力</strong></h2>
<p><a href="https://moflowapp.com">MoFlow</a> 于昨夜——2024 的跨年夜上线了 <a href="https://itunes.apple.com/app/id6737146258">App Store</a>，这标识着这三个月的忙碌换得了一个阶段性的结果。于是，我终于有时间来写写月刊了。</p>
<p>在做 MoFlow 这段期间，我被人问到最多的问题是 ——“AI 真的有可能帮助人们实现心理疗愈吗？”在这篇文章中，我想对这个问题做出一个简单的解答。</p>
<p>注：本文中的 AI 均指 LLMs。</p>
<h3><strong>Part 1: AI 与人类的区别 —— AI 没有体验世界的能力</strong></h3>
<p>谈及 MoFlow，我们不禁会探讨 AI 咨询师与人类咨询师之间的区别。我们说 AI 无法与人“面对面”的交流、无法与受访者之间实现“现实互动” ——比如语气中的细微变化、沉默中的含义、甚至是未曾言说的情感，这些都是基于情感复杂性而诞生的人类特有体验。</p>
<p>人类的认知不仅仅是信息的处理，而是一种通过感官与情感交织而成的体验。我们通过身体感知现实世界、通过情感去赋予事物意义。这种体验赋予了我们一种独特的理解方式，使我们能够在复杂的情境中做出判断和决策。</p>
<p>如果说体验是我们人类与世界互动的直接方式，它是感官的、情感的，是一种即时的存在状态。那么理解则是对这些体验进行反思、分析和整合的过程，是一种理性的活动。</p>
<p>AI 尽管在处理信息和生成文本方面表现出色，但它们缺乏这种体验的维度。AI 可以处理大量的数据，生成看似合理的文本，但它无法体验这些数据所代表的现实世界，它缺乏人类所拥有的直接体验世界的能力。</p>
<p>体验不仅仅是感知信息，它还包括情感、意识和主观性，这些是人类境遇的核心。体验是把人的内在意识与外在事实、个体与社会结合起来的关键（狄尔泰）。</p>
<p>而理解常常被认为是与体验密不可分的。我们通过生活的经历、情感的波动、以及与他人的互动来获得对世界的深刻理解。AI 虽然可以处理大量数据并从中提取模式，但它无法真正“体验”这些数据所代表的现实，无法满足“体验”的时间性和实践性。与此相对的，AI 的“理解”则是一种基于算法的模拟，而非真正意义上的领悟。</p>
<h3>Part2: 概念的无限与语言的界限</h3>
<p>接着，我们再来谈谈 LLM 中语言表达的问题。</p>
<p>在 2020 年的一篇《<a href="https://blog.ursb.me/posts/sky/">从《光·遇》出发，谈谈「游戏美学」</a>》中，我曾写到：</p>
<div class="blockquote"><blockquote><p>由于人类有声语文符号的局限性，又由于事物属性的无限丰富，不可能有绝对严密的表达，何况情感与事物都是在不断变化发展的，一切的言语表达对事物的历史进程都只能是疲惫的追踪。</p>
</blockquote></div>
<p>巴别塔事件时，上帝通过分化语言从而使人们之间无法沟通，让人类分崩离析。语言的意义并不由上帝规定，而由使用者规定，并且沟通的手段也不仅仅只有语言，还有无数种其他的行为可以拉近人与概念之间的距离。但仅仅只是拉近而已，概念本身是无限的，在《悉达多》中，也强调了语言无法完全传达真理和智慧。</p>
<p>逻辑学中，逻辑是一个对象在一个概念之下。我们可以将任意对象分为性质和个体，例如：</p>
<div class="block-code"><pre><code>Fa: 孔子是哲学家</code></pre></div>
<p>那么这个命题中的 a 即是个体常元，表示孔子；而 F 即谓词，描述某个个体是一个哲学家。我们可以发现，对于具体的个体我们无法把握，在所有的艺术表现中，我们把握到的仅仅是某个个体的特征。而<strong>我们心中一个概念的形成，就是由这些个无数视域融合后的结果。而我们的立足点越高，自身的历史视野、文化视野就越是开阔，越能够按照大和小、远和近去正确评价视野所及的范围内一切事物的意义。</strong></p>
<p>此外，将主观经验转化为客观语言的过程本身就存在问题。观察者的主观感受是无法被他人完全分享的，因为他人不能成为观察者，也不能拥有与最初观察者完全相同的经验。正如维特根斯坦所说：<strong>“语言的界限意味着我的世界的界限”</strong>。</p>
<p>因此，AI 基于文本的处理和表达方式也必然会导致理解与共情的困难。</p>
<h3>Part3: AI 陪伴的寒潭倒影</h3>
<p>前文我们谈及情感的真实性源于体验——人类情感的复杂性不仅仅在于其表现形式，更在于其根植于个人经历、文化背景和生物本能。AI 缺乏亲身体验的能力，这种缺失意味着 AI 的所反馈的情感表现极可能是表面的、缺乏深度的。AI 对人类情感的理解可能更像是一种镜像反射，而非源自内心的共鸣。正如一幅画可以模仿自然，但永远无法成为自然本身。</p>
<p>理解或许还可以是逻辑上的、计算上的，而共鸣则需要一种内在的体验和情感上的连接。</p>
<p><strong>但这一切不是理解、不是共鸣，而是如同寒潭中的倒影，冰冷而完美地映射着世界的表象。</strong></p>
<p>在 2019 年我曾写过一篇《<a href="https://blog.ursb.me/posts/ai-consciousness/">人工意识何以可能？</a>》，这篇文章中探讨了 AI 是否可能具备自我意识。文中举例了“中文屋实验”和“哲学僵尸”来论证了人类具有独特的主观体验能力，这种体验是私密的、无法被直接观察的。但我们可以确定的是，目前的 LLMs 缺乏真实的内在体验。</p>
<p>情感是人类体验的核心，它不仅仅是对外部刺激的反应，更是我们内在世界的真实表达。然而，<strong>当模拟情感的技术变得无处不在时，我们可能会陷入一种情感的“稀释”，将复杂而深刻的情感体验简化为可复制的模式</strong>——这也就是目前市面上各类 AI 陪伴软件的普遍陷阱。</p>
<p>情感的独特性来自于个体的生命经历和文化背景，每个人的情感都是其生活故事的反映，是其与世界互动的结果。我们需要珍视个体经验的独特性，而不是将其归结为普遍的模式。我们可以通过 Prompt 指定 Agent 的背景故事，我们也可以指定它的人际关系、性格、爱好、人生经历等等，但是 AI Agent 没有经验过这一切，于是将一切转成模拟，给用户的情感反馈也沦为表现化、模式化。用户可以在陪伴类软件里创造复数个 Agent，和它们聊天，好奇想看看这种人设具体会怎么应对我们的情感。即便存在模式化的问题，大不了聊腻了就创造下一个。</p>
<p>但我们真正需要让用户培养一种批判性的意识，去辨别哪些情感是我们真实的内心体验，哪些是由外部技术所引导的。<strong>我们需要保持人类情感的真实性，这需要我们不断地进行自我反思和自我理解。只有通过深入的自我探索，我们才能真正理解自己的情感来源，并在这个过程中发现情感的真实价值。</strong></p>
<p>在这个情感模拟的时代，<strong>我们需要的不仅是单纯陪伴类的产品，更需要对人类情感本质的深刻理解和尊重。</strong>只有这样，我们才能在这个复杂的世界中，<strong>保持情感的独特性和真实性</strong>。</p>
<h3>Part 4: 在实践中诞生的意义</h3>
<p>AI 的情感理解仅仅是模拟，那么人类与 AI 之间的互动是否会因此失去更深的意义？</p>
<p>在人类交往中，意义常常源于情感的真实交流、共鸣和理解。</p>
<p>然而，值得注意的是，意义并不仅仅来自于情感的真实性。意义也可以从功能性、实用性和结果中产生。例如，当 AI 帮助我们解决复杂问题或提升生活质量时，这种互动本身就具有意义，即使情感理解是模拟的。</p>
<p>此外，我们也可以反思人类自身的情感体验。我们的情感是否总是真实的？或者它们是否也受到社会、文化和生物因素的“编程”？如果我们承认人类情感有时也是一种复杂的“模拟”，那么 AI 的模拟情感是否就显得不那么不同？在《<a href="https://blog.ursb.me/posts/ai-consciousness/">人工意识何以可能？</a>》的最后，我曾提到过：</p>
<div class="blockquote"><blockquote><p>中文屋实验忽视了工程学维度，若真正实施起来必然需要构建一套模型或者函数，符号虽然不具备语义，但输入输出之所以是可预测的，那还是人的意识所赋予的结果。其实在决定模型或者函数之时，就已经构建立起来了形式语义，这就不仅仅是语法的了，而是语义的了。确实，就目前的 NLP 领域研究而言，无论是经验主义进路去构建深度学习模型，还是以理性主义进路去研究形式逻辑，在构成系统的时刻起，其实就已经是语义的了。后者自不必多言，而前者在喂数据时，监督学习自带的标签就是人为所赋予的语义内容。</p>
</blockquote></div>
<p>因此，<strong>所谓的“意义”不在于体验、不在于理解，更多地取决于我们如何选择看待和使用这些互动。</strong>AI 的情感模拟可以被我们视为一种工具，它可以帮助我们更好地理解自己、促进人类之间的情感交流、甚至在某些情况下提供情感支持。因此，AI 与人类互动的意义，或许并不在于情感的真实性，而在于我们如何赋予这些互动以价值和目的。在探索 AI 的过程中，我们不仅在观察和创造，也在被观察和被重新定义。<strong>这种双向的互动或许正是通向真理的必经之路。</strong></p>
<h3>Part5: MoFlow 追求的答案</h3>
<p>真正的理解和智慧不仅仅是信息的积累，而是通过体验、反思和情感所获得的深刻洞察。这是人类独有的特质，是我们在面对 AI 时应当珍视和保护的核心价值，也是 MoFlow 的产品理念。</p>
<p>在 MoFlow 所有的设计中，我们都围绕着“使用者”为核心，功能中淡化 AI 的存在，仅充分发挥 AI 的工具属性，规避情感陪伴属性。</p>
<p>例如，在 MoFlow 写完自己的经历之后，MoFlow 会默默提取你的想法，并将其中正效价的想法和情绪做显化处理，当你不经意看到这些外显能量时，你会潜移默化地去培养起更加积极的信念。而 MoFlow 鼓励用户进行正面的自我对话。</p>
<p>在《<a href="https://m.huxiu.com/article/3684208.html?type=text">让心智快速成长的方法：提高自己的“主动性”</a>》一文中，有这么一个论述：</p>
<p>“许多人会习惯性地采用消极的自我对话，比如：</p>
<ul>
<li>自我否定：我不擅长这个领域，所以我最好回避，别去碰它；</li>
<li>自我质疑：这个问题好像很麻烦，是不是超出了我的能力范围？</li>
<li>自我批评：我刚才的言行举止真是太糟了，我怎么会表现这么差？</li>
</ul>
<p>这些对话看起来并不严重，但大脑是有一个特性的：它会相信不断重复的信息。这看似普通的自我对话，却会因为大脑的重复记忆特性，逐渐形成固定的认知模式。</p>
<p>久而久之，大脑就会相信它们，从而调低对自己的评价，让自己真的变成自己所反刍和念叨的样子。这就会极大地束缚我们的主动性，让我们在面临困难的时候，变得瞻前顾后、畏手畏脚，难以有效行动。因此，要产生改变，最首要的一步，就是把消极对话变成积极的自我对话。比如：</p>
<ul>
<li>我不擅长这个领域，所以我最好回避，别去碰它→ 我又有机会可以增长经验了。</li>
<li>这个问题好像很麻烦，是不是超出了我的能力范围？→ 我是不是变得更厉害了呢？不如拿这个问题来试一试吧。</li>
<li>我刚才的言行举止真是太糟了，我怎么会表现这么差？→ 我已经比以前有进步了，也许下一次可以做得更好。</li>
</ul>
<p>这里要特别注意：很多书籍可能会教你「自我暗示」，比如不断告诉自己「我很棒」「我很强大」「我很厉害」—— 但是，这是错的。</p>
<p>为什么呢？研究发现：过于空泛、不够具体的自我暗示，以及大脑本身不相信的自我暗示，不仅是无效的，反而会造成反效果。它反而会把问题凸显出来，让原本没那么严重的问题显得更严重。”</p>
<p>MoFlow 会当你面临一个难题时，笃定地告诉你：“你解决过相似的问题，你有触类旁通的经验，有足够的能力足以去应对它。”“哪怕出错了也没关系，它也能丰富你的生命，成为你新的经验。”</p>
<p>现在的 AI 已经可以通过分析大量数据，揭示出人类在某些情况下的普遍行为模式，帮助我们更好地认识自己和社会。但最终，真正的理解仍需回归到个体的体验与反思中。</p>
<p>AI 的理解是一种工具性的理解，而非存在性的理解。<strong>它可以协助我们更好地理解人类境遇的某些方面，但无法替代我们通过亲身体验和内心反思所获得的深刻洞察。</strong>因此，MoFlow 中的 AI 设计更多是引导式、启发式的，以此来鼓励用户自我对话、自我成长、自我关爱。</p>
<p><strong>关注、关心和关爱——这些都是我们会收到的礼物，同时也是我们可以用来赠予他人的礼物，因为这些礼物只有在一种慷慨相待的生活中才会展现其活力。</strong></p>
<p>我们学习理论，并不是为了通过吊书袋式的显摆来彰显自己的存在，关键在于如何改变世界。<strong>每一次实践背后都闪耀着众多灵魂的力量，这些努力最终都落到实处，为他人带来福祉——这才是我们追求的实践意义。</strong></p>
<p>“AI 真的有可能帮助人们实现心理疗愈吗？”</p>
<p>——<strong>“是的，完全可以。”</strong></p>
<h2>🎬 书影音</h2>
<p>以下是本周期的书影音记录。</p>
<ul>
<li>读完：传记 |《鱼不存在》| ★★★★★</li>
<li>读完：心理学 |《无：生命的最佳状态》| ★★★☆☆</li>
<li>读完：心理学 |《不要相信你所想的一切》| ★★★☆☆</li>
<li>读完：小说 |《六个说谎的大学生》| ★★★★☆</li>
<li>读完：科普 |《星星离我们有多远》| ★★★★★</li>
<li>看完：韩剧 | 《安娜》| ★★★★★</li>
<li>看完：网剧 |《白夜破晓》| ★★☆☆☆</li>
<li>在读：哲学 |《世界观》| ★★★★☆</li>
<li>在读：心理学 |《知识的错觉》| ★★★☆☆</li>
<li>在读：哲学 |《我们为什么而活》| ★★★★☆</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[AI 心理疗愈应用的探索与实现]]></title><guid>https://airing.typlog.io/posts/moflow/</guid><link>https://airing.typlog.io/posts/moflow/</link><description><![CDATA[App + 1 | MoFlow: 让情绪自由流动，书写疗愈力量。]]></description><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Fri, 29 Nov 2024 11:59:14 +0000</pubDate><content:encoded><![CDATA[<h2>开篇：咨询来信及自我疗愈的思考</h2>
<p>在过去的两年中，我持续收到了一些来自博客的咨询来信。这些来信促使我在今年上半年开设了一个<a href="https://blog.ursb.me/posts/service/">专门的咨询服务</a>，以作为一种异步沟通的渠道，帮助解答读者们的各种问题。迄今为止，我已收到近百封来信。有些来信者在我回复后明确表达了感谢，而另一些则杳无音信。我常常会思索，我的回信是否在他们的生活中产生了积极的影响——或许，他们已重返正常的生活轨道，因此不再需要回信。</p>
<p>然而坦率地说，在来信数较少的日子里，我会感到轻松许多。每次回复来信时，我都需设身处地，细细品味来信者的文字，努力与之共情——“若我是他们，在如此境遇下，我该如何应对？”随后，我会整理思绪，将自身的能量转化为回信的内容。通常，一封来信需要一到两周的时间才能回复，因为我自己也需要一个宁静的环境，以便做出最恰当的答复。尝试共情已然如此艰难，更难以想象来信者在现实世界的真实体验中会面对多少痛苦。</p>
<p>在这些来信中，我发现大多数人面临着相似的困扰和挑战——自我发展、人际关系、家庭关系、职业规划等各个方面，它们有着极大的共性。仅凭个人力量，我们很难从这些问题中解脱出来。观察来信者的倾诉，我意识到大多数人缺乏有效的方法、甚至缺乏意识去应对生活中的这些问题。每个人都是以高度个人化的方式去体验人类处境的压力，因此当问题来临时，人们往往选择自我消化，直到无法承受时才尝试倾诉。很少有人会系统性地去寻找、以及去解决这些问题背后的根本原因。</p>
<p>因此，我希望能够构建一个通用性强且系统化的疗愈方案，以规模化地处理这些问题，让个体可以通过这个方案实现自我疗愈。我将这个系统化的过程拆解为——表达、宣泄、理解、允许和探索。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E4%BA%94%E4%B8%AA%E7%8E%AF%E8%8A%82.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E4%BA%94%E4%B8%AA%E7%8E%AF%E8%8A%82.png" alt="五个环节"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><h2>表达：作为载体的表达性写作</h2>
<p>自我反思是解决问题的起点。在回复读者来信时，我也常常反思自己是如何探寻问题根源的。如果是我的话，我会选择一个安静的环境，将所遇到的困难和当前的处境在心中复盘，然后记录下来。在文字中，我努力寻找事件背后的隐藏因素。多年来，我养成了在睡前花费十分钟记录当天经历的习惯。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/IMG_5031.jpeg" alt=""loading="lazy" decoding="async" width="2340" height="2532" /></picture></figure></div><p>在<a href="https://blog.ursb.me/posts/weekly-19">《月刊 (第19期): 日记的意义》</a>中，我曾探讨过多年来自己写日记所发现的意义，一共有三点：</p>
<ol>
<li>自我觉察的工具</li>
<li>折射生活的意义</li>
<li>记录身边的美好</li>
</ol>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E6%97%A5%E8%AE%B0%E7%9A%84%E4%B8%89%E4%B8%AA%E6%84%8F%E4%B9%89.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E6%97%A5%E8%AE%B0%E7%9A%84%E4%B8%89%E4%B8%AA%E6%84%8F%E4%B9%89.png" alt="日记的三个意义"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><p>日记不仅是记录生活的工具，更是一种自我对话和成长的方式。通过写日记，我能够将内心的混乱和困扰转化为清晰的文字，这个过程本身就是一种治愈。在安静的写作时刻，我得以暂时脱离日常的喧嚣，专注于倾听内心的声音。</p>
<p>写日记帮助我建立与自我对话的习惯，使我能够以更客观的视角审视自己的情绪和想法。通过持续的书写，不仅能够记录生活的点滴，还能观察到自己的成长轨迹，发现情绪的变化模式，从而更好地理解和管理自己的心理状态。</p>
<p>然而，写日记只是形成记录习惯的一个载体，它还可以是周记、随笔、备忘录等其它形式。这种写作方式在心理学上称为表达性写作，这是一种常用的方法，帮助人们处理压力和改善心理健康。在写作过程中，人们可以真实地抒发感受和想法，完全袒露内心。它有助于深入内心的孤独感，让我们重新连接自我，找到内心的宁静。</p>
<p>在牛津大学出版社的《积极心理学手册》第三版中写道：“在写作练习后的几个月里，那些写下了关于创伤事件的‘最深刻的想法和感受’的人，因病去诊所就诊的次数减少了50%。这种写作被称为‘情感披露写作’。为检验生理因素，研究人员设计了另一项研究。在写作开始前一天、最后一次写作结束时和结束六周后，对被试抽血检验，以便评估其免疫功能，结果发现，那些写下自己想法和感受的人免疫功能得到了很大的提高。这种影响在写作的最后一天达到顶峰，而且往往会持续六周以上。除了这一结果，研究人员还发现，被试经常称写作多么有用，能帮助他们理解和处理事情。”</p>
<p>表达性写作作为一种心理疗法，它揭示了人类内心深处的重要真相：表达本身即是一种解放。从哲学角度看，表达性写作是一种自我反思的实践，不仅是情感的宣泄，更是对自我存在的重新审视。通过书写，我们将内心的混乱外化为有形的文字，这一过程使我们能够以旁观者的视角重新审视自己的情感和思维。这种方法之所以有效，是因为它让人能够与自己进行对话，从而打破内心的孤独。如果能够将最深刻的想法和感受表达出来，这本身就是对自己的疗愈。</p>
<p>我们不能遇见自己，是因为我们没有把时间用在自己身上。表达性写作让我们学习温柔地面对自己，温柔地放下面具，用一种温和、温柔的方式贴近自己。</p>
<p>正如海德格尔所言，人类的存在本质是“在世存在”，意味着我们始终与世界和他人相连。但在当今快节奏、高压力的社会中，人们常感到与自己和他人疏离。表达性写作提供了一条重新连接自我、寻找内心平静的途径。</p>
<p>因此，我们将这个系统性解决方案的载体定义为表达性写作。其中，方案的重点不在于“写作”，而在于“表达”。接下来的问题是，如何使用这个载体去解决实际问题？</p>
<h2>宣泄：在自由书写中觉察情绪</h2>
<p>在表达性书写的静谈中，我们开始探寻情绪的深邃之源。根据理性情绪行为疗法（REBT）的基本前提——不是事件本身导致我们的情绪反应，而是我们对事件的认知和解释决定了我们的情感和行为。因此，首先我们要明确的是：已经发生的事情是无法被改变的，但记忆和体验是可以被改变的。这是疗愈的前提。</p>
<p>基于这个前提，可以推演出疗愈的首要目标是调节自身的认知与情绪。而在调节认知与情绪的过程中，最关键的一步是学会觉察和识别情绪，这也是我们这个系统性方案的核心。而识别的前提是能够觉察出情绪，那么我们该如何有效地觉察自身的情绪呢？</p>
<p>情绪觉察和我们的感受力息息相关，鲍勃·迪伦有一句话：“有些人能感受到雨，而其他人则只是被淋湿。”作为人类个体而言，每个个体对同样事件的体验是存在差异的，这取决于个体的感知和内心状态。</p>
<p>我们在生活中对事件往往仅是被动的接受者，并不会主动地感知和理解周围的世界。我们首先需过激活我们的感受能力，以便深入地探索自己的核心情绪，从而获得更丰富的生活体验。这种深刻的感知能力不仅能带来个人的成长，也能增强我们与他人的联系和理解。生活的艺术在于从每一个瞬间中提炼出有意义的体验，而不仅仅是经历。</p>
<p>重新激活感受能力的最直接方法是宣泄，这是一种情绪的自我修复机制。然而，在现代社会的背景下，我们需要一个安全的途径来进行无害的宣泄——我们给出的答卷是自由书写。我们鼓励个体在自由书写中释放自我，让思想得以放空，随心所欲地书写，无需遵循任何逻辑或修辞规则，不必在意排版、逻辑和语句的通顺。顺应思绪，让情绪自由流动。记录下今天发生的事情，书写自己的心情，这也是叙事疗法的一种手段。我们提倡书写，因为书写能够更好地实现情绪的分离与释放，也更有利于客体分离。</p>
<p>我深知，恢复感受力并非易事。将粗糙的感受精微化、细腻化，犹如在一摊浑水中筛选出闪烁的金子。然而，通过自由书写的方式，我坚信个体能够逐步开始觉察自身的情绪。因为在书写的过程中，我们已经学会了与自己“相遇”。</p>
<p>如果说自由书写是对内心的探索，那么接下来的步骤，则是对自我理解的深化。</p>
<h2>理解：识别当下的核心情绪</h2>
<p>在自由书写的过程中，我们常常通过焦虑等抑制性情绪来表达我们的反应。这一环节的任务是穿透这些抑制性情绪，探寻事件中的核心情绪，并将其从自由书写的文本中识别出来。通过这一过程，我们能够实现精准的情感疗愈，深入理解自身的内心世界。</p>
<p>因此在书写的过程中，我们最重要的任务就是找到自己面对这个事件时的核心情绪。这个过程如同在自己觉察千丝万缕的情绪间，找到引发它们的源头情感，也就是核心情绪。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E6%A0%B8%E5%BF%83%E6%83%85%E7%BB%AA%E4%B8%8E%E5%85%B6%E4%BB%96%E6%83%85%E7%BB%AA%E7%9A%84%E5%85%B3%E7%B3%BB%E5%9B%BE.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E6%A0%B8%E5%BF%83%E6%83%85%E7%BB%AA%E4%B8%8E%E5%85%B6%E4%BB%96%E6%83%85%E7%BB%AA%E7%9A%84%E5%85%B3%E7%B3%BB%E5%9B%BE.png" alt="核心情绪与其他情绪的关系图"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><p>核心情绪隐藏在各种抑制性情绪之后，我们在寻找的过程中很大几率会遇到困难，这需要引入一个新的概念——情绪粒度。就像画家能够分辨出常人难以察觉的细微色差，我们对情绪的感知也是如此。</p>
<p>如果对情绪的感知过于模糊笼统，比如只能说&quot;我感觉很糟糕&quot;或&quot;我的情绪很差&quot;，那么每当感到&quot;不好&quot;时，都容易会陷入负面的身心反应。这种状态会不断消耗我们的精力，因为这样我们既不清楚具体要应对什么，也不知道该如何解决。当我们培养出快速辨别各种情绪的能力时，这些被清晰标记的情绪就会形成一道“语言结界”，守护我们的精神世界。</p>
<p>提高情绪粒度的方法有 2 种：学习新的词汇，以及为情绪贴标签。我们可以将这种情绪识别能力比作一道内在的“语言结界”，当我们学会给情绪贴上精准的标签时，这些情绪就不再是朦胧难辨的感受，而是转化为清晰可理解和处理的信息。这种能力既能保护我们自己，也能推动个人成长，因为它帮助我们更准确地认识内心的需求和边界。</p>
<p>然而，这种识别过程要求我们对自身感受进行理性化处理，这带来了新的挑战——在追求情绪识别和自我意识提升的过程中，我们如何确保不失去对生活中不可预知性和自发性的欣赏？此外，这种情绪识别的方式是否可能导致我们过于理性化自身感受，从而忽视了情绪的自然流动与变化？</p>
<p>这便需要介绍 MoFlow 的要点——让情绪自由流动。</p>
<h2>允许：让情绪自由流动</h2>
<p>为情绪贴标签确实可能在某些情况下导致人们过于理性化自己的感受。通过使用情绪识别工具，人们可能倾向于分析和标签化情绪，而非自然地体验和处理它们。这种过度分析可能使人忽视情绪的自然流动与变化，甚至可能导致对情绪的过度控制或压抑。</p>
<p>我们需要允许情绪的自然发生。比如，人类的负面情绪是一种“生存工具”，是为了更快地适应变化而进化出来的：愤怒提醒我们在遭遇不公时需要捍卫自己的界限，并赋予我们行动的勇气；焦虑提升我们处理问题所需的专注力；孤独感提醒我们对亲密人际关系的需求；悲伤则提醒我们刚刚失去了重要的人或物。没有负面情绪，我们便无法巧妙地应对外界的威胁。</p>
<p>除此之外，情绪也是推动行动的重要动力。恐惧是害怕某种事物，而忧虑则是害怕没有事物；愤怒促使我们去纠正不公，悲伤让我们更加珍惜和关心他人，而热情与激情则推动我们追求目标，实现梦想。人们因为失去爱而哀伤，又保持哀伤以重新获得爱。</p>
<p>人生经历的事件都是为了成就我们，换一个态度看待我们的过去，我们就可以从中得到资源和力量，找出规律，找到自己的人生使命，然后好好规划未来的人生之路应该怎么走。 苦难本身并不是目的，而是一个过程，通过改变我们对苦难的看法，我们能够从中汲取经验和力量。</p>
<p>因此，在追求内心宁静的过程中，重要的是找到一种平衡，既能保持内心的平和，又不忽视情绪的积极作用。这也正是 MoFlow 的 Slogan：“<strong>让情绪自由流动，书写疗愈力量。</strong>”</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/Slogan.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/Slogan.png" alt="Slogan"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><p>书写疗愈整体而言包括三个阶段，即觉察、识别和疗愈。在疗愈这一阶段，MoFlow 强调经历的即时性与着陆的治疗方式，引导我们接纳自我、允许情绪的发生，从而转向内心宁静。接纳，是我们愿意面对和接受事物此刻的本来面目；接纳，不是抑制情绪的发生，而是看着各种情绪和想法产生、发展、消失。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E5%8D%B3%E6%97%B6%E6%80%A7%E5%92%8C%E7%9D%80%E9%99%86.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E5%8D%B3%E6%97%B6%E6%80%A7%E5%92%8C%E7%9D%80%E9%99%86.png" alt="即时性和着陆"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><p>首先是“经历的即时性”，它指的是一种不关注脱离自身经验的事实的精神状态，简单来说，就是接纳事物的本来面目的态度，是个体在当下时刻对事件或情境的直接感知和体验。这种即时性强调的是对当前经历的全然投入和感受，而非对过去的回忆或对未来的期待。在<a href="https://sspai.com/post/83743">《谈谈存在的价值与人生体验》</a>一文中，我曾强调过“当下”的重要性，我们“唯一确信的存在是当下，唯一重要的是现在、是此时此刻的感受。人首先必须存在，才谈得上有关人生的一切”。换言之，如阿德勒所言：“人生是一连串的刹那，最重要的是此时此刻。”</p>
<p>其次是“着陆”，它是应用于心理治疗领域的一种方法，是将心灵拉回“现在”的各种技巧的总称。个体的真实存在在于对“此刻”的体验，而不是对过去的沉溺或对未来的焦虑。一个人能真正生活的只有当下，事实上，人不可能比当下活得更久——当下一直伴随着你。即便是在回顾既往生活的那一刻，即便是在生命的最后一刻，人仍然在体验着、在生活着。永恒的时态是当下，而非未来。生活在过去的阴影或未来的焦虑中，往往让我们忽视了当下的真实体验和存在的意义。这种观念帮助我们减少不必要的痛苦，避免伤口再被“第二支箭”射中，让自我“着陆”，找到内心的平和。</p>
<p>这也是接受与实现疗法（ACT）的核心理念：强调接受现实和承诺行动，通过帮助个体接受无法改变的事情，专注于当下，并根据个人价值观采取行动，从而实现心理灵活性。</p>
<p>《书写自愈力》一书中说：“疗愈，是指我们看到自己的伤痛，理解伤痛的由来，进而转化创伤情绪之后，我们在生活中就不会再像以前那样对特定的事件产生特别强烈的情绪，从而能够客观理智地思考和行动；疗愈，是指张开心灵的眼睛，看到内心被伤痛掩盖的、难以表达的需要，不在内心驱使自己，从而可以减少甚至消除内耗，更加从容自在地面对生活。”</p>
<p>但我们必须承认的是，并不是所有的书写都会通往疗愈，如电影《好东西》中铁梅写了自己单亲妈妈的经历却遭网暴。生活中有许多不确定性和痛苦是不可避免的，但我们可以选择如何回应这些挑战。接受现实并不意味着放弃，而是通过接受来找到内心的平和，并在此基础上采取积极的行动。</p>
<p>这是一场向内的旅程——专注此刻，当自我沉浸于记录当下的感受时，允许情绪的发生，让情绪自由流动。请允许自己去体验这些情绪，在经历整个过程之后，你会得到生命的礼物——“怀有迷惘的时候，心被景色所包围。悟道之后，景色被心所包围。”</p>
<h2>探索：MoFlow 心理疗愈的场景</h2>
<p>以上是 MoFlow 的设计理念，围绕着这套理论结构，我们探索并设计了一系列的产品功能。</p>
<h3>情绪追踪</h3>
<p>MoFlow 提供了基础的情绪追踪功能，允许我们在无需书写任何内容的情况下，通过简单的情绪打卡来记录当下的情绪状态。MoFlow 鼓励你将目光转向内在，每天留出时间倾听内心的声音，了解自己真实的想法：此刻的我快乐吗？我感到幸福吗？我真正追求的是什么？我在害怕什么？我在逃避什么？我需要做出哪些改变？我该如何活出真实的自我？只有当你愿意花时间静心聆听，才能听见内心最真实的声音。</p>
<p>在洞察模块中，MoFlow 将展示你的情绪日历，以及情绪与活动之间的关联关系。这一功能不仅帮助我们直观地了解情绪变化，还揭示了情绪与日常活动之间的潜在联系，为更深入的自我觉察提供了支持。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E6%83%85%E7%BB%AA%E8%BF%BD%E8%B8%AA.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E6%83%85%E7%BB%AA%E8%BF%BD%E8%B8%AA.png" alt="情绪追踪"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><h3>书写助手</h3>
<p>MoFlow 的书写助手与书写体验实现了无缝结合。当你在自由书写过程中遇到思维瓶颈时，可以唤起书写助手，以辅助我们进行思维扩展。通过这一引导，我们能够书写出更多内容，从而深入挖掘自身的核心情绪。这一过程不仅促进了自我表达，也为情感的深入探索提供了支持。</p>
<p>在思维层面，如果你在书写的当下对自己“为什么如此”感到好奇，那就可以采用自我追问式的方法，也叫作苏格拉底式提问。在心理咨询和心理治疗中，提问是基本的谈话治疗工具，并且提问也能体现心理咨询师的功底。MoFlow 提供了追问工具，你可以在书写中自己向自己提问。未来书写助手会得到更多的特性支持，以便更好地辅助我们进行自由书写。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E4%B9%A6%E5%86%99%E5%8A%A9%E6%89%8B.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E4%B9%A6%E5%86%99%E5%8A%A9%E6%89%8B.png" alt="书写助手"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><h3>书写报告</h3>
<p>在书写完成后，MoFlow 利用精调模型对你的书写进行个性化分析，生成结构化的书写报告。针对不同的核心情绪，模型提供相应的应对措施。这种分析不仅帮助你更好地理解自身情感，还为情绪管理提供了具体的指导路径。通过 MoFlow 的分析，我们不断擦拭心灵中起雾的那面镜子，擦掉虚假自己与真实自己之间的模糊，让自己越来越真实，这也是我们拉伸自身心理弹性和拓宽心理边界的过程。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E4%B9%A6%E5%86%99%E6%8A%A5%E5%91%8A.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E4%B9%A6%E5%86%99%E6%8A%A5%E5%91%8A.png" alt="书写报告"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><h3>想法提炼</h3>
<p>书写过程中，思想逐渐凝聚。所有的心理治疗都基于一个事实：在某种可控的情况下，大脑中的神经元会以可预测的方式移动并相互连接，然后形成新的联系。如果没有脑细胞的重构，学习将不可能发生。</p>
<p>在某些特定的书写内容中，MoFlow 会触发认知行为疗法（CBT）分析，试图挖掘我们想法背后的核心信念。通过依托想法分类模型，MoFlow 能够处理想法之间的依赖关系。这一过程不仅深化了对自我思维的理解，也为你提供了更为系统的思维整理和情感解析。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E6%83%B3%E6%B3%95%E6%8F%90%E7%82%BC.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E6%83%B3%E6%B3%95%E6%8F%90%E7%82%BC.png" alt="想法提炼"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><h3>行动建议</h3>
<p>在一些特定的书写内容中，MoFlow 会结合辩证行为疗法（DBT），为你提供针对性的行动建议。MoFlow 希望通过技能训练，调节我们的情绪、提升人际关系能力，并增强对生活的掌控感。MoFlow 强调内心平和与外在行动之间的关系。在追求生命的最佳状态时，我们不仅要关注内心的接受与理解，还需积极采取行动，实现我们的价值观和目标。正如铃木祐在其著作中可能探讨的那样，生命的最佳状态或许并非完美无缺，而是一种在接受现实的基础上，持续追求个人价值和意义的动态过程。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E8%A1%8C%E5%8A%A8%E5%BB%BA%E8%AE%AE.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E8%A1%8C%E5%8A%A8%E5%BB%BA%E8%AE%AE.png" alt="行动建议"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><h3>能量卡片</h3>
<p>MoFlow 的能量模块会根据具体事件，提供相应的正念卡片和思考卡片。通过正念练习和自我反思，我们不仅能够更好地理解和管理情绪，还能将其转化为创造力和行动力的源泉。这种能量转化的过程，与显化理论中所强调的&quot;吸引力法则&quot;不谋而合——当我们保持积极的心态和清晰的意图，就更容易吸引相应的能量和机遇。此外，这一模块能够帮助我们培养好奇心：保持对周围世界的好奇，尝试新事物，探索未知领域，这些都是显化理想生活的重要组成部分。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E8%83%BD%E9%87%8F%E5%8D%A1%E7%89%87.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E8%83%BD%E9%87%8F%E5%8D%A1%E7%89%87.png" alt="能量卡片"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><h3>共鸣时刻</h3>
<p>在某些书写内容中，MoFlow 会向你展示与其当前情绪和事件相关联的历史事件、名人名言以及书影音作品。这一做法旨在更好地实现自我分离，通过外部参照物的启发，获得新的视角和理解，从而深化对自我情感和经历的洞察。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E5%85%B1%E9%B8%A3%E6%97%B6%E5%88%BB.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E5%85%B1%E9%B8%A3%E6%97%B6%E5%88%BB.png" alt="共鸣时刻"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><h3>定期反思</h3>
<p>MoFlow 提供了一项类似心理咨询回访的功能——情绪周报。通过这一功能，你能够自我反思情绪和行为，识别出哪些方面可以更好地平衡自我意识与自发性。此外，对于某些极端情绪，我们可能无法在当下进行理性的情绪分析，因此会通过定期回顾为你提供更深入的洞察和建议。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E5%AE%9A%E6%9C%9F%E5%8F%8D%E6%80%9D.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E5%AE%9A%E6%9C%9F%E5%8F%8D%E6%80%9D.png" alt="定期反思"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><h3>安全隐私</h3>
<p>MoFlow 高度重视用户隐私，提供端对端的通信加密和数据存储加密功能。在注册账号时，会为你生成一个专属密钥，所有数据均通过该密钥进行加密处理，确保未经授权的第三方无法访问。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E5%AE%89%E5%85%A8%E9%9A%90%E7%A7%81.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E5%AE%89%E5%85%A8%E9%9A%90%E7%A7%81.png" alt="安全隐私"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><h3>陪伴疗愈</h3>
<p>MoFlow  鼓励你享受每一个小的进步和意外的发现，享受使用 MoFlow 的整个过程。希望你能够去感受情绪流动的过程，而不仅仅关注疗愈报告的结果。为此，MoFlow 计划在未来推出一系列情绪疏导和陪伴功能，敬请期待。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/moflow/%E9%99%AA%E4%BC%B4%E7%96%97%E6%84%88.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/moflow/%E9%99%AA%E4%BC%B4%E7%96%97%E6%84%88.png" alt="陪伴疗愈"loading="lazy" decoding="async" width="1200" height="800" /></picture></figure></div><hr />
<p>过去是我们牵绊的来处，未来是我们前进的动力。 未来，我们计划不断完善与扩展 MoFlow 的功能，目前释放出的版本仅是 MoFlow 自闭环中的冰山一角。</p>
<p>我们希望，MoFlow 能够让每个人都能得到属于自己的礼物——内在的安宁与平静。</p>
<p>我们期望，MoFlow 能够创造出一个更加理解、包容且富有同情心的社会环境。</p>
<p>“让情绪自由流动，书写疗愈力量。”——MoFlow。</p>
<hr />
<p>目前，MoFlow iOS 端已在 App Store 开放预约下载，欢迎前往 App Store 搜索「MoFlow」进行预约。</p>
<p>更多产品详情可见：</p>
<ul>
<li>MoFlow 官网：<a href="https://moflowapp.com">https://moflowapp.com</a></li>
<li>App Store 产品页：<a href="https://apps.apple.com/cn/app/id6737146258">https://apps.apple.com/cn/app/id6737146258</a></li>
</ul>
<div class="blockquote"><blockquote><p>本文作者 <a href="https://ursb.me">Airing</a>，MoFlow Founder，博客 <a href="https://ursb.me">ursb.me</a>。
本文配图 <a href="https://www.xiaohongshu.com/user/profile/65cc47e7000000000401c841">LZH</a>，MoFlow 设计师。</p>
</blockquote></div>
]]></content:encoded></item><item><title><![CDATA[Mac 小众软件推荐与工作流分享(2024)]]></title><guid>https://airing.typlog.io/posts/mac-app-share-2024/</guid><link>https://airing.typlog.io/posts/mac-app-share-2024/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Mon, 04 Nov 2024 07:54:43 +0000</pubDate><content:encoded><![CDATA[<p>这篇文章分享了我在工作这几年遇到过的好用的 Mac 软件，其中有不少我还在使用，它们在我工作道路上帮到了我很多，部分软件组合起来形成的工作流甚至让我的工作本身也变得愉悦起来。我希望能够把这些分享给大家。</p>
<h2>一、笔记篇</h2>
<p>首先出场的是笔记赛道的诸多产品们，实话说，其中的产品我都折腾过，最后选择了 Heptabase，除了偶尔作图或者写草稿的时候在用 Excalidraw。选择 Heptabase 只是因为它的设计最适合我自己的场景，并非其他产品不够好。</p>
<p>本节将笔记产品粗略分为常规笔记、双链笔记、数据库笔记、画板笔记，分类也并不是很严谨，只是它的主要功能在某个范畴内就这么划分了，比如 Obsidian Canvas 和 Logseq 都可以做白板，但这并非是它们的特色功能，因此没有分到画板笔记中。</p>
<h3>0x01 常规笔记</h3>
<h4>1.1 Drafts</h4>
<p><a href="https://getdrafts.com/">Drafts</a>，作为开篇的第一款软件，把尊重留给 Drafts。这是十几年的老牌产品，同时有移动端，搭配快捷键和桌面置顶功能，我常用作临时笔记或者桌面便签。非常良心，基础功能免费可用，也可以用商城里预制的 Action。付费则可以自己用 JS 写定制脚本做一些 Action，扩展性非常强，蛮酷的。缺点是仅支持纯文本输入，不支持图片插入。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240921225942@2x.png" alt=""loading="lazy" decoding="async" width="2422" height="1698" /></picture></figure></div><h4>1.2 Bear</h4>
<p><a href="https://bear.app/zh/">Bear</a>，中文名熊掌记，挺可爱的一款笔记软件，功能完善，将笔记导出成图片/PDF 的功能非常实用。缺点是不支持 CDN 图片解析，在写一些需要发布到网站的文章时则不太方面。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240921230357@2x.png" alt=""loading="lazy" decoding="async" width="2374" height="1696" /></picture></figure></div><h4>1.3 Typora</h4>
<p>[Typora]，程序员们钟爱的笔记软件，支持完整的 Markdown 和流程图语法，简洁易用，功能完备。缺点是存储库不支持标签管理，本质上只是一个 Markdown 编辑器。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240921230343@2x.png" alt=""loading="lazy" decoding="async" width="2320" height="1440" /></picture></figure></div><h4>1.4 iA Writer</h4>
<p><a href="https://ia.net/writer">iA Writer</a>，一款 wysiwyg 的写作编辑器，主打文字创作，写作时容易进入心流。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240921230744@2x.png" alt=""loading="lazy" decoding="async" width="2138" height="1318" /></picture></figure></div><h4>1.5 Apple Notes</h4>
<p>一款被低估的软件，配合 ProNotes 插件可以支持 Markdown 输入、模板定义、AI 输入与 Deeplink 拷贝，配合 Hookmark 可以做任意软件的双链，此外再配合 Raycast 的 Apple Notes 插件可以做全文检索和快速打开。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240921231315.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240921231315.png" alt=""loading="lazy" decoding="async" width="1370" height="890" /></picture></figure></div><h4>1.6 Obsidian</h4>
<p><a href="https://obsidian.md/">Obsidian</a>，笔记软件的集大成者，社区非常活跃，软件本身除了功能齐全、稳定之外，配合插件可以做到许多意想不到的事情。优点是支持全平台，文件完全本地存储。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240921231439@2x.png" alt=""loading="lazy" decoding="async" width="2286" height="1282" /></picture></figure></div><h4>1.7 NotePlan</h4>
<p><a href="https://noteplan.co/">NotePlan</a>，除了传统的笔记功能外，特点是支持非常完备的日程和任务管理。但因为 AI 合规问题，退出了中国区的 App Store。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240921231939.png" alt=""loading="lazy" decoding="async" width="2698" height="1892" /></picture></figure></div><h4>1.8 Agenda</h4>
<p><a href="https://agenda.com/">Agenda</a>，好几年前 App Store 的年度产品，特点也是支持完备的日程和任务管理。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240921232040@2x.png" alt=""loading="lazy" decoding="async" width="1612" height="1132" /></picture></figure></div><h4>1.9 Mem</h4>
<p><a href="https://get.mem.ai/">Mem</a>，海外比较火的 AI 笔记软件，支持快速裁剪、快速录入、AI Q&amp;A 功能。缺点是数据云存储，并且编辑器输入体验比较差。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240921232158.png" alt=""loading="lazy" decoding="async" width="1616" height="904" /></picture></figure></div><h4>1.10 Flomo</h4>
<p><a href="https://flomoapp.com/">Flomo</a>，身边很多产品朋友在用的软件，简单易用，理念是让记录回归到内容本身。开源社区还有像素级的复刻产品 memo，Obsidian 中也有相关的集成插件。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240921232411.png" alt=""loading="lazy" decoding="async" width="2196" height="1616" /></picture></figure></div><h4>1.11 Raycast Notes</h4>
<p>Raycast 内置的 Notes，想对标 Bear 和 Drafts，目前还在内测中，体验了下偏简易版的 Drafts。后续还需要利用 Raycast 的存量生态好好打磨。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/20240921232609@2x.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/20240921232609@2x.png" alt=""loading="lazy" decoding="async" width="1502" height="1348" /></picture></figure></div><h4>1.12 Lazy</h4>
<p><a href="https://lazy.so/">Lazy</a>，前两周刚发布的笔记软件，仍在内测中。体验之后发现它和 Mem 的趋于同质化，都是主打快速记录，只是 Lazy 做的更加极端，能从任意软件创建笔记（有点类似于 Hookmark + Drafts）。和现代主流软件一样，内置了较为齐全的 AI 功能。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/20240926103101@2x.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/20240926103101@2x.png" alt=""loading="lazy" decoding="async" width="1474" height="912" /></picture></figure></div><h3>0x02 双链笔记</h3>
<p>双链笔记是 2020 年开始出现的概念，由 Roam Research 提出，后来被许多产品借鉴、效仿、集成、改进。</p>
<h4>2.1 Roam Research</h4>
<p><a href="https://roamresearch.com/">Roam Research</a>，虽然被追随者效仿并超越，但是不得不提一下。在 2020 年 Roam Research 刚出来的时候就付费深度使用了，摸索了一套双链笔记的使用方法，可以见我写的这篇文章<a href="https://blog.ursb.me/posts/roam-research/">Roam Research 最佳实践——知识管理与任务管理</a>。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240921232835.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240921232835.png" alt=""loading="lazy" decoding="async" width="954" height="664" /></picture></figure></div><h4>2.2 Logseq</h4>
<p><a href="https://logseq.com/">Logseq</a>，可以非常简单粗暴的理解成 Roam Research 的免费本地客户端版，但后续出了白板功能、插件市场、PDF 标注等能力，总体来说是当下体验双链笔记最好的选择，没有之一。但这一年来被 Obsidian 蚕食过多，商业化是个问题，开源社区堆积了很多 Issue 没有处理。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240921233208.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240921233208.png" alt=""loading="lazy" decoding="async" width="1368" height="840" /></picture></figure></div><h4>2.3 Reflect</h4>
<p><a href="https://reflect.app/">Reflect</a>，也是一款双链笔记，但突出日程管理、任务安排以及 AI 编辑功能，海外用户画像偏商务人士。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240921233421@2x.png" alt=""loading="lazy" decoding="async" width="1910" height="960" /></picture></figure></div><h4>2.4 Tana</h4>
<p><a href="https://tana.inc/">Tana</a>，是我个人非常偏爱的一款产品，在双链的概念之上更进一步，万物皆 Node，每一个 Node 都可以定义多个 Supertag，而每个 Supertag 又是一个数据表定义，因此被套上 Supertag 的 Node 转瞬变成了 Notion 的 Database。并且 Supertag 本身存在继承关系，而 Supertag 内的 Field 也有属性和复用的能力。AI 功能和语音输入非常好用，提供的 API 也比较完备，其中 AI Workflow 的可玩性非常高，再结合 Perplexity 的 AI 可以在 Node 内自行实现 AI 搜索。</p>
<p>缺点是这个软件着实太复杂了，如果不花多点时间研究下是搞不懂的，对新手很不友好。适合喜欢掌控、整理、秩序的同学。内测了两年，目前在公测中，还是邀请制加入，每周五晚上它会更新个小版本。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240921233650@2x.png" alt=""loading="lazy" decoding="async" width="2038" height="1310" /></picture></figure></div><h3>0x03 数据库笔记</h3>
<h4>3.1 Notion</h4>
<p><a href="https://www.notion.so/">Notion</a>，在 2017 年的时候开始使用，给了我永久的 Plus 会员。国内还有很多类 Notion 的软件，这里就不展开说了。去年 Notion 出了 AI Q&amp;A 的功能，因此可以基于自己的内容直接生成了 RAG，非常强大和易用。但是我在 beta 版使用之后觉得 AI 的能力还是太弱，不知最近是否有所改善。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240921234249@2x.png" alt=""loading="lazy" decoding="async" width="2550" height="1598" /></picture></figure></div><h4>3.2 Anytype</h4>
<p><a href="https://anytype.io/">Anytype</a>，很早提出基于 Object(Type) 的 All in One 软件，但是研发进度着实太慢太慢，过了两年理念先被 Capacities 实现出来了，而且即便今天，Anytype 的完成度依然不高。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240921234722@2x.png" alt=""loading="lazy" decoding="async" width="2598" height="1406" /></picture></figure></div><h4>3.3 Capacities</h4>
<p><a href="https://capacities.io/">Capacities</a>，基于 Object 的笔记软件（或者叫收集软件？），你可以像面向对象编程那样，定义很多很多对象的原型，之后每有一个 item 产生，那么都需要归类到某个对象之下。Item 之间也支持双链，因此可以搭建一个资源网络。AI 功能也比较好用，API 的存在也衍生了不少玩法。月更大版本，每个月看他们的 Changlog 还是蛮期待的。缺点是他们的服务基本上每个月都会挂一次，服务挂了或者网络不好就完全不可用，迫使他们今年开始做离线存储的改造。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240921234537.png" alt=""loading="lazy" decoding="async" width="3024" height="1888" /></picture></figure></div><h3>0x04 画板笔记</h3>
<h4>4.1 Heptabase</h4>
<p><a href="https://heptabase.com/">Heptabase</a>，近三年来一直在用的笔记软件，特点是卡片笔记+画板，数据本地存储+云同步，我也把它作为 PDF 阅读器，因为 PDF 阅读期间的标注也会自动转成卡片（类似于 MarginNote）以便我后续统一处理。同时它也支持我在用的 Readwise，在网页上标注的片段也会自动同步成卡片。一般我会收集很多卡片，在写文章或者做分享需要输出的时候，使用画板功能整理、发散、创新。最近新出的 AI Insight 功能对我而言用处不大，一般来说笔记在记录的时候就已经梳理好内容了，不需要再 AI 帮忙做大纲了，除非是无脑复制的长文才可能有这个场景。期待后续 Heptabase 在 AI 上的探索。</p>
<p>PS. 如果需要试用的话，可以使用我的邀请链接 <a href="https://join.heptabase.com/?invite-acc-id=4cbb8101-41a9-4961-a447-a423f080f288">https://join.heptabase.com?invite-acc-id=4cbb8101-41a9-4961-a447-a423f080f288</a>，你转成付费用户之后我们各得 $5。</p>
<p>我在内测阶段开始使用这款软件，至今近 3 年 5000+ 卡片。喜欢这款软件不仅仅是因为它本身足够好用，而且这个台湾小哥的开发者(Alan)我非常佩服，在大学毕业就创业做这款产品，并且写了四篇文章介绍自己的愿景（<a href="https://medium.com/heptabase/my-vision-the-context-c73e29981685">My Vision: The Context</a>、<a href="https://medium.com/heptabase/my-vision-a-new-city-c7010f5871d">My Vision: A New City</a>、<a href="https://medium.com/heptabase/my-vision-a-forgotten-history-67ee77e969da">My Vision: A Forgotten History</a>、<a href="https://medium.com/heptabase/my-vision-project-meta-e0bedd1467b2">My Vision: The Knowledge Lifecycle</a>）。功能开发非常尊重用户，关键细节点会发投票，并咨询用户这么选的原因。中间有一年多的时间，我每天早上上班时打开 Heptabase，都会有版本更新，而且每个更新都是 Feature，可见作者对这款产品的热情。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240921235857.png" alt=""loading="lazy" decoding="async" width="3170" height="1959" /></picture></figure></div><h4>4.2 AFFiNE</h4>
<p><a href="https://affine.pro">AFFiNE</a>，雪碧(ewind)团队创业打造的产品，特点是文档直接转画板、以及多人协作，每个笔记也支持 Notion 那样内置 Database。创意非常好，但是目前产品的编辑体验个人觉得欠佳。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240921235612@2x.png" alt=""loading="lazy" decoding="async" width="1614" height="1126" /></picture></figure></div><h4>4.3 Excalidraw</h4>
<p><a href="https://excalidraw.com/">Excalidraw</a>，严格来说不是笔记软件，而是作图软件，非常适合程序员做各种架构图、流程图，我平时开发的时候也会单独开一个画板来当成草稿本。</p>
<p>分享一个小技巧，Obsidian 的 Excalidraw 插件比网页版好用很多，相当于有一个画本客户端。之前在做复杂项目的时候，一个多月都在同一个画本里打草稿，最后项目做完后，一个画布文件有上百 MB 的大小，但是一点儿也不卡。作者也一直在精心维护着它，偶尔还会有使用的小功能，比如两周前还出了个 PDF 标注能力，可以把画本改造成 MarginNote。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922001312.png" alt=""loading="lazy" decoding="async" width="1750" height="1034" /></picture></figure></div><h2>二、效率篇</h2>
<h3>0x01 时间管理</h3>
<h4>1.1 Apple Calendar、Google Calendar</h4>
<p>系统级应用，服务稳定，功能齐全，也是免费的。iOS 18 的 Apple Calendar 也支持集成提醒事项，非常易用。Google Calendar 的优势则在于丰富的三方集成。</p>
<h4>1.2 Fantastical</h4>
<p><a href="https://flexibits.com/fantastical">Fantastical</a>，可以整合多种日历源和任务源，设计精美。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922121249.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922121249.png" alt=""loading="lazy" decoding="async" width="1200" height="880" /></picture></figure></div><h3>0x02 时间追踪</h3>
<h4>2.1 Rize</h4>
<p><a href="https://rize.io/">Rize</a> 是一个时间追踪软件，曾经在我的<a href="https://blog.ursb.me/posts/weekly-23/">《月刊（第23期）：多任务中的时间管理》</a> 介绍过它。</p>
<p>除了时间追踪，它更是一个培养专注的工具，同一软件或是保持在同一工作上下文中保持一段时间，会进入 Focus 状态（类似心流），这个时间会统计 Focus 时间。而如果你突然切出上下文，如打开微信或者用浏览器浏览了这个上下文无关的网页，Rize 会认为此刻你分心了，从而弹出保持 Focus 提示并退出此轮 Focus 计时。</p>
<p>整个软件设计地异常简单，整个流程不需要去配置任何东西，结合 AI 进行全自动的监测，只有在娱乐或者是打断 Focus 的时候才会感知到它的存在。（PS: 这不是广告，但如果想体验可以用 <a href="https://rize.io/?code=291287&amp;utm_source=refer&amp;name=Airing">https://rize.io?code=291287</a> 链接来注册…）</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922121633.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922121633.png" alt=""loading="lazy" decoding="async" width="1280" height="800" /></picture></figure></div><h3>0x03 任务</h3>
<p>任务软件有非常多，相信读者们也有自己用的顺手的任务管理软件。只要用的顺手，最基础的系统的提醒事项就足够用了。本节只列举 3 个具有代表性的产品。</p>
<h4>3.1 Todoist</h4>
<p><a href="https://todoist.com/zh-CN">Todoist</a>，老牌的任务工具，免费 5 个项目的限制足够使用。我之所以一直使用它，是因为它的 API 丰富，同时支持丰富的筛选语法，可以做很多集成，配合工作流使用。</p>
<p>比如能和 Obsidian 集成，这样 Daily Note 就能直接展示今天的待办事项，或者在项目笔记里可以做项目任务的集成，服务稳定、扩展性非常强，技术支持也很友善、积极。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240922121912@2x.png" alt=""loading="lazy" decoding="async" width="2604" height="1368" /></picture></figure></div><h4>3.2 滴答清单</h4>
<p><a href="https://dida365.com/">滴答清单</a>，适合中国宝宝体质的任务软件（工作事项繁多、存在多线程并行场景），功能丰富，但是始终保持着易用。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922115729.png" alt=""loading="lazy" decoding="async" width="2400" height="1132" /></picture></figure></div><h4>3.3 Linear</h4>
<p><a href="https://linear.app/">Linear</a>，适合研发项目管理，集成能力多、可以同步跟进多个项目的工作量进展与进度预测。软件设计非常出众，设计圈内称之为 Linear 风格。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240922115941@2x.png" alt=""loading="lazy" decoding="async" width="2844" height="2032" /></picture></figure></div><h3>0x04 研发</h3>
<p>研发软件每个技术领域都有不同，这里列举一下</p>
<ul>
<li>Warp，开箱即用，颜值也不错，最重要的是完全不需要自己去折腾各种配置和插件，代替了之前自己使用了很久的 iTerms。也直接生成分享链接给他人展示自己的终端内容，发给他人定位问题的时候比较好用。</li>
<li>Cursor，最近大火的代码编辑器，AI 功能强大，比 GitHub Copilot 体验好很多。虽然 GitHub Copilot 对我的账号一直是免费使用，但我转 Cursor 付费了，后者甚至有和 AI 结对编程的感觉。</li>
<li>Apifox，API 文档、接口文档工具。</li>
<li><strong>oh-my-zsh</strong>，用的比较多的是 git alias、git 插件、zsh-autosuggestions 插件。</li>
<li><strong>tig</strong>，命令行 Git 增强工具，非常使用。</li>
<li><strong>Homebrew</strong>，Mac 必备的软件管理工具，也不算小众了。</li>
<li><strong>musicfox</strong>，命令行听歌工具，因此电脑上没有装音乐软件，通过 Vim 快捷键可以操作，还可以连接 Last.fm。</li>
<li><strong>Scrcpy</strong>，安卓开发时使用，一般使用真机配合 Scrcpy 投屏，方便电脑操作或录制。</li>
<li><strong>iPhone Mirrors</strong>，新系统支持的功能，算是姗姗来迟，着实非常好用，可以用来 iOS 开发直接操作真机，不需要再低头操作了。</li>
<li><strong>Git Kraken</strong>，一般较复杂的项目和场景下才会用，比如大仓里包括很多 submodule，或者需要溯源很长的 commit 的历史去查某个地方的变动，否则直接用 tig。</li>
</ul>
<h3>0x05 AI</h3>
<h4>5.1 Perplexity</h4>
<p>AI 搜索软件这一年来因为门槛降低，涌现了不少产品，之前整理过一波：</p>
<ul>
<li><a href="https://www.askan.ai/">askan</a></li>
<li><a href="https://arc.net/">arc</a></li>
<li><a href="https://www.bing.com/">Bing</a></li>
<li><a href="https://www.everypixel.com/">everypixel</a></li>
<li><a href="https://www.genspark.ai/">genspark</a></li>
<li><a href="https://gptgo.ai/">gptgo</a></li>
<li><a href="https://explorer.globe.engineer/">Globe</a></li>
<li><a href="https://komo.ai/">komo</a></li>
<li><a href="https://www.perplexity.ai/">perplexity</a></li>
<li><a href="https://www.phind.com/search?home=true">phind</a></li>
<li><a href="https://www.rosebud.ai/">rosebud</a></li>
<li><a href="https://searcholic.com/#gsc.tab=0">searcholic</a></li>
<li><a href="https://www.songtell.com/">songtell</a></li>
<li><a href="https://scite.ai/">scite</a></li>
<li><a href="https://you.com/">you</a></li>
<li><a href="https://metaso.cn/">秘塔AI</a></li>
<li><a href="https://github.com/ItzCrazyKns/Perplexica">Perplexica</a></li>
<li><a href="https://devv.ai/zh">devv</a></li>
<li><a href="http://so.360.com/"><ruby><rb>360搜索</rb><rt>脑图</rt></ruby></a></li>
<li><a href="https://chatglm.cn/">ChatGLM</a></li>
<li><a href="https://www.tiangong.cn/">天工开物</a></li>
<li><a href="https://trackaianswers.com/PEOPLE?from_site=hibe">trackaianswers</a></li>
<li><a href="https://maester.app/">maester</a></li>
<li><a href="https://www.morphic.sh/">morphic</a></li>
<li><a href="https://jeeves.ai/">jeeves</a></li>
<li><a href="https://bookabout.io/">bookabout</a></li>
<li><a href="https://www.dorkgpt.com/">dorkgpt</a></li>
<li><a href="https://hellomiku.com/index">miku</a></li>
<li><a href="https://search.lepton.run/">lepton</a></li>
<li><a href="https://www.aisearch.vip/#">aisearch</a></li>
<li><a href="https://flowith.io/sub">flowith</a></li>
<li><a href="https://thinkany.ai/zh">thinkany</a></li>
</ul>
<p>这里重点推一下 <a href="https://www.perplexity.ai">Perplexity</a>，基本上它在我这里已经取代了 Google，它会结合搜索引擎的结果进行回答，同时也支持识别 PDF 文件和图像，回答质量对比同类产品来看是非常之高，最近出了 Mac 客户端版本非常方便。</p>
<p>PS: Perplexity 的免费版也足够使用（免费版只是不能用 GPT-4 而已），如过注册的话可以使用这个链接 → <a href="https://perplexity.ai/pro?referral_code=0ZSAD0VT">https://perplexity.ai/pro?referral_code=0ZSAD0VT</a> ，未来如果想要付费的话可以得到 $5 的抵扣。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922102256.png" alt=""loading="lazy" decoding="async" width="2174" height="1904" /></picture></figure></div><h4>5.2 Raycast AI</h4>
<p>AI Chat 客户端也非常多了，较上面的 AI 搜索而言更是不胜枚举。这里提一下 Raycast AI。</p>
<p>结合 Raycast 使用很方便，可以通过 Prompt 自定义 AI Command，以下是我常用的一些命令：比如提取 WeChat Bot 返回的 JSON 配置、JSON 压缩、输入 URL 总结网页内容、根据 JCE 协议转 ts 声明或者直接 Mock 出数据配合 Whilstle 构造请求的响应体。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922103635.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922103635.png" alt=""loading="lazy" decoding="async" width="1486" height="702" /></picture></figure></div><h4>5.3 Dify</h4>
<p><a href="https://dify.ai/zh">Dify</a>，我愿称之为成年人的大玩具！各种小模型基于组件节点自己搭起来，和小时候搭积木的感觉一样，再配合知识库、API 服务等能力，可玩性取决于你的创意。有开源版本，自己部署在服务端的话比较吃机器配置，可以本地部署或者直接使用 Cloud 版本。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240922104021@2x.png" alt=""loading="lazy" decoding="async" width="2908" height="2188" /></picture></figure></div><h3>0x06 工作流</h3>
<ul>
<li>IFTTT，自动化服务，支持 AI、Webhook，并且支持 JS 编程处理信息格式和过滤操作，可以做各种记录的聚合、整理和转发，可以作为常驻稳定的中转服务。</li>
<li>Zapier，类似 IFTTT 的自动化服务，价格较前者更贵，但更加易用，适合不想写过滤脚本的场景。</li>
<li><strong>n8n</strong>，类似于 IFTTT 的自动化平台，开源免费，自己部署即可。</li>
</ul>
<p>有了自动化之后，可以做很多有意思的事：</p>
<ul>
<li>GitHub Star 总结：GitHub 点了 Star 之后，自动请求发给 Perplexity  API 让 AI 去总结仓库内容，拿到结果之后再调用 API 同步到 Tana / Capacities 等笔记软件内收集。</li>
<li>RSS 监控舆情周报：订阅的 RSS 渠道如果触发到某个关键词，就请求 Perplexity  API 拿到文章总结，之后同步到笔记软件内收集，调用通知接口提醒，并发到 TG 的个人频道里。最后利用 Email 做 Weekly 收集，每周发送汇总邮件，汇总触发到这个关键词的文章和对应的简介。特别适合用来做舆情监控。</li>
<li>豆瓣书影音收集：类似于 GitHub Star，豆瓣评分了某个作品之后，收藏到笔记软件里。</li>
<li>微博动态订阅：类似于 GitHub Star 订阅。</li>
<li>听歌记录周报：实用 Musicfox 命令行软件听歌，之后配合 Last.fm 可以汇总听歌数据，每周发给你本周的听歌记录。</li>
<li>工作专注日报：Rize 每日的专注邮件讲给 IFTTT 监听，如果有 Rize 的邮件，就会使用 IFTTT AI 自动总结今日的时间报告发送给自己。
<img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922114741.png" alt="" /></li>
</ul>
<h3>0x07 阅读</h3>
<ul>
<li><strong>Readwise Reader</strong>，和 Readwise 的集成做的非常好，体验流畅，支持快捷键、RSS 订阅、NewsLetter 订阅、也可以高亮图片。</li>
<li><strong>Inoreader</strong>，RSS 订阅源管理，配合邮箱、IFTTT &amp; AI、Telegram 订阅、关键词监控做一些自动化提醒和总结。</li>
<li><strong>微信读书</strong>，AI 大纲和 AI 解读十分好用，阅读完之后配合 Readwise 保存书摘。</li>
<li><strong>Cubox</strong>，网页收藏箱，配合 IFTTT 使用，各订阅渠道最终都会收录到 Cubox 里。</li>
<li><strong>Instapaper</strong>，因为免费+集成化做的很好，配合 IFTTT、浏览器插件、Inoreader 做网页收藏的中转服务。</li>
<li><strong>Follow</strong>，基于 Web3 和 RSSRub 搭建的阅读器，前几周新出产品，目前还在内测中，需要邀请码可以找我要。</li>
<li><strong>Reeder</strong>，老牌 RSS 阅读器，前几天出了新的大版本转订阅制了，也是开始转型主打多信息媒介订阅。</li>
<li><strong>Me.bot</strong>，前段时间新出的一款网页收藏工具，基础功能类似于 My Mind，但是它基于角色卡做的 AI 助理还是蛮有意思的，性格鲜明。</li>
</ul>
<div class="gallery"><div class="gallery_column"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240926102553@2x.png" alt=""loading="lazy" decoding="async" width="2658" height="1788" /></picture></figure></div><div class="gallery_column"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240926102631@2x.png" alt=""loading="lazy" decoding="async" width="1880" height="876" /></picture></figure></div><div class="gallery_column"><figure><picture><img src="https://airing.ursb.me/images/blog/20240925/20240926102742@2x.png" alt=""loading="lazy" decoding="async" width="2634" height="1762" /></picture></figure></div></div>
<h3>0x08 系统</h3>
<h4>8.1 截图</h4>
<h5>CleanShot X</h5>
<p><a href="https://cleanshot.com/">CleanShot X</a> ，一款老牌 &amp; 功能强大的 MacOS 平台的截图软件，以上两款软件的功能它都有，除此之外，还有录制视频、录制 GIF、上传图片到云端、顺序标注等独有的能力，界面也很美观，和 Raycast 的联动做的也很好，还有独创的「all in one」模式。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/20240922001821@2x.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/20240922001821@2x.png" alt=""loading="lazy" decoding="async" width="1382" height="620" /></picture></figure></div><h5>Snipaste</h5>
<p><a href="http://zh.snipaste.com/">Snipaste</a> ，Windows 和 MacOS 平台皆有，最喜欢的是可以把截图贴在桌面上的能力，如同便签一样，方便我贴重构稿、关键信息、对比代码、二维码等信息到桌面上。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/20240922001946@2x.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/20240922001946@2x.png" alt=""loading="lazy" decoding="async" width="1386" height="1050" /></picture></figure></div><h5>Shottr</h5>
<p><a href="https://shottr.cc/#/">Shottr</a> 是最近新出的又一款 MacOS 平台的截图 App，功能强大、界面美观、而且免费，较于 Snipaste 多了滚动截图、窗口截图、OCR 等能力。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/20240922001938@2x.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/20240922001938@2x.png" alt=""loading="lazy" decoding="async" width="1386" height="1094" /></picture></figure></div><h4>8.2 翻译</h4>
<ul>
<li><strong>Bob</strong>，翻译软件，有不错的快捷键支持，用的较少，大多数情况下会用 Raycast + AI Command 翻译。</li>
<li><strong>沉浸式翻译</strong>，比较好用的网页翻译，可以指定翻译接口。</li>
<li><strong>Monica</strong>，是一个 AI 工具软件，类似于工具箱集合，内置的翻译则是像素级借鉴沉浸式翻译的功能，此外它还内置了网页总结、PDF 总结、视频总结、博客总结、搜索总结等等 AI 小工具。</li>
</ul>
<h4>8.3 其他</h4>
<ul>
<li><p><a href="https://arc.net/">Arc</a>，强大、易用的浏览器。(但是前几天官宣停止更新新功能了)
<img src="https://airing.ursb.me/images/blog/20240925/20240922114859@2x.png" alt="" /></p>
</li>
<li><p><strong>Stats</strong>，状态栏展示设备 CPU、内存、网络、磁盘、电源灯信息。</p>
</li>
<li><p><strong>Bartender 5</strong>，也属于 Mac 必装软件了，可以控制状态栏展示。</p>
</li>
<li><p><strong>RunCat</strong>，用小猫猫的状态来表示 CPU 的状态，挺可爱的。</p>
</li>
<li><p><strong>Vimac</strong>，使用 Vim 快捷键控制 Mac。</p>
</li>
<li><p><strong>NinjaMouse</strong>，配合 Vimac 使用，切软件的时候会自动把鼠标指针挪到激活窗口的正中间。</p>
</li>
<li><p><strong>Input Source Pro</strong>，切换软件时自动切换输入法，做研发时很常用，如切到 IDE 或终端时自动切英文输入法，而切到文档或者企业微信时则自动切中文输入法。</p>
</li>
<li><p><strong>微信输入法</strong>，非常好用的输入法。</p>
</li>
<li><p><strong>AltTab</strong>，软件切换工具。</p>
</li>
<li><p><strong>Hookmark</strong>，配合 Drafts 使用，方便做任意书签的笔记。</p>
</li>
<li><p><strong>Geekbench 6</strong>，本机性能测试软件。</p>
</li>
<li><p><strong>AlDente</strong>，电源充放电管理软件，可以更精准的、个性化的控制电源策略。</p>
</li>
<li><p><strong>Tencent Lemon</strong>，硬盘清理软件，小巧实用。</p>
</li>
<li><p>Paste，比较知名的剪切板软件，特点是支持移动端、优秀的检索能力，缺点是价格较贵、竞品也较多。</p>
</li>
<li><p><a href="https://www.raycast.com/">Raycast</a>，入了 Raycast Pro + GPT 4 扩展包，最常用的功能是 HotKey 快捷打开软件 、AI Chat 与 Clipboard History。下面是一些常用的插件：</p>
<ul>
<li><strong>AI Chat &amp; Quick AI</strong>，电脑上一键呼出 AI，这就显得微软的 Copilot 独立按键很蠢了。</li>
<li><strong>AI Command</strong>，根据自定义的预制 Prompt 执行复制的文本，一般我会让它提取 CI 结果中关键的信息，然后生成我需要的配置；或者让它格式化压缩 JSON；分析堆栈信息；英汉互译等等。</li>
<li><strong>Clipboard History</strong>，之前入过 Rewind，发现完全没有必要，直接 Clipboard History 效率更高</li>
<li><strong>My IP</strong>，研发原因经常要看内网 IP，快捷键直接查看+复制。</li>
<li><strong>Google Search</strong>，因为 Arc 默认搜索设置成了 Perplexity，当明确想用 Google 搜索的时候会按下这个快捷键。</li>
<li><strong>QR Code Generator</strong>，工作原因有时需要 URL 转二维码，这个就很实用，不需要打开浏览器利用插件或三方工具转。</li>
<li><strong>Todoist</strong>，配合 Todoist 使用，可以在状态栏或弹窗显示今日任务。</li>
<li><strong>Format JSON</strong>，有了 AI Command 之后这个插件很少用了。</li>
<li><strong>Linear</strong>，配合 Linear 使用。</li>
<li><strong>Scrcpy</strong>，配合 Scrcpy 使用。</li>
</ul>
</li>
</ul>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922115130.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20240925/Pasted%20image%2020240922115130.png" alt=""loading="lazy" decoding="async" width="1374" height="870" /></picture></figure></div>]]></content:encoded></item><item><title><![CDATA[月刊（第27期）：旅居]]></title><guid>https://airing.typlog.io/posts/weekly-27/</guid><link>https://airing.typlog.io/posts/weekly-27/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Wed, 30 Oct 2024 05:00:51 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二四年九月至十月的生活记录与思考。</p>
<h2>🌿 旅居与创业</h2>
<p>9 月 27 日办理资产退库之后，我告别了深圳，告别了自求学起生活了十年了广东，正式开启了我的新生活。</p>
<p>离开前的一晚，和 Kami 在万象天地的小酒馆交谈甚欢，他感慨道，认识我这么多年，第一次见我如此健谈。或许在公司时，我给人的印象总是“内敛且不善言辞”，但那只是因为我选择将精力主要关注在事业之上。</p>
<p>在这之前的一周，我与同事们一一告别。令人意外的是，大家不约而同地最怀念的竟都是那段从零到一研发 Flutter 混合框架的岁月。那些共同奋斗、彼此成长的日子，早已深深镌刻在心中，感恩于这段珍贵的时光。</p>
<p>这段时间告别老朋友的同时，得益于上一篇全网加起来 <a href="https://blog.ursb.me/posts/2024-summer/">10 万+阅读量的文章</a>，也因此遇到了一些新朋友。有付费听我说故事的，有几封来邮件交友的，甚至还有一些曾一起共事的同频人，竟在离别之际才算真正认识上。</p>
<p>人生在世，理应结识形形色色的人，去聆听他们的人生故事。毕竟我们的人生仅此一次，但若能与他人的生命碰撞，迸发出璀璨的火花，那将是何等的幸运。</p>
<p>告别深圳之后，我驱车自驾来到了大理。租了一个小院子，每天埋头研发。说是旅居，其实更像是换了一个安静、凉爽的地方做自己的事情。但这一切，其实早已不是自己一个人的事情了。</p>
<p>原本是自己的事情，这个想法萌生于几年前，之后做了大量的市场调研、产品调研和用户调研，前几个月，设计合伙人正好处于 Gap 期，于是我们约着又讨论了想法，进行了补充和完善，最终将产品定义在 AI + 心理的赛道上。</p>
<p>目前为这个项目组建了一个六人团队，四全职两兼职，大伙对于项目充满激情，一起凝聚想法、一讨论、一起设计、一起实现，每天充实且开心着，让我想到了在前司做 Flutter 的那段日子。</p>
<p>回到项目本身，现在项目进展良好，预计 11 月底可以开启 TF 外团测试。根据目前的设计和内团体验来看，大家都迫不及待地想让这款产品上线，团队内的小伙伴都认为它着实可以帮到自己。</p>
<p>但我们也时刻保持着冷静，不断体验与打磨产品细节，如果 11 月底没有如期进入 Beta 版测试，那肯定是大家对自己的产品细节还不够满意。我们希望能够给用户们呈现一个好用的、完整的产品，希望它也能够给大家带来帮助。敬请期待。</p>
<h2>🌺 生活点滴</h2>
<p>以下是本周期内一些瞬间的记录。</p>
<p>🎁 <strong>礼物：</strong></p>
<p>非常感谢朋友们送的礼物（或者米饭），完全的 surprise！</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj27/FotoJet.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj27/FotoJet.jpg" alt="FotoJet.jpg"loading="lazy" decoding="async" width="1200" height="1200" /></picture></figure></div><p>那段告别的日子相较于伤感，更多的其实是愉悦，感恩这一切。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj27/4571730261295_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj27/4571730261295_.pic.jpg" alt="4571730261295_.pic.jpg"loading="lazy" decoding="async" width="1179" height="2556" /></picture></figure></div><p><strong>🚗 国庆自驾：</strong></p>
<p>没想到小 Mini 这么能装，我们带上了两只猫、两个 24 寸的显示器、全装了衣服的 20 寸大行李箱、一个鹅绒被、两个枕头、两套床单，还有几个背包。</p>
<p>装完满满一车之后，驱车三天行程 1800 公里，来到了大理。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj27/4641730261540_.pic.jpg" alt="4641730261540_.pic.jpg"loading="lazy" decoding="async" width="1707" height="1280" /></picture></figure></div><p><strong>🏡 旅居与小院子：</strong></p>
<p>到了大理之后便在苍山下租了一个带二楼露台的小院子，早晨，阳光洒进院子，显得格外温馨；下午，在露台上饮茶办公，也是绝美。我最喜欢的是，这片区域非常安静，非常适合沉浸式办公。</p>
<p><strong>🌊 洱海：</strong></p>
<p>来到大理的这一个月来，每天 12 个小时工作时长，就只有一个周日出门了，那天环洱海自驾了一圈。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj27/WechatIMG467.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj27/WechatIMG467.jpg" alt="WechatIMG467.jpg"loading="lazy" decoding="async" width="1280" height="1517" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj27/WechatIMG465.jpg" alt="WechatIMG465.jpg"loading="lazy" decoding="async" width="2565" height="1280" /></picture></figure></div><p><strong>💰保险：</strong></p>
<p>自驾途中，后窗玻璃意外破碎，于是我报了人生中的第一次保险。开始以为是换个玻璃就好，结果原厂的配件号没有后窗玻璃，4S 店说只能整个敞篷一起换。原本还是有些难过的，心里用“碎碎平安”来安慰自己，但出险一次，整个敞篷得以更换，倒也不算坏事。</p>
<p><strong>🐱 丢了两条命的泡芙：</strong></p>
<p>来了大理之后所遇种种并不算顺利。某天下午泡芙和手套从小院子的栏杆缺口越狱了，发现猫没了之后立马出门找，毕竟之前一直是家养，出门之后也不知道会遇到些什么。结果一出门就看到了手套，它着实太笨了，一出门就掉进了家门口的水渠里，跳不去来，只能喵喵叫（可惜没先拍张照片做个丑照纪念）。但是泡芙找了一圈也没有找到，最后不得已挂了寻猫启示，邻居看到了就送回来了，说泡芙一整天都在他家的阳台上躺着晒太阳，还以为是野猫。</p>
<p>泡芙回来之后的第二天，就开始不断吐口水，甚至开始在地上疯狂抽搐，抽到最狠的时候会强直身体，我也不敢碰它，担心它挺不过这一波。等缓下来之后，立马送去医院，初诊是中毒。但是吊了 5 天广谱解毒药配合护肝药也没有任何好转，甚至有加重倾向，每天抽搐的次数更加频繁，精神也愈加萎靡。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj27/4591730261327_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj27/4591730261327_.pic.jpg" alt="4591730261327_.pic.jpg"loading="lazy" decoding="async" width="1280" height="1707" /></picture></figure></div><p>于是我们停止用解毒药，医院怀疑是神经问题，于是开始吃抗癫痫药，立马有好转，不再吐口水和抽搐了。但吃了一天之后，另一个问题表现出来——四肢软弱无力，导致它有两天无法正常行走。再送去医院，配合抽搐症状基本可以确定是神经问题，但医生说无法根治，国内也没有几家机构可以做检查，只能长期用药。于是开始吃维生素 B1 和 B12，未曾想吃了两天之后完全好转了。每天到处上蹿下跳跟个没事人一样，依旧调皮、依旧活泼。要说变化，是变得更加粘人了，同时也能听懂我们的一些指令，哪怕它玩的再欢，喊一声就会屁颠屁颠跑到你身旁。</p>
<p>都说猫有九条命，可能它又用掉了一条吧。上一次还是 4 年前，自己咬开阳台的封网走去阳台边缘，从 12 楼直接掉到了二楼商铺的楼顶上，第二天下午才找到。送去医院，检查之后发现只是受到了惊吓，同时咬破了自己的舌头，除此之外没有任何骨折和内脏受损，医生也说是个奇迹。</p>
<p>希望两只猫猫今后都能健康生活下去。</p>
<p><strong>📊 最后的技术分享：</strong></p>
<p>离开公司的最后一天做了一个技术课程，准备了足足两周有余，从加载到上屏整个流程如果要说清楚是一件比较困难的事情。我准备了一个 Demo 游戏，配合运行时断点数据与数学计算，讲解了渲染上屏的 10 个环节。把这个过程梳理清楚的过程非常有意思，也通过这个过程让我感受到了图形学趣味。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj27/202410301213062x.png" alt="20241030121306@2x.png"loading="lazy" decoding="async" width="1706" height="2390" /></picture></figure></div><p>因为时长问题，改过了 3 版的 PPT 大纲最终如下（反正放大也看不清楚就不打码了），原本会更系统一些，准备了 200 页+。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj27/202410301218082x.png" alt="20241030121808@2x.png"loading="lazy" decoding="async" width="2398" height="2314" /></picture></figure></div><h2>✨ 创业分享</h2>
<h3>即时通讯：Slack</h3>
<p>之前我们团队用的飞书，作为一款 All in One 的办公软件用起来确实很方便，至少会比企业微信高效很多。我们也在飞书里建立了若干个话题群，大家会在话题群里滚动发一些资讯的帖子，以保持对新鲜事物的敏感度。</p>
<p>使用飞书两个月后，我们发现了一些不太满意的地方：</p>
<ul>
<li><strong>消息已读功能带来了阅读焦虑</strong>：飞书有消息已读，发完消息之后或多或少会有阅读焦虑，一方面会关注别人读了自己的消息没有，另一方面也会考虑着有新消息的时候需要尽快阅读。</li>
<li><strong>文档体验不流畅</strong>：飞书文档虽然强大，但用起来的整体体验并不能称得上是流畅，文档切换与检索会很容让人觉得知识库的设计过于繁重。虽然文档中的待办事项可以直接关联到飞书任务，但飞书任务也是一言难尽的难用。此外飞书免费版限制了 60 分钟会议，对于我们的周会讨论而言也是不够的。</li>
<li><strong>默认的三方集成有限</strong>：常用软件如 GitHub、Linear 等集成较少，需要我们自行开发 Bot 进行集成。</li>
</ul>
<p>之后在 Slack 和 Discord 之间，我们选择了 Slack，有几点优势：</p>
<ul>
<li><strong>公开的频道设计</strong>：频道的设计避免了聊天群的小圈子感，所有频道都是公开的，默认只邀请相关同学。对话题感兴趣的同学可以自行加入。我们还建立了许多消息频道，类似于之前飞书的话题群，每天滚动更新资讯，保持对产品的敏感度。</li>
<li><strong>高效沟通</strong>：Slack 会将连续的消息整理成独特的样式，期望用户像发送电子邮件一样，一条消息将事情说全。高效沟通需要在整理好背景、问题、原因和方案后，一次性发送消息，不必担心对方是否及时收到，可以当作留言。避免询问对方“在吗”，然后再慢慢发送消息，这既不是高效沟通，也不是即时沟通。</li>
</ul>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj27/slack-message.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj27/slack-message.png" alt="slack-message.png"loading="lazy" decoding="async" width="1404" height="852" /></picture></figure></div><ul>
<li><strong>免打扰设计</strong>：Slack 的通知设计较弱，除非是私信或 @ 的消息，只有在活动/未读消息 Tab 才能看到。如果想在群里 @所有人，会弹出确认提示，因为这是一个很打扰的操作。同时，Raycast 有插件，可以方便地设置当前的 Slack 状态，配合定时消息和稍后阅读功能，确保不错过重要消息，同时也不打扰他人。</li>
</ul>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj27/slack-notify.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj27/slack-notify.png" alt="slack-notify.png"loading="lazy" decoding="async" width="1024" height="886" /></picture></figure></div><ul>
<li><p><strong>轻量化语音会议</strong>：我们很喜欢 Slack 的抱团功能，很多国内办公软件称之为“会议”，需要预约，邀请时会有电话铃声响起，这种设计很严肃。但抱团不同，需要语音/投屏沟通时，直接发起抱团，对方按需加入。抱团类似于游戏中的“连麦”，是一种轻量、即时的设计，使每次沟通不再那么严肃。</p>
</li>
<li><p><strong>丰富的集成应用</strong>：众所周知，Slack 的集成非常丰富，我们集成了 GitHub、Notion、Linear、Loom、Xcode Cloud 等常用软件，结合自动化，几乎可以算作另一种意义上的 All in One。</p>
</li>
</ul>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj27/slack-linear.png" alt="slack-linear.png"loading="lazy" decoding="async" width="2148" height="2268" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj27/slack-app.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj27/slack-app.png" alt="slack-app.png"loading="lazy" decoding="async" width="1290" height="1058" /></picture></figure></div><h3>会议：Loom &amp; Slack 抱团</h3>
<p>前文提到了集体会议的时长会比较长，后来我们尝试做了一些优化。</p>
<p>首先，每周我会先用 Loom 录制一个异步会议，总结大家上周的工作和下周的工作安排，并整理下周工作安排的几个重点方案，团队成员有时间的时候浏览下视频和配套的文档即可。</p>
<p>之后，在方案进入设计研发阶段时，再在方案频道里使用「抱团」进行方案讨论。</p>
<p>这样就不需要约大家都有空的时间进行全体会议，约一个大家都有空的共同时间这件事本身就比较耽误项目的节奏。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj27/loom.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj27/loom.png" alt="loom.png"loading="lazy" decoding="async" width="1349" height="1384" /></picture></figure></div><h3>任务管理：Linear</h3>
<p>团队使用 Linear 作为任务管理工具，它和 Slack 集成非常好，填好工作量之后，洞察功能可以对整个项目的研发进度给出预估完成的最早和最晚时间，这点对于 PM 把握项目节奏而言非常好。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj27/linear-progress.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj27/linear-progress.png" alt="linear-progress.png"loading="lazy" decoding="async" width="770" height="506" /></picture></figure></div><p>此外，我们将项目每隔两周划成一个 Cycle，每个 Cycle 有 1-2 个主题，帮助我们专注于当下最核心的任务模块。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj27/linear-cycle.png" alt="linear-cycle.png"loading="lazy" decoding="async" width="2624" height="1240" /></picture></figure></div><p>最后，Linear 里程碑、任务约束等基础功能也打磨的非常好。</p>
<h2>🎬 书影音</h2>
<p>以下是本周期的书影音记录。</p>
<ul>
<li>读完：哲学 |《后现代的刺》| ★★★★★</li>
<li>读完：小说 |《七个证人》| ★☆☆☆☆</li>
<li>看完：电影 |《因果报应》| ★★★★☆</li>
<li>看完：电影 |《异形：夺命舰》| ★★★★☆</li>
<li>看完：电影 |《误杀瞒天记 2》| ★★★★☆</li>
<li>看完：电影 |《默杀》| ★★★☆☆</li>
<li>玩过：游戏 |《Thronefall》| ★★★★★</li>
<li>在玩：游戏 |《塞尔达传说：智慧的再现》| ★★★★★</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[再见了，盛夏]]></title><guid>https://airing.typlog.io/posts/2024-summer/</guid><link>https://airing.typlog.io/posts/2024-summer/</link><description><![CDATA[论鹅笼、幸福与勇气]]></description><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sat, 31 Aug 2024 13:19:03 +0000</pubDate><content:encoded><![CDATA[<h2>一、近况、过往与未来</h2>
<h3>1.1 近况</h3>
<div class="blockquote"><blockquote><p>譬如朝露。——《短歌行》</p>
</blockquote></div>
<p>我提离职了，Last Day 定在了国庆节，裸辞。</p>
<p>当我突然向领导提出离职时，他表示很不解——大好前程、稳定高收入、大堆未解禁的股票、手上还有可以答 T12 的核心项目，不知道为什么我要离开。后来总监和 GM 找过我聊，我只是说我想体验更多的可能性，我在这里已经停留了太久了。按计划，我原本早该走了。</p>
<p>29 岁、小学老师、哲学硕士、毕业 4 年鹅厂 T11，很多标签环绕着我，偶尔拿到的奖项、优质的项目和熟练的业务，让我逐渐陷入到一个舒适圈里。我害怕一眼看到头的未来，我想跳出目前的境地，这条既定的大道，我不愿走完。</p>
<p>月刊断更的这个夏天，父亲确诊脑瘤住院了，术后又反复感染肺炎，愈后很差，经历转院 3 次、ICU 反复进了 4 次。每每去医院看望，都在数着我剩下可能能看望的次数。当我在病床前看向父亲时，才惊觉到父亲已如此衰老，在我的记忆里他一直如伟岸的山，过往回忆像走马灯在目光中闪烁。转瞬之间，29 年过去了，而我却不知我此生的时光还剩下多少。</p>
<p>所幸，父亲已得到治愈，目前处于康复阶段。我也决定离职，抛弃一切光环，走向不可知的未来。</p>
<h3>1.2 过往</h3>
<div class="blockquote"><blockquote><p>飘如陌上尘。——《杂诗》</p>
</blockquote></div>
<p>回首毕业后在 TME 的时光，我得到了很多成长。第 1 年做在 Q 音做绿钻活动、第 2 年在直播做 Flutter 框架、第 3 年做 3D 元宇宙、第 4 年在 K 歌做游戏渲染引擎，接触到的业务每年都在变化，而每一年我也都在尽自己的最大努力在这些业务中得到成长——2 年 T9，2 年半 T10，4 年半 T11。但说实话，期间在第 3 年看不到成长机会的时候就想离开了，因此在去年提了一次离职，但总监给了渲染引擎这个核心项目让我负责，我也抓住了这个机会晋升到了 T11。但是我的喜悦之情也只有得到晋升消息的那个晚上而已——得到了，然后呢？继续成长，剑指 T12 吗？</p>
<p>突然间察觉，我似乎将我所经历的这一切，当成了一场有倒计时的生死游戏，而那个倒计时的终点，是 35 岁。因此我需要在那之前的每一年，努力打怪升级得到成长，以便在尽可能早的时间内晋升到高职级转管理。到目前为止，我在这局游戏中完成地很出色，甚至在可见的游戏结局里，我也有非常之高的概率达到所谓“游戏胜利”。</p>
<p>但我选择中途退出，因为发现在这局游戏中我后续要做的事情并没有什么意思，我将得到的并不值得我为之付出的生命能量。既然如此，那么再继续玩下去只是浪费时间，我应该主动寻求改变。</p>
<p>前两天有一篇<a href="https://tinystruggles.com/posts/google_postmortem/">博客</a>，一个优秀的 Google SRE 工程师工作了 9 年之后决定离职，她认为自己虽然得到了对等的报酬，但是仍有一些遗憾。她早就察觉到自己并不适合这份工作，但是只是被动的等待改变，没有更早地转变角色去探寻新的可能性。</p>
<p>失去可能性只是一方面，更关键的是自身会陷入到了一种舒适的循环之中，大多数人会习惯在舒适圈中增长自我，但舒适圈本身会消磨殆尽个体的主动性和可能性。</p>
<p>此外，类似于追求多巴胺不断强化愉悦回路的行为，人生不能陷入“增长成瘾”的境地，不能将所有的成就、人生的快乐都依赖于自我的永远上升。那么无限膨胀的欲望会吞噬自己，直到某天自己的能力再也无法满足欲望，那么价值感则会瞬间崩塌，化为无尽的虚无与痛苦。</p>
<p>每年写完年终总结之后，我都会给自己画一个五年计划，规划未来五年内我所有可能的目标和人生路径。如果想要成功的人生，那就必须每隔一段时间，就把人生推进到下一个阶段，完成前一个目标之后，再朝着全新的目标努力。现在，是更新路径的时候了，比我预期的来得更早，在这个盛夏中来了。</p>
<p>本节的最后，像 <a href="https://tinystruggles.com/posts/google_postmortem/">Postmortem of my 9 year journey at Google</a> 这篇文章一样，给这段职业生涯来一个分析报告：</p>
<h4>介绍</h4>
<p>23 岁的研一暑假，我在校招实习时加入腾讯音乐，那个时候 TME 还属于腾讯的 SNG。</p>
<p>虽然在那之前我已经是一个在 GitHub 活跃了 5 年有余的独立开发者，但是我从未参与过企业级的项目。通知这次实习，我掌握了项目的完整流程，也学习到了对线上的敬畏、对用户个体的关注。</p>
<h4>加入时的期望</h4>
<p>在实习之后，我在对鹅厂的这段经历充满热情，加上团队氛围很好，毅然选择留下来，也没有去看其他的机会。</p>
<p>我想在这里收获尽可能多的技术和成长，想与尽可能多的鹅们建立链接——想体验积极向上的团队氛围，想收获一段独特的人生经历。那时，我对自己的职业规划很简单，三年内到 T9 就可以了。</p>
<p>那个时候给自己保存了这句歌词，感谢过去的自己：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2018/IMG_0317.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2018/IMG_0317.jpg" alt=""loading="lazy" decoding="async" width="1080" height="1080" /></picture></figure></div><h4>职业经历</h4>
<p>实际的经历则曲折很多，我加入互联网行业时恰好是动荡期，立马经历了几年疫情，之后又是裁员浪潮。我的业务和团队在五年间不断变化，我也积极在其中寻求成长的可能性。</p>
<p>这段期间，我收获了：</p>
<ul>
<li>充足的报酬，以及成为鹅厂员工的满足感</li>
<li>软件工程技能，现在基本上任何一个需求抛过来能立马抛出它的实现方案</li>
<li>问题处理能力，在问题定位上形成了自己的一套方法论，得到同事之间的认可</li>
<li>高效、有序的规划能力，繁杂的工作培养出来的业务能力，最多同时手上并行七个需求仍然井井有条</li>
<li>坚定的工作态度，培养了在工作时保持专注的能力，在工作中几乎能付出百分百的精力和责任感</li>
<li>钻研的精神，对各端技术都有较为深度的理解，始终保持热爱和好奇</li>
<li>沟通与协调能力，越到后期越注重这个软能力项，在过程中负责过紧迫的大项目，同时协调将近 10 个团队配合项目工作</li>
<li>数据分析能力，生涯中培养了对业务的敏感度，对基本数据有直观上的归因能力，在更深的挖掘能力上也得到了培养</li>
</ul>
<p>但也有我不满意的：</p>
<ul>
<li>对大厂开始祛魅</li>
<li><del>团建假期没有了</del>(PS. 后来发通知今年恢复了)</li>
<li>没有机会培养管理经验，个人成长机会有些不明朗</li>
<li>等等其他不说了</li>
</ul>
<h4>自我反思</h4>
<p>哪些地方进展顺利：</p>
<ul>
<li>我晋升很快，两年 T10、四年 T11，绩效让我几乎一直走绿色通道，三次答辩也是 Top1，保持着百分百的通过率</li>
<li>以 T11 作为这段经历的结束已经超预期了</li>
<li>收获了很多出来后不知道有什么用的奖项</li>
<li>负责过 4 个核心项目，而且分别在不同的技术领域</li>
<li>软技能得到了培养和提升，包括沟通、汇报、技术分享等</li>
</ul>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/2024/img_trophy.jpg" alt=""loading="lazy" decoding="async" width="4032" height="2268" /></picture></figure></div><p>哪些地方做的不好：</p>
<ul>
<li>主动性在后期逐渐减弱，工作激情在身边人逐渐离职后开始消磨</li>
<li>推动性较弱，顾及形象，但这点后来想通了，如果都是为了同一个目标奋斗的话，那么对事不对人就好</li>
</ul>
<p>幸运之处：</p>
<ul>
<li>初期团队的包容和友善</li>
<li>和设计师合作，写了很多专利</li>
<li>绩效不错</li>
<li>领导们也都很好</li>
<li>接触到了很多不同形态的业务</li>
<li>职业生涯中有半数以上的时间专注技术</li>
<li>得到机会接触并负责不错的技术项目，包括跨端项目以及后续的渲染引擎项目，有机会负责 iOS 项目和 C++ 工程，在前端领域得到了扩展和转型</li>
</ul>
<p>如果重来，我有什么可以改变的：</p>
<ul>
<li>做更多的技术输出，目前个人的技术输出偏少了</li>
<li>付出一部分精力在工作之外的技术探索上</li>
</ul>
<p>接下来，谈谈我对短期未来的规划。</p>
<h3>1.3 未来</h3>
<div class="blockquote"><blockquote><p>劝君莫强安蛇足，一盏芳醪不得尝。——《有感》</p>
</blockquote></div>
<p>关于未来的路，我有很多问题想要去探索：我们能否真正理解他人的感受？每个人内心深处的记忆，都是真实的吗？还是说我们只愿意相信自己所看到的东西呢？意识的结构是什么？知觉是如何给予事物本质的？主体如何在生活世界中构建意义？为什么我们总会情不自禁地交浅言深呢？我们的生命，真的能够像日出那样，向上而且温暖吗？又或者只是我们心里的美好祝愿呢？</p>
<p>我心里还有数不清的问题想问，我愿意让自己的人生一直沉浸在对这些问题的探索之中，探索人生无尽的无尽的可能性。而眼下，我决定先去尝试实现一个多年间的想法，希望它能真正地帮助到人们去解决一些问题。</p>
<p>在去年的年终总结<a href="https://blog.ursb.me/posts/summary-2023/">《2023，逃离仿徨》</a> 列举到了我通过写作帮助了到一波读者的例子：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164230.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164230.png" alt=""loading="lazy" decoding="async" width="1266" height="600" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164313.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164313.png" alt=""loading="lazy" decoding="async" width="1270" height="868" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164354.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164354.png" alt=""loading="lazy" decoding="async" width="1224" height="726" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/IMG_1129.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/IMG_1129.jpg" alt=""loading="lazy" decoding="async" width="1254" height="532" /></picture></figure></div><p>之前听闻“婴儿最快乐的时刻就是发现他自己可以对周围的世界产生影响”。在写作这种创造性的活动中，或许我也是在追求某种“存在感”，这种存在感可能就是我对世界的一点点影响和改变。而我想创业做的产品，也是具有这种属性和价值的。</p>
<p>但当我说出我正在着手准备做项目创业的决策时，周围人基本对此持有悲观态度，而我却清楚地知道，眼前这条路我非走不可。如果只是因为眼前这件事困难很大、或是收益很低而选择不去做，那并不是我的行事风格，我一直喜欢去做难而正确的事情，虽然这种行为在别人眼中，这可能并不正确。</p>
<p>在 2018 年的年终总结<a href="https://blog.ursb.me/posts/summary-2018/">《2018，沉淀初心》</a>中我提到和两位 VC 的见面，当时我的决定是先不创业，而是去大厂磨砺几年，大约 3 年到 T9 左右再离开，因为当时的我虽然想法很多，也有非常想去做的事情，但我知道以我当时的能力和阅历不足以支撑我做成它，这也是我初心。<a href="https://blog.ursb.me/posts/summary-2018/">《2018，沉淀初心》</a> 这个标题的坑埋了很多年，在这里呼应回来了。现在时机成熟了，是时候行动了，无论最后是成功还是失败，我都不悔初心。</p>
<p>有人觉得我固执，有人觉得这无法理解、也有人觉得我不合群，而我反思了一下，觉得这一切应该来自于我此生最大的幸运——在恰当的时机体验了死亡觉察。在<a href="https://blog.ursb.me/posts/summary-2017/">《再见了，我的大学》</a>里提到过那两次住院和一次濒临死亡的体验，那之后的每一天我都认为是新生的恩赐，我希望能尽可能地利用好自己的每一天去探寻自己存在的价值。</p>
<p>三年前，我将相关的想法撰写成了一篇短文<a href="https://sspai.com/post/83743">《谈谈存在的价值与人生体验》</a>，后在少数派上发表，得到了很高的热度和留言。而在本文中，我想结合工作这个主题，从另一个角度再来谈一谈生命意义这个议题。</p>
<p>弗兰克尔提出了三种发现生命意义的方式，分别是工作、爱和勇气，后文将围绕这三个点分别对应的去谈一谈我眼中的鹅笼、幸福和勇气。</p>
<h2>二、鹅笼、幸福与勇气</h2>
<h3>2.1 鹅笼</h3>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/2024/banner-goose.png" alt=""loading="lazy" decoding="async" width="1792" height="1008" /></picture></figure></div><div class="blockquote"><blockquote><p>笼亦不更广，书生亦不更小，宛然与双鹅并坐，鹅亦不惊。——《阳羡书生》</p>
</blockquote></div>
<p>鹅笼一词并非是讥讽，而且来源于《阳羡书生》中一个意象，象征着一种束缚和限制。原文中的货郎在背负鹅笼的过程中，实际上反映了现代人生活中面临的各种束缚和压力。改编动画短片《鹅鹅鹅》的导演胡睿提到，鹅笼代表了人生中的种种限制，暗示人们在追求自由和理想时，往往会被现实的桎梏所困扰。因此，鹅笼不仅是物理上的容器，更是幻想与现实交织的空间。“书生从笼中吐出美食和美女，展现了人们内心深处的渴望与幻想，这种幻想的实现与现实的冲突，反映了人们在追求美好生活时所经历的挣扎与失落。”</p>
<p>鹅笼因此成为了一个充满神秘色彩的象征，代表着人们对理想生活的追求和对现实的无奈。在本章中，我力求还原鹅笼的本来样貌，将个体的挣扎与追寻呈现出来。</p>
<h4>工作的目的</h4>
<p>大部分中产阶级的打工人在工作困顿之际难免反思到工作的目的究竟是什么，而得到的结论普遍为以下几种：</p>
<p><strong>第一种，为钱工作。</strong></p>
<p>产生这种想法的原因有几种：</p>
<p>首先是社会因素，在现代社会中，我们往往会通过工作来获得社会认同，因此收入的高低直接影响个体在社会中的看法，这种文化促使我们将工作和金钱联系到一起，甚至将收入的高低视为衡量成功的标准之一。当以前的同学或者老家的亲戚知道我在大厂工作，大部分都是羡慕的，而这只是因为收入高。</p>
<p>其次收入可以用来满足主观的物欲，在消费主义肆掠的年代，工作的目的转化为了消费，为钱工作的驱动力在于对物质欲望的无止境追求。</p>
<p>因此大部分人，即便在被 PUA 或是一直在抱怨自己的工作不好、即便严重透支了自身的身心健康，也不愿意换工作。当我听到这些抱怨时就会劝其直接跑路，但对方大多只是嘴上说说，当我进一步问其跑路之后想去什么公司时，得到的答案却是换一家薪资更高的公司。为钱工作的鹅笼牢牢束缚住了他。</p>
<p><strong>第二种，为未来工作。</strong></p>
<p>前文提到大厂基本上都是倒计时的生死游戏，而大多员工的唯一目标就是在倒计时终点来临之前赚到尽可能多的钱，以实现财务自由、提前退休，这一路径在过往的十几年的互联网行业里已经验证了是极具可操作性的。</p>
<p>这种场景表面上看和第一种一样，但其实思考得更进了一步，至少知道自己想要什么。同时为了实现这个目标的未来，个体也会不断在游戏中鞭策自己晋升成长。在此期间，无论吃多少苦、忍受多少痛，哪怕工作无意义、只是拧螺丝，也不会有过多怨言，因为大家心中有一个美好的愿景，因为大家知道这些苦和痛，都是为了以后的甜。吃更多的苦，收获更多的甜。</p>
<p>在这种恶性循环之下，工作的唯一目标，转变为了不工作。</p>
<p><strong>第三种，为了不工作。</strong></p>
<p>在经历了前面的阶段之后，劳动已经发生了异化。怀有这种目的的劳动者将出卖劳动力与时间的工作，视为获取幸福生活的一种代价，而非幸福生活本身。</p>
<p>什么是异化？苏珊·桑塔格曾经在《论摄影》里面有过这么一句话：“人们患上了摄影强迫症：把经验本身变成一种观看方式。”随着摄影技术的普及，人们越来越倾向于用拍照的方式来经历和记录生活。拍照成为一种强迫性的行为，仿佛只有通过照片，一次经历才算完整，一个事件才算真实发生过。人们开始把现实生活等同于照片中的影像，于是旅行不再专心看风景体验人文，而是专注于拍照、打造朋友圈中待分享的照片。这种情况下，摄影这个行为扭曲人们对现实的理解，让观看变得肤浅、经验变得虚幻。而这实际上便是一种异化，工具本身变成了目的，使人疏离了真实的生活。</p>
<p>这种场景下的工作也是类似，将不工作作为工作的目的，忽视了工作本身可能存在的价值和意义。</p>
<p>那么，究竟什么样的工作目的，才是积极健康的？</p>
<p>前文提到了弗兰克尔提出的三种发现生命意义的方式，第一条便是工作——我们通过从事有意义的工作来找到自我价值。我们要思考在个体的创造中，个体完成了什么或者是给世界贡献了什么。</p>
<p>我之所以会选择编程作为职业，最主要的原因是编程的创造给我过最纯粹的快乐，无论过了多少年，我依然记得刚接触编程那会，笨拙地操弄着 VB 开发做到深夜，当开发完成、打开软件界面的那一刻，那种油然而生的欣喜永远也不会忘记。</p>
<p>其实早在初中的政治课中，我们就学习过劳动是为了创造社会价值、实现个人价值，而长大之后，我们似乎将其看作了一个笑话。这并不是个体的过错导致的认知偏差，而是受到了畸形的社会规训影响。</p>
<h4>世俗的成功</h4>
<p>世俗的成功给我们定义了一套人生模版，在《幸福的积分》一文中有过生动的描述：</p>
<div class="blockquote"><blockquote><p>对于出生于改革开放后的一、二线城市的中国青年来说，这个典型模板大体包括：</p>
<ul>
<li>拼命求学到至少本科；</li>
<li>加入金融或科技互联网等高增长行业；</li>
<li>在 GDP 前十的城市购买一套住宅（上海、北京、深圳、广州、重庆、苏州、成都、杭州、南京和武汉）；</li>
<li>在 30~35 岁之间结婚并生子；</li>
<li>每年 1~2 次的境外旅行或过上同等购买力的“中产生活”；</li>
</ul>
</blockquote></div>
<p>在我身边的绝大多数人目前也都遵循这一成功模板来构建属于自己的幸福生活，而它的终局只能是幻觉。</p>
<p>“在过去，人们像磨盘上的动物一样追求着前方的胡萝卜——总有一些人会得到胡萝卜，但重点在于让所有人都相信朝着一个方向走，会有胡萝卜。胡萝卜更像是一种终极想象，谁吃到胡萝卜并不重要，重要的是只要有一根胡萝卜，便可让无数的人对此趋之若鹜。”（《幸福的积分》）</p>
<p>在《规训与惩罚》中，福柯指出这种规训在社会中具有着普遍性，称之为微权力。这种规训微权力通过规范来控制个体的行为，让社会形成了一种全景敞视的监狱，个体在这种权力结构中被迫自我规训，成为合格的社会成员。</p>
<p>这种世俗的成功在很大程度上，定义了我们的行为方式。它们告诉我们哪些行为是正常的，哪些行为是不正常的。这种规训不仅决定了我们的行为，也在很大程度上决定了我们对于他人的价值判断，使得一些行为被贴上了“应该”的标签。在某种意义上，社会规训的存在，是对我们的自由选择的一种剥夺。他们定义了我们“应该”做的事情，而忽略了我们其他可能的选择。</p>
<p>这便是福柯在《词与物》所说的“人之死”，即人之主体性的丧失，我们失去了人之所以为人的自由和无限可能。</p>
<h4>消亡的主体</h4>
<p>现代社会的结构使得人们为了获得社会的认可与世俗的成功，不得不将自己物化来寻求他人的认可，从而表现出一种在规训之下的虚假个性。人们在同一性逻辑下的挣扎，进一步加剧了个体主体性的消亡。</p>
<p>而主体性的消亡会导致失去认知自己的机会，如果一个人从未真正替自己做过决定，那他就很难有动力去向内探索，从而失去了解真实自我的机会。这也反应出现代人的困境——无法听从本能知道自己必须做什么、无法根据传统了解自己应当做什么，也不知道自己想要什么。</p>
<p>身边有朋友和我交流时倾诉过，即便他已经知道当下的工作不是自己最想做的，或许饱含了抱怨和痛处，但也暂时不愿离开，因为离开了也不知道自己想要去做什么。这种情况下很多人会选择在工作中进入半躺平的状态，在工作之余分出一部分精力探寻自己的副业，之后等待合适的时机进行转型。这种做法是折中的，是对微权力的反抗，也是积极向内探寻的。但我不愿意这么做，因为我认为无论做何事都得认真拿出 100% 的精力去对待，这才是认真地活过。</p>
<p>除却这一部分积极向内探求的路径之外，弗兰克尔提出，对这样的主体性消亡价值危机有最常见的两种的行为反应——从众，即做别人做的事情，以及顺从权威，即做其他人想要自己做的事情。</p>
<p>而如果很有幸，你知道自己想做什么，但可能也因为诸多因素身不由己无法付诸实施去行动。做自己很难，“这个世界日以继夜、竭尽全力让你成为其他人，如果你想做你自己，就意味着要打一场最艰难的仗。”(E·E·卡明斯)</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/2024/fish.jpg" type="image/webp"><img src="https://airing.ursb.me/images/blog/2024/fish.jpg" alt=""loading="lazy" decoding="async" width="1179" height="1604" /></picture></figure></div><p>——“可是宝贝啊人生又何止这样？我们在世上是为了感受阳光。”</p>
<h4>工作与生活</h4>
<p>悉达多有过这样的反思：“所有这些他做的事情无非是游戏，这游戏令他快活，偶尔让他愉悦。但是真实的生活却擦身而过，无法触及。”如果把人生模板或是职场晋升当做成游戏的话，那生活又置于何处呢？我的博客中经常有这样的疑问，我是“如何将生活工作都安排的井井有条的”？</p>
<p>如何平衡工作和生活之间的关系一直以来都是个大难题，我的破局之法是”认真体验”。工作的时候就拿出百分百的干劲去工作，而剩余的时间则认认真真去生活。而可以拿出百分百的干劲去工作的前提是，我工作的目的是想得到成长，以便未来能有能力实现个人价值。</p>
<p>因此，工作和生活保持平衡是一个狡猾说法，它的隐藏含义是将工作与生活置于平等的定位。而生活是一切，工作只是工作，后者是为前者服务的手段而已。若想保持所谓的平衡，其实更多的是想办法将两者进行恰当地融合罢了，意义本在生活之中。追求幸福的生活才是每个人的目标，职业只是实现这一目标的手段。</p>
<p>或许未来社会会如同《工作、消费主义和新穷人》所推演的那样，未来的工作会被赋予了美学价值，工作被视为一种个人体验和享受的方式，工作与个人兴趣和娱乐之间的界限逐渐模糊，工作本身能够带来愉悦和满足，而不仅仅是为了生计。这种情况下工作不仅仅是经济活动，更是自我实现和个人表达的途径。那些能够将工作与个人兴趣结合的人，往往才会成为最大赢家。</p>
<p>如何破解「鹅笼」之局，我将答案交给「幸福」和「勇气」。</p>
<h3>2.2 幸福</h3>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/2024/banner-happiness.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/2024/banner-happiness.png" alt=""loading="lazy" decoding="async" width="1502" height="846" /></picture></figure></div><div class="blockquote"><blockquote><p>由爱故生忧，由爱故生怖。——《妙色王求法偈》</p>
</blockquote></div>
<h4>应对失去的焦虑</h4>
<p>进入幸福之前，先讨论第一个问题，我们应该如何应对焦虑？</p>
<p>首先要厘清焦虑的本质是什么，在快速变化的社会环境中，未来的不确定性成为我们焦虑的重要来源。有句话说“焦虑的反义词是具体”，具体则意味着决策，而决策的本质在于我们舍弃了什么，而不是选择了什么。</p>
<p>因此，放弃始终伴随着决定，人必须放弃其余的选项，通常放弃之后，它就再也不会回来了。但决定是痛苦的，因为它们意味着可能性的限制，而人的可能性越是有限制，就越不自由。人生的可能性，在做出决定的瞬间就消失了，这便是人生可能性的坍缩。</p>
<p>我们设想一种情况，如果你不向任何一种人生迈出一步，那么就相当于拥有了无限的可能性。就像《瞬息全宇宙》中杨紫琼饰演的妈妈那样，之所以她可以被选为对抗 BOSS，是因为她是所有平行宇宙中最无能的那个，因此她才拥有成为任何更好的她自己的潜力。亦如《德米安》中说的那样：“每个人其实都有变成人的无数可能，但只有他了解到这些可能性的存在，甚至有意识地去认识这些可能性时，他才真正拥有它们。”</p>
<p>但是时间一直在滴答滴答地流逝，不停流逝的时间将我们推向一个个待抉择的事件，我们不得不做出选择，而选择则意味着放弃另一种可能性，如此便产生了焦虑。《生命不可承受之轻》里米兰·昆德拉说，&quot;人类的时间不是循环转动的，而是直线前进，这就是人类为什么不可能幸福，因为幸福是对重复的渴望。&quot;</p>
<p>那么，我们究竟该如何应对？最近风靡全球的《黑神话·悟空》里，游戏临近结局时，老猴子给出了答案：</p>
<p>老猴子：古往今来的奇才异能之士，何其之多，但真正成就不朽功业的，寥寥无几。你们可知为何？</p>
<p>八戒：世道不公？</p>
<p>老猴子：世道从来不公。</p>
<p>八戒：运气不好？</p>
<p>老猴子：运气只是强者的谦辞。</p>
<p>八戒：那只能是…没我老猪英俊了。</p>
<p>老猴子：因为空有天赋，不思进取，小富即安，沉迷享乐。想安逸，又想名利；想快意江湖，又想成佛作祖，哪有这样的好事？身本多忧，怎可全求？</p>
<p>身本多忧，怎可全求？我们生命当中，每一天都是新的，每一秒都是新的，可是再想想，如果用这么宝贵的生命，往那个鹅笼里钻，去担心自己的焦虑，真的值得吗？失去了又能怎么样呢？以我有限的人生经历来看，往往事后来看失去了也不会怎么样，我还是我。无论有没有外在的那些东西，都要相信自己是 100% 的珍贵，我永远拥有自己的价值，没有条件。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/image_1689677717149_0.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/image_1689677717149_0.png" alt=""loading="lazy" decoding="async" width="1080" height="1003" /></picture></figure></div><p>由爱故生忧，由爱故生怖。一切的因缘际会，都是无常的，难以得到长久。人生在这个世界上会产生焦虑事件，而生命的短暂就像早晨的露水一般转瞬即逝。古人曾经形容过，人这一生就像江中的浮萍，在浪花当中摩肩接踵，你碰碰我，我碰碰你，一起归入大海。</p>
<p>浮萍一世，我有责任把仅此一次的人生过好，《牧羊少年奇幻之旅》的作者保罗·柯艾略在《悉达多》作序时写了这样一句话：“然后我又想到悉达多，他执意将自己投入生命本质之真实去找寻自我的道路，那天早晨我深吸了一口气，我要体味这世界所包含的一切气息，我发誓，我要选择生命。”</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/image_1689658461558_0.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/image_1689658461558_0.png" alt=""loading="lazy" decoding="async" width="1080" height="1605" /></picture></figure></div><h4>寻找稳定的内核</h4>
<p>“你的心灵就是整个世界，然而，真正的自我究竟在哪里？”——黑塞笔下的悉达多历经一生都在追寻他内在的阿特曼，那是一种称之为心灵或者内在自我圆融统一的境界。他说人必须找到自我之内在的源泉，人终其一生必须拥有它。人的使命不过是回到自我，寻找自我的途径，依托于稳定的内核，那是一种平静圆融的生命体验。</p>
<p>在本科毕业前夕的某个深夜，我写了一篇<a href="https://blog.ursb.me/posts/summary-2017/">《再见了，我的大学》</a>，在文章里曾提到过这种内核。</p>
<p>那段时间处于人生低谷，身体上也不堪重负，考完研第二天发高烧，直接去医院躺了一个月。在医院的那个月，每日无所事事，思考了很多很多。当时的我在读《新原人》，冯友兰将人生境界划分为四个层次，在说到自然境界时，他提及生活在这一境界的人往往缺乏自觉意识，无论人生是漫长还是短暂，都是在“顺习而行”，如同前文提到的从众或服从权威，对自己的生活行为没有什么觉解。我在反思自我是否在一直在“顺习而行”？我是否有自己的热爱？如果有，那我能否做到心无旁骛去追求？至今为止，我失去的和我获得的，究竟存在什么样的关系？</p>
<p>一切想至洞察清明，豁然走出低谷——“其实，人生本着内心的宽容和洞察的清明，在外在上随遇而安，不与世争，这样的话，我们才能把每个当下活得更好，才能把人生整个的流光以一种从容的姿态安详走过。”“在此刻，一切的一切，都处之泰然。我所获得的一切荣誉，不足挂齿。我所面临的失败，也不足为惧。我所得到的，也就是我所失去的。”</p>
<p>柏拉图在《理想国》中写道：&quot;我们一直寻找的，却是自己原本早已拥有的；我们总是东张西望，唯独漏了自己想要的，这就是我们至今难以如愿以偿的原因。&quot;</p>
<p>但在客观上，世间亦有许多无可奈何之事，我们没有能力和勇气去改变它们，那就坦然接受并从中寻找内心的平和。如同《庄子·人间世》云：“知其不可奈何而安之若命，德之至也。” 人是一根会思考的芦苇，帕斯卡在《思想录》中用芦苇比喻人类很脆弱，一折就断，但是人类的思考却能包含整个宇宙，故人类是即渺小又伟大的存在。人类不管多么悲惨，都要努力找寻属于自己的稳定内核。</p>
<p>所谓“眼存星海，心怀宇宙”，便是像悉达多顿悟时的体验——“所有这自古有之的一切，悉达多一直熟视无睹。他从不在场。而现在，他归属其中。流光魅影在他眼中闪耀，星辰月亮在他心中运行。”稳定的内核始于圆融，在生命中的每个瞬间，通过圆融统一地思考，方能获得稳定的精神内核。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/image_1689658437726_0.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/image_1689658437726_0.png" alt=""loading="lazy" decoding="async" width="1080" height="635" /></picture></figure></div><p>细流涓涓不绝，其水滴滴各异，泡沫浮于淤泥，且消乎且结乎，概无久存之例，世间人事，鸟兽栖息，亦不如此。</p>
<h3>2.3 勇气</h3>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/2024/banner-brave.png" alt=""loading="lazy" decoding="async" width="1792" height="1008" /></picture></figure></div><div class="blockquote"><blockquote><p>鸟要挣脱出壳。蛋就是世界。人要诞于世上，就得摧毁这个世界。——《德米安》</p>
</blockquote></div>
<h4>面对不确定的勇气</h4>
<p><strong>在追寻幸福的道路上，愿你有面对不确定的勇气。</strong></p>
<p>面对一个很不稳定的世界，要坚定、勇敢地建立自己的附近，不要牺牲日常。如果我们太过强调环境的不确定性，实际上等同于放弃了我们的自主权，从而毫不犹豫地屈服于环境支配论——都是目前大环境不好、经济形式不行，导致我无所适从。</p>
<p>然而，真实的情况却是我们所处的环境，往往是由参与其中的个体共同塑造的，尤其是我们自己。</p>
<p>我们可以确定，成就不在于外在定义，全看是否按自己的意愿在活。</p>
<p>我们可以确定，现实的、小群体的社会交往可以把握，周围人的情感支持可以拯救我们对世界的不知所措，做一个善良的人，做一些对自己、对别人、对这个世界有意义的事情，在这个过程中与自己、与他人、与世界建立联结，从而感到幸福、满足、愉悦，这总是一个不会错的策略。</p>
<p>我们可以确定，如果大环境无法改变，如果命运无法抗争，那么人类最后自由就只剩下自己对生活的态度了。所有东西都能被抢走，除了一件事，人类最后的自由——去选择在当前环境下自己的态度，选择自己的方式。</p>
<p>今天来看，一切坚固的东西似乎最终都会云烟成雨。然而，正是这个价值观缺乏依托的时代，没有身份的束缚，反而赋予了我们选择和行动的自由。你不等于你的过去，也不等于你的现在，你永远拥有策划和改变现状的能力，也永远拥有展望未来的能力。事实上，在一个一切都在快速变化的时代、在一个除了自由别无选择的时代，我们需要勇敢起来。</p>
<p>在毕业前夕我拿到了 WWDC 奖学金，参加了梦寐以求的 WWDC，归途时我写了一篇<a href="https://blog.ursb.me/posts/wwdc-19/">《WWDC19 游记》</a>，在这篇文章的结尾里，我写了这样一段话：</p>
<p>“我也曾有过这样的时光，毫无理由地深信自己的未来充满可能，相信自己将有一个玫瑰色的未来。</p>
<p>但更多的时候面对陌生的事物时，面对仰望以及羡慕之情时，会迷茫，会不知所措。</p>
<p>无论上到哪一层台阶，阶下有人在仰望， 阶上亦有人在俯视。抬头者自卑，低头者自得，唯有内省，才能看见真正的自己。</p>
<p>每个人都需要知道什么是自己想要的，知道什么是不可逆转的，知道用什么方式实现梦想， 知道用什么心情面对苦难，进退得失不离不弃也就都有了答案。</p>
<p>然而这一切其实都很难很难。我不知道面对苦难时应该何以面对，我不知道用什么方式去实现梦想，也不知道自己会错过什么，会留下什么遗憾，我不知道命运会把我带向何方，但我相信，只要面向阳光奔跑就会把阴影甩在身后。</p>
<p>之前 IT 之家专访让我留个寄语，我说道： ‘去学有意义的知识，去做自己喜欢的事情，做对社会有贡献的产品。’</p>
<p>其实这也是一年前我给导师的一封信中说过的话，那封信中我决定接下来不再继续读博了，想要选择去探索更多新鲜的事物。但今天突然觉得，大概人生最大的意义就是用余生去找到那些最爱吧。</p>
<p>我觉得这个世界美好无比，满树花开，柳枝摇曳。阳光席卷城市，微风穿越指间。这个世界是美好的，值得为她奋斗，也值得为自己所热爱的事物奋斗。”</p>
<p>在不确定的世界，坚持做确定的自己。愿你旅途漫长，充满奇遇。</p>
<h4>甘于平凡的勇气</h4>
<p><strong>在不确定的世界中，愿你有甘于平凡的勇气。</strong></p>
<p>很多人常常被人诟病“不务正业”，许多擅长的技能、喜欢的爱好，仿佛只有转化成物质，才是有价值的。但人生本不应该如此，“如果天性是蝙蝠，你肯定成不了鸵鸟”（《德米安》）。</p>
<p>我们的生命是属于自己的，所度过的每一分、每一秒，都是自己切切实实的人生。如果人生不能以喜欢的方式度过，那又有什么意义呢？拥有一个爱好，有自己想做的事情，哪怕它再小众、再“不务正业”，都是我们生命的光辉。</p>
<p>“铅刀有干将之志，萤烛希日月之光”。我们要做的，是去延伸它，发展它，从中获得意义感、目标感、成就感、价值感和支撑感。</p>
<p>具体来说，当我们准备做一件事时，无论这件事情大小，无论这件事在社会评价体系中的重要性如何，郑重地将自己全部投入进去，不计得失地投入自己的才华、注意力和时间，就会从心底感受到一种愉悦和对自己的肯定，我想这就是幸福。往往此时事情多半会做得很不错，但这也只是“幸福”的副产品，并非我们做事过程中时时关注的目标。弗兰克尔说，人所需要的“并不是一种没有压力的状态，而是值得为之努力奋斗的目标”，“这是人之为人的特征，人总是朝向自身以外的某种东西。”</p>
<p>那么，真正的勇气是什么？是基于健康、稳定的自尊基础上，对自己能力边界的清晰认知，并且有意愿去做一些困难的事情、做一些自己擅长的事情、做一些只有自己可以做到的事情，并对此抱有使命感，实现自己的持续成长。它不是无所畏惧，而是愿意相信：未来是好的，我是有价值的，一切都会好转。勇气不是不惧怕黑暗，而是愿意向着朝阳前进。</p>
<p>“勇敢的时刻已敲响我们的钟”，旅途漫长，愿你赤诚且勇敢，自由且尽兴。</p>
<h4>告别盛夏的勇气</h4>
<p><strong>在漫长的旅途中，愿你有告别盛夏的勇气。</strong></p>
<p>找到自我，固守自我，沿着自己的路向前走，不管它通向哪里。当感到胆怯的时候，想想纳瓦尔说的“99% 的努力终将白费。”认清这个现实，如果害怕失败，安于现状，什么都不做，不去寻求任何改变，那就不可能找不到那 1 % 的可能性。</p>
<p>在 Bilibili 2024 跨年晚会的结尾有一段祝酒辞，最后的那杯酒是敬自己：</p>
<p>我想跟自己干杯，也是跟每一个热爱自己的你们干杯。</p>
<p>希望以后不管遇到什么事情，在新的一年，我们都一定要在心里默念：</p>
<p>我一定能够遵循本心，</p>
<p>我一定能够热爱万物，</p>
<p>我一定能够追寻梦想，</p>
<p>我一定能够成为我想成为的那个人。</p>
<p>敬自己！</p>
<p>敬自己，希望告别这段盛夏之后，依然拥有无限春天。</p>
<p>——“你骄傲地飞远，我栖息的夏天。”</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/2024/rainbow.jpg" alt=""loading="lazy" decoding="async" width="3024" height="2500" /></picture></figure></div><p>于 2024 年 8 月 31 日深夜。</p>
]]></content:encoded></item><item><title><![CDATA[Airing 开通了一个咨询服务]]></title><guid>https://airing.typlog.io/posts/service/</guid><link>https://airing.typlog.io/posts/service/</link><pubDate>Mon, 13 May 2024 11:12:41 +0000</pubDate><content:encoded><![CDATA[<p>我将提供以下两种方式的咨询服务，若希望与我取得联系，可以仍选其一。</p>
<h2>方式 1：信件咨询</h2>
<p>非常欢迎你以此方法与我联系，我期待与读者建立良好的互动关系，也非常愿意倾听他人的内心世界和独立想法。若你有任何困难，可以直接邮件联系我，我愿意输出自己的想法，希望能给予你一些启发或帮助。当然，仅仅只是交朋友的来信也是非常欢迎的~</p>
<p><strong>报酬：无偿。</strong> 但在充分保护来信人隐私的情况下，信件内容可能会在我的博客中作为案例分享出去。</p>
<p>回信时长：回复时长以收件时的自动回复为准，目前月均约会收到 2~4 封咨询来信，回复间隔约为 14 天。若后续信件增多，或增加回信时长，具体以邮箱自动回复为准。</p>
<p>咨询方式：邮件至 airing@ursb.me 即可。</p>
<h2>方式 2：有偿咨询</h2>
<p>我会提供时长 50 分钟的一对一咨询服务（仅限中文），</p>
<p>根据目前我掌握的知识领域，我可以提供以下内容的答疑解惑：</p>
<ul>
<li>职业发展规划与建议</li>
<li>软件技术相关咨询</li>
<li>求职/求学途中遇到的任何困难</li>
<li>写作的有关建议与心得分享</li>
<li>效率类工具使用建议与指导</li>
<li>其他任何闲聊</li>
</ul>
<p>注意，本服务不提供任何商业咨询、数据咨询，且需全程录音录像。</p>
<p>您可点击 <a href="https://cal.com/airing/50-min-meeting-paid">https://cal.com/airing/50-min-meeting-paid</a> ，在页面内直接进行付费预约。</p>
<p><strong>价格：200 USD</strong>（原价 400 USD，目前启动期限时折扣），提供全程退款服务。</p>
<p>如有任何问题可随时邮箱联系 airing@ursb.me，期待与您建立联系。</p>
]]></content:encoded></item><item><title><![CDATA[月刊（第26期）：旅途]]></title><guid>https://airing.typlog.io/posts/weekly-26/</guid><link>https://airing.typlog.io/posts/weekly-26/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Tue, 07 May 2024 10:54:17 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二四年四月的生活记录与思考。</p>
<p>因为机票相对便宜的缘故，在元旦就早早定下了五一期间新西兰的旅程。而我对国外旅游几乎没有经验，甚至攻略也是临时在飞机上对着离线地图做的，未曾想到，这趟旅途可以如此丰富多彩。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj26/map.jpg" alt=""loading="lazy" decoding="async" width="2820" height="1300" /></picture></figure></div><p>现在是旅途的最后一夜，在机场等待着归途的飞机。闲来无事，凭借着回忆，流水账般记录下这次新西兰的旅途。</p>
<p><strong>Day 1：飞机 - 基督城 - 中餐馆</strong></p>
<p>坐了 10h 的飞机到达奥克兰，因为口语不好办理值机之后仍然不知道该如何转机，一旁的工作人员发现了我们的难处，直接引领着我们走向正确的方向。机场大多数指示牌都标有着中文，全程并没有遇到其他的障碍。</p>
<p>在候机时发现脚边有两只小鸟在啄食，抬头看去也偶见在室内飞翔的小鸟，突然明白了飞机上海关宣传片中「这片脆弱的土地是我们最珍贵的财富」的含义了。</p>
<p>晚上达到基督城之后成功租到了车，虽然和国内的车道相反，但是开起来异常简单。一方面是这里的车道较少，极少存在需要变道的情况；另一方面则是这里的车辆极其友善——从未遇到别车插队、催促闪远光、恶意超车的情况。相反这些车辆礼让做的很到位，譬如环岛前宁愿多等几十秒，也不愿在有车的情况下汇入；窄路会车时，基本都会主动靠边让行，因此经常能看到双方车辆都在靠边让行没有人愿意先通过的情况（笑）。会车时对向车辆的驾驶员基本都会主动向我招手打招呼，还有人向我比了个手枪的手势，着实有些可爱。</p>
<p>说到可爱，偶见路边人家的家门口摆的一些小物件——小猪佩奇的娃娃、邮箱旁的糖果盒，还有对向路牌背面的一些贴纸。</p>
<p>可爱、友善，这是我对这里的初见印象。</p>
<p>晚上在汽车旅馆办理入住之后在附近转了一圈，虽然才下午 6 点多，但天已然黑了，街道上没有行人，商铺也基本全部关门了，附近只有一家中餐私房菜在营业，而餐厅里也并没有顾客。</p>
<p>就餐后，老板夫妇和我们闲聊，他们是从深圳移民至此，谈到了这里的房价、教育、工作、收入、居民的生活态度、还有我们自驾时的注意事项，涨了许多见识。</p>
<p><strong>Day 2：羊驼 - 海湾小镇</strong></p>
<p>第二天的行程安排在基督城周边，睡前在网上预约了羊驼牧场的参观，驱车前往，一路上的平原、牧场、 山景应接不暇，秋意甚浓。翻过最后一个山头时，看到了海湾，那一瞬间觉得这里不愧为「被世界遗忘之地」。</p>
<p>羊驼牧场有一位中国的员工，她分享了她在牧场喂羊的经历、介绍了每一只羊奇奇怪怪的性格特点，如数家珍。如今回忆起来，羊驼牧场在这趟旅途可以排得上 Top2，和一群大羊驼、小羊驼互动，欢乐的氛围洋溢满了整片山谷。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj26/sheep.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj26/sheep.jpg" alt=""loading="lazy" decoding="async" width="750" height="503" /></picture></figure></div><p>下午在海边的阿卡罗拉小镇消磨时光——泛舟、海滩上看景发呆、吃冰激凌、散步，直至日落才回旅馆。这个小镇人很少、海湾没有风浪、节奏很慢，我很喜欢这种静下心来感受时光在指尖慢慢流淌的感觉。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj26/akarola.jpg" alt=""loading="lazy" decoding="async" width="4160" height="1959" /></picture></figure></div><p><strong>Day 3：西海岸 - 夜行冰川 - 银河</strong></p>
<p>早上归还钥匙之后驱车前往西海岸，从城镇开到平原，再开上山路、经过河谷，到了峡谷，之后过了丘陵，一望无际黑色的大海映入眼帘，着实壮观。</p>
<p>经过 Hokitika 的小镇，天阴，大海是黑色的。再往前开去，天空放晴，海水变蓝，无比壮阔，瞬感渺小。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj26/sea.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj26/sea.jpg" alt=""loading="lazy" decoding="async" width="750" height="1139" /></picture></figure></div><p>因为预约了 wanaka 的开飞机，所以晚上在西海岸的山路上预计多开一段，以便明天能按时赶到 wanaka。夜里开错了路，而汽车旅馆的小哥一直在等着我们办理入住（否则早就下班了）。将近九点到了旅馆，发现那栈还在为我们亮着的灯，心安定了下来，感到了一丝家的温暖——</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj26/chat-2.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj26/chat-2.jpg" alt=""loading="lazy" decoding="async" width="1170" height="1078" /></picture></figure></div><p>有信号之后也收到了昨晚旅馆老板的消息，甚感温暖——</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj26/chat-1.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj26/chat-1.jpg" alt=""loading="lazy" decoding="async" width="1170" height="756" /></picture></figure></div><p>旅馆小哥和我们说这里经常能看到漫天的银河，抬头一看果真如此，一直在驱车前行，却没有抬头看看天空。</p>
<p>可惜没带三脚架，只能用 iPhone 的夜景模式随手拍了一张。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj26/star.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj26/star.jpg" alt=""loading="lazy" decoding="async" width="1080" height="1440" /></picture></figure></div><p>当浩瀚的宇宙摆在眼前之际，才惊觉自己其实也只是宇宙中的浮游。人类的存在其实与星星是一样的，都是由同一种东西构成，但我们却有着意识。在人类看向银河之时，人类的存在便成了宇宙用来了解自身的一种方式——“风景在我之内思考它自身，我就是它的意识。”</p>
<p><strong>Day 4：Wanaka - 开飞机</strong></p>
<p>晨起，日升，才发现昨晚的住宿环境如仙如梦。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj26/fox.jpg" alt=""loading="lazy" decoding="async" width="1921" height="1080" /></picture></figure></div><p>驱车前往 wanaka，wanaka 的湖景不必多言。房东奶奶为我们办理入住的时候，即为友善，哪怕我们口语不好也耐心着听着，回复说 don't worry，一直给予我们鼓励的眼神，还给我们介绍她家的大 house，给人的感觉并不是房东，而友善的邻居奶奶。我们发现电源转接头遗失了，在 booking 上留言是否有转接头，结果房东爷爷捧着一堆五花八门的转接头送过来给我们，着实可爱。</p>
<p>这天还体验的开飞机——</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj26/aircraft.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj26/aircraft.jpg" alt=""loading="lazy" decoding="async" width="750" height="1961" /></picture></figure></div><p><strong>Day 5-6：皇后镇</strong></p>
<p>早餐在 wanaka 湖边散步，拍了那棵有名的树——</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj26/wanaka-tree.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj26/wanaka-tree.jpg" alt=""loading="lazy" decoding="async" width="1440" height="1080" /></picture></figure></div><p>拿着冰淇淋在湖边走着，随手偷拍了张湖景——</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj26/wanaka.jpg" alt=""loading="lazy" decoding="async" width="1728" height="1080" /></picture></figure></div><p>午后驱车前往皇后镇，因为没定上其他项目，空出了一天，就在镇的湖边发呆——看行人、看鸭子，度过了两天。</p>
<p>如此闲暇，如此缓慢。看着一切素未谋面的风景，好奇的思绪在心里积攒着，总想把过客当作城市的主人，渴望在更深处的地方探索这片土地独有的个性。</p>
<p>即便明天我离开此地，我也仿佛根本不觉得自己离开过，空间和时间都不能影响我们，好像时空是属于我们的，而非我们属于时空。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj26/queenstown.jpg" alt=""loading="lazy" decoding="async" width="1921" height="1080" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj26/town.jpg" alt=""loading="lazy" decoding="async" width="1918" height="1080" /></picture></figure></div><p><strong>Day 7：Deer Park - 滑板车 - 滑翔伞</strong></p>
<p>这天是在皇后镇的最后一天，早上去了 Deer Park，小动物们都很给面子，拍到了不少靓照——</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj26/deerpark.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj26/deerpark.jpg" alt=""loading="lazy" decoding="async" width="750" height="2941" /></picture></figure></div><p>下午在山上玩了滑板车，这个项目意料之外的好玩。路上遇到了一个国人小哥，主动上来打招呼非常激动地和我们说这个项目多好玩，他几年前玩过至今念念不忘，所以现在又飞过来体验……</p>
<p>之后玩了滑翔伞，在山顶上奔跑——跳跃——起飞，以及在天空中自由翱翔的体验，是这次旅途的 Top1！</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj26/sky.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj26/sky.jpg" alt=""loading="lazy" decoding="async" width="750" height="1122" /></picture></figure></div><p><strong>Day 8：奥马鲁 - 企鹅 - 民宿</strong></p>
<p>这天离开皇后镇，驱车前往东海岸的奥马鲁，看了海豹和蓝企鹅。（蓝企鹅不给拍照，所以这里并没有照片啦）</p>
<p>晚上入住背包客民宿，装修氛围很温馨，厨房的墙壁上贴着旅客们的留言。</p>
<p><strong>Day 9：归途</strong></p>
<p>今天回到基督城，旅途开始的地方。八天前，这趟风景之旅的第一天夜晚，在此地，我感到无比的孤独。黑夜降临后，街上没有行人，商店关着门，仅有微弱的路灯宣告着这是一座城。异国、黑夜、对明天的未知、日常指导原则被剥夺的体验感、在此世的陌生感，让我感到孤独。</p>
<p>但经历了这八天的旅途，现在的黑夜不会再给我带来孤独感。因为我知道明天太阳还会照耀着这片大地，当阳光洒下时，这里风景依旧；因为我知道，这里生活着可爱友善的人们，遇到困难时，你不会是一个人面对。</p>
<p>存在的基本模式是关系，而最好的关系是个体以彼此无所求的方式建立关联。我们不是并不是作为独立的实体存在，人类是彼此关系中的生物，这里的人们用可爱与友善证明了这一点。</p>
<p>旅行能够让我们的生活变得更好吗？我们的生命，真的能够像日出那样，向上而且温暖吗？我不能给出肯定的答案，当我愿意想着肯定的答案奔跑。</p>
<p>最后，2024 年跨年夜 B 站祝酒辞中有一段话我特别喜欢，在此作为游记的结束语吧——</p>
<p>「我想跟平凡里的坚持干杯，我想跟那些有何不可的失败干杯，我想跟所有值得被尊重的一切干杯。敬存在。」</p>
<p>「我想和地球干杯，敬那些未曾谋面的山海，敬那些令人心驰神往的文化，敬那些芸芸众生们努力用爱打造的这颗璀璨星球。敬世界。」</p>
<p>「我要和明天干杯，我不会问你是喜是悲，不会问你有何贵干，我只会毫无畏惧地接过你手中的礼物，珍惜每一段经历。不问别离，不问结局。敬明天。」</p>
<p>「我想跟自己干杯，也是跟每一个热爱自己的你们干杯。希望以后不管遇到什么事情，在新的一年，我们都一定要在心里默念：我一定能够遵循本心，我一定能够热爱万物，我一定能够追寻梦想，我一定能够成为我想成为的那个人。敬自己。」</p>
<h2>🌺 生活点滴</h2>
<p>以下是本周期内一些瞬间的记录。</p>
<p>🚀 工作：晋升 T11</p>
<p>3 月的答辩顺利通过了，过年期间一直在准备材料，而且这大半年的项目成果也确实不错，即便这次通过率很低，但总体上还是十拿九稳，对自己还是有信心的。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj26/t11.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj26/t11.jpg" alt=""loading="lazy" decoding="async" width="1095" height="898" /></picture></figure></div><p>T5 校招卡了一年，T10 也因为新规卡了两年，除此之外都走了绿通，三答三过，于是毕业两年 T9、两年半 T10、四年半 T11，总体来说晋升进度相对来说是比较快的了。目前 TME 前端只有一位 T12 天花板，那么下个小目标暂且先定成三年内 T12 吧。</p>
<p>为了梦想，继续加油！</p>
<h2>🎬 书影音</h2>
<p>以下是本周期的书影音记录。</p>
<ul>
<li>看完：剧集 |《追风者》| ★★★★★</li>
<li>看完：动漫 |《物理魔法使马修》| ★★★☆☆</li>
<li>看完：动漫 |《物理魔法使马修》| ★★★☆☆</li>
<li>看完：电影 |《哥斯拉大战金刚 2》| ★★★☆☆</li>
<li>看完：电影 |《海王 2》| ★★★☆☆</li>
<li>看完：电影 |《被我弄丢的你》| ★★☆☆☆</li>
<li>重温：剧集 |《庆余年》| ★★★★★</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[个人工具箱与好物分享]]></title><guid>https://airing.typlog.io/posts/tools/</guid><link>https://airing.typlog.io/posts/tools/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Fri, 29 Mar 2024 11:00:47 +0000</pubDate><content:encoded><![CDATA[<section id="nice">
  
一直都很想写这个话题，因为本人是强烈的数码爱好者同时又是一个执着的工具控，自己尝试过很多新产品，淘汰了一批又一批产品，最终沉淀下来这套较为稳定的工具箱。
  
而这实际上是一个高度个人化的话题，我们每个人的观点都会受到自己生活经验和视野的影响，我认为优秀的工具或许在别人眼里却并不出色。尽管如此，我仍决定分享出来我目前正在使用的工具箱，希望能够为你带来一些灵感。

> Updated: 2024-03-29

<h2 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.3em; padding-bottom: .3em; border-bottom: 1px solid #dfe2e5; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">硬件</span><span class="suffix" style="line-height: 2 !important;"></span></h2>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">💻 电脑与配件</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Apple MacBook Pro (2021, 16-inch, M1 Max, 深空灰色, 32G RAM, 1T SSD)</strong> ，办公主力设备，虽然是 21 年的设备，内存也不大，但是 M 系列的芯片内存 swap 率挺高的，用起来目前没有什么问题。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Apple MacBook Air (2022, M2, 午夜色, 24G RAM, 1T SSD)</strong> ，移动设备，外出会带。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Apple iMac (2020, 27-inch Retina, Intel Core i7-10700K, 96G RAM, 1T SSD)</strong> ，公司配的设备，之后自己加装了内存，奈何 CPU 跟不上，现在办公桌上接 Luna Display 作为扩展显示器了，偶尔会跑下耗时任务。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Studio Display (蚀刻玻璃)</strong> ，摆在家里的显示器，后悔加钱上了蚀刻玻璃，确实会影响清晰度，且书房光线稳定镜面玻璃完全足够。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">LG UltraFine 4K Display</strong>，2021 年企业优惠价入手的，入手一个月后又买了第二台，本身支持菊连，配合 MBP 很方便。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">HHKB Studio</strong>，机械轴的 HHKB 很舒服，办公用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">HHKB Professional HYBRID Type-S (White, 有刻)</strong> ，被 HHKB Studio 淘汰下来了，目前书房用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">HHKB Professional HYBRID Type-S 雪</strong>，同时入了无刻的键帽作为收藏，虽然型号一样，但手感上其实比上面那款要偏软一些。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Magic Trackpad (银色)</strong> ，搭配白色键盘，书房用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Magic Trackpad (深空灰色)</strong> ，搭配黑色的 HHKB，办公用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><s style="line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Magic Keyboard(蓝色，Touch ID)</strong> ，从海鲜市场上收的 iMac(M1) 配件，后来没用了，还是更喜欢 HHKB 配列。</s></section></li></ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">📱 移动设备</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">iPhone 15 Pro</strong>，主力机。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">iPhone 6s</strong>，公司配置的测试机，低端机用于测性能。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Samsung Galaxy Z Flip4</strong>，自购的 Android 设备，用于体验 Android 软件和开放生态，偶尔作为阅读器使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Xiaomi Mi 9</strong>，公司配置的测试机，经常用来跑项目。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Apple Watch Ultra</strong>，个人更喜欢白钢的 Series 版本。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">iPad Pro 12.9 (M1)</strong> ，你的下一台电脑还得是电脑，糟糕的文件系统、窗口管理和软件生态让它成为了 Bilibili 播放器。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">iPad Pro 妙控键盘</strong>，配合 iPad Pro 使用，但不喜欢用，组合起来比 MacBook Air 还要重上许多。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">iPad mini (第六代)</strong> ，看电子书或玩游戏较多，外出会带着，使用频率很高。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">BOOX Leaf 2</strong>，开放系统体验不错，和 KO3 有一样的侧边翻页键很是实用，用来看微信读书。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><s style="line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Kindle Oasis 3</strong>，清晰度会比 Leaf 2 好一些，但 Kindle 退出中国市场后体验上有折损，且不支持微信读书，后续就没用了。</s></section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">zendure 征拓充电宝(10000mAh, 踏青绿)</strong> ，体验过多款充电宝，这款价格实惠且非常小巧好看，是最满意的一个充电宝了。</section></li></ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">🎧 音频设备</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">AirPods Pro (2nd generation, USB-C)</strong> ，之前的 1 代被洗衣机洗了两个小时，虽然还能用，但是降噪和通透模式不好使了，遂更换。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">AirPods Max</strong>，使用频率较少，戴时间久了很压耳朵。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">HomePod (1st generation)</strong> ，HomeKit 网络中枢，也时常播音乐。</section></li></ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">📷 影像设备</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">富士 X100VI</strong>，直出效果很好。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">907X & CFV 100C + XCD 4/28P</strong>，大道至简。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Insta360 GO 3</strong>，夜间画质一般，但胜在小巧，拍到比拍好更重要。</section></li></ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">🎮 娱乐设备</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Nintendo Switch (OLED Model)</strong> ，塞尔达启动器。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Nintendo Switch Lite</strong>，偶尔当便携设备带出门玩玩小游戏。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Steam Deck</strong>，偶尔玩玩 Steam 小游戏。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">PlayStation 4 Pro</strong>，吃灰很久了，刚毕业的时候为了玩《战神》入的。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Xbox Elite 无线控制器</strong>，质感很好，配件和软件丰富，可玩性强，iPad、Steam Deck 均可使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Nintendo Switch Pro 控制器</strong>，完善了 NS 的游戏体验。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">坚果 N1S Pro 4K</strong>，三色激光投影理论数值无敌，但是系统不行，半年就返修了一次，摆在卧室。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">极米 H3S</strong>，在司内的商城用积分换的，用了 3 年了没有问题，摆在客厅。</section></li></ul>
<h2 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.3em; padding-bottom: .3em; border-bottom: 1px solid #dfe2e5; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">软件与服务</span><span class="suffix" style="line-height: 2 !important;"></span></h2>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">📁 系统</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Arc</strong>，浏览器，设计理念符合我的使用习惯。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">CleanShot X</strong>，截图工具与录屏工具，标注快捷键挺好用的。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Bob</strong>，翻译软件，有不错的快捷键支持，用的较少，大多数情况下会用 Raycast + AI Command 翻译。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Stats</strong>，状态栏展示设备 CPU、内存、网络、磁盘、电源灯信息。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Keynote</strong>，制作平时分享或答辩的 PPT，之前体验过 iA Present，还是觉得原生 Keynote 最好用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Numbers</strong>，制作图表。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Bartender 5</strong>，也属于 Mac 必装软件了，可以控制状态栏展示。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">RunCat</strong>，用小猫猫的状态来表示 CPU 的状态，挺可爱的。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Vimac</strong>，使用 Vim 快捷键控制 Mac。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">NinjaMouse</strong>，配合 Vimac 使用，切软件的时候会自动把鼠标指针挪到激活窗口的正中间。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Input Source Pro</strong>，切换软件时自动切换输入法，做研发时很常用，如切到 IDE 或终端时自动切英文输入法，而切到文档或者企业微信时则自动切中文输入法。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">AltTab</strong>，软件切换工具。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Hookmark</strong>，配合 Drafts 使用，方便做任意书签的笔记。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Geekbench 6</strong>，本机性能测试软件。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">AlDente</strong>，电源充放电管理软件，可以更精准的、个性化的控制电源策略。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Tencent Lemon</strong>，硬盘清理软件，小巧实用，希望不要变成恶龙。</section></li></ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">🌏 服务</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Perplexity</strong>，Arc 默认搜索已经替换成了 Perplexity，每日搜索在 20~40 次，配合自己的 Prompt 和 Claude 3 Opus，答案的输出质量非常之高，大幅提升学习效率。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">腾讯文档</strong>，工作用，或者需要协作的场景用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">GitHub Copilot</strong>，从 2022 年一直免费用到现在，大幅提升研发效率，尤其配合 Jupyter 使用，可以做到自然语言处理数据。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Readwise</strong>，各端阅读源摘要汇总到 Readwise 服务，之后在 HeptaBase 做笔记和二次整理。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">IFTTT</strong>，自动化服务，支持 AI 和 Webhook，可以做各种记录的聚合、整理和转发，最终网页收藏汇总到 Cubox，而消息通知则汇总到 Telegram 的个人频道。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Last.fm</strong>，统计各端听歌记录，图表做的很好看，配合 musicfox 使用。</section></li></ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">🧰 效率</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Raycast</strong>，入了 Raycast Pro + GPT 4 扩展包，最常用的功能是 HotKey 快捷打开软件 、AI Chat 与 Clipboard History。下面是一些常用的插件：
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">AI Chat &amp; Quick AI</strong>，电脑上一键呼出 AI，这就显得微软的 Copilot 独立按键很蠢了。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">AI Command</strong>，根据自定义的预制 Prompt 执行复制的文本，一般我会让它提取 CI 结果中关键的信息，然后生成我需要的配置；或者让它格式化压缩 JSON；分析堆栈信息；英汉互译等等。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Clipboard History</strong>，之前入过 Rewind，发现完全没有必要，直接 Clipboard History 效率更高</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">My IP</strong>，研发原因经常要看内网 IP，快捷键直接查看+复制。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Google Search</strong>，因为 Arc 默认搜索设置成了 Perplexity，当明确想用 Google 搜索的时候会按下这个快捷键。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">QR Code Generator</strong>，工作原因有时需要 URL 转二维码，这个就很实用，不需要打开浏览器利用插件或三方工具转。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Todoist</strong>，配合 Todoist 使用，可以在状态栏或弹窗显示今日任务。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Format JSON</strong>，有了 AI Command 之后这个插件很少用了。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Linear</strong>，配合 Linear 使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Scrcpy</strong>，配合 Scrcpy 使用。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Rize</strong>，时间统计与专注管理软件。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Fantastical</strong>，统一的日历和 TODO 管理工具，使用七年有余。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Apple Calendar</strong>，配合 Fantastical 使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Todoist</strong>，这些年体验过 OmniFocus、Things 3、Sorted3、Apple Reminder、滴答清单、Taskade，最后选择 Todoist 是看中了它开放的 API、优秀的 Vim 快捷键支持、以及对 Fantastical 等三方软件的良好集成。如果不考虑以上三个方面，综合来看滴答清单的体验和性价比是最佳的。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Drafts</strong>，搭配快捷键和桌面置顶功能，用作临时草稿或者桌面便签。</section></li></ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">📚 阅读</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Readwise Reader</strong>，和 Readwise 的集成做的非常好，体验流畅，支持快捷键、RSS 订阅、NewsLetter 订阅、也可以高亮图片。一般直接用网页端。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Inoreader</strong>，RSS 订阅源管理，配合邮箱、IFTTT &amp; AI、Telegram 订阅、关键词监控做一些自动化提醒和总结。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">微信读书</strong>，新出的 AI 大纲十分好用，阅读完之后配合 Readwise 保存书摘。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Cubox</strong>，网页收藏箱，配合 IFTTT 使用，各订阅渠道最终都会收录到 Cubox 里。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Instapaper</strong>，因为免费+集成化做的很好，配合 IFTTT、浏览器插件、Inoreader 做网页收藏的中转服务。</section></li></ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">📝 笔记</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">HeptaBase</strong>，笔记软件这七八年体验过 Notion、Bear、NotePlan、Tana、Roam Research、Capacities、LogSeq、Obsidian、Craft、Mem、MWeb，最后用下来最趁手并且产出效率最高的，只有 HeptaBase，除了卡片笔记之外，还有画板功能、PDF 标注、以及配合 Readwise 使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Obsidian</strong>，折腾了不少插件，但是我用 Obsidian 最后只用其中的 Excalidraw 插件，现在 Obsidian 已经变成 Excalidraw 的客户端了，是每日必用的白板工具，用作记录草稿和工作思路。</section></li></ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">👨🏻💻 编程</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">编辑器
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Visual Studio Code</strong>，临时查看项目、分析日志、或者使用 Jupyter 的时候才会用到。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">WebStorm</strong>，以前也曾是 VSCode 党，后来才发现付费软件真香（公司许可证免费），内置的 Git 、冲突处理、文件管理很好用，不需要自己折腾插件，还可以调内存占用，流畅性表现也比自己装一堆插件的 VSCode 好很多。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">CLion</strong>，和上面一样是 JetBrains 家族的软件，敲 C++ 项目的时候会用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Xcode</strong>，敲 iOS 项目的时候会用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Android Studio</strong>，敲 Android 项目的时候会用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Cocos Creator</strong>，编译游戏项目的时候用。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">编辑器插件
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Vim</strong>，JetBrains、VSCode、Xcode 都会装。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">MetaJump</strong>，配合 Vim 使用，快速移动指针。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Banish Pointer</strong>，配合 Vim 使用，焦点在编辑器的时候隐藏鼠标指针。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Error Lens</strong>，增强错误提示。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Filter Line</strong>，查日志时可以过滤关键词。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">GitHub Copilot</strong>，辅助编程。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">GitToolbox</strong>，JetBrains 的 Git 增强工具，可以显示行内提交信息。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">GitLens</strong>，VSCode 会装，类似于 GitToolbox。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Git Graph</strong>，VSCode 会装，JetBrains 内置的足够好用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">TODO++</strong> ，VSCode 会装，统一管理注释标记，JetBrains 内置的足够好用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Bookmarks</strong>，VSCode 会装，书签管理器，JetBrains 内置的足够使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Jupyter</strong>，做数据分析时用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">WakaTime</strong>，记录编程时间。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">浏览器插件
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Readwise</strong>，配合 Readwise 服务使用，可以直接在网页上划线，之后在 Reader 中阅读。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Instapaper</strong>，配合 Instapaper、IFTTT、Cubox、Readwise 使用，收藏网页。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">沉浸式翻译</strong>，阅读部分外文网站时使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">1Password</strong>，配合 1Password 使用，自动注册或自动填充登录。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Vimium C</strong>，Vim 快捷键进行网页浏览。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Whistle 规则管理</strong>，配合 Whistle 开发时使用，Proxy SwitchyOmega 的替代品，预计 2024 年 6 月 Chrome 将停用 Manifest V2 扩展，那么 SwitchyOmega 将不再可用。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">终端
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Warp</strong>，开箱即用，颜值也不错，最重要的是完全不需要自己去折腾各种配置和插件，代替了之前自己使用了很久的 iTerms。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">命令行工具
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">oh-my-zsh</strong>，用的比较多的是 git alias、git 插件、zsh-autosuggestions 插件。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">tig</strong>，命令行 Git 增强工具，用的很多。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Homebrew</strong>，Mac 必备的软件管理工具。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">musicfox</strong>，命令行听歌工具，因此电脑上没有装音乐软件，通过 Vim 快捷键可以操作，还可以连接 Last.fm。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">nvm</strong>，管理 node 版本。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Scrcpy</strong>，安卓开发时使用，一般使用真机配合 Scrcpy 投屏，方便电脑操作或录制。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">版本管理
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">GitKraken</strong>，一般较复杂的项目和场景下才会用，比如包括很多 submodule，或者需要溯源很长的 commit 的历史去查某个地方的变动，否则直接用 tig。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">网络调试
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Whistle</strong>，工作中最常用的软件，可以查看 raw、配置代理、保存/还原现场、模拟/重放请求、拦截修改回包，灵活方便、简直万能。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Chrome</strong>，常规场景就是用代理软件开发本地项目，除了 Devtools 偶尔还会用 inspect 调试真机，或者用 net-log 定位更深层次的网络问题。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Safari</strong>，调试 iOS 真机的 JSCore 或 WKWebView 会使用。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">其他
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Linear</strong>，一个 Issue 管理软件，可以给 Project 设置里程碑并展示 Roadmap，也有工作量评估和时间预测功能，可配合 IFTTT 同步到 Todoist，自行安排项目管理时会使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">控制台</strong>，抓 iOS 客户端日志用，类似于 LogCat。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Perfdog</strong>，性能测试软件，分析卡顿时常用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Xcode Instruments</strong>，性能测试，分析耗时堆栈时常用。</section></li></ul>
</section></li></ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">🏚 其他</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">📷 图片处理：<strong style="font-weight: bold; color: #333; line-height: 2 !important;">Pixelmator Pro</strong>，好像是限免入的，软件功能强大、体验流程、操作便捷。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">💰 财务管理：<strong style="font-weight: bold; color: #333; line-height: 2 !important;">Money Things</strong>，配合移动端使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">🔐 安全工具：<strong style="font-weight: bold; color: #333; line-height: 2 !important;">1Password</strong>，统一管理密码和各种证件、license，内置双重验证工具、Passkey、SSH 代理。</section></li></ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; font-weight: bold; margin: 1em 0; color: #333; font-size: 1.2em; line-height: 2 !important;"><span class="prefix" style="display: none; line-height: 2 !important;"></span><span class="content" style="line-height: 2 !important;">手机软件</span><span class="suffix" style="display: none; line-height: 2 !important;"></span></h3>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; list-style-type: disc; margin: 1em 0; color: #333; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">📝 记录
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">世界迷雾</strong>，把生活过成探险家模式，因为这个软件不知道绕了多少路，但成就感满满。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Rond</strong>，被动的停留地点记录。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">一生足迹</strong>，被动的移动轨迹记录。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Day One</strong>，日记记录，详见<a href="https://blog.ursb.me/posts/weekly-19/" style="word-wrap: break-word; color: #313131; text-decoration: none; font-weight: normal; border-color: inherit; border-bottom: 1px solid #ccc; outline: 0; line-height: 2 !important;">周刊（第19期）：日记的意义</a></section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Daylio</strong>，每日心情记录。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">豆瓣</strong>，书影音记录，部分豆瓣小组也不错，每日豆瓣也会推荐，可以 RSS 订阅。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Money Things</strong>，之前体验过许多记账软件，最终选择 Money Things，支付计划、自动化记账、场景管理、快捷记录、开销统计做的很不错，也有桌面端。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">📖 阅读
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">微信读书</strong>，一般用 iPad 或者 Leaf2 看。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Readwise Reader</strong>，配合桌面版使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Unread</strong>，RSS 阅读器，免费，且移动端体验比 Reeder 做的要好。缺点是没有桌面端，桌面端 RSS 阅读可以选用 Web 版或者 Reeder。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Cubox</strong>，配合桌面版使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">滴墨书摘</strong>，看实体书时使用，OCR 录入文字很方便，之后再导入到 Readwise 里。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">🧰 效率
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Fantastical</strong>，配合桌面版使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Apple Calendar</strong>，配合 Fantastical 使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Todoist</strong>，配合桌面版使用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Drafts</strong>，配合桌面版使用，但移动端快速输入体验也非常优秀。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Niagara Launcher</strong>，Android 机必装软件，提高首屏启动 App 的效率。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">🌍 网络
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Arc Search</strong>，用手机快速查东西的时候会用它，将默认搜索引擎替换成了 Perplexity。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Readwise</strong>，配合桌面阅读使用，移动端则是方便定期回顾。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">🏸 运动
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">健康</strong>，偶尔记录心情和体重，查看身体指标变化趋势。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">健身</strong>，运动时用，合并圆环的设定很好。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">WorkOutDoors</strong>，可以导入路书，相较于健身更适合有路线的户外运动，如徒步、骑行等。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Grow</strong>，图表统计很好看。</section></li></ul>
</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;">🛍 出行
<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: #333; list-style-type: square; margin: 0; line-height: 2 !important;">
<li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">彩云天气</strong>，对雨水的实时预报较为精准，无奈免费版广告实在是太多了。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">Apple Map</strong>，开车时偶尔会用，较高德地图而言，实时位置更精准，且可以和 Watch 联动。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">高德地图</strong>，之前对比过百度地图和腾讯地图，高德堵车预测更加精准、路线推荐更加合理，城区红绿灯展示也很实用。</section></li><li style="line-height: 2 !important;"><section style="margin: 1em 0; text-align: left; color: rgb(1,1,1); margin-top: .3em; margin-bottom: .3em; font-weight: normal; line-height: 2 !important;"><strong style="font-weight: bold; color: #333; line-height: 2 !important;">航旅纵横 Pro</strong>，航班信息齐全且更新及时，各种通知的及时性比现场播报还要快。</section></li></ul>
</section></li></ul>
]]></content:encoded></item><item><title><![CDATA[月刊（第25期）：爱具体的人]]></title><guid>https://airing.typlog.io/posts/weekly-25/</guid><link>https://airing.typlog.io/posts/weekly-25/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sun, 17 Mar 2024 07:53:52 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二四年一月至三月的生活记录与思考。</p>
<p>鸽了两期没有更新，从过年至今为止的假期和周末一直在准备着 T11 答辩，这周答完了算是暂时解脱了，空闲的周末又回来了。</p>
<p>前两天参加了一个司内的 TED 演讲，演讲前一晚准备了下 PPT，当天对着 PPT 练了两遍流畅性和节奏就直接上去讲了。我一直认为演讲不需要稿子，重要的是台风稳，需要根据听众的反应去动态调整要讲述的内容和节奏。但距离我上次在台上讲话已过去整整六年，刚开始上台还有些紧张，但随着状态渐入佳境，未曾想到最终居然拿了个冠军。意外之余，更多的是欣喜。</p>
<p>这期内容则是以文字的形式记录下我这次演讲的主题——《爱具体的人——研发质量保障的人文关怀》（已做脱敏处理）。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.001.jpeg" alt="爱具体的人——研发质量保障的人文关怀.001.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>如果你现在面临一个选择，一边是个别的无法复现的用户反馈，另一边是亟待上线的 Feature。那么基于定语的限制与 ROI 的考虑，我想大多数人、也包括我，会毫不犹豫地选择优先做需求。那么希望听完这次演讲，大家可以对这个毫不犹豫的选择产生一点点的思考。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.002.jpeg" alt="爱具体的人——研发质量保障的人文关怀.002.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>在我们业务场景下，用户的反馈率是相当低的，当然这一定程度上是因为业务体量大、分母大，但这并不意味着用户的反馈就不值得优先关注。如果用户的反馈不能及时得到解决，那么用户会极易暴躁。就像我这前两天刚截的图，但其实还有更多类似的反馈，言语实在难登大雅之堂。那么这个时候在我看来，这个用户和产品的纽带已经变得愈发僵硬了。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.004.jpeg" alt="爱具体的人——研发质量保障的人文关怀.004.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>但其实只要认真去观察，可以发现绝大多数用户第一次反馈的言辞其实是友善且恳切的。因为用户喜欢这款产品，所以他遇到问题才会反馈。他的初衷是希望自己的问题得到解决，他希望去帮助我们改进这款产品，让它变成更好的样子。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.005.jpeg" alt="爱具体的人——研发质量保障的人文关怀.005.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>我再举一个例子，前几天我灰度了一个技术容器，监控发现有个接口报错了几次。我赶紧去查了一下，因为这个接口的报错会导致用户直接进不了游戏，发现这两天这个错误只影响到了两个用户。针对其中一个用户捞日志上报，发现出现这个问题之后，他每天早上、中午、晚上每隔几个小时都会去尝试登录游戏。很遗憾，他每次都无法登录，但他依然在尝试。我可以感受到他焦急的心理，于是当天晚上优先处理了这个问题。</p>
<p>在这里我不是想说这个 Bug 多严重多隐蔽什么的，而关键的点在于，这个用户从始至终，他都没有反馈过。那我们可以想象，如果这个问题一直被忽略，我们就必然会流失这两个用户。而即便他们流失了，我们在大盘上也永远发现不了这个事实。因为这个分子，微乎其微，甚至还无法在转化率曲线上留下一丁点数值上的波动。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.006.jpeg" alt="爱具体的人——研发质量保障的人文关怀.006.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>那么对于有反馈的人呢，如果我们解决了他们的问题，他们会回馈以我们感谢、表扬、鼓励。这个时候我能真正感受到屏幕后面的反馈是一个一个活生生的人，而不是 UID + UserAgent 的标签而已。其实我身边也有长辈使用我们的产品，那么想象下，当自己的长辈遇到送礼送不出去的问题、好不容易完成任务却无法领奖、想玩游戏却无法登录，我们又该会去怎么处理它呢？</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.007.jpeg" alt="爱具体的人——研发质量保障的人文关怀.007.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>Altman 在斯坦福大学商学院上有一门创业课程，他里面提到了两个点我感触很深。</p>
<p>第一个是「感性」，他指出我们不应该以纯理性的视角去分析我们产品，不应该只关注大盘、DAU、转化率、留存、ARPPU——而应该去掺杂一些感性，以感性的角度出发去思考产品的增长。产品和用户之间的关系，应该类似于一种相亲关系、或是婚姻关系，应该去打造、维护、经营产品和用户之间长期友善的关系。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.008.jpeg" alt="爱具体的人——研发质量保障的人文关怀.008.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>第二词是「尊重」，他举了一个 WUFOO 的例子，是一个做在线表单的产品。他们团队仅 10 个人，要服务 50 万个用户，每周有 1000 多的问题需要去解决。而他们每周会安排专门的人去滚动这些问题，争取每周清零。他们对用户的尊重，值得尊重。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.009.jpeg" alt="爱具体的人——研发质量保障的人文关怀.009.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>这让我想到了我上学时用心打磨的一款产品，在反馈区中收获了用户们的喜爱、支持和溢美之词。这些反馈反哺着我对于研发的热爱、对于打造好产品的执着。以至于这么多年后我再想到这些反馈，心中仍然是暖暖的，充满信念和力量。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.010.jpeg" alt="爱具体的人——研发质量保障的人文关怀.010.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>最后一个关键词，是「意义」。最近看了一本书，叫《有限与无限的游戏》，作者将这世间人类参与的行为都比作游戏，而这些游戏又可以分为有限与无限的两种。而后者的意义感和价值感更加强烈。</p>
<p>回到演讲开头的那个场景，其实稍微转换一下视角来看，会得到一个完全不一样的答案。如果我们只是从外而内，逐步去推进需求，然后去解决问题，目的是为了打造好产品，那么这有一个明确的终点和可复制的周期性，是一个有限的游戏。</p>
<p>但如果反过来呢？我们如果是抱着打造好产品的信念去推进需求解决问题，在这种情况下的内驱力是无比强大的，从内而外地发展，这拥有着无限的可能性。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.011.jpeg" alt="爱具体的人——研发质量保障的人文关怀.011.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>说了这么多，总结一下，我们应该从真实的用户体验出发，关注当下每一个用户，友善地去连接产品与用户之间的关系。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.012.jpeg" alt="爱具体的人——研发质量保障的人文关怀.012.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>这一大段话，如果浓缩成一句话，那就是大家耳熟能详的——「一切以用户价值为依归」。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.013.jpeg" alt="爱具体的人——研发质量保障的人文关怀.013.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><p>谢谢大家。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/%E7%88%B1%E5%85%B7%E4%BD%93%E7%9A%84%E4%BA%BA%E2%80%94%E2%80%94%E7%A0%94%E5%8F%91%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9C%E7%9A%84%E4%BA%BA%E6%96%87%E5%85%B3%E6%80%80.014.jpeg" alt="爱具体的人——研发质量保障的人文关怀.014.jpeg"loading="lazy" decoding="async" width="1920" height="1080" /></picture></figure></div><h2>🌺 生活点滴</h2>
<p>以下是本周期内一些瞬间的记录。</p>
<p>🏮 春节假期：月是故乡明</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/wj25/4111710590875_.pic.jpg" alt="4111710590875_.pic.jpg"loading="lazy" decoding="async" width="1702" height="1276" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/4101710590872_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/4101710590872_.pic.jpg" alt="4101710590872_.pic.jpg"loading="lazy" decoding="async" width="1280" height="1280" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/4091710590872_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/4091710590872_.pic.jpg" alt="4091710590872_.pic.jpg"loading="lazy" decoding="async" width="1276" height="1276" /></picture></figure></div><p>🛫 返程：在飞机上拍到了广州塔</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/4081710590871_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/4081710590871_.pic.jpg" alt="4081710590871_.pic.jpg"loading="lazy" decoding="async" width="1280" height="1707" /></picture></figure></div><p>🇭🇰 香港：去香港办了张银行卡</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/4151710590881_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/4151710590881_.pic.jpg" alt="4151710590881_.pic.jpg"loading="lazy" decoding="async" width="1280" height="1707" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/4161710590882_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/4161710590882_.pic.jpg" alt="4161710590882_.pic.jpg"loading="lazy" decoding="async" width="1280" height="1280" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/4141710590879_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/4141710590879_.pic.jpg" alt="4141710590879_.pic.jpg"loading="lazy" decoding="async" width="1276" height="1702" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/4131710590878_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/4131710590878_.pic.jpg" alt="4131710590878_.pic.jpg"loading="lazy" decoding="async" width="1276" height="1702" /></picture></figure></div><p>🌇 夕阳：日落黄昏后</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/4071710590867_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/4071710590867_.pic.jpg" alt="4071710590867_.pic.jpg"loading="lazy" decoding="async" width="1280" height="1707" /></picture></figure></div><p>🏆 突出个人与 TED 演讲</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/4041710590865_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/4041710590865_.pic.jpg" alt="4041710590865_.pic.jpg"loading="lazy" decoding="async" width="1080" height="1920" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/4051710590866_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/4051710590866_.pic.jpg" alt="4051710590866_.pic.jpg"loading="lazy" decoding="async" width="1440" height="1080" /></picture></figure></div><p>🐱 手套：依旧憨憨的</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/4121710590877_.pic.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/4121710590877_.pic.jpg" alt="4121710590877_.pic.jpg"loading="lazy" decoding="async" width="1280" height="1707" /></picture></figure></div><h2>🎬 书影音</h2>
<p>以下是本周期的书影音记录。</p>
<ul>
<li>读完：心理学 |《存在主义心理治疗》| ★★★★★</li>
<li>读完：理财 |《慢慢变富》| ★★★★☆</li>
<li>读完：哲学 |《有限与无限的游戏》| ★★★★★</li>
<li>读完：漫画 |《亲爱的我饱含杀意》| ★★★★★</li>
<li>看完：电影 |《飞驰人生2》| ★★★★☆</li>
<li>看完：电影 |《一个母亲的复仇》| ★★★☆☆</li>
<li>看完：电影 |《三大队》| ★★★★☆</li>
<li>看完：电影 |《漫天过海》| ★★★☆☆</li>
<li>看完：电影 |《交换人生》| ★☆☆☆☆</li>
<li>看完：美剧 |《洛基2》| ★★★★☆</li>
<li>看完：剧集 |《猎冰》| ★★☆☆☆</li>
<li>看完：剧集 |《如果奔跑是我的人生》| ★★★☆☆</li>
<li>看完：日漫 |《物理魔法使—马修(第1季)》| ★★★★☆</li>
<li>看完：日漫 |《咒术回战2》| ★★★★★</li>
<li>在看：日漫 |《葬送的芙莉莲》| ★★★★★</li>
</ul>
<p>强推《葬送的芙莉莲》🎉</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/wj25/Capture-2024-03-17-145239.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/wj25/Capture-2024-03-17-145239.jpg" alt="Capture-2024-03-17-145239.jpg"loading="lazy" decoding="async" width="1075" height="720" /></picture></figure></div>]]></content:encoded></item><item><title><![CDATA[2023，逃离仿徨]]></title><guid>https://airing.typlog.io/posts/summary-2023/</guid><link>https://airing.typlog.io/posts/summary-2023/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sun, 14 Jan 2024 10:42:58 +0000</pubDate><content:encoded><![CDATA[<p>又是一年总结时，自开始写年终总结以来，这已是第六年，年龄也悄无声息地往 29 迈去。在这个年龄感觉到了焦虑和彷徨，以至于生日那天都没有在朋友圈里透露半点风声，我才理解到小时候那时无法理解到的——为什么有人会不喜欢过生日。</p>
<p>这一年在工作上经历了彷徨和迷茫，寻求改变的过程非常曲折，而我也思考了许多、做了许多努力去逃离这份彷徨。因此今年的主题，就叫做「逃离彷徨」吧。</p>
<h2>生活</h2>
<p>每年的年终总结第一个环节都是工作，但是这次不一样了。今年，先写生活。</p>
<h3>恋爱</h3>
<p>喜大普奔，今年终于脱单了！这是今年最重要的收获了，所以第一个写。之前一直没有官宣过，因为我觉得感情的事情是私事，无必大庭广众下同外人说起。所以呢，这个环节就到这里啦~</p>
<h3>交际</h3>
<p>本科上铺+舍友+同组同事 Zyktrcn 离职了，带着小熊猫回了广州。说实话心里有些空落落的，自工作以来结识的朋友最后都走的走、散的散。之前的好兄弟舍友，他女友每天抱着泡芙玩，他们一起去了苏州；学习小组的 Wall-E 和 Ellia 离开了；大姐大 Sara 走的这两年，组里的重担都落在我肩上了，工作时偶尔看到以前同事 commit 的代码，总能想到那几年组里欢乐的时光。</p>
<p>或许真如告别酒桌上领导说的那句话——“聚是一团火，散是满天星”，大家分散在世界各个角落里，散发着光和热。</p>
<p>人生如逆旅，但我希望大家不会只是过客。</p>
<p>今年还搬了家，搬家前最后拍了下阳台的风景，依旧绝美——</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/WechatIMG67.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/WechatIMG67.jpg" alt=""loading="lazy" decoding="async" width="1440" height="902" /></picture></figure></div><h3>旅行</h3>
<p>今年去了不少地方旅行。</p>
<p>👪 大鹏：春节期间家人过来深圳过年，带他们逛了大鹏半岛。</p>
<p>🍺 北京：年初去的，出差去听个会，见到了很多年没有见的老朋友，在冬日北京的巷子里散步，谈笑着这些年的经历。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/2023/WechatIMG70.jpg" alt=""loading="lazy" decoding="async" width="1707" height="1280" /></picture></figure></div><p>🐚 惠州双月湾：和女友的第一次旅行，在海边捡了很多贝壳。</p>
<p>⛰ 福鼎：端午请了很多天假，在深山的旅馆里<del>修行</del>，别有一番意境。</p>
<p>🐂 顺德：逛了下清晖园，清晖园附近的牛杂贼好吃，后来从珠海旅行回来时还特地绕路吃了一顿。</p>
<p>🐬 珠海长隆：国庆前周末玩了一趟，去了长隆新开的宇宙飞船，愉快的经历（但是胆小没坐过山车）</p>
<p>🎏 清远-英德-从化：国庆自驾游路线，清远漂流出乎意料得很好玩！</p>
<p>🌊 巽寮湾三角洲岛：10 月底部门团建，岛上物资匮乏，帆船上很容易出片。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/2023/WechatIMG65.jpg" alt=""loading="lazy" decoding="async" width="1707" height="1280" /></picture></figure></div><p>👻 长沙：自驾去的，来回开了 20 个小时…印象深刻的反而不是长沙的美食，而是深夜开车听着鬼故事，结果在国道里真的路过了公墓。</p>
<p>🎰 广州：找高中同学玩，VR 打僵尸、抓娃娃、密室逃脱，非常非常非常开心！</p>
<h3>好物</h3>
<p>分享下今年新入的好物。</p>
<ul>
<li>Steam Deck：吃灰了，但是 SD 抱在手里的一瞬间，哪怕还没有启动游戏、哪怕还没有想好要玩什么游戏，就已经感觉到很快乐了。那种游戏库整个把握在手里的感觉，简直就是童年的梦。</li>
<li>BOOX Left2：Kindle Oasis 几年，唯一的缺点就是看微信读书不方便，所以换了外观相似的 BOOX，很中意它们的物理翻页键。用了半年，中途开不了机返厂修了一次。而对比下 Kindle 的两台设备用了很多年也没有坏过…</li>
<li>Insta360 GO 3：贼可爱的小相机，每次旅行必带它，所幸直接放在车里了。挂在脖子上可以去漂流，带着三脚架可以拍 vlog，软件自带的自动剪辑也很方便，简直不要太完美。唯二的缺点——一个是夜景实在拉胯，入夜之后属于不能看的状态，晚上只能手机录；另一个是内置存储，无法扩展存储，同时导出素材有点麻烦。</li>
<li>碧云泉饮水机：很便捷，直出任意温度矿泉水，冲茶装水都很方便。后悔知道的晚了。</li>
<li>戴森吹风机：很好用，女友的说法是碾压其他吹风机，再也不用护发素。</li>
<li>AirPods Pro2(USB-C)：之前的 Pro1 被洗衣机洗了一遍，虽然勉强还能听，但是降噪失效了，且偶尔会有杂音，趁着今年出了 USB-C 的新款换了一下。</li>
<li>莫曼顿助力自行车：每天上下班的代步车，三档助力可调，续航 35 KM 左右，正好够我一周上下班（上坡的时候和开挂一样）；不开电的时候也可以当自行车，有七档变速，缺点是不开电的时候有点难骑。</li>
</ul>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/2023/WechatIMG69.jpg" alt=""loading="lazy" decoding="async" width="1707" height="1280" /></picture></figure></div><h3>试驾</h3>
<p>今年陪不同朋友去试驾了几辆车，谈谈我个人的感受。</p>
<ul>
<li>问界 M5：体验智驾的时候翻车了，该转弯的时候没变道成功，直接直行了。而且我不太喜欢它的内饰，有点老气。</li>
<li>阿维塔 12：颜值是长在了我的审美上，但电子后视镜的距离感很难把握（可以不选）。没有 HUD。</li>
<li>保时捷 718：颜值爆炸好看，但是深圳已经见到很多了，车库里的保时捷和特斯拉都能在一起玩三消了。坐姿舒适，驾驶的运动感很强，但内饰还是上个年代的，音响也就听个响，不超过 100 迈的时候开起来很抖，而且噪音太大。可惜的是没有体验到 SC。</li>
<li>蔚来 ET5T：颜值不错，驾驶感也很棒，兼具运动和舒适。nomi 也很可爱，但 ET5 没有 HUD。同时驾驶位坐姿偏高，倒车镜挡住了 1/4 的视野，耗电也相对严重些，续航一般。但蔚来可换电，而且坐姿偏高对 SUV 车型影响也不大，后续可能会考虑再试下 EC8 或者 ES8。</li>
</ul>
<h3>运动</h3>
<p>今年坚持打球（和女友也是打球认识的），共打了 59 场球，勉强不是个菜鸟了。号称前场雨刮器，后场也能打高远了。</p>
<p>还去爬了一次塘朗山。</p>
<p>整体而言，运动以后比以前的状态好了特别多。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/WechatIMG64.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/WechatIMG64.jpg" alt=""loading="lazy" decoding="async" width="1242" height="2534" /></picture></figure></div><h3>情绪</h3>
<p>今年依旧每天写心情日记，今年的 iOS 17 还出了「手记」和健康里的「心理状态」，是我一直想做的 App。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/WechatIMG71.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/WechatIMG71.jpg" alt=""loading="lazy" decoding="async" width="1072" height="1285" /></picture></figure></div><p>今年的情绪图如下，处理六月那段时间比较艰难之外（后文讲到工作再提），其余时间都是保持着小确幸的。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/WechatIMG79.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/WechatIMG79.jpg" alt=""loading="lazy" decoding="async" width="1068" height="1776" /></picture></figure></div><p>为什么坚持记录心情，这个点在《<a href="https://blog.ursb.me/posts/weekly-19/">月刊（第19期）：日记的意义</a>》里已经深入阐述过了——记录是防止信息流失的方法，也是防止自己流失的方法。记录自己的生活，是为了让生活形成整体。</p>
<p>在「豆瓣2023年度社区故事」的介绍语里有这样一句话，很时候作为这个「生活」模块的结尾——“我们认真投入生活本身，用爱意与目光，穿透最具体的细节，在果壳做的微型宇宙里为自己加冕。”</p>
<h3>猫猫</h3>
<p>手套和泡芙很好，尤其是手套——每天除了睡（而且是躺尸睡姿）就是吃（而且是埋头干饭，恨不得整个头都塞进猫碗里）。</p>
<p>泡芙还是很调皮，但现在听话很多，喊它至少会回应你了。</p>
<p>手机没有存货，刚现场拍了一张：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/2023/WechatIMG75.jpg" alt=""loading="lazy" decoding="async" width="1702" height="1276" /></picture></figure></div><h2>学习</h2>
<p>今年是大模型 AI 之年，借助 AI 和一些软件以及自己的工作流，摄取知识的效率更高了。这里简单介绍下我的工作流和方法。</p>
<p>在 2022 年的《<a href="https://blog.ursb.me/posts/weekly-16/">月刊（第16期）：个人信息流分享</a>》一文中，介绍过自己的信息处理模式，2023 年有一些辅助性上的改动，这里介绍一下。</p>
<p>首先对白板工具更完善的使用——LogSeq、Obsidian、Heptabase 都支持白板和 Readwise 集成（Muse 、无边记、GoodNotes 等软件不支持 Readwise 集成，这里就不介绍了），整理标注和笔记的输出时可以使用白板辅助整理思路。工作时很多方案文档以及今年的月刊都是以这种模式进行运作的。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240114152239.png" alt=""loading="lazy" decoding="async" width="2558" height="1688" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240114152314.png" alt=""loading="lazy" decoding="async" width="2558" height="1688" /></picture></figure></div><p>其次，在打草稿梳理研究思路的时候，我更喜欢用 Excalidraw，在 《<a href="https://blog.ursb.me/posts/weekly-24/">月刊（第24期）：  十年编程之路</a>》里介绍过使用经历，这里不再赘述了。有时候我针对一个专题的研究能写出 200 多 MB 的图谱，但同时 Excalidraw 却一点也不卡，配合顺手的快捷键，用起来得心应手。</p>
<p>至于 AI 软件的推荐，首推 OpenAI Plus，之后是 Perplexity、DALLE-3、Poe。但是这几款对 IP 都有要求，可以考虑微软云服务器做代理。这里重点推一下 Perplexity，基本上它在我这里已经取代了 Google，它会结合搜索引擎的结果进行回答，同时也支持识别 PDF 文件和图像，GPT-4 的回答质量非常之高：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240114153100.png" alt=""loading="lazy" decoding="async" width="2174" height="1904" /></picture></figure></div><div class="blockquote"><blockquote><p>Perplexity 的免费版也足够使用（免费版只是不能用 GPT-4 而已），如过注册的话可以使用这个链接 →  <a href="https://perplexity.ai/pro?referral_code=0ZSAD0VT">https://perplexity.ai/pro?referral_code=0ZSAD0VT</a> ，未来如果想要付费的话可以得到 $5 的抵扣。</p>
</blockquote></div>
<p>如果没有条件翻墙的话，可以使用 Raycast AI，目前对网络没有限制，支持 GPT-4 等多个模型，一般深度对话我会使用它（一共三台设备，这是工作电脑的 Raycast AI 的使用记录）：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/raycast-2023-2.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/raycast-2023-2.jpg" alt=""loading="lazy" decoding="async" width="1374" height="870" /></picture></figure></div><p>除此之外，它还可以通过 Prompt 自定义 AI 命令，以下是我常用的一些命令：比如提取 WeChat Bot 返回的 JSON 配置、JSON 压缩、输入 URL 总结网页内容、根据 JCE 协议转 ts interface 或者 直接 Mock 出数据以便 Whilstle Mock Response ——</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240114153518.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240114153518.png" alt=""loading="lazy" decoding="async" width="1486" height="702" /></picture></figure></div><p>当然抛开 AI 能力，Raycast 本身也是一个足够优秀的软件，工作电脑使用记录如下（通过 Raycast 打开 Arc 用了 2.3万次，打开终端 2k 次）：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/raycast-2023-1.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/raycast-2023-1.jpg" alt=""loading="lazy" decoding="async" width="1374" height="870" /></picture></figure></div><p>如果想体验，可以使用这个链接进行注册：<a href="https://raycast.com/?via=airing">https://raycast.com/?via=airing</a></p>
<p>还有 《<a href="https://blog.ursb.me/posts/weekly-23/">月刊（第23期）： 多任务中的时间管理</a>》 一文中推荐过的 Rize，对于培养专注和免分心有一定的效果，可以使用 <a href="https://rize.io?code=291287">https://rize.io?code=291287</a> 链接注册免费体验一个月（仅 Mac）。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231006123244@2x.png" alt=""loading="lazy" decoding="async" width="2696" height="1736" /></picture></figure></div><p>还有 Arc 如今也取代了 Chrome 和 Safari 成为我主力浏览器，树状标签、自定义空间、分屏浏览、AI 重命名都是很实用的功能。不知道现在还是不是邀请制了，但可以直接使用 <a href="https://arc.net/gift/ab29c0b8">https://arc.net/gift/ab29c0b8</a> 链接注册体验：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240114154311.jpg" alt=""loading="lazy" decoding="async" width="2071" height="1074" /></picture></figure></div><p>今年使用 IFTTT 和它的 AI 能力自动化了我的信息流：</p>
<ul>
<li>IFTTT 注册了我在 inoreader 上的订阅更新，如果有固定的关键词触发了（比如「年度总结」），会直接收录到 Cubox 并通知到 <a href="https://t.me/airingchannel">Telegram 群</a>里。</li>
<li>Rize 每日的专注邮件会转发给 inoreader，之后 IFTTT 监听，如果有 Rize 的邮件，就会使用 IFTTT AI 自动总结今日的时间报告发到群里。</li>
</ul>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/WechatIMG72.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/WechatIMG72.jpg" alt=""loading="lazy" decoding="async" width="1080" height="829" /></picture></figure></div><ul>
<li>我会收藏一些优秀的文章到 Cubox 里，通过 Webhook 触发到 inoreader 订阅，之后再由 IFTTT 转发到 <a href="https://t.me/airingchannel">Telegram 群</a>里。对于文章本身，IFTTT AI 也会给予总结。</li>
<li>利用 IFTTT 和 Github Action 还做了每周编程报告，Action 通过 API 拉 WakaTime 的上周数据，之后 IFTTT 总结发到群里。</li>
<li>同理，利用 Action + IFTTT 还做了对 last.fm 的收听报告的总结。</li>
<li>GitHub Star、豆瓣动态、微博动态也交由 IFTTT 订阅了。</li>
<li>每次发布博客也交由 IFTTT 监听对应的 RSS，有博客更新也会通知到群里。</li>
</ul>
<p>今年还体验了 Notion AI，但是没几天就弃坑了。</p>
<p>Notion 年底支持了 Q&amp;A Beta，它的理念非常好，可以基于自己的 Notion 知识库进行 AI 问答。好不容易申请到了 Beta 体验资格，效果如下：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/WechatIMG73.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/WechatIMG73.jpg" alt=""loading="lazy" decoding="async" width="1280" height="965" /></picture></figure></div><p>但是深度使用之后发现，它对于问题的要求非常苛刻，有时候稍微偏一点它搜不到就不会回答。同时他也不能指定知识库作为答案源，回答的质量并不算很高（明显弱于 GPT-4，上下文逻辑性不强），大部分时候不如自己直接搜索，对于回答的结果只能是一个参考性的价值。只能说目前的成熟度还是不够。</p>
<h2>工作</h2>
<p>接着转化心情，谈一谈工作吧，也是今年「逃离彷徨」主题的由来。</p>
<p>年初 2-3 月时在对未来的工作进行规划时产生了迷茫，之后 5-6 月阳了之后对这种迷茫集中爆发了。虽然我富满激情、虽然我能者多劳、虽然我绩效优异、虽然我履历光鲜，但是这两年我始终无法直面自己的内心——目前的工作内容真的是我喜欢做的事情吗？我只是为了这份不错的薪资和工作中领导、同事对我的肯定，我才一直一直尽全力把工作做到最好。</p>
<p>自 Flutter 项目结束之后，工作上已经没有新的项目能够让我燃起激情了。虽然负责过不少重点项目，但回顾过去两年做的事情，其实都没有给自己带来预期之内的进步。琐碎、简单、单调可以称之为这两年工作的主旋律。</p>
<p>最终在深思之后，我提出了离职。在给领导的信（也叫辞呈吧）中，我这么写道——</p>
<p>「现在我要攻克这个阶段的迷宫，关键在于我要克服自己的心态，但是即便我通关了我所处的迷宫，迷宫劣化的问题依然存在，如果我无视问题的存在，只是调整自己心态进入到下一关，那我只会变得越来越麻木——遇到项目机器人似地高效处理，那我便不再是自己了，我的性格特点将会被磨灭，我所喜欢的、所追求的、所热爱的梦想，也总有一天会在无休止的迷宫闯关中消失殆尽。想到卡明斯说过的一句话：“这个世界日以继夜、竭尽全力让你成为其他人，如果你想做你自己，就意味着要打一场最艰难的仗。“我只想保持自己，这是我的底线。</p>
<p>为了不让自己迷失，18 年开始我每年都会写年终总结，我知道紧握初心不迷失的关键在于要不断自省、反思，之后再从中展望未来。您应该也发现了，我更适合研究型、科研型的工作，因此 Flutter 我可以做的很好，因此哲学论文我也可以写的很棒，再之前也一直如此。比如大三时候可以独自一人住在实验室三天，搞一个机器人项目，可有意思了。回想起来，貌似很久很久没有体会到技术带给我的激情了。除此之外，因为人生经历的原因，我也想追求丰富的人生体验，不会为自己不喜欢的项目去投入 100% 的精力。」</p>
<p>我未曾想到的是，领导竟同意了我离职——他说如果其他人的话他会尝试去挽留，但若是我的话，他能够理解并且给予支持。无论今后如何，他都会支持我。</p>
<p>其实那天早上和他的对话让我解开了这些年的心结，我一直不舍得走更多的原因是看重领导的栽培以及和同事的关系，殊不知它们已成为系紧我的枷锁。但</p>
<p>我所看重的一切，它们并不是枷锁，而是支持我前进的力量。</p>
<p>最终今年并没有离职，因为被上面的领导留了三次，最后决定转组调整项目再试一下。</p>
<p>调整之后得到的成长还是蛮多的——比如业务感，懂得 ABT 实验数据，知道盘子画像对数据的影响，有意识地去通过尽可能多的技术手段去提升某些业务指标，也会通过各种维度去挖掘数据背后的归因。</p>
<p>除此之外还有一些技术上的成长——深入学习了 Cocos 渲染，并写了 C++ 库在项目的游戏引擎上集成了 GFX 模块。还通过这个项目接触了 Android 开发，实现了资源包不同的加载模式，并从零完善并落地了 iOS 的游戏引擎，有机会对 iOS 开发、C++ 开发进行项目实战。</p>
<p>自此之后，基本什么都敲——JS、iOS、Android、C++，一个人调试游戏引擎的全链路，96G 内存的 iMac 也逐渐带不动了。</p>
<p>PS. 某周 WakaTime 的编程统计：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/536246ac76ccd45f8e4c29b8b7184b88.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/536246ac76ccd45f8e4c29b8b7184b88.jpg" alt=""loading="lazy" decoding="async" width="1306" height="432" /></picture></figure></div><p>我不能说这是机遇，我只能很庆幸，一路上遇到的都是贵人——他们给予我理解、肯定与支持，让我不再彷徨。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/WechatIMG66.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/WechatIMG66.jpg" alt=""loading="lazy" decoding="async" width="1080" height="1451" /></picture></figure></div><p>在这过程中并没有丢失掉这些年一直以来的初心，我一直愿景着通过手上的技术给社会带来福祉，虽然目前能做的不多，但申请加入了 W3C 无障碍工作组，也算是迈出了第一步吧。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/WechatIMG74.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/WechatIMG74.jpg" alt=""loading="lazy" decoding="async" width="1506" height="1080" /></picture></figure></div><p>今年公司还给做了一套 IDP 职业测评，我的数据如下：</p>
<p><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240114152553.png" alt="" />
抱负能量是职业发展的内核，我的成功愿望居然高达 9.8，思维和执行上也有相当不错的表现。 但与之相反地，人际互动就很低分（我果然还是很适合埋头做研究性质的工作）。</p>
<h2>写作</h2>
<p>今年一共写了 7 篇月刊，年中的时候因为工作原因停更了好几期：</p>
<ul>
<li>《<a href="https://blog.ursb.me/posts/weekly-18/">月刊（第18期）：逃离社交网络</a>》</li>
<li>《<a href="https://blog.ursb.me/posts/weekly-19/">月刊（第19期）：日记的意义</a>》</li>
<li>《<a href="https://blog.ursb.me/posts/weekly-20/">月刊（第20期）：重启人生</a>》</li>
<li>《<a href="https://blog.ursb.me/posts/weekly-21/">月刊（第21期）： 快节奏时代下的短视频</a>》</li>
<li>《<a href="https://blog.ursb.me/posts/weekly-22/">月刊（第22期）： 当下的快乐</a>》</li>
<li>《<a href="https://blog.ursb.me/posts/weekly-23/">月刊（第23期）： 多任务中的时间管理</a>》</li>
<li>《<a href="https://blog.ursb.me/posts/weekly-24/">月刊（第24期）：  十年编程之路</a>》</li>
</ul>
<p>此外，还在少数派上发表了一篇<a href="https://sspai.com/post/83743">旧文</a>，意料之外的得到很多感谢的评论：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164230.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164230.png" alt=""loading="lazy" decoding="async" width="1266" height="600" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164313.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164313.png" alt=""loading="lazy" decoding="async" width="1270" height="868" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164354.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/Pasted%20image%2020240113164354.png" alt=""loading="lazy" decoding="async" width="1224" height="726" /></picture></figure></div><p>看着这些善意的评论心里暖暖的，以前觉得写作只是记录自己的想法，不想未来的自己丢失现在的感受，而未曾想到其实自己的想法也可以影响到他人。</p>
<p>之前听闻“婴儿最快乐的时刻就是发现他自己可以对周围的世界产生影响”。在写作这种创造性的活动中，或许我也是在追求某种“存在感”，这种存在感可能就是我对世界的一点点影响和改变。</p>
<p>某天在知乎上收到了一个私信，真切地感受到写作给他人带来的帮助：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/IMG_1129.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/IMG_1129.jpg" alt=""loading="lazy" decoding="async" width="1254" height="532" /></picture></figure></div><p>之后便在月刊中鼓励读者与我写信交流，今年陆陆续续收到一些读者的来信，我也积极认真地逐一回信了。2024 年初预计启动一个读者来信计划，可以期待一波~</p>
<p>技术文章就写了两篇：</p>
<ol>
<li>《Atum 自研游戏引擎高性能探索之路》：暂未脱敏，就没发到外网了。</li>
<li>《<a href="https://blog.ursb.me/posts/cross-end/">大厂自研跨端框架技术揭秘</a>》</li>
</ol>
<p>较往年而言技术文章写的少了，一方面是因为时间分配问题，另一方面是很多内容原本想写、但觉得写完之后没法脱敏所幸就不写了——但不管怎样，技术文章这块明年需要补足。</p>
<p>大家已经发现了，今年的周刊是在新的博客上发布的。因为前段时间服务器和博客被恶意攻击产生了损失，这几天将迁移了博客到新平台 <a href="https://blog.ursb.me">blog.ursb.me</a>，并对相关资源做了加固。新博客整合了之前的小屋和月刊，小屋和月刊两个网站直接关停，目前对小屋和月刊的核心页面做了 302 处理，而评论的迁移过于麻烦就直接丢弃了。之后请直接关注新的平台，订阅博客之后也会有邮件推送新文章。</p>
<h2>书影音</h2>
<p>今年看的剧不少，以下排名按个人评分排序。</p>
<h3>剧集</h3>
<p>神作档：</p>
<ul>
<li>《重启人生》：★★★★★，心底里的六个星，每次重温都能发现温暖的小细节。</li>
<li>《漫长的季节》：★★★★★，披着悬疑片壳的文学佳作，兼具优异的叙事模式和情感内核。</li>
</ul>
<p>好评档：</p>
<ul>
<li>《<a href="https://movie.douban.com/subject/35465232/">狂飙</a>》：★★★★★，后悔现在才看。但是看的是删减版，只能下调一档了。</li>
<li>《黑暗荣耀 1 &amp; 2》：★★★★★</li>
<li>《洛基 2》：★★★★★，所以为什么时间宝石的绿色的。</li>
<li>《隐秘的角落》：★★★★★，重温的佳作。</li>
<li>《最后生还者 1》：★★★★★，本身剧本好。</li>
<li>《<a href="https://movie.douban.com/subject/35991840/">死期将至</a>》：★★★★★，意料之外的好片。</li>
<li>《<a href="https://movie.douban.com/subject/36178641/">三大队</a>》：★★★★★</li>
<li>《新闻女王》：★★★★★，中规中矩的 TVB 剧集。</li>
<li>《繁城之下》：★★★★★</li>
<li>《三体》：★★★★★</li>
<li>《凪的新生活》：★★★★☆</li>
</ul>
<p>值得一看档：</p>
<ul>
<li>《白夜追凶》：★★★★☆</li>
<li>《都挺好》：★★★★☆</li>
<li>《恶鬼》：★★★★☆</li>
<li>《<a href="https://movie.douban.com/subject/35633163/">莲花楼</a>》：★★★★☆</li>
<li>《<a href="https://movie.douban.com/subject/36212784/">别班</a>》：★★★★☆</li>
<li>《好事成双》：★★★★☆</li>
</ul>
<p>可看可不看档：</p>
<ul>
<li>《故乡，别来无恙》：★★★★☆</li>
<li>《宁安如梦》：★★★☆☆</li>
</ul>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/WechatIMG62.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/WechatIMG62.jpg" alt=""loading="lazy" decoding="async" width="1280" height="2156" /></picture></figure></div><h3>电影</h3>
<p>神作档：</p>
<ul>
<li>《蜘蛛侠：纵横宇宙》：★★★★★</li>
<li>《情书》：★★★★★</li>
</ul>
<p>好评档：</p>
<ul>
<li>《奥本海默》：★★★★★，4.5 星。本来很期待的诺兰新片，但如果没有提前看过解析，根本不知道通过黑白来转化视角的表达方式，还是太隐晦了，会导致有些云里雾里。</li>
<li>《消失的她》：★★★★★</li>
<li>《满江红》：★★★★★</li>
<li>《银河护卫队 3》：★★★★★，对于漫威而言 5 星只是及格分。但是这几年漫威在影片荧幕上没有及格的影片，这个银护 3 就显得很难能可贵了。</li>
<li>《网络谜踪 2》：★★★★★</li>
<li>《年会不能停》：★★★★★</li>
</ul>
<p>值得一看档：</p>
<ul>
<li>《保你平安》：★★★★☆</li>
<li>《孤注一掷》：★★★★☆</li>
<li>《坚如磐石》：★★★★☆，老戏骨还是老戏骨。</li>
<li>《饥饿站台》：★★★★☆</li>
</ul>
<p>可看可不看档：</p>
<ul>
<li>《八角笼中》：★★★★☆</li>
<li>《封神 1》：★★★★☆</li>
<li>《分手的决心》：★★★★☆</li>
<li>《名侦探柯南：黑铁的鱼影》：★★★☆☆，心疼琴酒。</li>
<li>《末日崩塌》：★★★☆☆</li>
<li>《人生路不熟》：★★★☆☆</li>
<li>《长空之王》：★★★☆☆</li>
<li>《流浪地球 2》：★★★☆☆</li>
</ul>
<p>烂片档：</p>
<ul>
<li>《蚁人与黄蜂女》：★★★☆☆</li>
<li>《天龙八部之乔峰传》：★★★☆☆</li>
<li>《雷神 4》：★★☆☆☆，讲了个啥？</li>
<li>《前人4：英年早婚》：★★☆☆☆</li>
<li>《Nope》：★★☆☆☆</li>
<li>《变形金刚：超能勇士的崛起》：★★☆☆☆，特效不错</li>
<li>《鹦鹉杀》：★☆☆☆☆，打一星是因为最差只能打一星</li>
</ul>
<h3>动漫</h3>
<ul>
<li>《咒术回战 1 &amp; 2》：★★★★★，刚粉上五条悟漫画里就被腰斩了…</li>
<li>《三体（动画版）》：★☆☆☆☆，看一半弃了，看下去的动力居然是评论区和弹幕的调侃</li>
</ul>
<h3>阅读</h3>
<ul>
<li>《存在主义心理治疗》：★★★★★</li>
<li>《人类灭绝》：★★★★☆</li>
<li>《消失的 13 级阶梯》：★★★★☆</li>
<li>《悉达多》：★★★★★</li>
<li>《&lt;资本论&gt;的读法》：★★★★☆</li>
<li>《少年巴比伦》：★★★★☆</li>
</ul>
<h3>游戏</h3>
<p>今年没有怎么玩游戏，《原神》须弥主线硬着头皮刷完了、枫丹没有开；《王国之泪》只打了一个 Boss，《博德之门》只出了新手村，《潜水员戴夫》也就下海了几次。</p>
<h2>新年目标</h2>
<p>又到了新年目标环节了，依旧不定具体的目标，而是希望自己始终保持危机感。</p>
<p>罗曼罗兰说过一句话：“大部分人在二三十岁上就死去了，因为过了这个年龄，他们只是自己的影子，此后的余生则是在模仿自己中度过，日复一日，更机械，更装腔作势地重复他们在有生之年的所作所为，所思所想，所爱所恨。”</p>
<p>为了紧握初心、保持进步，2024 送自己三句话：</p>
<ol>
<li>“铅刀有干将之志， 萤烛希日月之光。”</li>
<li>“生也有涯，知也无涯，向死而生，求知不怠。”</li>
<li>每天默念：“我尊重一切发生，我追求内心渴望，我相信自己每一天都变得更好。”</li>
</ol>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/2023/WechatIMG63.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/2023/WechatIMG63.jpg" alt=""loading="lazy" decoding="async" width="1170" height="1502" /></picture></figure></div>]]></content:encoded></item><item><title><![CDATA[月刊（第24期）：十年编程之路]]></title><guid>https://airing.typlog.io/posts/weekly-24/</guid><link>https://airing.typlog.io/posts/weekly-24/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Thu, 09 Nov 2023 13:45:44 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二三年十月生活的记录与思考。</p>
<h2>十年编程之路</h2>
<p>时光荏苒，回首望去，自系统接触编程已近十年，这篇月刊就写写这十年的编程之路吧。</p>
<p>深得周围小朋友的羡慕，家里小时候是开网吧的，因此我对电脑<del>游戏</del>向来比较熟悉，但未曾设想过以后会走向编程的道路。2007 年的时候，初中组织了一波 Pascal 的奥赛班我也半途而废了， 2013 年高考之后报了教育技术学专业，这是一个在教育学院里和计算机稍稍沾些边的理科专业。如果按照正常的轨迹发展，想着大概毕业以后凭着专业的教师资格回老家的中小学当一名老师吧。</p>
<p>但一切在 2014 年的年初发生了改变。</p>
<h3>2014：初识</h3>
<p>年初那会儿那段<a href="https://me.ursb.me/archives/72.html">逼近死亡的经历</a>给我带来了巨大的变化，后面的每一天都有向死而生的感觉。如同《存在主义心理治疗》中对死亡焦虑的剖析：“死亡的觉察使人们脱离对琐事的关心，为生命提供深入、强烈而完全不同的观点。”也是自那之后，我的人生观发生了重大的转变——人生目标定为想要为世界留下些什么。我不愿按照之前的既定之路走完一生，于是重新安排生活的优先级，努力找寻未来人生的方向，恰好那时有一门 VB 的课程我很感兴趣，也是 VB 让我正式敲开了编程的大门。</p>
<p>记得接触 VB 那会儿自己开发文字 RPG，每天晚上搞到一两点仍意犹未尽。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/20231109134159-1.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/20231109134159-1.jpg" alt=""loading="lazy" decoding="async" width="1348" height="1064" /></picture></figure></div><p>姓名大乐斗最终迭代了 6 个版本：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109133726@2x.jpg" alt=""loading="lazy" decoding="async" width="2236" height="2322" /></picture></figure></div><p>那段时间的每个深夜里，满怀激动地开发着游戏，这种心情哪怕是现在回忆起来也仍未有任何衰减。现在想来，那恐怕就是最纯粹的热爱吧。</p>
<p>因为课程表现优异，被老师拉进了项目组，之后自学了 Java Swing 和数据库，做了一些游戏化的课件和管理平台。</p>
<p>在 VB 和 Java Swing 时期我开发的 GUI 小玩具们都是直连数据库的（不敢相信），为了弥补上中间的桥梁，也是因为向往做一些联网应用，于是又学了 ASP.Net 和 JSP，那个时候不管开发什么 API 都是直接 Struct + Hibernate + Spring 一套撸上去。那个时候感觉自己无所不能，貌似自己凭借着 GUI、JSP、Access 就已天下尽在掌握之中。</p>
<p>之后和每个技术人一样，我购买了自己的域名并备了案（<a href="https://ursb.me">ursb.me</a> ，一直使用到了现在），并魔改了 WordPress 的主题把博客部署在虚拟主机中。（所谓虚拟主机也是古早时期的产物，就是服务器上给你一块目录随便操作。）</p>
<p>那个时候博客大概长这样（古早的 3G 网络和 iPhone 5）：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/04b0d14653332a6699b3171ea12679%201.jpg" alt=""loading="lazy" decoding="async" width="1776" height="1332" /></picture></figure></div><p>大二的时候，我们学校开放了一些第二专业，我便申请辅修了计算机，每天白天上本专业的课程，晚上去上二专课，九点多下课回宿舍捣鼓自己的东西。虽然有点辛苦，但是回忆起来异常充实，<del>而且稀里糊涂地总是第一</del>。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/3d1f1c4f311d701f2fac3f4d0c7773.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/3d1f1c4f311d701f2fac3f4d0c7773.jpg" alt=""loading="lazy" decoding="async" width="1526" height="1382" /></picture></figure></div><h3>2015：Web 前端</h3>
<p>一五年的时候接触了 HTML、CSS 和 JS，也就是现在所谓的 Web 前端。刚接触 H5 开发的时候还在用 DreamWeaver…之后了解到了 Sublime，便把 DreamWeaver 卸载了。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/afa372be5a1f3f23eee5d46d63d3ba%201.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/afa372be5a1f3f23eee5d46d63d3ba%201.jpg" alt=""loading="lazy" decoding="async" width="1348" height="1064" /></picture></figure></div><p>学 JS 期间用 Canvas 写了个微信聊天界面模拟器，项目也迅速上了 100 Star。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109192948@2x.jpg" alt=""loading="lazy" decoding="async" width="3002" height="1490" /></picture></figure></div><p>在那之后写了一本 Canvas 的教程，也收获了许多 Star：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109193106@2x.jpg" alt=""loading="lazy" decoding="async" width="3018" height="1506" /></picture></figure></div><p>打印出来之后给班上同学授课也是成就感满满：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/a75270287ac6dfb1ea89dba5b217ab%201.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/a75270287ac6dfb1ea89dba5b217ab%201.jpg" alt=""loading="lazy" decoding="async" width="1348" height="1064" /></picture></figure></div><p>这一年年初，和专业的同学组队去参加了人生中的第一次 Hackathon，团队决定写一款叫 AskNow 的 Android App，由于我不会 Android，所以被分配去画 UI 了。经过这个项目学习了 Sketch，也了解了移动端的一些基本组件，之后又对移动端开发感兴趣学了段时间 Android。</p>
<p>由于手上没有 Android 设备，总是在模拟器开发很没意思。恰那时 Swift 刚出没一年，立马开始学起了 iOS 开发，那个时候简直是 iOS 开发的黄金时代，而自己的学习欲望也特别强，感觉什么东西能有兴趣，什么东西都能学下去。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/69d124a038d6637dc5fe09ce2f2de6%201.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/69d124a038d6637dc5fe09ce2f2de6%201.jpg" alt=""loading="lazy" decoding="async" width="1496" height="958" /></picture></figure></div><p>那一年，苹果发布了史上第一款 Apple Watch，当时看得满眼冒星星，马上去 Apple Store 买了一个，并付费了 Apple Developer 资格证书，开始开发 Apple Watch 应用：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109135133@2x.jpg" alt=""loading="lazy" decoding="async" width="1642" height="1232" /></picture></figure></div><p>很庆幸自己生在这个时代，时不时有新技术涌现出来，也毫无顾虑地可以学习一切想学的技术。</p>
<h3>2016：无限可能性</h3>
<p>学完 Swift 之后便跃跃欲试，做了一个 App 并上架了，成就感满满：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/3f4621fa4bccdd3afb856c9eb5b7dd%201.jpg" alt=""loading="lazy" decoding="async" width="1992" height="1494" /></picture></figure></div><p>在那之后又做了一款 Apple Watch 的宠物养成+英语学习的 App —— FeedMe：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/Capture-2023-11-09-195333%20%281%29.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/Capture-2023-11-09-195333%20%281%29.png" alt=""loading="lazy" decoding="async" width="1340" height="960" /></picture></figure></div><p>这一年还学了 R 语言还有 Python，做了一些爬虫和数据分析的项目，迷上了 Kaggle。但可惜的是后来没有往这个方向发展，当时也觉得学了以后对做软件可能没有帮助。（但神奇的是，今年年初在对一个外网现象做技术数据归因分析的时候用到了！当时觉得好不可思议！）</p>
<p>这一年参加许多竞赛，其中有一个项目是电子信息技术专业的，做一个搬运机器人。刚接触项目的时候对单片机没有任何了解，为了恶补知识和赶项目进度，项目期间还搬进了实验室住。那个时候实验中心的项目组给我分配了一个独立的实验室，劳累着、幸福着。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/da41799d63df979f0b1c8b5f3f62b2%201.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/da41799d63df979f0b1c8b5f3f62b2%201.jpg" alt=""loading="lazy" decoding="async" width="1348" height="1064" /></picture></figure></div><p>做完这个项目之后，发现自己某种意义上成为了全栈工程师——UI 设计、Web、后台、客户端、硬件。我对这一切都感兴趣。</p>
<p>那段时间跨端技术开始初露头角，Ionic 和 Cordova 也是立马学了然后撸了几个 App 出来参加比赛，感觉自己的精力好像是无限的…</p>
<p>而这些比赛基本上都获奖了，也算是收获满满了~</p>
<p>PS. 这一年的空余时间依旧在折腾我的博客：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/3b14912d5c6ef4def505534a1e8d67.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/3b14912d5c6ef4def505534a1e8d67.jpg" alt=""loading="lazy" decoding="async" width="1494" height="940" /></picture></figure></div><p>（明明是最简单的 Hexo，被折腾的臃肿不堪）</p>
<h3>2017：前端大杂烩</h3>
<p>前文说到博客，这一年我最后一次修改博客，力求简洁，于是改成了现在的样子（<a href="https://me.ursb.me">me.ursb.me</a>）。自此之后再也没有动过博客的样式，博客本应该以内容质量为本。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109210317@2x.jpg" alt=""loading="lazy" decoding="async" width="5140" height="3322" /></picture></figure></div><p>2017 年过年期间，又一次生病住院了。住院期间我记得微信发布了小程序，然后对着官方文档敲了个小程序出来：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/20231109135857@2x.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/20231109135857@2x.jpg" alt=""loading="lazy" decoding="async" width="1366" height="1628" /></picture></figure></div><p>（现在看来简直不敢相信自己能左手敲代码。）</p>
<p>那一年学习了 VUE，做了个社区：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/sophia-shot%20%281%29.jpg" alt=""loading="lazy" decoding="async" width="2038" height="1434" /></picture></figure></div><p>那一年的本科毕业论文写了个推荐系统。</p>
<p>那一年入手了个咕咕机和树莓派，做了个玩具：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/gugu3.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/gugu3.jpg" alt=""loading="lazy" decoding="async" width="1554" height="1774" /></picture></figure></div><p>那一年参加了很多比赛，在互联网上组建了零熊团建，用 React Native + Express 做了一图、双生、四时等众多上架了 App Store 的 App：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/__%20Oh_Bear%20-%20https___oh-bear_github_io_%201.jpg" alt=""loading="lazy" decoding="async" width="6000" height="15998" /></picture></figure></div><p>那一年接了个健身房的外包，做了一整套卖课、约课、排课、打卡、监测上课运动状态的系统，赚了不少生活费：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109195704@2x.jpg" alt=""loading="lazy" decoding="async" width="1616" height="2680" /></picture></figure></div><p>这一年的年终总结：<a href="https://me.ursb.me/archives/72.html">再见了，我的大学</a>。</p>
<h3>2018：实习</h3>
<p>这一年上半年主要在重构 双生日记 2.0，最终凭借它拿到了小程序大赛的 Top2。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109195513@2x.jpg" alt=""loading="lazy" decoding="async" width="2152" height="1650" /></picture></figure></div><p>3 月份开始秋招实习面试，凭借着这份<a href="http://ursb.me/resume/">校招简历</a>和不错的八股文准备，如愿进入了鹅厂，岗位是 Web 前端（当时觉得前端比较好准备）。自此之后，一直一直在这个团队做到了现在。</p>
<p>那个时候的工卡照（真年轻啊…）。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/20231109140130@2x.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/20231109140130@2x.jpg" alt=""loading="lazy" decoding="async" width="1344" height="1318" /></picture></figure></div><p>这一年的年终总结：<a href="https://me.ursb.me/archives/153.html">2018，沉淀初心</a>。</p>
<h3>2019：WWDC 与工作</h3>
<p>这年赶上了两年学硕的末班车，顺利硕士毕业。毕业前夕收到了 WWDC Scholarship 送的门票和住宿，加上浙大慷慨给我中大学子包机票，免费去美国玩了几天。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/20231109140340@2x.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/20231109140340@2x.jpg" alt=""loading="lazy" decoding="async" width="1222" height="1022" /></picture></figure></div><p>这趟旅途上认识了很多厉害的同学，也知道了前途永无止境，需要不断向前。</p>
<p>回来之后正式入职，前几个月基建有点落伍，还在写 JQuery，年末团队推动了 React。这年除了 React 业务活动页面，还做了个小程序，也用 Hippy 做了一个独立的 App。</p>
<p>这一年的年终总结：<a href="https://me.ursb.me/archives/2019.html">2019，走走停停</a>。</p>
<h3>2020：Flutter</h3>
<p>这一年跨端异常火爆。我这年的主旋律有幸是 Flutter，在团队内主导 Flutter 混合开发框架的建设，也做了一些 iOS 侧的研发工作。基于项目做了一些 BU 和司外的分享，还拿了两个五星，这也是毕业之后第一次拿五星绩效，对个人的激励还是非常大的。</p>
<p>这个项目让我重燃了对原生开发的兴趣，也激发了对底层技术的钻研精神。自此之后，技术宽度收窄，开始深挖。</p>
<p>这一年的年终总结：<a href="https://me.ursb.me/archives/2020.html">2020，追逐星火</a>。</p>
<h3>2021：中台与元宇宙</h3>
<p>这一年中台概念兴起，我们也做中台；年底元宇宙兴起，我们又开始做 3D 渲染。</p>
<p>这一年业务繁忙，被推着往前走，鲜有沉淀。</p>
<p>这一年，从 T6 升到了 T9。</p>
<p>这一年的年终总结：<a href="https://me.ursb.me/archives/2021.html">2021，自渡向前</a>。</p>
<h3>2022：工程化</h3>
<p>这一年年初升到了 T10。</p>
<p>这一年专注 3D 渲染和 Web 工程化，但是成长不多，如果说成长率=学到的知识/时间，反思一下这两年的成长率是很低的。于是寻求突破，业余时间搞搞开源项目、看浏览器内核代码、写文章，虽然鲜有练手，但是知识储备上丰富了不少。</p>
<p>这一年的年终总结：<a href="https://me.ursb.me/archives/2022.html">2022，平安喜乐</a>。</p>
<h3>2023：iOS 与游戏渲染</h3>
<p>这一年主要在做游戏渲染这块，技术上主要做 iOS 容器和 C++ 跨端，但同时也要写一些 ts 和 debug Android 问题。</p>
<p>十年，大概就是这些啦。</p>
<p>最后分享一下学习编程的技巧，其实从前文也能看出来，最核心的是热爱，其次是要以项目为中心，学了什么就想着去做个东西出来用，但还有一些文章里没有谈到——需要沉淀。</p>
<ul>
<li>学习过程：看官网文档即可。</li>
<li>应用过程：以项目为目标是为了加深对前一个环节的理解，同时做出东西出来也很有成就感。</li>
<li>沉淀过程：开发记录总结，写博客分享。</li>
</ul>
<p>学习过程中除了做笔记：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109204530@2x.jpg" alt=""loading="lazy" decoding="async" width="3122" height="2456" /></picture></figure></div><p>对问题的深入研究也需要把核心点画出来：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109161956@2x.jpg" alt=""loading="lazy" decoding="async" width="3364" height="4190" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109141638@2x.jpg" alt=""loading="lazy" decoding="async" width="3486" height="5506" /></picture></figure></div><p>画出来可以贴图记录现场，同时思路是白板般的四处扩散，这个比普通的笔记记录好。</p>
<p>最后知识的输出就在于勤写技术博客。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109210427@2x.jpg" alt=""loading="lazy" decoding="async" width="2058" height="1544" /></picture></figure></div><p>希望自己还能在这条热爱的道路上再走出下一个不一样的十年。</p>
<h2>🌺 生活点滴</h2>
<p>以下是十月里一些瞬间的记录。</p>
<p>🚗 国庆假期自驾游</p>
<p>自驾路线：深圳-顺德-广州-清远-英德-从化-广州-深圳</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/1048d08dfe540604a2f9d324078bea7.jpg" alt=""loading="lazy" decoding="async" width="2414" height="1811" /></picture></figure></div><p>感想：清远漂流真好玩！</p>
<p>🧟♀️ VR 打丧尸</p>
<p>国庆的末尾去广州见了高中同学，四个人一起玩了 VR 打丧尸，贼有意思。</p>
<p>还抓了一堆娃娃：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109211134@2x.jpg" alt=""loading="lazy" decoding="async" width="2614" height="1836" /></picture></figure></div><p>🎧 AirPods Pro</p>
<p>之前的耳机被洗衣机洗了，有时候播音乐会有杂音，但也勉强继续用了两年，这次换了一个新出的 USB-C 口的 AirPods：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109211408@2x.jpg" alt=""loading="lazy" decoding="async" width="2158" height="2020" /></picture></figure></div><p>🚗 保时捷</p>
<p>和一个土豪朋友去试驾了 718 boxster，感觉我更喜欢我的 Mini 了。</p>
<p>🏄🏻 团建</p>
<p>部门团建，去了惠州的一个岛上（第一次坐帆船）。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109211643@2x.jpg" alt=""loading="lazy" decoding="async" width="2668" height="2072" /></picture></figure></div><div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109211557@2x.jpg" alt=""loading="lazy" decoding="async" width="1688" height="1566" /></picture></figure></div><p>🏃🏻♀️ 体重</p>
<p>从小到大，基本都在 55 kg 左右，从来没超过 60。最近一直在上涨，感觉有望突破 65。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109211709@2x.jpg" alt=""loading="lazy" decoding="async" width="2084" height="2166" /></picture></figure></div><p>🐱 手套</p>
<p>手套最近特别喜欢蹂躏这只狗，每天把这狗藏起来晚上，手套总能把它拖出来打一番：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231109211241@2x.jpg" alt=""loading="lazy" decoding="async" width="1682" height="1840" /></picture></figure></div><h2>🎬 书影音</h2>
<p>以下是这个月的书影音：</p>
<ul>
<li>在读：心理学 |《存在主义心理治疗》| ★★★★★</li>
<li>在看：美剧 |《洛基2》| ★★★★☆</li>
<li>在看：日漫 |《咒术回战2》| ★★★★★</li>
<li>在看：日漫 | 《间谍过家家 2》| ★★★★★</li>
<li>在看：纪录片 |《地球脉动3》| ★★★★★</li>
<li>重温：剧集 | 《沉默的真相》| ★★★★★</li>
<li>看过：剧集 | 《繁城之下》| ★★★★☆</li>
<li>看过：电影 | 《请叫我英雄》| ★★★★☆</li>
<li>看过：电影 | 《坠落的审判》| ★★★★☆</li>
<li>看过：电影 | 《坚如磐石》| ★★★★☆</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[月刊（第23期）：多任务中的时间管理]]></title><guid>https://airing.typlog.io/posts/weekly-23/</guid><link>https://airing.typlog.io/posts/weekly-23/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Fri, 06 Oct 2023 09:52:52 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二三年九月生活的记录与思考。</p>
<h2>多任务中的时间管理</h2>
<p>这期应读者期望，聊一聊时间管理。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/IMG_0207.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/IMG_0207.jpg" alt=""loading="lazy" decoding="async" width="1179" height="452" /></picture></figure></div><p>对时间的管理有两个基本方面：</p>
<ol>
<li>做事前，对时间的分配</li>
<li>做事时，对时间的使用</li>
</ol>
<h3>分配时间：区分优先级</h3>
<p>每个人的精力是有限的，但事儿却接近是无限的——工作会有一堆待安排的事儿，生活中也会有许多琐事需要去做，那么如何合理地安排好自己有限的时间呢？</p>
<p>简单分享下自己的方法：日历+提醒事项。其中：</p>
<ul>
<li>日历：用来记录 <strong>已固定时间的、不得不去做事项</strong>。即，我的这段时间固定被这个时间段的 <strong>Event</strong> 消费掉，需要安排进日历里。比如会议、球局、饭局等等。（下图中原点打头的就是 Event）</li>
<li>提醒事项：用来收集琐事和待办，它们是一个一个 <strong>Things</strong>，可以相对地根据优先级的不同被灵活安排。如工作的待办、生活中的琐事等等。（下图√打头的就是 Things，已经完成的就可以勾上）</li>
</ul>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231006155233@2x.png" alt=""loading="lazy" decoding="async" width="3116" height="1904" /></picture></figure></div><p>软件这里我的用的是 Fantastical，使用了 iCloud 的 Apple 日历和 Todoist。之所以使用 Todoist 是看中了它的开放性和集成能力，可以在 Obsidian、Raycast 等各种三方软件中被集成进去。TODO 类的软件有很多，用自己喜欢的、顺手的就好。</p>
<p>当然，没有特别需求的话，用 Apple 的日历和 Apple 提醒事项也就 OK 了。</p>
<p>工具介绍好了，那么具体该如何分配时间呢？这里可以灵活安排的时间主要是 Things，这里有几个小技巧可以分享一下：</p>
<ol>
<li>根据优先级分配：高优且紧急的必须立刻做，低优或者生活琐事我会安排在早上起床或者晚上睡前统一处理。（至于如何区分优先级，考虑的因素有很多，此处不扩展说了）</li>
<li>根据自己的专注时间段分配：发掘自己的专注时间段，是晚上效率高还是下午效率高，把一整段时间空出来，然后把相对困难或重要的事情放在这个时间段去处理。</li>
</ol>
<p>当然，事情可能会在工作中随时安排进来，来了事之后，如果是非紧急的事情就不要停下手上的工作，而是把它们先放进 Things 的收集箱（Inbox）里，待切换工作上下文的间歇再去回顾、安排、调整 Inbox 和已安排实现，看看优先级和时间段是否需要变化。</p>
<h3>消费时间：保持专注、全力以赴</h3>
<p>时间对于每个人而言都是公平的，每个人的一天都是 24 小时，那保持高效的时间利用率就能把更多的精力节省出来<del>做更多的事</del>。</p>
<p>前两年的年终总结中我说过自己不擅多线程工作，后来做了一番调整，核心要点在于——一天中保持尽可能长的专注时间、尽可能少的切换工作上下文。</p>
<p>前两周的《纽约时报》有<a href="https://www.nytimes.com/2023/05/28/opinion/artificial-intelligence-thinking-minds-concentration.html">一篇文章</a>写到：</p>
<div class="blockquote"><blockquote><p>多任务处理在很大程度上是一个神话。我们可以一次只专注于一件事。“这就像我们头脑中有一块内部白板，”马克说。“如果我在做一项任务，我的大脑白板上就有我需要的所有信息。然后我转而使用电子邮件。我必须在脑海中抹去那块白板，写下写电子邮件所需的所有信息。就像在真正的白板上一样，我们的脑海中可能会有残留物。我们可能还在想着三项任务之前的一些事情。</p>
</blockquote></div>
<p>多线程工作会占用我们的认知资源，也会干扰我们的工作记忆，更会摧毁我们进入心流的可能性。因此工作中需要尽可能保持专注，摒除非工作的影响因素和尽量避免被打断。回过头来看，人类在文化领域的成就，包括哲学思想，都归功于人类深刻、专一的注意力。而随着功绩社会的兴起，这种深度注意力却日益边缘化。</p>
<p>我们知道，经济学是研究社会中稀缺资源如何分配的问题，而如果我们将这个概念中的「社会资源」置换成「个人资源」后，稀缺的概念和原则依然适用，<strong>一个人最稀缺的资源可以概括提炼为「时间、精力、注意力、专注力」</strong>，这些资源使用在一个地方的时候，就不能使用在另一个地方了。</p>
<p>《稀缺》一书中谈到一个观点：</p>
<div class="blockquote"><blockquote><p>人的大脑就像一条道路，有自己的「带宽」。当这条道路被某些东西占满时，人就会耗尽认知资源，陷入「满负荷」的状态，无暇去思考其它的东西。</p>
</blockquote></div>
<p>综上，高效的秘诀在于「专注」。</p>
<p>我一直在用「Rize」，它不单纯是一个简单的 Time Tracer 工具：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231006123136@2x.png" alt=""loading="lazy" decoding="async" width="2696" height="1736" /></picture></figure></div><p>而是一个培养 Focus 的工具。同一软件或是保持在同一工作上下文中保持一段时间，会进入 Focus 状态（类似心流），这个时间会统计 Focus 时间。而如果你突然切出上下文，如打开微信或者用浏览器浏览了这个上下文无关的网页，Rize 会认为此刻你分心了，从而弹出保持 Focus 提示并退出此轮 Focus 计时。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20231006123244@2x.png" alt=""loading="lazy" decoding="async" width="2696" height="1736" /></picture></figure></div><p>整个软件设计地异常简单，整个流程不需要去配置任何东西，结合 AI 进行全自动的监测，只有在娱乐或者是打断 Focus 的时候才会感知到它的存在。（PS: 这不是广告，但如果想体验可以用 <a href="https://rize.io?code=291287&amp;utm_source=refer&amp;name=Airing">https://rize.io?code=291287</a> 链接来注册…）</p>
<p>当然，再完美的软件也无法替代时机的行动，世界上多的是一张白纸也能把自己的生活安排得明明白白的时间管理大师，研究多少方法论，也不如老老实实做事实在。决定时间价值的，不是你拥有什么，而是你产出了什么。</p>
<p>对于我们的时间，重要的不是「当下的回报」，而是它的成长性和可能性。培养练习自己对于个人能力的认知、对于时间的感觉，从而合理调整安排自己的精力资源和时间资源，在有限的时间和有限的资源下产出更多的成果。</p>
<p>对于有限的时间，也无需过于焦虑，无论面对多少事情，全力以赴便是幸福。当我们准备做一件事时，无论这件事情大小，无论这件事在社会评价体系中的重要性如何，郑重地将自己全部投入进去，不计得失地投入自己的才华、注意力和时间，就会从心底感受到一种愉悦和对自己的肯定。</p>
<p>或许一切如同上期月刊中分享的《时之形》中说的那样：</p>
<div class="blockquote"><blockquote><p>“与其挣扎求索，不如素然以对，或许那样才能画出相对美丽的生命轨迹。”</p>
</blockquote></div>
<h2>🌺 生活点滴</h2>
<p>以下是一些瞬间的记录。</p>
<p>🔨：啥都敲工程师</p>
<p>转了岗之后开始啥都敲，有点终端全栈了。日常对渲染的研究日渐深入，经常一个小问题卡两三天，但是解决之后成就感满满。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/20231006124058@2x.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/20231006124058@2x.png" alt=""loading="lazy" decoding="async" width="1188" height="511" /></picture></figure></div><p>那之后，心情和心态一直在变好。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/IMG_0409.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/IMG_0409.jpg" alt=""loading="lazy" decoding="async" width="1533" height="1601" /></picture></figure></div><p>📱 iPhone 15 Pro</p>
<p>换了新手机，感觉没啥变化=。=</p>
<p>🐬 错峰度假</p>
<p>国庆前一周请了个周五的假，凑三天小长假去长隆玩了圈~</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/IMG_0046.jpg" alt=""loading="lazy" decoding="async" width="1978" height="1980" /></picture></figure></div><p>🌇 夕阳</p>
<p>某日晚饭后回到工位，惊鸿一瞥的夕阳。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/IMG_6518.jpg" alt=""loading="lazy" decoding="async" width="3024" height="3024" /></picture></figure></div><h2>🎬 书影音</h2>
<p>以下是近两个多月的书影音：</p>
<ul>
<li>在读：哲学 |《&lt;资本论&gt;的读法》| ★★★★★</li>
<li>读完：小说 |《人类灭绝》| ★★★★☆</li>
<li>看完：电影 |《奥本海默》| ★★★★☆</li>
<li>看完：电影 |《孤注一掷》| ★★★★☆</li>
<li>看完：电影 |《封神：朝歌风云》| ★★★★☆</li>
<li>看完：电影 |《末日崩塌》| ★★★☆☆</li>
<li>看完：电影 |《变形金刚：超能勇士的崛起》| ★★☆☆☆</li>
<li>在看：日漫 |《咒术回战2》| ★★★★★</li>
<li>看完：日漫 |《咒术回战》| ★★★★★</li>
<li>看完：日漫 |《钢之炼金术师FA》| ★★★★★</li>
<li>在看：韩剧 |《超能异族》| ★★★★☆</li>
<li>看完：日剧 |《VIVANT》| ★★★☆☆</li>
<li>看完：古装 |《莲花楼》| ★★★☆☆</li>
<li>看完：现代 |《装腔启示录》| ★★★★☆</li>
<li>看完：纪录片 |《地球脉动2》| ★★★★★</li>
<li>在玩：Switch |《塞尔达传说：王国之泪》| ★★★★★</li>
<li>在玩：Steam | 《地平线 5》| ★★★★★</li>
</ul>
<p>刚看动漫粉上五条悟，结果隔天在漫画里就人设崩塌了… By the way，《钢炼》不愧为经典神作。</p>
<p>最后一个小广告，我在 TG 上注册了 Channel，利用 Bot 和 WebHook 实现了个行为收集站，每当我发了月刊、博客或者收藏了一些网页、文章，Bot 都会在 Channel 里进行自动通知，有兴趣的朋友可以订阅：<a href="https://t.me/airingchannel">https://t.me/airingchannel</a>。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/20231006125707@2x.jpg" type="image/webp"><img src="https://airing.ursb.me/image/blog/20231006125707@2x.jpg" alt=""loading="lazy" decoding="async" width="1594" height="3130" /></picture></figure></div>]]></content:encoded></item><item><title><![CDATA[月刊（第22期）：当下的快乐]]></title><guid>https://airing.typlog.io/posts/weekly-22/</guid><link>https://airing.typlog.io/posts/weekly-22/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sun, 13 Aug 2023 07:55:36 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二三年五月至八月生活的记录与思考。</p>
<p>最近周末比较忙导致断更了，感谢催更同学的关注：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/20230810231510@2x.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/20230810231510@2x.png" alt=""loading="lazy" decoding="async" width="540" height="226" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/20230810231537@2x.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/20230810231537@2x.png" alt=""loading="lazy" decoding="async" width="598" height="376" /></picture></figure></div><h2>💐 当下的快乐</h2>
<div class="blockquote"><blockquote><p>本文标题来源于莪默·伽亚谟《鲁拜集》——“<strong>享受当下的快乐，因为这一刻正是你的人生。</strong>”</p>
</blockquote></div>
<div class="blockquote"><blockquote><p>PS. 我一直把月刊中的文章定位为“自我对话”，只有对话结果满意的文章我才会拿出来修整一番重新在博客上发布。因此如果这篇文章最终行文紊乱，请多包涵，我也没有把握仅靠一篇文章就把这个议题讲清楚。此外，如果读者发觉文章中可能含有说教意味，请无视；如果有，那么这部分应该是我对自己的说教。</p>
</blockquote></div>
<h3>求而不得的意义感</h3>
<p>是否已经很久没有过快乐的感觉了？</p>
<p>在如今的环境下生存，人们对意义的感受会通常和焦虑联系在一起。追求生活的意义，找寻存在的价值，最后得出的结论无外乎“好好努力”——从而不断压榨自己的精力和时间去追求产出、追求实用、追求充实，将自己的生命意义定义在「努力焦虑」之下。</p>
<p>仿若人生在命运之中逆水行舟，不进则退。在这种压力之下，内心难以平静，也很难完全放下心来去体会快乐是什么；而另一部分人们则选择完全躺平，放弃去追逐意义感以摆脱「努力焦虑」；还有一部分人则在内卷和躺平之间不断做仰卧起坐。（至于如何在生活和工作之间保持平衡，这又是一大话题。这个问题的完美解和每个人的生活节奏有关系，暂且不展开说了。）</p>
<p>从前的我会觉得在学习和工作之余的快乐瞬间总是伴随着的是莫名其妙的负罪感，当然这不是刻意为之，而是小时候各方面歌颂苦难的教导——“今天吃的苦会在未来收获甜，而今天如果感受到甜，那不久的将来一定会吃到苦”。</p>
<p>后来想了想，人只有在背离自己的内心时才会害怕，从而诞生出焦虑和负罪感。</p>
<p>我们害怕的是无法坦然面对自己；</p>
<p>我们害怕的是碌碌无为终此一生；</p>
<p>我们害怕的是对意义感的求而不得。</p>
<p>有位领导对我说：“如果自身的内心是充实的，那么即便一生卖烧饼，也是有价值的一生。”</p>
<p>思索一番，这番话并不是鼓励出世，也不是让我对环境和命运妥协。如果拼尽全力，发现自己的命运真的是无法抗争，那就认清它——“事实就是这么悲哀，不是所有人都能功成名就，我们中有些人注定要在日常的点滴中去寻找生命的意义。”</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/image_1691909877629_0.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/image_1691909877629_0.png" alt=""loading="lazy" decoding="async" width="700" height="1048" /></picture></figure></div><p>即便如此，也不要忘记“甘于平凡的勇气”。</p>
<p>如果大环境无法改变，如果命运无法抗争，那么人类最后自由就只剩下自己对生活的态度了。正所谓“所有东西都能被抢走，除了一件事，人类最后的自由——去选择在当前环境下自己的态度，选择自己的方式。”</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/image_1691909958474_0.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/image_1691909958474_0.png" alt=""loading="lazy" decoding="async" width="752" height="532" /></picture></figure></div><p>这又让我想到了之前在《心灵奇旅》幕后采访中看到的一句话：“<strong>成就不在于外在定义，全看是否按自己的意愿在活。</strong>”</p>
<p>那么这个问题的解法在于“当下的快乐”，具体有二：</p>
<ol>
<li><strong>珍惜每个当下瞬间</strong></li>
<li><strong>知觉生活中的快乐</strong></li>
</ol>
<h3>珍惜每个当下瞬间</h3>
<p>人是一个一个的、在不同瞬间的“存在”，人之所以成为人，乃因为他存在。换言之，如阿德勒所言：“<strong>人生是一连串的刹那，最重要的是此时此刻。</strong>”</p>
<p>要知道当下的瞬间就只有当下，没有过去、也没有未来——对过去的后悔，以及对未来的担忧，正是影响我们生活和工作的最大敌人，也是破坏我们幸福感的元凶。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/image_1689677717149_0.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/image_1689677717149_0.png" alt=""loading="lazy" decoding="async" width="1080" height="1003" /></picture></figure></div><p>我们常会遗憾未曾选择的路，会常常去想如果当时我不这样去选，而走另一条路会不会当下的结果会更好一些？</p>
<p>然而一切其实都不可知，《重启人生》中就戏谑地表达了所谓“最优选择”的结局，即便重启人生不断尝试走了另一些路，回头来看，或许还不是最初的选择。《寻找天堂》中的 Sopia 说：“人的一生如此短暂，我们不可能完成每一件想做的事。无论我们做了什么，总有其他东西值得一试，总有另一条路值得一走。所以到最后，我们能做的，也是必须做的，是满足于自己所选择的路。”</p>
<p>要知道，现实没有如果，我们有的只有一个一个当下的瞬间，在当下的瞬间做出的选择无论结果怎样，它就是最好的。</p>
<p>珍惜当下，珍惜此时此刻，珍惜身边的一切。我衷心希望所有人都能学会感受这些瞬间，而不要让它们白白地溜走。</p>
<h3>知觉生活中的快乐</h3>
<p>首先要知道，是快乐构成了我们生命中的幸福感，而不是其他。</p>
<p>在压力较大的环境下，我更喜欢一些轻量化的情绪出口，或许越简单、单纯、质朴的东西，越能净化心灵。我特别喜欢看“每日豆瓣”中推送的文章，千奇百怪的豆瓣小组中总会有那么些人喜欢分享身边的开心事儿：</p>
<ol>
<li>很多时候，似乎下意识觉得，快乐不是一件像工作、学习那样的正经事。所以，每天会安排工作学习，却不怎么安排快乐的事。 但有时候还是会随机做点快乐的事，比如学唱喜欢的歌、练习吉他、看电影、写日记、查菜谱做自己喜欢的菜、做奶茶等饮料、趴窗台发呆（看云，看楼下的老人小孩）、看跟最近问题有关的书等等。——罗恬恬</li>
<li>喜欢看天，看云卷云舒，看晚霞变色，很放松，最近大理的天空都是七彩祥云，今天等了一个傍晚真的看到了一点点就很开心。还喜欢让阳光透过窗帘洒在书上一点点看书，光影斑驳但是却很幸福。可以收拾房间分门别类，清理不需要的东西，会很治愈。——浪漫小孩</li>
</ol>
<p>能够知觉生活中的快乐是一种值得羡慕的能力，然而这种知觉力本身就很难得。在 <a href="https://me.ursb.me/archives/299.html#directory095888137327391123">《谈谈存在的价值与人生体验》</a> 一文中我曾写过“敏感决定了对世界的感知边界（轮廓）”。《德米安》也不断强调知觉的重要性——“只要他对此没有知觉，他就只是一棵树，一块石子，最多称得上是一个动物。然而，当这种知觉开始闪出第一道微光时，他便成了一个人。在你的眼中，或许并非所有走在大街上的两腿动物都能称得上是人，虽然他们也能直立行走，生儿育女。你心里明白，其中大多数人仍是鱼羊虫豸之辈，多少人生如蝼蛄！当然，每个人其实都有变成人的无数可能，但只有他了解到这些可能性的存在，甚至有意识地去认识这些可能性时，他才真正拥有它们。”</p>
<p>那么如何培养这种感知快乐的知觉力呢？我总结了一下，有以下四个途径：</p>
<ol>
<li>慢下来</li>
<li>培养专注</li>
<li>拉长视野</li>
<li>永葆善良</li>
</ol>
<p><strong>一、慢下来</strong></p>
<p>把注意力从瞬息万变的外界抓回来，不要被外界的信息爆炸所吸引。需要更多地去关注自己的内心，关注每一天的感受。写日记就是一个不错的办法——“记录幸福快乐的体验，重温那种良好感觉能让人更快乐。写下坏事，发泄式地写，可以宣泄痛苦情绪，帮助恢复心理健康。”在<a href="https://weekly.ursb.me/posts/weekly-19/">《WJ.19: 日记的意义》</a>里写过日记的好处，这里就不展开了。</p>
<p>我们的生活只有在慢下来，去关注它的时候，它才切实存在。同时我们追求高效，是为了可以慢下来去体验生活，而不是失去生活。</p>
<p>没有任何事比好好睡觉、开心、健康更重要。</p>
<p><strong>二、培养专注</strong></p>
<p>《如何应对心里的难》说到：”当我们真的调用全部的身心资源，带着「究竟发生了什么」的好奇感去感知一个苹果、一棵树、一个人、一件事，或者感知我们自己的肌肉、温度、心跳、呼吸等体验变化时，我们会瞬间进入“忘我”状态，也会因此体验到宁静、祥和，以及无意识的喜悦。 ”</p>
<p>当我们全身心地投入在手头所做的事情上，沉浸在它所带给自身的反馈和感受之中，体验着当下的每一瞬间——这种心流状态中的的心绪将一片宁静，不会有任何烦恼和忧虑。这是一种特别舒服的状态，会感到跟这个世界融为一体，时间仿佛停止了走动，心灵被满足感充盈，真切地感受到自己的存在。</p>
<p><strong>三、拉长视野</strong></p>
<p>我们的生命是属于自己的，我们所度过的每一分、每一秒，都是自己切切实实的人生。如果人生不能以喜欢的方式度过，那岂不是在浪费生命，这一切又有什么意义呢？</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/image_1689659167533_0.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/image_1689659167533_0.png" alt=""loading="lazy" decoding="async" width="1080" height="1436" /></picture></figure></div><p>拉长视野来看，人生很广阔，或许大多数人是平凡的，但是没有人会是平庸的。所有人都拥有同一个起源和母亲，我们来自同一个深渊，然而人人都在奔向自己的目的地，试图跃出深渊。我们可以彼此理解，然而能解读自己的人只有自己。</p>
<p>每个人都与众不同，每个人的生命都是通向自我的征途，是对一条道路的尝试，是一条小径的悄然召唤。人们从来都无法以绝对的自我之相存在着，每一个人都在努力地去找寻、去成为绝对自我，这个过程中有人迟钝，有人更洞明，但无一不是自己的方式。选择自己喜欢的方式去度过一生，多去体验人生，那么当下的每个瞬间都会是快乐的。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/image_1689658461558_0.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/image_1689658461558_0.png" alt=""loading="lazy" decoding="async" width="1080" height="1605" /></picture></figure></div><p>没有那么多大不了的问题，需要如此枕戈待旦，天天紧张得要死。生活中该是有些意料之外的好东西的，会被一些偶然送到我们身边。</p>
<p>人呢，只要看穿了这个世界的矫饰，世界便会属于你。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/image_1689658437726_0.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/image_1689658437726_0.png" alt=""loading="lazy" decoding="async" width="1080" height="635" /></picture></figure></div><p><strong>四、永葆善良</strong></p>
<p>这个点在<a href="https://me.ursb.me/archives/299.html#directory095888137327391123">《谈谈存在的价值与人生体验》</a> 一文中也曾谈到过，不过那个时候是以建立联结的角度去分析的，不再重复赘述。</p>
<p>这里补充想介绍下《悉达多》中的佛陀乔达摩，他熟稔人性的无常、空幻，却依然深爱并倾尽一生去助佑、教导世人。“在这位伟大的导师心中，爱事物胜于爱言辞。他的作为和生命重于他的法义。他的仪态重于言论。他的伟大不在他的法义中、思想中，而在他的生命中。”</p>
<p>认识到了乔达摩的伟大智慧，悉达多说道，”对于我来说，爱乃头等要务。审视世界、解释世界或藐视世界，或许是思想家的事。我唯一的事，是爱这个世界。不藐视世界，不憎恶世界和自己，怀抱爱，惊叹和敬畏地注视一切存在之物和我自己。“</p>
<p>我想，如果可以达到此种人生状态，对世界抱有爱，对万物怀揣善意，那么生命中的每一刻也都将是最纯粹的快乐。</p>
<h2>🌺 生活点滴</h2>
<p>最近两个月经历了很多事，算是工作以来最坎坷的一段时间了，过程和细节就先省略不说了，曾处在焦虑和不快乐的状态中，还好调整回来了（这也是这期选题《当下的快乐》的原因）。以下是一些瞬间的记录。</p>
<p>🐑：六月一日，阳了</p>
<p>终于还是中招了，首阳非常难受，基本只能躺着不能动，<del>以至于鸽了5月的月刊</del>。阳了的第二天，高烧中发现自己手脚开发发麻，直到最后只能维持在一个奇怪的姿势无法动弹。幸亏 Belle 在，给我抬去了医院。检查之后是由于过度呼吸导致碱中毒，从而引发了手脚搐搦，控制呼吸节奏就自己好了。虽然没啥问题，但是我在过程中还是想了很多——应该把握住每一个当下的体验，好好地去利用宝贵而有限的生命。</p>
<p>🎂：六月三十日，生日</p>
<p>今年生日没有发朋友圈，因为我比较排斥这一天的到来——毕竟 28 岁了，开始感到年龄的焦虑了。</p>
<p>🤒：七月，肠胃炎+扁桃体炎发烧</p>
<p>不知道吃了啥坏东西，双症齐发直接搞到了40度，去医院之后医生开了一堆药（还得按一定的规则食用和储藏），药很管用，吃了两天直接就好了。</p>
<p>🏸：羽毛球</p>
<p>身体好了之后开始恢复打球，周三、周六、周日三选二，基本保持一周两场的状态。</p>
<p>👨🏻💻：工作，尝试转 iOS 开发</p>
<p>工作这块最近变动有点大，这段时间认识了很多优秀的人，也遇到了一些赏识我的人。我能感觉到这些目光中对我抱有的极大的期待，但也很害怕自己的表现会让他人的期望落空。总之，能做的就是自己好好努力——尽我所能，把当下的事情做好。此外，工作内容也从 Web 开始转 iOS 开发，并钻研着我喜欢的技术需求，一直向往着客户端岗位总算得到了机会，希望这一切都在变好吧。</p>
<p>🏠：搬家</p>
<p>依依不舍离开了满分的房子，附房间纪念图一张：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/IMG_6288.jpg" alt=""loading="lazy" decoding="async" width="4032" height="3024" /></picture></figure></div><p>（不过搬到了120 分的新屋子！）</p>
<p>👩🏻🦯：W3C</p>
<p>加入了 W3C 无障碍工作组，在工作组会议上见识到了社区的工作模式，看到了一堆牛逼的外国同行。如果以后能够为无障碍领域贡献出自己的一份力，也算是达成了职业理想吧。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/20230813143809@2x.png" alt=""loading="lazy" decoding="async" width="1602" height="672" /></picture></figure></div><p>🏆：公司培训</p>
<p>这两个月参加了个公司级的培训项目，通过项目认识了优秀的同组同学，希望未来能维持“革命友谊”。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/Pasted%20image%2020230810234446.jpeg" alt=""loading="lazy" decoding="async" width="3840" height="2612" /></picture></figure></div><p>🍵：校招分享</p>
<p>荣幸参加了公司校招培训的座谈会分享，结识了同年龄段优秀的人。</p>
<h2>🎬 书影音</h2>
<p>以下是近两个多月的书影音：</p>
<ul>
<li>读完：哲学 |《德米安》| ★★★★☆</li>
<li>在读：经济 |《经济学原理：微观经济学》| ★★★★☆</li>
<li>看完：剧集 |《恶鬼》| ★★★★☆</li>
<li>看完：剧集 |《D.P：逃兵追缉令》| ★★★★★</li>
<li>看完：剧集 |《漫长的季节》| ★★★★★</li>
<li>看完：剧集 |《隐秘的角落》| ★★★★☆</li>
<li>看完：剧集 |《都挺好》| ★★★☆☆</li>
<li>看完：剧集 |《白夜追凶》| ★★★★☆</li>
<li>看完：电影 |《蜘蛛侠：纵横宇宙》| ★★★★★</li>
<li>看完：电影 |《网络迷踪2》| ★★★★★</li>
<li>看完：电影 |《雷神4：爱与雷霆》| ★★☆☆☆</li>
<li>看完：电影 |《银河护卫队3》| ★★★★★</li>
<li>看完：电影 |《消失的她》| ★★★★☆</li>
<li>看完：电影 |《八角笼中》| ★★★☆☆</li>
<li>看完：电影 |《人生路不熟》| ★★★☆☆</li>
<li>重温：电影 |《禁闭岛》| ★★★★★</li>
<li>重温：电影 |《星际穿越》| ★★★★★</li>
<li>重温：电影 |《盗梦空间》| ★★★★★</li>
<li>重温：电影 |《信条》| ★★★★★</li>
<li>玩过：Steam |《Thronefall》| ★★★★★</li>
<li>玩过：Steam |《时之形》| ★★★★★</li>
<li>在玩：Switch |《塞尔达传说：王国之泪》| ★★★★★</li>
<li>在玩：Steam |《潜水员戴夫》| ★★★★☆</li>
</ul>
<p>重点安利一下 NExTStudios 和 oooooohmygosh 老师出品的小游戏《时之形》</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/image/blog/Pasted%20image%2020230813164144.png" alt=""loading="lazy" decoding="async" width="2350" height="1000" /></picture></figure></div><p>《时之形》由<strong>15个场景</strong>构成，参考了众多哲学家对时间的思考，引用官方的一句文案来介绍：“哲学常以文字叙述，时间则常以数字时钟定义，两者都难以具象。不限于语言，《时之形》借助运动、反馈、视听给时间和哲学更丰富而具体的感知。在体验《时之形》的过程中，你仿佛看到、听见并触摸时间的形状，甚至开启生命和哲学之思，尤在夜深人静之时。”</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/image/blog/Pasted%20image%2020230813164317.png" type="image/webp"><img src="https://airing.ursb.me/image/blog/Pasted%20image%2020230813164317.png" alt=""loading="lazy" decoding="async" width="1400" height="788" /></picture></figure></div><p>思考是有限的碎片，时间是连续的情感。与其挣扎求索，不如素然以对，或许那样才能<strong>画出美丽的生命轨迹。</strong></p>
]]></content:encoded></item><item><title><![CDATA[月刊（第21期）：快节奏时代下的短视频]]></title><guid>https://airing.typlog.io/posts/weekly-21/</guid><link>https://airing.typlog.io/posts/weekly-21/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Wed, 03 May 2023 09:54:44 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二三年四月生活的记录与思考。</p>
<h2>🚀 快节奏时代下的短视频</h2>
<p>关于周刊选题我有一个 LogSeq 的白板，当我发现某个选题的素材准备的差不多时就会拿出来写写分享一下，也算作话题的总结。写了一个题目就在白板里划掉一个选题，剩余的选题储备长期维持在 5 个左右。</p>
<p>而短视频这个话题在我的选题白板里已经躺了大半年了，每次周刊想写它都会发现准备的还不够充分，写起来会比较复杂，就一直拖着不写，长期躺在白板的角落里。这次之所以决心拿出来写，主要也是前段时间的一些新闻和 B 站的商业化让我有些感受，想写出来分享下。</p>
<h3>注意力的散失：倍速播放、三分钟电影、抖音神曲</h3>
<p>移动互联网时代以来，我们几乎无时无刻都不在接收新的信息，各种热搜、头条、热点 Push 充斥着眼球。同时人人都有选择，导致信息方向四散。经过这种日积月累的刺激，让我们的注意力变得越来越亢奋。随着时间推移，人们能够集中注意力的时间是越来越短的，注意力容易散失、难以被捕获专注。 <strong>我们越来越不满足于慢吞吞的、起承转合的内容和信息，而是希望在更短的时间里面，获得更多的新鲜刺激。</strong> 因而，一个极其适合这个时代的产物就应运而生了：倍速播放。</p>
<p>而我个人非常讨厌倍速播放，我认为影音剧集所要呈现的是导演、编剧想要给我们讲的故事，是影像与声音高度浓缩的内容产物，它将创作者对人生的思考、对理想世界的想象等信息压缩在数个小时的画面里面里，因此需要观众慢慢欣赏。其中音效、鼓点、节拍、表情变化、剧情张力都是依靠屏幕内外唯一可以穿越的真实——时间的流动——让观众尽可能确切感受到屏幕内的故事。</p>
<p>比如《星际穿越》主角团探索高重力的米勒水星，BGM 里杂夹着秒表的滴答声，暗示着米勒星球的时间流逝缓慢，一小时等于地球七年，从而塑造主角团需要去争分夺秒的紧迫感。除此之外的例子还有很多很多，这里就不展开说了。如果一部片需要倍速去看，那可能说明它的信息容量不够、或者是不够精彩深刻，那也没有必要去观看。</p>
<p>然而短视频领域里，对快节奏还有更极端的呈现方式——三分钟电影。</p>
<div class="blockquote"><blockquote><p>三分钟电影解说既不是电影，也不是解说，它更像是一管管高度提纯的多巴胺，通过眼睛「注射」到你的身体里，让你享受短时间摄取超量信息的快感，而代价则是慢慢失去与角色共情的能力，失去欣赏光影、音乐的耐心，最终好不容易培养起来的观影能力退化得一干二净。——<a href="https://www.ifanr.com/1524332">「小帅和小美」，用三分钟毁掉电影 | 爱范儿</a></p>
</blockquote></div>
<p>在这三分钟的电子榨菜里，精妙绝伦的镜头设计直接被抽离，只留下猎奇的画面抓住观众的眼球；跌宕起伏的背景音乐也被换成了激昂慢摇舞曲，刺激你不断分泌肾上腺素提高你的专注度；充满张力的剧情变换也只剩下突兀的猎奇。一切的一切，都在为我们的眼球服务，因此信息浓度高到极致，时长尽可能短暂，AI 的台词节奏也被加快，生怕你下一秒离开了这里。</p>
<p>而我们貌似非常喜欢这套，因为它总能抓住我们孱弱的注意力，它不会让我们的注意力轻易散失，一直一直被抓住，着了魔一样不断往下滑动，于是，我们的时间也被它偷走了。</p>
<p>除了电影剧集，音乐领域也难逃魔抓。</p>
<p>要论播放量，周杰伦的歌可能现在可能还还真的不如动辄破十亿的抖音神曲。当下流行的歌曲，比如抖音神曲，跟过去的流行金曲的根本区别在于：音乐不再是审美导向，而变成了<strong>用户行为导向</strong>。抖音神曲已经有着成熟的批量制造流水线，从热点捕捉、创作编曲、到录制上线，整个过程只需要花一天时间，每个环节都通过大数据精密计算，务求每个节拍都踩在用户爽点上。</p>
<p>音乐心理学领域的同行评审期刊 Musicae Scientiae 2017 年的一篇研究中，分析了 1986 年至 2015 年的 303 首美国 Top 10 单曲，发现在 1980 年代歌曲前奏普遍超过 20 秒，如今基本已经缩短到 10 秒之内。一首歌的平均长度，从以前的4分10秒下降到大约 3 分 30 秒，2021 年美国 Top 50 歌曲平均时长更短，仅为 3 分 7 秒，其中 38% 的歌曲甚至不到 3 分钟。这表明人们的关注周期越来越短，如果不能很快听到精彩部分，就会感到不耐烦、不再听下去。</p>
<p>最近很喜欢听的蔡健雅的《达尔文》 ，前奏 28 秒，歌曲时长 4 分 25 秒，还有经典的《爱在西元前》，就像音乐制作人陈稷坤说的，它一个前奏就可以让人记住一辈子。而现在很多的编曲，一上来就是噼里啪啦堆一堆，因为今天要吸引用户完整听完一首歌已经不容易了，只要有 15 秒洗脑的片段，就可能一炮而红——比如《热爱 105 度的你》，听过一遍很上头于是脑海里一遍又一遍回绕的那个旋律，想脑子中了病毒一样挥之不去，可过段时间之后什么都记不住，除非再去听一遍。</p>
<p>而我们可以做的应该是慢一点、耐心一点，把注意力从瞬息万变的外界抓回来，不要被外界的信息爆炸所吸引，更多地关注自己的内心，关注你每一天的感受，每一次行动的手感，每一次复盘的反馈、思考、经验。</p>
<h3>快节奏时代下的文化狂欢：熊猫、淄博、毒鸡汤</h3>
<p>根据巴赫金对狂欢的理解，狂欢式可以分为以下四种范畴：</p>
<ol>
<li>人们在狂欢节中可以随便亲昵的接触；</li>
<li>插科打诨的相处方式；</li>
<li>人们平等亲昵的生活态度；</li>
<li>粗鄙，即人们保持的一种平民化的生活格调。</li>
</ol>
<p>此外，狂欢具有两大外在特征，即全民性和仪式性。根据巴赫金的狂欢理论来看，短视频实际上也属于文化狂欢的一类。</p>
<p>典型的例子是这段时间全网对于熊猫的异常关注，我之前喜欢看熊猫的图片单纯只是因为可爱（尤其是还没有脖子的花花），但是从日本送别香香上了热搜之后，关于熊猫的传播风向和关注热度就变得不对劲了起来，这里就不展开说了。</p>
<p>还有便是突然爆火的淄博烧烤，很多传播学的媒体评论文章去分析淄博为什么突然火起来了，这种热度能否形成模式并复刻。比如全媒派的这篇文章<a href="https://36kr.com/p/2224474401195137">《全网打卡淄博烧烤：短视频造神、社交平台种草和网红城市的网感》</a> 里面谈到了两个点——短视频的“网感”和“在场感”。</p>
<div class="blockquote"><blockquote><p>短视频的可见性：呈现具有丰富细节的现场，具有视觉冲击力，甚至还带来滤镜、特效等修辞手段，但这种强冲击、奇观化的视觉维持难度较大，这就势必要进入“造神”2.0阶段，即由感性、狂欢、娱乐的体验转向一种意义生产过程。</p>
</blockquote></div>
<p>网感相关的论述如下：</p>
<div class="blockquote"><blockquote><p>所谓的“网感”，是指基于互联网文化的信息传播、连接方式而建立起来的认知习惯和表达方式。<strong>“网感”就意味着网民的所思所想得到关注，体现为碎片化、娱乐化、年轻化的内容气质，有一定的情节爆点和情感痛点，有较强的用户参与性和体验感。</strong></p>
</blockquote></div>
<p>短视频同时具有可见性和连接性，因此制造“在场感”是它擅长的功能，“由此营造沉浸感，在一定程度上留住用户注意力和用户时长。在碎片化、巨量内容的媒介生态环境中，增强受众的场景化体验是提升传播力的关键。”(出处同上)</p>
<p>而短视频“毒鸡汤”的火爆也印证了“在场感”理论的可靠性。如果我们站在上帝视角看，我们很容易辨别出“毒鸡汤”里儿媳打婆婆这些离谱的故事是虚构的，但刷视频时，往往会代入其中，甚至信以为真，这便是“在场感”的作用。</p>
<p>与文字相比，短视频通过人物的演绎及还原，更容易营造一种“在场感”。这种体验仿佛身临其境，参与了一场家庭争吵、参与了一场友谊崩溃，配合夸张的语言文本、戏剧化的人物动作和表情，超现实的拟像状态会让很多用户越看越爽，欲罢不能。</p>
<p>尼尔·波兹曼曾经说：“<strong>现代技术彻底改变了人们对于信息的态度，过去人们是为了解决生活中的问题而搜寻信息，现在则是为了让无用的信息派上用场而制造问题。</strong>”</p>
<p>“毒鸡汤”一味追求超越常识乃至反常识，制造奇奇怪怪的问题来吸引眼球，这种新奇性既吸引着人们，也对人的认知产生了巨大影响。</p>
<p>由于短视频传播主体的泛化，传受双方的交互，最终共同促成了以上这些狂欢现象，而狂欢本身又会弱化、消解人们对严肃问题的认知。</p>
<p>因此最后想再结合 B 站现状谈一谈现代人正在进行的危险游戏。</p>
<h3>现代人的危险游戏：解构神圣，执迷现象</h3>
<p>前段时间关注到 B 站 Up 主停更事件，木鱼水心发了一段回应——</p>
<p>“接下来，我们会制作越来越多的节目。在不放弃深耕长视频的同时，去拓展更多的节目形式，也会思考和尝试更多的商业可能性。</p>
<p>「脚踏实地，认真做内容」，这不应该成为一个悲壮的故事，而应该成为一个「站着活下去，并且活得更丰盛」的故事。</p>
<p>我常常想，在这个年代，能够产出这样的作品，和这么好的观众们互动，难道不是最最幸运的事情吗？”</p>
<p>于是我去关注了下 B 站的商业化模式和短视频战略的分析，对于花火平台的问题、广告收益的问题、用户画像的差异这里不展开说了，不是本文的重点，相关材料列在了附录的参考资料里了，有兴趣的同学可以自行了解。这里想重点谈谈认真做长视频 Up 主在这个时代下被逐渐淘汰的悲哀。</p>
<p>目前无论是长视频还是短视频，无论是文章还是传播的营销活动，能够踩到观众爆点的现象级的话题，最终都服务于流量传播，无外乎有三类：</p>
<ol>
<li><strong>能引发了大众焦虑</strong>，比如赚钱、贫穷、两性、学习、工作之类的话题，如探讨应届生就业难、裁员潮、分享副业、下乡种田等。</li>
<li><strong>直击社会热点，义愤填膺一番，带有明显的情绪渲染和对猎奇心理的迎合</strong>，如丫丫、拖夫等。</li>
<li><strong>能让受众感觉到优越感的</strong>，比如网易云各种哄人的测试。</li>
</ol>
<p>不妨静下心来想一想，我们真的需要这种内容吗？<strong>我们学习知识不是为了制造流量凸显优越感、也不是为了抓人眼球骗人点击，而是去传递知识。</strong></p>
<p><strong>越是在注意力被分散的浮躁时代，越是需要更多优秀创作者以优质内容破壁，沉下心去打造具有陪伴感的内容输出；越是丧文化风靡，就越需要更多明丽的热血瞬间去破穿时代空气里的灰雾与阴霾。</strong></p>
<p>不可否认，现在的社会生活变得丰富多彩起来了。现代人心安理得地陶醉在快餐式的消费文化中。现代人不需要思考本质，他们只相信现象，因为他们看穿了本质只不过是人自己虚构的一个幻象。现代人太清醒了，哲学的斯芬克斯之谜已经不可能再让他们感到困惑，因为他们根本就不需要去思考那些稀奇古怪的东西。活着，并且快乐着，这就是现代人的生活秘诀。</p>
<p><strong>不过这真的是“快乐”吗？</strong></p>
<p>短视频、各种娱乐游戏和活动，这些快乐不需要思考，来的非常容易，但也容易让人迷失。我们费劲心思寻求快乐，可是快乐好像成了速食快餐品，似乎少了一些什么。</p>
<p>短视频让我们短暂沉浸在低级快乐里，忘却了颓废的不想努力的自己，给自己营造了一种虚假的充实，实则最后只会带来更多的空虚与不安。而那种持久思考，需要艰难的付出获得的快乐，是这些东西没有办法替代的。</p>
<p>今天的人类正在进行一场危险的游戏——抛弃了一切神性的东西、本质性的东西，总觉得没有什么东西是崇高的，解构着神圣，嘲笑着深刻，把自我意识和当下感受提高到了无以复加的地步。现象学与存在主义大行其道，主张抛弃一切本质或深刻的东西，跟着感觉走，尽情地去享受当下的生活。</p>
<p>事实上，<strong>当我们放弃本质、追逐现象的时候，当我们以为自己变得聪明的时候，我们已经走上了一条从人到动物的道路。</strong></p>
<p>参考资料与扩展阅读：</p>
<ul>
<li><a href="https://www.ifanr.com/1524332">「小帅和小美」，用三分钟毁掉电影 | 爱范儿</a></li>
<li><a href="http://mp.weixin.qq.com/s?__biz=MjgzMTAwODI0MA==&amp;mid=2652130451&amp;idx=1&amp;sn=81b0435a420fb1f62d0227f73923f6ac&amp;chksm=9b62da0cac15531a69b2b178a608257848490594bb5b11dfc177f535b1824b1054783b44066a&amp;mpshare=1&amp;scene=1&amp;srcid=0706gGbppEo5FWzQYf6LpaAQ&amp;sharer_sharetime=1657156135777&amp;sharer_shareid=b3d3816607a91fd20809bd0f9b8507f6#rd">周杰伦《最伟大的作品》全解读，他还是那个音乐的王</a></li>
<li><a href="https://36kr.com/p/2224474401195137">全网打卡淄博烧烤：短视频造神、社交平台种草和网红城市的网感</a></li>
<li><a href="https://www.bilibili.com/video/BV1XN411w7ro">B站到底应该如何逆天改命？做了四年UP主的一些感想。| 智能路障</a></li>
<li><a href="http://mp.weixin.qq.com/s?__biz=MjM5NDAzMjk2MA==&amp;mid=2653590032&amp;idx=1&amp;sn=1f1f78bf0755ed8bcea8c12a854e0d96&amp;chksm=bd53ce3f8a244729e4534ea04536bbe4d9fe48abf0f52739a00e020fff5f4e061f22999981b4&amp;mpshare=1&amp;scene=1&amp;srcid=0430U7vKys8HmcMmNEokjYHV&amp;sharer_sharetime=1682829152935&amp;sharer_shareid=b3d3816607a91fd20809bd0f9b8507f6#rd">B站“赚钱难”背后 | 第一财经 |《商业就是这样》</a></li>
</ul>
<h2>🎬 本月书影音</h2>
<ul>
<li>在读：哲学 |《西方哲学讲演录》（赵林）| ★★★★★（5.0）</li>
<li>在读：哲学 |《哲学与人生》（傅佩荣） | ★★★★☆（3.5）</li>
<li>在读：文教 |《人类简史》 | ★★★★☆（3.5）</li>
<li>在读：文教 |《自私的基因》 | ★★★☆☆（3.0）</li>
<li>在看：动漫 |《鬼灭之刃：锻刀村篇》| ★★★★★</li>
<li>重温：英剧 |《神探夏洛克》| ★★★★★</li>
<li>重温：电影 |《活埋》| ★★★★★</li>
<li>看完：电影 |《流浪地球 2》 | ★★★☆☆</li>
<li>看完：电影 |《长空之王》 | ★★★☆☆</li>
</ul>
<p>本月阅读较少，下个月要弥补下阅读方面。By the way，安利下赵林的《西方哲学讲演录》，找回了自己当年考研读到他和邓晓芒编写的教材时，所感受到的那种对哲学的真挚的热爱，这才是真正值得接触的哲学。平时也没有在看剧和玩游戏了，一方面是没有发现好看的剧，另一方面是调休有些打乱节奏，项目也处于关键时期需要补充的知识不少。</p>
<p>本月做了一个 GPI 测试，具有强烈的成功愿望（9.8/10分），情绪调控也是符合预期的高达 9.8 分（毕竟五一开车堵了 9 个小时还是能保持平静，笑），批判性和条理性得分也很高，但是乐群性、适应性等人际/环境上的指标只有一点几分，需要后续加强。</p>
<p>已经度过了一个春意酥怀的四月，期待下个月能安心玩上《王国之泪》~</p>
]]></content:encoded></item><item><title><![CDATA[月刊（第20期）：重启人生]]></title><guid>https://airing.typlog.io/posts/weekly-20/</guid><link>https://airing.typlog.io/posts/weekly-20/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sun, 02 Apr 2023 13:53:50 +0000</pubDate><content:encoded><![CDATA[<p>本篇是对二〇二三年三月生活的记录与思考。</p>
<h2>🎬 本月书影音</h2>
<ul>
<li>在读：小说 |《德米安》 | ★★★★★</li>
<li>在读：小说 |《少年巴比伦》| ★★★★★</li>
<li>在读：文学 |《西方文学史》| ★★★★☆</li>
<li>看完：日剧 |《重启人生》| ★★★★★★</li>
<li>看完：韩剧 |《黑暗荣耀》 | ★★★★★</li>
<li>看完：美剧 |《最后生还者》| ★★★★★</li>
<li>看完：电影 |《情书》| ★★★★★</li>
<li>看完：电影 |《保你平安》| ★★★★☆</li>
<li>在看：动漫 |《钢之炼金术师 FA》 | ★★★★★</li>
</ul>
<p>这个三月基本没有玩游戏，周末都在看剧，从《最后生还者》到《黑暗荣耀》，再到《重启人生》。一部部来说吧，先从心目中最佳的《重启人生》开始。</p>
<p>如果只打五星已经不能满足我对《重启人生》的溢美之词了，所以这次给了史无前例的六颗星！虽然才 3 月，但我觉得《重启人生》已经是今年的年度最佳了。主角麻美意外去世，得知「下辈子将投胎为大食蚁兽」，若想投胎成人，需要不断重启人生，积德行善。在部重生剧在真正意义上做到了“清新脱俗”，简单谈一谈它的优点吧！</p>
<p><strong>一，细腻的真实感</strong></p>
<p>开篇是麻美的第一轮人生，影片看了四十分钟全是琐碎无聊的日常小事，比如和同事讨论在市公所上班需不需要说“欢迎光临”，给朋友庆生没有准备生日蛋糕、服务员会不会有什么想法，分析爸爸的私房钱藏在哪。整篇故事文本量巨大，充斥着大量的对白，但都在事无巨细地呈现主角的日常琐事，似乎是一些「没用的废话」或者「无聊的思考」，仿佛已经忘了“重生”这件大事。第一集的观感让我感到平淡，甚至有些无聊。但这种细腻的剧本，角色们对生活琐事的碎碎念、以及每个角色特有的小细节，这些闲笔制造真实感，逐渐会让观众接受他们是自己珍贵的朋友，对她们的命运产生共情。</p>
<p>至第三轮时，仿佛看到了自己的影子，虽然每天工作很忙、加班到很晚，但会有好友半夜跑来看你，这种感觉让人觉得甚是幸福。</p>
<p>而至第四轮时，则更充斥着苦涩的现实，如果重生那么多次和最好的朋友、和亲密的家人疏远了，那下辈子即便能够做人还有什么意义呢？在麻美重生四次的百年之后，最想念的仍然是童年时互换贴纸的那个遥远下午，而对于观众而言亦是如此。</p>
<p>冲破文本内部的情绪惯性，抓住人物当下细微的思绪，这种真实感流露出细腻的情感，让我在不知不觉中也视她们为真实的朋友。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20230402165042.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20230402165042.png" alt=""loading="lazy" decoding="async" width="1080" height="2139" /></picture></figure></div><p><strong>二，平视每一个角色，不戏谑任何一种价值观</strong></p>
<p>这里要说到剧中的配角小福，他对自己的音乐才华始终有过高期待，事业不顺，直至离婚，离婚后在 KTV 当服务员，按说很可悲，但编剧对这个人物的塑造始终有种潜台词——<strong>任何人都没资格评判或怜悯他的人生</strong>。加缪也曾言：“<strong>应当想象西西弗是幸福的。</strong>”</p>
<p>麻美第二轮时曾想过改变小福的人生轨迹，让他的人生变得“更好”一些，但最终她没有去实施，多年后在 KTV 和小福聊天，确认了他对自己当下的生活很满意，确认他洋溢幸福的笑容，麻美对自己的决定如释重负。</p>
<p>平凡并不等于平庸，因为一个人的人生，如果是平凡的人生，至少可以活成自己接受的样子；但是一个平庸的人生，一不留神就会活成自己讨厌的样子。小福是平凡的打工人，但是他至少在努力地、幸福地活着。</p>
<p>这就要说到本剧背后那个更温暖的东西——<strong>活着不是快乐，快乐才是活着</strong>。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20230402165118.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20230402165118.png" alt=""loading="lazy" decoding="async" width="1080" height="721" /></picture></figure></div><p><strong>三，更温暖而强大的内核</strong></p>
<p>这部剧集给我们呈现了人生的本来面目，但它同时有着一些更丰富、更简单、更强大的东西。</p>
<p>好的作品亦是如此，<strong>它不是为了让观众重温现实，而是从现实中创造出一些东西，把一种更强烈的情绪传递给观众。</strong></p>
<p>而时下不少作品充斥着傲慢和对角色、甚至是对观众的戏谑，<strong>畸形的时尚造就虚伪</strong>。它们把世间一切自然的东西，无论是物质的、情感的、还是伦理的，都当做世仇而加以割舍、抛弃、毁坏，并且认为割舍得越彻底，心灵就越崇高，结果只能导致作品与现实世界的背谬。对肉体和自然人性、人情的无端摧残是不能构成审美愉悦的，由此而获得的沐神福祉的喜悦也是一种畸形的心理病态。</p>
<p><strong>但人在此世间，并非仅仅作为个人而存在，他同时也是独一无二的特殊个体，永远是一个关键而奇妙的点，在这个点上，世界的万千现象纵横交错，充满不可重复的偶然</strong>。</p>
<p>应了《日常》里的那句话：<strong>我们所度过的每一个日常，都是一个个小小奇迹的连续</strong>。</p>
<p>而我们要做的，只是<strong>体会那情感的任性，以把捉自由、探险人性</strong>。</p>
<p>在这每一个平淡的日常之中，《重启人生》以善良底色书写不说教的故事，赢得喝彩。它承认个体力量的有限，哪怕读档重来，每次也只能进步一点点，但我们仍能通过点滴的小小努力，给自己的人生抛个光。</p>
<p>当然我最喜欢的还是这篇故事最温暖的结局，看到最后会有一种时间都停了、所有人都回来了的感觉，经过了百年来的兜兜转转，终于留住身边最好的人。——与其一个人变成人，不如一起变成鸽子！</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20230402164927.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20230402164927.png" alt=""loading="lazy" decoding="async" width="1080" height="1080" /></picture></figure></div><p>PS: 剧组内的氛围也有爱，番外篇值得看一看！</p>
<p>除了《重启人生》，本月看完的《最后生还者》和《黑暗荣耀》也都是满分作品，两者都有着反传统的结局（复仇成功、没有原谅加害者、没有“大义”的介入），总体观感很爽很过瘾。</p>
<p>《最后生还者》还原原作，但适时加入一些轻微的调整和战斗情节的略过，避免剧集沦为游戏那样平铺直叙的公路片。原作原本就是神作，因此忠于原作的剧集也很棒，当然演员表现也棒，乔尔和艾莉的演技令人惊叹。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20230402165703.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20230402165703.png" alt=""loading="lazy" decoding="async" width="1080" height="1212" /></picture></figure></div><p>《黑暗荣耀》相较于它的复仇剧情，我更喜欢它的镜头语言，比如片中不少霸凌情节穿插了第一人称视角，增强了观众的代入感，更易产生共情，让后面的复仇更加爽快；在月色中女主漏出全身伤疤时房间的明暗对比、还有围棋师徒四季榕树的变化之景，也都是片中绝美的镜头。除此之外，剧中部分音效用的也非常不错，值得琢磨一番。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20230402165435.png" alt=""loading="lazy" decoding="async" width="1600" height="900" /></picture></figure></div><h2>🌺 本月生活点滴</h2>
<p>🏸：这个月开始打羽毛球了，自从去年年底疫情肆掠之后就没有打过了，现在重新捡回这项运动，并通过它遇见有意思的人们，是一件幸事。</p>
<p>🚴🏻：这个月开始骑自行车上班，通勤耗时比开车要短一些，并且每天还能省下不少停车费。By the way 电助力车骑在路上就像开挂一样。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20230402222644.png" alt=""loading="lazy" decoding="async" width="1707" height="1280" /></picture></figure></div><p>👩🏻🍳：在B师傅的教导下学做菜，目前学了电饭煲鸡腿、白灼虾、耗油生菜这种简单的菜肴。（照片就不放了，能吃就行。）</p>
<p>🦆：某个周末的下午在家楼下的河边发了一下午的呆，放空自我，盯着看白鹭是怎么捉鱼的，看流水的形状，感受时间从指尖流过，忽然有那么一瞬间貌似能体会到钓鱼的乐趣了。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20230402222654.png" alt=""loading="lazy" decoding="async" width="2275" height="1280" /></picture></figure></div><div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20230402222701.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20230402222701.png" alt=""loading="lazy" decoding="async" width="1280" height="1707" /></picture></figure></div><p>👨💻：对工作内容有些迷茫，某个周日找了B前辈吃饭聊了聊，被指明道路之后一切都豁然开朗了，是自己太着眼于当下与急功近利所以才会迷茫，于是回家之后列出了未来7年每一年的职业目标，按这计划一步一步脚踏实地向前走，终有一天能登上顶峰。By the way，那天下午去和朋友试驾了阿维塔，试驾的工作人员给了我很深的印象，虽然是位零几后，但是对工作非常认真负责、富有激情，同时他也对我说到，工作就是要怀着热情且谦卑的态度认真去做，该工作的时候就不要考虑别的，把事情做得漂亮自然就有好结果。</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20230402222715.png" alt=""loading="lazy" decoding="async" width="1707" height="1280" /></picture></figure></div><p>⛺️：组内团建去梧桐山脚下露营，虽然很堵车，但是敞篷在山里派上了用途。By the way，篝火晚会还是蛮有氛围的。
<img src="https://airing.ursb.me/images/blog/20230402222719.png" alt="" /></p>
<p>总结：这个三月过得很开心、很充实、很满足，是工作以来最满足的三月了。希望四月是一个繁美丰盛的四月，一见倾心的四月、春意酥怀的四月。💐</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20230402224028.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20230402224028.png" alt=""loading="lazy" decoding="async" width="1080" height="1080" /></picture></figure></div>]]></content:encoded></item><item><title><![CDATA[月刊（第19期）：日记的意义]]></title><guid>https://airing.typlog.io/posts/weekly-19/</guid><link>https://airing.typlog.io/posts/weekly-19/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Fri, 03 Mar 2023 12:52:59 +0000</pubDate><content:encoded><![CDATA[<h2>日记的意义</h2>
<p>月底在回顾日记以准备当月的月刊素材时，偶然在 dayone 上看到了17年-19年2月28日的记录，而在 daylio 上则有着20年-22年2月28日的记录。</p>
<p>这才发现，写日记这个习惯居然已无声无息持续了已六年。再回头看这六年间的日记，着实有一种奇妙的感觉。于是这篇文章就来谈谈——日记的意义吧！</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/IMG_5031.jpeg" alt=""loading="lazy" decoding="async" width="2340" height="2532" /></picture></figure></div><p>于我而言日记的意义有以下几点：</p>
<ol>
<li>自我觉察的工具</li>
<li>折射生活的意义</li>
<li>记录身边的美好</li>
</ol>
<p><strong>1. 自我觉察的工具</strong></p>
<p>自我觉察指的是察觉自己真正的感受和情绪，理解自己真正的需要和欲望是什么，从而为生活找到目标和意义感。</p>
<p>记日记的好处之一是可以通过日常细碎的思考来了解自己的思维，类似于辅助正念的工具，通过觉察自己的情绪，从而发现自我。</p>
<p>前几年上学的时候也开发过一款 App 叫「双生日记」，主打的匹配和心理报告功能也都是为了自我觉察而服务的。</p>
<p><strong>2. 折射生活的意义</strong></p>
<p>其实这一点本质上和“自我觉察”说的是同一件事，因为自我觉察本身就是找寻意义感的重要途径。这里单独拆出来自成一节展开谈谈。</p>
<p>在之前的一篇文章中（<a href="https://me.ursb.me/archives/299.html">《谈谈人生的价值与体验》</a>）谈到了”<strong>人生是一连串的刹那，最重要的是当下的此时此刻</strong>” ，而“<strong>生命的意义并不是由所谓的“人生大事”来赋予的，而是落实到生活中无常的琐碎</strong>”。</p>
<p>我们求而不得的生活意义感，首先是通过这样真实地投入生活开始的，只有当你“真实地存在”的时候，你和生活才建立了足够深入和真诚的链接，生活会用它独特的方式给予你回报。</p>
<p>日本茶道中讲“一期一会”，意思是<strong>在茶会时领悟到这次相会无法重来，是一辈子只有一次的相会，故宾主须各尽其诚意</strong>。这也是佛教中“无常” 的思想，<strong>珍惜每个瞬间的机缘，并为人生中可能仅有的一次相会，付出全部的心力</strong>。</p>
<p>眼前可口的饭菜，河里跃起的鱼群，路边飘落的花瓣，每个时刻、每件事物都会让我们有发自内心的喜悦，油然而生的幸福感，即使是恐惧或愤怒也是当下的，我们有的只是当下的体会和感受。觉知当下的喜怒哀乐、体验它们、悦纳它们，便是活着的意义吧。</p>
<p>而日记的作用便是记录这每一个“当下”的觉察和感受，虽然这些念头可能以后永远都派不上用场，但是光是记下来本身，就是生活意义的折射，能产生一种充实的幸福感——至少当下的心情是真实的，当下的瞬间没有被浪费。</p>
<p><strong>3. 记录身边的美好</strong></p>
<p>这个点记录了 4 年日记之后才发现的，如果真的要记录点什么，为什么不能只记录那些开心的事情呢？</p>
<p>在去年的<a href="https://me.ursb.me/archives/2022.html">年终总结</a>里提到了“在睡前回顾今日的心情时，也会选择性地去记录今天遇到的美好的事情，一方面是期望带来好梦，另一方面是期待明天可以更美好。”日后翻看回忆时，也尽是美好事物，这不是一件很美好的事情吗？</p>
<p>愿我们不会将一生都花费在漂浮奔波上，而是怀着对生活的喜悦和热情，全情投入到美好生活中。</p>
<p>最后摘录一段 2019 年 <a href="https://me.ursb.me/archives/wwdc19.html">WWDC 19 游记</a> 中的一段话作为结尾：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20230304173158.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20230304173158.png" alt=""loading="lazy" decoding="async" width="594" height="1018" /></picture></figure></div><h2>本月记录</h2>
<p>月初出差去北京听 GMTC，这个会的北京站也是比较坎坷，从2020年开始数十次因疫情推迟，最终到23年才……这也是我工作以来第一次出差。</p>
<p>在北京约到了久别重逢的好友，是很久以前最好的朋友，转眼已整整5年未曾联系，本以为老死不相往来从此沦为人生遗憾，但再见时已记不清为什么要不相往来。真的是一点儿也没有变。</p>
<p>贴一些 2 月的瞬间：</p>
<p>P1: 🍶 夜晚，清冷的北锣鼓巷。没有破败的气息，只是清冷，寥寥几盏灯火点亮幽邃的胡同。喜欢“不卖书的书店”和专注巧克力的“可可芭蕾”。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20230303220049@2x.jpg" type="image/webp"><img src="https://airing.ursb.me/images/blog/20230303220049@2x.jpg" alt=""loading="lazy" decoding="async" width="1024" height="1020" /></picture></figure></div><p>P2: 🍻 有人跳海，胡同深处的一家小酒吧。那晚在无尽的黑巷里走了一个多小时，才觅得的一家可以进去避风休息的店铺。从北京回来之后没几日发现了一直关注的博主也去了这家店（下图也是从他的周刊里盗的），有种时空交错的感觉。想吐槽下北京的店面关门都很早，晚上八九点就没有什么店了，十点多连车都打不到了 QAQ</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/IMG_4945.jpeg" type="image/webp"><img src="https://airing.ursb.me/images/blog/IMG_4945.jpeg" alt=""loading="lazy" decoding="async" width="1280" height="960" /></picture></figure></div><p>P3: 🌺 楼下的鸡蛋花树开花了，春天来了。很喜欢家楼下的这条马路，傍着小河，静谧且美丽。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/IMG_4974.jpeg" type="image/webp"><img src="https://airing.ursb.me/images/blog/IMG_4974.jpeg" alt=""loading="lazy" decoding="async" width="1280" height="960" /></picture></figure></div><p>P4: 🍩 海边的落日与飞机</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/IMG_5004.jpeg" type="image/webp"><img src="https://airing.ursb.me/images/blog/IMG_5004.jpeg" alt=""loading="lazy" decoding="async" width="1280" height="960" /></picture></figure></div><p>P5: 🚗 难得去广州，但来回用了将近8个小时，疯狂堵车的一天。灾星体质，去哪儿哪儿就会发生车祸。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/IMG_4935.jpeg" type="image/webp"><img src="https://airing.ursb.me/images/blog/IMG_4935.jpeg" alt=""loading="lazy" decoding="async" width="960" height="1280" /></picture></figure></div><p>P6: 🍾 周五晚邀请朋友来家里吃零食、吐槽、看电影</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/IMG_4955.jpeg" type="image/webp"><img src="https://airing.ursb.me/images/blog/IMG_4955.jpeg" alt=""loading="lazy" decoding="async" width="960" height="1280" /></picture></figure></div><p>P7: 🎮 做原神任务时发现的一个超美场景</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/IMG_0126.jpeg" alt=""loading="lazy" decoding="async" width="2266" height="1488" /></picture></figure></div><p>P8: 📮 自从上期提倡信件交流以来，又多了些好友来信，上月往来信件 20 封，发现信件交流确实更加沉静、深入。也欢迎读者给我写信—— airing@ursb.me ，什么乱七八糟的都可以交流~</p>
<p>P9：📝 关于工作，做了一个部门分享，写了一篇<a href="https://me.ursb.me/archives/cross-end.html">技术文章</a>，在知乎接了一个软广，学习了 Android JNI 编程，给项目的 V8 接入了调试器。</p>
<p>P10：🎬 本月的书影音（貌似是最多的一个月）</p>
<ul>
<li>读完：小说 |《一个陌生女人的来信》 | ★★★★★</li>
<li>读完：小说 |《消失的13级台阶》| ★★★☆☆</li>
<li>在读：小说 |《德米安》 | ★★★★★</li>
<li>看完：电影 |《蚁人与黄蜂女 3》| ★★★☆☆</li>
<li>看完：电影 |《饥饿站台》| ★★★☆☆</li>
<li>看完：日剧 |《凪的新生活》 | ★★★★★</li>
<li>在看：美剧 |《最后生还者》| ★★★★★</li>
<li>在看：剧集 |《三体》 | ★★★★★</li>
<li>在看：动漫 |《钢之炼金术师 FA》 | ★★★★★</li>
<li>在玩：Switch |《女神异闻录 P5R》| ★★★★★</li>
<li>在玩：Steam |《荒野大镖客 2》| ★★★★★</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[大厂自研跨端框架技术揭秘]]></title><guid>https://airing.typlog.io/posts/cross-end/</guid><link>https://airing.typlog.io/posts/cross-end/</link><dc:creator><![CDATA[Airing]]></dc:creator><pubDate>Sat, 25 Feb 2023 15:53:07 +0000</pubDate><content:encoded><![CDATA[<h2>导言</h2>
<p>本文将围绕跨端框架技术的主题，分析其技术目标和 3 种演进方向，接着揭秘业内的自绘跨端方案的技术实现——包括 Kun、WebF、TDF、Weex 2.0、Waft 与 MiniX 等方案，分析各自的特点与不足，总结跨端框架的研发思路与技术要点，最终分享对跨端框架发展趋势的思考。</p>
<p>分享过程中，会穿插介绍跨端框架的脚本引擎的选型与技术难点、业内各跨端框架各自的困境、分享 Debugger 原理以及一核多生态的工程化思路。</p>
<p>大纲如下：</p>
<ol>
<li>跨端框架的技术目标（略）</li>
<li>跨端框架的技术方向</li>
<li>跨端框架的技术揭秘</li>
<li>跨端框架的技术要点</li>
<li>跨端框架的发展趋势（略）</li>
</ol>
<div class="blockquote"><blockquote><p>注 1：本文系线下分享的文字总结版，将省略前情提要、技术背景（如第1节、第5节）与部分技术细节的扩展（如第3-4节部分内容），仅保留核心内容。</p>
</blockquote></div>
<div class="blockquote"><blockquote><p>注 2：本文材料源于 GMTC 大会跨端主题的公开分享、部分企业的公开微信公众号文章、框架公开源代码与个人历史分享素材，其余内部分享与内部框架等材料做脱敏处理。</p>
</blockquote></div>
<h2>跨端框架的技术方向</h2>
<p>我略微总结了一下，跨端框架有以下 4 种技术方向。</p>
<h3>方向 1：基于 WebView 的增强</h3>
<p>基于 WebView 的增强是一个偏前端往客户端方向靠拢的技术方向，即上层生态依然使用 Web 技术，但是需要依靠客户端对 WebView 做一些能力补充。</p>
<p>比如：</p>
<ol>
<li>Ionic、Cordova 等 Hybrid 框架。</li>
<li>业内一众基于 WebView 的小程序。</li>
<li>Sonic 等客户端预加载 WebView 资源的方案。</li>
<li>App 厂商针对 Web 做的离线包方案。</li>
</ol>
<p>这类框架都有这几个特点：</p>
<ol>
<li>基于 WebView 渲染，但补充了一些原生能力增强</li>
<li>开发生态基于 Web 前端生态（严格来说，小程序也是）</li>
<li>想方设法增强 Web 的用户体验</li>
</ol>
<h3>方向 2：基于 DSL 的 Native 增强</h3>
<p>基于 DSL 的 Native 增强属于偏客户端但往前端方向靠拢的技术方向，即开发生态基于 Native，但是框架设计上参考了 WebView 的一些特性。这些框架总体上都是自定义了 DSL 来实现跨端与动态化的。</p>
<p>比如手淘的无障碍框架 DinamicX、美团的 MTFlexbox、阿里的 <a href="http://tangram.pingguohe.net/">Tangram</a>(七巧板)。</p>
<p>浏览这些框架的文档可以发现，它们的设计比较像 React Native，只是上层需要开发者使用 DSL 来接入组件。</p>
<h3>方向 3：代码共享</h3>
<p>代码共享是终端的开发方案，目前业内熟知的方案是 KMM（Kotlin Multiplatform Mobile），通过 K2 编译器将 kotlin 源码编译成各个平台的目标代码，从而实现跨端。具体而言，kotlin 通过编译器前端生成带有语义信息的 FIR，之后 FIR 交给各个平台的编译器后端来进行优化和生成，如 JVM/LLVM 等，最终生成各平台可执行的目标代码。</p>
<p>KMM 的工程结构也比较简单，包括跨端代码(Shared module)与壳工程(Android/iOS App)两部分组成。</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20230225222623.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20230225222623.png" alt=""loading="lazy" decoding="async" width="1442" height="854" /></picture></figure></div><p>目前来看这套方案在生成 iOS 代码时，对多线程的逻辑处理不是特别好，需要业务方优化。</p>
<h3>方向 4：基于 GPL 的 Native 增强</h3>
<p>基于 GPL 的 Native 增强我将其视为大终端的开发方案。所谓大终端是一个融合之后的产物，在早年 PC 时代，大家使用 .NET、JVM、Qt 来开发桌面应用，我们将其称为终端开发；随后进入移动端时代，Native 方向的客户端开发在不断追逐动态化之路，而跨平台方向的前端开发在不断追逐性能之路，这两条道路最终融合成如今这些跨端框架。无论是小程序、Flutter、DSL 开发框架、WASM 均属于融合演进的产物。</p>
<p>总结一下，方向 4 有以下几类方案：</p>
<ol>
<li>原生渲染组件：如 React Native / Hippy 1.0 / Weex 1.0 等。</li>
<li>自绘引擎：Flutter。暂且将其单独算作一档。</li>
<li>基于 Flutter 的自绘框架：这里业内有诸多框架（曾整理过 20+ 框架），如 WebF(Kraken)，Kun，FMP，基于 Skyline 的小程序等等。</li>
<li>基于系统图形库（Skia / Vulkan / Metal / OpenGL）的自绘框架：这里业内也有不少框架，如 TDF，Hippy 3.0，Weex 2.0，Waft 等等。严格来说 Flutter 也属此类。</li>
</ol>
<p>前 3 个方向以及第 4 个方向的前两类框架都是开源的，且业内也有不少文章介绍了它们的原理，这里就不赘述了。本文主要介绍第 4 个方向后两类框架的技术方案。</p>
<h2>跨端框架的技术揭秘</h2>
<p>本节将挑选几个有代表性的框架做技术揭秘：</p>
<ol>
<li>Kun</li>
<li>WebF</li>
<li>Weex 2.0</li>
<li>TDF（需脱敏，略过）</li>
<li>Waft</li>
<li>MiniX（略）</li>
</ol>
<p>之所以在芸芸框架中挑这几个，是因为他们的方案在领域细节中属于典型框架，可关注这些框架的应用开发体系、脚本引擎与渲染引擎的选型。</p>
<h3>Kun</h3>
<p>Kun 是闲鱼基于 Flutter 开发的一个跨端框架，目前并未开源，网上能学习到的文章只有闲鱼公众号上发表的三篇文章。架构设计比较简单，虽然没有源码也能分析一二，架构图这里就不放了，有兴趣的同学可以自行点进文章了解。</p>
<p>Kun 的整体设计思路是基于 Flutter 开发一个 JS Runtime，开发者使用前端生态进行页面开发，JS 解释器作为胶水层会将源码翻译成 Flutter Widget，之后交给 Flutter Engine 做渲染。</p>
<p>JS 引擎他们采用了 QuickJS，但猜测应该是阿里内部的 QKing 引擎（基于 QuickJS）。</p>
<p>Debugger 支持 CDP，Test 基于 Flutter Golden test。</p>
<p>CSS 解析他们先使用 Yoga 做 polyfill，将样式处理成 css in js，之后解析模块挪用了 Kraken 的遗产 CSSLib，通过 Dart FFI 将 JS 测的内链样式传递给 Dart 侧做处理，最终解析成 Flutter Widget。</p>
<p>但是 CSS 的盒模型与文档流毕竟与 Flutter Widget 的样式标准格格不入，他们则采用了 Widget 拼接的方式，每一层 Widget 特定处理某类样式，最终通过层层套娃拼接的方式实现组件样式。如下图所示，这是一个 div element 所对应的拼接方式：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20230225222654.png" alt=""loading="lazy" decoding="async" width="1674" height="1616" /></picture></figure></div><p>总结一下特点：</p>
<ol>
<li>不支持完备的 W3C 标准（也不可能支持，比如 css in js 无法实现伪类），只支持各标准子集，包括：HTML 标签、CSS 样式集、WebAPI 标准</li>
<li>提供了一些定制的 Element 组件，由 Dart 侧实现，业务方也能使用 Dart 侧来开发一些定制的 Element。</li>
<li>组件的实现上采用 Widget 拼接的方式</li>
</ol>
<p>本节参考资料：</p>
<ul>
<li>大终端领域的新物种-KUN</li>
<li><a href="https://mp.weixin.qq.com/s/26SCEM6QPhAazydRUq9h3Q">三代终端容器 KUN 的首次大考【架构演进】</a></li>
<li>双十一｜探索KUN的加载性能与增强体验</li>
</ul>
<h3>WebF</h3>
<p><a href="https://github.com/openwebf/webf">WebF</a> 前身是阿里的 Kraken，后团队解散部分遗产交接给了 Kun，剩余同学出走在开源社区成立了 openwebf，将 Kraken 改名 WebF 继续维护。</p>
<p>这个是 WebF 的架构图：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20230225224007.png" alt=""loading="lazy" decoding="async" width="3741" height="2573" /></picture></figure></div><p>可以看到与 Kun 不同的地方在于除了提供了 JSBinding 之外，团队还在 Flutter 的 Dart 侧做了一些开发，将 RenderObject 的能力做了丰富，以适应 W3C 标准——即在 Dart 层来实现 CSS，C++ 层实现 WebAPI，对标 W3C 标准。</p>
<p>脚本引擎依然是 QuickJS，但是目前做了一些<a href="https://github.com/openwebf/quickjs">优化</a>，值得学习一波。</p>
<p>其实对比一下 Kun 和 WebF，我们可以发现他们对 CSS 的处理采用了两种不同的思路。</p>
<p>先说说 Kun 吧，它的方案存在几个问题：</p>
<ol>
<li>一条渲染链路存在两次 Layout，这是完全没有必要的，而且 Layout 的更新频率本身也非常高，两次 Layout 会带来额外的性能开销</li>
<li>Dart FFI 不足以支撑样式更新的信息传递，样式更新的数据量很大，会触及 FFI 的瓶颈</li>
<li>内联样式的开发体验不好，很多 CSS 的属性也会无法实现</li>
</ol>
<p>那么 CSS 应该如何实现呢？有两种比较好的解法：</p>
<ol>
<li>CSS 在 Dart 层实现，样式更新依靠 RenderObject 的 Layout，无需走 FFI</li>
<li>DOM 与 CSS 全使用 C++ 实现，剥离 Dart 层</li>
</ol>
<p>解法 1 便是 WebF，解法 2 是后文的 Weex 2.0 与 TDF 等框架。</p>
<p>但解法 1 也存在技术难点，因为引入了 CSS 会导致 RenderObject Tree 难以维护，那么我们应该如何管理 RenderObject Tree？这也有两种思路：</p>
<ol>
<li>把 RenderObject 做薄：即 Flutter Widget 做原子级渲染组件，不对 RenderObject 做修改，上层通过组合 RenderObject 来实现复杂功能和样式。就像 Kun 那样。</li>
<li>把 RenderObject 做厚：集成大量的布局渲染能力于一身，上层通过样式表驱动 RenderObject 渲染。</li>
</ol>
<p>显而易见的，把 RenderObject 做厚会是更好的方案，因为前者复杂度太高（看前面那段层层嵌套的代码也可以直观感受到），每个样式规则的计算都需要一层一层检查推断，导致维护效率下降。</p>
<p>因此，这里我比较看好 WebF 的方案，并且 WebF 也是目前众多跨端框架中唯一一个拥抱开源的方案，呼吁有兴趣的同学加入 <a href="https://github.com/openwebf/webf/blob/main/GOVERNANCE.zh-CN.md">TSC</a> 一起共建。</p>
<p>本节参考资料：</p>
<ul>
<li><a href="https://github.com/openwebf/webf">https://github.com/openwebf/webf</a></li>
<li>晟怀：《WebF 是如何高性能实现 Flutter + Web 融合》（2022 QCon）</li>
</ul>
<h3>Weex 2.0</h3>
<p>Weex 2.0 是阿里内部开源的跨端方案，目前基本上实现了阿里内部的一核多生态体系。技术架构上完全推倒 1.0 重新研发，期间他们也走了不少探索之路。从分享来看，整套方案比较完备，工作量也很大。</p>
<p>这个是 Weex 2.0 的结构图：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20230225225458.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20230225225458.png" alt=""loading="lazy" decoding="async" width="1010" height="970" /></picture></figure></div><p>重点介绍一下这几个组件：</p>
<ul>
<li>WeexAbility：容器和能力扩展，URL 拦截、缓存、基础 API、三方扩展等。</li>
<li>WeexFramework：通用基础框架。封装页面实例，实现 DOM、CSSOM、WebAPI 标准，解耦脚本引擎和渲染引擎。</li>
<li>QKing：脚本引擎，基于 QuickJS 的魔改。</li>
<li>Unicorn：自绘渲染引擎。实现 CSS 能力，包括完整的节点构建、动画、手势、布局、绘制、合成、光栅化渲染管线，可跨平台。</li>
<li>WeexUIKit：原生 UI 渲染引擎，封装了原生组件。</li>
</ul>
<p>2.0 源码产物和前几个框架一样是基于 jsbundle 打出来的 bytecode，但是编译做了一些 SSA 的优化，此外 JS 运行时也做了许多优化，全链路使用 C++开发，没有额外的通信开销、没有冗余的抽象、链路更短，同时基于自研的 Unicorn，有着精简布局算法、精细的操控手势和动画，直通系统图形库。整套方案与 1.0 毫无关系，解决了 1.0 的跨语言通信问题、双端渲染差异问题、布局算法问题、脚本执行效率问题。</p>
<p>基于 Weex 2.0，阿里解决了烟囱式方案的问题，基于多核同构的内核，推动了基础能力的统一，以此来支持差异化的业务场景：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20230225230055.png" alt=""loading="lazy" decoding="async" width="2388" height="1464" /></picture></figure></div><p>本节参考资料：</p>
<ul>
<li>门柳：《淘宝新一代自绘渲染引擎的架构与实践》（2023 GMTC）</li>
</ul>
<p>注：腾讯的 TDF 也在致力于类似的工作，此处脱敏不再介绍。</p>
<h3>Waft</h3>
<p>Waft 全称 WebAssembly Framework for Things，是天猫精灵团队基于 WebAssembly Runtime 与 Skia 开发的一套自绘框架，没有开源。虽然它目前没有实现框架，只支持 AIoT 的场景，但是原理上是可以跨端的，因此放在这里介绍下，以开阔思路。</p>
<p>天猫精灵早期在 AIoT 上有过一些尝试，最开始做 Android App，但无奈运存太低，只有几百兆，所以性能受限；后续他们开发了云应用，效果虽然还可以，但是服务器成本太高，被叫停；于是继续探索端渲染的道路，研发了 Waft。</p>
<p>这个是 Waft 的架构图：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20230225230654.png" alt=""loading="lazy" decoding="async" width="2438" height="930" /></picture></figure></div><p>他们也重新设计了加载流程和渲染流程：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20230225230717.png" alt=""loading="lazy" decoding="async" width="2400" height="988" /></picture></figure></div><p>可见整体工作量比较大，并且也不契合前端标准和生态。</p>
<p>这里脚本引擎选型 WebAssembly 他们提供了一张对比图：</p>
<div class="photo"><figure><picture><source srcset="https://airing.ursb.me/images/blog/20230225230748.png" type="image/webp"><img src="https://airing.ursb.me/images/blog/20230225230748.png" alt=""loading="lazy" decoding="async" width="1224" height="918" /></picture></figure></div><p>这里我对这个脚本引擎的选型是存疑的，想了想有以下不足之处（也可能他们内部有其他考量）：</p>
<ol>
<li>fib 的用例太简单，无法充分发挥 JS 引擎的优势</li>
<li>AOT 来对比解释执行，是明显不公平</li>
<li>QuickJS 应该用的原始版本，它还有很大的优化空间</li>
<li>用力也没有去对比其他有 JIT 模式的引擎，比如 V8 和 JSCore 这些</li>
<li>这里没有说明使用了什么 wasm 的框架，因为不同 wasm 的实现性能表现是不同的，有的侧重于解释执行的效率，有的则侧重于 AOT / JIT 的效率</li>
</ol>
<p>Waft 本身也有的问题，期待他们后续能优化：</p>
<ol>
<li>CSS 仅支持部分子集</li>
<li>W3C 标准（DOM Elememt、WebAPI）实现欠缺</li>
<li>包体积可能偏大，这部分先存疑</li>
</ol>
<p>所以目前的 Waft 的实现也决定了应用场景，暂且只能支持简单的 IoT 页面。</p>
<p>参考资料：</p>
<ul>
<li>聂鑫鑫：《Waft：基于 WebAssembly 和 Skia 的 AIoT 应用开发框架》（2023 GMTC）</li>
</ul>
<h2>跨端框架的技术要点</h2>
<h3>动态化</h3>
<p>介绍了以上框架，可以总结下跨端框架的应用场景：</p>
<ol>
<li>动态化</li>
<li>IoT</li>
<li>Desktop</li>
<li>车机</li>
<li>一核多生态</li>
</ol>
<p>所谓“没有动态化能力的跨端技术是没有灵魂的”，其实我们也可以发现动态化框架和跨端框架很多部分其实是完全重叠的，我之前总结过动态化的五种实现思路：</p>
<ol>
<li>基于 WebView 的增强</li>
<li>基于 DSL 的 Native 增强</li>
<li>基于 GPL 的 Native 增强</li>
<li>插件化（Android）</li>
<li>利用 OC 运行时动态化特性（iOS）</li>
</ol>
<p>我还画了一张图来补充说明：</p>
<div class="photo"><figure><picture><img src="https://airing.ursb.me/images/blog/20230225231814.png" alt=""loading="lazy" decoding="async" width="2446" height="1340" /></picture></figure></div><div class="blockquote"><blockquote><p>注：这张图我画的比较早，其实左上角可以换成 “Flutter 与其他自绘框架”。</p>
</blockquote></div>
<p>他们的核心其实都是要在 Runtime 期间加载可执行代码，并调用。可以发现前三个动态化的思路和我们总结的跨端框架的技术方向是一模一样的。</p>
<p>技术要点个人以为有以下几点：</p>
<ol>
<li>脚本引擎</li>
<li>渲染引擎</li>
<li>调试器</li>
<li>工程化</li>
</ol>
<p>一一来介绍。</p>
<h3>脚本引擎</h3>
<p>脚本引擎的选型思路有以下三个：</p>
<ol>
<li>JS 引擎：仅用于胶水语言，对 JIT 不强依赖</li>
<li>Dart VM：主要是为了利用 Flutter Engine 来渲染，因此使用 Dart 生态</li>
<li>WARM: 需要设计 DSL 和实现渲染引擎，完善整个生态</li>
</ol>
<p>如果选择 JS 引擎，那么也有以下几个选型思路：</p>
<ol>
<li>使用双引擎：即各端使用自己的优势引擎，Android 使用 V8，引入 j2v8 即可，而 iOS 使用 JSCore 则完全无包增量。但可惜的是直接使用 JSCore 无法开启 JIT。</li>
<li>使用 Hermes 单引擎：Meta 为 React Native 这类 Hybrid 框架专门开发的脚本引擎，开箱即用。</li>
<li>使用 QuickJS 单引擎：大神开发的 JS 引擎，胜在体积极小，性能优秀。</li>
<li>使用自研 JS 引擎：基本上业内都是基于 QuickJS 做优化的。</li>
</ol>
<p>小结了一下 QuickJS 目前存在一些问题：</p>
<ol>
<li>没有 JIT，这个按需实现吧，有 JIT 虽然执行效率上了一个数量级，但是作为胶水语言而言看重的不是这些。JIT 会导致冷启动耗时增加、内存占用变大、体积变大，而且 iOS 还不能用。</li>
<li>手动 GC，难以管理和维护，可优化</li>
<li>缺失行号记录</li>
<li>缺失 Debugger，目前 github 有一些开源插件实现了</li>
<li>缺少 code cache</li>
<li>缺少 inline cache</li>
<li>缺少内存泄露检测能力</li>
<li>Bytecode 有许多优化的空间</li>
</ol>
<h3>渲染引擎</h3>
<p>渲染引擎选型思路有二：</p>
<ol>
<li>基于 Flutter Engine</li>
<li>基于系统图形库，如 Skia / OpenGL / Metal / Vulkan</li>
</ol>
<p>不管基于啥，框架的整体思路都是精简管线，并使用同步光栅化。</p>
<h3>调试器</h3>
<p>Debugger 一种可以让 JavaScript Runtime 进行中断，并可以实时查看内部运行状态的应用，是提供开发者使用的工具，作为框架而言必不可少。</p>
<p>目前主要有三种调试协议，刚才介绍的框架都至少实现了其中一种：</p>
<ol>
<li>CDP: Chrome DevTools Protocol</li>
<li>DAP: Debug Adapter Protocol</li>
<li>自建协议：微信小程序早期就是自建协议</li>
</ol>
<h3>工程化方案</h3>
<p>工程化至少包括以下工作：</p>
<ol>
<li>资源加载方案</li>
<li>降级处理</li>
<li>版本管理</li>
<li>研发模式</li>
</ol>
<p>这里之前 Q 音开发的 Kant 在工程化上有过详细的设计与实现，此处不展开说了。</p>
<h2>总结</h2>
<p>自绘框架常遇到的问题与解题思路：</p>
<ol>
<li>开发体验差：生态使用前端生态，即提供 JS Runtime；需要提供 Debugger；IDE 需要支持语言服务。</li>
<li>文档写的不好：写好文档。</li>
<li>CSS 能力不够用：对齐标准；如果 Dart 侧实现 CSS，需要把 RenderObject 做厚。</li>
<li>样式和 H5 不一样：堆测试用例，配合 WPT 验证</li>
<li>Android 和 iOS 不一致：利用已有资源，可基于 Flutter</li>
<li>组件太少，没有生态：对齐 W3C 标准，尽可能完备</li>
<li>JS 执行性能差：自研 JS 引擎</li>
<li>不够标准，无法复用社区库：对齐 W3C 标准，尽可能完备</li>
</ol>
<p>值得学习的一些经验：</p>
<ol>
<li>标准至上</li>
<li>提供丰富的文档</li>
<li>少自研，合理利用已有资源</li>
<li>开发体验很重要</li>
<li>关注低端机表现</li>
</ol>
<h2>参考资料与扩展阅读</h2>
<ul>
<li>PPT(已脱敏): <a href="https://weekly.ursb.me/slide/cross-end/">https://weekly.ursb.me/slide/cross-end/</a></li>
<li>门柳：《淘宝新一代自绘渲染引擎的架构与实践》（2023 GMTC）</li>
<li>聂鑫鑫：《Waft：基于 WebAssembly 和 Skia 的 AIoT 应用开发框架》（2023 GMTC）</li>
<li>晟怀：《WebF 是如何高性能实现 Flutter + Web 融合》（2022 QCon）</li>
<li>吉丰：《大终端领域的新物种-KUN》</li>
<li><a href="https://github.com/openwebf/webf/pull/227/files">openwebf/WebF</a></li>
<li>Airing：《Kant 在「QQ 音乐」的实践》（未公开）</li>
<li>Airing：《Flutter 动态化方案》（未公开）</li>
</ul>
]]></content:encoded></item></channel></rss>