{
    "version": "https://jsonfeed.org/version/1.1",
    "title": "Jie’s Vibes",
    "home_page_url": "https://bojieyang.github.io/",
    "feed_url": "https://bojieyang.github.io/feed.json",
    "description": "",
    "icon": "https://bojieyang.github.io/apple-touch-icon.png",
    "favicon": "https://bojieyang.github.io/favicon.ico",
    "expired": false,"author":{
        "name": "bojieyang",
        "url":"https://bojieyang.github.io",
        "avatar":null},"language": "zh-CN",
"items": [{
            "id": "https://bojieyang.github.io/posts/warp-to-rescue-google-misidentify-ip/",
            "title": "IP送中的解决办法",
            "summary": "使用 WARP 解决 Google 将 VPS IP 识别为中国大陆 IP",
            "content_html": "<p>请前往<a href=\"https://bojie.site/posts/2026-05-25/\">新网站</a>阅读。</p>",
            "url": "https://bojieyang.github.io/posts/warp-to-rescue-google-misidentify-ip/","tags": ["科学上网","IP送中"],"date_published": "2026-05-25T00:00:00+08:00","date_modified": "2026-05-25T00:00:00+08:00","author":{
                "name": "bojieyang",
                "url":"https://bojieyang.github.io",
                "avatar":null}},{
            "id": "https://bojieyang.github.io/posts/trump-effect/",
            "title": "特朗普效应",
            "summary": "特朗普的上台可能给 2025 年带来哪些投资机会？",
            "content_html": "<p>请前往<a href=\"https://bojie.site/posts/2025-03-03/\">新网站</a>阅读。</p>",
            "url": "https://bojieyang.github.io/posts/trump-effect/","tags": ["投资","投资备忘录"],"date_published": "2025-03-03T00:00:00+08:00","date_modified": "2025-03-03T00:00:00+08:00","author":{
                "name": "bojieyang",
                "url":"https://bojieyang.github.io",
                "avatar":null}},{
            "id": "https://bojieyang.github.io/posts/several-stews/",
            "title": "几道炖菜",
            "summary": "近期做了几道炖菜，品相不好，但味道还不错。",
            "content_html": "<p>请前往<a href=\"https://bojie.site/posts/2024-07-09/\">新网站</a>阅读。</p>",
            "url": "https://bojieyang.github.io/posts/several-stews/","date_published": "2024-07-09T00:00:00+08:00","date_modified": "2024-07-09T00:00:00+08:00","author":{
                "name": "bojieyang",
                "url":"https://bojieyang.github.io",
                "avatar":null}},{
            "id": "https://bojieyang.github.io/posts/refactor-website/",
            "title": "重构个人网站并启用新域名",
            "summary": "全面拥抱 Node.js 生态",
            "content_html": "<ul id=\"markdown-toc\">  <li><a href=\"#当前方案的不足\" id=\"markdown-toc-当前方案的不足\">当前方案的不足</a></li>  <li><a href=\"#重构的契机\" id=\"markdown-toc-重构的契机\">重构的契机</a></li>  <li><a href=\"#新的方案\" id=\"markdown-toc-新的方案\">新的方案</a></li>  <li><a href=\"#改版收益\" id=\"markdown-toc-改版收益\">改版收益</a>    <ul>      <li><a href=\"#技术方面\" id=\"markdown-toc-技术方面\">技术方面</a></li>      <li><a href=\"#内容方面\" id=\"markdown-toc-内容方面\">内容方面</a></li>    </ul>  </li>  <li><a href=\"#过渡方案\" id=\"markdown-toc-过渡方案\">过渡方案</a></li>  <li><a href=\"#快来看看\" id=\"markdown-toc-快来看看\">快来看看</a></li></ul><p>我在 2021 年底决定开始写博客，那时的首要目标是低成本地完成站点搭建并尽快开始发布文章。于是我直接使用了 Jekyll 框架并部署在<a href=\"https://pages.github.com\" title=\"Websites for you and your projects\">GitHub Pages</a>。这个方案的优点是 Jekyll 非常容易上手且对博客类型网站支持很好，结合 GitHub Action 部署简单且完全免费。另外由于我对我的设计能力完全没有信心，于是使用了 <a href=\"https://github.com/andybrewer/mvp/\" title=\"Minimalist stylesheet for HTML elements\">mvp.css</a> 这个只需写页面结构，无需编写 CSS 即可获得美观样式的方案。</p><p>现在回过头来看，这个方案很成功，让我快速的把博客搭建起来并持续写了 20 多篇博客。</p><h2 id=\"当前方案的不足\">当前方案的不足</h2><p>不过这两年多使用下来，这个方案也有一些不足之处：</p><ul>  <li>    <p>纯静态站点，无法实现动态功能。Jekyll 只支持生成静态站点 (SSG)，且 GitHub Pages 也仅支持静态网站的部署。如果我想要增加评论等需要后端服务才能支持的功能时，这个方案就无法实现了。</p>  </li>  <li>    <p>(我) 难以扩展。Jekyll 其实提供了很好的插件机制，但由于其采用 ruby 语言编写，我 (不会 ruby 也不想学) 无法通过内置的插件机制来实现各种自定义需求，只能转而采用其他方式间接实现。比如我的部署前自动压缩图片的功能，是通过 shell 脚本配合 npm 命令实现的。这就导致在开发和部署时十分别扭，我需要先执行 Node.js 命令，然后在再通过 Jekyll build 完成站点的构建。也就是说，站点构建过程被割裂开了。</p>  </li>  <li>    <p>Jekyll 的版本更新已不再活跃。最近两年 Jekyll 仅有 4 次小版本发布，且几乎没有增加新功能，仅仅是问题修复和依赖升级。而同期的 React 和 Node.js 领域，各种创新层出不穷，从 Server Action 到 Edge Function，从 Nextjs 一家独大到各种框架百花齐放。让我数次产生想要迁移的冲动。</p>  </li></ul><h2 id=\"重构的契机\">重构的契机</h2><p>不过我一直说服自己博客最重要的是持续输出内容，而不是折腾各种酷炫的技术和好看的主题。因此我给自己设定了需要同时满足三个条件才能考虑博客的重构。它们分别是：</p><ul>  <li>至少发布 20 篇博客文章。</li>  <li>注册一个合适的域名。</li>  <li>再发现一个现有方案的痛点。</li></ul><p>今年，压死骆驼的最后一根稻草终于出现了🤣。那就是 squoosh cli 不再维护了。这导致其只支持 Node.js v16。而 v16 版本的生命周期在 2023 年 9 月就结束了。于是我在站点构建时又多了个步骤：切换 Node.js 版本到 v16。在这样切换了几次后，我终于下定决心要进行重构了。</p><h2 id=\"新的方案\">新的方案</h2><p>近几年流行的前端框架之多，既有 Nextjs 这种最流行的大众之选，也有我个人最喜欢的 Remix，甚至还有很多小众但各具特色的框架，简直让我犯了选择困难症。不过考虑到博客是典型的重内容、轻交互的网站类型，我最终选择了 Astro 这个后起之秀。毕竟其官网的介绍就是 “The web framework for content-driven websites”。</p><p>Astro 的功能很全面，但有两个特性对静态站点 (SSG) 特别有用。一个是 Content Collections 特性：提供了以类型安全 (type-safety) 的方式定义和验证任意文档类型。另一个是 astro:assets 特性：可以在站点构建时自动压缩和裁剪图片。</p><p>关于博客的样式，我本来想简单选个主题完事，但后来觉得自己的博客还是应该有自己的风格，用了主题后反而不便于调整修改。于是用 tailwindcss 完成了初版的样式设计。</p><p>还有一个重要改变是网站托管从 GitHub Pages 迁移到了 <a href=\"https://pages.cloudflare.com\" title=\"Build fast sites In record time\">Cloudflare Pages</a>。这个改变主要是考虑到未来有些功能会需要后端服务的支持，必须选择一个支持服务端渲染的托管环境。而这样的托管环境，开发体验最好的是 Vercel 和 Cloudflare Pages。我最终选择了 Cloudflare Pages。原因是 Vercel 虽然也提供了很慷慨的免费额度，但一不小心也可能出现<a href=\"https://serverlesshorrors.com/all/vercel-3k\">刷爆信用卡的情况</a>。</p><h2 id=\"改版收益\">改版收益</h2><p>经过这次改版，在技术和内容这两方面都获得了很多益处。</p><h3 id=\"技术方面\">技术方面</h3><ul>  <li>简化了站点构建流程。无需再额外处理图片压缩等问题，写完博客，提交到仓库后就会自动完成构建并更新网站。</li>  <li>具备了服务端渲染（SSR）的能力。虽然当前新版博客仍然是纯静态站点，但已经具备服务端渲染的能力。未来可以将整站或任意页面改为服务端渲染以支持评论等功能。</li>  <li>（对我）更好的扩展机制。相对于 Jekyll 而言，开发 Astro 的插件对我来说要容易的多。</li>  <li>MDX 格式更方便在博客文章中插入一些小组件。Jekyll 只支持 markdown 格式，所以之前要在文章中加入非 markdown 语法的内容，只能通过内嵌 html fragment 的方式实现。而使用 MDX，可以直接导入组件，这实在是方便了太多。</li></ul><h3 id=\"内容方面\">内容方面</h3><p>除了技术方面的改进。这次重构在内容方面也做了一些调整优化。主要集中在以下方面：</p><ul>  <li>调整了博客分类。之前的分类有些随意。随着内容的增加，分类和标签的区别越来越模糊不清。新版中分类固定分成了「生活方式」、「个人成长」、「投资理财」、「产品心得」、「观点看法」、「经验技巧」等六个类别。更具体的细分则由标签来承载。</li>  <li>调整了「投资备忘录」系列的内容。「投资备忘录」系列的本意是记录投资中的判断和决策的依据和思考过程，以供未来复盘使用。因此这个系列的文章，最重要的是要有明确观点或结论可被后续验证。但之前我将一些方法论类型的文章也放到了这个系列里，而这些内容是无法被验证的，也就失去了备忘录系列的意义。这次趁机将这这些文章移出了此系列。</li></ul><h2 id=\"过渡方案\">过渡方案</h2><p>由于有人已经收藏了或是通过 RSS 订阅了当前站点，因此直接将当前站点下线或重定向到新域名并不是一个好的选择。在未来很长一段时间内，当前网站仍将继续存在，但新文章则只有摘要信息和对应的新网站的链接，以引导用户至新网站。</p><h2 id=\"快来看看\">快来看看</h2><p>写了这么多，终于可以放上新网站的链接了。 <a href=\"https://bojie.site\" title=\"站点新域名\">https://bojie.site</a>，快来看看吧。</p>",
            "url": "https://bojieyang.github.io/posts/refactor-website/","tags": ["Astro","Cloudflare Pages"],"date_published": "2024-06-20T00:00:00+08:00","date_modified": "2024-06-20T00:00:00+08:00","author":{
                "name": "bojieyang",
                "url":"https://bojieyang.github.io",
                "avatar":null}},{
            "id": "https://bojieyang.github.io/posts/from-using-line-providers-to-self-hosting/",
            "title": "从使用机场到自建服务",
            "summary": "从使用机场到自建服务，从 openclash 到 sing-box，到目前为止感觉良好。",
            "content_html": "<ul id=\"markdown-toc\">  <li><a href=\"#为什么要做这件事\" id=\"markdown-toc-为什么要做这件事\">为什么要做这件事</a></li>  <li><a href=\"#自建服务\" id=\"markdown-toc-自建服务\">自建服务</a></li>  <li><a href=\"#从-openclash-迁移到-sing-box\" id=\"markdown-toc-从-openclash-迁移到-sing-box\">从 openclash 迁移到 sing-box</a></li>  <li><a href=\"#使用感受\" id=\"markdown-toc-使用感受\">使用感受</a></li>  <li><a href=\"#one-more-thing\" id=\"markdown-toc-one-more-thing\">One More Thing</a></li></ul><h2 id=\"为什么要做这件事\">为什么要做这件事</h2><p>过去两年我一直使用某个机场的最<del>基础</del>便宜的套餐，每年的花费大概在 200 元左右。平心而论，该机场服务很稳定，价格也不高，用户体验也还不错，因此过去我一直在用。该机场一直推荐首选 clash 作为科学上网的工具，而我为了方便家里多个设备同时使用，选择了在路由器上安装 openclash 的方案。openclash 其实功能挺全面的，虽然配置界面一言难尽，但好在基本上只需要初始配置一次后就不再需要经常面对了。因此也就一直相安无事的用着。</p><p>但从去年年底 ChatGPT 的发布后，情况出现了一些变化。无论是 chatGPT 还是 Claude，甚至是 Copilot 都限定了支持的区域。而我使用的那个机场会优先把我的访问调度到日本、台湾、新加坡等地区，而这些地区基本都不在支持的范围内。这就导致了我要经常切换线路才能正常使用这些服务。多次手工切换让我感到有点麻烦，于是我开始琢磨怎么能自动化的处理这个问题。</p><p>另一个问题是我喜欢在 Netflix 看美剧，Netflix 会检测来访的 IP 地址是否属于账号对应的国家。虽然我我使用的机场支持 Netflix 线路切换，但在 4K 画质下偶尔会卡顿一下。虽然发生并不频繁，但却十分影响观影体验。我猜测原因可能是因为高峰期同时服务的用户过多，导致机场服务器带宽过载导致。</p><p>要解决线路切换的问题并不困难。最简单的解决方案是通过分流规则来处理，将特定域名的请求交给特定区域的代理节点来负责，这样就能解决这个问题了。但我是通过机场提供的订阅链接来实现代理节点的配置和分流设置的，无法直接修改配置文件。虽然 openclash 支持通过自定义的第三方规则来覆盖订阅链接中的分流规则，但是附加规则的定义不可避免的依赖订阅链接中定义的<code class=\"language-plaintext highlighter-rouge\">服务器策略组</code>，如果机场的<code class=\"language-plaintext highlighter-rouge\">服务器策略组</code>配置或名称发生变化，则第三方规则就会失效。并且这种情况我只有在出现问题后排查才能发现，为了避免这种不确定性，我没有采用这个方案。</p><p>另一个解决方案是不使用机场，转而采用在 VPS 上自建服务的方式来科学上网。这样既可以保证 VPS 的 IP 的所属国家，又可以独占 VPS 带宽。同时解决以上两个问题。</p><p>因此我打算先搭建一个服务做个简单的尝试，验证一下方案的可行性。</p><h2 id=\"自建服务\">自建服务</h2><p>由于目前 AI 产品基本是美国公司，自然不会限制美国访问。因此 VPS 毫无疑问要选择美国机房的。网上 VPS 提供商非常多。我稍微做了点功课后发现，廉价的且有美国机房的 VPS 提供商，口碑最好的是 RackNerd 和 Cloudcone。我最终选择了 <a href=\"https://app.cloudcone.com/?ref=11253\" title=\"Cloudcone\">Cloudcone</a> LA 区域最便宜的 VPS，年付 17.5 美元。</p><p>自建服务最担心出现且很容易发生的一个情况是 IP 被 GFW 封锁。原因是 GFW 有协议嗅探能力，能够识别出部分代理协议。我在网上查阅了一些资料，发现 VLESS-XTLS-uTLS-REALITY 和 Hysteria2 这两个代理协议反嗅探能力最强，基本不会被 GFW 识别到。我最终选择了 VLESS-XTLS-uTLS-REALITY 协议，原因是 Hysteria2 需要配置一个域名，而我不想为科学上网再单独购买一个域名了。</p><p>原以为最复杂最容易出问题的服务器搭建环节，反而是最简单的和最快速完成的。使用 <a href=\"https://github.com/zxcvos/Xray-script\" title=\"Xray-REALITY 管理脚本\">Xray-REALITY 管理脚本</a>，只需几个回车就完成了服务搭建，全程耗时不超过 3 分钟。反而是客户端配置花费了最多的时间。</p><h2 id=\"从-openclash-迁移到-sing-box\">从 openclash 迁移到 sing-box</h2><p>配置客户端时我才发现，开源的 clash 内核 不支持 VLESS 协议，只有闭源且收费的 clash premium 才支持，而在这个场景下我更愿意使用开源的产品。另外还有一个 clash 的二次开发版 clash meta 支持 VLESS 协议。但不知为何，在我将 openclash 切换到 meta 内核后，出现频繁的内核崩溃，导致完全无法使用。</p><p>这导致我不得不开始考虑 openclash 之外的客户端方案。又在网上做了一番功课后，我发现了 sing-box 这个后起之秀。其完全开源，同时软件更新非常活跃，并且最值得称道的是配置文档说明，既简洁又清晰明了。另外还有一个意外惊喜是，在 openwrt 23.05 版本 (当前最新稳定版) 的官方 opkg 仓库中，已经包含了 sing-box，因此在 openwrt 下安装完全不费事。</p><p>我当前使用的 openwrt 的版本是 22.03，不过从 22.03 升级到 23.05 并不困难，官方支持通过 Sysupgrade 直接升级。我只花了不到 20 分钟就完成系统升级并安装好了 sing-box。</p><p>我花了半个小时浏览了一遍配置说明后就开始进行配置文件编写，除了在 tun 模式配置上遇到了些问题（在网上搜索后在<a href=\"https://www.right.com.cn/forum/thread-8314833-1-1.html\" title=\"Openwrt 使用 Sing-box TUN 模式无感代理\">恩山论坛的一个帖子</a>得到了答案）外，其他部分的配置基本都是查阅配置说明并复制参考配置按需修改即可。</p><p>从开始进行客户端配置到最终可以使用自建服务科学上网，我总共花费了半天左右时间。</p><h2 id=\"使用感受\">使用感受</h2><p>在写这篇博客时，我已经使用自建服务一个多月了。服务非常稳定，几乎没有出现过代理不可用的情况。之前担心的 IP 被封的情况也没发生，看 Netflix 也完全不卡了。简言之，这次自建服务的尝试是非常成功的。我会继续使用下去。如果后续我的看法发生了变化，我会继续更新此博客。</p><p>简单的总结一下，自建方案的优点是：</p><ol>  <li>安全性高，不用担心机场存储你的网络访问记录和（可能存在的）窥视你在网上的一举一动。</li>  <li>稳定性强，不用承担机场跑路的风险。</li>  <li>网络速度快，独享流量和网络带宽。</li></ol><p>相对于使用机场而言，自建方案也有一些不足之处的：</p><ol>  <li>单 VPS 没有故障转移的能力，一旦 VPS 故障或 IP 被封就无法科学上网了。而如果采用多 VPS 部署服务，虽然可以自动故障转移，但每年花在 VPS 上的钱会比使用机场高出不少，并且绝大多数时间服务器都是闲置的。</li>  <li>自建服务也就意味着需要自行维护。也就没有了使用机场的简单省事。虽然在完成服务器搭建后的这一个多月里我都没有登陆过 VPS 了，但这并不意味着没有维护成本，后续的软件升级维护等事项依然会持续耗费精力。</li></ol><p>总而言之，自建方案在得到了更多安全性的同时牺牲了一些便利性。因此更适合有一定技术能力且愿意在这方面投入精力的人。</p><h2 id=\"one-more-thing\">One More Thing</h2><p>通过这次自建服务的经历，我发现我甚至可以非常粗略的估算出机场的成本和利润率。估算方法如下：最便宜的 VPS 大概一年 17 美元，提供每月 3T 流量和 1G 带宽。而我使用的机场最便宜的套餐是一年 26 美元，提供每月 200G 流量和 100M 带宽。由此可以推算一台 VPS 可以支持 10 个用户<strong>同时</strong>使用完全绰绰有余。而实际情况是 10 个用户同时跑满带宽的情况非常低，因此机场应该会大量超卖。再考虑到机场大规模采购 VPS 甚至直接在 IDC 托管服务器设备的成本应该更低。由此可以推断在用户充足的情况下，占机场成本最大的服务器和网络成本还不到营收的 3%，甚至更低。这也就可以理解为什么机场都提供非常慷慨的分销返利了。</p>",
            "url": "https://bojieyang.github.io/posts/from-using-line-providers-to-self-hosting/","image": "https://bojieyang.github.io/assets/img/dist/from-using-line-providers-to-self-hosting.webp","tags": ["互联网","科学上网"],"date_published": "2024-04-07T00:00:00+08:00","date_modified": "2024-04-07T00:00:00+08:00","author":{
                "name": "bojieyang",
                "url":"https://bojieyang.github.io",
                "avatar":null}},{
            "id": "https://bojieyang.github.io/posts/leverage-your-skills/",
            "title": "给你的技能加上杠杆",
            "summary": "做对的事远比把事情做对更重要。",
            "content_html": "<ul id=\"markdown-toc\">  <li><a href=\"#打磨专业技能\" id=\"markdown-toc-打磨专业技能\">打磨专业技能</a></li>  <li><a href=\"#发挥创造性\" id=\"markdown-toc-发挥创造性\">发挥创造性</a></li>  <li><a href=\"#增加杠杆效应\" id=\"markdown-toc-增加杠杆效应\">增加杠杆效应</a></li>  <li><a href=\"#参考\" id=\"markdown-toc-参考\">参考</a></li></ul><p>什么工作才是有「钱途」的？</p><p>我认为可以从技能可替代的难易程度和需要自己持续投入时间的多少这两个维度来衡量。</p><p>技能可替代性很好理解，如果一个人目前的工作技能可以被另一个人或机器轻易的取代，那就说明这项技能的可替代性很强。</p><p>一项技能是否容易被替代，主要取决于两方面的因素：掌握此项技能的难易程度和拥有此项技能的人的供给量。</p><p>如果一项技能只需要很短的时间就可以完全掌握，那意味着几乎任何人都是潜在的技能供应者，由于没有门槛限制，供应近乎无限，所以收入只能维持在最低水平（因为总有人愿意以更低的工资来获取这份工作）。此类工作的代表是「街头发广告传单」，「日本的煮饭仙人」等。衡量标准是「在喝醉的情况下是否仍然能够完成此项工作」。由于技能水平不会随着工作年限的增加而进度，此类工作几乎没有提升空间，因此明智的选择就是尽早退出。</p><h2 id=\"打磨专业技能\">打磨专业技能</h2><p>需要更长时间才能掌握的复杂技能，由于习得这项技能需要更多的时间，因此技能的供给者会减少很多，所以可替代性会低很多，因此收入相对前者会高很多。比如客车司机至少需要几个月的培训和考试才能取得职业资格，翻译则需要数年的时间才能掌握一门语言，因此他们的潜在竞争对手会少一些，收入也会随之提高。</p><p>但并不是掌握了复杂技能就万事无忧了，随着科技的发展进步，一些专业技能正在变为普通人的通用技能；一些之前只能由人来完成的工作，可能在不久的将来被机器代替。最近的二三十年，客车驾驶技能就已经从专业技能变为了通用技能，因此近十年出租车司机的收入水平一直是停滞不前的。以前翻译一本图书需要翻译人员耗费大量的时间和心血才能完成，但随着 AI 技术的飞速发展，现在的图书翻译仅需要机器翻译后再由人工校验和少量润色即可完成。可以预见，在不久的将来，翻译技能也会变成普通人的通用技能。</p><h2 id=\"发挥创造性\">发挥创造性</h2><p>一个工作中越是固定和重复的事项，越容易被机器替代。反过来说，<strong>一项工作越有创造性，就越难以被机器替代</strong>。</p><p>当你发现在工作中，总是在走流程，而很少有需要发挥创造性的时候，就需要警惕起来了，这通常意味着可替代性很强。要想避免这种情况，就要通过在事项或流程中增加你的创造性来影响业务结果，如果你能做到这一点，那你几乎肯定会在同事中脱颖而出。</p><p>如果一个工作需要很多创造性，那从事这份工作的收入一定是很可观的，可以达到中产甚至富人阶层。此类工作的代表有：美国的医生和律师、中国的软件工程师等。随着工作年限的增加，相应的技能经验也在持续积累，因此有不错的上升空间，此类工作甚至可以一直做到退休。</p><h2 id=\"增加杠杆效应\">增加杠杆效应</h2><p>虽然高创造性的工作很好，但依然有这样一个事实：<strong>这只是在通过自己的时间来换取收入</strong>。这种交换有个很大的局限性，那就是如果不投入时间进行工作，就没有收入。</p><p>更好的工作是<strong>利用别人的时间来换取收入</strong>，从某个角度可以被认为是增加了杠杆效应。加杠杆的方式通常有三种，分别是：人力杠杆、资金杠杆、产品杠杆。</p><p>人力杠杆是指让别人为你工作。公司中的员工在本质上就是在用自己的时间来替他们的老板完成工作。比如一个公司中的所有销售人员所获的收入，从某种意义上看，就是老板花钱买自己在销售这项工作上的投入时间。</p><p>资金杠杆是指通过投资获得收益，也就是俗称的钱生钱。一级市场的风险投资，二级市场的股票交易都属于此类。还有一种情况是通过获的他人的投资来加速一项工作，比如加盟店模式，也是通过资金杠杆来加速营收的增长。</p><p>产品杠杆是指通过打造一项产品来获得收入的方式。比如出了一本书，通过这本书的版权获取收益；开发出了一个软件服务，按订阅收费等。这种方式最大的特点是在打造产品的过程中需要花费自己大量的时间，一旦产品完成后，需要投入的时间就会急剧减少。</p><p>在过去相当长的一段时间里，人力杠杆和资金杠杆是主要的加杠杆方式，但他们也需要承担相应的风险，所以主要是富人在使用。而产品杠杆则是随着互联网的发展在过去二十年里大放异彩，从 Mark Zuckerberg 创造出社交网络 Facebook，从 J. K. Rowling 写出作品 Harry Potter，我们可以看到一个普通人把自己的技能叠加了产品杠杆后所能发挥出的威力。</p><p>此外，这三种杠杆并不是互斥的。它们还可以叠加，并且这种例子很常见。比如找 VC 拿到一笔风险投资后，开一间公司招聘数名软件工程师开发一个网络游戏，通过游戏道具付费的方式获得营收。这个例子就同时利用了上面提到的三种杠杆。</p><p>所以，单纯从收入的角度来看，一项工作应该既是难以替代且具有创造性，同时还可以利用至少一种杠杆效应，才是理想的工作。</p><p>怎样找到这样的工作呢？</p><p>最简单的方法，就是给你的技能加上一个产品杠杆，这几乎是任何人都可以采取的方案。如果你是一个在大厂任职的程序员，可以考虑利用业余时间开发自己的应用软件；如果你是一个网站的责任编辑，可以考虑写一部作品或是开通公众号写博客；如果你是广告公司的策划，可以考虑利用周末拍个短视频。</p><p>通过这种方式，既在打磨自己的技能水平，也在逐步打造属于自己的产品。同时，由于没有辞去当前工作，所以风险很小，可以让你多次尝试。而一旦成功的打造出产品，你就拥有了这份理想的工作了。</p><h2 id=\"参考\">参考</h2><p>1.「技能与杠杆矩阵」来源于 <a href=\"https://radreads.co/10k-work/\">The magic of doing $10,000 per hour work</a></p><p>2.「三类杠杆效应」来源于 <a href=\"https://book.douban.com/subject/35876121/\">纳瓦尔宝典</a></p>",
            "url": "https://bojieyang.github.io/posts/leverage-your-skills/","image": "https://bojieyang.github.io/assets/img/dist/10k_matrix.webp","tags": ["读书笔记","职业发展"],"date_published": "2023-05-26T00:00:00+08:00","date_modified": "2023-05-26T00:00:00+08:00","author":{
                "name": "bojieyang",
                "url":"https://bojieyang.github.io",
                "avatar":null}},{
            "id": "https://bojieyang.github.io/posts/a-few-life-hacks-keep-me-slim/",
            "title": "几个让我保持身材的生活习惯",
            "summary": "一个多月无刻意节食，我仍然瘦了 8 斤。",
            "content_html": "<ul id=\"markdown-toc\">  <li><a href=\"#每逢佳节胖八斤\" id=\"markdown-toc-每逢佳节胖八斤\">每逢佳节胖八斤</a></li>  <li><a href=\"#用生活化的方式保持身材\" id=\"markdown-toc-用生活化的方式保持身材\">用生活化的方式保持身材</a>    <ul>      <li><a href=\"#保证入睡前有饥饿感\" id=\"markdown-toc-保证入睡前有饥饿感\">保证入睡前有饥饿感</a></li>      <li><a href=\"#几个亲身实践的有效的方法\" id=\"markdown-toc-几个亲身实践的有效的方法\">几个亲身实践的有效的方法</a></li>    </ul>  </li>  <li><a href=\"#写在最后\" id=\"markdown-toc-写在最后\">写在最后</a></li></ul><h2 id=\"每逢佳节胖八斤\">每逢佳节胖八斤</h2><p>自从 2021 年初我从 180 斤减到 140 斤后，之后 2 年中体重一直保持在 135 斤左右。为此我还写了<a href=\"/posts/slim-framework-for-ordinary/\" title=\"给普通人的瘦身减脂框架\">给普通人的瘦身减脂框架</a>这篇博客来介绍经验方法。</p><p>不过今年我回老家过春节，陪父母住了一个月，情况发生了改变。在这一个月里，我妈天天给我做好吃的，导致我每顿的饭量基本是在杭州时的两倍，再加上没有什么像样的运动，短短一个月，我的体重从 135 斤增长到了 143 斤，腹肌也从分离的八个岛屿变成了 One Piece。</p><h2 id=\"用生活化的方式保持身材\">用生活化的方式保持身材</h2><p>回杭州后，我就开始有意识的控制体重。不过这次，我并没有采用之前严格方式，而是通过更加生活化的方式来完成的。效果仍然十分好，短短 1 个月，我就回到了 135 斤，腹肌也回来了。</p><p>本次采用的理念与之前文章没有任何变化，核心思路依然是持续制造热量差。只不过，之前的方式是先通过公式计算初基础代谢，再通过查饮食的营养成分表来判断大概摄入热量，然后配合运动，来达到消耗的热量大于摄入的热量的目标。而这次，我没有那么刻板的执行，而是通过一些日常小技巧来做到。</p><h3 id=\"保证入睡前有饥饿感\">保证入睡前有饥饿感</h3><p>之前的方法我这两年实践下来，发现其实最难的是<strong>判断摄入热量</strong>这个环节。通过营养成分表来判断，优点是计算简单，准确率高。但它的缺点也很明显，只适合于制成品，对饮食的约束太大。如果在餐馆吃饭，或是自己开火，就没有办法通过查营养成分表的方式来知道摄入的热量了。</p><p>由于我今年的年度挑战是做一百道不同的菜，因此需要经常自己做菜，查营养成分表的方式就行不通了。</p><p>于是我就换了一个思路：想要知道摄入的热量只是手段，最终目的其实是想要知道当天是否制造了热量差。那么，有没有什么方法能够直接判断出来呢？我网上搜索加亲身实践后发现，有一个简单的方式就能大概判断出来，那就是<strong>入睡前是否有饥饿感</strong>。</p><p>如果在入睡前能感到有点饿，那就说明当天已经完成了制造热量差的目标了。入睡前是指<strong>进入梦乡前</strong>，而不是刚躺上床。</p><p>刚开始几天可能把握不好尺度，导致饥饿感时有时无。但只要多试几次，基本就能找到规律。我这次花了一周左右，之后就基本每天都能保证在入睡前有饥饿感了。</p><h3 id=\"几个亲身实践的有效的方法\">几个亲身实践的有效的方法</h3><p>有了判断方法后，我就开始尝试调整一些生活方式，来达到这个目的。经过一个多月的实验，我总结出了以下几条（对我）有效的方法：</p><ul>  <li>    <p><strong>一定要吃早餐</strong>。由于入睡前已经有饥饿感了，就需要早上补充能量，不然会长时间低血糖，导致身体疲倦，影响日常生活，而且会中午吃的更多。我基本在麦当劳或肯德基用肉蛋汉堡咖啡套餐搞定早餐。</p>  </li>  <li>    <p>中餐、晚餐正常吃，<strong>不用</strong>刻意控制节食。我的方法是吃的慢一点，就不容易感到饱。</p>  </li>  <li>    <p>晚餐时间与睡眠时间保持 5 小时以上间隔。我一般晚上 12 点前睡觉，晚饭基本在 6 点左右吃完。</p>  </li>  <li>    <p>不在晚餐后吃零食。我发现只要在晚上吃零食，就很难在入睡时有饥饿感。所以我晚饭后除了喝水，基本不吃任何东西了。但例外是如果在运动后感到饿，会补充 30 克左右的蛋白粉。</p>  </li>  <li>    <p>每周安排适量的有氧运动和力量训练。我感觉保持每周 2 次有氧，1 次力量训练的频次就可以有效的提高新陈代谢水平。如果有爱好的运动，就用它来替代有氧运动。运动和训练都不用追求极限，但要出汗。我近一个月都保持一周 3 - 4 次有氧运动（用爱好运动代替），每次 2 小时；1 -2 次力量训练，每次 45 -60 分钟。</p>  </li>  <li>    <p>保持充足的睡眠时间。<strong>不要熬夜！不要熬夜！不要熬夜</strong>！睡眠时长不足会扰乱激素分泌，导致注意力难以集中，冲动易怒，甚至暴饮暴食。我这个月有一次熬夜到凌晨 3 点多，之后缓了 2 天才恢复过来。</p>  </li></ul><h2 id=\"写在最后\">写在最后</h2><p>要想控制体重、保持身材，本质还是要持续保持热量差。以上方法只是简化了判断热量差的方式，然后用几个生活习惯来尽量达到这一点。</p><p>如果你也想要尝试这个方法，不要刻板执行，可以做一些适合自己的调整。并且每周测量体重，通过体重变化情况来判断方法是否有效，如果有效就持续，否则就需要进行一些调整后再执行一周看看效果。</p>",
            "url": "https://bojieyang.github.io/posts/a-few-life-hacks-keep-me-slim/","image": "https://bojieyang.github.io/assets/img/dist/a_few_life_hacks_keep_me_slim.webp","tags": ["健身","瘦身","减脂"],"date_published": "2023-03-20T00:00:00+08:00","date_modified": "2023-03-20T00:00:00+08:00","author":{
                "name": "bojieyang",
                "url":"https://bojieyang.github.io",
                "avatar":null}},{
            "id": "https://bojieyang.github.io/posts/my-first-github-action-released/",
            "title": "我的第一个 GitHub Action 发布了",
            "summary": "记录我开发并上架第一个 GitHub Action 的过程和从其中学到的东西",
            "content_html": "<ul id=\"markdown-toc\">  <li><a href=\"#背景\" id=\"markdown-toc-背景\">背景</a></li>  <li><a href=\"#使用方式简介\" id=\"markdown-toc-使用方式简介\">使用方式简介</a></li>  <li><a href=\"#我从中学到的东西\" id=\"markdown-toc-我从中学到的东西\">我从中学到的东西</a>    <ul>      <li><a href=\"#预期花费天数要乘以三\" id=\"markdown-toc-预期花费天数要乘以三\">预期花费天数要乘以三</a></li>      <li><a href=\"#在下一个项目使用-typescript无论项目大小\" id=\"markdown-toc-在下一个项目使用-typescript无论项目大小\">在下一个项目使用 typescript，无论项目大小</a></li>      <li><a href=\"#产品的美在于统一统一要靠规范\" id=\"markdown-toc-产品的美在于统一统一要靠规范\">产品的美在于统一，统一要靠规范</a></li>    </ul>  </li>  <li><a href=\"#令人抓狂的小插曲\" id=\"markdown-toc-令人抓狂的小插曲\">令人抓狂的小插曲</a></li></ul><h2 id=\"背景\">背景</h2><p>事情的起因是由于 new Bing 整合的 ChatGPT 很好用，让我使用的频率增加了很多。于是我就把博客加入了 Bing Webmaster Tools，然后在其中发现了<code class=\"language-plaintext highlighter-rouge\">IndexNow</code>这个工具。</p><p>这个工具简单来说就是一个搜索引擎的联盟，主动向任何一个联盟内的搜索引擎推送网址收录请求，其他搜索引擎也会得到通知。因此既提高了搜索引擎收录的时效性，又避免了分别向不同的搜索引擎各自提交一遍的繁琐事项，</p><p>于是我想用它来实现将每次新发布的博客自动提交给搜索引擎，以便其收录。</p><p>由于我的博客是采用<code class=\"language-plaintext highlighter-rouge\">Jekyll</code>搭建并托管在<code class=\"language-plaintext highlighter-rouge\">GitHub Pages</code>的静态网站，所以最理想的方式是采用 <code class=\"language-plaintext highlighter-rouge\">Jeykll-plugin</code>的方式在构建时自动提交给搜索引擎。但是可惜，我没有找到对应的 plugin，而我也不想为了开发这个 plugin 去学习<code class=\"language-plaintext highlighter-rouge\">ruby</code>这门语言。</p><p>于是我想到可以退而求其次，通过 GitHub Action 来实现这个功能。这样除了让我可以用熟悉的语言来开发，还有几个额外的好处：</p><ul>  <li>    <p><strong>不限制网站框架与部署环境</strong>。由于 GitHub Action 的代码执行环境与任务调度都是独立的，与网站本身是分离的，因此不依赖任何网站框架。基于 Jekyll, Hugo, Hexo，Nextjs，WordPress 等框架构建的网站都可以使用。也不限制部署环境，无论是 静态网站 还是 动态网站 都可以使用。</p>  </li>  <li>    <p><strong>可以和其他 Workflow 集成</strong>。它被设计成既可以单独使用，也可以作为其他 Workflow 的其中一个 Step 执行。</p>  </li></ul><p>于是说做就做，我花了几天时间，开发了 <code class=\"language-plaintext highlighter-rouge\">IndexNow Action</code>，目前已经在我的博客上使用起来了。同时也发布到了 GitHub Marketplace，其他人也可以使用。</p><h2 id=\"使用方式简介\">使用方式简介</h2><p>使用方式很简单，在博客里我就简单介绍一下，完整文档可以去<a href=\"https://github.com/bojieyang/indexnow-action\" title=\"indexnow-action repository\">官方地址</a>查看。</p><div class=\"language-yaml highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"c1\"># 只要在你的 GitHub workflow 中加入以下 step 就可以使用了。</span><span class=\"na\">steps</span><span class=\"pi\">:</span>    <span class=\"pi\">-</span> <span class=\"na\">uses</span><span class=\"pi\">:</span> <span class=\"s\">bojieyang/indexnow-action@v1</span> <span class=\"c1\"># v1 is the latest major version following the action-versioning.</span>    <span class=\"na\">with</span><span class=\"pi\">:</span>      <span class=\"na\">sitemap-location</span><span class=\"pi\">:</span> <span class=\"s2\">\"</span><span class=\"s\">https://example.com/sitemap.xml\"</span> <span class=\"c1\"># your sitemap location, must start with http(s).</span>      <span class=\"na\">key</span><span class=\"pi\">:</span> <span class=\"s\">${{ secrets.INDEXNOW_KEY }}</span> <span class=\"c1\"># The key you get from IndexNow.</span></code></pre></div></div><h2 id=\"我从中学到的东西\">我从中学到的东西</h2><h3 id=\"预期花费天数要乘以三\">预期花费天数要乘以三</h3><p>我原本认为我基本上用一天时间就可以完成功能开发和验证，但实际上花了 3 天，其中一天还搞到了凌晨 3 点多（见令人抓狂的小插曲部分）。原因是我自以为懂<code class=\"language-plaintext highlighter-rouge\">javascript</code>，但实际上我从没在工作中用过这门语言，远远谈不上熟练。因此在开发时各种查语法，查 API 的用法花费了很多时间。再加上低估了写使用文档的时间，让我的实际投入时间大概是预估的三倍多。</p><p>总之，实际做起来，就会出现各种预期之外的情况，整体上会比预想的花费时间要多很多。因此要留足缓冲时间，以免到时手忙脚乱。</p><h3 id=\"在下一个项目使用-typescript无论项目大小\">在下一个项目使用 typescript，无论项目大小</h3><p>我在初始化项目时是用的官方工程模版，官方其实提供了 2 个模版，一个是 <code class=\"language-plaintext highlighter-rouge\">javascript-action</code>, 另一个是<code class=\"language-plaintext highlighter-rouge\">typescript-action</code>，我选择了<code class=\"language-plaintext highlighter-rouge\">javascript-action</code>，原因是我以为代码量很少，体现不出 typescript 静态类型检查的优势，编写类型声明相关代码反而会让编码更繁琐。</p><p>事实证明这是个<strong>错误</strong>的决定。由于我的语法不熟，刚开始写出来的代码有各种小问题，如果是静态类型检查，基本上编辑器就直接提示错误了，最不济在编译期间也能发现。但 javascript 的动态类型让这项检查推迟到了运行时，于是我不得不通过 <code class=\"language-plaintext highlighter-rouge\">单元测试 --&gt; 发现一个编码问题 --&gt; 修复后再单元测试 --&gt; 再发现另一个编码问题</code> 这种方式来完成开发，增加了很多无谓的时间消耗。</p><p>这还是一个非常小的项目，动态类型检查对效率的负面影响就已经到了能够感知到的程度。如果是更大的项目，本该在编译时解决的问题被拖到运行时，所浪费的时间会更多。</p><h3 id=\"产品的美在于统一统一要靠规范\">产品的美在于统一，统一要靠规范</h3><p>GitHub 对规范的重视程度让我吃惊。由于我打算让其他人也能使用这个工具，因此就需要写<code class=\"language-plaintext highlighter-rouge\">README</code>介绍使用方法。</p><p>原本我以为可以随意写，就去找几个知名项目准备借鉴一下。结果让我发现了<a href=\"https://github.com/RichardLitt/standard-readme/blob/master/spec.md\" title=\"GitHub README Spec\">GitHub README Spec</a>。是的，就连写 <code class=\"language-plaintext highlighter-rouge\">README</code>也有规范，而且还规范的很详细，各种示例与解释说明都很完整。于是我好奇的随机查看了几个 GitHub 上的仓库，发现他们的 README 都遵循了规范。</p><p>进而发现，GitHub 在很多细节上都有规范。比如，要想上架 Marketplace，要遵循 <a href=\"https://github.com/actions/toolkit/blob/main/docs/action-versioning.md\" title=\"Action-Versioning\">Action-Versioning</a>，一个关于 <code class=\"language-plaintext highlighter-rouge\">GitHub Action</code> 版本设置的规范。</p><p>在 Action 的图标方面，GitHub 也有规范，用户不能自行上传图标，只能从 <a href=\"https://feathericons.com\" title=\"feather icons\">feather icons</a>中选择图标，但是可以自定义图标颜色。这个方案既规范了图标的尺寸和形状，又避免了审核问题，还保留了一定的自由发挥的空间，真是一举三得，非常巧妙。</p><p>在各种细节层面制定规范已经很不容易做到了，GitHub 厉害的地方在于，它让整个社区都能很好的遵循规范，从而让这个社区体现出一种统一的美感。要知道这是一个全球性的社区，其中的难度不言而喻。</p><h2 id=\"令人抓狂的小插曲\">令人抓狂的小插曲</h2><p>是什么事情让我凌晨 3 点还在熬夜呢。就是官方模版克隆下来的项目提交到 Workflow 上死活跑不通。</p><p>需要的必传参数始终无法注入到 Action 的执行代码中，运行结果就是提示必填参数没有设置。但明明代码和官方示例一摸一样。</p><p>我有一个（不好的）习惯，当我认为一个问题应该解决并且我可以解决的时候，不把这个问题解决掉我就睡不着。于是我反复对比我的执行记录和官方执行记录，从怀疑代码到怀疑环境，从怀疑环境到怀疑镜像。每次重试都是同样的错误提示。在网上搜索了很久，也没什么收获。</p><p><img width=\"482\" loading=\"lazy\" class=\"centered\" src=\"https://bojieyang.github.io/assets/img/dist/the_high_vulnerability_notice.webp\" alt=\"让我抓狂的错误提示\" /><em>忽视一条提示引发的惨案</em></p><p>就在我快要抓狂的时候，突然发现一直存在一条发现高脆弱性代码的提示信息，而这条信息官方示例的执行结果中没有出现。奇诡的是，同样的代码为什么官方的执行结果没有这条提示信息？我当时已经不想再思考这个问题了，看了下关于这个高脆弱性风险的解释和修复方案，很容易修复。于是准备把这个修复后就睡觉，结果发现，修复了这个高脆弱性风险后，奇迹般的，参数注入进去了，执行结果一切正常了。</p><p>我顿时来了精神，开始分析（猜测）原因。结果发现，官方的执行结果之所以没有这条高脆弱性提示信息，是因为对应的代码检查规则在最近几天才加入的，而官方的运行结果是几周前的。</p><p>我接下来猜测，可能因为这个高脆弱性风险是关于脚本注入的，所以当命中这条规则后，<em>GitHub Action</em> 就自动不再进行环境变量传递以规避可能的安全风险。为了验证是否是这种情况，我又把代码改回去实验了一次，结果又执行失败了，果然和我猜测的一致。</p><p><img width=\"403\" loading=\"lazy\" class=\"centered\" src=\"https://bojieyang.github.io/assets/img/dist/fix_high_vulnerability_issue.webp\" alt=\"修复高脆弱性风险的代码\" /><em>CodeQL js/shell-command-injection-from-environment</em></p><p>解决了这个问题后，终于可以睡个好觉了。</p><p>事后回想，也许程序员还是有些代码洁癖更好，这样以来，发现存在类似的提示，不管三七二十一先都修复了再说。也就不会出现我这样的情况了。</p><p>最后，附上项目<a href=\"https://github.com/bojieyang/indexnow-action\" title=\"indexnow-action repository\">官方地址</a>，欢迎使用，欢迎反馈 BUG，欢迎 PR。</p>",
            "url": "https://bojieyang.github.io/posts/my-first-github-action-released/","image": "https://bojieyang.github.io/assets/img/dist/indexnow_action_released.webp","tags": ["SEO","IndexNow","GitHub Action","IndexNow Action"],"date_published": "2023-03-13T00:00:00+08:00","date_modified": "2023-03-13T00:00:00+08:00","author":{
                "name": "bojieyang",
                "url":"https://bojieyang.github.io",
                "avatar":null}},{
            "id": "https://bojieyang.github.io/posts/cooking-in-february/",
            "title": "学做菜的第一个月，比我想象的简单",
            "summary": "二月份我一共做了 16 道菜。从只会煮蛋泡面到基本半小时内搞定一道简易菜；从家里只有盐和酱油到现在有十多种不同的调料；点外卖和在餐馆吃饭的次数用两只手也能数得清了。",
            "content_html": "<ul id=\"markdown-toc\">  <li><a href=\"#一个成功的开始\" id=\"markdown-toc-一个成功的开始\">一个成功的开始</a></li>  <li><a href=\"#心得体会\" id=\"markdown-toc-心得体会\">心得体会</a>    <ul>      <li><a href=\"#从简单的菜开始\" id=\"markdown-toc-从简单的菜开始\">从简单的菜开始</a></li>      <li><a href=\"#不要勉强自己做菜\" id=\"markdown-toc-不要勉强自己做菜\">不要勉强自己做菜</a></li>      <li><a href=\"#按需购置\" id=\"markdown-toc-按需购置\">按需购置</a></li>      <li><a href=\"#选好厨具\" id=\"markdown-toc-选好厨具\">选好厨具</a></li>    </ul>  </li>  <li><a href=\"#二月菜品列表\" id=\"markdown-toc-二月菜品列表\">二月菜品列表</a>    <ul>      <li><a href=\"#菜\" id=\"markdown-toc-菜\">菜</a></li>      <li><a href=\"#汤\" id=\"markdown-toc-汤\">汤</a></li>      <li><a href=\"#主食\" id=\"markdown-toc-主食\">主食</a></li>    </ul>  </li></ul><h2 id=\"一个成功的开始\">一个成功的开始</h2><p>确定今年的年度挑战是做一百道菜以后，我从 2 月 7 日回杭州到今天 (3 月 6 日)，一共做了 16 道不同的菜，有的菜还用不同的教程重复做了几次来比较口味区别。</p><p>这一个月，我从只会煮蛋泡面到基本半小时内搞定一道简易菜；从家里只有盐和酱油到现在有十多种不同的调料；点外卖和在餐馆吃饭的次数用两只手也能数得清了。<img height=\"300\" loading=\"lazy\" class=\"centered\" src=\"https://bojieyang.github.io/assets/img/dist/condiments_and_spices.webp\" alt=\"调味品全家福\" /><em>调味品全家福</em></p><p>我学做菜的方式很简单，就是刷小红书，遇到教做菜的视频就点进去看看，这么操作几次后，小红书就经常给我推荐教做菜的视频了。然后我再从中挑选我喜欢吃的菜来复制。吃完后如果觉得味道好，就加入收藏备忘；如果觉得味道不好，就尝试总结下找找原因，过几天再做一次。</p><p>这样持续了几周后，我从最开始的做菜过程中手忙脚乱到知道要事先准备好所有食材调料再下锅操作；从搞不清调味咸淡到基本能做到八九不离十的程度了；常用的调味品也基本备齐了。</p><h2 id=\"心得体会\">心得体会</h2><p>在这个过程中，我有以下几点体会。</p><h3 id=\"从简单的菜开始\">从简单的菜开始</h3><p><strong>从操作步骤少，烹饪时间短的菜开始。</strong>试想如果我花费了一个多小时做了一道红烧肉，结果发现做失败了，废弃的食材和浪费的时间带来的挫败感可能让我就此打住，不再继续尝试了。所以这一个月，我一般都选择能在 15 分钟内做完的菜，这样既不太费事，又有成就感支持着做下一道菜。</p><p><strong>如果一定要做一道复杂的菜，那就选择用半成品来简化步骤。</strong> 本文封面图是「笋干红烧肉炖土豆」，如果要从头开始做，要耗费一个多小时的时间，于是我 (聪明的) 买了一个笋干红烧肉罐头来简化制作过程。在做这道菜的时候，我所做的就是三个简单步骤：</p><ol>  <li>把罐头倒进锅里；</li>  <li>把土豆切好也倒进锅里，加水炖 20 分钟；</li>  <li>出锅前调味和加香葱。</li></ol><p>这样，一道本月最佳菜品就完成了。</p><p>同理，当我想炒肉丝时，不会选择买块肉回来自己切，而是会直接去超市买肉丝；当我想要炒饭时，会直接去超市买一袋混合蔬菜 (胡萝卜丁、青豆、玉米粒) 作为配菜。</p><h3 id=\"不要勉强自己做菜\">不要勉强自己做菜</h3><p>当连续几天都做菜后，可能会出现厌倦的情况。毕竟既要事先准备和加工食材，又要事后刷锅洗碗。相较于外卖或者在外就餐，确实要麻烦不少。出现暂时不想做菜的状况也是很正常的。如果在这样的情绪下勉强自己继续，容易产生抗拒感，把这个事情当作任务或者负担，反而没法长期执行。</p><p>按《微习惯》这本书介绍的方法，要想培养一个习惯，最重要的是目标要足够小，小到不需要使用意志力来坚持。人一旦感觉到自己在坚持，就会下意识的认为这是一个负担。对应到做菜这件事，我给自己设立的微目标是每周做一道菜就算完成目标，如果超额完成目标，就给自己一些奖励。</p><h3 id=\"按需购置\">按需购置</h3><p>没有必要尝试一次性把调味品、厨具等都买齐，事实上也不可能一次性都买齐。这么做的结果就是要么在做某个菜时发现还有需要的东西没买，要么就是长期不用闲置浪费。更好的方法是按需购买，随着做菜的进程慢慢添加需要的东西。</p><p>对我而言，如果近期想要做的一道菜需要长时间炖煮，才考虑买砂锅；如果近期需要做卤菜，才考虑买腌制相关的调料。关于调料，也不是教程上的都需要准备，有的调料可以用其他替代，或者干脆不放。比如教程上说要用花雕酒，但如果你知道其目的是去腥，那用料酒代替也可以；教程上说要放鸡精、蚝油等，但如果你知道其目的是增加鲜味，那么没有就可以不放。</p><p><img height=\"400\" loading=\"lazy\" class=\"centered\" src=\"https://bojieyang.github.io/assets/img/dist/egg_fried_rice.webp\" alt=\"只用盐调味的蛋炒饭\" /><em>只用盐调味的蛋炒饭</em></p><h3 id=\"选好厨具\">选好厨具</h3><p>对于我来说，在做菜过程中，没有什么比糊锅更令人沮丧的了。更别提还增加了刷锅的难度。我刚开始时用的是一个普通的无涂层铁锅，可能是因为不会开锅和保养，基本每次炒菜都会不同程度的糊锅，尝试了网上搜到的各种号称炒菜不粘锅的方法都没什么效果，让我头疼不已。</p><p>几次之后我实在受不了，换了个麦饭石的不粘锅。从那以后再也没糊锅过。每次做菜心情都变得更好了。</p><h2 id=\"二月菜品列表\">二月菜品列表</h2><p>这些就是我在二月份做过的菜了，对应的教程都在小红书的收藏专辑<a href=\"http://www.xiaohongshu.com/board/63ebb04d000000000100a655?xhsshare=CopyLink&amp;appuid=603a39030000000001000993&amp;apptime=1678073670\" title=\"我收藏的教做菜视频\">学做简易菜</a>中了。</p><h3 id=\"菜\">菜</h3><ul>  <li>平菇炒腊肉</li>  <li>西红柿炒鸡蛋青菜</li>  <li>青椒炒肉肚</li>  <li>烧烤鸡胸肉</li>  <li>口蘑鸡胸肉</li>  <li>葱烧鸡</li>  <li>辣炒鸡腿丁</li>  <li>肉沫豆腐</li>  <li>红烧肉罐头炖土豆</li>  <li>笋干红烧肉罐头炖土豆</li></ul><h3 id=\"汤\">汤</h3><ul>  <li>平菇煎蛋汤</li></ul><h3 id=\"主食\">主食</h3><ul>  <li>蛋炒饭</li>  <li>肉酱什锦豆豉炒饭</li>  <li>腊肠什锦蛋炒饭</li>  <li>口蘑煎蛋汤面</li>  <li>西红柿煎蛋焖面</li></ul>",
            "url": "https://bojieyang.github.io/posts/cooking-in-february/","image": "https://bojieyang.github.io/assets/img/dist/my_best_cooking_of_february.webp","tags": ["年度挑战 - 2023","烹饪"],"date_published": "2023-03-06T00:00:00+08:00","date_modified": "2023-03-06T00:00:00+08:00","author":{
                "name": "bojieyang",
                "url":"https://bojieyang.github.io",
                "avatar":null}},{
            "id": "https://bojieyang.github.io/posts/annual-challenge-2023/",
            "title": "2023 年度挑战",
            "summary": "2023 的年度挑战是做一百道菜。",
            "content_html": "<p>扎克伯格每年都要树立一项个人挑战<sup id=\"fnref:zuckerberg-annual-challenges\"><a href=\"#fn:zuckerberg-annual-challenges\" class=\"footnote\" rel=\"footnote\" role=\"doc-noteref\">1</a></sup>，借此机会学习新的东西。我在两年前了解到了这一点，也开始实践这一方法。</p><p>前两年的挑战都顺利完成了，转眼间来到了 2023 年，今年我设立的年度挑战是做一百道不同的菜，以此来学习如何烹饪。</p><p>这个系列就是用来记录这一过程中我学到的东西，或是一些有趣的事情。</p><div class=\"footnotes\" role=\"doc-endnotes\">  <ol>    <li id=\"fn:zuckerberg-annual-challenges\">      <p><a href=\"https://www.businessinsider.com/mark-zuckerberg-new-years-resolutions-list-2018-1\" title=\"扎克伯格的年度挑战列表\">扎克伯格的年度挑战列表</a> <a href=\"#fnref:zuckerberg-annual-challenges\" class=\"reversefootnote\" role=\"doc-backlink\">&#8682;</a></p>    </li>  </ol></div>",
            "url": "https://bojieyang.github.io/posts/annual-challenge-2023/","image": "https://bojieyang.github.io/assets/img/dist/annual_challenge_2023.webp","tags": ["年度挑战 - 2023","烹饪"],"date_published": "2023-03-04T00:00:00+08:00","date_modified": "2023-03-04T00:00:00+08:00","author":{
                "name": "bojieyang",
                "url":"https://bojieyang.github.io",
                "avatar":null}}]
}