<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Software on omegaatt</title>
    <link>https://www.omegaatt.com/tags/software/</link>
    <description>Recent content in Software on omegaatt</description>
    <generator>Hugo -- 0.147.7</generator>
    <language>zh-TW</language>
    <managingEditor>raiven.kao@gmail.com (Raiven Kao)</managingEditor>
    <webMaster>raiven.kao@gmail.com (Raiven Kao)</webMaster>
    <copyright>Raiven Kao 2020 - 2026</copyright>
    <lastBuildDate>Thu, 02 Jan 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.omegaatt.com/tags/software/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>使用 Templater 來提昇 Obsidian 的生產力</title>
      <link>https://www.omegaatt.com/blogs/develop/2025/use_obsidian_templater_to_get_more_productivity/</link>
      <pubDate>Thu, 02 Jan 2025 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2025/use_obsidian_templater_to_get_more_productivity/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;這篇文章不涉及 &lt;a href=&#34;https://obsidian.md/&#34;&gt;Obsidian&lt;/a&gt; 完整使用說明以及 &lt;a href=&#34;https://silentvoid13.github.io/Templater/&#34;&gt;Templater&lt;/a&gt; 完整使用教學，僅以一個 use case 來展現如何使用 Templater 來提昇 Obsidian 的使用效率。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言：&lt;/h2&gt;
&lt;p&gt;工作日誌，是一個甜蜜的負擔，有些人是因為公司要求，開始寫工作日誌，逐漸流於形式。&lt;/p&gt;
&lt;p&gt;最初我也是因為工作需要「彙報」，才開始寫工作日誌。直到開始跑 scrum，開始明白 standup meeting 的意義，開始在意如何讓 stackholder 放心把事情交給我做，於是&lt;/p&gt;
&lt;p&gt;參考了《&lt;a href=&#34;https://www.books.com.tw/products/0010785434&#34;&gt;SCRUM：用一半的時間做兩倍的事&lt;/a&gt;》以及實際執行的經驗，以下是我認為良好的彙報需要注意的關鍵因素：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;昨天的進度：簡要說明昨天完成的具體工作，重點在成果而非過程。&lt;/li&gt;
&lt;li&gt;今天的計劃：說明今天的工作重點，聚焦在需要達成的具體目標。如果是要跨超過一天的工作，也需要設定一個預計能完成的時間。&lt;/li&gt;
&lt;li&gt;遇到的障礙：明確指出當前的問題或挑戰，並說明需要的幫助。當然也沒有必要什麼事都等到 standup meeting 才提出問題，有障礙應當即時反應。&lt;/li&gt;
&lt;li&gt;與其他團隊或成員的依賴：說明需要其他人或團隊支持的地方，確保協作順暢，例如後端需要寄送的 email 內容，需要前端協助產生 html 等等。&lt;/li&gt;
&lt;li&gt;以終為始、以成果為導向：聚焦於交付成果的進展，而非細節，例如：目前已完成 80% 的登入模組開發，預計明天可以驗收。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;詳細的舉例不是這篇文章的重點，有空可以再寫成其他文章 D:&lt;/p&gt;
&lt;p&gt;上述幾個要點，在工作日誌中被我濃縮成 markdown 的格式：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;XXXX-XX-XX

