<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>jkgtw&#39;s blog </title>
    <link>https://www.jkg.tw/</link>
    <description>Recent content on jkgtw&#39;s blog </description>
    <image>
      <title>jkgtw&#39;s blog </title>
      <url>https://www.jkg.tw/apple-touch-icon.png</url>
      <link>https://www.jkg.tw/apple-touch-icon.png</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Fri, 23 Jan 2026 20:40:00 +0800</lastBuildDate>
    <atom:link href="https://www.jkg.tw/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>2026 Mac 電腦軟體口袋名單</title>
      <link>https://www.jkg.tw/p3916/</link>
      <pubDate>Fri, 23 Jan 2026 20:40:00 +0800</pubDate>
      <guid>https://www.jkg.tw/p3916/</guid>
      <description>&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;這幾年下來，我在 Mac 上的愛用軟體名單其實一直在悄悄改朝換代&lt;/p&gt;
&lt;p&gt;幾年前曾經&lt;a href=&#34;https://www.jkg.tw/p3612&#34;&gt;推薦過&lt;/a&gt;幾款冷門卻好用的小工具，現在看一看已經有些快死了或者已經年久失修了 🥹&lt;/p&gt;
&lt;p&gt;例如 &lt;a href=&#34;https://www.corecode.io/macupdater/&#34;&gt;MacUpdater&lt;/a&gt; 的開發者因為買斷制收入有限，難以維持開發，他考慮轉為訂閱制，但又覺得這樣對早期用戶過意不去&lt;/p&gt;
&lt;p&gt;所以目前正在尋求收購者，若無人接手可能就要結束維護了 ☠️&lt;/p&gt;
&lt;p&gt;而 &lt;a href=&#34;https://www.dbklabs.com/clicker-for-disney+/&#34;&gt;Clicker for Disney+&lt;/a&gt; 則屬於年久失修的半放棄狀態了&amp;hellip;於是就有了這篇文章 😆&lt;/p&gt;
&lt;p&gt;這篇文章會集中介紹目前仍積極維護、實際好用、而且&lt;code&gt;自己真的在用&lt;/code&gt;的幾款工具&lt;/p&gt;
&lt;p&gt;從系統維護、截圖錄影、遠端桌面，到影音下載、動態桌布都有，讓你直接照單挑幾套裝進自己的 Mac 環境&lt;/p&gt;
&lt;h2 id=&#34;updatest&#34;&gt;&lt;a href=&#34;https://updatest.app&#34;&gt;Updatest&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2026/7uCDt5Os-Re9XH3Kg-6G2zpWKX.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Updatest 算是 MacUpdater 的最佳替代方案，使用一段時間下來，發現它的辨識度蠻不錯的&lt;/p&gt;
&lt;p&gt;不論是透過 Mac App Store 還是 Homebrew 安裝的軟體，都能被正確掃描辨識&lt;/p&gt;
&lt;p&gt;若軟體不在內建資料庫中，只要該軟體有提供 GitHub Releases，也可以手動新增追蹤&lt;/p&gt;
&lt;p&gt;Updatest 發佈沒多久，正處於高頻率開發階段，另外目前他們正在早鳥促銷，也同樣是買斷制，到 2026/01/31 以前&lt;a href=&#34;https://updatest.app/pricing/&#34;&gt;購買&lt;/a&gt;都還有特價&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h2 id=&#34;cleanshot-x&#34;&gt;&lt;a href=&#34;https://cleanshot.com&#34;&gt;CleanShot X&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2026/DBVeSLoE-eC93opRs-lm1ZYhTK.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;在 Mac 上最愛的截圖＋標註工具之一：支援滾動截圖、OCR、雲端上傳、螢幕錄影與簡易剪裁，功能幾乎一應俱全&lt;/p&gt;
&lt;p&gt;裝一套 CleanShot X ，能取代多款截圖軟體，當然同類的軟體在 Mac 上面有非常多，我中間也嘗試過其他軟體&lt;/p&gt;
&lt;p&gt;但我最終還是回到 CleanShot X 的懷抱，如果你有訂閱 &lt;a href=&#34;https://setapp.com&#34;&gt;Setapp&lt;/a&gt; 的話，那可以直接使用 Setapp 安裝&lt;/p&gt;
&lt;p&gt;另外&lt;a href=&#34;https://lizhi.shop/products/cleanshot-x?cid=sogm8tz7&#34;&gt;數碼荔枝&lt;/a&gt;到 2026/02/06 以前正在特價中，有需要可以看看 🫰&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h2 id=&#34;parsec&#34;&gt;&lt;a href=&#34;https://parsec.app&#34;&gt;Parsec&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2026/sf0PNHQe-FKfbgugQ-k14jPZeG.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Parsec 是一套知名的超低延遲遠端桌面軟體，延遲低到連打遊戲都幾乎無感&lt;/p&gt;
&lt;p&gt;他們是一套多平台軟體，常見的電腦環境 macOS、Windows、Linux 或者是樹莓派都有支援&lt;/p&gt;
&lt;p&gt;另外設定方面也是非常多樣，從解析度、fps 到傳輸速率上限、鍵盤滑鼠以及允許操作的軟體等等，都能一一設定&lt;/p&gt;
&lt;p&gt;更棒的是，這些功能幾乎全部免費，且完全無廣告，如果臨時出門沒帶電腦，也能用 Chrome 網頁版直接連線&lt;/p&gt;</description>
    </item>
    <item>
      <title>PTT 每日簽到 - n8n docker 版</title>
      <link>https://www.jkg.tw/p3913/</link>
      <pubDate>Tue, 13 Jan 2026 20:10:00 +0800</pubDate>
      <guid>https://www.jkg.tw/p3913/</guid>
      <description>&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;忘記在哪邊看到有人問，有沒有 PTT 每日簽到（登入）的 n8n 版？&lt;/p&gt;
