uv 容器化實作:使用官方 image 建立 Dockerfile

from Pixabay

📌 這是 WeaMind 系列 的第 3 篇。
本系列以真實世界專案為背景,記錄重要技術實作與經驗分享。

uv 是近年來快速竄起的 Python 套件管理器,憑藉其最關鍵的核心特性——快😎,在 Python 開發圈吸引了不少關注與採用。

之前我已寫過〈Python 套件管理器 uv 介紹——與 Poetry 比較〉介紹。有興趣的讀者歡迎參考。

本文是 uv 系列的第二篇,聚焦於 Dockerfile

當我要將「使用 uv 的 Python 專案」容器化時,我發現相關的討論與介紹較少,所以花了一些時間摸索。

本文目標是大幅減少你的試錯時間,並提出我的實踐與看法。

Vibe Coding 與人類的時代

from Pixabay

任何人類都能使用魔法的時代要到來了——《葬送的芙莉蓮》漫畫第 53 話 | 人類的時代

有了強大的 AI 輔助 ,寫程式再也不是軟體工程師的專屬。

如此的時代巨變,首先讓我聯想到的,就是「芙莉蓮」中的這段劇情。

不過把這個比喻與感受表達得最好的,當屬財經作家王伯達的這篇臉書文

他寫道:

AI 讓更多人,用更容易的方式使用程式語言與複雜軟體。

這讓我想到芙莉蓮的老師,弗蘭梅。

她說服了人類的皇帝,讓人類得以開始研究魔法,魔法不再是個禁忌,開啟了人人有魔法可以練的年代。

顯然,在我這個軟體工程師眼中,AI 就像芙蘭梅,把原本高門檻的知識、技術變成大眾能輕易接觸的工具,讓所有人都有機會參與創造

本文聊聊我作為一個軟體工程師,如何看待這個 AI 普及後的「魔法時代」。

GitHub Actions 入門:自動化 Lint、Format 與 Type Check

📌 這是 WeaMind 系列 的第 2 篇。
本系列以真實世界專案為背景,記錄重要技術實作與經驗分享。

從這篇文章開始,我將啟動一個新的系列。

搭配我正在實作中的 Side Project——WeaMind,寫下一篇又一篇的技術實作心得。

讓我們一起在專案中成長,並獲得更多的開發樂趣。

如標題所示,本文主要介紹 GitHub Actions。不過在此之前,我們得先對 CI 有初步的了解。


什麼是 CI?為什麼需要 CI?

CI 是「Continuous Integration」的縮寫,中文是「持續整合」。

它的核心概念是:當開發人員提交程式碼時,系統可以「自動執行一系列預先定義的檢查流程」,例如檢查程式碼是否與現有程式相容、是否能正常運作。

在軟體開發流程中,我們常常要處理很多重複但又不可忽略的工作:檢查程式碼格式、執行靜態分析、跑單元測試,甚至產生 API 文件等。

如果每次提交都要手動跑一輪,既麻煩又易忘。

這時 CI 就派上用場了。它能在每次 push 或開 PR 時(或其它事件),自動幫我們做這些事,讓問題提早浮現,使得開發流程更加穩健,也能節省大量重複性勞動。

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 的價值將發揮不到一半。

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

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

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

將域名註冊移轉至 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)又顯然是蓄意的,那我們可以合理推測——短期內恐怕不會恢復正常了。

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