Amo Chen

用 pre-commit 輕鬆提升程式碼品質

pre-commit 是一套相當方便的 Git pre-commit hooks 工具,除了內建不少好用的程式碼檢查工具之外,也同時支援 Python, Ruby, Swift, Go, Nodejs 等熱門程式語言,更能夠利用其框架(framework)針對自己的需求開發 pre-commit hooks 。

這麼好用的工具怎能不裝來使用呢!

一起利用 pre-commit 改善我們的程式碼品質吧!

Last updated on  Jul 20, 2024  in  開發工具  by  Amo Chen  ‐ 2 min read

SQLAlchemy pre-ping 機制

Connection Pool 是資料庫連線管理的機制,用來節省資料庫連線的成本,達到較高的資源利用效益。 Connection Pool 會事先與資料庫一次建立多個連線(connection),並維持住這些連線,每當應用程式(Application)需要操作資料庫時,就會從 Connection Pool 中提供(checkout)連線給應用程式使用。

但是資料庫連線也有斷線的可能,那麼要如何確保從 Connection Pool 取得的連線是可用的呢?

其中一種確定連線可用的機制就是 Pre-ping 。

本文就來談談 Pre-ping 與 SQLAlchemy 的 Pre-ping 如何設定。

Posted on  Jun 5, 2019  in  Python 模組/套件推薦  by  Amo Chen  ‐ 2 min read

Flask 整合 Celery

提到 Python 非同步(asynchronous)工作通常都會想到 Celery ,而 Web-based 應用程式也經常會將耗時的要求利用非同步的方式完成,所以 Django, Flask 等 Web framework 也幾乎都會整合 Celery 。

其中 Flask 的 Celery 相關套件相對鮮少維護,因此不建議利用 Flask Celery 套件整合 Celery 。

所幸用 Flask 整合 Celery 並非難事,本文將紀錄如何不利用 Flask 套件的情況下整合 Celery 。

Posted on  Jun 1, 2019  in  Flask  by  Amo Chen  ‐ 2 min read

淺談 SQLAlchemy Relationship Lazy Loading

SQLAlchemy ORM(Object-Relational Mapping)利用 relationship() 將多個 Model 關聯在一起,讓我們直接用存取屬性方式,直接就能夠使用被關聯的 model ,使用起來十分方便。

但是 SQLAlchemy ORM 的 relationship() 預設使用一種稱為 lazy loding 的技術,如果不了解其原理的話,很容易會有 n+1 query 的問題。

本文將簡單地談談 SQLAlchemy relationship()

Posted on  Jun 1, 2019  in  Python 模組/套件推薦  by  Amo Chen  ‐ 3 min read

調整 VSCode 檔案總管縮排(indent)改善工作效率

VSCode(Visual Studio Code) 預設的檔案總管縮排是 8 像素(pixel),在專案檔案與資料夾眾多的情況下,很容易感到困惑,很難馬上找到想開啟的檔案(當然也可以用 Command + P 快速一些)。

所幸 VSCode 有提供選項能夠設定,調整完之後,不僅看起來舒爽,工作效率也增加了!

Posted on  May 12, 2019  in  VS Code  by  Amo Chen  ‐ 1 min read

Python Redis 發佈(publish) / 訂閱(subscribe) 範例

Redis 有個 Pub/Sub 的功能,簡單來說,就是可以發佈(publish)消息或者訂閱(subscribe)消息的功能。訂閱方跟發佈消息(message)方,都是透過所謂的 Channel 傳遞與接受訊息。

相較於選擇 RabbitMQ 這種重量級的 message broker, 如果是一些簡單的應用(Application) 其實也可以考慮選擇利用 Redis 的 Pub/Sub 達到訊息傳遞的目的。

本文簡單紀錄如何在 Python 中使用 Redis 的 Pub/Sub 。

Posted on  Apr 26, 2019  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 2 min read

Flask 整合 Google 登入(Google Sign-In)

隨著 Gmail 與 G Suite 的普及,越來越多人擁有 Google 的帳號,因此現代應用程式在整合登入服務時,支援使用 Google 帳號的進行登入也很重要,本篇記錄如何用 Flask 整合 Google Sign-In 。

Posted on  Apr 20, 2019  in  Flask  by  Amo Chen  ‐ 3 min read

用 Bandit 靜態掃描工具,掃描 Python 專案中的安全性問題

這陣子看了 10 common security gotchas in Python and how to avoid them , 該文章主要介紹幾種撰寫 Python 程式時需注意的安全問題,例如處理來自外部的 XML, YAML 檔案等可能會面臨的安全性問題,相當值得一讀,保證精彩。

該文的最後也介紹一款 Python 的靜態掃描工具 Bandit , 幫助我們找出程式內可能的漏洞或問題。

Last updated on  Apr 16, 2024  in  Python 模組/套件推薦 , Python 資訊安全  by  Amo Chen  ‐ 2 min read