<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>CQCQ收到未</title><link>https://xuchunqiu.com/</link><description>CQ 的个人生活志</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>self(#)xuchunqiu.com (xuchunqiu)</managingEditor><webMaster>self(#)xuchunqiu.com (xuchunqiu)</webMaster><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Wed, 01 Jan 2025 14:14:19 +0800</lastBuildDate><atom:link href="https://xuchunqiu.com/index.xml" rel="self" type="application/rss+xml"/><item><title>2024年：世界徐徐展开</title><link>https://xuchunqiu.com/this-cute-world/</link><pubDate>Wed, 01 Jan 2025 14:14:19 +0800</pubDate><author><name>xuchunqiu</name></author><guid>https://xuchunqiu.com/this-cute-world/</guid><description><![CDATA[<div class="featured-image">
                <img src="https://image.assets.xuchunqiu.com/img/2025/01/PLTmA9.jpg" referrerpolicy="no-referrer">
            </div><p>2024 是我毕业的第三个年头，我尝试下笔了无数次都不知道该如何记录这一年。选择过、不解过、愤怒过，这或许也算一种难得的成长？今年出现了颇多脑子里灵光闪现的时刻：「喔！原来 ta 当时是因为这个感觉才会做出那样的事！」。就如在学校中我们通过反复练习来掌握知识，当下则是需要不断经历来理解更加广大世界的时候了。</p>
<p>今年是 AI 平民化的一年，很高兴现在学这个专业的学生终于不会再被家长问「你将来可以做什么工作」这种问题了，但也不由得担心 LLM 这条耀眼的技术路线背后的大数据、高算力依赖会成为科班学子在实践阶段的桎梏。至于 AI 应用这边，辅助编程工具 Coplit 确实对工作起到不小的帮助，只是在处理较为宏观和抽象的问题时它显得能力不足。这类工具会替代程序员吗？这里给出我的看法。首先 AI （Artificial Intelligents，即人工智能）实在是个烫嘴的词，它里面包含了太多概念，使用的场景通常是面向非技术背景受众；另一方面我非常怀疑当人们顺口讲出「AI」的时候往往轻视了这里的「人工/手工」。AI 的训练过程在一开始会戏称为「炼丹」——不知道这些输入数据是否有效、不知道网络结构是否合理、不知道训练出的模型是否符合预期。如果炼出了仙丹，恭喜你！请接着开始模型可解释性的探索吧！如果不成功，调整一番配方再试试看（这是我过于夸张的描述，现实中「炼丹师」们往往会站在前人的基础上这里改一改、那里动一动，尽量尝试解释方法与结果的关联性）。在前司了解过化学专业同事的科研之路的艰辛（例如非常好的实验无法复现，最后查出是第一次使用的药品过期了）后，不免感叹在计算机里炼丹要轻松多了，因为计算机环境是完全可控、任何实验都可以轻松复现的，确定的输入必然是确定的输出。不知你是否发现，这里暗藏了一道天然的鸿沟——永远无法把物理现实和人类权衡全部代入到虚拟世界之中。人工整理的输入数据可能遗漏掉实际决策时的关键信息或关键信息无法量化；AI 的最优答案如果叠加上使用者的资源、性格、价值观可能成为次优解或错误答案。在人机交互没有翻天覆地般变革之前，AI永远不可能掌舵。</p>
<p>今年之前我一直以为生活和程序没什么两样——确定的因得到的总能确定的果，完全忽视了人的复杂多样，这里的人也包括我自己。比如今年我发现自己的感受能力空前增长，就好像游戏里的 NPC 突然被注入人性，开始感受到自己的身体和精神。以前的我感觉特别弱，不知道怎么搭衣服、不明白什么时候该休息、尝不出大锅饭和餐馆的区别、气氛上该哭时泪腺说不行。在由旁观者转换为参与者的过程中，我发现自己的心态也更加自如了。例如今年去香港听 MLA 终于没有再因为「这歌我甚至没听过」而不安了，甚至还抽空跟同场的网路芳邻 Liu（在圈子里太出名这里帮他化名）和 Row 约了早茶。席间聊了些香港的不知名景点后我跟 Liu 讲「我觉得你不是歌迷」，Row 有点吃惊地肯定「是我先喜欢他才跟着听的」。这个感受强化来得真棒！</p>
<p>旅游方面除了上一篇博客里的新加坡，今年国内到过武汉、福州、莆田、昆明、大理，省内去过佛山、东莞、惠州、清远、江门、珠海、深圳。对我来说是历年中远行次数最多的一年，原因之一是缩减了骑行时间。骑行变少一方面是开发不出新路线了（或许一次搬家可以解决问题），另一方面是发现周末骑车不如周中在家原地跑。运动这种事情越轻松越容易坚持，比起穿戴装备、码表车灯充电、绘制 GPX 这么多准备环节，原地跑需要的只是Zwift 选路线、穿鞋、打开风扇、开启手表虚拟跑步。说回旅行，除了在景点之间腾挪我开始更多地观察别处的人如何生活——有什么有趣的公共空间？街市里卖什么当季食材？大家在图书馆借什么书？我在樱花季的武汉江滩放风筝，在入夜前踏上被灯光点亮的福道感受晚风，在莆田早市里看各种小海鲜一字排开，在昆明马路边赞叹公交号码写后视镜上的贴心设计，在苍山上听采菌子的领队大哥讲脚下的茶园如何没落。与其说旅游所提供的抽离和差异视角帮我认识别处，倒不如说它反哺了我对日常生活的认识。别处是一面镜子，自己才是坐标系。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2025/01/ZJnqLM.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2025/01/ZJnqLM.png" data-sub-html="<h2>武汉</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2025/01/ZJnqLM.png     ></a><figcaption class="image-caption">武汉</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2025/01/PXXzXw.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2025/01/PXXzXw.png" data-sub-html="<h2>福州</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2025/01/PXXzXw.png     ></a><figcaption class="image-caption">福州</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2025/01/OrQzzS.jpg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2025/01/OrQzzS.jpg" data-sub-html="<h2>莆田</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2025/01/OrQzzS.jpg     ></a><figcaption class="image-caption">莆田</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2025/01/iBOGCG.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2025/01/iBOGCG.png" data-sub-html="<h2>昆明</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2025/01/iBOGCG.png     ></a><figcaption class="image-caption">昆明</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2025/01/awBwTK.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2025/01/awBwTK.png" data-sub-html="<h2>大理</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2025/01/awBwTK.png     ></a><figcaption class="image-caption">大理</figcaption>
    </figure>
<p>这大概就是我对这一年的总结，活得更明白了一点，世界在面前徐徐展开。</p>
]]></description></item><item><title>运动手表不完全使用感受：Apple vs Garmin</title><link>https://xuchunqiu.com/switch-to-garmin-watch/</link><pubDate>Wed, 02 Oct 2024 08:22:34 +0000</pubDate><author><name>xuchunqiu</name></author><guid>https://xuchunqiu.com/switch-to-garmin-watch/</guid><description><![CDATA[<div class="featured-image">
                <img src="https://image.assets.xuchunqiu.com/img/2024/10/MM72PT.png" referrerpolicy="no-referrer">
            </div><p>作为一个有轻度运动习惯（骑车、跑步、力量、HIIT，每周3～5次）的肥仔，我先后使用了三年半 <em>Apple Watch Series 4（GPS）</em>、一年半 <em>Garmin Enduro 2</em>。本文不会对比具体的硬件型号+软件版本（对比评测请看 <a href="https://www.dcrainmaker.com" target="_blank" rel="noopener noreferrer">DC Rainmaker</a>），而是希望根据有限的使用经历对比两家的产品思路差异。</p>
<h2 id="放弃-apple-watch-的契机" class="headerLink">
    <a href="#%e6%94%be%e5%bc%83-apple-watch-%e7%9a%84%e5%a5%91%e6%9c%ba" class="header-mark"></a>放弃 Apple Watch 的契机</h2><p>我的 <em>S4</em> 是 2019 年从香港买完激活过 ECG（v1）才背回内地，用了三年多电池寿命下降到 80%，平时不得不在公司留一块充电器才有足够的安全感。<em>S4</em> 从满电到自动关机大概能支撑 5～6 小时的骑行记录（关机前运动记录会自动结束，但要等重新充电开机后才能发送到手机），2023 年 9 月发布的 <a href="https://support.apple.com/zh-cn/guide/watch/apd4cbc876c7/10.0/watchos/10.0" target="_blank" rel="noopener noreferrer">iOS 17 带来了可以跟 Apple Watch 联动的骑行码表视图</a>，是否手表没电后手机可以接管 GPS 记录我不得而知，因为 2023 年 3 月我在天猫「Garmin佳明海外旗舰店」购入了 <em>Enduro 2</em>。 正如前面提到的 <em>S4</em> 电池寿命告急，有次早上起床来不及补电就去爬山，没等下山手表就电量耗尽了，回家后越想越气连夜下单换表。</p>
<h2 id="为什么不是-apple-watch-ultra" class="headerLink">
    <a href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e4%b8%8d%e6%98%af-apple-watch-ultra" class="header-mark"></a>为什么不是 <em>Apple Watch Ultra</em>？</h2><p>Garmin 手表有很多细分产品线（铁三、跑步、潜水、高尔夫、航海……）<a href="https://www.garmin.com.cn/products/wearables/?cat=watches" target="_blank" rel="noopener noreferrer">官网</a> 有列出全部分类，我选择 <em>Enduro 2</em> 就是因为续航最长。<a href="https://www.apple.com.cn/watch/battery" target="_blank" rel="noopener noreferrer"><em>Apple Watch Ultra</em> 宣称有 12 小时的运动记录时长</a>，而作为当时 Garmin 续航最强的表 <a href="https://www.garmin.com.cn/products/wearables/enduro-2/#specsTab" target="_blank" rel="noopener noreferrer"><em>Enduro 2</em> 的运动记录在最耗电的多频多星模式下续航是 68 小时</a>。</p>
<div class="details admonition tip open">
    <div class="details-summary admonition-title">
        <span class="icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z"/></svg></span>Garmin 常规产品线简介<span class="details-icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"/></svg></span>
    </div>
    <div class="details-content">
        <div class="admonition-content"><ul>
<li>飞耐时 Fenix：全能旗舰和主打产品。</li>
<li>Forerunner：跑步。</li>
<li>安夺 Enduro：长续航。</li>
<li>本能 Instinct：入门价格体验 Garmin。</li>
</ul>
</div></div></div>
<h2 id="为什么不是高驰amazfit-这些国产表" class="headerLink">
    <a href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e4%b8%8d%e6%98%af%e9%ab%98%e9%a9%b0amazfit-%e8%bf%99%e4%ba%9b%e5%9b%bd%e4%ba%a7%e8%a1%a8" class="header-mark"></a>为什么不是高驰、Amazfit 这些国产表？</h2><p>因为有用 Strava 汇总运动记录、<a href="https://github.com/yihong0618/running_page" target="_blank" rel="noopener noreferrer">running_page</a> 集中 <a href="https://blog.xuchunqiu.com/workouts_page" target="_blank" rel="noopener noreferrer">展示</a> 的习惯，这一点上作为国际大牌 Garmin 在数据互通上无疑是方便的。另一个原因是买自行车码表的时候还在上学预算有限选了 Wahoo，现在有了积蓄正好来试试 Garmin 的手表。</p>
<h2 id="锁区现状" class="headerLink">
    <a href="#%e9%94%81%e5%8c%ba%e7%8e%b0%e7%8a%b6" class="header-mark"></a>锁区现状</h2><p><strong>相信没人会喜欢花相同的钱买到被阉割的商品，但遗憾的是两家厂商的手表都存在锁区/阉割现象。</strong></p>
<p>正如前面提到的 Apple Watch 的 ECG 功能在早年因为医疗审批问题是无法直接开通的，为了激活这个功能大家各显神通，例如有人 <a href="https://v2ex.com/t/710861" target="_blank" rel="noopener noreferrer">在口岸将手机连上香港运营商信号后，不用过境就能开通 ECG</a>。更多 Apple 锁区的技术细节可以参考《<a href="https://sspai.com/prime/story/ios-feature-region-lock" target="_blank" rel="noopener noreferrer">iOS 如何按地区限制功能：浅析 MobileGestalt 与 Eligibility</a>》。2024 年的今天国行 Apple Watch 已经可以无痛开通 ECG 了，但随 WatchOS 11 推出的 <a href="https://www.v2ex.com/t/1075937" target="_blank" rel="noopener noreferrer">睡眠呼吸暂停功能又陷入了和 ECG 一样的轮回</a>。至于运动数据同步，手机上安装 Strava 后关联苹果健康即可。</p>
<p>Garmin 这边的情况稍有不同，<a href="https://dailysync.vyzt.dev/docs/%E6%88%91%E5%BA%94%E8%AF%A5%E4%BD%BF%E7%94%A8%E5%9B%BD%E9%99%85%E5%8C%BA%E8%BF%98%E6%98%AF%E4%B8%AD%E5%9B%BD%E5%8C%BA" target="_blank" rel="noopener noreferrer">中国区账号只能关联（也就是上传运动数据到）国内的第三方运动 App；国际区账号则可以关联 Strava。我买的外版手表则从软件上阉割了国内的两家付款码程序和公交卡</a>。国际区账号可以直接注册没有任何验证，手表付款很鸡肋可能在单独带蜂窝版（Apple Watch S3 和之后的所有型号都有蜂窝网络可选，Garmin 只有极少型号有推出蜂窝款如 Forerunner 945 LTE）出门时才会用到。地图方面 Garmin <del>有点坏</del>有点太合规了，以某些方式对中国大陆的用户（包括我）隐藏了等高线地图（TopoActivate China ML），目前我手表上原厂跟中国大陆有关的地图是「CN China NT 2023.20-NI」、「CN RDA China NT 2023.20-NI ALL」、「China DEM v1.00」。</p>
<h2 id="喜欢-garmin-的点" class="headerLink">
    <a href="#%e5%96%9c%e6%ac%a2-garmin-%e7%9a%84%e7%82%b9" class="header-mark"></a>喜欢 Garmin 的点</h2><ol>
<li><strong>Garmin 的按键操作逻辑完备，它甚至允许用户完全关闭触摸功能（充分考虑了登山带手套、水上/水下运动容易误触的场景）</strong>。实际上只要不看地图我也是关闭了触摸在用，一方面是 Garmin 的触摸操作不够精准不如用按键快速，另一方面也有利于省电。Apple Watch 不支持仅通过按键操作。</li>
<li><strong>全天候的心率变异性（<strong><ruby>HRV<rt>Heart Rate Variability</rt></ruby></strong>）检测</strong>。Apple Watch 的 HRV 检测频率非常低，从苹果健康里检查原始数据就能看到它一天只测量最多十几次。大概是处理器性能弱 + 电池大才给了 Garmin 这样的底气。也正因全天候的检测使得 Garmin 可以在此基础上通过 Firstbeat 的算法得到压力指数、身体电量。
<div class="details admonition info">
    <div class="details-summary admonition-title">
        <span class="icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/></svg></span>关于您的 HRV 状态读数<span class="details-icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"/></svg></span>
    </div>
    <div class="details-content">
        <div class="admonition-content"><p>HRV 状态可以指示您的自主神经系统在身体和心理上如何对您的环境作出反应。平衡的 HRV 读数可能表明健康的积极迹象，如良好的训练和恢复平衡、更好的心血管健康和更强的压力恢复能力。不平衡、低或差的读数可能是疲劳、更加需要恢复或压力增加等因素的迹象。</p>
<p>虽然日常 HRV 读数的变化是正常的，但保持稳定、一致的 7 天 HRV 平均值是保持 HRV 状态平衡的关键。HRV 缓慢、渐进地增加也有助于您保持平衡状态，可能是体能改善的一个迹象。快速增加或减少的 HRV 读数可能表明您的训练强度过高，并可能导致 HRV 状态不平衡。</p>
<p>在某些情况下，通过改善训练和恢复平衡、定期锻炼、健康饮食、减轻压力和养成其他健康习惯，HRV 状态可以在一段时间后得到改善。HRV 的值因性别、年龄、健康水平甚至个人而异。</p>
</div></div></div>
<div class="details admonition info">
    <div class="details-summary admonition-title">
        <span class="icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/></svg></span>身体电量<span class="details-icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"/></svg></span>
    </div>
    <div class="details-content">
        <div class="admonition-content"><p>您的读数可以反映您的整体压力水平和可以进行的改变。</p>
<h5 id="什么是身体电量" class="headerLink">
    <a href="#%e4%bb%80%e4%b9%88%e6%98%af%e8%ba%ab%e4%bd%93%e7%94%b5%e9%87%8f" class="header-mark"></a>什么是身体电量？</h5><p>身体电量提供了一个数字（0-100），用于估算您一天中身体能量变化。</p>
<p>在理想情况下，一天的训练开始时以及即将开始某种运动时，数值较高。在紧张的一天结束时，数值较低是很自然的。</p>
<h5 id="我们如何计算" class="headerLink">
    <a href="#%e6%88%91%e4%bb%ac%e5%a6%82%e4%bd%95%e8%ae%a1%e7%ae%97" class="header-mark"></a>我们如何计算</h5><p>Body Battery 是通过分析诸如心率变异性（HRV）和压力等心脏信号以及睡眠质量和活动来计算得出的。HRV 仅指每次心跳期间所发生的自然变化。 这是一项关键指标，表明您的身体如何管理日常生活和活动的压力。</p>
<p>尽管食物摄入量不直接影响测量结果，但健康均衡的饮食总是有益的。</p>
<h5 id="如何使用您的读数" class="headerLink">
    <a href="#%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8%e6%82%a8%e7%9a%84%e8%af%bb%e6%95%b0" class="header-mark"></a>如何使用您的读数</h5><p>Body Battery 可以帮助您更好地了解休息和运动期间的影响，进而随着时间的推移可以帮助您提高身体的恢复能力。</p>
