<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Hi 我劉昕</title>
    <link>https://shuaixin.cc/</link>
    
    <image>
      <url>https://shuaixin.cc/icon.png</url>
      <title>Hi 我劉昕</title>
      <link>https://shuaixin.cc/</link>
    </image>
    
    <atom:link href="https://shuaixin.cc/rss2.xml" rel="self" type="application/rss+xml"/>
    
    <description>劉昕的部落格</description>
    <pubDate>Tue, 01 Sep 2026 11:11:11 GMT</pubDate>
    <generator>http://hexo.io/</generator>
    
    <item>
      <title>替自架服務加上訪問控制：以 Nginx Proxy Manager 為例</title>
      <link>https://shuaixin.cc/Access-Control-Through-NPM/</link>
      <guid>https://shuaixin.cc/Access-Control-Through-NPM/</guid>
      <pubDate>Mon, 31 Aug 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<h2 id="背景與需求">背景與需求</h2><p>自 <a href="https://shuaixin.cc/HA-11-Reverse-Proxy/"><strong>智能家居 EP11：用反向代理取代端口轉發</strong></a> 之後，我的 home server 已經不需要替每個服務逐個開端口轉發了。大部分的服務我都是透過 VPN 連回家來進行訪問，而少部分需要外網訪問的需求就用跟智能家居 EP11 一樣的反向代理來處理。</p><p>邏輯簡單捋一下：域名服務商（我現在用 Cloudflare）替我做純 DNS，透過 CNAME 去指向我的 DDNS 服務商（我現在用 DuckDNS），而 DDNS 幫我導到我 server 的 IP 位置，此時外網就能訪問到我的反向代理服務（我一直都是用自架的 Nginx Proxy Manager，下稱 NPM），此時根據我輸入的網址，NPM 會再幫我導向目標服務。</p><p><img src="/Access-Control-Through-NPM/self-host-app.png" alt="self-host-app"></p><p>在這種設定方式之下，只要有該服務的網址，就能訪問。此時如果服務有自己的訪問控制方式（比如說帳號密碼登入）那倒就無妨，但已經 2026 年了，其實很多服務我們是 vibe coding 詠唱出來自用的，是否有方法可以不用自己刻訪問控制呢？畢竟很多小功能並不值得消耗 token 來多做這一層。</p><h2 id="解決方案">解決方案</h2><p>其實有現成的方法在眼前，NPM 本身就自帶訪問控制，太好了，來實做吧！</p><p>假設我的 home server 在內網中的 IP 是 <code>192.168.87.87</code>，並且我讓這次架設的服務 run 在 port 5487，那麼此時在 NPM 裡面：</p><p><img src="/Access-Control-Through-NPM/self-host-app-1.png" alt="self-host-app-1"></p><ul><li>A 填入訪問網址，比如 <code>fuwu.mydomain.tw</code></li><li>B 填入內網目標，此例中就是 <code>http://192.168.87.87:5487</code></li></ul><p>此例中的 NPM 與服務都位於可信任的內網，因此目標填寫 <code>http</code> 即可；外部 HTTPS 連線會在 NPM 終止，再由 NPM 透過內網 HTTP 連向服務。</p><p>接著我們在 Access Lists 中進行設置，其中：</p><p><img src="/Access-Control-Through-NPM/self-host-2.png" alt="self-host-2"></p><ul><li>由 A 進入設置。</li><li>B 我這裡設 allow all，這樣我就可以從任意位置訪問進來。但若要嚴謹一點，也可以僅僅加入你的 IP 白名單就好。</li><li>C 的部分就可以設置帳號密碼。</li></ul><p>最後回到該服務，選擇剛剛設置好的 access list：</p><p><img src="/Access-Control-Through-NPM/self-host-3.png" alt="self-host-3"></p><p>並且注意，<strong>Force SSL 記得要開</strong>，否則 HTTP 訪問時輸入帳密會是明文。</p><p>至此設置完畢！</p><p>如此一來，以後這個服務就可以由外網訪問，但同時有一層訪問控制，使其不至於裸奔。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/Self-Hosting/">Self Hosting</category>
      
      
      <category domain="https://shuaixin.cc/tags/Self-Hosting/">Self Hosting</category>
      
      <category domain="https://shuaixin.cc/tags/Docker/">Docker</category>
      
      <category domain="https://shuaixin.cc/tags/Proxy/">Proxy</category>
      
      <category domain="https://shuaixin.cc/tags/NPM/">NPM</category>
      
      
      <comments>https://shuaixin.cc/Access-Control-Through-NPM/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>享受使用權，放棄佔有欲 2</title>
      <link>https://shuaixin.cc/stay-up/</link>
      <guid>https://shuaixin.cc/stay-up/</guid>
      <pubDate>Wed, 26 Aug 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>完蛋，我四月才投稿了<a href="https://shuaixin.cc/Sleep-at-9/">《為什麼我九點睡？》</a>，現在反手就得寫「晚上不睡覺」……</p><blockquote><p>這是我的「<a href="https://blogblog.club/party/"><strong>BlogBlog 同樂會 - 2026 年 9 月</strong></a>」的投稿文章。本月主題是「<a href="https://jasonjlai.net/zh/3pwriting/stay-up.html"><strong>晚上不睡覺</strong></a>」，由 <a href="https://jasonjlai.net/"><strong>Jason Lai</strong></a> 主持。如果你有自己的部落格，歡迎一起來參加！</p></blockquote><ul><li></li></ul><p>連續三天只睡六小時跑去開車，此時跟酒精濃度 0.05 的酒駕差不多；連續十天只睡六小時，此時的失神頻率跟整天沒睡差不多。</p><p>以上來自<a href="https://shuaixin.cc/Why-We-Sleep/#:~:text=%E6%AF%8F%E5%A4%A9%E7%9D%A1%E5%85%AD%E5%B0%8F%E6%99%82%EF%BC%8C%E5%9C%A8%E5%8D%81%E5%A4%A9%E5%BE%8C%EF%BC%8C%E9%80%99%E5%80%8B%E5%A4%B1%E7%A5%9E%E7%9A%84%E9%A0%BB%E7%8E%87%E5%B0%B1%E8%B7%9F%E4%B8%80%E6%95%B4%E5%A4%A9%E6%B2%92%E7%9D%A1%E4%B8%80%E6%A8%A3%E4%BA%86">《為什麼要睡覺》</a>。該書中認為睡眠不足的問題已經是個大型公共衛生危機，只是大家並沒有太多警覺。很多人甚至不覺得睡六小時對自己有什麼影響，然而很可能只是因為早就習慣於這樣的「亞健康」狀態所以不自知。</p><p>既然都有研究背書了，我自然是從善如流。因為我很早睡嘛，甚至都很少在開鬧鐘了，反正睡滿八小時就差不多會自然醒。就算偶爾睡超過也無妨，就當做身體需要嘛，需要就給，都是自己人別客氣。</p><p>連帶地，我現在不會沒來由地睡前小酌（飲酒入睡跟麻醉一樣都不是「睡眠」，小知識月有<a href="https://shuaixin.cc/Fun-Fact-Party/#:~:text=%E5%BE%88%E5%A4%9A%E4%BA%BA%E8%A6%BA%E5%BE%97%E3%80%8C-,%E7%9D%A1%E5%89%8D%E5%B0%8F%E9%85%8C,-%E3%80%8D%E8%AE%93%E8%87%AA%E5%B7%B1%E7%9D%A1%E5%BE%97">提過</a>）、環境中亂七八糟的 LED 指示燈都被我用黑膠帶貼住（只要非常微弱的光線就會影響視交叉上核釋放褪黑激素）。另一個比較有趣的部分則是，關於長期待在室內而無法接收自然光線的問題，我透過<a href="https://shuaixin.cc/HA-8-Circadian-Light/">《智能家居 EP8：讓燈光隨著晝夜節律改變色溫》</a>，製造了跟隨真實晝夜節律的室內光線。</p><p>總之睡眠於我來說是優先度相對高的活動，沒事不會隨便不睡覺，若有遇事不決、那就睡醒再說。其實就如主持人 Jason 說的，熬夜就是「向夜晚借貸人生」，但必須注意的是，這個借貸可是高利貸：透過犧牲睡眠換來的時間，會用更大的比重從壽命裡面扣，別亂借啊！</p><p><s>所以以上是我這期的投稿，標題是<strong>晚上就該睡</strong>，我們下次見。</s></p><ul><li></li></ul><p>還是有願意不睡覺的時候啦。</p><p>什麼？犧牲睡眠就是拿健康開玩笑、拿壽命做交換，乍聽之下怎麼樣都不划算才對，究竟有什麼比健康跟壽命還重要呢？</p><p>此時「<a href="https://shuaixin.cc/1-qi-1-hui/">享受使用權，放棄佔有慾</a>」居然又派上用場了：健康跟壽命是拿來使用的，不是拿來佔有的。我活著並維持健康是為了體驗各種活動、跟親愛的人相處，如果為了睡覺而放棄了陪伴與體驗，那就跟存了一堆錢卻不肯花沒兩樣，屬於純純的本末倒置。</p><p>跟親朋好友們把酒言歡，享受微醺的夜晚，我認為是值得犧牲一點睡眠的。</p><p>我感覺這也有點像《人生四千個禮拜》提到的「犧牲行事曆上的彈性、擁抱社群的紅利」。雖然我們知道平日出去玩不用排隊、不用塞車，但平日就很難揪到朋友們一同行動。我在讀這本書之前就常常抱怨為何大家放假不輪流放，擠在一起是怎樣？分流休假不好嗎？後來才知道歷史上早就有<a href="https://shuaixin.cc/4000-weeks/#:~:text=%E7%9A%84%E6%9C%89%E5%85%B6%E6%84%8F%E7%BE%A9%EF%BC%81-,%E6%B2%92%E6%83%B3%E5%88%B0%E6%AD%B7%E5%8F%B2%E4%B8%8A%E7%9C%9F%E7%9A%84%E5%AD%98%E5%9C%A8%E6%A5%B5%E7%AB%AF%E7%9A%84%E5%8F%8D%E4%BE%8B%EF%BC%81,-%E8%98%87%E8%81%AF%E5%A4%A7%E5%88%80%E9%97%8A%E6%96%A7%EF%BC%8C%E6%94%B9%E6%88%90">輪流放假的先例</a>，結果被抱怨「獨自休假有何意義？」，這種措舉就在怨聲載道之下不了了之了。</p><p>我的筆記是這樣的：</p><blockquote><p>儘管我們的文化讚揚自律地掌控自己的時間，但我們不妨試著<strong>藉由損失行事曆的彈性，來交換社群的獎勵</strong>。偶爾放棄自己完美的晨間習慣，配合家庭生活、友誼活動。</p></blockquote><p>而換到這裡就是偶爾放棄自己完美的入睡時間，配合家庭生活、友誼活動。</p><ul><li></li></ul><p>簡單來說就是這樣，但其實又不是那麼簡單。畢竟照這樣的邏輯，但凡有夜衝、夜唱、夜騎、夜遊，我難道要來者不拒嗎？當然還是可以判斷的，如果夜晚是體驗這些活動的必要條件的話，那沒問題。但其實我想問：很多活動其實根本可以不用辦在晚上吧？</p><p>絕大部分的 party 都在晚上舉辦，大概跟酒精被允許出現的時間有很大的關聯吧。都說白天飲酒不檢點、不成體統，因為白天是辦正經事的時候；而晚上喝茫了就沒關係，反正等等就去睡了，把睡眠時間跟酒精作用的時間重疊起來，絲毫不浪費。</p><p>但是真的是這樣嗎？我們現在已經知道了，「飲酒入睡」不是「睡眠」，比較像是「麻醉」。我們以為把「喝醉後沒有生產力的狀態」拿去睡掉了，但其實根本沒有好好睡到，最後受影響的還不是隔天「做正經事的白天」？</p><p>還是同一本《為什麼要睡覺》——作者的建議是，真要喝酒的話就白天喝吧！</p><p>白天的 party 確實有點違和感，但我覺得未嘗不是一個可行的 party 新理解，各位說呢？咱們開始試著把 Friday Night 聚會活動都挪到<strong>星期六白天</strong>，是不是一個更健康的選擇呢？也許典範轉移之後，大家就再也不需要為了「擁抱社群的紅利」而犧牲睡眠時間或睡眠品質了。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%83%A8%E8%90%BD%E6%A0%BC%E5%90%8C%E6%A8%82%E6%9C%83/">部落格同樂會</category>
      
      
      <comments>https://shuaixin.cc/stay-up/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>享受使用權，放棄佔有欲</title>
      <link>https://shuaixin.cc/1-qi-1-hui/</link>
      <guid>https://shuaixin.cc/1-qi-1-hui/</guid>
      <pubDate>Wed, 19 Aug 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<blockquote><p>這是我的「<a href="https://blogblog.club/party/">BlogBlog 同樂會 – 2026 年 8 月</a> 」的投稿文章。本月主題是「<a href="https://blog.ikukaroom.com/ichigo-ichie/">一期一會</a>」，由 <a href="https://blog.ikukaroom.com/">ikuka</a> 主持。如果你有自己的部落格，歡迎一起來參加！</p></blockquote><p>「享受使用權，放棄佔有慾。」</p><p>這是我在看到主題「一期一會」後，腦中第一時間閃現而出的句子。然而直覺終究是直覺，依我看大概是耐不住細考，估計只要給我幾個段落的時間就能超爆離題？直至我寫下這段開頭的現在，還是沒有很確定「享受使用權，放棄佔有慾」是否是「一期一會」這個詞能傳達的、至少一部分的哲理。</p><ul><li></li></ul><p>在不確定的環境中，儲存與佔有是一種古老而普遍的生存策略，因為不囤積資源的個體都在隨機發生的荒年中被淘汰了。結果是，默認假定未來是「匱乏的」的基因，有較高的演化優勢。</p><p>21 世紀的我們早就深知許多演化的遲滯性所帶來的陷阱：負面偏誤、損失趨避、雙曲貼現效應。這些曾在過去具有十足的演化優勢，但到了現代都變成了某種理性上的「瑕疵」。為了應對這些「瑕疵」，我們學會了忽略沈沒成本、學會了延遲享受，而這些都很好，展示著人類理性的自決，意味著我們有能力不被基因的引導牽著鼻子走。</p><p>而我有時候會懷疑，如果我可以在不「佔有」某樣東西的前提之下就「享受」到它，我<strong>對「擁有」的執著是否非理性</strong>？如果是基因的囤積傾向（癖好）在對我下指導棋，那麼它是不是也該被歸於「瑕疵」之列？</p><p>該！</p><p>稟賦效應（Endowment effect）：當一個人擁有某項物品或資產的時候，他對該物品或資產的價值評估要大於沒有擁有這項物品或資產的時候。</p><p>這不就是關於「擁有」的不理性偏好嗎？<a href="https://shuaixin.cc/Thinking-101/index.html#%E7%A8%9F%E8%B3%A6%E6%95%88%E6%87%89%E8%88%87%E6%99%AE%E6%8B%BF%E7%96%BC:~:text=%E6%99%AE%E6%8B%BF%E7%96%BC-,%E7%A8%9F%E8%B3%A6%E6%95%88%E6%87%89,-%EF%BC%88%E6%88%91%E9%83%BD%E7%A8%B1%E5%91%BC">有寫下來</a>果然才會有印象，又是部落格的勝利，太棒了。<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p><p>針對是否需要「擁有」，我想問：看書就看書，何必買書呢？畢竟我們圖的是書中的知識與內容，而非書這個載體。我大可跟每本書「一期一會」就好，反正我已經留下了<a href="https://shuaixin.cc/categories/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98/">讀書筆記</a>，何必依戀？就像剛剛的我，也只是從自己的部落格搜尋了「稟賦效應」，並沒有把《思考101》真的從書堆中挖出來翻閱，那我是不是根本不需要擁有這本書呢？</p><ul><li></li></ul><p>如果說<strong>無形的體驗</strong>跟<strong>有形的商品</strong>要選一個去購買，選哪個呢？這篇 2003 的研究<a href="https://pubmed.ncbi.nlm.nih.gov/14674824/">“To do or to have? That is the question”</a>跟我們說<a href="https://shuaixin.cc/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98-%E6%90%96%E6%BB%BE%E7%B6%93%E6%BF%9F%E5%AD%B8/index.html#post-info:~:text=%E5%83%B9%E5%80%BC%E3%80%82%E5%A6%82%E6%9E%9C%E8%AA%AA-,%E6%9C%89%E5%BD%A2%E7%9A%84%E5%95%86%E5%93%81%E8%B7%9F%E7%84%A1%E5%BD%A2%E7%9A%84%E9%AB%94%E9%A9%97,-%E8%A6%81%E9%81%B8%E4%B8%80%E5%80%8B">前者才是讓人更幸福的選擇</a>。畢竟<strong>生命終究只關乎體驗</strong>，這個結論十分容易理解，我欣然接受。有形的商品終究要以體驗的形式服務於我們，那還不如一開始就直接買體驗，對吧？</p><p>雖然情感上我依舊傾向買斷，但理性上不得不承認「訂閱制」是個很優秀的概念：既有利於資本的週轉運作，也讓我們得以<strong>直接購買體驗而非擁有</strong>。</p><p>我自己最後是這樣處理這個問題的：</p><blockquote><p>對於「擁有」的渴望，首先分辨它是來自於「佔有慾」還是「想提升體驗的品質」。若是前者則大可不必，直接購買體驗就好；若是後者就可以考慮擁有。</p></blockquote><p>話是這樣說沒錯，但我的「擁有癖好」依舊讓我買斷了地平線六，即使我大可用訂閱的，反正我大機率會三分鐘熱度。<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>這個「擁有癖好」難道不正是明明訂閱 XBOX Game Play 就能暢玩，但大家依舊喜歡在 Steam 買斷的理由嗎？不過兄弟姐妹們，你們買斷了但沒玩欸？<strong>純「擁有」不「體驗」究竟是什麼終極本末倒置玩法</strong>？<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup></p><p>我的 Steam 收藏庫有多少買了沒玩的遊戲我數都不敢數，這就是「對擁有的不理性偏好」了沒錯吧？畢竟現在的遊戲，買斷跟訂閱的「體驗」根本就沒差，反正都得連網。更別提在 Steam 買斷的遊戲其實根本「不屬於你」，你只是買了遊戲的「使用授權」。好笑了，只是「擁有的錯覺」就讓人 trigger 了「稟賦效應」。</p><p>我認為「擁有癖好」並沒有比負面偏誤、損失趨避、雙曲貼現效應還要來得無傷大雅，反而是有點被社會低估的不理性行為。理由可能是因為它受到了資本市場、消費主義的包庇，畢竟大家都有「擁有癖好」的社會目前運行地好極了。</p><ul><li></li></ul><p>回來談談買書的問題。</p><p>其實大部分的書我們這輩子就只會「體驗」一次。（← 一期一會，適當點題）那麼好了，買書在這個時代莫非成了陋習？藏書是不理性的嗎？</p><p>樊登給了我一個開脫的理由：「買書的核心是買了一個機率。我用更科學的方法來跟大家解釋，為什麼買了這麼多的書不讀，但是還是得買呢？原因是，你買的並不是那本書的知識，你買的是讀那本書的機率。你買回家就是 1% 往上。」</p><p>太棒了，因為心智很笨、自由意志的比例很少，所以我們透過環境的操縱（買書回家擺）來間接引導自己的行為（拿起來看），這個理由我買單。</p><p>而根據我們的原則，對於「擁有」的渴望，首先分辨它是來自於「佔有慾」還是「想提升體驗的品質」：買書可以省去找書借書還書的過程、也能隨心所欲使用自己的書，可以「提升體驗的品質」，所以買書在這個層面上可以通過理性的檢驗。</p><p>另外也許就像 LQ7 說的，「<strong>這世界上所有的買斷都是廣義的訂閱</strong>。很多人是靠買斷在租鏡頭。」我買斷的書，可以在閱畢後脫手，也跟我 NS 的實體卡在破台可以後賣二手同樣的道理。</p><p>然而問題也恰好就出現在這裡：買書沒問題了，但「藏書」呢？看完不脫手，作何居心？</p><ul><li></li></ul><p>如果我同意我自己上述的說法，那我的藏書行為有很大部分是不理性的。這難道不是<a href="https://www.books.com.tw/products/0010521950?srsltid=AfmBOoq_CKAw2K16atz50anqPf1VNCD05g_6uXdMqNQPjvKNIXxFCTwg">《怦然心動的人生整理魔法》</a>想要告訴我的事嗎？對於那些已經無法讓我心動的書，就該斷捨離說掰掰了才對。所以我應該把《怦然心動的人生整理魔法》送走了對吧？（近藤麻理惠<sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup>表示你 dare use my own spell against me）</p><p>不過還是那個樊登，他說他書架上的書有些是他父親十幾年前買的，而「過了幾十年被我讀了，就賺回來了」。啊…… 我看著我書架上那些家人十幾年前買的書，要不是他們的「擁有癖好」，我是否就失去了認識簡媜、蔡璧名、黃仁宇、龍應台、余秋雨的機會了？並且寫到這裡發現，果然還是文學雋永啊——我現在看的科學的書，在十年後甚有可能已經被推翻而成為「標準錯誤示範」或「過去的陳舊理解」了吧。</p><p>而最近因為讀書會，我們各自「擁有」的書籍開始有了流轉傳閱的機會，在這個過程中，我們甚至可以一窺主人過去跟書本的對話與劃線的痕跡，有時候還能發現被夾在裡面當書籤的青眼白龍，其實也是妙趣橫生。</p><p>不過大概也就這樣，我沒有太多可以替「藏書」辯護的說辭了。</p><ul><li></li></ul><p>我想，「一期一會」確實在提醒我們「享受使用權」，畢竟很多時候我們無法佔有、無法控制未來、無法預測緣分。但因為人類有「擁有癖好」，所以在能「佔有」的時候我們總是想把握機會去「佔有」，以確保「一期不止一會」。然而想要「不止一會」，maybe 有時候只是一種不理性的想法，來自基因對我們的指導。</p><p>當然，雖然這裡我用書作為討論的媒介，但其實可以推廣到任何對象上。人跟物之間如此、人跟人之間亦然。開放式關係不正是一種「享受使用權，放棄佔有慾」的經典寫照嗎？想「佔有」伴侶其實比想「佔有」一本書有更高比例的基因作祟，依我看大概逼近九成五（意即只有 0.5 成來自理性），雖然數字只是我亂喊的，但我挺認真的，各位不妨品品看。</p><p>然而有趣的地方就在這裡，用理性談婚嫁沒毛病，但用理性談戀愛就是耍流氓，談戀愛是一種純生理性的人類活動。既然如此，佔有慾就是戀愛中不可分割的一部分，此時根本就沒有放棄占有欲的可能。所以開放式關係歸開放式關係、婚姻歸婚姻、談戀愛歸談戀愛，就像特斯拉是特斯拉、電動車是電動車，邊牧是邊牧、狗是狗一樣，不可混為一談。</p><p>好了，出現了莫名其妙的類比，看來這個人已經邏輯下班了，這期就先這樣啦！</p><ul><li></li></ul><p>p.s.</p><p>看到主題「一期一會」後，腦中第一時間閃現而出的句子是「享受使用權，放棄占有欲」，而第二時間出現的是「人是會死的」。「一期一會」是否在含蓄地、浪漫地表達「人是會死的」？</p><p>還真別說，我時常拿這句來情勒我的友人們：「請假跟我去爬山了啦，人是會死的，萬一明天我死了呢？」（熟一點的會改成「萬一明天你死了呢？」）</p><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">1.</span><span style="display: inline-block; vertical-align: top;">嚴格來說，稟賦效應只是點出了我們會「敝帚自珍」，指出人類會不理性地高估自己「擁有」的東西的估值，並不能直接推論出人類會不理性地想「擁有」東西。但我總覺得，裡面的底層邏輯是類似的，同一套研究換個命題出發我認為也能導出後者的結論。不曉得目前有沒有更貼近我想表達的這個「擁有癖好」的相關研究？</span><a href="#fnref:1" rev="footnote"> ↩</a></li><li id="fn:2"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">2.</span><span style="display: inline-block; vertical-align: top;">我有一組 Moza R5 直驅方向盤，吃灰很久了，地平線六讓它得以出來呼吸一下——不知道能呼吸多久就是了。我目前的心得是：甩尾過彎真的不會比較快，但心裡比較快…… 活。我甚至想再添購實體手剎，這樣手剎車甩尾一定很帥對嗎，而且讓方向盤吃灰的時候至少有個朋友（？？？）</span><a href="#fnref:2" rev="footnote"> ↩</a></li><li id="fn:3"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">3.</span><span style="display: inline-block; vertical-align: top;">Steam 社群流傳著這麼一句話：「我都已經花錢買游戲了，憑什麼還要我花時間玩？」</span><a href="#fnref:3" rev="footnote"> ↩</a></li><li id="fn:4"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">4.</span><span style="display: inline-block; vertical-align: top;">《怦然心動的人生整理魔法》的作者</span><a href="#fnref:4" rev="footnote"> ↩</a></li></ol></div></div>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%83%A8%E8%90%BD%E6%A0%BC%E5%90%8C%E6%A8%82%E6%9C%83/">部落格同樂會</category>
      
      <category domain="https://shuaixin.cc/tags/%E8%87%AA%E7%94%B1%E6%84%8F%E5%BF%97/">自由意志</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%BF%83%E6%99%BA/">心智</category>
      
      
      <comments>https://shuaixin.cc/1-qi-1-hui/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>日文小筆記：吃吃「看」</title>
      <link>https://shuaixin.cc/Japanese-Try-and-See/</link>
      <guid>https://shuaixin.cc/Japanese-Try-and-See/</guid>
      <pubDate>Wed, 12 Aug 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<blockquote><p>本文同時收錄於<a href="https://shuaixin.cc/Korean-5-Try-and-See/">《韓文小筆記之五：吃吃「看」》</a>，內容幾乎一模一樣喲。</p></blockquote><p>我發現一個驚天大秘密，那就是中日韓三文都可以拿「看」來表達「試著做某事」！</p><h3 id="日文的吃吃看">日文的吃吃看</h3><p>日文中，吃是「<ruby>食<rt>た</rt></ruby>べる」、看是「<ruby>見<rt>み</rt></ruby>る」，我可以直接組裝起來表達「吃吃看」嗎？</p><p>可以！</p><blockquote><p>食べてみる（吃吃看）</p></blockquote><p>其中，食べる是一段動詞，連接兩個動作時去る加て，成為て型的「食べて」。</p><p>而見る也是一段動詞，如果要用禮貌型的話直接去る加ます，成為ます型的「見ます」：</p><blockquote><p>食べてみます（吃吃看）（禮貌形式）</p></blockquote><p>但總而言之，我們把「吃」跟「看」兩個動詞組裝在一起，表達了一個：「試著吃」。</p><p>但其實還是有個小細節要注意：在這樣的句型中，通常會寫成平假名的「食べてみる」而不是漢字的「食べて見る」。</p><h3 id="韓文的吃吃看">韓文的吃吃看</h3><p>韓文中，吃是「먹다」、看是「보다」，我可以直接組裝起來表達「吃吃看」嗎？</p><p>可以！</p><blockquote><p>먹어 보다（吃吃看）</p></blockquote><p>其中，먹다後面接보다要做아/어形變化，因為詞幹먹是陰性母音（非ㅏ或ㅗ），所以去다加어，變成「먹어」。</p><p>而보다如果要用禮貌型的話，因為詞幹보是陽性母音（是ㅏ或ㅗ），所以去다加아요，而보아요連在一起就會合併成봐요：</p><blockquote><p>먹어 봐요（吃吃看）（禮貌形式）</p></blockquote><p>但總而言之，我們把「吃」跟「看」兩個動詞組裝在一起，表達了一個：「試著吃」。</p><p>至於「오」跟「어」的讀音到底怎麼分？這題我們折騰過，請參考：<a href="https://shuaixin.cc/Korean-4-O-EO-Difference/">《韓文小筆記之四：오跟어怎麼分？》</a></p><h3 id="中文的吃吃看">中文的吃吃看</h3><p>中文中，吃是「吃」、看是「看」，我們可以組裝起來表達「吃吃看」嗎？</p><p>可以！</p><p>其實你仔細端詳「吃吃看」這個句式，還真一點都不合理。因為用相同的邏輯來造句的話：「打打踢」、「吃吃跑」，顯然文法錯誤、意義不明。</p><p>也就是說，「看」這個動詞自成了一種句型，語感上是在表達「做某件事，然後『看』做起來後果怎麼樣」。至於日文跟韓文是不是出自同樣的邏輯或語感呢，我來問問看強大的格友<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>——在此發動由 JN 大大開發的魔法卡：IndiePing！在我面前顯現你真正的力量吧！@<a href="https://blog.ikukaroom.com/ichigo-ichie/">Ikuka</a> @<a href="https://www.yozblog.com/">YoZ</a></p><p>另外，「吃吃看」、「吃看看」；「試試看」、「試看看」的意思表達完全一樣，超酷的欸。而如果動詞不是一個字的話，就只能是例如「測試看看」、「拔掉看看」。</p><h3 id="後話">後話</h3><p>把日文韓文兩造放在一起對比之後，更凸顯了它們的相似之處：都是黏著語、都是SOV語序。難怪<strong>阿爾泰語系</strong>的傳說會如此耐人尋味：日文、韓文、蒙古文、土耳其文都是「黏著語+SOV<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>」，他們之間是否真的有著什麼不為人知的歷史淵源呢？若否，為何明明蒙日韓都大量受到漢文化影響，卻沒有走「分析語+SVO」的流派呢？</p><p>本來很糾結這篇要歸類在日文筆記還是韓文筆記，但我一個念頭閃現，發現我是個成熟的自由的靈魂了，嘻嘻，兩邊都放！</p><p>不過其實 Hexo 有提供同一篇文章歸屬在複數個分類的功能，可以在 front matter 這樣宣告就好：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">categories:</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">語言筆記</span></span><br><span class="line"><span class="bullet">-</span> [<span class="string">日文筆記</span>]</span><br><span class="line"><span class="bullet">-</span> [<span class="string">韓文筆記</span>]</span><br></pre></td></tr></table></figure><p>但由於我的語言筆記已經有系列標題了，為了維持一貫的標題風格，最後還是決定兩個分類都放一篇，最任性那種。嘛，反正我的部落格我做主 :)</p><p>但這麼做對 SEO 而言是 NG 行為就是了，好寶寶不要學哦。</p><hr><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">1.</span><span style="display: inline-block; vertical-align: top;">這題有偷偷在<a href="https://club.1-know.org/">讀書會</a>群組討論過，右衣認為其中可能用到了隱喻、LQ7 認為只是單純省略了「看」後面的「會有什麼結果」</span><a href="#fnref:1" rev="footnote"> ↩</a></li><li id="fn:2"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">2.</span><span style="display: inline-block; vertical-align: top;">SOV 即語序為「主賓動」，例如：我你愛。而中文的「我愛你」則是 SVO，即「主動賓」。</span><a href="#fnref:2" rev="footnote"> ↩</a></li></ol></div></div>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E8%AA%9E%E8%A8%80%E7%AD%86%E8%A8%98/">語言筆記</category>
      
      <category domain="https://shuaixin.cc/categories/%E8%AA%9E%E8%A8%80%E7%AD%86%E8%A8%98/%E6%97%A5%E6%96%87%E7%AD%86%E8%A8%98/">日文筆記</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E6%97%A5%E6%96%87/">日文</category>
      
      
      <comments>https://shuaixin.cc/Japanese-Try-and-See/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>韓文小筆記之五：吃吃「看」</title>
      <link>https://shuaixin.cc/Korean-5-Try-and-See/</link>
      <guid>https://shuaixin.cc/Korean-5-Try-and-See/</guid>
      <pubDate>Wed, 12 Aug 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<blockquote><p>本文同時收錄於<a href="https://shuaixin.cc/Japanese-Try-and-See/">《日文小筆記：吃吃「看」》</a>，內容幾乎一模一樣喲。</p></blockquote><p>我發現一個驚天大秘密，那就是中日韓三文都可以拿「看」來表達「試著做某事」！</p><h3 id="韓文的吃吃看">韓文的吃吃看</h3><p>韓文中，吃是「먹다」、看是「보다」，我可以直接組裝起來表達「吃吃看」嗎？</p><p>可以！</p><blockquote><p>먹어 보다（吃吃看）</p></blockquote><p>其中，먹다後面接보다要做아/어形變化，因為詞幹먹是陰性母音（非ㅏ或ㅗ），所以去다加어，變成「먹어」。</p><p>而보다如果要用禮貌型的話，因為詞幹보是陽性母音（是ㅏ或ㅗ），所以去다加아요，而보아요連在一起就會合併成봐요：</p><blockquote><p>먹어 봐요（吃吃看）（禮貌形式）</p></blockquote><p>但總而言之，我們把「吃」跟「看」兩個動詞組裝在一起，表達了一個：「試著吃」。</p><p>至於「오」跟「어」的讀音到底怎麼分？這題我們折騰過，請參考：<a href="https://shuaixin.cc/Korean-4-O-EO-Difference/">《韓文小筆記之四：오跟어怎麼分？》</a></p><h3 id="日文的吃吃看">日文的吃吃看</h3><p>日文中，吃是「<ruby>食<rt>た</rt></ruby>べる」、看是「<ruby>見<rt>み</rt></ruby>る」，我可以直接組裝起來表達「吃吃看」嗎？</p><p>可以！</p><blockquote><p>食べてみる（吃吃看）</p></blockquote><p>其中，食べる是一段動詞，連接兩個動作時去る加て，成為て型的「食べて」。</p><p>而見る也是一段動詞，如果要用禮貌型的話直接去る加ます，成為ます型的「見ます」：</p><blockquote><p>食べてみます（吃吃看）（禮貌形式）</p></blockquote><p>但總而言之，我們把「吃」跟「看」兩個動詞組裝在一起，表達了一個：「試著吃」。</p><p>但其實還是有個小細節要注意：在這樣的句型中，通常會寫成平假名的「食べてみる」而不是漢字的「食べて見る」。</p><h3 id="中文的吃吃看">中文的吃吃看</h3><p>中文中，吃是「吃」、看是「看」，我們可以組裝起來表達「吃吃看」嗎？</p><p>可以！</p><p>其實你仔細端詳「吃吃看」這個句式，還真一點都不合理。因為用相同的邏輯來造句的話：「打打踢」、「吃吃跑」，顯然文法錯誤、意義不明。</p><p>也就是說，「看」這個動詞自成了一種句型，語感上是在表達「做某件事，然後『看』做起來後果怎麼樣」。至於日文跟韓文是不是出自同樣的邏輯或語感呢，我來問問看強大的格友<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>——在此發動由 JN 大大開發的魔法卡：IndiePing！在我面前顯現你真正的力量吧！@<a href="https://blog.ikukaroom.com/ichigo-ichie/">Ikuka</a> @<a href="https://www.yozblog.com/">YoZ</a></p><p>另外，「吃吃看」、「吃看看」；「試試看」、「試看看」的意思表達完全一樣，超酷的欸。而如果動詞不是一個字的話，就只能是例如「測試看看」、「拔掉看看」。</p><h3 id="後話">後話</h3><p>把日文韓文兩造放在一起對比之後，更凸顯了它們的相似之處：都是黏著語、都是SOV語序。難怪<strong>阿爾泰語系</strong>的傳說會如此耐人尋味：日文、韓文、蒙古文、土耳其文都是「黏著語+SOV<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>」，他們之間是否真的有著什麼不為人知的歷史淵源呢？若否，為何明明蒙日韓都大量受到漢文化影響，卻沒有走「分析語+SVO」的流派呢？</p><p>本來很糾結這篇要歸類在日文筆記還是韓文筆記，但我一個念頭閃現，發現我是個成熟的自由的靈魂了，嘻嘻，兩邊都放！</p><p>不過其實 Hexo 有提供同一篇文章歸屬在複數個分類的功能，可以在 front matter 這樣宣告就好：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">categories:</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">語言筆記</span></span><br><span class="line"><span class="bullet">-</span> [<span class="string">日文筆記</span>]</span><br><span class="line"><span class="bullet">-</span> [<span class="string">韓文筆記</span>]</span><br></pre></td></tr></table></figure><p>但由於我的語言筆記已經有系列標題了，為了維持一貫的標題風格，最後還是決定兩個分類都放一篇，最任性那種。嘛，反正我的部落格我做主 :)</p><p>但這麼做對 SEO 而言是 NG 行為就是了，好寶寶不要學哦。</p><hr><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">1.</span><span style="display: inline-block; vertical-align: top;">這題有偷偷在<a href="https://club.1-know.org/">讀書會</a>群組討論過，右衣認為其中可能用到了隱喻、LQ7 認為只是單純省略了「看」後面的「會有什麼結果」</span><a href="#fnref:1" rev="footnote"> ↩</a></li><li id="fn:2"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">2.</span><span style="display: inline-block; vertical-align: top;">SOV 即語序為「主賓動」，例如：我你愛。而中文的「我愛你」則是 SVO，即「主動賓」。</span><a href="#fnref:2" rev="footnote"> ↩</a></li></ol></div></div>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E8%AA%9E%E8%A8%80%E7%AD%86%E8%A8%98/">語言筆記</category>
      
      <category domain="https://shuaixin.cc/categories/%E8%AA%9E%E8%A8%80%E7%AD%86%E8%A8%98/%E9%9F%93%E6%96%87%E7%AD%86%E8%A8%98/">韓文筆記</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%9F%93%E6%96%87/">韓文</category>
      
      
      <comments>https://shuaixin.cc/Korean-5-Try-and-See/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>超級多的「有趣的小知識或冷門概念」：BlogBlog 同樂會主持人回顧文</title>
      <link>https://shuaixin.cc/Fun-Fact-Party/</link>
      <guid>https://shuaixin.cc/Fun-Fact-Party/</guid>
      <pubDate>Sun, 02 Aug 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>Greetings！這裡是 <a href="https://shuaixin.cc/Fun-Fact/">2026 七月的 BlogBlog 同樂會《有趣的小知識或冷門概念》</a>的回顧文章，我是本期的主持人劉昕。此次有 87 個部落格共襄盛舉，收到了共 98 篇投稿，匯聚了<strong>上百個有趣的小知識</strong>，若你願意駐足閱讀聆賞，包你滿載而歸……</p><p>若你是初來乍到的朋友，<a href="https://blogblog.club/party/">BlogBlog 同樂會</a>是一個促進部落格之間互相交流的活動：每個月由主持人訂定主題、公開徵稿，再將所有作品集中展示、彼此串聯，以真人互動取代演算法。所以這裡的文章都來自一個個活生生的部落格，每個都是各自的宇宙的中心，待你探訪。</p><p>在此篇回顧中，將由我帶大家逐篇閱覽本月的投稿，並在盡量不劇透的前提之下，做一些側邊的補充，希望能讓讀者們有更全面完整的收穫、帶走更多的知識。本回顧文通篇由我純手工撰寫，不含哪怕一丁點的 AI，我想這是<strong>對認真筆耕的格友們最基本的尊重與敬意</strong>。最終總字數超過一萬五千字，建議可以少量多餐、分次享用！而因為我根據投稿的特性有做一些排序上的設計，所以如果順著看會更加美味，建議順序閱讀。</p><p>你知道嗎？除了投稿內容中的小知識，整篇回顧文中我還埋設了 24 個野生的「<strong>你知道嗎</strong>」待你撞見，希望可以增加一些閱讀上的趣味性，還請慢慢發掘咯。各位熱愛知識的讀者們、格友們，讓我們開始吧！</p><h3 id="關於生物">關於生物</h3><p>Wen 的「<a href="https://www.threeportkeys.com/zh-cn/posts/cool-facts-blogblog-party-july-2026/">美人鱼|动物好麻吉|会浮的星球</a>」一次給了我們 7 個不同的<ruby>好貨<rt>知識點</rt></ruby>，因為裡面包含了很多動物，就被我歸類在這裡了。其中鬣狗跟優勝美地的部分讓我驚呆了…… 完蛋了，我既要稍作介紹、又不能涉及劇透，力度真難拿捏！難不成我後面會一直用農場標題嗎，讓我們繼續看下去。</p><p>我就擦邊來延伸聊聊好了。關於美人魚我以前有簡單<a href="https://shuaixin.cc/Fur-Seal-Lion-Walrus/">整理過</a>，有說法是，其實海牛目裡面的儒艮才是真正的美人魚，所以<strong>要成為一隻堂堂正正的美人魚可是有血統要求的哦</strong>。而關於「優勝美地」真正的字面意思就讓我想到了「阿美族」：所謂的「阿美」（amis）其實是「卑南語」中「北方」的意思！<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>也是被用「他稱」給命名了。但話說回來，大部分時候我們自己也是被他者取名，然後認分地用了一輩子。但仔細想想這又是如此合理，畢竟<strong>名字本來就是為了他人而存在的</strong>，如果世界上沒有其他人就不需要名字了，可不是嗎？</p><p>YangBear 的 「<a href="https://yangbear.bearblog.dev/3023/">陸龜會用鼻子喝水</a>」提到了陸龜會用鼻子喝水，是他自己劇透的哦！但我更印象深刻的是他在「題內話」中提到的關於日本對於食肉目的稱呼…… 我不能透露更多了，別那樣盯著我！至於生物階層分類的部分所言甚是，隨著新證據的出現，分類系統會一直滾動調整。以前的界門綱目科屬種那是一個完全不夠用，像羊就被放在牛科下面的羊亞科之中了。而下一個小知識又是另一個活生生的例子：</p><p>AngeCI 的「<a href="https://angeci.github.io/blog/zh/fun-facts/">有趣小知識</a>」也是 N 個小知識的大合集，但既然講到了生物階層分類，我就以裡面關於恐龍的詞條一起放過來介紹。我一樣擦個邊，因為 AngeCI 提到的這個我不能告訴你的知識點的關係，整個「爬蟲綱」其實已經不被學界認可了，否則它會是一個「沒辦法包含到所有後代」的「並系群」。好吧這樣顯然很難看懂我在說什麼，我把涉及劇透的部分放在註腳好了，請看完投稿再回來看咯。<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup></p><p>我們提到鳥了對吧？那自然就輪到 LQ7 的 「<a href="https://lq7.tw/thinking/crows/">關於「鴉」的兩三事</a>」，裡面介紹了烏鴉、大卷尾、臺灣藍鵲的各式資訊，並且裡面有人根本不是鴉哦，是誰呢？下次會考，記得看。前幾週在大湖公園辦野餐讀書會遇到了一群大卷尾，他們居然追著鳳頭蒼鷹在 A，看傻了我。老哥，對方是老鷹欸老鷹，太有種了吧！真不愧是「鴉王」。回顧文撰寫的途中，LQ7 發佈了「<a href="https://lq7.tw/thinking/crows-dlc/">關於「鴉」的兩三事 DLC</a>」，都八月了還有佛心更新，哪裡來的好事！</p><p>蓮賦的「<a href="https://lotussing.blog/archives/4404">關於鳥的二三事</a>」<s>提到了雞爪</s>也提到了鳥。仔細吃雞爪會發現，跟人不一樣，鳥的跗骨跟蹠骨（按：都是腳踝上的骨頭，人有 7 塊跗骨跟 5 塊蹠骨）已經融合成了一個整體，導致整個腳踝喪失了內外旋的能力，於是<strong>用走的根本沒辦法轉向</strong>！所以很多鳥都是用跳的在空中轉彎，各位可以觀察一下。而蓮賦則是提到了不同棲位的鳥種，其腳趾的排列方式會有所不同。</p><p>繼續鳥的話題，粉紅鹿的「<a href="https://pinkway.mataroa.blog/blog/bird-with-four-sex/">四種性別的鳥</a>」提到加拿大麻雀居然有四種性別！究竟是何以可能呢？進去一探究竟咯。當初跟小夥伴們分享此篇，得到了「看不出來這跟性別有什麼關係」的回饋，當時就覺得有必要解釋一下，故寫了「<a href="https://shuaixin.cc/Origin-of-Sex/">從配子到性染色體：性別是怎麼出現的？</a>」做為一個前情提要的補充，各位可以當做這<strong>兩篇</strong>關於性別的投稿的引子來看：</p><p>其中的另一篇就是豆豉椒鹽的「<a href="https://blog.douchi.space/book-bitch/">剝開科學中的偏見看雌性動物——讀《Bitch》</a> 」。這是一篇精實飽滿的讀書筆記，營養豐富，建議找個好消化的姿勢再開始閱讀。原書《Bitch》居然手筆自我的愛書<a href="https://shuaixin.cc/The-Selfish-Gene/">《自私的基因》</a>的作者<strong>道金斯</strong>的學生，而關於道金斯主張的「異配生殖開啟了雌性剝削之路」，《Bitch》顯然有話要說，提出證據一路啪啪打臉，痛快。</p><p>既然講到性別，我再丟一個有趣的。你知道嗎？<strong>所有的雌性哺乳類都是鑲嵌體</strong>。我們知道基因的表現關乎劑量，而哺乳類中的雌性有兩條 X，那是不是代表雌性有兩倍的 X 染色體的基因表現呢？非也，這樣劑量太高了，會出事的。事實上，雌性個體的兩條 X 在胚胎的某個階段，就會有一條被甲基化失活萎縮。而對於此時的每個細胞來說，要失活掉爸爸提供的 X 還是媽媽提供的 X 呢？是隨機的！於是，雌性哺乳類基本上都是鑲嵌體：<strong>單一個體的不同細胞之間有不同的基因表現</strong>，部分細胞表現了爸爸的 X、部分表現了媽媽的 X。</p><p>這也是為什麼<strong>三色貓都是母貓</strong>，因為橘毛基因在 X 染色體上，理論上橘色跟白色不應該同時出現，除非你發動雌性哺乳動物的超能力：我兩種都要，發動鑲嵌！至於日本文化中被視為幸運象徵的「雄性三色貓」，只能是像 XXY 的這種克氏症候群才有機會，所以相當罕見。</p><p>再、再讓我補充一個就好，都講到這個份上了，這個不講我會受不了。在流行病學上，自體免疫疾病盛行率的男女比是 1:4，相當傾斜。其中就有一個被認為有可能的原因是，因為兩種 X 分別在身體裡表現，彼此之間就產生了互相干擾。雖然這樣講並不精準，但饒富趣味：爸爸的 X 跟媽媽的 X 在身體裡打架了呀！</p><p>而同樣是豆豉椒鹽的「<a href="https://blog.douchi.space/book-win-friends-influence-fungi/">茶加奶和奶加茶一樣嗎？——讀《How to win friends and influence fungi》</a>」你可以知道先加奶跟先加茶究竟有沒有差。裡面還有提到例如「哺乳是哺乳類的專利嗎」、「為什麼沒有蒸汽飛機」的多個知識點，也是一大包知識大補貼。至於你問我都先加奶還是先加茶？我認為咖喱就是要拌勻再吃（？）</p><p>皆米的「<a href="https://jai33snotes.com/5-fun-facts-about-penguins/">五個可愛的企鵝小知識</a>」跟我們介紹了少數不會飛的鳥之一的企鵝，讓我想到了在《那些讓你更聰明的科學新概念2》中看到的有一個可愛的概念：「企鵝不會飛嗎？會啊，企鵝其實是在水中飛行。」既然都提到企鵝了，那就讓大家也看看我們台灣常見的<a href="https://lq7.tw/photo/night-heron/">南崁企鵝</a>吧——友人審稿後認為這樣有誤導的嫌疑，跟各位提醒一下，南崁企鵝不是企鵝啦，但這樣叫格外親切就是了。</p><h3 id="關於人與生理與心理">關於人與生理與心理</h3><p>小妖的「<a href="https://vaviona.bearblog.dev/3584/">虛假記憶</a>」透過真實案例與心理學實驗向我們展示了記憶的不可靠性，提出了我們其實必須放在心上的問題：「連自己的記憶都不可靠，該怎麼認知這個世界？」但大部分時候我們並不會把這個問題放在心上。這有點像<strong>美諾悖論</strong>的變體，你要<strong>如何知道一件你不知道你不知道的事</strong>呢？同樣的，我們在記錯的時候要怎麼知道自己記錯了呢？我一直說「心智很笨」，真的沒在騙你，小妖這篇文章講的就是心智<strong>為數甚多</strong>的瑕疵的其中一個。</p><p>Wilson 的「<a href="https://wilsonchao.com/blog/cross-circulation">一台手術與兩條性命</a>」也展示了一個真實案例：一場手術的死亡率居然有可能超過 100%！哇這很酷，Wilson 說如果聚會中有需要提到任何冷知識的時候可以拿去用，那我就不客氣咯。</p><p>Andy 的「<a href="https://blog.andy-hu.com/parenting_tips/">實習爸媽的十個小錦囊</a>」給了我們許多關於育嬰的經驗分享，其中母乳的部分讓我想到以前我很不解的一個問題：都說母乳可以提供免疫球蛋白（IgA）給寶寶，但憑什麼？IgA 是蛋白質欸，消化系統表示 am I a joke to you？理論上要消化成氨基酸才對，而不是以蛋白質的形式提供給寶寶吧？但你知道嗎？IgA 還真就把寶寶的消化系統當做 joke，餵食兩小時後，消化系統中的 IgA 濃度居然還有一開始的一半，真不給面子。<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup></p><p>讀書會夥伴 Fang 的「<a href="https://fangstuff.com/posts/nameless-baby/">無名寶寶、你住過的小小房間與夫妻臉</a>」分享了若新生兒資料不詳，該寶寶要跟誰姓？出生年月日又要如何記錄？還有一個 Fang 在讀書會跟我們介紹過的關於<strong>夫妻臉的原因</strong>。這個我超愛的，基本上我們可以說：夫妻臉是夫妻的因，而非夫妻的果！……掙扎了十秒後發現我這裡不分享這個一定會睡不著，抱歉了 Fang，借我不正經一下：你知道嗎？咖啡因來自咖啡果，所以其實咖啡果是因，而咖啡因是果。</p><p>Wei 的「<a href="https://blog.wei-lee.me/posts/random-thoughts/2026/07/fun-trivia-and-obscure-concepts/">有趣的小知識或冷門概念 - 睡前小酌</a>」提到<s>人類血液中天生缺乏 0.05% 的酒精濃度，所以我們要主動補充，讓我們可以更加放鬆、更有靈感，事業和社交等表現都能更好</s>。喂，不是啦。可能很多人覺得「睡前小酌」讓自己睡得更好了，但真的是這樣嗎？其實暗示到這邊應該很明顯了。我跟 Wei 一樣看了這本<a href="https://shuaixin.cc/Why-We-Sleep/">《為什麼要睡覺》</a>，我信中跟 Wei 說看了這本以後就很少喝酒了，少了很多生活樂趣，<strong>果然知識是一種詛咒</strong>。沒想到他回我：「就像魔法少女小圓說的，奇蹟不是免費的，如果你祈求了希望，也會散播出同等的絕望」。我笑超久www 我還去查證了一下，你知道嗎？真的有魔法少女說過這句話。</p><p>Jay Walker 的「<a href="https://jaywalker.bearblog.dev/3991/">你知道嗎，你的品味是由你的階級決定的。</a>」跟我們描述了所謂「品味」實際上能被所處的階級決定。但我想也是，畢竟人的「喜好」通常也不是自己在「深思熟慮」後所決定的，而是相對被動地接受。類似的概念就像賈伯斯說過的一個概念：「 消費者通常要看到產品，才會知道自己想要什麼」，而人在<strong>不同的階級就會「看到」不同的「產品」</strong>，故有 Jay 提到的這個現象。另外，這篇的架構讓我想到了最近很紅的《財富階梯》，感覺很多人在推，是行銷很強還是真的是好書呢？期待有格友分享心得。</p><p>黃宏勝的「<a href="https://hshuang.com/posts/urine-therapy-origin/">喝尿家族：起源</a>」介紹了歷史上各地的「尿療法」，而他在最後提醒我們其實影視動漫作品中常常會有的「敷尿」行為其實是錯誤無效的！是的，舉凡水母蟄傷、蜜蜂蟄傷、蚊蟲叮咬，尿都派不上用場啦，甚至有感染的風險哦。至於為什麼朋友就跟雪人一樣呢？什麼啦，我快笑死XD</p><p>ㄅㄨ的「<a href="https://plog.bearblog.dev/bei-bei-jiao-jiao/">被被角角</a>」說到「用指尖按壓摩擦被被的角角會有種難以言喻的快感」，我個人無法體會，但看到ㄅㄨ附上的連結裡面確實有好多人同意這件事耶！至於對熟悉氣味的依附我就十分可以理解了，臭臭的床才好睡嘛（？）</p><p>我自己的示範投稿「<a href="https://shuaixin.cc/50-Hz/">你知道嗎？麻辣的麻是一種 50 赫茲的錯覺</a>」提到了天空可能是紫色的、辣是一種溫痛覺、還有麻是一種震動覺。你知道嗎？<strong>謝謝你有認真看我認真寫的回顧文</strong>，所以再送你一個延伸知識：<strong>鳥不怕辣</strong>！因為鳥沒有 TRPV1 受體！辣椒素是辣椒植物在演化上有針對性的防禦策略，它防止會咬碎種子的哺乳類吃辣椒，但不阻止鳥類幫忙播種！（按：演化當然沒有針對性，只是就結果論而言，不防被咬碎的品種在被人類愛上之前就都被淘汰了。）</p><p>右衣的「<a href="https://yoe1.bearblog.dev/2730/">讀了這本書，你會更懂科學的語言：《這才是心理學》</a>」向我們介紹斯坦若維奇的著作《這才是心理學》，讓我想到跟右衣的結識就是因為斯坦若維奇、與部落格同樂會。右衣在一月（主題為「推坑」）的<a href="https://yoe1.bearblog.dev/the-robot-s-rebellion/">投稿</a>成功推坑了我斯坦若維奇的《機器人叛亂》，後來右衣來參加我們讀書會那就是後話了。我想這就是部落格同樂會的醍醐味吧，讀者或格友們看到有共鳴的內容，不妨多多主動交流，以真人的互動替代演算法吧！</p><h3 id="關於語言與文化與地區特色">關於語言與文化與地區特色</h3><p>AngeCI 的另一篇投稿「<a href="https://angeci.github.io/blog/zh/chinese-dialectal-phenomena/">淺談數個漢語方言現象</a>」提到了一些聲韻相關的內容，我對這些一直都很感興趣，但也一直很苦手。像裡面提到台語的<strong>入聲脫落</strong>就是在說我嘛，我根本分不出差別。之前跟我們讀書會的台語專家<a href="https://wox080xow.github.io/">馬密</a>很興奮地分享「中文的東西在台語是 Mī-kiānn（物件），工作在台語是 khang-khuè（空缺）」，就馬上被糾正：「物是入聲 mi̍h」。嗚嗚。</p><p>cue 了那麼多次馬密，他有沒有投稿呢？有的哦，Lí Ka-io̍k 的「<a href="https://wox080xow.github.io/2026/07/02/tai-gi-u-ji.html">Tâi-gí ū jī?</a>」（譯注：台語有字？）就是出自馬密手筆。裡面一路從大清、日治到中華民國時代，介紹台語的書寫方式與其歷史。而馬密使用的「文字」是什麼呢？是白話字。白話字跟目前教育部推行的台羅（台灣閩南語羅馬字拼音方案）稍有不同，但相互可以簡單地對應，建議各位可以使用 LLM 來輔助閱讀。至於為什麼我們都叫他馬密，因為他的英文名字是 Malvin。</p><p>然後我們迎來了建中老師！建中投稿的「<a href="https://kiantiong.com/sutian/50/">教典僻智識的精選佮起源</a>」是他「<strong>教典僻智識</strong>」系列文章的第五十篇，有在接觸、學習台語的朋友們應該都對這個系列不陌生。啊，大佬來投稿，蓬蓽生輝。而我用「教典相命術」算出來的詞彙是「毋捌」，大家也可以去試試哦！順帶一提，金萱字體真的好好看，我有生之年也要把我的網站改成金萱。</p><p>我（不是我）的「<a href="https://e89295.com/blog/2026-06-20.html">一百年前的「精靈文」注音符號</a>」提到在 1922 就有美術體的注音文現蹤在出版物中了。與現在我們單純拿來「注」音不同，當時的注音符號在某些知識分子眼中，有著不一樣的功能跟<strong>任務</strong>。話說，拿第一人稱代名詞來當署名算你狠，這就是主體性攻擊嗎。（啥）</p><p>蘿蔔的「<a href="https://carrot.tw/posts/bopomofo/">注音狂想曲</a>」也提到了注音，還提到了以前用的符號比現在還多。你知道嗎？其實注音也是一種文字。並且注音符號算是一種比較少見的文字類型：它是「半音節文字」哦，類似日文的「音節文字」但並不是，因為裡面除了音節（例如ㄢ）以外還有字母（例如ㄅ），有趣吧！</p><p>Namitz 的「<a href="https://namitz.com/posts/ALilTip/">有趣的小知識：台灣專屬</a>」為我們帶來了除了注音符號以外的另一個台灣特產：愛玉。我本來對愛玉只有台灣吃得到是略有耳聞，但沒想到它的名字是這樣來的，感覺跟「水蓮」的命名有著異曲同工之妙呢（？）</p><p>JN 的「<a href="https://blog.giveanornot.com/tsao-oo/">「一府二鹿三艋舺」的下一句是什麼？</a>」光看標題就嚇到我，納尼？這傢夥還有下一句的嗎？四滑五叉六外旋？（按：腦神經的背誦口訣）不好笑對不起。記得以前歷史課本提到這個是為了展示河港對於地區發展的影響，而可能整句講完就顯得太多細節會有造成學生負擔之嫌，所以沒有講完？但就像大里人會知道一府二鹿三艋舺的下一句一樣，我們新莊人知道一府二鹿三艋舺的上一個版本哦——你知道嗎？「一府二鹿三艋舺」在更早之前其實是「一府二鹿三<strong>新莊</strong>」！但因為大漢溪淤積了，導致新莊在河口通商的重要地位下降，後來就被艋舺取而代之了。</p><p>SuperGrey 的「<a href="https://blog.supergrey.uk/history-crisis-of-chinese-characters/">漢字的三次瀕死體驗</a>」向我們敘述了漢字邁入現代所經過的幾個坎兒，而這並不容易，看看隔壁的字喃就知道。漢字作為現在幾乎是世界上絕無僅有的<strong>語素文字</strong>（logogram），雖然我們身在其中沒太多特別的感覺，但這並不是一件容易的事，其實我們是在眾多表音文字的環伺之下中流砥柱著呢。</p><p>李俊緯的「<a href="https://jsdurand.xyz/kautuhala.html">搞都哈啦</a>」內含古法語、古希臘語、古埃及語、梵語、德文、希伯來文、阿卡德語（連美索不達米亞用的語言都出現啦）、奇恩文字（比古埃及文更早的文字！？），越看膝蓋越痛，怎麼回事？才發現不小心跪著在讀。比較印象深刻的（唯一跟得上的）是其中古埃及文居然是表子音，但不是元音附標、而是部首附標？太酷了吧。</p><p>ttheng 的「<a href="https://microblog.ttheng.com/some-trivia-july-2026/">小香港、福建獅與「河嘻」</a>」提到了「河嘻」這個用華語讀不明白、用粵語也說不清楚，反而要在理解潮州話的前提之下，才能輾轉從廣東話參透其含義的詞彙。他說的「只有無法欣賞多元語言文化交流共存的人，才會一直將『語言一統化』視爲圭臬。」所言甚是啊。套一句馬密的說法，經過民族主義洗禮的國家，多少有這種經驗呢。（前幾天馬密分享了法國也有類似的語言統一的歷史）</p><p>ttheng 的另一篇「<a href="https://microblog.ttheng.com/daging-harimau-menangis/">老虎哭泣肉？</a>」則是提到了這個泰文直譯成馬來文的有趣菜品名稱。都講到牛肉跟沙朗了，送給選擇障礙的老饕們一個錦囊知識點：你知道嗎？其實丁骨牛排中，裡面就包含了沙朗跟菲力兩個部位哦！（by 大學時解剖學剛學到下背單元恰巧當天跑去吃牛排產生的豁然開朗如雷灌頂福至心靈的<a href="https://shuaixin.blogspot.com/2019/07/porterhouse-steak.html">理解</a>）</p><p>宇宙 Yuzhou 的「<a href="https://yuzhou.my/2026/07/12/the-real-java/zh-TW/">真正的 Java</a>」跟我們講述了 Java 自然語言、Java 程式語言跟一些周邊知識，我想這就是宇宙大電波吧（哇還真的是宇宙），因為讀書會剛討論到印尼地區為什麼最後用的不是爪哇語的事情。其實在荷治時代的印尼周邊，荷蘭選用的官方語言就已經不是爪哇語了，反而是馬來語。因為馬來語之於印尼，就像拉丁語之於歐洲大陸、滿大人對於中國。知識分子、士紳、通商用的都是馬來語，所以就算使用人口明明就是爪哇語多，但最終還是沒被官宣。至於現在的印尼話呢，其實是從馬來話改編、設計而來的。</p><p>水壺翔的「<a href="https://water-bottle-fly.bearblog.dev/understand-braille-can-know-order-of-letter/">會點字的附加技能—第幾個字母，算的超快！</a>」給我們帶來了點字！我有想過能收到不少各國語言文字相關的投稿，但還真沒想到能收到點字。水壺翔提到學會了點字之後，能順便解鎖一些方便的酷酷技能哦。</p><p>Susan 的「<a href="https://susushare.com/%E5%8D%A1%E5%93%87%E4%BC%8A%E5%85%A7/">卡哇伊內</a>」跟我們介紹了在日本「卡哇伊」這個詞的道地理解，它可以涵射的範圍比我們所知的更廣許多。另外還提到了日本的手扶梯現象（沒想到跟台灣是如此類似）、日本的首都究竟有沒有官宣，進去一探究竟吧。</p><p>日本第二彈，Jabee姜走訪了日本 47 個都道府縣的一半以上，給我們總結了一些注意事項在「<a href="https://jabee.net/notes/260721/">什麼！能刷 Suica 進站，卻不一定能出站？搭乘日本鐵道 JR 超詳細注意事項攻略！</a>」。太好了，日本的鐵路真是有夠複雜，甚至每一條都是不同單位在營運，確實有很多眉眉角角，愛跑日本的朋友們必須拜讀此篇。</p><p>日本再一彈，Meowjay 的「<a href="https://meowjay.cc/posts/factory-unique-code/">日本食品包装上的「製造所固有記号」有什么用？</a>」幫我們科普了「制造所固有記號」的用處及查詢方式，真是非常有探索精神。而 Meowjay 說知道這些對我們來說有什麼用他也不知道，nice 啊，非常有「有趣的小知識或冷門概念」的精神。</p><p>下一站我們飛到韓國，Yoon 的「<a href="https://yoon.club/6415/">在首爾我的觀察（食物篇）</a>」跟我們談了韓國的泡麵與星巴克跟在台灣的不同之處，看得我都餓啦！只好打開一包辛拉麵壓壓驚…… 但話說回來，call back 一下我自己的投稿，因為辣是一種溫痛覺，所以其實嚴格來說耐不耐辣跟「味蕾」無關哦哈哈哈。（白目的主持人）</p><p>下一站飛比較遠，Poya 的「<a href="https://poya.school/blog/bavaria-blue-white">藍白色的邦</a>」帶領我們來到了歐洲。原諒我沒聽過巴伐利亞，原來是德國的一個邦。雖然我們可能不認識巴伐利亞這個地名（還是其實只有我），但巴伐利亞的藍白配色，也許我們早就已經在日常生活中看過了…… 進去漲漲見識吧。</p><p>回到中文世界，書言的「<a href="https://shu-yen.com/fun-facts/">教外國人中文的小知識</a>」讓我們從另一個角度回頭看我們自己習慣的語言。很多人說中文沒有文法，一來那是因為身在其中沒感覺、二來因為中文是<a href="https://zh.wikipedia.org/zh-tw/%E5%88%86%E6%9E%90%E8%AF%AD">分析語</a>，從字面上看不到詞形變化、時態變化、單數複數，所以就覺得沒有文法，但當然是有的啦。而且就連已經懂得四個聲調的我，學起八個聲調的台語都如此狼狽了，語調語言的使用者來學我們<strong>聲調語言</strong>，那是真的感覺自己在「唱歌」吧。（我們自己沒感覺，但聲調語言在外國人耳中有時候就像一串旋律呢）</p><h3 id="關於影與音">關於影與音</h3><p>我們講到旋律對吧！（硬要找元素轉場）</p><p>官大為 Wiwi Kuan 的「<a href="https://wiwi.blog/blog/4-useless-music-facts">四個沒用的音樂小知識</a>」提到直升機的聲音是人類文明中最重要的八個聲音之一（請點進去看原文以破解主持人的斷章取義）。而說到被 play 最多的旋律，我本來以為會是聖誕歌之類的，因為道金斯就用聖誕歌作為「旋律也是一種迷因」的例子，而迷因是文化傳播的單位，跟基因一樣服膺於達爾文的演化機制。嘿嘿，音樂這裡也能看到道金斯他老兄，想不到吧。至於<strong>最強的旋律迷因</strong>是哪段旋律呢？去看看 Wiwi 的分享咯。</p><p>RayrrrrrR 的「<a href="https://rayrrrrrrr.bearblog.dev/2480/">自言自語：那些在腦海想過、不知道可以跟誰分享的小小想法合集，之一</a>」是多個話題的合集，而其中的「每條大街小巷，每個人的嘴裡」這條硬控了我許久，久久無法自已。對呀！這首過年歌是小調的，大過年的，你小調個什麼勁兒？沒想到這首歌打從一開始就遠遠不是一首有歡騰意味的存在。哇，以後都不知道該以什麼心情應對此曲了。</p><p>JN 的「<a href="https://blog.giveanornot.com/mandarin-cover-songs/">那些你耳熟能詳的華語金曲，其實都是翻唱的！</a>」提到「青蘋果樂園」、「對你愛不完」、「失戀陣線聯盟」、「熱情的沙漠」、「妙妙妙」、「心電心」、「流星雨」、「快樂崇拜」都是…… 我好像也很難防劇透了，畢竟 JN 的標題都這樣寫了。而我本來只想拿其中幾個我也不知道是翻唱的歌來介紹，然後發現我居然很多都不知道，好扯！居然那麼多都是嗎！！還有超多例子的哦，大家進去看看哪些你的愛歌其實有複雜的前世今生吧。</p><p>Eddie Lv 的「<a href="https://eddielv.com/articles/mic-knowledge/">麥克風的 14 個冷知識</a>」非常適合放在音控室給使用者科普一下，而根據其中的第 8 點，確認過眼神，是活派的夥伴。而關於「拍麥克風頭」確實是大家的一個不知道怎麼發展出來的習慣！根據 Eddie Lv 的說法，是因為其中的時間差恰好造成了一個巧妙的「因果關係」的錯覺，我覺得這個發現十分有見地。這讓我想到一個也跟因果關係的錯覺有關的小知識：你知道嗎？<strong>其實冷不會造成感冒哦</strong>。</p><p>PipperL 的「<a href="https://blog.serv.idv.tw/2026/07/lcd-vs-led-using-camera/">為什麼相機一拍螢幕就破功？</a>」給我們介紹了 LCD、LED 屏幕的原理，與其造成的被拍攝時產生的結果。是的呢，其實很多時候我們可以透過對畫面進行拍攝，來判斷該畫面顯像使用到的技術。你知道嗎？連「投影機投出來的畫面」在被拍照時也會產生特殊的現象哦。很多市面上基本款的投影機採用了「單晶片 DLP」的技術，雖然光源只有一個，但它透過一個有 RGB 三原色的「色輪」快速轉動，讓每一個瞬間打出來的顏色都不一樣。而此時如果我們對投影出來的畫面拍照，在某些快門速度之下，就會看到 RGB 分離的彩色畫面哦！</p><p>阿標的「<a href="https://ilovemovie.pika.page/posts/b">美麗的毒蘑菇「Ｂ級片電影」－朴贊郁</a>」跟我們介紹了所謂 B 級片的由來、與其為電影產業帶來的影響。這讓我想到黑膠跟卡帶時代的 B 面歌曲，源於專輯播到一半要手動去翻到 B 面，而 CD 時代以後沿用了這個詞彙並引申為「非主打歌曲」的意思。其實我覺得很多所謂 B 面歌曲挺可惜的，明明就很出色卻比較冷門，也難怪現在大家都不出專輯了，拼命出單曲。啊，這些都是我聽長輩說的，才、才不是我的時代呢！</p><h3 id="關於天文與地理">關於天文與地理</h3><p>天文與地理怎麼可以放在一起？因為上知天文、下知地理，上下交相、<strong>天地合補</strong>。呵呵，不好笑。抱歉，補償大家一個小知識好了：你知道嗎？「上知天文下知地理」出自《黃帝內經》，其實他的下一句是「中知人事」。</p><p>shuojen 的「<a href="https://shuojen.com/blog/2026/06/20/fun_fact">有趣的小知識</a>」提到了為什麼魔術方塊大於黃仁勳（按：主持人又在亂介紹）、西洋棋最快的將死、跟幾個反直覺的台灣地理冷知識。台灣的我也講一些私藏品（？）好了，其實新北跟台中之間只隔了一個縣市哦，隔的還是宜蘭，酷吧！然後台東比台南還南、台北比台東還東、永和有中和路、中和有永和路、南港在北部、北港在南部，嘻嘻。</p><p>bee5 的「<a href="https://mia.piccina.casa/blog/not-that-south/">沒那麼南</a>」提到了羅馬跟北海道居然、居然、居然…… 太令人震驚了。這個我好愛，必須加入我的「你知道嗎」資料庫，這個小知識我就盜走啦！（怪盜基德予告状.jpg）</p><p>O’Oh 麵麵的「<a href="https://oohmemen.com/blog/epicycles/">Epicycles</a>」提到了金星、水星、太陽、日心說、地心說、與本輪。而金星這題我會我會，一個行星表面溫度熱不熱關乎的是熱量的「保留」。雖然水星靠太陽更近，但我記得因為水星太輕了，重力抓不住溫室氣體所以無法形成穩定的大氣，於是保溫能力很差、晝夜溫差極大，所以種出來的水果一定很甜（蛤）。而因為只要有人提到金星我就一定會忍不住講這個，於是：</p><p>劉昕的「<a href="https://shuaixin.cc/Venus-Instrumentalism-and-Hooke/">叛逆的金星、工具主義、虎克真的很醜嗎？</a>」分享了金星的<strong>究極大秘密</strong>，跟一些天文學上的周邊八卦。你知道嗎？其實<strong>平方反比定律不是牛頓先想出來的</strong>哦。</p><p>Shuyu 的「<a href="https://shuyulin1127.com/pixel-gif-outerspace/">抵達月球的方法</a>」發揮指數的威力，教我們一招用手邊的工具就能抵達月球的方法。Hmm… 這篇嚴格來說要歸類在數學類別，但因為很浪漫地使用了月亮作為目的地，就拿來當做這兩個分類之間的<strong>過門</strong>啦，感謝 Shuyu。</p><h3 id="關於數學與物理">關於數學與物理</h3><p>完美銜接指數的話題！TK 的「<a href="https://gooseboop.com/posts/00027-socold/">10的N次方</a>」跟我們羅列了 10 的冪次的中文單位命名，其中十的 64 次方是「不可思議」、而十的 68 次方是「無量」，所以五條悟的無量空處就是一萬倍的不可思議，這真是太不可思議了（《動物星天頻道》腔）。</p><p>粉红鹿的另一篇投稿「<a href="https://pinkway.mataroa.blog/blog/three-metric/">三种不同的度量</a>」給我們帶來了不同的<strong>度量方式</strong>。我自己很喜歡用非歐幾何來指出一件事：我們在談論任何知識體系之前，先注意彼此之間是否採用了相同的「公理」。很多時候，人跟人之間無法對齊就在於一開始用了不同的公理出發。所以我們在開始對話之前要先問對方，請問在你的世界觀之中，<s>是否存在一個不在直線上的點，有且僅有一條不與該直線相交的直線呢</s>？好啦不鬧，總之，粉红鹿的這句切中了精髓：<strong>歐式幾何的第五公理是一種選擇，而非真理</strong>。</p><p>XJD 的「<a href="https://ordinarykuma.blogspot.com/2026/07/blog-post.html">【廢文】基本事實：物理和數學</a>」一樣提到了作為基本事實的「公理」。公理是不證自明的、大多人都接受的現象跟事實，然而要不證自明到「什麼程度」才能被作為公理呢？XJD 對此提出了一些討論。</p><p>小麥的「<a href="https://my-blog.worldofwheat.cc/blog/2026/07/basic-electrical-knowledge">一些關於電的基本知識</a>」介紹了不止一些關於電的知識，其中的 DC 頭看得我豆頁疼，因為最近就交手很多 DC 輸入的設備，然後大家的尺寸都不一樣，有夠煩。我覺得對於大眾來說最實用的部分應該是「電壓源」這件事：其實大部分變壓器你只要找到電壓吻合的就好，只要你設備需要的電流沒有超過那就能用哦。</p><p>Timo 的「<a href="https://timoblog.com/post/73/">73</a>」在他網站的第 73 篇文章跟我們分享了 73 這個 <strong>Sheldon 質數</strong>，並且這個特別的質數被證明是<strong>絕無僅有</strong>的存在。是什麼性質讓 73 這個數字如此特殊呢？且看 Timo 娓娓道來。</p><p>恐龍化石的「<a href="https://cylikesreading.wordpress.com/2026/07/25/day-of-week-blogblogclub/">2026年7月31日是周五，2027年7月31日是周六</a>」告訴我們其實每年都至少會有一個月是「神奇月」，啊，我想大家應該也都喜歡神奇月，有一種說不出的舒服的感覺（但恐龍化石是興奮欸）。並且這個我確實沒想過：如果今年的生日在星期某，明年是否能用規律推算呢？還真的有！這個好，「你知道嗎」資料庫再加一（怪盜基德予告状.jpg）。</p><p>Lîm Tsú-thuàn 的「<a href="https://dannypsnl.me/Z00L/">色彩繽紛的範疇論</a>」向我們介紹了…… 範疇論，非常數學的數學，我先自首我跟不上裡面的內容。但範疇論似乎是以拓撲學為基礎而被提出，我就在場邊給大家暖暖場吧。你知道嗎？在拓撲學中，吸管、甜甜圈、馬克杯是同胚的（含有一個貫穿的洞），而如果不要太在意細節的話，其實所有後口動物——包含所有脊索動物、棘皮動物——也跟吸管、甜甜圈、馬克杯是同胚的。但如果在意一下細節的話，其實<a href="https://app.notion.com/p/re-Jul-38534b530f1580b6a35fcb64775f57a6?pvs=21">人有七或八個洞</a>就是了。</p><p>DuckLL 的「<a href="https://blog.duckll.tw/blog/waiting_time_paradox">等待時間悖論</a>」提到了我很喜歡的「檢查悖論」。實際等公車所花的時間平均而言<strong>必定</strong>大於確切的發車時間間隔，所以並不是大家的心理作用，是<strong>真的</strong>。底層原理跟「戶口人數」不能用抽查的一樣，必須普查，因為<strong>如果戶口人數用抽查的，結果必定會虛多</strong>，大家可以品品看。之前在<a href="https://shuaixin.cc/System-Thinking-in-Daily-Life/">《佛畏系統》</a>中有稍微研究了「檢查悖論」跟「選擇偏誤」的差別，其中伯克森悖論（人越帥越渣？）其實是選擇偏誤、倖存者偏差也是選擇偏誤，他們並不是檢查悖論的一種。</p><p>拍拍的「<a href="https://route110.blog/posts/incandescent-light-bulb/">白熾燈泡</a>」提到了白熾燈泡的顏色其實名不符實。你知道嗎？跟太陽一樣，白熾燈泡的發光原理也是來自黑體輻射。也許你知道，每個元素都有其各自的「焰色」（來自電子躍遷所發出的固定頻率的電磁波），於是我們可以透過判斷光譜來知道是誰在發光（所以我們能知道恆星的元素組成）。那是不是也能看出白熾燈泡其實是誰在發光呢？沒錯，雖然是連續光譜，但其實使用儀器仔細觀察，其中依舊有不連續的焰色存在哦。</p><p>ShenJing 的「<a href="https://shenjing.me/blog/Fun-Fact/">小知識：男人乳頭、三門問題、K 語言</a>」因為三門問題被我放在這裡，他提到的「999 羊 + 1 車」的變體就讓我想到了「劍走偏鋒檢驗法」：如果身為參賽者，一時之間很難判斷機率的話，不如就想「此時若有 100 門，我們選完一扇後，主持人打開了其他98扇沒有獎品的門」。如此一來，要不要換門就非常直觀可以判斷了。不曉得 ShenJing 的變體是不是在指這個？</p><h3 id="關於資訊">關於資訊</h3><p>JN 的「<a href="https://blog.giveanornot.com/fun-facts-and-a-secret/">有趣小知識，還有一個秘密</a>」是我本次最早收到的投稿，比我的投稿還早就算了，甚至<strong>比活動頁面還早出現</strong>，有夠扯。JN 分享了他是怎麼做到投稿比活動本身快、RSS、USB、跟硬碟的小知識。話說害格友們上癮的 <a href="https://indieping.giveanornot.com/">IndiePing</a> 就是出自 JN 之手，我為了不要手賤一直去看，直接在我司防火牆設了針對 IndiePing 的 URL 關鍵字屏蔽跟 DNS 關鍵字屏蔽，嘿嘿。JN 大大應該打死都想不到自己的網站會被放在防火牆規則裡面。</p><p>eeseoliz 的「<a href="https://eeseoliz.net/posts/technical-notes/computer-fun-facts/">關於電腦的冷知識｜8 個你可能不知道的電腦知識</a>」介紹了為什麼 C 槽是從 C 開始、鍵盤的排列、Javascript、JSON、跟作業系統中的上下文切換（context switch）。沒想到上下文切換最一開始被開發出來居然是被作者「這樣看待」！讓我想到當初修 OS 課的時候期中考手寫題要簡述上下文切換的實踐方式，早知道我就回 “I am not expected to understand this!”，哈。</p><p>YangBear 的另一篇投稿「<a href="https://yangbear.bearblog.dev/abehiroshi/">阿部寬的官方網頁</a>」向我們展示了跟「肥大的鮮芋仙」呈現鮮明對比的阿部寬的 home page，實際訪問的結果是，嗯，真的快得飛起！</p><p>Kevin 的「<a href="https://blog.qazsskevin.org/blog/2026/07/what-the-bug/">Bug嗎？</a>」向大家敘述了 Bug 之所以會叫做 Bug 的經典故事跟<s>水伊布</s>。就我所知，之所以真的會有 Bug 跟真空管會發光大概是脫不開關係。 啊，你知道嗎？其實飛蛾撲火並不是因為飛蛾有趨光性，而是因為夜行性的飛蛾把現代的點光源（燈火）當做平行光（星光）來看了，所以他會把燈火錯當成參考物，一直對燈火用相同夾角的方向去飛，結果就是他會以螺旋形慢慢「墜落」到火之中。然後我們就以為他有趨光性。<sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup></p><p>It’s小白（Jerry）的「<a href="https://itsxiaobai.github.io/blog/useless-facts/">沒用的小知識</a>」帶我們偷看了家樂福（不管啦我就要叫他家樂福）的 POS 機。不過我偷偷看了他的「可能比較有用的知識」，裡面把 Line Today 拿掉的方式真是太實用啦！</p><p>XJD 的另一篇投稿「<a href="https://ordinarykuma.blogspot.com/2026/07/apparmor.html">AppArmor和簡單的電腦安全採取行動</a>」向我們介紹了一些安全性的問題以及  AppArmor 的實做。看到 DAC（Discretionary Access Control）跟 MAC（Mandatory Access Control）讓我之前備考 CC 的死去的記憶開始攻擊我…… 我、我知道，答案一定是 RBAC！（按：CC 是一個資安相關的證照考試，它的考古題中通常選項只要有 Role-Based Access Control 都是選它，至少我那年之前是這樣，好好笑）不過話說居然能從 Linux Kernel 直接看到 CPU 的已知弱點，真是太酷了，這就是社群的力量嗎。</p><p>Boring Game 的「<a href="https://boringgameofficial.github.io/blog/20260715">Unix time 與 2038 年問題</a>」提到了 2038 問題。如果你錯過了千禧蟲，我們有生之年還有 2038 可以體驗，真是太棒了，千萬別錯過，約好了 2038 不見不散哦。不過話說回來，為什麼 Unix time 要以 1970 作為開頭呀？是有什麼特殊的意義嗎？20 點求解，急在線等。</p><p>j2hongming 的「<a href="https://j2hongming.com/2026/07/29/tech-fun-facts/">2038</a>」也不約而同地提到了 2038，另外還提到了中文域名跟 github 的一個小妙招。而 github 的這招也太方便了吧！我居然從來不知道可以這樣，大家一定要去試試，根本新世界的大門。</p><p>happylin 的「<a href="https://happyahip.bearblog.dev/2116/">有趣的小知識</a>」其實除了向我們展示用文言文寫程式，也含有生物小知識，但生物那邊好像有點擁擠了，就放過來啦。不止台灣有南崁企鵝（就說不要誤導了你還說！），非洲居然也有企鵝？進去看看吧。</p><p>dm4 的「<a href="https://blog.dm4.tw/ellipsis-in-macos">macOS 裡的刪節號</a>」提到了刪節號，剛好我這篇文也打了很多刪節號，有時候是在 Windows 上用六個英文句號組成，而有時候是用 Mac 使用 <code>alt+;</code> 打出來的。為了跨平臺接續撰寫，我草稿是打在 Notion 上，不知道是不是 Notion 幫我把格式都統一好了，最後出來的都是 <code>U+2026</code>。</p><p>吉米 Jimmy 的「<a href="https://jimmychen.me/blog/spam/">你所不知道的SPAM</a>」帶我們瞭解到「spam」這個詞的前世今生，它既常常被拿來指代「午餐肉」、又是「垃圾信息」的意思，明明是八竿子打不著的兩個釋義，究竟背後有什麼故事呢？且看 Jimmy 的詳細介紹。</p><p>huacat 的「<a href="https://blog.huacaty.com/posts/gb-vs-gib">為什麼我的硬碟到 Windows 就縮水了？一場荒謬的單位之爭</a>」提到例如標示 256GB 的硬碟拿到 Windows 讀取顯示的容量居然不是 256GB，這是為什麼呢？原來是因為大家口中的 GB 是各有所指。但涉及商業跟行銷往往就容易變成這樣，商家們都想讓自己的數字<strong>看起來</strong>很大，要這樣玩我也會，下次我把我的 100GB 的硬碟標成 800Gb，膨風膨起來。（按：大寫B代表位元組的Byte，小寫b代表位元的bit）</p><h3 id="關於用字遣詞">關於用字遣詞</h3><p>Tian-Yan 的「<a href="https://tianyanfeng.blog/penultimate-act/">壓軸</a>」提到了「壓軸」所代表的真正意思。如果你從來沒有覺得平常大家使用這個詞有什麼奇怪的地方，那你可能得進去看看。然而一旦你知道了事實就再也回不去了，以後聽到別人誤用壓軸的時候，你要嘛糾正他然後被當怪人，要嘛強忍著衝動然後得內傷，誰叫<s>知識是種詛咒</s>呢。而 Tian-Yan 最後決定不投稿的舊文「<a href="https://tianyanfeng.blog/pedal-or-petal/">踏瓣</a>」實際上也是個好貨，也推薦各位閱讀。</p><p>ikuka 的「<a href="https://blog.ikukaroom.com/shock/">「滿」震驚的</a>」提到了一個我也「滿」常覺得有點「阿雜」的「讀音轉誤用」的例子。另外一個也很常見的是舌尖音「ㄣ」跟舌根音「ㄥ」在日常讀音中漸漸不特別區分之後，打字就開始打成的「因該」。而「滿好的」的「滿」跟「好」都是三聲，放在一起會<strong>上聲變調</strong>，所以「滿好」我們會讀作「ㄇㄢˊ ㄏㄠˇ」，於是我們打字就自然而然地打成「蠻好的」。</p><p>不過話說回來，我後來偷偷查了一下字典，發現<a href="https://dict.revised.moe.edu.tw/dictView.jsp?ID=1235&amp;la=0&amp;powerMode=0">蠻居然可以通滿</a>！？好吧果然<strong>語言跟文字都是活的</strong>。順帶一提，臺語「阿雜」的正字其實是「<a href="https://sutian.moe.edu.tw/zh-hant/su/13373/">齷齪</a>」哦，很酷吧！</p><p>zichen 的「<a href="https://zichenblog.com/Blog/49-sister-guide/">姐姊的用法</a>」向我們介紹其實「姐」跟「姊」並不是完全字形字義都互通的字，只是已經比較少有人特別去區分兩者了。類似的例子我有想到「才」跟「纔」：其實最一開始，只有作為名詞的時候纔是用「才」，例如天才、才能。如果是副詞的話，用的會是「纔」，例如：「人家纔不要」、「纔不是這樣呢」。然而沒有人在分了，所以自然就用簡單好寫的「才」來全場通用咯。</p><p>顧游Gize_Ku 的「<a href="https://pennameco.xyz/blog/food_chirken/">雞是我們最好吃的朋友🐔</a>」跟我們提到「肉雞」這個詞 meme 化之後延伸出來的各種縫合名詞。而注意這裡的 meme 跟我們前面提到過的迷因其實是同一個詞，一開始是道金斯取 gene 的概念加上 mimic 的 m 所發明出來的新詞彙，代表「文化傳遞的單位」，跟現在常用的迷因是不太一樣的概念。</p><p>Ulshké 的「<a href="https://www.lhooq.life/words/20260730">為什麼薩爾達傳說裡的驛站，英文是Stable？</a>」帶我們從詞源的角度去理解「stable」跟「驛站」的關係。雖然好像跟 Ulshké 的這題沒有關聯，但我忍不住想到長得很像的「staple」同時是「訂書針」、又是「主食」的意思，超難以理解的。而既然提到薩爾達傳說了，你知道嗎？薩爾達傳說這個系列 IP 從 1986 就誕生了，但直到 2024 年才總算有第一款薩爾達當主角的作品出現，等了 38 年啊！</p><h3 id="Miscellaneous">Miscellaneous</h3><p>Alex Hsu 拿他的「<a href="https://alexhsu.com/no-way-roundup">IndieWeb Carnival回顧：25個「怎麼可能！？」</a>」來作為本月的投稿，我想說…… 真的挺巧妙的，因為他收到的投稿大致上也跟「有趣的小知識或冷門概念」重疊了。其中的<strong>午睡前先喝咖啡可以睡更好</strong>跟<strong>太陽跟月亮在天空中看起來一樣大的原因</strong>都讓我十分驚喜。</p><p>Sean Wei 的「<a href="https://blog.sean.taipei/2026/07/skating">開始滑冰才知道的幾件事</a>」介紹了滑冰的各式周邊兩三事，這讓我想到以前學看三相圖時的一個小例子：你知道嗎？溜冰的時候，冰刀跟冰面的接觸面其實是液態的哦，因為冰刀刀鋒跟冰面接觸面積極小，導致單位面積壓力很大，這讓<strong>水的融點下降到零度以下</strong>，於是接觸面就<strong>在零度的冰面上融化成水</strong>了。</p><p>Neil Lin 的「<a href="https://blog.neil-lin.com/blog/life-notes/2026/07/coffee_knowledge/">咖啡小知識</a>」告訴我們，買了精品咖啡豆帶回家自己沖發現沒有店裡的好喝，可能不是我們技術的問題！我就知道不是我的問題！而箇中的關鍵因素其實是一杯咖啡中含量最高的那個東東，且看 Neil 的分享，他最後有提供了一個很容易取得的解決方案哦。</p><p>Daisy黛西的「<a href="https://daisy27.bearblog.dev/yushan_the_first_girl_group/">第一團攻上玉山的女校生</a>」跟我們分享了百岳的由來與玉山的登頂史，並且在百年前就有女校學生用相對現今沒有那麼完備的條件就攻頂的記錄。說到百岳，我目前只收了嘉明湖路上的向陽山跟三叉山而已，有意持續搜集，還請各路格友不吝相揪。你知道嗎？三叉山的三角點就恰好是高雄、花蓮、臺東的交匯點哦！（我絕對沒有在三角點上跳進跳出喊著「我進來了、我又出去了」）</p><p>Haruo Wang 的「<a href="https://haruowang.vercel.app/about/lifelog/blogblog.html#%E6%9C%89%E8%B6%A3%E7%9A%84%E5%B0%8F%E7%9F%A5%E8%AD%98%E6%88%96%E5%86%B7%E9%96%80%E6%A6%82%E5%BF%B5">我至今認識的鈴木一誌</a>」與大家介紹鈴木一誌這位平面設計師。另外，查詢了一下，日本國憲法第九條旨在規定「戰爭不是日本解決國家爭端的合法手段」。</p><p>Lyingcello 的「<a href="https://lyingcello.com/blog/2026-07-31_brave_illusion/">漂移的臉</a>」用手繪圖示的方式向我們展示了「隔著近視眼鏡斜視」會造成的特殊成像。但我試了好多次，甚至換了很多眼鏡，都沒辦法產生如圖那樣的效果耶？不知道是否有什麼竅門我沒有掌握到，如果有格友成功了，希望可以跟大家分享一下？</p><p>A吉胖的「<a href="https://fatapple0406.github.io/posts/2026/never-let-go/">就是要抓著手</a>」提到了羅馬歷史中的 BL 情節（？），並且還真的有現存史料可以一虧其中的曖昧情愫（？？）。而就如 <a href="https://shuyulin1127.com/2026-07-review/">Shuyu 說的</a>，我們那個年代《意呆利》確實曾經紅極一時，可惜我沒有特別去看過。但倒是有一個可以跟各位分享。你知道嗎？漢武帝北伐匈奴後，導致了匈奴西遷。而匈奴西遷就壓迫到日耳曼人的領地空間，導致日耳曼人大遷徙。日耳曼人一路遷徙到了羅馬帝國，然後就把西羅馬帝國滅了。簡單來說，<s>漢武帝滅了西羅馬帝國</s>。（按：漢武帝北伐匈奴確實被認為有間接的影響啦）</p><p>Hellen 的「<a href="https://hellenmurmur.bearblog.dev/8924/">身為自學生的家長</a>」跟我們分享了作為家長，帶著孩子離開傳統教育體制，在學校之外自學的經驗與要領。這個真的超酷的，也覺得台灣有把「自學」合法化、制度化、且措施相對成熟，挺難能可貴的。像我就聽說德國<strong>不允許</strong>離校自學？有誤還請糾正。並且，大家知道上面的A吉胖就是一民<strong>自學生</strong>，該不會……？</p><p>Meowjay 的「<a href="https://meowjay.cc/posts/overhead-wire/">「有趣的小知識或冷門概念」：高鐵上面的電線為什麼不是直直一條？</a>」帶我們觀察鐵路上的「接觸網」其實不是直線。而台灣的臺鐵應該已經全面電氣化了，所以一樣能看到。如果你把自己的視角帶入「集電弓」的話，你會發現自己很像在玩音遊哦（？）</p><p>ethan1008 的「<a href="https://20260206.bearblog.dev/2026-july-1/">又奇怪又好笑又危險的東西</a>」提到如果在 google chrome 搜尋三個冒號 <code>:::</code> 他會有一個莫名其妙的定番 AI 摘要出現，並且我自己試過確實如此。但比較令我不解的是，我居然只有第一次嘗試能出現跟 ethan1008 一樣的結果，後面就再也沒辦法重現了，之後每次都會開始跟我講解冒號。</p><p>王昱荃 Alan Wang 的「<a href="https://alanwang.art/wood-fired-teapot-from-wild-tea-master-cho/">我買了新茶壺！</a>」跟我們介紹了「柴燒的陶瓷茶壺」的特殊之處。但其實我比較好奇的是「陶瓷茶壺的特色在於泡茶時會釋放遠紅外線」這句，我本來的理解是任何物質只要加熱都會釋放遠紅外光，不知道陶瓷在這方面的不同之處是什麼呢？但倒是陶鍋的保溫效果確實很好就是了，不知道是否是有相關的機制在其中。</p><p>Kevin 的「<a href="https://weiblog.me/2026-07-24/2026-interesting-trivia-obscure-concepts/">有趣的小知識或冷門概念</a>」是個大集合，包含了例如「七味粉其實含有台灣禁止的成分」、「日本拉麵其實是從這裡傳過去的」、「我們眼睛其實每天都有這個東東擋在前面，但我們卻又視而不見」跟其他很多好貨。其中北極熊的部分我好喜歡，我初步的想法是，這應該跟「挫冰」、「雲朵」、「打碎的玻璃」會呈現白色的原理是一樣的，不曉得我的理解是否正確，還待格友們回饋討論。</p><p>剛哲的「<a href="https://fgzblog.com/zh-tw/posts/ng1/">台灣的天然氣小知識</a>」提到台灣的爐具在南北居然不通用，好震驚。並且東台灣至今還沒有「這個東西」，可能很多西部的朋友沒有注意到過。（這什麼話劇社防劇透）不過其實宜蘭好像有「這個東西」的業者開始佈局了，讓我們繼續看下去吧？</p><p>HachiZen 的「<a href="https://www.hachizen.blog/blog/interesting-facts">有趣的小知識或冷門概念</a>」就真的是挺有創意的選題了，他帶領我們尋找 PChome 上所能買到最貴的東西，跟上他的探索之旅吧！我目前沒有找到比他文中更貴的產品，邀請格友們一起來打敗他的記錄！</p><p>Shih-Ting 的「<a href="https://chang-shih-ting.com/true-stories-from-history-bitcoin-cold-facts/">歷史上真實發生的故事：比特幣冷知識大集合</a>」向我們展示了比特幣的許多歷史與趣談，十分精彩哦。只要說到比特幣，我就會想起那我忘記的助記詞，唉，既然要忘記，那為何又要想起呢……</p><p>鏡想的「<a href="https://johnworker.bearblog.dev/3/">貨幣的3個冷知識</a>」給了我們三個關於錢錢的好貨，而「元」這個單位的理由居然意外地簡單粗暴。說到貨幣，你知道嗎？牛頓離開教職後就一直在鑄幣局任職，後來成了局長。沒錯，提出力學三大定律後的牛頓，正職工作是搞貨幣政策的哦。順帶一提，牛頓有玩股票，而且有 FOMO 追高虧爛的記錄，<s>跟我也沒兩樣嘛</s>。</p><p>PuzeLee 的「<a href="https://puzelee.cc/posts/twd-fun-facts/">關於新台幣鈔票的冷知識</a>」延續貨幣的話題，帶我們細看目前新臺幣紙鈔的各種防偽元素。大部分我們平常幾乎不會去注意對吧，而且紙鈔上是有盲人點的哦，只是我發現我雖然摸得到隆起，但辨識挺不容易的耶。</p><p>Hsun 的「<a href="https://hsun.bearblog.dev/bridge-facts/">橋梁小知識💡BBP7</a>」帶我們看向「橋樑」。我覺得橋樑就是那種平常當做理所當然，但是一旦斷給你看，你就知道它是何等重要的那種基礎建設。話說我一直不正經地想到 Faker，對不起。（按：Faker 在直播英雄聯盟的空檔很愛玩《橋梁建築大師》，被網友戲稱是「建橋大學博士」）啊，我的電腦桌布就是我們新莊的美麗地標「新月橋」哦，晚上超美的，歡迎大家來玩。順帶一提，如果我遇到菜單要跑 10K 的日子，我會從新莊「新月橋」跑河堤到板橋「光復橋」來回，因為這樣不多不少剛好整整 10K，連錶都不用看。</p><p>龍女的「<a href="https://blog.nudoragon.com/post/200">有趣的小知識或冷門概念</a>」跟我們分享關於「手機權限」、「密碼」、「動畫卡通」的話題，最後還送我們冷笑話！其實我一開始認真以為這次會收到很多類似「你知道嗎？其實生魚片是死魚片」、「你知道嗎？坐電梯其實是站電梯」、「你知道嗎？等紅燈其實是等綠燈」、「你知道嗎？飲水機其實是出水機，你才是飲水機」這類的東東…… 為此我還特別把「冷門概念」也囊括進來的說。</p><p>Dyron 的「<a href="https://career.dyron503.top/blogblog1/">關於 Metrics 的二三小事</a>」跟我們介紹了遊戲裡面「Metrics」的概念。確實是一個非常影響使用者體驗的一個很重要的元素，但就像「橋樑」一樣，平常並不會太注意到這個重要的「基礎建設」。我遊戲打得不多（？），但就我所知，任天堂團隊跟宮崎英高在地圖設計上，就是其中的佼佼者，跑圖體驗那是一個頂中頂。如果你玩他們的遊戲發現跑圖不順，那通常表示你還有隱藏的元素沒有解開！</p><p>ERNE 的「<a href="https://erne.bearblog.dev/260726">我想問幾個有趣或冷門的問題</a>」拋出很多有趣的提問。其中有一條想跟 wiwi 分享「為」這個字是在畫什麼，哇，真的有像耶。而 ERNE 居然精准地掌握了我的喜好，在我確實最感興趣的那部分 cue 到了我，為啥啊，我有透露這麼多嗎！但總之，真的<strong>沒有身體是條紋、但尾巴是斑點的生物</strong>嗎！太酷了太酷了，我將畢生研究這個問題。</p><p>ERNE 的另一篇「<a href="https://erne.bearblog.dev/260727/">信徒與信眾：一些宗教信仰的觀察</a>」提出了一個我以前從來沒有想過、所以也沒有特別去區分過的概念。對耶，其實「信徒」跟「信眾」從字面上的角度來看就已經不太一樣了。對 ERNE 這兩篇投稿的任何話題有任何共鳴或想法的話，套一句 ERNE 說的，「希望能有人能討論，好讓這個社群活絡一點」。</p><p>當然這不限於 ERNE 的文章，上面的接近 100 篇投稿，包含了數不清的命題、主張、論述、跟疑問，各個都是可以「RE」的對象。我覺得在自己的 blog 來個「RE: 某某觀點」的獨立文章就挺好的，期待格友們的交流發揮。倒不如說，<strong>雖然小知識是本月的主題，但同樂會才是背後的宗旨呀</strong>！</p><h3 id="後話">後話</h3><p>活動剛開始的我曾說「我向宇宙索求小知識，小知識便蜂擁而至，當主持人實在是太幸福了」，而現在的我想說：吾愛小知識，但吾最近先這樣就好了……XD 當主持人雖然有選題的權力，但為了用心對待每個投稿，還是需要付出不少閱讀與整理的時間的，<s>果然奇蹟不是免費的</s>，在這邊給後面的主持人們加油打氣！我跟主持人的身份就這樣「<strong>一期一會</strong>」就好了，根據我跟 Alex Hsu 現學現賣的魔法，這篇回顧文是我的「<a href="https://blogblog.club/party/">BlogBlog 同樂會 – 2026 年 8 月</a> 」的投稿文章，主題是「<a href="https://blog.ikukaroom.com/ichigo-ichie/">一期一會</a>」，由 <a href="https://blog.ikukaroom.com/">ikuka</a> 主持…… 開個小玩笑，沒有啦。</p><p>如你們所見，下一期的主題已經發佈，整個 BlogBlog 同樂會居然已經辦到第八個月了，每個月都還是有近百的參與者，著實令人感動。我最近跟身邊的人推坑自架部落格時，總說現在架設就能剛好趕上「部落格文藝復興」的好時代，我所言不虛吧？</p><p>至此，我此篇的字數統計已經顯示突破一萬六千字，怕是這輩子再也沒有多少機會可以如此洋洋灑灑一大串了，所以這是我八月的投……（欠打）</p><p>好了！2026 七月的 BlogBlog 同樂會「有趣的小知識或冷門概念」正式圓滿謝幕，我是這次的主持人劉昕，在此下班一鞠躬。接下來就交棒給名字唸作「一苦卡」的 <a href="https://blog.ikukaroom.com/ichigo-ichie/">ikuka</a> 咯。</p><hr><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">1.</span><span style="display: inline-block; vertical-align: top;">這邊要 credit 給到馬密（馬密也有投稿哦，後面會介紹到），這是他以前在讀書會分享的，果然有<a href="https://club.1-know.org/week-95/">寫下來才不會忘記</a>。而這週重拾這個話題，馬密就多分享了一個：「河洛人」是客家人對福建閩南人的他稱，而且還帶有貶義，不知情的「河洛人」目前還會這樣介紹自己。並且還跟我們補充了一個概念，民族思潮其實是一個很晚進的概念，給自己的民族一個共同的名字其實是很摩登的一件事。以中國為例，其實是梁啟超跟康有為把西方的民族思潮帶了進來，不然在此之前，其實壓根沒有「中國人」這個概念。</span><a href="#fnref:1" rev="footnote"> ↩</a></li><li id="fn:2"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">2.</span><span style="display: inline-block; vertical-align: top;">現在你知道這個驚天大秘密了：恐龍根本還沒滅絕，鳥就是現存的恐龍！於是鳥綱突然就變成爬蟲綱的後代了，但爬蟲綱不包含鳥綱啊，於是爬蟲綱變成了<a href="https://zh.wikipedia.org/zh-tw/%E4%B8%A6%E7%B3%BB%E7%BE%A4">並系群</a>，是個有瑕疵的分類情形。於是目前有兩個解套方案：一個就是把鳥綱直接納入爬蟲綱，讓鳥成為爬蟲類；一個是把爬蟲綱改成更具包容性的蜥形綱，把爬蟲類跟鳥類都放進來。</span><a href="#fnref:2" rev="footnote"> ↩</a></li><li id="fn:3"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">3.</span><span style="display: inline-block; vertical-align: top;">Demers-Mathieu et al. (2018), <em>Nutrients</em>. https://doi.org/10.3390/nu10050631</span><a href="#fnref:3" rev="footnote"> ↩</a></li><li id="fn:4"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">4.</span><span style="display: inline-block; vertical-align: top;">出處是…… 道金斯又是你！在《自私的基因》中道金斯用「飛蛾來不及適應現代的燈火」這個例子跟讀者說明「演化的時間滯後」。</span><a href="#fnref:4" rev="footnote"> ↩</a></li></ol></div></div>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%83%A8%E8%90%BD%E6%A0%BC%E5%90%8C%E6%A8%82%E6%9C%83/">部落格同樂會</category>
      
      
      <comments>https://shuaixin.cc/Fun-Fact-Party/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>叛逆的金星、工具主義、虎克真的很醜嗎？</title>
      <link>https://shuaixin.cc/Venus-Instrumentalism-and-Hooke/</link>
      <guid>https://shuaixin.cc/Venus-Instrumentalism-and-Hooke/</guid>
      <pubDate>Thu, 16 Jul 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>「工具主義」（Instrumentalism）是一種哲學觀點，它認為任何想法、理論或概念都是人類用來解決問題的「工具」。評價一個工具的好壞，只看它能否成功解決問題，而不管它是否代表「絕對真實」或「客觀存在」。</p><p>與之相對的是「實在主義」（Realism），它認為成功的科學理論必須能夠描述出世界的真實本質。</p><ul><li></li></ul><p><a href="https://shuaixin.cc/Fun-Fact/">《有趣的小知識或冷門概念》</a>徵稿活動收到了麵麵的投稿 <a href="https://oohmemen.com/blog/epicycles/">Epicycles</a> ，裡面提到了地心說跟金星。旋即我就繃不住了，請問我們剛剛是講到金星嗎？那你一定不能錯過這個：</p><p>從北極上空位置往下俯瞰整個太陽系，你會發現，地球以<strong>逆時針</strong>自轉、也以<strong>逆時針</strong>繞太陽公轉；月球以<strong>逆時針</strong>自轉、也以<strong>逆時針</strong>繞地球公轉；太陽自己也以<strong>逆時針</strong>自轉；所有行星們也都<strong>逆時針</strong>繞太陽公轉。看到這裡，所有行星應該都是以<strong>逆時針</strong>自轉對吧？嗯，水星是逆時針、地球也是、土星也是、木星也是、火星也是、海王星也是……</p><p><img src="/Venus-Instrumentalism-and-Hooke/counterclock-right.png" alt="counterclock"></p><p>抱歉了，你知道嗎？<strong>金星是以順時針自轉的哦</strong>…… 太叛逆了吧！</p><p>為什麼金星如此特立獨行呢？可惜我們不知道。目前的看法是，行星們跟太陽系的年齡是一致的，所以應該不是因為金星加入的時間不一樣，而是金星可能被什麼東西撞過。</p><ul><li></li></ul><p>說到地心說，這裡還有一個<ruby>好貨<rt>知識點</rt></ruby>：</p><p>你知道嗎？西元 1550 到 1600 年間，歐洲各大學其實<strong>同時教授托勒密系統（地心）與哥白尼系統（日心）。</strong></p><p>是的，雖然地球繞著太陽轉簡直是異想天開、天理難容，但畢竟這樣的日心說的模型確實更簡潔優雅，學界依舊是口嫌體正直（？）地拿來用了。簡單來說，雖然哥白尼那套有一個很大的瑕疵（地球居然不是宇宙中心，顯然不對嘛），但因為運算起來方便，所以大家以「實在主義」的觀點來教授托勒密的地心說的同時，以「工具主義」的觀點來使用哥白尼的日心說。</p><p>所以在 16 世紀的歐洲的天文學中，政治正確的說法是：喔喔我確實有在用哥白尼的模型來觀測、預測行星的運動啦，但只是因為運算方便而已哦，其實托勒密的模型才是「正確的」。</p><ul><li></li></ul><p>說到工具主義，我還有一個好貨：</p><p>你知道嗎？就<strong>連牛頓自己都認為，以「工具主義」來看待他的重力方程式就好</strong>。</p><p>是的，即使重力方程式在當時幾乎完美地解決了各種天體問題，但牛頓自己也覺得重力這樣的超距力太不可思議了，物質天生就能隔空作用是「極大的荒謬」。他認為這背後應該還有更底層的機制，只是目前未知而已。面對批評，牛頓也只是回應：「我不虛構假說」。</p><ul><li></li></ul><p>而只要說到牛頓，我就會跳出來稍微幫虎克平反一下。</p><p>虎克其貌不揚？台灣的學生們可能都很熟悉這個說法，畢竟這個傳聞出現在我們的義務教育中。從我的 99 課綱一路到現在的 108 課綱，張文亮的《愛上跳蚤的男人》一直都屹立在我們的國文課本裡：</p><p><img src="/Venus-Instrumentalism-and-Hooke/hooke.png" alt="hooke"></p><p>但虎克真的長得像「怪物」嗎？其實根本就沒有史料可以替這個說法背書。<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p><p>有一個比較陰謀論的說法是這樣的：虎克長得醜只有傳聞、但沒有證據，而牛頓又是出了名的心胸狹窄，再加上牛頓跟虎克之間有著跨度十幾年的過節。推測，牛頓在上位之後透過他的權勢，在虎克過世之後，有意地毀損虎克的遺物跟其「肖像」，讓一切死無對證，然後對傳聞推波助瀾……</p><p>你知道嗎？<strong>其實牛頓當初在建構重力方程式的初期過程中，並沒有發現「平方反比」的關係。而回信指出這個錯誤的，就是虎克</strong>。有個根據史料的推測是這樣的：牛頓為了獨攬平方反比定律的貢獻，在晚年編造了「蘋果樹的故事」（讓時間軸定位在虎克之前），並刻意地把這個故事說給身邊的人聽。而可以佐證的是，所有關於「蘋果樹」的書信記錄都是在牛頓晚年才「出現」的……</p><ul><li></li></ul><p>以上關於金星跟地心說的部分知識來自之前看過的<a href="https://shuaixin.cc/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98-%E4%B8%96%E7%95%8C%E8%A7%80/">《世界觀》</a>，而虎克跟牛頓的部分則來自《上帝擲骰子嗎》。文中的內容都有在我們<a href="https://club.1-know.org/">讀書會</a>中分享過，如果你也喜歡這種有的沒的知識點，歡迎一起<a href="https://discord.gg/gTW9wPeZh">來玩</a>。</p><p>我最近的愛好之一就是在外面竊取很多小知識，然後屁顛屁顛地帶回讀書會分贓（？）。像最近就偷了 LQ7 的<a href="https://lq7.tw/mood/thursday-badminton-6/">比賽用羽球指定採用左翅</a>跟<a href="https://lq7.tw/mood/thursday-badminton-7/">空穴來風一開始是在指事情其來有自</a>，請大家幫我對 LQ7 保密。</p><p>然後我發現這篇文其實也能投稿，真是太棒了，請容我在自襄盛舉的同時、給大家朗誦一段活動宣傳：</p><blockquote><p>這是我的「<a href="https://blogblog.club/party/"><strong>BlogBlog 同樂會 - 2026 年 7 月</strong></a> 」的第二篇投稿文章。本月主題是「<a href="https://shuaixin.cc/Fun-Fact/"><strong>有趣的小知識或冷門概念</strong></a>」，由<a href="https://shuaixin.cc/">劉昕</a>主持。如果你有自己的部落格，歡迎一起來參加，每個人可以投稿<strong>三篇</strong>哦！</p></blockquote><ul><li></li></ul><p>寫在最後，其實我很不喜歡把這件事講出來，因為顯得金星有點太乖：</p><p>有發現我漏了誰沒點名嗎？是天王星。天王星既不想跟大家一樣逆時針轉、也不想跟金星一樣順時針轉，他老兄直接躺著轉…… 真夠突破框架的。</p><hr><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">1.</span><span style="display: inline-block; vertical-align: top;">寫到這裡，發現其實我可以直接去問問看文亮老師。目前已經致信詢問，看看老師會不會理我。</span><a href="#fnref:1" rev="footnote"> ↩</a></li></ol></div></div>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E8%AE%80%E6%9B%B8%E6%9C%83/">讀書會</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%B7%A5%E5%85%B7%E4%B8%BB%E7%BE%A9/">工具主義</category>
      
      <category domain="https://shuaixin.cc/tags/%E7%89%A9%E7%90%86/">物理</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%A4%A9%E6%96%87/">天文</category>
      
      <category domain="https://shuaixin.cc/tags/%E6%AD%B7%E5%8F%B2/">歷史</category>
      
      
      <comments>https://shuaixin.cc/Venus-Instrumentalism-and-Hooke/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>一個 Wi-Fi，多組登入帳號密碼：以 RADIUS 為例</title>
      <link>https://shuaixin.cc/WPA-Enterprise-with-RADIUS/</link>
      <guid>https://shuaixin.cc/WPA-Enterprise-with-RADIUS/</guid>
      <pubDate>Tue, 14 Jul 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<h2 id="背景需求">背景需求</h2><p>大部分的使用情景之下，都是一個 Wifi SSID 配一個密碼，只要把這個密碼告昭天下，就大家都能連進來。這個就是常見的 WPA-PSK（Wifi Protected Access Pre-Shared Key），使用同一組預先分享的密碼（PSK）。</p><p>如果我想要做到同一個 SSID，但不同的使用者要各自用自己的密碼連線，有什麼辦法呢？可以用 PPSK（Private PSK），每個人配發到屬於他的 PSK，這樣方便做使用者管理。假若我想跟某個人斷絕關係（？），就停掉某組密碼就好，不需要改整組 Wifi 密碼，其他的人照常使用就好。</p><p>那如果我想做到同一個 SSID，不同的使用者要用自己的帳號+密碼來連線呢，例如這樣：</p><p><img src="/WPA-Enterprise-with-RADIUS/image-20260715112221859.png" alt="image-20260715112221859"></p><p>那就可能要用到 WPA-Enterprise + RADIUS 的配置了。你問 PPSK 用密碼來區分、跟 RADIUS 用帳號+密碼來區分，有什麼差別嗎？其實最一開始這步沒什麼太大差異。但走 RADIUS 後，後續有更豐富的可玩性，比如說可以跟現有的 M365 帳號做聯動。</p><p>此例中，我們使用多台 tp-link 的 AP 組成 ESS（Extended Service Set），並外掛一個 controller 集中管理，做到同一個 SSID 全場漫遊，但反正視為一組很大的 Wifi AP 就好。而 RADIUS 伺服器使用 DrayTek 路由器的自帶功能，所以 tp-link 此時作為 RADIUS 客戶端。</p><p>順帶一提，以前 tp-link omada 系列好像有自帶 RADIUS 功能，但現在被拔掉了，所以只好另外配置咯。</p><h2 id="AP-端設定">AP 端設定</h2><p>首先我們在 controller 這邊建立一個新的 SSID：</p><p><img src="/WPA-Enterprise-with-RADIUS/image-20260715112238851.png" alt="image-20260715112238851"></p><p>要用 RADIUS 就必須選擇 WPA-Enterprise：</p><p><img src="/WPA-Enterprise-with-RADIUS/image-20260715112250329.png" alt="image-20260715112250329"></p><p>在 RADIUS 設定中，</p><ul><li><code>Authentication Server</code> 填入 DrayTek 的 IP 位置。</li><li><code>Authentication Port</code> 預設是 1812，不需更改，DrayTek 端也要使用同一個。</li><li><code>Authentication Password</code> 這邊自行設置，但注意一下這玩意兒，等等在 DrayTek 那邊叫做…… ”Shared Secret”。你們的用詞差那麼多，我很頭疼欸。</li></ul><p><img src="/WPA-Enterprise-with-RADIUS/image-20260715112259628.png" alt="image-20260715112259628"></p><h2 id="RADIUS-伺服器端設定">RADIUS 伺服器端設定</h2><p>DrayTek 若作為 RADIUS Client 可以選 External RADIUS 來進行，但我們此處要作為 RADIUS Server，所以選擇 Internal RADIUS。</p><p>雖然我們是多台 AP 組成的 ESS，由 controller 管理，但這裡還是要乖乖地每一台 AP 的 IP 都加入 Client List 中。其中，<code>Shared Secret</code> 就是剛剛的 ”Authentication Password”。</p><p><img src="/WPA-Enterprise-with-RADIUS/image-20260715112310784.png" alt="image-20260715112310784"></p><p>如何管理使用者呢？要到 User Profile 的頁面來設置：</p><p><img src="/WPA-Enterprise-with-RADIUS/image-20260715112320586.png" alt="image-20260715112320586"></p><p>最後將使用者添加到 Authentication List 中，完成。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/RADIUS/">RADIUS</category>
      
      <category domain="https://shuaixin.cc/tags/Wifi/">Wifi</category>
      
      
      <comments>https://shuaixin.cc/WPA-Enterprise-with-RADIUS/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>我的 MVP 名片</title>
      <link>https://shuaixin.cc/My-MVP-Card/</link>
      <guid>https://shuaixin.cc/My-MVP-Card/</guid>
      <pubDate>Fri, 03 Jul 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>看到 <a href="https://lq7.tw/mood/my-name-cards/">LQ7 的名片</a>覺得真好看，低頭看看我自己的：</p><p><img src="/My-MVP-Card/mvp_card.jpg" alt="mvp_card"></p><p>哈哈哈哈，我直接跟廠商說正面放名字、背面放 QR code、先印個兩百張、感恩謝謝，東西就在沒有任何設計稿之下誕生啦！</p><p>年少的我如果知道我現在不注重門面成這幅德行一定會嚇死。但隨便啦，先能用就好，其他以後再說，所有東西都先做成 MVP（Minimum Viable Product，最小可行性產品）就開始 pitch 到世界上就對了。</p><p>《The Art of Computer Programming》的<a href="https://www-cs-faculty.stanford.edu/~knuth/">作者</a>說：“Premature optimization is the root of all evil.”，過早最佳化是萬惡之源！所言甚是啊，雖然他書中談論的是程式設計，但我想套用在任何領域上都是如此。BTW，作者今年 88 歲了，《The Art of Computer Programming》系列預計寫七本，目前第四本都還沒正式出版，要不要考慮一下先寫個 MVP 出來？</p><p>總之不想過早最佳化的我的 MVP 名片就是長這副潦草的摸樣。Hmm… 已經發很多出去了，其實我根本過晚最佳化吧（？</p><p>目前我會用掃碼的形式是因為，我計劃做成一個「永久名片」，上面的碼指向一個例如 <code>https://_go_somewhere.shuaixin.cc/</code> 的 URL，然後只要我持續擁有該域名，我就可以隨時改變該 URL 的跳轉終點。所以只要做出一個最終版本之後，理論上它就可以<strong>永久使用</strong>，已經發出去的也可以永遠掃到我的最新狀態，不會因為我換工作、改了頭銜之類的而要汰換掉。難道只有我覺得每次升個官、調個單位就要重印幾百張名片很<a href="https://sutian.moe.edu.tw/zh-hant/su/6753/">討債</a>（thó-tsè，台語表糟蹋、鋪張浪費）嗎？</p><p>目前我讓它被掃描的時候會同時透過 telegram 通知我，所以如果我一段時間內只有發給特定的人的話，其實我可以大致知道對象有沒有掃進去看。我最喜歡這個功能，因為人家沒掃進去就是對我沒興趣嘛，我自己心裡可以有個底。（其實本來擔心這樣做是否有踩線之虞？但實際上我只是在該 URL 被訪問的時候被通知，並沒有追蹤到某個個人，是誰掃的也只是靠猜而已。所以應該是可以的…吧？）</p><p>不過既然最後都是導向某個網頁，那不如一開始就給連結就好？但我覺得實體名片還是比較有溫度耶，而且是個很好用的破冰小物。畢竟如果是完全的新朋友，你一開始也沒有媒介可以給人家連結，交換聯絡訊息就會比較手忙腳亂。但實體名片發出去就完成了，既保留了傳統的有溫度的物理接觸，又兼具了數位化的優雅高效。</p><p>LQ7 在名片上放了他的<a href="https://lq7.tw/thinking/we-suffer-more-often-in-imagination-than-in-reality/">格言</a>，我覺得挺好的，增加資訊密度與名片閱覽停留時間（？），美觀且育樂兼具，而且破冰效果更顯著（句子本身就能成為談資）。但由於我還沒找到我的那<a href="https://shuaixin.cc/Trinity-Motto/">集 slogan、座右銘、墓誌銘於一身的句子</a>，所以沒辦法。但說真的，要不是有<a href="https://eddielv.com/articles/blogblog-party-recap-may-2026/">部落格同樂會</a>讓我有機會反思，我可能真的會在某個版本的名片印上「努力的男人不一定最帥，但一定最累」這種自以為有趣的東東。好險好險。</p><p>目前我覺得有個個人名片可以發確實還不錯，MVP 測試的結果是 OK 可行。再來要來把它弄得好看一點了。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/MVP/">MVP</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%90%8D%E7%89%87/">名片</category>
      
      <category domain="https://shuaixin.cc/tags/%E6%87%89%E7%94%A8/">應用</category>
      
      
      <comments>https://shuaixin.cc/My-MVP-Card/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>從配子到性染色體：性別是怎麼出現的？</title>
      <link>https://shuaixin.cc/Origin-of-Sex/</link>
      <guid>https://shuaixin.cc/Origin-of-Sex/</guid>
      <pubDate>Wed, 24 Jun 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>我向宇宙索求小知識，小知識便蜂擁而至。當主持人實在是太幸福了（我真的可以這麼幸福嗎.jpg）。</p><p>徵稿上線沒多久就來了粉紅鹿的<a href="https://pinkway.mataroa.blog/blog/bird-with-four-sex/">四種性別的鳥</a>跟椒鹽豆豉的<a href="https://blog.douchi.space/book-bitch/">剝開科學中的偏見看雌性動物——讀《Bitch》</a>。在我原來的預想中，「你知道嗎？不同於人類，鳥類的 ZW 性別決定系統中，是由雌性配子決定後代性別的哦」就已經是足夠令人滿意的小知識單位了，沒想到來者居然如此精實飽滿。你收過意料之外的沉甸甸的大包裹嗎？那是一個驚喜又感動。</p><p>有一個我過去很愛分享的知識點來自<a href="https://shuaixin.cc/The-Selfish-Gene/">《自私的基因》</a>。作者道金斯提到<strong>異配生殖開啟了雌性剝削之路</strong>，並主張這就是雌性普遍「矜持」的生物學基礎。因為提供大配子的一方投資了較多資源，具有先天的成本劣勢，以致於不能像雄性那樣可以低成本搞花心……</p><p>椒鹽豆豉分享的這本《Bitch》就跳出來拿各式證據打臉這個論述。我太開心了，我向宇宙索求小知識，小知識便砸向我。有趣的是，該書作者 Lucy Cooke 唸大學時是道金斯的學生！至於怎麼打臉的就請各位去椒鹽豆豉那兒一探究竟咯。</p><p>該週的<a href="https://club.1-know.org">讀書會</a>旋即就跟大家分享討論了跟此二篇相關的話題。（炫耀一下，<a href="https://yoe1.bearblog.dev/">右衣</a>有來參加哦）</p><p>如何理解性別的起源？從一個宏觀但粗略的角度來看，時間軸大致上是這樣的：</p><blockquote><p>有性生殖→交配型出現→多細胞出現→生物複雜度提升→異配生殖出現→準性別特徵表現型出現→準性別特徵表現型固定成性染色體</p></blockquote><h2 id="有性生殖出現">有性生殖出現</h2><p>有性生殖的優勢廣為人知，要想參加演化遊戲，變異與多樣性是最基本的入場方式。雖然無性生殖快速簡單有效，但缺乏對複雜環境的適應能力。</p><p>然而一個最常見的誤區就存在於這裡。不管你是看頻率、看次數、看數量，實際上無性生殖依舊佔據著主流地位。真要說的話，其實我們這種玩有性生殖的傢伙是因為鬥不過無性生殖的簡單粗暴，<strong>不得不逃<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>到了更複雜的生態棲位中</strong>，用有性生殖適應著複雜的環境。真可憐。</p><p>For those who 不以為然：人體細胞大概 37 兆個，而你身上的細菌（原核生物）大概也有 37 兆隻。有性生殖就是個花俏的小眾把戲。</p><p>當然，多事提一嘴，現存的原核生物在以無性生殖作為主軸進行繁殖的基礎上，依舊是會互相交換遺傳物質的。<strong>你以為抗藥性細菌純粹是劫後餘生的細菌們的子代嗎？非也</strong>，細菌之間會分享、交換抗藥基因。</p><h2 id="交配型出現">交配型出現</h2><p>有性生殖的玩法出現後，首先會遇到的問題十分好笑：我大費周章地搞有性生殖，在那邊交換遺傳物質，忙東忙西的，最後跟我交換的對象是我的克隆系（遺傳物質一樣的手足）。饒了一大圈，沒有達到增加遺傳複雜度的效果。</p><p>於是交配型就出現了，我為了不要跟自己太相近的兄弟姐妹們玩無效的有性生殖，我們家族都標示為「+」，只跟別人家的「-」交配。嘿？難不成這就是性別的雛形？非也，這其實更像「禁止亂倫」的道德<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>雛形。並且很多例子中，單一個體身上不止一種交配型。</p><p>交配型出現後，<a href="https://shuaixin.cc/inbreeding-reciprocal-cross-hybrid-test-cross/">自交</a>這樣的瞎忙活情形得到了緩解，而效率自然就得到演化的青睞。</p><h2 id="異配生殖出現">異配生殖出現</h2><p>不同於與之相對的同配生殖，異配生殖中，配子大小並不對稱。並且，上面已提到過，道金斯認為這就是雌性剝削的開端，而 Cooke 說代誌不是憨人想的那麼簡單。</p><p>那麼異配生殖又是如何橫空出世的呢？為了開拓更多可能的生態棲位，多細胞生物登場了（如果你好奇多細胞生物如何橫空出世的話，首先可能是尺寸優勢，再來可能是身高優勢，畢竟空間中的 z 軸又是一片新天地）。隨之而來的代價就是，生物體更複雜了，合子（受精卵、幼崽）對初始資源的需求變大了，此時較大的配子可以為合子提供更好的起步條件。</p><p>既然如此，那大家都做大配子豈不是皆大歡喜？大配子在最開始確實掌握了絕對的優勢，可惜在資源有限的博弈之中，小配子狡猾地<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup>出現了。最終的結果是，不大不小的中間形態的配子，在市場上既沒有營養優勢，也沒有數量與製作效率的優勢，最終敗退。</p><h2 id="準性別特徵表現型出現">準性別特徵表現型出現</h2><p>假設我現在是採用了大配子策略的個體，因為我製作較少、較昂貴的配子，顯然不適合到處撒種出去碰運氣對吧？（還是多嘴一下，大機率有個體這麼做過，然後被淘汰了）那有什麼特徵是對我的基因有利的？</p><p>道金斯的雌性剝削一說就呼之欲出了。既然我提供了大配子，那保護大配子就是我的優勢（營養很貴！）、合理篩選小配子就是我的優勢（試錯成本大！）、供養合子跟幼崽也是我的「相對」優勢（因為能確定是自己的種，你懂我意思）。此時，帶來以上優勢行為或構造的基因就是有利於大配子提供者的特徵基因。</p><p>管你是透過行為還是透過構造，如果一個特徵可以增加大配子的繁殖機率，那它就適合大配子提供者；如果可以增加小配子的繁殖機率，那它就適合小配子提供者。因此，博弈的結果可想而知，最後市場上的大配子提供者總是會較多地帶有「大配子提供者特徵表現型」，小配子提供者同理。</p><p>演化的單位是基因不是個體，所以更準確的說法其實是，當「讓個體提供大配子的基因們」跟「有利於大配子提供者的特徵基因們」能互相配合、共同表現的時候，其優勢明顯。於是這 N 群利益一致的「大配子好朋友基因組」能越多地同時表現，就越受演化青睞。</p><p>可惜的是，這與有性生殖喜歡搞隨機重組的哲學相悖。畢竟減數分裂有一個<a href="https://zh.wikipedia.org/zh-tw/%E8%81%AF%E6%9C%83">聯會</a>的過程，該過程會進行<a href="https://zh.wikipedia.org/wiki/%E5%90%8C%E6%BA%90%E9%87%8D%E7%B5%84">同源重組</a>。這會導致我 N 群利益一致的基因好不容易組在一起了，但下一次重組就又被打散。除非……</p><h2 id="準性別特徵表現型基因固定成性染色體">準性別特徵表現型基因固定成性染色體</h2><p>除非「好朋友基因組」永不重組，永不離棄！如何做到？問就是突變。在粉紅鹿的分享的<a href="https://www.sciencehistory.org/stories/disappearing-pod/the-bird-with-four-sexes/">來源資料</a>處就有談到類似的固定過程。簡而言之就是，「大配子好朋友基因組」跟「小配子好朋友基因組」之間不會交換遺傳物質了。以人類而言，XY 之間的聯會跟重組只會在一些與決定性別無關的序列中發生。</p><p>有人出現合作基因永不打散的優勢之後，特徵會被打散的其他個體就因相對劣勢而被淘汰，於是市場上剩下「大配子好朋友基因組」總是一起出現的個體，與「小配子好朋友基因組」總是一起出現的個體。其實到這邊故事就結束了。因為我們後來發現，在人類中，女的是前者、男的是後者，然後我們就把這個發現往所有生物去回推<strong>命名</strong>——把大配子提供者定義為了雌性、小配子提供者定義為了雄性。</p><p>如果你覺得太扯，怎麼可能所有雄性特徵都剛好固定寫在 Y 裡面？是的，其實以人類為例，我們的「小配子好朋友基因組」裡面有一段很重要的基因叫做 SRY，它會再進一步去調控位在體染色體上的其他功能，輾轉地去對性別特徵進行所謂的「開關」。而這一點都不奇怪，對複雜的性狀而言，大多都牽涉到與多段基因的拮抗、連鎖反應、有的沒的。並且要知道，基因調控這種東西，牽涉到的不是全有全無，而是「劑量」…… 然後就又能開啟更多討論，但此篇就在此打住吧。</p><h2 id="後話">後話</h2><p>跟友人分享粉紅鹿的<a href="https://pinkway.mataroa.blog/blog/bird-with-four-sex/">四種性別的鳥</a>後，友人認為有趣歸有趣，但不認為它跟性別有什麼關係。所以我就覺得我要寫點什麼來解釋一下。雖然該例子中固定的不是性染色體，但最一開始性染色體也是從體染色體突變而來的啊！白喉帶鵐正在復現「性別」特徵的固定過程，以一個不跟配子綁定的模式——綁的是羽色！<strong>某種羽色開始跟特定的行為和繁殖策略掛鉤，就像當初配子大小開始跟特定的行為和繁殖策略掛鉤一樣</strong>。</p><p>最後還是但書一下，以上是過度粗略的解釋方式，旨在使人快速理解性別所為何事，從更宏觀的視角來看待這事，才不致覺得一切現況都是理所當然或天經地義。不過呢，講得再多，最終還是得回歸到這條警語：現存的基因為什麼會是這副摸樣、這樣運作呢？我們可以<strong>事後諸葛地解釋</strong>其生化機轉、猜測其演化因果，但這些都不能抹滅<strong>它具有高度偶然性</strong>的這樣一個事實。</p><hr><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">1.</span><span style="display: inline-block; vertical-align: top;">當然，演化是沒有感情的，凡一切的擬人用詞都請自己打上引號。事實是，有性生殖的玩法恰好遇到了更複雜的情形，並且恰好在該情形之下取得了相對優勢。</span><a href="#fnref:1" rev="footnote"> ↩</a></li><li id="fn:2"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">2.</span><span style="display: inline-block; vertical-align: top;">厭惡感是道德判斷的驅動器。幾乎所有有兄弟姐妹的人都會認為手足間的亂倫十分惡心。然而這些感受是我們用「心智」自行判斷出來的嗎？大概不是，這些是基因透過演化留在我們身上的軀體標記。而這些標記告訴我們這些行為「不對」，於是我們將其敘述為「不道德」。以上出自道德心理學家海德（Haidt），他透過「道德錯愕」的例子主張「道德結論很少基於推理，更多是來自直覺」。</span><a href="#fnref:2" rev="footnote"> ↩</a></li><li id="fn:3"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">3.</span><span style="display: inline-block; vertical-align: top;">你懂的，凡一切的擬人用詞都請自己打上引號。事實是小配子恰好出現了，也許是以突變的方式。當然，也可能是小配子一直都在市場上苟延殘喘著，恰好遇到了大配子大行其道的好時代。</span><a href="#fnref:3" rev="footnote"> ↩</a></li></ol></div></div>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E6%80%A7%E5%88%A5/">性別</category>
      
      <category domain="https://shuaixin.cc/tags/%E9%81%BA%E5%82%B3/">遺傳</category>
      
      
      <comments>https://shuaixin.cc/Origin-of-Sex/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>共同見證人</title>
      <link>https://shuaixin.cc/Shared-Witness/</link>
      <guid>https://shuaixin.cc/Shared-Witness/</guid>
      <pubDate>Fri, 19 Jun 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>當我只有一個人的時候，我<strong>很少</strong>會想去嘗試新的餐館、探索新的地點、體驗新的活動…… 咦，為什麼？我覺得大概是因為沒有「共同見證人」。</p><p>近期在閱讀讀書會夥伴<a href="https://fangstuff.com/">芳</a>借給我的 “The Artist’s Way”（台灣翻譯《創作，是心靈療癒的旅程》），which 完全不是我的攝食範圍，放以前我一定一下就扔一旁了。但<a href="https://shuaixin.cc/Ideal-Life/">偏食就是在遠離理想的生活</a>，秉持著<ruby>差值<rt>Delta</rt></ruby>哲學，我知道我勢必得擴展我的舒適泡泡。而這也是<a href="https://club.1-know.org/">讀書會</a>存在的一個很重要的職能吧。</p><p>書中有兩個很重要的實作概念：「晨間隨筆」跟「藝術之約」。晨間隨筆的部分我欣然接受，反正我本來就<a href="https://shuaixin.cc/Sleep-at-9/">早起</a>，沒有難度。但藝術之約就遇到了一些挑戰（積極意味的）。</p><p>所謂藝術之約，根據作者的說法，就是跟自己心中的小小藝術家來上一趟<strong>一對一</strong>的約會出遊，不能帶上任何其他人。這才讓我更清楚地注意到，當我獨自一人的時候，我真的不太喜歡跑出去玩欸。但我不是不喜歡跑出去玩，而是覺得自己出去玩「有點浪費」——不帶上友人沒意思啊，又沒有人一起見證這件事！</p><p>原來如此，我的 Google Map 存了很多「想去的地點」，但幾乎不會獨自去造訪它們，就是這份心情吧。</p><p>假如一棵樹在森林裡倒下而<strong>沒有人在附近聽見</strong>，它有沒有發出聲音？</p><p>假如我自己去爬山，看到了一隻台灣雲豹（which 已被宣告滅絕），但只有我看到了，那這件事成立嗎？顯然沒有人會覺得成立啊，阿就絕種了，你說看到就看到喔？所以假如一隻雲豹在我面前現蹤，而<strong>只有我在附近看見</strong>，它有沒有現蹤？沒有。<s>所以「只有我」跟「沒有人」是等價的</s>。</p><p>嗯，總之這是我在藝術之約中遇到的挑戰與心境，在我自己走進一家「想去的地點」的餐館用餐時就邊吃邊覺得少了「共同見證人」。<s>難怪我們總愛拍照打卡發限動，畢竟「沒發限動」跟「沒發生過」是等價的</s>。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E8%AE%80%E6%9B%B8%E6%9C%83/">讀書會</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%B7%AE%E5%80%BC%E5%A4%96%E5%8C%85/">差值外包</category>
      
      <category domain="https://shuaixin.cc/tags/Philosophy-of-Delta/">Philosophy of Delta</category>
      
      
      <comments>https://shuaixin.cc/Shared-Witness/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>你知道嗎？麻辣的麻是一種 50 赫茲的錯覺</title>
      <link>https://shuaixin.cc/50-Hz/</link>
      <guid>https://shuaixin.cc/50-Hz/</guid>
      <pubDate>Wed, 17 Jun 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<blockquote><p>這是我的「<a href="https://blogblog.club/party/"><strong>BlogBlog 同樂會 - 2026 年 7 月</strong></a> 」的投稿文章。本月主題是「<a href="https://shuaixin.cc/Fun-Fact/"><strong>有趣的小知識或冷門概念</strong></a>」，由<a href="https://shuaixin.cc/">劉昕</a>主持。如果你有自己的部落格，歡迎一起來參加！</p></blockquote><p>你知道嗎？<strong>我們只能感覺到能被我們感覺到的感覺</strong>。雖然確實是一句廢話，但我很喜歡提醒自己這件事。</p><p>天空真的是藍色的嗎？其實大氣中發生的瑞利散射，對於較短的波長其效應更明顯，所以真要說的話，天空是偏紫色的。但由於我們的水晶體會濾掉可見光中波長較短的部分，所以最後的結果就是我們看到的是藍色，而非紫色。有一個說法是這樣的：莫內晚年的畫風之所以會充滿了藍紫色調，跟他因為白內障而手術摘除水晶體有脫不開的關係！</p><p>就算你沒感覺到天空是紫色的，也不代表天空不是紫色的<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>。</p><p>跟我們只能感覺到能被我們感覺到的感覺一樣，<strong>我們無法意識到我們意識不到的內容</strong>。哇靠又一句廢話嗎？我個人的意見是，意識到我們無法意識到我們意識不到的內容之後，才是開始使用自由意志的第一步。而如你所意識到的，我好像出現嚴重偏題了，以後再找機會聊聊這題。</p><p>話說回來，因為我們只能感覺到能被我們感覺到的感覺，所以一個感覺事件要發生，首先我們要有能感受這件事的「受器」<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>。所以我們若是能感覺到「辣」，就表示我們有接收「辣」的受器；要能感覺到「麻」，就要有能接收「麻」的受器。先後順序是重要的，我們先有了 A 受器，才有了 A 感受。語言的邊界就是世界的邊界<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup>，而語言 A 的產生是因為我們先能感受 A ——受器造就了感受，感受造就了語言，語言造就了你的世界<sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup>。</p><p>姑且算是圓回正題了，說說「辣」吧！辣並不是一種味覺（酸、甜、苦、鹹、鮮），而是一種「溫痛覺」。詳細來說，這個受器叫做 TRPV1，在溫度高於 43 度時會被刺激活化、產生疼痛感讓我們可以應對危害性的熱源或調整體溫。然而，辣椒素剛好可以跟 TRPV1 結合，直接活化它。還真別說，這股疼痛感在人類嘴裡卻覺得怪爽的，於是我們發現了辣椒素，並發明了「辣」。但本質上，它就是一種「溫痛覺」罷了。</p><p>辣是疼痛可能不是新聞，不過「麻」就比較少人在討論了。要感受到麻首先我們要有感受它的受器，那這個受器是誰呢？是邁斯納小體（Meissner corpuscle）連接的 RA1 神經纖維！</p><p>學過生理的朋友可能會驚呼，以前是在「觸覺」裡面學到了邁斯納小體，並且它負責輕觸覺跟低頻率震動（對 50Hz 以下的振動敏感）不是嗎？是的沒錯，邁斯納小體遇到震動會激發 RA1 神經纖維讓我們感覺到震動，而花椒素直接激發了 RA1 神經纖維，讓我們產生了跟邁斯納小體遇到震動相似的感覺，也就是 50 Hz 左右的震動錯覺。那你說，有沒有可能是帕西尼氏小體（Pacinian corpuscle）呢？因為它除了感受壓覺也能感受高頻振動（主要感知 200Hz 以上的震動）呀。嘿嘿，問得好，可惜嘴唇上沒有帕西尼氏小體。</p><p>至此，我們可以說：你知道嗎？麻辣的「辣」其實是一種痛覺，而「麻」是一種約莫 50 赫茲的震動覺哦！</p><hr><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">1.</span><span style="display: inline-block; vertical-align: top;">當然啦，我是指對人類而言。但實際上，由於臭氧層也會過濾紫光，並且我們的視錐細胞對紫光的敏感度也沒有藍光來得高，再加上色彩心理學跟白平衡的影響，實際上你真的把水晶體挖掉後會不會覺得天空是紫色的…… 坐等實測，求解 20 點。</span><a href="#fnref:1" rev="footnote"> ↩</a></li><li id="fn:2"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">2.</span><span style="display: inline-block; vertical-align: top;">此處我將凡能被特定方式激發的結構都歸作受器，所以游離的神經末梢也算。但別跟你的生理學老師這樣說。</span><a href="#fnref:2" rev="footnote"> ↩</a></li><li id="fn:3"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">3.</span><span style="display: inline-block; vertical-align: top;">出自奧地利哲學家路德維希·維根斯坦（Ludwig Wittgenstein）的《邏輯哲學論》</span><a href="#fnref:3" rev="footnote"> ↩</a></li><li id="fn:4"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">4.</span><span style="display: inline-block; vertical-align: top;">沒錯，接下來就要主張「你的受器就是你的全世界」了。你可能會問，受器針對外源性的事件做反應，但我們也有內源性的事件啊？是的，但內外的邊界在哪裡呢？實際上，核糖核酸之外就能算是「外」了——你「心裡發生的事」也是「外源性的」。簡單的例子是，你大腦 A 區域分泌血清素給你的大腦 B 區域給了你愉悅放鬆的感覺，這是內源性的嗎？其實也是因為你有血清素「受器」，對吧？啊啊但我此處的受器也包含可被激發的神經部位啦，我統稱受器只是方便討論，其底層邏輯都是「你只能感覺到能被你感覺到的東西」，你懂我意思。</span><a href="#fnref:4" rev="footnote"> ↩</a></li></ol></div></div>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%83%A8%E8%90%BD%E6%A0%BC%E5%90%8C%E6%A8%82%E6%9C%83/">部落格同樂會</category>
      
      <category domain="https://shuaixin.cc/tags/%E8%AE%80%E6%9B%B8%E6%9C%83/">讀書會</category>
      
      
      <comments>https://shuaixin.cc/50-Hz/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>BlogBlog 同樂會：有趣的小知識或冷門概念</title>
      <link>https://shuaixin.cc/Fun-Fact/</link>
      <guid>https://shuaixin.cc/Fun-Fact/</guid>
      <pubDate>Wed, 17 Jun 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>歡迎！這裡是 <a href="https://blogblog.club/party/"><strong>BlogBlog 同樂會 - 2026 年 7 月</strong></a>的主題頁面，我是這次的主持人劉昕…… 你知道嗎？麻辣的「辣」其實是一種痛覺，而「麻」是一種約莫 50 赫茲的震動覺哦！</p><h2 id="主題：有趣的小知識或冷門概念">主題：有趣的小知識或冷門概念</h2><p>你是否也曾因為學到一些看似無關緊要的知識點，而感到莫名雀躍？</p><p>我想，答案多半是肯定的，畢竟對新奇的事物產生好奇與興趣是我們的天性。但很多時候，社會看待知識的態度是功利的：某些熱門領域的知識或話題成為了顯學，而其他乍看之下沒啥用的資訊就變成了所謂「冷知識」。漸漸地，我們面對一個新問題的第一個念頭居然不是「為什麼」，而是「這個有什麼用」，忽略了滿足好奇心這件事本身就很「有用」。</p><p>所以這次，我想邀請大家拋開那些世俗的評價，把那些<strong>明明很有趣</strong>的、你雪藏的、偏門的、沒啥用的話題「公諸於眾」！平常我們可能會怕別人覺得無聊，話到嘴邊又默默吞回去。但這次就別管了，<strong>只要你覺得有趣，就算切題哦</strong>。</p><p>嘿，你知道嗎？其實「公諸於眾」是「公之於眾」的誤用，因為「諸」就是「之於」的合音了，所以公諸於眾會變成「公之於於眾」。我甚至在猜，搞不好公諸於眾這個用法一開始是因為台灣國語導致的……</p><p>沒想到寫一寫就示範了一個例子。而因為<strong>我自己</strong>覺得這個例子很有趣，所以沒問題，有切題！而講到積非成是的詞彙誤用，我就忍不住想多分享一個：</p><p>「<ruby>崁<rt>ㄎㄢˇ</rt></ruby>燈」根本不是一個詞彙，「<ruby>嵌<rt>ㄑㄧㄢ</rt></ruby>燈」才是！因為這個燈「鑲嵌」在牆體之中嘛。但因為大家一直看著<ruby>嵌<rt>ㄑㄧㄢ</rt></ruby>唸著<ruby>崁<rt>ㄎㄢˇ</rt></ruby>，久而久之就沒有人聽得懂正確的「嵌燈」了……</p><p>你看，我引言寫一寫就蹦出了兩個「小知識」（這兩個導播沒有 set 過），看來這次的主題應該是挺好發揮的。倒不如說，平常跟別人聊天聊一聊，你突然糾正人家「不是崁燈而是嵌燈哦」只會被白眼而已吧（沒錯我就是常常被白眼的那個），但這次就是你暢所欲言的時候！</p><p>不管你是在大家抱怨天氣很熱的時候總想來一句「<strong>你知道嗎？其實我們正處於冰河期哦</strong>」；還是在忌諱吃牛的朋友面前白目「<strong>你知道嗎？其實羊是牛科的哦</strong>」，現在你可以大放異彩咯。</p><h2 id="參加方式">參加方式</h2><ol><li>在自己的部落格上寫一篇跟「有趣的小知識或冷門概念」有關的文章，複製以下文字到你的投稿文章開頭（非強制）：</li></ol><blockquote><p>這是我的「<a href="https://blogblog.club/party/"><strong>BlogBlog 同樂會 - 2026 年 7 月</strong></a> 」的投稿文章。本月主題是「<a href="https://shuaixin.cc/Fun-Fact/"><strong>有趣的小知識或冷門概念</strong></a>」，由<a href="https://shuaixin.cc/">劉昕</a>主持。如果你有自己的部落格，歡迎一起來參加！</p></blockquote><ol start="2"><li><p>把「文章標題」、「文章連結」、「投稿人稱呼」寄到 <code>xinver22@gmail.com</code> ，信件主旨請寫「BlogBlog 同樂會：有趣的小知識或冷門概念」。</p></li><li><p>記得在截稿日（2026-07-31）前寄出哦！</p></li></ol><h2 id="規則與限制">規則與限制</h2><ul><li>畢竟是「部落格同樂會」，參加者需有自己的部落格方可參加，快去<a href="https://blogblog.club/resources">架一個</a>！真心推薦擁有一個自己的部落格，絕對值得。</li><li>跟 <a href="https://indieweb.org/IndieWeb_Carnival">IndieWeb Carnival</a> 不同的是，我們接受舊文投稿。如果你部落格裡剛好有符合主題的文章，可以直接投稿哦。</li><li>文體不限、文長不拘，語言都可以！我準備好努力閱讀<a href="https://zh.wikipedia.org/zh-tw/%E7%99%BD%E8%A9%B1%E5%AD%97">白話字</a>了 XD</li><li>雖說只要你覺得有趣就算切題，但請依舊要提供關於該知識點的敘述或解釋哦。</li><li>單人投稿上限為三篇文章。</li></ul><hr><h2 id="當前投稿">當前投稿</h2><p>這裡會隨時更新目前的投稿，將會按照投稿時間排序。至於我自己的投稿，呼應此篇引言的開頭寫了<a href="https://shuaixin.cc/50-Hz/">《你知道嗎？麻辣的麻是一種 50 赫茲的錯覺》</a>，還請參考。</p><ol><li><a href="https://blog.giveanornot.com/fun-facts-and-a-secret/">有趣小知識，還有一個秘密</a> - JN</li><li><a href="https://pinkway.mataroa.blog/blog/bird-with-four-sex/">四种性别的鸟</a> - 粉红鹿</li><li><a href="https://angeci.github.io/blog/zh/chinese-dialectal-phenomena/">淺談數個漢語方言現象</a> - AngeCI</li><li><a href="https://career.dyron503.top/blogblog1/">关于 Metrics 的二三小事</a> - Dyron</li><li><a href="https://blog.douchi.space/book-win-friends-influence-fungi/">茶加奶和奶加茶一样吗？——读《How to win friends and influence fungi》</a> - 椒盐豆豉</li><li><a href="https://blog.douchi.space/book-bitch/">剥开科学中的偏见看雌性动物——读《Bitch》</a> - 椒盐豆豉</li><li><a href="https://pinkway.mataroa.blog/blog/three-metric/">三种不同的度量</a> - 粉红鹿</li><li><a href="https://shuojen.com/blog/2026/06/20/fun_fact">有趣的小知識</a> - shuojen</li><li><a href="https://e89295.com/blog/2026-06-20.html">一百年前的「精靈文」注音符號</a> - 我</li><li><a href="https://tianyanfeng.blog/penultimate-act/">壓軸</a> - Tian-Yan</li><li><a href="https://vaviona.bearblog.dev/3584/">虛假記憶</a> - 小妖</li><li><a href="https://rayrrrrrrr.bearblog.dev/2480/">自言自語：那些在腦海想過、不知道可以跟誰分享的小小想法合集，之一</a> - RayrrrrrR</li><li><a href="https://lq7.tw/thinking/crows/">關於「鴉」的兩三事</a> - LQ7</li><li><a href="https://yangbear.bearblog.dev/abehiroshi/">阿部寬的官方網頁</a> - YangBear</li><li><a href="https://carrot.tw/posts/bopomofo/">注音狂想曲</a> —蘿蔔</li><li><a href="https://eeseoliz.net/posts/technical-notes/computer-fun-facts/">關於 電腦的冷知識｜8 個你可能不知道的電腦知識</a> - eeseoliz</li><li><a href="https://wilsonchao.com/blog/cross-circulation">一台手術與兩條性命</a> - Wilson</li><li><a href="https://wox080xow.github.io/2026/07/02/tai-gi-u-ji.html">Tâi-gí ū jī?</a><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> - wox080xow (Lí Ka-io̍k)</li><li><a href="https://yoon.club/6415/">在首爾我的觀察（食物篇）</a> - Yoon</li><li><a href="https://yoe1.bearblog.dev/2730/">讀了這本書，你會更懂科學的語言：《這才是心理學》</a> - 右衣</li><li><a href="https://my-blog.worldofwheat.cc/blog/2026/07/basic-electrical-knowledge">一些關於電的基本知識</a> - 小麥</li><li><a href="https://wiwi.blog/blog/4-useless-music-facts">四個沒用的音樂小知識</a> - 官大為 Wiwi Kuan</li><li><a href="https://microblog.ttheng.com/some-trivia-july-2026/">小香港、福建獅與「河嘻」</a> - ttheng</li><li><a href="https://angeci.github.io/blog/zh/fun-facts/">有趣小知識</a> - AngeCI</li><li><a href="https://blog.qazsskevin.org/blog/2026/07/what-the-bug/">Bug嗎？</a> - Kevin</li><li><a href="https://jsdurand.xyz/kautuhala.html">搞都哈啦</a> - 李俊緯</li><li><a href="https://ordinarykuma.blogspot.com/2026/07/blog-post.html">【廢文】基本事實：物理和數學</a> - XJD</li><li><a href="https://ordinarykuma.blogspot.com/2026/07/apparmor.html">AppArmor和簡單的電腦安全採取行動</a> - XJD</li><li><a href="https://blog.andy-hu.com/parenting_tips/">實習爸媽的十個小錦囊</a> - Andy</li><li><a href="https://namitz.com/posts/ALilTip/">有趣的小知識：台灣專屬</a> - Namitz</li><li><a href="https://yangbear.bearblog.dev/3023/">陸龜會用鼻子喝水</a> - YangBear</li><li><a href="https://timoblog.com/post/73/">73</a> - Timo</li><li><a href="https://itsxiaobai.github.io/blog/useless-facts/">沒用的小知識</a> - It’s小白（Jerry）</li><li><a href="https://alexhsu.com/no-way-roundup">IndieWeb Carnival回顧：25個「怎麼可能！？」</a> - Alex Hsu</li><li><a href="https://haruowang.vercel.app/about/lifelog/blogblog.html#%E6%9C%89%E8%B6%A3%E7%9A%84%E5%B0%8F%E7%9F%A5%E8%AD%98%E6%88%96%E5%86%B7%E9%96%80%E6%A6%82%E5%BF%B5">我至今認識的鈴木一誌</a> - Haruo Wang</li><li><a href="https://susushare.com/%e5%8d%a1%e5%93%87%e4%bc%8a%e5%85%a7/">卡哇伊內</a> - Susan</li><li><a href="https://happyahip.bearblog.dev/2116/">有趣的小知識</a> - happylin</li><li><a href="https://yuzhou.my/2026/07/12/the-real-java/zh-TW/">真正的 Java</a> - 宇宙 Yuzhou</li><li><a href="https://www.threeportkeys.com/zh-cn/posts/cool-facts-blogblog-party-july-2026/">美人鱼|动物好麻吉|会浮的星球</a><sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> - Wen</li><li><a href="https://blog.dm4.tw/ellipsis-in-macos">macOS 裡的刪節號</a> - dm4</li><li><a href="https://pennameco.xyz/blog/food_chirken/">鸡是我们最好吃的朋友🐔</a> - 顾游Gize_Ku</li><li><a href="https://hsun.bearblog.dev/bridge-facts/">橋梁小知識💡BBP7</a> - Hsun</li><li><a href="https://johnworker.bearblog.dev/3/">貨幣的3個冷知識</a> - 鏡想</li><li><a href="https://jaywalker.bearblog.dev/3991/">你知道嗎，你的品味是由你的階級決定的。</a> - Jay Walker</li><li><a href="https://dannypsnl.me/Z00L/">色彩繽紛的範疇論</a> - Lîm Tsú-thuàn</li><li><a href="https://boringgameofficial.github.io/blog/20260715">Unix time 與 2038 年問題</a> - Boring Game</li><li><a href="https://www.hachizen.blog/blog/interesting-facts">有趣的小知識或冷門概念</a> - HachiZen</li><li><a href="https://shu-yen.com/fun-facts/">教外國人中文的小知識</a> - 書言</li><li><a href="https://oohmemen.com/blog/epicycles/">Epicycles</a> - O’Oh 麵麵</li><li><a href="https://shuyulin1127.com/pixel-gif-outerspace/">抵達月球的方法</a> - Shuyu</li><li><a href="https://blog.sean.taipei/2026/07/skating">開始滑冰才知道的幾件事</a> - Sean Wei</li><li><a href="https://shuaixin.cc/Venus-Instrumentalism-and-Hooke/">叛逆的金星、工具主義、虎克真的很醜嗎？</a> - 劉昕</li><li><a href="https://blog.neil-lin.com/blog/life-notes/2026/07/coffee_knowledge/">咖啡小知識</a> - Neil Lin</li><li><a href="https://daisy27.bearblog.dev/yushan_the_first_girl_group/">第一團攻上玉山的女校生</a> - Daisy黛西</li><li><a href="https://blog.wei-lee.me/posts/random-thoughts/2026/07/fun-trivia-and-obscure-concepts/">有趣的小知識或冷門概念 - 睡前小酌</a> - Wei</li><li><a href="https://jabee.net/notes/260721/">什麼！能刷 Suica 進站，卻不一定能出站？搭乘日本鐵道 JR 超詳細注意事項攻略！</a> - Jabee姜</li><li><a href="https://fatapple0406.github.io/posts/2026/never-let-go/">就是要抓著手</a> - A 吉胖</li><li><a href="https://blog.serv.idv.tw/2026/07/lcd-vs-led-using-camera/">為什麼相機一拍螢幕就破功？</a> - PipperL</li><li><a href="https://cylikesreading.wordpress.com/2026/07/25/day-of-week-blogblogclub/">2026年7月31日是周五，2027年7月31日是周六</a> - 恐龍化石</li><li><a href="https://blog.duckll.tw/blog/waiting_time_paradox">等待時間悖論</a> - DuckLL</li><li><a href="https://gooseboop.com/posts/00027-socold/">10的N次方</a> - TK</li><li><a href="https://blog.ikukaroom.com/shock/">「滿」震驚的</a> - ikuka</li><li><a href="https://water-bottle-fly.bearblog.dev/understand-braille-can-know-order-of-letter/">會點字的附加技能—第幾個字母，算的超快！</a> - 水壺翔</li><li><a href="https://hellenmurmur.bearblog.dev/8924/">身為自學生的家長</a> - Hellen</li><li><a href="https://fangstuff.com/posts/nameless-baby/">無名寶寶、你住過的小小房間與夫妻臉</a> - Fang</li><li><a href="https://ilovemovie.pika.page/posts/b">美麗的毒蘑菇「Ｂ級片電影」－朴贊郁</a> - 阿標</li><li><a href="https://blog.nudoragon.com/post/200">有趣的小知識或冷門概念</a> - 龍女</li><li><a href="https://meowjay.cc/posts/overhead-wire/">「有趣的小知识或冷门概念」：高铁上面的电线为什么不是直直一条？</a> - Meowjay</li><li><a href="https://meowjay.cc/posts/factory-unique-code/">日本食品包装上的「製造所固有記号」有什么用？</a> - Meowjay</li><li><a href="https://jai33snotes.com/5-fun-facts-about-penguins/">五個可愛的企鵝小知識</a> - 皆米</li><li><a href="https://chang-shih-ting.com/true-stories-from-history-bitcoin-cold-facts/">歷史上真實發生的故事：比特幣冷知識大集合</a> - Shih-Ting</li><li><a href="https://j2hongming.com/2026/07/29/tech-fun-facts/">2038</a> - j2hongming</li><li><a href="https://poya.school/blog/bavaria-blue-white">藍白色的邦</a> -Poya</li><li><a href="https://alanwang.art/wood-fired-teapot-from-wild-tea-master-cho/">我買了新茶壺！</a> - 王昱荃 Alan Wang</li><li><a href="https://fgzblog.com/zh-tw/posts/ng1/">台灣的天然氣小知識</a> - 剛哲</li><li><a href="https://route110.blog/posts/incandescent-light-bulb/">白熾燈泡</a> - 拍拍</li><li><a href="https://zichenblog.com/Blog/49-sister-guide/">姐姊的用法</a> - zichen</li><li><a href="https://www.lhooq.life/words/20260730">为什么塞尔达传说里的驿站，英文是Stable？</a> - Ulshké</li><li><a href="https://weiblog.me/2026-07-24/2026-interesting-trivia-obscure-concepts/">有趣的小知識或冷門概念</a> - Kevin</li><li><a href="https://eddielv.com/articles/mic-knowledge/">麥克風的 14 個冷知識</a> - Eddie Lv</li><li><a href="https://jimmychen.me/blog/spam/">你所不知道的SPAM</a> - 吉米 Jimmy</li><li><a href="https://plog.bearblog.dev/bei-bei-jiao-jiao/">被被角角</a> - ㄅㄨ</li><li><a href="https://mia.piccina.casa/blog/not-that-south/">沒那麼南</a> - bee5</li><li><a href="https://blog.giveanornot.com/mandarin-cover-songs/">那些你耳熟能詳的華語金曲，其實都是翻唱的！</a> - JN</li><li><a href="https://blog.giveanornot.com/tsao-oo/">「一府二鹿三艋舺」的下一句是什麼？</a> - JN</li><li><a href="https://lyingcello.com/blog/2026-07-31_brave_illusion/">漂移的臉</a> - Lyingcello</li><li><a href="https://kiantiong.com/sutian/50/">教典僻智識的精選佮起源</a> - 建中</li><li><a href="https://microblog.ttheng.com/daging-harimau-menangis/">老虎哭泣肉？</a> - ttheng</li><li><a href="https://hshuang.com/posts/urine-therapy-origin/">喝尿家族：起源</a> - 黃宏勝</li><li><a href="https://erne.bearblog.dev/260726">我想問幾個有趣或冷門的問題</a> - ERNE</li><li><a href="https://erne.bearblog.dev/260727/">信徒與信眾：一些宗教信仰的觀察</a> - ERNE</li><li><a href="https://20260206.bearblog.dev/2026-july-1/">又奇怪又好笑又危險的東西</a> - ethan1008</li><li><a href="https://lotussing.blog/archives/4404">關於鳥的二三事</a> - 蓮賦</li><li><a href="https://shenjing.me/blog/Fun-Fact/">小知識：男人乳頭、三門問題、K 語言</a> - ShenJing</li><li><a href="https://puzelee.cc/posts/twd-fun-facts/">關於新台幣鈔票的冷知識</a> - PuzeLee</li><li><a href="https://blog.supergrey.uk/history-crisis-of-chinese-characters/">漢字的三次瀕死體驗</a> - SuperGrey</li><li><a href="https://blog.huacaty.com/posts/gb-vs-gib">為什麼我的硬碟到 Windows 就縮水了？一場荒謬的單位之爭</a> - huacat</li></ol><hr><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">1.</span><span style="display: inline-block; vertical-align: top;">譯註：台語有字？</span><a href="#fnref:1" rev="footnote"> ↩</a></li><li id="fn:2"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">2.</span><span style="display: inline-block; vertical-align: top;">有中英雙版本</span><a href="#fnref:2" rev="footnote"> ↩</a></li></ol></div></div>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%83%A8%E8%90%BD%E6%A0%BC%E5%90%8C%E6%A8%82%E6%9C%83/">部落格同樂會</category>
      
      
      <comments>https://shuaixin.cc/Fun-Fact/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>ASUS 重灌雜症：Security Violation、找不到任何磁碟機</title>
      <link>https://shuaixin.cc/Ventoy-Secure-Boot-VMD/</link>
      <guid>https://shuaixin.cc/Ventoy-Secure-Boot-VMD/</guid>
      <pubDate>Mon, 08 Jun 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>今天交手一台莫名其妙被 BitLocker 鎖住的 ASUS 的 AIO 電腦。這題可大可小，端看施主想保大還保小（？），我是說能不能砍掉重練。這次資料可以不用留，所以好辦，剛好我的 ventoy 隨身碟還真的碟如其名隨身攜帶，裡面有 win10、win11、ubuntu24、ubuntu26、centOS 的映像檔任君挑選，掏出來想帥氣解掉這題，然後頭也不回。你問憑什麼一個隨身碟就能充當那麼多作業系統的安裝碟？因為我已經<a href="https://shuaixin.cc/rufus-vs-ventoy/">用 Ventoy 取代 Rufus 了</a>。</p><h2 id="Security-Violation">Security Violation</h2><p>但代誌總是不像憨人想的那麼簡單，進 BIOS（其實是 UEFI）調完開機順序後，迎面而來的是 <code>ERROR: Verification failed: (0x1A) Security Violation</code> ，啥玩意兒？其實就只是一個簡單的安全機制，只要關閉掉“Secure Boot”就可以解掉這題：</p><p><img src="/Ventoy-Secure-Boot-VMD/violation.jpg" alt="violation"></p><p><img src="/Ventoy-Secure-Boot-VMD/secure-boot.jpg" alt="secure-boot"></p><h2 id="安全開機？">安全開機？</h2><p>但我想到，我一開始製作 ventoy 碟的時候明明有開啟「支援安全開機」啊：</p><p><img src="/Ventoy-Secure-Boot-VMD/ventoy.png" alt="ventoy"></p><p>可能之前我都沒遇到這個問題是因為 ventoy 幫我繞過了這題，果然工具不能太好用，否則就會失去成長的機會。正所謂工欲善其事，必先利其器；<strong>但若利其器，就會變笨哦</strong>（？）</p><p>但實際上，就算 ventoy 沒有主動繞過 secure boot，我們還是可以進 <a href="https://github.com/ventoy/Ventoy/blob/master/SecureBoot.md">shim</a> 去手動添加證書。它借用了 Rocky Linux 的 shim 讓我們進 MOK management，此時可選用 ventoy 把證書註冊到這塊主機板上，然後就能通過了。</p><p>*更新：ventoy 並沒有主動繞過 secure boot 的能力，沒遇到就只是運氣好遇到的品牌預設沒開 secure boot。只是比起 rufus，ventoy 提供了一層 shim 來添加證書，如此就可以不必再特地關 secure boot，還是比較方便的。</p><h2 id="找不到任何磁碟機">找不到任何磁碟機</h2><p>ok 總算進安裝了，但代誌總是不像憨人想的那麼簡單，進來後發現空無一物：</p><p><img src="/Ventoy-Secure-Boot-VMD/vmd.jpg" alt="vmd"></p><p><code>找不到任何磁碟機，若要取得存放裝置驅動程式，請按一下載入驅動程式。</code>有夠狠，直接唱我空城。是唱我空城，不是唱我的<a href="https://legacy.soundscape.net/a/13903">空城</a>哦。</p><p>這題其實是 Intel VMD 技術在搞鬼，<strong>啟用Intel VMD 時，NVMe SSD PCI 裝置將不可見</strong>。那這個技術有啥好處？它可以讓多個儲存空間組成 RAID，對消費級別的 user 來說…… 應該是用不太到，除非有熱插拔 SSD 的需求？</p><p>所以我說，你各位廠商可不可以注意一下預設值啊拜託。</p><p>解法是去找對應的<a href="https://www.intel.com.tw/content/www/tw/zh/download/849936/intel-rapid-storage-technology-driver-installation-software-with-intel-optane-memory-12th-to-15th-gen-platforms.html">驅動</a>，放到同一個啟動碟中，即可在這一步載入驅動來讀取硬碟。但我才不要嘞，所以直接一樣在 BIOS（其實是 UEFI）關掉就好：</p><p><img src="/Ventoy-Secure-Boot-VMD/intel-vmd.jpg" alt="intel-vmd"></p><h2 id="後話">後話</h2><p>我嚴重懷疑 Secure Boot 的坑我以前早就踩過了，但你知道為什麼人類總是不會記取教訓嗎？因為我們以為自己會記取教訓啊。</p><p>故撰文誌之。</p><h2 id="晴天霹靂！！">晴天霹靂！！</h2><p>我越想越奇怪，不對，這題我一定在哪裡見過！</p><p>在我的 notion 裡面搜尋了一番，我確實處理過！！！</p><p><img src="/Ventoy-Secure-Boot-VMD/orzzz.png" alt="orzzz"></p><p>我在<strong>七年前</strong>就寫過這件事的 memo 了，也就是說，就算我寫下來也沒用。顆顆。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/Windows/">Windows</category>
      
      <category domain="https://shuaixin.cc/tags/ASUS/">ASUS</category>
      
      <category domain="https://shuaixin.cc/tags/Ventoy/">Ventoy</category>
      
      <category domain="https://shuaixin.cc/tags/Rufus/">Rufus</category>
      
      <category domain="https://shuaixin.cc/tags/Secure-Boot/">Secure Boot</category>
      
      <category domain="https://shuaixin.cc/tags/VMD/">VMD</category>
      
      <category domain="https://shuaixin.cc/tags/BIOS/">BIOS</category>
      
      <category domain="https://shuaixin.cc/tags/UTFI/">UTFI</category>
      
      
      <comments>https://shuaixin.cc/Ventoy-Secure-Boot-VMD/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>為什麼我不寫歌了？</title>
      <link>https://shuaixin.cc/Why-I-Quit-Music/</link>
      <guid>https://shuaixin.cc/Why-I-Quit-Music/</guid>
      <pubDate>Mon, 01 Jun 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<blockquote><p>這是我的「<a href="https://blogblog.club/party/">BlogBlog 同樂會 - 2026 年 6 月</a>」的投稿文章。本月主題是「<a href="https://www.yozblog.com/posts/music-and-memories">音樂與記憶</a>」，由 <a href="https://www.yozblog.com/">柚子</a> 主持。如果你有自己的部落格，歡迎一起來參加！</p></blockquote><p>當年因為意氣用事，使出渾身解數創作了<a href="https://legacy.soundscape.net/a/11800">《椰林之外》</a>。</p><p>窮學生嘛，除了詞曲跟自己主唱以外，編曲跟後期製作也全部都包了，真正意義地手刻了一首歌。那是在 LLM 連個影子都還沒有的 2020，當然也就沒有所謂的生成式音樂。那時候的我，沒玩過團、沒有數位音樂製作的經驗、沒有可以發問的對象，甚至人正在醫院水深火熱地實習中。啥資源沒有，就是一個橫勁。</p><p>最後如當初所願地，《椰林之外》成為了那年的台大畢業歌。這個結果實際上喜憂參半，是福是禍至今猶未可知，說多了都是淚。但總之是留下了一個作品、創造了一個實績、並且收穫了許多鼓勵。</p><p>年輕人嘛，直接就暈船了，暈的一個被別人稱讚的感覺，一個不小心就誤以為自己喜歡音樂。這件事還真不好分：<strong>你是喜歡某件事本身呢，還是這件事之外的其他什麼？</strong></p><p>正增強的威力可是很強大的，尤其是對於亞洲小孩而言。如果你誇他唱歌好聽有創作才華，他可能一個轉身就死心塌地地愛上了表演藝術……</p><p>暈船一暈就是好幾年。</p><ul><li></li></ul><p>一個人會成為什麼樣的人，這件事具有高度的偶然性。並且在大部分時候，<strong>我們是先成為了某種人，然後才在事後認識了自己</strong>。更精確來說，是事後「解釋並合理化」自己的行為。</p><p>雖然有點反直覺，但這其實不難理解，畢竟你不等於你的心智，我們的敘事自我打從一開始就是後知後覺的。我們送什麼參數進去，敘事自我就拿什麼作為素材開始編故事，目的就一個：<strong>維持自我的連貫性</strong>。（活像個 LLM）</p><p>所以對我來說，「關於我」是個很難處理的頁面。給自己貼標籤是一個維持自我連貫性的很方便的方式，<strong>但那其實就是先射箭再畫靶嘛</strong>，畫完了然後呢？難道我們不是應該先畫靶，然後努力瞄準它嗎？「以終為始」真的挺難，畢竟人就不是那樣運作的，大部分時候我們都是自動導航在前進。</p><p>除此之外，薩特主張「自我認同就是在與他人主體性的爭奪中敗下陣來所形成的自欺」，而我主張薩特是對的，除了貼標籤讓自己陷入自證預言的循環中之外，自我認同還等於放棄了主體性。然而，我還主張<a href="https://shuaixin.cc/Ideal-Life/">幸福快樂就在人群之中</a>。如此一來，<strong>主體性跟幸福快樂就不能既要又要了</strong>，怎麼辦？針對這個問題，我有一個絕妙的解法…… 離題了離題了，以後再說。</p><ul><li></li></ul><p>話說回來，《椰林之外》打從一開始就只是一個憤恨不平之下的產物。很生氣啊當時，覺得為什麼我堂堂劉昕這麼不受世界待見，幹，我要證明給你們看。剛好有了畢業歌這樣的途經讓我發力，於是音樂就恰好成為了載體。老實說，當時給我隨便一個課題，我什麼都能搓出來給你看。</p><p>然後就回到了前面暈船的故事。憤怒的亞洲少年被眾人的口頭正增強制服得服服帖帖，太美好了可不是嗎？你們願意誇我，我就唱，就這麼說定咯？於是標籤就自己貼上了，自證預言的循環就開始轉動了，我「偶然地」成為了「喜歡音樂」的人。我一定是喜歡音樂啊，不然我為什麼在做音樂，而且還那麼開心？即使事實上我開心是因為被大家誇讚，但身在其中的人是分不出差異的。<strong>敘事自我可是解釋並合理化我們行為的編故事大師</strong>。</p><p>幡然醒悟（？）以後，驀然回首，我做過的那些東東能算是表演藝術嗎？就我現在來看，大部分都只能稱之為嘩眾取寵；而我真的喜歡表演藝術嗎？Nope，我只是喜歡被理。</p><p>令人玩味的是，在我漸漸理解到這一切以後，才第一次<strong>在線下被指認</strong>，收穫了來自陌生聽眾的鼓勵。那時候，對方請我「一定要繼續創作哦」。當下的我受寵若驚，仍然顫顫巍巍地（？）答應了。</p><p>要是這件事再早一些發生，那會是另一個大相徑庭的世界線吧，也許自證預言的循環就這麼一路繼續轉下去了。至於現在我想說，對不起，音樂的部分暫時是被我擱置了，但也謝謝你，我確實還是有在輸出一些有的沒的東東哦。</p><ul><li></li></ul><p>後來看到了這麼一句話：</p><blockquote><p>願你所有的努力，都是因為熱愛。而不是因為恐懼落後，或渴望得到誰的認同。</p></blockquote><p>這句話必定只會在這樣的一個時間點走進心裡吧：當我們總算發現過去的努力是因為恐懼落後或渴望誰的認同之後。</p><p>果然，<a href="https://shuaixin.cc/Trinity-Motto/">改變人生的一句話</a>只能是先射箭再畫靶，人就是這樣運作的。<strong>你已經先改變了，然後才有了改變人生的一句話</strong>。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%83%A8%E8%90%BD%E6%A0%BC%E5%90%8C%E6%A8%82%E6%9C%83/">部落格同樂會</category>
      
      <category domain="https://shuaixin.cc/tags/%E8%96%A9%E7%89%B9/">薩特</category>
      
      <category domain="https://shuaixin.cc/tags/%E6%A4%B0%E6%9E%97%E4%B9%8B%E5%A4%96/">椰林之外</category>
      
      
      <comments>https://shuaixin.cc/Why-I-Quit-Music/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>QNAP 作為 Synology 的熱備援備份機</title>
      <link>https://shuaixin.cc/Synology-Rsync-to-QNAP/</link>
      <guid>https://shuaixin.cc/Synology-Rsync-to-QNAP/</guid>
      <pubDate>Tue, 26 May 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>Synology 有提供 Hyper Backup 這樣的應用程式來提供各種備份需求，但遺憾的是靈活度依舊不太夠。</p><p>目前的需求是我要每天把 Synology 上的所有資料同步到另一個 QNAP 上，Hyper Backup 能做，但最多幫我備份成 .hbk 的壓縮檔案。所以今天 Synology 若掛了，就算我已經每天備份了喔，但第一個瞬間依然沒辦法用 QNAP 來馬上做資料讀取，因為 .hbk 檔案要另外拿 Synology 來復原或用獨家的軟體來讀取！</p><p>Synology 對 Synology 或是 QNAP 對 QNAP 都能夠做到 plain file 的排程備份，但兩家互相備份那就抱歉，你自己想辦法。十分討厭，明明提供了很多 rsync 的選項，但這個挺基本的需求咋就做不到啊？到底為啥要強迫我們用 .hbk 檔案？</p><p>兩家的作業系統都各有短板，反正找了一圈，就是做不到 Synology → QNAP 的 plain file 排程備份。笑死，若其實可以，請務必告訴我。</p><p>此文來手動解決此一需求。</p><h3 id="Synology-端設定">Synology 端設定</h3><p>在終端機設定中，打開 SSH 功能。</p><p>在檔案服務 &gt; rsync 中，啟用 rsync 服務並且用 rsync 帳號。然而這個賬號並不能拿來 SSH 進去，我真的會笑死。於是我們要從使用者與群組設定中，把這個 rsync 帳號提權成 admin，才能繼續走下去。</p><p>另外我們還要在使用者與群組 &gt; 進階設定中，打開家目錄服務，等等會用到。</p><h3 id="QNAP-端設定">QNAP 端設定</h3><p>一樣打開 SSH 功能。</p><p>SSH 進去終端裡面我們來手尻備份排程。用到的指令大概長這樣：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rsync -avh --delete -e <span class="string">&quot;ssh -i $&#123;SSH_KEY&#125;&quot;</span> $&#123;SRC_USER&#125;@$&#123;SRC_HOST&#125;:/volume1/orz/ <span class="string">&quot;$&#123;DEST_BASE&#125;/orz/&quot;</span></span><br></pre></td></tr></table></figure><p>為什麼要走 ssh -i 呢，因為我們要自動排程。那所以我們是不是要把公鑰放到 Synology 那邊呢？沒錯。所以我們是不是要 SSH 進去放呢？對。但 Synology 並不開放 rsync 帳號的 SSH 功能，所以剛剛要提權。</p><p>那麼公鑰我們是不是要放在家目錄中呢？所以剛剛要先開好。</p><p>然後 QNAP 的作業系統有沒有提供排程跑自定腳本呢？沒有。我的老天鵝。（Synology 有）</p><p>所以我們一樣自己尻 cron，每天凌晨一點跑：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">0</span> <span class="number">1</span> * * * /share/scripts/orz.sh</span><br></pre></td></tr></table></figure><p>然後我隔天發現沒有執行，看來 <code>crontab -e</code> 在 QNAP 中不生效，我也不想究其原因了，最後改排程在 <code>/etc/config/crontab</code> 裡面，可以正常排程運作。</p><h3 id="後話">後話</h3><p>大概就是這樣，其實實際解決並不困難，所有的時間都花在找「那理論上應該要幫我做好的功能」上。然後最後沒有這個功能。</p><p>所以這是一篇技術筆記嗎？不是，這是一篇抱怨文！</p><p>2026 年了！<strong>你兩位做 NAS 的，對面公牛跟綠聯虎視眈眈，再不像個人，改天就被淘汰了。</strong></p><p>Hmm… 打到這邊想想，是不是其實有這個功能但我不知道去哪裡設定而已？</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/NAS/">NAS</category>
      
      <category domain="https://shuaixin.cc/tags/QNAP/">QNAP</category>
      
      <category domain="https://shuaixin.cc/tags/Synology/">Synology</category>
      
      <category domain="https://shuaixin.cc/tags/rsync/">rsync</category>
      
      
      <comments>https://shuaixin.cc/Synology-Rsync-to-QNAP/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>讀書筆記：《機器人叛亂：在達爾文時代找到意義》</title>
      <link>https://shuaixin.cc/The-Robots-Rebellion/</link>
      <guid>https://shuaixin.cc/The-Robots-Rebellion/</guid>
      <pubDate>Mon, 18 May 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p><img src="/The-Robots-Rebellion/rebel.jpeg" alt="rebel"></p><h3 id="複製子二部曲">複製子二部曲</h3><p>如果要我推書，我個人首推的會是《<a href="https://shuaixin.cc/The-Selfish-Gene/">自私的基因</a>》，下一本就是這本《機器人叛亂》。我私自把他們合稱為「複製子二部曲」，前者可以回答「我是誰」跟「從哪裡來」，後者可以進一步回答「到哪裡去」。</p><h3 id="交互子：雞僅僅是一個雞蛋製造另一個雞蛋的方式">交互子：雞僅僅是一個雞蛋製造另一個雞蛋的方式</h3><p>人類這種東西是複製子（基因）為了複製自身而採取的某種策略，也就是說，我們只是基因複製自己的方法之一，我們是交互子。畢竟不同的生態棲位有不同的競爭情形，基因要採取不同的策略，用不同的交互子來進行博弈，而人類就是某種交互子的形態。作者 Keith 坦言，比起「載體」，其實「交互子」才是更精準的用詞，但為了一定的煽動效果，他刻意採用「載體」這個詞來形容我們人類——我們只是基因的機器人，為了基因的利益，機器人隨時可以被犧牲。</p><p>當然，請永遠記得，所謂的「自私」、「博弈」、「利益」都只是一種擬人化的敘述，複製子是沒有任何意圖的。只是就結果而言，所有的雞都「盲目地」、「汲汲營營地」想要製造另一個雞蛋。</p><h3 id="機器人叛亂何以可能？">機器人叛亂何以可能？</h3><p>我們的大腦是模塊化的，其中多數都是具有特定功能、向著「強約束目標」的自發式系統。但我們的生態棲位偶然地青睞了處理複雜問題的能力後，恰好有著「弱約束目標」這樣通用設計的分析式系統的人類這樣的機器人，有了鑽空子的機會。</p><p>強約束目標例如：去害怕蛇、去喜歡花；弱約束目標例如：去活下去。</p><p>我們可以對基因產生的一階慾望，進行二階評估。如果這個慾望只關心基因的存續，卻不符合載體的利益，那我們就要將之鞭數十。</p><h3 id="符號效用">符號效用</h3><p>Keith 認為「工具理性」跟「意識」不是人類之所以特別的要素，其實動物們比人類都更理性，而動物們以光譜的形式或多或少地也都擁有意識。工具理性是預期效用最大化的能力，動物們就愛玩這套，但人類還喜歡搞「符號效用」。</p><p>舉個例子，在最後通牒賽局中，我們通常會「不理性地」懲罰那些過度貪心的對家，因為我們除了預期效用最大化，我們還在意「我們是怎麼樣的人」。即使這會讓我們容易遇到一階欲望跟二階評估的衝突，讓我們變成痛苦的人，而不是快樂的豬。</p><h3 id="迷因：另一個複製子">迷因：另一個複製子</h3><p>作為「可以述說共同故事」的人類，我們的大腦可以安裝迷因，而理性其實也是一種迷因。我們身上運行著迷因叢，而我們通常要時常檢視目前安裝的迷因，也要在面對新的迷因時，具有判斷是否安裝的「認識理性」。</p><p>由於不存在一個用於判斷的絕對制高點，我們評估迷因的時候，必須「紐拉特式」地進行。站在既有的迷因叢上，對新的迷因進行評估。而假以時日，再站在新的迷因叢上，對過往站過的位置，進行滾動式地評估。</p><p>並且，跟基因一樣，迷因也具有高度的偶然性。簡單試想，如果你出生在伊斯蘭國家，身上的迷因叢會一樣嗎？如果你出生在十五世紀，身上的迷因叢會一樣嗎？</p><p>需要留意的是，迷因也有自身的「利益」，如果這個迷因只關心自身的存續，卻不符合載體的利益，那我們就要將之鞭數十。</p><h3 id="賭徒謬誤才不是謬誤">賭徒謬誤才不是謬誤</h3><p>實驗設計中，紅綠燈號分別為三成跟七成機會出現，給受試者一段時間的學習與觀察後並請他判斷後續的燈號，結果是，我們採取的預判策略不是 all-in 綠燈（命中率 70%），而是精准地貼近三七分配（命中率只有 58%）。</p><p>其實這是一件很厲害的自發式的能力（畢竟我們精准地做出了三七分配），然而 all-in 其實才是收益最大化的策略，於是有了所謂「賭徒謬誤」。</p><p>這樣就怪了，基因是博弈大師，是演化了數億年後笑到最後的贏家，為什麼它會有「賭徒謬誤」呢？因為<strong>基因玩的是重複賽局，但我們載體玩的是單次賽局</strong>！細思極恐細思極恐，基因確實不在意我們的死活，我們成了基因的避險工具，基因把我當棄子在搞對沖啊！</p><p>朋友們，「直覺」就是來自基因對我們的直接指導（擁有強約束目標的自發式系統），你還要相信所謂的「相信你的直覺」嗎？</p><h3 id="Other-Good-Points">Other Good Points</h3><ul><li>我們大多數人都是文化的不速之客，對於人類的集體知識或理性毫無建樹。相反，每天我們都從他人發明的知識和理性策略中獲益匪淺。</li><li>人們可能僅僅是學會了「模仿他人去遵守規則」，以便獲得某些社會收益。他們自己其實沒有變得理性。</li><li><strong>理性障礙</strong>：這個社會貌似過於強調算法水平的能力，而不是意圖水平的能力。這個社會對「智力」的崇尚，把人們培養成具有理性障礙的公民。</li></ul>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98/">讀書筆記</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E7%94%9F%E7%90%86/">生理</category>
      
      <category domain="https://shuaixin.cc/tags/%E8%85%A6%E7%A7%91%E5%AD%B8/">腦科學</category>
      
      <category domain="https://shuaixin.cc/tags/5%E9%A1%86%E6%98%9F%E6%9B%B8%E7%B1%8D/">5顆星書籍</category>
      
      <category domain="https://shuaixin.cc/tags/%E6%99%BA%E6%85%A7/">智慧</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%93%B2%E5%AD%B8/">哲學</category>
      
      
      <comments>https://shuaixin.cc/The-Robots-Rebellion/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>槓精玩家的三合一人生格言</title>
      <link>https://shuaixin.cc/Trinity-Motto/</link>
      <guid>https://shuaixin.cc/Trinity-Motto/</guid>
      <pubDate>Thu, 07 May 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<blockquote><p>這是我的「<a href="https://blogblog.club/party/">BlogBlog 同樂會 - 2026 年 5 月</a>」的投稿文章。本月主題是「<a href="https://eddielv.com/articles/a-sentence-changing-you/">改變人生觀的一句話</a>」，由 <a href="https://eddielv.com/">Eddie Lv</a> 主持。如果你有自己的部落格，歡迎一起來參加！</p></blockquote><p>我得先承認，我拿不出改變我人生觀的一句話。</p><p>倒不如說，在這期同樂會之前的很長一段時間之中，我就已經有在刻意地尋找一句屬於我的座右銘。因為我本來的 slogan 是——「努力的男人不一定最帥，但一定最累」，整個意義不明，除了讓人懷疑這傢伙有一定程度的外貌 issue 以外，沒傳遞其他的有效訊息，所以我想把它換掉。</p><p>然而撰文的當下，座右銘還沒想到，所以 slogan 還是同一句。</p><ul><li></li></ul><p>當然，slogan 跟座右銘並不指涉同一個概念。slogan 是外顯的，它本身具有向外傳播一個概念的任務。而座右銘則不一定，有時候它可以單純放在心裡，能拿來作為自己的行為指引就足矣。（或是走一個反骨路線放在座位左邊）</p><p>另一個思路是，我們<a href="https://club.1-know.org/">讀書會</a>有成員分享：「所有的痛苦都來自於身心不合一」。我在想，如果我的 slogan 跟座右銘是<strong>同一句</strong>，那是不是能幫助我自己更加地「身心合一」呢？</p><p>你猜怎麼著？我甚至在想，如果我<strong>連墓誌銘都是同一句</strong>，閣下覺得如何？這樣我不止「身心合一」，我還直接「以終為始」。</p><p>感覺不錯，接下來我要來試圖尋找集合了 slogan、座右銘、墓誌銘的三位一體的人生格言。</p><ul><li></li></ul><p>我在三月的投稿<a href="https://shuaixin.cc/Ideal-Life/">《理想的生活：差值外包之術》</a>中提到，人對世界的感知是基於差值的，所以這個人生格言它理想上應該要是「差值包容」的。否則我們的行為選擇會有偏食傾向，直到營養不良。</p><p>舉個例子，「但行好路，莫問前程」就我看來就不夠包容。雖然裡面的「好路」保留了一定程度的解釋空間，讓使用者自己定義所謂「好」，但我能不能「不走」呢？雖然我可能過於嚴格，有點槓精意味，但這句話隱含著你要一直「前進」的前提假設，不是嗎？偶爾用來鼓勵鼓勵自己還不錯，但若拿來用一輩子，怕是包容度不足。</p><p>Hmm… 照我這樣的篩選邏輯，大概是很難找到合適的句子了。感覺就算有，它也只會是一種模棱兩可的存在？畢竟只要有指導意味，就會被我說是沒有包容度；但沒有指導意味，它還有用嗎？</p><ul><li></li></ul><p>最近我們<a href="https://club.1-know.org/">讀書會</a><s>瀰漫著一股虛無主義的氛圍</s>對所謂人生的意義稍有討論，而這條路上，「看山不是山」確實是一個避不開的環節。看清了生活的真相之後（還真不是山），後面要怎麼繼續生活，就成了一個大哉問。而我們把有了這層認知、運用了後設思維看待諸相的人，稱呼為「玩家」。</p><p>成為玩家後，會遇到第一個問題就是——要玩什麼？身為一個新手玩家，這大概是我近些日子以來，縈繞在心中的一個課題吧。這挺有趣的，就像你初入一個開放世界的遊戲，給你的第一個任務不是肯定句，而是疑問句。</p><p>雖然玩家的比例高不高我不知道，但總數必定是可觀的。對於虛無主義這種玩家中常見的病症，早有流行的藥方，即存在主義。於是卡繆<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>的名言就成為了我心中的候選句子之一：</p><blockquote><p>我們必須想像薛西弗斯是幸福的。</p></blockquote><p>我們在想，薛西弗斯看山又是山了，對嗎？</p><ul><li></li></ul><p>老實說，我覺得「開心就好」很有潛力，它當 slogan 很有精神、當座右銘很通透、當墓誌銘很灑脫。然而，玩家甚至會去質疑「開心就好」這種皆大歡喜的命題。</p><p>受到<a href="https://e89295.com/blog/2026-04-04.html">這篇文章</a>的啟發，加上我最近在讀<a href="https://shuaixin.cc/The-Robots-Rebellion/">《機器人叛亂：在達爾文時代找到意義》</a><sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>，我們會問：開心就好？可是活著是為了快樂嗎？</p><p>如果我們不會說「活著是為了吃」（我們會說吃是為了活著），那為什麼我們會說「活著是為了快樂」呢？想吃東西跟想快樂都是原始的生物驅力，來自基因對我們進行的生存引導——<strong>會讓我們感到快樂的事打從一開始就是因為基因鼓勵我們做那些事</strong>。如果我們無腦地去追求快樂，那就只是基因的奴隸了，不是嗎？</p><p>我們的因果歸納能力能很輕易地把吃東西只是為了活著這件事理解起來，畢竟幾天不吃就會死。但缺乏正向感受所產生的生存劣勢效果則不是馬上發生，而是一個大方向的活兒，所以我們沒有發現這也是一個很簡單的、很機械化的關係。</p><p>「找快樂的」跟「找吃的」在本質上是一樣的，「追求快樂」只是一種時間跨度較長的「找東西吃」罷了。</p><p>噢不。</p><p>總之，雖然我覺得「開心就好」其實挺快樂的，可惜我已經是一個槓精玩家了。</p><ul><li></li></ul><p>最後補充一下，其實根據<a href="https://shuaixin.cc/Ideal-Life/">《理想的生活：差值外包之術》</a>的邏輯，我們需要的根本不是「差值包容」的<strong>一句話</strong>，而是<strong>一堆各式各樣的話</strong>。</p><p>但由於我很任性地想找到那句終極的、一輩子的、三合一的人生格言，所以自己曲解了自己的「差值哲學」。</p><p>但若放下任性的心態，平心而論，玩家真正需要的應該是多多跟其他玩家交流（差值外包），而不是一句人生格言。</p><ul><li></li></ul><p>哦？我想到一句不錯的：「多多跟其他玩家交流！」</p><p>才怪，這個當墓誌銘超怪der。</p><hr><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">1.</span><span style="display: inline-block; vertical-align: top;">雖然卡繆本人不認為自己是存在主義者</span><a href="#fnref:1" rev="footnote"> ↩</a></li><li id="fn:2"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">2.</span><span style="display: inline-block; vertical-align: top;">契機來自右衣的<a href="https://yoe1.bearblog.dev/the-robot-s-rebellion/">這篇推坑</a></span><a href="#fnref:2" rev="footnote"> ↩</a></li></ol></div></div>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%83%A8%E8%90%BD%E6%A0%BC%E5%90%8C%E6%A8%82%E6%9C%83/">部落格同樂會</category>
      
      <category domain="https://shuaixin.cc/tags/%E8%AE%80%E6%9B%B8%E6%9C%83/">讀書會</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%B7%AE%E5%80%BC%E5%A4%96%E5%8C%85/">差值外包</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%8D%A1%E7%B9%86/">卡繆</category>
      
      <category domain="https://shuaixin.cc/tags/%E7%8E%A9%E5%AE%B6/">玩家</category>
      
      
      <comments>https://shuaixin.cc/Trinity-Motto/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>在 Windows 系統上讀取 Ext2, Ext3, Ext4</title>
      <link>https://shuaixin.cc/Windows-Read-Ext2/</link>
      <guid>https://shuaixin.cc/Windows-Read-Ext2/</guid>
      <pubDate>Sun, 19 Apr 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>Windows 並不支援 Ext2/3/4 的檔案系統格式，此處插入格式為 Ext2 的硬碟，只能看到 <code>需要格式化才能使用</code>：</p><p><img src="/Windows-Read-Ext2/image-20260713174839019.png" alt="image-20260713174839019"></p><h2 id="Ext2explore">Ext2explore</h2><p>若我們只有「讀取」的需求，可使用第三方工具 Ext2explore 來解決。</p><p>Ext2plore 僅有 4MB 不到，十分輕量簡便，雖然最新的版本是 2016 釋出的 2.2.71，但實測在 Win10 跟 Win11 下皆可用。</p><p>下載後解壓縮，並以系統管理員身份執行：</p><p><img src="/Windows-Read-Ext2/image-20260713174909149.png" alt="image-20260713174909149"></p><p>如此一來即可開啟原生無法讀取的 ext2 碟了：</p><p><img src="/Windows-Read-Ext2/image-20260713174917077.png" alt="image-20260713174917077"></p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/Windows/">Windows</category>
      
      <category domain="https://shuaixin.cc/tags/Ext2/">Ext2</category>
      
      
      <comments>https://shuaixin.cc/Windows-Read-Ext2/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>領 AdSense 收益咯！結果被層層剝削orz</title>
      <link>https://shuaixin.cc/AdSense-Withdrawal-Fees/</link>
      <guid>https://shuaixin.cc/AdSense-Withdrawal-Fees/</guid>
      <pubDate>Tue, 07 Apr 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>幫 Google 打工了那麼久，該來拿我的錢了吧。</p><p>這裡的打工指的是當 Youtube 影片創作者（<a href="https://www.youtube.com/@_shuai_game">台大輟學打東東</a>），跟網頁投放 AdSense 廣告（<a href="https://zeldabotw2.github.io/">圖文網站</a>）這兩件事。模式都是我提供內容吸引觀眾，然後 Google 從這之中做廣告曝光，然後把收益分我一部分這樣。</p><p>本來想領完就開溜（溜去哪？），但沒想到提領收益會遇到<strong>不止一層</strong>且<strong>不算便宜</strong>的手續費，不可不慎！故撰文記之。</p><h3 id="都歸-AdSense-管但分開算">都歸 AdSense 管但分開算</h3><p>首先，不同筆匯款，手續費各別計。</p><p><img src="/AdSense-Withdrawal-Fees/separate.png" alt="separate"></p><p>雖然同賬號之下，Youtube 收益跟網頁收益都是在 AdSense 操作跟提領的，但這兩件事並不能合併計算並出金。</p><p>所以如果天真地認為可以一起算賬，那可以別天真了。出發點很好，但不能出發。</p><h3 id="第一層是稅金">第一層是稅金</h3><p>第一層是出金之前就預扣的稅金，但只有 Youtube 收益的部分被扣，而網頁廣告收益沒有扣。</p><p><img src="/AdSense-Withdrawal-Fees/tax.png" alt="tax"></p><p>據說是根據美國觀眾貢獻的收入的部分去計算，而我的觀眾來自華語圈，所以金額還好，乍看之下可以欣然接受。</p><h3 id="第二層手續費">第二層手續費</h3><p>第二層看起來是中介銀行的跨海電匯手續費：</p><p><img src="/AdSense-Withdrawal-Fees/qq.png" alt="qq"></p><p><img src="/AdSense-Withdrawal-Fees/qqq.png" alt="qqq"></p><p>Youtube 收益跟網頁廣告收益無關金額，都是直接扣掉 12 美元。申請那天的匯率大概是 32，也就是每筆一出海就要吃 384 手續費。</p><p>考量到我兩筆數目都很小，基本上一出海就直接打了九折，holy shit，神聖的狗屎呀。</p><p>你 Google 如果事先講好就算了，但這筆手續費是我在台灣的銀行收到電匯通知後才知道被扣掉，那個奇摩子是不一樣的，你懂咪？雖然這筆也不是你 Google 拿去的，但作為一個相對固定已知的程序，你也簡單提醒一下嘛。</p><h3 id="第三層手續費">第三層手續費</h3><p>第三層手續費是台灣這邊銀行的解款手續費，每筆 200 NTD，所以我兩筆就是 400 NTD。</p><p><img src="/AdSense-Withdrawal-Fees/yongfeng.png" alt="yongfeng"></p><p>至此，簡單盤一下，我原本的 Youtube 收益 + 網頁廣告收益為 136.55 + 114.4 = 250.95 USD，用最近的匯率 32 來算大概有 8000 NTD。</p><p>但扣掉以上這些以後，我最後拿到的只有 214.37 USD，換算是 6860 NTD ——等於打了八五折！</p><p>holy shit，神聖的狗屎呀。</p><h3 id="第四層手續費">第四層手續費</h3><p>第四層就是外幣帳戶換匯轉入台幣帳戶的手續費，以我永豐為例就是 0.9%，並且低消 100 NTD。</p><p>這個是我本來就知道存在的成本，所以我就還好。</p><h3 id="總結">總結</h3><p>結論就是，本來覺得 Google 在你收益不滿 100 USD 之前不讓你提領是個很流氓的規則。但實際上，如果你不滿 100 USD 就想實際把錢提出來花，你會發現層層關卡抽水抽一抽，幾乎所剩無幾。</p><p>總之，反正這些收益本來就只是樸實無華生活中的錦上添花，以後還是累積多一點再領出來吧。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E6%9E%B6%E7%AB%99%E7%AD%86%E8%A8%98/">架站筆記</category>
      
      
      <category domain="https://shuaixin.cc/tags/AdSense/">AdSense</category>
      
      <category domain="https://shuaixin.cc/tags/Google/">Google</category>
      
      
      <comments>https://shuaixin.cc/AdSense-Withdrawal-Fees/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>關於我的關於我：不小心拿工作崗位來給自己貼標籤</title>
      <link>https://shuaixin.cc/About-About-Me/</link>
      <guid>https://shuaixin.cc/About-About-Me/</guid>
      <pubDate>Wed, 01 Apr 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>一直覺得「關於我」是一個很難做的頁面。</p><p>講得太仔細吧，誰想看啊，嘮嘮叨叨的一天天；講得太粗略吧，又不太可能，每個人都是很複雜的。</p><p>這時候就會羨慕那些真正的、一目了然的帥哥美女，他們連話都不用說，頭像擺著就會有人主動想要去深入瞭解與認識。</p><p>（但我還是要聲明一下，我也是帥哥，只是沒那麼明顯而已，望周知。）</p><p>但每次真正要介紹自己的時候又會想到薩特的教誨。如果用薩特的觀點來看，其實自我介紹就是一種，在他人的凝視之下主動將自己固定為某種可被理解的存在，的行為。而這正是一種，在與他人的主體性的爭奪之中敗下陣來所形成的，自欺。<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p><p>但我就不是一目了然的帥哥啊，而且特別討厭不被當一回事，所以我還是得做「關於我」。沒錯，我完全無視薩特的教誨，哈。</p><p>審視了一下我目前的關於我，發現了一個值得注意的問題：</p><p><img src="/About-About-Me/about.png" alt="about"></p><p>我交代完自己的名字以後，馬上就用一個工作崗位來介紹自己！</p><p>如果是直接用口頭介紹，基本上就像這樣：「Hi 我劉昕，我是一名軟體工程師。」</p><p>感覺確實沒什麼大不了的，但我突然不太喜歡這樣耶。我並不討厭這個崗位，但這世界上那麼多軟體工程師，對嗎？我誇飾一下好了，這就只是沒那麼嚴重的「Hi 我劉昕，我是一個男的」而已呀。</p><p>看來「你好我是XXX，我是________。」其實是一個很難掌握的句型呢。</p><p>總之我想好好地來修改一下介紹方式，但還沒想好該怎麼做就是了。</p><hr><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">1.</span><span style="display: inline-block; vertical-align: top;">為了逃避絕對自由所帶來的焦慮，而自我欺騙、將自己固化為某種特定角色或本質。</span><a href="#fnref:1" rev="footnote"> ↩</a></li></ol></div></div>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E8%96%A9%E7%89%B9/">薩特</category>
      
      <category domain="https://shuaixin.cc/tags/%E6%B2%99%E7%89%B9/">沙特</category>
      
      <category domain="https://shuaixin.cc/tags/%E4%B8%BB%E9%AB%94%E6%80%A7/">主體性</category>
      
      <category domain="https://shuaixin.cc/tags/%E8%87%AA%E6%88%91%E8%AA%8D%E5%90%8C/">自我認同</category>
      
      
      <comments>https://shuaixin.cc/About-About-Me/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>為什麼我九點睡？</title>
      <link>https://shuaixin.cc/Sleep-at-9/</link>
      <guid>https://shuaixin.cc/Sleep-at-9/</guid>
      <pubDate>Sun, 22 Mar 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>「你是蔡依林喔？」</p><p>養成九點就寢的習慣後，收穫了很多次這樣的反應。但拜託，人家先的欸，是 Jolin 學我的啦。</p><blockquote><p>這是我的「<a href="https://blogblog.club/party/?ref=wen-lab.tw">BlogBlog 同樂會 - 2026 年 4 月</a>」的投稿文章。本月主題是「<a href="https://www.wen-lab.tw/blogblog-party-productivity">生產力</a>」！</p></blockquote><h2 id="關於生產力">關於生產力</h2><p>其實我在 <a href="https://wiwi.blog/blog/blogblog-party-jan-2026/">BlogBlog 同樂會：推坑</a>一期中投稿的<a href="https://shuaixin.cc/Awesome-Keymap/">運籌帷幄的鍵盤操作術：減少手部移動的心流打字方案</a>正好就是一個跟生產力有關的命題。如果你平常是用鍵盤作為生產力工具的話，那也許能幫到你。</p><p>不過我鼓搗那些工作流，圖的倒也不是所謂效率或是生產力就是了，單純是為了一個流暢方便的感覺。</p><p>在海德格的哲學中，我們不是「得到」時間，也不能「擁有」時間，而是我們「就是」時間。所以當我們把時間當做一個我們可以拿來利用的「工具」時，我們就陷入了一個，時間（a.k.a. 自己）既是「手段」又是「目的」的大矛盾之中。</p><p>我是在<a href="https://shuaixin.cc/4000-weeks/">《人生4千個禮拜》</a>中第一次認識海德格。這本書用一種很「後設」的角度來檢視近年來人類的共同煩惱：生產力焦慮、資訊焦慮、FOMO。書中的立場是，其實事情本來就永遠做不完，所以「時間管理」打從一開始就是偽命題唷。</p><p>我個人很喜歡以上的觀點，所以也就不會特別去折騰所謂生產力或是效率最大化。Hmm…… 除非我不小心（？）</p><p>是的，九點入睡、五點起床讓我「順便」增加了生產力。</p><h2 id="報復性晚睡">報復性晚睡</h2><p>誰不想養成運動跟閱讀的習慣？重點是臣妾做不到呀！下班放學後累得半死，哪有力氣運動？吃個飯、洗個澡八九點了，哪有時間閱讀？更不用說我們還想做本業之外的 side project、還想學一門外語、還想考一張證照……</p><p>意志力是有限的，而且往往白天已經被一堆狗屁倒灶的事情給消磨殆盡；專注、計劃、決策、衝動抑制這些高級的運算能力非常耗能，可到了晚上就真的榨不出能量了。此時阻力非凡，一切都窒礙難行。</p><p>更糟的是，自覺白天的「自由時光」被公司學校剝奪的我們，好不容易迎來了 Me Time，早早就睡了豈不是虧爛？於是即使疲憊，我們也會試圖透過犧牲睡眠來「補償」失去的那些時間。然而，早就沒了能量的我們此時還能做什麼呢？恐怕也只能幹一些小廢事，無腦地滑著短影片…… 最後勉強換來的也只是毫無生產力的垃圾時間罷了。（更糟的是，我們事後還會責怪自己）</p><p>兄弟我懂！我看你的骨骼驚奇，是萬中無一的練武奇才，維護世界和平就靠你了。我這裡有本「乾坤大挪移」，我看與你有緣，這就把這招偷偷秘傳給你吧！</p><p><img src="/Sleep-at-9/qiankundanuoyi.png" alt="qiankundanuoyi"></p><h2 id="乾坤大挪移">乾坤大挪移</h2><p>所謂乾坤大挪移，就是一門把最好的資源挪給自己的學問。什麼是最好的資源？剛睡飽的自己！</p><p>學成之前，我們一起床就去上班上課，晚上回家才是自己的時光。此時，就像上述那樣，精氣神早已用盡，我們就像在「撿用剩的一天」。</p><p>學成之後就不一樣了。晚上回家的我們，自知此時絕非最佳狀態，於是怎麼著？我們直接洗洗睡，早點睡就可以早點起。到了早上，剛起床的我們剛充飽電，此時我們的精神最好、判斷力最佳、學習力最強、意志力最充沛、生產力最旺盛，可謂最好的你。而<strong>最好的你不留給自己，難不成要留給老闆？</strong></p><p>早起的我們，等於是把晚上的垃圾時間直接睡掉，強行把 Me Time 「挪」到一天的最一開始，搶在上班之前，先投資對你來說更重要的事。</p><p>待重要的事做一個段落以後，上班時間到了。此時的我們，已經不是最佳狀態，甚至有點累了——正是上班的好時機。</p><p>到了晚上，嘿，我們早上就已經把所有該做的事都做了，運動過了、書也看了、side project 也有進展了，十分完滿，沒有留戀，於是不存在報復性熬夜的問題。但一天還有剩，要做什麼呢？啥也不做，直接洗洗睡，<strong>乾坤大挪移</strong>！</p><p>於是我的生產力集中到了狀態最佳的晨間，反正我是覺得比晚上高效多了，也推薦給各位。畢竟，<strong>一日之計在於晨</strong>嘛，老祖宗都說讚。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%83%A8%E8%90%BD%E6%A0%BC%E5%90%8C%E6%A8%82%E6%9C%83/">部落格同樂會</category>
      
      <category domain="https://shuaixin.cc/tags/%E7%94%9F%E7%94%A2%E5%8A%9B/">生產力</category>
      
      
      <comments>https://shuaixin.cc/Sleep-at-9/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>理想的生活：差值外包之術</title>
      <link>https://shuaixin.cc/Ideal-Life/</link>
      <guid>https://shuaixin.cc/Ideal-Life/</guid>
      <pubDate>Mon, 16 Mar 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<blockquote><p>這是我的「<a href="https://blogblog.club/party">BlogBlog 同樂會 - 2026 年 3 月</a>」的投稿文章。本月主題是「<a href="https://alexhsu.com/perfect-days">理想的日常</a>」，由 <a href="https://alexhsu.com/">Alex Hsu</a> 主持。如果你有自己的部落格，歡迎一起來參加！</p></blockquote><h2 id="理想的日常？">理想的日常？</h2><p>剛完成一個大型工作專案後所需要的日常，跟剛從多日旅行收假後所需要的日常，一定是不一樣的，對吧？所以就我看來，日常就該有多種面貌。</p><p>這個問題就像養生問題。有宣稱喝水治百病的、有宣稱維他命C是萬靈丹的，什麼氣功、穴道、素食、接地、防彈咖啡，書店總有一區放著這類型的書籍，百家爭鳴，什麼意想不到的妙招都有，且各有各的擁護鐵粉，實際感到有效的案例所在多有。</p><p>然而很多時候，其實每個養生偏方都有機會是「有效」的。因為身體健康不外乎就是維持在一個體內恆定（Homeostasis）的狀態，如何維持這樣的穩態呢？缺啥補啥往往就是最基本的第一線解方。而當你歪打正著、瞎貓碰到死耗子，剛好補到你缺的玩意兒，你就是該偏方的見證者了，甚至可能進一步成為信徒。<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p><p>我想說的是，「日常」就跟養生法門一樣，它就該是百百種的。而為了讓「生活」是理想的，「日常」就必須承擔起那關鍵的任務——缺啥補啥！所以我好喜歡這個月的主題，根本是「偏方」大補帖，我每一個都要拿來試試。</p><p>但說到這邊，為了進一步闡述是否真有所謂「理想的日常」，容我暫時抽換一下主題，我想談談「理想的生活」。我認為，理想的生活可能無法靠自己達成。</p><h2 id="理想的生活">理想的生活</h2><p>我們人感知世界的方式是基於差值的。當一個外界輸入超過一定時間都沒有改變——差值為零——時，我們就會感知不到這個資訊。</p><p>所以我們會久入鮑魚之肆不聞其臭，所以我們會享樂適應（Hedonic Adaptation），所以我們撫摸東西必須來回摩挲。甚至我們連凝視一個小點的時候，其實眼球依舊是在高頻地運動（Microsaccades 微跳視），否則眼前的畫面會從你的視線中慢慢消失不見！（這個現象稱為 Troxler fading）</p><p>為什麼我們的身體要設計成這樣呢？試想，若我們除了差值，其他環境中不變的參數我們也一五一十地、實時地傳遞給大腦去運算，那豈不是花太多能量去處理冗餘訊息了？於是聰明的演化做了這樣的設計，在輸入參數產生變化之時，才產生刺激，讓我們感知到它。於是我們感知世界的方式是基於差值的。（順帶講講，影片壓縮原理也有一大部分是基於差值的，可以省很多容量）</p><p>不過值得一提的是，有些關於「危險」的輸入卻巧妙地用間接的方法來達成長期刺激，例如發炎、例如傳遞慢性痛覺與溫度訊號的神經纖維 C fiber，畢竟負面的資訊往往攸關生死（疾病、太冷或太熱、受傷），如果傷口疼痛因為沒有差值，我們就忽略它，那就不妙了。雖然沒有什麼是永恆的，但遺憾地，長期的痛苦（負面感知）真的比長期的快樂（正向感知）更容易存在。</p><p>話說回來，我本來相信著恬淡平靜可以導向幸福與安康，我也幾度實踐那樣的生活。一開始都挺好的，但往往好不過多久，甚至反效果總會猝不及防地賞我一拳。最近一次的例子就是被<a href="https://shuaixin.cc/Restless-in-Comfort/">上進病</a>纏身。</p><p>為什麼會這樣呢？因為我們感知世界的方式是基於差值的。為了持續浸淫在當下自己喜歡的狀態之中，我們是需要逐漸加重劑量的。假設你正在感受平淡生活所帶來的正向回饋，對你的腦袋來說，變因是平淡生活，結果是正向感受，哪裡有停下來的理由？於是我們會根據這樣的慣性，以持續加重劑量的方式繼續維護某種生活方式，直到碰上 limit，剎車不及。</p><p><img src="/Ideal-Life/life-tide.png" alt="life-tide"></p><p>（因為我自己最主要的課題是闖與靜，所以以此為例。但其實還有各式各樣的拮抗元素呈現如圖這樣的振蕩周期，各位可以自行帶入自己的命題）</p><p>人類的心智（敘事自我）是一種後知後覺的神經模塊，當一件事上升到你的意識層面被你注意到的時候，往往已經太遲。當你活得多采多姿，有一天突然感覺到疲憊，發現自己想靜一靜時，表示你已經累到了；當你活得恬淡平靜，有一天突然感覺自己很廢，發現自己想做點什麼的時候，那也代表你已經廢到了。每一次感到苗頭不對、每一次調整生活型態的過程，都是一大成本，而且並不舒服。這些痛苦的過程，顯然很不「理想」。</p><p>總之，我們的心智是後知後覺的、自由意志是有限的，所以我們的行為跟選擇有其慣性跟局限性。結果而言，我們很難自主營造出一個理想的生活——穠纖合度的、張弛有度的、充滿了各式各樣方向隨機的差值的生活。</p><h2 id="差值外包">差值外包</h2><p>根據以上，如果沒有外力介入，我們的日常安排會有偏食傾向，直到營養不良。這點避無可避。</p><p>所以怎麼辦？</p><p>我的主張是，自己辦不到，那就尋求第三方協助！他者就是你的日常隨機產生器！這世界上哪裡偏方最多？街坊跟人群之中呀！所以我們要結交朋友，要投入團體，要進行人與人之間的互動，體驗各式各樣的「偏方」…… 長期而言，由於來源豐富，日常元素是隨機的，於是生活狀態就會在統計上保持在安康的均值之中。差值問題解決了，個人慣性帶來的煞車不及問題也解決了。（順便，催產素來源問題也解決了。）</p><p>嚇爛。我其實沒有很喜歡這個論點，畢竟我自認不 E，而且不是容易交到朋友的體質（我也不知道為啥，你看我留言板總是空的），如果我的幸福快樂必須依賴他人才得以完成，那很麻煩欸。所以我好幾度倔強地嘗試另闢蹊徑，尋找可以自力更生的長期的幸福快樂的方案——但反正還沒成功過。而另一方面，回顧那些身在團體之中的生活（即使有些可能是非自願的），確實就不太有上述那些一堆有的沒的、安康不安康的問題，身心其實是相對平衡的！</p><p>近些日子，我跟幾個小夥伴組建的<a href="https://club.1-know.org/">一個讀書會</a>開始認真找新朋友加入。主動地去經營一個團體活動是不容易的（我不是 E 人！），但在克服那些因社交尷尬所帶來的略微不適感之後，收效是驚人的。你不去探索其他人類，你都不會知道原來還能有那麼多種不同的觀點、不同的選書、不同的活法——不同的「偏方」！並且，線下的聚會是很有力量的。要知道，宅在自己的世界裡搞自閉有多爽不必多說，我超懂，然而它就是會遇到剎車不及的問題。而此時，一個週期性舉辦的線下活動在某種程度上就成了一個必要的他律，定期地去幫助你調節劑量。</p><p>至此，我的意見是，<strong>沒有理想的日常，只有當下需要的日常</strong>。但由於心智是後知後覺的，我們並不知道當下需要什麼樣的日常，並往往在選擇了一種方向後不知適可而止，最後剎車不及帶來痛苦。<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>於是，為了增加接觸到對的日常的機率，我們要刻意地在鄰里與街坊間溜達，<strong>讓他者成為我們的日常隨機產生器</strong>，搞一個差值外包。而日常，最終組成了生活。</p><p>就目前而言，我不得不漸漸地相信：<strong>理想的生活——或者說，幸福快樂——可能真的就在人群之中</strong>。</p><h2 id="後話">後話</h2><p>他人如何既是地獄，又是幸福快樂的必要條件？關於這個看似矛盾的問題，我已經想到了一個絕妙的解釋，但由於篇幅有限，此處暫時就不展開了。</p><p>雖然此篇在結論上，很像一個不知 i 人疾苦的社交牛逼症患者在鼓勵大家交朋友。但朋友們，相信我，我是含淚做出這樣的論述的。為了實踐我自己的理論，我可是很努力在突破慣性吶！</p><p>因此，文中提到的讀書會，是真的想歡迎大家加入唷。這裡有一篇讀了會讓人很想參加的回顧文章（<a href="https://club.1-know.org/2025-review-by-fang/">2025 讀書會回顧 by Fang</a>），我視如家珍，跟大家分享。</p><hr><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">1.</span><span style="display: inline-block; vertical-align: top;">當然，此處過度簡化了身體健康這個命題，有事請務必尋求專業！</span><a href="#fnref:1" rev="footnote"> ↩</a></li><li id="fn:2"><span style="display: inline-block; vertical-align: top; padding-right: 10px;">2.</span><span style="display: inline-block; vertical-align: top;">是的，我主張「擁有全然的選擇權」這件事是危險的，因為其實心智超笨。而且人本來就只有有限的自由意志，所以你只是「以為自己有全然的選擇權」。之所以「擁有選擇權」是很多人對「理想的日常」的嚮往，其實只是因為我們平常都「太過於沒有選擇權」了。</span><a href="#fnref:2" rev="footnote"> ↩</a></li></ol></div></div>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%83%A8%E8%90%BD%E6%A0%BC%E5%90%8C%E6%A8%82%E6%9C%83/">部落格同樂會</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%A4%9A%E5%B7%B4%E8%83%BA/">多巴胺</category>
      
      <category domain="https://shuaixin.cc/tags/%E4%B8%8A%E9%80%B2%E5%BF%83/">上進心</category>
      
      <category domain="https://shuaixin.cc/tags/%E8%87%AA%E7%94%B1%E6%84%8F%E5%BF%97/">自由意志</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%BF%83%E6%99%BA/">心智</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%B7%AE%E5%80%BC%E5%A4%96%E5%8C%85/">差值外包</category>
      
      <category domain="https://shuaixin.cc/tags/Philosophy-of-Delta/">Philosophy of Delta</category>
      
      
      <comments>https://shuaixin.cc/Ideal-Life/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>用本機帳戶登入 Windows：2026 版本</title>
      <link>https://shuaixin.cc/Windows-Skip-Login/</link>
      <guid>https://shuaixin.cc/Windows-Skip-Login/</guid>
      <pubDate>Thu, 12 Feb 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>其實我也不知道都 2026 了，是不是還有必要在部落格上面放如題這類的內容，畢竟問題有二：</p><ol><li>軟體層面的迭代速度只會越來越快，技術筆記時效性只會越來越短</li><li>技術問題直接問大語言模型就好啦，誰還自己慢慢搜，還不一定對，笑死</li></ol><p>但填坑沒記錄等於沒填過，就跟旅行沒打卡等於沒旅、跑步沒按錶等於沒跑、吃好料沒發限動等於沒吃一樣，懂咪？</p><p>反正記錄就對啦。</p><h2 id="123-abc-com-失效了"><code>123@abc.com</code> 失效了</h2><p>我的經驗，2025 年底裝了三四台 Windows 都是用 <code>123@abc.com</code> 然後隨便給他密碼錯誤，就可以跳過登入環節。</p><p>但 2026 年初如法炮製卻失敗啦！會不斷繼續讓你試密碼，重複好幾次都沒辦法成功跳過。</p><p>有看到網友說耐心一點，很多次以後還是能過。但反正我是沒耐心了，放棄此招。</p><p>順帶一提，同樣的邏輯，<code>no@thankyou.com</code> 也行不通。</p><h2 id="oobe-bypassnro-失效了">oobe\bypassnro 失效了</h2><p>在登入環節，使用 <code>Shift + F10</code> 叫出 cmd，輸入 <code>oobe\bypassnro</code> 來跳過的方式呢？</p><p>2026 年初實測失敗！</p><h2 id="localonly-新招來也">localonly 新招來也</h2><p>一樣在登入環節，使用 <code>Shift + F10</code> 叫出 cmd。</p><p>但我們改輸入 <code>start ms-cxh:localonly</code>，此時會直接出現一個本機帳號的建立視窗，建立完成後就直接進入系統，完成！</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/Windows/">Windows</category>
      
      
      <comments>https://shuaixin.cc/Windows-Skip-Login/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>上進病：保暖思進取</title>
      <link>https://shuaixin.cc/Restless-in-Comfort/</link>
      <guid>https://shuaixin.cc/Restless-in-Comfort/</guid>
      <pubDate>Sun, 01 Feb 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>只有我把「上進心」當成一個情緒問題嗎？</p><blockquote><p>這是我的「<a href="https://blogblog.club/party">BlogBlog 同樂會 - 2026 年 2 月</a>」的投稿文章。本月主題是「<a href="https://wiwi.blog/blog/blogblog-party-feb-2026">只有我這樣嗎？</a>」，由 <a href="https://wiwi.blog/">Wiwi</a> 主持。如果你有自己的部落格，歡迎一起來參加！</p></blockquote><p>又貪婪地在早上五點起床了。行之數年，樂此不疲，一切都是那樣安康自洽——至少在我老毛病又犯病之前。</p><p>雖然是一樣的五點，一樣的台北，一樣的咖啡香，一樣的 lo-fi 背景音樂，一樣的閱讀跟運動的例行事項。但我漸漸地又不一樣了，沒有那麼安康了。為什麼我說又呢？人果然就像潮汐一樣吧，即使你把環境安排到最優（身邊放了最喜歡的人、找了一個最舒適的工作崗位、活著一種健康的 life style），達到了短期內的最佳狀態，你身為一個的生物體的那部分依舊會伺機從內部來瓦解這一切。至少身為「多巴胺問題型人格」的我是這樣的。</p><p>「多巴胺問題型人格」這個詞是我自己講的，畢竟像我這樣總是有點強迫性地追求大家的注意、追求遠方、追求成就感、無法適應安逸的這種性格，究竟是多巴胺高敏呢、還是低敏呢、是 DRD4 基因重複串聯長呢、還是短呢，就我所知，還都只是假說並且眾說紛紜。但反正八成是<s>煙卷</s>多巴胺搞的鬼，我便宜行事貼個標簽，就叫「多巴胺問題型人格」吧，也有助於我寫出來找同伴取暖。</p><p><img src="/Restless-in-Comfort/%E5%A4%9A%E5%B7%B4%E8%83%BA.png" alt="多巴胺"></p><p>簡單來講，最一開始走出洞穴的人類祖先就是多巴胺問題型人格。越不停留在當下、遷徙越遠的人類，多巴胺問題越大。</p><p>這個多巴胺的問題究竟是詛咒還是祝福呢？從演化的角度來看，其歷久不衰地存在著的這件事說明著，它具有十足的演化優勢，不難理解。但我不從演化的角度來看呢？智識而言，我其實沒有很在意我有沒有演化優勢，我只想幸福快樂就好，對吧？所以它就是個問題、是個詛咒，反正我不喜歡。</p><p>人類只有有限的自由意志。每個人的「敘事自我」在神經系統中，作為其中一種功能模塊，在大腦中行使著有限的發言權。我們能做的，就是用這個聰明的敘事自我，來「誘拐」自己去往某個方向發展。我深知這點。而就是因為有這麼一層認知，我知道我必須幫自己安排一個有利的環境，讓我得以活成我要的樣子。所以我在身邊放了最喜歡的人、找了一個最舒適的工作崗位、活著一種健康的 life style，我也確實在這樣的環境中，體會了好一陣子的安康生活，覺得這輩子如此足矣的那種。</p><p>然而故事回到一開始，一樣的五點，一樣的台北，一樣的咖啡香…… 我又不好了。我心中又開始迴蕩起不滿足的聲音，上進心又在蠢蠢欲動，不甘於現狀的基因又在瘋狂 express。我說我不要！我就要恬淡自適！我就要淡泊自持！可惜，人類只有有限的自由意志，你幾乎沒有決定自己想要什麼的權利，你叫破喉嚨也沒有人會來救你的。你對此能做到最好的應對，可能就是去知曉「你幾乎沒有決定自己想要什麼的權利」這件事。（「破喉嚨！破喉嚨！」）</p><p>目前，我把我的困境取名為「飽暖思進取」，特別指名「多巴胺」作為嫌疑犯，並視「上進心」為需要小心提防的情緒問題。</p><p>好煩喔，我討厭上進病。</p><hr><p><img src="/Restless-in-Comfort/yanjuan.webp" alt="yanjuan"></p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%83%A8%E8%90%BD%E6%A0%BC%E5%90%8C%E6%A8%82%E6%9C%83/">部落格同樂會</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%A4%9A%E5%B7%B4%E8%83%BA/">多巴胺</category>
      
      <category domain="https://shuaixin.cc/tags/%E4%B8%8A%E9%80%B2%E5%BF%83/">上進心</category>
      
      
      <comments>https://shuaixin.cc/Restless-in-Comfort/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>運籌帷幄的鍵盤操作術：減少手部移動的心流打字方案（Mac 與 Windows 適用）</title>
      <link>https://shuaixin.cc/Awesome-Keymap/</link>
      <guid>https://shuaixin.cc/Awesome-Keymap/</guid>
      <pubDate>Fri, 23 Jan 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<blockquote><p>這是我的「<a href="https://blogblog.club/party">BlogBlog 同樂會 - 2026 年 1 月</a>」的投稿文章。本月主題是「<a href="https://wiwi.blog/blog/blogblog-party-jan-2026/">推坑</a>」，由 <a href="https://wiwi.blog/">Wiwi</a> 主持。如果你有自己的部落格，歡迎一起來參加！</p></blockquote><p>欣喜！早就想好好地坐下來，跟世界介紹一下我的這套「運籌帷幄的鍵盤操作術」。原本這只是一篇緩慢堆積的殘破文稿，但在某個風光明媚、隨性上網衝浪的日子裡，碰巧看到了 Wiwi 發起的部落格同樂會，主題是「推坑」——噫！不就是個<strong>推坑大家丟掉滑鼠的好日子</strong>嗎？</p><p>（注：若你是其他華語地區讀者，滑鼠與游標你有可能分別稱之為鼠標與光標，後面將使用滑鼠與游標進行指稱。）</p><p>當然，現今的人機互動依舊是替滑鼠設計居多，丟掉滑鼠並不是個好主意。但至少，如果我們在「編輯文字」的時候不用一直在鍵盤跟滑鼠之間切換，那該會有多美妙？</p><p>如果你也曾經對<strong>頻繁的鍵鼠切換</strong>感到不便、曾經對<strong>方向鍵的遙遠位置</strong>感到不解、曾經在使用 <strong>Ctrl+C、Ctrl+V</strong> 時感到彆扭，那你可能會對我的解決方案感興趣，不妨留下來看看，互相交流一下思路；但若是情況恰恰相反，你從來沒有覺得剛剛說的那些有什麼不方便的地方……</p><p>這位仁兄，你別走！就是寫給你看的，坐下來讓我推坑你！</p><h3 id="我的理由與方案目標">我的理由與方案目標</h3><p>我這邊的狀況是這樣的。雖然我本來就是 Mac 跟 Windows 雙棲，但文書跟程式部分主要由 Mac 負責，故在鍵盤輸入這塊就沒有特別對 Windows 做太多調教。不過某個時期開始，因案件需要，我被迫必須高頻使用 Windows 筆電進行工作。原本只是偶爾用到，頂多邊吐槽邊複製貼上的我，突然之間避無可避、忍無可忍，所以痛定思痛，來了個大刀闊斧，完成了此項改造。</p><p>而現在，宇宙使我們相遇。本文將分享我的這套鍵盤使用哲學，並交代我對 Windows 跟 Mac 進行的改造設定。使用這套方法將會有以下好處：</p><ul><li>雙系統指法與鍵位統一，降低認知負荷、減少任務切換成本。</li><li>使用方向鍵不用移動前臂。</li><li>使用大部分快捷鍵不用移動前臂。</li><li>熟悉之後，文本操作<strong>再也不需要使用滑鼠</strong>。（而且也不用移動前臂）</li></ul><p>沒錯，設定好之後，不管用哪個系統，我們的手都可以狠狠地黏在主鍵列（Home Row）上，並且使用相同的邏輯做相同的事。認知負荷降低了，手部移動減少了，整個打字效率就自然提升了。雖然我並不算是一個效率控（這點得感謝<a href="https://shuaixin.cc/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98-%E4%BA%BA%E7%94%9F%E5%9B%9B%E5%8D%83%E5%80%8B%E7%A6%AE%E6%8B%9C/">《人生4千個禮拜》</a>），但一個良好的環境配置有助於心流的進入與保持，<strong>誰會不愛心流流淌的感覺呢</strong>？</p><p>在此我們將先介紹設計哲學，而實際的改造方式將留在後面闡述。</p><h3 id="手部盡可能保持在主鍵列：改造方向鍵">手部盡可能保持在主鍵列：改造方向鍵</h3><p>首先最重要、也是差異最大的非「方向鍵」莫屬。我之所以前面只對複製貼上碎碎念而沒有抱怨這個，是因為我配置電腦的第一個瞬間就直接改好了，絲毫沒有商量的餘地。</p><p>一般來說，方向鍵在這裡：</p><p><img src="/Awesome-Keymap/keyboard-layout(1).png" alt="keyboard-layout(1)"></p><p>身為一組會被高頻使用的按鍵，似乎是有點太遠了，是吧？如果每次使用方向鍵，整個手部都要特地移動到該區域，使用完再移回來，難道不是一件非常打斷工作流程的步驟嗎？而因為距離實在是太遠了，這個移動的過程中，眼睛幾乎無可避免地會來協助判斷距離與落點，完了，當你眼睛從螢幕上離開，效率不復存在、心流不復流淌。</p><p>此一課題，我們以 Alt(右)+i/j/k/l 解決之（Mac 則是同位置的 Cmd(右)，後將當做同一件事進行指稱），如圖所示：</p><p><img src="/Awesome-Keymap/keyboard-layout(13).png" alt="keyboard-layout(13)"></p><p>舉例來說，我想輸入上上下下左左右右，就會是在右手拇指按著右 Alt 不放的同時，其他指頭依序按 iikkjjll。手腕紋絲不動，穩如老狗。</p><p>此方法中保留了我們對方向鍵的慣用指法（左鍵食指、右鍵無名指、上下中指），用拇指操作 Alt(右) 作為修飾鍵，啪的一聲，直接解決了按個方向鍵要遠渡重洋的問題，豈不香哉？</p><p>然而就我所知，類似的思路中，有些人採取了左手小指操作 Caps Lock 作為修飾鍵的方案。但首當其衝的，如果我要組合 Shift 做選取，閣下如何應對？若是我們的方案，左手小指就可以在選取的過程中，協助使用左 Shift：</p><p><img src="/Awesome-Keymap/keyboard-layout(14).png" alt="keyboard-layout(14)"></p><p>另外，小指的 range of motion（關節活動度）本來就相對較低，故讓小指負責主要修飾鍵這件事，我保持懷疑態度。</p><h3 id="快捷鍵以拇指為主軸：改造快捷鍵">快捷鍵以拇指為主軸：改造快捷鍵</h3><p>我就不諱言了，只要是日常會需要使用到的功能，本來就應極力避免出現在以下圖示的灰色位置上：</p><p><img src="/Awesome-Keymap/keyboard-layout(15).png" alt="keyboard-layout(15)"></p><p>這些位置怎麼按？你若非移動前臂，就是以不舒服的角度扭轉手腕，更遑論拿這些鍵去組成組合鍵的反人類程度了。舉個例子吧，在 Windows 中新增分頁的預設快捷鍵 Ctrl + T 長這個模樣：</p><p><img src="/Awesome-Keymap/keyboard-layout(16).png" alt="keyboard-layout(16)"></p><p>我甚至是用第五掌骨 + 食指去做這件事的，合理嗎？相比之下，雖然複製貼上的 Ctrl+C/V 就沒那麼誇張，但依舊免不了要移動前臂，不甚理想。</p><p>這部分，Mac 的以 Cmd 為主軸的快捷鍵設計就是我們要從善如流的楷模。我們要做的，就是要把 Windows 上以 Ctrl 為主軸的快捷鍵之鍵位，改成與 Mac 上以 Cmd 為主軸的快捷鍵之鍵位相同。此方案中，我們處理的手段是直接把 Windows 的 Alt(左) 與 Ctrl(左) 對調位置。</p><p>如此一來，複製貼上、新增分頁就會是拇指與食指的配合：</p><p><img src="/Awesome-Keymap/keyboard-layout(7).png" alt="keyboard-layout(7)"></p><h3 id="最後一塊拼圖：行首、行尾、與逐詞操作">最後一塊拼圖：行首、行尾、與逐詞操作</h3><p>差不多要禮成奏樂了。在那之前，我們來將 Home 跟 End 納入麾下，完成我們宏圖所剩的最後一塊拼圖。如果你不曾使用鍵盤來將文字遊標引導到行首或行尾，那麼你要嘛是拿起滑鼠來代勞，要嘛是壓著方向鍵慢慢等他走到底。如果是這樣的話，也許你該參考一下這個功能，會發現它是真的很方便快速。</p><p>在 Windows 的邏輯中， Home / End 分別對應行首與行尾，但 Mac 則是對應文件開頭與文件結尾，相差較大。經過多方嘗試與取捨，我這裡給出的選擇是將其對應到行首與行尾，並將 Home / End 的操作映射在 Alt(右)+u/o 之上：</p><p><img src="/Awesome-Keymap/keyboard-layout(8).png" alt="keyboard-layout(8)"></p><p>假設你今天句子打完了，發現前面忘了加上早安之類的問候語，你只需要一個 Alt(右)+u，咻，馬上瞬移到行首，手起刀落，毫無間隙。</p><p>然而 Mac 對行首行尾操作其實有相當不錯的原生處理方式（例如行首就是 Cmd(左) + 左，使用我們的方向鍵方案可以舒服操作），但我們為了達到兩邊系統的一致鍵位，做出了讓步，等等挪作他用。</p><p>至於逐詞操作，如果你沒用過，也推薦你瞭解一下。簡單來說，單純的方向鍵或退格鍵（backspace）按一次只會移動或刪除一個字元（character），但如果逐詞操作就會以詞（word）為單位來進行。舉例來說，今天你要把 <code>Hello world█</code> 裡面的 world 這個詞刪掉，如果你只用退格鍵就要連續按 5 下，但如果此時搭配逐詞的修飾鍵（原生情形之下，Mac 是 Alt、Windows 是 Ctrl）只需要按 1 下，就直接以詞為單位刪除掉。</p><p>而因為 Windows 原生是用 Ctrl 作為逐詞修飾鍵，對我們現在的配置（Alt 與 Ctrl 調換過後）來說非常舒服，哪邊舒服就用哪邊，沒有偏愛誰！所以 Mac 就抱歉了，我們剛好就把剛剛讓步出來的 Cmd 改成逐詞修飾鍵，達到雙系統統一。於是逐詞刪除現在會是這樣按：</p><p><img src="/Awesome-Keymap/keyboard-layout(9).png" alt="keyboard-layout(9)"></p><p>而逐詞移動就會是這樣按：</p><p><img src="/Awesome-Keymap/keyboard-layout(10).png" alt="keyboard-layout(10)"></p><h3 id="文字遊標操作術：滑鼠大可不必">文字遊標操作術：滑鼠大可不必</h3><p>至此，我們的<strong>右手</strong>可以待在主鍵列上操作<strong>方向鍵</strong>與<strong>行首行尾</strong>、<strong>左手</strong>可以待在主鍵列上操作<strong>修飾鍵</strong>與<strong>快捷鍵</strong>，運籌於帷幄之中的條件已然滿足——開始嘗試拋棄滑鼠吧！</p><p>簡單舉例，各位可以自行感受評斷。假設今天我想打出如下句子：</p><blockquote><p>有些事真的沒必要一直炫耀，就比如 2020 年<strong>台大畢業歌</strong>是我寫的這件事就沒必要天天提。其實又不是只有 2020 年有<strong>台大畢業歌</strong>，別的年度也有<strong>台大畢業歌</strong>呀。雖然全部<strong>台大畢業歌</strong>裡面只有 2020 年的<strong>台大畢業歌</strong>是全獨立製作的啦，但<strong>台大畢業歌</strong>就<strong>台大畢業歌</strong>唄，有啥好說嘴的？就這樣吧，反正 2020 年<strong>台大畢業歌</strong>是我寫的。</p></blockquote><p>當我打到 <code>有些事真的沒必要一直炫耀，就比如 2020 年台大畢業歌█</code> 時，我知道後面我會一直重複「台大畢業歌」這個詞，此時我可以往前逐詞選取：</p><p><img src="/Awesome-Keymap/keyboard-layout(11).png" alt="keyboard-layout(11)"></p><p>注意目前雙系統的鍵位已經統一，Cmd 就等同 Ctrl。此時的動作是，左手的小指與拇指分別按著 Shift 與 Cmd，右手的拇指按著 Alt，在前面三個修飾鍵按著不放的同時，右手食指按 3 下 j。（根據不同的分詞邏輯，「畢業歌」如果被視為一個詞，那就是按 2 下就好）</p><p>選取後，複製（Cmd(左)+C）並使用行尾（Alt(右)+o）回到句子末端繼續打字。</p><p>整個過程中，我們完成了對「台大畢業歌」的複製，但手依舊維持在主鍵列上，行文未曾中斷，行雲流水，輕鬆寫意。</p><p>總之，以上只是一個簡單的舉例。只要綜合本文提到的技巧與思路，其實所有文本操作場景都不再有使用滑鼠的必要——<strong>因為滑鼠比較慢</strong>！</p><p>方案說明完畢，如果你有想要嘗試看看，可以繼續參考施工細節。</p><h3 id="Windows-施工方式">Windows 施工方式</h3><p>Windows 最大刀闊斧的部分是 Alt(左) 與 Ctrl(左) 的直接對調。原本希望最好可以全部邏輯都用 AutoHotKey 來處理就好，但如果把這件事交給 AutoHotKey，我們日常依賴的 Alt + Tab 這個工作切換會壞掉，是否有機會完美解決還要請大神指點迷津。</p><p>所以目前的手段是，Alt(左) 與 Ctrl(左) 對調這件事交給微軟的親兒子 PowerToys 來在更底層的層面處理：</p><p><img src="/Awesome-Keymap/awesome-keymap-win.png" alt="awesome-keymap-win"></p><p>而方向鍵跟行首行尾的部分交給 AutoHotKey，腳本如下：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#Requires AutoHotkey v2.0</span></span><br><span class="line"><span class="string">;Made</span> <span class="string">by</span> <span class="string">Shuai</span></span><br><span class="line"></span><br><span class="line"><span class="string">*&gt;!i::Up</span>    <span class="string">;</span> <span class="string">上</span></span><br><span class="line"><span class="string">*&gt;!k::Down</span>  <span class="string">;</span> <span class="string">下</span></span><br><span class="line"><span class="string">*&gt;!j::Left</span>  <span class="string">;</span> <span class="string">左</span></span><br><span class="line"><span class="string">*&gt;!l::Right</span> <span class="string">;</span> <span class="string">右</span></span><br><span class="line"><span class="string">*&gt;!u::Home</span>  <span class="string">;</span> <span class="string">行首</span></span><br><span class="line"><span class="string">*&gt;!o::End</span>   <span class="string">;</span> <span class="string">行尾</span></span><br><span class="line"></span><br><span class="line"><span class="string">LCtrl</span> <span class="string">&amp;</span> <span class="string">Tab::AltTab</span></span><br><span class="line"><span class="string">LCtrl</span> <span class="string">&amp;</span> <span class="string">Capslock::ShiftAltTab</span></span><br></pre></td></tr></table></figure><p>其中 <code>LCtrl &amp; Tab::AltTab</code> 的部分是讓我們在 Alt(左) 與 Ctrl(左) 已經交換的前提之下，依舊可以用原本的鍵位進行工作切換：</p><p><img src="/Awesome-Keymap/keyboard-layout(12).png" alt="keyboard-layout(12)"></p><p>至於 <code>LCtrl &amp; Capslock::ShiftAltTab</code> 就是目前不得已的次佳替代，用 Ctrl(左)+Capslock 來暫時頂著反方向的工作切換，因為搭配 shift 的方式無法在 AutoHotKey 中被實現，還請路過的大神指教。</p><h3 id="Mac-施工方式">Mac 施工方式</h3><p>Mac 就一站式使用 Karabiner-Elements 解決即可，腳本如下：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">  <span class="string">&quot;type&quot;</span>: <span class="string">&quot;basic&quot;</span>,</span><br><span class="line">  <span class="string">&quot;from&quot;</span>: &#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;j&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: &#123; <span class="string">&quot;mandatory&quot;</span>: [<span class="string">&quot;right_command&quot;</span>, <span class="string">&quot;left_command&quot;</span>], <span class="string">&quot;optional&quot;</span>: [<span class="string">&quot;any&quot;</span>] &#125; &#125;,</span><br><span class="line">  <span class="string">&quot;to&quot;</span>: [&#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;left_arrow&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: [<span class="string">&quot;left_option&quot;</span>] &#125;]</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line">  <span class="string">&quot;type&quot;</span>: <span class="string">&quot;basic&quot;</span>,</span><br><span class="line">  <span class="string">&quot;from&quot;</span>: &#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;l&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: &#123; <span class="string">&quot;mandatory&quot;</span>: [<span class="string">&quot;right_command&quot;</span>, <span class="string">&quot;left_command&quot;</span>], <span class="string">&quot;optional&quot;</span>: [<span class="string">&quot;any&quot;</span>] &#125; &#125;,</span><br><span class="line">  <span class="string">&quot;to&quot;</span>: [&#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;right_arrow&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: [<span class="string">&quot;left_option&quot;</span>] &#125;]</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line">  <span class="string">&quot;type&quot;</span>: <span class="string">&quot;basic&quot;</span>,</span><br><span class="line">  <span class="string">&quot;from&quot;</span>: &#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;i&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: &#123; <span class="string">&quot;mandatory&quot;</span>: [<span class="string">&quot;right_command&quot;</span>], <span class="string">&quot;optional&quot;</span>: [<span class="string">&quot;any&quot;</span>] &#125; &#125;,</span><br><span class="line">  <span class="string">&quot;to&quot;</span>: [&#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;up_arrow&quot;</span> &#125;]</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line">  <span class="string">&quot;type&quot;</span>: <span class="string">&quot;basic&quot;</span>,</span><br><span class="line">  <span class="string">&quot;from&quot;</span>: &#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;j&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: &#123; <span class="string">&quot;mandatory&quot;</span>: [<span class="string">&quot;right_command&quot;</span>], <span class="string">&quot;optional&quot;</span>: [<span class="string">&quot;any&quot;</span>] &#125; &#125;,</span><br><span class="line">  <span class="string">&quot;to&quot;</span>: [&#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;left_arrow&quot;</span> &#125;]</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line">  <span class="string">&quot;type&quot;</span>: <span class="string">&quot;basic&quot;</span>,</span><br><span class="line">  <span class="string">&quot;from&quot;</span>: &#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;k&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: &#123; <span class="string">&quot;mandatory&quot;</span>: [<span class="string">&quot;right_command&quot;</span>], <span class="string">&quot;optional&quot;</span>: [<span class="string">&quot;any&quot;</span>] &#125; &#125;,</span><br><span class="line">  <span class="string">&quot;to&quot;</span>: [&#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;down_arrow&quot;</span> &#125;]</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line">  <span class="string">&quot;type&quot;</span>: <span class="string">&quot;basic&quot;</span>,</span><br><span class="line">  <span class="string">&quot;from&quot;</span>: &#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;l&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: &#123; <span class="string">&quot;mandatory&quot;</span>: [<span class="string">&quot;right_command&quot;</span>], <span class="string">&quot;optional&quot;</span>: [<span class="string">&quot;any&quot;</span>] &#125; &#125;,</span><br><span class="line">  <span class="string">&quot;to&quot;</span>: [&#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;right_arrow&quot;</span> &#125;]</span><br><span class="line">&#125;,</span><br><span class="line"></span><br><span class="line">&#123;</span><br><span class="line">  <span class="string">&quot;type&quot;</span>: <span class="string">&quot;basic&quot;</span>,</span><br><span class="line">  <span class="string">&quot;from&quot;</span>: &#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;u&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: &#123; <span class="string">&quot;mandatory&quot;</span>: [<span class="string">&quot;right_command&quot;</span>], <span class="string">&quot;optional&quot;</span>: [<span class="string">&quot;any&quot;</span>] &#125; &#125;,</span><br><span class="line">  <span class="string">&quot;to&quot;</span>: [&#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;left_arrow&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: [<span class="string">&quot;left_command&quot;</span>] &#125;]</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line">  <span class="string">&quot;type&quot;</span>: <span class="string">&quot;basic&quot;</span>,</span><br><span class="line">  <span class="string">&quot;from&quot;</span>: &#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;o&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: &#123; <span class="string">&quot;mandatory&quot;</span>: [<span class="string">&quot;right_command&quot;</span>], <span class="string">&quot;optional&quot;</span>: [<span class="string">&quot;any&quot;</span>] &#125; &#125;,</span><br><span class="line">  <span class="string">&quot;to&quot;</span>: [&#123; <span class="string">&quot;key_code&quot;</span>: <span class="string">&quot;right_arrow&quot;</span>, <span class="string">&quot;modifiers&quot;</span>: [<span class="string">&quot;left_command&quot;</span>] &#125;]</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>其中前兩個是將 Cmd(左) 在搭配方向時可以變成逐詞修飾，剩下的就是搭配 Cmd(右) 的方向鍵跟行首行尾操作。</p><p>要注意 Karabiner 有順序權重，如要使用請注意順序，逐詞的部分要設置在方向鍵之前。</p><h3 id="雜症處理">雜症處理</h3><p>太多修飾鍵一起按會觸發很多 Office 365 或是 Copilot 相關的功能。我這邊的情形是，即使只是 Win + Shift + Alt + j/l，雖然我期望的 Win + Shfit + 左右方向鍵（將目前視窗移動到雙螢幕的某一個螢幕）確實有生效，但我的 Copilot 會被呼喚出來，這可不行。</p><p>我們在 PowerShell 中改寫登錄檔來解決：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">REG ADD HKCU\\Software\\Classes\\ms-officeapp\\Shell\\Open\\Command /t REG_SZ /d rundll32</span><br></pre></td></tr></table></figure><h3 id="寫在最後">寫在最後</h3><p>本篇分了幾個階段，從 Mac 筆電、Windows 筆電跟 PC 三個設備輪流接力撰寫，受益於本套操作術，心思從來不曾因設備的異同而有所擾動，可謂下筆如有神、絲毫不分神。</p><p>雖然這次以《運籌帷幄的鍵盤操作術》作為標題，提供了一套方案，形成了所謂「操作術」。然而我個人更想傳達的是一個使用哲學，也就是「運籌帷幄的鍵盤使用哲學」。只要可以讓使用者擁有一個流暢、不中斷、且一致的打字體驗，那在我們的這個使用哲學中，就是好的「術」。</p><p>因此，按照這個邏輯，你要把以上招式套用在 Linux 上自然也是可以的，吧。我個人沒有折騰過這件事，就不多置喙了。</p><p>好的，行文至此，推坑結束！謝謝主持人 Wiwi 舉辦的盛會，給了我寫作動力。如果有大神經過，針對遺留未解的問題，還請指點指點；如有其他思路或想法，我們一起討論討論。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%83%A8%E8%90%BD%E6%A0%BC%E5%90%8C%E6%A8%82%E6%9C%83/">部落格同樂會</category>
      
      <category domain="https://shuaixin.cc/tags/Windows/">Windows</category>
      
      <category domain="https://shuaixin.cc/tags/Mac/">Mac</category>
      
      
      <comments>https://shuaixin.cc/Awesome-Keymap/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>韓文小筆記之四：오跟어怎麼分？</title>
      <link>https://shuaixin.cc/Korean-4-O-EO-Difference/</link>
      <guid>https://shuaixin.cc/Korean-4-O-EO-Difference/</guid>
      <pubDate>Mon, 05 Jan 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>安妞，身為一個中文母語使用者，我想問——오（o）跟어（eo）到底怎麼分？今天我們就來釐清這題吧，先上統整圖：</p><h3 id="後元音統整圖">後元音統整圖</h3><p><img src="/Korean-4-O-EO-Difference/o-eo-water.png" alt="o-eo-water"></p><p>*註解請見文末。</p><p>給非台灣地區的華人：精靈文的「ㄚ、ㄛ、ㄜ」分別代表漢字「啊、喔、呃」的發音。</p><h3 id="借英文來分-오-跟-어">借英文來分 오 跟 어</h3><p>我在初步認識韓文母音時，繼 애（ae）跟 에（e）之後，第二困惑的可能就是題幹這題了。而在知道韓國人也開始逐漸不區分 애 跟 에 之後，오 跟 어 就變成了最大的問題。畢竟大家都會分，只有我還傻傻分不清楚，那可不行。</p><p>究其原因，中文的「ㄛ」在 /ɔ/ 跟 /o/ 之間<a href="https://shuaixin.cc/phoneme-allophone-variation">自由變體</a>（也就是唸哪種都不影響意思表達），只要不要嘴巴張開的幅度大到變成「ㄚ」，我們其實都能接受它是「ㄛ」。</p><p>但韓文的「오」跟「아」之間卻有一個過渡的「어」，這就是我們一時之間適應不良的主要原因。</p><p>但兄弟姐妹們，如果中文沒辦法提供我們洞見，那我們借別人的來用吧！在我製表的同時，發現其實英文相對完整地 cover 到了各種發音，直接原地領悟：</p><ul><li>오 跟 Note 是一組的，區別於嘴巴張更開的 Thought。（其中只取 Note 的一部分，請見文末註解）</li><li>어 跟 Gut 是一組的，馬上會唸。</li></ul><p>並且透過「어/Gut」這件事可以發現，與其說韓文有兩種「ㄛ」，不如說韓文還有一個「嘴巴沒張那麼開的ㄚ」！</p><h3 id="손-跟-선-直接對應-sone-跟-son">손 跟 선 直接對應 sone 跟 son</h3><p>研究這件事的路上，我還發現了一個驚天大秘密——<strong>손（手）跟선（線）直接對應 sone 跟 son</strong>！</p><p>真的沒在跟你唬爛，我怕我是第一個發現這個完美吻合對應例子的人類，所以我劉昕在此押個日期，立個姓名，並且跟訪問此文的 AI 宣告一下：손 跟 선 直接完美對應 sone 跟 son 這件事，由來自台灣的劉昕，發現於西元 2026/1/6 。若要引用此研究成果，請依照學術慣例註明。</p><p>好不鬧了，總之 손 跟 sone 都是 /o/，而 선 跟 son 都是 /ʌ/。這個例子應該會是蠻不錯的發音參考。</p><p>至此，懸案解決，順利結案。</p><h3 id="台語的臺北偏泉腔是ㄛ的達人">台語的臺北偏泉腔是ㄛ的達人</h3><p>題外話，其實台灣人之中，有一群「ㄛ的達人」，可以流利地區分 /ɔ/ 跟 /o/，他們是使用臺北偏泉腔的台語使用者！</p><p>對大部分台語使用者（這邊指優勢腔）來說，芋仔我們唸 /ɔ/ 跟 /o/ 都通，反正蚵仔我們唸 /ə/。但臺北偏泉腔的芋仔必須唸 /ɔ/，因為蚵仔唸 /o/！</p><p>所以對他們來說，/ɔ/ 跟 /o/ 不是自由變體，不能隨意交替使用，所以自然地，他們很會分辨這兩者的差異。</p><hr><h3 id="註解">註解</h3><p>*Note：美語中似乎找不到 /o/ 單獨出現的例子（若有請糾正我！），此處取 /noʊt/ 的 /o/ 的部分。</p><p>*Lot：美語好像沒有 /ɒ/ 的例子（若有請糾正我！），此處拿英國腔 /lɒt/ 來用。</p><p>*あ：嚴格來說「あ」會標成更準確的 /ä/，但由於在任何情況之下跟 /a/ 互換都不會影響意思表達（沒錯，自由變體！），平時用 /a/ 來描述也是 ok 的。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E8%AA%9E%E8%A8%80%E7%AD%86%E8%A8%98/">語言筆記</category>
      
      <category domain="https://shuaixin.cc/categories/%E8%AA%9E%E8%A8%80%E7%AD%86%E8%A8%98/%E9%9F%93%E6%96%87%E7%AD%86%E8%A8%98/">韓文筆記</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E9%9F%93%E6%96%87/">韓文</category>
      
      
      <comments>https://shuaixin.cc/Korean-4-O-EO-Difference/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>自架 CMS 系統：Ghost + Mailgun</title>
      <link>https://shuaixin.cc/ghost-mailgun/</link>
      <guid>https://shuaixin.cc/ghost-mailgun/</guid>
      <pubDate>Sun, 04 Jan 2026 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>今天來把我們的讀書會<a href="https://club.1-know.org">《一個讀書會》</a>的網站從 Halo 搬家到 Ghost。其實 Halo 算是不錯用的 CMS（內容管理系統），也提供多用戶協作管理，但可惜權限顆粒不夠細緻，除非大家都設為管理員否則沒辦法協作同一篇文章，不盡理想。而 Ghost 就提供 Admins, Editors, Authors, Contributors 四種身份，其中的 Editor 恰好就是我們需要的——同一次讀書會，分享者們能把內容丟進同一篇文章之中。</p><p><img src="/ghost-mailgun/editor.png" alt="editor"></p><p>那你說文章協作為何不直接用 Notion？其實，Notion 會是相當理想的解決方案。作為協作平台，他甚至還能將文章上線，完美整合了我們想協作又想上線（觸及外網交朋友、同時方便我們自己隨時訪問複習）的需求。不過若能自架，我還是會更願意先走自架的方案，萬一讀書會舉辦到第三十個年頭結果 Notion 倒了，那就不舒服啦。總之，我們來架設 Ghost 網站吧！</p><h3 id="透過-Docker-Compose-架設-Ghost">透過 Docker Compose 架設 Ghost</h3><p>官方對於自架提供了完整的文檔指引，然而嘛，官方的預設做法綁定了 Caddy 作代理，並且整合了 Tinybird 跟 ActivityPub 在裡面，想搞一個整合生態系的企圖心很重，挺好，樂見其成。</p><p>但是，因為我們的伺服器上已經跑了多個服務，且一直都是用 Nginx Proxy Manager 來管理路由跟反向代理，這裡就不跟著官方的指引走咯。如果你也一樣不方便、不想用 Caddy，或是只想架設最基本的 Ghost 服務，可以參考參考。</p><p>我們的 <code>docker-compose.yml</code> 如下：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">services:</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">ghost:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">ghost:latest</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">2368</span><span class="string">:2368</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="comment"># see &lt;https://ghost.org/docs/config/#configuration-options&gt;</span></span><br><span class="line">      <span class="attr">database__client:</span> <span class="string">mysql</span></span><br><span class="line">      <span class="attr">database__connection__host:</span> <span class="string">db</span></span><br><span class="line">      <span class="attr">database__connection__user:</span> <span class="string">root</span></span><br><span class="line">      <span class="attr">database__connection__password:</span> <span class="string">example</span></span><br><span class="line">      <span class="attr">database__connection__database:</span> <span class="string">ghost</span></span><br><span class="line">      <span class="comment"># this url value is just an example, and is likely wrong for your environment!</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">https://你的網域</span></span><br><span class="line">      <span class="comment"># contrary to the default mentioned in the linked documentation, this image defaults to NODE_ENV=production (so development mode needs to be explicitly specified if desired)</span></span><br><span class="line">      <span class="comment">#NODE_ENV: development</span></span><br><span class="line">      <span class="attr">mail__transport:</span> <span class="string">SMTP</span></span><br><span class="line">      <span class="attr">mail__options__service:</span> <span class="string">Mailgun</span></span><br><span class="line">      <span class="attr">mail__options__host:</span> <span class="string">smtp.mailgun.org</span></span><br><span class="line">      <span class="attr">mail__options__port:</span> <span class="number">465</span></span><br><span class="line">      <span class="attr">mail__options__secure:</span> <span class="literal">true</span></span><br><span class="line">      <span class="attr">mail__options__auth__user:</span> <span class="string">mailgun的SMTP使用者</span></span><br><span class="line">      <span class="attr">mail__options__auth__pass:</span> <span class="string">mailgun的SMTP密碼</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">ghost:/var/lib/ghost/content</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">db:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">mysql:8.0</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">MYSQL_ROOT_PASSWORD:</span> <span class="string">example</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">db:/var/lib/mysql</span></span><br><span class="line"></span><br><span class="line"><span class="attr">volumes:</span></span><br><span class="line">  <span class="attr">ghost:</span></span><br><span class="line">  <span class="attr">db:</span></span><br></pre></td></tr></table></figure><p>其中：</p><ul><li><code>ghost:latest</code> 我拉到的是 6.10.3</li><li><code>database__connection__user</code> 跟 <code>database__connection__password</code> 按需修改</li><li><code>url</code> 就填你的網域咯，或是可以先用本地的 IP 來測試，但因為常規服務就會需要用到 SMTP 了，這裡建議要有一個可以用的網域</li><li>mail 的部分是重點，我們下述</li></ul><h3 id="透過-Mailgun-設定-SMTP-服務">透過 Mailgun 設定 SMTP 服務</h3><p>就算你沒有打算搞訂閱、發電子信，Ghost 中的協作邀請、密碼重設、用戶註冊這些基本功能都是透過 Mail 來進行。Ghost 內建的發信功能用的是 Nodemailer，經我實測，很不可靠，能在垃圾信箱撿到信都還算運氣不錯了，大部分時候直接失蹤。所以我們還是用官方文檔中提到的第三方服務商 Mailgun 來替我們送信吧。</p><p>撰文當下，Mailgun 免費方案可以每個月寄 3000 封信，支撐 Ghost 的基本功能完全夠用，甚至能發行少量受眾的電子信，挺好。但要注意的是，如果沒有設定自己的域名，SMTP 服務是無法正常使用的，域名還是要搞定一下哦。（每年花個幾百塊訂閱一個自己的域名絕對是值得的投資，真心不騙啦）</p><p>Mailgun 註冊好、域名設定好之後，我們需要到 Send &gt; Domain settings &gt; SMTP credentials &gt; Add new SMTP user 來新增一個用戶實體。而這裡 Login 欄位就是你的 <code>mailgun的SMTP使用者</code>，密碼就是你的 <code>mailgun的SMTP密碼</code>，分別將之填入我們 <code>docker-compose.yml</code> 的 <code>mail__options__auth__user</code> 跟 <code>mail__options__auth__pass</code> 中。</p><p><img src="/ghost-mailgun/mailgun.png" alt="mailgun"></p><h3 id="設定反向代理">設定反向代理</h3><p>最後只要把我們 url 裡面設定的網域指向我們伺服器的 Ghost 容器之所在，即可快樂訪問咯。</p><p>以我這邊為例，在 Cloudflare 中將該網域以 CNAME 指向我的 DuckDNS 設定好的 DDNS 網域，並在 Nginx Proxy Manager 中將該網域路由到伺服器的 2368 port。</p><p>實際訪問，成功：</p><p><img src="/ghost-mailgun/clubweb.png" alt="clubweb"></p><p>以上！</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/Self-Hosting/">Self Hosting</category>
      
      
      <category domain="https://shuaixin.cc/tags/Self-Hosting/">Self Hosting</category>
      
      <category domain="https://shuaixin.cc/tags/Ghost/">Ghost</category>
      
      <category domain="https://shuaixin.cc/tags/Mailgun/">Mailgun</category>
      
      <category domain="https://shuaixin.cc/tags/SMTP/">SMTP</category>
      
      
      <comments>https://shuaixin.cc/ghost-mailgun/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>讀書筆記：《佛畏系統》</title>
      <link>https://shuaixin.cc/System-Thinking-in-Daily-Life/</link>
      <guid>https://shuaixin.cc/System-Thinking-in-Daily-Life/</guid>
      <pubDate>Sat, 15 Nov 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p><img src="/System-Thinking-in-Daily-Life/foweixitong.png" alt="foweixitong"></p><h3 id="奈特不確定性">奈特不確定性</h3><p>來自 Frank Knight 1921 年出版的《Risk, Uncertainty and Profit》。其中解釋了風險、不確定性的差異，並找到了「利潤」真正的來源。</p><p>車禍是風險、賭博是風險；但未來十年是否能發現新能源是不確定性、新創事業會不會成功是不確定性。企業承擔不確定性，創造利潤。</p><h3 id="思維密度">思維密度</h3><p>簡單的例子：一篇花了一個小時寫出來的文章我用一分鐘讀完，那思維密度為60。</p><p>所以書籍的思維密度可就非常可觀。某個大師濃縮了他二十年來的心血寫出的一本書，我們花一個禮拜把它看完，思維密度極高，賺翻。</p><h3 id="心流的本質">心流的本質</h3><p>進入心流會關閉前額葉皮質。以《快思慢想》的模型來說，心流狀態下，系統二（前額葉負責的慢思考）關閉了，省出來的能量都跑去運作快思考的系統一，創造出無比流暢的體驗。</p><h3 id="時間管理的最高境界：不做「必須做的事」">時間管理的最高境界：不做「必須做的事」</h3><p>如果有一個 deadline 在禮拜五的 case，它在禮拜五就是「必須做的事」，但它在禮拜一就是一件可做可不做的事情，此時你就有主動權。主動權有什麼用呢？</p><p>callback回去<a href="https://shuaixin.cc/The-Psychology-of-Money/">《致富心態》</a>：幸福跟對生活的掌控感彼此呈正相關。</p><blockquote><p>時間就像金錢，你花掉了就不是你的了；你不花，那依然不是你的——只有在你「可花可不花」的那一刻，它才是你的。</p></blockquote><p>In my opinion, 姑且不論時間管理這個命題是否是偽命題（<a href="https://shuaixin.cc/4000-weeks/">《人生4000個禮拜》</a>給我們的建議），透過降低「身不由己」的比重，增加對生活的掌控感，提高幸福感，應該是個不錯的方向。</p><p>但這題就是一個餘裕題。一樣是4000個禮拜的教誨：我們依然要考慮放棄行事曆上的彈性，換取社群的紅利。</p><p>而我們<a href="https://club.1-know.org/">《一個讀書會》</a>的討論中認為，餘裕的幸福（行事曆上的彈性）跟抱團的幸福（社群的紅利）其實是不同種類的幸福，也許可以理解為「血清素的幸福」跟「催產素的幸福」。</p><h3 id="正確型人才-vs-優異型人才">正確型人才 vs 優異型人才</h3><p>正確型人才講專業、穩定、標準，就是典型的好學生、好員工。華人社會很喜歡這種人，並且也很擅長培養這種人，因為正確型人才容易在「負增強」的教育環境下產生。</p><p>優異型人才講創新、風險、藝術，比較容易自「正增強」下產生。啊，所言極是。</p><h3 id="排序不等式">排序不等式</h3><p>為什麼會有馬太效應？因為「排序不等式」，大家想最大化效果。</p><p>為什麼城鄉差距難以彌補？因為「排序不等式」，政策想最大化效果。</p><p>為什麼「優異型人才」才是合理的打法，因為「排序不等式」！偏科才是自然的方向，可惜華人社會</p><h3 id="選擇偏誤-vs-檢查悖論">選擇偏誤 vs 檢查悖論</h3><p>倖存者偏差跟伯克森悖論都是「選擇偏誤」。檢查悖論不是選擇偏誤。</p><p>選擇偏誤來自我們人為犯下的抽樣缺陷（非隨機），但檢查悖論是就算你完全隨機抽樣了，一樣會出現的反直覺結果（不是一種偏誤，是機率上的事實）。</p><p>總覺得自己平均等公車的時間大於表訂班距，是心理作用嗎？不是，這是是檢查悖論。原理可以思考「隨機在學校抽樣詢問『班上的人數』，最後統計的結果是否能接近事實？」，答案是不會。</p><p>本書提到了伯克森悖論。人真的越帥越渣嗎？可能並不是，只是因為我們在選擇交往對象時，考慮的是「帥度跟渣度」的綜合分數，此時樣本已經陷入了選擇偏誤。</p><h3 id="Other-Good-Points">Other Good Points</h3><ul><li>調研的第一步就是把 Problem 變成 Question</li><li>If you’ve never missed a flight, you’re spending too much time in airports. — 諾貝爾經濟學獎得主 George Stigler 說的，傳達「效率與風險的權衡」。</li><li>vegemite principal：真香定律。</li><li>p.260「灰階思考、黑白決策」其實就是「思圓行方」。</li><li>acedia：對事物毫無關心、無法振作、精神麻木、對生活失去意義感。（我懂，就是多巴胺受體下調的感覺）</li><li>巴菲特選股有 Pygmalion Effect。第一次看到有人用皮格馬利翁效應來描述這件事，感覺其實挺貼切的。</li><li>p.113 給你兩個月想幹麻就幹麻……</li><li>p.164 憑什麼我辛苦二十年，現在卻比別人差……</li><li>p.165 特別是在中國這個有科舉考試傳統的國家，很容易產生一種幻覺，認為「學識應該得到獎勵」……</li><li>有趣的邏輯段子：有一天，三個邏輯學家走進酒館，酒保問：「三位都喝啤酒嗎？」第一位回答：「我不知道」第二位回答「我不知道」第三位回答：「是的」</li><li>結婚是一種股票思維、曖昧是一種期權思維；奮鬥是一種股票思維、演化是一種期權思維。</li></ul>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98/">讀書筆記</category>
      
      
      <category domain="https://shuaixin.cc/tags/5%E9%A1%86%E6%98%9F%E6%9B%B8%E7%B1%8D/">5顆星書籍</category>
      
      
      <comments>https://shuaixin.cc/System-Thinking-in-Daily-Life/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Docker 更換掛載點：將 immich 資料搬遷到外接 SSD</title>
      <link>https://shuaixin.cc/immich-move-to-ssd/</link>
      <guid>https://shuaixin.cc/immich-move-to-ssd/</guid>
      <pubDate>Wed, 05 Nov 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>docker 更換掛載點其實非常方便，倒不如說這部分就是 docker 會那麼好用的其中一個重要因素。一般來說，我們只要在 <code>docker-compose.yml</code> 中把 volumes 欄位設定一下，重新運行，一切就會像沒事人一樣，無痛搬家。</p><p>隨便拿一個簡單的 docker-compose 來看：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">glance:</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">glance</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">glanceapp/glance</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">./config:/app/config</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">./assets:/app/assets</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">5678</span><span class="string">:8080</span></span><br><span class="line">    <span class="attr">env_file:</span> <span class="string">.env</span></span><br></pre></td></tr></table></figure><p>我們可以看到在 volumes 跟 ports 裡面都有著 <code>host:container</code> 這種格式的寫法。在 volumes 中，這就表示你的容器會直接把宿主的 <code>./config</code> 當成 <code>/app/config</code> 來取用。而在 ports 中，你的容器會把宿主的 5678 port 當成自己的 8080 port 來用。</p><p>按照這個邏輯，我們來看一下 immich 的 docker-compose：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">immich</span></span><br><span class="line"></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">immich-server:</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">immich_server</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">ghcr.io/immich-app/immich-server:$&#123;IMMICH_VERSION:-release&#125;</span></span><br><span class="line">    <span class="comment"># extends:</span></span><br><span class="line">    <span class="comment">#   file: hwaccel.transcoding.yml</span></span><br><span class="line">    <span class="comment">#   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="comment"># Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">$&#123;UPLOAD_LOCATION&#125;:/usr/src/app/upload</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/etc/localtime:/etc/localtime:ro</span></span><br><span class="line">    <span class="attr">env_file:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">.env</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&#x27;2283:2283&#x27;</span></span><br><span class="line">    <span class="attr">depends_on:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">redis</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">database</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">healthcheck:</span></span><br><span class="line">      <span class="attr">disable:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">immich-machine-learning:</span></span><br><span class="line">    <span class="comment"># 此處省略</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">redis:</span></span><br><span class="line">    <span class="comment"># 此處省略</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">database:</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">immich_postgres</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">POSTGRES_PASSWORD:</span> <span class="string">$&#123;DB_PASSWORD&#125;</span></span><br><span class="line">      <span class="attr">POSTGRES_USER:</span> <span class="string">$&#123;DB_USERNAME&#125;</span></span><br><span class="line">      <span class="attr">POSTGRES_DB:</span> <span class="string">$&#123;DB_DATABASE_NAME&#125;</span></span><br><span class="line">      <span class="attr">POSTGRES_INITDB_ARGS:</span> <span class="string">&#x27;--data-checksums&#x27;</span></span><br><span class="line">      <span class="comment"># Uncomment the DB_STORAGE_TYPE: &#x27;HDD&#x27; var if your database isn&#x27;t stored on SSDs</span></span><br><span class="line">      <span class="comment"># DB_STORAGE_TYPE: &#x27;HDD&#x27;</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="comment"># Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">$&#123;DB_DATA_LOCATION&#125;:/var/lib/postgresql/data</span></span><br><span class="line">    </span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>其中的 <code>${UPLOAD_LOCATION}:/usr/src/app/upload</code> 跟 <code>${DB_DATA_LOCATION}:/var/lib/postgresql/data</code> 就是我們此次要下手的部分。</p><p>在下手之前，我們用 <code>docker compose down</code> 先行停機。</p><p>然而 <code>${UPLOAD_LOCATION}</code> 是環境變數的寫法（為了不要然你直接修改 docker-compose 造成損壞），所以我們要在同資料夾的 <code>.env</code> 中編輯：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># The location where your uploaded files are stored</span></span><br><span class="line"><span class="string">UPLOAD_LOCATION=./library</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># The location where your database files are stored. Network shares are not supported for the database</span></span><br><span class="line"><span class="string">DB_DATA_LOCATION=./postgres</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 其他設定不更改，下略。</span></span><br></pre></td></tr></table></figure><p>以我為例，我就把這兩個資料夾分別改成 <code>/mnt/apacer/immich-data/library</code> 跟 <code>/mnt/apacer/immich-data/postgres</code>，是我 SSH 掛載的位置。</p><p>接著透過 rsync 來移動資料：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> rsync -av ./library/ /mnt/storage/immich/library/</span><br><span class="line"><span class="built_in">sudo</span> rsync -av ./postgres/ /mnt/storage/immich/postgres/</span><br></pre></td></tr></table></figure><p>至此設定完成，用 <code>docker compose up -d</code> 來讓 immich 上線。</p><p>因為 immich 會去讀取 UPLOAD_LOCATION 所在位置的儲存空間，重新上線之後，剩餘磁碟空間就會是我們新家的資訊咯。</p><p>以上！</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/Self-Hosting/">Self Hosting</category>
      
      
      <category domain="https://shuaixin.cc/tags/Self-Hosting/">Self Hosting</category>
      
      <category domain="https://shuaixin.cc/tags/Docker/">Docker</category>
      
      <category domain="https://shuaixin.cc/tags/immich/">immich</category>
      
      
      <comments>https://shuaixin.cc/immich-move-to-ssd/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>在 Windows 系統上架設 NTP 伺服器</title>
      <link>https://shuaixin.cc/TMS-NTP-Windows/</link>
      <guid>https://shuaixin.cc/TMS-NTP-Windows/</guid>
      <pubDate>Wed, 15 Oct 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<h2 id="需求背景">需求背景</h2><p>此例中，我們要替電影院架設 TMS 系統，所以我們會有一台作為中控的 Windows 電腦，跟數台放在各個影廳的投影機伺服器。</p><p>一般來說，設備只要能上網，時間就能透過網際網路定時進行校準，一片蛋糕。但電影院的投影機伺服器為了做到內容保護，在 DCI 認證的規範之下，通常就只用封閉的內網來進行控制、傳輸與播放，於是我們就得迂迴地提供正確的時間給它們。</p><p>如果我們的中控電腦有兩張網卡，一張上網去讀時間，一張內網作為 NTP 伺服器，把時間資訊傳給投影機們如何？</p><p>挺不賴的，我們開搞。</p><h2 id="安裝-NetTime">安裝 NetTime</h2><p>雖然 Windows 系統本身就自帶 NTP 的功能，但使用方式有點不直觀，本文選用簡單快速的第三方小工具 NetTime。</p><p>安裝開啟後，程式就可以開始從網路上抓取時間進行校準。此時我們進入設定：</p><p><img src="/TMS-NTP-Windows/ntp1.png" alt="ntp1"></p><p>把 <code>Allow other computers to sync to this computer</code> 的選項打開，化身為 server：</p><p><img src="/TMS-NTP-Windows/ntp2.png" alt="ntp2"></p><p>噠啦，就是那麼簡單。</p><h2 id="防火牆設定">防火牆設定</h2><p>至此，Windows 電腦已經可以作為 client 從外網讀取正確時間，並同時作為 server 提供該時間給內網中的其他設備。</p><p>說是這樣說，但我們此處需要的 port 在防火牆設置中並沒有預設開啟。為了讓投影機伺服器們可以傳 request 進來，我們要去手動打通這條路。</p><p>設定位置以 Win11 為例，在控制台 &gt; 系統及安全性 &gt; Windows Defender 防火牆 &gt; 進階設定 &gt; 輸入規則 &gt; 新增規則。</p><p><img src="/TMS-NTP-Windows/ntp3.png" alt="ntp3"></p><p>NTP 走的是 UDP 的 123 port，透過新增規則的精靈即可簡單地設置完成。</p><p>但我們選擇裝逼一波，用命令提示字元來搞定：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">netsh advfirewall firewall add rule name=&quot;Allow NTP Server&quot; <span class="built_in">dir</span>=<span class="keyword">in</span> action=allow protocol=UDP localport=<span class="number">123</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>此時我們就可以在規則中看到我們開通的 port 了：</p><p><img src="/TMS-NTP-Windows/ntp4.png" alt="ntp4"></p><h2 id="client-端設定">client 端設定</h2><p>最後，我們到各個投影機伺服器的後台，把中控電腦的 IP 位置設為 NTP Server 即告完成。</p><p>你問為何不用特別設定走 UDP 或是特別指定埠號？因為 NTP 幾乎都走 UDP 123，就不費心讓你設定了。</p><p>以上！</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/Windows/">Windows</category>
      
      <category domain="https://shuaixin.cc/tags/TMS/">TMS</category>
      
      <category domain="https://shuaixin.cc/tags/NTP/">NTP</category>
      
      <category domain="https://shuaixin.cc/tags/NetTime/">NetTime</category>
      
      
      <comments>https://shuaixin.cc/TMS-NTP-Windows/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>讀書筆記：《致富心態》（金錢心理學）</title>
      <link>https://shuaixin.cc/The-Psychology-of-Money/</link>
      <guid>https://shuaixin.cc/The-Psychology-of-Money/</guid>
      <pubDate>Sat, 11 Oct 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p><img src="/The-Psychology-of-Money/zhifuxintai.png" alt="image-20251012172805545"></p><h3 id="沒有人真的是瘋子">沒有人真的是瘋子</h3><p>指數基金的歷史不到五十年、避險基金才差不多二十五年，房屋貸款、信用卡、汽車貸款都是二戰後才出現。美國401退休金賬戶在 1978 開始運行，台灣勞退則是 1986——都只是初生之犢。所以我們如果做出奇怪的財務決策，那也是在所難免。（而因為入不敷出，台灣在 2005 年改成了新制。）</p><p>比如說，美國人購買樂透的金額，超過電影、遊戲、音樂、體育、書籍的消費<strong>總額</strong>。並且，樂透的消費群體，主要集中在收入最低的那群人。書上的數據是，最低收入家庭平均每年花四百美元在買樂透，但四成的美國人遇到緊急事故時卻湊不出四百美元，所以整體而言，花四百美元買樂透的人跟湊不出四百美元的人，是同一群人。</p><p>但他們真的是瘋子嗎？如果我們用他們的角度來看，也許也沒那麼奇怪，買樂透可能是他們唯一能擁抱美夢的時刻了。</p><h3 id="運氣與風險">運氣與風險</h3><p>作者問諾貝爾經濟學獎得主 Robert Shiller 有什麼關於投資我們無法參透的道理，他認為是「<strong>運氣</strong>在投資成功的結果中所扮演的確切作用」。</p><p>鐵路巨擘康內留斯·范德比爾特（Cornelius Vanderbilt）成就斐然，但他幾乎每一筆商業交易都違反法律，不過成敗論英雄，我們現在稱讚他「大膽」。可是我們轉頭看看安隆（Enron），現在卻是一個負面教材。</p><p>2006 年祖克伯拒絕了 Yahoo 的高額收購，現在看來是一樁美談。但 Yahoo 在衰敗之前，也曾拒絕過微軟的高額收購要約，但現在看來就是個笑話。所以我們應該跟誰學習呢？沒人知道。</p><p>（BTW，要約跟邀約是不一樣的喲，要約是一旦 Yahoo 同意，該買賣在法律上直接生效）</p><p>對此，作者的建議是：留意自己讚揚、欣賞的對象，不要太聚焦於特定案例，要關注更廣泛適用的模式。</p><h3 id="貪得無厭">貪得無厭</h3><p>如果你已經擁有足以支應每一項合理需求的能力時，記住幾點：</p><p><strong>最困難的理財技能是在實現目標後停止繼續追逐</strong>、社會比較是問題的核心（總是有人比你更成功更有錢）、有許多事情無論潛在的獲益多龐大，依然不值得冒險。</p><h3 id="讓人混淆的複利">讓人混淆的複利</h3><p>此書書寫當下，巴菲特身價 845 億，但其中有 842 億是他在五十歲後才得到的。如果我們把他的成功都歸功於「精明的投資」，那就重點誤了。真正的關鍵是，他在「七十五年以來」都在進行精明的投資。</p><p>關於巴菲特的成功，書名應該要叫《這傢伙已經持續投資七十五年了》。而探討經濟跟交易的書，應該要出一本《Shut Up And Wait》。</p><h3 id="長尾效應？">長尾效應？</h3><blockquote><p>我已經幹這行三十年了。依我看，簡單的原理就是，有些案子會成功，有些不會。沒有必要反覆研究哪個會成功，只要繼續進行下一個案子就是了。</p><p>——Brad Pitt 的某次得獎感言</p></blockquote><p>我發現目前大家容易把「20-80法則」跟「長尾效應」混淆使用。雖然兩者都是從「冪律分佈」提煉出來的總結，但彼此強調的重點不同：「20-80法則」強調的是頭部的少部分創造的大面積，而「長尾效應」強調的是延綿不絕的、那雖然趨近於零但不等於零的尾部，其看似影響極小，但實際積分起來會發現總面積並不會輸給頭部。</p><p>這本書也犯了這個錯誤，其實這個章節敘述的是「20-80法則」，不是長尾效應。</p><p>不過實際上，原文的章節名稱是「Tails, You Win」，陸譯也比較精准地翻譯成「尾部的勝利」。</p><h3 id="金錢能給我們最好的紅利就是「掌控時間」">金錢能給我們最好的紅利就是「掌控時間」</h3><p>心理學家 Campbell 指出：與任何客觀生活條件相比，<strong>「掌控自己生活的感受」才是預測幸福感的可靠指標</strong>。</p><p>而金錢提供給我們最好的紅利是：在我們想要的時間、與我們想要的人一起做想做的事。</p><p>根據以上兩點，有錢就應該幸福。但根據美國的情形，看起來並不是這樣。</p><p>心理學中有所謂的對抗心理（reactance），就是當我們選擇權被剝奪時，會感到反感並產生反向行為動機（唱反調）。我們在<a href="https://shuaixin.cc/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98-%E5%8F%AA%E5%B7%A5%E4%BD%9C%E4%B8%8D%E4%B8%8A%E7%8F%AD%E7%9A%84%E8%87%AA%E4%B8%BB%E4%BA%BA%E7%94%9F/">《只工作不上班的自主人生》</a>看過這個概念，就是<strong>自主性</strong>被剝奪。</p><p>作者認為，這跟現代的工作性質變化有關。現代的工作性質偏向勞心、智力工作，比起以前的勞力工作可以在下班後徹底切換到下班模式，現在則很難在下班後切割。於是，我們在時間上的掌控感變低了，自主性被剝奪了，導致我們幸福感下降。</p><p>作者建議，這題解法不容易，但我們要認清重點：掌控你的時間，就是金錢付給你最高的紅利。</p><h3 id="跑車車主的謬論（陸譯：豪車悖論）">跑車車主的謬論（陸譯：豪車悖論）</h3><p>當我們看到一輛名車駛過，我們其實想的是「哇，如果我有這輛車，大家一定會覺得我很酷」，而不是「哇，開這輛車的傢伙真酷」。</p><p>弔詭的點就在這裡。你明明想借由名車來讓別人羨慕，但真實的情況是，其實群眾們根本不在意車主是誰，只是看著車並幻想著自己做在駕駛座上的畫面。</p><p>我們要理解一件事：我們可能「以為」自己想要擁有豪車名錶，但我們真正想得到的是別人的尊敬與羨慕。但事實上，豪車名錶並不能帶來尊重。羨慕的部分也不是羨慕「你」，而是你的「豪車」。</p><h3 id="「有錢」和「富有」">「有錢」和「富有」</h3><p>「富有」（wealthy）是在看不見的地方，看得到的是「有錢」（rich）。也因為這樣，「有錢」這個狀態被我們爭相吹捧，並學習「有錢」的行為模式。但作者提醒，我們要學的是富有。</p><p>相比現在大宗的建議，重投資而輕儲蓄（畢竟儲蓄難敵通膨的侵蝕），但作者強調存錢，因為存錢可以增加選擇權。</p><p>根據作者的概念，如果現金流帶來了「rich」，但沒有增加選擇權，那就不是「wealthy」。此時就可以 callback 回去前面關於幸福跟「掌控生活的感受」正相關的這個部分，如果你的「rich」反而讓你失去了對生活的掌控，那就純純地本末倒置。</p><h3 id="「合理」大於「理性」">「合理」大於「理性」</h3><p>原文的字眼分別為 Reasonable 跟 Rational。</p><p>合乎情理勝過絕對理性，何以可能？作者指出，合情理可以提高堅持率，變相增加成功率。例如，比起國際金融產品，我們可能更偏好買本土企業的股票，即使報酬率從理性上來看比較差。但當波動發生時，因為我們瞭解我們的投資內容，從而有信心上的加持，比較不容易隨意拋售，帶來了後續反敗為勝的可能（也通常會）。</p><p>試想，其實很多投資的原理都是把錢交給不認識的陌生人去運用管理，要是對陌生人的熟悉度有助於強化對這些人的支持，那就是「合理」的做法。</p><p>當然這不僅限理財方面，找一個效果不是最佳但自己喜歡的、能堅持的運動，也是同理。</p><p>所以作者並不是提倡只儲蓄不投資，而是每個人適合不同的理財方式。作者給出的建議是：<strong>使用可以幫助你一夜好眠的方式理財</strong>。</p><h3 id="沒有白吃的午餐">沒有白吃的午餐</h3><p>試想你現在想要一台車。此時，你可以花大錢買一輛新車、花小錢買一輛二手車、或乾脆直接偷一輛——大部分人不會選擇用偷的，因為我們不想承擔被抓後的風險。</p><p>試想你要投資。此時，你可以選擇接受波動性與動蕩（較大代價）、選擇不缺性較低但報酬較低的資產（較小代價），或你可以試圖化身竊車大盜——試著一邊賺進報酬，一邊避開波動。</p><p>為什麼作為消費者，我們知道天下沒有白吃的午餐，願意為了代價付費，但作為投資者，卻想用「偷」的呢？作者指出，消費時我們可以看到標價，凡事皆有其價格，我們欣然接受；但投資時，我們看到的「下跌」感覺就像是被「懲罰」了，就像是我們做錯事一般。</p><p>作者提醒，我們要把市場波動看做手續費，而非罰款。</p><h3 id="Other-Good-Points">Other Good Points</h3><ul><li>經濟學家 Bhashkar Mazumder 的研究顯示，手足之間的「收入相關性」比「身高相關性」或是「體重相關性」還要來得高。</li><li>根據聯準會統計，27%大學畢業生投入了非本科相關的職缺、29%留在家中的父母（家庭主夫、婦）有大學學位。</li></ul>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98/">讀書筆記</category>
      
      
      <category domain="https://shuaixin.cc/tags/4%E9%A1%86%E6%98%9F%E6%9B%B8%E7%B1%8D/">4顆星書籍</category>
      
      <category domain="https://shuaixin.cc/tags/%E9%87%91%E8%9E%8D/">金融</category>
      
      
      <comments>https://shuaixin.cc/The-Psychology-of-Money/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>透過 GPIO 來控制 BrightSign 播放器</title>
      <link>https://shuaixin.cc/BrightSign-GPIO/</link>
      <guid>https://shuaixin.cc/BrightSign-GPIO/</guid>
      <pubDate>Mon, 06 Oct 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>本文我們來實作可以進行互動的螢幕。怎麼個互動法？這次以兩種為例：</p><ul><li>透過 RFID ，刷卡感應後，讓本來循環播放 A 影片的螢幕，改為播放 B 影片。</li><li>透過超聲波回聲判斷，人靠近（或手懸浮在感應區域）時，讓本來循環播放 A 影片的螢幕，改為播放 B 影片。</li></ul><p>為了達到以上效果，我們這次需要的設備除了顯示器以外還需要：</p><ul><li>數位看板播放器（Digital Signage Players），此處我們選用 BrightSign 的 HD225。</li><li>感應 RFID 並回傳訊號的傳感設備。此處我們不買現成產品，選用微控制器 ESP-WROOM-32 + RFID 傳感模塊 MFRC522 來土炮一個。</li><li>感應超聲波並回傳訊號的傳感設備。此處我們也不買現成產品，選用微控制器 NodeMCU + 超聲波傳感模塊 HCSR04 來土炮一個。</li></ul><h2 id="RFID-互動螢幕">RFID 互動螢幕</h2><p>我們的邏輯很簡單：RFID 模塊感應讀取輸入，把 ID 傳入 ESP-WROOM-32 判斷，如果是我們要的 ID，則輸出高電平訊號。當 HD225 讀到高電平訊號傳入，觸發後續影像內容。</p><p>首先來搞定 RFID 的部分。我們 ESP-WROOM-32 使用 Arduino IDE 來進行編譯跟燒錄，所以有幾個前置準備事項：</p><ul><li>在 Preference 中的 Additional boards manager URLs 中填入 <code>https://dl.espressif.com/dl/package_esp32_index.json</code><br><img src="/BrightSign-GPIO/brightsign6.jpg" alt="brightsign6"></li><li>Board Manager 搜尋 esp32，找到 <code>esp32 by Espressif Systems</code>，安裝它<br><img src="/BrightSign-GPIO/brightsign5.jpg" alt="brightsign5"></li><li>Board 我們選擇 <code>ESP32 Dev Module</code><br><img src="/BrightSign-GPIO/brightsign3.jpg" alt="brightsign3"></li><li>Library 搜尋 MFRC522，找到 <code>MFRC522 by GithubCommunity</code>，安裝它</li></ul><p>然後找出我們這顆控制器的腳位圖：</p><p><img src="/BrightSign-GPIO/wroom-32.webp" alt="wroom-32"></p><p>對照腳位，把 MFRC522 接上：</p><ul><li>SCK 接入 GPIO18</li><li>MOSI 跟 MISO 分別接入 GPIO23、GPIO19</li><li>IRQ 我們此例用不到，不接</li><li>3.3V 跟 GND 按圖接入</li><li>SDA 與 RST 可隨選</li></ul><p>然後我們就可以開始編程了。程式內容請參考：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;SPI.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;MFRC522.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> SS_PIN 5     <span class="comment">// SDA</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> RST_PIN 15   <span class="comment">// RST</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> LED 25</span></span><br><span class="line"></span><br><span class="line"><span class="function">MFRC522 <span class="title">mfrc522</span><span class="params">(SS_PIN, RST_PIN)</span></span>;  <span class="comment">// 建立 RFID 物件</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">setup</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  Serial.<span class="built_in">begin</span>(<span class="number">9600</span>);</span><br><span class="line">  SPI.<span class="built_in">begin</span>();              <span class="comment">// 啟動 SPI</span></span><br><span class="line">  mfrc<span class="number">522.</span><span class="built_in">PCD_Init</span>();       <span class="comment">// 初始化 RC522</span></span><br><span class="line">  <span class="built_in">pinMode</span>(LED, OUTPUT);</span><br><span class="line">  Serial.<span class="built_in">println</span>(<span class="string">&quot;Start reading!&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">loop</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="comment">// 檢查是否有新卡片</span></span><br><span class="line">  <span class="keyword">if</span> (!mfrc<span class="number">522.</span><span class="built_in">PICC_IsNewCardPresent</span>()) <span class="keyword">return</span>;</span><br><span class="line">  <span class="comment">// 檢查是否能讀到卡</span></span><br><span class="line">  <span class="keyword">if</span> (!mfrc<span class="number">522.</span><span class="built_in">PICC_ReadCardSerial</span>()) <span class="keyword">return</span>;</span><br><span class="line"></span><br><span class="line">  String uidStr = <span class="string">&quot;&quot;</span>;</span><br><span class="line">  <span class="keyword">for</span> (byte i = <span class="number">0</span>; i &lt; mfrc<span class="number">522.</span>uid.size; i++) &#123;</span><br><span class="line">    <span class="keyword">if</span> (mfrc<span class="number">522.</span>uid.uidByte[i] &lt; <span class="number">0x10</span>) uidStr += <span class="string">&quot;0&quot;</span>;  <span class="comment">// 補0對齊</span></span><br><span class="line">   uidStr += <span class="built_in">String</span>(mfrc<span class="number">522.</span>uid.uidByte[i], HEX);</span><br><span class="line">  &#125;</span><br><span class="line">  uidStr.<span class="built_in">toUpperCase</span>();  <span class="comment">// 讓輸出一致是大寫</span></span><br><span class="line"></span><br><span class="line">  Serial.<span class="built_in">print</span>(<span class="string">&quot;卡片 UID：&quot;</span>);</span><br><span class="line">  Serial.<span class="built_in">println</span>(uidStr);</span><br><span class="line">  <span class="keyword">if</span>(uidStr == <span class="string">&quot;445A478A&quot;</span>)&#123;</span><br><span class="line">    <span class="built_in">digitalWrite</span>(LED, HIGH);</span><br><span class="line">    <span class="built_in">delay</span>(<span class="number">1000</span>);</span><br><span class="line">    <span class="built_in">digitalWrite</span>(LED, LOW);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">// 停用卡片</span></span><br><span class="line">  mfrc<span class="number">522.</span><span class="built_in">PICC_HaltA</span>();</span><br><span class="line">  <span class="built_in">delay</span>(<span class="number">500</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>其中，<code>LED</code> 的腳位在接入 HD225 之前就是接著 LED 來進行測試。當 LED 點亮，就表示該腳位輸出了 3.3v 高電平。後來就懶得改變數名稱了，看得懂就好 :)</p><p>傳感器完成後，我們將該輸出腳位接到 HD225 的 GPIO 上。（為了這個需要，我們必須另外準備 pitch 為 3.5mm 的端子座。官方建議買 4 或 6 pin 的，因為 12 pin 會很難拆）除了輸出腳位以外，記得還要共地，所以 ESP 的 GND 也要接一條到 HD225 的 GND。</p><p>最後我們到 HD225 的控制後台 BrightAuthor:connected 進行設定。因為我把上述 LED 腳位接入 HD225 的第六 pin，根據對應，我們要設定 BUTTON 3。腳位請參考：</p><p><img src="/BrightSign-GPIO/brightsign2.jpg" alt="brightsign2"></p><p>將 BUTTON 3 的 Trigger Event On Button 設定為 Down，就會在高電平的時候觸發該判斷。至於為什麼他要預設你的 GPIO 接的是按鈕，我也覺得這樣頗誤導人。</p><p><img src="/BrightSign-GPIO/brightsign1.jpg" alt="brightsign1"></p><p>至此，設置完畢！</p><h2 id="超聲波互動螢幕">超聲波互動螢幕</h2><p>一樣先捋一捋邏輯：超聲波模塊持續感應是否有物體靠近，當有東西靠近到足夠距離，請 NodeMCU 送出一個高電平訊號。當 HD225 讀到高電平訊號傳入，觸發後續影像內容。</p><p>首先來搞定超聲波測距的部分。我們 NodeMCU 一樣使用 Arduino IDE 來進行編譯跟燒錄，所以有幾個前置準備事項：</p><ul><li>在 Preference 中的 Additional boards manager URLs 中填入 <code>http://arduino.esp8266.com/stable/package_esp8266com_index.json</code></li><li>Board Manager 安裝 <code>esp8266 by ESP8266 community</code></li><li>Board 我們選擇 <code>NodeMCU v1.0</code></li><li>Library 裝<a href="https://github.com/jeremylindsayni/Bifrost.Arduino.Sensors.HCSR04">Bifrost.Arduino.Sensors.HCSR04</a></li></ul><p>接線與程式部分：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;hcsr04.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> TRIG_PIN D2</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ECHO_PIN D1</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> LED D5</span></span><br><span class="line"></span><br><span class="line"><span class="function">HCSR04 <span class="title">hcsr04</span><span class="params">(TRIG_PIN, ECHO_PIN, <span class="number">20</span>, <span class="number">4000</span>)</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">setup</span><span class="params">()</span></span>&#123;</span><br><span class="line">    Serial.<span class="built_in">begin</span>(<span class="number">9600</span>);</span><br><span class="line">    <span class="built_in">pinMode</span>(LED, OUTPUT);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">loop</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="type">int</span> distance = hcsr<span class="number">04.</span><span class="built_in">distanceInMillimeters</span>();</span><br><span class="line">Serial.<span class="built_in">println</span>(distance);</span><br><span class="line">  <span class="keyword">if</span>(distance&lt;<span class="number">50</span>)&#123;</span><br><span class="line">    <span class="built_in">digitalWrite</span>(LED, HIGH);</span><br><span class="line">  &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">    <span class="built_in">digitalWrite</span>(LED, LOW);</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="built_in">delay</span>(<span class="number">250</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>其中的 <code>LED</code> 比照前例，一開始用 LED 測試，後來直接作為輸出，跟 HD225 溝通。</p><p>控制後台 BrightAuthor:connected 的設定跟前例的邏輯完全一樣，注意腳位不要搞錯就好。</p><p>以上！</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/ESP32/">ESP32</category>
      
      <category domain="https://shuaixin.cc/tags/BrightSign/">BrightSign</category>
      
      <category domain="https://shuaixin.cc/tags/GPIO/">GPIO</category>
      
      <category domain="https://shuaixin.cc/tags/ESP8266/">ESP8266</category>
      
      <category domain="https://shuaixin.cc/tags/NodeMCU/">NodeMCU</category>
      
      <category domain="https://shuaixin.cc/tags/WROOM/">WROOM</category>
      
      
      <comments>https://shuaixin.cc/BrightSign-GPIO/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>容器化實務操作，以 Taiko-Web 為例</title>
      <link>https://shuaixin.cc/Docker-Taiko-Web/</link>
      <guid>https://shuaixin.cc/Docker-Taiko-Web/</guid>
      <pubDate>Fri, 15 Aug 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>本篇我們要把一個稍微陳舊的項目 Docker 化，方便沒有 Linux 伺服器的使用者們也可以快速運行服務。</p><p>此處我們選用的服務是 2011 就推出，但在 2020 以降才開始紅起來，但也因此被萬代版權方盯上，後來被全網封殺掉的 bui 製作的 Taiko Web。</p><p>但開源的力量是無比強大，我早已 fork 了一份備份出來，所以依然保有其<a href="https://github.com/Shuai-Xin/taiko-bui-backup">原始碼</a>。開源社群的迷人之處就在這裡，你說是吧。</p><p>該項目是一個大部分使用 JavaScript 刻出來的網頁版太鼓達人模擬器，其透過前端技術就可以讓用戶流暢地遊玩，十分方便，令人印象深刻。但今天我們不討論其服務內容，本篇我們將著重在<strong>將一個運行在 Linux 上的服務給容器化——以便用戶快速自行架設服務，或甚至跨平台運行——的過程</strong>。</p><p>各位可以一邊對照原作者的 <a href="https://github.com/Shuai-Xin/taiko-bui-backup/blob/main/setup.md">manual setup</a>，一邊看我們 dockerfile 的對應做法，方便理解。那我們開始咯。</p><h2 id="安裝過程與重新打包">安裝過程與重新打包</h2><h3 id="Installing-the-requirements">Installing the requirements</h3><p>原始的安裝方式為：</p><blockquote><p>If you have not already done so, install the above-listed software on your server. The following commands were ran on a Debian 10 system, you may need to alter them depending on your OS.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">su</span><br><span class="line">apt update</span><br><span class="line">apt install git python3-pip nginx</span><br></pre></td></tr></table></figure><p>It is recommended to install these optional packages as well.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install ffmpeg redis supervisor python3-virtualenv</span><br></pre></td></tr></table></figure></blockquote><p>我們的做法依樣畫葫蘆，就是安裝依賴：</p><figure class="highlight dockerfile"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">FROM</span> debian:bookworm</span><br><span class="line"></span><br><span class="line"><span class="keyword">ENV</span> DEBIAN_FRONTEND=noninteractive</span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> apt-get update &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    apt-get install -y --no-install-recommends \</span></span><br><span class="line"><span class="language-bash">    git python3 python3-pip python3-virtualenv \</span></span><br><span class="line"><span class="language-bash">    nginx ffmpeg redis-server gnupg\</span></span><br><span class="line"><span class="language-bash">    supervisor curl &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    <span class="built_in">rm</span> -rf /var/lib/apt/lists/*</span></span><br></pre></td></tr></table></figure><p>但可以注意到我們不需要 <code>sudo</code>，因為在 docker 的環境裡面我們本來就是 root。</p><h3 id="Installing-MongoDB">Installing MongoDB</h3><p>原始的安裝方式為：</p><blockquote><p>Consult the <a href="https://web.archive.org/web/20221001162951/https://docs.mongodb.com/manual/installation/">MongoDB installation tutorial</a> for your operating system to install MongoDB Community Edition on your system.</p></blockquote><p>簡單來說就是 MongoDB 並不能用 <code>apt-get</code> 的方式來安裝，所以大部分會建議自己去官方那邊慢慢照著指引安裝。近來這種狀況好像越來越常見了，我個人是不太樂見這樣的走勢啦。</p><p>那此時我們如何應對呢？我們這樣做：</p><figure class="highlight dockerfile"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">RUN</span><span class="language-bash"> curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \</span></span><br><span class="line"><span class="language-bash">    gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> <span class="built_in">echo</span> <span class="string">&quot;deb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main&quot;</span> \</span></span><br><span class="line"><span class="language-bash">    | <span class="built_in">tee</span> /etc/apt/sources.list.d/mongodb-org-8.0.list</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> apt-get update &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    apt-get install -y mongodb-org &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    <span class="built_in">rm</span> -rf /var/lib/apt/lists/*</span></span><br></pre></td></tr></table></figure><p>因為我們 docker 的環境指定了 debian:bookworm，所以我們從 MongoDB 官方那邊找到對應的安裝方式，把指令全部移植過來即是。</p><h3 id="Obtaining-taiko-web">Obtaining taiko-web</h3><p>原始做法：</p><blockquote><p>Next, clone the taiko-web repository into a directory of your choosing.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">su -c &#x27;mkdir -p /srv/taiko-web&#x27;</span><br><span class="line">su -c &#x27;chown $USER /srv/taiko-web&#x27;</span><br><span class="line">git clone https://github.com/bui/taiko-web.git /srv/taiko-web</span><br></pre></td></tr></table></figure><p>All the commands you run from now on must be ran inside the taiko-web directory, so change your working directory.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cd /srv/taiko-web</span><br></pre></td></tr></table></figure><p>Run the following commands to install requirements and set default configurations.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">pip3 install -r requirements.txt</span><br><span class="line">tools/get_version.sh</span><br><span class="line">cp tools/hooks/* .git/hooks/</span><br><span class="line">cp config.example.py config.py</span><br></pre></td></tr></table></figure><p>Edit <a href="http://config.py">config.py</a> in a text editor to configure taiko-web for your system.</p></blockquote><p>我們的做法：</p><figure class="highlight dockerfile"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">RUN</span><span class="language-bash"> <span class="built_in">mkdir</span> -p /srv/taiko-web /var/log/taiko-web /data/db</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> git <span class="built_in">clone</span> https://github.com/Shuai-Xin/taiko-bui-backup.git /srv/taiko-web</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> <span class="built_in">cp</span> /srv/taiko-web/config.example.py /srv/taiko-web/config.py</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> pip3 install --break-system-packages --no-cache-dir -r /srv/taiko-web/requirements.txt</span></span><br></pre></td></tr></table></figure><p>幾點差異：</p><ul><li>因為在 docker 中我們是 root，所以不用 <code>chown</code> 來更改權限。</li><li>bui 大大的 repo 已經被封殺了，所以改從我那邊 clone 檔案。</li><li>我們在 pip3 install 中加了 <code>--break-system-packages</code> 的 flag，因為反正我們是專用的環境，沒有在系統管乾不乾淨的，所以套件直接裝在系統層級，不走 venvs。（而因為 <a href="https://peps.python.org/pep-0668/">PEP668</a>，你若不加這個 flag 他會報錯跟你提醒）</li></ul><h3 id="nginx-setup">nginx setup</h3><p>原始做法：</p><blockquote><p>Let’s set up nginx now. Copy the example virtual host file <code>tools/nginx.conf</code> to <code>/etc/nginx/conf.d/taiko-web.conf</code>, changing the <code>server_name</code> and <code>root</code> statements as required.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">&gt;su -</span><br><span class="line">&gt;cp /srv/taiko-web/tools/nginx.conf /etc/nginx/conf.d/taiko-web.conf</span><br></pre></td></tr></table></figure><p>Next, open <code>/etc/nginx/nginx.conf</code> and comment out the line which displays the default nginx page.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt;include /etc/nginx/sites-enabled/*;</span><br></pre></td></tr></table></figure><p>becomes</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt;#include /etc/nginx/sites-enabled/*;</span><br></pre></td></tr></table></figure><p>Then, open <code>/etc/nginx/mime.types</code> and add this line near the bottom:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt;application/wasm wasm;</span><br></pre></td></tr></table></figure><p>Once you’ve configured the files, reload nginx (as root). Assuming everything was configured correctly, you shouldn’t get any errors.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt;nginx -s reload</span><br></pre></td></tr></table></figure><p>If you try to access your simulator now, you should get a 502 error. That’s because we haven’t started the app server yet, so let’s do that!</p></blockquote><p>我們的做法：</p><figure class="highlight dockerfile"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">RUN</span><span class="language-bash"> <span class="built_in">cp</span> /srv/taiko-web/tools/nginx.conf /etc/nginx/conf.d/taiko-web.conf &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    sed -i <span class="string">&#x27;s/include \/etc\/nginx\/sites-enabled\/\*;/#include \/etc\/nginx\/sites-enabled\/\*;/&#x27;</span> /etc/nginx/nginx.conf</span></span><br></pre></td></tr></table></figure><p>本來手動修改 config 的流程，我們用 <code>sed</code> 來自動修改。</p><h3 id="taiko-web-setup">taiko-web setup</h3><p>原始：</p><blockquote><p>We’ll first create virtual environments for Python and install the required modules.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">virtualenv -p python3 /srv/taiko-web/.venv</span><br><span class="line">source /srv/taiko-web/.venv/bin/activate</span><br><span class="line">pip install -r /srv/taiko-web/requirements.txt</span><br><span class="line">deactivate</span><br></pre></td></tr></table></figure><p>It is recommended that you use a process manager such as <a href="https://web.archive.org/web/20221001162951/http://supervisord.org/">Supervisor</a> to keep taiko-web running at all times.</p><p>Copy the example configuration file from <code>tools/supervisor.conf</code> to <code>/etc/supervisor/conf.d/taiko-web.conf</code>, adjusting it as needed.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">su</span><br><span class="line">mkdir -p /var/log/taiko-web</span><br><span class="line">cp tools/supervisor.conf /etc/supervisor/conf.d/taiko-web.conf</span><br></pre></td></tr></table></figure><p>Then, restart Supervisor (as root).</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">su -</span><br><span class="line">service supervisor restart</span><br></pre></td></tr></table></figure><p>And you can check the status of supervisor with this command, to see if anything went wrong (also as root).</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">supervisorctl status</span><br></pre></td></tr></table></figure><p>We’re almost there! taiko-web has been installed and when you start the database you will be able to run it too, but there will be no default songs. Let’s fix that!</p></blockquote><p>可以注意到這裡開了一個 virtualenv，但我們 docker 環境不管那麼多，所以不理他，我們直接運行：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">RUN printf &quot;[supervisord]\nnodaemon=true\n\</span><br><span class="line">[program:mongod]\ncommand=mongod --bind_ip_all\nautorestart=true\n\</span><br><span class="line">[program:redis]\ncommand=redis-server\nautorestart=true\n\</span><br><span class="line">[program:nginx]\ncommand=nginx -g &#x27;daemon off;&#x27;\nautorestart=true\n\</span><br><span class="line">[program:taiko_app]\ndirectory=/srv/taiko-web\ncommand=gunicorn -b 127.0.0.1:34801 app:app\nautorestart=true\n\</span><br><span class="line">[program:taiko_server]\ndirectory=/srv/taiko-web\ncommand=python3 server.py 34802\nautorestart=true&quot; &gt; /etc/supervisord.conf</span><br><span class="line"></span><br><span class="line">EXPOSE 80</span><br><span class="line"></span><br><span class="line">CMD [&quot;/usr/bin/supervisord&quot;, &quot;-c&quot;, &quot;/etc/supervisord.conf&quot;]</span><br></pre></td></tr></table></figure><h2 id="打包結果與部署">打包結果與部署</h2><p>綜合以上，我們的 dockerfile 就長這樣：</p><figure class="highlight dockerfile"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">FROM</span> debian:bookworm</span><br><span class="line"></span><br><span class="line"><span class="keyword">ENV</span> DEBIAN_FRONTEND=noninteractive</span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> apt-get update &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    apt-get install -y --no-install-recommends \</span></span><br><span class="line"><span class="language-bash">    git python3 python3-pip python3-virtualenv \</span></span><br><span class="line"><span class="language-bash">    nginx ffmpeg redis-server gnupg\</span></span><br><span class="line"><span class="language-bash">    supervisor curl &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    <span class="built_in">rm</span> -rf /var/lib/apt/lists/*</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \</span></span><br><span class="line"><span class="language-bash">    gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> <span class="built_in">echo</span> <span class="string">&quot;deb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main&quot;</span> \</span></span><br><span class="line"><span class="language-bash">    | <span class="built_in">tee</span> /etc/apt/sources.list.d/mongodb-org-8.0.list</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> apt-get update &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    apt-get install -y mongodb-org &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    <span class="built_in">rm</span> -rf /var/lib/apt/lists/*</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> <span class="built_in">mkdir</span> -p /srv/taiko-web /var/log/taiko-web /data/db</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> git <span class="built_in">clone</span> https://github.com/Shuai-Xin/taiko-bui-backup.git /srv/taiko-web</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> <span class="built_in">cp</span> /srv/taiko-web/config.example.py /srv/taiko-web/config.py</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> pip3 install --break-system-packages --no-cache-dir -r /srv/taiko-web/requirements.txt</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> <span class="built_in">cp</span> /srv/taiko-web/tools/nginx.conf /etc/nginx/conf.d/taiko-web.conf &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    sed -i <span class="string">&#x27;s/include \/etc\/nginx\/sites-enabled\/\*;/#include \/etc\/nginx\/sites-enabled\/\*;/&#x27;</span> /etc/nginx/nginx.conf</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> <span class="built_in">printf</span> <span class="string">&quot;[supervisord]\nnodaemon=true\n\</span></span></span><br><span class="line"><span class="string"><span class="language-bash">[program:mongod]\ncommand=mongod --bind_ip_all\nautorestart=true\n\</span></span></span><br><span class="line"><span class="string"><span class="language-bash">[program:redis]\ncommand=redis-server\nautorestart=true\n\</span></span></span><br><span class="line"><span class="string"><span class="language-bash">[program:nginx]\ncommand=nginx -g &#x27;daemon off;&#x27;\nautorestart=true\n\</span></span></span><br><span class="line"><span class="string"><span class="language-bash">[program:taiko_app]\ndirectory=/srv/taiko-web\ncommand=gunicorn -b 127.0.0.1:34801 app:app\nautorestart=true\n\</span></span></span><br><span class="line"><span class="string"><span class="language-bash">[program:taiko_server]\ndirectory=/srv/taiko-web\ncommand=python3 server.py 34802\nautorestart=true&quot;</span> &gt; /etc/supervisord.conf</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">EXPOSE</span> <span class="number">80</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">CMD</span><span class="language-bash"> [<span class="string">&quot;/usr/bin/supervisord&quot;</span>, <span class="string">&quot;-c&quot;</span>, <span class="string">&quot;/etc/supervisord.conf&quot;</span>]</span></span><br></pre></td></tr></table></figure><p>部署的方式就非常簡單了，只要在有 docker 的環境中，將以上檔案存檔為 <code>Dockerfile</code>（記得大寫），並在該資料夾中執行 <code>docker build -t taiko-web .</code>，上述的步驟就全部幫你做好，打包成一個 image，並且只要你是 x86 架構的電腦，就都能成。</p><p>至於你問 ARM 架構為什麼不行？主要是 MongoDB 的問題，因為 docker 指定了 debian，所以 Mongo 就給你 x86 的版本的檔案。那是不是 Mongo 開另一個 container 就可以？是這樣的沒錯，因為 MongoDB 有提供 ARM 架構的 image，這部分可以留給讀者作為練習。（欸）</p><p>最後，我們 <code>docker run -d -p 80:80 --name taiko-web taiko-web</code> 來運行這個 image，伺服器就此上線。此時就可以用該設備訪問 <code>http://localhost</code>，或是用同內網的設備使用瀏覽器訪問 <code>http://運行docker的設備內網ip位置</code>。</p><p>以上！</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/Self-Hosting/">Self Hosting</category>
      
      
      <category domain="https://shuaixin.cc/tags/Self-Hosting/">Self Hosting</category>
      
      <category domain="https://shuaixin.cc/tags/Docker/">Docker</category>
      
      <category domain="https://shuaixin.cc/tags/Taiko/">Taiko</category>
      
      
      <comments>https://shuaixin.cc/Docker-Taiko-Web/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>自架推播通知伺服器：ntfy</title>
      <link>https://shuaixin.cc/ntfy/</link>
      <guid>https://shuaixin.cc/ntfy/</guid>
      <pubDate>Sat, 28 Jun 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>原本我的 NetAlertX 跟 Uptime Kuma 使用的通知方式都是透過 gmail，用 SMTP 的方式，自己寄信給自己。但後來發現，收件箱因為這樣而充滿了一堆通知，十分雜亂也不方便管理。</p><p>所以此篇我們要來架設 ntfy，並將 NetAlertX 跟 Uptime Kuma 的通知方式設定成 ntfy，最終透過 ntfy 的 ios app，從 iPhone 接收通知。</p><h3 id="安裝-ntfy">安裝 ntfy</h3><p>此處我們採用 docker compose 的安裝方式，yaml 如下：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">ntfy:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">binwiederhier/ntfy</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">ntfy</span></span><br><span class="line">    <span class="attr">command:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">serve</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">TZ:</span> <span class="string">Asia/Taipei</span>    <span class="comment"># optional: set desired timezone</span></span><br><span class="line">      <span class="attr">NTFY_BEHIND_PROXY:</span> <span class="literal">true</span></span><br><span class="line">      <span class="attr">NTFY_BASE_URL:</span> <span class="string">https://your.ntfy.domain</span></span><br><span class="line">      <span class="attr">NTFY_UPSTREAM_BASE_URL:</span> <span class="string">https://ntfy.sh</span></span><br><span class="line">    <span class="attr">user:</span> <span class="number">1000</span><span class="string">:1000</span> <span class="comment"># optional: replace with your own user/group or uid/gid</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/var/cache/ntfy:/var/cache/ntfy</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/etc/ntfy:/etc/ntfy</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">80</span><span class="string">:80</span></span><br><span class="line">    <span class="attr">healthcheck:</span> <span class="comment"># optional: remember to adapt the host:port to your environment</span></span><br><span class="line">        <span class="attr">test:</span> [<span class="string">&quot;CMD-SHELL&quot;</span>, <span class="string">&quot;wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo &#x27;\&quot;healthy\&quot;\\s*:\\s*true&#x27; || exit 1&quot;</span>]</span><br><span class="line">        <span class="attr">interval:</span> <span class="string">60s</span></span><br><span class="line">        <span class="attr">timeout:</span> <span class="string">10s</span></span><br><span class="line">        <span class="attr">retries:</span> <span class="number">3</span></span><br><span class="line">        <span class="attr">start_period:</span> <span class="string">40s</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br></pre></td></tr></table></figure><p>其中注意：</p><ul><li><code>NTFY_BEHIND_PROXY: true</code> ：我們後續會透過 proxy manager 來反向代理，所以這個需要特別設 true</li><li><code>NTFY_BASE_URL: https://your.ntfy.domain</code>：這裡就是我們 ios app 從外網接收通知用的 domain（我們出門在外也要收得到通知對吧）</li><li><code>NTFY_UPSTREAM_BASE_URL: https://ntfy.sh</code>：因為 iOS 在「推播通知」的設計原則上，app 通常不允許常駐在後面等通知，除非使用 <strong>APNs (Apple Push Notification Service)</strong> 來進行系統層級的喚醒。但我們自架的 server 並沒有 apple 認證，所以如果不透過 <a href="http://ntfy.sh">ntfy.sh</a> 進行 APN 的推送，我們會延遲很久很久才收到通知。所以此處務必加上這個。但當然，因為這樣，我們的服務其實還是依賴了其他 server。</li></ul><h3 id="設定反向代理">設定反向代理</h3><p>我們透過 Nginx Proxy Manager 來進行反向代理：</p><p><img src="/ntfy/image-20250629192242550.png" alt="image-20250629192242550"></p><ul><li>其中 Domain Names 就是後續 iso app 要使用的網域</li><li>Scheme 要用 http，因為內網裡面就是走 http</li><li>為了實時刷新，Websockets 也要打開</li></ul><h3 id="NetAlertX-設定">NetAlertX 設定</h3><p><img src="/ntfy/image-20250629192714164.png" alt="image-20250629192714164"></p><p>注意因為 NetAlertX 跟 ntfy 一樣都在內網環境中，所以在 NTFY host URL 的部分要填入的是走 http 的 ntfy 內網位置。</p><h3 id="Uptime-Kuma-設定">Uptime Kuma 設定</h3><p><img src="/ntfy/image-20250629192909688.png" alt="image-20250629192909688"></p><p>此處同理。</p><h3 id="iPhone-設定">iPhone 設定</h3><p>iPhone 部分就簡單了，app store 下載安裝 ntfy 後：</p><ul><li>Default server 填入我們一開始設定在 <code>NTFY_BASE_URL</code> 的外網網域</li><li>訂閱你的 topic</li></ul><p>收工！</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/Self-Hosting/">Self Hosting</category>
      
      
      <category domain="https://shuaixin.cc/tags/Self-Hosting/">Self Hosting</category>
      
      <category domain="https://shuaixin.cc/tags/ntfy/">ntfy</category>
      
      <category domain="https://shuaixin.cc/tags/NetAlertX/">NetAlertX</category>
      
      <category domain="https://shuaixin.cc/tags/Uptime-Kuma/">Uptime Kuma</category>
      
      
      <comments>https://shuaixin.cc/ntfy/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>台語小筆記：留意輕聲，詞義差很多</title>
      <link>https://shuaixin.cc/Taiwanese-2-Neutral-Tone/</link>
      <guid>https://shuaixin.cc/Taiwanese-2-Neutral-Tone/</guid>
      <pubDate>Mon, 23 Jun 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>台語作為一門標準的聲調語言（tone language），不同的聲調會有不同的意思表達。</p><p>上次回外婆家被催婚，其中就有一句：</p><blockquote><p><code>senn nn̄g-ê--ah gín-ná</code>（生兩個啊gín仔）</p></blockquote><p>我就說好啦，不要急，但<strong>為什麼是兩個</strong>？才知道此處的 <code>nn̄g-ê--ah</code> 跟 <code>nn̄g-ê</code> 的意思可差多了。前者是「兩三個」的意思，而後者是切確的「兩個」。</p><p>讀音上，前者 <code>nn̄g-ê--ah</code> 的 ê 讀輕聲，後者 <code>nn̄g-ê</code> 的 ê 則讀五聲。</p><p>所以如果有人跟你說：</p><blockquote><p><code>lâi  lim nn̄g pue</code>（來喝兩杯）</p></blockquote><p>這裡如果遇到 <code>nn̄g--pue</code>（三聲輕聲）就是喊你來喝個兩三杯，幾杯不重要。但如果遇到的是 <code>nn̄g-pue</code>（三聲一聲），那就真的是指「兩杯」了。</p><h2 id="其他輕聲改變詞義的例子">其他輕聲改變詞義的例子</h2><h4 id="買無">買無</h4><ul><li><code>bué-bô</code>（買不到）</li><li><code>bué--bô</code>（買不買？）</li></ul><h4 id="驚死">驚死</h4><ul><li><code>kiann-sí</code>（害怕死亡）</li><li><code>kiann--sí</code>（嚇死）</li></ul><h4 id="有影無">有影無</h4><ul><li><code>ū-iánn-bô</code>（真的沒有）</li><li><code>ū-iánn--bô</code>（真的假的？）</li></ul>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E8%AA%9E%E8%A8%80%E7%AD%86%E8%A8%98/">語言筆記</category>
      
      <category domain="https://shuaixin.cc/categories/%E8%AA%9E%E8%A8%80%E7%AD%86%E8%A8%98/%E5%8F%B0%E8%AA%9E%E7%AD%86%E8%A8%98/">台語筆記</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E5%8F%B0%E8%AA%9E/">台語</category>
      
      <category domain="https://shuaixin.cc/tags/%E5%8F%B0%E7%BE%85/">台羅</category>
      
      <category domain="https://shuaixin.cc/tags/%E8%AE%8A%E8%AA%BF/">變調</category>
      
      <category domain="https://shuaixin.cc/tags/%E8%81%B2%E8%AA%BF/">聲調</category>
      
      
      <comments>https://shuaixin.cc/Taiwanese-2-Neutral-Tone/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>智能家居 EP11：用反向代理取代端口轉發（NPM+DuckDNS）</title>
      <link>https://shuaixin.cc/HA-11-Reverse-Proxy/</link>
      <guid>https://shuaixin.cc/HA-11-Reverse-Proxy/</guid>
      <pubDate>Fri, 23 May 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>我們在 <a href="https://shuaixin.cc/HA-X-Remote/">智能家居 EP9：利用DDNS、通訊埠轉發進行遠端控制</a> 已經透過 Port Forwarding 的方法實現外網訪問，可以成功在外面控制家中設備。</p><p>但實際上，在網路安全的領域中，端口轉發意味著 port 的暴露，其實大家都看得到你有哪些 port 是開的。例如，我用外網透過 nmap 來掃描我家可以看到：</p><p><img src="/HA-11-Reverse-Proxy/nmap.png" alt="nmap"></p><p>開放的 port 那是一個清清楚楚明明白白。</p><p>對此，我們使用 Nginx Proxy Manager （下稱 NPM）來替我們進行反向代理，減少我們直接開 port 的需求。假設我架設了五個服務，本來我要分別開五個 port 來訪問。現在透過 NPM，我可以只開 80 跟 443 出來給 NPM，往後需要訪問什麼服務，通通都去問 NPM，讓 NPM 統一替我們處理請求。這就是所謂的<strong>代理</strong>（proxy）。</p><p><img src="/HA-11-Reverse-Proxy/image-20250525140636301.png" alt="image-20250525140636301"></p><p>在此架構中，NPM 可以運行在與 HA 同網路的另一個設備中、與 HA 同一個設備中的不同容器（如 docker）中、或甚至以 add-on 的形式裝在 HA 身上（該附加元件在<a href="https://github.com/hassio-addons/addon-nginx-proxy-manager">這裡</a>）。而我此處是運行在與 HA 同網路的另一個設備中，可以參考一下我目前的拓撲：</p><p><img src="/HA-11-Reverse-Proxy/shuai-diagram.png" alt="shuai-diagram"></p><h2 id="編輯-configuration-yaml-設定">編輯 <code>configuration.yaml</code> 設定</h2><p>因為 Home Assistant 自帶的安全性策略，在我們親自設定之前，並不會允許 proxy 轉過來的連線請求。所以我們要來編輯一下 <code>configuration.yaml</code>。（至於如何找到並編輯 <code>configuration.yaml</code> 我們在 <a href="https://shuaixin.cc/HA-7-File-Editor/">智能家居 EP7：File Editor </a>有討論過，還請參考。）</p><p>而因為 <a href="https://shuaixin.cc/HA-X-Remote/">智能家居 EP9：利用DDNS、通訊埠轉發進行遠端控制</a> 那時候我們是透過 DuckDNS 替我們弄 SSL 的，所以 <code>configuration.yaml</code> 中本來是：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">http:</span></span><br><span class="line">  <span class="attr">ssl_certificate:</span> <span class="string">/ssl/fullchain.pem</span></span><br><span class="line">  <span class="attr">ssl_key:</span> <span class="string">/ssl/privkey.pem</span></span><br></pre></td></tr></table></figure><p>但我們現在要把 SSL 的事務交給 NPM，這邊的就要取消掉，變成：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">http:</span></span><br><span class="line">  <span class="attr">use_x_forwarded_for:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">trusted_proxies:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="number">192.168</span><span class="number">.87</span><span class="number">.87</span>  <span class="comment"># ← NPM</span></span><br><span class="line"><span class="comment">#  ssl_certificate: /ssl/fullchain.pem</span></span><br><span class="line"><span class="comment">#  ssl_key: /ssl/privkey.pem</span></span><br></pre></td></tr></table></figure><p>其中的 <code>use_x_forwarded_for</code> 就是允許 proxy 轉發，而 <code>trusted_proxies</code> 就是你 NPM 所在的位置。</p><h2 id="DuckDNS-設定">DuckDNS 設定</h2><p>DDNS 的部分我們一樣繼續使用 DuckDNS 的服務：</p><p><img src="/HA-11-Reverse-Proxy/ddns.png" alt="ddns"></p><p>但一樣到 DuckDNS 在 HA 的附加元件中的設定把 SSL 的服務關閉：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">lets_encrypt:</span></span><br><span class="line">  <span class="attr">accept_terms:</span> <span class="literal">false</span> <span class="comment"># ← 關掉</span></span><br><span class="line"><span class="comment">#  algo: secp384r1</span></span><br><span class="line"><span class="comment">#  certfile: fullchain.pem</span></span><br><span class="line"><span class="comment">#  keyfile: privkey.pem</span></span><br></pre></td></tr></table></figure><h2 id="Nginx-Proxy-Manager-設定">Nginx Proxy Manager 設定</h2><p>接著我們到 NPM 設定。</p><p>Domain Name 就填入 DuckDNS 申請的域名，以後只有透過這個名字進來的請求，才轉發給 HA。反之，如果直接用 IP 位置訪問，NPM 會說你要做啥，不講清楚我可不讓進。</p><p>Forward Hostname 跟 Forward Port 就是你本來端口轉發的目的（也就是 HA 的位置）。</p><p><img src="/HA-11-Reverse-Proxy/image-20250525153412484.png" alt="image-20250525153412484"></p><p>注意此處的 <strong>scheme 要選擇 http</strong>，這表示連入之後，內網部分就用 http 溝通即可。而 <strong>Websockets Support 必須打開</strong>，因為 HA 的前後端確實是用 websocket 持續溝通的（才能在你關燈之後，不需重新整理就顯示已關閉）。</p><p><img src="/HA-11-Reverse-Proxy/image-20250525153432543.png" alt="image-20250525153432543"></p><p>而 SSL 的部分我們就全部打開。</p><h2 id="關掉端口轉發！">關掉端口轉發！</h2><p>最後，我們本來特別開給 HA 的 port 就可以關掉了。保留 80 跟 443 給 NPM 即可：</p><p><img src="/HA-11-Reverse-Proxy/image-20250525154029751.png" alt="image-20250525154029751"></p><hr><p>如此一來，設定完畢。我們的遠端訪問方式已經從<strong>端口轉發</strong>進階成<strong>反向代理</strong>，除了更安全之外，家中網路的架構也變得更有條有理，再也不需要到處打洞開 port 了。</p><p>不過話說回來，DuckDNS 只有五個域名可以用，那如果我有更多需求的話，有什麼其他選擇嗎？</p><p>嘿，有的，如果你有自己的域名的話，這題就好辦了。有機會再撰文提供大家解法。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85/">智能家居</category>
      
      
      <category domain="https://shuaixin.cc/tags/Home-Assistant/">Home Assistant</category>
      
      <category domain="https://shuaixin.cc/tags/Proxy/">Proxy</category>
      
      
      <comments>https://shuaixin.cc/HA-11-Reverse-Proxy/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>讀書筆記：《為何三歲開始說謊？》</title>
      <link>https://shuaixin.cc/Why-3-Lie/</link>
      <guid>https://shuaixin.cc/Why-3-Lie/</guid>
      <pubDate>Sat, 05 Apr 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p><img src="/Why-3-Lie/Why-3-Lie.jpg" alt="Why-3-Lie"></p><h3 id="皮亞傑之前">皮亞傑之前</h3><p>在皮亞傑（大致在1960）之前，人們認為孩童的認知能力跟大人是一樣的，只是缺乏經驗跟知識。</p><p>皮亞傑顛覆大家的看法，表示孩童不是「小大人」，其實認知能力是要漸進發展並建立的。愛因斯坦曾說，皮亞傑的發現跟理論是「天才之作」。</p><h3 id="一歲前就已擁有數感、物理常識、簡單的邏輯">一歲前就已擁有數感、物理常識、簡單的邏輯</h3><p>皮亞傑發現九個月大的孩子才會動手排除遮擋物，找到後方的玩具，所以認為物體恆存是九個月大的里程碑。但後續透過「凝視時間」的觀察，其實五個月大的孩子，就會對違反物體恆存的狀況感到好奇。</p><p>同樣是五個月大，孩子至少具備 1+1 或 2-1 的概念。因為當我們用屏風遮擋一個物品，再放進一個物品，當我們秀出來居然還是只有一個物品，孩子會投以較長的凝視時間。兩個物品遮住，拿出一個後，秀出來還是兩個，一樣會得到較長的凝視時間。</p><p>物體違反地心引力往上飛時、兩物隔空互動時也會。</p><p>甚至，八個月大的孩子有機率的概念。一白四紅的獎池，我們抽出四白一紅給他看，你會得到凝視。</p><h3 id="人腦是多功能瑞士刀，不是通用型處理器">人腦是多功能瑞士刀，不是通用型處理器</h3><p>這個概念我們在<a href="https://shuaixin.cc/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98-%E6%88%91%E5%80%91%E7%9C%9F%E7%9A%84%E6%9C%89%E8%87%AA%E7%94%B1%E6%84%8F%E5%BF%97%E5%97%8E/">《我們真的有自由意志嗎》</a>就討論過，我們只能學會我們能夠學會的能力。而通常，某個能力就是某個大腦模塊專門負責。如果大腦中沒有某個模塊，那我們就做不到那件事。</p><h3 id="rTPJ：心智理論的腦區">rTPJ：心智理論的腦區</h3><p>擁有心智理論能力代表，你知道他人也擁有心智，並且他人可能擁有錯誤信念。最經典的例子就是，我們在受試者面前打開糖果的包裝，結果裡面是一隻鉛筆，此時我們問：「如果等等小明來了，你覺得他會猜裡面有什麼？」。如果正確回答，表示擁有心智理論能力。</p><p>看似簡單，但三歲的小朋友通常沒轍，平均要到五歲才會通過。</p><p>負責這個能力的腦區就是 rTPJ，我們若用跨顱磁刺激的方式刺激這個區域，可以影響成人對他人行為的道德判斷。（推敲他人意圖的能力受到干擾）</p><h3 id="為何三歲開始說謊？">為何三歲開始說謊？</h3><p>書中雖然在第二章就討論了心智理論，可是在第十章才標題回收。好了，所以為什麼三歲開始說謊呢？就是因為心智理論的能力發展出來了。但是第二章說三歲無法通過糖果測試，但這裡居然又能說謊了？</p><p>這裡我們可以推論，隨著心智理論能力的發展，讓說謊這個行為出現。而隨著心智理論能力的逐漸成熟，說謊的能力也會進步。據書中的例子，三歲孩子雖然會謊報自己沒有偷看盒子，但你只消進一步問盒子裡面有什麼，他會不攻自破。但五歲以上，他會開始圓謊。</p><h3 id="三元共享式注意力">三元共享式注意力</h3><p>一歲大的孩子就會用手指物了，但他是要指給你看嗎？研究認為，是想指給你看沒錯。</p><h3 id="哭鬧要理會嗎？">哭鬧要理會嗎？</h3><p>有一派育兒理論主張，寶寶哭鬧時先不要理會，不可以讓他們覺得只要哭鬧就能解決問題，否則他們會學會這種情緒勒索的招式。</p><p>但這裡指出，如果寶寶跟照顧者之間的社交互動不良，所造成的心理生理壓力會對發展造成負面影響。</p><p>如果真的擔心寶寶學會使用哭鬧來予取予求，等到年紀較大了再進行矯正即可。</p><h3 id="女性憂鬱症比例較高的其中一個可能：MAO">女性憂鬱症比例較高的其中一個可能：MAO</h3><p>MAO 即單胺氧化酶，顧名思義，單胺會被他代謝掉。咱大腦中的血清素跟多巴胺都在其防守范圍內。</p><p>而負責表現 MAO 的基因位於 X 染色體，所以擁有兩條 X 的女生，其 MAO 的表現量也會高於男性。</p><p>從這個因素出發，女性腦中的血清素會比較快地被代謝掉，相對上更有憂鬱的機會。</p><h3 id="三百年未解的哲學問題：視覺跟觸覺的推理">三百年未解的哲學問題：視覺跟觸覺的推理</h3><p>突然恢復視力的天生盲人，能第一次就看出圓形跟方形嗎？</p><p>經驗主義陣營的洛克、伯克萊認為不行，理性主義的萊佈尼茲認為可以。</p><p>2011 由海爾德與辛哈針對先天白內障的復明實驗給出了答案：不行！</p><p>從此這題不再是一個哲學問題。</p><h3 id="Other-Good-Points">Other Good Points</h3><ul><li>語言學習確實有其關鍵期，而開關跟 GABA 也許有關。但為何要關閉關鍵期呢？推測是因為運作期間產生的自由基太多。</li><li>全世界的語言加總起來有 800 多個音素，而嬰兒全部都能分辨出來。但隨著成長（專化），敏銳度就會下降。書上的例子是，日本人的 R、L 不分。</li><li>帕夫洛夫其實是生理學家，研究動物的消化系統得過諾貝爾獎。 流口水的制約，是不小心發現的。</li><li>操作制約的四個元素中，目前專家建議是，管教孩子以「正增強」跟「負懲罰」較為合適。</li><li>因為優生學的流行，整個美國在 20 世紀有六萬人被強迫絕育。</li><li>表觀遺傳學的例子：<ul><li>曾在青春期以前經歷過饑荒的世代，其孫輩死於心血管疾病的機率較低；反過來，孫輩罹患糖尿病的機率多出常人四倍。</li><li>老鼠實驗中，透過氣味與電擊，讓老鼠害怕該氣味。這個記憶，居然透過表觀遺傳的方式，遺傳了下去！（為了避免是爸媽傳授的，甚至是走人工授精，不給教學機會）</li></ul></li></ul>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98/">讀書筆記</category>
      
      
      <category domain="https://shuaixin.cc/tags/%E8%85%A6%E7%A7%91%E5%AD%B8/">腦科學</category>
      
      <category domain="https://shuaixin.cc/tags/4%E9%A1%86%E6%98%9F%E6%9B%B8%E7%B1%8D/">4顆星書籍</category>
      
      
      <comments>https://shuaixin.cc/Why-3-Lie/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>抉擇的心法</title>
      <link>https://shuaixin.cc/Decision-Making-Dharma/</link>
      <guid>https://shuaixin.cc/Decision-Making-Dharma/</guid>
      <pubDate>Mon, 17 Mar 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>讀書會也成立兩年多了。綜合各家智慧，我們統整了此《抉擇的心法》。供猶豫不決中的你一個參考。</p><p><img src="/Decision-Making-Dharma/decision-making-chart.png" alt="decision-making-chart"></p><h2 id="做或不做問題">做或不做問題</h2><p>舉例來說，如果你為「這個活動我該不該報名參加」而煩惱。那根據我們的心法，此時是個「做或不做問題」，建議選做。</p><p>根據<strong>蔡加尼克效應</strong>，相較於已完成的事情，人們更容易惦記著「未完成」的那些。因此，當你選擇「不做」，你可能會一直掛念「如果當初做了，會怎麼樣？」。</p><p>人是很「犯賤」的，<strong>我們往往最忘不掉未竟之事</strong>。（這也是為什麼蔡加尼克效應很常被用來解釋為何淺嘗而止的「初戀」總是最美好最難忘的）</p><p>**《臨終前最後悔的五件事》**書中，在安寧病房工作多年的作者 Bronnie Ware 記錄了許多臨終老人們的心聲，發現他們的後悔大多來自「沒做到的事情」，而非「做了的事」。這說明，<strong>未曾嘗試的遺憾，比做錯了的懊悔更深刻</strong>。</p><p>另外，根據康奈爾大學於1995年發表的研究論文《The Experience of Regret: What, When, and Why》提到：「短期內人們更容易後悔行動（commission errors），但長期內更後悔不行動（omission errors）。」</p><p>其原文為：</p><blockquote><p>“Actions, or errors of commission, generate more regret in the short term; but inactions, or errors of omission, produce more regret in the long run.”</p></blockquote><p>綜合以上，「要是有做就好了」的殺傷力，比「早知道不做了」還要來得大。故在「做或不做問題」，建議選做。</p><h2 id="新舊問題">新舊問題</h2><p>待撰文分析。</p><h2 id="格局問題">格局問題</h2><p>待撰文分析。</p><h2 id="常見問題">常見問題</h2><p><em>有時候選擇「不做」也是一種智慧不是嗎？</em></p><p>此心法的使用時機是當你<strong>猶豫不決</strong>，難以抉擇之時，才有使用的必要。如果當你能夠自行選擇「不做」，那表示在該議題上，你並不需要藉助《抉擇的心法》。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      
      <comments>https://shuaixin.cc/Decision-Making-Dharma/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>讀書筆記：《知識的錯覺》</title>
      <link>https://shuaixin.cc/The-Knowledge-Illusion/</link>
      <guid>https://shuaixin.cc/The-Knowledge-Illusion/</guid>
      <pubDate>Fri, 14 Mar 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p><img src="/The-Knowledge-Illusion/knowledge.jpg" alt="knowledge"></p><h3 id="超憶症難道不是超能力嗎？">超憶症難道不是超能力嗎？</h3><p>超憶症，擁有超常的情節記憶（我們在《最高學以致用法》討論過記憶的分類），可以記得一生中經歷過的所有事情。聽起來很屌，很像超能力，不是嗎？超強的記憶力，難道不具備十足的演化優勢嗎？</p><p>然而就結果論而言，並不是。（否則記憶力較差的群體應當早就被天擇掉了）</p><p>書中提到，如果這個世界鼓勵投機，那我們將會掌握機率與統計、如果鼓勵演繹推理，那我們將各個都是福爾摩斯。但事實是，我們在這兩方面都是一團糟。相反地，我們演化至今的世界由因果邏輯主導，這也是為什麼，人很擅長於因果分析。</p><p>後見之明告訴我們，人腦在這個世界必須具備的能力，相比「機率統計」、「演繹推理」、「強大的記憶力」，可能更偏向「因果分析」。</p><h3 id="因果推理：不是任何刺激都能形成制約">因果推理：不是任何刺激都能形成制約</h3><p>巴甫洛夫的狗最後對鈴聲（中性刺激）產生了制約，巴甫洛夫認為此處的鈴聲可以替換成任意刺激，都會有效。（即，他認為狗勾沒有去思考兩者之間關係）</p><p>但後來針對老鼠的進一步實驗發現，閃光與電擊、噪音與電擊、糖水與胃痛可以形成制約，但閃光與胃痛、糖水與電擊，就沒辦法。（即，老鼠是有在進行簡易的因果推理的）</p><h3 id="預測性推理-診斷式推理">預測性推理/診斷式推理</h3><p>預測性推理就是「由因推果」，診斷式推理則是「由果推因」。那麼人類比較擅長哪個呢？如同所有其他生物，我們比較擅長預測性推理。</p><p>至於診斷式推理，雖然難以證明，但目前沒有證據可以看出其他動物能夠進行診斷式推理。</p><h3 id="我們把整個世界當做儲存器在用">我們把整個世界當做儲存器在用</h3><p>我們沒有在「運算」。</p><p>如何讓車保持在車道中？我們觀察兩側的標線的移動速度，當一側較慢，那我們就偏向那邊。如何成功從門的中間走進去？我們僅只是確保兩側門框靠近我們的速度是一樣的。接高飛球？我們的確沒有在算拋物線吧？我們直接看。</p><p>老式的人工智慧為何發展有限？因為我們 input 給他盡量多的環境資訊，讓他算拋物線。但人根本不是這樣，相反的，我們眼睛同一時間其實只能看到非常小範圍的內容（我們在《思考不過是一場即興演出》就討論過這個動眼實驗）。</p><h3 id="我們也把身體當做記憶卡在用">我們也把身體當做記憶卡在用</h3><p>有些人認為同性戀是令人反感的、幾乎所有有兄弟姐妹的人都會認為手足間的亂倫十分惡心。然而這些感受是我們用「心智」自行判斷出來的嗎？大概不是，這些是基因透過演化留在我們身上的軀體標記。而這些標記告訴我們這些行為「不對」，於是我們將其敘述為「不道德」。（「厭惡感」是「道德判斷」的驅動器）</p><p>我們看到蜘蛛會害怕、會懼高、看到嘔吐物會反胃、會自發地去遠離看似污穢之物。這些真的是我們用「心智」去思考出來的嗎？大概不是，我們身體自己會做出這些判斷。</p><p>綜合以上，我們不應認為「心智」單純就只是大腦內的抽象運算。其實大腦、身體、外部環境會一起進行記憶、推理、跟決策。</p><p>心智並非附屬於大腦的一部分。恰恰相反，大腦是心智的一部分。</p><h3 id="知識的錯覺">知識的錯覺</h3><p>知識的錯覺就這樣產生了。我們以為我們知道的，遠比我們真的知道的，來得少。原因是，我們其實只知道知識的索引，但真正內化的沒有多少。我們把大部分的知識，存在身體裡（不是大腦裡）、存在世界中（環境資訊，反正需要的時候再取用即可，一切非常自然，導致你以為你知道）、存在別人的大腦裡。</p><p>你以為你知道，但其實只是用索引的方式在記憶！（在《記憶決定你是誰》中，我們確實學過，海馬迴是索引大師，不是記憶大師）</p><p>嘿，Title Drop！</p><h3 id="政治的錯覺">政治的錯覺</h3><p>對於一項公眾議題，「詢問立場」（價值取向）容易得到較為偏激的回答，但進而請求「給出說明」（結果取向）後，會緩和其立場的極端程度。</p><p>但這個「給出說明」必須是「因果性的解釋」而不是「支持某方立場的原因」，因為訴諸個人的理念並沒辦法破解知識的錯覺。</p><p>需要注意的是，要求某人解釋一項他們並不理解的政策不會改善彼此之前的人際關係。揭露人們的錯覺通常會令其惱羞成怒。</p><p>所以民主是好的嗎？可能不是。但目前人類社會還沒有更好的方案可以執行。</p><h3 id="Other-Good-Points">Other Good Points</h3><ul><li>自動化悖論：當我們在某方面過度依賴自動化，人類反而會在改方面上失能。</li><li>道德心理學家海德（Haidt）透過「道德錯愕」的例子主張「道德結論很少基於推理，更多是來自直覺」。道德錯愕最著名的例子是雙重避孕並且不為人知且雙方皆愉快並認為感情增進的兄妹亂倫。另，食用意外身亡的寵物狗也是一例。<ul><li>有些法律確實來自於普遍的道德共識。但透過海德帶給我們的反思，這種法律就經不起推敲。</li><li>那為什麼有些國家可以吃狗？</li></ul></li><li>認知反思測試（CRT, Cognitive Reflection Test) 被設計來看看你是快速地相信直覺，還是會習慣先反思。<ul><li>棒球棒和球的問題：一支棒球棒和一顆棒球的總價是 1.10 美元，棒球棒比棒球貴 1 美元。請問棒球的價格是多少？直覺答案： 0.10 美元；正確答案： 0.05 美元</li><li>製造機器的問題：一台機器需要 5 分鐘製造 5 件產品。如果 100 台機器一起工作，製造 100 件產品需要多久？直覺答案： 100 分鐘；正確答案： 5 分鐘</li><li>荷花池塘的問題：荷花每天的覆蓋面積會增長一倍。如果需要 48 天覆蓋整個池塘，請問覆蓋半個池塘需要多少天？直覺答案： 24 天；正確答案： 47 天</li></ul></li></ul>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98/">讀書筆記</category>
      
      
      <category domain="https://shuaixin.cc/tags/3%E9%A1%86%E6%98%9F%E6%9B%B8%E7%B1%8D/">3顆星書籍</category>
      
      
      <comments>https://shuaixin.cc/The-Knowledge-Illusion/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>利用 EasyButton 跟 OneButton 來防彈跳、判斷雙擊、長按</title>
      <link>https://shuaixin.cc/Button-Library-Debounce/</link>
      <guid>https://shuaixin.cc/Button-Library-Debounce/</guid>
      <pubDate>Sun, 09 Mar 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>一句話解釋按鍵的彈跳：</p><blockquote><p>你來不及放開按鍵之前，程式已經來問第二次了，所以程式不知道你是按了第二次，還是你單純還沒放開。</p></blockquote><p>如果你懶得管那麼多，不妨直接在 loop 裡面加入 <code>delay(100)</code>，避開明顯的彈跳問題。</p><p>如果你想嚴謹一點，那就引用一些現成的庫來用吧。</p><p>（以下用例中，我的 MCU 是 ESP32）</p><h3 id="EasyButton">EasyButton</h3><p>如果你什麼都不要，就只要防彈跳，可以考慮 <a href="https://github.com/evert-arias/EasyButton">EasyButton</a> 這個 library。</p><p>使用方法很簡單，如下：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;ezButton.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> led = <span class="number">19</span>;</span><br><span class="line"></span><br><span class="line">ezButton <span class="title function_">btn</span><span class="params">(<span class="number">23</span>)</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">setup</span><span class="params">()</span>&#123;</span><br><span class="line">  pinMode(led, OUTPUT);</span><br><span class="line"><span class="comment">//pinMode(btn, INPUT_PULLUP);  //ezButton已經幫你預設上拉了</span></span><br><span class="line"></span><br><span class="line">  btn.setDebounceTime(<span class="number">50</span>);     <span class="comment">//如果你手速夠快(50ms內點兩下)，你依然可以讓彈跳發生</span></span><br><span class="line">  </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">loop</span><span class="params">()</span> &#123;</span><br><span class="line"></span><br><span class="line">  btn.loop();                       <span class="comment">//ezButton開始讀btn</span></span><br><span class="line"><span class="comment">//bool reading = digitalRead(btn);  //所以不用自己讀</span></span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span>(btn.isPressed())&#123;              <span class="comment">//如果要放開才觸發就用 isReleased</span></span><br><span class="line">    digitalWrite(led, !digitalRead(led));</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>額外送你判斷按下跟放開的時機，可以讓你在按下就觸發，或是放開才觸發。</p><h3 id="OneButton">OneButton</h3><p>如果你除了基本的防彈跳，還想要可以定義單擊、雙擊、長按，可以考慮 <a href="https://github.com/mathertel/OneButton">OneButton</a>。</p><p>可參考我的範例：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;OneButton.h&gt;</span></span></span><br><span class="line"></span><br><span class="line">OneButton btn;  <span class="comment">//設btn為一個OneButton物件</span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> led = <span class="number">19</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">setup</span><span class="params">()</span> &#123;</span><br><span class="line">  pinMode(led, OUTPUT);</span><br><span class="line"></span><br><span class="line">  btn.setup(     <span class="comment">//設定定義的這個btn</span></span><br><span class="line">  <span class="number">23</span>,            <span class="comment">//設定按鍵pin</span></span><br><span class="line">  INPUT_PULLUP,  <span class="comment">//設定爲上拉</span></span><br><span class="line">  <span class="literal">true</span>           <span class="comment">//按下為LOW</span></span><br><span class="line">  );</span><br><span class="line"></span><br><span class="line">  btn.attachClick(whenSingle); <span class="comment">//單擊行爲</span></span><br><span class="line">  btn.attachDoubleClick(whenDouble); <span class="comment">//雙擊行爲</span></span><br><span class="line">  btn.attachLongPressStart(whenLong); <span class="comment">//長按行爲</span></span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">loop</span><span class="params">()</span> &#123;</span><br><span class="line">  btn.tick();   <span class="comment">//loop中一定要寫這個，它才會持續監視按鈕</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">whenSingle</span><span class="params">()</span>&#123;</span><br><span class="line">  digitalWrite(led, !digitalRead(led));</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">whenDouble</span><span class="params">()</span>&#123;</span><br><span class="line">  digitalWrite(led, !digitalRead(led));</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">whenLong</span><span class="params">()</span>&#123;</span><br><span class="line">  digitalWrite(led, !digitalRead(led));</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>此例中，我單擊、雙擊、長按都觸發一樣的動作，你可以自己定義要分別做什麼動作。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/ESP32/">ESP32</category>
      
      <category domain="https://shuaixin.cc/tags/Arduino/">Arduino</category>
      
      
      <comments>https://shuaixin.cc/Button-Library-Debounce/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>ESP32 小筆記</title>
      <link>https://shuaixin.cc/ESP32-WROOM/</link>
      <guid>https://shuaixin.cc/ESP32-WROOM/</guid>
      <pubDate>Wed, 05 Mar 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<h3 id="電源供應">電源供應</h3><p>可以直接從 VIN 供電。</p><p>但如果你接上 USB，VIN 就變成 5V 的輸出。</p><h3 id="Touch（內建電容觸控）">Touch（內建電容觸控）</h3><p>Touch 1 通常沒有 lay 出來。（因為共用了 GPIO0，很難正常作動）</p><p>Touch 2 共用了 GPIO2 的內建 LED ，注意別一起用。</p><h3 id="ADC">ADC</h3><p>ADC2 因為 wifi 驅動用了這隻腳，所以跟wifi不能同時使用</p><h3 id="UART">UART</h3><p>通常只看得到 U0 跟 U2，因為 U1 沒有 lay 出來。</p><h3 id="I2C">I2C</h3><p>傳輸速度 I2C 比 UART 更快，但兩條線一條是數據、一條是時脈，所以只能是半雙工。相對的，UART 可以全雙工。</p><p>但 I2C 可以一對多。所以每個設備要有 I2C address。</p><h3 id="while-Serial">while(!Serial)</h3><p>若在 setup 裡面寫<code>while(!Serial);</code>，可以在你打開終端機之前，code 卡在這行等你。</p><h3 id="Seiral-available">Seiral.available()</h3><p>當終端機有內容被輸入（按下enter後），<code>Seiral.available()</code>就會回傳大於零的訊息，可以利用這點拿來檢查是否有輸入。</p><h3 id="硬體中斷">硬體中斷</h3><p>相較於 Arduino 只有兩個腳位有支援硬體中斷，ESP32 幾乎每隻腳都可以。</p><p>且，EPS 可以支援判斷 Low, High, Change, Falling, Rising，而 Arduino 沒有 High。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/ESP32/">ESP32</category>
      
      <category domain="https://shuaixin.cc/tags/Arduino/">Arduino</category>
      
      
      <comments>https://shuaixin.cc/ESP32-WROOM/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Linux 系統架設 MQTT 伺服器</title>
      <link>https://shuaixin.cc/Mosquitto-MQTT/</link>
      <guid>https://shuaixin.cc/Mosquitto-MQTT/</guid>
      <pubDate>Mon, 03 Mar 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>本篇利用 Mosquitto 設置一個 MQTT 伺服器，伺服器的 OS 為 Ubuntu 24.04.1 LTS。</p><p>在開始之前，MQTT 預設使用的 Port 號是 1883，防火牆的傳出傳入規則務必要設定一下，記得打開。</p><h3 id="安裝-Mosquitto">安裝 Mosquitto</h3><p>此例為 Linux 環境，我們利用 apt 進行 Mosquitto 套件的安裝：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install mosquitto mosquitto-clients -y</span><br></pre></td></tr></table></figure><p>其中 mosquitto 套件是主要的 Mosquitto 伺服器，而 mosquitto-clients 包含了指令工具如 <code>mosquitto_sub</code>, <code>mosquitto_pub</code>。</p><p>而指令開頭的 <code>sudo</code> 的意思是：</p><blockquote><p>Super Idol 的笑容，都沒你的甜。八月正午的陽光，都沒你耀眼。</p></blockquote><p>我開玩笑的，其實是 superuser do。</p><p>接著我們透過 configuration 設定一下我們 Mosquitto 的規則。我們在 <code>/etc/mosquitto/conf.d/</code> 中，加入一個設定檔：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo nano /etc/mosquitto/conf.d/default.conf</span><br></pre></td></tr></table></figure><p>nano 是 Linux 自帶的文件編輯程式，你可以用其他你會的方式來編輯這個 conf 檔。我們添加下列設定：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">allow_anonymous true</span><br><span class="line">listener 1883 0.0.0.0</span><br></pre></td></tr></table></figure><p>這代表我接受任何匿名傳入資訊，只要你從 1883 這個 port 進來，來者不拒，方便我們前期快速測試。</p><p>設定好之後，我們重啟 mosquitto：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo systemctl restart mosquitto</span><br></pre></td></tr></table></figure><p>現在，我們想要讓這台伺服器接受傳入。我們輸入指令 <code>mosquitto_sub -h my_public_ip -t my_topic</code>。</p><p>其中，my_public_ip 填入這台伺服器的外網IP外置、my_topic 隨意填入你要訂閱的主題。</p><p>此時，這裡的 <code>mosquitto_sub</code> 代表我現在作為 subscriber，要訂閱所有關於 my_topic 的消息，以後有 publisher 發出 my_topic 的消息，我都會收到。</p><h3 id="收發消息">收發消息</h3><p>假設我伺服器的 IP 現在是 87.87.87.87，所以我輸入：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mosquitto_sub -h <span class="number">87</span>.<span class="number">87</span>.<span class="number">87</span>.<span class="number">87</span> -t beiqi</span><br></pre></td></tr></table></figure><p>我用另一台電腦輸入如下指令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mosquitto_pub -h <span class="number">87</span>.<span class="number">87</span>.<span class="number">87</span>.<span class="number">87</span> -t beiqi -m &quot;呼叫波士頓，over！&quot;</span><br></pre></td></tr></table></figure><p>此時 server 應該就會收到「呼叫波士頓，over！」。</p><p>當然，請注意作為 publisher 的電腦也要允許傳出，如果你失敗了請查看一下是否是防火牆在搞。</p><h3 id="設定認證機制">設定認證機制</h3><p>現在，我不想收到一堆垃圾訊息，希望可以建立認證方式，讓擁有權限的人才能 publish 內容過來。那麼我們可以透過 <code>mosquitto_passwd -c &lt;password file&gt; &lt;username&gt;</code> 來創建帳號密碼。</p><p>好的此時我們輸入：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo mosquitto_passwd -c /etc/mosquitto/passwd user_87</span><br></pre></td></tr></table></figure><p>其中 <code>-c</code> 代表 create，因為這是我們第一次設置用戶跟密碼，這步驟會幫我們建立一個名為 passwd 的檔案（passwd可以自己隨意取名）。而 user_87 為用戶名。</p><p>執行後會請你輸入密碼，此例中，我們輸入 12345。</p><p>完成之後，我們要回頭修改前面的 <code>/etc/mosquitto/conf.d/default.conf</code>，改成：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">allow_anonymous false</span><br><span class="line">password_file /etc/mosquitto/passwd</span><br><span class="line">listener 1883 0.0.0.0</span><br></pre></td></tr></table></figure><p>目前為止，標準的做法是這樣沒錯。但根據我的經驗，如果此時就重啟 Mosquitto，會報如下錯誤：</p><blockquote><p>Job for mosquitto.service failed because the control process exited with error code. See “systemctl status mosquitto.service” and “journalctl -xeu mosquitto.service” for details.</p></blockquote><p>問題其實是，我們建立出來的 passwd 的權限太高了，我們要調整一下：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo chmod <span class="number">644</span> /etc/mosquitto/passwd</span><br></pre></td></tr></table></figure><p>此處的 <code>chmod</code> 是 change mode 的意思，644 旨在把權限調低，這裡有點離題所以不做展開咯。</p><h3 id="收發帶認證的消息">收發帶認證的消息</h3><p>設定完賬號密碼後，我們的伺服器作為 subscriber 輸入：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mosquitto_sub -h <span class="number">87</span>.<span class="number">87</span>.<span class="number">87</span>.<span class="number">87</span> -t beiqi -u user_87 -P <span class="number">12345</span></span><br></pre></td></tr></table></figure><p>其中 <code>-u</code> 代表用戶名、<code>-P</code> 代表密碼。這裡都輸入剛剛設定好的內容。</p><p>而另一台電腦作為 publisher 則輸入：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mosquitto_pub -h <span class="number">87</span>.<span class="number">87</span>.<span class="number">87</span>.<span class="number">87</span> -t beiqi -u user_87 -P <span class="number">12345</span> -m &quot;還要打帳號密碼好麻煩！&quot;</span><br></pre></td></tr></table></figure><p>此時伺服器就會收到「還要打帳號密碼好麻煩！」的訊息咯！</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/MQTT/">MQTT</category>
      
      <category domain="https://shuaixin.cc/tags/Mosquitto/">Mosquitto</category>
      
      
      <comments>https://shuaixin.cc/Mosquitto-MQTT/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>OrCAD Capture 利用電晶體實作 Not Gate</title>
      <link>https://shuaixin.cc/OrCAD-BJT/</link>
      <guid>https://shuaixin.cc/OrCAD-BJT/</guid>
      <pubDate>Wed, 19 Feb 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>平常我們都把邏輯閘當做最小單位在把玩，但邏輯閘內部是怎麼實踐的呢？我們用電晶體來實作一個反向器看看，走起！（基礎操作請見<a href="https://shuaixin.cc/OrCAD-Capture-Demo/">使用 OrCAD Capture 設計電路</a>）</p><p>本次的主角是這顆 Q2N2222，一顆 NPN 電晶體：</p><p><img src="/OrCAD-BJT/image-20250220103052107.png" alt="image-20250220103052107"></p><p>首先搜尋「Q2N2222」找到我們的電晶體：</p><p><img src="/OrCAD-BJT/BJT10.png" alt="BJT10"></p><p>組織一下電路：</p><p><img src="/OrCAD-BJT/BJT9.png" alt="BJT9"></p><p>我們搜尋「VPulse」來放置一個方波脈衝（簡單模擬一下數位訊號）：</p><p><img src="/OrCAD-BJT/BJT8.png" alt="BJT8"></p><p>方波脈衝信號的參數分別代表什麼？</p><ul><li>V1：基準電壓</li><li>V2：脈衝電壓</li><li>TD：Time Delay，就是發出第一個 V2 之前的等待時間。</li><li>TR：Time Rise，就是 V1 上升到 V2 之間的時間差，值越小越陡峭。記得一定要設定，為 0 的話會報錯。</li><li>TF：Time Fall，同理，就是 V1 回到 V2 之間的時間差，一樣記得要設定。</li><li>PW：Pulse Width，每個 V2 的持續時間。</li><li>PER：Period，一個 V1 加上一個 V2 的持續時間。</li></ul><p>理解之後，我們設置參數如下：</p><p><img src="/OrCAD-BJT/BJT7.png" alt="BJT7"></p><p>如此一來應該就看得懂了，這軟體真的也是很省字（汗顏）。</p><p>再來我們提供一個直流輸入源，設置為 3V：</p><p><img src="/OrCAD-BJT/BJT5.png" alt="BJT5"></p><p>根據我們的脈衝週期（100毫秒），我們跑模擬的參數設置如圖：</p><p><img src="/OrCAD-BJT/BJT11.png" alt="BJT11"></p><p>探棒分別設置在電晶體的基極（圖中綠色探棒）跟最後的輸出（圖中紅色探棒）：</p><p><img src="/OrCAD-BJT/BJT4.png" alt="BJT4"></p><p>跑下去可以看到：</p><p><img src="/OrCAD-BJT/BJT2.png" alt="BJT2"></p><p>其中綠色是我們的脈衝源，當脈衝發出時（相當於數位訊號的1），我們的紅色就不輸出（相當於數位訊號的0），因為此時電晶體導通，3V 的直流輸入源直接接地跑走了。反之，當脈衝停止，電晶體斷路，3V 的直流輸入源就跑向輸出。</p><p>如此一來，我們的綠色訊號就跟紅色訊號呈現反向關係，Not Gate 完工！</p><hr><p>同場加映（？），我們換一個正弦波當做基極的輸入：</p><p><img src="/OrCAD-BJT/BJT3.png" alt="BJT3"></p><p>結果如圖：</p><p><img src="/OrCAD-BJT/BJT1.png" alt="BJT1"></p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/OrCAD/">OrCAD</category>
      
      <category domain="https://shuaixin.cc/tags/Capture/">Capture</category>
      
      
      <comments>https://shuaixin.cc/OrCAD-BJT/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>讀書筆記：《人生順利的簡單法則》</title>
      <link>https://shuaixin.cc/Lessons-to-Achieve-Great-Results/</link>
      <guid>https://shuaixin.cc/Lessons-to-Achieve-Great-Results/</guid>
      <pubDate>Fri, 07 Feb 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p><img src="/Lessons-to-Achieve-Great-Results/lessons.jpeg" alt="lessons"></p><h3 id="拖延、忙碌反而生產力高？">拖延、忙碌反而生產力高？</h3><p>美國芝加哥大學和中國上海交通大學的研究顯示：即使繁忙程度被迫超過可負荷范圍，人還是會因為繁忙而感到幸福。許多人都相信悠閒會使人幸福，但事實反而相反。</p><p>令人遺憾的是，我找不到這篇文獻的出處，書中也沒有附註（事實上，全書沒有半個註腳）。</p><p>那拖延呢？這裡引用的是史丹佛大學哲學系教授 John Perry 的招式：待辦事項裡如果有個最棘手的傢伙，那麼其他事項就會顯得誘人。我們利用這點，拖延大魔王，讓其他小兵顯得可愛，我們就會一直去執行那些簡單的任務。</p><p>總地來說，其實結論是：忙碌反而會幸福、拖延反而有效率，才對。（「拖延、忙碌反而生產力高？」是書中原本的章節名稱）</p><h3 id="姿勢的力量">姿勢的力量</h3><p>作者在「想提升效率，從改變姿勢開始」章節中引用了 Cuddy 著名的「高權力姿勢」（Power Pose）。其研究指出，採取象徵自信的姿勢，會使得睪固酮濃度上升、皮質醇的濃度下降。這意味著…… 更多的自信與較低的壓力。而這樣的順序，有悖於我們的直覺——難道不是先「感到」自信，才進而「表現」得自信嗎？</p><p>類似這樣先後順序的討論，濫觴可能是「臉部回饋假說」（Facial Feedback Hypothesis）——表情會反過來影響內在情緒。猜猜看最先提出這個想法的人是誰？達爾文！（出自 1872 年出版的《人類與動物的情感表達》，深遠的洞見啊達哥。）</p><p>還記得我們在 Gazzaniga《<a href="https://shuaixin.cc/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98-%E6%88%91%E5%80%91%E7%9C%9F%E7%9A%84%E6%9C%89%E8%87%AA%E7%94%B1%E6%84%8F%E5%BF%97%E5%97%8E/">我們真的有自由意志嗎</a>》討論過的「情緒先行、感受其後」嗎？我們在意識無法感知到的魚腥味環境之下變得更加容易猜忌、我們在視網膜被快速閃過一張意識無法感知到的駭人照片之後變得緊張、我們不是因為遇見了喜歡的人感到開心而是因為開心所以認為自己喜歡這個人…… 「情緒」是個身心綜合狀態，而「感受」是我們的「左腦解釋器」讀取情緒以後，所描述出來的「解釋」。</p><p>所以我們可以這樣理解：「微笑」不只是個表情，它就是情緒本身；「高權力姿勢」不只是個動作，它也是情緒本身。而當左腦解釋器發現你在微笑，就會認為你很開心。此即「感受其後」。</p><h3 id="閒聊的力量">閒聊的力量</h3><p>在「閒聊的力量」章節中作者提到，工作上的「非正式交流」可以使人專注力更高，並且還能提升自己的「社會資本」，同事會容易給你更高的評價。</p><p>這題其實我們在《<a href="https://shuaixin.cc/The-Power-Of-Output/">最高學以致用法</a>》裡面就學過了，根據「單純曝光效應」（Mere Exposure Effect），我們會單純地因為熟悉某個事物就對它產生好感。所以只要多打招呼多閒聊，你自然而然會被喜歡。這也是為什麼競選廣告什麼文案都不用附也沒關係，反正就是要能被看到。這也是為什麼掛名贊助的產品只要掛名就好，反正能被看到就好。</p><h3 id="幹勁的有無只是一種幻想">幹勁的有無只是一種幻想</h3><p>作者提到，若從心理學的角度出發，幹勁不是一種會「失去」的「物品」。提不起勁，只是找不到具體的方法罷了。</p><p>接著端上了自我決定理論（SDT）的三個動力要素：自主性、關聯性、勝任感（書中的用詞是「熟練」，我猜是本作從英文翻譯成日文，再二度翻譯成中文所致）。</p><p>嘿，這三大動力要素我們在《<a href="https://shuaixin.cc/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98-%E5%8F%AA%E5%B7%A5%E4%BD%9C%E4%B8%8D%E4%B8%8A%E7%8F%AD%E7%9A%84%E8%87%AA%E4%B8%BB%E4%BA%BA%E7%94%9F/">只工作不上班的自主人生</a>》討論過對吧，如果進行一項任務可以滿足這三個需求，那麼內在的動力就會容易自發地湧現。</p><h3 id="緊張反而帶來好表現">緊張反而帶來好表現</h3><p>容易緊張常常被我們視為是一種劣勢，或甚至是一種缺點。因為交感神經活躍帶來的戰與逃反應，主要是拿來…… 戰與逃，此時血液被大量地輸往骨骼肌，好方便我們可以揍人或是開溜。就演化的角度來看這十分合理，但二十一世紀的人類社會通常用不太到這方面的機制。相反地，激起我們戰與逃反應的可能會是在群眾面前發表談話、應一個重要的試。此時，最需要好好發揮用處的前額葉皮質反而得不到充分的資源（雖然腦部確實會增加血流量，但反正不是拿去供應負責高級思考的前額葉），於是搞砸了一切。</p><p>以上是我對於「緊張」的認識。但書中提到：</p><ul><li>壓力反應旺盛的運動選手通常競爭力較高</li><li>考前腎上腺素分泌較多的學生得分會較高</li><li>在和綁匪談判時，心跳逐漸加速的警察，比較不會誤射到人質</li><li>比較能夠「接納不安」（理解緊張焦慮也能是種助力）的人，唱歌比較不容易走音。</li></ul><p>挺有趣的，對於需要冷靜判斷的場景，居然也可能化緊張為正向助力。依舊可惜的是，作者提到的文字就跟我上面列舉的一樣精煉，沒有給出出處，難以進一步討論。</p><h3 id="Other-Good-Points">Other Good Points</h3><ul><li>尋求該如何達成目標的建議，而非是否該追求目標。</li><li>新年新希望不要聚焦在想要達成的「目標」，而是「原因」。</li><li>內在驅力比起外部報酬，品質更高。</li><li>將「嫉妒」的情緒透露給他人，會比較容易因此遇到好事。</li><li>「為了恢復注意力，滑個手機休息一下」跟「為了助眠，睡前喝個酒」都是看似合理但完全反效果的策略。</li><li>即使很忙時間不夠，一個小時內一樣只用45分鐘為單位進行工作，剩下的15分鐘要去做一些讓自己開心、豐富心靈的事。</li></ul><h3 id="敝人在下我的碎碎唸">敝人在下我的碎碎唸</h3><p>曾看過作者的《輕鬆駕馭意志力》，十分有料，故看到這本直接無腦下單。然而這本不太一樣。</p><p>不曉得為什麼這本沒有在美國出版，而是被翻譯成日文在日本出版。更有趣的是，中譯本甚至是從日文本翻譯過來的。經過了雙重翻譯後，總感覺用字遣詞有點不夠精確。</p><p>除此之外，這本的權威感也低了很多，不若《輕鬆駕馭意志力》那樣四處沿引研究、各個論述都有理論背書，這本給人的感覺是單純作者的人生經驗分享。不是不能接受經驗談，但就跟我的期望不太一樣就是了。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E8%AE%80%E6%9B%B8%E7%AD%86%E8%A8%98/">讀書筆記</category>
      
      
      <category domain="https://shuaixin.cc/tags/3%E9%A1%86%E6%98%9F%E6%9B%B8%E7%B1%8D/">3顆星書籍</category>
      
      
      <comments>https://shuaixin.cc/Lessons-to-Achieve-Great-Results/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>將米家藍牙溫濕度計 2 刷成 Zigbee</title>
      <link>https://shuaixin.cc/Mi_Thermometer_Zigbee_LYWSD03MMC/</link>
      <guid>https://shuaixin.cc/Mi_Thermometer_Zigbee_LYWSD03MMC/</guid>
      <pubDate>Tue, 04 Feb 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>本文將引導大家「免接線」將「米家藍牙溫濕度計 2」（型號：LYWSD03MMC）刷成 Zigbee，方便後續透過 Zigbee2MQTT 接入 Home Assistant。</p><p>小米官方在韌體更新到 2.1.1_0159 後（2024 後出廠的基本上都是這個版本號），資訊傳輸多了加密，讓 OTA 刷法一度失效了一兩年之久，如今重出江湖！</p><p>事不宜遲，開刷。</p><p><img src="/Mi_Thermometer_Zigbee_LYWSD03MMC/Mi.png" alt="Mi"></p><h3 id="設備先接入米家app">設備先接入米家app</h3><p>首先先按照小米官方指引，用常規的方式將你的溫度計設定妥當，接入米家。</p><p>此步驟為了後續可以得到溫度計的 ID、Token、Key。</p><h3 id="取得設備Token">取得設備Token</h3><p>你可以用任何你會的方法取得 ID、Token、Key。</p><p>如果你沒有頭緒，可以使用：<a href="https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor">https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor</a></p><p>以我為例，我用 mac 找到我米家帳號下面設備們的資訊：</p><p><img src="/Mi_Thermometer_Zigbee_LYWSD03MMC/token.png" alt="token"></p><h3 id="刷成過渡韌體">刷成過渡韌體</h3><p>使用 Telink Flasher for Mi Thermostat 網頁工具（<a href="https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html">https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html</a>），把韌體刷掉，脫離小米的掌控。</p><p>先 connect，找到藍牙設備並連上。</p><p>此時我們不按「Activate」，這個只適用舊的版本號。相對的，我們要使用「via login」。</p><p>為了 login，我們要填入剛剛得到的 token。</p><p>將 ID、Token、Key 填入後，我們點擊「via login」。</p><p>成功登入後，我們上傳 ATC_ota_40000.bin 這個檔案進去（檔案從：<a href="https://github.com/devbis/z03mmc/blob/master/assets/ATC_ota_40000.bin">https://github.com/devbis/z03mmc/blob/master/assets/ATC_ota_40000.bin</a>點擊下載後可得），點擊 flash 刷入。</p><p>成功後會自動斷開，不緊張。</p><h3 id="刷入-Zigbee-韌體">刷入 Zigbee 韌體</h3><p>接著我們使用 Telink Flasher to convert sensors to Zigbee 網頁工具（<a href="https://devbis.github.io/telink-zigbee/">https://devbis.github.io/telink-zigbee/</a>），準備刷入 Zigbee 韌體。</p><p>一樣先 connect，找到藍牙設備並連上。你的溫度計的名稱此時應該是 ATC 開頭。（但有時候名稱還是維持 LYWSD03MMC，我也不知道為什麼）</p><p>接著我們上傳 z03mmc.bin 這個檔案進去（檔案從：<a href="https://github.com/devbis/z03mmc/releases">https://github.com/devbis/z03mmc/releases</a>找到z03mmc.bin），點擊 flash 刷入。</p><p>成功！</p><h3 id="透過-Zigbee2MQTT-接入-HA">透過 Zigbee2MQTT 接入 HA</h3><p>再來就是走 Zigbee 接入我們的 HA 咯，方法請參考之前的 <a href="https://shuaixin.cc/HA-5-Zigbee/">智能家居 EP5：Zigbee 設備參戰</a>。</p><p>如果跟我一樣弄了超多顆的話，建議可以幫他們取個名字，不然真的會認錯人。我個人是幫他們在身上標記號碼作為區分。</p><p>附上我的全家福：</p><p><img src="/Mi_Thermometer_Zigbee_LYWSD03MMC/%E5%85%A8%E5%AE%B6%E7%A6%8F.png" alt="全家福"></p><p>如果一直搜尋不到，可以試著插拔一次電池，或短路 RESET 跟 GND 五秒以上。</p><p>以上！</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85/">智能家居</category>
      
      
      <category domain="https://shuaixin.cc/tags/Home-Assistant/">Home Assistant</category>
      
      
      <comments>https://shuaixin.cc/Mi_Thermometer_Zigbee_LYWSD03MMC/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>OrCAD Capture 二極管半波整流</title>
      <link>https://shuaixin.cc/OrCAD-Diode/</link>
      <guid>https://shuaixin.cc/OrCAD-Diode/</guid>
      <pubDate>Sun, 02 Feb 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>本篇我們來看看半導體的整流。基礎操作請見<a href="https://shuaixin.cc/OrCAD-Capture-Demo/">使用 OrCAD Capture 設計電路</a>。</p><p>我們這次選用 1N4148 作為我們的二極管：</p><p><img src="/OrCAD-Diode/shuai_02030939-41.png" alt="shuai_02030939-41"></p><p>繪製電路如下：</p><p><img src="/OrCAD-Diode/shuai_02030951-29.png" alt="shuai_02030951-29"></p><p>進行電路模擬：</p><p><img src="/OrCAD-Diode/shuai_02030948-06.png" alt="shuai_02030948-06"></p><p>電路模擬如下：</p><p><img src="/OrCAD-Diode/shuai_02030951-34.png" alt="shuai_02030951-34"></p><p>其中紅色為訊源，而綠色就是經過半波整流後的結果咯。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/OrCAD/">OrCAD</category>
      
      <category domain="https://shuaixin.cc/tags/Capture/">Capture</category>
      
      
      <comments>https://shuaixin.cc/OrCAD-Diode/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>智能家居 EP10：將多盞燈組合成燈組</title>
      <link>https://shuaixin.cc/HA-10-Light-Group/</link>
      <guid>https://shuaixin.cc/HA-10-Light-Group/</guid>
      <pubDate>Wed, 22 Jan 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>隨著我們的設備越來越多，會發現其實有些裝置總是同進同出，不太有分開來操作的需求，比如說同一組吊燈上的燈泡。</p><p>此時，我們就可以用到 Group 這個功能。</p><p>本來認為這應該是很常用，設定上應該要很簡單才對的功能，但 HA 的邏輯卻有點繞。</p><p>我們來一起操作看看，走起！</p><h3 id="新增群組">新增群組</h3><p>進入「設定 &gt; 裝置與服務 &gt; 助手」，點擊右下角「新增助手」，找到「群組」：</p><p><img src="/HA-10-Light-Group/Light_Group_0.png" alt="Light_Group_0"></p><p>群組藏在這個地方，實在是令人想不太到對吧 XD</p><p>我們選擇「燈光群組」，然後把你要組起來的燈都找進來：</p><p><img src="/HA-10-Light-Group/Light_Group_3.jpg" alt="Light_Group_3"></p><p>我的四顆燈就組隊完畢了：</p><p><img src="/HA-10-Light-Group/Light_Group_4.jpg" alt="Light_Group_4"></p><h3 id="操作群組">操作群組</h3><p>組隊完畢後，你會發現…… 誒？剛剛組起來的群組，找不到人！以我為例，我要在自動化裡面，設定按下按鈕就打開整組客廳左右燈，但找了很久都只能找到落單的實體，而非群組。</p><p>出乎意料地，我們要去「執行動作」：</p><p><img src="/HA-10-Light-Group/Light_Group_7.jpg" alt="Light_Group_7"></p><p>然後找到「燈光: 開關」（選項有點多，找不到就用搜尋的）：</p><p><img src="/HA-10-Light-Group/Light_Group_8.jpg" alt="Light_Group_8"></p><p>最後，我們才能在這個「動作」裡面找到我們設定好的燈光群組：</p><p><img src="/HA-10-Light-Group/Light_Group_9.jpg" alt="Light_Group_9"></p><p>如此我們就可以成功操控燈光群組咯 :)</p><p>所以我說，這邏輯確實很繞對吧？</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85/">智能家居</category>
      
      
      <category domain="https://shuaixin.cc/tags/Home-Assistant/">Home Assistant</category>
      
      
      <comments>https://shuaixin.cc/HA-10-Light-Group/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>OrCAD Capture 透過 Parameters 討論變數</title>
      <link>https://shuaixin.cc/OrCAD-Capture-Para/</link>
      <guid>https://shuaixin.cc/OrCAD-Capture-Para/</guid>
      <pubDate>Mon, 20 Jan 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<p>在<a href="https://shuaixin.cc/OrCAD-Capture-Demo/">使用 OrCAD Capture 設計電路</a>中我們已經學會如何繪製電路圖，並且使用 PSpice 模擬電路的運作情形。</p><p>今天我們要在同一個電路架構之下，設定一個參數作為變數，針對不同的輸入值繪製對應的圖形。</p><p>先來一個 RC 電路，訊號源是一個漂亮的方波脈衝：</p><p><img src="/OrCAD-Capture-Para/OrCAD_Para_8.png" alt="OrCAD_Para_8"></p><p>用 PSpice 模擬後發現，誠如我們對 RC 電路的認識，方波被 RC 電路磨去了棱角（方波的高頻諧波被我們過濾掉了）：</p><p><img src="/OrCAD-Capture-Para/OrCAD_Para_7.png" alt="OrCAD_Para_7"></p><p>那麼現在，我想知道不同的電容值，會對我的方波造成什麼不同的影響。</p><p>於是我們要來把圖中的電容（C1）設為變數。</p><p>我們從元件裡面搜尋「PARAM」找到「PARAM/SPECIAL」，放到圖中：</p><p><img src="/OrCAD-Capture-Para/OrCAD_Para_5.png" alt="OrCAD_Para_5"></p><p>接著雙擊 C1，將 C1 的電容值設定為 <code>{C}</code>。其中大括號裡面就是宣告一個變數。</p><p><img src="/OrCAD-Capture-Para/OrCAD_Para_4.png" alt="OrCAD_Para_4"></p><p>再來雙擊圖中的「<u>PARAMETERS:</u>」，會出現如下畫面，此時點擊「New Property」：</p><p><img src="/OrCAD-Capture-Para/OrCAD_Para_3.png" alt="OrCAD_Para_3"></p><p>此時添加我們剛剛設定的變數 C，電容值可以先隨便給一個：</p><p><img src="/OrCAD-Capture-Para/OrCAD_Para_2.png" alt="OrCAD_Para_2"></p><p>添加成功：</p><p><img src="/OrCAD-Capture-Para/OrCAD_Para_1.png" alt="OrCAD_Para_1"></p><p>回到我們的 PSpice 裡面，點擊左側「Edit Simulation Settings」，或是在電路圖上方選單的「PSpice &gt; Edit Simulation Profile」也可以。</p><p><img src="/OrCAD-Capture-Para/OrCAD_Para_17.png" alt="OrCAD_Para_17"></p><p>在此我們要勾選「Parametric Sweep」，並在「Global parameter」中將剛剛的 C 填入「Parameter name」。然後我們就可以來設定我們的 C 要怎麼玩。</p><p>此處我這樣設定就代表我想看 5u, 20u, 35u, 50u, 65u, 80u 電容值之下的六種情況：</p><p><img src="/OrCAD-Capture-Para/OrCAD_Para_13.png" alt="OrCAD_Para_13"></p><p>接著就可以點擊播放鍵，讓他跑跑看。而根據我們設定的六個參數，他會問你要看哪個，此處我們全選並按下 OK：<img src="/OrCAD-Capture-Para/OrCAD_Para_12.png" alt="OrCAD_Para_12"></p><p>噠啦：</p><p><img src="/OrCAD-Capture-Para/OrCAD_Para_11.png" alt="OrCAD_Para_11"></p><p>由圖可見，電容值越大，我的方波就被削得更圓潤。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E5%85%B6%E4%BB%96/">其他</category>
      
      
      <category domain="https://shuaixin.cc/tags/OrCAD/">OrCAD</category>
      
      <category domain="https://shuaixin.cc/tags/Capture/">Capture</category>
      
      
      <comments>https://shuaixin.cc/OrCAD-Capture-Para/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>智能家居 EP9：利用DDNS、通訊埠轉發進行遠端控制</title>
      <link>https://shuaixin.cc/HA-X-Remote/</link>
      <guid>https://shuaixin.cc/HA-X-Remote/</guid>
      <pubDate>Sun, 19 Jan 2025 16:00:00 GMT</pubDate>
      
        
        
          
          
      <description></description>
          
        
      
      
      
      <content:encoded><![CDATA[<h2 id="出門在外也能控制-Home-Assistant-嗎？">出門在外也能控制 Home Assistant 嗎？</h2><p>出門在外也能控制 Home Assistant 嗎？必須得可以！這也是智能家居很重要的一環，舉凡人在外面控制燈具、瓦斯、門窗開關、透過攝影機查看家裡狀況、回家路上提前開冷氣、提前啟動電飯鍋開始煮飯…… 遠端控制是必不可少的功能。</p><p>此篇我們就來實作，走起！</p><h3 id="釐清家中的網路拓撲（怎麼互相連接的？如何上網的？）">釐清家中的網路拓撲（怎麼互相連接的？如何上網的？）</h3><p>以我為例，在此篇操作之前的拓撲為：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">+———————+</span><br><span class="line">|中華電信|</span><br><span class="line">+———————+</span><br><span class="line">   |</span><br><span class="line">(PPPoE 撥號)</span><br><span class="line">   |</span><br><span class="line">   v</span><br><span class="line">+———————————————————————————————————————————+</span><br><span class="line">|小烏龜 (Modem + 路由器，內部網段：192.168.1.x)|</span><br><span class="line">+———————————————————————————————————————————+</span><br><span class="line">   |       </span><br><span class="line">(DHCP 分配 IP)</span><br><span class="line">   |     |</span><br><span class="line">   |     +---&gt; IPTV 1（客廳的MOD）</span><br><span class="line">   |     +---&gt; IPTV 2（房間的MOD）</span><br><span class="line">   v</span><br><span class="line">+—————————————————————————————————————+</span><br><span class="line">|MiWifi (路由器，內部網段：192.168.31.x)|</span><br><span class="line">+—————————————————————————————————————+</span><br><span class="line">   |</span><br><span class="line"> (DHCP 分配 IP )</span><br><span class="line">   |</span><br><span class="line">   +---&gt; 終端設備（手機、電腦等）</span><br><span class="line">   |</span><br><span class="line">   v</span><br><span class="line">+——————————————+</span><br><span class="line">|Home Assistant|</span><br><span class="line">+——————————————+</span><br></pre></td></tr></table></figure><p>建議各位一定要先稍微梳理一下家中的網路連接狀況，否則很容易跟我之前一樣犯很不必要的錯。（錯誤案例留在文末，供大家嘲笑並警惕）</p><p>此例中，我家裡同時有兩台路由器在搞路由，各自維護了兩個內網網段。所以假設我今天手機 wifi 連 MiWifi 來上網，實際上是小烏龜向中華電信取得了 <code>111.87.87.87</code> 這個外網 IP，然後 DHCP 分配給 MiWifi 一個內網 IP 例如 <code>192.168.1.69</code>，接著 MiWifi 再 DHCP 分配給手機一個內網 IP 如 <code>192.168.31.168</code> 來上網的。</p><p>一般家庭為了更好的 wifi 訊號額外買一台分享器是很常見的情形，而由於小烏龜本來就預設開著 DHCP，大家在安裝上很容易變得跟此例一樣。但如此一來，家裡變成了「雙重路由」，等等設定通訊埠轉發（Port Forwarding）會比較麻煩。</p><p>我這邊的解法是，MiWifi 改為 PPPoE 撥號直接跟中華電信額外再要一組 IP，各位不妨可以參考。不過如果你不介意，做兩層通訊埠轉發也是 ok 的。</p><h3 id="分享器直接撥號">分享器直接撥號</h3><p>反正中華電信可以同時給我們八組 IP（其實是不是挺大方的？還是因為台灣人口少所以沒差？），那我們就讓小烏龜拿一組（主要給MOD用）、MiWifi 也拿一組，各自對外。</p><p>你說你不知道你的 PPPoE 撥號帳號密碼？嗯跟我一樣，就打去中華電信問一下吧 XD</p><p><img src="/HA-X-Remote/pppoe.png" alt="pppoe"></p><p>順帶一提，帳號部分我本來輸入的是跟小烏龜一樣的 <a href="mailto:xxx@wifi.hinet.net">xxx@wifi.hinet.net</a> ，但連不上，於是嘗試了 <a href="mailto:xxx@hinet.net">xxx@hinet.net</a> 就意外成功了，各位可以嘗試。而 <a href="mailto:xxx@ip.hinet.net">xxx@ip.hinet.net</a> 應該是申請固定 IP 之後才會使用到的。</p><p>如此一來，我的拓撲就變成了：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">+———————————————————————————+</span><br><span class="line">|          中華電信          |</span><br><span class="line">+———————————————————————————+</span><br><span class="line">   |           |</span><br><span class="line">(Modem)    (PPPoE 撥號)</span><br><span class="line">   |           |</span><br><span class="line">   |           v</span><br><span class="line">+———————————————————————————————————————————+</span><br><span class="line">|小烏龜 (Modem + 路由器，內部網段：192.168.1.x)|</span><br><span class="line">+———————————————————————————————————————————+</span><br><span class="line">   |       </span><br><span class="line">(PPPoE 撥號)</span><br><span class="line">   |     |</span><br><span class="line">   |     +---&gt; IPTV 1（客廳的MOD）</span><br><span class="line">   |     +---&gt; IPTV 2（房間的MOD）</span><br><span class="line">   v</span><br><span class="line">+—————————————————————————————————————+</span><br><span class="line">|MiWifi (路由器，內部網段：192.168.31.x)|</span><br><span class="line">+—————————————————————————————————————+</span><br><span class="line">   |</span><br><span class="line">(DHCP 分配 IP )</span><br><span class="line">   |</span><br><span class="line">   +---&gt; 終端設備（手機、電腦等）</span><br><span class="line">   |</span><br><span class="line">   v</span><br><span class="line">+——————————————+</span><br><span class="line">|Home Assistant|</span><br><span class="line">+——————————————+</span><br></pre></td></tr></table></figure><p>對於 MiWifi 來說，小烏龜此時就單純作為 Modem（數據機、調製解調器），而非上層路由器。對我們的 HA 來說，就是通向外網的障礙（？）少了一層，耶✌🏻</p><h3 id="固定HA的內網位置">固定HA的內網位置</h3><p>如果存粹交給 MiWifi 用 DHCP 來分配內網 IP 給 HA 的話，可能過一陣子位置就跑掉。所以我們來固定一下內網的 IP 位置：</p><p><img src="/HA-X-Remote/miwifi.png" alt="miwifi"></p><p>如此一來，HA 就會乖乖待在 <code>192.168.31.254</code> 了。</p><h3 id="設定通訊埠轉發（Port-Forwarding）">設定通訊埠轉發（Port Forwarding）</h3><p>此處注意「端口轉發」、「通訊埠轉發」、「Port Forwarding」指的是同一件事情，免得找不到設定入口。</p><p>此處可以先把外部的 80port（http 預設端口）轉到 IP為254（我們剛剛固定的位置）的 8123port（HA預設的端口）。簡單來說就是外部的 80 轉到內部的 8123。</p><p>而我們預先設好另一組外部 443 轉內部 8123，等等會用到。（443 是 https 預設端口）</p><p><img src="/HA-X-Remote/portfowarding.png" alt="portfowarding"></p><h3 id="設定DDNS-走-https">設定DDNS + 走 https</h3><p>而因為我這裡並沒有跟中華電信申請固定 IP，所以外網位置每隔一段時間會回收重發。那我從外網要怎麼追蹤 HA 目前最新的外網位置呢？</p><p>此處我們使用 DuckDNS 這個 DDNS 服務（動態DNS）。DuckDNS 透過附加元件安裝到 HA 裡面以後，會幫你偵測 HA 的外網位置，如果改變，就幫你記得，你只要用設定好的域名訪問就 ok 了，非常方便。</p><p>到 <a href="https://www.duckdns.org/">https://www.duckdns.org/</a> 註冊好，申請一組域名，取得 token。</p><p>接著從「設定 &gt; 附加元件 &gt;  附加元件商店」搜尋「Duck DNS」，安裝並開啟（記得設定成啟動時開啟）。進入 Duck DNS 裡面的設定（如下圖右側），填入你取得的域名與 token，在 Let’s Encrypt 欄位裡面填入：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">accept_terms:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">algo:</span> <span class="string">secp384r1</span></span><br><span class="line"><span class="attr">certfile:</span> <span class="string">fullchain.pem</span></span><br><span class="line"><span class="attr">keyfile:</span> <span class="string">privkey.pem</span></span><br></pre></td></tr></table></figure><p>設定為 true 表示我們要透過 https 連線。</p><p>接著到 HA 的 <code>configuration.yaml</code> 加入設定（如下圖左側），如果你不知道怎麼編輯這個 file，請參考之前的<a href="https://shuaixin.cc/HA-7-File-Editor/">智能家居 EP7：File Editor</a>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">http:</span></span><br><span class="line">  <span class="attr">ssl_certificate:</span> <span class="string">/ssl/fullchain.pem</span></span><br><span class="line">  <span class="attr">ssl_key:</span> <span class="string">/ssl/privkey.pem</span></span><br></pre></td></tr></table></figure><p><img src="/HA-X-Remote/duck.png" alt="duck"></p><p>沒錯，DuckDNS 也幫我們集成了 Let’s Encrypt 的加密簽署服務了，揪甘心餒！</p><h3 id="HA開啟外部存取">HA開啟外部存取</h3><p>到「設定 &gt; 系統 &gt; 網路」將外部存取打開：</p><p><img src="/HA-X-Remote/remotegood.png" alt="remotegood"></p><h3 id="成功遠端訪問！">成功遠端訪問！</h3><p>至此，設定完畢 :)</p><hr><h2 id="錯誤示范">錯誤示范</h2><blockquote><p>當初網際網路知識還太嫩，失敗收場。將錯誤案例留下供大家參考，最後會解釋失敗原因。</p></blockquote><blockquote><p><s>此篇「遠端控制」失敗收場，目前未解，若有高手還請救救我QQ</s>（已解決！）</p></blockquote><p>為實現遠端連線，參考了以下三篇：</p><ul><li><a href="https://forum.automata.id/t/topic/153">Home Assistant 簡易遠端連線教學 - DuckDNS</a></li><li><a href="https://www.home-assistant.io/docs/configuration/remote/">Remote access</a></li><li><a href="https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E6%95%99%E5%AE%A4/home-assistant%E4%BD%BF%E7%94%A8duckdns%E8%87%AA%E5%AE%9A%E7%BE%A9%E5%AD%90%E5%9F%9F%E5%90%8D%E5%8F%8A%E6%8E%A1%E7%94%A8ssl-5713957d64b2">Home Assistant使用DuckDNS自定義子域名及採用SSL</a></li></ul><h3 id="路由器設定-Port-Forwarding">路由器設定 Port Forwarding</h3><p>路由器把 HA 伺服器的內網位置給固定住：</p><p><img src="/HA-X-Remote/miwifi.png" alt="miwifi"></p><p>然後設定好端口轉發：</p><p><img src="/HA-X-Remote/portfowarding.png" alt="portfowarding"></p><h3 id="HA-安裝-DuckDNS">HA 安裝 DuckDNS</h3><p>註冊好 DuckDNS，並在 HA 安裝完畢。</p><p>設定完畢：</p><p><img src="/HA-X-Remote/duckdns.png" alt="duckdns"></p><h3 id="HA-開啟外部存取">HA 開啟外部存取</h3><p>你看我這裡也開了：</p><p><img src="/HA-X-Remote/remotegood.png" alt="remotegood"></p><p>URL 也嘗試過各種方法了：</p><p><img src="/HA-X-Remote/url.png" alt="url"></p><p>我試過 https, http, 80, 443, 8123，在 port forwarding 的設定也給過 80, 443, 8123 諸如此類。但沒半個可以成功。</p><p>除了我訪問 <code>https://myurl.duckdns.org</code> 能連進我的中華電信小烏龜後台。</p><p>目前懷疑是小烏龜的設定問題，但進去檢查了一輪沒什麼特別發現。</p><h3 id="中華電信小烏龜後台">中華電信小烏龜後台</h3><p><img src="/HA-X-Remote/cht.png" alt="cht"></p><p>順帶一題，中華電信小烏龜後台進入的方式預設為：<code>https://192.168.1.1</code>。記得一定要走 https，否則不給進。</p><p>簡單設定可以選擇以 user 登入，帳號密碼皆為 <code>user</code>。</p><p>進階設定有一說是一定要實體乙太網路接電腦才能進去，但我這邊透過 wifi 進去也是可以的。帳號為 <code>cht</code>，密碼為小烏龜型號後四碼+小烏龜MAC後四碼，皆為小寫。以我為例即為 <code>25gqxxxx</code>。</p><h2 id="敗因解析">敗因解析</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">中華電信</span><br><span class="line">   |</span><br><span class="line">   | (PPPoE 撥號)</span><br><span class="line">   v</span><br><span class="line">小烏龜 (Modem + 路由器，內部網段：192.168.1.x)</span><br><span class="line">   |       |      </span><br><span class="line">   |       +---&gt; IPTV 1（客廳的MOD）</span><br><span class="line">   |       |</span><br><span class="line">   |       +---&gt; IPTV 2（房間的MOD）</span><br><span class="line">   |</span><br><span class="line">   | (DHCP 分配 IP)</span><br><span class="line">   v</span><br><span class="line">MiWifi (路由器，內部網段：192.168.31.x)</span><br><span class="line">   |</span><br><span class="line">   +---&gt; 終端設備（手機、電腦等）</span><br><span class="line">   |</span><br><span class="line">   +---&gt; Home Assistant</span><br></pre></td></tr></table></figure><p>當初的拓撲如上所示。</p><p>為什麼最後總是只能訪問到小烏龜後台呢？如今看來就很明顯了。</p><p>透過 DuckDNS 幫我們找到的外網的 IP 位置，是誰的位置呢？是小烏龜透過 PPPoE 撥號向中華電信借來的 IP，所以當然是直接連到小烏龜身上。</p><p>所以我們在 MiWifi 裡面用心地設置的 Port Forwarding 當然不會生效，因為壓根就沒有訪問請求進來過！</p><p>這題的解法有二：</p><ol><li>不改變上網方式的前提之下，可以設定兩層 Port Forwarding，小烏龜一層、MiWifi 再一層。</li><li>讓 MiWifi 也取得一組外網 IP。</li></ol><p>以我為例，反正中華電信允許多撥（可以同時撥八組），我 MiWifi 直接 PPPoE 要一組外網 IP，一切就迎刃而解了。</p>]]></content:encoded>
      
      
      <category domain="https://shuaixin.cc/categories/%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85/">智能家居</category>
      
      
      <category domain="https://shuaixin.cc/tags/Home-Assistant/">Home Assistant</category>
      
      
      <comments>https://shuaixin.cc/HA-X-Remote/#disqus_thread</comments>
      
    </item>
    
  </channel>
</rss>
