<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>wei</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://weiblog.me/</id>
  <link href="https://weiblog.me/" rel="alternate"/>
  <link href="https://weiblog.me/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, wei</rights>
  <subtitle>攝影 x 筆記 x 隨筆</subtitle>
  <title>Wei 自己寫點什麼</title>
  <updated>2026-05-04T12:56:34.273Z</updated>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="技術筆記" scheme="https://weiblog.me/categories/%E6%8A%80%E8%A1%93%E7%AD%86%E8%A8%98/"/>
    <category term="NiFi" scheme="https://weiblog.me/tags/NiFi/"/>
    <category term="mTLS" scheme="https://weiblog.me/tags/mTLS/"/>
    <category term="TLS" scheme="https://weiblog.me/tags/TLS/"/>
    <category term="憑證" scheme="https://weiblog.me/tags/%E6%86%91%E8%AD%89/"/>
    <category term="Keystore" scheme="https://weiblog.me/tags/Keystore/"/>
    <category term="Truststore" scheme="https://weiblog.me/tags/Truststore/"/>
    <content>
      <![CDATA[<img src="/2026-05-04/nifi-mtls-keystore-truststore/image-0.png" class=""><div style="margin-bottom: 20px"></div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>今天幫同事解決了一個 NiFi 上設定 mTLS 的問題。</p><p>由於公司最近換了內部的 CA，同事在更新憑證的過程中發現使用者無法用自己的憑證登入 NiFi，起初大家都覺得是 Server 憑證的問題，直覺告訴我和 Client 應該也有關。</p><h3 id="mTLS-是怎麼運作的"><a href="#mTLS-是怎麼運作的" class="headerlink" title="mTLS 是怎麼運作的"></a>mTLS 是怎麼運作的</h3><p>一般我們透過 SSL&#x2F;TLS 連線到網站，瀏覽器只需要驗證網站的憑證就好，Mutual TLS（mTLS）則是 Server 和 Client 互相驗證，用前面的例子來說，就是網站也需要驗證使用者的憑證。</p><p>先來看 TLS 的流程：</p><img src="/2026-05-04/nifi-mtls-keystore-truststore/tls-flow.svg" class="" title="TLS 握手流程"><p>再來看 mTLS 的流程：</p><img src="/2026-05-04/nifi-mtls-keystore-truststore/mtls-flow.svg" class="" title="mTLS 握手流程"><p>在 Server 發出 Certificate Request 時，如果有合適的憑證，就會要求使用者選擇。</p><h3 id="NiFi-的設定出了什麼問題"><a href="#NiFi-的設定出了什麼問題" class="headerlink" title="NiFi 的設定出了什麼問題"></a>NiFi 的設定出了什麼問題</h3><p>在 NiFi 的設定中可以透過 <code>nifi.security.keystore</code> 來選擇 Keystore，這邊的 Keystore 就是 NiFi Server 自己的 Private Key + 憑證的組合。</p><p>如果有設定 <code>nifi.security.needClientAuth</code> 為 <code>true</code> 的話，就會啟用 mTLS 要求 Client 提供憑證，而且需要另外設定信任的 CA <code>nifi.security.truststore</code>。</p><p>這次的問題就是出在我們把 Server 從舊憑證（CA1 發行）更新成新憑證（CA2）後，同時也把 <code>nifi.security.truststore</code> 換成只含 CA2 的版本。</p><p>這樣雖然網頁打得開，但一般使用者的憑證是由 CA1 發行的，NiFi 的 truststore 不認識 CA1，所以無法通過 mTLS 驗證。</p><p>解決方法是讓 <code>nifi.security.truststore</code> 同時信任 CA1 和 CA2，可以透過 <code>keytool</code>（Java 內建的憑證管理工具，用來對 Keystore &#x2F; Truststore 做新增、刪除、列出等操作）來匯入：</p><figure class="highlight bash"><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><code class="hljs bash"><span class="hljs-comment"># 將 CA1 匯入 truststore</span><br>keytool -importcert -<span class="hljs-built_in">alias</span> ca1 -file ca1.pem -keystore truststore.jks -storepass &lt;password&gt;<br><br><span class="hljs-comment"># 將 CA2 匯入 truststore</span><br>keytool -importcert -<span class="hljs-built_in">alias</span> ca2 -file ca2.pem -keystore truststore.jks -storepass &lt;password&gt;<br></code></pre></td></tr></table></figure><p>產生同時信任 CA1 和 CA2 的 Truststore，或是直接指定為 Root CA 也行，在公司內 CA1 和 CA2 的 Root CA 是同一個。</p><h3 id="Take-Away"><a href="#Take-Away" class="headerlink" title="Take Away"></a>Take Away</h3><ol><li>truststore 要涵蓋所有需要被驗證的對象的 CA，包含 Server 自己的以及 Client 的。</li><li>升級 CA 時，要確認 Client 也都更新憑證了再換過去，或是暫時設定成 Root CA。</li></ol><h3 id="後記"><a href="#後記" class="headerlink" title="後記"></a>後記</h3><p>很久沒有這樣解決問題了，像這樣解決別人的問題又能學到東西才是成長的動力。</p>]]>
    </content>
    <id>https://weiblog.me/2026-05-04/nifi-mtls-keystore-truststore/</id>
    <link href="https://weiblog.me/2026-05-04/nifi-mtls-keystore-truststore/"/>
    <published>2026-05-04T10:25:58.000Z</published>
    <summary>今天幫同事解決了一個 NiFi 上設定 mTLS 的問題。</summary>
    <title>從一個 NiFi mTLS 問題搞懂 Keystore 與 Truststore</title>
    <updated>2026-05-04T12:56:34.273Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="旅遊" scheme="https://weiblog.me/categories/%E6%97%85%E9%81%8A/"/>
    <category term="旅遊" scheme="https://weiblog.me/tags/%E6%97%85%E9%81%8A/"/>
    <category term="攝影" scheme="https://weiblog.me/tags/%E6%94%9D%E5%BD%B1/"/>
    <category term="日本" scheme="https://weiblog.me/tags/%E6%97%A5%E6%9C%AC/"/>
    <category term="2026" scheme="https://weiblog.me/tags/2026/"/>
    <category term="福岡" scheme="https://weiblog.me/tags/%E7%A6%8F%E5%B2%A1/"/>
    <content>
      <![CDATA[<img src="/2026-04-30/2026-fukuoka-travel-3/image-0.jpg" class=""><div style="margin-bottom: 20px"></div><p>寫到第三篇時，距離出遊已經過了快一個月，發現真的要馬上把當下的想法和感受都記下來，不然很多記憶快煙消雲散。</p><p>如果想看 KidZania 心得可以直接跳到 <a href="#Lalaport-KidZania">這裡</a></p><h1 id="Day-5"><a href="#Day-5" class="headerlink" title="Day 5"></a>Day 5</h1><p>因為油布院的商店要大約十點才開，所以規劃 Day 4 就把這邊走完，這樣隔天早上可以直接前往下一個景點。</p><h3 id="秋月城跡"><a href="#秋月城跡" class="headerlink" title="秋月城跡"></a>秋月城跡</h3><p>原本沒有排這個景點，但是聽福岡回來的同事說這裡也是個賞櫻名點，前一晚看了一下 Threads 的消息，感覺還行就決定前往。</p><p>看地圖離油布院沒有很遠，但開車從交流道下來到秋月城跡還是開了一小段小路，在城跡附近就有停車場，停車費 400 日幣，離場前自行去一個窗口繳費就好。</p><p>杉の馬場真的是兩排超密集的櫻花樹，可惜來晚了枝頭都已經冒出綠芽，如果是滿開一定非常漂亮。即使如此，從枝葉間穿透的陽光在地上形成的光影也非常美麗。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-1.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-2.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-3.jpg" class="">  </div></div><p>路上遇到的遊客幾乎都是日本人，有對爺爺奶奶兩個人一起來到這邊旅行，看到我們帶著小孩就來寒暄了幾句。</p><p>午餐在黑門茶屋解決，如果是旺季這間位在杉の馬場中的小店根本是不可能吃到的，特色是他的葛餅和蒸雜煮（有點像是茶碗蒸但放了很多料，甚至有麻糬？），點了烏龍麵給小孩吃，他的麵條一吃驚為天人，非常Q彈而且入味，甜點是一杯混合黑糖和當地食材的冰沙。</p><p>路上有個小插曲是我和太太撿地上櫻花嘗試要拍出櫻吹雪的感覺，坐在一旁的日本歐吉桑就說要示範給我們看怎麼拍，接著就起身去搖櫻花樹，此舉實在太驚人，但讓我想到台灣有個網紅只是扶著櫻花枝拍照就被台灣人罵死，結果日本人是…</p><h3 id="太宰府"><a href="#太宰府" class="headerlink" title="太宰府"></a>太宰府</h3><p>秋月城跡到太宰府天滿宮不遠，可以沿著山邊開小路過去，一邊欣賞難得的景色一邊開車，路上車非常少久久才看到對向有一台車經過。</p><p>因為和一般遊客來的方向不同，我們直接把車開到九州國立博物館後面的停車場，這樣一下就能走到天滿宮。停車場很酷的是沒有人收費，要繳費是拿著放在桌上的小袋子裝 500 日圓然後寫上車號後丟進桶子裡。</p><p>天滿宮人潮實在有夠多，參道上都是人，摸個御神牛都要排一條超長人龍讓我直接放棄，直接進入神社內。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-4.jpg" class="">  </div></div><p>主殿好像在維護，所以另外在前面搭建了一個臨時的主殿，並且把祀器都移出來了。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-5.jpg" class="">  </div></div><p>建築都很漂亮，超級飽和的橘色居然不會讓畫面很突兀。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-6.jpg" class="">  </div></div><p>為了要買限定招財貓特地跑去 Beams，結果發現店內幾乎沒什麼可以買的，商品都被掃光了，而那隻熱門橘色招財貓店員跟我說要等五天才會再進貨。</p><p>忘了先查好這邊要吃什麼，只好在路上隨便看隨便吃，是沒買到特別難吃的食物，但好像就這樣，梅枝餅滿有特色的，熱的吃和冷的吃是兩種不同的風味。</p><h3 id="Budget-租車"><a href="#Budget-租車" class="headerlink" title="Budget 租車"></a>Budget 租車</h3><p>經過豪豪推薦，這次在福岡選了 Budget，我覺得優點是據點很多，線上預約全中文介面，ETC 和兒童座椅都能一起按完，搭配旅遊促銷折扣下來還算便宜。</p><p>還車的時候發現走國道的過路費高達 7000 日幣，看來這趟也是很會跑。第二次日本自駕完全沒打錯雨刷和方向燈，特此紀念。</p><h3 id="博多麵街道．Shin-Shin-拉麵"><a href="#博多麵街道．Shin-Shin-拉麵" class="headerlink" title="博多麵街道．Shin Shin 拉麵"></a>博多麵街道．Shin Shin 拉麵</h3><p>因為飯店距離博多車站不遠，晚餐就去車站二樓的博多麵街道，上樓只能搭乘手扶梯對嬰兒車不友善，經過很多家看起來很厲害的拉麵店，但是看到那個座位就知道帶小孩的人無緣，聽說 Shin Shin 拉麵親子友善，這邊剛好也有。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-9.jpg" class="">  </div></div><p>預約後很快進去了，雖然沒有兒童座椅，但餐點選擇還算多，而且因為很吵完全不怕影響到其他人，在這邊享用了拉麵啤酒大餐，麵條是我吃過最細的拉麵麵條，但口味只能說還好。</p><h3 id="The-Basic"><a href="#The-Basic" class="headerlink" title="The Basic"></a>The Basic</h3><p>老飯店翻新，看很多網紅推薦過一直想定看看但是價格都很貴，但太太意外用七折撿到超大坪數房間，算一下發現櫻花季這樣買沒有特別貴還是咬牙訂下去了。</p><p>有點可惜就是樓層夠高但是沒有住到面運河的那側，但是這個空間大人小孩都很舒適，值得!</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-7.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-8.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-10.jpg" class="">  </div></div><h1 id="Day-6"><a href="#Day-6" class="headerlink" title="Day 6"></a>Day 6</h1><h3 id="Lalaport-KidZania"><a href="#Lalaport-KidZania" class="headerlink" title="Lalaport KidZania"></a>Lalaport KidZania</h3><p>從博多車站到 Lalaport 可以直接搭公車 (46 或 46L) 直接到達。</p><p>早上直衝 KidZania 讓小孩玩個過癮，門票不便宜兩大一小要將近 5000 日幣，進去後發現完全不知道預約的規則浪費了不少時間，建議想去的人一定要做好功課！</p><p>每個小朋友在 KidZania 可以有一個銀行帳戶，在這邊活動有分成兩種，就業（賺錢）和消費（花錢）。參與賺錢的活動後會獲得工資，可以存入銀行帳戶，裡面也有提款機可以領現金。參與消費活動時例如買筆、搭觀光巴士就需要刷卡付費。</p><p>在 KidZania 裡面所有活動都是要預約了，一個小朋友一次可以預約兩項體驗，但是只能「向前預約」，這是什麼意思？</p><p>規則是這樣，入場後每個小朋友會拿到一張預約卡，每個體驗都有場次開始和結束的時間，預約第一個活動完想要預約第二個時，只能挑選結束時間比第一個預約開始「早」的活動，簡單來說就是禁止連續卡位，而且去預約只能小朋友本人。</p><p>舉例來說：</p><div style="border-radius: 12px; overflow: hidden; font-family: sans-serif; margin: 16px 0; border: 1px solid #eee;">  <div style="background: #c0392b; color: white; padding: 10px 20px; font-size: 14px; font-weight: bold;">❌ 狀況一：會被拒絕</div>  <div style="background: #fafafa; padding: 16px 20px;">    <div style="display: flex; align-items: center; margin-bottom: 10px;">      <span style="background: #2f4154; color: white; border-radius: 6px; padding: 2px 10px; font-size: 12px; font-weight: bold; white-space: nowrap; margin-right: 12px;">第一個預約</span>      <span>消防員　10:00 ～ 11:00</span>    </div>    <div style="display: flex; align-items: center; margin-bottom: 14px;">      <span style="background: #2f4154; color: white; border-radius: 6px; padding: 2px 10px; font-size: 12px; font-weight: bold; white-space: nowrap; margin-right: 12px;">第二個預約</span>      <span>外科醫生　11:10 ～ 12:00</span>    </div>    <div style="background: #fdecea; color: #c0392b; border-radius: 8px; padding: 10px 14px; font-size: 13px;">外科醫生結束時間（12:00）晚於消防員開始時間（10:00），預約失敗</div>  </div></div><div style="border-radius: 12px; overflow: hidden; font-family: sans-serif; margin: 16px 0; border: 1px solid #eee;">  <div style="background: #27ae60; color: white; padding: 10px 20px; font-size: 14px; font-weight: bold;">✅ 狀況二：預約成功</div>  <div style="background: #fafafa; padding: 16px 20px;">    <div style="display: flex; align-items: center; margin-bottom: 10px;">      <span style="background: #2f4154; color: white; border-radius: 6px; padding: 2px 10px; font-size: 12px; font-weight: bold; white-space: nowrap; margin-right: 12px;">第一個預約</span>      <span>消防員　10:00 ～ 11:00</span>    </div>    <div style="display: flex; align-items: center; margin-bottom: 14px;">      <span style="background: #2f4154; color: white; border-radius: 6px; padding: 2px 10px; font-size: 12px; font-weight: bold; white-space: nowrap; margin-right: 12px;">第二個預約</span>      <span>牙醫　9:00 ～ 9:50</span>    </div>    <div style="background: #eafaf1; color: #27ae60; border-radius: 8px; padding: 10px 14px; font-size: 13px;">牙醫結束時間（9:50）早於消防員開始時間（10:00），預約成功</div>  </div></div><p>分享一下懶人攻略：</p><ol><li>事先查好想體驗的活動，這超級重要，因為熱門的像是消防員、Pizza 店、空服員這種會直接被預約到秒殺當天直接結束。</li><li>開門進去就直衝最想體驗活動預約。</li><li>如果還有時間在開始前去銀行開戶，取得金融卡。</li><li>如果前面還有時間可以插入第二個活動就去預約。</li></ol><p>午餐可以直接在裡面吃烏龍麵，簡單快速，因為一個活動體驗都差不多 40 ~ 50 分鐘，整天下來能玩到的有限，我們是滿幸運平日來人沒有很多，花了很多時間搞懂規則還能玩到四項，其中有一個是熱門的新生兒室照顧者。</p><p>但真的覺得超對不起小孩，兩位大人沒有先做功課搞懂玩法，以為現場排隊就能玩到好玩的，導致最後沒有玩到超好玩的消防員。</p><h3 id="Lalaport"><a href="#Lalaport" class="headerlink" title="Lalaport"></a>Lalaport</h3><p>最後，我不是很推薦在 Lalaport 購物逛街，這邊觀光客超級多，本來以為來這邊可以把我們想買的東西買齊，結果要什麼沒什麼，ABC Mart 所有 Salomon 的鞋子都沒尺寸，想帶盞 Akari 也都沒貨…</p><p>要說這邊的優點就是美食街很大，帶小孩吃東西一樣沒壓力，除此之外我認為沒有要拍牛鋼或是玩 KidZania 真的可以不用浪費時間過來。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-11.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-30/2026-fukuoka-travel-3/image-12.jpg" class="">  </div></div><p>最後離開 Lalaport 只帶了草莓回飯店。</p><h1 id="後記"><a href="#後記" class="headerlink" title="後記"></a>後記</h1><p>這趟講最多日文居然是在從飯店到機場這段時間，因為坐在前座可以跟司機好好聊天，原來想聊天就是要坐前座嗎？！</p><p>這次就先寫到這邊，感謝大家耐心閱讀，有想到什麼再補充。</p><div style="display: flex; gap: 12px; margin: 40px 0 0; font-family: sans-serif;">  <a href="/2026-04-11/2026-fukuoka-travel-1/" style="flex: 1; display: block; background: #f5f7f9; border-radius: 10px; padding: 14px 18px; text-decoration: none; color: #2f4154; border: 1px solid #e0e0e0;">    <div style="font-size: 11px; color: #888; margin-bottom: 4px;">上篇</div>    <div style="font-weight: bold; font-size: 14px;">2026 福岡自由行（上）</div>  </a>  <a href="/2026-04-21/2026-fukuoka-travel-2/" style="flex: 1; display: block; background: #f5f7f9; border-radius: 10px; padding: 14px 18px; text-decoration: none; color: #2f4154; border: 1px solid #e0e0e0;">    <div style="font-size: 11px; color: #888; margin-bottom: 4px;">中篇</div>    <div style="font-weight: bold; font-size: 14px;">2026 福岡自由行（中）</div>  </a></div>]]>
    </content>
    <id>https://weiblog.me/2026-04-30/2026-fukuoka-travel-3/</id>
    <link href="https://weiblog.me/2026-04-30/2026-fukuoka-travel-3/"/>
    <published>2026-04-30T15:06:31.000Z</published>
    <summary>2026 福岡自由行 Day 5, Day 6</summary>
    <title>2026 福岡自由行 (下)</title>
    <updated>2026-05-04T12:56:34.149Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="技術筆記" scheme="https://weiblog.me/categories/%E6%8A%80%E8%A1%93%E7%AD%86%E8%A8%98/"/>
    <category term="AI" scheme="https://weiblog.me/tags/AI/"/>
    <category term="開發流程" scheme="https://weiblog.me/tags/%E9%96%8B%E7%99%BC%E6%B5%81%E7%A8%8B/"/>
    <category term="spec" scheme="https://weiblog.me/tags/spec/"/>
    <content>
      <![CDATA[<img src="/2026-04-29/ai-dev-spec-lesson/image-0.png" class=""><div style="margin-bottom: 20px"></div><p>今天在開發一個新功能時犯了一個錯誤，代價是一個工作天。</p><p>事情是這樣的，我們需要同時在新舊系統上實作一個新功能，舊的系統已經由同事開發完成，我只需要在新系統上實作一樣的功能就好。</p><p>在我還沒看文件前，先看了一下程式碼沒有很多，想說偷懶一下全部交給 AI 來改好了，所以我的作法是這樣：</p><ol><li>用 <code>git diff</code> 找出有修改的地方，讓 AI 根據變動寫成 spec。</li><li>讓 AI 拆解成可以被單獨驗證的 tasks</li><li>執行</li></ol><p>一邊驗證測試一邊讓 AI 持續開發，但是驗證到某個功能的時候覺得不太對，某個功能在這次的改動應該要被移除怎麼還在，而且被改成四不像。於是回頭檢查是不是 spec 有錯，後來發現 spec 沒有明確寫到這個要被移除，而且在舊有的 contract 中有寫到這個功能，所以 AI 還是遵守 contract 把這個功能保留下來，但產出了錯誤的程式碼。</p><p>接著我嘗試了第二種作法：</p><ol><li>用 <code>git diff</code> 找出修改的地方，並且把變動的 before 和 after 也一起寫進 spec 文件中</li><li>要求寫 code 前要先更新 contract</li><li>執行</li></ol><p>我發現這樣在實作的速度上快很多，而且產生的 spec 文件非常好讀，很快就能做一些調整後進到開發。</p><p>紀錄一下這次的 lesson learned：</p><ol><li>如果是讓 AI 先進行一次 summarize 產生的 spec 如果太過抽象，可能會漏掉細節。</li><li>如果專案有用到 contract，當需求有變動時務必要更新 contract，可以把這個寫進 workflow 中避免這樣的事情。</li><li>最後是提醒自己一定要把規格和文件都讀完再來實作，不然連 review AI 產生的 spec 都沒辦法看出問題。</li></ol>]]>
    </content>
    <id>https://weiblog.me/2026-04-29/ai-dev-spec-lesson/</id>
    <link href="https://weiblog.me/2026-04-29/ai-dev-spec-lesson/"/>
    <published>2026-04-29T12:49:14.000Z</published>
    <summary>今天在開發一個新功能時犯了一個錯誤，代價是一個工作天。</summary>
    <title>讓 AI 幫你寫 spec 前，你得先讀 spec</title>
    <updated>2026-05-04T12:56:34.177Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="隨筆" scheme="https://weiblog.me/categories/%E9%9A%A8%E7%AD%86/"/>
    <category term="電影" scheme="https://weiblog.me/tags/%E9%9B%BB%E5%BD%B1/"/>
    <category term="動畫" scheme="https://weiblog.me/tags/%E5%8B%95%E7%95%AB/"/>
    <content>
      <![CDATA[<img src="/2026-04-27/summer-wars-remaster/image-0.png" class=""><div style="margin-bottom: 20px"></div><p>算上這次我已經數不出來看過幾次夏日大作戰了，記得第一次是大學的時候，窩在宿舍用 PPS 殘破不堪的畫質把它看完，這次則是第一次在電影院看。當熟悉的主題曲響起，彷彿跟著健二一起回到學生時期的夏天，重新喜歡上學姐 (?)</p><p>劇情沒有什麼轉折，流暢地講一個夏天發生在陣內家族的事，但每次看到奶奶抄起電話簿開始打電話以及花扎大戰的畫面，配上松本晃彥的音樂，眼淚都會不自覺流下來，我幾乎是每看必哭。</p><p>本來以為入場觀看的人會很少，出乎意料還滿多人的，我以為這是像我們這樣有點年紀的人才會想進來回味？真令人好奇他們是為了海報進來看，還是這個時間沒有其他選擇。</p><p>有一個運鏡是所有陣內家人坐在緣側上，鏡頭從右帶到左邊，照出所有人的剪影，這個畫面讓我印象深刻的是，畫面沒有用到明顯的透視，以及前後景的大小，單純利用物體間移動的速度差來表現遠近，我覺得這個手法真的非常厲害（如果有講錯請指正我）。</p><p>第一次領海報，原來電影院給的不會有任何塑膠套或是海報筒的嗎！？ 還好當天沒有下雨，順利帶上車回家了。</p><figure>  <img src="/2026-04-27/summer-wars-remaster/image-1.jpg" class="">  <figcaption>配上在宜得利撿的海報框，還滿搭的</figcaption></figure>]]>
    </content>
    <id>https://weiblog.me/2026-04-27/summer-wars-remaster/</id>
    <link href="https://weiblog.me/2026-04-27/summer-wars-remaster/"/>
    <published>2026-04-27T15:26:15.000Z</published>
    <summary>又又又看了一次夏日大作戰，這次是電影院</summary>
    <title>夏日大作戰復刻</title>
    <updated>2026-05-04T12:56:34.301Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="隨筆" scheme="https://weiblog.me/categories/%E9%9A%A8%E7%AD%86/"/>
    <category term="Blog Blog 同樂會" scheme="https://weiblog.me/tags/Blog-Blog-%E5%90%8C%E6%A8%82%E6%9C%83/"/>
    <category term="生產力" scheme="https://weiblog.me/tags/%E7%94%9F%E7%94%A2%E5%8A%9B/"/>
    <content>
      <![CDATA[<img src="/2026-04-23/on-productivity/image-0.png" class=""><div style="margin-bottom: 20px"></div><h3 id="Blog-Blog-同樂會-四月的主題是-「生產力」，由-Wen-主持。"><a href="#Blog-Blog-同樂會-四月的主題是-「生產力」，由-Wen-主持。" class="headerlink" title="Blog Blog 同樂會 四月的主題是 「生產力」，由 Wen 主持。"></a><a href="https://blogblog.club/party/">Blog Blog 同樂會</a> 四月的主題是 <a href="https://www.wen-lab.tw/blogblog-party-productivity/">「生產力」</a>，由 <a href="https://www.wen-lab.tw/">Wen</a> 主持。</h3><br><br><p>談到生產力我會回想起數年前的工作，那是一個年輕人每天在燃燒自己獲得最大產出的情景，不知道是被責任感還是績效的焦慮推動著，時時刻刻都在想著不能浪費任何一點時間。</p><p>工作了一段時間，也閱讀了許多關於工作、人生的書籍，發現對於工作這件事情，是有很多種不同想法的。因此在這篇文章我想要來反思，生產力所為何事。</p><h3 id="生產力之於工作"><a href="#生產力之於工作" class="headerlink" title="生產力之於工作"></a>生產力之於工作</h3><p>談到生產力一定會先想到工作，所以在那之前先來談談工作。</p><p>在古希臘時期，比起「工作」，「閒暇」才是最重要的。亞里斯多德曾說過：「我們不處於閒暇，就是為了要處於閒暇。」換句話說 「工作就是為了不工作」，可以看出早期西方對工作的態度是「工作是一個不得已的手段」。</p><p>回到現代，我們被夢幻工作 (Dream Job) 吸引著，認為進到夢想中的公司就能獲得幸福、認為好的 Title 或者公司識別證能夠代表我們。每天奉獻大把時間，回到家卻只想上床睡覺，殷切地盼著週末來臨，然後開始下一個輪迴。</p><p>西方從鄙視工作到工作變成天命，這中間是發生了什麼變化？</p><p>韋伯在《新教倫理與資本主義精神》中解釋了喀爾文教派的邏輯：信徒為了確認自己是否能得救，瘋狂地在世俗工作中追求成功。而教會讓「勞動」從生存手段變成了神聖的「天職」。</p><p>這樣的觀念即使過了幾百年還殘留在我們的思想中，不知不覺變成沒有好好工作，就不算「成功」。有趣的是，在亞洲也鼓勵「勤勞是美德」，加上儒家及科舉制度，金榜題名就能光宗耀祖，這些思想沉澱了幾百年，讓我們不知不覺用工作來衡量一個人的成就。</p><p>現在回到生產力，如果說我們提高了生產力是為了「工作」，那我想反問，這些提高的生產力真的有讓我們遠離工作嗎？</p><h3 id="追求高效的代價"><a href="#追求高效的代價" class="headerlink" title="追求高效的代價"></a>追求高效的代價</h3><p>著名的帕金森定律告訴我們：「工作總會不斷膨脹，直到占滿所有可用的時間。」我們可能都有過這樣的經驗——下定決心要提早把事情做完，於是用番茄鐘保持專注，用時間箱規劃好每一個時段，終於把該做的都做完了。但主管發現有人手空出來，於是新的工作來了。效率提升的紅利，往往不是還給自己，而是被更多的工作填滿。</p><p>而過度追求高效，可能帶來負面的影響，作家摩根豪瑟在《一如既往》這本書中提到一個概念：「大部分事物都有自然發展的規模與速度，如果踰越限度，很快就會適得其反」。為了追求效率我們長期讓大腦滿載，我們以為多工可以不浪費任何一秒，但大腦在頻繁切換工作時也會造成損耗，沒有空出時間給大腦進行「發散模式」<sup id="fnref:1" class="footnote-ref"><a href="#fn:1" rel="footnote"><span class="hint--top hint--rounded" aria-label="大腦有兩種思考模式：「專注模式」用於解決已知問題，「發散模式」則在放鬆時運作，負責串聯想法與創意。參考《學習如何學習》。">[1]</span></a></sup>，長久下來注意力和創意下降，即使停下來休息也難以真正恢復。</p><h3 id="小結"><a href="#小結" class="headerlink" title="小結"></a>小結</h3><p>以前在專案中估工時，我都會估一個最樂觀的時間，以為這樣可以逼自己做更多。在重新了解工作與我的關係後，我越來越保守，還會刻意加上緩衝——不是因為變懶了，而是我知道「餘裕」的重要，是讓事情真正做好的空間。</p><p>生產力不是把每一秒都填滿，而是讓事情有空間好好完成。</p><section class="footnotes"><div class="footnote-list"><ol><li><span id="fn:1" class="footnote-text"><span>大腦有兩種思考模式：「專注模式」用於解決已知問題，「發散模式」則在放鬆時運作，負責串聯想法與創意。參考《學習如何學習》。<a href="#fnref:1" rev="footnote" class="footnote-backref"> ↩</a></span></span></li></ol></div></section>]]>
    </content>
    <id>https://weiblog.me/2026-04-23/on-productivity/</id>
    <link href="https://weiblog.me/2026-04-23/on-productivity/"/>
    <published>2026-04-23T13:04:55.000Z</published>
    <summary>Blog Blog 同樂會四月主題是生產力</summary>
    <title>談談生產力</title>
    <updated>2026-05-04T12:56:34.281Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="旅遊" scheme="https://weiblog.me/categories/%E6%97%85%E9%81%8A/"/>
    <category term="旅遊" scheme="https://weiblog.me/tags/%E6%97%85%E9%81%8A/"/>
    <category term="攝影" scheme="https://weiblog.me/tags/%E6%94%9D%E5%BD%B1/"/>
    <category term="日本" scheme="https://weiblog.me/tags/%E6%97%A5%E6%9C%AC/"/>
    <category term="2026" scheme="https://weiblog.me/tags/2026/"/>
    <category term="福岡" scheme="https://weiblog.me/tags/%E7%A6%8F%E5%B2%A1/"/>
    <content>
      <![CDATA[<img src="/2026-04-21/2026-fukuoka-travel-2/image-0.jpg" class=""><h1 id="Day-3"><a href="#Day-3" class="headerlink" title="Day 3"></a>Day 3</h1><h3 id="海之中道"><a href="#海之中道" class="headerlink" title="海之中道"></a>海之中道</h3><p>海之中道位在福岡市北邊，離市區有段距離，需要開車或搭乘大眾運輸前往，這次我們是開車前往，路程大約半小時。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-1.jpg" class="">  </div></div><p>自駕而且想租自行車的話可以考慮從東口、西口或奇妙世界入園，租車現在似乎沒有一日券了，一次租三小時，超時以一小時計價就看想玩多久。</p><p>我們很幸運剛好碰到櫻花季尾聲，可以一邊騎著腳踏車一邊欣賞櫻吹雪，因為是平日遊客沒有想像多，玩起來非常舒服。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-2.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-3.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-5.jpg" class="">  </div></div><p>園區內有很多大型兒童遊具、可愛動物區、水族館等等，如果是帶小孩來玩建議停留半天到一天，在奇妙世界可以買點東西吃。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-4.jpg" class="">  </div></div><h3 id="博多運河城"><a href="#博多運河城" class="headerlink" title="博多運河城"></a>博多運河城</h3><p>因為飯店停車場非常便宜但車位很少，在四點左右把車停回飯店接著散步去運河城逛街吃飯。</p><p>運河城還算好逛，是這次旅程僅次於天神的逛街地點，但逛一逛後看了一下時間，不知道哪根筋不對，發現好像有機會去吃一蘭，退完稅後就直奔位於中州的一蘭本店。沿著運河走，一邊欣賞河邊的建築一邊散步拍照，我想這就是看不到表演的原因吧。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-6.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-7.jpg" class="">  </div></div><h3 id="一蘭拉麵總本店"><a href="#一蘭拉麵總本店" class="headerlink" title="一蘭拉麵總本店"></a>一蘭拉麵總本店</h3><p>大約六點四十到一蘭門口，已經有很多人在排隊了，有很多韓國人和香港人，感覺台灣人是少數。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-8.jpg" class="">  </div></div><p>店員會把推娃娃車的客人排到一樓，店內有兒童座椅，適合一家人來吃。</p><p>一蘭有個特別的活動是只要下載一蘭 APP （iOS 需要在日本 App Store 下載）可以獲得兒童拉麵券，趁這次去體驗了一下兒童拉麵到底是怎樣。</p><p>本來興高采烈期待會吃到傳說中的五角碗，但後來才知道是太宰府店才有。因為排隊排太久最後連八點的表演也沒看到，還在外面吹風吹了一個小時，為了吃拉麵也沒在運河城逛個過癮。</p><p>吃一蘭是這次旅行第二個錯誤決定。</p><h1 id="Day-4"><a href="#Day-4" class="headerlink" title="Day 4"></a>Day 4</h1><p>早上退房完就發生一件令人膽戰心驚的事情，正當我們享用完早餐準備把行李搬上車時，發現放在置物區的行李箱不見了，外頭停了一台遊覽車，而司機正在一個接一個把地上的行李弄上車，原來是一團雄獅的旅行團準備要離開，把我們的行李也當成了他們團員的，我只好一件一件檢查，幸好手把上有掛一個 Line Friends 的吊牌，可以在遊覽車底快速的找到我們的行李。</p><p>說實話在看到遊覽車之前，我根本不知道有團客入住，加上放行李的地方都是吃早餐的人臨時放置的區域，他們這團也沒有作記號或是把行李圍起來，我們的行李就這樣被誤認了。</p><p>雖然我自己覺得很扯就是，難道不該是團客吃完早餐後把自己的行李推出去嗎，不是自己的就別碰。</p><p>這次學到兩個教訓：</p><ol><li>行李箱一定要有特別的記號，掛東西或是特殊貼紙都好</li><li>放行李的時候留意一下</li></ol><h3 id="九州自然動物園"><a href="#九州自然動物園" class="headerlink" title="九州自然動物園"></a>九州自然動物園</h3><p>這個動物園的賣點就是「マイカーサファリ」 也就是自駕遊園啦，意思就是可以開著自己的車進去繞園區一圈，這邊的動物在園區內是可以自由活動的，也就是說可能會遇到動物跑到路上造成汽車大排長龍這種事，畢竟這是他家嘛。 正常開車繞一圈走走停停加拍照大約花費四十分鐘到一小時。</p><figure style="text-align: center; margin-bottom: 10px">  <img src="/2026-04-21/2026-fukuoka-travel-2/image-11.jpg" class="">  <figcaption style="color: #888; font-size: 13px; margin-top: 6px">就是這種感覺</figcaption></figure><p>除了開車探險外，園區內還有叢林巴士（ジャングルバス）可以搭乘，搭乘叢林巴士可以近距離餵食動物，我們因為沒有預定到，當天大約十一點到整天的車次都賣光了，建議要搭乘叢林巴士的人一定要提前預約，或是當天早一點到。</p><p>每一區都會有工作人員駕駛的斑馬車在旁邊待命。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-9.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-10.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-12.jpg" class="">  </div></div><p>動物園我們只排半天多一點，開車慢慢繞了一圈吃完午餐後就前往由布院了，順帶一提，餐廳長得很像員工餐廳，但是漢堡排非常好吃。</p><h3 id="由布院"><a href="#由布院" class="headerlink" title="由布院"></a>由布院</h3><p>從九州動物園到由布院大約半小時，來玩動物園的人通常會住在別府或是由布院。</p><p>中間又發生一個驚魂記，在找停車場的過程中開過頭，路上又是單線道實黃線，我不敢迴轉掉頭，就一直開下去想說前面應該有地方可以迴轉，但越開越不對，開始爬山了還是沒有看到任何路口可以迴轉，只好在旁邊的避車灣等待時機迴轉。最後還是跨了實黃線迴轉…..</p><p>去民宿 Check In 完已經三點多了，剛好附近就有櫻花河堤，趁著還有光線我們沿著河堤前往最有名的湯之坪街道。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-15.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-16.jpg" class="">  </div></div><p>湯之坪街道和想像的有點不一樣，但也說不上為什麼，大概就是一條小小的街兩側都是商店，可以眺望遠處的由布岳。人潮很多，從語言上可以輕易判斷是韓國人還是香港人，日本人感覺都是在地人不是遊客。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-13.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-21/2026-fukuoka-travel-2/image-14.jpg" class="">  </div></div><p>因為走到湯之坪的時間已經有點晚了加上隔天早上想直接衝秋月城跡，就乾脆把花卉村、金麟湖也一起走完，大約五點多遊客就越來越少了，店家也陸續在打烊。</p><p>很糗的是，想說回程可以在車站附近買晚餐回去，殊不知走到這邊店也幾乎都打烊了，經過 Lawson 時還猶豫了一下要不要進去，這是這趟旅程第三個錯誤的決定：我們決定繼續走下去碰碰運氣，結果就是地圖上標了很多餐廳，但一間都沒開，只買了一份貴貴鰻魚飯回去民宿三個人分，差點沒被交誼廳傳來的泡麵味香死。</p><p>這次住的民宿就有湯屋，可以全家人一起進去洗澡泡湯，另外有兒童遊戲室，女兒第一次體驗在榻榻米和室中玩耍，玩到關門還不想回房睡覺。</p><figure style="text-align: center; margin-bottom: 10px">  <img src="/2026-04-21/2026-fukuoka-travel-2/image-17.jpg" class="">  <figcaption style="color: #888; font-size: 13px; margin-top: 6px">隔天早上趁家人還在睡覺自己跑出來散步拍照</figcaption></figure><h1 id="後記"><a href="#後記" class="headerlink" title="後記"></a>後記</h1><p>覺得油布院這邊時間排太少有點可惜，我們走到金麟湖的路上發現很多很好逛的小店，可惜都已經打烊，今天的時間也不足以讓我們好好逛，如果來這邊會想逛街的話，建議預留多一點時間逛逛走走。</p><div style="display: flex; gap: 12px; margin: 40px 0 0; font-family: sans-serif;">  <a href="/2026-04-11/2026-fukuoka-travel-1/" style="flex: 1; display: block; background: #f5f7f9; border-radius: 10px; padding: 14px 18px; text-decoration: none; color: #2f4154; border: 1px solid #e0e0e0;">    <div style="font-size: 11px; color: #888; margin-bottom: 4px;">上篇</div>    <div style="font-weight: bold; font-size: 14px;">2026 福岡自由行（上）</div>  </a>  <a href="/2026-04-30/2026-fukuoka-travel-3/" style="flex: 1; display: block; background: #f5f7f9; border-radius: 10px; padding: 14px 18px; text-decoration: none; color: #2f4154; border: 1px solid #e0e0e0;">    <div style="font-size: 11px; color: #888; margin-bottom: 4px;">下篇</div>    <div style="font-weight: bold; font-size: 14px;">2026 福岡自由行（下）</div>  </a></div>]]>
    </content>
    <id>https://weiblog.me/2026-04-21/2026-fukuoka-travel-2/</id>
    <link href="https://weiblog.me/2026-04-21/2026-fukuoka-travel-2/"/>
    <published>2026-04-21T13:41:34.000Z</published>
    <summary>2026 福岡自由行 Day 3, Day 4</summary>
    <title>2026 福岡自由行 (中)</title>
    <updated>2026-05-04T12:56:34.129Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="讀書心得" scheme="https://weiblog.me/categories/%E8%AE%80%E6%9B%B8%E5%BF%83%E5%BE%97/"/>
    <category term="學習" scheme="https://weiblog.me/tags/%E5%AD%B8%E7%BF%92/"/>
    <category term="讀書心得" scheme="https://weiblog.me/tags/%E8%AE%80%E6%9B%B8%E5%BF%83%E5%BE%97/"/>
    <content>
      <![CDATA[<img src="/2026-04-15/learning-how-to-learn-reading-notes/image-0.png" class=""><h2 id="關於這本書"><a href="#關於這本書" class="headerlink" title="關於這本書"></a>關於這本書</h2><p>作者芭芭拉‧歐克莉是密西根大學教授，也是暢銷書《大腦喜歡這樣學》的作者，本書就是她與其他作者一起將「Learning How to Learn」這門課程的精華，以淺顯易懂的方式整理寫給年輕讀者。</p><p>書中不僅從神經科學的角度解釋了大腦是怎麼儲存記憶的，也提供了許多能夠幫助學習的技巧。</p><p>這邊列出本書最重要的幾點：</p><ol><li>想要有效學習，最重要的就是要「專注」，專注是任何有效學習的重點。</li><li>大腦會在「專注」和「發散」模式中切換，專注模式進行深度思考，發散模式則是讓思緒任意遊走。</li><li>針對不同主題進行「交錯」學習，可以混入不同的思考方式，有助於提升理解。</li><li>運動可以提供神經元需要的營養物質 BDNF，讓神經元長得更大更強健。</li><li>刻意練習： 針對較難的教材持續且重複學習會比「懶惰的學習」更能刺激神經元生長。</li><li>積極回想： 不斷的讓大腦去回想已經學過的東西，可以將資訊放入記憶中。</li><li>番茄鐘工作法是一個符合腦科學的方法，讓我們可以在專注和發散模式間切換。</li></ol><h2 id="如果只能畫一條重點"><a href="#如果只能畫一條重點" class="headerlink" title="如果只能畫一條重點"></a>如果只能畫一條重點</h2><blockquote><p>專注模式和發散模式。大腦以兩種方式運作：專注和發散模式。你可以將它們想像成緩衝器密集和分散設置的兩種彈珠檯。我們需要轉換這兩種模式，以便能夠有效學習</p></blockquote><p>我認為了解大腦的這兩種模式可以提升我的學習成效，因為沒有人天生就知道要刻意在兩種模式間切換可以提升學習效果，過去唸書的方法可能都是埋頭苦讀，一次就是 K 一個上午的書，沒有人告訴我放空和專注一樣重要。</p><h2 id="和我的關係"><a href="#和我的關係" class="headerlink" title="和我的關係"></a>和我的關係</h2><p>讀完這本書後，開始嘗試書中提到的閱讀方式： 先用文本散步把章節標題都掃過，在腦中建立基本印象，接著在專注讀完後透過積極回想來強化記憶。</p><p>我會更積極的使用番茄鐘來學習和工作，強迫自己進入「專注」和「發散」的循環，只要想到，隨時隨地都能練習「積極回想」這個技巧，讓它變成安裝在腦中的預設軟體。</p><p>這本書沒有很多頁，但是非常多精彩的重點，真希望過去在唸書的時期就能夠學到這些學習技巧，可以有大把的時間練習和運用。</p>]]>
    </content>
    <id>https://weiblog.me/2026-04-15/learning-how-to-learn-reading-notes/</id>
    <link href="https://weiblog.me/2026-04-15/learning-how-to-learn-reading-notes/"/>
    <published>2026-04-15T13:07:48.000Z</published>
    <summary>本文為《學習如何學習》一書的讀後感。</summary>
    <title>【學習如何學習】讀後心得</title>
    <updated>2026-05-04T12:56:34.265Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="讀書心得" scheme="https://weiblog.me/categories/%E8%AE%80%E6%9B%B8%E5%BF%83%E5%BE%97/"/>
    <category term="AI" scheme="https://weiblog.me/tags/AI/"/>
    <category term="Claude Code" scheme="https://weiblog.me/tags/Claude-Code/"/>
    <category term="Roo Code" scheme="https://weiblog.me/tags/Roo-Code/"/>
    <content>
      <![CDATA[<div style="margin-bottom: 20px">  <img src="/2026-04-12/ai-workflow-is-your-ip/image-0.png" class=""></div><h2 id="為什麼會想讀這篇文章"><a href="#為什麼會想讀這篇文章" class="headerlink" title="為什麼會想讀這篇文章"></a>為什麼會想讀這篇文章</h2><p>在現在人人都在用 AI 加速的時代，實在很想知道別人是怎麼使用這些工具在開發的，在社群平台看到有人分享了太空人的 Kaxil 寫的文章讓我很感興趣。</p><p>文章中有段文字讓我印象深刻：</p><blockquote><p><strong>Your workflow IS your IP.</strong></p></blockquote><p>你怎麼使用 AI 工具的方式，才是你真正的競爭優勢，換句話說工具人人都能用，但能設計出高效 workflow 的人才是少數。</p><h2 id="Take-Away"><a href="#Take-Away" class="headerlink" title="Take Away"></a>Take Away</h2><h3 id="1-Skills：把你的知識轉成可重複執行的指令"><a href="#1-Skills：把你的知識轉成可重複執行的指令" class="headerlink" title="1. Skills：把你的知識轉成可重複執行的指令"></a>1. Skills：把你的知識轉成可重複執行的指令</h3><p>Skills 是一組明確的指示，告訴 AI 在特定情境下應該怎麼做，同時 Skill 可以呼叫其他 Skill，形成組合技。</p><p>這就像是把你的工作 SOP 編碼化。你只需要設計一次，之後每次執行都能得到一致的結果，不用每次都重新解釋背景和期望。</p><p>以這個部落格為例，我就設計了幾個 Skill，例如「幫文章插入封面圖」、「依照 Kevin 的寫作風格潤稿」。每個 Skill 都有明確的輸入和輸出，組合起來就能完成完整的發文流程。</p><h3 id="2-Hooks：讓-AI-不會暴衝的護欄"><a href="#2-Hooks：讓-AI-不會暴衝的護欄" class="headerlink" title="2. Hooks：讓 AI 不會暴衝的護欄"></a>2. Hooks：讓 AI 不會暴衝的護欄</h3><p>這是我覺得最實用的一個概念。</p><p>在平常使用 Roo Code 開發的過程中，發現即使在 Skill 裡寫了「遇到 A 情況就要執行 B」 這樣明確的指示，AI 有時候還是會選擇忽略它，這對 AI 來說沒有強制力，如果沒有自己看程式碼檢查就不會注意到這個不該犯錯的地方。</p><p>和 Skill 不一樣的是，Hooks 是在事件觸發時，由工具本身自動執行的 shell 指令。例如：每次 AI 寫完一段 code 就自動編譯或執行測試，沒過就無法繼續，這是系統層面的護欄。</p><h3 id="3-不同模型，不同用途"><a href="#3-不同模型，不同用途" class="headerlink" title="3. 不同模型，不同用途"></a>3. 不同模型，不同用途</h3><p>不是每件事都要用最強的模型。以 Claude Code 為例，Kaxil 的觀察是：</p><ul><li><strong>Sonnet</strong>：適合寫 code、日常任務，速度快、夠用</li><li><strong>Opus</strong>：適合深度規劃、架構設計，思考更全面</li></ul><p>用 Opus 寫 code 反而容易 overengineering，AI 會想得太複雜。選對模型不只是省錢，也是在保護你的結果品質。</p><p>除了開發，Kaxil 也把 AI 整合進更多日常工作，像是自動把會議記錄寫進 Obsidian。工作流不只是 coding，而是整個知識管理和溝通流程。</p><h2 id="對我的影響"><a href="#對我的影響" class="headerlink" title="對我的影響"></a>對我的影響</h2><p>學習到了 Hooks 的用法 (因為平常工作使用的 Roo Code 工作流沒有這個功能)。在 Skill 裡寫各種規範，但 AI 不一定會遵守，尤其在執行到一半、遇到模糊問題的時候，很容易就憑感覺自由發揮了。</p><p>這也給了我在公司開發的 side project – Roo Code CLI 一些靈感，例如實作 hooks 機制以及自動切換模型，讓整個 workflow 的可靠性會大幅提升。</p><p>讀到這段像是當頭棒喝，目前 AI 的產出速度已經超過我的 review 速度了，有時候測試跑過了就會偷懶不 review (So bad!)</p><blockquote><p>Learn to review code you didn’t write. This was always important. Now it’s the whole job.</p></blockquote><p>看樣子還是要認真把每一行看過。</p><p>最後複習這段我最喜歡的一句話:</p><blockquote><p>Your workflow IS your IP.</p></blockquote><p>這給了我一個明確的學習方向： 創造自己的工作流</p><h2 id="參考資料"><a href="#參考資料" class="headerlink" title="參考資料"></a>參考資料</h2><ul><li>原文：<a href="https://kaxil.substack.com/p/i-havent-written-a-line-of-code-in">I Haven’t Written a Line of Code in 4 Months (But I Ship More Than Ever)</a></li></ul>]]>
    </content>
    <id>https://weiblog.me/2026-04-12/ai-workflow-is-your-ip/</id>
    <link href="https://weiblog.me/2026-04-12/ai-workflow-is-your-ip/"/>
    <published>2026-04-12T15:25:01.000Z</published>
    <summary>讀 Kaxil 的文章 I Haven't Written a Line of Code in 4 Months 後的筆記</summary>
    <title>自己的 AI 工作流才是真正的護城河</title>
    <updated>2026-05-04T12:56:34.181Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="旅遊" scheme="https://weiblog.me/categories/%E6%97%85%E9%81%8A/"/>
    <category term="旅遊" scheme="https://weiblog.me/tags/%E6%97%85%E9%81%8A/"/>
    <category term="攝影" scheme="https://weiblog.me/tags/%E6%94%9D%E5%BD%B1/"/>
    <category term="日本" scheme="https://weiblog.me/tags/%E6%97%A5%E6%9C%AC/"/>
    <category term="2026" scheme="https://weiblog.me/tags/2026/"/>
    <category term="福岡" scheme="https://weiblog.me/tags/%E7%A6%8F%E5%B2%A1/"/>
    <content>
      <![CDATA[<img src="/2026-04-11/2026-fukuoka-travel-1/image-0.jpg" class=""><div style="margin-bottom: 20px"></div><p>原本沒有打算在清明連假出遊，但二月時不知道哪來的衝動訂了福岡的機票，和東京大阪相比福岡的班機選擇真的比較少，票價還不便宜。</p><p>一直以來都在 Instagram 上被推播各種福岡飯店名單，但因為太晚訂又遇到櫻花季尾聲，選擇實在不多，在快速規劃完想玩的景點後馬上把飯店刷了。</p><p>這次的行程大致如下，遊記會分成上中下三部。</p><div style="border-radius: 12px; overflow: hidden; font-family: sans-serif; margin: 24px 0;">  <div style="background: #2f4154; color: white; padding: 12px 20px; font-size: 14px; font-weight: bold; letter-spacing: 1px;">行程總覽</div>  <div style="background: #fafafa; padding: 8px 0;">    <div style="display: flex; align-items: flex-start; padding: 10px 20px; border-bottom: 1px solid #eee;">      <div style="background: #2f4154; color: white; border-radius: 6px; padding: 3px 10px; font-size: 12px; font-weight: bold; white-space: nowrap; margin-right: 14px; margin-top: 2px;">Day 1<br>4/4</div>      <div style="color: #444;">✈️ 去程 A321</div>    </div>    <div style="display: flex; align-items: flex-start; padding: 10px 20px; border-bottom: 1px solid #eee;">      <div style="background: #2f4154; color: white; border-radius: 6px; padding: 3px 10px; font-size: 12px; font-weight: bold; white-space: nowrap; margin-right: 14px; margin-top: 2px;">Day 2<br>4/5</div>      <div style="color: #444;">舞鶴公園 ・ 麵包超人博物館 ・ 天神</div>    </div>    <div style="display: flex; align-items: flex-start; padding: 10px 20px; border-bottom: 1px solid #eee;">      <div style="background: #2f4154; color: white; border-radius: 6px; padding: 3px 10px; font-size: 12px; font-weight: bold; white-space: nowrap; margin-right: 14px; margin-top: 2px;">Day 3<br>4/6</div>      <div style="color: #444;">🚗 海之中道 ・ 博多運河城</div>    </div>    <div style="display: flex; align-items: flex-start; padding: 10px 20px; border-bottom: 1px solid #eee;">      <div style="background: #2f4154; color: white; border-radius: 6px; padding: 3px 10px; font-size: 12px; font-weight: bold; white-space: nowrap; margin-right: 14px; margin-top: 2px;">Day 4<br>4/7</div>      <div style="color: #444;">🚗 九州動物園 ・ 由布院</div>    </div>    <div style="display: flex; align-items: flex-start; padding: 10px 20px; border-bottom: 1px solid #eee;">      <div style="background: #2f4154; color: white; border-radius: 6px; padding: 3px 10px; font-size: 12px; font-weight: bold; white-space: nowrap; margin-right: 14px; margin-top: 2px;">Day 5<br>4/8</div>      <div style="color: #444;">🚗 秋月城跡 ・ 太宰府天滿宮</div>    </div>    <div style="display: flex; align-items: flex-start; padding: 10px 20px; border-bottom: 1px solid #eee;">      <div style="background: #2f4154; color: white; border-radius: 6px; padding: 3px 10px; font-size: 12px; font-weight: bold; white-space: nowrap; margin-right: 14px; margin-top: 2px;">Day 6<br>4/9</div>      <div style="color: #444;">LaLaport</div>    </div>    <div style="display: flex; align-items: flex-start; padding: 10px 20px;">      <div style="background: #2f4154; color: white; border-radius: 6px; padding: 3px 10px; font-size: 12px; font-weight: bold; white-space: nowrap; margin-right: 14px; margin-top: 2px;">Day 7<br>4/10</div>      <div style="color: #444;">✈️ 回程 777-300ER</div>    </div>  </div></div><h1 id="Day-1"><a href="#Day-1" class="headerlink" title="Day 1"></a>Day 1</h1><p>原本小擔心清明連假北上桃機會塞車，意外地一路順暢，難得遇到一個不會亂開的機場接送司機，在車上舒服的睡了一覺。習慣上會提前兩小時多到機場報到，有充裕的時間可以在二航美食街慢慢閒晃，走著走著居然瞄到了雙月，而且還有供應雞湯和愛恨交織麵！</p><p>去程是搭空巴 A321，機體很小又沒有娛樂系統，原本搭飛機就會很緊張的我在上面如坐針氈，靠著手機上的單機小遊戲成功度過了這兩小時。</p><p>到達福岡機場大約是六點多，在排隊入境時看到有機邊托運娃娃車的家長都拿到車了但我們手上沒有，很緊張是不是我們下空橋應該要在那邊等，好在在行李轉盤旁邊發現我們的推車，而且是展開的狀態（地勤原來知道怎麼展開嗎？）。</p><p>福岡機場因為靠近市區很方便，飯店在附近的話可以直接搭計程車節省時間。但就在和司機溝通飯店時發生了小插曲，我們住的飯店有很多家分店，司機大哥以為就是博多市區那家，剛好分店中洲川端 (なかすかわばた) 漢字不會念，司機看地址看了很久才成功輸入到導航。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-1.jpg" class="">  </div></div><p>因為沒有很餓晚餐就去附近便利商店隨便買，順路去附近超市找找有沒有新鮮草莓，途中經過冷泉公園，雖然沒有點燈，但櫻花樹在路燈照射下依舊很美。</p><h1 id="Day-2"><a href="#Day-2" class="headerlink" title="Day 2"></a>Day 2</h1><h3 id="櫛田神社"><a href="#櫛田神社" class="headerlink" title="櫛田神社"></a>櫛田神社</h3><p>櫛田神社是舉辦博多祇園山笠祭典重要的場所，剛好在飯店附近，在搭地鐵前順道去走走。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-2.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-3.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-4.jpg" class="">  </div></div><figure style="text-align: center; margin-bottom: 10px; width: 60%; margin-left: auto; margin-right: auto">  <img src="/2026-04-11/2026-fukuoka-travel-1/image-5.jpg" class="">  <figcaption style="color: #888; font-size: 13px; margin-top: 6px">裡面的山笠約 10 ~ 15 公尺高，非常壯觀。</figcaption></figure><div style="width: 60%; margin: 0 auto 10px">  <img src="/2026-04-11/2026-fukuoka-travel-1/image-6.jpg" class=""></div><h3 id="舞鶴公園"><a href="#舞鶴公園" class="headerlink" title="舞鶴公園"></a>舞鶴公園</h3><p>接近櫻花季尾聲，決定調整行程先去舞鶴公園欣賞櫻花。天氣很好，但適逢假日遊客很多，櫻花樹下許多人帶著野餐墊和食物在樹下野餐。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-7.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-8.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-9.jpg" class="">  </div></div><figure style="text-align: center; margin-bottom: 10px">  <img src="/2026-04-11/2026-fukuoka-travel-1/image-12.jpg" class="">  <figcaption style="color: #888; font-size: 13px; margin-top: 6px">終於解鎖了，在櫻花樹下喝酒的人生清單。 桜より… ビール！</figcaption></figure><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-13.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-14.jpg" class="">  </div></div><p>賞櫻過程臭寶一直鬧事，一天下來不知道講了幾次「下次不帶你出門了」。</p><p>因為時間不夠，只能一邊遙望隔壁大濠公園滿開的櫻堤，一邊前往車站。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-10.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-11.jpg" class="">  </div></div><h3 id="麵包超人博物館"><a href="#麵包超人博物館" class="headerlink" title="麵包超人博物館"></a>麵包超人博物館</h3><p>有帶小孩到福岡必去的景點，在博多 Riverain 百貨的五樓，可以從中洲川端站六號出口直接搭電梯前往。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-15.jpg" class="">  </div></div><figure style="text-align: center; margin-bottom: 10px">  <img src="/2026-04-11/2026-fukuoka-travel-1/image-17.jpg" class="">  <figcaption style="color: #888; font-size: 13px; margin-top: 6px">專用推車停車場</figcaption></figure><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-16.jpg" class="">  </div></div><p>裡面可以玩的設施很多，也有陪玩姊姊，如果小朋友想盡情放電，推薦抓個兩小時以上。</p><p>SL 號小火車在入場時會拿到一張整理券，到指定搭乘時段後可以去月台搭乘，雖然說是月台，其實就是 Riverain 建築的一樓，要從特定的電梯搭下去一樓，到廣場後就會看到工作人員接待。</p><h3 id="天神"><a href="#天神" class="headerlink" title="天神"></a>天神</h3><p>本來應該是要來這邊盡情逛街的，但昨天吃壞肚子加上沒睡好，準備開逛時頭痛欲裂，兩個人只想隨便解決晚餐趕快回飯店睡覺。</p><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-18.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-19.jpg" class="">  </div></div><div style="width: 100%; display: flex; justify-content: center; margin-bottom: 10px">  <div style="padding: 5px; width: 90%">    <img src="/2026-04-11/2026-fukuoka-travel-1/image-20.jpg" class="">  </div></div><p>本來想說後面還有運河城和 Lalaport 可以逛，天神踩個點就好，事後回想這整趟旅行最好逛的就是這了。</p><div style="display: flex; gap: 12px; margin: 40px 0 0; font-family: sans-serif;">  <a href="/2026-04-21/2026-fukuoka-travel-2/" style="flex: 1; display: block; background: #f5f7f9; border-radius: 10px; padding: 14px 18px; text-decoration: none; color: #2f4154; border: 1px solid #e0e0e0;">    <div style="font-size: 11px; color: #888; margin-bottom: 4px;">中篇</div>    <div style="font-weight: bold; font-size: 14px;">2026 福岡自由行（中）</div>  </a>  <a href="/2026-04-30/2026-fukuoka-travel-3/" style="flex: 1; display: block; background: #f5f7f9; border-radius: 10px; padding: 14px 18px; text-decoration: none; color: #2f4154; border: 1px solid #e0e0e0;">    <div style="font-size: 11px; color: #888; margin-bottom: 4px;">下篇</div>    <div style="font-weight: bold; font-size: 14px;">2026 福岡自由行（下）</div>  </a></div>]]>
    </content>
    <id>https://weiblog.me/2026-04-11/2026-fukuoka-travel-1/</id>
    <link href="https://weiblog.me/2026-04-11/2026-fukuoka-travel-1/"/>
    <published>2026-04-11T12:37:53.000Z</published>
    <summary>2026 福岡自由行 Day 1, Day 2</summary>
    <title>2026 福岡自由行 (上)</title>
    <updated>2026-05-04T12:56:34.121Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="生活" scheme="https://weiblog.me/categories/%E7%94%9F%E6%B4%BB/"/>
    <category term="Blog Blog 同樂會" scheme="https://weiblog.me/tags/Blog-Blog-%E5%90%8C%E6%A8%82%E6%9C%83/"/>
    <content>
      <![CDATA[<img src="/2026-03-29/perfect-days/image-0.png" class=""><div style="margin-bottom: 20px"></div><h3 id="受到李唯邀請參加-Blog-Blog-同樂會-的投稿活動，三月的主題是-「理想的日常」，由-Alex-Hsu-主持。"><a href="#受到李唯邀請參加-Blog-Blog-同樂會-的投稿活動，三月的主題是-「理想的日常」，由-Alex-Hsu-主持。" class="headerlink" title="受到李唯邀請參加 Blog Blog 同樂會 的投稿活動，三月的主題是 「理想的日常」，由 Alex Hsu 主持。"></a>受到<a href="https://blog.wei-lee.me/">李唯</a>邀請參加 <a href="https://blogblog.club/party/">Blog Blog 同樂會</a> 的投稿活動，三月的主題是 <a href="https://alexhsu.com/perfect-days">「理想的日常」</a>，由 <a href="https://alexhsu.com/">Alex Hsu</a> 主持。</h3><br><br><blockquote><p>「週日早上和太太及家人一起在院子草地上野餐，小孩在一旁玩耍，我則獲得一個在陽光下悠哉看書的下午。有時下去陪小孩溜滑版，有時坐著思考。這是一個非常棒的週末早晨」</p></blockquote><br><p>說到理想的日常會讓我想起今年年初在一篇「最棒的週末」筆記中寫到的這段話。</p><p>沒有出門旅遊或是參與特別的活動，暫時放下了各種煩惱只專注在當下：有小孩、有溫暖的陽光、涼爽的微風還有短暫的空閒可以閱讀。</p><p>「那麼有辦法讓每天都感受到幸福嗎，天天都是理想的日常嗎？」</p><p>我認為是可以的，但前提是要先把感受幸福的能力找回來——而這需要一點自律。讓像是陪小孩玩、手沖咖啡、閱讀甚至是洗奶瓶這些稀鬆平常的瑣事也能夠創造出幸福感。</p><br><blockquote><p>生活の中に個人的な「小確幸」を見出すためには、多かれ少なかれ自己規制みたいなものが必要とされる。</p><p>—— 村上春樹《蘭格漢斯島の午後》</p></blockquote><br><p>最近讀了些書，才發現村上說的自律，和校正爽痛平衡的概念不謀而合，也許村上先生早就領悟到了吧。</p><p>能夠無時無刻感受這些微小的幸福，就是我理想的日常。</p>]]>
    </content>
    <id>https://weiblog.me/2026-03-29/perfect-days/</id>
    <link href="https://weiblog.me/2026-03-29/perfect-days/"/>
    <published>2026-03-28T23:45:56.000Z</published>
    <summary>Blog Blog 同樂會三月主題理想的日常</summary>
    <title>理想的日常</title>
    <updated>2026-05-04T12:56:34.285Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="隨筆" scheme="https://weiblog.me/categories/%E9%9A%A8%E7%AD%86/"/>
    <category term="自我成長" scheme="https://weiblog.me/tags/%E8%87%AA%E6%88%91%E6%88%90%E9%95%B7/"/>
    <category term="多巴胺" scheme="https://weiblog.me/tags/%E5%A4%9A%E5%B7%B4%E8%83%BA/"/>
    <category term="習慣養成" scheme="https://weiblog.me/tags/%E7%BF%92%E6%85%A3%E9%A4%8A%E6%88%90/"/>
    <content>
      <![CDATA[<img src="/2026-03-24/game-detox-30-days/image-0.png" class=""><div style="margin-bottom: 20px"></div><p>今天正是電玩排毒 - 刪光電腦中所有遊戲後的第三十天，紀錄一下。</p><h3 id="為什麼會開始電玩排毒"><a href="#為什麼會開始電玩排毒" class="headerlink" title="為什麼會開始電玩排毒"></a>為什麼會開始電玩排毒</h3><p>總是想著有好多事情想做以及學習，但是自己處於一種一放鬆就想打電動的「殭屍模式」<sup id="fnref:1" class="footnote-ref"><a href="#fn:1" rel="footnote"><span class="hint--top hint--rounded" aria-label="大腦放空、自動導航，不用思考地重複同樣行為。">[1]</span></a></sup>。<br>在閱讀<a href="/2026-03-09/dopamine-nation/">《多巴胺國度》</a>這本書時，學習到了成癮的機制還有延後享樂的好處，就趁這個機會來實驗一下吧。</p><p>因為要讓爽痛平衡<sup id="fnref:2" class="footnote-ref"><a href="#fn:2" rel="footnote"><span class="hint--top hint--rounded" aria-label="大腦中爽與痛的感覺如同翹翹板，追求刺激會讓翹翹板往「爽」傾斜，同時反彈的「痛」也會加大。長期下來支點位移，導致需要越來越強的刺激才能感到快樂。詳見[《多巴胺國度》讀後心得](/2026-03-09/dopamine-nation/)。">[2]</span></a></sup>回歸正常，需要遠離刺激（對我來說就是電玩）30 天左右，加上最近太想買一顆後背包，結合這兩項的規則就變成：</p><ul><li>連續 30 天不玩任何電玩，</li><li>如果有達成可以購買想要的背包</li><li>紀錄過程中的感受</li></ul><p>其實很久之前在準備面試或讀書時就有成功戒癮，但總是會在抱持「玩一下下也無妨」的情況下再度淪陷，特別是打了一個晚上都贏不了的英雄聯盟。</p><p>這次在過程中將注意力轉去從事閱讀、嘗試寫作、修照片甚至是和小孩一起倒頭就睡。轉眼間一個月就過去了，過程中有注意到幾個身體向外尋求多巴胺的信號：</p><ol><li>想要吃一堆垃圾食物，越油越鹹越好</li><li>想狂滑蝦皮或是淘寶等購物平台</li></ol><p>這些狀況大概過了兩週後就好轉了，給想要戒除自己「毒品」的每個人一點鼓勵，撐下去就好！</p><p>現在可以自由安排自己的 Me Time，看是要閱讀還是學習都可以，累了就直接去睡覺，這樣的晚上也挺不錯的。</p><h3 id="註解"><a href="#註解" class="headerlink" title="註解"></a>註解</h3><section class="footnotes"><div class="footnote-list"><ol><li><span id="fn:1" class="footnote-text"><span>大腦放空、自動導航，不用思考地重複同樣行為。<a href="#fnref:1" rev="footnote" class="footnote-backref"> ↩</a></span></span></li><li><span id="fn:2" class="footnote-text"><span>大腦中爽與痛的感覺如同翹翹板，追求刺激會讓翹翹板往「爽」傾斜，同時反彈的「痛」也會加大。長期下來支點位移，導致需要越來越強的刺激才能感到快樂。詳見<a href="/2026-03-09/dopamine-nation/">《多巴胺國度》讀後心得</a>。<a href="#fnref:2" rev="footnote" class="footnote-backref"> ↩</a></span></span></li></ol></div></section>]]>
    </content>
    <id>https://weiblog.me/2026-03-24/game-detox-30-days/</id>
    <link href="https://weiblog.me/2026-03-24/game-detox-30-days/"/>
    <published>2026-03-24T14:00:00.000Z</published>
    <summary>今天正是電玩排毒的第三十天，紀錄一下!</summary>
    <title>電玩排毒 30 天</title>
    <updated>2026-05-04T12:56:34.221Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="讀書心得" scheme="https://weiblog.me/categories/%E8%AE%80%E6%9B%B8%E5%BF%83%E5%BE%97/"/>
    <category term="閱讀力" scheme="https://weiblog.me/tags/%E9%96%B1%E8%AE%80%E5%8A%9B/"/>
    <category term="寫作" scheme="https://weiblog.me/tags/%E5%AF%AB%E4%BD%9C/"/>
    <category term="成功" scheme="https://weiblog.me/tags/%E6%88%90%E5%8A%9F/"/>
    <content>
      <![CDATA[<img src="/2026-03-15/against-the-current/image-0.png" class=""><h2 id="關於這本書"><a href="#關於這本書" class="headerlink" title="關於這本書"></a>關於這本書</h2><p>逆行人生這本書是韓國一位 30 歲實現財務自由退休的作者自青寫的，書中介紹了他如何從一位外貌、收入、課業都不起眼的年輕人，蛻變成擁有諸多事業的創業家。</p><p>作者提出了一個觀念，把過人生的方法分為兩類：</p><ol><li>順理人生者： 依循命運規劃，走上理所當然之路的人，和無路之路中保羅提到的「跳圈者」有異曲同工之妙。</li><li>逆行人生者： 違背命運，靠自己力量另闢路徑的人。</li></ol><p>而這本書，就是作者給每一個想成為逆行人生者的人，最具體的行動指南。</p><h2 id="如果只能畫一條重點"><a href="#如果只能畫一條重點" class="headerlink" title="如果只能畫一條重點"></a>如果只能畫一條重點</h2><blockquote><p>我認為我人生中做的最好的一點是實踐了「22策略」</p></blockquote><p>作者認為人生要成功、達成財富自由是有攻略的，因此他根據自己從谷底翻身的經驗，為逆行人生者整理出七個人生升級的階段，從自我意識的解體，一步步走向財務自由，但所有步驟方法都是圍繞著兩件事在進行： 「閱讀」和「寫作」。</p><p>作者自己每天堅持會花兩小時閱讀以及寫作，這就是有名的「22策略」。</p><p>我認為作者的觀念非常簡單：</p><figure class="highlight clean"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs clean">閱讀 + 寫作 -&gt; 大腦升級 -&gt; 有了各種解決問題的能力 -&gt; 邁向成功<br></code></pre></td></tr></table></figure><p>假設整本書讀完內容全忘光了，但只要記得持續做到 Input 和 Output，就能夠獲得解決問題的能力，在未知的人生中不再感到害怕。</p><h2 id="和我的關係"><a href="#和我的關係" class="headerlink" title="和我的關係"></a>和我的關係</h2><p>老實說在 AI 的浪潮下，身為軟體工程師我感到非常害怕，害怕有天跟不上變化。但自青的這本書給了我一個努力的方向，讓我看到了不同的可能。「只要持續做到閱讀和寫作，就算是我也能獲得解決問題的能力吧」，我心理是這樣想的，希望能持續透過寫自己的部落格來訓練思考。</p>]]>
    </content>
    <id>https://weiblog.me/2026-03-15/against-the-current/</id>
    <link href="https://weiblog.me/2026-03-15/against-the-current/"/>
    <published>2026-03-14T16:00:00.000Z</published>
    <summary>因為朋友推薦而開始閱讀這本可能沒這麼熱門的好書，強化了我閱讀和寫作的動力。</summary>
    <title>【逆行人生】讀後心得</title>
    <updated>2026-05-04T12:56:34.173Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="隨筆" scheme="https://weiblog.me/categories/%E9%9A%A8%E7%AD%86/"/>
    <category term="注意力" scheme="https://weiblog.me/tags/%E6%B3%A8%E6%84%8F%E5%8A%9B/"/>
    <category term="時間管理" scheme="https://weiblog.me/tags/%E6%99%82%E9%96%93%E7%AE%A1%E7%90%86/"/>
    <category term="生活思考" scheme="https://weiblog.me/tags/%E7%94%9F%E6%B4%BB%E6%80%9D%E8%80%83/"/>
    <content>
      <![CDATA[<div style="margin-bottom: 20px">  <img src="/2026-03-13/attention-is-the-most-valuable-asset/image-0.png" class=""></div><p>我們可能都聽過「注意力經濟」這個詞，可以說在這個時代誰掌握了注意力就能獲得巨大的財富。</p><p>下班了在通勤的火車上，用 Facebook 犒賞自己，滑過一則一則貼文，偶爾看看跳出來的愚蠢影片，不一會兒就回到家了。</p><p>用餐完，把孩子撂倒後終於迎來自己的小確幸時間，打開 Instagram 看看喜歡的攝影師有沒有新的作品，「喔！這則 Reels 好有趣他怎麼拍攝的？」… 回頭看時間已經一點了。</p><p>這就是每天發生在我身上的事情，白天總記掛著許多想做的事情，但回到家就把所有想法拋諸腦後。</p><p>但這其實不是我的問題，許多公司正是利用「成癮性」來綁架我們的注意力，而目的就是要透過大量的廣告獲得利益。這種系統不勝枚舉，舉凡讓人滑不停的社群平台、一直推薦優質好物的電商、贏或輸都會想來下一局的遊戲等等。</p><p>這難道不是我自己的選擇嗎？</p><p>直到某天坐在書桌前讀《多巴胺國度》，讀到每個人都有自己的「毒品」這件事，我愣了一下——原來我以為的「選擇」，只是大腦在追求多巴胺。</p><p>當經過精挑細選的貼文、短影音充斥在我眼前時，就不會注意到那些被冷落在一旁「真正想做的事」了。</p><p>因為這個時代注意力是一項很重要的資產，沒有好好留意，就會被偷走。你還記得上次在心中想著「總有一天我要學會…」嗎？</p>]]>
    </content>
    <id>https://weiblog.me/2026-03-13/attention-is-the-most-valuable-asset/</id>
    <link href="https://weiblog.me/2026-03-13/attention-is-the-most-valuable-asset/"/>
    <published>2026-03-13T04:00:00.000Z</published>
    <summary>在這個資訊爆炸的時代，注意力已成為最稀缺的資源。科技公司、媒體、廣告商都在搶奪你的注意力，而你卻渾然不覺。</summary>
    <title>注意力是最重要的資產，你不在乎就會被整碗端走</title>
    <updated>2026-05-04T12:56:34.185Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="讀書心得" scheme="https://weiblog.me/categories/%E8%AE%80%E6%9B%B8%E5%BF%83%E5%BE%97/"/>
    <category term="閱讀力" scheme="https://weiblog.me/tags/%E9%96%B1%E8%AE%80%E5%8A%9B/"/>
    <category term="注意力" scheme="https://weiblog.me/tags/%E6%B3%A8%E6%84%8F%E5%8A%9B/"/>
    <category term="知識管理" scheme="https://weiblog.me/tags/%E7%9F%A5%E8%AD%98%E7%AE%A1%E7%90%86/"/>
    <content>
      <![CDATA[<img src="/2026-03-09/dopamine-nation/image-0.jpg" class=""><h2 id="關於這本書"><a href="#關於這本書" class="headerlink" title="關於這本書"></a>關於這本書</h2><p>《多巴胺國度》(Dopamine Nation) 的作者是史丹佛大學醫學院的精神科教授安娜・蘭布克 (Anna Lembke)。安娜在這本書中透過和病患的對談，解釋了各式各樣的上癮狀況，並提供了一些治療的建議。<br>最重要的是，本書深入探討了「多巴胺」這個神經傳導物質如何影響我們的快樂與痛苦，以及大腦中「爽痛平衡」的機制。</p><h2 id="如果只能畫一條重點"><a href="#如果只能畫一條重點" class="headerlink" title="如果只能畫一條重點"></a>如果只能畫一條重點</h2><blockquote><p>「愉悅與痛覺的處理現場在大腦中有重疊的地方，且這兩者知覺的運作是透過一種拮抗機制。用白話講，就是爽與痛存在彼此消長的關係。」</p></blockquote><p>上面在講的就是<strong>爽痛平衡 (Pleasure and Pain Balance)</strong>。在腦中，爽與痛的感覺如同在玩一座翹翹板，在「爽」的這側下壓我們就會感到快樂，下壓的力道越大我們就越快樂。但同時，身體的平衡機制會對翹翹板的另一端「痛」下壓：這就是我們爽快地打完電動、吃完油膩炸雞後，會產生欲求不滿甚至空虛感的原因。<br>而大腦為了緩解這個空虛，會繼續鼓勵我們追求更多的多巴胺來往「爽」的方向壓，於是我們的遊戲一場接一場、垃圾食物一盤接一盤。</p><p>漸漸地，翹翹板開始對「爽」產生耐受性，亦即同樣的刺激已經沒辦法在「爽」這端下壓了。作者安娜用了一個生動的比喻：<strong>支點位移了</strong>。<br>當支點往「爽」這端靠近時，力臂變短，且相對的「痛」那端力臂變長了。這時生活中只要有一點不愉快在「痛」那端下壓，就能讓人感到巨大的痛苦與憂鬱——這就是現代人為什麼普遍不快樂的原因。</p><p>但這個機制還沒完，因為痛苦會促使人們追求更多「爽」的刺激來逃避，進而陷入了一個無窮迴圈，這就是成癮的機制。</p><p>好消息是，只要我們透過<strong>隔絕「爽」的刺激</strong>來打破這個迴圈，就能讓翹翹板自動回到當初平衡的狀態。回到平衡的狀態有許多好處：其中一個是只要一點微小的刺激就能獲得幸福感與快樂，同時也不用承受強烈的「痛」的反噬，讓我們在平常的生活中找到平靜及喜樂。</p><h2 id="和我的關係"><a href="#和我的關係" class="headerlink" title="和我的關係"></a>和我的關係</h2><p>過去上課被教導多巴胺會帶來快樂和幸福感，但讀完這本書才知道，多巴胺只是一個神經元間的傳導物質。它會刺激腦中的獎勵路徑，讓我們在「期待」的過程中感到興奮。這完美驗證了為什麼每次下訂東西前都會很興奮，但是這種興奮感在開箱後的一天、兩天內就會迅速消散。</p><p>意識到自己沉迷於電玩，並浪費了許多寶貴的自由時間後，我決定讓大腦的平衡回到正常的狀態。我馬上把 PC 中的遊戲都刪了，展開為期 30 天的「自縛」療程，並重拾閱讀、寫作等興趣來填補這中間多巴胺的落差。</p><p>同時，了解這個原理後，我也能更客觀地檢視自己的購物上癮習慣。我現在學會透過「延遲享樂」來平衡大腦，例如把最近想買的新玩具當成是 30 天自縛成功的獎勵——不僅找回了平靜，也讓獲得獎勵時的快樂更加純粹，一舉兩得。</p>]]>
    </content>
    <id>https://weiblog.me/2026-03-09/dopamine-nation/</id>
    <link href="https://weiblog.me/2026-03-09/dopamine-nation/"/>
    <published>2026-03-09T14:35:00.000Z</published>
    <summary>
      <![CDATA[<img src="/2026-03-09/dopamine-nation/image-0.jpg" class="">

<h2 id="關於這本書"><a href="#關於這本書" class="headerlink" title="關於這本書"></a>關於這本書</h2]]>
    </summary>
    <title>【多巴胺國度】讀後心得</title>
    <updated>2026-05-04T12:56:34.221Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="隨筆" scheme="https://weiblog.me/categories/%E9%9A%A8%E7%AD%86/"/>
    <category term="網域" scheme="https://weiblog.me/tags/%E7%B6%B2%E5%9F%9F/"/>
    <category term="Cloudflare" scheme="https://weiblog.me/tags/Cloudflare/"/>
    <category term="隨筆" scheme="https://weiblog.me/tags/%E9%9A%A8%E7%AD%86/"/>
    <content>
      <![CDATA[<img src="/2026-03-08/buying-domain-name/image-0.jpg" class=""><h1 id="終於買了網域名"><a href="#終於買了網域名" class="headerlink" title="終於買了網域名"></a>終於買了網域名</h1><p>最近剛把網誌從 GitHub Pages 搬到 Cloudflare Pages 上，發現 Cloudflare 提供了不少好用的功能，像是自訂網域、SSL、CDN 等等甚至連 Web Analytics 都有，而且後台介面操作也很直覺，就順手把網域也一起買了（之前都習慣在 Gandi 買）。</p><p>挑了很久，喜歡的太貴，便宜的又不符合需求，尋尋覓覓終於找到一個價錢不錯又有相關性的。</p><p>開心的下單後才發現，不對啊，如果網域名直接帶了 blog 字串，那子網域的彈性就少很多 (weiblog.me)，買都買了，這一年就加減先用吧。</p><p>我是一個很容易衝動購物的人，但我沒想到連買域名都能後悔。</p><h2 id="網域小科普：為什麼帶有特定字眼的網域不夠泛用？"><a href="#網域小科普：為什麼帶有特定字眼的網域不夠泛用？" class="headerlink" title="網域小科普：為什麼帶有特定字眼的網域不夠泛用？"></a>網域小科普：為什麼帶有特定字眼的網域不夠泛用？</h2><p>前面提到我買了 <code>weiblog.me</code> 後突然有點後悔，原因在於這會限縮未來擴充子網域（Subdomain）時的彈性。</p><p>在購買網域時，如果我們買了一個比較中性、沒有特定含義的主網域（例如 <code>wei.me</code>），未來就可以依照不同服務拆分出很多直覺的子網域配置，例如：</p><ul><li><code>blog.wei.me</code> (用來放部落格)</li><li><code>api.wei.me</code> (用來放後端 API 服務)</li><li><code>shop.wei.me</code> (用來放個人電商)</li><li><code>portfolio.wei.me</code> (用來放作品集)</li></ul><p>但當我的主網域直接包含了 <code>blog</code> 這個字串（變成 <code>weiblog.me</code>），未來如果要架設非部落格的服務，子網域配著唸起來就會變得很奇怪：</p><ul><li><code>api.weiblog.me</code> (部落格的 API 嗎？)</li><li><code>shop.weiblog.me</code> (在部落格周邊商店？)</li></ul><p>如果域名帶有特定用途的字眼，就很容易被綁死。在選購網域時，最好先思考一下未來有沒有擴充其他類型服務的可能。如果只打算拿來寫文章，那買帶有 blog 的網域當然沒問題；但如果考慮到未來想在同一個主網域下掛載各式各樣的 side project 或服務，一個乾淨、中性的名字會是更好的選擇。</p>]]>
    </content>
    <id>https://weiblog.me/2026-03-08/buying-domain-name/</id>
    <link href="https://weiblog.me/2026-03-08/buying-domain-name/"/>
    <published>2026-03-08T12:20:35.000Z</published>
    <summary>連買域名都能衝動購物，買完後悔的嗎？！</summary>
    <title>終於買了網域名</title>
    <updated>2026-05-04T12:56:34.205Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="技術筆記" scheme="https://weiblog.me/categories/%E6%8A%80%E8%A1%93%E7%AD%86%E8%A8%98/"/>
    <category term="OAuth 2.0" scheme="https://weiblog.me/tags/OAuth-2-0/"/>
    <category term="資安" scheme="https://weiblog.me/tags/%E8%B3%87%E5%AE%89/"/>
    <category term="授權" scheme="https://weiblog.me/tags/%E6%8E%88%E6%AC%8A/"/>
    <content>
      <![CDATA[<img src="/2026-03-07/oauth2-learning-notes/image-0.png" class=""><h2 id="OAuth-2-0-的四種核心角色"><a href="#OAuth-2-0-的四種核心角色" class="headerlink" title="OAuth 2.0 的四種核心角色"></a>OAuth 2.0 的四種核心角色</h2><p>在了解 OAuth 2.0 的運作之前，我們需要先認識參與其中的四個關鍵角色：</p><ol><li><strong>Resource Owner (資源擁有者)</strong>：通常就是指「使用者本人」。使用者擁有那些客戶端準備代為存取的受保護資源。</li><li><strong>Resource Server (資源伺服器)</strong>：實際裝載並保管使用者受保護資源的地方。</li><li><strong>Client (用戶端 &#x2F; 第三方應用程式)</strong>：代替使用者去存取受保護資源的應用程式。</li><li><strong>Authorization Server (授權伺服器)</strong>：負責驗證使用者的身分與授權意願，並核發 Token 給第三方應用程式的伺服器。</li></ol><h2 id="OAuth-2-0-的基本運作流程"><a href="#OAuth-2-0-的基本運作流程" class="headerlink" title="OAuth 2.0 的基本運作流程"></a>OAuth 2.0 的基本運作流程</h2><p>OAuth 的核心精神在於透過授權碼與 Token 交換權限，一個最標準的基本流程可以拆解為以下四個步驟：</p><ul><li><strong>步驟 A</strong>：使用者在 Authorization Server 進行登入，並同意授權給 Client。</li><li><strong>步驟 B</strong>：Authorization Server 確認授權後，回傳一組授權碼 (Authorization Code) 給 Client。</li><li><strong>步驟 C</strong>：Client 拿著這組授權碼，去向 Authorization Server 換取 Access Token (存取權杖)。</li><li><strong>步驟 D</strong>：Client 拿著 Access Token，正式向 Resource Server 請求並取得受保護的資料。</li></ul><h2 id="四種常見的授權模式-Authorization-Grants"><a href="#四種常見的授權模式-Authorization-Grants" class="headerlink" title="四種常見的授權模式 (Authorization Grants)"></a>四種常見的授權模式 (Authorization Grants)</h2><p>根據不同的應用場景需求，OAuth 2.0 定義了四種授權模式。這些模式實際上都是基於上述的「基本流程」進行適當的微調或刪減而來：</p><ol><li><strong>Authorization Code (授權碼模式)</strong></li><li><strong>Implicit (隱式授權模式)</strong></li><li><strong>Client Credentials (用戶端憑證模式)</strong></li><li><strong>Resource Owner Password Credentials (使用者密碼模式)</strong></li></ol><h3 id="1-Authorization-Code-授權碼模式"><a href="#1-Authorization-Code-授權碼模式" class="headerlink" title="1. Authorization Code (授權碼模式)"></a>1. Authorization Code (授權碼模式)</h3><p>這是最常見、也是<strong>安全性最高</strong>的模式。它的流程就是完整走完上述基本流程的 A 到 D 步驟。</p><p>在這個模式中，回傳的「授權碼」本身並不能直接用來存取資源，而且它的有效期限極短。Client 必須在後端伺服器拿著這個授權碼去 Authorization Server 換取 Access Token，才能真正去存取目標資源。這樣的設計能確保 Access Token 不會在瀏覽器或前端外洩。</p><p>下面來看一個我們最常見的例子：</p><p><img src="/2026-03-07/oauth2-learning-notes/image-1.svg" alt="OAuth 2.0 Authorization Code Flow"></p><h3 id="2-Implicit-Grant-隱式授權模式"><a href="#2-Implicit-Grant-隱式授權模式" class="headerlink" title="2. Implicit Grant (隱式授權模式)"></a>2. Implicit Grant (隱式授權模式)</h3><p>這個模式<strong>跳過了「用授權碼換 Access Token」的步驟 (即跳過步驟 C)</strong>。</p><p>當使用者同意授權後，Authorization Server 會直接把 Access Token 放在網址中回傳。這個模式通常應用於沒有後端的 SPA (Single-Page Application) 單頁式應用程式，讓前端可以直接拿著 Access Token 去呼叫 API。</p><p>因為 Access Token 在交換過程中會直接暴露在 URL 中，這個方法非常不安全，在現代的開發中已經不被推薦使用。甚至在 OAuth 2.1 中已經被棄用。</p><h3 id="3-Client-Credentials-用戶端憑證模式"><a href="#3-Client-Credentials-用戶端憑證模式" class="headerlink" title="3. Client Credentials (用戶端憑證模式)"></a>3. Client Credentials (用戶端憑證模式)</h3><p>這個模式<strong>跳過了需要使用者參與的步驟 A 與 B</strong>。</p><p>在這種情境下，Client 自己本身就是資源擁有者。Client 擁有一組自己的 Secret Key，它可以直接拿著這組 Key 去向 Authorization Server 證明自己的身分，並直接換取 Access Token。通常用於內部微服務或伺服器對伺服器 (M2M) 的 API 溝通。</p><h3 id="4-Resource-Owner-Password-Credentials-使用者密碼模式"><a href="#4-Resource-Owner-Password-Credentials-使用者密碼模式" class="headerlink" title="4. Resource Owner Password Credentials (使用者密碼模式)"></a>4. Resource Owner Password Credentials (使用者密碼模式)</h3><p>這個模式同樣<strong>跳過了步驟 A 與 B</strong>。</p><p>作法是讓使用者直接把帳號密碼交給 Client，然後讓 Client 在步驟 C 拿著使用者的帳號密碼去向 Authorization Server 取得 Access Token。</p><p>這個作法也就是把密碼完全交付給了第三方，<strong>極度不安全</strong>，所以只能用在「絕對可信任」的 Client 上，例如作業系統內建的 App 或公司自家的內部應用系統。</p><h2 id="Summary"><a href="#Summary" class="headerlink" title="Summary"></a>Summary</h2><p>OAuth 2.0 是一個規範，主要用來解決如何在不給出密碼的情況下，安全地讓第三方應用程式可以存取使用者在某個服務上的資源。共有四種不同模式，其中最常被應用也是最安全的為授權碼模式。</p><p>最後補充一點，包含我自己，很多人會把 OAuth 和 SSO 搞混，以為看到授權頁面就是在做登入。這其實只對了一半：SSO 通常會搭配 OIDC (OpenID Connect) 來達到「認證 (Authentication)」及「授權 (Authorization)」，而 OAuth 這個機制本身，嚴格來說只負責處理**「授權」**的部分，像是授權第三方應用存取使用者的 FB 大頭照、信箱等等。</p><h2 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h2><ol><li><a href="https://datatracker.ietf.org/doc/html/rfc6749#section-1.1">RFC6749</a></li><li><a href="https://learn.microsoft.com/zh-tw/entra/identity-platform/v2-protocols">Microsoft Learn</a></li></ol>]]>
    </content>
    <id>https://weiblog.me/2026-03-07/oauth2-learning-notes/</id>
    <link href="https://weiblog.me/2026-03-07/oauth2-learning-notes/"/>
    <published>2026-03-07T07:08:15.000Z</published>
    <summary>OAuth 2.0 是一個開放標準的授權協定，主要用來解決如何在「不給出帳號密碼」的情況下，安全地讓第三方應用程式存取使用者在某個服務上的受保護資源。</summary>
    <title>OAuth 2.0 學習筆記</title>
    <updated>2026-05-04T12:56:34.273Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="隨筆" scheme="https://weiblog.me/categories/%E9%9A%A8%E7%AD%86/"/>
    <category term="閱讀器" scheme="https://weiblog.me/tags/%E9%96%B1%E8%AE%80%E5%99%A8/"/>
    <category term="心得" scheme="https://weiblog.me/tags/%E5%BF%83%E5%BE%97/"/>
    <category term="Kobo" scheme="https://weiblog.me/tags/Kobo/"/>
    <content>
      <![CDATA[<img src="/2026-03-04/is-color-ereader-really-suitable-for-me/image-0.png" class=""><h3 id="閱讀、閱讀、閱讀"><a href="#閱讀、閱讀、閱讀" class="headerlink" title="閱讀、閱讀、閱讀"></a>閱讀、閱讀、閱讀</h3><p>目前的閱讀習慣是紙本書和電子書雙管齊下。能帶紙本就帶紙本，出門則拎著 Kobo Sage，利用零碎時間繼續閱讀。在看了《逆行人生》這本書後，我為自己建立了一個「只要有空檔就閱讀」的習慣，期望能放大輸入的資訊量。</p><p>於是我開始物色可以放進口袋的電子閱讀器。正好 Kobo 就有一台 Clara —— 六吋的螢幕、可一手掌握，還能輕鬆塞進口袋，各方面都滿足我的需求；而且它有漂亮的白色版，還是彩色的。下訂的當下沒想太多，單純覺得彩色螢幕用起來應該只會更爽吧。</p><h3 id="Clara-Colour-vs-Sage"><a href="#Clara-Colour-vs-Sage" class="headerlink" title="Clara Colour vs Sage"></a>Clara Colour vs Sage</h3><p>在網路上下訂後，很快就拿到實機了。拆封、開機、登入帳號，我熟練地操作著 Clara Colour，將正在閱讀的書都準備好。快速瀏覽了幾頁，使用上很順暢，UI&#x2F;UX 和手上的 Kobo Sage 相同，主要只差在螢幕大小和有無實體按鍵。讓人印象深刻的是，彩色的書封非常賞心悅目。</p><div style="width: 100%; display: flex; justify-content: center">  <div style="padding: 5px; width: 70%">    <img src="/2026-03-04/is-color-ereader-really-suitable-for-me/image-1.jpg" class="">  </div></div><p>快速地和我的 Kobo Sage 作個比較：</p><ul><li><strong>螢幕與尺寸</strong>：Clara 是六吋彩色，Sage 是八吋黑白。</li><li><strong>手感與操作</strong>：Clara 裸機的握感非常好，翻頁主要透過點擊和滑動；Sage 則有實體按鍵，操作起來非常方便。</li><li><strong>螢幕設計</strong>：Sage 的螢幕和機身是全平面的，手指滑動到邊界時沒有段落感；而 Clara 的螢幕則是稍微下凹的。除了手感差異，還有美觀考量 - 同樣是六吋的機器，我覺得 Kindle Paperwhite 的全平面設計更勝一籌。</li><li><strong>額外功能</strong>：Sage 支援觸控筆寫字劃線，Clara 則無此功能。</li><li><strong>亮度與對比</strong>：Clara Colour 的彩色螢幕亮度偏暗，即使在陽光下也必須開啟背光才能閱讀；相比之下，黑白的 Sage 在戶外陽光下對比度極高，字體清晰，讀起來非常舒服。</li></ul><h3 id="我真的讀不下去了"><a href="#我真的讀不下去了" class="headerlink" title="我真的讀不下去了"></a>我真的讀不下去了</h3><p>然而，就在我看了大約五分鐘後，眼睛開始感到刺痛，竟然連一頁都無法再看下去。起初我以為是今天太累或用眼過度，便先去吃飯、洗澡，稍作休息後再次坐回書桌前閱讀。但同樣看了幾頁，又開始感到頭暈和眼睛痠痛。</p><p>我開始懷疑是不是自己身體出了什麼狀況，於是跑到 Reddit 和臉書社團爬文。後來才得知，彩色螢幕因為多了一層彩色濾光片，不僅會降低螢幕亮度，也會讓文字的對比度下降。在我的眼裡，Clara Colour 的文字看起來真的是模糊的，越看越疲勞、越看越刺痛。我試過網友提供的各種方法：調整色溫、改變字型、調整字體間距等，但還是無法讓我連續閱讀超過三分鐘。</p><p>最後只好忍痛退貨，並重新訂了一台黑白版的 Clara BW。</p><h3 id="回歸純粹：Clara-BW"><a href="#回歸純粹：Clara-BW" class="headerlink" title="回歸純粹：Clara BW"></a>回歸純粹：Clara BW</h3><p>收到 Clara BW 後，可以說沒有什麼新鮮感，因為這完全符合我的預期，有一種「老朋友回歸」的踏實感。輕巧的手感、高對比度的清晰顯示，丟進口袋就能隨時帶出門。</p><div style="width: 100%; display: flex; justify-content: center">  <div style="padding: 5px; width: 70%">    <img src="/2026-03-04/is-color-ereader-really-suitable-for-me/image-2.jpg" class="">  </div></div><br/><p>其他同事使用 Kobo Libra Colour 都非常開心，整天閱讀下來也沒有出現像我這樣的症狀，看來單純是我的眼睛與 Kobo 的彩色螢幕不對盤。</p><p>針對我目前閱讀純文字書籍的需求來說，黑白螢幕還是最合適的選擇，看一整天也不容易累。至於彩色閱讀器只好期待電子墨水技術能持續進步，希望未來有一天，我也能入手一台漂亮白色 Kobo 閱讀器。</p>]]>
    </content>
    <id>https://weiblog.me/2026-03-04/is-color-ereader-really-suitable-for-me/</id>
    <link href="https://weiblog.me/2026-03-04/is-color-ereader-really-suitable-for-me/"/>
    <published>2026-03-04T15:10:59.000Z</published>
    <summary>手癢買了彩色的 Kobo 閱讀器，但用沒多久才發現我根本無法閱讀下去？！</summary>
    <title>彩色電子閱讀器真的適合我嗎？</title>
    <updated>2026-05-04T12:56:34.261Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="隨筆" scheme="https://weiblog.me/categories/%E9%9A%A8%E7%AD%86/"/>
    <category term="AI" scheme="https://weiblog.me/tags/AI/"/>
    <category term="經濟" scheme="https://weiblog.me/tags/%E7%B6%93%E6%BF%9F/"/>
    <category term="躺平" scheme="https://weiblog.me/tags/%E8%BA%BA%E5%B9%B3/"/>
    <category term="休閒奢侈品" scheme="https://weiblog.me/tags/%E4%BC%91%E9%96%92%E5%A5%A2%E4%BE%88%E5%93%81/"/>
    <content>
      <![CDATA[<div style="margin-bottom: 10px">  <img src="/2026-03-03/lying-flat-economics/image-0.png" class=""></div><p>有沒有想過，為什麼現在越來越多年輕人選擇躺平？除了大環境的變化，科技的進步可能也是其中一個推手。</p><h3 id="休閒奢侈品"><a href="#休閒奢侈品" class="headerlink" title="休閒奢侈品"></a>休閒奢侈品</h3><p>Mark Aguiar 在 2020 發表的論文，裡面提到在美國 21 ~ 30 歲的年輕人在過去十幾年來的每週勞動時數有下降的趨勢，同時增加的休閒時間以及花費在電玩的時間逐年增高。</p><p>Aguiar 等人從數據中得出電玩具有「休閒奢侈品」的特性，每當休閒時間多出 1%，年輕人花費在電腦或電玩上的時間就會多出 2.48%，這在經濟學上稱為所得彈性大於 1，意即當你擁有更多資源——也就是休閒時間時，你會不成比例地投入更多在上面。</p><p>成為休閒奢侈品意味著電玩的邊際效益遞減的很慢，意味著連續打電動五小時可能都還是能獲得相同的滿足感。年輕人會將多出來的休閒時間持續投入在電玩上，而不是想辦法從工作中獲得滿足感。現在演算法與各種遊戲機制能夠讓我們的大腦追求更多多巴胺，科技產物牢牢抓住我們的注意力與時間，因此年輕人寧可拿時間去打電動或滑社群媒體，也不願意去加班或爭取升遷。</p><h3 id="未來的挑戰：AI-時代的休閒盈餘"><a href="#未來的挑戰：AI-時代的休閒盈餘" class="headerlink" title="未來的挑戰：AI 時代的休閒盈餘"></a>未來的挑戰：AI 時代的休閒盈餘</h3><p>我們現在正面臨 AI 帶來的工作模式變化，未來如果因為生產力大幅提升，所有人都獲得了更多的休閒時間，是否會有更多的休閒奢侈品產生呢？</p><p>當我們有更多時間時，我們會用來創造更有價值的生命體驗，還是會集體沈溺在邊際效益遞減極慢的數位黑洞中？這或許是一個值得我們深思的問題。</p><h3 id="參考資料"><a href="#參考資料" class="headerlink" title="參考資料"></a>參考資料</h3><ol><li>Leisure Luxuries and the Labor Supply of Young Men(<a href="https://www.markaguiar.com/citation/leisure-luxuries">https://www.markaguiar.com/citation/leisure-luxuries</a>)</li></ol><h2 id="參考資料-1"><a href="#參考資料-1" class="headerlink" title="參考資料"></a>參考資料</h2><ol><li>Aguiar, Mark. 2020. “Leisure Luxuries and the Labor Supply of Young Men.” Accessed March 4, 2026. <a href="https://www.markaguiar.com/citation/leisure-luxuries">https://www.markaguiar.com/citation/leisure-luxuries</a></li></ol>]]>
    </content>
    <id>https://weiblog.me/2026-03-03/lying-flat-economics/</id>
    <link href="https://weiblog.me/2026-03-03/lying-flat-economics/"/>
    <published>2026-03-02T16:00:00.000Z</published>
    <summary>
      <![CDATA[<div style="margin-bottom: 10px">
  <img src="/2026-03-03/lying-flat-economics/image-0.png" class="">
</div>


<p>有沒有想過，為什麼現在越來越多年輕人選擇躺平？除了大]]>
    </summary>
    <title>躺平的經濟學：當電玩的所得彈性超越了勞動的邊際回報</title>
    <updated>2026-05-04T12:56:34.265Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="隨筆" scheme="https://weiblog.me/categories/%E9%9A%A8%E7%AD%86/"/>
    <category term="散漫力" scheme="https://weiblog.me/tags/%E6%95%A3%E6%BC%AB%E5%8A%9B/"/>
    <category term="輸入與輸出" scheme="https://weiblog.me/tags/%E8%BC%B8%E5%85%A5%E8%88%87%E8%BC%B8%E5%87%BA/"/>
    <category term="知識管理" scheme="https://weiblog.me/tags/%E7%9F%A5%E8%AD%98%E7%AE%A1%E7%90%86/"/>
    <category term="自動化工具" scheme="https://weiblog.me/tags/%E8%87%AA%E5%8B%95%E5%8C%96%E5%B7%A5%E5%85%B7/"/>
    <content>
      <![CDATA[<div style="margin-bottom: 20px">  <img src="/2026-02-22/brain-automation-and-input/image-0.png" class=""></div><p>我平時都會有想要學習或研究的東西以及各種不同的想法，但是過去一段時間覺察到自己變成了一個無聊、停止思考的人。</p><p>某天突然領悟到這是因為資訊的 Input 太少，當我在 FB 技術社團看到一些應用，發現腦袋開始轉起來了：「家裡剛好有一台閒置的 Mac Mini，是不是可以拿來養龍蝦？」「有了龍蝦後是不是可以幫我自動過濾 FB 上對我有價值的資訊並推播給我」一連串的想法接踵而來。</p><p>在「逆行人生」這本書中作者提到了「大腦自動化」這個概念。當大腦被不斷的訓練後，即使沒有在學習也能夠無時無刻的進行思考，要訓練大腦就要有 Input，因此大量接收資訊以及閱讀就是最好的方法。</p><p>雖然現在是個資訊爆炸的時代，但不是所有資訊都是有意義的。如果只是被動的接受「推式資訊」，光是過濾演算法給出的垃圾就已經筋疲力盡了。閱讀書籍當然是一個最簡單的方法，但我還是要找到一個方法來大量獲得有益的網路資訊。</p>]]>
    </content>
    <id>https://weiblog.me/2026-02-22/brain-automation-and-input/</id>
    <link href="https://weiblog.me/2026-02-22/brain-automation-and-input/"/>
    <published>2026-02-22T08:56:11.000Z</published>
    <summary>大腦自動化需要不斷的資訊輸入刺激，探討如何通過有效的信息獲取來驅動思考能力。</summary>
    <title>腦中毫無想法是因為 Input 太少</title>
    <updated>2026-05-04T12:56:34.189Z</updated>
  </entry>
  <entry>
    <author>
      <name>wei</name>
    </author>
    <category term="技術筆記" scheme="https://weiblog.me/categories/%E6%8A%80%E8%A1%93%E7%AD%86%E8%A8%98/"/>
    <category term="Google Apps Script" scheme="https://weiblog.me/tags/Google-Apps-Script/"/>
    <category term="Line Bot" scheme="https://weiblog.me/tags/Line-Bot/"/>
    <category term="Clasp" scheme="https://weiblog.me/tags/Clasp/"/>
    <category term="Webhook" scheme="https://weiblog.me/tags/Webhook/"/>
    <category term="timeout" scheme="https://weiblog.me/tags/timeout/"/>
    <content>
      <![CDATA[<div style="margin-bottom: 20px">  <img src="/2026-01-10/build-line-bot-with-gas/image-0.png" class=""></div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>最近看完書領悟到了一點 「要解決財務焦慮的第一步，就是要知道家庭支出」，於是開始研究了一下市面上的可以協作的記帳軟體，但不是要付費就是功能太複雜，最後決定自己開發一個來試試看。</p><h2 id="目標與設計"><a href="#目標與設計" class="headerlink" title="目標與設計"></a>目標與設計</h2><p>我目前想要的功能很簡單，就是有個介面可以輸入記帳項目，然後可以把交易記錄到 Google Sheet 上就好，反正要整理分析最後人工來作也不會花上太多時間。</p><p>想到之前一直想要來玩玩看 Google Apps Script (以下都簡稱 GAS)，加上 GAS 又能無縫串接 Google Sheet，正好符合這次的需求。</p><p>初步架構就決定是這樣了:</p><div style="display: flex; justify-content: space-evenly">  <div style="padding: 5px; width: 40%">    <img src="/2026-01-10/build-line-bot-with-gas/image-1.png" class="">  </div></div><h2 id="開發過程"><a href="#開發過程" class="headerlink" title="開發過程"></a>開發過程</h2><p>全程 Vibe coding 都讓 AI 寫，我只負責測試以及驗收功能，還有設定 Line Channel 這些後台設定而已。</p><p>GAS 其實就是一個 PaaS 服務，使用者只需要照自己的業務邏輯撰寫程式碼，後面的執行環境、部屬等等 GAS 都會幫你準備好，讓像我這樣的懶人可以很快的直接看到成果。難怪很多人會拿 GAS 當作軟體工程啟蒙，這比寫爬蟲什麼有趣多了。</p><p>要開發 GAS 可以直接在 GAS 的網頁上開發;或是像我一樣在自己的 IDE 上開發完，再利用 <code>clasp</code> 這個 CLI 工具推送到 GAS 上完成部屬，後者的好處是會有一份程式碼在 local，可以使用 IDE 或是 AI 工具協助開發。（相信我你不會想在 IDE 寫完程式碼，然後用複製貼上的方式去網頁版編輯器）</p><p>GAS 執行時的運作也很簡單，就是兩個入口：</p><figure class="highlight wren"><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><code class="hljs wren"><span class="hljs-variable">function</span> <span class="hljs-title function_">doGet</span>(<span class="hljs-params">e</span>) &#123;&#125;<br><br><span class="hljs-variable">function</span> <span class="hljs-title function_">doPost</span>(<span class="hljs-params">e</span>) &#123;&#125;<br><br></code></pre></td></tr></table></figure><p>我們把需要的 callback 邏輯寫在這兩個函式中，以我的案例要接 Line Messaging API 打過來的請求，大概會長這樣：</p><figure class="highlight ada"><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></pre></td><td class="code"><pre><code class="hljs ada"><span class="hljs-keyword">function</span> <span class="hljs-title">doPost</span>(e) &#123;<br>  var contents = JSON.parse(e.postData.contents);<br>  var events = contents.events;<br><br>  events.forEach(<span class="hljs-keyword">function</span>(event) &#123;<br>    <span class="hljs-keyword">if</span> (event.<span class="hljs-keyword">type</span> <span class="hljs-type">=== </span><span class="hljs-symbol">&#x27;message</span>&#x27; &amp;&amp; event.message.<span class="hljs-keyword">type</span> <span class="hljs-type">=== </span><span class="hljs-symbol">&#x27;text</span>&#x27;) &#123;<br>      var eventId = event.webhookEventId;<br>      ...<br><br>      // <span class="hljs-keyword">do</span> something<br>    &#125;<br>  &#125;);<br>&#125;<br></code></pre></td></tr></table></figure><p>要存取 Google Sheet 也很簡單，直接在程式碼中呼叫 <code>SpreadsheetApp.openById(sheetId);</code> 就可以透過 ID 取得，但是要注意後面在部屬的時候要設定執行身分，如果這個 sheet 只有本人可以存取，那執行身分就要設定為本人。</p><p>部屬也是非常簡單，只要在網頁上點選右上角的「部屬」按鈕，就能完成部屬了。</p><div style="display: flex; justify-content: space-evenly">  <div style="padding: 5px; width: 40%">    <img src="/2026-01-10/build-line-bot-with-gas/image-3.png" class="">  </div></div><p>部屬成功後會得到一個像這樣的 URL: <code>https://script.google.com/macros/s/AKfycbxOFRfffExrffffsaaa63opssssss-kffsssFRffT5Y-y8hBBBBCCC/exec</code>，這個就是我們服務的對外 URL。是的你沒看錯，連 HTTPS 都幫忙搞定了。</p><p>拿到這個後就可以把這個 URL 貼到 Line Channel 上的 webhook 欄位使用。當 Line Message API 接收到特定 Channel 的訊息後就會發送一個請求過來這個 URL。</p><p>到這邊其實就算是完成一個簡單的 Line Bot 了。</p><h2 id="遇到的問題"><a href="#遇到的問題" class="headerlink" title="遇到的問題"></a>遇到的問題</h2><h3 id="在-Line-Developer-頁面測試-webhook-都不會過"><a href="#在-Line-Developer-頁面測試-webhook-都不會過" class="headerlink" title="在 Line Developer 頁面測試 webhook 都不會過"></a>在 Line Developer 頁面測試 webhook 都不會過</h3><p>這個我真的卡了一陣，但最後找到保哥 2025 的貼文，知道Bot 還是能正常回應就不管他了。</p><div style="display: flex; justify-content: space-evenly; margin-bottom: 20px">  <div style="padding: 5px; width: 100%">    <img src="/2026-01-10/build-line-bot-with-gas/image-4.png" class="">  </div></div><div style="display: flex; justify-content: space-evenly">  <div style="padding: 5px; width: 100%">    <img src="/2026-01-10/build-line-bot-with-gas/image-5.png" class="">  </div></div><h3 id="沒有-Log-超難-debug"><a href="#沒有-Log-超難-debug" class="headerlink" title="沒有 Log 超難 debug!"></a>沒有 Log 超難 debug!</h3><p>GAS 在開啟「所有人都能呼叫」時，在執行項目那邊會看不到 log，即使呼叫的人是自己，GAS 也會把 log 隱藏。</p><p>有看到社團有人是把 log 寫到另一份 Google sheet，或是乾脆通靈 (?!)。我是為了看 log 把這個專案綁定到我的 GCP 專案中，就可以在 Cloud Logging 上看到 log 了。</p><h3 id="執行太慢，超過-Line-Messaging-API-的-1s-timeout-時間"><a href="#執行太慢，超過-Line-Messaging-API-的-1s-timeout-時間" class="headerlink" title="執行太慢，超過 Line Messaging API 的 1s timeout 時間"></a>執行太慢，超過 Line Messaging API 的 1s timeout 時間</h3><p>這個是目前唯一沒解決的問題，從 Line Messaging API server 發送過來的請求要在 1s 內回覆 <code>HTTP 200</code> 不然就會被視為失敗，觸發 Line Messaging API 的重試機制，會每隔一段時間重新發送重複的訊息 (記帳 sheet 上會多出一堆相同的紀錄)。</p><p>為了解決這個問題我也嘗試把執行時間較久的 callback 改成先建立一個 Time Trigger 在一秒後執行寫入 Google sheet 的操作。但我怎麼樣都無法把執行時間壓在一秒內，最後還是會觸發重試。</p><p>另一方面針對重試發過來的請求可以用一個 cache 阻擋他，至少讓重複的資料不要寫入 Google sheet。</p><p>這個問題最後還是沒解決，雖然一切都能正常運作，但是看到 log 中有 Line Messaging API 送過來的請求還是會很阿雜。</p><h2 id="結論"><a href="#結論" class="headerlink" title="結論"></a>結論</h2><p>作為一個全託管服務，GAS 以他親民的使用方式讓很多非工程師也能快速自動化工作，除了 Google Sheet，GAS 也能串接其他 SaaS 服務如 Drive, Forms 甚至是 Big Query 等等，如果工作上都會用到這些服務，GAS 不失為一個自動化的選擇！</p>]]>
    </content>
    <id>https://weiblog.me/2026-01-10/build-line-bot-with-gas/</id>
    <link href="https://weiblog.me/2026-01-10/build-line-bot-with-gas/"/>
    <published>2026-01-10T02:48:54.000Z</published>
    <summary>最近想做個 side project 來搞個家庭記帳軟體，但是又覽著搞部屬那些，和 AI 討論後決定用 Google Apps Script 來寫一個...</summary>
    <title>用 Google Apps Script 來作一個 Line Bot 如何</title>
    <updated>2026-05-04T12:56:34.197Z</updated>
  </entry>
</feed>