&lt;p&gt;於是就花了一點時間，讓 AI 寫了一段可以在 n8n JavaScript code node 跑起來的程式碼&lt;/p&gt;
&lt;p&gt;但因為需要引入額外的庫，所以需要在 docker compose 還有設定上做一些小變動 😆&lt;/p&gt;
&lt;p&gt;首先根據&lt;a href=&#34;https://www.jkg.tw/p3912&#34;&gt;上一篇&lt;/a&gt;的 n8n v2 docker compose 為基礎，改為以下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;n8n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;n8nio/n8n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;n8n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;always&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;5678:5678&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Web UI 端口&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;n8n-data:/home/node/.n8n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;depends_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;n8n-redis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;service_healthy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# --- 基本設定 &amp;amp; 時區 ---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;GENERIC_TIMEZONE=Asia/Taipei&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;TZ=Asia/Taipei&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# --- 資料庫維護 (SQLite) ---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;DB_SQLITE_VACUUM_ON_STARTUP=true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 啟動時清理資料庫，用於防止 SQLite 資料庫過大導致效能下降&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;DB_SQLITE_POOL_SIZE=1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 啟用 SQLite WAL 模式效能較高較可靠&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;EXECUTIONS_DATA_PRUNE=true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;EXECUTIONS_DATA_MAX_AGE=168   &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 保留 168 小時內的執行紀錄，視需求可上下調整&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 最多保留 5000 筆紀錄，視需求可上下調整&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# --- 網路與安全 (反向代理設定) ---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 開啟後，必須透過 HTTPS 存取，否則無法登入，內網 HTTP 使用就設定為 false&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_SECURE_COOKIE=true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;WEBHOOK_URL=https://n8n.example.com/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 根據自己網域修改，內網無網域這行可以換成內網 IP&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_PROXY_HOPS=1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 告訴 n8n 前面有一層 Proxy (如 Nginx/Caddy)，如內網使用這行可以刪除&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_TRUSTED_PROXIES=0.0.0.0/0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 信任所有來源的 Proxy 標頭，如內網使用這行可以刪除&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# --- 權限與安全性 ---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_GIT_NODE_DISABLE_BARE_REPOS=true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_BLOCK_ENV_ACCESS_IN_NODE=false&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# false 代表允許 Node 節點讀取環境變數&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# --- Task Runners 設定 ---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 這是主節點設定，負責派發任務給 task-runners&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_RUNNERS_ENABLED=true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_RUNNERS_MODE=external&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 使用外部 Runner 模式&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 監聽來自 Docker 內網的連線&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_RUNNERS_AUTH_TOKEN=Your1-awEsome-P0ssWorD&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 請務必更改為強密碼&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_NATIVE_PYTHON_RUNNER=true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 啟用 Python 支援&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;task-runners&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;n8nio/runners&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 如有指定版號，runners 版本需與 n8n 本體對齊&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;n8n-runners&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;always&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;depends_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;n8n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# --- Task Runners 設定 (Worker 端) ---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 設定主節點的連線位置 (Docker 內部通訊)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_RUNNERS_AUTH_TOKEN=Your1-awEsome-P0ssWorD&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 需與上方 n8n 主節點內的一致&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 設定為 0 可避免冷啟動延遲&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 以下為新增的部分，將 runner-javascript 安裝的 modules 儲存下來，避免每次 pull 都要重新安裝&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;./n8n-task-runners.json:/etc/n8n-task-runners.json:ro&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;runners-js-node-modules:/opt/runners/task-runner-javascript/node_modules&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 啟動後檢查本文章 PTT AutoCheckin JS 所需的庫在不在，不在的話就安裝&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;entrypoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/bin/sh&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- -&lt;span class=&#34;l&#34;&gt;lc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        cd /opt/runners/task-runner-javascript
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        if [ ! -d node_modules/ssh2 ] || [ ! -d node_modules/iconv-lite ]; then
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          pnpm add ssh2 iconv-lite
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        fi
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        exec /usr/local/bin/task-runner-launcher javascript&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;redis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;redis:alpine&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;n8n-redis&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;always&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;healthcheck&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;CMD&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;redis-cli&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ping&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;interval&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;5s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;3s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;retries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;n8n-redis-data:/data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;n8n-data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;n8n-redis-data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runners-js-node-modules&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;主要是在 task-runners 做了一些之後 JS 執行環境的準備&lt;/p&gt;</description>
    </item>
    <item>
      <title>n8n 2.0 Self-host 實戰：Docker &#43; Task Runners &#43; Caddy 的完整設定筆記</title>
      <link>https://www.jkg.tw/p3912/</link>
      <pubDate>Tue, 23 Dec 2025 14:05:00 +0800</pubDate>
      <guid>https://www.jkg.tw/p3912/</guid>
      <description>&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;最近 &lt;a href=&#34;https://n8n.io&#34;&gt;n8n&lt;/a&gt; 正式推出 &lt;strong&gt;v2.0 大版本更新&lt;/strong&gt; 🚀，這次更新在&lt;strong&gt;安全性、穩定性與整體效能&lt;/strong&gt;上都有明顯提升&lt;/p&gt;