<h6 id="睡眠" class="headerLink">
    <a href="#%e7%9d%a1%e7%9c%a0" class="header-mark"></a>睡眠</h6><p>一整晚安稳睡眠对将身体电量恢复到较高的水平有很大的帮助。 通过坚持规律的晚间运动并避免看电视、喝咖啡和喝酒等扰乱睡眠的运动，可以使体能水平上升。 如果白天和夜晚都佩戴设备，则可以得到更准确的数据。</p>
<h6 id="活动" class="headerLink">
    <a href="#%e6%b4%bb%e5%8a%a8" class="header-mark"></a>活动</h6><p>您的身体电量水平有助于指示您是否储备了足够的体能进行运动以及在一天的剩余时间里保持充沛精力。 例如，如果您的身体电量非常低，最好休息或做瑜伽等轻度活动。 此外还要注意避免就寝前进行夜间锻炼，因为这对睡眠质量有不利影响。</p>
</div></div></div></li>
<li><strong>表盘信息量丰富，尽管在美观程度上不如 Apple Watch</strong>。Garmin 可以通过手机上的 ConnectIQ 应用程序向手表安装应用/表盘，我用了第三方表盘 <a href="https://apps.garmin.com/apps/034dc8d6-c695-4cbc-9193-ff2375e1e4e0" target="_blank" rel="noopener noreferrer">HIPERION</a> 同时查看日出日落、心率、压力分数、步数、步行距离、呼吸频率、血氧含量、身体电量。</li>
<li><strong><strong><ruby>ANT<rt>Adaptive Network Topology</rt></ruby></strong>+ 连接能力</strong>。ANT+ 是骑行配件普遍支持的互联协议，与更广为人知的蓝牙相比 ANT+ 支持多播，我的使用场景是同时在码表和手表上连接同一个踏频传感器，这样就有两份骑行记录互为备份。</li>
<li><strong>支持心率广播，可以替代心率带</strong>。我手机上至今还留着两个应用程序 <a href="https://apps.apple.com/us/app/heartcast-heart-rate-monitor/id1499771124" target="_blank" rel="noopener noreferrer">HeartCast</a>、<a href="https://apps.apple.com/us/app/echo-watch-heart-rate-monitor/id1494679144" target="_blank" rel="noopener noreferrer">ECHO</a>，它们的功能在同时安装手表端后可以获取 Apple Watch 的心率到手机，再通过蓝牙发送到码表，这样码表的骑行记录里就包含心率数据了，这是我偷懒不想买心率带时候的办法。实际用起来途中打开手机拍两张照片后手机上 app 的后台就被系统杀掉了，心率推送会直接断掉。买了心率带后发现用起来也不够完美，穿上时把握不好松紧会勒，脱下时没有及时清洗会生锈，导致每次骑车都要花更多时间做好心理建设。当发现 Garmin 支持心率广播后立刻就不再使用心率带了。有些健身房的跑步机也支持接收心率广播展示你的实时心率。</li>
<li><strong>运动记录界面自由地定义栏位和数据</strong>。这个可以说 Garmin 就是按照码表的思路来布置的，从一～八栏（视表盘尺寸可能有差异）统统给你，每个栏位几十种数据可以选择。</li>
<li><strong>提供网页版控制台</strong>。苹果健康里的数据只支持在移动设备上查看，而 Garmin 的主程序 Garmin Connect 同时也有网页版 <a href="https://connect.garmin.com" target="_blank" rel="noopener noreferrer">https://connect.garmin.com</a>。从功能上来说网页版是手机版的超集，提供了比手机版更全面的数据视图、训练指导。</li>
<li><strong>在记录运动的同时导航</strong>。这在户外运动的时候是蛮常见的需求，根据提前规划的路线进行 <strong><ruby>TBT<rt>Turn By Turn</rt></ruby></strong> 导航并在偏离路线时重新算路。我甚至可以武断地讲所有以运动为卖点的手表都会实现这个功能（只是某些厂商可能不支持开放且通用的 <strong><ruby><a href="https://www.topografix.com/gpx.asp" target="_blank" rel="noopener noreferrer">GPX</a><rt>Global Positioning XML</rt></ruby></strong> 轨迹格式；某些厂商的重新算路功能需要连接手机使用）。但 <a href="https://discussionschinese.apple.com/thread/254872040?sortBy=rank" target="_blank" rel="noopener noreferrer">截至 2024 年在 Apple Watch 上第一方的地图与运动仍是两个独立的 app</a>，第三方的 <a href="https://apps.apple.com/us/app/workoutdoors/id1241909999" target="_blank" rel="noopener noreferrer">WorkOutDoors</a> 售价 7.99 USD 支持 GPX 导入并在运动界面显示地图和回到/偏离路线提醒，遗憾的是它尚未实现 TBT 导航。
<div class="details admonition tip open">
    <div class="details-summary admonition-title">
        <span class="icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z"/></svg></span>WorkOutDoors 的新替代<span class="details-icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"/></svg></span>
    </div>
    <div class="details-content">
        <div class="admonition-content"><p>2024 年 11 月见到「<a href="https://apps.apple.com/app/yaoyao-jump-rope/id1179393901" target="_blank" rel="noopener noreferrer">YaoYao - 跳绳</a>」开发者为户外运动（徒步、骑行、越野跑）设计的「<a href="https://apps.apple.com/app/toopoo-hiking-trail-guides/id6736378337" target="_blank" rel="noopener noreferrer">Toopoo</a>」正式发布，依然是订阅/买断两种选择。</p>
<p>作为 YaoYao 的老用户我非常信任作者的审美水平、拥抱新 SDK 的速度和不断迭代的热情。未来 Toopoo 不见得能够在功能上比肩 WorkOutDoors（后者界面挤下的信息量、交互的复杂逻辑都更像 Garmin），但它一定是最果味的第三方户外运动记录 App。</p>
</div></div></div></li>
<li><strong>离线地图</strong>。这是一个可能会有争议的点因为离线意味着会过时，但至少在没有信号的地方会有安全感。<a href="https://support.apple.com/zh-sg/guide/watch/apd0111bf788/10.0/watchos/10.0" target="_blank" rel="noopener noreferrer">WatchOS 10 加入了离线地图功能</a>，所以两者的差异只是地图服务提供商。</li>
</ol>
<h2 id="garmin-没有做好的点" class="headerLink">
    <a href="#garmin-%e6%b2%a1%e6%9c%89%e5%81%9a%e5%a5%bd%e7%9a%84%e7%82%b9" class="header-mark"></a>Garmin 没有做好的点</h2><ol>
<li><strong>孱弱的处理器性能</strong>，这影响了很多细节，例如：
<ol>
<li>Garmin 的 UI 无论是触屏还是按键方式操作起来都不跟手，不如 Apple Watch 丝滑。</li>
<li>Garmin 在拖动、缩放地图时会有明显的重新绘制等待。<strong>一些基础款因为性能和存储容量限制甚至缺失地图功能。</strong></li>
<li>在做力量训练时我会尝试以微小幅度晃动手腕期望 Garmin 亮屏，但它就是检测不到。</li>
<li>Garmin 导入 GPX 会有一个「计算路线」的过程，这至少涉及 TBT 的计算，还可能包含使用「China DEM v1.00」生成坡度信息。以一段 143 km 的新路线为例，载入路线花了 14 s，计算路线花了 32 s。</li>
</ol>
</li>
<li><strong>糟糕的手机互联</strong>，例如：
<ol>
<li>Apple Watch 在手表上截图是会自动同步到手机相册的，两端都可以通过相册 app 查看；而 Garmin 则两端都无法查看，必须用 USB 线连接电脑后才能看到。</li>
<li>Apple Watch 上被设置定时摘要的 app 通知会按与手机相同的逻辑推送，而 Garmin 则会立刻通知你。并且 Garmin 弹通知时 app 名称和通知内容是分两步展示，经常抬腕盯着 app 名称发两秒呆先见到通知内容。</li>
<li>Garmin 秒针经常慢几秒。在 Garmin 的文档中声称「<a href="https://support.garmin.com/zh-CN/?faq=uXR3bWcLnq6465i9tYA5iA" target="_blank" rel="noopener noreferrer">当设备与 Garmin connect mobile 配对同步后，设备可通过 app 同步获取手机时间</a>」，但即使我通过手表上的「同步时间」功能手动触发看起来也还是不准。按前面引用的文档 Garmin 也会自动通过 GPS 卫星授时，这个准不准我没有仔细测。</li>
</ol>
</li>
<li><strong>落后的 OTA 和软件生态</strong>，包括：
<ol>
<li>Apple Watch 长周期的系统更新和新功能下放真的是独一份，Garmin 总体上按季度发布正式更新，新功能下放也抠抠索索（例如 <a href="https://garminrumors.com/has-garmin-abandoned-the-fenix-7-pro-after-just-1-5-years" target="_blank" rel="noopener noreferrer">问世仅一年半的 Fenix 7 无法获得最新的锁屏密码功能</a>）。这背后一方面是因为产品线多开发者力不从心，但很难不怀疑还有为促进新型号销量的商业考量。Garmin 会把每次的更新内容发布在论坛 forums.garmin.com 里（这是 <a href="https://forums.garmin.com/outdoor-recreation/outdoor-recreation/f/enduro-2" target="_blank" rel="noopener noreferrer">Enduro 2 的</a>），此外 garminrumors.com 维护了 <a href="https://garminrumors.com/garmin-software-updates/" target="_blank" rel="noopener noreferrer">一份滚动更新的更新日期坐标轴</a> 可以更直观地了解 Garmin 主要型号的更新频次。</li>
<li>Garmin 的软件/表盘商店虽然也允许第三方开发者的存在，实际普遍都没什么亮点。不像 Apple Watch 因为高性能处理器和全面的 SDK 可以让一些第三方出品的运动或健康监测 app 比系统自带的更好用（例如前面提到的「YaoYao」支持通过 AirPods 记录跳绳次数）。</li>
</ol>
</li>
<li><strong>不应该存在的限制</strong>（可能因机型而异），包括：
<ol>
<li>闹钟最多定 10 个时间，即使所有闹钟都是关闭状态也不允许你添加第 11 个。</li>
<li>使用 ConnectIQ 安装的应用/表盘/数据字段合计最多 33 个。它显示我目前还剩 59.60 MB 空间（疑似指 RAM）可以再安装 6 个，有趣的是如果把手表连接到电脑会看到储存空间还有足足 9 GB。Apple Watch 那边只要存储空间够是完全不限制应用数量的。</li>
<li>在运动途中无法重新加载 GPX。这个需求的场景是在路途中间改变行程，用手机重新规划了另一条路线想走，但手表上只允许在地图上重新选择终点后使用机内导航提供的路线。</li>
</ol>
</li>
</ol>
<h2 id="室内运动指导" class="headerLink">
    <a href="#%e5%ae%a4%e5%86%85%e8%bf%90%e5%8a%a8%e6%8c%87%e5%af%bc" class="header-mark"></a>室内运动指导</h2><p>对室内的核心、力量、HIIT 等运动，Apple 和 Garmin 提供了差异化的指导方式。</p>
<p>Apple 通过付费订阅的 Fitness+（尚不支持中国大陆的 Apple 账户）以预录视频方式提供固定几个时长（例如 10min、20min、30min）的训练组合，所有动作都有三个教练同屏展示难、中、易的可选版本，同时会在视频上叠加你的实时心率及此心率的用户间排名。另外所有的视频的开头和结尾都会包含热身和放松动作，应该算顶尖的视频课了。</p>
<p>Garmin 的训练指导完全免费（或者说包含在售价里了），可以在手机或手表上选择课程（每个动作都是可以更换的），最终以手表上的动画呈现每个动作。</p>
<h2 id="总结" class="headerLink">
    <a href="#%e6%80%bb%e7%bb%93" class="header-mark"></a>总结</h2><p>定标题的时候我有意避开了「<strong>智能手表</strong>」这个称呼，因为如果说 Apple Watch 是「<strong>手机第二块屏幕</strong>」，那么 Garmin 则是「<strong>恰好能接收手机通知的运动手表</strong>」。</p>
<p>Apple 的品牌调性决定了它不可能放弃「智能」的标签，那么在高密度电池没有突破性进展的情况下，Apple Watch 的续航问题无疑会长期存在。</p>
<p>Garmin 这边正好相反，手表这种始终随身的设备才是它运动板块的「<strong>中枢系统</strong>」，自行车上可以连接自家的 Varia 雷达、Rally 功率计，潜水可以连接自家的 Descent T 系列气瓶传感器，航海可以连接自家的 GPSMAP 海图仪控制航向，连接手机只是为了同步数据，显示通知只是附带的功能。</p>
]]></description></item><item><title>新游漫记</title><link>https://xuchunqiu.com/singapore-travel-notes-2024/</link><pubDate>Thu, 26 Sep 2024 01:56:21 +0000</pubDate><author><name>xuchunqiu</name></author><guid>https://xuchunqiu.com/singapore-travel-notes-2024/</guid><description><![CDATA[<div class="featured-image">
                <img src="https://image.assets.xuchunqiu.com/img/2024/10/5x6JrO.png" referrerpolicy="no-referrer">
            </div><p>地理课上的「亚洲四小龙」、《全球猎身》里印度 IT 劳工赴美的跳板、《新兵正传》中每个男性公民都需要服役的国度，在这个火热的 8 月，我终于在新加坡开启了人生首次出国旅行。</p>
<p>行程上计划呆四天三晚——周五周一请假凑一个四天小长假出来。打开 Airbnb 订房时真的被价格吓到：四五百 RMB 一晚只能住胶囊旅馆，只能咬咬牙选了八百 RMB 的酒店双床房（还好有拼到室友）。除了酒店还需要提前准备的是各种卡：<strong>电话卡</strong>、<strong>公交卡</strong>、<strong>入境卡</strong>。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/v5Ue8c.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/v5Ue8c.png" data-sub-html="<h2>住了三晚的双床房，临街但隔音还可以</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/v5Ue8c.png     ></a><figcaption class="image-caption">住了三晚的双床房，临街但隔音还可以</figcaption>
    </figure>
<div class="details admonition info open">
    <div class="details-summary admonition-title">
        <span class="icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/></svg></span>汇率小助手<span class="details-icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"/></svg></span>
    </div>
    <div class="details-content">
        <div class="admonition-content">我去这几天 1 SGD ≈ 5.4 RMB</div></div></div>
<p><strong>电话卡</strong> 因为手机支持 eSIM，我选择跳过国内卡开漫游或买境外流量包的步骤，直接买预付费卡。PoC 推荐了 <a href="https://www.singtel.com/personal/products-services/mobile/prepaid-plans/hi-tourist" target="_blank" rel="noopener noreferrer">Singtel</a>、<a href="https://www.m1.com.sg/mobile/prepaid-plans/tourist-sim" target="_blank" rel="noopener noreferrer">M1</a>、<a href="https://www.starhub.com/personal/mobile/mobile-phones-plans/prepaid-cards/travel-sim.html" target="_blank" rel="noopener noreferrer">StarHub</a> 三家本地运营商，它们最平都是 12 SGD 有 100 GB 流量、不同额度的漫游 + 本地通话 + 短信。100 GB 流量有点太多了，相较来说我更想要 5G 的低延迟，所以最后转投 CMLink（中国移动国际）买了 36.8 HKD 的新马泰四天不限量 eSIM 纯流量卡。跟我原本想买的 M1 相比，它的优点是：5G（漫游到 Singtel）、在线购买后直接写卡、不需要登记护照。</p>
<p><strong>公交卡</strong> 可以买本地人用的 EZ-Link 然后按每一程收费，也可以买 SG Tourist Pass 在连续的 1、2、3 天内不限次数乘坐公共交通，再或者直接刷 VISA/Master 信用卡。SG Tourist Pass 这些年涨了好几次价目前 3 天版是 29 SGD，不过它的日期计算是按自然日，如果我呆 4 天就要买多一张 1 天版总价去到 46 SGD。实际我全程刷招行的全币卡最后账单上是 126.14 RMB（约 23 SGD）。</p>
<p><strong>入境卡</strong>（<strong><ruby>SGAC<rt>SG Arrival Card</rt></ruby></strong>）并不是 VISA，办理是完全自助的也绝对不会收费。需要填写的信息有护照、联系资料、停留时间、航班号、新加坡住址（酒店名称是单选框而不是文本框）、入境前离境后的城市。可以在移民与关卡局（<strong><ruby>ICA<rt>Immigration &amp; Checkpoints Authority</rt></ruby></strong>）<a href="https://eservices.ica.gov.sg/sgarrivalcard/" target="_blank" rel="noopener noreferrer">网站</a> 或使用手机应用程序 MyICA Mobile 填写，最早是入境前三日最晚是飞机落地后入境刷护照前，SGAC 填完会给一个条形码但其实不会用到，因为入境只在闸机上刷了护照，可能是 SGAC 的信息已经跟护照号自动绑定了。</p>
<p>新加坡的官方语言是英语、华语、泰米尔语、马来语。下图用四种语言的警示牌很好地展示了这一点。一般见到华人面孔讲中文，其它分不出族裔的用英文就好。让我哭笑不得的是从机场搭地铁去市区时一个一身徒步装备的女仔直接把我当本地人：「请问你讲中文吗？」然后拿手机里的 Google Map 问我她坐的方向对不对。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/tI0rpl.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/tI0rpl.png" data-sub-html="<h2>某建筑工程外墙上的「危险，请避开！」警示牌，由上至下依次是英语、华语、泰米尔文语、马来语</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/tI0rpl.png     ></a><figcaption class="image-caption">某建筑工程外墙上的「危险，请避开！」警示牌，由上至下依次是英语、华语、泰米尔文语、马来语</figcaption>
    </figure>