昨日：
- 昨日1
- 昨日2
瓶頸：
- 瓶頸
今日：
- 今日1
- 今日2
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;obsidian&#34;&gt;Obsidian&lt;/h2&gt;
&lt;p&gt;高中時接觸了 markdown，大學接觸了 Hackpad，畢業後延續這個習慣，使用 Hackmd 來管理自己的工作日誌。&lt;/p&gt;
&lt;p&gt;隨著時間的增長，開始發現 Hackmd 無論是官方 hosting 的免費版與企業版，或是 self-hosted 的 CodeMD，在單一大檔案編輯文件時，都會有明顯的延遲。若我將工作日誌拆成多個月份，又不好管理。&lt;/p&gt;
&lt;p&gt;在 2023 年轉換工作之際，開始尋找其他 markdown 文字編輯器。&lt;/p&gt;</description>
    </item>
    <item>
      <title>開源軟體的雙面刃：免費背後的隱藏成本</title>
      <link>https://www.omegaatt.com/blogs/develop/2024/the_double_edged_sword_of_open_source_software.md/</link>
      <pubDate>Fri, 01 Nov 2024 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2024/the_double_edged_sword_of_open_source_software.md/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;setup-0&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/the_double_edged_sword_of_open_source_software.md/images/20241102_142051.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;每日例行地開啟最愛的 Save for later，準備觀看有哪些部落格更新、產品釋出新版本時，一行醒目的提示告訴你「&lt;a href=&#34;https://blog.omnivore.app/p/details-on-omnivore-shutting-down&#34;&gt;我們即將關閉伺服器&lt;/a&gt;」。&lt;/p&gt;
&lt;p&gt;錯愕，這是 2024 年十月底每一位 Omnivore App 難民的心情。&lt;/p&gt;
&lt;h2 id=&#34;一開源軟體的普及與迷思&#34;&gt;一、開源軟體的普及與迷思&lt;/h2&gt;
&lt;p&gt;說到開源軟體，不外乎就是 free 或是 freedom 的軟體，可以說是免費的軟體，也可以說是自由的軟體。&lt;/p&gt;
&lt;p&gt;早期的 &lt;a href=&#34;https://en.wikipedia.org/wiki/LAMP_(software_bundle)&#34;&gt;LAMP Stack&lt;/a&gt; 相較於 Microsoft 的 Windows Server、IBM 或是 Oracle 付費的服務，每個組件都是免費的，廣泛受到 Geek 到大中小型企業的使用&lt;/p&gt;
&lt;p&gt;同時，開源軟體顧名思義是開放原始碼，在授權許可下可以自由使用、修改、分享，許多人將開源與安全劃上等號。&lt;/p&gt;
&lt;h2 id=&#34;二開源軟體的安全現況&#34;&gt;二、開源軟體的安全現況&lt;/h2&gt;
&lt;h3 id=&#34;多雙眼睛的侷限&#34;&gt;多雙眼睛的侷限&lt;/h3&gt;
&lt;p&gt;即便開放原始碼，所有人都能查看開放原始碼，如果有任何 bug 或是安全漏洞，都「應該」會被發現。
我使用「應該」一詞，正因為許多人（包含我）在安裝開源軟體時，就如同安裝閉源軟體一樣，並不會查看全部的程式碼，確認安全後才進行安裝。而是做一個「大家都看過了，應該很安全」的假設。
例如當你想用 Nginx 取代 Apache 時，可能僅會比較兩者的 feature 與 benchmark，並不會查看內部 tcp socket 是如何管理等等，或是 buffer overflow 時的錯誤處理機制。&lt;/p&gt;
&lt;h3 id=&#34;開源是否暴露更多漏洞&#34;&gt;開源是否暴露更多漏洞？&lt;/h3&gt;
&lt;p&gt;####安全問題的挑戰&lt;/p&gt;
&lt;p&gt;當我們將軟體開源，等於是將所有安全問題也給暴露了出來。&lt;/p&gt;
&lt;p&gt;舉例來說，假如我們 self-hosted 一個 NAS 服務，這個 NAS 使用指定的 port 進行 web 與 API 的存取，例如 &lt;code&gt;:8787&lt;/code&gt;。
當一個 Hacker 看到該 NAS 的 Auth 並沒有任何 rate limit，就可以直接在 NAS 內進行 port scan 或是 brute force 攻擊，取得這個 NAS 服務的控制權。&lt;/p&gt;</description>
    </item>
    <item>
      <title>A smarter way to change directory: zoxide</title>
      <link>https://www.omegaatt.com/blogs/develop/2024/zoxide_a_smarter_way_to_change_directory/</link>
      <pubDate>Tue, 24 Sep 2024 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2024/zoxide_a_smarter_way_to_change_directory/</guid>
      <description>&lt;p&gt;在日常的開發工作中，我們經常需要在不同的目錄間切換。雖然 &lt;code&gt;cd&lt;/code&gt; 命令已經足夠好用，但如果有一個更聰明的工具能記住我們最常用的目錄，並讓我們用最少的按鍵就能快速跳轉，那豈不是更棒?&lt;/p&gt;
