yadm 教學:實作 macOS 與 Linux 的 dotfiles 跨平台同步

from Pixabay

兩年多前,我寫了這篇〈是時候同步你的 dotfiles 了——我選擇 yadm〉,當時的主要動機是想要在多個 Linux VM 之間同步設定檔。

該文章介紹了「何謂 dotfiles」(後端工程師應該都很熟悉),以及我認為的「dotfiles 同步工具」的兩大流派:

  1. Symbolic Link。
  2. Bare Git。

然而,兩年之間,我幾乎很少在文中提起它。

事實上,我這段期間使用的 yadm 的頻率確實不高

但這並不代表我沒有同步 dotfiles 的需求,只是真正的核心需求在於跨平台,尤其是 macOS 與 Linux 之間。

若僅是在不同 Linux VM 之間同步,就顯得有點小打小鬧,實用性不足


我日常開發主要都在 Mac 上,而 Mac 與 Linux 的設定落差雖不大,但絕不會完全相同——這讓單一套設定難以通用。

比如我的 Mac 上有一些 Homebrew 的環境變數,在 Linux 上無用武之地不說,還可能造成執行錯誤。

總之,若不解決跨平台問題,那 yadm 的價值將發揮不到一半。

上個月我終於鐵了心,把這件事搞定了!

做完只覺得,我實在太晚開始,跨平台同步的價值非常巨大且實用

因此,儘管使用這類工具的人並不多,我也要寫下這篇文章,供有志之士參考!

Gandi 惹惱了我😡——怒將域名轉至 Dynadot

我從 2018 年開始租用kyomind.tw這個域名,至今已 7 年。

每年 9/1 是它的續約時間。過去多年來,價格大致穩定,折合新台幣大概 700 多元。

直到去年續約,我被信用卡帳單上的金額嚇了一跳:1260 元

這是什麼情況?

一度以為是哪裡被誤收,或是信用卡出了問題。但查了帳單、比對後台紀錄,確認那筆款項的確是域名供應商 Gandi 對我的 .tw 域名的續約費用。

當下覺得很不對勁——域名費用可以這樣說漲就漲嗎?而且幅度也太誇張了!


就這樣過了半年多,想想幾個月後又要續約了,1260 實在有點讓人卻步。

我們知道,域名在不同供應商之間,價格並不同。

而且!域名是可以移轉的

所以我決定查查,目前 .tw 便宜的地方有哪些——發現了 Dynadot 只要 18 美元!

而且,其他域名供應商,大概也只要二十幾美元左右啊,怎麼 Gandi 會特別貴?

於是我決定進一步弄清楚這到底是怎麼回事,這才發現,其實此時此刻,Gandi 的續約價格也只是台幣 700 多。

這讓我更加惱火了……

為 e2-micro VM 建立 SSH 連線:本機與 GitHub

不久前,我看完了朋友古古的電子報〈終身免費的 VM 服務!Google Cloud 免費方案分享〉,介紹 GCP 的 E2 Micro(產品代號:e2-micro)免費 VM。

簡言之,我們可以在一定資源額度與條件範圍內,免費使用 Google Cloud Platform 上的 Compute Engine 虛擬機器。

我對此深感興趣,因為它的規格比之前的 F1 Micro 好上一截。

F1 時代的 RAM 大約只有 0.6 GiB(約 600MB),有開發經驗的都知道,這在某些情況下,用起來會有點捉襟見肘😂

於是,我也跟著教學開了一台!免費的午餐怎麼能不拿呢?

附帶一提,對 GCP 不熟的人——比如我,請一定要照著教學來建立 VM,以免設定時有所遺漏,一不小心就被收費。

最後一塊拼圖

不過原來的教學只寫到 VM 建立完成為止,對於我們這些後端工程師而言,顯然還有一個很重要的基礎設定沒做——SSH 連線。

因此,我想補齊這剩下的部分,包含:

  1. 建立自己的 Linux 帳號。
  2. 建立本機與 VM 的 SSH 連線金鑰,並完成連線。
  3. 建立 VM 與 GitHub 的 SSH 連線,且能正常 clone Github 專案。

剛好我在之前文章〈Linux 上的 Python 開發環境設定〉中,略過了「設定 SSH 連線」環節——老實說只是因為我懶得寫XD

但仔細想想,這個流程我自己做了很多次,不如直接寫在文章裡,方便大家回顧。

雖說是寫給 e2-micro,不過,這些內容適用於任何 Linux VM。

本文就來補完這些步驟,並講述我對於這個免費 VM 的看法。

Imgur 封鎖台灣 IP,我把圖床搬到 Cloudflare R2

上個月中,我在寫部落格時,突然發現圖片上傳失敗,無論怎麼嘗試都無法成功。

我的寫作流程是用 VS Code 的 Markdown Image 外掛,透過鍵盤快捷鍵,直接把圖片傳到 Imgur 上,這個流程已經持續了好幾年,非常方便、順手。