&lt;p&gt;同時前端 Web UI 的 Canvas 介面也有一定幅度的視覺與互動變化&lt;/p&gt;
&lt;p&gt;如果你想了解完整的官方更新細節，建議直接閱讀 n8n 官方 Blog 👉 &lt;a href=&#34;https://blog.n8n.io/introducing-n8n-2-0/&#34;&gt;Introducing n8n 2.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h2 id=&#34;n8n-selfhost&#34;&gt;n8n Self‑host&lt;/h2&gt;
&lt;p&gt;n8n 2.0 釋出時，官方依然維持 &lt;strong&gt;Self‑host&lt;/strong&gt; 的彈性，這點對技術使用者來說非常重要 👍&lt;/p&gt;
&lt;p&gt;官方也同步持續更新 Docker Image，讓升級流程相對平滑&lt;/p&gt;
&lt;p&gt;這篇文章會分享我在升級到 &lt;strong&gt;n8n 2.0&lt;/strong&gt; 之後，實際使用的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Docker Compose 架構&lt;/li&gt;
&lt;li&gt;Task Runners 新架構設定&lt;/li&gt;
&lt;li&gt;Redis 搭配使用方式&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://caddyserver.com&#34;&gt;Caddy Server&lt;/a&gt; 反向代理與 HTTPS 設定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;整體目標是：&lt;strong&gt;穩定、好維護、安全、設定不複雜&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h2 id=&#34;docker-compose-架構說明&#34;&gt;Docker Compose 架構說明&lt;/h2&gt;
&lt;p&gt;本次的 Docker Compose 主要包含三個核心服務：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;n8n（主節點）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;負責 Web UI、Webhook 接收、Workflow 管理&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;task‑runners（Worker 節點）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;專門負責執行實際的 workflow 任務&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redis&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;作為狀態儲存與跨 workflow / node 的輕量資料存取&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這樣的拆分方式，是 n8n 近期引入的&lt;strong&gt;新一代執行架構&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>PTT Monitor 新文章通知 - n8n 模版</title>
      <link>https://www.jkg.tw/p3909/</link>
      <pubDate>Sat, 23 Aug 2025 19:50:00 +0800</pubDate>
      <guid>https://www.jkg.tw/p3909/</guid>
      <description>&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;之前有位 PTT 網友開發的 &lt;a href=&#34;https://www.ptt.cc/bbs/EZsoft/M.1497363598.A.74E.html&#34;&gt;PTT Alertor 服務&lt;/a&gt;蠻好用的，但是前幾年機器人突然掛了，原作者可能比較忙沒繼續維護就不能用了&lt;/p&gt;
&lt;p&gt;所幸原作者有將整個服務&lt;a href=&#34;https://github.com/Ptt-Alertor/ptt-alertor&#34;&gt;開源&lt;/a&gt;，所以又有熱心的網友搭了&lt;a href=&#34;https://www.ptt.cc/bbs/EZsoft/M.1708247900.A.27C.html&#34;&gt;另外的 PTT 新文章通知服務&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;同樣也是無償的服務所以也留了個但書，也就是不能保證服務能持續多久&lt;/p&gt;
&lt;p&gt;我&lt;a href=&#34;https://www.jkg.tw/p3902/&#34;&gt;之前&lt;/a&gt;也有用 n8n 的 RSS Trigger 來訂閱新文章通知，但透過 RSS 的訂閱只能監測到標題與作者 ID&lt;/p&gt;
&lt;p&gt;還缺少跟 PTT Alertor 一樣可以追蹤推文數的功能 🫣&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;只有監測標題的話，在特定版面特定功能還能使用，例如在遊戲版出現「限免」時就馬上發通知是沒有問題的&lt;/p&gt;
&lt;p&gt;但在像是省錢版或者信用卡版，有時文章只是詢問或者沒有達到一定討論度跟推文次數，馬上發通知就太早了&lt;/p&gt;
&lt;p&gt;有時會想看看其他網友在底下的留言與推薦達到一定數量之後再發通知，這時候推文數的監測也就很有用了&lt;/p&gt;
&lt;p&gt;於是也就萌生自己用 n8n 也搭一個有類似功能的 PTT 新文章通知服務給自己用，另外在&lt;a href=&#34;https://www.jkg.tw/p1397&#34;&gt;台灣蘋果同好群&lt;/a&gt;與&lt;a href=&#34;https://www.jkg.tw/p1553&#34;&gt;日本旅遊群&lt;/a&gt;都有導入&lt;/p&gt;
&lt;p&gt;目前已經正常穩定服役一段時間，也有不少群友在詢問，所以就整理一下，讓大家都能用 n8n 輕鬆搭一套自己的 PTT Monitor 服務 😁&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;PTT Monitor 有利用到 redis 來紀錄已發送過通知的網址，所以如果你是參考我之前一篇關於 n8n 來搭建的話&lt;/p&gt;
&lt;p&gt;我們要改一下之前 docker compose 檔案，加個幾行把 redis 服務跟著 n8n 一起啟動&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;n8n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;n8nio/n8n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;n8n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;unless-stopped&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;EXECUTIONS_DATA_PRUNE=true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;EXECUTIONS_DATA_MAX_AGE=168&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;GENERIC_TIMEZONE=Asia/Taipei&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;TZ=Asia/Taipei&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;5678&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5678&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;n8n-data:/home/node/.n8n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;depends_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;redis&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;redis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;redis:alpine&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;redis&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;unless-stopped&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;redis-data:/data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;n8n-data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;redis-data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;​&lt;/p&gt;</description>
    </item>
    <item>
      <title>各家 AI 模型一次玩 - 1min AI 終身訂閱</title>
      <link>https://www.jkg.tw/p3906/</link>
      <pubDate>Wed, 02 Jul 2025 16:20:00 +0800</pubDate>
      <guid>https://www.jkg.tw/p3906/</guid>
      <description>&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;最近幾年真的是各種 AI 大亂鬥，各家的 AI 模型如沐春雨不斷推出，而且競爭也是相當激烈 🦾&lt;/p&gt;