<p>新加坡地铁（<strong><ruby>MRT<rt>Mass Rapid Transport</rt></ruby></strong>）的线路并不多只有六条，所以可以直接使用方位名词例如 <strong><ruby>EW<rt>East West Line</rt></ruby></strong>、<strong><ruby>CC<rt>Circle Line</rt></ruby></strong>、<strong><ruby>DT<rt>Downtown Line</rt></ruby></strong>，这比中国大多城市使用数字命名要容易记，也比香港屯马线、荃湾线这种包含具体地名的命名方式对初来乍到的游客要友好些。新加坡地铁所有进站口都没有挂一个大喇叭喊「大小包一律过安检」这着实让我愉悦了很多——羊角的某些站尿袋都要拎出来检查容量。但也不是说新国的地铁就没有安检，这几天里我遇过一次刚进站就被安保拦下，请到旁边的小桌子做 Security Check，他拿小手电在我的包里扫视一圈但并没有出手翻动，就算是检查完毕。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/KHiIji.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/KHiIji.png" data-sub-html="<h2>新加坡地铁线路图</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/KHiIji.png     ></a><figcaption class="image-caption">新加坡地铁线路图</figcaption>
    </figure>
<p>身处国外自然是用 Google Map 导航，意外发现它竟然会对地铁行程显示我所乘坐车次的实时位置，地下没 GPS 信号，我猜这背后最重要的是 Google 拿到了地铁的实时进站信息，但如何判断用户上的是哪趟车呢？或许是大数据出来从进站到到达站台的平均时间从而估算；也可能是用手机陀螺仪 xy 轴的运动速度比上 z 轴的运动速度超过某个阈值后判定用户已上车。</p>
<p>当然作为游客坐地铁只是赶时间的权宜之计，如果时间充裕我更愿意搭巴士看街景。<a href="https://www.ptc.gov.sg/fare-regulation/bus-rail/fare-structure" target="_blank" rel="noopener noreferrer">新加坡巴士地铁都是按里程收费</a>，所以巴士下车也要拍卡。另外上车招手才停、下车提前按铃（几乎所有立柱上都有，室友多次对我悄无声息的按铃手法表示震惊），如果某站无人上落司机就一脚油门扬长而去。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/SNd0m7.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/SNd0m7.png" data-sub-html="<h2>从夜间动物园搭巴士返市区时司机开得很猛，加上路面的起伏有种低配过山车的感觉</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/SNd0m7.png     ></a><figcaption class="image-caption">从夜间动物园搭巴士返市区时司机开得很猛，加上路面的起伏有种低配过山车的感觉</figcaption>
    </figure>
<p>巴士、地铁之外，新加坡人如何解决公共交通出行的「最后一公里」？首先排除一个错误答案：共享单车。新加坡是有共享单车的，只是这几天见到的总数不超过十辆而且压根没见人骑。在 Reddit 上看到一个高赞回复是：</p>
<div class="details admonition quote open">
    <div class="details-summary admonition-title">
        <span class="icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z"/></svg></span>Why is it so hard for bike-sharing companies to survive in Singapore<span class="details-icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"/></svg></span>
    </div>
    <div class="details-content">
        <div class="admonition-content"><p>Those who like cycling, will already have their own nice bicycles.</p>
<p>Those who may need it for their last mile journey, probably not going to rent a bicycle to cycle under SG’s insane weather and roads.</p>
<p>They will find easier and more comfortable ways to fulfill that last mile journey.</p>
<p><em>喜欢骑自行车的人，已经自己买好车了。</em></p>
<p><em>需要自行车接驳最后一公里的人，大概不会想在新加坡糟糕的天气和路况下租车。</em></p>
<p><em>ta 们会寻找更简单、更舒适的方法来完成这最后一公里。</em></p>
<p><a href="https://www.reddit.com/r/singapore/comments/1bnzobz" target="_blank" rel="noopener noreferrer">https://www.reddit.com/r/singapore/comments/1bnzobz</a></p>
</div></div></div>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/hmxiNA.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/hmxiNA.png" data-sub-html="<h2>在 CBD 见到的两辆共享单车，分别来自 Anywheel 和 HelloRide</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/hmxiNA.png     ></a><figcaption class="image-caption">在 CBD 见到的两辆共享单车，分别来自 Anywheel 和 HelloRide</figcaption>
    </figure>
<p>来新加坡之前我也考虑过租公路车环岛的可能性，因为它真的很小一圈只有 140 km 咬咬牙也不是骑不下来，但网上看过租车价格后彻底死心了：<a href="https://www.listnride.com/search?location=Singapore&amp;search_view_type=bikes" target="_blank" rel="noopener noreferrer">个人价格大约 300 CNY/天</a>、<a href="https://www.valleycycles.org/bike-rentals.html" target="_blank" rel="noopener noreferrer">租车行价格大约 1000 CNY/天</a>。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/VKlSXb.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/VKlSXb.png" data-sub-html="<h2>没有派上用场的骑行路线</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/VKlSXb.png     ></a><figcaption class="image-caption">没有派上用场的骑行路线</figcaption>
    </figure>
<p>虽是放弃了踩单车的念头，行程中间我还是有留意当地交通对骑行的友善程度，CBD 坡少路宽但完全没有单车道只能使用机动车道，都是些骑行装备点满、花鼓声震天的骑行爱好者（路边有颇多临街健身房还有在大楼阴凉下跑步的人）；组屋区路窄又较多起伏，有分离的行人和自行车道，大多是来往附近交通枢纽的人骑着很平民的自行车。陆路交通管理局（<strong><ruby>LTA<rt>Land Transport Authority</rt></ruby></strong>）提供了 <a href="https://www.lta.gov.sg/content/ltagov/en/map/cycle.html" target="_blank" rel="noopener noreferrer">在线自行车道地图</a>，感兴趣的可以去看看。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/LzZKsV.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/LzZKsV.png" data-sub-html="<h2>兀兰某条行人和自行车道连接处的减速装置是两扇错开的小门</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/LzZKsV.png     ></a><figcaption class="image-caption">兀兰某条行人和自行车道连接处的减速装置是两扇错开的小门</figcaption>
    </figure>
<p>之所以逛组屋是因为在播客上搜新加坡的内容时，听了「壮游者」的《182-新加坡-从隔房到组屋-大巴窑-防爆屋-红豆汤圆和牛车水的故事》（<a href="https://podcasts.apple.com/my/podcast/182-%E6%96%B0%E5%8A%A0%E5%9D%A1-%E4%BB%8E%E9%9A%94%E6%88%BF%E5%88%B0%E7%BB%84%E5%B1%8B-%E5%A4%A7%E5%B7%B4%E7%AA%91-%E9%98%B2%E7%88%86%E5%B1%8B-%E7%BA%A2%E8%B1%86%E6%B1%A4%E5%9C%86%E5%92%8C%E7%89%9B%E8%BD%A6%E6%B0%B4%E7%9A%84%E6%95%85%E4%BA%8B/id1471628291?i=1000636644852" target="_blank" rel="noopener noreferrer">Podcast</a>，<a href="https://www.xiaoyuzhoufm.com/episode/656487dbfef6ec4bfb5523b4" target="_blank" rel="noopener noreferrer">小宇宙</a>），嘉宾是祖籍顺德但从小在新加坡长大的 Jasmine。我在 Tripadvisor 上也找到了 Jasmine 的游览项目：「<a href="https://cn.tripadvisor.com/AttractionProductReview-g294265-d15689462-Public_Housing_Into_the_HDB_Heartlands-Singapore.html" target="_blank" rel="noopener noreferrer">政府组屋 - 进入建屋局心脏地带</a>」，只是 65 SGD 的价格实在让人却步。索性自己 DIY 在北部的区域中心兀兰（Woodlands）逛了一大圈，又去参观了负责营造组屋的建屋局（<strong><ruby>HDB<rt>Housing &amp; Development Board</rt></ruby></strong>）的 LIVINGSPACE Gallery。根据后者的介绍，作为新国政府给公民提供的公共住房，新国有 80% 的人口居住在组屋区。</p>
<div class="mapbox" id="id-1" style="width: 100%; height: 20rem;"></div>
<p>我的步行路线是从地铁马西岭（Marsiling）站出发，顺时针绕一个大圈，最后走下来全程大约 14 公里。适逢中元节，楼下草地上摆了许多公共的焚烧桶，不少鸽子聚集在祭品附近大快朵颐。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/fKU9k9.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/fKU9k9.png" data-sub-html="<h2>当地居民正在使用焚烧桶</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/fKU9k9.png     ></a><figcaption class="image-caption">当地居民正在使用焚烧桶</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/88pIyq.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/88pIyq.png" data-sub-html="<h2>低配版焚烧桶</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/88pIyq.png     ></a><figcaption class="image-caption">低配版焚烧桶</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/cths57.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/cths57.png" data-sub-html="<h2>旁边偷吃祭品的鸽子</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/cths57.png     ></a><figcaption class="image-caption">旁边偷吃祭品的鸽子</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/FuACj9.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/FuACj9.png" data-sub-html="<h2>另一处祭品，竟然有芬达</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/FuACj9.png     ></a><figcaption class="image-caption">另一处祭品，竟然有芬达</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/NIHhEz.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/NIHhEz.png" data-sub-html="<h2>社区里有些吓人的木质小人</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/NIHhEz.png     ></a><figcaption class="image-caption">社区里有些吓人的木质小人</figcaption>
    </figure>
<p>大概这些组屋是不同年代落成的关系，不同社区的建筑样式各不相同，但整体上一层都是架空层所以通风非常好，架空层在一些角落位放置桌椅或垃圾桶，而自行车的停车区域可能划在架空层里面，也可能是楼外露天的一个小区域（基本每栋楼都有，所以不会给太大）。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/JGPNlG.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/JGPNlG.png" data-sub-html="<h2>汽车的露天停车格和后面的架空层</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/JGPNlG.png     ></a><figcaption class="image-caption">汽车的露天停车格和后面的架空层</figcaption>
    </figure>
<p>至于汽车、摩托车会在建筑附近的空地或地下设置专门的停车格，并且沿途所见的全部停车场出入口都不是使用摄像头识别车牌，最开始我注意到这点是因为见不到补光灯，等回家开始查资料的时候却在 HDB 的网站上看到它们说是使用摄像头识别车牌：</p>
<div class="details admonition quote open">
    <div class="details-summary admonition-title">
        <span class="icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z"/></svg></span>Parking@HDB FAQs<span class="details-icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"/></svg></span>
    </div>
    <div class="details-content">
        <div class="admonition-content"><p>Do I have to start and end a parking session? </p>
<p><em>我需要手动开始和结束停车过程吗？</em></p>
<p>Nope, you do not need to manually start or end any parking session. Your parking session will begin automatically when you enter the car park our vehicle number will be recognized by the cameras that are equipped with Licence Plate Recognition technology. Simpy Park and Go!</p>
<p><em>不需要，您不需要手动开始或结束停车过程。当您进入停车场时，您本次停车将自动开始。您的车牌号码将被配备车牌识别技术的摄像头识别。只需停好并离开即可！</em></p>
<p><a href="https://www.hdb.gov.sg/car-parks/parkinghdb/FAQs" target="_blank" rel="noopener noreferrer">https://www.hdb.gov.sg/car-parks/parkinghdb/FAQs</a></p>
</div></div></div>
<p>这是怎么回事？难道我眼花了？别着急，在相同的页面继续往下读，在解释为什么会收到 HDB 停车场未付费通知时，有这样的描述：</p>
<div class="details admonition quote open">
    <div class="details-summary admonition-title">
        <span class="icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z"/></svg></span>Parking@HDB FAQs<span class="details-icon"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"/></svg></span>
    </div>
    <div class="details-content">
        <div class="admonition-content"><p>The motorist had exited the gantry before the parking system could identify, compute and deduct the parking fees from the cash card in the In-Vehicle Unit. Motorists are required to slow down at the exit gantries, in the same way that they would exit a car park equipped with the Electronic Parking System. </p>
<p><em>司机在停车系统能够识别、计算并从车载单元的现金卡中扣除停车费之前就已经驶出闸门。司机需要在出口闸门处减速，就像在配备电子停车系统的停车场出口一样。</em></p>
</div></div></div>
<p>这里的 In-Vehicle Unit 是所有在新加坡注册车辆都需要强制安装的车辆识别和计费装置，<a href="https://onemotoring.lta.gov.sg/content/onemotoring/home/driving/ERP/ERP.html#_Paying_ERP" target="_blank" rel="noopener noreferrer">如果不安装的话每次通过新加坡的电子道路收费（<strong><ruby>ERP<rt>Electronic Road Pricing</rt></ruby></strong>）闸门都会被罚款 70 SGD</a>。用 Google 街景检查兀兰的某个 HDB 停车场也可以见到闸机上方是一个不带摄像头的感应模块：</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/c3zOw7.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/c3zOw7.png" data-sub-html="<h2>Google 街景中的 HDB 管理的 WLW25 停车场出入口处</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/c3zOw7.png     ></a><figcaption class="image-caption">Google 街景中的 HDB 管理的 WLW25 停车场出入口处</figcaption>
    </figure>
<p>上图中蓝色顶棚的是有盖人行道，很明显可以看到右边更低的平面是为了不阻挡二层住户的采光，但这个角度不易看到的是在两个平面之间有一道垂直的多孔挡板来给下面的行人遮光的同时兼顾给楼上住户通风：</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/sDJGTp.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/sDJGTp.png" data-sub-html="<h2>有盖人行道的垂直多孔挡板</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/sDJGTp.png     ></a><figcaption class="image-caption">有盖人行道的垂直多孔挡板</figcaption>
    </figure>
<p>这种连接处的挡板有时也会演变为鱼鳞状，通风效果更佳：</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/7F24MC.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/7F24MC.png" data-sub-html="<h2>有盖人行道的鱼鳞状挡板</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/7F24MC.png     ></a><figcaption class="image-caption">有盖人行道的鱼鳞状挡板</figcaption>
    </figure>
<p>可能是在白天都得开灯的房子住久了的缘故，很自然地也会好奇组屋的采光如何。首先我路过这些地方即使在同一个社区的楼宇中也不会采用统一的朝向，这并非是基于容积率的考虑——楼间距还是很充裕的，能塞得下儿童活动区域或是小运动场。另一个观察是组屋的窗户都不大，在 HDB LIVINGSPACE Gallery 展示的一种组屋的快速施工方式是将每一层都模块化预制好然后吊起来拼接（本文头图也能看出这种迹象），但不可能每栋楼都是这么建然后为了结构强度只能开小窗吧，所以这个问题对我来说仍是有待探索。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/tFJIBi.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/tFJIBi.png" data-sub-html="<h2>组屋远景</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/tFJIBi.png     ></a><figcaption class="image-caption">组屋远景</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/3cAJs0.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/3cAJs0.png" data-sub-html="<h2>坐在架空层休息的人，出面路灯杆上有两只鸽子</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/3cAJs0.png     ></a><figcaption class="image-caption">坐在架空层休息的人，出面路灯杆上有两只鸽子</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/TSCjjU.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/TSCjjU.png" data-sub-html="<h2>共和理工学院的水滴雕塑</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/TSCjjU.png     ></a><figcaption class="image-caption">共和理工学院的水滴雕塑</figcaption>
    </figure>
<p>可能是规划如此，我走过的组屋楼下几乎是没有商业配套的，理发店、日用品店、餐饮店只在其中一个社区里是配齐的；有的社区甚至什么店都没有。当地居民可能要行一段距离去附近的商业中心、地铁站才能找到这些服务。有趣的是我在郊区、CBD 步行时也会有类似感觉——走了很远连卖水的便利店都找不到，只好留着空瓶期待遇到可以免费接水的小贩中心（Hawker Centre）或展览馆。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/cxf8Wa.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/cxf8Wa.png" data-sub-html="<h2>地铁马西岭站的一层就是超市</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/cxf8Wa.png     ></a><figcaption class="image-caption">地铁马西岭站的一层就是超市</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/YH24Rn.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/YH24Rn.png" data-sub-html="<h2>唯一遇到能接冰水的地方是新加坡华族文化中心</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/YH24Rn.png     ></a><figcaption class="image-caption">唯一遇到能接冰水的地方是新加坡华族文化中心</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/kejCMH.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/kejCMH.png" data-sub-html="<h2>唯一遇到的冰淇淋自动贩卖机是在一栋组屋楼下</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/kejCMH.png     ></a><figcaption class="image-caption">唯一遇到的冰淇淋自动贩卖机是在一栋组屋楼下</figcaption>
    </figure>
<p>说到步行感受还有两点值得提及，首先路面完全没有任何破损或坑洼不平，配套的无障碍通道非常细致，会在很自然的位置出现不用专门寻找。另一点是虽然搭乘巴士时发现新加坡的法律大概是没有车辆经过斑马线必须减速的条文，但当我以行人的身份走斑马线时所有车辆都一定会停车礼让。在写这段时找到一篇更专业的观察手记，索性一并放进来：《<a href="https://eyesonplace.net/2023/03/22/22677/" target="_blank" rel="noopener noreferrer">新加坡深度考察：解析銀髮區與道路設計細節</a>》。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/2PwjU7.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/2PwjU7.png" data-sub-html="<h2>牛车水街景</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/2PwjU7.png     ></a><figcaption class="image-caption">牛车水街景</figcaption>
    </figure>
