PyCon Taiwan 2021 與會隨筆

PyCon Taiwan 2021:大會之後會將影片上傳至 Youtube

Day 1

成功地測試失敗

  • 需求是要修理某個折扣的邏輯,但講者發現 api 傳來的資料是 list,猜測可能會傳過來不只一組折扣,所以用「迭代 list 中所有項目」的方式處理。上線後發現,果然沒猜錯,會傳過來不只一組折扣。如果當時沒有迭代整個 list,而只處理 list[0] 這組折扣,那就又要修 bug 了。

使用 Pytest 進行單元測試

  • python 內建 unitest 模組。pytest 套件支援 unitest 的 test case,在使用上 pytest 的語法比較方便,功能也比較強大。

  • 參考書:The Art of Unit Testing

  • 出口驗證有三種:

    • 檢查函式的 output

    • 檢查函式的 private property。若沒有 getter 可存取該 property,會比較麻煩一點。不過 python 沒有真正的 private property,處理起來比較容易。

    • 函式的 return 就是呼叫外部 api。此時可以模擬外部 api,並記錄函式如何呼叫 api,這樣就能檢查呼叫的方式是否正確。

  • 以前沒有想過「exception也要測試」這件事

  • 原來測試碼覆蓋率,是有套件可以幫我們計算的。

Lightning Talks

  • Patrick:用 Python 解決 iOS 14 之亂所帶來的數位廣告問題

    塔圖科技針對「第三方 cookie 停用,網站需要在後端把資料送去給 FB」而推出了一個解決方案,讓網站不需要更動後端的程式碼,就可以送資料給 FB。我目前主要是學習網站後端的技能,這個消息透露了,第三方 cookie 停用,替代方案可能會需要由網站的後端工程師完成。

  • DennySORA:挖掘 asyncio 時的 try, except, else 與 finally 的小發現

    原來 try-except-finally ,在不同的地方 return,會出現各種意料之外的效果。嚇得我立刻去搜尋到這篇文章 Python: 浅析 return 和 finally 共同挖的坑。雖然看得似懂非懂,但感覺 dis 這個套件好厲害啊,如果哪天需要研究編譯器(或直譯器?),或許用得上?

    之前學 javascript 時學到非同步語法,但是學習 flask 期間,似乎都沒用到非同步語法,有點好奇 python 版的非同步語法會是什麼。後來偶然瞥見有個東西叫 asyncio,但還沒有研究過,今天聽這個閃電秀,才知道其中的眉角不少啊

Day 2

爬蟲與反爬蟲乾貨

  • 如果發現某個網頁有很多爬蟲的流量,其實可以考慮將資訊做成付費 api,而不是直接跟爬蟲槓上,做出許多防堵爬蟲的機制。

  • 爬蟲的兩個方式:request(優點:不會真的去載入圖片等等資源)、模擬使用者行為的 selenium

  • 反爬蟲的機制:網頁加上空白 div、動態 class name、登入才能取用資源、圖片驗證碼、圖片驗證或算數驗證

  • 爬蟲對付動態 class name:xpath

  • 爬蟲對付圖片驗證碼:tesseract、機器學習

使用 Python 實現可即時互動用的遠端影音傳輸

  • HLS:將影像切成小封包,用 cdn 傳送,可支援大量人數同時上線,但會有 30 秒至 3 分鐘的延遲。

    WebRTC:拓墣網路,能同時上線的人數有限,延遲時間較 HLS 短。

    Peer to peer communication。不同私有網域裡的兩台電腦如何互傳訊息:Network Address Translator(NAT)。

從 Flask 邁向 FastAPI 的心路歷程

  • multi-thread 的 GIL 限制 in CPU bound(不過用非同步,不一定能改善運算時間,並且要留意 race condition)

  • WSGI:同步溝通協議規範(Flask)

    ASGI:非同步溝通協議規範(FastAPI)

  • 定義路由

    FastAPI:method.route

    FlaskRESTful:以 Resource 為單位建立 route

  • api 文件

    FastAPI:自動生成文件

    FlaskRESTful:可使用 Flask-RestPlus

  • 檢查 input/output

    FastAPI:用 type hits 和 pydantic 檢查,比較靈活

    Flask:可使用 marshmallow

    FlaskRESTful:可以在 Resource 裡做基本檢查,靈活度低

嫌 Django 的 Validator 不好用 !? 不如自幹一個

  • Django Validator 的缺點

    • 跟 model、form 綁在一起

    • 無法檢查多個欄位之間的平行關係。例如 A 欄位和 B 欄位,要嘛同時有值,要嘛同時沒有值;A、B、C 欄位其中一個有值時,D 欄位可以有值

    • validator 的行為不直覺。例如,model 的 validator 要自己手動呼叫,而且要設定某個參數欄位是 true,這樣檢查沒通過時才會拋出例外。沒有手動呼叫的話,錯誤的資料,不會觸發任何提醒就直接存進資料庫。

  • 講者 Kilik Kuo 自製的 data-spec-validator

Open space

Lightning Talks

Comments

Popular posts from this blog

Alpha Camp 全端開發課程學習心得

在 javascript 用 regular expression 為金額加上千位數分隔符號

shop_platform - sqlalchemy.exc.TimeoutError