&lt;p&gt;針對不同任務各家也有不同特化模型跟專長，所以如果你要每家都去訂閱的話，每月的帳單也是會有一筆不小的數字&lt;/p&gt;
&lt;p&gt;今天要推薦的是一家集合各家 AI 模型都能使用的平台「&lt;a href=&#34;https://1min.ai?referrer_id=71d31dd3-bf2b-41d9-88f7-7d92655c5caf&#34;&gt;1min AI&lt;/a&gt;」，就算沒有付費但只要註冊並且每天登入就能獲得一些使用點數&lt;/p&gt;
&lt;p&gt;1min AI 每種模型所需的點數都不相同，有的便宜有的新出的大模型可能會比較貴&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2025/QG81R93A-tb2YzVi4-Y95AY8EU.png&#34;&gt;&lt;/p&gt;
&lt;div style=&#34;text-align: center;&#34;&gt;
👆 內建的模型很多，$$ 數量代表所需的點數多寡
&lt;/div&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;有興趣的人可以透過下面我的 1min AI 推薦連結去註冊，你跟我都能獲得一些免費點數 ☺️&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://1min.ai?referrer_id=71d31dd3-bf2b-41d9-88f7-7d92655c5caf&#34;&gt;https://1min.ai?referrer_id=71d31dd3-bf2b-41d9-88f7-7d92655c5caf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;不過其實這種類似的平台也是蠻多的，為什麼特別挑 1min AI 呢？&lt;/p&gt;
&lt;p&gt;主要是目前他們在 &lt;a href=&#34;https://www.stacksocial.com/sales/1minai-pro-plan-lifetime-subscription?rid=33857&#34;&gt;StackSocial&lt;/a&gt; 有在賣終身方案，以 Pro 方案來舉例，購買終身方案後，系統每個月都會給你 100 萬點給你使用&lt;/p&gt;
&lt;p&gt;更棒的是就算你當月沒用完，這些點數並不會清零，點數會一直累積存在你的帳戶裡面！🥰&lt;/p&gt;
&lt;p&gt;如果你使用量比較大，也可以選擇 Business 或者最高的 Advanced Business 方案，主要差別就是每個月給你的點數不同&lt;/p&gt;
&lt;p&gt;像是 Advanced Business 每月會給你 400 萬點數，也是每月不會清零的，如果你是重度 AI 使用者，可以直接考慮最高階的方案&lt;/p&gt;
&lt;p&gt;另外在 &lt;a href=&#34;https://www.stacksocial.com/sales/1minai-pro-plan-lifetime-subscription?rid=33857&#34;&gt;StackSocial&lt;/a&gt; 購買時候，可以在網路上找找看優惠碼，有時候會有 10% ~ 30% 左右的優惠碼&lt;/p&gt;
&lt;p&gt;如果你沒在 &lt;a href=&#34;https://www.stacksocial.com/sales/1minai-pro-plan-lifetime-subscription?rid=33857&#34;&gt;StackSocial&lt;/a&gt; 買過東西，可以透過我的邀請連結購買，你跟我都能拿到免費點數，可以給下次購物使用 😄&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;1min AI 跟其他綜合 AI 平台一樣，在網站上面有列出一些常用的功能，幫助使用者快速上手找到自己想要的功能&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2025/lOmAAi0M-LYNTubGK-wwnfueLh.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;在 Multi AI Chat 這邊可以同時選擇多個模型，同一個問題一次同時問多個模型&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2025/y36aIAmE-XpHqCEbB-lLo0hqvR.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;想要 AI 畫圖這邊也有圖像生成器可以使用，內建多個常用的大模型，並且設定參數即可生成出你要的圖片&lt;/p&gt;</description>
    </item>
    <item>
      <title>自架 n8n 自動化服務 - 訂閱 PTT 討論版關鍵字</title>
      <link>https://www.jkg.tw/p3902/</link>
      <pubDate>Mon, 13 Jan 2025 21:10:00 +0800</pubDate>
      <guid>https://www.jkg.tw/p3902/</guid>
      <description>&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;幾年前&lt;a href=&#34;https://www.jkg.tw/p3609/&#34;&gt;有介紹&lt;/a&gt;過一款類似 &lt;a href=&#34;https://ifttt.com&#34;&gt;IFTTT&lt;/a&gt; 的自動化服務 &lt;a href=&#34;https://n8n.io&#34;&gt;n8n&lt;/a&gt;，經過這幾年的進化成長，n8n 內建的 node 越來越多且也越來越好用了！🌟&lt;/p&gt;