<p>这次旅行吃的方面考虑到钱包几乎都在小贩中心解决，唯一一次团餐是十几个人一起吃文东记，餐牌价格给人的感觉是如果直接看成人民币在广州来说也算偏贵的一档，口味也没有特别惊艳。所以第二天早上在 Maxwell 看室友从天天直接端了半只鸡回来我是一点都不出奇。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/Jyt6ZW.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/Jyt6ZW.png" data-sub-html="<h2>跟室友在 Maxwell Food Centre 的第一餐</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/Jyt6ZW.png     ></a><figcaption class="image-caption">跟室友在 Maxwell Food Centre 的第一餐</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/c8de9a.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/c8de9a.png" data-sub-html="<h2>天天海南鸡饭餐牌</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/c8de9a.png     ></a><figcaption class="image-caption">天天海南鸡饭餐牌</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/pdGx85.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/pdGx85.png" data-sub-html="<h2>菜头粿和蚝煎都太碎了，不推荐</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/pdGx85.png     ></a><figcaption class="image-caption">菜头粿和蚝煎都太碎了，不推荐</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/eciksH.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/eciksH.png" data-sub-html="<h2>晚上在文东记开了两张枱</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/eciksH.png     ></a><figcaption class="image-caption">晚上在文东记开了两张枱</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/26RaEU.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/26RaEU.png" data-sub-html="<h2>次日的早餐之一：叻沙</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/26RaEU.png     ></a><figcaption class="image-caption">次日的早餐之一：叻沙</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/oYpiAx.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/oYpiAx.png" data-sub-html="<h2>次日的早餐之二：肉骨茶</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/oYpiAx.png     ></a><figcaption class="image-caption">次日的早餐之二：肉骨茶</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/09/Hz2nRp.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/09/Hz2nRp.png" data-sub-html="<h2>室友次日的早餐：天天海南鸡饭</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/09/Hz2nRp.png     ></a><figcaption class="image-caption">室友次日的早餐：天天海南鸡饭</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/yIke7j.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/yIke7j.png" data-sub-html="<h2>最后一天的早餐：花生汤圆。吃完就跟香港朋友去爬山了</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/yIke7j.png     ></a><figcaption class="image-caption">最后一天的早餐：花生汤圆。吃完就跟香港朋友去爬山了</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/LauiKF.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/LauiKF.png" data-sub-html="<h2>小贩中心吃完东西要自己把餐具放在回收处。突然发现紫色公路车坐管后面装的是佳明 Varia RCT715 雷达</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/LauiKF.png     ></a><figcaption class="image-caption">小贩中心吃完东西要自己把餐具放在回收处。突然发现紫色公路车坐管后面装的是佳明 Varia RCT715 雷达</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/tXBeZ4.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/tXBeZ4.png" data-sub-html="<h2>Maxwell Food Centre 对面的佛牙寺</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/tXBeZ4.png     ></a><figcaption class="image-caption">Maxwell Food Centre 对面的佛牙寺</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/SxMPGQ.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/SxMPGQ.png" data-sub-html="<h2>天福宫</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/SxMPGQ.png     ></a><figcaption class="image-caption">天福宫</figcaption>
    </figure>
<p>其实也逛了几个展，最大的感受不是展览本身，而是和室友一致认为它们在验票环节实在太宽松了，不知道该归结为社会互信还是刑罚严苛。为了避免被钻空子这里就不过多展开。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/zuuFUp.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/zuuFUp.png" data-sub-html="<h2>离境航班上见到新加坡海峡中密密麻麻的航运船只</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/zuuFUp.png     ></a><figcaption class="image-caption">离境航班上见到新加坡海峡中密密麻麻的航运船只</figcaption>
    </figure>
<p>如果说这次旅行有什么遗憾的话，首先是网购的热带风情花衬衫在物流到广州后被意外遣送北京导致我没有穿上；其次是出发前一晚被空调冻感冒了全程体力不在线；还有因为关了国内 IM 的消息推送好巧不巧有朋友这期间联系不上我。或许可能也许我该提前找个庙拜拜的。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2024/10/4or0bj.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2024/10/4or0bj.png" data-sub-html="<h2>珍爱生命，远离中通</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2024/10/4or0bj.png     ></a><figcaption class="image-caption">珍爱生命，远离中通</figcaption>
    </figure>
<p>出国玩真的比国内有趣多了，不知道下次会去哪里。</p>
]]></description></item><item><title>2023：碎片</title><link>https://xuchunqiu.com/bye-2023/</link><pubDate>Sat, 30 Dec 2023 12:16:37 +0000</pubDate><author><name>xuchunqiu</name></author><guid>https://xuchunqiu.com/bye-2023/</guid><description><![CDATA[<p>旧年 7 月，我开始打人生的第一份工。“为什么要来广州？”身边很多人都曾问我这个问题，“因为想呆在冬天空气好的地方”。这个想法起始于 2015 年的冬天，那年我刚读大一，周末骑车去火车站取回家车票，雾霾天能见度很差，3M 特别勒耳朵的 KN95 口罩让眼镜上满是雾气，一边大口喘气一边心里突然就冒出这个念头。</p>
<p>毕业季投简历的时候，我初步限定了四个城市：杭州、上海、广州、深圳（按距离排序）。想想觉得非常有趣，在大学的开始和结束你要分别做一场足以影响人生未来走向的抉择。七年前的我对周遭世界知之甚少，选择西安只是因为离家近+有一个高中学长也在，即便我俩一直没有面基过。七年后的我除了考虑就业机会，其实也在暗自拣选城市或者说市民的气质，广州、上海是我心里的 top 2。可惜当时的上海市民正遭遇封城，投出的简历完全没有被处理，所以广州很快成为我的唯一选择。尤其到收到这个不需要加班的 offer 后，我更是特别满意。</p>
<p>目前为止我还在这家公司，这一年半时间一共搬了两次家，都在公司 3 km 范围内。第一次是刚来时候，提前网上没找到合适的房子，就先订了酒店落脚一周，当时只有四件行李和一个显示器。线下看了一遍房后，最后选了小区的一室一厅，不到 40 平，窗外是大片的树。夏天的时候有些烦人，六点会有鸟儿每天准时叽叽喳喳半个钟，然后是清洁工拿大扫帚扫地的次啦次啦，睡眠质量受到了严重影响，除非是我特别困的时候才能一直睡到闹钟响。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/12/ewYzN2.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/12/ewYzN2.png" data-sub-html="<h2>阳台每天下午可以晒到太阳</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/12/ewYzN2.png     ></a><figcaption class="image-caption">阳台每天下午可以晒到太阳</figcaption>
    </figure>
<p>楼上的邻居家养了条叫「多多」的狗，虽然只是听别人这么叫，但这个音也不会有别的字了吧？多多是一条浅棕色的腊肠犬，看起来很机灵，深得院子里小孩子们的喜欢，每到周末我想睡懒觉或者中午打个盹的时候，总能听到楼下小孩子亲切地呼唤多多下去玩。又比如今天早上我是怎么醒的呢？是十点多的时候听到男主人在阳台喊楼下的狗子：「多多！吃芒果！」。珍爱睡眠，愿以后的邻居都不养狗。</p>
<p>一楼的前邻居经常喜欢敞着门，我不是很理解这种行为———「强哥」直接进屋了怎么办？直到有天上楼的时候惊到一只超大的蟑螂，只见它身手敏捷地从门缝钻进了隔离邻居的家，我才知道哦是我多虑了。一楼前邻居家有个还在上小学的小姑娘，几乎每天晚上都能听到她喊「哎呀！烦死了！」，不知道是不是作业写不完。作为初入职场的打工人我反而逐渐体会到学生时代的轻松：知识是具体的背背课本就行，目标是明确的通过考试就行，假期是随意的想什么时候放都行。</p>
<p>创业公司有个好处是同龄人多，因为年轻意味着便宜。尤其刚来的时候四五十号人坐在一个空间办公，起步阶段各个岗位都在逐渐摸索试错，频繁的沟通让所有人都很快地熟悉了起来。但慢慢地一些事情让我开始觉得没必要同所有人都保持友好的关系，这倒不是说有人把锅甩到了我头上，毕竟前领导对手下的人非常关照，帮我们屏蔽掉外部的干扰可以认真做事，工作赶进度的时候还自己下场敲代码，后来跟她聊的时候她说这种管理方式是在模仿她的某任领导。怎么说呢？感恩我们都曾遇到过的好领导。</p>
<p>有天看 log 的时候突然发现 M 来广州了，几年前我去买周老师新书的时候下了火车找不到方向，初代 iPhone SE 的定位一直在飘没有办法用手机地图，就拍了张民女的像在群里有没有中大人可以指路，M 就冒出来了。买到书后我跟 M 讲今天我准备去哪里抓宝，M 半夜特登发消息确认我有返到屋企。不过时间的关系当时没来得及面基，今年终于被我补上了，还把几年前跟室友去成都玩的时候买的冰箱贴也送给了他。</p>
<p>毕业前的那段时间我特别闲，就每天在 BS 上一边做 fact-checking 一边当话唠，加了广州本地群后被直接认了出来还挺有成就感的，毕竟我在 BS 上用的别名。工作之后我慢慢就不太活跃了，但竟然有一个东北的玩家 H 私我说社群需要更多这样认真的人，别提多开心了，为了写这段我悄悄查了一下 ta 的 COMM 发言，发现 7 月的时候还在跟友军 battle 虚假申请的事，也是个爱较真的老铁。今年可以开牌的线下活动只有三场充电（同埋开饭），成功跟本地友军混了个脸熟，甚至第三场的时候正好我去杭州找玻总，大佬联系了上海友军送 key 到杭州给我，然后迫于无人背锅我就成了第三场的 PoC。当 PoC 要考虑的问题蛮多的：提前散 key 的安排、充电房的选址、充电当日的时间规划、有效 key 的计算与装桶、鸽子数量的推估等等，还好我做得不错。明年会有可以去到的 onsite 活动安排，感觉这个游戏或许还能再残喘多几年也说不定呢。</p>
<p>10月的时候听了人生第一场演唱会。因为我不擅长唱歌也不爱听歌，所以我一直觉得去演唱会是我永远不会做的事情。 《随机波动》有期节目的结尾放了 ta 们的《邊一個發明了返工》 我才第一次知道这个乐队，找出来听了几首其它歌之后也没有觉得特别喜欢。态度的转变发生在我在网上看到一张演唱会现场照片：</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/12/izO8AJ.jpg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/12/izO8AJ.jpg" data-sub-html="<h2>屏幕上是《浪漫九龍塘》的歌词</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/12/izO8AJ.jpg     ></a><figcaption class="image-caption">屏幕上是《浪漫九龍塘》的歌词</figcaption>
    </figure>
<p>这次能买到演唱会的飞也是非常之巧，因为我不常刷社交软件。见到到高中的师兄 D 在豆瓣上标记了一张 ta 们的新专辑，才突发奇想搜了一下今年有没有演唱会，正好就看到前几天 ta 们公布了预售安排。网络售票是在香港的一个票务平台进行的，时间到之后网站会自动排队，等了三四个小时才进了选座页面，然后信用卡下单一气呵成（招行的全币卡真的超级好用）。更巧的是我跟早见买到了同一天的，可惜在现场没有遇到。后来她组织的跟《香港散步學》作者一起散步的活动我也没有被选中，有点后悔没有把上一篇博客的链接直接甩过去。</p>
<p>今年还会开车了，其实我驾照很早就到手，但一直没有上路的经验，之前一直戏称自己是「拿到驾照后只开过碰碰车」。9 月的时候因为有次同事说胡话让我开车，我就抱着「撞了就撞了」的心态开了一小段。后来拿另一个同事的车在园区绕了几圈后就算是练好了。第一次上路误打误撞开进城中村遭遇了窄路会车、山路堵车等各种复杂路况，第二次直接上了高速，这么两次之后就完全敢自己开了。不过目前来说还没有买车的打算，因为这个通勤距离买车太浪费了，而且按我目前的用车需求还是打车划算。</p>
<p>12 月正好赶上降温，本来说跟邻居们天台饮杯就临时把场地改成了我家，两个月没有打扫卫生的我措手不及，只能把各种杂物都搬进卧室里。大家各自带些食物，边看视频边聊天还挺惬意的，谈谈工作谈谈理想然后又回归生活。对于这是最后一次聚会每个人都心照不宣，这种告别比我之前送别的同事走的时候显得更为平淡，不至于那么伤感。在这之后我斥巨资采购了两个收纳柜，把东西分门别类整理好后心里舒畅很多。</p>
<p>没有宏大的总结，只有细小的生活，这就是我的 2023。</p>
]]></description></item><item><title>美丽新香港</title><link>https://xuchunqiu.com/brave-new-hong-kong/</link><pubDate>Thu, 17 Aug 2023 07:02:17 +0000</pubDate><author><name>xuchunqiu</name></author><guid>https://xuchunqiu.com/brave-new-hong-kong/</guid><description><![CDATA[<div class="featured-image">
                <img src="https://image.assets.xuchunqiu.com/img/2023/09/6WvZt8.jpeg" referrerpolicy="no-referrer">
            </div><p>比卡超今年 2 月宣布全面通关之后，我很快就加好了港澳通行证的签注，但这种出去玩的热情很快就被无尽的工作消磨殆尽。直到这个月收到媒体 W 要在独立书店 H 现场派发纪念品的确认邮件，这才急忙打开 Airbnb 开始订房。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/ZM8duz.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/ZM8duz.png" data-sub-html="<h2>可以见到主编！</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/ZM8duz.png     ></a><figcaption class="image-caption">可以见到主编！</figcaption>
    </figure>
<p>2022 年底 Airbnb 宣布停止在中国内地运营后我遗憾了好久，一方面是因为用过小猪短租、美团民宿之类的国内民宿平台后我发现 Airbnb 是最省心的，不会有刚下完订单立刻收到房东电话说没房了给你换一间那种表里不一；另一方面在逐渐走向封闭的社会环境中全球化平台的存在起码还能让我感受到一些与世界偶尔的连结。想起早见写过她在上海的时候周末会去找那些非常有特色的 Airbnb 然后去认识这些有趣的房东，如果我是社牛的话大概也会是这样子的吧。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/Uv68tS.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/Uv68tS.png" data-sub-html="<h2>截取自早见的博文 感谢 Airbnb曾把这样一个梦带到这里｜hayami’s blog</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/Uv68tS.png     ></a><figcaption class="image-caption">截取自早见的博文 <a href="https://hayami.typlog.io/airbnb" target="_blank" rel="noopener noreferrer">感谢 Airbnb曾把这样一个梦带到这里｜hayami’s blog</a></figcaption>
    </figure>
<p>住处定好之后就开始考虑要去哪里逛。我不是一个典型的游客——相比于网红景点，我更喜欢陌生地方的社区和附近。之前按照媒体 I 的报道拜访过上海街 404 号和黑暗中对话体验馆，都是非常独特的体验，我甚至还写了一篇黑暗中对话的体验博文准备发上来，可惜在毕业迁徙的过程中遗失了。我在微信的昵称就取自 I 发刊词的前半段，不过现在它搬去了台湾，就很难讲这句话还是否熨帖。</p>
<p>几个月前在广州骑行群中看到有人分享 <a href="https://www.ntctn.hk/tc/full-track" target="_blank" rel="noopener noreferrer">屯门-马鞍山 60 KM 单车径</a>。坡度比较平缓（甚至好过黄埔这边！）适合作为开香港新地图的第一程，为此我还在网上爬文好久确认到在「單車匯合中心」一般都可以租到车，然后又在 Google Map 找哪家租车店看起来还没有执笠，考虑到我要异地还车，最终选了评分一般但店最多的「龍記單車」。</p>
<p>踩单车之外，我还想再旁听一次庭审。这个很看运气：</p>
<ol>
<li>庭审的时间一般放在周内、周六很少有，我预计是周五上午到、周一下午回，实际就只有周五有可能听到庭审</li>
<li>周五下午想趁工作日去一下 M+，所以我只能听到周五上午的庭审，而上午一般 9 点或 10 点开庭，要更早到赶派筹</li>
<li><a href="https://e-services.judiciary.hk/dcl/index.jsp" target="_blank" rel="noopener noreferrer">确切的庭审安排只会预先半日公布</a>，我订车票的时候无法得知庭审会安排在哪个法院</li>
</ol>
<p>周五天蒙蒙亮我就出门打车到天河，搭果姐推荐的跨境中港通最早一趟 6:30 的大巴经过两个小时到深圳湾口岸，自行过关后换车又用了一个小时到太子上海街。此时还有三十分钟开庭，召了辆的士十几分钟去到法院，意外地赶上了派筹。</p>
<p>旁听的流程是这样的，首先通过安检，如果有带水的话一定要喝完或者倒掉；如果有违禁品需要寄存，例如我钥匙上挂的只有回勾的小刀 XD。然后取一张有编号的白筹并在法庭门前的椅子上等律师、家属（好像是以黄筹区分，网上没有查到资料）都入场后才轮到公众进入，安保员会按照编号顺序一次放行十几个人。进去之后可以在公众席任坐，因为椅子上没有编号。</p>
<p>我进的那个庭公众席前面依次是家属、记者，以上这些位置都是侧面。跟法官面对面由近至远依次是坐在证人席的还押被告 H、律师和其它还押被告，本庭律师席中的大律师竟有十一个之多，但我观察到只有两个在上午的庭审中盘问了 H。我一开始没有找到证人席在哪里，H 背对我坐，开庭前回身与家属席的人比划手势来问候时我也没认出她来，直到她开始作供我才敢最终确定。</p>
<p>庭审的过程大致是大律师以英文发问，H 旁边的传译以广东话复述，H 以广东话作答，传译再以英文复述，法官有时会进一步询问。这种来回的语码转换作为听众着实费脑，公众席坐我左前一个带蓝口罩高高瘦瘦的男仔一直在本子上做速记，不知道他是怎么做到的。</p>
<p>现实法庭的气氛跟《毒舌大状》好不同，甚至有好几次旁听席都笑场了，例如大律师觉得法官进一步询问的时候没有表达清楚有点心急就打断：「May I try？」，又比如 H 讲「專頁」（Fan Page）法官追问：「專業？即係 Professional？」，再比如大律师问知不知笔名 L 的身份 H 答：「我都唔知佢是一個人定係一堆人來㗎🤷🏻‍♀️」。</p>
<p>11 点多的时候中场休息了一下，出门上厕所仍要记得带筹因为再入来还要验。12 点多的时候大律师主动说还有几分钟时间来不及问完剩下的问题，建议法官休庭，法官从善如流。因为法庭大楼内禁止摄录，这段没有照片可以用。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/cENIah.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/cENIah.jpeg" data-sub-html="<h2>午饭</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/cENIah.jpeg     ></a><figcaption class="image-caption">午饭</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/XXGBee.PNG" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/XXGBee.PNG" data-sub-html="<h2>浏览器免登录落单体验很棒</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/XXGBee.PNG     ></a><figcaption class="image-caption">浏览器免登录落单体验很棒</figcaption>
    </figure>
