<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>華乃のスペース</title><description>二十二歳、学生です。</description><link>https://www.kanoverse.com</link><language>zh-CN</language><item><title>2025年度总结</title><link>https://www.kanoverse.com/post/summary-2025</link><guid isPermaLink="true">https://www.kanoverse.com/post/summary-2025</guid><description>郁郁鼠鼠的 2025 年度总结</description><pubDate>Sat, 17 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;2025对我来说应该是我大学阶段最为重要的一年，用几个关键词总结就是：求变、开悟、摇滚&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;备考&lt;/h1&gt;
&lt;p&gt;作为一个专科鼠鼠🥲，最为重要的就是提升一下学历&lt;/p&gt;
&lt;p&gt;年初一直在准备专升本，虽然最后也考了一个还算不错的成绩，但是没有啥喜悦（这场考试真的很简单），最多也就是节省了几万学费&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;还是说下这期间有意思的事情吧（&lt;del&gt;在备考期间沉迷制作催眠APP&lt;/del&gt;）&lt;/p&gt;
&lt;p&gt;在不经意间接触了「催眠术」，找了几本书学习了一下，一本相当于科普和工具书《催眠术：原理、方法与应用》，另外一本相当于一个故事会《前世今生：生命轮回的启示》，这本书主要讲作者使用催眠术治疗焦虑病人凯瑟琳发生的神奇的故事&lt;/p&gt;
&lt;p&gt;催眠可以引出另外一个概念，也就是「冥想」，我相信大多数人都听过冥想，这里摘抄微信读书《左手催眠术右手冥想术大全集》某位用户的评论&lt;/p&gt;
&lt;blockquote class=&quot;notion-quote&quot;&gt;冥想与催眠是一对反义词，前者是有意识行为占主导地位（高频率脑电波时），拼命抑制无意识行为，催眠则完全相反。催眠与冥想涉及到一个核心概念:暗示，既感官信息不经由意识（逻辑与评判）直接作用你的大脑对你下达行为指令。全暗示就是催眠术，无暗示就是冥想术，当然这是理想状态。冥想是主动的注意集中（注意于一个低刺激性的事物上，主动控制避免被注意物之外的任何事物吸引，包括自己的思绪和联想，既避免被吸引），催眠则是被动的注意集中（集中于高刺激性事物，完全信任，完全被吸引，最终不做逻辑判断与价值评判）&lt;/blockquote&gt;
&lt;p&gt;催眠的效果因人而异，用书中的话来说就是「催眠感受性」，感受性越高的人越容易被催眠、越容易进入催眠状态。我自己体验了一下，我应该是感受性较低的一类，并且即使经过较长时间的引导脑子还是不能完全放空，或者说太长时间了注意力不够，放空后又会清醒&lt;/p&gt;
&lt;p&gt;总的来说，催眠根据引导的不同可以实现不同的效果，我之前尝试的是入眠的引导&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;在我接触「催眠术」后，我还发现了清醒梦（Lucid dream）这个概念&lt;/p&gt;
&lt;blockquote class=&quot;notion-quote&quot;&gt;在清醒梦的状态下，做梦者可以在梦中拥有清醒时的思考和记忆能力，部分人甚至可以使自己的梦境中的感觉真实得跟现实世界无异，但却知道自己身处梦中，清醒梦者亦能记忆大部分各个不同清醒梦之世界与情境。&lt;/blockquote&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb262fdda-12af-4bee-86f5-4e20348620d8%2Fimage.png?table=block&amp;amp;id=74bcdc04-0892-8220-a658-81ef92337f86&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 2.622642;&quot; data-aspect-ratio=&quot;2.622642&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb262fdda-12af-4bee-86f5-4e20348620d8%2Fimage.png?table=block&amp;amp;id=74bcdc04-0892-8220-a658-81ef92337f86&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;上面是我唯一一次不经意间的 lucid dream 成功案例，虽然只有短短几秒，但是我清醒知道自己在做梦，并且立刻控制自己在梦里面飞起来了，然后后背发凉就清醒了&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;目前来看，如果能通过催眠引导清醒梦的产生，那么就很可能实现前世今生中凯瑟琳的效果&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;摇滚&lt;/h1&gt;
&lt;p&gt;今年最喜欢的番应该是《&lt;strong&gt;摇滚乃是淑女的爱好&lt;/strong&gt;》，让我解锁了数字摇滚🎸&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F83d6a06f-4a53-4e6f-80fe-f22451b2ebe7%2Fimage.png?table=block&amp;amp;id=907cdc04-0892-8267-abb7-81e91525b64f&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 3.491848;&quot; data-aspect-ratio=&quot;3.491848&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F83d6a06f-4a53-4e6f-80fe-f22451b2ebe7%2Fimage.png?table=block&amp;amp;id=907cdc04-0892-8267-abb7-81e91525b64f&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;年度歌单也变成摇滚的样子了&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Ffd8a431c-9598-4772-b42b-db8d8c8a3f0c%2Fimage.png?table=block&amp;amp;id=824cdc04-0892-826a-b867-01141dfd24ed&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.308725;&quot; data-aspect-ratio=&quot;1.308725&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Ffd8a431c-9598-4772-b42b-db8d8c8a3f0c%2Fimage.png?table=block&amp;amp;id=824cdc04-0892-826a-b867-01141dfd24ed&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;自己也买了一把 Tele 和 &lt;strong&gt;Spark MINI&lt;/strong&gt; 音响（吃灰了）&lt;/p&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F5a4f41fb-9a29-418b-add4-d96332b4127a%2Fc018fd3e30935b71733a185a36ffb36e.jpg?table=block&amp;amp;id=0e4cdc04-0892-82dd-a06a-0118a89bcabb&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F5a4f41fb-9a29-418b-add4-d96332b4127a%2Fc018fd3e30935b71733a185a36ffb36e.jpg?table=block&amp;amp;id=0e4cdc04-0892-82dd-a06a-0118a89bcabb&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F53d5be69-ea24-4e49-b358-4d360bc4869e%2F7cec7e8319b5e4aafe4b01c9a7a69c51.jpg?table=block&amp;amp;id=d64cdc04-0892-83f5-b5dc-811f782a17bb&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F53d5be69-ea24-4e49-b358-4d360bc4869e%2F7cec7e8319b5e4aafe4b01c9a7a69c51.jpg?table=block&amp;amp;id=d64cdc04-0892-83f5-b5dc-811f782a17bb&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;h1 id=&quot;lab&quot;&gt;Lab&lt;/h1&gt;
&lt;p&gt;今年最大的求变就是开始做起了 Lab（&lt;del&gt;大学前一坤年基本是废物&lt;/del&gt;）&lt;/p&gt;
&lt;p&gt;被 &lt;a href=&quot;https://xxxuuu.me/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;x³u³&lt;/a&gt; 邀请参加了做 rCore 开启了做 Lab 的生活，后面陆续完成了 6.5840、CMU 15445 和 CSAPP 前面的一些实验，也算是对操作系统、分布式系统、数据库有了更深的理解&lt;/p&gt;
&lt;p&gt;现在确实是一个好时代，有了 LLM 后，自学的门槛被削了一大节，在做 rCore 前我没有学过操作系统，全部都是通过 Deepseek 给我补全的知识&lt;/p&gt;
&lt;p&gt;做 Lab 是痛苦的，但是也挺有意思，做完了也很很有成就感。未来我想做做开源，给开源项目修修 Bug，多给自己堆多几个 contributor 身份&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;语言学习&lt;/h1&gt;
&lt;p&gt;年初开始用 Anki 背数学公式，暑假的时候捡起了前年被我遗弃的日语卡组，然后也开始了墨墨背单词，也算是连续打卡半年日语/英语单词，这里立下一个 2026年 全勤的 flag&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F9320d74e-1bb1-4997-86ba-f3e8db0b2054%2Fimage.png?table=block&amp;amp;id=ddecdc04-0892-8341-8bdd-811dcfdede4d&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 6.425743;&quot; data-aspect-ratio=&quot;6.425743&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F9320d74e-1bb1-4997-86ba-f3e8db0b2054%2Fimage.png?table=block&amp;amp;id=ddecdc04-0892-8341-8bdd-811dcfdede4d&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;语言学习这块，2026我想要实践「二语习得理论」，实践这个理论肯定需要大量的实践与试错，目前也是 0 进度&lt;/p&gt;
&lt;p&gt;语言学习是为了后面更大的目标 😤&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;秋招&lt;/h1&gt;
&lt;p&gt;9月开始准备27届秋招，持续补基础，看八股中，算法只会刷 Top100、CodeTop，一遇到思维题或者变形题就做不出来，十分抑郁，感觉自己的智力有点问题 😭&lt;/p&gt;
&lt;p&gt;希望能秋招能找到 16k 965 的工作吧，感觉有点奢望了&lt;/p&gt;
&lt;p&gt;16k 也是想为了后面的计划多多攒钱，哎，但愿吧，大概率是个失败的秋招，没有身边几个友人这么有实力&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;没啥说的，就是有点郁郁&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;</content:encoded><category>年度总结</category></item><item><title>OpenWrt 校园网共享</title><link>https://www.kanoverse.com/post/openwrt-campus-network-sharing</link><guid isPermaLink="true">https://www.kanoverse.com/post/openwrt-campus-network-sharing</guid><description>本篇文章介绍了如何在校园网环境下突破「单账号仅限两台设备」的限制，并实现多账号带宽叠加。作者通过分析锐捷 Web Portal 认证流程，移植登录算法至 OpenWrt，利用 </description><pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;&quot;&gt;背景&lt;/h1&gt;
&lt;p&gt;入学新学校，校园网 49元/月 100M ，只能够同时登录两台设备，于是着手破解。&lt;/p&gt;
&lt;p&gt;破解后当普通 Wi-Fi 连接即可，无设备数量限制，同时还可以做到多账号网速叠加。&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fff2d7907-ccff-4bef-a26a-546372eb3bde%2Fimage.png?table=block&amp;amp;id=1fbcdc04-0892-837d-a5a2-81a5401936ef&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.855538;&quot; data-aspect-ratio=&quot;1.855538&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fff2d7907-ccff-4bef-a26a-546372eb3bde%2Fimage.png?table=block&amp;amp;id=1fbcdc04-0892-837d-a5a2-81a5401936ef&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;h1 id=&quot;&quot;&gt;思路&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;逆向校园网 Web 登录算法&lt;/li&gt;
&lt;li&gt;将登录算法移植到 OpenWrt 中&lt;/li&gt;
&lt;li&gt;使用 Macvlan 和 MultiWAN 插件实现多账号登录&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&quot;&quot;&gt;登录算法逆向&lt;/h1&gt;
&lt;p&gt;连接校园网，随便输入一个网址就可以跳转到登录界面（这是通过 DNS劫持 实现的）。&lt;/p&gt;
&lt;p&gt;通过观察代码发现，这是锐捷网络的 Web 认证，便在网络上找到了相同认证系统的登录算法实现，所以这一步非常的轻松，基本没有自己进行逆向分析。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;figure class=&quot;notion-bookmark&quot;&gt;
      &lt;a href=&quot;https://www.cnblogs.com/0x000001/p/18766279&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
        &lt;div class=&quot;notion-bookmark-cover&quot;&gt;&lt;img src=&quot;https://img2023.cnblogs.com/blog/2433451/202503/2433451-20250311220850468-60945062.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;
        &lt;div class=&quot;notion-bookmark-info&quot;&gt;
          &lt;div class=&quot;notion-bookmark-title&quot;&gt;校园网认证流程分析及自动认证脚本 - Mars-Luke - 博客园&lt;/div&gt;
          &lt;div class=&quot;notion-bookmark-description&quot;&gt;校园网认证流程分析及自动认证脚本 很久之前在处理Linux终端环境下校园网认证登录时所做的工作，理论上适用于所有基于锐捷网络的认证系统 分析过程 未进行校园网认证时curl -v任意网站得到 可见会重定向到认证网址并且附带一些参数 浏览器访问该网址并打开网络日志，输入自己的账号密码测试登录 找到登录&lt;/div&gt;
          &lt;div class=&quot;notion-bookmark-url&quot;&gt;cnblogs.com&lt;/div&gt;
        &lt;/div&gt;
      &lt;/a&gt;
    &lt;/figure&gt;
&lt;h1 id=&quot;openwrt&quot;&gt;OpenWrt&lt;/h1&gt;
&lt;h2 id=&quot;&quot;&gt;硬路由的选择&lt;/h2&gt;
&lt;p&gt;因为要使用 OpenWRT 系统，所以路由器需要选择能够刷机的，且自带 Wi-Fi 的硬路由。&lt;/p&gt;
&lt;p&gt;这里选择的是 &lt;strong&gt;H3C NX30 Pro&lt;/strong&gt;，二手售价约100元，配置如下：&lt;/p&gt;
&lt;div class=&quot;notion-table-wrapper&quot;&gt;&lt;table class=&quot;notion-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;型号&lt;/th&gt;&lt;td&gt;H3C NX30 Pro&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;CPU&lt;/th&gt;&lt;td&gt;MT7981B&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;闪存&lt;/th&gt;&lt;td&gt;128M&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;内存&lt;/th&gt;&lt;td&gt;DDR3 256M&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id=&quot;&quot;&gt;刷机教程&lt;/h2&gt;
&lt;p&gt;网络上有很多刷机的教程，这里不多赘述。&lt;/p&gt;
&lt;p&gt;使用的 uboot 仓库如下：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/hanwckf/bl-mt798x&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/hanwckf/bl-mt798x&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;&quot;&gt;固件的选择&lt;/h2&gt;
&lt;p&gt;固件选择了自编译 ImmortalWrt 23.05.6，且使用最精简固件的思路，仅保留了 &lt;code&gt;mwan&lt;/code&gt;、&lt;code&gt;&lt;a href=&quot;https://github.com/chenmozhijin/turboacc&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;turboacc&lt;/a&gt;&lt;/code&gt;、&lt;code&gt;fileassistant&lt;/code&gt;、&lt;code&gt;upnp&lt;/code&gt; 插件。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;details class=&quot;notion-toggle&quot;&gt;
      &lt;summary class=&quot;notion-toggle-title&quot;&gt;编译产物的 &lt;code&gt;config.buildinfo&lt;/code&gt; 如下&lt;/summary&gt;&lt;div class=&quot;notion-toggle-content&quot;&gt;&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Plain text&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-plain text&quot;&gt;CONFIG_TARGET_mediatek=y