&lt;p&gt;而 n8n 最近幾年也開始大力宣傳他們的&lt;a href=&#34;https://n8n.io/pricing/&#34;&gt;雲端架設服務&lt;/a&gt;，最基本同時可啟用 5 個 workflows 的方案每月要 20 美金&lt;/p&gt;
&lt;p&gt;所幸的是他們提供的自架版本還是存在著，自己搭一套 Docker 版的 n8n 只需要短短幾分鐘就能搞定，硬體門檻也不高&lt;/p&gt;
&lt;p&gt;我自己有跑在一台樹莓派 4（4GB RAM）的設備上也是很順的跑起來，所以免費甲骨文或者 GCP 最低配置的虛擬機更不用說也都沒問題&lt;/p&gt;
&lt;p&gt;下面就來快速在樹莓派裡面安裝一套 n8n，同樣適用於 Ubuntu / Debian 系統&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h2 id=&#34;安裝-docker-環境&#34;&gt;安裝 Docker 環境&lt;/h2&gt;
&lt;p&gt;最簡單就是直接用官方的安裝腳本直接安裝，要注意的是執行腳本需要 sudo 或者 root 權限&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ curl -fsSL https://get.docker.com -o get-docker.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo sh ./get-docker.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;等待腳本跑完安裝完畢，接著設定一下權限&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo usermod -aG docker &lt;span class=&#34;nv&#34;&gt;$USER&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接著重新登入一次 ssh 即可完成 Docker 執行環境的安裝，然後我們最後安裝 Docker compose&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo apt-get install docker-compose-plugin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上就完成 Docker 執行的基本環境&lt;/p&gt;</description>
    </item>
    <item>
      <title>轉發地牛 Wake Up 地震通知到 Telegram / LINE</title>
      <link>https://www.jkg.tw/p3711/</link>
      <pubDate>Mon, 08 Apr 2024 17:30:00 +0800</pubDate>
      <guid>https://www.jkg.tw/p3711/</guid>
      <description>&lt;p&gt;​&lt;/p&gt;
&lt;div class=&#34;admonition note&#34;&gt;
&lt;div class=&#34;title&#34;&gt;2025/02/17 update&lt;/div&gt;
&lt;div class=&#34;content&#34;&gt;&lt;p&gt;因應地牛 Wake Up 軟體更新，取消秒數以及級數的參數，詳見此&lt;a href=&#34;https://www.facebook.com/share/p/1BYehqMVzE/&#34;&gt;公告&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;另外 LINE Notify 也即將在 2025/03/31 &lt;a href=&#34;https://notify-bot.line.me/closing-announce&#34;&gt;關閉下線&lt;/a&gt;，請大家愛用 Telegram ❤️&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;2024/04/03 早上快八點時候台灣花蓮近海來了一個規模超過七的&lt;a href=&#34;https://zh.wikipedia.org/zh-tw/2024%E5%B9%B4%E8%8A%B1%E8%93%AE%E5%9C%B0%E9%9C%87&#34;&gt;大地震&lt;/a&gt;，持續好幾分鐘，之後全台的小餘震更是接連不斷&lt;/p&gt;
&lt;p&gt;有人有收到&lt;a href=&#34;https://cbs.tw/24043cc2dc09&#34;&gt;國家災防告警細胞廣播&lt;/a&gt;，有人因為不在此次通知範圍內沒收到，但其實這次地震全台灣所有縣市都相當有感&lt;/p&gt;
&lt;p&gt;於是關於地震通知的討論度又隨之高漲，AppStore 裡面搜一下其實有很多關於地震的 apps&lt;/p&gt;
&lt;p&gt;但使用一圈下來發現除非你剛好在國家細胞廣播範圍內，否則在 iOS 上要穩定又有效即時地震通知的幾乎沒有&lt;/p&gt;
&lt;p&gt;於是稍微研究一下，發現可以利用&lt;a href=&#34;https://eew.earthquake.tw&#34;&gt;地牛 Wake Up&lt;/a&gt; app 快速的地震通知來執行外部一個簡易腳本轉發通知到自己手機上 🤭&lt;/p&gt;
&lt;p&gt;下面就用 Mac 電腦搭配 Telegram / LINE 來實作&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h3 id=&#34;準備-telegram-bot-or-line-notify-token&#34;&gt;準備 Telegram bot or LINE Notify token&lt;/h3&gt;
&lt;p&gt;這部份要看你個人偏好喜歡在哪一套聊天軟體上面接收通知&lt;/p&gt;
&lt;p&gt;Telegram 的話就需要自己去開一個 bot，取得 bot 的 token&lt;/p&gt;
&lt;p&gt;然後再看你想要這隻 bot 在哪邊給你發通知，可以是一對一的訊息，也可以是群組或者是頻道的&lt;/p&gt;
&lt;p&gt;只要取得對應的 Chat ID 即可，另外要注意的是 Telegram 群組或頻道的 Chat ID 會是「-100」開頭的，如果不是的話要加上&lt;/p&gt;
&lt;p&gt;建立 Telegram bot 並取得 token 這部份網路上搜尋可以找到非常多教學，我這邊就偷個懶不多寫了&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;而 LINE 的部分台灣人使用的人群較多，在取得 token 的流程上也相對簡單一點&lt;/p&gt;</description>
    </item>
    <item>
      <title>日本旅遊真不限速 eSIM 上網卡推薦</title>
      <link>https://www.jkg.tw/p3709/</link>
      <pubDate>Tue, 12 Mar 2024 17:50:00 +0800</pubDate>
      <guid>https://www.jkg.tw/p3709/</guid>
      <description>&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;前段時間又去了日本沖繩，去了一趟沖繩的青洞浮潛，水好清澈實在太讚啦！😍（不跑題了）&lt;/p&gt;