<p>吃过午饭搭 MTR 去 M+。我的八达通上次使用是四年前，而<a href="https://www.octopus.com.hk/tc/consumer/octopus-cards/proper-use/inactive-octopus/index.html" target="_blank" rel="noopener noreferrer">三年内未用过的卡片是需要到客务中心处理的</a>，不过我临行前把实体卡转成了电子卡并用八达通的手机 App 花 10 HKD 买了一个电子卡面，竟然过闸的时候没有被卡住。</p>
<p>M+ 的大部分展览内容非常之贴地，能感觉到艺术家对现实的关切，这特别好（但回看我的相册发现这部分完全没拍到，潜意识里我大概觉得这不够吸睛）。我坐在一个只有一条凳子的小房间里看完了一部十几分钟的在欧司朗工厂里拍的纪录片，这种在人来人往的展览中完全抽离出来的感觉蛮神奇的。</p>
<p>展览的动线设计的不是很好，没办法不走回头路，应该上午去是比较好的选择，时间会更充裕一些。里面的餐饮卖的好贵，我买了一瓶果汁后就完全不想再去逛纪念品商店了，但后来在豆瓣上见到友邻拍的商品感觉错过了好多有意思的东西。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/YEwiae.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/YEwiae.jpeg" data-sub-html="<h2>下午的阳光正好直射进来</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/YEwiae.jpeg     ></a><figcaption class="image-caption">下午的阳光正好直射进来</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/4vMtsN.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/4vMtsN.jpeg" data-sub-html="<h2>M&#43; 望中环</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/4vMtsN.jpeg     ></a><figcaption class="image-caption">M+ 望中环</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/kjKSeF.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/kjKSeF.jpeg" data-sub-html="<h2>一直想体验机械打字机的 Carriage Return 和 Line Feed 是什么感觉</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/kjKSeF.jpeg     ></a><figcaption class="image-caption">一直想体验机械打字机的 Carriage Return 和 Line Feed 是什么感觉</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/wqdqNS.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/wqdqNS.jpeg" data-sub-html="<h2>艺术与政治</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/wqdqNS.jpeg     ></a><figcaption class="image-caption">艺术与政治</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/PjVs3O.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/PjVs3O.jpeg" data-sub-html="<h2>跟我小时候玩具一模一样！</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/PjVs3O.jpeg     ></a><figcaption class="image-caption">跟我小时候玩具一模一样！</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/iER29z.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/iER29z.jpeg" data-sub-html="<h2>海边好多麻雀</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/iER29z.jpeg     ></a><figcaption class="image-caption">海边好多麻雀</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/Lskk2F.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/Lskk2F.jpeg" data-sub-html="<h2>远远看了一眼 M&#43; 的商店</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/Lskk2F.jpeg     ></a><figcaption class="image-caption">远远看了一眼 M+ 的商店</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/lN3W1h.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/lN3W1h.jpeg" data-sub-html="<h2>食晚餐路过的天桥上拍落日，只最左路牌为 监狱体</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/lN3W1h.jpeg     ></a><figcaption class="image-caption">食晚餐路过的天桥上拍落日，只最左路牌为 <a href="https://road.org.hk/PrisonGothic.html" target="_blank" rel="noopener noreferrer">监狱体</a></figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/ygDcGe.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/ygDcGe.jpeg" data-sub-html="<h2>糖水当晚餐</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/ygDcGe.jpeg     ></a><figcaption class="image-caption">糖水当晚餐</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/8yJam0.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/8yJam0.jpeg" data-sub-html="<h2>这几天的住处，分体式空调比窗机安静很多</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/8yJam0.jpeg     ></a><figcaption class="image-caption">这几天的住处，分体式空调比窗机安静很多</figcaption>
    </figure>
<p>第二日本来想爬獅子山，但早上下了雨担心行山路滑就改去离岛。香港和广州都有長洲島，可惜快船过去单程就要一个小时，这对下午4点才出门的我来说着实有点远了，所以最后去了行程时间短一半的南丫島。南丫島有榕樹灣和索罟灣两个码头，都有到中環或者香港仔的船班。榕樹灣的村子更大，餐饮、民宿、酒吧一应俱全；索罟灣细一些只有餐饮。我没什么所谓去榕樹灣的船先开我就搭了。去程 18.6 HKD，从索罟灣回中環 23.1 HKD。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/SXQPYP.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/SXQPYP.jpeg" data-sub-html="<h2>中環 &lt;-&gt; 榕樹灣 时刻表</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/SXQPYP.jpeg     ></a><figcaption class="image-caption">中環 &lt;-&gt; 榕樹灣 时刻表</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/5PpAZV.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/5PpAZV.jpeg" data-sub-html="<h2>中環 &lt;-&gt; 索罟灣 时刻表</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/5PpAZV.jpeg     ></a><figcaption class="image-caption">中環 &lt;-&gt; 索罟灣 时刻表</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/IKXavY.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/IKXavY.jpeg" data-sub-html="<h2>船舱内景</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/IKXavY.jpeg     ></a><figcaption class="image-caption">船舱内景</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/Z47Yun.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/Z47Yun.png" data-sub-html="<h2>Strava Heatmap (Hiking) 也能看出北边更热门</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/Z47Yun.png     ></a><figcaption class="image-caption">Strava Heatmap (Hiking) 也能看出北边更热门</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/muuFLk.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/muuFLk.jpeg" data-sub-html="<h2>走的最简单的家樂徑（粉红色虚线）</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/muuFLk.jpeg     ></a><figcaption class="image-caption">走的最简单的家樂徑（粉红色虚线）</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/vRMoVr.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/vRMoVr.jpeg" data-sub-html="<h2>南丫發電廠的三条柱</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/vRMoVr.jpeg     ></a><figcaption class="image-caption">南丫發電廠的三条柱</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/FGQ9lD.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/FGQ9lD.jpeg" data-sub-html="<h2>洪聖爺泳灘</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/FGQ9lD.jpeg     ></a><figcaption class="image-caption">洪聖爺泳灘</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/xkjzes.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/xkjzes.jpeg" data-sub-html="<h2>近处为凌日灣，远处为鐵砂塱灘</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/xkjzes.jpeg     ></a><figcaption class="image-caption">近处为凌日灣，远处为鐵砂塱灘</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/4U55zM.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/4U55zM.jpeg" data-sub-html="<h2>没想到还挺累的</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/4U55zM.jpeg     ></a><figcaption class="image-caption">没想到还挺累的</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/SfYL3Z.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/SfYL3Z.jpeg" data-sub-html="<h2>行山径两边都有护栏</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/SfYL3Z.jpeg     ></a><figcaption class="image-caption">行山径两边都有护栏</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/f2IFkb.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/f2IFkb.jpeg" data-sub-html="<h2>索罟灣的渔排</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/f2IFkb.jpeg     ></a><figcaption class="image-caption">索罟灣的渔排</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/rbVg5T.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/rbVg5T.jpeg" data-sub-html="<h2>索罟灣的介绍</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/rbVg5T.jpeg     ></a><figcaption class="image-caption">索罟灣的介绍</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/I9FWYK.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/I9FWYK.jpeg" data-sub-html="<h2>索罟灣的猫猫</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/I9FWYK.jpeg     ></a><figcaption class="image-caption">索罟灣的猫猫</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/50EiwX.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/50EiwX.jpeg" data-sub-html="<h2>落单后开始拍延时</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/50EiwX.jpeg     ></a><figcaption class="image-caption">落单后开始拍延时</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/EipLIC.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/EipLIC.jpeg" data-sub-html="<h2>有个青菜没拍到</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/EipLIC.jpeg     ></a><figcaption class="image-caption">有个青菜没拍到</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/Mw2jY2.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/Mw2jY2.jpeg" data-sub-html="<h2>索罟灣二號碼頭，最得意的一张</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/Mw2jY2.jpeg     ></a><figcaption class="image-caption">索罟灣二號碼頭，最得意的一张</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/UMBi47.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/UMBi47.jpeg" data-sub-html="<h2>食完饭突降暴雨</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/UMBi47.jpeg     ></a><figcaption class="image-caption">食完饭突降暴雨</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/g14NwK.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/g14NwK.jpeg" data-sub-html="<h2>回到住处还在下雨，还好隔音不错</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/g14NwK.jpeg     ></a><figcaption class="image-caption">回到住处还在下雨，还好隔音不错</figcaption>
    </figure>
<p>在香港这几晚我睡得特别香，大概是远离工作的环境后我才能彻底松弛下来。第三天早上睡到快 9 点才醒，啃了昨天在 7 仔买的饭团就立刻去屯门租单车。因为想赶在下午 2 点前到书店 H，在 MTR 上算了一下时间发现想骑全程是来不及的，只能从元朗开始。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/2L4YuV.PNG" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/2L4YuV.PNG" data-sub-html="<h2>Citymapper 步行导航不如 Google Map，但公共交通的即时通知非常好用</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/2L4YuV.PNG     ></a><figcaption class="image-caption">Citymapper 步行导航不如 Google Map，但公共交通的即时通知非常好用</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/qwYqkw.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/qwYqkw.jpeg" data-sub-html="<h2>车站的增值机尚不支持 NFC，这意味着对于没有香港手机号的使用者来说手机里的八达通只能通过「钱包」中的非内地卡或「旅客八达通」中以较差汇率使用内地卡增值；有香港手机号则可以注册「八达通」然后通过转数快或本港银行增值</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/qwYqkw.jpeg     ></a><figcaption class="image-caption">车站的增值机尚不支持 NFC，这意味着对于没有香港手机号的使用者来说手机里的八达通只能通过「钱包」中的非内地卡或「旅客八达通」中以较差汇率使用内地卡增值；有香港手机号则可以注册「八达通」然后通过转数快或本港银行增值</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/O4wt5v.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/O4wt5v.jpeg" data-sub-html="<h2>很好玩的一架车，两侧写的是「女の不满，男の浪漫」</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/O4wt5v.jpeg     ></a><figcaption class="image-caption">很好玩的一架车，两侧写的是「女の不满，男の浪漫」</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/XG3shu.JPG" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/XG3shu.JPG" data-sub-html="<h2>龍記單車中低档山地车 100 HKD 骑整日，并不便宜</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/XG3shu.JPG     ></a><figcaption class="image-caption">龍記單車中低档山地车 100 HKD 骑整日，并不便宜</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/stnATu.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/stnATu.jpeg" data-sub-html="<h2>路上见到一辆「LocoBike 樂區踩」，车款有点眼熟</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/stnATu.jpeg     ></a><figcaption class="image-caption">路上见到一辆「LocoBike 樂區踩」，车款有点眼熟</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/zQDpJV.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/zQDpJV.jpeg" data-sub-html="<h2>这我租的车</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/zQDpJV.jpeg     ></a><figcaption class="image-caption">这我租的车</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/qjLBdx.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/qjLBdx.jpeg" data-sub-html="<h2>中间下了阵雨，还好不大</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/qjLBdx.jpeg     ></a><figcaption class="image-caption">中间下了阵雨，还好不大</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/EVvUJx.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/EVvUJx.jpeg" data-sub-html="<h2>Ta们骑的双人车，一直在打摆哈哈哈哈哈</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/EVvUJx.jpeg     ></a><figcaption class="image-caption">Ta们骑的双人车，一直在打摆哈哈哈哈哈</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/ds1Nba.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/ds1Nba.jpeg" data-sub-html="<h2>到上水的时候下大了，被迫提前还车</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/ds1Nba.jpeg     ></a><figcaption class="image-caption">到上水的时候下大了，被迫提前还车</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/PZBQwT.png" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/PZBQwT.png" data-sub-html="<h2>只骑完了 60 KM 的 17.48 KM</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/PZBQwT.png     ></a><figcaption class="image-caption">只骑完了 60 KM 的 17.48 KM</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/wKZvI8.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/wKZvI8.jpeg" data-sub-html="<h2>M 记的期间限定薯条，多了一包海苔粉和一个空袋子需要自己摇</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/wKZvI8.jpeg     ></a><figcaption class="image-caption">M 记的期间限定薯条，多了一包海苔粉和一个空袋子需要自己摇</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/JfexXD.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/JfexXD.jpeg" data-sub-html="<h2>太多水货客了</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/JfexXD.jpeg     ></a><figcaption class="image-caption">太多水货客了</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/TS0scS.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/TS0scS.jpeg" data-sub-html="<h2>上水站公共小巴總站</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/TS0scS.jpeg     ></a><figcaption class="image-caption">上水站公共小巴總站</figcaption>
    </figure>
<p>赶在 2 点来到书店 H，好细间铺开在唐楼 3F，寻常路过的人根本不会注意到这里。屋门外贴了好多活动、电影的海报，一打开门进去已经有十几个人在了。报了编号顺利取到纪念品后我选了本书坐在窗边钉书钉。听着窗外的雨淅淅沥沥、身后的读者来来去去、W 的主编们不断讲「多谢支持」，真的好钟意这种氛围。</p>
<p>第四日因为下午要返程，只在大埔随便逛了逛。</p>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/X4EPSO.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/X4EPSO.jpeg" data-sub-html="<h2>林村天后宮</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/X4EPSO.jpeg     ></a><figcaption class="image-caption">林村天后宮</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/gtguMy.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/gtguMy.jpeg" data-sub-html="<h2>林村屋子上的涂鸦</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/gtguMy.jpeg     ></a><figcaption class="image-caption">林村屋子上的涂鸦</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/MA2Lvp.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/MA2Lvp.jpeg" data-sub-html="<h2>林村許願樹</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/MA2Lvp.jpeg     ></a><figcaption class="image-caption">林村許願樹</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/jAeAfi.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/jAeAfi.jpeg" data-sub-html="<h2>为什么有 ofo？</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/jAeAfi.jpeg     ></a><figcaption class="image-caption">为什么有 ofo？</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/008bEk.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/008bEk.jpeg" data-sub-html="<h2>另一间龍記單車</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/008bEk.jpeg     ></a><figcaption class="image-caption">另一间龍記單車</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/inDVfm.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/inDVfm.jpeg" data-sub-html="<h2>藏在云里的馬鞍山</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/inDVfm.jpeg     ></a><figcaption class="image-caption">藏在云里的馬鞍山</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/bED295.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/bED295.jpeg" data-sub-html="<h2>廣惠橋</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/bED295.jpeg     ></a><figcaption class="image-caption">廣惠橋</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/hG6fl3.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/hG6fl3.jpeg" data-sub-html="<h2>鐵路博物館馆藏通用儲值票与車票套</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/hG6fl3.jpeg     ></a><figcaption class="image-caption">鐵路博物館馆藏通用儲值票与車票套</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/mAk6RW.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/mAk6RW.jpeg" data-sub-html="<h2>另一个車票套</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/mAk6RW.jpeg     ></a><figcaption class="image-caption">另一个車票套</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/eVPdCh.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/eVPdCh.jpeg" data-sub-html="<h2>当年的九广铁路一等车厢就配备了 Samsung 冷气（不是</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/eVPdCh.jpeg     ></a><figcaption class="image-caption">当年的九广铁路一等车厢就配备了 Samsung 冷气（不是</figcaption>
    </figure>
<figure><a class="lightgallery" href="https://image.assets.xuchunqiu.com/img/2023/09/7fhJ67.jpeg" title="" data-thumbnail="https://image.assets.xuchunqiu.com/img/2023/09/7fhJ67.jpeg" data-sub-html="<h2>鸡蛋格遮阳板</h2>"><img  loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/7fhJ67.jpeg     ></a><figcaption class="image-caption">鸡蛋格遮阳板</figcaption>
    </figure>
<p>这次的香港四日游大概就这些了，塞了这么多照片进去不知道会不会特别影响加载速度 XD。没什么好总结的，就说一声十月再见吧👋</p>
]]></description></item><item><title>今年是25岁的我</title><link>https://xuchunqiu.com/yet-another-chun-qiu/</link><pubDate>Wed, 12 Apr 2023 01:47:51 +0000</pubDate><author><name>xuchunqiu</name></author><guid>https://xuchunqiu.com/yet-another-chun-qiu/</guid><description><![CDATA[<p>上个月在 V 站看到 <a href="https://lutaonan.com" target="_blank" rel="noopener noreferrer">Randy</a> 写的<a href="https://www.v2ex.com/t/927096" target="_blank" rel="noopener noreferrer">《28 岁，我还想生猛下去》</a> ，突然意识到在人生的某个阶段记录下自己的所思所想，多年后再来回顾的时候，应该是件特别有意思的事情。那么趁着 25 岁这个可以整除 100 的年龄，我也来试着写点什么。</p>
<h2 id="2009-年" class="headerLink">
    <a href="#2009-%e5%b9%b4" class="header-mark"></a>2009 年</h2><p>先上一张旧照，左三是我：</p>
