跳至主要内容

PHP 容器化應用

· 閱讀時間約 8 分鐘
Vincent Chi
Software Enineer, Backend

容器化(Containerization),這是一個由 Docker 公司所發揚光大的一種技術,它能夠很好地封裝應用程式與所需函式庫,而且通常有著比 虛擬化(Virtualization) 更高的效能。

一般來說,編譯式語言都很容易被容器化,例如 C/C++ 或 Golang,這是因為只需要在容器中設定好相依函式庫(通常是指動態函式庫),其編譯出的執行檔就可以直接在容器中運行。

這對 PHP 這類直譯式語就不是個好消息,其運行環境往往受制於 Apache PHP Module 或 PHP-FPM,再加上現代 PHP 往往會整合 Composer 進行相依性套件管理,這使得其處境更加雪上加霜。

備註

Python 或 Nodejs 這類直譯式語言,往往也會藉助一些協定(例如 Python 依賴的 WSGIASGI)或工具(例如 PM2Forever)來佈署。

Rosetta.ai PHP 面試實作題解析

· 閱讀時間約 7 分鐘
Vincent Chi
Software Enineer, Backend

七月中旬,我離開了 Rosetta.ai

作為最後幾份工作,我與同事們一起設計了一系列的 PHP 軟體工程師(後端)的題目。其中,實作題的設計是由我所主導,而我個人認為它是我設計過最優秀的題目。

因為該題目已獲公司主管同意已經公佈在 PTT 的 Soft_job 版上,所以這邊寫下當時我設計題目的理念與解析。

備註

註:雖然 PTT 的討論串到最後演變成薪資之爭模糊焦點有些可惜,不過這並不妨礙這份題目本身的設計。

在 VSeeFace 中使用 VRChat 模型

· 閱讀時間約 4 分鐘
Vincent Chi
Software Enineer, Backend

最近有嘗試著在 Twitch 上開直播,想說如果能夠讓 Zeffie(我在 VRChat 中所使用的角色形象)在直播時使用就好了。

經過一番搜索,我鎖定了 VSeeFace 這套軟體,並且搭配 iFacialMocap 做到表情捕捉。

也就是說,需要解決的問題就是:如何讓 VSeeFace 使用 VRChat 相容的 3D 模型

為 BOOTH 購買的 VRChat 模型改顏色

· 閱讀時間約 4 分鐘
Vincent Chi
Software Enineer, Backend

最近熱衷於玩 VRChat,在試用過多個不同的 Furry 模型之後,我最後選擇了 Zeffie ゼフィー 作為基礎模板。

有鑑於大部份的玩家都會在購買模型之後改變顏色或添增一些圖騰,以更加符合自身的設定,所以我也嘗試著自行修改:

改造前 改造後

本次的操作皆以這個模型為範例,理論上流程是差不多的,但可能在提供的東西上會有些差異

在 Laravel 中使用 Kratos 認證

· 閱讀時間約 6 分鐘
Vincent Chi
Software Enineer, Backend

Laravel 有著優秀的預定義認證(Authentication)功能,讓開發者不必費心在重複製作用戶註冊、登入、登出等功能。

無論是早期的 laravel/ui 還是 laravel/fortify 都提供了安全、完整且方便的解決方案。

Kratos 是由 Ory Corp 所提供的開源認證解決方案,藉由設定檔的方式可以靈活設計認證模型(例如帳號密碼、第三方社群或 WebAuth 等 passwordless 的形式)

Laravel 環境設定

· 閱讀時間約 8 分鐘
Vincent Chi
Software Enineer, Backend

在 2021 年中旬,我曾經寫過一篇 Laravel 環境設定,不過因為工具上有些許變化,所以在 2022 年末將其重新整理一遍。

事先聲明,本文中所寫的環境設計題專門為了我自己的工作流而打造。如果不適合你,那你是對的,請儘管改成適合你的工作流。

PHP 的字串比較

· 閱讀時間約 4 分鐘
Vincent Chi
Software Enineer, Backend

蛤?PHP 字串比較還要特別寫一篇文章嗎?

會開始研究這個問題,主要是因為在 Laravel Fortify 中使用 hash_equals() 這個函式比對字串。

Laravel Queue 失效研究

· 閱讀時間約 11 分鐘
Vincent Chi
Software Enineer, Backend

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

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

在 FastAPI 中測試檔案上傳

· 閱讀時間約 4 分鐘
Vincent Chi
Software Enineer, Backend

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 進行自動化文件生成的功能,這能夠很大程度上減少撰寫文件的工作量。