&lt;p&gt;日本旅遊也去了不少次，從以前的原號漫遊到 Pocket WiFi 分享器、AIS or 3HK 國際漫遊卡以及日本原生卡等等都有用過好幾次&lt;/p&gt;
&lt;p&gt;上述的商品除 AIS 跟 3HK 漫遊卡外，大部分都是直接選吃到飽的方案&lt;/p&gt;
&lt;p&gt;但理想是理想，現實情況是在日本這種所謂「吃到飽」的方案，有非常高機率會直接遇到 &lt;a href=&#34;https://zh.wikipedia.org/zh-tw/%E5%85%AC%E5%B9%B3%E4%BD%BF%E7%94%A8%E5%8E%9F%E5%89%87&#34;&gt;Fair Usage Policy&lt;/a&gt; （FUP）限速！&lt;/p&gt;
&lt;p&gt;我自己試用過市面上很多款日本上網卡吃到飽方案，很遺憾的告訴大家&lt;/p&gt;
&lt;p&gt;目前日本是沒有一款能真正像台灣中華電信行動上網吃到飽完全不會觸發 FUP 限速的商品&lt;/p&gt;
&lt;p&gt;在台灣使用中華電信行動上網吃到飽甚至是能當成家中固定寬頻在用的呦（但不建議這樣幹&amp;hellip;）&lt;/p&gt;
&lt;p&gt;如果你的期望是這樣，那你將會徹底失望 💩&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;然而市面上卻還是有某 D 家宣稱自己是唯一一款不受 FUP 限速的卡片，強力宣稱自己不會因為超過某個流量而被限速&lt;/p&gt;
&lt;p&gt;但你在網路上搜一搜還是能找到一些網友分享的慘痛案例，而且他的服務條款裡面也有寫到所謂的短時間異常流量可能會被終止服務！？&lt;/p&gt;
&lt;p&gt;所以這種要碰運氣的事情我已經不想再去體驗，出國旅遊網路不好，可是會整個影響到行程與心情的呢 🥹&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;剛好要出國也發現最近有蠻多 eSIM 都打包上架成 App 形式開始販售，不只是在手機下載安裝方便，購買跟使用也方便&lt;/p&gt;
&lt;p&gt;於是就趁這次去沖繩就找兩家看上去還不錯的來測試與對比一下&lt;/p&gt;
&lt;p&gt;一家是台灣網路上還蠻多人推的 &lt;a href=&#34;https://apps.apple.com/tw/app/id1475911720&#34;&gt;Airalo&lt;/a&gt;，另外一家是之前推薦過的虛擬電話號碼 &lt;a href=&#34;https://www.jkg.tw/p3510/&#34;&gt;Hushed&lt;/a&gt; 同母公司推出的 &lt;a href=&#34;https://apps.apple.com/tw/app/id1535815057&#34;&gt;aloSIM&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;eSIM 在省去實體的物流以及實體硬體卡片的成本完全透過官網與 app 網路來銷售，價格方面有一定吸引力&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h3 id=&#34;airalo-官網推薦碼stephe8670&#34;&gt;&lt;a href=&#34;https://www.airalo.com/zh-TW&#34;&gt;Airalo 官網&lt;/a&gt;（推薦碼：STEPHE8670）&lt;/h3&gt;
&lt;p&gt;Airalo app 跟官網對於台灣比較友善的地方在於他有提供繁體中文介面，對於英文比較不那麼熟悉的人&lt;/p&gt;
&lt;p&gt;Airalo 能提供簡單明瞭的中文介面&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2024/03/Miaj-J12ii-xAQap312.jpeg&#34;&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;註冊也相當方便，直接可以使用 Apple / Facebook / Google 快速註冊登入&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2024/03/xzabPAMO40-085940-DQxVsqCw.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;註冊好以後，選擇你想要前往的國家，然後就會有當地的流量包選項&lt;/p&gt;
&lt;p&gt;上面圖片是日本的流量包，有效期都是 30 天，依照自己需要的流量來選擇即可&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;以我自身為例，我自己的親身測試與使用，我在日本旅遊時一天平均流量大概會是 0.8GB ~ 1.2GB 左右&lt;/p&gt;
&lt;p&gt;無非就是查地圖、查行程跟 SNS 聊天軟體貼照片跟影片，不會一直看 YouTube 影片或者進行直播之類的&lt;/p&gt;</description>
    </item>
    <item>
      <title>日本漢堡排的天花板？「挽肉と米」台北中山店朝聖</title>
      <link>https://www.jkg.tw/p3703/</link>
      <pubDate>Fri, 18 Aug 2023 13:10:14 +0800</pubDate>
      <guid>https://www.jkg.tw/p3703/</guid>
      <description>&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;在 2020 年日本東京吉祥寺起家就相當有人氣且還入選 &lt;a href=&#34;https://tabelog.com/tokyo/A1320/A132001/13246332/&#34;&gt;tabelog&lt;/a&gt; 百名店的漢堡排專門店「&lt;strong&gt;&lt;a href=&#34;https://www.hikinikutocome.com/&#34;&gt;挽肉と米&lt;/a&gt;&lt;/strong&gt;」終於來台灣啦！&lt;/p&gt;
&lt;p&gt;當初我最早知道這家漢堡排剛好是在 &lt;a href=&#34;https://zh.wikipedia.org/zh-tw/2019%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92%E7%97%85&#34;&gt;COVID-19&lt;/a&gt; 疫情期間，所以一直只能透過螢幕來聞香而已 😭&lt;/p&gt;
&lt;p&gt;直到疫情結束這家餐廳的熱門程度不減反增，但每趟去日本旅遊的時間已經非常捉襟見肘&lt;/p&gt;
&lt;p&gt;為了吃這一頓往返加上排隊可能會需要兩、三個小時以上的時間，就感覺有點不划算～&lt;/p&gt;
&lt;div class=&#34;admonition note&#34;&gt;
	&lt;div class=&#34;title&#34;&gt;2023/08/27 重要更新&lt;/div&gt;
	&lt;div class=&#34;content&#34;&gt;&lt;p&gt;目前挽肉と米已經開始採用線上預約，本文下面的現場排隊拿號碼的資訊為過時資訊&lt;/p&gt;