CONFIG_TARGET_mediatek_filogic=y
CONFIG_TARGET_mediatek_filogic_DEVICE_h3c_magic-nx30-pro-nmbm=y
CONFIG_LIBCURL_COOKIES=y
CONFIG_LIBCURL_CRYPTO_AUTH=y
CONFIG_LIBCURL_FILE=y
CONFIG_LIBCURL_FTP=y
CONFIG_LIBCURL_HTTP=y
CONFIG_LIBCURL_NGHTTP2=y
CONFIG_LIBCURL_OPENSSL=y
CONFIG_LIBCURL_PROXY=y
CONFIG_LIBCURL_TFTP=y
CONFIG_LIBCURL_THREADED_RESOLVER=y
CONFIG_LIBCURL_TLS_SRP=y
CONFIG_LIBCURL_UNIX_SOCKETS=y
CONFIG_PACKAGE_bash=y
CONFIG_PACKAGE_curl=y
CONFIG_PACKAGE_htop=y
CONFIG_PACKAGE_ip-tiny=y
CONFIG_PACKAGE_ip6tables-nft=y
CONFIG_PACKAGE_ipset=y
CONFIG_PACKAGE_iptables-mod-conntrack-extra=y
CONFIG_PACKAGE_iptables-mod-ipopt=y
CONFIG_PACKAGE_iptables-nft=y
CONFIG_PACKAGE_iputils-arping=y
CONFIG_PACKAGE_jq=y
CONFIG_PACKAGE_kmod-ip6tables=y
CONFIG_PACKAGE_kmod-ipt-conntrack=y
CONFIG_PACKAGE_kmod-ipt-conntrack-extra=y
CONFIG_PACKAGE_kmod-ipt-core=y
CONFIG_PACKAGE_kmod-ipt-ipopt=y
CONFIG_PACKAGE_kmod-ipt-ipset=y
CONFIG_PACKAGE_kmod-nf-conncount=y
CONFIG_PACKAGE_kmod-nf-ipt=y
CONFIG_PACKAGE_kmod-nf-ipt6=y
CONFIG_PACKAGE_kmod-nft-compat=y
CONFIG_PACKAGE_kmod-nft-fullcone=y
CONFIG_PACKAGE_kmod-tcp-bbr=y
CONFIG_PACKAGE_libblkid=y
CONFIG_PACKAGE_libcap=y
CONFIG_PACKAGE_libcap-ng=y
CONFIG_PACKAGE_libcurl=y
CONFIG_PACKAGE_libipset=y
CONFIG_PACKAGE_libiptext=y
CONFIG_PACKAGE_libiptext-nft=y
CONFIG_PACKAGE_libiptext6=y
CONFIG_PACKAGE_libmount=y
CONFIG_PACKAGE_libncurses=y
CONFIG_PACKAGE_libnghttp2=y
CONFIG_PACKAGE_libreadline=y
CONFIG_PACKAGE_librt=y
CONFIG_PACKAGE_libsmartcols=y
CONFIG_PACKAGE_libstdcpp=y
CONFIG_PACKAGE_libuuid=y
CONFIG_PACKAGE_libuv=y
CONFIG_PACKAGE_libwebsockets-full=y
CONFIG_PACKAGE_libxtables=y
CONFIG_PACKAGE_lsblk=y
CONFIG_PACKAGE_luci-app-fileassistant=y
CONFIG_PACKAGE_luci-app-mwan3=y
CONFIG_PACKAGE_luci-app-turboacc=y
CONFIG_PACKAGE_luci-app-upnp=y
CONFIG_PACKAGE_luci-i18n-mwan3-zh-cn=y
CONFIG_PACKAGE_luci-i18n-turboacc-zh-cn=y
CONFIG_PACKAGE_luci-i18n-upnp-zh-cn=y
CONFIG_PACKAGE_miniupnpd-nftables=y
CONFIG_PACKAGE_mwan3=y
CONFIG_PACKAGE_openssh-client=y
CONFIG_PACKAGE_openssh-keygen=y
CONFIG_PACKAGE_pdnsd-alt=y
CONFIG_PACKAGE_smartmontools=y
CONFIG_PACKAGE_smartmontools-drivedb=y
CONFIG_PACKAGE_terminfo=y
CONFIG_PACKAGE_xtables-nft=y
CONFIG_PACKAGE_zlib=y&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;&lt;/div&gt;&lt;/details&gt;
&lt;hr class=&quot;notion-divider&quot; /&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;通过上面的 &lt;code&gt;buildinfo&lt;/code&gt; 编译出来的固件仅仅 15.4MB。&lt;/p&gt;
&lt;h2 id=&quot;&quot;&gt;登录算法移植&lt;/h2&gt;
&lt;p&gt;这里使用 OpenWrt 的 &lt;code&gt;init.d&lt;/code&gt; 与 &lt;code&gt;procd&lt;/code&gt; 守护校园网登录状态，如果检测到离线则自动尝试登录。&lt;/p&gt;
&lt;p&gt;代码如下：&lt;/p&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Shell&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;#!/bin/sh /etc/rc.common
# campus portal login as an init.d service for OpenWrt (with procd monitor)

START=95
STOP=10
USE_PROCD=1

#  配置区 
USER_ID=&amp;quot;&amp;quot; # 用户名
PASSWORD=&amp;quot;&amp;quot; # 密码
SERVICE=&amp;quot;DianXin&amp;quot; # Service 字段，没有可以留空

INTERFACE=&amp;quot;eth1&amp;quot; # 网络端口，用于指定 Macvlan 多账号登录

PING_URL=&amp;quot;http://baidu.com&amp;quot;
PORTAL_HOST=&amp;quot;10.30.252.71&amp;quot; # 记得修改这个为自己学校的登录网址 IP
INDEX_URL=&amp;quot;http://$PORTAL_HOST/eportal/index.jsp&amp;quot;
LOGIN_API=&amp;quot;http://$PORTAL_HOST/eportal/InterFace.do?method=login&amp;quot;

CURL_UA=&amp;quot;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36&amp;quot;
CURL_OPTS=&amp;quot;-fsS --connect-timeout 5 --max-time 10 --interface $INTERFACE&amp;quot;

# 监控间隔（秒）
MONITOR_INTERVAL=60
# 断线判定失败后重试次数/间隔
RETRY_MAX=3
RETRY_SLEEP=2

EXTRA_COMMANDS=&amp;quot;login sstatus&amp;quot;
EXTRA_HELP=&amp;quot;        login   Run a one-shot portal login now
        sstatus  Print current connectivity/portal status&amp;quot;

