博客 / 列表

蘇琢玉 - 一次受限環境下的 MySQL 數據導出與“可交付化”實踐

平時其實很少會專門寫數據庫導出的事情。 這種活本身並不複雜,零零散散也做過很多次,大多數時候也不會留下什麼記錄。 這一次之所以單獨記下來,主要還是因為當時遇到了一些​比較具體、也比較現實的限制條件: 我需要在比較短的時間裏接手一個並不熟悉的 MySQL 實例,把裏面的數據整理出來,而且這些數據最終並不是只給工程師看。 從一開始就意識到的一個問題 在動手之前,其實有一件事情我是比較明確的: ​

MySQL , php , 導出 , 數據庫

蘇琢玉 - 用 Go 像寫 Web 一樣做桌面應用:完全離線的手機號歸屬地查詢工具

前陣子我做了一個小工具:一個完全離線的手機號歸屬地查詢桌面應用 功能本身其實並不複雜,但在這個過程中,我反而重新認識了一次 用 Go 做桌面應用,其實可以非常像在寫一個 Web 項目。 這篇文章不打算講手機號歸屬地怎麼查(那真的很簡單,如果你需要直接到文章底部倉庫下載我做好的工具就好),而是想分享一下: 為什麼我會選擇用 Go + Wails 做成桌面應用,以及這個過程裏的一些實際感受。 一個並

手機號驗證 , node.js , go , 桌面應用

蘇琢玉 - 用 PHP 解析 Protobuf 的坑與解法

前陣子做的一個直播彈幕的機器人,其中有一部分上游數據是通過 Protobuf 返回的。幾個朋友問我怎麼處理,但我發現大家對「PHP 解析 Protobuf」這件事多少有點迷糊。確實,PHP 處理 Protobuf 的資料不多,而且踩坑成本不算低。 這篇文章不打算科普什麼,也沒有推薦任何技術棧的意思,就是把我自己摸索的過程整理出來,給遇到類似問題的人一個參考。 Protobuf 是什麼 很多人第一

protobuf , php

蘇琢玉 - MineContext:我第一次感覺 AI 真正在“主動幫我管理生活”

我現在一天基本離不開 AI 了。 不是那種“把提示詞寫得像煉丹”式的依賴,而是很平常的那種: 我寫代碼,它在旁邊檢查。 我整理邏輯,它幫我捋一遍。 我寫文檔,它補補關鍵字、給點建議。 整個過程更像是 我在人前台寫,它在後台兜底。 它不是替我工作,它是把我的工作做得更圓滑、更完整。 但説實話,我過去對“AI 助理”的期待真的不高。 因為不管助理多聰明,你不給輸入,它就是

github , 開源軟件 , aigc

蘇琢玉 - 寫博客寫代碼都適用:推完就自動部署的 GitHub Webhook 工具

前陣子,我看到有人在吐槽自己寫博客很麻煩——寫麻煩、託管麻煩,推完 GitHub 之後還得去服務器上手動拉代碼部署。雖然我以前在做類似的東西,但他這麼一提讓我想起這件事,我就想着,不如把自己一直隨便用的小玩意整理一下,順便分享給大家。 於是就有了這個小項目:一個輕量級的 GitHub Webhook Listener,用 Go 寫的,可以幫你在推送代碼後自動觸發部署。 什麼是 Webhook W

自動部署 , github , 自動化部署 , 博客

蘇琢玉 - 自動化我的友鏈申請腳本:讓孤島互相連起來

友鏈這東西,説出來有點浪漫。 2025 年了,個人博客基本沒有什麼流量,更多像是一座座散落在海上的小島。 偶爾有海風吹過,但大多數時候,就是悄悄發光、自娛自樂。 而友鏈……就像是在這些小島之間鋪上一條條細細的橋。 你看不到橋的盡頭,但知道那裏至少還有一個同樣孤獨、同樣固執的人。 為什麼拖了這麼久才開放友鏈申請? 剛寫博客那陣子,我其實沒太敢申請友鏈。不是因為不想被發現,而是因為我真的

node.js , 知識 , 博客 , 前端

蘇琢玉 - 被問性能後,我封裝了這個 PHP 錯誤上報工具

最近我把自己常用的一套錯誤上報邏輯封裝成了一個 Composer 包,叫 ​hejunjie/lazylog​。 功能很簡單也很實用:安全地寫本地日誌 + 把異常信息上報到遠端(支持同步/異步) 。本文講講為什麼我要做這個庫、實現思路、在不同運行環境下如何選擇(以及我推薦的優化方案)。 起因:為啥要做這個工具? 先講個背景。之前我寫了一個 Go 項目 —— oh-shit-logger,目

composer , php

蘇琢玉 - 寫博客怕內容被偷?SSR 實現安全加密的原理講解