&lt;p&gt;請參考官方 Instagram 的線上預約說明：&lt;a href=&#34;https://www.instagram.com/p/CwU7fcIBAC3/&#34;&gt;https://www.instagram.com/p/CwU7fcIBAC3/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2023/08/481JJI-n3i19I-QXQji12.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;如今挽肉與米在日本以外開店，第一家海外店在台灣，而地點就在日本料理林立的一級戰區台北中山區&lt;/p&gt;
&lt;p&gt;在台北的話就算排隊時間長一點，瞬間也就變的可以接受了 🤣&lt;/p&gt;
&lt;p&gt;根據&lt;a href=&#34;https://www.instagram.com/p/Cug2VqmvbGa&#34;&gt;台灣挽肉與米官方的 Instagram&lt;/a&gt; 的預約登記資訊來看，每天早上九點到店面登記當天用餐時間，是唯一的途徑&lt;/p&gt;
&lt;p&gt;這部份機制跟他們日本的一樣，沒有網路預約、沒有電話預約，全部都是當天早上開放現場記名登記&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2023/08/Ij4ia900-1jixnI0-H6VbaQ.jpg&#34;&gt;&lt;div style=&#34;text-align: center;&#34;&gt;
👆 我是平常日早上八點到場的，前面已經大約有二十多人左右
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2023/08/H7499-HbzyY4h-83h3Nb2.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;早上九點一到，餐廳工作人員會開始從第一個排隊的人開始登記今日的用餐時段&lt;/p&gt;
&lt;p&gt;每個排隊的人最多只能登記四個人，然後可以選當日還有空閒的時間段&lt;/p&gt;
&lt;p&gt;例如你可以登記當天的中午 12:30，或者是當天晚上 20:30 之類的，所以排隊越前面的人可以挑選的時間段就會越多&lt;/p&gt;
&lt;p&gt;反之越後面就會越少，直到當天所有時段都被挑選光&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2023/08/Om8100-bBjeua8-bL12QsL.jpg#little&#34;&gt;&lt;/p&gt;
&lt;div style=&#34;text-align: center;&#34;&gt;
👆 挑好用餐時間後，會發一張牌子，到時候入場需要繳回，弄丟則無法入場
&lt;/div&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;而比起日本的挽肉與米漢堡排採用的是日本國產牛，這次台灣的肉則是採用鹿兒島頂級 A5 極黑和牛，台灣在肉品上更勝一籌&lt;/p&gt;
&lt;p&gt;但價格也是直接成正比的提升，在日本一個套餐是 1600 日幣，台灣套餐是 650 台幣，以最近的匯率來計算的話，大概貴一倍左右&lt;/p&gt;
&lt;p&gt;在製作上跟日本是一樣的，當天漢堡排都是早上新鮮現絞，現場直火炭烤的&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2023/08/bh4HuzU-Pjki47z-mnU1X.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;每份套餐都有 90g 左右的漢堡排三顆，每顆烤完都是直接放上客人桌前&lt;/p&gt;
&lt;p&gt;另外負責烤漢堡排的師傅會根據每個客人用餐的速度來安排下一顆漢堡排上桌時間～&lt;/p&gt;
&lt;p&gt;你吃完一顆才會送上下一顆剛烤好的漢堡排給你，店家堅持最新鮮現烤現吃的職人精神由此可見！&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2023/08/jh4u99-Jizi1pI9-8NBqj1l.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;搭配的米飯是日本宮城縣的一見鍾情米，這碗現場使用羽釜鍋烹煮的日本米飯真的跟漢堡排超級搭！&lt;/p&gt;
&lt;p&gt;而且米飯是可以無限續的，但這碗飯的味道絕對不輸漢堡排本體！&lt;/p&gt;
&lt;p&gt;很多人以為這家店漢堡排才是主角，但一吃到飯才驚覺原來是雙主角！從店名「&lt;strong&gt;挽肉と米&lt;/strong&gt;」就能看出 😬&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2023/08/00-jIzh2i8-Bh3ki1L.jpg&#34;&gt;&lt;/p&gt;
&lt;div style=&#34;text-align: center;&#34;&gt;
👆 每顆現場碳烤完的漢堡排都會放上客人座位前的烤網上面，等待客人享用
&lt;/div&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;官方建議的三顆漢堡排吃法，大家可以參考&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;直接原汁原味大口咬（⚠️ 注意爆漿！）&lt;/li&gt;
&lt;li&gt;現場有提供各種調味料，可以根據每個人喜好搭配享用&lt;/li&gt;
&lt;li&gt;打上一顆生蛋黃，一碗究極漢堡排蓋飯完美誕生&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;另外現場有提供多種配料，在抽屜裡面有配料的完整說明紙條&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2023/08/hI3911-HzlqpI-82PajxLE.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;我個人比較喜歡蘿蔔泥搭配 MOU 桑的特調麻辣粉，帶有點孜然的味道在裡面，真的美味 😋&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2023/08/K884af-Uzl81Lo-799bNj1.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>大家一起來玩 Mastodon 吧！</title>
      <link>https://www.jkg.tw/p3650/</link>
      <pubDate>Sun, 26 Feb 2023 12:20:00 +0800</pubDate>
      <guid>https://www.jkg.tw/p3650/</guid>
      <description>&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;Twitter 推特在馬斯克買去以後，幾乎是把公司從頭到尾整個改的亂七八糟，尤其是最近把 Twitter API 大砍的舉動&lt;/p&gt;