&lt;p&gt;這就是 zoxide 的用武之地。zoxide 是一個由 Rust 編寫的「更聰明的 cd 命令」，靈感來自 z 和 autojump。它會記住你最常使用的目錄，讓你只需輸入幾個字符就能快速跳轉。&lt;/p&gt;
&lt;h2 id=&#34;zoxide-的主要特性&#34;&gt;zoxide 的主要特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;自動匹配: 不需要輸入完整路徑，zoxide 會根據輸入自動匹配最相關的目錄：&lt;/li&gt;
&lt;li&gt;自動紀錄過去的目錄: zoxide 會記住你最常使用的目錄，讓你只需輸入幾個字符就能快速跳轉。這些資料可以使用 &lt;code&gt;zoxide query&lt;/code&gt; 來查詢，或是 &lt;code&gt;zoxide edit&lt;/code&gt; 來管理。&lt;/li&gt;
&lt;li&gt;互動式選擇: 結合 fzf，可以互動式地選擇目標目錄&lt;/li&gt;
&lt;li&gt;輕量快速: 用 Rust 編寫，啟動迅速，幾乎不會影響 shell 的啟動時間&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;安裝與配置&#34;&gt;安裝與配置&lt;/h2&gt;
&lt;p&gt;zoxide 的安裝可以參考 &lt;a href=&#34;https://github.com/ajeetdsouza/zoxide?tab=readme-ov-file#installation&#34;&gt;官方文件&lt;/a&gt;，我們就不多贅述了。&lt;/p&gt;
&lt;p&gt;安裝完成後，我們需要在 shell 的配置文件中添加初始化命令。以 zsh 為例，在 &lt;code&gt;~/.zshrc&lt;/code&gt; 的末尾添加:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;eval &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;zoxide init zsh&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重新打開終端或執行 &lt;code&gt;source ~/.zshrc&lt;/code&gt; 後，zoxide 就可以使用了。&lt;/p&gt;
&lt;h2 id=&#34;使用方法&#34;&gt;使用方法&lt;/h2&gt;
&lt;p&gt;zoxide 的基本用法非常直觀，經過自動執行 &lt;code&gt;zoxide init zsh&lt;/code&gt; 後，我們可以使用 &lt;code&gt;z&lt;/code&gt; 和 &lt;code&gt;zi&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自動匹配:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ ls
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  boo bar baz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ z bo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ pwd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  /home/raiven/boo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;即便沒有輸入完整路徑，也能夠自動匹配最相關的目錄
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ pwd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  /home/raiven/dev/omegaatt-blog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ z
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ pwd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  /home/raiven
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ z blog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ pwd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  /home/raiven/dev/omegaatt-blog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;互動式選擇:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ zi
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~ &amp;lt; 98/98&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;296.0 /home/raiven/dev/omegaatt-blog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;124.0 /home/raiven/dev/bookly
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 50.0 /home/raiven/dev
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 24.0 /home/raiven/dev/test
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 12.0 /home/raiven/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這裡的 &lt;code&gt;z&lt;/code&gt; 命令就像一個更聰明的 &lt;code&gt;cd&lt;/code&gt;，而 &lt;code&gt;zi&lt;/code&gt; 則是互動式版本。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在 Firefox 上使用 PWA 將網頁應用安裝成 Desktop App</title>
      <link>https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/</link>
      <pubDate>Sun, 25 Aug 2024 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;開應用時，跨平台的桌面解決方案時常困擾開發者，在 Linux Desktop 上要支援多種桌面協議與桌面管理系統，更是複雜許多。時常會看到 Electron 等等基於 chromium 的技術。&lt;/p&gt;