url_encode() {
    local s=&amp;quot;${1}&amp;quot; i c out=&amp;quot;&amp;quot;
    for i in $(seq 1 ${#s}); do
        c=&amp;quot;$(printf &amp;#039;%s&amp;#039; &amp;quot;$s&amp;quot; | cut -c $i)&amp;quot;
        case &amp;quot;$c&amp;quot; in
            [a-zA-Z0-9.~_-]) out=&amp;quot;${out}${c}&amp;quot; ;;
            *) out=&amp;quot;${out}$(printf &amp;#039;%%%02X&amp;#039; &amp;quot;&amp;#039;$c&amp;quot;)&amp;quot; ;;
        esac
    done
    printf &amp;#039;%s&amp;#039; &amp;quot;$out&amp;quot;
}

is_online() {
    local resp
    resp=&amp;quot;$(curl $CURL_OPTS &amp;quot;$PING_URL&amp;quot; -A &amp;quot;$CURL_UA&amp;quot; || true)&amp;quot;
    echo &amp;quot;$resp&amp;quot; | grep -q &amp;quot;http://www\.baidu\.com/&amp;quot; &amp;amp;&amp;amp; return 0 || return 1
}

extract_query_string() {
    local resp=&amp;quot;$1&amp;quot;
    echo &amp;quot;$resp&amp;quot; \
    | grep -o &amp;quot;top\.self\.location\.href=&amp;#039;http://$PORTAL_HOST/eportal/index\.jsp?[^&amp;#039;]\+&amp;#039;&amp;quot; \
    | sed &amp;quot;s#.*index.jsp?##; s/&amp;#039;\$//&amp;quot;
}

do_login_once() {
    echo &amp;quot;[campus_portal_eth1] Probing connectivity...&amp;quot;
    if is_online; then
        echo &amp;quot;[campus_portal_eth1] Already online.&amp;quot;
        return 0
    fi

    echo &amp;quot;[campus_portal_eth1] Fetching portal redirect page...&amp;quot;
    local resp qs enc1 enc2 post_data login_json
    resp=&amp;quot;$(curl $CURL_OPTS &amp;quot;$PING_URL&amp;quot; -A &amp;quot;$CURL_UA&amp;quot; || true)&amp;quot;
    qs=&amp;quot;$(extract_query_string &amp;quot;$resp&amp;quot;)&amp;quot;
    if [ -z &amp;quot;$qs&amp;quot; ]; then
        echo &amp;quot;[campus_portal_eth1] ERROR: failed to get queryString.&amp;quot;
        return 1
    fi
    echo &amp;quot;[campus_portal_eth1] Got queryString (len=${#qs}).&amp;quot;

    enc1=&amp;quot;$(url_encode &amp;quot;$qs&amp;quot;)&amp;quot;
    enc2=&amp;quot;$(url_encode &amp;quot;$enc1&amp;quot;)&amp;quot;
    post_data=&amp;quot;userId=$(url_encode &amp;quot;$USER_ID&amp;quot;)&amp;amp;password=$(url_encode &amp;quot;$PASSWORD&amp;quot;)&amp;amp;service=$(url_encode &amp;quot;$SERVICE&amp;quot;)&amp;amp;queryString=$enc2&amp;amp;operatorPwd=&amp;amp;operatorUserId=&amp;amp;validcode=&amp;amp;passwordEncrypt=false&amp;quot;

    echo &amp;quot;[campus_portal_eth1] Logging in...&amp;quot;
    login_json=&amp;quot;$(curl $CURL_OPTS -X POST &amp;quot;$LOGIN_API&amp;quot; \
        -H &amp;quot;User-Agent: $CURL_UA&amp;quot; \
        -H &amp;quot;Referer: $INDEX_URL&amp;quot; \
        -H &amp;quot;Accept: */*&amp;quot; \
        -H &amp;quot;Accept-Encoding: gzip, deflate&amp;quot; \
        -H &amp;quot;Accept-Language: zh-CN,zh;q=0.9,en;q=0.8&amp;quot; \
        -H &amp;quot;Content-Type: application/x-www-form-urlencoded; charset=UTF-8&amp;quot; \
        --data &amp;quot;$post_data&amp;quot; || true)&amp;quot;

    echo &amp;quot;$login_json&amp;quot; | grep -q &amp;#039;&amp;quot;result&amp;quot;:&amp;quot;success&amp;quot;&amp;#039; &amp;amp;&amp;amp; {
        echo &amp;quot;[campus_portal_eth1] Login success.&amp;quot;
        return 0
    }
    echo &amp;quot;[campus_portal_eth1] Login failed.&amp;quot;
    echo &amp;quot;$login_json&amp;quot; | sed -n &amp;#039;s/.*&amp;quot;message&amp;quot;:&amp;quot;\([^&amp;quot;]*\)&amp;quot;.*/[campus_portal_eth1] reason: \1/p&amp;#039;
    return 2
}

# procd 管理的常驻监控
_monitor_loop() {
    # 注意：这里不要用 &amp;#039;EOF&amp;#039;，让变量在这里就展开
    cat &amp;lt;&amp;lt;EOF
MONITOR_INTERVAL=${MONITOR_INTERVAL}
RETRY_MAX=${RETRY_MAX}
RETRY_SLEEP=${RETRY_SLEEP}
PING_URL=&amp;quot;${PING_URL}&amp;quot;
CURL_UA=&amp;quot;${CURL_UA}&amp;quot;

is_online() {
    resp=&amp;quot;\$(curl -fsS --connect-timeout 5 --max-time 10 --interface $INTERFACE &amp;quot;\$PING_URL&amp;quot; -A &amp;quot;$CURL_UA&amp;quot; || true)&amp;quot;
    echo &amp;quot;\$resp&amp;quot; | grep -q &amp;quot;http://www\\.baidu\\.com/&amp;quot;
}

while true; do
    if is_online; then
        sleep &amp;quot;\$MONITOR_INTERVAL&amp;quot;
        continue
    fi

    echo &amp;quot;[campus_portal_eth1] offline detected, trying to login...&amp;quot;
    tries=1
    rc=1
    while [ &amp;quot;\$tries&amp;quot; -le &amp;quot;\$RETRY_MAX&amp;quot; ]; do
        # 请注意，一定要保证这里的文件名和你的文件名一致。
        /etc/init.d/campus_portal_eth1 login &amp;amp;&amp;amp; { rc=0; break; }
        sleep &amp;quot;\$RETRY_SLEEP&amp;quot;
        tries=\$((tries+1))
    done
    if [ &amp;quot;\$rc&amp;quot; -ne 0 ]; then
        echo &amp;quot;[campus_portal_eth1] auto-login failed after \$RETRY_MAX tries.&amp;quot;
    fi
    sleep &amp;quot;\$MONITOR_INTERVAL&amp;quot;
done
EOF
}

start_service() {
    procd_open_instance
    # 用 /bin/sh -c 启一个 loop，当作守护进程
    procd_set_param command /bin/sh -c &amp;quot;$(_monitor_loop)&amp;quot;
    # 异常退出自动重启（首次延迟 5s，之后指数回退 60s 封顶）
    procd_set_param respawn 5 1 60
    procd_set_param stdout 1
    procd_set_param stderr 1
    # 可按需添加：当网络配置变更时重启该实例
    procd_close_instance
}

stop_service() {
    # procd 会杀掉守护进程
    return 0
}

reload_service() { stop; start; }

service_triggers() {
    # 当 network / wireless 配置被 commit 时触发
    procd_add_reload_trigger &amp;quot;network&amp;quot; &amp;quot;wireless&amp;quot;
}

# rc.common 默认 boot() 会调用 start()
# 我们保留一次性手动命令
login() { do_login_once; }
sstatus() { if is_online; then echo &amp;quot;[campus_portal_eth1] Online&amp;quot;; else echo &amp;quot;[campus_portal_eth1] Offline&amp;quot;; fi; }
&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;修改完配置后将代码写到 &lt;code&gt;/etc/init.d/campus_portal_eth1&lt;/code&gt;（注意，文件名要在代码里面一并修改），启动后可以在&lt;strong&gt;系统日志&lt;/strong&gt;中看到日志信息。&lt;/p&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Shell&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;# 开机启动
/etc/init.d/campus_portal_eth1 enable
# 启动
/etc/init.d/campus_portal_eth1 start&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;
&lt;h2 id=&quot;&quot;&gt;多账号&lt;/h2&gt;
&lt;p&gt;配置详细教程如下：&lt;strong&gt;&lt;a href=&quot;https://zhuanlan.zhihu.com/p/352098418&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;基于openwrt的MWAN3实现多运营商负载均衡的一种方法&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;配置完成端口后将上面的 &lt;code&gt;init.d&lt;/code&gt; 代码全局替换 &lt;code&gt;eth1&lt;/code&gt; 为你创建的接口后，复制一份到 &lt;code&gt;/etc/init.d/&lt;/code&gt; 中即可，每个账号一个服务这样可以保证对每个校园网账号的登录控制。&lt;/p&gt;
&lt;h3 id=&quot;macvlan&quot;&gt;Macvlan&lt;/h3&gt;
&lt;p&gt;在 网络→接口→设备 中可以添加 Macvlan，选择正确的 基础设备 后点击保存即可。&lt;/p&gt;
&lt;p&gt;添加 Macvlan 完成后在 网络→接口 中添加对应的 DHCP客户端，同时设置防火墙区域为 &lt;code&gt;wan&lt;/code&gt; 即可。&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F25057bb1-38d6-456b-af2e-c00ad7ee580d%2Fimage.png?table=block&amp;amp;id=eeacdc04-0892-820d-8e7e-810865591911&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.399258;&quot; data-aspect-ratio=&quot;1.399258&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F25057bb1-38d6-456b-af2e-c00ad7ee580d%2Fimage.png?table=block&amp;amp;id=eeacdc04-0892-820d-8e7e-810865591911&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F6a9d7707-b0e1-4c26-9100-516f072d9639%2Fimage.png?table=block&amp;amp;id=664cdc04-0892-83d9-a442-81857bbafb9e&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.466520;&quot; data-aspect-ratio=&quot;1.466520&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F6a9d7707-b0e1-4c26-9100-516f072d9639%2Fimage.png?table=block&amp;amp;id=664cdc04-0892-83d9-a442-81857bbafb9e&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;h3 id=&quot;multiwan-&quot;&gt;&lt;strong&gt;MultiWAN&lt;/strong&gt; 负载均衡&lt;/h3&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fc2b9f3a9-bba5-4fb7-849b-2dbe04018be4%2Fimage.png?table=block&amp;amp;id=8c9cdc04-0892-838d-80fb-81b5cf99bbd4&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 2.053950;&quot; data-aspect-ratio=&quot;2.053950&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fc2b9f3a9-bba5-4fb7-849b-2dbe04018be4%2Fimage.png?table=block&amp;amp;id=8c9cdc04-0892-838d-80fb-81b5cf99bbd4&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fcd4be05f-7aa0-4f96-84e2-0e4b8de80c88%2Fimage.png?table=block&amp;amp;id=1c9cdc04-0892-827d-8fad-81020463ee3d&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 2.110020;&quot; data-aspect-ratio=&quot;2.110020&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fcd4be05f-7aa0-4f96-84e2-0e4b8de80c88%2Fimage.png?table=block&amp;amp;id=1c9cdc04-0892-827d-8fad-81020463ee3d&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F2195e259-0397-44a1-975d-4dfcd96c281f%2Fimage.png?table=block&amp;amp;id=01fcdc04-0892-8243-bf27-81bf9e4baa68&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 2.290393;&quot; data-aspect-ratio=&quot;2.290393&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F2195e259-0397-44a1-975d-4dfcd96c281f%2Fimage.png?table=block&amp;amp;id=01fcdc04-0892-8243-bf27-81bf9e4baa68&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F8cf88a03-372a-46b3-b427-81ac3cc2f905%2Fimage.png?table=block&amp;amp;id=bc0cdc04-0892-820c-b0b2-01665b1cc35b&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.838028;&quot; data-aspect-ratio=&quot;1.838028&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F8cf88a03-372a-46b3-b427-81ac3cc2f905%2Fimage.png?table=block&amp;amp;id=bc0cdc04-0892-820c-b0b2-01665b1cc35b&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;p&gt;&lt;code&gt;mwan&lt;/code&gt; 的配置教程这里就不过多赘述了，我使用个两个接口（也就是两个账号）配置如上图。&lt;code&gt;mwan&lt;/code&gt; 是通过 &lt;code&gt;iptables&lt;/code&gt; + &lt;code&gt;fwmark&lt;/code&gt; 路由规则来实现的负载均衡，所以在&lt;u&gt;单线程情况下，无法速度叠加&lt;/u&gt;。&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;附图&lt;/h1&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 62.50%; --column-width: 62.50%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0083796e-972d-4fbd-9421-f176d77e5ba0%2Fimage.png?table=block&amp;amp;id=625cdc04-0892-8310-8fe1-01a87ad9d9c6&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;OpenWrt 后台界面&quot; data-title=&quot;OpenWrt 后台界面&quot; style=&quot;aspect-ratio: 1.156639;&quot; data-aspect-ratio=&quot;1.156639&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0083796e-972d-4fbd-9421-f176d77e5ba0%2Fimage.png?table=block&amp;amp;id=625cdc04-0892-8310-8fe1-01a87ad9d9c6&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;OpenWrt 后台界面&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;OpenWrt 后台界面&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 37.50%; --column-width: 37.50%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fccf38c0e-091b-4650-a5bb-ff01ad69b215%2Fimage.png?table=block&amp;amp;id=62ecdc04-0892-8326-9ec8-8130a1a1b02a&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;100M + 50M 账号 mwan 测速&quot; data-title=&quot;100M + 50M 账号 mwan 测速&quot; style=&quot;aspect-ratio: 0.562219;&quot; data-aspect-ratio=&quot;0.562219&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fccf38c0e-091b-4650-a5bb-ff01ad69b215%2Fimage.png?table=block&amp;amp;id=62ecdc04-0892-8326-9ec8-8130a1a1b02a&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;100M + 50M 账号 mwan 测速&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;100M + 50M 账号 mwan 测速&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;</content:encoded><category>网络</category><category>OpenWRT</category></item><item><title>Windows 远程开发环境搭建</title><link>https://www.kanoverse.com/post/windows-remote-dev-deployment</link><guid isPermaLink="true">https://www.kanoverse.com/post/windows-remote-dev-deployment</guid><description>本文是一份详尽的 Windows 远程开发环境搭建指南。作者分享了从远程开机（智能插座+来电启动）、网络组建（使用 Tailscale 并自建 DERP 服务器优化连接）、远程桌面方案选型，到最终开发环境配置（基于 WSL2、Podman 和 OpenSSH）的全过程。文章还深入探讨了如何解决 Hyper-V 端口占用等常见问题，并实现了通过 SSH 直连 WSL 的无缝开发体验。</description><pubDate>Mon, 14 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;一直以来我都是带台式电脑去学校，去年趁着国补买了台 MacbookAir，又遇宿舍搬迁等事宜，让我深深感到了东西多是有多难搬。&lt;/p&gt;
&lt;p&gt;本文作为搭建 Windows 远程开发环境的记录。&lt;/p&gt;
&lt;h2 id=&quot;&quot;&gt;需要解决的问题&lt;/h2&gt;
&lt;p&gt;搭建远程开发环境主要需要解决如下问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;设备开机&lt;/li&gt;
&lt;li&gt;网络&lt;/li&gt;
&lt;li&gt;远程桌面方案&lt;/li&gt;
&lt;li&gt;开发环境搭建&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;&quot;&gt;设备开机&lt;/h1&gt;
&lt;p&gt;设备开机主要用两种解决方案，&lt;strong&gt;WOL&lt;/strong&gt; 和 &lt;strong&gt;来电启动。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;WOL（Wake-On-LAN）主要是通过局域网设备发送 &lt;code&gt;Magic Packet&lt;/code&gt; 来启动设备，同时还需要设备支持 WOL 功能（一些较老的主板不支持 WOL 功能）和保持电源的连接。&lt;/p&gt;
&lt;p&gt;来电启动（AC Power Loss Recovery/Restore on AC Power Loss）主要是通过智能插座来实现远程控制设备的断电、上电来启动设备。&lt;/p&gt;
&lt;p&gt;这里主要使用 &lt;strong&gt;小米智能插座 &lt;/strong&gt;结合 &lt;span class=&quot;notion-red&quot;&gt;&lt;strong&gt;来电启动 &lt;/strong&gt;&lt;/span&gt;来控制设备的开机。&lt;/p&gt;
&lt;blockquote class=&quot;notion-quote&quot;&gt;注：WOL和来电启动都需要在 BIOS 中设置&lt;/blockquote&gt;
&lt;h1 id=&quot;&quot;&gt;网络&lt;/h1&gt;
&lt;h2 id=&quot;&quot;&gt;设备网络环境&lt;/h2&gt;
&lt;div class=&quot;notion-table-wrapper&quot;&gt;&lt;table class=&quot;notion-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;网络&lt;/strong&gt;&lt;/th&gt;&lt;td&gt;中国电信&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;下行&lt;/strong&gt;&lt;/th&gt;&lt;td&gt;300M&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;上行&lt;/strong&gt;&lt;/th&gt;&lt;td&gt;40M&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;路由器&lt;/strong&gt;&lt;/th&gt;&lt;td&gt;自编译 ImmortalWrt 23.05&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;IPv4&lt;/strong&gt;&lt;/th&gt;&lt;td&gt;公网+Full Cone NAT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;IPv6&lt;/strong&gt;&lt;/th&gt;&lt;td&gt;开启&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;家中网络为中国电信 &lt;strong&gt;300M&lt;/strong&gt;下行 + &lt;strong&gt;40M&lt;/strong&gt;上行，使用软路由进行拨号，软路由搭载自己编译的 ImmortalWrt（OpenWrt variant），开启 IPv6，同时具有公网 IPv4。&lt;/p&gt;
&lt;h2 id=&quot;&quot;&gt;组网&lt;/h2&gt;
&lt;p&gt;组网软件使用 &lt;a href=&quot;https://tailscale.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Tailscale&lt;/a&gt; 同时购买阿里云境内服务器自建 &lt;a href=&quot;https://tailscale.com/kb/1232/derp-servers&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;DERP&lt;/a&gt; 服务器。&lt;/p&gt;
&lt;h3 id=&quot;derp-&quot;&gt;DERP 搭建&lt;/h3&gt;
&lt;blockquote class=&quot;notion-quote&quot;&gt;DERP（Designated Encrypted Relay for Packets，指定加密中继服务器）服务器用于管理设备连接和 NAT 穿透。它们有两个主要用途：协商 tailnet 设备之间的直接连接，以及在无法建立直接连接时作为中继服务器。&lt;/blockquote&gt;
&lt;p&gt;DERP 服务实际上运行的是 HTTP 协议，默认的端口为 443，需要配合域名和证书使用。&lt;/p&gt;
&lt;p&gt;由于使用的是境内的服务器，如果不备案我们是&lt;u&gt;无法通过域名访问 HTTP 协议&lt;/u&gt;的，所以我们只能通过修改默认端口同时通过 IP 直连才可以访问。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用 &lt;code&gt;openssl&lt;/code&gt; 自签证书，&lt;code&gt;DERP_IP&lt;/code&gt; 修改为自己的服务器 IP
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Shell&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;DERP_IP=&amp;quot;x.x.x.x&amp;quot;
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout ${DERP_IP}.key -out ${DERP_IP}.crt -subj &amp;quot;/CN=${DERP_IP}&amp;quot; -addext &amp;quot;subjectAltName=IP:${DERP_IP}&amp;quot;&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;将证书移动到相对 &lt;code&gt;docker-compose.yml&lt;/code&gt; 的相对目录 &lt;code&gt;./certs&lt;/code&gt; ，使用 &lt;code&gt;Docker Compose&lt;/code&gt; 一键搭建 DERP 服务
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Yaml&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;version: &amp;quot;3.8&amp;quot;

services:
  derper:
    image: fredliang/derper
    container_name: derper
    restart: always
    volumes:
       - ./certs:/app/certs:ro
    environment:
      - DERP_DOMAIN=x.x.x.x
      - DERP_HTTP_PORT=-1
      - DERP_ADDR=:23333
      - DERP_CERT_MODE=manual
    ports:
      - 23333:23333
      - 3478:3478&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;在 &lt;a href=&quot;https://login.tailscale.com/admin/acls/file&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Tailscale ACL&lt;/a&gt; 页面禁用默认 DERP 服务器，同时添加自建服务器。
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Json&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;{
	&amp;quot;derpMap&amp;quot;: {
		&amp;quot;OmitDefaultRegions&amp;quot;: true, // 禁用默认 DERP 服务器
		&amp;quot;Regions&amp;quot;: {
			&amp;quot;900&amp;quot;: {
				&amp;quot;RegionID&amp;quot;: 900,
				&amp;quot;RegionCode&amp;quot;: &amp;quot;can&amp;quot;, // 服务器代码
				&amp;quot;RegionName&amp;quot;: &amp;quot;AliYun&amp;quot;, // 服务器名字
				&amp;quot;Nodes&amp;quot;: [
					{
						&amp;quot;Name&amp;quot;: &amp;quot;1&amp;quot;,
						&amp;quot;RegionID&amp;quot;: 900,
						&amp;quot;HostName&amp;quot;: &amp;quot;example&amp;quot;, // 由于没有使用域名，这里随便填无法解析的域名
						&amp;quot;IPv4&amp;quot;: &amp;quot;x.x.x.x&amp;quot;,
						&amp;quot;DERPPort&amp;quot;: 23333, // DERP 端口
						&amp;quot;InsecureForTests&amp;quot;: true // 因为是自签证书，所以要开启 Insecure
					}
				]
			}
		}
	}
}&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;配置完成后使用 &lt;code&gt;tailscale netcheck&lt;/code&gt; 进行测试
&lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 528px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F6880a1fd-74b3-4592-a183-824fba88a4b6%2Fimage.png?table=block&amp;amp;id=003cdc04-0892-8378-be9b-01d65d3f77fe&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.902098;&quot; data-aspect-ratio=&quot;1.902098&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F6880a1fd-74b3-4592-a183-824fba88a4b6%2Fimage.png?table=block&amp;amp;id=003cdc04-0892-8378-be9b-01d65d3f77fe&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;&quot;&gt;打洞优化&lt;/h3&gt;
&lt;p&gt;使用 &lt;code&gt;tailscale status&lt;/code&gt; 可以查看设备的网络连接状态，最理想的状态就是打洞成功的 &lt;code&gt;direct&lt;/code&gt; 状态，如果遇到一直是使用 DERP 服务器的 &lt;code&gt;relay&lt;/code&gt; 状态则需要排查原因。&lt;/p&gt;
&lt;p&gt;Tailscale 默认监听 &lt;code&gt;41641&lt;/code&gt; 端口进行打洞，如果有公网 IPv4 可以尝试开启 NAT-PMP 或者手动允许 &lt;code&gt;41641&lt;/code&gt; 端口的入站。&lt;/p&gt;
&lt;p&gt;如果没有公网 IPv4 则可以尝试使用 &lt;strong&gt;随机端口&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;等操作，详细如下：&lt;/p&gt;
&lt;figure class=&quot;notion-bookmark&quot;&gt;
      &lt;a href=&quot;https://tailscale.com/kb/1181/firewalls&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
        &lt;div class=&quot;notion-bookmark-cover&quot;&gt;&lt;img src=&quot;https://tailscale.com/files/images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;
        &lt;div class=&quot;notion-bookmark-info&quot;&gt;
          &lt;div class=&quot;notion-bookmark-title&quot;&gt;Using Tailscale with your firewall · Tailscale Docs&lt;/div&gt;
          &lt;div class=&quot;notion-bookmark-description&quot;&gt;Use Tailscale with an existing firewall configuration.&lt;/div&gt;
          &lt;div class=&quot;notion-bookmark-url&quot;&gt;tailscale.com&lt;/div&gt;
        &lt;/div&gt;
      &lt;/a&gt;
    &lt;/figure&gt;
&lt;h3 id=&quot;&quot;&gt;速度测试&lt;/h3&gt;
&lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 480px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F73281f5f-79b1-4f39-a7a0-b9bf644bf266%2Fimage.png?table=block&amp;amp;id=662cdc04-0892-8320-880b-8181acf59adf&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;图：中国联通流量IPv6直连成功 NAS速度测试&quot; data-title=&quot;图：中国联通流量IPv6直连成功 NAS速度测试&quot; style=&quot;aspect-ratio: 1.271762;&quot; data-aspect-ratio=&quot;1.271762&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F73281f5f-79b1-4f39-a7a0-b9bf644bf266%2Fimage.png?table=block&amp;amp;id=662cdc04-0892-8320-880b-8181acf59adf&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;图：中国联通流量IPv6直连成功 NAS速度测试&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;图：中国联通流量IPv6直连成功 NAS速度测试&lt;/figcaption&gt;
    &lt;/figure&gt;
&lt;h1 id=&quot;&quot;&gt;远程桌面方案&lt;/h1&gt;
&lt;p&gt;用 Windows 系统搭建开发环境肯定离不开远程桌面。远程桌面方案根据原理不同可以分类为 RDP 和 其他、还可以分为 开源 和 闭源商业。&lt;/p&gt;
&lt;p&gt;下面是一些常见的远程桌面方案：&lt;/p&gt;
&lt;div class=&quot;notion-table-wrapper&quot;&gt;&lt;table class=&quot;notion-table&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方案&lt;/th&gt;&lt;th&gt;核心原理&lt;/th&gt;&lt;th&gt;游戏支持&lt;/th&gt;&lt;th&gt;开源/闭源&lt;/th&gt;&lt;th&gt;是否收费&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Windows RDP&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;远程渲染&lt;/td&gt;&lt;td&gt;不推荐，以远程办公为主&lt;/td&gt;&lt;td&gt;闭源&lt;/td&gt;&lt;td&gt;免费&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;RustDesk&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;视频串流&lt;/td&gt;&lt;td&gt;不推荐，以远程办公为主&lt;/td&gt;&lt;td&gt;开源&lt;/td&gt;&lt;td&gt;免费&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Sunshine&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;视频串流&lt;/td&gt;&lt;td&gt;支持&lt;/td&gt;&lt;td&gt;开源&lt;/td&gt;&lt;td&gt;免费&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;ToDesk&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;视频串流&lt;/td&gt;&lt;td&gt;支持但需付费&lt;/td&gt;&lt;td&gt;闭源&lt;/td&gt;&lt;td&gt;免费、部分功能收费&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;网易UU远程&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;视频串流&lt;/td&gt;&lt;td&gt;支持&lt;/td&gt;&lt;td&gt;闭源&lt;/td&gt;&lt;td&gt;免费&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Parsec&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;视频串流&lt;/td&gt;&lt;td&gt;支持&lt;/td&gt;&lt;td&gt;闭源&lt;/td&gt;&lt;td&gt;免费、部分功能收费&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;这里主要使用 Windows RDP 和 RustDesk 作为远程桌面方案。如果需要&lt;strong&gt;游戏串流&lt;/strong&gt;可以使用 Sunshine 或者 网易UU远程。&lt;/p&gt;
&lt;blockquote class=&quot;notion-quote&quot;&gt;在远程桌面方案中，Windows RDP 凭借远程渲染而非视频串流的技术是不可或缺的存在。&lt;/blockquote&gt;
&lt;h1 id=&quot;&quot;&gt;开发环境搭建&lt;/h1&gt;
&lt;p&gt;虽然是在 Windows 下面搭建开发环境，但是 Linux 也是不可或缺的，这里基于 WSL2 来搭建 Linux 的开发环境。&lt;/p&gt;
&lt;p&gt;主要是需要安装/开启这些功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hyper-V&lt;/li&gt;
&lt;li&gt;WSL2 &lt;/li&gt;
&lt;li&gt;Podman&lt;/li&gt;
&lt;li&gt;OpenSSH&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中 Podman 依赖 WSL2 依赖 HyperV。&lt;/p&gt;
&lt;h2 id=&quot;-hyper-v&quot;&gt;开启 Hyper-V&lt;/h2&gt;
&lt;p&gt;在 “启用或关闭 Windows 功能” 勾选 “Hyper-V” 即可。&lt;/p&gt;
&lt;h2 id=&quot;-wsl2&quot;&gt;安装 WSL2&lt;/h2&gt;
&lt;p&gt;跟着微软官方教程安装即可。&lt;/p&gt;
&lt;figure class=&quot;notion-bookmark&quot;&gt;
      &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/wsl/install&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
        &lt;div class=&quot;notion-bookmark-cover&quot;&gt;&lt;img src=&quot;https://learn.microsoft.com/en-us/media/open-graph-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;
        &lt;div class=&quot;notion-bookmark-info&quot;&gt;
          &lt;div class=&quot;notion-bookmark-title&quot;&gt;Install WSL&lt;/div&gt;
          &lt;div class=&quot;notion-bookmark-description&quot;&gt;Install Windows Subsystem for Linux with the command, wsl --install. Use a Bash terminal on your Windows machine run by your preferred Linux distribution - Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin, Alpine, and more are available.&lt;/div&gt;
          &lt;div class=&quot;notion-bookmark-url&quot;&gt;learn.microsoft.com&lt;/div&gt;
        &lt;/div&gt;
      &lt;/a&gt;
    &lt;/figure&gt;
&lt;h2 id=&quot;-podman&quot;&gt;安装 Podman&lt;/h2&gt;
&lt;p&gt;安装包无脑点击下一步。&lt;/p&gt;
&lt;figure class=&quot;notion-bookmark&quot;&gt;
      &lt;a href=&quot;https://podman.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
        &lt;div class=&quot;notion-bookmark-cover&quot;&gt;&lt;img src=&quot;https://podman.io/logos/optimized/vscode-logo-75w-75h.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;
        &lt;div class=&quot;notion-bookmark-info&quot;&gt;
          &lt;div class=&quot;notion-bookmark-title&quot;&gt;Podman&lt;/div&gt;
          
          &lt;div class=&quot;notion-bookmark-url&quot;&gt;podman.io&lt;/div&gt;
        &lt;/div&gt;
      &lt;/a&gt;
    &lt;/figure&gt;
&lt;h2 id=&quot;hyper-v-&quot;&gt;Hyper-V 问题解决&lt;/h2&gt;
&lt;p&gt;Windows 10（安装了 Hyper-V）会自动&lt;strong&gt;随机保留&lt;/strong&gt;部分端口用于容器宿主网络服务（详细请见&lt;a href=&quot;https://zhuanlan.zhihu.com/p/474392069&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://zhuanlan.zhihu.com/p/474392069&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;如果 &lt;a href=&quot;https://learn.microsoft.com/zh-cn/troubleshoot/windows-server/networking/default-dynamic-port-range-tcpip-chang&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Windows 动态端口范围&lt;/a&gt;被设得过低（如1024起步），常用端口（如8088、8000、3000等）会被误占用，导致无法绑定。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;使用命令 &lt;code&gt;netsh int ipv4 show dynamicport tcp&lt;/code&gt; 可以查看目前「TCP 动态端口」的范围。&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 597.98291015625px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F55b56c05-e91e-4936-931d-7ae4edb62a33%2Fimage.png?table=block&amp;amp;id=1e7cdc04-0892-83d9-bc3d-010b4848107b&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 3.580838;&quot; data-aspect-ratio=&quot;3.580838&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F55b56c05-e91e-4936-931d-7ae4edb62a33%2Fimage.png?table=block&amp;amp;id=1e7cdc04-0892-83d9-bc3d-010b4848107b&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;netsh int ipv4 show excludedportrange protocol=tcp&lt;/code&gt; 命令可以查看当前所有已经被征用了的端口。&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 576px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Ffd7a02ce-aa5b-4067-9221-945f72d5ed84%2Fimage.png?table=block&amp;amp;id=b8fcdc04-0892-8384-b500-815112ad9ab6&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.738426;&quot; data-aspect-ratio=&quot;1.738426&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Ffd7a02ce-aa5b-4067-9221-945f72d5ed84%2Fimage.png?table=block&amp;amp;id=b8fcdc04-0892-8384-b500-815112ad9ab6&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;h3 id=&quot;&quot;&gt;解决方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;以管理员权限运行以下命令&lt;/strong&gt;，将动态端口范围设回标准的高位区间，避免影响常用端口：
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Powershell&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-powershell&quot;&gt;netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;重启电脑&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;验证：
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Powershell&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-powershell&quot;&gt;netsh int ipv4 show dynamicport tcp
netsh int ipv6 show dynamicport tcp&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;
&lt;p&gt;显示的范围应为49152-65535。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;-win32-openssh&quot;&gt;安装 Win32-OpenSSH&lt;/h2&gt;
&lt;p&gt;虽然我们可以直接通过远程桌面进行开发，但是这样过于臃肿了，我们可以直接通过 VsCode 的 RemoteSSH 插件连接远程服务器进行远程开发，且连接上后可以直接拥有在 Windows 本地开发的体验，能直接连接到 WSL 和 Podman 运行的容器，非常的方便。&lt;/p&gt;
&lt;p&gt;实现这个功能我们只需要在 Windows 上安装 OpenSSH 服务，这里使用安装包直接进行安装。&lt;/p&gt;
&lt;p&gt;Win32-OpenSSH 下载地址：&lt;a href=&quot;https://github.com/PowerShell/Win32-OpenSSH/releases/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/PowerShell/Win32-OpenSSH/releases/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 33.33%; --column-width: 33.33%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fa75ebefe-7c93-43e0-9189-3376c7901658%2F1b673018-3c4a-41f2-b564-06b4bbe8331d.png?table=block&amp;amp;id=590cdc04-0892-83b6-84ac-01d6b188f809&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.370441;&quot; data-aspect-ratio=&quot;1.370441&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fa75ebefe-7c93-43e0-9189-3376c7901658%2F1b673018-3c4a-41f2-b564-06b4bbe8331d.png?table=block&amp;amp;id=590cdc04-0892-83b6-84ac-01d6b188f809&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 33.33%; --column-width: 33.33%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fca3acad6-ede7-4855-aa44-ad7fbd9c81c8%2Ff3812879-8003-4726-992f-5d9a6667a96c.png?table=block&amp;amp;id=ff7cdc04-0892-825f-83cf-019d20174579&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.379048;&quot; data-aspect-ratio=&quot;1.379048&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fca3acad6-ede7-4855-aa44-ad7fbd9c81c8%2Ff3812879-8003-4726-992f-5d9a6667a96c.png?table=block&amp;amp;id=ff7cdc04-0892-825f-83cf-019d20174579&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 33.33%; --column-width: 33.33%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Ff0ce1b63-a321-40a6-9301-1cde68fb7eb0%2F3e9d79a9-a6c7-4be9-b72e-01c0ef393403.png?table=block&amp;amp;id=b47cdc04-0892-83a3-ab88-81d5f109d1b7&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.401544;&quot; data-aspect-ratio=&quot;1.401544&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Ff0ce1b63-a321-40a6-9301-1cde68fb7eb0%2F3e9d79a9-a6c7-4be9-b72e-01c0ef393403.png?table=block&amp;amp;id=b47cdc04-0892-83a3-ab88-81d5f109d1b7&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;p&gt;安装完成 OpenSSH 后可以将电脑上的 SSH 公钥添加到 &lt;code&gt;authorized_keys&lt;/code&gt; 中实现丝滑的远程连接。&lt;/p&gt;
&lt;h2 id=&quot;wsl-openssh&quot;&gt;WSL 安装 OpenSSH&lt;/h2&gt;
&lt;p&gt;至此，Windows 远程开发环境算是搭建完成了，不过如果只使用 Windows OpenSSH 会让我们访问 WSL 多一个步骤，这里我想要一个方案通过 SSH 连接上服务器就是 WSL。&lt;/p&gt;
&lt;p&gt;实现也很简单，就是需要在 WSL 下安装 OpenSSH 服务，在 Ubuntu 下直接使用 &lt;code&gt;apt install openssh-server&lt;/code&gt; 即可，同时要保证 WSL 配置 &lt;code&gt;/etc/wsl.conf&lt;/code&gt; 开启 &lt;code&gt;systemd&lt;/code&gt; ，通过 &lt;code&gt;systemd&lt;/code&gt; 来管理 OpenSSH 服务的启动。&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F9cce52e1-cbd4-4b5a-94c8-2e07dc424c6a%2Fimage.png?table=block&amp;amp;id=edacdc04-0892-82aa-8b8a-81cfdb6e4da6&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;图：systemd 查看 sshd 服务运行状态&quot; data-title=&quot;图：systemd 查看 sshd 服务运行状态&quot; style=&quot;aspect-ratio: 2.611898;&quot; data-aspect-ratio=&quot;2.611898&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F9cce52e1-cbd4-4b5a-94c8-2e07dc424c6a%2Fimage.png?table=block&amp;amp;id=edacdc04-0892-82aa-8b8a-81cfdb6e4da6&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;图：systemd 查看 sshd 服务运行状态&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;图：systemd 查看 sshd 服务运行状态&lt;/figcaption&gt;
    &lt;/figure&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;安装了 OpenSSH 服务还不够，我们还需要配置端口转发和 WSL 的开机启动。&lt;/p&gt;
&lt;p&gt;我们使用 &lt;a href=&quot;https://nssm.cc/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;NSSM&lt;/a&gt; 来管理 Windows 的服务，由于 NSSM 只能运行 bat 脚本，所以我们还需要写一个 bat 脚本用于调用 ps1 脚本。&lt;/p&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Powershell&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-powershell&quot;&gt;# demo.ps1
$wslIP = wsl hostname -I | ForEach-Object { $_.Trim() }
# 删除原来的转发
netsh interface portproxy delete v4tov4 listenaddress=* listenport=22
# 配置端口转发，Windows:本机端口 -&amp;gt; WSL:22
netsh interface portproxy add v4tov4 listenaddress=* listenport=&amp;lt;本机端口&amp;gt; connectaddress=$wslIP connectport=22
# 启动 WSL
wsl -d Ubuntu

# demo.bat
# 这里使用的是 powershell 7，而不是 5.1
pwsh -ExecutionPolicy Bypass -NoProfile -File &amp;quot;demo.ps1&amp;quot;&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F26c7421c-7eec-4fb5-ae30-35085969bce9%2Fimage.png?table=block&amp;amp;id=f23cdc04-0892-83ea-94ef-8110fd889ac3&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.900452;&quot; data-aspect-ratio=&quot;1.900452&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F26c7421c-7eec-4fb5-ae30-35085969bce9%2Fimage.png?table=block&amp;amp;id=f23cdc04-0892-83ea-94ef-8110fd889ac3&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F782a33cd-ffc7-49e3-bd3e-97d40451e1c4%2Fimage.png?table=block&amp;amp;id=b00cdc04-0892-83cb-ad0d-016dc4e9d9f1&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.884444;&quot; data-aspect-ratio=&quot;1.884444&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F782a33cd-ffc7-49e3-bd3e-97d40451e1c4%2Fimage.png?table=block&amp;amp;id=b00cdc04-0892-83cb-ad0d-016dc4e9d9f1&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;p&gt;注意 NSSM 的 &lt;code&gt;Log on&lt;/code&gt; 需要配置管理员的账户，不能使用 &lt;code&gt;Local System account&lt;/code&gt;。同时 &lt;code&gt;Dependencies&lt;/code&gt; 需要添加 &lt;code&gt;WSLService&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这样便完成了 WSL 端口转发与开机启动的配置。&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;总结&lt;/h1&gt;
&lt;p&gt;通过组网和开发环境搭建，完美的解决了远程开发的需求，外加远程桌面可以让我们控制电脑，串流游戏等等，非常的完美，暂时没有遇到缺点。&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;附录&lt;/h1&gt;
&lt;h2 id=&quot;wsl2-&quot;&gt;WSL2 迁移存储目录&lt;/h2&gt;
&lt;p&gt;WSL2 默认将 Linux 发行版安装到C盘，迁移方法如下&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;导出&lt;/strong&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Powershell&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-powershell&quot;&gt;wsl --export &amp;lt;发行版名&amp;gt; &amp;lt;目标路径&amp;gt;\backup.tar&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;注销原发行版&lt;/strong&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Powershell&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-powershell&quot;&gt;wsl --unregister &amp;lt;发行版名&amp;gt;&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;导入到新目录&lt;/strong&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Powershell&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-powershell&quot;&gt;wsl --import &amp;lt;新发行版名&amp;gt; &amp;lt;新目录&amp;gt; &amp;lt;tar包路径&amp;gt;&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;</content:encoded><category>Windows</category><category>网络</category></item><item><title>马来西亚游记</title><link>https://www.kanoverse.com/post/trip-malaysia-2025</link><guid isPermaLink="true">https://www.kanoverse.com/post/trip-malaysia-2025</guid><description>记人生第一次出国旅行，在亚庇短暂停留五天，游览了红树林、马穆迪岛、沙巴大学、神山等景点。</description><pubDate>Wed, 09 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;原本的目的地是日本，但是因为签证政策变严所以没有签，于是选择了马来西亚（期间还看过埃及，感觉副本难度太高后作罢）。&lt;/p&gt;
&lt;p&gt;第一次没有什么经验，行程安排得比较松：6 月 10 日凌晨 5 点落地 Kota Kinabalu，6 月 14 日一天都在等回程的飞机。&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F497142c0-c8d9-4450-8b9d-98c5466b4f17%2Fimage.png?table=block&amp;amp;id=c67cdc04-0892-82b6-91ba-014636c1cfd6&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;每个去过的地方都在 Google Maps 上做了标记&quot; data-title=&quot;每个去过的地方都在 Google Maps 上做了标记&quot; style=&quot;aspect-ratio: 1.648731;&quot; data-aspect-ratio=&quot;1.648731&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F497142c0-c8d9-4450-8b9d-98c5466b4f17%2Fimage.png?table=block&amp;amp;id=c67cdc04-0892-82b6-91ba-014636c1cfd6&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;每个去过的地方都在 Google Maps 上做了标记&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;每个去过的地方都在 Google Maps 上做了标记&lt;/figcaption&gt;
    &lt;/figure&gt;
&lt;h1 id=&quot;0x01-&quot;&gt;0x01 蓝屏地狱与天空之镜&lt;/h1&gt;
&lt;p&gt;从白云机场出发的 AirAsia 红眼航班，凌晨五点落地亚庇国际机场后丝滑入境（需要提前填写电子入境卡）。&lt;/p&gt;
&lt;h2 id=&quot;&quot;&gt;前置任务&lt;/h2&gt;
&lt;p&gt;入境后最主要的两个任务就是 &lt;strong&gt;办理 SIM 卡&lt;/strong&gt; 和 &lt;strong&gt;换取现金&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;SIM卡的办理很简单，在机场有很多运营商，提前在小红书上看好哪个信号最好，直接用护照购买即可（买了 100 G 最后只用了 20 G，马来的网速太慢了）。&lt;/p&gt;
&lt;p&gt;由于没有 Visa 等国际卡，只能在支持银联的 ATM 上取现。在机场一楼只看见一台支持银联的 ATM。第一次取钱因为卡未开通境外 ATM 功能被拒付，只能重新排队，结果 ATM 还蓝屏……靠小红书找到机场三楼还有两台无人排队的 ATM，换卡后成功取到现金，这里换了 800 RM。&lt;/p&gt;
&lt;blockquote class=&quot;notion-quote&quot;&gt;中国电信的卡需要提前在境内开通漫游才有信号，不然就要体验接不到验证码的痛苦了&lt;/blockquote&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 43.75%; --column-width: 43.75%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fe0e2fcf5-f0d7-4448-9145-18c1e223f239%2Fimage.png?table=block&amp;amp;id=d89cdc04-0892-82b4-b1c8-01d61374c926&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;ATM蓝屏后开始扫描硬盘了&quot; data-title=&quot;ATM蓝屏后开始扫描硬盘了&quot; style=&quot;aspect-ratio: 0.750667;&quot; data-aspect-ratio=&quot;0.750667&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fe0e2fcf5-f0d7-4448-9145-18c1e223f239%2Fimage.png?table=block&amp;amp;id=d89cdc04-0892-82b4-b1c8-01d61374c926&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;ATM蓝屏后开始扫描硬盘了&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;ATM蓝屏后开始扫描硬盘了&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 56.25%; --column-width: 56.25%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fd19b6330-6829-4290-93ec-ccc33f4de9e4%2Fimage.png?table=block&amp;amp;id=b0dcdc04-0892-822a-8eb2-01d2f6468d14&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fd19b6330-6829-4290-93ec-ccc33f4de9e4%2Fimage.png?table=block&amp;amp;id=b0dcdc04-0892-822a-8eb2-01d2f6468d14&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;p&gt;取到钱后吃了一顿 KFC 当早餐。&lt;/p&gt;
&lt;h2 id=&quot;&quot;&gt;前往酒店&lt;/h2&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Ffd66a003-ecc2-412b-b766-91a8277e30b7%2Fimage.png?table=block&amp;amp;id=b76cdc04-0892-828b-a69f-814e4fe1f881&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Ffd66a003-ecc2-412b-b766-91a8277e30b7%2Fimage.png?table=block&amp;amp;id=b76cdc04-0892-828b-a69f-814e4fe1f881&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F63f509ed-94fd-4c0b-b04e-2829f10cca44%2Fimage.png?table=block&amp;amp;id=9c8cdc04-0892-8360-bf50-0151a1d3a9df&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F63f509ed-94fd-4c0b-b04e-2829f10cca44%2Fimage.png?table=block&amp;amp;id=9c8cdc04-0892-8360-bf50-0151a1d3a9df&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;p&gt;打车遇到会说中文的大妈，去酒店一路给我们推荐了很多景点。&lt;/p&gt;
&lt;p&gt;酒店还没到入住时间，于是先寄存行李，再去 &lt;strong&gt;Jesselton 码头&lt;/strong&gt; 买了下午的红树林游览（100 RM/人）和第二天的跳岛（90 RM/人）。&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fc41579f3-2fe3-4894-9dab-d72e70737970%2Fimage.png?table=block&amp;amp;id=047cdc04-0892-821b-897e-01a5f570f5d2&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.826848;&quot; data-aspect-ratio=&quot;1.826848&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fc41579f3-2fe3-4894-9dab-d72e70737970%2Fimage.png?table=block&amp;amp;id=047cdc04-0892-821b-897e-01a5f570f5d2&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;h2 id=&quot;bongawan-&quot;&gt;&lt;strong&gt;Bongawan &lt;/strong&gt;红树林&lt;/h2&gt;
&lt;p&gt;车程来回3小时。&lt;/p&gt;
&lt;p&gt;景点主要是坐船看猴子、长鼻猴、萤火虫和天空之镜（可以同时看到日落和月亮）。&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F5594084a-7e3d-4eb6-a6bb-ffee184f88f9%2Fimage.png?table=block&amp;amp;id=992cdc04-0892-83da-ad0b-0117c92571ef&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.713459;&quot; data-aspect-ratio=&quot;1.713459&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F5594084a-7e3d-4eb6-a6bb-ffee184f88f9%2Fimage.png?table=block&amp;amp;id=992cdc04-0892-83da-ad0b-0117c92571ef&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0c5dda36-1734-4af3-883f-127ff6b6452d%2Fimage.png?table=block&amp;amp;id=5d7cdc04-0892-82ec-a5e0-014fd3517acf&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0c5dda36-1734-4af3-883f-127ff6b6452d%2Fimage.png?table=block&amp;amp;id=5d7cdc04-0892-82ec-a5e0-014fd3517acf&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F34efd614-3e26-41bd-bc92-72c7610c1efd%2Fimage.png?table=block&amp;amp;id=3a8cdc04-0892-83de-9794-81140d316db6&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F34efd614-3e26-41bd-bc92-72c7610c1efd%2Fimage.png?table=block&amp;amp;id=3a8cdc04-0892-83de-9794-81140d316db6&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 384px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F561cbae5-db95-46e3-9861-82ac22265c34%2Fimage.png?table=block&amp;amp;id=7d8cdc04-0892-83b0-8abd-81bfb3b893fe&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F561cbae5-db95-46e3-9861-82ac22265c34%2Fimage.png?table=block&amp;amp;id=7d8cdc04-0892-83b0-8abd-81bfb3b893fe&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;p&gt;回到酒店已经是九点半。&lt;/p&gt;
&lt;h1 id=&quot;0x02-&quot;&gt;0x02 关于跳岛不潜水但是偶遇暴风雨那件事&lt;/h1&gt;
&lt;p&gt;&lt;del&gt;（附赠的旅游项目，暴风雨&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;第二天是两个岛屿的跳岛一日游，这里选了 &lt;strong&gt;马努干岛&lt;/strong&gt; 和 &lt;strong&gt;马穆迪岛&lt;/strong&gt; 和滑翔伞、香蕉船这两个项目，90RM每人（上岛还要另外交一次费用25RM每人，只可以用现金）。&lt;/p&gt;
&lt;p&gt;同行人不潜水所以只有一天的跳岛安排。&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 336px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F499f6949-35c2-4af4-a30d-2ea685a44750%2Fimage.png?table=block&amp;amp;id=317cdc04-0892-824d-bac9-81bc65cdaa3e&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;为什么有沉船&quot; data-title=&quot;为什么有沉船&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F499f6949-35c2-4af4-a30d-2ea685a44750%2Fimage.png?table=block&amp;amp;id=317cdc04-0892-824d-bac9-81bc65cdaa3e&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;为什么有沉船&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;为什么有沉船&lt;/figcaption&gt;
    &lt;/figure&gt;
&lt;h2 id=&quot;&quot;&gt;马穆迪岛&lt;/h2&gt;
&lt;p&gt;岛上有哈基米和蜥蜴，可以去浮潜。&lt;/p&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 432px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F8aac1c10-4790-49a2-9dbf-5aa8341bc276%2Fimage.png?table=block&amp;amp;id=503cdc04-0892-8320-a6ec-81ff8b21335f&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;岛上的蜥蜴&quot; data-title=&quot;岛上的蜥蜴&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F8aac1c10-4790-49a2-9dbf-5aa8341bc276%2Fimage.png?table=block&amp;amp;id=503cdc04-0892-8320-a6ec-81ff8b21335f&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;岛上的蜥蜴&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;岛上的蜥蜴&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 576px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F5f71d019-5f66-4df9-b8ec-cecb6679f74f%2Fimage.png?table=block&amp;amp;id=0c5cdc04-0892-824e-9c64-013faaca58b7&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F5f71d019-5f66-4df9-b8ec-cecb6679f74f%2Fimage.png?table=block&amp;amp;id=0c5cdc04-0892-824e-9c64-013faaca58b7&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;在这里主要是玩了两个项目，不浮潜流程很快。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;h2 id=&quot;&quot;&gt;马努干岛&lt;/h2&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 37.50%; --column-width: 37.50%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 288px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Faf7d649d-c282-4ab2-a01a-f57ae4f16433%2Fimage.png?table=block&amp;amp;id=ac7cdc04-0892-83d6-9d67-81997a9918ab&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.580908;&quot; data-aspect-ratio=&quot;0.580908&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Faf7d649d-c282-4ab2-a01a-f57ae4f16433%2Fimage.png?table=block&amp;amp;id=ac7cdc04-0892-83d6-9d67-81997a9918ab&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 62.50%; --column-width: 62.50%;&quot;&gt;
      &lt;p&gt;这个岛比马穆迪岛大很多，岛上面的物价很贵。&lt;/p&gt;
&lt;p&gt;在岛上坐了不到一个小时就开始下大雨了，回码头的途中很颠簸，不过是一次不错的体验。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 528px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F09350e74-ce31-4bb6-8694-05bfc6d66624%2Fimage.png?table=block&amp;amp;id=9e0cdc04-0892-830d-b2ec-019ebac4e539&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F09350e74-ce31-4bb6-8694-05bfc6d66624%2Fimage.png?table=block&amp;amp;id=9e0cdc04-0892-830d-b2ec-019ebac4e539&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F2c26c53b-4e6c-4229-87f6-beed8839e09b%2Fimage.png?table=block&amp;amp;id=ae6cdc04-0892-8203-90f9-01261767a3e3&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F2c26c53b-4e6c-4229-87f6-beed8839e09b%2Fimage.png?table=block&amp;amp;id=ae6cdc04-0892-8203-90f9-01261767a3e3&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F23860a8d-48a9-450e-9eb3-f7574b262fbc%2Fimage.png?table=block&amp;amp;id=b47cdc04-0892-83d3-bdb8-810792a7a2cb&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F23860a8d-48a9-450e-9eb3-f7574b262fbc%2Fimage.png?table=block&amp;amp;id=b47cdc04-0892-83d3-bdb8-810792a7a2cb&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F5fd6f6d1-a484-4f81-889b-819fbe5bca30%2Fimage.png?table=block&amp;amp;id=278cdc04-0892-83d0-8618-8112e9fd591c&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F5fd6f6d1-a484-4f81-889b-819fbe5bca30%2Fimage.png?table=block&amp;amp;id=278cdc04-0892-83d0-8618-8112e9fd591c&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F68cd18eb-5d45-4291-a295-f196e2aa1739%2Fimage.png?table=block&amp;amp;id=019cdc04-0892-82b9-a101-81414ddad9c4&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F68cd18eb-5d45-4291-a295-f196e2aa1739%2Fimage.png?table=block&amp;amp;id=019cdc04-0892-82b9-a101-81414ddad9c4&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;h2 id=&quot;&quot;&gt;洗衣店&lt;/h2&gt;
&lt;p&gt;住的酒店没有洗衣房，于是屯了两天的衣服来洗衣店，找的洗衣店自带洗衣剂和柔顺剂，很方便。（有点店铺没有）。&lt;br&gt;这里建议带三套衣服，第一是洗衣服很贵，第二是很远。（1.5公里左右）&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 480px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F814e3c40-be6c-4277-bc30-dc915606f5fb%2Fimage.png?table=block&amp;amp;id=8a2cdc04-0892-825a-8ae2-812b11a3edd7&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F814e3c40-be6c-4277-bc30-dc915606f5fb%2Fimage.png?table=block&amp;amp;id=8a2cdc04-0892-825a-8ae2-812b11a3edd7&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;h1 id=&quot;0x03-&quot;&gt;0x03 沙巴大学&lt;/h1&gt;
&lt;p&gt;第三天休整一天，用 Grab 叫车去沙巴大学，行程很短。&lt;/p&gt;
&lt;h2 id=&quot;&quot;&gt;码头&lt;/h2&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fbe79faf0-d78f-4560-a5ca-42816029f35c%2Fimage.png?table=block&amp;amp;id=9f7cdc04-0892-831a-939b-811355f4d76c&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fbe79faf0-d78f-4560-a5ca-42816029f35c%2Fimage.png?table=block&amp;amp;id=9f7cdc04-0892-831a-939b-811355f4d76c&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F977cd483-2790-43f8-9af7-ac24456cceb1%2Fimage.png?table=block&amp;amp;id=5cbcdc04-0892-82f4-8f3f-81784b849471&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F977cd483-2790-43f8-9af7-ac24456cceb1%2Fimage.png?table=block&amp;amp;id=5cbcdc04-0892-82f4-8f3f-81784b849471&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;h2 id=&quot;cafe&quot;&gt;山顶Cafe&lt;/h2&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 43.75%; --column-width: 43.75%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb33cc2a6-e095-4d90-8da7-7794c9011d3c%2Fimage.png?table=block&amp;amp;id=98bcdc04-0892-8270-864e-8180692d0805&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb33cc2a6-e095-4d90-8da7-7794c9011d3c%2Fimage.png?table=block&amp;amp;id=98bcdc04-0892-8270-864e-8180692d0805&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 56.25%; --column-width: 56.25%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fccc4cc20-f0b4-4f5b-88ba-55c64326de6f%2Fimage.png?table=block&amp;amp;id=fbdcdc04-0892-835f-a8ce-81e7ede442c7&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 2.144628;&quot; data-aspect-ratio=&quot;2.144628&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fccc4cc20-f0b4-4f5b-88ba-55c64326de6f%2Fimage.png?table=block&amp;amp;id=fbdcdc04-0892-835f-a8ce-81e7ede442c7&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F512f44ab-0dea-474d-8388-f66e9adced08%2Fimage.png?table=block&amp;amp;id=2e4cdc04-0892-8254-af4c-01d26057c830&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F512f44ab-0dea-474d-8388-f66e9adced08%2Fimage.png?table=block&amp;amp;id=2e4cdc04-0892-8254-af4c-01d26057c830&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;h2 id=&quot;&quot;&gt;彩绘阶梯&lt;/h2&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F7e0f5187-23a5-4553-b16c-98897f1041d1%2Fimage.png?table=block&amp;amp;id=739cdc04-0892-82cd-ad77-817a31505592&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F7e0f5187-23a5-4553-b16c-98897f1041d1%2Fimage.png?table=block&amp;amp;id=739cdc04-0892-82cd-ad77-817a31505592&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;h2 id=&quot;&quot;&gt;沙大钟楼&lt;/h2&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F28bc28cd-c8dd-4bac-b41b-0f018160e697%2Fimage.png?table=block&amp;amp;id=dbfcdc04-0892-8243-a00d-017dfec3a5a9&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F28bc28cd-c8dd-4bac-b41b-0f018160e697%2Fimage.png?table=block&amp;amp;id=dbfcdc04-0892-8243-a00d-017dfec3a5a9&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;h2 id=&quot;&quot;&gt;粉红清真寺&lt;/h2&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F329e69da-4fcc-4940-a4c2-8b2e105ccd93%2Fimage.png?table=block&amp;amp;id=95ecdc04-0892-82c3-96e5-01ba0d531e60&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F329e69da-4fcc-4940-a4c2-8b2e105ccd93%2Fimage.png?table=block&amp;amp;id=95ecdc04-0892-82c3-96e5-01ba0d531e60&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;h1 id=&quot;0x04-&quot;&gt;0x04 神山一日游&lt;/h1&gt;
&lt;p&gt;在飞猪上报的团，250RMB 每人；跳岛跳累了、或者不喜欢潜水的可以来，有机会看到大王花。&lt;/p&gt;
&lt;h2 id=&quot;&quot;&gt;早餐&lt;/h2&gt;
&lt;p&gt;上山先吃一顿早茶。&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb35d8508-2028-4001-80ae-80510349638d%2Fimage.png?table=block&amp;amp;id=e5fcdc04-0892-8365-8e36-816d42e61f0a&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.940385;&quot; data-aspect-ratio=&quot;1.940385&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb35d8508-2028-4001-80ae-80510349638d%2Fimage.png?table=block&amp;amp;id=e5fcdc04-0892-8365-8e36-816d42e61f0a&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb7116a9b-beb7-4906-b539-7c3489c1cf34%2Fimage.png?table=block&amp;amp;id=b7bcdc04-0892-825f-b159-8130db5b53d9&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb7116a9b-beb7-4906-b539-7c3489c1cf34%2Fimage.png?table=block&amp;amp;id=b7bcdc04-0892-825f-b159-8130db5b53d9&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fbe8a6031-e8bf-495f-a5ad-248c012dcc11%2Fimage.png?table=block&amp;amp;id=d60cdc04-0892-8376-acb1-81ef1e660866&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fbe8a6031-e8bf-495f-a5ad-248c012dcc11%2Fimage.png?table=block&amp;amp;id=d60cdc04-0892-8376-acb1-81ef1e660866&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fdb841d6d-6af1-46bc-be13-f51affff0476%2Fimage.png?table=block&amp;amp;id=e59cdc04-0892-82fb-bc05-01359a8211b8&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fdb841d6d-6af1-46bc-be13-f51affff0476%2Fimage.png?table=block&amp;amp;id=e59cdc04-0892-82fb-bc05-01359a8211b8&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;h2 id=&quot;&quot;&gt;神山观景台&lt;/h2&gt;
&lt;p&gt;早茶后到达观景台停留40分钟。&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F83bff522-77e6-4e68-9074-f9e0340e79d4%2Fimage.png?table=block&amp;amp;id=dcbcdc04-0892-839e-9bcc-81aad5a948e8&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 2.181818;&quot; data-aspect-ratio=&quot;2.181818&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F83bff522-77e6-4e68-9074-f9e0340e79d4%2Fimage.png?table=block&amp;amp;id=dcbcdc04-0892-839e-9bcc-81aad5a948e8&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0967ab0e-3b7d-455d-94ef-b829c343f439%2Fimage.png?table=block&amp;amp;id=ddfcdc04-0892-8212-acee-818bdf53f490&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0967ab0e-3b7d-455d-94ef-b829c343f439%2Fimage.png?table=block&amp;amp;id=ddfcdc04-0892-8212-acee-818bdf53f490&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fdc22a8a8-627f-42e1-8675-2e6ca4d99f65%2Fimage.png?table=block&amp;amp;id=60bcdc04-0892-821e-b043-01fd7430642c&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fdc22a8a8-627f-42e1-8675-2e6ca4d99f65%2Fimage.png?table=block&amp;amp;id=60bcdc04-0892-821e-b043-01fd7430642c&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F2195af85-8d9f-497b-9ccf-5b98ae9182c3%2Fimage.png?table=block&amp;amp;id=301cdc04-0892-8325-bc17-81c7f25d85d3&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F2195af85-8d9f-497b-9ccf-5b98ae9182c3%2Fimage.png?table=block&amp;amp;id=301cdc04-0892-8325-bc17-81c7f25d85d3&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;h2 id=&quot;&quot;&gt;奶牛牧场&lt;/h2&gt;
&lt;p&gt;现代科技奶牛牧场，海拔1500米，里面自带BGM和鸟叫声非常惬意。&lt;/p&gt;
&lt;p&gt;还有店铺可以买冰淇淋。&lt;/p&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb73b977d-2d8b-4b3b-8d71-55dbef4f39b3%2Fimage.png?table=block&amp;amp;id=cbfcdc04-0892-8320-a185-8165e42cb230&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb73b977d-2d8b-4b3b-8d71-55dbef4f39b3%2Fimage.png?table=block&amp;amp;id=cbfcdc04-0892-8320-a185-8165e42cb230&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fc931440f-3e9c-4fe0-838f-245cd185c40f%2Fimage.png?table=block&amp;amp;id=8cdcdc04-0892-8349-9b75-81f671fee9f6&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;牛牛的食物&quot; data-title=&quot;牛牛的食物&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fc931440f-3e9c-4fe0-838f-245cd185c40f%2Fimage.png?table=block&amp;amp;id=8cdcdc04-0892-8349-9b75-81f671fee9f6&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;牛牛的食物&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;牛牛的食物&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fa5e56a25-b2ef-45a7-879f-1a514077af45%2Fimage.png?table=block&amp;amp;id=bfccdc04-0892-8311-8179-012487a17db8&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fa5e56a25-b2ef-45a7-879f-1a514077af45%2Fimage.png?table=block&amp;amp;id=bfccdc04-0892-8311-8179-012487a17db8&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F9a1dcf92-b663-4a0d-9589-878ca3c46cc1%2Fimage.png?table=block&amp;amp;id=306cdc04-0892-8370-87cf-01461875b2b4&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F9a1dcf92-b663-4a0d-9589-878ca3c46cc1%2Fimage.png?table=block&amp;amp;id=306cdc04-0892-8370-87cf-01461875b2b4&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 31.25%; --column-width: 31.25%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fc7088c8c-0b40-4a65-8059-f4ce27263c16%2Fimage.png?table=block&amp;amp;id=b28cdc04-0892-8332-8a84-81e86cff5c65&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;原味酸奶冰淇淋&quot; data-title=&quot;原味酸奶冰淇淋&quot; style=&quot;aspect-ratio: 0.862969;&quot; data-aspect-ratio=&quot;0.862969&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fc7088c8c-0b40-4a65-8059-f4ce27263c16%2Fimage.png?table=block&amp;amp;id=b28cdc04-0892-8332-8a84-81e86cff5c65&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;原味酸奶冰淇淋&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;原味酸奶冰淇淋&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 68.75%; --column-width: 68.75%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F28f785cd-7cb0-41b6-bb59-13faab2c6de8%2Fimage.png?table=block&amp;amp;id=c4ecdc04-0892-8260-acbc-81245dc20740&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F28f785cd-7cb0-41b6-bb59-13faab2c6de8%2Fimage.png?table=block&amp;amp;id=c4ecdc04-0892-8260-acbc-81245dc20740&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;h2 id=&quot;&quot;&gt;大王花&lt;/h2&gt;
&lt;p&gt;从牧场到这里需要很久，路上很颠。&lt;/p&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F4597a9a1-b8c0-4105-9afb-88c9810ffd43%2Fimage.png?table=block&amp;amp;id=b1fcdc04-0892-830b-b033-81027fc04bce&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 2.314516;&quot; data-aspect-ratio=&quot;2.314516&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F4597a9a1-b8c0-4105-9afb-88c9810ffd43%2Fimage.png?table=block&amp;amp;id=b1fcdc04-0892-830b-b033-81027fc04bce&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F7f54ca58-bb6f-45c0-82dd-b4c3ef467308%2Fimage.png?table=block&amp;amp;id=538cdc04-0892-83be-8b82-0125acea494c&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F7f54ca58-bb6f-45c0-82dd-b4c3ef467308%2Fimage.png?table=block&amp;amp;id=538cdc04-0892-83be-8b82-0125acea494c&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb9196a60-d402-46f8-8d62-f8021326dfed%2Fimage.png?table=block&amp;amp;id=30acdc04-0892-8359-beb8-8126dfd630b5&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb9196a60-d402-46f8-8d62-f8021326dfed%2Fimage.png?table=block&amp;amp;id=30acdc04-0892-8359-beb8-8126dfd630b5&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fa7a2d280-30af-4f24-9d1b-6978a4c48bc7%2Fimage.png?table=block&amp;amp;id=a69cdc04-0892-8277-bf6d-81d91e3aaa95&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;凋零的大王花&quot; data-title=&quot;凋零的大王花&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fa7a2d280-30af-4f24-9d1b-6978a4c48bc7%2Fimage.png?table=block&amp;amp;id=a69cdc04-0892-8277-bf6d-81d91e3aaa95&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;凋零的大王花&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;凋零的大王花&lt;/figcaption&gt;
    &lt;/figure&gt;
&lt;h2 id=&quot;&quot;&gt;鱼&lt;/h2&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F40fd9ec8-3830-41ab-a974-07859e091970%2Fimage.png?table=block&amp;amp;id=f64cdc04-0892-829b-a0f2-01616d14ec2e&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F40fd9ec8-3830-41ab-a974-07859e091970%2Fimage.png?table=block&amp;amp;id=f64cdc04-0892-829b-a0f2-01616d14ec2e&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fc1b5faa2-2611-4dc5-accb-ec77595a98dc%2Fimage.png?table=block&amp;amp;id=c1bcdc04-0892-82fc-a6f6-81df41fbcdf4&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 2.312757;&quot; data-aspect-ratio=&quot;2.312757&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fc1b5faa2-2611-4dc5-accb-ec77595a98dc%2Fimage.png?table=block&amp;amp;id=c1bcdc04-0892-82fc-a6f6-81df41fbcdf4&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;就是在一条小溪里面喂鱼（说是Fish Spa），里面的鱼很大。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;h2 id=&quot;&quot;&gt;夜市&lt;/h2&gt;
&lt;p&gt;加雅街(Gaya Street) 每个星期五和六晚上都有夜市，很热闹。&lt;/p&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 528px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F46ce9c16-1087-4277-86c7-da3bf0bac661%2Fimage.png?table=block&amp;amp;id=e3ecdc04-0892-8253-99ff-01ef17eef08f&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;印尼菜&quot; data-title=&quot;印尼菜&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F46ce9c16-1087-4277-86c7-da3bf0bac661%2Fimage.png?table=block&amp;amp;id=e3ecdc04-0892-8253-99ff-01ef17eef08f&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;印尼菜&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;印尼菜&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0489de16-fdc3-4163-8a9a-2a32deaaf595%2Fimage.png?table=block&amp;amp;id=841cdc04-0892-8323-911d-81f68b63a5d7&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0489de16-fdc3-4163-8a9a-2a32deaaf595%2Fimage.png?table=block&amp;amp;id=841cdc04-0892-8323-911d-81f68b63a5d7&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;和神山团认识的一个一人gap旅行的女生一起吃了印尼晚餐，后面去了榴莲街。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;h1 id=&quot;0x05-&quot;&gt;0x05 无尽等待的归途&lt;/h1&gt;
&lt;p&gt;晚上的飞机，由于没有其他的行程了，所以基本上一天都是在机场度过的。（第一次没经验，下次旅行时肯定不会这样安排了🥱）&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F356dd480-8acf-4672-8183-9ee0f2ba26cf%2Fimage.png?table=block&amp;amp;id=9b9cdc04-0892-82fc-bc1b-81e0242ebc95&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F356dd480-8acf-4672-8183-9ee0f2ba26cf%2Fimage.png?table=block&amp;amp;id=9b9cdc04-0892-82fc-bc1b-81e0242ebc95&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;h2 id=&quot;&quot;&gt;等待与等待…&lt;/h2&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F187c96e2-c738-41c6-83fb-2e1bdd986122%2Fimage.png?table=block&amp;amp;id=04ecdc04-0892-83d4-a66d-01c2676ba147&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F187c96e2-c738-41c6-83fb-2e1bdd986122%2Fimage.png?table=block&amp;amp;id=04ecdc04-0892-83d4-a66d-01c2676ba147&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F43226062-2d8b-4685-885b-951c4355ea3c%2Fimage.png?table=block&amp;amp;id=d67cdc04-0892-83c4-a7bd-81cd31d5b89a&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F43226062-2d8b-4685-885b-951c4355ea3c%2Fimage.png?table=block&amp;amp;id=d67cdc04-0892-83c4-a7bd-81cd31d5b89a&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;机场星巴克出示机票可以打折。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;h2 id=&quot;&quot;&gt;旅途的终结&lt;/h2&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 62.50%; --column-width: 62.50%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F24238c09-e838-47ef-a7d2-c610b6d47014%2Fimage.png?table=block&amp;amp;id=117cdc04-0892-834c-8908-81616c2b0f21&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F24238c09-e838-47ef-a7d2-c610b6d47014%2Fimage.png?table=block&amp;amp;id=117cdc04-0892-834c-8908-81616c2b0f21&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 37.50%; --column-width: 37.50%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center&quot; style=&quot;max-width: 240px;&quot;&gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F68b79a71-667e-4436-a140-812b23a51ab8%2Fimage.png?table=block&amp;amp;id=72ccdc04-0892-8322-bea9-810077ce49ce&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;巡航高度9800米&quot; data-title=&quot;巡航高度9800米&quot; style=&quot;aspect-ratio: 0.454928;&quot; data-aspect-ratio=&quot;0.454928&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F68b79a71-667e-4436-a140-812b23a51ab8%2Fimage.png?table=block&amp;amp;id=72ccdc04-0892-8322-bea9-810077ce49ce&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;巡航高度9800米&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      &lt;figcaption&gt;巡航高度9800米&lt;/figcaption&gt;
    &lt;/figure&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;p&gt;回程的飞机往菲律宾方向绕了200公里，顺利落地白云机场。&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;一些经验&lt;/h1&gt;
&lt;h2 id=&quot;app&quot;&gt;APP的使用&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;地图
&lt;ul&gt;
&lt;li&gt;Google Maps&lt;/li&gt;
&lt;li&gt;高德地图
&lt;ul&gt;
&lt;li&gt;有些店铺只有这里有标明&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;天气预报
&lt;ul&gt;
&lt;li&gt;Windy&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;打车软件
&lt;ul&gt;
&lt;li&gt;Grab
&lt;ul&gt;
&lt;li&gt;可以绑定支付宝&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;支付
&lt;ul&gt;
&lt;li&gt;支付宝&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;&quot;&gt;一些小物品&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;手机挂绳
&lt;ul&gt;
&lt;li&gt;可以把手机挂脖子上，释放双手&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;手机防水袋
&lt;ul&gt;
&lt;li&gt;一定要买质量好的&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;拖鞋
&lt;ul&gt;
&lt;li&gt;跳岛必备&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;&quot;&gt;附图&lt;/h1&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0b259dbc-c6eb-4461-9bee-0b0d5f0bee3e%2Fimage.png?table=block&amp;amp;id=187cdc04-0892-8392-8797-01c8916d8229&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0b259dbc-c6eb-4461-9bee-0b0d5f0bee3e%2Fimage.png?table=block&amp;amp;id=187cdc04-0892-8392-8797-01c8916d8229&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F72a84ac5-3e4d-4a62-97e0-2bb8e2e7632f%2Fimage.png?table=block&amp;amp;id=8cecdc04-0892-82fb-be17-013da177c082&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F72a84ac5-3e4d-4a62-97e0-2bb8e2e7632f%2Fimage.png?table=block&amp;amp;id=8cecdc04-0892-82fb-be17-013da177c082&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fd5438b1b-b2d9-4ba9-a0d9-d6e725c74807%2Fimage.png?table=block&amp;amp;id=37acdc04-0892-8340-8388-8144bbfc8ea3&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.332149;&quot; data-aspect-ratio=&quot;1.332149&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fd5438b1b-b2d9-4ba9-a0d9-d6e725c74807%2Fimage.png?table=block&amp;amp;id=37acdc04-0892-8340-8388-8144bbfc8ea3&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F4327271d-e7e6-42c4-97f2-c514bfc3a117%2Fimage.png?table=block&amp;amp;id=370cdc04-0892-82fc-b40f-01ccb7362c99&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 0.750000;&quot; data-aspect-ratio=&quot;0.750000&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F4327271d-e7e6-42c4-97f2-c514bfc3a117%2Fimage.png?table=block&amp;amp;id=370cdc04-0892-82fc-b40f-01ccb7362c99&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Ffd648029-d7a6-43a8-9116-db7b6b251c57%2Fimage.png?table=block&amp;amp;id=380cdc04-0892-82b7-ada7-01a23ffb78f8&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.333333;&quot; data-aspect-ratio=&quot;1.333333&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Ffd648029-d7a6-43a8-9116-db7b6b251c57%2Fimage.png?table=block&amp;amp;id=380cdc04-0892-82b7-ada7-01a23ffb78f8&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;</content:encoded><category>旅游</category></item><item><title>rCore 三阶段学习总结</title><link>https://www.kanoverse.com/post/rcore-lab-summary</link><guid isPermaLink="true">https://www.kanoverse.com/post/rcore-lab-summary</guid><pubDate>Sat, 24 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;&quot;&gt;&lt;strong&gt;前言&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;本人没有 408 基础，之前仅仅是有过 CRUD 的经验，但是对各种底层很感兴趣，最近考试结束正好有时间参加训练营。索性接受了大佬的邀约（毕竟以后也是要做的）。&lt;/p&gt;
&lt;h1 id=&quot;rust-&quot;&gt;&lt;strong&gt;Rust 学习总结&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;本阶段用时 3 天（其中耗时最久的应该是 &lt;strong&gt;链表&lt;/strong&gt; 这道题）。&lt;/p&gt;
&lt;p&gt;之前没有接触过 Rust，但是有 C/C++ 等语言的学习经验，对内存复制操作比较敏感，所以这个阶段还是挺简单的。主要学习所有权、生命周期等核心概念，写完代码后依靠编译器纠错然后修改，编译通过后代码基本都可以跑通。&lt;/p&gt;
&lt;p&gt;对于 OS 开发来说，Rust 中的 &lt;code&gt;core&lt;/code&gt; 模块十分关键。下面列举了一些常用的 API：&lt;/p&gt;
&lt;h2 id=&quot;coreptr&quot;&gt;&lt;code&gt;&lt;strong&gt;core::ptr&lt;/strong&gt;&lt;/code&gt;&lt;/h2&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Rust&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;use core::ptr;

// 安全的内存拷贝（不重叠区域）
ptr::copy_nonoverlapping(src: *const T, dst: *mut T, count: usize);

// 安全的内存拷贝（允许重叠区域）
ptr::copy(src: *const T, dst: *mut T, count: usize);

// 内存设置
ptr::write(dst: *mut T, src: T);      // 写入单个值
ptr::write_bytes(dst: *mut u8, val: u8, count: usize); // memset

// 内存读取
let value = ptr::read(src: *const T); // 读取单个值

// 指针偏移
let new_ptr = ptr.offset(count: isize);
let new_ptr = ptr.wrapping_offset(count: isize);&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;
&lt;hr class=&quot;notion-divider&quot; /&gt;
&lt;h2 id=&quot;coremem&quot;&gt;&lt;code&gt;&lt;strong&gt;core::mem&lt;/strong&gt;&lt;/code&gt;&lt;/h2&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Rust&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;use core::mem;

mem::size_of::&amp;lt;T&amp;gt;();       // 获取类型大小
mem::align_of::&amp;lt;T&amp;gt;();      // 获取类型对齐要求
mem::replace(dest: &amp;amp;mut T, src: T) -&amp;gt; T; // 替换值
mem::swap(x: &amp;amp;mut T, y: &amp;amp;mut T);    // 交换值&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;
&lt;hr class=&quot;notion-divider&quot; /&gt;
&lt;h2 id=&quot;coreslice&quot;&gt;&lt;code&gt;&lt;strong&gt;core::slice&lt;/strong&gt;&lt;/code&gt;&lt;/h2&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Rust&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;// 从原始指针创建切片（不安全）
unsafe {
    let slice = core::slice::from_raw_parts(ptr: *const T, len: usize);
    let mut_slice = core::slice::from_raw_parts_mut(ptr: *mut T, len: usize);
}

// 切片操作
slice.as_ptr();
slice.len();
slice.get(index);  // 边界检查访问
slice.copy_from_slice(src);  // 安全拷贝&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;
&lt;hr class=&quot;notion-divider&quot; /&gt;
&lt;h1 id=&quot;rcore-&quot;&gt;&lt;strong&gt;rCore 学习总结&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;本阶段用时 50+ 小时。&lt;/p&gt;
&lt;p&gt;rCore 主要基于 RISC-V 架构体系开发了一个单核的操作系统内核。这部分需要学习 RISC-V 的各种寄存器、机器启动引导、内核与应用的内存布局等。&lt;/p&gt;
&lt;p&gt;由于缺少太多的前置知识，所以都是一边做 Lab，然后遇到不会的就问 AI。从一开始不知道 Trap 是什么，到最后完成最后一个小实验，感觉还是挺不错的（效率很高，不过这个过程中我很有可能接触到了很多“幻觉”知识）。所以在未来的学习中，我应该会用多个 AI 交叉验证，并结合浏览官方文档等方式进行确认。&lt;/p&gt;
&lt;p&gt;主要收获在第五（进程管理）、六（文件系统）、八（并发控制）章节。&lt;/p&gt;
&lt;p&gt;第六章一开始根据实验手册没有看懂具体实现，结合 OSTEP 后很快就上手了。&lt;/p&gt;
&lt;p&gt;第八章需要实现一个 Deadlock Detection 算法。根据手册的实现，我以为是一个银行家算法（Deadlock Avoidance），所以很长一段时间都没有明白 &lt;code&gt;Need&lt;/code&gt; 矩阵的作用。（但这也使我在查找资料的过程中，学习到了更多 Deadlock Detection 算法，也算是有所收获。）&lt;/p&gt;
&lt;h1 id=&quot;arceos-&quot;&gt;&lt;strong&gt;ArceOS 学习总结&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;本阶段用时 30+ 小时。&lt;/p&gt;
&lt;p&gt;ArceOS 的六个实验都很简单，主要是学习 ArceOS 的各种设计（如通过 &lt;code&gt;linkme&lt;/code&gt; 库、&lt;code&gt;TaskExt&lt;/code&gt; 结构体解耦），以及更深入内核的高级特性（如 Hypervisor、兼容 Linux 的宏内核等），为了第四阶段做准备。&lt;/p&gt;
&lt;p&gt;我认为将 OS 各个模块解耦的方法，以及代码的结构和设计模式等，都很值得学习。&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;附录&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://rcore-os.cn/blog/2025/05/24/rCore-%E4%B8%89%E9%98%B6%E6%AE%B5%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93-Nzzz964/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;</content:encoded><category>Lab</category><category>Linux</category></item><item><title>Neovim/LazyVim 使用指南</title><link>https://www.kanoverse.com/post/neovim-lazyvim-guide</link><guid isPermaLink="true">https://www.kanoverse.com/post/neovim-lazyvim-guide</guid><description>在 2020 年时间我就接触了 Neovim，在这一段时间，我一直使用的是 </description><pubDate>Mon, 14 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在 2020 年时间我就接触了 Neovim，在这一段时间，我一直使用的是 &lt;a href=&quot;https://github.com/neoclide/coc.nvim&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;coc.nvim&lt;/a&gt;，coc.nvim 陪我度过了我成长的时期。也许是因为换回了 windows 系统，并且 windows 系统下的 terminal 真的很不好用，所以这几年就没有怎么用过 Vim 了。我很喜欢 Vim 哲学和 Vim 的键盘体验 &lt;del&gt;也很喜欢 VsCode&lt;/del&gt;。&lt;/p&gt;
&lt;p&gt;在这几年之间我也陆续看到类似于 NvChad、LunarVim、&lt;a href=&quot;https://astronvim.com/#&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AstroNvim&lt;/a&gt;、&lt;a href=&quot;https://www.lazyvim.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;LazyVim&lt;/a&gt; 等 Neovim distros，本文作为重返 Neovim 的记录。&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;重拾配置&lt;/h1&gt;
&lt;p&gt;我的 GitHub 仓库中一直保留着我的 Neovim 配置，当时使用的配置如下：&lt;/p&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Shell&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;&amp;quot; 插件设置
call plug#begin(&amp;#039;~/AppData/Local/nvim/plugged&amp;#039;)

Plug &amp;#039;neoclide/coc.nvim&amp;#039;, {&amp;#039;branch&amp;#039;: &amp;#039;release&amp;#039;}

Plug &amp;#039;luochen1990/rainbow&amp;#039;
Plug &amp;#039;Yggdroot/indentLine&amp;#039;

Plug &amp;#039;junegunn/fzf&amp;#039;, { &amp;#039;do&amp;#039;: { -&amp;gt; fzf#install() } }

Plug &amp;#039;vim-airline/vim-airline&amp;#039;
Plug &amp;#039;vim-airline/vim-airline-themes&amp;#039;

Plug &amp;#039;connorholyday/vim-snazzy&amp;#039;

call plug#end()

&amp;quot; coc.nvim 配置
let g:coc_global_extensions = [
            \ &amp;#039;coc-json&amp;#039;,
            \ &amp;#039;coc-marketplace&amp;#039;,
            \ &amp;#039;coc-spell-checker&amp;#039;,
            \ &amp;#039;coc-html&amp;#039;,
            \ &amp;#039;coc-pairs&amp;#039;,
            \ &amp;#039;coc-emmet&amp;#039;,
            \ &amp;#039;coc-css&amp;#039;,
            \ &amp;#039;coc-eslint&amp;#039;,
            \ &amp;#039;coc-vetur&amp;#039;,
            \ &amp;#039;coc-tsserver&amp;#039;,
            \ &amp;#039;coc-explorer&amp;#039;,
            \ &amp;#039;coc-lists&amp;#039;,
            \ &amp;#039;coc-vimlsp&amp;#039;]
&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;
&lt;p&gt;其中最核心的插件是 coc.nvim，它也相当于一个插件系统（&lt;del&gt;用插件管理器安装插件管理器&lt;/del&gt;），coc.nvim 的目标是 &lt;code&gt;Make your Vim/Neovim as smart as VS Code&lt;/code&gt; 。&lt;/p&gt;
&lt;div class=&quot;notion-column-list&quot;&gt;
      &lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0af95488-1cde-4510-902e-48852deb2725%2Fimage.png?table=block&amp;amp;id=df7cdc04-0892-82e0-82ee-817ac8dcfa44&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.386104;&quot; data-aspect-ratio=&quot;1.386104&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0af95488-1cde-4510-902e-48852deb2725%2Fimage.png?table=block&amp;amp;id=df7cdc04-0892-82e0-82ee-817ac8dcfa44&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
&lt;div class=&quot;notion-column&quot; style=&quot;--column-flex: 0 0 50.00%; --column-width: 50.00%;&quot;&gt;
      &lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb98e8132-910a-49e9-99f1-fb814e384347%2Fimage.png?table=block&amp;amp;id=0bbcdc04-0892-82d0-870b-81d726ac1f7d&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.386104;&quot; data-aspect-ratio=&quot;1.386104&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb98e8132-910a-49e9-99f1-fb814e384347%2Fimage.png?table=block&amp;amp;id=0bbcdc04-0892-82d0-870b-81d726ac1f7d&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;随着 Neovim 社区的发展，有很多懒人包被开发了出来，像是 23 年出来的 LazyVim 的涨星速度比同类的开源项目都要快。于是我尝试了一下 LazyVim 果断抛弃了 coc.nvim。&lt;/p&gt;
&lt;p&gt;为什么不继续使用 coc.nvim 了？&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;coc.nvim 需要 Node.js 依赖。&lt;/li&gt;
&lt;li&gt;coc.nvim 不够懒，没有针对 coc.nvim 所开发的 Neovim distros。&lt;/li&gt;
&lt;li&gt;nvim 的插件系统已经可以完全替代 coc.nvim 了。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&quot;lazyvim-&quot;&gt;LazyVim 的安装&lt;/h1&gt;
&lt;p&gt;直接将懒人模板克隆到 nvim 配置目录就可以了。&lt;/p&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Shell&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;git clone https://github.com/LazyVim/starter ~/.config/nvim&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;
&lt;h2 id=&quot;lazyvim-&quot;&gt;LazyVim 的使用&lt;/h2&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F33e48774-37b5-4bf2-99aa-55ae2dd241ad%2Fimage.png?table=block&amp;amp;id=974cdc04-0892-825c-82ca-817d4b765b0c&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 1.697823;&quot; data-aspect-ratio=&quot;1.697823&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F33e48774-37b5-4bf2-99aa-55ae2dd241ad%2Fimage.png?table=block&amp;amp;id=974cdc04-0892-825c-82ca-817d4b765b0c&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;打开 Neovim，输入 &lt;code&gt;:Lazy&lt;/code&gt; 就可以进入 LazyVim 的管理面板，这里可以看到已经安装好的插件、插件是否有更新等等。&lt;/p&gt;
&lt;p&gt;LazyVim starter template（懒人模板）默认帮你安装了&lt;a href=&quot;https://www.lazyvim.org/plugins&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;这些插件&lt;/a&gt;。注意不要被 &lt;a href=&quot;https://www.lazyvim.org/keymaps&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Keymaps&lt;/a&gt; 所误导，Keymaps 是 LazyVim 提供的所有插件的快捷键速览（包括非默认安装的插件，也就是 LazyVim Extras 扩展插件等）。&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;编程语言支持&lt;/h1&gt;
&lt;p&gt;LazyVim starter template 还提供了扩展配置（LazyVim Extras），LazyVim Extras 其实是一组插件的集合（这和 VsCode 中的 Extension Pack 是一样的），这其中包括了依赖管理、提供了默认配置等功能。&lt;/p&gt;
&lt;p&gt;比如我需要安装 Python 环境的支持， 输入 &lt;code&gt;:LazyExtras&lt;/code&gt; 然后找到 &lt;code&gt;lang.python&lt;/code&gt; 就可以一键安装 Python 开发所需要的一系列扩展。具体的实现可以查看 &lt;a href=&quot;https://github.com/LazyVim/LazyVim/tree/main/lua/LazyVim/plugins/extras&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;LazyVim Extras 的源码&lt;/a&gt;。&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;自定义配置&lt;/h1&gt;
&lt;h2 id=&quot;plugins&quot;&gt;Plugins&lt;/h2&gt;
&lt;p&gt;通过 LazyExtras 安装 Python 语言支持，发现 venv-selector 无法找到 miniconda 的虚拟环境。&lt;/p&gt;
&lt;div class=&quot;notion-code-block&quot;&gt;
      
      &lt;div class=&quot;notion-code-header&quot;&gt;
        &lt;span class=&quot;notion-code-language&quot;&gt;Lua&lt;/span&gt;
        &lt;button class=&quot;notion-code-copy&quot; title=&quot;复制代码&quot; aria-label=&quot;复制代码&quot;&gt;
          &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
            &lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
            &lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;
          &lt;/svg&gt;
          &lt;span class=&quot;copy-text&quot;&gt;COPY&lt;/span&gt;
        &lt;/button&gt;
      &lt;/div&gt;
    
      &lt;pre class=&quot;notion-code&quot;&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &amp;quot;linux-cultist/venv-selector.nvim&amp;quot;,
    branch = &amp;quot;regexp&amp;quot;, -- Use this branch for the new version
    cmd = &amp;quot;VenvSelect&amp;quot;,
    enabled = function()
      return LazyVim.has(&amp;quot;telescope.nvim&amp;quot;)
    end,
    opts = {
      settings = {
        options = {
          notify_user_on_venv_activation = true,
        },
      },
    },
    --  Call config for python files and load the cached venv automatically
    ft = &amp;quot;python&amp;quot;,
    keys = { { &amp;quot;&amp;lt;leader&amp;gt;cv&amp;quot;, &amp;quot;&amp;lt;cmd&amp;gt;:VenvSelect&amp;lt;cr&amp;gt;&amp;quot;, desc = &amp;quot;Select VirtualEnv&amp;quot;, ft = &amp;quot;python&amp;quot; } },
  },&lt;/code&gt;&lt;/pre&gt;
      
    &lt;/div&gt;
&lt;p&gt;查看源码我们可以发现，LazyVim 默认使用的是 venv-selector.nvim 中的 regexp 分支。于是我们到 Github 查看这个分支看到了 &lt;a href=&quot;https://github.com/linux-cultist/venv-selector.nvim/tree/regexp?tab=readme-ov-file#my-venvs-dont-show-up---how-can-i-create-my-own-search&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;My venvs dont show up - how can i create my own search?&lt;/a&gt; ，根据 README 在 &lt;code&gt;~/.config/nvim/lua/plugins&lt;/code&gt; 下面新建一个 &lt;code&gt;venv-selector&lt;/code&gt; 的配置即可，LazyVim 会自动的将配置文件 Merge，所以不用担心你会修改到 LazyVim 的默认配置！&lt;/p&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0f6f71b4-1462-4f89-8a82-912c09b35b3b%2Fimage.png?table=block&amp;amp;id=3d2cdc04-0892-8330-8b3e-81c1117eee80&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 3.125348;&quot; data-aspect-ratio=&quot;3.125348&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0f6f71b4-1462-4f89-8a82-912c09b35b3b%2Fimage.png?table=block&amp;amp;id=3d2cdc04-0892-8330-8b3e-81c1117eee80&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;h2 id=&quot;&quot;&gt;按键映射&lt;/h2&gt;
&lt;figure class=&quot;notion-image notion-image-center notion-image-page-width&quot; &gt;
      &lt;a href=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F91b2d431-0706-44b2-9724-a174a1f5b406%2Fimage.png?table=block&amp;amp;id=b63cdc04-0892-82d7-838e-8194f63e9874&quot; class=&quot;glightbox&quot; data-gallery=&quot;article-images&quot; data-description=&quot;&quot; data-title=&quot;Image&quot; style=&quot;aspect-ratio: 3.742210;&quot; data-aspect-ratio=&quot;3.742210&quot;&gt;
        &lt;img src=&quot;https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F91b2d431-0706-44b2-9724-a174a1f5b406%2Fimage.png?table=block&amp;amp;id=b63cdc04-0892-82d7-838e-8194f63e9874&amp;amp;cache=v2&amp;amp;width=1400&quot; alt=&quot;Image&quot; loading=&quot;lazy&quot; onload=&quot;const ratio=this.naturalWidth/this.naturalHeight;this.parentElement.style.aspectRatio=ratio.toFixed(6);this.parentElement.setAttribute(&apos;data-aspect-ratio&apos;,ratio.toFixed(6));this.parentElement.classList.add(&apos;loaded&apos;)&quot; /&gt;
      &lt;/a&gt;
      
    &lt;/figure&gt;
&lt;p&gt;修改按键映射也很简单，在 &lt;code&gt;~/.config/nvim/lua/config/keymaps.lua&lt;/code&gt; 添加自己的配置即可。&lt;/p&gt;
&lt;h1 id=&quot;&quot;&gt;继续探索吧&lt;/h1&gt;
&lt;p&gt;想要更好的使用 Neovim 当然还需要熟悉 LazyVim 帮你安装的各类默认插件是干嘛的，了解 Vim/Neovim 圈子的生态等等，这都是值得花一番时间去学习的。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;</content:encoded><category>Linux</category></item></channel></rss>