但這次踢到鐵板了。

相關文章:Notion + VS Code:我的 Markdown 寫作工作流

認真查了一下,才發現原來是 Imgur 大概從 5 月 16 日開始,無預警地封鎖了來自台灣的 IP,不再允許台灣使用者上傳圖片。(所幸已上傳的圖片還是可以看)

PTT 上也有討論

可以想見,這是多麼大的衝擊!

官方既然沒有給出任何理由,這個舉動(封鎖 IP)又顯然是蓄意的,那我們可以合理推測——短期內恐怕不會恢復正常了。

但我的部落格還是要繼續寫啊!只能乖乖尋找替代方案。

Pyright 上手指南:Python 型別檢查的新選擇

如〈Python 套件管理器 uv 介紹——與 Poetry 比較〉一文中所述,最近我開始了一個新的 side project

我打算好好利用這個專案,練習並實踐那些,在工作中無法盡情揮灑,或想學習但是還用不到的新技術。包括後端、AI、DevOps。

為了嘗試不同的開發體驗,從框架到工具都有所更新:

  • 因應 AI 時代,後端框架改用 FastAPI——輕量,且非同步支援佳。
  • 套件管理器從 Poetry 換成 uv——快,就是快。

而型別檢查器——本文的主角,則從 Mypy 改為 Pyright。

這不是一時興起的炫技選擇,而是一連串有意識的技術決策:選擇那些效能更好、體驗更佳,並且有長期潛力的替代方案。

Pyright,就是其中之一。


為什麼需要型別檢查?

如果你對 Python 的「型別檢查」議題還不熟,歡迎參考我之前寫的「Mypy 三部曲」,其中對 Python type hints 與型別靜態分析工具做了深入說明。

Type hints 歷經多代 Python 發展至今,已趨於成熟。但它在實際專案中的流行程度,恐怕還不算高。

甚至直白地說,對部分 Python 開發者而言,可能:

  1. 沒聽過。
  2. 知道但無感。

這正是本文要努力的目標——讓更多人加入撰寫 Python type hints 的行列🔥😎

Pocket 替代方案推薦:Raindrop.io 與 Karakeep

by Sam Chivers

幾天前,我收到了一封來自 Pocket 的電子郵件,開頭是:

感謝您的閱讀:Pocket 向您道別
 
我們有一些重要訊息要和您分享:幾經思考之後,我們做出了一個艱難的決定,我們的先存再看和內容探索應用程式 Pocket 即將結束服務。

如你所知,知名的「稍後閱讀」服務 Pocket 已經被 Mozilla 正式宣布將於 2025 年 7 月 8 日停止服務。

對許多知識工作者來說,這是個令人感慨的時刻,Pocket 的結束讓我們再度體認到:我們存下來的東西真的大多都沒有看

不過,資訊囤積還是要繼續😎,所以本文會介紹兩個,我覺得還不錯的替代品,並說明我的選擇與理由。


什麼是「稍後閱讀」服務?

「Read It Later」(稍後閱讀)是一種資訊整理的方式,也是一種使用習慣。

它允許你在沒心情或沒時間的情況下,把重要但無法即時處理的內容先存起來,日後再回來閱讀。

對知識工作者或資訊成癮者來說,這類服務是不可或缺的夥伴。

從食譜、文章到影片,這些被儲存下來的內容,構成了每個人專屬的知識倉庫。

OpenRouter 上的 5 個「免費」模型推薦

from Pixabay

2025/06/04: 更新「1000 次請求的最佳場景」落段。並感謝〈愛好 AI Engineer 電子報 🚀 模型上下文協定 MCP 應用開發 #27〉的推薦,本期的含金量極高,除了 MCP 最新進展,還討論 AI 應用開發的一些「哲學」(ex:框架是必要的嗎?)議題。推薦必讀!

在這個 AI 應用百花齊放的時代,我們可以透過各種方式來接觸 AI。

可以使用線上服務——比如 ChatGPT,也可以直接使用 LLM API 來更加客製化自己的需求。

最近我開始使用 OpenRouter 這個平台上的 API 服務,對於 AI 開發人員或 LLM 重度用戶,想必不陌生。

本文介紹 OpenRouter 上的 5 個免費模型,幫助你快速上手並選擇合適的模型。


OpenRouter 是什麼?

OpenRouter 是一個語言模型的 API 聚合平台服務,讓使用者可以透過單一介面,就能夠付費存取多家公司的大語言模型,包括 OpenAI、Anthropic、Google 等大公司的 LLM API 產品。

而且像 LLaMaDeepSeek 這類開源模型,你想要使用的話,除了在本地跑之外,也可以透過 OpenRouter 提供的 API 來使用。

好處就是你不用擁有機器、顯卡,就能體驗這些開源模型的能力,而且價格相對於閉源模型,通常有一定的競爭力。

總之,OpenRouter 不僅為開發者提供了統一的介面,更讓非技術出身的用戶也能輕鬆使用 AI。