&lt;p&gt;當然也可以像是 zed.dev 這樣的 geek 精神，自己寫了一套跨平台的 GUI 框架，但多數新創公司可能沒有這些資源來實現。例如已經非常成熟的 Notion.so、Obsidian 等等都是基於 Electron 實現的。&lt;/p&gt;
&lt;p&gt;我並非一個 &lt;a href=&#34;https://github.com/sudhakar3697/awesome-electron-alternatives&#34;&gt;anti-Electron&lt;/a&gt; 或是 &lt;a href=&#34;https://www.reddit.com/r/degoogle/&#34;&gt;deGoogle&lt;/a&gt; 的人，但試圖找到其他解決方案正式樂趣之所在。&lt;/p&gt;
&lt;h2 id=&#34;pwaprogressive-web-app&#34;&gt;PWA(Progressive Web App）&lt;/h2&gt;
&lt;p&gt;詳盡的 PWA 技術可以到 mozilla 的&lt;a href=&#34;https://developer.mozilla.org/zh-TW/docs/Web/Progressive_web_apps&#34;&gt;文件&lt;/a&gt;中查看，對我來說只要可以達到目的：可以在 Windows、Mac、Linux 上封裝成 Desktop Aplication 即可。&lt;/p&gt;
&lt;h2 id=&#34;官方支援&#34;&gt;官方支援&lt;/h2&gt;
&lt;p&gt;mozilla 官方有一個文件針對「安裝網頁應用到桌面環境」的歷史講解，可以參考&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Installing&#34;&gt;官方文件&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;文中提到過去將網址「儲存」在桌面上的類似「書籤」的方法(SSB)，以及與 PWA 的不同之處：PWA 的使用者資料是儲存在桌面環境中。&lt;/p&gt;
&lt;h2 id=&#34;pwa-add-on&#34;&gt;PWA Add-on&lt;/h2&gt;
&lt;p&gt;上述文件內有提到需要使用 Fan-maded 的 PWA Add-on 來安裝 PWA：&lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/pwas-for-firefox/&#34;&gt;Progressive Web Apps for Firefox by Filip Štamcar&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;他是一個開源的 Firefox 擴充套件(&lt;a href=&#34;https://github.com/filips123/PWAsForFirefox&#34;&gt;filips123/PWAsForFirefox&lt;/a&gt;)，具有&lt;a href=&#34;https://pwasforfirefox.filips.si/&#34;&gt;完整的文件&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;安裝過程&#34;&gt;安裝過程&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;在 Firefox 瀏覽氣上安裝 &lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/pwas-for-firefox/&#34;&gt;PWA Add-on&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;瀏覽器會自動跳到設定頁面，首先會需要同意 EULA
&lt;img alt=&#34;setup-0&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-0.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;接著會需要安裝 connector，需要透過該 connector 才能連結瀏覽器本身與 extension。
connector 由 Rust 編寫，使該 extension 可以在跨平台的桌面環境中管理 firefox 設定檔、runtime 等等未開放給 extension 存取的資源。&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Windows:
Windows 的 connector 除了手動安裝外，也推薦使用 &lt;a href=&#34;https://github.com/microsoft/winget-cli&#34;&gt;winget&lt;/a&gt; 來安裝，類似於 apt/yum 的套件管理工具。
&lt;img alt=&#34;connector installation windows&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-1.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;Linux
Linux 的 connector 可以到 &lt;a href=&#34;https://github.com/filips123/PWAsForFirefox/releases&#34;&gt;github release&lt;/a&gt; 上找到，例如我的作業系統是 OpenSUSE Tumbleweed，則可以下載 .rpm 檔案。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zypper in ./firefoxpwa-2.12.1-1.x86_64.rpm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Debian/Ubuntu(DEB):
&lt;img alt=&#34;connector installation deb&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-2.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;Redhat/Fedora/OpenSUSE(RPM):
&lt;img alt=&#34;connector installation rpm&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-3.webp&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;接著會需要安裝不同於原生 Firefox 的 runtime，根據描述，會下載並由 connector 自動修改成支援 PWA 的 runtime。
&lt;img alt=&#34;runtime installation&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-4.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;到這邊已經完成 PWA extension 的安裝，可以嘗試使用 PWA 的方式來安裝 web app to desktop app。&lt;/li&gt;
&lt;li&gt;首先需要打開你想要安裝成 Desktop App 的網頁，如果在不同的網頁嘗試設定，extension 會自動判斷該網頁 CORS Error，即便是 &lt;code&gt;https://www.notion.so&lt;/code&gt; 與 &lt;code&gt;https://notion.so&lt;/code&gt; 也屬於不同的 Origin。
接著點擊 PWAForFirefox 的圖示，可以看到已經安裝好的 extension。
&lt;img alt=&#34;extension icon&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-5.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;接著一步一步的跟著指引設定好該 PWA 的設定。
&lt;img alt=&#34;add pwa&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-6.webp&#34;&gt;
&lt;img alt=&#34;add pwa&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-7.webp&#34;&gt;
&lt;img alt=&#34;add pwa&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-8.webp&#34;&gt;
&lt;img alt=&#34;add pwa&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-9.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;完成，可以在應用程式選單內找到剛剛建立的 PWA 應用程式。
&lt;img alt=&#34;pwa at menu&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-10.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;開啟後可以自動開啟網頁應用程式，並具有獨立的設定檔。
&lt;img alt=&#34;open pwa&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-11.webp&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;使用感受&#34;&gt;使用感受&lt;/h2&gt;
&lt;p&gt;三四年前在 Windows 上習慣使用 Notion Desktop 版本，在 Linux 上反而已經習慣要用網頁來打開，這次嘗試使用 PWA 後倒是經常忘記有將它安裝成 Desktop Application。&lt;/p&gt;</description>
    </item>
    <item>
      <title>透過 Distrobox 解決 Linux 環境依賴問題</title>
      <link>https://www.omegaatt.com/blogs/develop/2024/two_distrobox_use_case/</link>
      <pubDate>Sat, 18 May 2024 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2024/two_distrobox_use_case/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;自從一年前嘗試使用 &lt;a href=&#34;https://www.omegaatt.com/blogs/develop/2023/kde_neon_experience&#34;&gt;KDE Neon&lt;/a&gt; 後，主要的桌面開發環境就從 wsl 整個遷移到 Linux 上。這一年來感受到，KDE Neon 可能正如 reddit 上的留言闡述的那樣，只是 KDE 團隊的「實驗場」，可以享受到「最」新的 Plasma 與「較」新的 Kernel，卻始終是基於 Ubuntu 22.04 LTS，即便 Ubuntu 24.04 LTS 推出之際，也不再讓我感受性感。&lt;/p&gt;