<p><img class="tw-inline" loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/iCn0Qa.png   alt="一排人蹲在教室后面写什么东西"  ></p>
<p>我右手边是坤哥，我俩经常在体育课自由活动时间背靠背坐草地上一起背政治。想想都是痛苦的回忆，首先我是属于背书特别慢的人，我们的自习课呢都是前半节背书后半节课代表出题让大家默写，为了能多些时间背书，我们就会把知识点提前抄到纸上然后趁体育课时间提前准备。初中的政治考试很有意思，问答题是按点给分，不管逻辑，所以我背政治都是从目录开始背——先记单元叫什么、然后是这个单元里有哪些课、最后是每一课里有哪些知识点，考试遇到问答题就直接把所有有关的知识点全默写一遍，往往也能拿到不错的分数。</p>
<p>初中第一次地理考成绩恰好比华夏高1分，他就挑衅说“你信不信下次我一定比你高”，到了第二次我又恰好高他1分，现在想想依然好爽，哈哈哈！应该说我初中的时候最喜欢的课是生物和地理，但可惜它们在初三都没有了。初三开始整个年级都搬到了另一个校区，距离远了大概三公里，于是我上学的方式就从步行切换到了骑车。放学时候跟几个同学在红庙路的车流中见缝插针地飙车是我每天最快乐的事情，唯一一次意外是跟一辆电动车正面遭遇把我前轮撞歪了。</p>
<p>初中毕业之后，有偷偷从家属区的后门溜回去过，发现以前的教学楼全部被推倒重建，原来一楼栖息的鸽子都不见了。新楼是一个三面围起来的结构，想想都替现在的学生们觉得压抑。</p>
<h2 id="2012-年" class="headerLink">
    <a href="#2012-%e5%b9%b4" class="header-mark"></a>2012 年</h2><p>升了高中之后，我才有了手机、电脑和 QQ 号，这个时间可能比大多同龄人都要晚。第一部手机是斐讯的 FWS610——没错就是那个路由器 0 元购的斐讯。这个手机的出厂系统是 Andorid 2.3，在我手里完全没有收到过任何系统更新，偶然在安智论坛上看到了 Android 手机可以 Root，就慢慢自己尝试折腾。说折腾也许不太恰当，当时的手机可没有 BL 锁之类的东西，Root 手机就是用不同的软件点几次屏幕的事情。第一次用「360超级Root」没成功，第二次换了「KingRoot」就轻松搞定。Root 之后可玩性高了很多，比如拿「RE管理器」去修改系统的属性信息来在发说说的时候显示成别的设备、用「八门神器」修改单机游戏的金币、装「ViPER4Android FX（蝰蛇音效）」提升音质等等。但有次玩脱了随手刷摩托罗拉机型改状态栏的包直接让手机变了砖。</p>
<p>高一有次考试是和高二插班坐，看到高我一级的 Z 轻车熟路地在考前打开一体机柜子插了个迷你路由器进去，我大受震撼，第一次知道原来手机信号屏蔽仪不干扰 Wi-Fi 信号。后来在他 QQ 上见识到各种花里胡哨的玩机姿势，也是我大学报考计算机的原因之一。高一的时候还适逢学校 110 周年校庆，所有学生都拿纸片写了给未来自己的话然后统一放到时光胶囊里。记不清当时写的什么了，但愿学校打开的时候会记得通知大家。</p>
<p>上了高二学校不再强制住校（想住也住不下，就两栋宿舍楼），所以跟室友看海绵宝宝、打劫现哥的沙琪玛、一起庆祝「室庆节」、和寝管斗智斗勇等等这些多姿多彩的宿舍活动就没有了，学习成了生活的主要内容。每天就是上课、刷题、改错的不断循环，我一度压力大到当堂举手建议班主任不要再讲笑话了，赶紧开始讲练习题。可以想到，结果就是被叫家长咯。</p>
<p>高中是没什么时间关心时事的，语文组的老师们为了帮大家准备写作文的素材，会定期印一些阅读材料，有些还会特别念给我们，比如《南方周末》的新年献词。有次阅读材料里出现了周小平的文章（具体哪一篇我记不大清），文中的观点立刻激起大家的反对，后来语文老师竟然跟大家道了歉。</p>
<h2 id="2015-年" class="headerLink">
    <a href="#2015-%e5%b9%b4" class="header-mark"></a>2015 年</h2><p>如果要说大学最遗憾的事情，那就是我一直不知道学校图书馆有一个「读者荐购」的页面，导致我如果有什么想看的书就不得不直接在亚马逊上买或者来回花掉三个小时去陕西省图书馆。至于大学生活的其它部分，倒也没什么特别值得讲的，毕竟我比较喜欢独来独往。后来接触了 N 记的游戏，才开始慢慢开始有一些社交活动（感谢 35 和 BA！），也渐渐地通过游戏对西安这座城市多了些了解（关于这部分之后单独写一篇也说不定）。</p>
<p>大学的时候也有在骑车，大一学校对面的村里还有租赁单车的店铺，二三十块钱就能骑一天，后来「共享单车」出来之后这些店就倒闭了。不过我比较多骑的是西安公共自行车，一方面是骑着轻快，另一方面是定价很便宜（周内一小时内免费、周末全免费）。加上后来三河一山绿道完工之后，从学校出发三公里就能上绿道，幸福感拉满。</p>
<p><img class="tw-inline" loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/M4Ntrd.png   alt="公共自行车与泾河和渭河的交汇处合影"  ></p>
<p>大学的另一个乐趣是在寝室看剧，《疑犯追踪》里的 The Machine 太帅气了，我也是因为这个才在研究生转了深度学习。</p>
<h2 id="2019-年" class="headerLink">
    <a href="#2019-%e5%b9%b4" class="header-mark"></a>2019 年</h2><p>2019 年对很多人来说应该最怀念的一年，因为没有疫情的寸步难行。2019 年正好是我本科毕业的时候，趁着五一假期第一次坐了飞机，先到广州跟老梁会合，然后一起逛了澳门，又独自坐喷射飞航去了香港。那是我第二次去香港，现在回想竟是意外地见证了某些地方的最后时刻。</p>
<p><img class="tw-inline" loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/P1oNq7.png   alt="煲底"  ></p>
<p>研究生入学之后，因为之前已经修过大部分课程，就多了不少空余时间可以参与到一些社区的工作中，可以稍微讲一下的是 BS（反正你们也搜不到这个缩写是什么意思 XD）：由于在 BS 上特别话唠，来了广州之后被群友给认出来了。至于学业方面，多亏浩哥的前人栽树，我们才能用到自己实验室的 GPU（因为工作站是我在管理，这个博客上现在还有一些当时写的使用文档），但写文章做学术？深感我不是这块料。</p>
<p>2020 年初，我也被困在家里，但反而觉得特别幸运。因为当时有很多中港台的高校开始在线上办讲座，这在以前可是想都不敢想的机会！见到喜欢的讲者比如项飚、张洁平、刘绍华等，真的是会激动地睡不着。甚至还有幸参与到两次文字稿的整理中，也算有回馈到组织方和其它来不及参与的朋友们。</p>
<h2 id="now" class="headerLink">
    <a href="#now" class="header-mark"></a>NOW</h2><p>啊～～终于写到宜家！现在工作近一年，工作上虽然比较累但领导很 nice；生活上置办了很多种草很久的电子产品用起来很开心（特别表扬 Aqara 的 HomeKit 全家桶，平价好用）。之前有承诺过要拍骑行视频的，那就在这里插播一下吧：</p>
<div class="bilibili">
    <iframe src="//player.bilibili.com/player.html?bvid=BV16M4y117tL&amp;page=1&amp;autoplay=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
</div>
<p>最后感谢可爱的同事们帮我过生日，多谢大家！</p>
]]></description></item><item><title>不止播客</title><link>https://xuchunqiu.com/podcast-and-more/</link><pubDate>Sat, 04 Mar 2023 13:45:45 +0000</pubDate><author><name>xuchunqiu</name></author><guid>https://xuchunqiu.com/podcast-and-more/</guid><description><![CDATA[<p>先来扯点题外话吧，三个月没更新，本博客的草已经长的老高了。其实我有很多选题想写，但上班之后一直没有整块的时间来做这些事情。最近看到 <a href="https://hayami.typlog.io/" target="_blank" rel="noopener noreferrer">早见 hayami</a> 在个人频道里讲她的经历：</p>
<blockquote>
  <p>大二时我第一次在赛博世界写作，运气好赶上知乎最好的年代，一下子有了七八万fo。虽然稚嫩但无比真诚，那是我第一个表达的装置。时至今日我仍在表达，是因为从互联网上得到了太多东西 —— 友情、爱情、工作机会、遥远相似的联结。再到后来公众号微博小红书b站，我用了很多平台，手动去中心化，但唯一不变的是「独立创作者」的身份。因为选题、策划、找嘉宾、做内容、后期、发布、同步……什么东西都是自己弄的（有多「独」呢？播客甚至连 co-host 都没有）。我努力学习各种技能，用 procreate 画设计，用 fcpx 剪视频，用 reaper 剪音频，用 markdown 写博客，搭个人网站、独立RSS ……</p>
<p>厉害吗？确实；累吗，累爆了…… 有时我几乎需要放弃所有社交、生活和运动的时间，在屏幕面前一坐一整天。然而即使是这样，即使你们看到很「高产」，我也只有2分是创作，剩余8分纯粹是对着电脑体力劳动。</p>
<p>如果没有在极限条件下创作的经历，我也不会去年在方舱这种连正常生活都没有的地方搞创作。所以，没有什么事情是偶然的。</p>

</blockquote><p>才意识到原来大家的博客都是挤时间来写的啊。那好，我也自己加班写咯。除草的第一篇，准备讲讲播客（Podcast）。</p>
<h2 id="什么是播客" class="headerLink">
    <a href="#%e4%bb%80%e4%b9%88%e6%98%af%e6%92%ad%e5%ae%a2" class="header-mark"></a>什么是播客？</h2><p>播客其实并不是什么新鲜的概念，在简体中文世界最早的播客节目大概是 飞猪 和 平客 的《反波 Antiwave》，开播于 <a href="https://web.archive.org/web/20050505174059/http://www.antiwave.net/005095.html" target="_blank" rel="noopener noreferrer">2005 年 4 月 16 日</a>，停播于 <a href="https://web.archive.org/web/20100112041947/http://www.antiwave.net/2009/05/post_37.html" target="_blank" rel="noopener noreferrer">2009 年 5 月 6 日</a>，有好事者在 2020 年成功复活了该节目（<a href="https://antiwave.xyz/" target="_blank" rel="noopener noreferrer">网站</a>，<a href="https://podcasts.apple.com/cn/podcast/%E5%8F%8D%E6%B3%A2-antiwave/id1501857775" target="_blank" rel="noopener noreferrer">Apple Podcast</a>，<a href="https://antiwave.xyz/feed/podcast/" target="_blank" rel="noopener noreferrer">RSS</a>）。</p>
<p>又扯远了……回到正题，简单讲播客就是可以点播的音频节目，听户可以通过导入 RSS 链接的方式订阅任意一档播客节目，当然现在大多数播客客户端还是比较友善的，会主动索引播客节目供你搜索。</p>
<p>好的，简介完毕，开始正题。</p>
<h2 id="关注的第一个节目" class="headerLink">
    <a href="#%e5%85%b3%e6%b3%a8%e7%9a%84%e7%ac%ac%e4%b8%80%e4%b8%aa%e8%8a%82%e7%9b%ae" class="header-mark"></a>关注的第一个节目</h2><p>根据 Apple Podcast 上的记录，我关注的一个节目是《内核恐慌》（<a href="https://pan.icu/feed" target="_blank" rel="noopener noreferrer">RSS</a>，<a href="https://podcasts.apple.com/hk/podcast/%E5%86%85%E6%A0%B8%E6%81%90%E6%85%8C/id928916244" target="_blank" rel="noopener noreferrer">Apple Podcast</a>，强烈推荐看一下他们使用 <a href="https://3type.cn/fonts/dinkie_bitmap/index.html" target="_blank" rel="noopener noreferrer">丁卯点阵体</a> 的官网 <a href="https://pan.icu" target="_blank" rel="noopener noreferrer">pan.icu</a>）。「内核恐慌」直译自 <a href="https://en.wikipedia.org/wiki/Kernel_panic" target="_blank" rel="noopener noreferrer">kernel panic</a>，吴涛 和 Rio 两位主播台风很活泼，早期一直聚焦计算机相关的话题，从串台专题「字弹字串」播出之后逐渐放飞（选题和更新频率层面），现在偏向计算机向的闲聊性质年更节目。顺便插一句，虽然是不同的人不同的节目，但 <a href="https://liuyandong.com/" target="_blank" rel="noopener noreferrer">刘延栋</a> 的《忽软忽硬》（<a href="https://liuyandong.com/feed/podcast" target="_blank" rel="noopener noreferrer">RSS</a>，上辈子叫：《软件那些事儿》）时常给我一种继承《内核恐慌》衣钵的感觉（除了栋哥一本正经地胡说八道的部分）。</p>
<h2 id="每期都听的节目" class="headerLink">
    <a href="#%e6%af%8f%e6%9c%9f%e9%83%bd%e5%90%ac%e7%9a%84%e8%8a%82%e7%9b%ae" class="header-mark"></a>每期都听的节目</h2><p><a href="https://www.thetype.com" target="_blank" rel="noopener noreferrer">The Type</a> 旗下的《字谈字畅》（<a href="https://www.thetype.com/typechat/feed/" target="_blank" rel="noopener noreferrer">RSS</a>，<a href="https://podcasts.apple.com/us/podcast/%E5%AD%97%E8%B0%88%E5%AD%97%E7%95%85/id1041704528" target="_blank" rel="noopener noreferrer">Apple Podcast</a>）是唯一我每集都要听的节目，《字谈字畅》聚焦于字体排印，节目形式多样，包括对谈、全球字体新闻联播、听众反馈、现场演讲录音等。Show notes 塞满了参考链接，是我目前所知唯一一档使用音频文件原生章节、章节封面功能的节目，完全是我想象中播客应有的样子。另外我要 highlight 一下他们的开场词：</p>
<blockquote>
  <p>虽然在荔枝 FM、网易云音乐、小宇宙、Spotify 这些平台上面都能收听到我们的节目，但还是强烈推荐大家使用泛用型的播客客户端来收听《字谈字畅》，毕竟我们是一档独立的播客而不依赖于任何一家平台。</p>

</blockquote><p>诚然这句话可能并不准确（详见 <a href="https://dao.fm/2019/06/04/%e8%87%b4%e8%8b%b9%e6%9e%9c%e4%b8%ad%e5%9b%bd%e5%8c%ba%e5%90%ac%e5%8f%8b%e7%9a%84%e7%b4%a7%e6%80%a5%e9%80%9a%e7%9f%a5/" target="_blank" rel="noopener noreferrer">津津乐道·致苹果中国区听友的紧急通知</a>、<a href="https://sspai.com/post/59878#:~:text=%E5%A6%82%E6%9E%9C%E4%B8%80%E6%A1%A3%E6%96%B0%E8%8A%82%E7%9B%AE%E8%A6%81%E5%9C%A8%E4%B8%AD%E5%9B%BD%E5%8C%BA%E7%9A%84%E8%8B%B9%E6%9E%9C%E6%92%AD%E5%AE%A2%E4%B8%AD%E8%A2%AB%E6%90%9C%E7%B4%A2%E5%88%B0%EF%BC%8C%E8%BF%98%E4%BC%9A%E7%BB%8F%E8%BF%87%E4%B8%80%E9%81%93%E9%A2%9D%E5%A4%96%E7%9A%84%E5%AE%A1%E6%A0%B8%EF%BC%8C%E6%97%B6%E9%97%B4%E5%9C%A8%E5%87%A0%E5%91%A8%E5%88%B0%E4%B8%A4%E4%B8%AA%E6%9C%88%E4%B9%8B%E9%97%B4%E4%B8%8D%E7%AD%89%E3%80%82" target="_blank" rel="noopener noreferrer">少数派·苹果播客过审了却在中国区搜不到？你可能需要再等等</a>），但我依然很喜欢这样的表述。</p>
<p>爱听《字谈字畅》的另一个原因是我觉得字体排印恰好站在理工与人文的交叉点上，对技术如何映照现实的探讨很能满足我的好奇心。</p>
<p>2019 年机缘巧合之下参加了 The Type 在广州举办的《平面之道》线下放映，有幸蹭到了 The Type 小伙伴们的合影：</p>
<p><img class="tw-inline" loading="lazy" src=https://image.assets.xuchunqiu.com/img/2023/09/FSIJYK.png   alt="跟 The Type 小伙伴们的合影"  ></p>
<h2 id="每期都要军备竞赛的节目" class="headerLink">
    <a href="#%e6%af%8f%e6%9c%9f%e9%83%bd%e8%a6%81%e5%86%9b%e5%a4%87%e7%ab%9e%e8%b5%9b%e7%9a%84%e8%8a%82%e7%9b%ae" class="header-mark"></a>每期都要「军备竞赛」的节目</h2><p>《随机波动 StochasticVolatility》（<a href="https://www.stovol.club/rss" target="_blank" rel="noopener noreferrer">RSS</a>，<a href="https://podcasts.apple.com/hk/podcast/%E9%9A%8F%E6%9C%BA%E6%B3%A2%E5%8A%A8stochasticvolatility/id1504681387" target="_blank" rel="noopener noreferrer">Apple Podcast</a>，上辈子叫《剩余价值 SurplusValue》）是一档由张之琪、傅适野、黄月三位媒体人主持的节目，探讨社会现实与文化生活。「军备竞赛」是她们的原话，指三人在录节目前都要做好满满的笔记。我会形容她们很擅长通过处理那些没有答案的问题来给人力量，例如《剩余价值 SurplusValue》的最后一期《瘟疫、语言和具体的人：与历史学家罗新的聊天》。她们的 Newsletter 也写得真诚亲切，温暖人心。</p>