&lt;p&gt;這導致許多開發者紛紛出逃，像是 &lt;a href=&#34;https://tapbots.com/tweetbot/&#34;&gt;Tweetbot&lt;/a&gt; 跟 &lt;a href=&#34;https://blog.iconfactory.com/2023/01/twitterrific-end-of-an-era/&#34;&gt;Twitterrific&lt;/a&gt; 開發者應該相當傻眼，已經辛辛苦苦經營超過十年以上，就這樣被迫結束營業&lt;/p&gt;
&lt;p&gt;而且推特一個這麼大的公司，連個事前通知都沒，直接 ban API 的作法真是前代未聞&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ithome.com.tw/news/155232&#34;&gt;事已至此&lt;/a&gt;推特已經恢復不到當年重視第三方開發者的狀態了，雖然在馬斯克接管前好用的 API v1 也被砍就是了 😵‍💫&lt;/p&gt;
&lt;p&gt;但馬斯克上台後這些超乎常理的動作才是壓倒駱駝最後的一根稻草&lt;/p&gt;
&lt;p&gt;推特當時的 CEO 跟員工還有股東們不知道會不會很後悔當初同意賣給馬斯克呢？ 😆&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;大家都在說逃吧逃吧，那到底能跑去哪裡？目前總體看下來我感覺開放且去中心化的&lt;a href=&#34;https://zh.wikipedia.org/zh-hant/%E8%81%94%E9%82%A6%E5%AE%87%E5%AE%99&#34;&gt;聯邦宇宙&lt;/a&gt;應該會是一個比較好的選擇&lt;/p&gt;
&lt;p&gt;雖然人人都可以搭自己獨立的實例，但借助聯邦宇宙通用的 &lt;a href=&#34;https://zh.wikipedia.org/zh-tw/ActivityPub&#34;&gt;ActivityPub 協議&lt;/a&gt;，即使在不同伺服器的人，也可以互相跟隨與互動&lt;/p&gt;
&lt;p&gt;所以聯邦宇宙的各伺服器是「互相獨立」且又「不互相依賴」的存在&lt;/p&gt;
&lt;p&gt;隨著時間的推移（以及推特的自爆），這個聯邦宇宙應該會越來越壯大！？&lt;/p&gt;
&lt;p&gt;聯邦宇宙比較知名的平台不只有 &lt;a href=&#34;https://zh.wikipedia.org/zh-hant/Mastodon&#34;&gt;Mastodon&lt;/a&gt;，另外還有日本開發者主導開發相對輕巧的 &lt;a href=&#34;https://misskey-hub.net/&#34;&gt;Misskey&lt;/a&gt; 也是相當熱鬧&lt;/p&gt;
&lt;p&gt;目前看來從推特轉投入開發 Mastodon 客戶端的開發者比較多，應該能給原來推特使用者的體驗會差不多甚至是更好！ 💪&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h3 id=&#34;挑選一個註冊伺服器&#34;&gt;挑選一個註冊伺服器&lt;/h3&gt;
&lt;p&gt;聯邦宇宙人人花點時間都能搭自己的實例，但跟買車與養車同樣道理，搭起來簡單，長時間維護有一定困難的&lt;/p&gt;
&lt;p&gt;除非對自己 DIY 能力有把握，出問題又有時間去找解答，不然我建議還是直接從官方推薦伺服器裡面挑一個&lt;/p&gt;
&lt;p&gt;官方列出來的伺服器，可以挑一個自己喜歡的域名： &lt;a href=&#34;https://joinmastodon.org/servers&#34;&gt;https://joinmastodon.org/servers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2023/02/prHm8qMA37-152337-5AezwCUT.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;我自己是選了一個 mastodon.social 的來註冊，這個是 Mastodon 德國開發最早建立運營的伺服器&lt;/p&gt;
&lt;p&gt;觀察一陣子發現這伺服器版本更新速度相當快，基本上有 RC 的時候他們都直接用了，新功能支援比較快&lt;/p&gt;
&lt;p&gt;也想要註冊這伺服器的人可以使用我的邀請連結註冊： &lt;a href=&#34;https://mastodon.social/invite/g8Yfkx34&#34;&gt;https://mastodon.social/invite/g8Yfkx34&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;網站上的連結是： &lt;a href=&#34;https://mastodon.social/@jkgtw&#34;&gt;https://mastodon.social/@jkgtw&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h3 id=&#34;推薦的客戶端&#34;&gt;推薦的客戶端&lt;/h3&gt;
&lt;p&gt;像是上面提到的 Tweetbot 開發者專門為 Mastodon 開發的 &lt;a href=&#34;https://tapbots.com/ivory/&#34;&gt;Ivory&lt;/a&gt; 就很讚，還有原 Spring 開發的 &lt;a href=&#34;https://mastodon.social/@MonaApp&#34;&gt;Mona&lt;/a&gt; 也相當優秀&lt;/p&gt;
&lt;p&gt;Mona 雖然還在測試，但目前整體完成度較高，多平台的 iCloud 同步也都已經做好，應該很快就會脫離測試階段&lt;/p&gt;
&lt;p&gt;上述這兩款是付費軟體，而且 Ivory 是訂閱制的，Mona 則未來正式版會是買斷制的&lt;/p&gt;
&lt;p&gt;如果不喜歡這兩款的話，還可以參考免費開放原始程式的 &lt;a href=&#34;https://apps.apple.com/tw/app/ice-cubes-for-mastodon/id6444915884&#34;&gt;Ice Cubes&lt;/a&gt;，這款蠻推的，開發者的開發新版頻率相當高&lt;/p&gt;
&lt;p&gt;堪稱開發狂人，有任何使用上的問題反應或者新功能建議，他也很快就能做出回應&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.jkg.tw/media/2023/02/8ZD8l5me40-171340-YKovxFQ0.png#little&#34;&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
