Amo Chen

在 K8s 上如何做到 Zero Downtime ?

看到標題,有人可能就會像我一樣想說「不是交給 rolling update 就好了嗎?」 錯了。 K8s 的 rolling update 只有 deployment updates 才會作用,仍有其他情況會導致 downtime 發生,譬如執行你的應用的 node 掛

Posted on  Sep 25, 2023  by  Amo Chen  ‐ 1 min read

怎麼正確處理 PyO3 的 Exception ?

前陣子提到可以用 PyO3 讓 Python 可以呼叫用 Rust 寫成的 library, 不過當 Rust 那端執行上有任何例外錯誤時,你還是得將例外錯誤轉換成 Python 看得懂的 Exception, 如此一來才能讓 Python 正確拋出 Exception

Posted on  Sep 23, 2023  by  Amo Chen  ‐ 1 min read

Kombai — 前端工程師產 Code 的好工具

現在開發團隊大多需要 UI/UX 設計師參與使用者介面的設計,再將設計交由前端工程師實作,然後前端工程師就會看著設計稿想著要怎麼把設計轉成一個個元件以及

Posted on  Sep 22, 2023  by  Amo Chen  ‐ 2 min read

Python contextvars 模組教學

大家都知道執行緒(Threads)之間會共用 Process 的記憶體,這種共用的情況有可能造成 Race Condition, 使得程式出現不可預期的行為或錯誤,所幸這個問題可以透過 threadling.local 解決。

而 Python 3.4 之後推出 asyncio 模組,使得 Python 具備執行非同步 I/O (asynchronous I/O) 的能力,開發者可以同時結合 multiprocessing , threading 以及 asyncio 將 Python 效能提升至全新檔次,但是當結合 threading 以及 asyncio 時,可能會遭遇一個問題, 多個協程(coroutines)可能會在同 1 個執行緒中執行,因此多個 coroutines 也可能有互相影響的情況!所以有了 contextvars 模組,用以解決 coroutines 互相干擾的情況,將每個 coroutine 以 Context 切開,避免互相干擾!

Thread-local variables are insufficient for asynchronous tasks that execute concurrently in the same OS thread. Any context manager that saves and restores a context value using threading.local() will have its context values bleed to other code unexpectedly when used in async/await code.

Posted on  Sep 21, 2023  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 4 min read

howler.js 現代 Web 音訊/音源播放函式庫

要在網頁上放一段音樂可以透過 <audio> 標籤做到,不過要更進階的功能時, <audio> 標籤就顯得不足,例如 <audio> 不支援透過 XHR 的方式取得音訊,你得自己實作這項功能才行,

Posted on  Sep 20, 2023  by  Amo Chen  ‐ 1 min read

資訊安全心法 — 最小權限原則

2023 年 6 月,微軟發生 1 起資安事故,造成 38TB 的資料暴露在網路上,這 38TB 的資料中還包含 2 位前員工的硬碟備份,其中含有密鑰、密碼、3 萬則通訊軟體(Tea

Posted on  Sep 19, 2023  by  Amo Chen  ‐ 2 min read

Python 套件推薦 - rustimport 給你的 Python 一對翅膀

不可否認 Python 以其優異的生態系與社群資源為開發帶來速度優勢。

不過每個應用都有效率極限, Python 當然也不例外,而且 Python 天生比起 JavaScript, Java 等語言更容易遇到效能瓶頸,這時候通常有 3 種選擇:

  1. 改用效率較好的寫法或套件
  2. 部分功能/元件改用別的語言實作
  3. 全部用別的語言實作

選項 1 是最簡單的,只要能夠找到更快的寫法或者更好的套件,就能夠緩解問題,再撐一陣子;選項 3 則是最困難的,要有足夠的時間以及負責人的支持之下,才有可能進行,畢竟所有的功能都必須改寫之外,測試也是需要全部重新來過,更何況通常公司專案都有時程壓力,選項 3 通常都是難以說服高層的選項;至於選項 2 則是折衷選項,建議選項 1 已經無法解決問題時採用,目前很多 Python 套件為了效率也都會採用選項 2 的做法,例如 orjson 就是以 Rust 語言實作的 JSON parser 。

目前 Python 與 Rust 的介接主要靠 PyO3 , 不過步驟稍微複雜一些,本文將介紹如何透過 rustimport 套件,極度簡化介接 Python 與 Rust 的方法,讓開發 Python 擴充套件可以更快樂、簡便!

Posted on  Sep 18, 2023  in  Python 模組/套件推薦 , Python 程式設計 - 高階  by  Amo Chen  ‐ 4 min read