<h2 id="其它媒体从业者的节目" class="headerLink">
    <a href="#%e5%85%b6%e5%ae%83%e5%aa%92%e4%bd%93%e4%bb%8e%e4%b8%9a%e8%80%85%e7%9a%84%e8%8a%82%e7%9b%ae" class="header-mark"></a>其它媒体从业者的节目</h2><p>《新闻实验室》（<a href="https://feed.xyzfm.space/xxkgbvrglujv" target="_blank" rel="noopener noreferrer">RSS</a>，<a href="https://podcasts.apple.com/hk/podcast/%E6%96%B0%E9%97%BB%E5%AE%9E%E9%AA%8C%E5%AE%A4/id1579475103" target="_blank" rel="noopener noreferrer">Apple Podcast</a>）、《端開麥》（<a href="https://podcasts.apple.com/us/podcast/%E7%AB%AF%E9%96%8B%E9%BA%A5/id1572879315" target="_blank" rel="noopener noreferrer">Apple Podcast</a>）、《〈The Real Story〉By 報導者》（<a href="https://podcasts.apple.com/tw/podcast/the-real-story-by-%E5%A0%B1%E5%B0%8E%E8%80%85/id1525816185" target="_blank" rel="noopener noreferrer">Apple Podcast</a>）。</p>
]]></description></item><item><title>近况更新·工作三个月之后</title><link>https://xuchunqiu.com/a-little-update-about-myself/</link><pubDate>Sun, 13 Nov 2022 07:22:59 +0000</pubDate><author><name>xuchunqiu</name></author><guid>https://xuchunqiu.com/a-little-update-about-myself/</guid><description><![CDATA[<p>这个博客之前放的都是之前在 notion 上记录的一些笔记，因为大师兄跟我讲说有一个技术博客对面试很加分，但其实面试的时候没有一个面试官跟我聊博客内容啊……总之现在也上班三个月了，是时候来水一篇生活记录了。</p>
<h2 id="工作" class="headerLink">
    <a href="#%e5%b7%a5%e4%bd%9c" class="header-mark"></a>工作</h2><p>我入职的是广州黄埔区的一家生物初创公司的算法岗，入职两三天后赶上公司的开业典礼😂（其实公司是去年成立的，只是因为投资人的时间安排才拖到这个时间开）。工作时间的话是周一～周五早上 8:30 上班，中午 11:30 下班；下午 13:00 上班，晚上 18:00 下班。住的地方步行到公司需要接近 30 分钟，以前会骑车上下班（12 分钟），但后来想多点运动所以这两周基本都是步行了，上下班步行 + 中午饭后散步差不多就能满足手表上 760 大卡的活动量
。</p>
<p>工作内容简单说就是用公司产出的数据训练预测模型。我们组的工作强度完全取决于上游给我们数据的速度，目前暂时是不加班的状态。但每天对着电脑 8 小时依然会让下班回家后眼睛特别累，所以午饭后我一般不午睡而是散步顺便放松
一下眼睛。</p>
<h2 id="生活" class="headerLink">
    <a href="#%e7%94%9f%e6%b4%bb" class="header-mark"></a>生活</h2><p>说起来是在广州但黄埔区这地方如果坐公共交通工具大概要一个小时多，基本是和以前从学校到市区的差不多的时间，加上我是一个不喜欢逛街的人，所以平时几乎不去市区。周末的休闲活动就是到处骑车。广州的公路骑行环境真是有够糟糕的，几乎见不到单独的非机动车道，每次电动车、自行车都需要跟行人争路，在加上黄埔区这地方山多坡陡，骑起来实在不算享受。但不骑车我就失掉了唯一的周末运动量，所以还是在第一个月出粮后网上买了一辆硬尾山地车。</p>
<p>网上买车确实比线下门店更有性价比，但小问题还是挺多的比如蹭碟、变速滑档、坐垫太硬等，坑爹的是我推着新车去找出租屋附近的自行车修理店时老板拒绝了我，说你这个要到专门卖山地车的地方去修……无奈附近没有你说这种地方啊，所以我被迫学会了调蹭碟、调变速，现在已经攒了一个工具箱出来（其实大部分放的是换下来的物件）。</p>
<p>广州用 Strava 的人还挺多的，可惜 GZcycle 俱乐部里面全是公路/Gravel 大佬，均速都 30 km/h 起步，而且团骑起点都离我很远。所以周末我一般就自己规划个 40~60 km 的圈松松腿。上个月咬咬牙买了个和自行车一样贵的运动相机，如果有拍出好看的素材的话，未来在博客里发一下也说不定。</p>
]]></description></item><item><title>远程开发工具 JetBrains Gateway 初体验</title><link>https://xuchunqiu.com/jetbrains-gateway-first-experiences/</link><pubDate>Tue, 08 Mar 2022 01:37:19 +0000</pubDate><author><name>xuchunqiu</name></author><guid>https://xuchunqiu.com/jetbrains-gateway-first-experiences/</guid><description><![CDATA[<p>在去年写完 <a href="https://xuchunqiu.me/jetbrains-projector-first-experiences/" target="_blank" rel="noopener noreferrer">Projector 的体验</a> 之后，我就已经没有再使用过它了，原因如下：</p>
<ul>
<li>必须安装客户端才能使用快捷键</li>
<li>服务端非本机部署时，必须在客户端主机上安装自签证书才能使用复制粘贴功能</li>
<li>因为网络传输不畅而不时遇到画质压缩，就只能等它连接稳定后再继续操作，使用体验不够连贯</li>
</ul>
<p>所以之后我又用回了通过 SSH 来部署代码和调用远程 Python 解释器的方法。去年年底，JetBrains 在其博客上发布了《<a href="https://blog.jetbrains.com/zh-hans/blog/2021/11/29/introducing-remote-development-for-jetbrains-ides/" target="_blank" rel="noopener noreferrer">隆重推出 JetBrains IDE 的远程开发</a>》一文介绍了 <a href="https://www.jetbrains.com/zh-cn/remote-development/gateway/" target="_blank" rel="noopener noreferrer">Gateway</a> 这一全新的远程开发工具。最近我终于有时间来安装体验一下 Gateway，本文就是对这一过程的简单回顾。</p>
<h2 id="0x00-前言" class="headerLink">
    <a href="#0x00-%e5%89%8d%e8%a8%80" class="header-mark"></a>0x00 前言</h2><p>在开始之前必须强调的是，与 Projector 可以部署社区版 IDE 不同，要想通过 Gateway 连接到远程 IDE 则必须有对应的 IDE 订阅。我是通过学生 edu 邮箱获得的 JetBrains 全家桶订阅。</p>
<p>更多关于 Gateway 的常见问题可以参阅官方博文：《<a href="https://blog.jetbrains.com/zh-hans/blog/2021/12/03/dive-into-jetbrains-gateway/#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E7%AD%94" target="_blank" rel="noopener noreferrer">深入了解 JetBrains Gateway</a>》</p>
<h2 id="0x01-下载与安装" class="headerLink">
    <a href="#0x01-%e4%b8%8b%e8%bd%bd%e4%b8%8e%e5%ae%89%e8%a3%85" class="header-mark"></a>0x01 下载与安装</h2><p>支持的操作系统：</p>
<ul>
<li>服务端：Linux（<a href="https://blog.jetbrains.com/zh-hans/blog/2021/12/03/dive-into-jetbrains-gateway/#:~:text=%E6%88%91%E4%BB%AC%E5%B0%86%E5%9C%A8%E6%9C%AA%E6%9D%A5%E6%B7%BB%E5%8A%A0%E5%AF%B9%20Windows%20%E5%92%8C%20macOS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%94%AF%E6%8C%81" target="_blank" rel="noopener noreferrer">未来会加入 Windows 和 macOS 的支持</a>）</li>
<li>客户端：Linux、Windows、macOS（intel）、macOS（Apple Silicon）</li>
</ul>
<p>与 Projector 不同，Gateway 服务端的安装完全通过客户端完成：<a href="https://www.jetbrains.com/zh-cn/remote-development/gateway/" target="_blank" rel="noopener noreferrer">下载地址</a></p>
<p>目前下载到的应该都 <strong><ruby>抢先体验计划<rt>Early Access Programs</rt></ruby></strong> 的版本，截止本文写就时最新的版本是 <code>2022.1 Beta (221.5080.102)</code>，安装好后的主界面如下；</p>
<figure><img src="https://image.assets.xuchunqiu.com/img/2023/09/4Osjk5.png">
</figure>

<p>共有 SSH、JebBrains Space 和 共享链接 三种启动 Gateway 客户端的方式。区别如下：</p>
<ul>
<li>SSH：只要提供远程 Linux 主机的 SSH 连接信息即可，也是本文使用的方式</li>
<li>JetBrains Space：团队开发协作平台，有提供 <a href="https://www.jetbrains.com/space/buy/" target="_blank" rel="noopener noreferrer">基础的免费方案</a></li>
<li>Code With Me 链接 / Gateway 链接：前者是用于结对编程的 IDE 插件，同样有 <a href="https://www.jetbrains.com/zh-cn/code-with-me/buy/#personal" target="_blank" rel="noopener noreferrer">基础的免费方案</a>；后者的分享链接暂时还没有暴露出来，只有在连接到已有环境失败时才会显示出来</li>
</ul>
<p>接下来就选择 SSH，提供远程 Linux 主机的连接信息：</p>
<figure><img src="https://image.assets.xuchunqiu.com/img/2023/09/dccPNb.png">
</figure>

<p>成功后就可以选择需要在远程主机上安装哪个 IDE 服务端（在 Gateway 中被称为 Backend）。当前有 IDEA、CLion、GoLand、PhpStorm、PyCharm、Rider、RubyMine 和 WebStorm 可选（EAP 的 Gateway 看到的 IDE 也都是 <strong><ruby>EAP<rt>Early Access Programs</rt></ruby></strong> 或 <strong><ruby>RC<rt>Release Candidate</rt></ruby></strong> 版），但都不提供社区版的选项：</p>
<figure><img src="https://image.assets.xuchunqiu.com/img/2023/09/J7Xm4B.png">
</figure>

<p>默认是直接从互联网下载 IDE Backend 安装到远程主机的 <code>~/. cache/JetBrains/RemoteDev/dist</code>，也可以手动上传安装包和指定安装路径：</p>
<figure><img src="https://image.assets.xuchunqiu.com/img/2023/09/ULOAnF.png">
</figure>

<p>等待下载和安装过程完成，就会在本机自动打开 Gateway Client 了，与正常的 IDE 稍有区别的是多了一些连接状态的显示。整体上 Gateway 服务端的安装实在是比 Projector 省心太多。</p>
<figure><img src="https://image.assets.xuchunqiu.com/img/2023/09/UarbpT.png">
</figure>

<h2 id="0x02-gateway-的使用感受" class="headerLink">
    <a href="#0x02-gateway-%e7%9a%84%e4%bd%bf%e7%94%a8%e6%84%9f%e5%8f%97" class="header-mark"></a>0x02 Gateway 的使用感受</h2><h3 id="优点" class="headerLink">
    <a href="#%e4%bc%98%e7%82%b9" class="header-mark"></a>优点</h3><ol>
<li>比起在 <code>Settings</code>-<code>Tools</code>-<code>SSH Configurations</code> 添加 SSH 配置的远程开发方式，Gateway 不需要手动同步本地和远程代码（因为它的代码只保存在远程）、配置远程解释器。</li>
<li>比起 Projector 或是 VNC 方案，Gateway 画面永远不会糊。</li>
<li>剪贴板共享功能开箱即用。</li>
<li>支持将远程主机端口映射到本地。这个主要是因为我的远程主机是一个 Docker 环境，在创建好后就不能添加端口映射了，但 Gateway Client 的 <code>Settings</code>-<code>Tools</code>- <code>Port Forwarding</code> 里可以很方便地添加端口映射：
<figure><img src="https://image.assets.xuchunqiu.com/img/2023/09/MVZl3P.png">
   </figure>
</li>
</ol>
<h3 id="缺点" class="headerLink">
    <a href="#%e7%bc%ba%e7%82%b9" class="header-mark"></a>缺点</h3><ol>
<li>有时需要复制两遍。当在 Gateway Client 中打开的文本内容先复制再粘贴时，有机率粘上的是之前一次复制的内容，不过只要 Gateway Client 再复制一次就没问题了。</li>
<li>没有考虑非英文输入的情况。这篇博文就是通过 Gateway 完成的，在使用拼音输入中文的过程中，我注意到当打字速度过快时就会有前后「吃字」的问题。这可能是因为 Gateway 对于输入的每个字母都是立即传输的，但当汉字上屏后光标位置的瞬间跳动没有被正确处理。</li>
<li>上传文件功能缺失。拖动本地文件到 Gateway Client 的文件树上并不会有任何反应，如果这时能自动通过 SFTP 协议上传就好了。</li>
</ol>
<h2 id="0x03-补充强制结束-ide-backend-的方法" class="headerLink">
    <a href="#0x03-%e8%a1%a5%e5%85%85%e5%bc%ba%e5%88%b6%e7%bb%93%e6%9d%9f-ide-backend-%e7%9a%84%e6%96%b9%e6%b3%95" class="header-mark"></a>0x03 补充：强制结束 IDE Backend 的方法</h2><p>因为目前还处在 EAP 阶段，稳定度还不算太高，有时会遇到 IDE Backend 旧进程卡死新进程启动不起来的窘境，目前 Gateway 也没有提供强制重启之类的功能，只能手动去 kill 相关进程。在 Gateway 的 <strong><ruby>最近 SSH 项目<rt>Recent SSH Projects</rt></ruby></strong> 页面有一个终端图标，点进去执行以下命令：</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-1" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">user@machine:~# ps aux <span class="p">|</span> grep -i pycharm <span class="p">|</span> awk <span class="s1">&#39;{print $2}&#39;</span>
</span></span><span class="line"><span class="cl"><span class="m">738</span>
</span></span><span class="line"><span class="cl"><span class="m">743</span>
</span></span><span class="line"><span class="cl"><span class="m">861</span>
</span></span><span class="line"><span class="cl"><span class="m">876</span>
</span></span><span class="line"><span class="cl"><span class="m">1138</span>
</span></span><span class="line"><span class="cl"><span class="m">2880</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 把以上所有进程号都杀掉</span>
</span></span><span class="line"><span class="cl">user@machine:~# <span class="nb">kill</span> <span class="m">738</span></span></span></code></pre>
</div>
]]></description></item><item><title>JetBrains Projector 使用初体验</title><link>https://xuchunqiu.com/jetbrains-projector-first-experiences/</link><pubDate>Tue, 06 Jul 2021 10:22:06 +0000</pubDate><author><name>xuchunqiu</name></author><guid>https://xuchunqiu.com/jetbrains-projector-first-experiences/</guid><description><![CDATA[<p>Projector 是 JetBrains 新推出的远程开发解决方案。实现上是在远程主机上部署 IDE 服务端然后在本地浏览器中或本地客户端中访问，本文记录了安装步骤和使用体验。</p>
<h2 id="0x00-可能有用的链接" class="headerLink">
    <a href="#0x00-%e5%8f%af%e8%83%bd%e6%9c%89%e7%94%a8%e7%9a%84%e9%93%be%e6%8e%a5" class="header-mark"></a>0x00 可能有用的链接</h2><ol>
<li>官方博客介绍：<a href="https://blog.jetbrains.com/zh-hans/blog/2021/03/25/projector-ide/" target="_blank" rel="noopener noreferrer">使用 Projector 远程访问 IDE</a></li>
<li>官方文档：<a href="https://jetbrains.github.io/projector-client/mkdocs/latest/" target="_blank" rel="noopener noreferrer">Projector documentation</a></li>
<li>安装方式 A（命令行）：<a href="https://github.com/JetBrains/projector-installer" target="_blank" rel="noopener noreferrer">JetBrains/projector-installer</a></li>
<li>安装方式 B（docker）：<a href="https://github.com/JetBrains/projector-docker" target="_blank" rel="noopener noreferrer">JetBrains/projector-docker</a></li>
<li>Win/macOS/Linux 客户端下载：<a href="https://github.com/JetBrains/projector-client/releases/tag/launcher-v1.0.1" target="_blank" rel="noopener noreferrer">releases on JetBrains/projector-client</a></li>
</ol>
<h2 id="0x01-安装步骤" class="headerLink">
    <a href="#0x01-%e5%ae%89%e8%a3%85%e6%ad%a5%e9%aa%a4" class="header-mark"></a>0x01 安装步骤</h2><p>本文是采用上面的安装方式 A 在运行 Ubuntu 18.04 的远程主机上运行，具体步骤直接参考链接 3。命令抄录如下：</p>