&lt;p&gt;因緣際會，在 Ubuntu 24.04 LTS 發布之際，我決定從 KDE Neon distro hopping 到 OpenSUSE Tumbleweed，這是一個由 SUSE 公司推出的滾動式發行版，軟體包在 SUSE 測試過後便會推送到 OpenSUSE 的 Repo（其他 OpenSUSE 的功能省略）。這次的轉換主要是為了獲得最前沿的 Linux 體驗。OpenSUSE Tumbleweed 的滾動更新模式能確保我始終使用最新的軟體和技術，這對我來說是一個有趣的選擇，即便有可能收到有問題的 xz 更新 XD。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ fastfetch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                     ......             raiven@raiven-suse
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     .,cdxxxoc,.               .:kKMMMNWMMMNk:.         ------------------
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cKMMN0OOOKWMMXo. A        ;0MWk:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;      &amp;#39;&lt;/span&gt;:OMMk.      OS: openSUSE Tumbleweed &lt;span style=&#34;color:#ae81ff&#34;&gt;20240517&lt;/span&gt; x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ;WMK;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;       &amp;#39;&lt;/span&gt;lKMMNM,     :NMK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;             &amp;#39;&lt;/span&gt;OMW;     Host: FMV UH-X
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; cMW;             WMMMN   ,XMK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;                 oMM.    Kernel: 6.8.9-1-default
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.MMc             &amp;#39;&amp;#39;^*~l. xMN:                    KM0    Uptime: 1 hour, 14 mins
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;MM.                   .NMO                      oMM    Packages: &lt;span style=&#34;color:#ae81ff&#34;&gt;3211&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;rpm&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;37&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;flatpak&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.MM,                 .kMMl                       xMN    Shell: zsh 5.9
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; KM0               .kMM0&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; .dl&amp;gt;~,.               .WMd    DE: KDE Plasma 6.0.4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &amp;#39;&lt;/span&gt;XM0.           ,OMMK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;    OMMM7&amp;#39;&lt;/span&gt;              .XMK     WM: KWin &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Wayland&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   *WMO:.    .;xNMMk&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;       NNNMKl.          .xWMx      WM Theme: Nordic
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;     ^ONMMNXMMMKx;          V  &amp;#39;&lt;/span&gt;xNMWKkxllox0NMWk&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;       Theme: Breeze (NordicDarker) [QT], Breeze-Dark [GTK2], Breeze [GTK3]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;         &amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:dOOXXKOxl&amp;#39;&lt;/span&gt;          Icons: Zafiro-Nord-Dark-Black &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;QT&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, Zafiro-Nord-Dark-Black &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;GTK2/3/4&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Font: Noto Sans &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;10pt&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;QT&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, Noto Sans &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;10pt&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;GTK2/3/4&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Cursor: Nordic &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;24px&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Terminal: tmux 3.4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        CPU: 13th Gen Intel&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;R&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Core&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;TM&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; i5-1335U &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;12&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; @ 4.60 GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        GPU: Intel Iris Xe Graphics @ 1.25 GHz &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Integrated&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Memory: 9.86 GiB / 15.27 GiB &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;65%&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Swap: 677.00 MiB / 2.00 GiB &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;33%&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Disk &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;/&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: 88.81 GiB / 1.82 TiB &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;5%&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; - btrfs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;即便是已經足夠穩定的 OpenSUSE，也是可以很輕易的被搞的不穩定，正如 debian 在 &lt;a href=&#34;https://wiki.debian.org/DontBreakDebian&#34;&gt;DontBreakDebian&lt;/a&gt; 一文中提到的：&lt;/p&gt;</description>
    </item>
    <item>
      <title>WSL2 中使用 systemd 管理 podman 的 container</title>
      <link>https://www.omegaatt.com/blogs/develop/2023/wsl2_systemd_podman/</link>
      <pubDate>Mon, 13 Feb 2023 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2023/wsl2_systemd_podman/</guid>
      <description>&lt;p&gt;原本使用 &lt;a href=&#34;https://github.com/nullpo-head/wsl-distrod&#34;&gt;wsl-distrod&lt;/a&gt; 來作為 wsl 中 systemd 的實現方式，後來 &lt;a href=&#34;https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/&#34;&gt;microsoft 宣布 wsl 支持 systemd&lt;/a&gt; 後，distrod 等等 repo 就沒有在更新了呢，是巧合嗎?我不這麼認為。&lt;/p&gt;
