Amo Chen

程式設計師斜槓之道 — 聯盟行銷

這篇要介紹的是程式設計師增加收入的其中一種方法——「聯盟行銷」 不知道大家知不知道冒險者公會?(誤 聯盟行銷就有點像行銷界裡的冒險者公會,公會看

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

Now-Next-Later 產品路線圖

你是否日復一日被甘特圖上的 timeline 以及 due date 追著跑?今年還在做去年安排好但是延期的工作? 你是否曾經多次疑問為什麼要浪費時間做這個功能?就因為老闆說想

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

Python 的 typing.Protocol 怎麼使用?

Python 3.8 之後 typing 模組 新增 1 個 typing.Protocol 的 class 可以使用,這個 class 很適合用來給一些有實作特定方法的 class 們做 type annotation 。

舉個常見的交通工具作為例子,假設我們有 1 個函數接受任何有實作 move() 方法的 instance:

def move(x):
    x.move()

這時候可以用 typing.Protocol 將參數 x 加上 1 個 type hint, 讓彼此知道此處不管型別,只管是否有實作 move() 方法:

from typing import Protocol

class Movable(Protocol):
    def move(self):
        ...

def move(x: Movable):
    x.move()

加上 typing.Protocol 是否看起來清晰很多?

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

在 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