很多博主都有這樣的困擾:一些文章不希望所有人都能直接看到,而是想設置一個“問題驗證”,答對才能解鎖。但如果你用的是純靜態博客,想實現這個功能卻發現困難重重——文章內容在 HTML 裏早就暴露了,CSS 或 JS 根本藏不住。 最近我在用 Astro 做博客時,嘗試用 SSR(服務端渲染) 來解決這個問題。本文不講具體代碼,而是分享原理和思路,讓你理解為什麼 SSR 可以安全地保護文章內容,同時還能

astro , 博客 , 前端

蘇琢玉 - 從零開始創建屬於自己的 Composer 庫

Composer 是 PHP 領域最流行的依賴管理工具,它使得管理項目依賴變得輕鬆簡單。然而,除了使用現有的包,我們也可以創建和發佈屬於自己的 Composer 包。 在這篇文章中,我將帶你一步一步完成從零開始創建併發佈一個自己的 Composer 包的流程。 創建項目 在你的工作目錄下創建一個新的文件夾作為你的包: mkdir project cd project 初始化 Composer

composer , php

蘇琢玉 - 訂單號老是撞車?我寫了個通用 PHP ID 生成器

在日常開發裏,我們經常會遇到這種情況: 需要給訂單生成唯一編號; 想給日誌或者資源加個標識; 或者需要一個不會重複的 ID,用作數據庫主鍵。 一開始,我也用過 time() 拼接隨機數、或者 uniqid()。 這些方案在小項目裏夠用,但一旦放到併發稍微高點的業務裏,就會出現各種問題: ​time() 很容易撞車(同一毫秒可能生成多個); ​uniqid() 看上去獨特,其實

composer , php

蘇琢玉 - 判斷邏輯越寫越亂,我乾脆做了個自己的規則引擎

不知道你有沒有這種感覺:一個業務功能看起來很簡單,但判斷條件卻一大堆。 什麼用户狀態、配置項、商品屬性、會員等級…… 一大堆 if​ / else​ 交織在一起,越寫越亂,稍微改一個邏輯就要擔心影響其他地方。 我之前就遇到這樣的情況,一開始還能忍,後來乾脆決定:不如自己寫一個簡單的規則引擎,專門用來處理這些組合判斷。 於是就有了這個項目:hejunjie/simple-rule-eng

composer , php

蘇琢玉 - 如何優雅地處理多種電商優惠規則?我用 PHP 封裝了一個 Promotion Engine

做電商項目時,經常要處理各種各樣的優惠活動:滿減、打折、VIP 專屬優惠、第二件特價、階梯優惠…… 這些單獨實現起來都不復雜,但當你把它們放在一起,就變得混亂起來了。 我自己在工作裏寫過不少類似的邏輯,每次做法差不多:if/else、switch、各種判斷混在一起,過幾個月回頭看代碼,根本不想維護。 於是我乾脆寫了一個小庫,封裝了常見的優惠計算邏輯,讓這件事更清晰,也能隨時在別的項目裏

composer , php

蘇琢玉 - 構建一個簡潔優雅的 PHP 參數驗證器 —— php-schema-validator

在日常開發中,參數校驗是繞不過的一道坎。我們常常需要確保用户傳入的數據符合預期格式,比如必填字段、數據類型、最大長度、郵箱格式等等。雖然許多 PHP 框架都內置了驗證器,但在開發輕量服務、非框架項目,或需要在業務中後端進行結構化數據校驗時,我總覺得現有方案不夠靈活、冗餘較多。 於是,我動手寫了一個開箱即用、易擴展、輕量級的參數驗證器:php-schema-validator 為什麼要造這個輪子?

composer , php

蘇琢玉 - PHP 項目裏,哪些功能讓你一次次「重複造輪子」

寫 PHP 第 7 年了,我發現有些功能簡直像韭菜——項目一換就得重新割一遍。 手機號歸屬地、參數校驗、唯一 ID、地址解析……是不是你也寫過不止一次? 有些功能不難,但就是麻煩: 做個小商城,要寫個 促銷規則引擎 做個 API,就得來一遍 參數驗證器 做用户註冊登錄,要寫個 TOTP 動態口令 做支付結算,要造個 唯一 ID 生成器 這些功能並不是多複雜的“高大上算法”,但就是又常見

composer , php

蘇琢玉 - 從 Hexo 到 Astro:重構我的個人博客

寫博客這件事,老實説,現在可能不太流行了,流量也未必多,但對我來説,有沒有博客是兩回事。 過去幾年,我一直用 Hexo 搭建和維護我的博客,主題豐富、社區活躍,用得也很開心。 老博客: 不過,隨着我對博客的需求越來越多,我發現 Hexo 在一些定製化操作上有些侷限。於是,我決定嘗試用 Astro 來重構我的博客。 新博客: 關於博客這件事 我其實並不指望有

astro , hexo , 博客

蘇琢玉 - 微信小程序開發全流程:從註冊到上線的完整指南

最近在刷小紅書時,看到不少人在分享自己的微信小程序如何靠廣告月入上萬,甚至更多。 這種説法不能説不真實,只能説肯定不是這麼簡單的事情。畢竟廣告收入的多少,歸根結底還是取決於用户量,不可能隨便做個小程序,就能吸引大量用户來看廣告。 不過,完全説不可能也不太準確,畢竟人活着總得有夢想。而且其實做一個簡單的小程序成本並不高,尤其得益於雲開發。小程序後期沒有域名、服務器等額外的軟成本,所有內容都可以部署在

