<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>owan's Site Blog</title>
        <link>https://blog.owanio1992.cloudns.nz/blog</link>
        <description>owan's Site Blog</description>
        <lastBuildDate>Sat, 04 Apr 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[從 hugo 搬家到 docusaurus]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2026/04/04/_docusaurus</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2026/04/04/_docusaurus</guid>
            <pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[紀錄一下從 hugo 搬家到 docusaurus 的原因]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://blog.owanio1992.cloudns.nz/assets/images/image-ea2e75b38ba5c696f3320303365661c9.png" width="1024" height="572" class="img_ev3q"></p>
<p>紀錄一下從 hugo 搬家到 docusaurus 的原因</p>
<p>之前覺得 hugo 速度很快, docusaurus 則慢又有點小複雜<br>
因此採用 hugo 作為我的 static site generater<br>
但隨著越用越多功能, 開始體感到 hugo 麻煩的地方<br>
hugo 本身依靠 layouts 來設定如何實際 rander html<br>
通常來說就是安裝 theme<br>
但問題會變成 theme 決定了你的網站可以用哪些功能<br>
造就了功能會摻疵不齊, 用法各異<br>
變成了後續維護上的麻煩<br>
雖然剛開始看到不同 theme 覺得很棒<br>
可實際用後發現真正算的上能用的就那幾個<br>
然後好死不死想要的功能沒有一個 theme 完全支援<br>
只能忍痛退讓</p>
<p>經過一陣時間掙扎<br>
想想都寫 markdown 了 &gt; 原本就是不想花時間在文書排版上<br>
hugo 的 theme 變成又花時間在網站排版 &gt; 變得本末導致了</p>
<p>所以又嘗試再看看 docusaurus</p>
<p>docusaurus 就沒什麼 UI 的選擇<br>
雖然會覺得沒有個人特色, 但可以讓人更專心在內容上, 不過也許就是懶而已😆</p>
<p>docusaurus 實際切換後發現的優點</p>
<ul>
<li class="">link check: 會幫忙檢查是否有失連狀況, 意外挺加分</li>
<li class="">mermaid: 支援良好 <a href="https://www.simonpainter.com/mermaid-icons/" target="_blank" rel="noopener noreferrer" class="">Registering icon pack</a> 也能支援</li>
</ul>
<p>讓我感到不舒服的是 build 速度實在太慢了<br>
寫作時感到非常煩躁<br>
還好官方有提供 <a href="https://github.com/facebook/docusaurus/issues/10556" target="_blank" rel="noopener noreferrer" class="">Docusaurus Faster</a><br>
雖然還是 experimental 功能, 但實測沒有什麼問題<br>
速度是快很多, 雖然還是比 hugo 稍慢,但已經是可以接受的地步</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>整體來說 切換到 docusaurus 個人是覺得值得的</p></div></div>]]></content:encoded>
            <category>Docusaurus</category>
            <category>hugo</category>
        </item>
        <item>
            <title><![CDATA[為什麼我選擇 TUXEDO OS 做為我的 Linux Desktop]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2026/03/20/_tuxedo_linux</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2026/03/20/_tuxedo_linux</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[All these will be part of the blog post summary.]]></description>
            <content:encoded><![CDATA[<p>All these will be part of the blog post summary.</p>
<div class="tenor-gif-embed" data-postid="27266616" data-share-method="host" data-aspect-ratio="1" data-width="100%"><a href="https://tenor.com/view/yetopen-gif-27266616" target="_blank" rel="noopener noreferrer" class="">Yetopen GIF</a>from <a href="https://tenor.com/search/yetopen-gifs" target="_blank" rel="noopener noreferrer" class="">Yetopen GIFs</a></div> <!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="為什麼要使用-linux-desktop">為什麼要使用 Linux Desktop<a href="https://blog.owanio1992.cloudns.nz/blog/2026/03/20/_tuxedo_linux#%E7%82%BA%E4%BB%80%E9%BA%BC%E8%A6%81%E4%BD%BF%E7%94%A8-linux-desktop" class="hash-link" aria-label="Direct link to 為什麼要使用 Linux Desktop" title="Direct link to 為什麼要使用 Linux Desktop" translate="no">​</a></h2>
<p>我相信最多人用的 desktop 是 Windows<br>
我平常使用 Linux desktop 的原因是</p>
<ol>
<li class="">
<p>工作使用 Linux server<br>
為了讓自己更加熟悉 Linux, 因此平常也使用 Linux desktop<br>
另外平常需要對 Linux server 進行操作/執行 Script 等, 有同樣的 Linux 環境較方便</p>
</li>
<li class="">
<p>資源較省<br>
對比 Windows, Linux 使用較少資源, 體感覺得 OS 執行速度快的多<br>
但 Linux 軟體生態較差(畢竟用的人少), 有些 Windows 上好用的 App 在 Linux 只有'🦽殘障版本'<br>
因此一些特定使用情境下, 效率可能反而較差</p>
</li>
<li class="">
<p>Windows 11 大變革<br>
雖然我使用 Linux desktop<br>
但我個人並不討厭 Windows<br>
不過自從 Windows 11 有許多變化<br>
讓我認為變得更難用了...<br>
因此讓我更加努力使用 Linux desktop 做為日常使用</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="linux-desktop-使用歷程">Linux Desktop 使用歷程<a href="https://blog.owanio1992.cloudns.nz/blog/2026/03/20/_tuxedo_linux#linux-desktop-%E4%BD%BF%E7%94%A8%E6%AD%B7%E7%A8%8B" class="hash-link" aria-label="Direct link to Linux Desktop 使用歷程" title="Direct link to Linux Desktop 使用歷程" translate="no">​</a></h2>
<p>關於 Linux desktop 由於其開放性<br>
有各式各樣的 distro, 可以在 <a href="https://distrowatch.com/" target="_blank" rel="noopener noreferrer" class="">distro watch</a> 看到清單<br>
因此選擇合適的 distro 就非常重要了<br>
剛接觸 Linux 一上來馬上就是選擇障礙, 因此這邊稍微講一下心路歷程</p>
<p>最大的問題在於環境是否能以支撐日常使用, 以下是我認為重要的幾個點</p>
<ul>
<li class="">硬體相容性: 總不能連用都不能用對吧？</li>
<li class="">軟體相容性: 勢必要有方案能夠支援日常, 比如說瀏覽器, 輸入法, 文書處理器...</li>
<li class="">社群大小: 因為 Linux desktop 本身就冷門, 社群大小等同於有多少人踩雷/除錯/問題解答, 使用者越多等於越穩定</li>
</ul>
<p>以上幾點就是不斷地踩雷後找到心目中最理想 distro 的要求</p>
<p>在繼續前要先說明 distro 的選擇會大概分兩個方向</p>
<ul>
<li class=""><a href="https://distrowatch.com/dwres.php?resource=glossary#sourcebased" target="_blank" rel="noopener noreferrer" class="">Source based</a>: 可理解為底層核心, 沒有圖形化介面</li>
<li class=""><a href="https://distrowatch.com/dwres.php?resource=glossary#desktop" target="_blank" rel="noopener noreferrer" class="">Desktop environment</a>: 提供圖形化介面<br>
除了桌面環境外, 也提供了一些 app (檔案管理/記事本/終端機...等)</li>
</ul>
<div class="tenor-gif-embed" data-postid="12617216" data-share-method="host" data-aspect-ratio="0.943396" data-width="100%"><a href="https://tenor.com/view/scrolling-scroll-app-drawer-gadgets-one-malayalam-tech-tips-gif-12617216" target="_blank" rel="noopener noreferrer" class="">Scrolling App Drawer GIF</a>from <a href="https://tenor.com/search/scrolling-gifs" target="_blank" rel="noopener noreferrer" class="">Scrolling GIFs</a></div> <!-- -->
<p>Source based 我選擇 Ubuntu<br>
我認為他提供了最佳的核心功能<br>
以上奠定了我選擇 distro 的方向</p>
<div class="tenor-gif-embed" data-postid="13960597190189876079" data-share-method="host" data-aspect-ratio="1.76596" data-width="100%"><a href="https://tenor.com/view/crystal-the-cavern-spirit-gif-13960597190189876079" target="_blank" rel="noopener noreferrer" class="">Crystal The Cavern Spirit GIF</a>from <a href="https://tenor.com/search/crystal+the+cavern+spirit-gifs" target="_blank" rel="noopener noreferrer" class="">Crystal The Cavern Spirit GIFs</a></div> <!-- -->
---
<p>我的 Linux desktop 使用歷程如下<br>
Source based 就以 Ubuntu 為主<br>
歷程都是在 Desktop environment 選擇過程<br>
由於 Ubuntu GNOME 環境實在不討我喜歡<br>
因此一開始從 <a href="https://ubuntu.com/desktop/flavors" target="_blank" rel="noopener noreferrer" class="">Ubuntu flavors</a> 來做選擇</p>
<ul>
<li class="">
<p><a href="https://xubuntu.org/" target="_blank" rel="noopener noreferrer" class="">Xubuntu</a>: 當時看上 <a href="https://www.xfce.org/" target="_blank" rel="noopener noreferrer" class="">Xfce</a>,以節省資源/高速為主<br>
然而實際用下來發覺功能並無法滿足我的需求, 有時會當機, 進而轉向其他 Desktop environment</p>
</li>
<li class="">
<p><a href="https://kubuntu.org/" target="_blank" rel="noopener noreferrer" class="">Kubuntu</a>: <a href="https://kde.org/" target="_blank" rel="noopener noreferrer" class="">KDE</a> 算一個挺主流的 Desktop environment, 實際用起來深得我心<br>
除了桌面系統穩定, 也有自己的龐大的 <a href="https://apps.kde.org/" target="_blank" rel="noopener noreferrer" class="">KDE app</a> 生態, 裡面不少 App 幾乎是商業級別<br>
在日常使用非常加分<br>
然而 Kubuntu 有個挺惱人的問題, 就是 Ubuntu 的政策是以自己 patch 來維護套件, 而不是更新 source release<br>
而 Ubuntu LTS 的發布週期是兩年一版, 也就造成 feature 的引入要等兩年<br>
更何況新的 Ubuntu LTS 甚至也不會用最新版套件, 變成 feature 的引入可能要等四年<br>
<img decoding="async" loading="lazy" src="https://memeprod.ap-south-1.linodeobjects.com/user-gif-post/1651202709788.gif" alt="" class="img_ev3q"></p>
</li>
</ul>
<p>因此也有許多人抱怨 也有專門的文章分享如何升級 <a href="https://www.omgubuntu.co.uk/2025/10/how-to-upgrade-kde-plasma-6-5-kubuntu-25-10" target="_blank" rel="noopener noreferrer" class="">Upgrade KDE Plasma</a><br>
但這樣不代表能用到最新版本, 加上穩定度堪憂, 因此又繼續尋找下個 distro<br>
Ubuntu 官方也做出部分調整 <a href="https://www.phoronix.com/news/Ubuntu-Releases-Fresher-Kernels" target="_blank" rel="noopener noreferrer" class="">Moves To Shipping Very Latest Upstream Kernel</a><br>
然而究竟未來會如何, 我就以觀望角度看看如何發展, 不論如何, 這時間實在太久,我不想等</p>
<ul>
<li class="">
<p><a href="https://linuxmint.com/" target="_blank" rel="noopener noreferrer" class="">Linux Mint</a>: 算是很多人推薦的系統<br>
但在淺嘗 Cinnamon 環境後, 仍覺得 KDE 才能符合我需求, 因此繼續找下個 distro</p>
</li>
<li class="">
<p><a href="https://neon.kde.org/" target="_blank" rel="noopener noreferrer" class="">KDE Neon</a>: 由 KDE 官方製作的 distro, 就是標榜能用最新的 KDE release<br>
雖然有分 Unstable/stable 但是實際用起來 stable 穩定度沒很好<br>
因此也常常在解決一些問題</p>
</li>
<li class="">
<p><a href="https://www.tuxedocomputers.com/en/TUXEDO-OS_1.tuxedo" target="_blank" rel="noopener noreferrer" class="">TUXEDO OS</a>: 綜觀我前面需求<br>
找到這篇文章 <a href="https://www.tuxedocomputers.com/en/Differences-between-TUXEDO-OS-Kubuntu-and-KDE-Neon.tuxedo" target="_blank" rel="noopener noreferrer" class="">Differences between TUXEDO OS, Kubuntu and KDE Neon</a><br>
簡單來說呢 TUXEDO 等於是 KDE Neon 的企業版本, 幫忙把關了 KDE 的穩定度<br>
至今使用體感非常好, 真的是穩定的系統</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="什麼是-ubuntu">什麼是 Ubuntu<a href="https://blog.owanio1992.cloudns.nz/blog/2026/03/20/_tuxedo_linux#%E4%BB%80%E9%BA%BC%E6%98%AF-ubuntu" class="hash-link" aria-label="Direct link to 什麼是 Ubuntu" title="Direct link to 什麼是 Ubuntu" translate="no">​</a></h2>
<div class="tenor-gif-embed" data-postid="13909128" data-share-method="host" data-aspect-ratio="1" data-width="100%"><a href="https://tenor.com/view/linux-ubuntu-software-gif-13909128" target="_blank" rel="noopener noreferrer" class="">Linux Ubuntu Sticker</a>from <a href="https://tenor.com/search/linux-stickers" target="_blank" rel="noopener noreferrer" class="">Linux Stickers</a></div> <!-- -->
<p>在介紹 TUXEDO OS 之前<br>
來說說為什麼要選擇 based on Ubuntu 的 distro</p>
<p>來自 <a href="https://www.reddit.com/r/linux4noobs/comments/1c9u8gd/comment/l0nu8xs/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button" target="_blank" rel="noopener noreferrer" class="">Reddit</a> 的討論</p>
<ul>
<li class="">Ubuntu LTS 給予良好的系統穩定度</li>
<li class="">Ubuntu LTS 普遍硬體支援更好</li>
</ul>
<p>然而也因為求穩定(feature 採用慢)+商業考量<br>
有些人是不喜歡 Ubuntu 的<br>
像是 Ubuntu 採用的 snap 就很多人詬病<br>
也因此一些 distro 就是拿 Ubuntu 的好, 去 Ubuntu 的不好<br>
變成一個 distro<br>
opensource 很常看到的, 我 fork 你的 fork😆</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="什麼是-kde">什麼是 KDE<a href="https://blog.owanio1992.cloudns.nz/blog/2026/03/20/_tuxedo_linux#%E4%BB%80%E9%BA%BC%E6%98%AF-kde" class="hash-link" aria-label="Direct link to 什麼是 KDE" title="Direct link to 什麼是 KDE" translate="no">​</a></h2>
<p>KDE Plasma 是 Linux 社群中最受歡迎的桌面環境之一，以其<strong>極高的自由度</strong>和<strong>強大的功能</strong>著稱。以下是其核心優勢：</p>
<p><strong>核心優點</strong></p>
<ol>
<li class="">極致的客製化能力 (High Customizability)
KDE 被譽為「桌面環境中的樂高」，幾乎每一個視覺元素都可以調整：</li>
</ol>
<ul>
<li class=""><strong>面板配置</strong>：可自由移動工作列位置、調整大小、透明度，或建立多個自定義面板。</li>
<li class=""><strong>小工具 (Widgets)</strong>：內建豐富工具，可在桌面直接顯示天氣、硬體監控、備忘錄或媒體控制。</li>
<li class=""><strong>外觀主題</strong>：內建商店可一鍵下載全球社群創作的圖示、視窗裝飾與色彩方案。</li>
</ul>
<ol start="2">
<li class="">優異的效能表現 (Performance)
現代的 KDE Plasma（特別是 6.x 版本）在功能與效能之間取得了極佳平衡：</li>
</ol>
<ul>
<li class=""><strong>資源佔用低</strong>：記憶體佔用通常比 GNOME 更少，甚至能流暢運行於老舊硬體。</li>
<li class=""><strong>反應迅速</strong>：系統動畫流暢，且允許使用者關閉特效以追求極致速度。</li>
</ul>
<ol start="3">
<li class="">強大的軟體生態系 (KDE Gear)
KDE 擁有一系列功能極其強大的原生應用程式：</li>
</ol>
<ul>
<li class=""><strong>Dolphin</strong>：被公認為 Linux 界最強大的檔案管理員，支援分頁、終端機嵌入與預覽。</li>
<li class=""><strong>KDE Connect</strong>：殺手級應用。實現手機（Android/iOS）與電腦的深度同步，包含剪貼簿共享、檔案傳輸與遠端控制。</li>
<li class=""><strong>Konsole</strong>：高度可自訂的終端機模擬器。</li>
</ul>
<ol start="4">
<li class="">適合各種工作流</li>
</ol>
<ul>
<li class=""><strong>低學習曲線</strong>：預設佈局與 Windows 相似，讓新使用者能快速上手。</li>
<li class=""><strong>生產力工具</strong>：內建 <strong>KRunner</strong>（強大的快速啟動與搜尋框）以及先進的視窗平鋪 (Window Tiling) 功能。</li>
</ul>
<blockquote>
<p><strong>💡 提示：</strong> 如果你是從 Windows 轉移過來的用戶，KDE Plasma 通常是首選，因為它的操作邏輯最接近傳統桌面。</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tuxedo-os-簡介">TUXEDO OS 簡介<a href="https://blog.owanio1992.cloudns.nz/blog/2026/03/20/_tuxedo_linux#tuxedo-os-%E7%B0%A1%E4%BB%8B" class="hash-link" aria-label="Direct link to TUXEDO OS 簡介" title="Direct link to TUXEDO OS 簡介" translate="no">​</a></h2>
<p>官網 <a href="https://www.tuxedocomputers.com/en/TUXEDO-OS_1.tuxedo" target="_blank" rel="noopener noreferrer" class="">https://www.tuxedocomputers.com/en/TUXEDO-OS_1.tuxedo</a></p>
<p>TUXEDO OS 是由德國硬體廠商 <strong>TUXEDO Computers</strong> 所開發的 Linux 發行版。雖然它是為了自家的筆電與桌機進行優化，但它也完全免費開放給所有硬體使用。</p>
<p><img decoding="async" loading="lazy" alt="tuxedo os" src="data:image/png;base64,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" width="400" height="272" class="img_ev3q"></p>
<p><strong>核心特色：結合穩定與先進</strong></p>
<p>TUXEDO OS 採取了一個非常聰明的做法：<strong>底層採用 Ubuntu LTS (長期支援版)</strong> 以確保系統穩定性與商業軟體相容性，但<strong>上層桌面環境 (KDE Plasma) 與核心 (Kernel)</strong> 則採用類似「滾動更新」的機制，確保使用者能用到最新的功能。</p>
<p>以下是它主要的優勢：</p>
<ol>
<li class="">
<p><strong>去 Snap 化 (Snap-free by default)</strong>：Ubuntu 官方強推的 Snap 套件格式常被批評啟動慢、佔用空間。TUXEDO OS 特地移除了 Snap，改以 <strong>Flatpak</strong> 作為替代方案。甚至連 Firefox 也是提供原生的 <code>.deb</code> 版本，而不是 Ubuntu 預設的 Snap 版。</p>
</li>
<li class="">
<p><strong>KDE Plasma 之深度優化</strong>：它不僅僅是裝上 KDE，TUXEDO 還對其進行了視覺上的修飾與穩定度測試。它不像 KDE Neon 那樣「過於前衛」導致崩潰，也不會像 Kubuntu 那樣「過於陳舊」。</p>
</li>
<li class="">
<p><strong>TUXEDO Control Center (TCC)</strong>：這是系統的靈魂工具，可以讓你直接在桌面端調整風扇控制（靜音或效能模式）、限制 CPU 功耗 (TDP) 以及即時監控硬體狀態。</p>
</li>
<li class="">
<p><strong>TUXEDO Tomte &amp; Chroot</strong>：<strong>Tomte</strong> 是一個自動系統小助手，會自動檢查並修補驅動或系統配置問題；而內建的 <strong>Chroot</strong> 功能則讓你在系統更新出問題時，能透過 Live USB 快速修復引導。</p>
</li>
<li class="">
<p><strong>隱私與安全</strong>：作為歐洲廠商，TUXEDO 不包含任何遙測或追蹤代碼，給予使用者完全的控制權。</p>
</li>
</ol>
<blockquote>
<p><strong>總結：</strong>
如果說 Ubuntu 是穩定的老牌企業，KDE Neon 是技術狂的實驗室，那麼 <strong>TUXEDO OS 就是一家追求穩定但不失創新、且更懂使用者痛點的精品店。</strong></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="linux-至今難解難題">Linux 至今難解難題<a href="https://blog.owanio1992.cloudns.nz/blog/2026/03/20/_tuxedo_linux#linux-%E8%87%B3%E4%BB%8A%E9%9B%A3%E8%A7%A3%E9%9B%A3%E9%A1%8C" class="hash-link" aria-label="Direct link to Linux 至今難解難題" title="Direct link to Linux 至今難解難題" translate="no">​</a></h2>
<p><strong>1. 網路 ATM (晶片卡讀卡機)</strong>
這對於台灣的使用者來說是極為現實的痛點。雖然現在行動支付與 App 轉帳很發達，但若需要用到實體讀卡機進行線上轉帳、報稅、或查詢餘額時，大多數銀行的 WebATM 元件依然只支援 Windows (及少部分 macOS)。雖然 Linux 底層可以透過 <code>pcscd</code> 驅動讀卡機，但因為銀行不提供對應的 Linux 元件，導致瀏覽器無法與硬體通訊。這意味著在 Linux 上，你幾乎無法使用實體晶片卡進行任何線上金融操作。</p>
<p><strong>2. 專業軟體與 Office 相容性</strong>
這就是最常被提起的「相容性大山」。雖然 Linux 有很好的替代方案（如 LibreOffice,OnlyOffice），對於一般文書處理綽綽有餘，但一旦涉及複雜的 Excel 巨集 (VBA)、特殊的字體渲染、或是需要與他人協作高度精準的 Word 排版時，Linux 方案往往會出現「跑位」或功能缺失。雖然現在可以靠 Web 版 Office 365 解決部分問題，但在功能完整度與操作流暢感上，原生 Windows 版的 Office 依然是難以取代的標準。</p>]]></content:encoded>
            <category>linux</category>
        </item>
        <item>
            <title><![CDATA[windows 11 安裝紀錄]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2026/03/08/_windows11-install</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2026/03/08/_windows11-install</guid>
            <pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[windows 11 version: Win11_25H2]]></description>
            <content:encoded><![CDATA[<p>windows 11 version: Win11_25H2</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-use-local-account">how to use local account<a href="https://blog.owanio1992.cloudns.nz/blog/2026/03/08/_windows11-install#how-to-use-local-account" class="hash-link" aria-label="Direct link to how to use local account" title="Direct link to how to use local account" translate="no">​</a></h2>
<p>press Shift + F10, type oobe\bypassnro</p>]]></content:encoded>
            <category>linux</category>
        </item>
        <item>
            <title><![CDATA[ASUS ExpertBook P5405 喇叭無聲修復紀錄]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2026/03/06/_asus_laptop_sound_issue_linux</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2026/03/06/_asus_laptop_sound_issue_linux</guid>
            <pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[【技術總結：ASUS ExpertBook P5405 喇叭無聲修復紀錄】]]></description>
            <content:encoded><![CDATA[<p>【技術總結：ASUS ExpertBook P5405 喇叭無聲修復紀錄】</p>
<ol>
<li class="">問題現象 (Symptoms)</li>
</ol>
<ul>
<li class="">系統環境： Linux (Tuxedo OS / Ubuntu 24.04 系), Kernel 6.17+。</li>
<li class="">硬體規格： Intel Lunar Lake 平台, Realtek ALC294 Codec, Cirrus Logic CS35L41 (CSC3551) 喇叭放大器。</li>
<li class="">錯誤日誌：
<ul>
<li class="">cs35l41-hda ... Enable(1) failed: -110 (晶片啟動逾時)。</li>
<li class="">Falling back to default firmware (找不到硬體專用韌體)。</li>
<li class="">Cannot Initialize Firmware. Error: -2 (找不到韌體檔案或格式錯誤)。</li>
</ul>
</li>
</ul>
<ol start="2">
<li class="">核心原因 (Root Causes)</li>
<li class="">型號 ID 不匹配： 筆電的子系統 ID 為 10431f63，但系統內建韌體庫僅包含 10431f62 的檔案。</li>
<li class="">韌體壓縮問題： 部分核心驅動程式在初始化 CS35L41 放大器時，無法正確解壓 .zst 格式的韌體，導致載入失敗。</li>
<li class="">音效拓撲識別： 核心預設未將此型號識別為華碩專用的音效配置，導致喇叭放大器未被正確供電。</li>
<li class="">硬體狀態鎖定： 放大器晶片在多次載入失敗後會進入保護模式，需透過完全斷電（Cold Boot）重置。</li>
</ol>
<hr>
<ol start="3">
<li class="">完整解決方案 (The Solution)</li>
</ol>
<h5 class="anchor anchorTargetStickyNavbar_Vzrq" id="第一步處理韌體檔案-解壓與匹配-id">第一步：處理韌體檔案 (解壓與匹配 ID)<a href="https://blog.owanio1992.cloudns.nz/blog/2026/03/06/_asus_laptop_sound_issue_linux#%E7%AC%AC%E4%B8%80%E6%AD%A5%E8%99%95%E7%90%86%E9%9F%8C%E9%AB%94%E6%AA%94%E6%A1%88-%E8%A7%A3%E5%A3%93%E8%88%87%E5%8C%B9%E9%85%8D-id" class="hash-link" aria-label="Direct link to 第一步：處理韌體檔案 (解壓與匹配 ID)" title="Direct link to 第一步：處理韌體檔案 (解壓與匹配 ID)" translate="no">​</a></h5>
<p>必須讓系統找到未經壓縮、且符合 1f63 編號的韌體檔案。</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">    1 # 1. 進入韌體目錄</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    2 cd /lib/firmware/cirrus/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    3</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    4 # 2. 解壓縮所有 .zst 檔案 (確保核心能讀取原始格式)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    5 sudo zstd -d --rm *.zst 2&gt;/dev/null</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    6</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    7 # 3. 建立 1f63 的連結 (指向 1f62 的原始檔案)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    8 sudo ln -sf cs35l41-dsp1-spk-cali-10431f62.wmfw cs35l41-dsp1-spk-cali-10431f63.wmfw</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    9 sudo ln -sf cs35l41-dsp1-spk-prot-10431f62.wmfw cs35l41-dsp1-spk-prot-10431f63.wmfw</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   10 sudo ln -sf cs35l41-dsp1-spk-cali-10431f62-spkid0-l0.bin cs35l41-dsp1-spk-cali-10431f63-spkid0-l0.bin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   11 sudo ln -sf cs35l41-dsp1-spk-cali-10431f62-spkid0-r0.bin cs35l41-dsp1-spk-cali-10431f63-spkid0-r0.bin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   12 sudo ln -sf cs35l41-dsp1-spk-cali-10431f62-spkid1-l0.bin cs35l41-dsp1-spk-cali-10431f63-spkid1-l0.bin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   13 sudo ln -sf cs35l41-dsp1-spk-cali-10431f62-spkid1-r0.bin cs35l41-dsp1-spk-cali-10431f63-spkid1-r0.bin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   14 sudo ln -sf cs35l41-dsp1-spk-prot-10431f62-spkid0-l0.bin cs35l41-dsp1-spk-prot-10431f63-spkid0-l0.bin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   15 sudo ln -sf cs35l41-dsp1-spk-prot-10431f62-spkid0-r0.bin cs35l41-dsp1-spk-prot-10431f63-spkid0-r0.bin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   16 sudo ln -sf cs35l41-dsp1-spk-prot-10431f62-spkid1-l0.bin cs35l41-dsp1-spk-prot-10431f63-spkid1-l0.bin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   17 sudo ln -sf cs35l41-dsp1-spk-prot-10431f62-spkid1-r0.bin cs35l41-dsp1-spk-prot-10431f63-spkid1-r0.bin</span><br></span></code></pre></div></div>
<h5 class="anchor anchorTargetStickyNavbar_Vzrq" id="第二步配置核心參數">第二步：配置核心參數<a href="https://blog.owanio1992.cloudns.nz/blog/2026/03/06/_asus_laptop_sound_issue_linux#%E7%AC%AC%E4%BA%8C%E6%AD%A5%E9%85%8D%E7%BD%AE%E6%A0%B8%E5%BF%83%E5%8F%83%E6%95%B8" class="hash-link" aria-label="Direct link to 第二步：配置核心參數" title="Direct link to 第二步：配置核心參數" translate="no">​</a></h5>
<p>強制驅動程式使用適合華碩 ExpertBook 系列的音效模型。</p>
<p>1 # 建立/修改音效配置檔案
2 echo "options snd-hda-intel model=alc294-asus-p50" | sudo tee /etc/modprobe.d/alsa-base.conf
3
4 # 更新 initramfs (確保開機掛載)
5 sudo update-initramfs -u</p>
<h5 class="anchor anchorTargetStickyNavbar_Vzrq" id="第三步手動解除底層靜音-alsa">第三步：手動解除底層靜音 (ALSA)<a href="https://blog.owanio1992.cloudns.nz/blog/2026/03/06/_asus_laptop_sound_issue_linux#%E7%AC%AC%E4%B8%89%E6%AD%A5%E6%89%8B%E5%8B%95%E8%A7%A3%E9%99%A4%E5%BA%95%E5%B1%A4%E9%9D%9C%E9%9F%B3-alsa" class="hash-link" aria-label="Direct link to 第三步：手動解除底層靜音 (ALSA)" title="Direct link to 第三步：手動解除底層靜音 (ALSA)" translate="no">​</a></h5>
<p>解除硬體暫存器中的強迫靜音狀態。</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">   1 # 根據 amixer contents 找到的 numid 進行操作</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   2 amixer -c 0 cset numid=3 0  # 關閉 Forced Mute L</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   3 amixer -c 0 cset numid=6 0  # 關閉 Forced Mute R</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   4 amixer -c 0 cset numid=10 on # 開啟 Speaker Switch</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   5 amixer -c 0 cset numid=9 87  # 調高 Speaker Volume</span><br></span></code></pre></div></div>
<h5 class="anchor anchorTargetStickyNavbar_Vzrq" id="第四步完全斷電重置-cold-boot">第四步：完全斷電重置 (Cold Boot)<a href="https://blog.owanio1992.cloudns.nz/blog/2026/03/06/_asus_laptop_sound_issue_linux#%E7%AC%AC%E5%9B%9B%E6%AD%A5%E5%AE%8C%E5%85%A8%E6%96%B7%E9%9B%BB%E9%87%8D%E7%BD%AE-cold-boot" class="hash-link" aria-label="Direct link to 第四步：完全斷電重置 (Cold Boot)" title="Direct link to 第四步：完全斷電重置 (Cold Boot)" translate="no">​</a></h5>
<p>這是最關鍵的一步：</p>
<ul>
<li class="">關機，拔掉電源線。</li>
<li class="">靜置約 10 秒（讓放大器晶片完全失去電力以清除錯誤狀態）。</li>
<li class="">重新接電開機。</li>
</ul>
<hr>
<ol start="4">
<li class="">未來維護建議</li>
</ol>
<ul>
<li class="">核心更新： 之後若更新核心（例如升級到 6.18+），若發現聲音消失，請檢查 /etc/modprobe.d/alsa-base.conf 是否還在。</li>
<li class="">韌體包更新： 若 linux-firmware 套件更新，可能會重新下載 .zst 檔案，屆時可能需要重新執行「解壓縮」的動作。</li>
</ul>
<p>這份紀錄可以保存在您的雲端筆記或 /etc/ 備份中，方便日後重裝系統時參考。很高興能幫您解決問題！</p>]]></content:encoded>
            <category>linux</category>
        </item>
        <item>
            <title><![CDATA[CKA, CKAD 經驗分享]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2025/12/18/_CKA_CKAD</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2025/12/18/_CKA_CKAD</guid>
            <pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[因為考試會一直改版]]></description>
            <content:encoded><![CDATA[<p>因為考試會一直改版<br>
所以想分享一下目前的最新資訊</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="考前準備">考前準備<a href="https://blog.owanio1992.cloudns.nz/blog/2025/12/18/_CKA_CKAD#%E8%80%83%E5%89%8D%E6%BA%96%E5%82%99" class="hash-link" aria-label="Direct link to 考前準備" title="Direct link to 考前準備" translate="no">​</a></h2>
<p>CKA, CKAD 是實做測驗<br>
不外乎就是要熟相關 command, document<br>
但不用死記(應該也沒什麼人能夠記的住)<br>
考試中能夠開 document<br>
因此官網務必要熟悉, 測驗中才能順利翻找資料</p>
<p>學習資源</p>
<ul>
<li class=""><a href="https://github.com/sailor-sh/CK-X" target="_blank" rel="noopener noreferrer" class="">https://github.com/sailor-sh/CK-X</a> : 社群製作的模擬器, 但答案判斷機制有點怪, 另外平台很舊, 有待更新</li>
<li class="">udemy 課程: 很推薦買 不貴,內容充實,終生,又持續更新, 未來 k8s 新功能也能當學習來源</li>
<li class="">killercoda.com: 有些情境可以看</li>
<li class="">killer.sh: 考試會送 2 次模擬考, 難度比實際實際考試難,能過基本可以穩拿證書</li>
<li class="">k3s: 基本上考試中也幾乎是用 k3s 了, 自架環境練習非常好用, 不建議使用 kind
因為 kind 會受 docker overlap 影響, 實際使用會有出入</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="考試環境注意事項">考試環境注意事項<a href="https://blog.owanio1992.cloudns.nz/blog/2025/12/18/_CKA_CKAD#%E8%80%83%E8%A9%A6%E7%92%B0%E5%A2%83%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85" class="hash-link" aria-label="Direct link to 考試環境注意事項" title="Direct link to 考試環境注意事項" translate="no">​</a></h2>
<p>因為考試規則會改變<br>
務必閱讀官方說明<br>
官方說明說的非常詳細, 比如說過程可以使用哪些資源<a href="https://docs.linuxfoundation.org/tc-docs/certification/certification-resources-allowed#certified-kubernetes-administrator-cka-and-certified-kubernetes-application-developer-ckad" target="_blank" rel="noopener noreferrer" class=""></a></p>
<p>考試中可以使用<a href="https://docs.linuxfoundation.org/tc-docs/certification/lf-handbook2/exam-user-interface/examui-performance-based-exams#guidelines-and-tips-for-using-the-remote-desktop" target="_blank" rel="noopener noreferrer" class="">VSCodium</a><br>
因此不必擔心改 yaml 會很痛苦</p>
<p>這邊補充幾點<br>
考試必須使用 PSI Secure Browser<br>
但他在 ubuntu 與 snap 會衝突 <a href="https://docs.linuxfoundation.org/tc-docs/certification/lf-handbook2/exam-user-interface/examui-performance-based-exams#guidelines-and-tips-for-using-the-remote-desktop" target="_blank" rel="noopener noreferrer" class="">PSI secure browser installer crashed</a><br>
另外我也遇到 text 無法複製問題<br>
因此強烈建議避免使用 linux 考試 (這對 linux foundation 有點諷刺...)</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qa">QA<a href="https://blog.owanio1992.cloudns.nz/blog/2025/12/18/_CKA_CKAD#qa" class="hash-link" aria-label="Direct link to QA" title="Direct link to QA" translate="no">​</a></h2>
<p>Q. 考試中 browser 只能開兩個分頁？<br>
A. 目前無此限制</p>]]></content:encoded>
            <category>k8s</category>
            <category>CKA</category>
            <category>CKAD</category>
        </item>
        <item>
            <title><![CDATA[compare s3 compatible open-source storage]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2025/12/13/_s3_compatible_storage</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2025/12/13/_s3_compatible_storage</guid>
            <pubDate>Sat, 13 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[說到 s3 compatible storage]]></description>
            <content:encoded><![CDATA[<p>說到 s3 compatible storage<br>
大家都會想到 minIO<br>
不管是在正式環境還是測試環境 都幫助許多專案運作<br>
然而在 2025/10/03 minIO open-source repo 進入 maintenance mode<br>
<a href="https://github.com/minio/minio/commit/27742d469462e1561c776f88ca7a1f26816d69e2" target="_blank" rel="noopener noreferrer" class="">https://github.com/minio/minio/commit/27742d469462e1561c776f88ca7a1f26816d69e2</a></p>
<p>也等同正式宣告 minIO 要轉向閉源了<br>
雖然在早前就有跡象<br>
但這次變更也意味著社群要正式開始尋找替代方案了</p>
<blockquote>
<p>[!NOTE]
cephFS 不在我的考慮範圍內, 幾個原因</p>
<ul>
<li class="">object storage 與 block storage 目標並不同, cephFS 當 object storage 太浪費了</li>
<li class="">cephFS 複雜的部屬需求並不適合用在開發/ CICD 環境</li>
</ul>
</blockquote>
<p>以下嘗試用 google notebookLM 幫忙快速分析替代方案</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="s3-相容物件儲存詳細比較-minio-rustfs-seaweedfs-garage">S3 相容物件儲存詳細比較 (MinIO, RustFS, SeaweedFS, Garage)<a href="https://blog.owanio1992.cloudns.nz/blog/2025/12/13/_s3_compatible_storage#s3-%E7%9B%B8%E5%AE%B9%E7%89%A9%E4%BB%B6%E5%84%B2%E5%AD%98%E8%A9%B3%E7%B4%B0%E6%AF%94%E8%BC%83-minio-rustfs-seaweedfs-garage" class="hash-link" aria-label="Direct link to S3 相容物件儲存詳細比較 (MinIO, RustFS, SeaweedFS, Garage)" title="Direct link to S3 相容物件儲存詳細比較 (MinIO, RustFS, SeaweedFS, Garage)" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="i-核心架構與資源效率">I. 核心架構與資源效率<a href="https://blog.owanio1992.cloudns.nz/blog/2025/12/13/_s3_compatible_storage#i-%E6%A0%B8%E5%BF%83%E6%9E%B6%E6%A7%8B%E8%88%87%E8%B3%87%E6%BA%90%E6%95%88%E7%8E%87" class="hash-link" aria-label="Direct link to I. 核心架構與資源效率" title="Direct link to I. 核心架構與資源效率" translate="no">​</a></h3>






















































<table><thead><tr><th style="text-align:left">參數</th><th style="text-align:left">MinIO</th><th style="text-align:left">RustFS</th><th style="text-align:left">SeaweedFS</th><th style="text-align:left">Garage</th></tr></thead><tbody><tr><td style="text-align:left"><strong>主要語言</strong></td><td style="text-align:left">Go</td><td style="text-align:left">Rust</td><td style="text-align:left">Go</td><td style="text-align:left">Rust</td></tr><tr><td style="text-align:left"><strong>底層架構</strong></td><td style="text-align:left">對稱式分散式架構 (Distributed)。</td><td style="text-align:left"><strong>單層對稱式架構</strong> (類似 MinIO)，無元數據中心。</td><td style="text-align:left">Master-Volume Server 架構，優化小檔案 (Haystack 模型)。</td><td style="text-align:left"><strong>自包含/無外部依賴</strong>，內部實作共識機制。</td></tr><tr><td style="text-align:left"><strong>資料保護</strong></td><td style="text-align:left"><strong>抹除碼 (EC)</strong>，Reed-Solomon 碼。</td><td style="text-align:left"><strong>抹除碼 (EC)</strong>，Reed-Solomon 碼 (內聯於組譯碼)。</td><td style="text-align:left">簡單複製 (Replication)。EC 可作為溫資料儲存的選項。</td><td style="text-align:left">複製 (Replication)，支援彈性複製係數。</td></tr><tr><td style="text-align:left"><strong>儲存效率</strong></td><td style="text-align:left">高 (EC 最佳化，遠優於複製)。</td><td style="text-align:left">高 (EC 最佳化)。</td><td style="text-align:left">低 (複製開銷大)。</td><td style="text-align:left">低 (複製開銷大)。</td></tr><tr><td style="text-align:left"><strong>一致性模型</strong></td><td style="text-align:left">寫後讀/列後讀強一致性 (依賴底層檔案系統)。</td><td style="text-align:left">嚴格的寫後讀一致性。</td><td style="text-align:left">簡單一致性；故障時 Volume Server 可能轉為唯讀。</td><td style="text-align:left"><strong>強一致性</strong> (透過內部共識機制達成)。</td></tr><tr><td style="text-align:left"><strong>資源需求</strong></td><td style="text-align:left">中等到高 (4–32 GB RAM/節點)。</td><td style="text-align:left">輕量化 (單一二進位檔約 &lt; 100 MB)，高並發性。</td><td style="text-align:left">低 (2–4 GB RAM/節點)。</td><td style="text-align:left"><strong>極低</strong> (1–2 GB RAM/節點)。</td></tr></tbody></table>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ii-性能指標與專業化">II. 性能指標與專業化<a href="https://blog.owanio1992.cloudns.nz/blog/2025/12/13/_s3_compatible_storage#ii-%E6%80%A7%E8%83%BD%E6%8C%87%E6%A8%99%E8%88%87%E5%B0%88%E6%A5%AD%E5%8C%96" class="hash-link" aria-label="Direct link to II. 性能指標與專業化" title="Direct link to II. 性能指標與專業化" translate="no">​</a></h3>

































<table><thead><tr><th style="text-align:left">參數</th><th style="text-align:left">MinIO</th><th style="text-align:left">RustFS</th><th style="text-align:left">SeaweedFS</th><th style="text-align:left">Garage</th></tr></thead><tbody><tr><td style="text-align:left"><strong>大物件吞吐量</strong> (Read/Write)</td><td style="text-align:left"><strong>高</strong> (讀取 2.8 GB/s，寫入 2.1 GB/s)。</td><td style="text-align:left"><strong>極高</strong> (聲稱讀取 323 GB/s，寫入 183 GB/s)。</td><td style="text-align:left">良好 (讀取 2.3 GB/s，寫入 1.8 GB/s)。</td><td style="text-align:left">中等 (讀取 1.6 GB/s，寫入 1.2 GB/s)。</td></tr><tr><td style="text-align:left"><strong>小物件延遲</strong> (Small Object Latency)</td><td style="text-align:left">3.8ms 平均延遲。</td><td style="text-align:left">宣稱比 MinIO 快 2.3 倍 (針對 4KB 物件)。</td><td style="text-align:left"><strong>最低</strong> (2.1ms 平均延遲)。</td><td style="text-align:left">4.2ms 平均延遲。</td></tr><tr><td style="text-align:left"><strong>優化技術</strong></td><td style="text-align:left">針對 AI/ML 工作負載優化。利用 <strong>SIMD</strong> 指令集加速 S3 Select 等複雜查詢。</td><td style="text-align:left">利用 <strong>Rust 記憶體安全</strong> 和組譯碼 <strong>EC 優化</strong>，針對資料湖工作負載設計。</td><td style="text-align:left">採用 Haystack 模型，實現 <strong>O(1) 磁碟讀取操作</strong>，減少尋道時間。</td><td style="text-align:left">優先考慮營運穩定性與 Geo-Distribution。</td></tr></tbody></table>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="iii-s3-兼容性與進階功能">III. S3 兼容性與進階功能<a href="https://blog.owanio1992.cloudns.nz/blog/2025/12/13/_s3_compatible_storage#iii-s3-%E5%85%BC%E5%AE%B9%E6%80%A7%E8%88%87%E9%80%B2%E9%9A%8E%E5%8A%9F%E8%83%BD" class="hash-link" aria-label="Direct link to III. S3 兼容性與進階功能" title="Direct link to III. S3 兼容性與進階功能" translate="no">​</a></h3>






















































<table><thead><tr><th style="text-align:left">S3 核心功能</th><th style="text-align:left">MinIO</th><th style="text-align:left">RustFS</th><th style="text-align:left">SeaweedFS</th><th style="text-align:left">Garage</th></tr></thead><tbody><tr><td style="text-align:left"><strong>S3 兼容性標準</strong></td><td style="text-align:left"><strong>最廣泛、最完整</strong>，是 S3 兼容性的行業標準。</td><td style="text-align:left"><strong>100% 兼容</strong>，最廣泛測試和部署的 S3 替代方案之一。</td><td style="text-align:left"><strong>基本操作</strong> (PUT/GET)。功能有顯著缺陷。</td><td style="text-align:left"><strong>核心兼容</strong>，適用於 rclone、Cyberduck 等常見客戶端。</td></tr><tr><td style="text-align:left"><strong>S3 Select</strong> (資料湖查詢)</td><td style="text-align:left"><strong>支援</strong>，性能優化。</td><td style="text-align:left"><strong>支援</strong>，對資料湖/分析至關重要。</td><td style="text-align:left"><strong>不支援</strong>。</td><td style="text-align:left">不支援。</td></tr><tr><td style="text-align:left"><strong>物件版本控制</strong> (Versioning)</td><td style="text-align:left"><strong>支援</strong> (與 Object Lock 結合)。</td><td style="text-align:left"><strong>支援</strong> (用於 Active-Active 複製)。</td><td style="text-align:left"><strong>不支援</strong> (測試中造成 510 個錯誤)。</td><td style="text-align:left">不支援。</td></tr><tr><td style="text-align:left"><strong>物件鎖定</strong> (WORM/Immutability)</td><td style="text-align:left"><strong>支援</strong> (GOVERNANCE/COMPLIANCE 模式)，符合 SEC17a-4(f) 等法規。</td><td style="text-align:left"><strong>支援</strong> (GOVERNANCE/COMPLIANCE 模式)，提供法律保留功能。</td><td style="text-align:left">不支援。</td><td style="text-align:left">不支援。</td></tr><tr><td style="text-align:left"><strong>IAM 策略兼容性</strong></td><td style="text-align:left">支援 AWS IAM 策略語法和行為。</td><td style="text-align:left">支援 AWS IAM 策略語法和行為。</td><td style="text-align:left">支援有限。</td><td style="text-align:left">支援有限。</td></tr><tr><td style="text-align:left"><strong>Kubernetes 整合</strong></td><td style="text-align:left"><strong>MinIO Operator</strong> 處理部署與管理。</td><td style="text-align:left">支援 Helm Charts。</td><td style="text-align:left">支援 CSI Driver 和 Operator。</td><td style="text-align:left">支援 Kubernetes/Nomad 整合。</td></tr></tbody></table>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="iv-授權與社群狀態-商業考量">IV. 授權與社群狀態 (商業考量)<a href="https://blog.owanio1992.cloudns.nz/blog/2025/12/13/_s3_compatible_storage#iv-%E6%8E%88%E6%AC%8A%E8%88%87%E7%A4%BE%E7%BE%A4%E7%8B%80%E6%85%8B-%E5%95%86%E6%A5%AD%E8%80%83%E9%87%8F" class="hash-link" aria-label="Direct link to IV. 授權與社群狀態 (商業考量)" title="Direct link to IV. 授權與社群狀態 (商業考量)" translate="no">​</a></h3>

































<table><thead><tr><th style="text-align:left">參數</th><th style="text-align:left">MinIO</th><th style="text-align:left">RustFS</th><th style="text-align:left">SeaweedFS</th><th style="text-align:left">Garage</th></tr></thead><tbody><tr><td style="text-align:left"><strong>開源授權</strong></td><td style="text-align:left"><strong>AGPLv3</strong> (強拷貝左派，企業商業風險高)。</td><td style="text-align:left"><strong>Apache 2.0</strong> (商業友好，無 IP/合規風險)。</td><td style="text-align:left"><strong>Apache 2.0</strong> (商業友好)。</td><td style="text-align:left"><strong>AGPL-3.0</strong> (強拷貝左派，企業商業風險高)。</td></tr><tr><td style="text-align:left"><strong>社群/發布狀態</strong></td><td style="text-align:left"><strong>目前處於「維護模式」</strong> (Maintenance Mode)，不接受新功能或 PR。社群版僅原始碼發布，管理 UI 被移除。</td><td style="text-align:left">活躍，但因要求貢獻者轉讓版權 (CLA) 和激進的市場宣傳，社群存在疑慮。</td><td style="text-align:left">活躍，持續更新，提供單一二進位檔下載。</td><td style="text-align:left">活躍，被社群譽為「磐石般堅固」 (rock solid)，持續獲得公共資金支持。</td></tr><tr><td style="text-align:left"><strong>定位與建議</strong></td><td style="text-align:left">適用於需要極高性能、完整 S3 兼容性的大型企業資料湖/AI/ML 工作負載，但須處理 AGPLv3 帶來的法律或商業風險。</td><td style="text-align:left">適用於需要最高吞吐量、高儲存效率和 <strong>全面 S3 功能</strong> 的雲原生和資料湖環境，並尋求 MinIO 的 Apache 2.0 替代品。</td><td style="text-align:left">適用於需要 <strong>極低延遲</strong> 存取大量小檔案的 CDN、圖片伺服器或日誌儲存。</td><td style="text-align:left">適用於 <strong>資源受限環境</strong>、家庭實驗室 (homelab) 或邊緣部署，優先考慮部署簡單性與運營穩定性。</td></tr></tbody></table>
<hr>
<p>另外補充
<a href="https://www.repoflow.io/blog/benchmarking-self-hosted-s3-compatible-storage-a-practical-performance-comparison" target="_blank" rel="noopener noreferrer" class="">https://www.repoflow.io/blog/benchmarking-self-hosted-s3-compatible-storage-a-practical-performance-comparison</a></p>
<p>rustFS 目前來說還是 alpha 階段  不建議此時採用<br>
且他是具有中國色彩 就算 stable 後 個人也是不建議採就用</p>
<p>SeaweedFS 嚴格上來說與 cephFS 有點像, 只是額外提供 S3 compatible<br>
這樣看來 garage 算是替代 minIO 較好的選擇</p>
<p>因此 接下我來會著手替換手上的 minIO to garage<br>
之後再寫篇文章介紹 garage</p>]]></content:encoded>
            <category>s3</category>
        </item>
        <item>
            <title><![CDATA[solve chrome can't switch fcitx5 input method in linux KDE]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2025/11/17/_linux_KDE_wayland_chrome_IME</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2025/11/17/_linux_KDE_wayland_chrome_IME</guid>
            <pubDate>Mon, 17 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[本篇說明解決 chrome 在 v140 之後無法使用 fcitx5 輸入法問題]]></description>
            <content:encoded><![CDATA[<p>本篇說明解決 chrome 在 v140 之後無法使用 fcitx5 輸入法問題</p>
<p>只要補上 config 即可解決</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="解決方法一---手動編輯-config">解決方法一 - 手動編輯 config<a href="https://blog.owanio1992.cloudns.nz/blog/2025/11/17/_linux_KDE_wayland_chrome_IME#%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95%E4%B8%80---%E6%89%8B%E5%8B%95%E7%B7%A8%E8%BC%AF-config" class="hash-link" aria-label="Direct link to 解決方法一 - 手動編輯 config" title="Direct link to 解決方法一 - 手動編輯 config" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">Wayland</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InputMethod</span><span class="token punctuation" style="color:#393A34">[</span><span class="token variable" style="color:#36acaa">$e</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/usr/share/applications/org.fcitx.Fcitx5.desktop</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="解決方法二---透過-system-settings-自動新增-config">解決方法二 - 透過 system settings 自動新增 config<a href="https://blog.owanio1992.cloudns.nz/blog/2025/11/17/_linux_KDE_wayland_chrome_IME#%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95%E4%BA%8C---%E9%80%8F%E9%81%8E-system-settings-%E8%87%AA%E5%8B%95%E6%96%B0%E5%A2%9E-config" class="hash-link" aria-label="Direct link to 解決方法二 - 透過 system settings 自動新增 config" title="Direct link to 解決方法二 - 透過 system settings 自動新增 config" translate="no">​</a></h2>
<p>打開 system settings - Keyboard - Virtual Keyboard<br>
選擇 Fcitx5 (預設是 None) &gt; Apply<br>
<img decoding="async" loading="lazy" src="https://blog.owanio1992.cloudns.nz/assets/images/image-84c8a1fff7214fc46bfbd1723964da0e.png" width="963" height="675" class="img_ev3q"></p>
<hr>
<p>選擇其中一種方法<br>
重新登入後即可解決</p>]]></content:encoded>
            <category>KDE</category>
        </item>
        <item>
            <title><![CDATA[Sharing the Implementation of document system: outline]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2025/06/24/_share_implement_outline</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2025/06/24/_share_implement_outline</guid>
            <pubDate>Tue, 24 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[alt]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="alt" src="https://blog.owanio1992.cloudns.nz/assets/images/banner-698f39c41ee9a72b21bf3162c28d4783.png" width="1073" height="366" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/24/_share_implement_outline#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<p>不管是個人還是在團隊中<br>
文件都是相當重要的一環<br>
可以是筆記性質, 也能是 SOP, 也能是 share doc</p>
<p>而這些需求的背後, 就是要一個文件平台<br>
儘管現成有 google drive, Dropbox, OneDrive, notion, HackMD 這類平台可以使用<br>
但仍沒一套能夠滿足需求</p>
<p>我的需求如下</p>
<ul>
<li class="">support markdown (best is WYSIWYG, which stands for "What You See Is What You Get")</li>
<li class="">collaborative</li>
<li class="">permission control</li>
<li class="">Single Sign-On</li>
<li class="">self-host</li>
</ul>
<p>於是尋找一套能夠滿足需求的 tool 是我最重是的目標</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="history-of-chose-tool">history of chose tool<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/24/_share_implement_outline#history-of-chose-tool" class="hash-link" aria-label="Direct link to history of chose tool" title="Direct link to history of chose tool" translate="no">​</a></h2>
<p>在這之前, 我曾使用過 google drive, Dropbox, OneDrive, notion, HackMD<br>
以下稍微說明我不選擇的理由</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hackmd">HackMD<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/24/_share_implement_outline#hackmd" class="hash-link" aria-label="Direct link to HackMD" title="Direct link to HackMD" translate="no">​</a></h3>
<p>HackMD 雖然很知名, 其也有 open-source 方案 (<a href="https://github.com/hedgedoc/hedgedoc" target="_blank" rel="noopener noreferrer" class="">hedgedoc</a>,<a href="https://github.com/hackmdio/codimd" target="_blank" rel="noopener noreferrer" class="">CodiMD</a>)<br>
我在之前是使用 hedgedoc, hedgedoc 跟 CodiMD 之間是有點故事的<br>
關於 hedgedoc 跟 CodiMD: <a href="https://hedgedoc.org/history/" target="_blank" rel="noopener noreferrer" class="">https://hedgedoc.org/history/</a></p>
<p>在這幾年的追蹤下, 原本 HackMD 沒什麼在維護 CodiMD<br>
這也是我採用 hedgedoc 的理由<br>
結果最近反轉了, hedgedoc 2 的進度一直 delay,讓人很懷疑到底還有沒有在繼續開發<br>
反而 CodiMD 開始積極在更新<br>
真讓人摸不著頭緒</p>
<p>但一直讓我很不滿意的是左右兩欄的設計很占版面, 如果能支援 WYSIWYG 就好了<br>
這就是我很想再令尋他套的理由</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="dropbox">Dropbox<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/24/_share_implement_outline#dropbox" class="hash-link" aria-label="Direct link to Dropbox" title="Direct link to Dropbox" translate="no">​</a></h3>
<p>唯一有印象的就是當文件稍大, performance 就變很差<br>
且也不算支援 markdown, 雖然 Paper 能使用部份 markdown 語法</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="notion">notion<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/24/_share_implement_outline#notion" class="hash-link" aria-label="Direct link to notion" title="Direct link to notion" translate="no">​</a></h3>
<p>唯一挑替的就是要付錢了<br>
不然絕對是首選 knowledge system</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sharepoint">sharepoint<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/24/_share_implement_outline#sharepoint" class="hash-link" aria-label="Direct link to sharepoint" title="Direct link to sharepoint" translate="no">​</a></h3>
<p>商業方案 但其 office 超難用...<br>
反而 google doc 好用的多<br>
對 markdown 支援超差<br>
最要命的是搜尋功能超扯, 基本上根本找不到 ('keyword' 用 'key' 去搜尋會找不到... ,必須使用完整 string 'keyword')<br>
不知道為什麼微軟的系統搜尋都超爛... 像是 outlook 也是常常找不到東西<br>
還有些很奇怪的邏輯<br>
舉例用搜尋找到的文件千萬不能用編輯功能(sharepoint 會幫你另存新檔 WTF...)</p>
<p>是我接觸過 document 平台用的最不爽的</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="wiki">wiki<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/24/_share_implement_outline#wiki" class="hash-link" aria-label="Direct link to wiki" title="Direct link to wiki" translate="no">​</a></h3>
<p>wiki 有很多套<br>
然而大部分都不理想, 就不贅述了</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-outline">what is outline<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/24/_share_implement_outline#what-is-outline" class="hash-link" aria-label="Direct link to what is outline" title="Direct link to what is outline" translate="no">​</a></h2>
<p><a href="https://www.getoutline.com/" target="_blank" rel="noopener noreferrer" class="">official site</a></p>
<p>簡單來說 就是一個跟 notion 很像的系統<br>
對於我想要的功能都支援了</p>
<ul>
<li class="">support markdown (WYSIWYG mode)<br>
很大程度降低編寫文件的困擾</li>
<li class="">collaborative<br>
在 team 中使用最重要的功能</li>
<li class="">Single Sign-On<br>
管理帳號方便的多</li>
<li class="">permission control<br>
能夠避免權限外洩</li>
<li class="">self-host<br>
可以安全在 private network 使用</li>
<li class="">history</li>
<li class="">comment</li>
<li class="">support mermaid diagram</li>
</ul>
<p>至於實際還有那些功能<br>
可以先使用其 cloud 版本體驗看看</p>
<p>想要 self-host 可以參考 doc <a href="https://docs.getoutline.com/s/hosting" target="_blank" rel="noopener noreferrer" class="">hosting-outline</a><br>
不過請再注意功能上會有稍微差異 <a href="https://www.getoutline.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/24/_share_implement_outline#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>俗話說 萬丈高樓平地起<br>
document system 是我認為最重要的基本生產力工具<br>
一旦沒有好用的系統<br>
不只自身筆記難以紀錄(沒人可以記所有東西)<br>
也很難在團隊之間分享知識<br>
進而導致自己/團隊生產力低下</p>]]></content:encoded>
            <category>note</category>
        </item>
        <item>
            <title><![CDATA[Sharing the Implementation of the On-Call System]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2025/06/17/_implementation-of-the-on-call-system</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2025/06/17/_implementation-of-the-on-call-system</guid>
            <pubDate>Tue, 17 Jun 2025 01:17:00 GMT</pubDate>
            <description><![CDATA[On-Call System Implementation Banner]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="On-Call System Implementation Banner" src="https://blog.owanio1992.cloudns.nz/assets/images/banner-ae6b1ce7929019aba2632ee5943fdcad.png" width="512" height="512" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="prologue">Prologue<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/17/_implementation-of-the-on-call-system#prologue" class="hash-link" aria-label="Direct link to Prologue" title="Direct link to Prologue" translate="no">​</a></h2>
<p>這篇分享我在團隊內導入 On-Call System 的過程<br>
裡面包含我們的需求<br>
所以不是什麼 best practice<br>
不會適用每個團隊<br>
採用前請大家做好評估</p>
<hr>
<p>身為一個系統管理者<br>
為了要讓系統能不間斷的提供服務<br>
除了高可用性外<br>
有人 on-call 也是很重要的<br>
就算有 HA / auto-recovery<br>
然而再怎麼樣<br>
系統還是有可能有需要人介入的狀況<br>
因此有 monitor 就會有 alert 的需求<br>
但是光有 alert 其實還不夠<br>
我們可能會希望 alert 要能夠支援類似 phone-call<br>
還要根據 team member 排班有各自的通知對象</p>
<p>因此 on-call system 就有它的存在性</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="on-call-system-目標">On-Call System 目標<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/17/_implementation-of-the-on-call-system#on-call-system-%E7%9B%AE%E6%A8%99" class="hash-link" aria-label="Direct link to On-Call System 目標" title="Direct link to On-Call System 目標" translate="no">​</a></h2>
<p>下列出我們的需求</p>
<ul>
<li class="">接收 alert<br>
至少支援 webhook</li>
<li class="">發送 alert<br>
至少支援
<ul>
<li class="">call-out (phone-call)</li>
<li class="">webhook</li>
</ul>
</li>
<li class="">支援排班</li>
<li class="">提供 free tier<br>
因我們本來就有 on-call 工具，只是很陽春，所以希望在不增加 cost 情況下<br>
加強我們的 call-out</li>
<li class="">Alert Suppression<br>
避免被 alert 轟炸</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="on-call-system-comparison">On-Call System Comparison<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/17/_implementation-of-the-on-call-system#on-call-system-comparison" class="hash-link" aria-label="Direct link to On-Call System Comparison" title="Direct link to On-Call System Comparison" translate="no">​</a></h2>
<p>在經過 Google Search 後<br>
列出當時幾個系統的評估<br>
但有可能有錯/改變<br>
各位務必再評估過</p>
<p><strong>last update: 2025/06/17</strong></p>
<ul>
<li class="">
<p><a href="https://alertops.com/" target="_blank" rel="noopener noreferrer" class="">alertops</a><br>
free tier 5 users<br>
難以理解,不會用<br>
沒有 per-service integration<br>
要等試用期結束才能切免費<br>
app 功能普通 沒有 ack 機制</p>
</li>
<li class="">
<p><a href="https://www.pagerduty.com/" target="_blank" rel="noopener noreferrer" class="">pagerduty</a><br>
free tier 5 users<br>
Integrations 可以整合 Outbound Integration (e.g., trigger webhook)<br>
free 可以用 schedule override<br>
but On-call Schedules 只能 1 個，因此無法分 primary/secondary member</p>
</li>
<li class="">
<p><a href="https://taskcallapp.com/pricing" target="_blank" rel="noopener noreferrer" class="">taskcall</a><br>
free tier 5 users<br>
沒辦法匯出 schedules<br>
Web UI 有點慢</p>
</li>
<li class="">
<p><a href="https://www.atlassian.com/software/opsgenie/pricing" target="_blank" rel="noopener noreferrer" class="">atlassian opsgenie</a><br>
free tier 5 users<br>
跟 zenduty 比限制較少<br>
API 有 Request Limits 怕 alert 發不出來<br>
free tier Routing Rules 沒辦法分 service<br>
多 incident per service 不知如何應用</p>
</li>
<li class="">
<p><a href="https://grafana.com/products/cloud/oncall/" target="_blank" rel="noopener noreferrer" class="">grafana OnCall</a><br>
a part of Grafana Cloud IRM<br>
free tier 3 users<br>
整合 Grafana 生態系，方便現有 Grafana 用戶</p>
</li>
<li class="">
<p><a href="https://zenduty.com/" target="_blank" rel="noopener noreferrer" class="">zenduty</a><br>
free tier 5 users<br>
override schedule 須付費才能使用<br>
換班較麻煩<br>
Android/iOS app 好用，會發 alert (像國家警告系統那樣，有 phone-call 效果，而不是單純的訊息通知)<br>
web, app 反應稍慢</p>
</li>
<li class="">
<p><a href="https://www.xmatters.com/" target="_blank" rel="noopener noreferrer" class="">xmatters</a><br>
free tier 10 users<br>
region 有亞太 (反應比較快)<br>
Outbound Integration 很現代感<br>
有點小複雜,需要時間學習</p>
</li>
<li class="">
<p><a href="https://www.squadcast.com/" target="_blank" rel="noopener noreferrer" class="">squadcast</a><br>
free tier 5 users<br>
Android/iOS app 好用，會發 alert<br>
免費有 override schedule<br>
也有 Analytics<br>
web, app 反應快上不少<br>
跟 zenduty 比感覺更好用</p>
</li>
</ul>
<p><strong>評估結果</strong><br>
依功能評估：xmatters &gt; opsgenie &gt; squadcast &gt; zenduty<br>
依實用性評估：squadcast &gt; zenduty &gt; xmatters &gt; opsgenie</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-chose-squadcast">why chose squadcast<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/17/_implementation-of-the-on-call-system#why-chose-squadcast" class="hash-link" aria-label="Direct link to why chose squadcast" title="Direct link to why chose squadcast" translate="no">​</a></h2>
<p>最後我們採用了 squadcast 來增強我們既有的 on-call system</p>
<p>以下列出採用原因</p>
<ul>
<li class="">free tier 5 user<br>
對於 small team 的我們夠用</li>
<li class="">Push Notifications is Unlimited<br>
不怕頂到 limit 變成通知發不出來</li>
<li class="">phone call 用完就沒了<br>
跟其他家不同 其他都是 Monthy limit<br>
不過這點不影響, 因為其他家 free-tier quoda 也不多<br>
都是不夠用的情況<br>
這部份仰賴我們既有的 call out system</li>
<li class="">Native Integrations with Alert Sources &amp; Custom Integrations via API<br>
除了原生整合 alert source 外<br>
也能 call API<br>
讓系統不受限制</li>
<li class="">On-Call Schedules<br>
最重要的  就是排班機制<br>
他能夠設定多個 Schedules<br>
我們設定了 primary &amp; backup<br>
如果 primary 意外沒收到 alert, backup 可以處理</li>
<li class="">Schedule Overrides<br>
如果 on-call member 有事 能夠 Overrides schedules 讓其他 member 暫時 on-call<br>
而不需要重新調整排班<br>
舉例來說 member 輪班 interval 是一週<br>
Schedules 會設定為 routing 的狀態</li>
</ul>
<!-- -->
<p>而有人請假的話 就可以使用 Overrides 功能<br>
而不用修改 Schedule</p>
<ul>
<li class="">Escalation Policies<br>
因為 squadcast 收到 alert 時會有幾個階段</li>
</ul>
<!-- -->
<p>前面提到 Schedules 我們設定了 primary/backup<br>
如果 primary member 沒接到 alert<br>
這裡可以設定時間經過 N 分鐘後, 如果沒有人 acknowledge 的話<br>
就通知 backup member<br>
這也是當初要找 on-call system 最想要的功能</p>
<ul>
<li class="">
<p>Alert Deduplication<br>
當 alert 發生時 相關的 service 受影響的話可能也會發 alert<br>
Dedup 可以避免 oncall member 一直收到 notify 而無法專心處理 alert</p>
</li>
<li class="">
<p>API Request Unlimited Limits<br>
如果有 limit 的話會擔心 alert 送不出來<br>
這點也是加分</p>
</li>
<li class="">
<p>Mobile App (Android &amp; iOS)<br>
他們有自己的 APP<br>
APP 能夠設定 "Bypass Do Not Disturb"<br>
避免因手機設定沒收到 alert<br>
其效果就像國家警報系統  極盡可能讓你避免 alert 未收到<br>
幾乎可以直接取代 phone-call</p>
</li>
<li class="">
<p>能夠整合 Slack</p>
</li>
<li class="">
<p>能夠設定多個 Services<br>
不同 service 會有不同的 on-call member<br>
也能接各自的 alert source &amp; target (比如說不同 slack channel)</p>
</li>
<li class="">
<p>MTTA / MTTR Performance Report &amp; User and Incident Based Analytics &amp; Organization and Team Based Analytics<br>
老闆最愛看</p>
</li>
</ul>
<hr>
<p>以上就是我們嘗試導入 on-call system 的原因<br>
另外 squadcast 不只功能符合我們需求<br>
其速度也很優<br>
app notify 會比 phone call 還快<br>
這點個人超驚訝</p>
<p>最後再次強調  這不是業配 單純導入心得分享<br>
請大家再根據 team 需求選擇對應的系統</p>]]></content:encoded>
            <category>on-call</category>
        </item>
        <item>
            <title><![CDATA[vagrant introduction]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2025/06/12/_vagrant-introduction</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2025/06/12/_vagrant-introduction</guid>
            <pubDate>Thu, 12 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[official site//developer.hashicorp.com/vagrant]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://blog.owanio1992.cloudns.nz/assets/images/banner-6694c543a12a0e7920263e379e627bad.jpeg" width="1024" height="695" class="img_ev3q"></p>
<p>official site: <a href="https://developer.hashicorp.com/vagrant" target="_blank" rel="noopener noreferrer" class="">https://developer.hashicorp.com/vagrant</a></p>
<p>Vagrant 是一個強大的開源工具，用於建立和管理輕量級、可攜式且可重複使用的開發環境。它透過自動化虛擬機的配置，讓開發者能夠在統一的環境中工作，無論團隊成員使用何種作業系統。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="為什麼選擇-vagrant">為什麼選擇 Vagrant？<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/12/_vagrant-introduction#%E7%82%BA%E4%BB%80%E9%BA%BC%E9%81%B8%E6%93%87-vagrant" class="hash-link" aria-label="Direct link to 為什麼選擇 Vagrant？" title="Direct link to 為什麼選擇 Vagrant？" translate="no">​</a></h3>
<p>在軟體開發中，環境一致性是提高效率和減少「在我的機器上可以跑」問題的關鍵。Vagrant 解決了以下痛點：</p>
<ul>
<li class=""><strong>環境差異：</strong> 告別不同作業系統、函式庫版本或配置差異導致的問題。</li>
<li class=""><strong>快速設定：</strong> 新團隊成員或新專案啟動時，不再需要耗費數小時甚至數天來設定開發環境。</li>
<li class=""><strong>可重複性：</strong> 確保每次建立的環境都完全相同，有利於測試和部署。</li>
<li class=""><strong>資源隔離：</strong> 將開發環境與主機系統隔離，避免軟體衝突。</li>
<li class=""><strong>版本控制：</strong> Vagrantfile 可以像程式碼一樣被版本控制，方便追蹤環境變更。</li>
</ul>
<p>對於 DevOps 和 SRE 專業人員來說，Vagrant 更是不可或缺的工具，它能幫助快速建立、測試和銷毀基礎設施環境，加速開發流程。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="核心概念">核心概念<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/12/_vagrant-introduction#%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5" class="hash-link" aria-label="Direct link to 核心概念" title="Direct link to 核心概念" translate="no">​</a></h3>
<p>在深入使用 Vagrant 之前，了解幾個核心概念至關重要：</p>
<ul>
<li class=""><strong>Box (基礎映像檔):</strong> Vagrant 的基礎，類似於虛擬機的模板或快照。它是一個預先安裝好作業系統的虛擬機映像檔，Vagrant 會基於這個 Box 建立新的虛擬機。這比從 ISO 安裝作業系統快得多。</li>
<li class=""><strong>Provider (虛擬化供應商):</strong> 執行虛擬機的底層技術。Vagrant 預設支援 VirtualBox，但也支援 VMware、Hyper-V、Docker 等。雖然支援多種供應商，但為了避免相容性問題和簡化設定，建議初學者優先使用 VirtualBox。</li>
<li class=""><strong>Vagrantfile (配置檔):</strong> Vagrant 的核心，一個 Ruby 語言撰寫的配置檔。它定義了虛擬機的各種設定，包括使用的 Box、網路配置、共享資料夾、資源分配以及自動化腳本（Provisioners）。</li>
<li class=""><strong>Provisioner (自動化配置工具):</strong> 用於在虛擬機啟動後自動安裝軟體、配置系統或執行腳本。Vagrant 支援 Shell Script、Ansible、Chef、Puppet 等多種 Provisioner，確保開發環境的自動化配置。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="快速入門">快速入門<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/12/_vagrant-introduction#%E5%BF%AB%E9%80%9F%E5%85%A5%E9%96%80" class="hash-link" aria-label="Direct link to 快速入門" title="Direct link to 快速入門" translate="no">​</a></h2>
<p>以下是使用 Vagrant 建立第一個虛擬機的基本步驟：</p>
<ol>
<li class="">
<p><strong>安裝 Vagrant:</strong> 從 <a href="https://developer.hashicorp.com/vagrant/downloads" target="_blank" rel="noopener noreferrer" class="">Vagrant 官方網站</a> 下載並安裝適合您作業系統的版本。</p>
</li>
<li class="">
<p><strong>安裝 VirtualBox:</strong> Vagrant 預設使用 VirtualBox 作為虛擬化供應商。請從 <a href="https://www.virtualbox.org/" target="_blank" rel="noopener noreferrer" class="">VirtualBox 官方網站</a> 下載並安裝。</p>
</li>
<li class="">
<p><strong>建立 Vagrantfile:</strong> 在您專案的根目錄下建立一個名為 <code>Vagrantfile</code> 的檔案。這是定義虛擬機配置的地方。</p>
<div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # 指定使用的 Box，這裡使用 Ubuntu 20.04 LTS (Bionic Beaver)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "hashicorp/bionic64"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # 配置虛擬機的網路，這裡設定一個私有網路，IP 為 192.168.56.101</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # 這樣可以從主機直接透過 SSH 連線到虛擬機</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.network "private_network", ip: "192.168.56.101"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # 配置虛擬機的資源，例如 CPU 和記憶體</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = 2048 # 2GB 記憶體</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.cpus = 2      # 2 個 CPU 核心</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # 使用 Shell Provisioner 在虛擬機啟動後執行命令</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # 這裡示範更新套件列表並安裝 Nginx</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    sudo apt-get update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    sudo apt-get install -y nginx</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    echo "Hello from Vagrant!" | sudo tee /var/www/html/index.nginx-debian.html</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>啟動虛擬機:</strong> 在 <code>Vagrantfile</code> 所在的目錄執行 <code>vagrant up</code> 命令。Vagrant 會自動下載 Box（如果尚未下載）、建立虛擬機並執行 Provisioner。</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vagrant up</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>連接虛擬機:</strong> 虛擬機啟動後，您可以使用 <code>vagrant ssh</code> 命令透過 SSH 連接到虛擬機。</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vagrant </span><span class="token function" style="color:#d73a49">ssh</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>清理環境:</strong> 當您不再需要虛擬機時，可以使用 <code>vagrant destroy -f</code> 命令銷毀虛擬機及其所有相關檔案。</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vagrant destroy </span><span class="token parameter variable" style="color:#36acaa">-f</span><br></span></code></pre></div></div>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="進階技巧">進階技巧<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/12/_vagrant-introduction#%E9%80%B2%E9%9A%8E%E6%8A%80%E5%B7%A7" class="hash-link" aria-label="Direct link to 進階技巧" title="Direct link to 進階技巧" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-建立自訂-box">1. 建立自訂 Box<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/12/_vagrant-introduction#1-%E5%BB%BA%E7%AB%8B%E8%87%AA%E8%A8%82-box" class="hash-link" aria-label="Direct link to 1. 建立自訂 Box" title="Direct link to 1. 建立自訂 Box" translate="no">​</a></h3>
<p>雖然 Vagrant Cloud 上有許多現成的 Box，但在實際開發中，您可能需要一個預先安裝好特定軟體（如 Python、Node.js、資料庫等）的自訂 Box。這可以大幅縮短每次 <code>vagrant up</code> 的時間。</p>
<p><strong>步驟概覽：</strong></p>
<ol>
<li class="">
<p>在 VirtualBox 中手動建立一個虛擬機，安裝作業系統和所有必要的軟體。</p>
</li>
<li class="">
<p>清理虛擬機（例如，移除歷史記錄、壓縮磁碟）。</p>
</li>
<li class="">
<p>使用 <code>vagrant package</code> 命令將虛擬機打包成一個 <code>.box</code> 檔案。</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vagrant package </span><span class="token parameter variable" style="color:#36acaa">--base</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">VirtualBox VM Name</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--output</span><span class="token plain"> custom.box</span><br></span></code></pre></div></div>
</li>
<li class="">
<p>將自訂 Box 添加到 Vagrant。</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vagrant box </span><span class="token function" style="color:#d73a49">add</span><span class="token plain"> custom-box custom.box</span><br></span></code></pre></div></div>
</li>
<li class="">
<p>在 Vagrantfile 中使用您的自訂 Box。</p>
<div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">config.vm.box = "custom-box"</span><br></span></code></pre></div></div>
</li>
</ol>
<p>詳細步驟請參考 <a href="https://developer.hashicorp.com/vagrant/docs/providers/virtualbox/boxes" target="_blank" rel="noopener noreferrer" class="">Vagrant 官方文件：建立基礎 Box</a>。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-網路配置">2. 網路配置<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/12/_vagrant-introduction#2-%E7%B6%B2%E8%B7%AF%E9%85%8D%E7%BD%AE" class="hash-link" aria-label="Direct link to 2. 網路配置" title="Direct link to 2. 網路配置" translate="no">​</a></h3>
<p>Vagrant 提供了多種網路配置選項，以滿足不同的需求：</p>
<ul>
<li class="">
<p><strong>NAT (預設):</strong> 虛擬機可以訪問外部網路，但外部網路無法直接訪問虛擬機。適合簡單的開發環境。</p>
</li>
<li class="">
<p><strong>Private Network (主機專用網路):</strong> 建立一個僅限主機和虛擬機之間通訊的網路。常用於設定固定 IP，方便主機上的其他工具（如 IDE、資料庫客戶端）連接虛擬機。</p>
<div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">config.vm.network "private_network", ip: "192.168.56.101"</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>Public Network (橋接網路):</strong> 讓虛擬機像獨立的實體機器一樣連接到您的區域網路，擁有自己的 IP 位址。適合需要從外部網路訪問虛擬機的場景。</p>
<div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">config.vm.network "public_network"</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>Port Forwarding (連接埠轉發):</strong> 將主機上的特定連接埠轉發到虛擬機上的連接埠，允許從主機或外部網路訪問虛擬機上運行的服務。</p>
<div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">config.vm.network "forwarded_port", guest: 80, host: 8080 # 將虛擬機的 80 埠轉發到主機的 8080 埠</span><br></span></code></pre></div></div>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-管理多個虛擬機-multi-machine">3. 管理多個虛擬機 (Multi-Machine)<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/12/_vagrant-introduction#3-%E7%AE%A1%E7%90%86%E5%A4%9A%E5%80%8B%E8%99%9B%E6%93%AC%E6%A9%9F-multi-machine" class="hash-link" aria-label="Direct link to 3. 管理多個虛擬機 (Multi-Machine)" title="Direct link to 3. 管理多個虛擬機 (Multi-Machine)" translate="no">​</a></h3>
<p>Vagrant 的真正價值在於能夠在一個 Vagrantfile 中定義和管理多個虛擬機，這對於模擬分散式系統、叢集或多層應用程式架構非常有用。</p>
<div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$num_vms = 3 # 定義要建立的虛擬機數量</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$vm_cpus = 2 # 每個虛擬機的 CPU 核心數</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$vm_memory = 2048 # 每個虛擬機的記憶體大小 (MB)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # 設定所有虛擬機共用的 Box</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "hashicorp/bionic64" # 或者使用您自訂的 "custom-box"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # 設定 SSH 登入憑證 (如果 Box 需要)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.ssh.username = "vagrant" # 預設的 Vagrant Box 通常使用 'vagrant'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.ssh.password = "vagrant" # 預設的 Vagrant Box 通常使用 'vagrant'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # 配置 VirtualBox 供應商的通用設定</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.linked_clone = true # 啟用連結複製，節省磁碟空間和加速建立</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.gui = false         # 不顯示 VirtualBox GUI</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # 使用迴圈建立多個虛擬機</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  (1..$num_vms).each do |i|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    config.vm.define "node#{i}" do |node|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      node.vm.hostname = "node#{i}.example.com" # 設定虛擬機的主機名稱</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      node.vm.network "private_network", ip: "192.168.56.#{100 + i}" # 設定私有網路 IP</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      # 為每個虛擬機配置資源</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      node.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        v.cpus = $vm_cpus</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        v.memory = $vm_memory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      # 為每個虛擬機執行 Provisioner</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      node.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        echo "Setting up node#{i}..."</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        # 在這裡添加每個節點特有的配置腳本</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        # 例如：安裝 Docker, Kubernetes 元件等</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-連結複製-linked-clones">4. 連結複製 (Linked Clones)<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/12/_vagrant-introduction#4-%E9%80%A3%E7%B5%90%E8%A4%87%E8%A3%BD-linked-clones" class="hash-link" aria-label="Direct link to 4. 連結複製 (Linked Clones)" title="Direct link to 4. 連結複製 (Linked Clones)" translate="no">​</a></h3>
<p>當您需要建立多個虛擬機時，使用連結複製（Linked Clones）可以顯著節省磁碟空間和加速虛擬機的建立過程。連結複製的虛擬機共享一個基礎映像檔，只儲存與基礎映像檔不同的部分。</p>
<p>在 <code>Vagrantfile</code> 中啟用連結複製非常簡單：</p>
<div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  v.linked_clone = true</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="總結">總結<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/12/_vagrant-introduction#%E7%B8%BD%E7%B5%90" class="hash-link" aria-label="Direct link to 總結" title="Direct link to 總結" translate="no">​</a></h2>
<p>Vagrant 是一個強大的工具，能夠簡化開發環境的建立和管理，提高團隊協作效率。透過理解其核心概念並善用進階功能，您可以為任何專案建立穩定、可重複且高效的開發環境。</p>
<p>希望這篇文章能幫助您更好地理解和使用 Vagrant！</p>]]></content:encoded>
            <category>Vagrant</category>
        </item>
        <item>
            <title><![CDATA[hugo Host on GitHub Pages]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_hugo-host-on-GitHub-pages</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_hugo-host-on-GitHub-pages</guid>
            <pubDate>Wed, 11 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[alt]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="alt" src="https://blog.owanio1992.cloudns.nz/assets/images/banner-6467bc52d888fd28a07fde01737e4c56.png" width="512" height="512" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_hugo-host-on-GitHub-pages#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<p>hugo 是一個 static site generator<br>
除了找 <a href="https://free-for.dev/#/?id=web-hosting" target="_blank" rel="noopener noreferrer" class="">web server</a> 外<br>
也可以使用 github page 來 host</p>
<p>一般的 web server 都會提供 php,DB 等來讓 web 能進行動態功能<br>
但是缺點是需要額外的 knowhow 且有更新/漏洞等問題<br>
隔壁的 wordpress 就是</p>
<p>因為 hugo 是產生 static site 可以說相對單純容易維護, 不過當然也會有功能較差的問題<br>
因此 static site 也是有一部份支持者<br>
也越來越多網站採用此設計</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="github-page">github page<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_hugo-host-on-GitHub-pages#github-page" class="hash-link" aria-label="Direct link to github page" title="Direct link to github page" translate="no">​</a></h2>
<p>由 github 提供的服務<br>
讓大家能夠放上 static site<br>
不僅速度快又不用錢<br>
又能配合將 source code 放在 github 中做儲存/版控<br>
是個工程師很愛的地方, 本站也是採用 github page 做 host</p>
<p>開始前<br>
github page 讀取 static content 有兩種方式</p>
<ul>
<li class="">repo</li>
<li class="">artifact</li>
</ul>
<p>採用 repo 方式會相對簡單, 但既然身為一個工程師<br>
CICD 的玩法才是有趣的目標🤓<br>
於是這邊採用 artifact(github action) 幫忙執行 build/upload artifact/deploy page</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="setup-cicd">setup cicd<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_hugo-host-on-GitHub-pages#setup-cicd" class="hash-link" aria-label="Direct link to setup cicd" title="Direct link to setup cicd" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="setup-github-runner">setup github runner<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_hugo-host-on-GitHub-pages#setup-github-runner" class="hash-link" aria-label="Direct link to setup github runner" title="Direct link to setup github runner" translate="no">​</a></h3>
<p>github runner 就是在執行 workflow 的 worker<br>
可以使用 github 的免費額度<br>
或是使用 self-host runner<br>
因為我自己有台 VPS, 所以採用 self-host runner<br>
另外因為 self-host runner 是採用 per repo<br>
建議建立一個 organization, 在這可以建立 runner group,就可以一個 self-host runner share 給多個 repo 使用<br>
<img decoding="async" loading="lazy" alt="alt" src="https://blog.owanio1992.cloudns.nz/assets/images/runner-ddc05cdb7367497b2b2d41971c9c1d31.png" width="1407" height="726" class="img_ev3q"></p>
<p>self-host runner 再使用 systemd 帶起<br>
就可以不必每次開關機 VM 都還要手動帶起了</p>
<p>systemd config</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># /etc/systemd/system/actions-runner.service</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">Unit</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">Description</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">GitHub Actions Runner</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">After</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">network.target syslog.target</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">Service</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">ExecStart</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">bash run.sh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">WorkingDirectory</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/home/github-runner/actions-runner</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">User</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">github-runner</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">Group</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">github-runner</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">Restart</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">always</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">RestartSec</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">10s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">StandardOutput</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">journal</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">StandardError</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">journal</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">SyslogIdentifier</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">actions-runner</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">KillMode</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">process</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">TimeoutStopSec</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">5min </span><span class="token comment" style="color:#999988;font-style:italic"># Give it time to finish a job or shut down gracefully</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">Install</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">WantedBy</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">multi-user.target</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="setup-repo">setup repo<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_hugo-host-on-GitHub-pages#setup-repo" class="hash-link" aria-label="Direct link to setup repo" title="Direct link to setup repo" translate="no">​</a></h3>
<p>因為採用 cicd 方式<br>
我們的 repo 不保留 public folder (generate by hugo)<br>
此 folder 為最後 hugo 產生的 static content, 這個要交由 github runner 產生</p>
<p>在 .gitignore 加上 <code>public/</code>  解決
<a href="https://github.com/owan-io1992/blog/blob/main/.gitignore" target="_blank" rel="noopener noreferrer" class="">.gitignore</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="setup-github-workflow">setup github workflow<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_hugo-host-on-GitHub-pages#setup-github-workflow" class="hash-link" aria-label="Direct link to setup github workflow" title="Direct link to setup github workflow" translate="no">​</a></h3>
<p>在這一步我們要告訴 gitlab runner 要做什麼<br>
請參考 <a href="https://github.com/owan-io1992/blog/blob/main/.github/workflows/hugo-gh-pages.yml" target="_blank" rel="noopener noreferrer" class="">workflow</a></p>
<p>簡單來說就是</p>
<ul>
<li class="">checkout main branch (github page limit)</li>
<li class="">hugo build static file</li>
<li class="">upload artifact</li>
<li class="">deploy artifact to page</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="setup-page">setup page<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_hugo-host-on-GitHub-pages#setup-page" class="hash-link" aria-label="Direct link to setup page" title="Direct link to setup page" translate="no">​</a></h3>
<p>再接下來要開啟 page 功能<br>
到 settings/pages<br>
設定 source 為 githab action
<img decoding="async" loading="lazy" src="https://blog.owanio1992.cloudns.nz/assets/images/page-496c7c489bd20f530427943968b5578a.png" width="1325" height="616" class="img_ev3q"></p>
<p>這邊建議再申請一個 free dns 設定 Custom domain<br>
因為 page default 會給 <code>&lt;username&gt;.github.io/&lt;repo name&gt;</code><br>
在 uri 部份會有個 repo name 為 prefix<br>
在部份 search engine 最佳化會碰上些問題(之後再細說)</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="push-code">push code<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_hugo-host-on-GitHub-pages#push-code" class="hash-link" aria-label="Direct link to push code" title="Direct link to push code" translate="no">​</a></h3>
<p>最後只要 push code 到 main branch<br>
觀察看看 action 狀況即可
<img decoding="async" loading="lazy" alt="alt text" src="https://blog.owanio1992.cloudns.nz/assets/images/action-1d2e440a5e7e684d1a331835f6af484b.png" width="1147" height="605" class="img_ev3q"></p>]]></content:encoded>
            <category>hugo</category>
        </item>
        <item>
            <title><![CDATA[static site generator]]></title>
            <link>https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_static-site-generator</link>
            <guid>https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_static-site-generator</guid>
            <pubDate>Wed, 11 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[alt]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="alt" src="https://blog.owanio1992.cloudns.nz/assets/images/banner-243ad5b5992d5bf7c1903c9ffa869fbf.png" width="512" height="512" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_static-site-generator#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<p>static site 表示這個 site 單純依靠 HTML,CSS 和 JavaScript 組成<br>
