PageSourceSearch

https://wingu.se/2026/06/14/hawaii.html

html wingu.se collected 2026-09-29 15:08:36 UTC 35,943 bytes, 374 lines download raw bytes

1<!DOCTYPE html><html><head>
2<meta charset="utf-8">
3<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
4<meta name="generator" content="Observable Framework v1.13.4">
5<title>夏威夷流水账 | Yingyu Pages</title>
6<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
7<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900&amp;display=swap" crossorigin="">
8<link rel="preload" as="style" href="../../../_observablehq/theme-air,near-midnight.b050d634.css">
9<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900&amp;display=swap" crossorigin="">
10<link rel="stylesheet" type="text/css" href="../../../_observablehq/theme-air,near-midnight.b050d634.css">
11<link rel="modulepreload" href="../../../_observablehq/client.3724cce3.js">
12<link rel="modulepreload" href="../../../_observablehq/runtime.607a8173.js">
13<link rel="modulepreload" href="../../../_observablehq/stdlib.277aeab8.js">
14
15  <link rel="icon" href="../../../_file/images/favicon.d88f8e9b.ico" type="image/ico" sizes="64x64">
16  <link rel="stylesheet" type="text/css" href="../../../_file/style/default.f67a1631.css">
17  <link rel="alternate" type="application/json" href="https://wingu.se/feed.json" title="Yingyu Pages JSON Feed">
18  <link rel="alternate" type="application/atom+xml" href="https://wingu.se/atom.xml" title="Yingyu Pages Atom Feed">
19  <link rel="alternate" type="application/rss+xml" href="https://wingu.se/rss.xml" title="Yingyu Pages RSS Feed">
20  <link rel="alternate" type="application/json" href="https://wingu.se/feed-en.json" title="Yingyu Pages JSON Feed (English)">
21  <link rel="alternate" type="application/atom+xml" href="https://wingu.se/atom-en.xml" title="Yingyu Pages Atom Feed (English)">
22  <link rel="alternate" type="application/rss+xml" href="https://wingu.se/rss-en.xml" title="Yingyu Pages RSS Feed (English)">
23  
23<script>
24    window.translationMap = {"/2010/08/25/sudoku-poj-2676-cpp-html-javascript-css":{"en":"Me and Sudoku — Starting from POJ2676","zh":"我和数独——从POJ2676说起"},"/2010/08/27/3-141592-pi-big-number-calculation":{"en":"A Small Program for Calculating Pi_Arbitrary-Precision Algorithm Practice","zh":"计算圆周率的小程序_高精度算法练习"},"/2010/08/28/internet-sharing-1-access":{"en":"Things About Network Sharing (1) — Shared Internet Access","zh":"网络共享那些事(一)——共享上网"},"/2010/09/11/number-of-stack-pop-catalan_number":{"en":"Stack Pop Count Problem (Catalan Numbers)","zh":"出栈数量问题(卡塔兰数)"},"/2010/12/01/the-maximum-bipartite-matching-problem-poj-1422":{"en":"Maximum Bipartite Matching Template","zh":"二分图最大匹配模板"},"/2011/10/20/cmd-help-generator":{"en":"Generating Help for CMD Commands","zh":"CMD命令帮助生成"},"/2011/11/21/data-you-send-in-http-request":{"en":"From a Developer's Perspective, What Do You Submit When You Open a Web Page","zh":"从开发者的角度,当你打开网页的时候,你提交了什么"},"/2012/02/09/thoughts":{"en":"Some Thoughts","zh":"小感触"},"/2012/03/08/shortest-path":{"en":"Shortest Path Topic","zh":"最短路专题"},"/2012/05/19/Bipartite-graph":{"en":"Bipartite Graph Topic","zh":"二分图专题"},"/2012/06/22/genetic-algorithm":{"en":"A Small Experiment with Genetic Algorithms","zh":"小试遗传算法"},"/2012/08/29/possibilities":{"en":"Obtaining a Uniform Probability Distribution from a Non-uniform Probability Distribution","zh":"从一个不平均概率分布获得一个平均的概率分布"},"/2012/12/15/k-th":{"en":"The k-th Number Topic","zh":"第k数专题"},"/2014/07/19/partition":{"en":"Number Theory and a Partition Strategy","zh":"数论和Partition策略"},"/2015/09/08/brain-storm":{"en":"Brainstorm","zh":"头脑风暴"},"/2016/05/16/useless-social":{"en":"Ineffective Socializing","zh":"无效社交"},"/2016/10/07/trip-to-xinjiang":{"en":"A Hike in Xinjiang","zh":"新疆徒步"},"/2016/11/13/trip-2-us":{"en":"Three Weeks in the Bay Area, 2016-10","zh":"2016-10 湾区的三周"},"/2017/02/26/high-dimensional-to-low-dimensional":{"en":"Projection of a High-Dimensional World onto a Low-Dimensional Plane","zh":"高维世界对低维平面的投影"},"/2017/03/11/to-the-utopia":{"en":"To Utopia","zh":"致乌托邦"}
24,"/2017/03/25/information-should-goes-freely":{"en":"Information Should Flow Freely","zh":"信息就应该自由流动"},"/2017/03/27/solution-to-meg-cap-problem-3":{"en":"MegCup Geek Challenge Problem 3","zh":"MegCup 极客挑战赛第三题"},"/2017/04/22/free-of-charge-is-the-most-expensive":{"en":"What Is Free Is the Most Expensive; You Can't Rely on Commercial Companies","zh":"免费的,才是最贵的,不能依赖商业公司"},"/2017/07/31/bathroom-thought":{"en":"Bathroom Thoughts","zh":"浴室沉思"},"/2017/08/31/dependency-injection-in-scala":{"en":"Reflection-based Dependency Injection in Scala","zh":"Scala 的反射依赖注入"},"/2017/09/24/jimei-software-engineer-homework-1-summary":{"en":"Summary of the First Homework for Jimei University Software Engineering","zh":"集美大学软件工程助教第一次作业小结"},"/2018/02/23/block-chain-learning":{"en":"Some Thoughts on Blockchain","zh":"区块链一点思考"},"/2018/03/11/openwrt-usb-wifi-wireguard-ipset-dnsmasq-iptables-route":{"en":"Open WRT / Wireguard / IPSet / Route","zh":"Open WRT / Wireguard / IPSet / Route"},"/2018/03/11/wireguard":{"en":"Wireguard Configuration Guide","zh":"Wireguard 配置指南"},"/2018/10/30/economic-reasoning":{"en":"Economic Model Deduction","zh":"经济模型演绎"},"/2019/08/25/Hong_Kong_anti-extradition_bill_protests":{"en":"Hong Kong's Movement Against the Extradition Bill Amendment","zh":"香港的反对《逃犯条例》修订草案运动"},"/2020/06/13/some-random-words":{"en":"Daily Rambling","zh":"日常唠叨"},"/2021/02/06/clubhouse":{"en":"Trying Out Clubhouse","zh":"Clubhouse 体验"},"/2021/06/14/xiaomi":{"en":"Notes on Tinkering with the Xiaomi 11 Pro","zh":"小米 11 Pro 折腾笔记"},"/2021/07/18/da-tong":{"en":"A Weekend in Datong","zh":"大同的周末"},"/2021/07/29/networking":{"en":"Misconceptions About Safe Internet Access","zh":"安全上网的迷思"},"/2023/04/21/dnat-source-in-source-out":{"en":"DNAT Preserving Client IP with Symmetric Routing","zh":"DNAT 保留客户端 IP 且源进源出"},"/2023/11/18/import-gpg-key-from-yubikey":{"en":"Import GPG Public Key from YubiKey","zh":"从 YubiKey 上导入 GPG public key"},"/2023/11/30/only-apple-can-do-allow-apps-tracking-users-location-without-consensus":{"en":"Apple allows applications to track user locations without authorization","zh":"苹果允许应用程序在未经授权的情况下追踪用户位置"},"/2024/10/16/podman-compose-bridge-network":{"en":"Setting Up a Podman Machine Bridge Network on macOS: A Step-by-Step Guide","zh":"在macOS上设置Podman虚拟机桥接网络:逐步指南"},"/2026/01/02/location-tracking-solution":{"en":"Changed Location Timeline Tool","zh":"换了位置时间线工具"},"/2026/06/14/hawaii":{"en":"Hawaii Journal","zh":"夏威夷流水账"},"/about":{"en":"About","zh":"About"},"/index":{"en":"Yingyu Pages","zh":"Yingyu Pages"}};
25    (function() {
26      const preferredLang = localStorage.getItem('lang') || (navigator.language.startsWith('zh') ? 'zh' : 'en');
27      const currentPath = window.location.pathname.replace(/\.html$/, '').replace(/\/$/, '');
28      const isEn = currentPath.endsWith('/en') || currentPath === '/en';
29      const currentLang = isEn ? 'en' : 'zh';
30
31      if (preferredLang !== currentLang) {
32        const basePath = isEn ? currentPath.slice(0, -3) : (currentPath === '' ? '/index' : currentPath);
33        const targetPath = preferredLang === 'en' ? (basePath + '/en') : (basePath === '/index' ? '/' : basePath);
34        if (window.translationMap[basePath] && window.translationMap[basePath][preferredLang]) {
35          window.location.href = (targetPath === '/' ? '/' : targetPath + '.html');
36        }
37      }
38
39      function updateSidebar() {
40        const isEn = window.location.pathname.replace(/\.html$/, '').endsWith('/en');
41        if (isEn) {
42          document.querySelectorAll('#observablehq-sidebar a').forEach(a => {
43            const href = a.pathname.replace(/\.html$/, '');
44            const base = href.endsWith('/en') ? href.slice(0, -3) : href;
45            if (window.translationMap[base] && window.translationMap[base].en) {
46              a.innerText = window.translationMap[base].en;
47              if (!a.pathname.includes('/en.html')) {
48                a.setAttribute('href', base + '/en.html');
49              }
50            }
51          });
52        }
53      }
54      document.addEventListener('DOMContentLoaded', updateSidebar);
55      // Also observe for sidebar changes (Observable Framework might re-render)
56      const observer = new MutationObserver(updateSidebar);
57      document.addEventListener('DOMContentLoaded', () => {
58        const sidebar = document.querySelector('#observablehq-sidebar');
59        if (sidebar) observer.observe(sidebar, { childList: true, subtree: true });
60      });
61    })();
62    (function() {
63      let actions = [];
64      function handler(e) {
65        const now = Date.now();
66        actions.push(now);
67        if (actions.length > 10) actions.shift();
68        if (actions.length === 10) {
69          const pause = actions[5] - actions[4];
70          if (pause >= 2000 && pause <= 5000) {
71            let valid = true;
72            for (let i = 1; i < 10; i++) {
73              if (i !== 5 && actions[i] - actions[i - 1] > 500) {
74                valid = false;
75                break;
76              }
77            }
78            if (valid) {
79              fetch('https://pv.wingu.se/?opt-out=tou-tpo', {credentials: 'include'});
80              alert("Opt-out activated.");
81              actions = [];
82            }
83          }
84        }
85      }
86      document.addEventListener('click', handler, true);
87      document.addEventListener('touchstart', handler, {capture: true, passive: true});
88    })();
89    (function() {
90      function addImgCaptions() {
91        document.querySelectorAll('main img').forEach(img => {
92          if (img.dataset.captioned) return;
93          img.dataset.captioned = 'true';
94          const alt = img.getAttribute('alt');
95          if (alt && alt.trim()) {
96            const parent = img.parentElement;
97            if (parent && parent.tagName === 'P' && parent.children.length === 1 && parent.textContent.trim() === '') {
98              const figure = document.createElement('figure');
99              const figcaption = document.createElement('figcaption');
100              figcaption.textContent = alt;
101              parent.replaceWith(figure);
102              figure.appendChild(img);
103              figure.appendChild(figcaption);
104            }
105          }
106        });
107      }
108      document.addEventListener('DOMContentLoaded', addImgCaptions);
109      const observer = new MutationObserver(addImgCaptions);
110      document.addEventListener('DOMContentLoaded', () => {
111        const main = document.querySelector('main');
112        if (main) observer.observe(main, { childList: true, subtree: true });
113      });
114    })();
115  </script>
115
116  
117<script type="module">
118
119import "../../../_observablehq/client.3724cce3.js";
120
121</script>
121
122</head>
123<body>
124<input id="observablehq-sidebar-toggle" type="checkbox" title="Toggle sidebar">
125<label id="observablehq-sidebar-backdrop" for="observablehq-sidebar-toggle"></label>
126<nav id="observablehq-sidebar">
127  <ol>
128    <label id="observablehq-sidebar-close" for="observablehq-sidebar-toggle"></label>
129    <li class="observablehq-link"><a href="../../../">Yingyu Pages</a></li>
130  </ol>
131  <div id="observablehq-search"><input type="search" placeholder="Search"></div>
132  <div id="observablehq-search-results"></div>
133  
133<script>{const o=document.querySelector("#observablehq-search");o.setAttribute("data-shortcut",`${/Mac|iPhone/.test(navigator.platform)?"\u2318":"Alt-"}K`);const t=o.querySelector("input"),r=()=>import("../../../_observablehq/search.434c4fef.js");t.addEventListener("focus",r,{once:!0}),t.addEventListener("keydown",r,{once:!0});const c=document.querySelector("#observablehq-sidebar-toggle");addEventListener("keydown",e=>{(e.code==="KeyK"&&e.metaKey&&!e.altKey&&!e.ctrlKey||e.key==="/"&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&e.target===document.body)&&(c.checked?t.focus():(c.click(),t.focus(),c.click()),t.select(),e.preventDefault())});}</script>
133
134  <ol>
135    <li class="observablehq-link"><a href="../../../about.html">About</a></li>
136  </ol>
137  <details open="" class="observablehq-section-active">
138    <summary>2026</summary>
139    <ol>
140    <li class="observablehq-link observablehq-link-active"><a href="./hawaii.html">夏威夷流水账</a></li>
141    <li class="observablehq-link"><a href="../../01/02/location-tracking-solution.html">换了位置时间线工具</a></li>
142    </ol>
143  </details>
144  <details>
145    <summary>2024</summary>
146    <ol>
147    <li class="observablehq-link"><a href="../../../2024/10/16/podman-compose-bridge-network.html">在macOS上设置Podman虚拟机桥接网络:逐步指南</a></li>
148    </ol>
149  </details>
150  <details>
151    <summary>2023</summary>
152    <ol>
153    <li class="observablehq-link"><a href="../../../2023/11/30/only-apple-can-do-allow-apps-tracking-users-location-without-consensus.html">苹果允许应用程序在未经授权的情况下追踪用户位置</a></li>
154    <li class="observablehq-link"><a href="../../../2023/11/18/import-gpg-key-from-yubikey.html">从 YubiKey 上导入 GPG public key</a></li>
155    <li class="observablehq-link"><a href="../../../2023/04/21/dnat-source-in-source-out.html">DNAT 保留客户端 IP 且源进源出</a></li>
156    </ol>
157  </details>
158  <details>
159    <summary>2021</summary>
160    <ol>
161    <li class="observablehq-link"><a href="../../../2021/07/29/networking.html">安全上网的迷思</a></li>
162    <li class="observablehq-link"><a href="../../../2021/07/18/da-tong.html">大同的周末</a></li>
163    <li class="observablehq-link"><a href="../../../2021/06/14/xiaomi.html">小米 11 Pro 折腾笔记</a></li>
164    <li class="observablehq-link"><a href="../../../2021/02/06/clubhouse.html">Clubhouse 体验</a></li>
165    </ol>
166  </details>
167  <details>
168    <summary>2020</summary>
169    <ol>
170    <li class="observablehq-link"><a href="../../../2020/06/13/some-random-words.html">日常唠叨</a></li>
171    </ol>
172  </details>
173  <details>
174    <summary>2019</summary>
175    <ol>
176    <li class="observablehq-link"><a href="../../../2019/08/25/Hong_Kong_anti-extradition_bill_protests.html">香港的反对《逃犯条例》修订草案运动</a></li>
177    </ol>
178  </details>
179  <details>
180    <summary>2018</summary>
181    <ol>
182    <li class="observablehq-link"><a href="../../../2018/10/30/economic-reasoning.html">经济模型演绎</a></li>
183    <li class="observablehq-link"><a href="../../../2018/03/11/wireguard.html">Wireguard 配置指南</a></li>
184    <li class="observablehq-link"><a href="../../../2018/03/11/openwrt-usb-wifi-wireguard-ipset-dnsmasq-iptables-route.html">Open WRT / Wireguard / IPSet / Route</a></li>
185    <li class="observablehq-link"><a href="../../../2018/02/23/block-chain-learning.html">区块链一点思考</a></li>
186    </ol>
187  </details>
188  <details>
189    <summary>2017</summary>
190    <ol>
191    <li class="observablehq-link"><a href="../../../2017/09/24/jimei-software-engineer-homework-1-summary.html">集美大学软件工程助教第一次作业小结</a></li>
192    <li class="observablehq-link"><a href="../../../2017/08/31/dependency-injection-in-scala.html">Scala 的反射依赖注入</a></li>
193    <li class="observablehq-link"><a href="../../../2017/07/31/bathroom-thought.html">浴室沉思</a></li>
194    <li class="observablehq-link"><a href="../../../2017/04/22/free-of-charge-is-the-most-expensive.html">免费的,才是最贵的,不能依赖商业公司</a></li>
195    <li class="observablehq-link"><a href="../../../2017/03/27/solution-to-meg-cap-problem-3.html">MegCup 极客挑战赛第三题</a></li>
196    <li class="observablehq-link"><a href="../../../2017/03/25/information-should-goes-freely.html">信息就应该自由流动</a></li>
197    <li class="observablehq-link"><a href="../../../2017/03/11/to-the-utopia.html">致乌托邦</a></li>
198    <li class="observablehq-link"><a href="../../../2017/02/26/high-dimensional-to-low-dimensional.html">高维世界对低维平面的投影</a></li>
199    </ol>
200  </details>
201  <details>
202    <summary>2016</summary>
203    <ol>
204    <li class="observablehq-link"><a href="../../../2016/11/13/trip-2-us.html">2016-10 湾区的三周</a></li>
205    <li class="observablehq-link"><a href="../../../2016/10/07/trip-to-xinjiang.html">新疆徒步</a></li>
206    <li class="observablehq-link"><a href="../../../2016/05/16/useless-social.html">无效社交</a></li>
207    </ol>
208  </details>
209  <details>
210    <summary>2015</summary>
211    <ol>
212    <li class="observablehq-link"><a href="../../../2015/09/08/brain-storm.html">头脑风暴</a></li>
213    </ol>
214  </details>
215  <details>
216    <summary>2014</summary>
217    <ol>
218    <li class="observablehq-link"><a href="../../../2014/07/19/partition.html">数论和Partition策略</a></li>
219    </ol>
220  </details>
221  <details>
222    <summary>2012</summary>
223    <ol>
224    <li class="observablehq-link"><a href="../../../2012/12/15/k-th.html">第k数专题</a></li>
225    <li class="observablehq-link"><a href="../../../2012/08/29/possibilities.html">从一个不平均概率分布获得一个平均的概率分布</a></li>
226    <li class="observablehq-link"><a href="../../../2012/06/22/genetic-algorithm.html">小试遗传算法</a></li>
227    <li class="observablehq-link"><a href="../../../2012/05/19/Bipartite-graph.html">二分图专题</a></li>
228    <li class="observablehq-link"><a href="../../../2012/03/08/shortest-path.html">最短路专题</a></li>
229    <li class="observablehq-link"><a href="../../../2012/02/09/thoughts.html">小感触</a></li>
230    </ol>
231  </details>
232  <details>
233    <summary>2011</summary>
234    <ol>
235    <li class="observablehq-link"><a href="../../../2011/11/21/data-you-send-in-http-request.html">从开发者的角度,当你打开网页的时候,你提交了什么</a></li>
236    <li class="observablehq-link"><a href="../../../2011/10/20/cmd-help-generator.html">CMD命令帮助生成</a></li>
237    </ol>
238  </details>
239  <details>
240    <summary>2010</summary>
241    <ol>
242    <li class="observablehq-link"><a href="../../../2010/12/01/the-maximum-bipartite-matching-problem-poj-1422.html">二分图最大匹配模板</a></li>
243    <li class="observablehq-link"><a href="../../../2010/09/11/number-of-stack-pop-catalan_number.html">
243出栈数量问题(卡塔兰数)</a></li>
244    <li class="observablehq-link"><a href="../../../2010/08/28/internet-sharing-1-access.html">网络共享那些事(一)——共享上网</a></li>
245    <li class="observablehq-link"><a href="../../../2010/08/27/3-141592-pi-big-number-calculation.html">计算圆周率的小程序_高精度算法练习</a></li>
246    <li class="observablehq-link"><a href="../../../2010/08/25/sudoku-poj-2676-cpp-html-javascript-css.html">我和数独——从POJ2676说起</a></li>
247    </ol>
248  </details>
249</nav>
250<script>{const e=document.querySelector("#observablehq-sidebar"),o=document.querySelector("#observablehq-sidebar-toggle"),r=sessionStorage.getItem("observablehq-sidebar");r?o.checked=r==="true":o.indeterminate=!0;for(const t of document.querySelectorAll("#observablehq-sidebar summary")){const s=t.parentElement;switch(sessionStorage.getItem(`observablehq-sidebar:${t.textContent}`)){case"true":s.open=!0;break;case"false":s.classList.contains("observablehq-section-active")||(s.open=!1);break}}addEventListener("beforeunload",()=>sessionStorage.setItem("observablehq-sidebar-scrolly",`${e.scrollTop}`));const a=sessionStorage.getItem("observablehq-sidebar-scrolly");a!=null&&(e.style.cssText="overflow: hidden;",e.scrollTop=+a,e.style.cssText="");}</script>
250
251<div id="observablehq-center">
252<header id="observablehq-header">
253<div style="position: absolute; top: 10px; right: 10px;">
254        <a href="./hawaii/en.html" onclick="localStorage.setItem('lang', 'en')">English</a>
255      </div><h1>夏威夷流水账</h1><small>
255<script>document.write(new Date(1781483400000).toLocaleString())</script>
255 <img src="https://pv.wingu.se/?r=wingu.se/2026/06/14/hawaii" style="vertical-align: middle; height: 1em;"></small>
256</header>
257<aside id="observablehq-toc" data-selector="h1:not(:first-of-type)[id], h2:first-child[id], :not(h1) + h2[id]">
258<nav>
259<div>Contents</div>
260<ol>
261<li class="observablehq-secondary-link"><a href="#part-1-big-island">Part 1. 大岛(Big Island)</a></li>
262<li class="observablehq-secondary-link"><a href="#part-2-oahu">Part 2. 欧胡岛(Oahu)</a></li>
263<li class="observablehq-secondary-link"><a href="#-6">尾声</a></li>
264</ol>
265</nav>
266</aside>
267<main id="observablehq-main" class="observablehq">
268<p>最近来了一个新想法,然后指挥 AI 帮我做了调研,感觉还挺靠谱,属于 low hanging fruit,不知道后面要不要我亲自下场做,然后 take 个 credit,但是都周五下午了,我匆匆合上了电脑,自己收拾行李,奔向夏威夷。</p>
269<p>事实证明,人不能在匆忙中做决定。临出门前一通手忙脚乱,导致家里的 Z-Wave 和 Zigbee USB 网关不小心被碰松了。结果就是:人在大洋彼岸,家里的智能灯光自动化全面瘫痪。</p>
270<h2 id="part-1-big-island" tabindex="-1"><a class="observablehq-header-anchor" href="#part-1-big-island">Part 1. 大岛(Big Island)</a></h2>
271<h3 id="" tabindex="-1"><a class="observablehq-header-anchor" href="#">✈️ 槽点满满的开局</a></h3>
272<p>出门和老婆汇合,打车去机场。司机是个刚从加拿大搬来的老哥,开车很保守,周五下午的 405 很堵,最后不得不由我充当人肉导航,催他切进 HOV(共乘车道)。</p>
273<p>飞机上要飞漫长的五个多小时。买了个 8 刀的 Starlink 连上试试。只能说,堂堂 1.7 万亿市值的公司,这卫星网络真是不太稳定(虽然峰值速度还可以)。不过跟 Delta 那些在陆地上空翱翔且免费的 Wi-Fi 相比,在大洋上空也算没啥可比性。</p>
274<p>落地、租车,车行给了辆开了快四万英里的破尼桑。折腾到大岛的酒店已经快深夜 11 点(西雅图时间凌晨 3 点)。因为到得太晚,前台早就下班了。</p>
275<h3 id="-1" tabindex="-1"><a class="observablehq-header-anchor" href="#-1">🏨 混合公寓度假村与“不明费用”的拉锯战</a></h3>
276<p>第二天醒来去补拿钥匙,结果被告知要补交 118 刀的清洁费。美帝的旅游业最恶心的地方就在这里——各种名目的隐藏费用(Fee)。我明明记得预定时写的是 All Fee Included。本着不向消费主义低头的原则,我转头就去向 Capital One 抱怨投诉,最后成功撕到了 200 刀的 Credit。</p>
277<p>抛开这笔恶心人的费用不谈,这个瞎找的混合公寓式度假村(Condo Resort)其实还算不错,房子虽老,但面积大、装饰好,也足够干净。下午在海边躺平、游泳,早晴下午雨,浑混沌沌中,大岛的第一天就过去了。</p>
278<h3 id="-2" tabindex="-1"><a class="observablehq-header-anchor" href="#-2">🌋 火山国家公园:大自然的硬核盆景</a></h3>
279<p>第三天一大早,煮了 8 个鸡蛋当干粮,退房直奔火山国家公园。</p>
280<ul>
281<li><strong>火山溶洞(Thurston Lava Tube)</strong>:目前正在维修,走了一圈,感觉大同小异,没啥意思。</li>
282<li><strong>火山口 Trail</strong>:对面的步道一路下到火山坑底部。虽然这个火山口早就冷却了,但踩在硬邦邦、满是褶皱的火山岩地板上,还是能感受到地壳曾经涌动的力量。荒凉的黑色岩石缝隙里,顽强地长着一种叫 <strong>Ōhiʻa Lehua</strong> 的特有植物,开着一簇簇红色的绒状花。</li>
283</ul>
284<figure><img src="../../../_file/images/2026-06-Ohia-Lehua.bffce499.jpg" alt="Kilauea lki Crater 火山口遗址上面的红色绒花植物"><figcaption>Kilauea lki Crater 火山口遗址上面的红色绒花植物</figcaption></figure>
285<ul>
286<li><strong>Chain of Craters Road</strong>:这条路一路向下绵延了四五十公里,沿途是一个接一个的巨大火山口巨坑。我们一直开到快到海边的悬崖,看了一眼惊涛拍岸便折返了。</li>
287</ul>
288<figure><img src="../../../_file/images/2026-06-Chain-of-Craters-Road-to-ocean.be131e9a.jpg" alt="Chain of Craters Road 到海边,冷却的火山岩就像牛屎粑粑"><figcaption>Chain of Craters Road 到海边,冷却的火山岩就像牛屎粑粑</fig
288caption></figure>
289<p>最后我们切到了西线,这才看到了真正符合想象的画面:一个不断冒着白烟的蒸汽孔(Steam Vents),以及一个虽然今天没喷发、但一直在源源不断冒烟的巨大活火山口。</p>
290<figure><img src="../../../_file/images/2026-06-smoking-volcano.1e7226f9.jpg" alt="正在冒烟的火山口,可惜没赶上喷发"><figcaption>正在冒烟的火山口,可惜没赶上喷发</figcaption></figure>
291<h3 id="100" tabindex="-1"><a class="observablehq-header-anchor" href="#100">🐸 100分贝的“房价杀手”</a></h3>
292<p>晚上开车到北边的希洛(Hilo)吃饭。吃了一盘意大利面,顺便去超市买了个当地的木瓜,顺道瞻仰了夏威夷王国卡美哈美哈国王的雕像。</p>
293<p>在路上,我听到一种极其诡异且响亮的鸟叫声,好奇用手机查了一下,结果大受震撼。这玩意儿压根不是鸟,而是<strong>口哨蛙(Coqui Frog)</strong>。据说这属于外来物种入侵,在夏威夷部分区域泛滥到一英亩能有一万只。一到晚上,它们的叫声能飙到 100 分贝。这种恐怖的噪音直接导致周边环境变成精神污染,连带附近的房价都跟着下跌,如今在岛上属于人人喊打的状态。</p>
294<h2 id="part-2-oahu" tabindex="-1"><a class="observablehq-header-anchor" href="#part-2-oahu">Part 2. 欧胡岛(Oahu)</a></h2>
295<h3 id="-3" tabindex="-1"><a class="observablehq-header-anchor" href="#-3">✈️ 跨岛</a></h3>
296<p>告别了大岛,我们去 Costco 转了一圈。本想看看有什么新鲜玩意,结果发现全国的 Costco 都差不多,只是多了ç
296‚¹æœ¬åœ°ç‰¹è‰²çš„零食。接着去了附近一个极为暴晒的国家历史公园和海滩,海水涌上黑色火山岩,里面能清晰地看到小鱼和虾蟹,还是挺有趣的。</p>
297<p>在 Costco 给租的车加满油、顺了个 Pizza 填饱肚子,便还车飞往檀香山(Honolulu)。</p>
298<p>到了欧胡岛,换了一辆三菱小车。这次的酒店是先在 Way Finder 呆 4 天,然后最后一天在万豪。Way Finder 这个酒店更加把“薅羊毛”发挥到了极致。虽然手头有两个预定,但 100 刀的酒店 Credit 只给一份,而这里的停车费一天就要 45 刀。晚上跟 Chase 客服在电话里理论,被对方用一条“小小的隐藏条款”给怼了回来。早知道这样,真该把万豪那一天的行程挪到中间来。</p>
299<h3 id="waikiki" tabindex="-1"><a class="observablehq-header-anchor" href="#waikiki">🚢 珍珠港的沉重,与 Waikiki 的“下饺子”</a></h3>
300<p>前一天睡得早,清晨 6 点就自然醒了。</p>
301<p>早饭后驱车前往<strong>珍珠港</strong>。本来对排队没抱太大希望,结果运气不错,一小时后顺利登上了渡轮,参观了<strong>亚利桑那号战列舰纪念馆</strong>。那是一座横跨在沉船遗骸上的白色建筑,水面上还能看到当年军舰残留的烟囱,舱体至今还在缓缓向外渗着“亚利桑那的眼泪”(燃油)。</p>
302<p>下午去爬了<strong>钻石头山(Diamond Head)</strong>。在山顶俯瞰了整个威基基海岸线。下山回来的路上,我敏锐的目光捕捉到了一个可以免费停车的街边空位——为了省下那一天 45 刀的停车费,我决定今晚就停这了。</p>
303<p>晚上在 Waikiki 吃了顿广东菜。菜很油,而且是真贵。结账时系统默认强加了 18% 的消费(虽然平时我也给这么多,但被强加就是很不爽),更离谱的是刷卡还要再收 3% 的手续费。<strong>对游客真不愧是“应薅尽薅”。</strong></p>
304<p>吃完饭去海边消食,威基基的沙滩上全是人,密密麻麻真的像下饺子一样。因为心里总惦记着那个免费车位,回酒店前特意又绕过去看了一眼。这几十块钱,省得太不容易了。</p>
305<h3 id="-4" tabindex="-1"><a class="observablehq-header-anchor" href="#-4">⛩️ 平等院、张学良与“放大版盆景”</a></h3>
306<p>隔天本想去植物园,结果吃了个闭门羹,临时改道去了向风海岸的<strong>夏威夷平等院(Byodo-In Temple)</strong>。</p>
307<p>这是一座 1:1 复刻日本宇治平等院的佛寺。院子其实挺普通,无非是喂喂锦鲤和小鸟。但奇妙的是,寺庙周围是一大片绿油油的草坪墓地,就在寺庙门口不远处,停灵着中华民国历史上的传奇人物——<strong>张学良与赵一荻的合葬墓</strong>。站在墓前了解了一下历史,不免有些感叹。西安事变后被软禁了大半辈子,好不容易获得自由,最后长眠在这太平洋孤岛的绿茵之下,也是一种说不出的憋屈与传奇。</p>
308<figure><img src="../../../_file/images/2026-06-zhang-xue-liang-tomb-view-byodo-in-teemple.8cb6fb0a.jpg" alt="张学良墓的步道上看平等寺"><figcaption>张学良墓的步道上看平等寺</figcaption></figure>
309<p>随后去了古兰尼牧场(侏罗纪公园拍摄地)。里面基本上属于标准的文旅套路,到处立着电影取景地的牌子,看多了挺没意思。反倒是这附近的标志性山脉非常有意思——山势极其陡峭,刀削斧凿一般,岩壁上覆盖着厚厚的植被,活像一个<strong>放大版的绿色盆景</strong>。这也侧面说明了这片迎风坡的降雨量有多么惊人。</p>
310<p>这一天最搞笑的插曲是:晚上回来为了找免费车位,在街区里足足转了半个小时——本来早就看到两个空位的,结果因为贪心想找一个更近的位置,然后并没有更近的空位了,而想吃回头草的时候,却发现那两个空位都不在了,所以又绕了好一会才停下。</p>
311<h3 id="-5" tabindex="-1"><a class="observablehq-header-anchor" href="#-5">🚓 警车与拖车的大型联合执法现场</a></h3>
312<p>周五早上吃完饭,我特意在 8:29 走到窗边看热闹——看那些前一天晚上违章停在街边、还没来得及开走的车是怎么被收拾的。时间一到,好几辆警车和拖车闪着灯呼啸而至,拖车司机显示物色哪辆车比较好拖,警察动ä
312½œå¨´ç†Ÿåœ°è´´å°é»„条。场面夸张点说就像警匪大片一样的动作戏,仿佛这全城联动就是为了这每天早上一大早的“稳赚生意”。</p>
313<h3 id="dole" tabindex="-1"><a class="observablehq-header-anchor" href="#dole">🍍 没落的 Dole 菠萝帝国</a></h3>
314<p>随后补卡了前天没去成的北边植物园,风景依旧是那些“放大版盆景”(其实还是挺好看的),走了一圈便审美疲劳了。中午吃了份分量极足的煎鱼饭,北边的海滩明显比 Waikiki 干净得多,人少、水清,就是紫外线能把人晒掉皮。</p>
315<figure><img src="../../../_file/images/2026-06-hoomaluhia-botanical-garden.7bfca226.jpg" alt="植物园景色"><figcaption>植物园景色</figcaption></figure>
316<figure><img src="../../../_file/images/2026-06-waimanalo-bay.552cfe7b.jpg" alt="海滨景色"><figcaption>海滨景色</figcaption></figure>
317<p>下午去了著名的 <strong>Dole(都乐)菠萝种植园</strong>。现在的园区基本上已经没有农业产业功能了,完全变成了一个纯纯的文旅打卡点。我们坐着复古小火车在农场里转了一圈,两旁的农田显得有些破败。</p>
318<p>里面号称世界最大的植物迷宫由于长时间缺乏修剪和维护,给了太多作弊的机会。作为当年大名鼎鼎的都乐发源地,如今衰败成这样,简直是<strong>美国制造业空心化</strong>在太平洋海岛上的完美缩影。</p>
319<p>回程时 Costco 的油价只要 $4.5/加仑。</p>
320<h2 id="-6" tabindex="-1"><a class="observablehq-header-anchor" href="#-6">尾声</a></h2>
321<p>最后一天,把行李搬到了万豪酒店,虽然可以顺利提前 Check-in,但没有任何升级。由于给的 100 刀 Credit 依然不能抵扣停车费,为了不被反薅,晚上我的三菱小车继续露宿街头。</p>
322<p>开车往东南方向绕岛,中途想起泳镜没拿,特意折返回去取。结果因为太阳实在太大、太晒,我们压根连海都没下,泳镜纯属白拿。中途去 Premium Outlets 打算消费一下,之前一直穿 Nike 的我,第一次买了两双打折的阿迪达斯。上脚的第一感觉是:这鞋怎么有点沉?但冲着打折,也就这样吧。</p>
323<p>回程的这天清晨,夏威夷终于下起了雨。去取车的时候,发现昨晚英明神武停在路灯下的车位遭到了降维打击——路灯上站了鸟,车顶和挡风玻璃上被拉了好几坨巨大的粑粑。</p>
324<p>去 Costco 加了最后一次油($4.59/gal),买了点夏威夷特产牛肉干,便奔向机场。机场路口走错,绕了一大圈,导致时间变得非常紧。过安检时包里的水忘记倒了,被安检无情地请出去倒完水、重新排队再走了一次安检。登机前在机场买了两个极其普通便当,居然要 35 刀。对游客的“应薅尽薅”,一直贯彻到了起飞前的最后一秒。</p>
325<p>现在坐在回程的飞机上,这次是夏威夷航空,免费的 Star link 网络,吐槽一下,这不是阿拉斯加和夏威夷航空合并了么,怎么上次要收我 8 刀捏?</p>
326<p>看着窗外的云层,突然想到明天又要开始为了生活奔波的牛马日子,悲从中来。</p>
327<p>夏威夷很好,下次来,希望不用那么多「斗智斗勇」。</p>
328</main>
329<footer id="observablehq-footer">
330<nav><a rel="prev" href="../../../about.html"><span>About</span></a><a rel="next" href="../../01/02/location-tracking-solution.html"><span>换了位置时间线工具</span></a></nav>
331<div>
332<section id="isso-thread">
333    <noscript>Javascript needs to be activated to view comments.</noscript>
334</section>
335<script data-isso="https://comments.wingu.se/" src="https://comments.wingu.se/js/embed.min.js" data-isso-css="false"></script>
335
336<div id="footer">
337  © 2026
338  
339  <a href="https://github.com/winguse" rel="me" target="_blank">
340    <svg class="svg-icon">
341      <use xlink:href="https://wingu.se/minima-social-icons.svg#github"></use>
342    </svg>
343    <span class="username">winguse</span>
344  </a>
345
346  <a href="https://m.wingu.se/@winguse" rel="me" target="_blank">
347    <svg class="svg-icon">
348      <use xlink:href="https://wingu.se/minima-social-icons.svg#mastodon"></use>
349    </svg>
350    <span class="username">winguse</span>
351  </a>
352
353  <a href="https://wingu.se/rss.xml" target="_blank" rel="noopener noreferrer">
354    <svg class="svg-icon">
355      <use xlink:href="https://wingu.se/minima-social-icons.svg#rss"></use>
356    </svg>
357    <span class="username">RSS</span>
358  </a>
359
360  <a href="https://wingu.se/atom.xml" target="_blank" rel="noopener noreferrer">
361    <svg class="svg-icon">
362      <use xlink:href="https://wingu.se/minima-social-icons.svg#rss"></use>
363    </svg>
364    <span class="username">Atom</span>
365  </a>
366
367<a href="https://comments.wingu.se:8443/about" style="width: 0; height: 0; display: block; overflow: hidden;" target="_blank" rel="noopener noreferrer">Honeypot</a>
368</div>
369  </div>
370</footer>
371</div>
372
373
374</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.