微信小程序 , 微信開發

蘇琢玉 - 用裝飾器模式實現多層緩存:讓PHP應用更快更穩

為什麼要做多層緩存? 想象這樣一個場景:你的PHP應用每次訪問數據庫都要花1秒鐘,用户抱怨頁面加載太慢。這時候你會想到加緩存——但只用一層緩存夠嗎? 比如: 內存緩存雖然快,但重啓服務數據就沒了 Redis緩存能持久化,但網絡請求也有開銷 文件緩存最可靠,但磁盤讀寫速度有限 多層緩存的思路很簡單: 把最快的緩存放在最前面,就像快遞櫃一樣—— 優先從內存取(速度最快) 內存沒有

高併發 , php , 緩存 , 緩存設計

蘇琢玉 - MySQL 備份 Shell 腳本:支持遠程同步與阿里雲 OSS 備份

之前我寫過一個臨時的 MySQL 備份腳本,主要是為了應急使用,功能比較簡單。現在有時間了,我重新整理了一下,讓它不僅能自動備份數據庫,還支持遠程服務器同步和上傳到阿里雲 OSS,這樣即使本地備份丟失,數據也不會完全丟失。 現在,這個腳本已經發布到 GitHub,地址在這裏: 👉 GitHub 倉庫 - mysql-backup-shell 這個腳本做了什麼? 這個腳本的核心功能包括:

MySQL , shell

蘇琢玉 - 我寫了個腳本,統計了我自己寫了多少行代碼(純圖一樂)

為什麼要做這件事? 老實説,我平時不太在意自己到底寫了多少行代碼。 一方面是因為這東西真沒啥太大參考價值,想刷行數的話,複製粘貼個幾千行都不是事;另一方面也是因為誰都知道:代碼質量和行數沒什麼關係。 但有時候,好奇心就是擋不住。 就像你聽到別人講“十萬小時定律”的時候,會突然想: “哎,那我到底練習了多久?” 我寫代碼已經很多年了,也做了不少項目,大部分都丟在 GitHub 上沒怎麼管過。突

教程 , 知識 , shell

蘇琢玉 - RSA+AES 混合加密不復雜,但落地挺煩,我用 Vue+PHP 封裝成了兩個庫

在項目裏寫接口的時候,我有時候會希望再多一層保護。 雖然 HTTPS 已經能保證傳輸安全,但它解決的更多是「傳輸過程中不被竊聽/篡改」的問題。 而我還想順帶做到幾點: 防止接口被隨便模擬調用 就算數據包被截獲,也看不懂內容 就算有人拿着同一份請求去重放,服務端也能拒絕 這些需求其實挺常見的,但並不複雜,説白了就是一套 RSA+AES 混合加密。 經典的思路 原理本身沒什麼新

composer , vue.js , php , npm

蘇琢玉 - 作為 PHP 開發者,我第一次用 Go 寫了個桌面應用

我平時是做 PHP 的,工作裏基本上都是在寫 Web 應用。説實話,寫久了難免有點慣性思維:服務器、框架、數據庫、API、瀏覽器。 而這次,我做了點不一樣的東西 —— 一個用 Go 寫的財務管理桌面應用。 很多人可能會覺得奇怪:財務管理、記賬軟件,這不已經爛大街了嗎?隨便一搜一大堆,為什麼還要自己做一個? 我其實一開始也沒打算做什麼大而全的產品,而是因為一個很小的念頭:我想試試 Go 寫應用

node.js , php , go

蘇琢玉 - 再也不用翻一堆日誌!一鍵部署輕量級錯誤監控系統,幫你統一管理 PHP 報錯

維護多個項目的人,大概都明白那種感覺。 平時一切都很平靜,直到某天,甲方的一句“系統是不是出問題了?” 這時候才發現,問題早就埋在那裏了。 你登錄服務器,開始翻日誌、看 trace,一邊調試一邊回想昨天是不是又改了什麼。問題最終解決了,但那種被動的感覺始終在心裏。 我後來想: 這種被動,其實是可以被解決的。 有沒有可能在客户找上門之前,我就已經知道問題在哪,甚至提前修掉?

github , php , 運維 , go

蘇琢玉 - 一個小項目的記錄:PHP 分賬組件

最近整理了一個自己做的小項目——PHP Trade Splitter ,是一個交易/利潤分賬組件。今天想分享一下,也算是記錄自己的小成果,也順便展示一下技術思路。 為什麼會做這個包 説白了,就是因為工作/項目里老是碰到分賬邏輯: 平台抽成 作者收益 代理或渠道分潤 階梯獎勵 多級遞歸計算 以前都是直接寫死在業務裏,每次改需求都得重構,越改越心累。 於是我想:乾脆抽象出來,做一個通用

composer , php