server 只負責存放(host) 這些內容(file)<br>
browser(client) 進行渲染(render)<br>
server 不會進行任何動態行為, 比如說存取 DB</p>
<p><strong>靜態網站的優點：</strong>
速度快： 因為內容是預先準備好的，伺服器可以直接傳送，載入速度通常非常快。<br>
安全性高： 由於沒有複雜的後端程式碼和資料庫直接暴露給用戶請求，被攻擊的風險較低。<br>
成本低： 靜態檔案對伺服器的資源要求不高，所以託管成本通常更便宜，甚至有很多免費的託管服務（如 GitHub Pages, Netlify, Vercel）。<br>
可靠性高/易於擴展： 由於結構簡單，伺服器壓力小，更容易應對大量訪問，並且可以輕鬆地使用 CDN（內容傳遞網路）來加速全球訪問。<br>
開發和維護相對簡單（對於某些類型的網站）： 對於內容不常變動的網站來說，開發和維護可能更直接。<br>
<strong>靜態網站的缺點/限制：</strong>
互動性有限： 如果需要複雜的用戶互動（如用戶登入、留言板、線上購物等需要後端處理的功能），純靜態網站本身無法實現，需要依賴第三方服務或 JavaScript 來模擬。<br>
內容更新不便（傳統方式）： 如果沒有使用現代化的工具，每次更新內容可能都需要手動修改 HTML 檔案，然後重新上傳，對於非技術人員來說比較麻煩。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="評估系統-hugo--docusaurus">評估系統 hugo &amp; Docusaurus<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_static-site-generator#%E8%A9%95%E4%BC%B0%E7%B3%BB%E7%B5%B1-hugo--docusaurus" class="hash-link" aria-label="Direct link to 評估系統 hugo &amp; Docusaurus" title="Direct link to 評估系統 hugo &amp; Docusaurus" translate="no">​</a></h2>
<p>兩者都是使用 markdown 書寫</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="docusaurus">Docusaurus<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_static-site-generator#docusaurus" class="hash-link" aria-label="Direct link to Docusaurus" title="Direct link to Docusaurus" translate="no">​</a></h3>
<p><a href="https://docusaurus.io/" target="_blank" rel="noopener noreferrer" class="">https://docusaurus.io</a><br>
Docusaurus 產生網站速度較慢 (but who care)<br>
但上手難度較高, 建議需要基本 js/ts 能力, plugin/theme 支援較少</p>
<p>支援 git 版控  比較適合 doc 類網站</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hugo">hugo<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_static-site-generator#hugo" class="hash-link" aria-label="Direct link to hugo" title="Direct link to hugo" translate="no">​</a></h3>
<p><a href="https://gohugo.io/" target="_blank" rel="noopener noreferrer" class="">https://gohugo.io</a><br>
較單純 基本 toml/markdown knowledge 即可, theme 非常多<br>
較適合做網站/blog</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">conclusion<a href="https://blog.owanio1992.cloudns.nz/blog/2025/06/11/_static-site-generator#conclusion" class="hash-link" aria-label="Direct link to conclusion" title="Direct link to conclusion" translate="no">​</a></h2>
<p>因為我比較需要 blog 形式<br>
hugo 的 theme 給我較快速上手的能力<br>
另外社群擴充功能也比較豐富<br>
與 wordpress 相比
hugo 的輕量化也讓效率大幅提昇<br>
wordpress  就是給人一種沈重的感覺<br>
於是採用 hugo 作為我的 static blog system</p>]]></content:encoded>
            <category>hugo</category>
            <category>Docusaurus</category>
        </item>
    </channel>
</rss>