&lt;p&gt;這篇簡略紀錄 wsl2 中啟用 systemd 作為 process 管理工具以及配合紅帽推出的 &lt;a href=&#34;https://podman.io/&#34;&gt;podman&lt;/a&gt; 來取代(斷捨離)docker desktop。&lt;/p&gt;
&lt;h2 id=&#34;環境&#34;&gt;環境&lt;/h2&gt;
&lt;p&gt;wsl2 + ubuntu 22.04&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ neofetch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            .-/+oossssoo+/-.               raiven@raiven
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:+ssssssssssssssssss+:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;           -------------
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 22.04.1 LTS on Windows &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .ossssssssssssssssssdMMMNysssso.       Kernel: 5.10.43.3-microsoft-standard-WSL2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   /ssssssssssshdmmNNmmyNMMMMhssssss/      Uptime: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; hours, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; mins
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  +ssssssssshmydMMMMMMMNddddyssssssss+     Packages: &lt;span style=&#34;color:#ae81ff&#34;&gt;2005&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;dpkg&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;snap&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Shell: zsh 5.8.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Theme: Adwaita &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;GTK3&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Icons: Adwaita &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;GTK3&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ossyNMMMNyMMhsssssssssssssshmmmhssssssso   Terminal: Windows Terminal
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ossyNMMMNyMMhsssssssssssssshmmmhssssssso   CPU: AMD Ryzen &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt; 5900X &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;24&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; @ 3.700GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+sssshhhyNMMNyssssssssssssyNMMMysssssss+   GPU: dbac:00:00.0 Microsoft Corporation Device 008e
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Memory: 1427MiB / 15966MiB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  +sssssssssdmydMMMMMMMMddddyssssssss+
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   /ssssssssssshdmNNNNmyNMMMMhssssss/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .ossssssssssssssssssdMMMNysssso.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      -+sssssssssssssssssyyyssss+-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:+ssssssssssssssssss+:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            .-/+oossssoo+/-.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;wsl2-中啟用-systemd&#34;&gt;wsl2 中啟用 systemd&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;請確保 wsl2 的版本是 version 2，可以在 cmd/powershell 中查看&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prometheus 學習筆記 - 基本架構與資料結構</title>
      <link>https://www.omegaatt.com/blogs/develop/2021/promethues-overview/</link>
      <pubDate>Sat, 18 Sep 2021 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2021/promethues-overview/</guid>
      <description>&lt;h1 id=&#34;prometheus-overview&#34;&gt;Prometheus Overview&lt;/h1&gt;