<div class="code-block highlight is-closed show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-1" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl"><span class="c1"># install python3</span>
</span></span><span class="line"><span class="cl">user@machine:~# sudo apt install python3 python3-pip -y
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># check pip3 version</span>
</span></span><span class="line"><span class="cl">user@machine:~# pip3 --version
</span></span><span class="line"><span class="cl"><span class="c1"># if pip3 &lt; 19</span>
</span></span><span class="line"><span class="cl">user@machine:~# python3 -m pip install -U pip
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># install other packages</span>
</span></span><span class="line"><span class="cl">user@machine:~# sudo apt install libxext6 libxrender1 libxtst6 libfreetype6 libxi6 less -y
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># install Jetrains Projector</span>
</span></span><span class="line"><span class="cl">user@machine:~# ip3 install projector-installer --user
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># use Projector to install IDE</span>
</span></span><span class="line"><span class="cl">user@machine:~# projector install
</span></span><span class="line"><span class="cl">Checking <span class="k">for</span> updates ... <span class="k">done</span>.
</span></span><span class="line"><span class="cl">Installing IDE in quick mode<span class="p">;</span> <span class="k">for</span> full customization you can rerun this <span class="nb">command</span> with <span class="s2">&#34;--expert&#34;</span> argument or edit this config later via <span class="s2">&#34;projector config edit&#34;</span> command.
</span></span><span class="line"><span class="cl">           1. Idea_Community
</span></span><span class="line"><span class="cl">           2. Idea_Ultimate
</span></span><span class="line"><span class="cl">           3. PyCharm_Community
</span></span><span class="line"><span class="cl">           4. PyCharm_Professional
</span></span><span class="line"><span class="cl">           5. CLion
</span></span><span class="line"><span class="cl">           6. GoLand
</span></span><span class="line"><span class="cl">           7. DataGrip
</span></span><span class="line"><span class="cl">           8. PhpStorm
</span></span><span class="line"><span class="cl">           9. WebStorm
</span></span><span class="line"><span class="cl">          10. RubyMine
</span></span><span class="line"><span class="cl">          11. Rider
</span></span><span class="line"><span class="cl">Choose IDE <span class="nb">type</span> or <span class="m">0</span> to exit: <span class="o">[</span>0-11<span class="o">]</span>: <span class="m">4</span>
</span></span><span class="line"><span class="cl">Do you want to <span class="k">select</span> from Projector-tested IDE only? <span class="o">[</span>y/N<span class="o">]</span>y
</span></span><span class="line"><span class="cl">           1. PyCharm Professional 2019.3.4
</span></span><span class="line"><span class="cl">           2. PyCharm Professional 2020.2
</span></span><span class="line"><span class="cl">           3. PyCharm Professional 2020.3.3
</span></span><span class="line"><span class="cl">Choose IDE number to install or <span class="m">0</span> to exit: <span class="o">[</span>0-3<span class="o">]</span>: <span class="m">3</span>
</span></span><span class="line"><span class="cl">Installing PyCharm Professional 2020.3.3
</span></span><span class="line"><span class="cl">Downloading pycharm-professional-2020.3.3.tar.gz
</span></span><span class="line"><span class="cl"><span class="o">[</span><span class="c1">##------------------------------------------------]    4%  00:04:15</span>
</span></span><span class="line"><span class="cl">Unpacking pycharm-professional-2020.3.3.tar.gz
</span></span><span class="line"><span class="cl"><span class="o">[</span><span class="c1">##################################################]  100%          </span>
</span></span><span class="line"><span class="cl">Configuration name: PyCharm
</span></span><span class="line"><span class="cl">Checking <span class="k">for</span> updates ... <span class="k">done</span>.
</span></span><span class="line"><span class="cl">To access IDE, open in browser 
</span></span><span class="line"><span class="cl">        http://localhost:9999/
</span></span><span class="line"><span class="cl">        http://127.0.0.1:9999/
</span></span><span class="line"><span class="cl">        http://10.106.200.224:9999/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">To see Projector logs in realtime run
</span></span><span class="line"><span class="cl">        tail -f <span class="s2">&#34;/root/.projector/configs/PyCharm/projector.log&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Exit IDE or press Ctrl+C to stop Projector.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># start IDE</span>
</span></span><span class="line"><span class="cl">user@machine:~# projector run</span></span></code></pre>
</div>
<p>其中我遇到的坑主要是需要升级 pip3（&gt;= 19）和 Python（&gt;= 3.6），解决方案见下一章。</p>
<h2 id="0x02-故障排除" class="headerLink">
    <a href="#0x02-%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4" class="header-mark"></a>0x02 故障排除</h2><h3 id="更新完-pip3-后得到-syntaxerror-invalid-syntax" class="headerLink">
    <a href="#%e6%9b%b4%e6%96%b0%e5%ae%8c-pip3-%e5%90%8e%e5%be%97%e5%88%b0-syntaxerror-invalid-syntax" class="header-mark"></a>更新完 pip3 后得到 <code>SyntaxError: invalid syntax</code></h3><p>首先按照链接 3 的教程更新 pip3 到最新版本：</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-2" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl"><span class="c1"># 检查现有 pip3 版本</span>
</span></span><span class="line"><span class="cl">pip3 --version
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 如果版本小于 19 就使用如下命令更新到最新版本</span>
</span></span><span class="line"><span class="cl">python3 -m pip install -U pip</span></span></code></pre>
</div>
<p>再接着执行任何 <code>pip3 install</code> 都会得到如下错误：</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-3" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">sys.stderr.write<span class="o">(</span>f<span class="s2">&#34;ERROR: {exc}&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">                                   ^
</span></span><span class="line"><span class="cl">SyntaxError: invalid syntax</span></span></code></pre>
</div>
<p>这个问题出现的原因是远程主机 Python = 3.5，但 pip 默认更新到最新的 pip 21.0 仅支持 Python 3.6+<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>。我的选择是将 pip 更新到最后支持 Python 3.5 的那一版：</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-4" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">curl -fsSL -o- https://bootstrap.pypa.io/pip/3.5/get-pip.py <span class="p">|</span> python3.5</span></span></code></pre>
</div>
<p>这就为接下来的问题埋下伏笔。现在回想此时正确的做法应是直接更新 Python。</p>
<h3 id="尝试用-pip3-安装-projector-时遇到-error" class="headerLink">
    <a href="#%e5%b0%9d%e8%af%95%e7%94%a8-pip3-%e5%ae%89%e8%a3%85-projector-%e6%97%b6%e9%81%87%e5%88%b0-error" class="header-mark"></a>尝试用 pip3 安装 Projector 时遇到 <code>Error</code></h3><p>在按照链接 3 的教程安装完一系列的依赖后，就可以正式安装 Projector：</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-5" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">pip3 install projector-installer --user
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">ERROR: Could not find a version that satisfies the requirement projector-installer
</span></span><span class="line"><span class="cl">ERROR: No matching distribution found <span class="k">for</span> projector-installer</span></span></code></pre>
</div>
<p>如果遇到以上错误，说明需要升级 Python 版本<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>。教程见<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>，摘录如下：</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-6" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">sudo add-apt-repository ppa:deadsnakes/ppa
</span></span><span class="line"><span class="cl">sudo apt-get update
</span></span><span class="line"><span class="cl">sudo apt-get install python3.8
</span></span><span class="line"><span class="cl">sudo apt install python3.8-distutils
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 更新软链接</span>
</span></span><span class="line"><span class="cl">sudo rm /usr/bin/python3
</span></span><span class="line"><span class="cl">sudo ln -s python3.8 /usr/bin/python3</span></span></code></pre>
</div>
<h3 id="projector-命令无效" class="headerLink">
    <a href="#projector-%e5%91%bd%e4%bb%a4%e6%97%a0%e6%95%88" class="header-mark"></a><code>projector</code> 命令无效</h3><p>这个问题在链接 3 的 FAQ 部分已经进行了说明<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>。是出在 <code>projector</code> 的安装路径 <code>~/.local/bin</code> 没有加入到环境变量 <code>$PATH</code> 中，直接的 workaround 是使用完整路径启动 <code>projector</code>：</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-7" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">~/.local/bin/projector</span></span></code></pre>
</div>
<p>不过一劳永逸的方法将添加环境变量 <code>$PATH</code> 的命令写入到 <code>~/.profile</code>：</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-8" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;export PATH=</span><span class="si">${</span><span class="nv">PATH</span><span class="si">}</span><span class="s2">:~/.local/bin&#34;</span> &gt;&gt; ~/.profile
</span></span><span class="line"><span class="cl">. ~/.profile</span></span></code></pre>
</div>
<h3 id="projector-run-尝试启动-ide-后很快出现报错日志" class="headerLink">
    <a href="#projector-run-%e5%b0%9d%e8%af%95%e5%90%af%e5%8a%a8-ide-%e5%90%8e%e5%be%88%e5%bf%ab%e5%87%ba%e7%8e%b0%e6%8a%a5%e9%94%99%e6%97%a5%e5%bf%97" class="header-mark"></a><code>projector run</code> 尝试启动 IDE 后很快出现报错日志</h3><p>在初次使用 <code>projector install</code> 完成 IDE 安装后会自动启动 IDE，使用完毕后使用 <code>Ctrl</code> + <code>c</code> 退出。之后想再次启动已经安装好的 IDE 就需要使用 <code>projector run</code> 命令，可能遇到在输出完 IDE 的访问链接后立刻打印报错日志的情况：</p>
<div class="code-block highlight is-closed show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-9" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">Checking <span class="k">for</span> updates ... <span class="k">done</span>.
</span></span><span class="line"><span class="cl">To access IDE, open in browser 
</span></span><span class="line"><span class="cl">        http://localhost:9999/
</span></span><span class="line"><span class="cl">        http://127.0.0.1:9999/
</span></span><span class="line"><span class="cl">        http://10.106.200.224:9999/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">To see Projector logs in realtime run
</span></span><span class="line"><span class="cl">        tail -f <span class="s2">&#34;/root/.projector/configs/PyCharm/projector.log&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Exit IDE or press Ctrl+C to stop Projector.
</span></span><span class="line"><span class="cl">--------------------- Projector log session start. Installer version: 1.1.1 Run config: PyCharm - 2021-04-07 08:02:35.367158
</span></span><span class="line"><span class="cl">OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> :: IdeState :: Starting attempts to attach IJ injector agent
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> :: IdeState :: Starting attempts to initialize IDEA: fix AA and disable smooth scrolling <span class="o">(</span>at start<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>INFO<span class="o">]</span> :: ProjectorServer :: ProjectorServer is starting on host 0.0.0.0/0.0.0.0 and port <span class="m">9999</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> :: IdeState :: Starting attempts to Getting IDE colors
</span></span><span class="line"><span class="cl"><span class="o">[</span>INFO<span class="o">]</span> :: ProjectorServer :: WebSocket SSL is disabled
</span></span><span class="line"><span class="cl"><span class="o">[</span>INFO<span class="o">]</span> :: ProjectorServer :: Server started on host 0.0.0.0/0.0.0.0 and port <span class="m">9999</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> :: ProjectorServer :: Daemon thread starts
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> :: IdeState :: Starting attempts to search <span class="k">for</span> editors
</span></span><span class="line"><span class="cl">IDE has not been initialized yet
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> :: ProjectorServer :: Daemon thread finishes</span></span></code></pre>
</div>
<p>这个问题可能是之前的 IDE 没有成功退出导致的<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>（虽然 log 看起来并非如此），杀掉旧进程就可以了：</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-10" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">root@machine:~# ps aux <span class="p">|</span> grep -i pycharm
</span></span><span class="line"><span class="cl">root       <span class="m">966</span> 36.5  0.2 <span class="m">8513048</span> <span class="m">286408</span> pts/0  Sl   07:38   9:51 /root/.projector/apps/pycharm-2020.3.3/jbr/bin/java -classpath /r
</span></span><span class="line"><span class="cl">root      <span class="m">2102</span>  0.0  0.0  <span class="m">13216</span>  <span class="m">1064</span> pts/0    S+   08:05   0:00 grep --color<span class="o">=</span>auto -i pycharm
</span></span><span class="line"><span class="cl">root@machine:~# <span class="nb">kill</span> <span class="m">966</span>
</span></span><span class="line"><span class="cl">root@machine:~# ps aux <span class="p">|</span> grep -i pycharm
</span></span><span class="line"><span class="cl">root      <span class="m">2113</span>  0.0  0.0  <span class="m">13216</span>  <span class="m">1044</span> pts/0    S+   08:06   0:00 grep --color<span class="o">=</span>auto -i pycharm
</span></span><span class="line"><span class="cl">root@machine:~# projector run</span></span></code></pre>
</div>
<h2 id="0x03-存在的问题" class="headerLink">
    <a href="#0x03-%e5%ad%98%e5%9c%a8%e7%9a%84%e9%97%ae%e9%a2%98" class="header-mark"></a>0x03 存在的问题</h2><p>此处仅列举我在实际体验中觉得很糟心的地方，其它问题可以在链接 2 的 Known problems<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> 部分查看。</p>
<h3 id="快捷键冲突和剪贴板共享" class="headerLink">
    <a href="#%e5%bf%ab%e6%8d%b7%e9%94%ae%e5%86%b2%e7%aa%81%e5%92%8c%e5%89%aa%e8%b4%b4%e6%9d%bf%e5%85%b1%e4%ba%ab" class="header-mark"></a>快捷键冲突和剪贴板共享</h3><p>Projector 的服务端是安装在远程 Linux 环境中，然后通过本地浏览器或下载链接 5 的客户端使用（这里需要提一句的是 JetBrains 的 IDE 插件市场中也上架了 <code>Projector</code><sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>，但这个是把本机 IDE 当服务端来用的）。</p>
<p>当通过浏览器访问 Projector 时，IDE 的快捷键会与浏览器本身的快捷键冲突，例如选择代码块的快捷键 <code>Ctrl</code> + <code>w</code><sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>在 Chromium/Firefox/Safari 中是关闭当前标签页。所以为了使用快捷键还有复制粘贴功能，最好还是下载独立的 Projector 客户端。</p>
<h3 id="启用自签证书的-https" class="headerLink">
    <a href="#%e5%90%af%e7%94%a8%e8%87%aa%e7%ad%be%e8%af%81%e4%b9%a6%e7%9a%84-https" class="header-mark"></a>启用自签证书的 HTTPS</h3><p>本文初次写成于 2021 年 3 月，但当 4 月我在另一台机器上部署完 Projector 后发现即使用 Projector 客户端去连也不能将其中的文本复制粘贴到其它程序中。在 JetBrains 的 bug 跟踪系统 YouTrack 上有人<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup>解释是新版本的服务端后只有在 localhost 部署或启用 HTTPS 后才能跨程序复制粘贴，同时给出了对于 <a href="https://jetbrains.github.io/projector-client/mkdocs/latest/ij_user_guide/accessing/#incomplete-clipboard-synchronization" target="_blank" rel="noopener noreferrer">不完整剪贴板同步实现过程的官方文档</a>。</p>
<p>就个人+内网使用来说，自签 HTTPS 证书是比较简单的方式。此处给出自签证书的启用方法，至于使用可信任证书颁发机构给域名颁发的证书，可以参考链接 3 自述文件的 FAQ 部分<sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup>。</p>
<p>在命令行中交互式启动自签 HTTPS 证书：</p>
<div class="code-block highlight is-closed show-line-numbers  tw-group tw-my-2">
  <div class="
    code-block-title 
    
    tw-flex 
    tw-flex-row 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        tw-select-none 
        tw-mx-2 
        tw-block
        group-[.is-open]:tw-rotate-90
        tw-transition-[transform] 
        tw-duration-500 
        tw-ease-in-out
        print:!tw-hidden"
      disabled
      aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></button>

    <div class="code-block-title-bar tw-w-full">
      <p class="tw-select-none !tw-my-1">bash</p>
    </div>
    <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-11" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl"><span class="c1"># 所有可用命令</span>
</span></span><span class="line"><span class="cl">projector config <span class="o">(</span>--help<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 列出所有配置的名称</span>
</span></span><span class="line"><span class="cl">projector config list
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 展示选定配置的详情</span>
</span></span><span class="line"><span class="cl">projector config show
</span></span><span class="line"><span class="cl"><span class="c1"># 这里的信息要比 ~/.projector/configs/PyCharm/config.ini 更详细，</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 也有一个布尔的 &#34;Projector uses secure config (https/wss)= 0&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 交互式修改配置</span>
</span></span><span class="line"><span class="cl">projector config edit
</span></span><span class="line"><span class="cl"><span class="c1"># 只需给 Use secure connection? 一个 y 的回答</span></span></span></code></pre>
</div>
<p>修改完毕后再 <code>projector run</code> 就能看到终端中提示要从 <code>~/.projector/ssl/ca.crt</code> 安装证书，有意思的是这个证书下载下来是 0KB，无法安装。我最后是通过直接在 Chrome 访问 <code>https://&lt;projector-server-address&gt;:&lt;projector-port&gt;</code> -&gt; 导出证书 -&gt; 文件管理器安装。</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://stackoverflow.com/questions/65869296/installing-pip-is-not-working-in-python-3-6" target="_blank" rel="noopener noreferrer">https://stackoverflow.com/questions/65869296/installing-pip-is-not-working-in-python-3-6</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://youtrack.jetbrains.com/issue/PRJ-302" target="_blank" rel="noopener noreferrer">https://youtrack.jetbrains.com/issue/PRJ-302</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://stackoverflow.com/questions/58591889/how-i-can-upgrade-my-ubuntu-python3-7-to-python3-8-latest-version" target="_blank" rel="noopener noreferrer">https://stackoverflow.com/questions/58591889/how-i-can-upgrade-my-ubuntu-python3-7-to-python3-8-latest-version</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="https://github.com/JetBrains/projector-installer#projector-command-is-unavailable" target="_blank" rel="noopener noreferrer">https://github.com/JetBrains/projector-installer#projector-command-is-unavailable</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="https://stackoverflow.com/questions/61236544/clion-pycharm-phpstorm-intellij-wont-start-says-ide-has-not-been-initialized/61237140#61237140" target="_blank" rel="noopener noreferrer">https://stackoverflow.com/questions/61236544/clion-pycharm-phpstorm-intellij-wont-start-says-ide-has-not-been-initialized/61237140#61237140</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p><a href="https://jetbrains.github.io/projector-client/mkdocs/latest/ij_user_guide/jetbrains/#known-problems" target="_blank" rel="noopener noreferrer">https://jetbrains.github.io/projector-client/mkdocs/latest/ij_user_guide/jetbrains/#known-problems</a>&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p><a href="https://plugins.jetbrains.com/plugin/16015-projector" target="_blank" rel="noopener noreferrer">https://plugins.jetbrains.com/plugin/16015-projector</a>&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p><a href="https://www.jetbrains.com/help/idea/working-with-source-code.html#editor_code_selection" target="_blank" rel="noopener noreferrer">https://www.jetbrains.com/help/idea/working-with-source-code.html#editor_code_selection</a>&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p><a href="https://youtrack.jetbrains.com/issue/PRJ-426#focus=Comments-27-4816576.0-0" target="_blank" rel="noopener noreferrer">https://youtrack.jetbrains.com/issue/PRJ-426#focus=Comments-27-4816576.0-0</a>&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p><a href="https://github.com/JetBrains/projector-installer#secure-connection" target="_blank" rel="noopener noreferrer">https://github.com/JetBrains/projector-installer#secure-connection</a>&#160;<a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></description></item></channel></rss>