跳至主要内容

· 閱讀時間約 15 分鐘
Vincent Chi

網路上有大量的文章探討如何使用 Laravel Queue,可惜的是,它們通常就給個 Hello World 式的範例,並未深入探討。

本篇文章會從 Laravel Queue 的實際行為上進行分析,並且著重於「失敗」的案例。

· 閱讀時間約 5 分鐘
Vincent Chi

FastAPI 是一款基於 Starlette 的 Web 框架,其在 API 的開發體驗令人驚豔。

註:FastAPI 官方宣稱,得益於 Starlette 及 Pydantic,它的效能甚至能夠與 Go 比肩;然而根據 TechEmpower Web Framework Benchmarks 在 2022 年 7 月 19 日的測試,其效能約為 278 及 279 名,事實上以效能而言它位於中下游的水準。

與 Laravel 這類包山包海的全能型框架不同,FastAPI 選擇了一條「微」框架的道路,它更像是 Gin(Go) 的設計:輕量、精簡,並且在有需要時讓開發者自行安裝。這種設計很大程度給予開發者自由,甚至連資料夾結構都沒有官方預設(如果願意的話,甚至可以只靠一個 app.pymain.py 就建構起整個 API 服務)。

然而最讓我感到驚豔的,非屬自動 API 文件生成功能。眾所周知,工程師是種「最討厭別人不寫文件,但又不喜歡自己寫文件」的生物,FastAPI 內建由 Pydantic Model 進行自動化文件生成的功能,這能夠很大程度上減少撰寫文件的工作量。

· 閱讀時間約 8 分鐘
Vincent Chi

眾所周知,在 PHP 中 parse_url() 這個函式遲遲未支援 UTF-8,這導致一些英文、數字以外的 Host, Path, Query 及 Fragment 都會解析錯誤。

(psysh) >> parse_url('https://中文.台灣/你好嗎?我=很好&大家都很好#你呢?')
=> [
"scheme" => "https",
"host" => b"中æ__.å_°ç_£",
"path" => b"/ä½ å¥½å__",
"query" => b"æ__=å¾_好&大家é_½å¾_好",
"fragment" => b"ä½ å_¢ï¼_",
]

這個問題直到 PHP 8.1 仍未見改善,這也是促使我寫下本文的動機。

· 閱讀時間約 11 分鐘
Vincent Chi

Redis 在處理字串資料時,另外實現了一個名為 SDS (Simple Dynamic String)的資料結構。

· 閱讀時間約 6 分鐘
Vincent Chi

作為休閒活動,我偶爾會在 OGS 上跟人下棋。不過前陣子因為家裡網路不太穩定,所以索性就自己弄了一套單機的下棋環境。

儘管這幾年因為 AlphaGo 的關係,圍棋這項歷久不衰的競技又再一次被推向話題討論的浪尖,然而實際上它的 Open Source 資源是相對稀缺的。

註:圍棋其實有不少付費軟體,但實際用起來很多都效果不佳,有些 AI 對奕的實力甚至比數十年前的 GNU Go 還差。

· 閱讀時間約 7 分鐘
Vincent Chi

Google reCAPTCHA 是一個人類行為驗證機制,用於阻止爬蟲或類似的機器行為。

  • v1 (2007):基於驗證碼
  • v2 (2014):I'm not a robot 勾選框
  • v3 (2018):對當前用戶進行評分
  • Enterprise (2020):與 v3 類似,但加入更多功能(如密碼洩露檢測)

就目前為止,除了 Google 官方的 SDK 之外,幾乎找不到針對 reCAPTCHA enterprise 實作的 PHP 套件(大多都是 reCAPTCHA v2 及 v3)。

· 閱讀時間約 5 分鐘
Vincent Chi

隨著 MySQL 5.7 加入對 JSON 格式的原生支援,開始有許多開發團隊把 RDBMS 當 NoSQL 使用。本篇文章對於效能議題暫且擱置,顯而易見地,越自由的格式往往會帶來更沉重的維護成本。

舉例來說,目前資料庫中可能存在以下型式的資料

{
"age": 16,
"avatar": "avatars/avatar.png"
}

然而可能因為系統改版,需要更精準地計算用戶年齡,所以將 age 欄位改為 birth

{
"birth": "2002-01-01",
"avatar": "avatars/avatar.png"
}

· 閱讀時間約 10 分鐘
Vincent Chi

Portaler Zone 是一款為 Albion Online 打造的社群工具,其目的是共享社群間的地圖資訊。

註:事實上我也不知道這到底是啥,這次單純是因為有個人委託我去幫他建構這個開源專案。因為前前後後遇到的坑有點多,所以這邊做個筆記。說明上主要以自己理解為主,可能會有不正確的地方,還請各位玩家多多包涵。