&lt;iframe width=&#34;100%&#34; height=&#34;512&#34; src=&#34;https://www.youtube.com/embed/h4Sl21AKiDg&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id=&#34;架構&#34;&gt;架構&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://prometheus.io/assets/architecture.png&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;0&#34;&gt;
&lt;li&gt;Exporter: 要被採集的目標 job 中曝露 metrics 的組件，負責轉換資訊成 prometheus 可解讀的格式。由於某些早於 prometheus 的 service 因為某些原因，不想主動在服務中曝露 metrics，故可以用一些額外的 exporter 將這些 service 中的 metrics 轉成 prometheus 格式，並曝露埠。
&lt;ul&gt;
&lt;li&gt;node exporter&lt;/li&gt;
&lt;li&gt;mysql exporter&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Push Gateway: 由於有些任務時間太短，可能不到 prometheus pull 的週期，可讓這些 jobs 主動把 metrics push 到這個 push gateway，好讓 premetheus server 可以 pull。&lt;/li&gt;
&lt;li&gt;Prometheus Server
&lt;ul&gt;
&lt;li&gt;Retrieval(retrieval system): 主要負責 pull 指定的 target
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# /etc/prometheus/prometheus.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;scrape_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;job_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;prometheus&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;static_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;targets&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;localhost:9090&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;job_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;node_exporter&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;static_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;targets&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;localhost:9100&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;TSDB: 時間序列資料庫，存放 pull 到的 metrics&lt;/li&gt;
&lt;li&gt;HTTP Server: 為 PromeQL 查詢提供接口&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Service Discovery:
&lt;ul&gt;
&lt;li&gt;kubernetes: 自動發現 k8s 中 pod 增加減少以及 probe 異動等等&lt;/li&gt;
&lt;li&gt;file_sd: 通過 config 實現服務的自動發現&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Alert Manager: 當 prometheus server 發現某某某 job 已經達到設定好的通知閾值進行通知的 service。&lt;/li&gt;
&lt;li&gt;PromeQL: 無論是自帶 web UI 或是串接 Grafana，都是通過 http 進行 PromeQL 查詢後做視覺化處理 TSDB 中的時間序列資料。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;資料結構&#34;&gt;資料結構&lt;/h2&gt;
&lt;p&gt;下面範例中會有更詳細說明&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
