uv 是 Astral 公司推出的一款基於 Rust 編寫的「 Python 套件管理工具 」,雖然 Python 的套件管理生態內已經存在多種工具如 pip 、 poetry 、 conda 等等,但 uv 還是有出色表現,由於使用 Rust 進行編寫,uv 工具的速度讓人驚艷 ;且從「 安裝管理 Python 版本 」、「 虛擬環境建置」、「 package 依賴 」以上 uv 全部都統整好了,其目標是取代多種現有工具,為 Python 專案的開發和管理帶來了新的選擇。 uv 也成為 Astral 公司繼 Ruff (Python 程式碼檢查器和格式化工具) 之後,另一個知名的專案了。

Continue reading

前段時間發現自己對 Python 的 Iterable、Iterator、Generator 之間的差別並沒有很熟,我們都知道這些的共同點是均可使用 for loop 來遍歷。

再進一步思考一下所謂的 for-loop 是怎麼實現呢: 首先用最簡單的 list 來說明,因為有 index 標示位置,故可以指定位置拿出來,蠻符合 for-loop 的使用直覺 ; 但是 dict 也是可以用 for loop 走訪呀,而它並不存在順序 ; 甚至 open 的 file 都可以用 for loop 結構來讀取每個 row ,那為什麼這個也能用 for-loop 呢?這背後有兩個核心概念:

  • Iterable(可迭代對象)
  • Iterator(迭代器)

Continue reading

Cron

在軟體工程中,有蠻多工作都會需要排程的,而 Linux 排程可透過 crontab 與 at ,而這兩個有啥異同呢? 我們可以發現工作排程的方式基本上分成:

  • 例行性的 : 每隔一定的週期就會需要處理,那就可以使用 rontab 這個指令設定的任務循環
  • 突發性的 : 會訂一個時間點執行,但做完以後就沒有了,那就可以使用 at 指令處理僅執行一次就結束的任務

Cron 是 Linux 系統下的一個定時任務管理服務,為了要精確表示「何時」執行, 就發明了一個抽象的 Cron 表達式,相信大家都有看過類似 0 12 * * * 這種在定時任務中常出現的寫法,像 「 GCP Cloud Scheduler」、「 GitHub Actions」、「 SpringBoot 的 @Scheduled」,都以 Cron 表達式來定義任務觸發時間點。

Continue reading

SSH Key

SSH 是 Secure Shell 的縮寫,為一種通訊協定,會對裝置之間的連線進行驗證加密,安全地傳送 command。通常用於遠端控制伺服器、管理基礎架構和傳輸檔案。SSH 是在應用層和傳輸層上執行的,透過稱為公開金鑰加密,「public key 可供任何人使用」 ; 另一個金鑰為「private key 由其擁有者保密」,兩個 key 相互對應。此外傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。並且許多作業系統,包含 macOS、Linux 都天然支援。

Continue reading

Dictionary 是 Python 用來儲存 key → value 的對應關係,其他語言類似的資料結構為 : HashMap(Java) ; Object/Map(JavaScrip) ; Map(Go) 等等,以下筆記一些 Dictionary 小觀念和使用時機。注意 Dictionary 底層是 hash table,所以其 key 必須是不可變的 (Immutable),這要特別注意 ; 另外自 Python 3.7+ 起,Dictionary 有保證會「保留插入順序」,但還是盡量不要依賴這個行為會比較好。

Continue reading

我們都知道 Python 是一個動態的語言,代表每一個 variable 是什麼型別是在 runtime 的時候決定的,雖然很靈活可是當 code 量級上去之後因爲類型不正確引發的錯誤也會逐漸增加。但 Python 也是可以做到型別要求的,就是使用 「 Type Hint 」 或者叫 「 Type Annotation 」,中文稱呼蠻多種的例如「型別標註」、「型別提示」等等。 若有寫 Type Hint 的話,比較現代的 IDE 都會有一些自動顯示或補全輔助 :

Python 的 Type Hint 是從3.5開始萌芽逐漸引入直到現在,故有一些發展的歷史脈絡和演變,有一些寫法也漸漸更替,故簡單介紹和分析一下。

Continue reading

Author's picture

李昀陽 YunYang Lee

Welcome to my Tech Note. You can read some of the chapters below.

Software Engineer

Taiwan