在 AI 時代寫程式的一些反思 Posted on 2026-01-18 在最近準備公司內部分享的過程中,我也順勢回顧了自己這段時間使用各種 AI 工具的經驗。整理也有發現,這不只是工具的變化,而是一整個軟體開發工作型態的轉變。 Read more »
在 Docker 中安裝被下架的 Apache 版本 Posted on 2025-08-24 前言在最近舊專案部署過程中,遇到了一個問題:原本在 Dockerfile 裡透過 apt install 指定安裝特定版本的 Apache,一直以來都能正常運作,但某天突然失效,系統回報找不到該版本。深入追查後,才發現 指定的 Apache 版本已經從官方套件庫中下架 因為是舊專案,不太能安排時間有效去處理升級或版本調整,所以這裡採用一個簡單的方式:透過 Debian Snapshot 下載 .deb 檔,並放到自己管理的空間,再透過 apt install 指定路徑安裝。這樣可以避免未來套件庫再次下架導致部署失敗 Read more »
使用 AI 協助寫測試 Posted on 2025-06-22 前言使用 AI 協助寫測試:讓測試變簡單,品質與效率一起提升 在軟體開發中,測試是確保品質與維護性的關鍵,但許多工程師常因不熟悉語法、覺得麻煩或缺乏動力而遲遲不願開始。隨著 AI 工具(如 GitHub Copilot)的出現,這些問題正逐漸被解決 Read more »
使用 TypeScript 建立自己的 MCP Server Posted on 2025-05-04 前言近來 MCP 和各種 AI 工具快速發展,為了更了解 MCP 是什麼,決定動手實作一個簡單的 MCP Server。這篇文章算是自己的快速紀錄,一方面釐清 MCP 的基本概念,另一方面整理一下如何用 TypeScript 實際建立並測試 MCP Server,方便未來回顧使用。 Read more »
JetBrains 系列 IDE 2025.1 將 Modal Commit 改為獨立插件的變更記錄 Posted on 2025-04-23 前言平常在使用 JetBrains 系列 IDE(如 PhpStorm)時,習慣使用 Modal Commit 的方式進行 Git 提交,因為彈出視窗的方式能讓我更專注地編寫 Commit message 並挑選要提交的檔案內容,但在升級到 2025.1 版本後,發現這個功能突然消失了。 Read more »
WordPress 效能最佳化:Apache Prefork 與 Event MPM 實測比較 Posted on 2025-04-13 前言最近在接手一個舊的 WordPress 專案後,發現網站在使用上有些效能瓶頸。由於原本的專案是使用 Apache 作為 Web Server,為了確保最高的相容性,決定延續使用 Apache 架構,調整設定達到最大的效能 這篇文章記錄了過程中透過官方提供的 Docker 映像檔,測試 Apache 的 Prefork 與 Event 模式在 WordPress 上的表現,了解如何選擇適合的 Apache 設定 Read more »
使用 PHP Guzzle 的 Pool 提升請求效能 Posted on 2025-03-29 前言介紹如何使用 PHP 中的 Guzzle HTTP 客戶端來處理大量 HTTP 請求,透過使用 Pool 功能提升整體請求效能,並說明 Pool 的概念、實際使用方法,以及如何搭配 Custom Key 更有效地管理請求 Read more »
Postman 中設定自動處理 Laravel CSRF Token 的方法 Posted on 2025-03-29 前言在使用 Laravel 框架進行 API 開發時,通常會遇到 CSRF 防護的需求。而透過 Postman 來測試這類 API 時,若未妥善處理 CSRF Token,可能導致請求被拒絕。接下來將介紹如何在 Postman 中設定自動處理 CSRF Token,確保測試過程順暢 Read more »
使用 Relay 解決 Redis 快取重複取用的效能問題 Posted on 2025-03-23 前言在 PHP 專案中使用 Redis 快取時,可能會面臨 I/O 次數過多而導致效能降低的問題。接下來會介紹如何透過 Relay 機制有效地解決這個問題。 Read more »
Redis 的外部鍵排序 Posted on 2024-10-20 前言在使用 Redis 進行資料管理時,排序是一個很常見的操作。Redis 的 SORT 命令可以用來對列表(list)、集合(set)或有序集合(sorted set)中的元素進行排序。但是有時候,你的資料需要依賴其他的值來排序,這種情況下,我們就需要使用外部鍵來幫助完成排序。 Read more »