工程師筆記

Wordpress Too Many 301 問題何解?

工程師筆記

Wordpress Too Many 301 問題何解?

今天遇到一個問題差點 網站掛掉。 第一次遇到,有點緊張,因為後台整個不正常。 嘗試著清除 Cloudflare Cache,無效。 為了找出哪個 plugin 作祟,把所有外掛逐一停用。最後外掛全停了,問題還在。 後來發現要清除的不是 Cloudflare 快取,而是瀏覽器的快取。 所以逐一開啟 js , css 使用 Command + Shift + R 強制刷新大法,把 301 變 200 最後把外掛都啟用回來,設定還跑掉。差點以為要重新設置佈景。 uagb 一直無法正常使用,把 Spectra,Starter Templates 這兩個裝回來才搞定。

By Mason Tang
n8n Merge 節點最常使用的 4 個功能,最後 1 個由爲強大

AI 自動化

n8n Merge 節點最常使用的 4 個功能,最後 1 個由爲強大

merge 節點是很強大的資料處理節點。以下介紹 4 個最常使用的功能。 範例是按照順序製作的,要從頭看到尾喔。 Append 把相似/相同結構的資料,連接在一起 今天你有多個相似結構資料,可能是來自不同來源,現在你要把他們連接在一起輸出,就使用 Append。 Position 按照順序結合在一起 使用 Combine 的 Position 將,對應順序的資料結合在一起。也是我最常使用的功能。 可以看到,fruit 都各自多對應一個 car。 Metching Field 搜尋相同欄位,結合在一起 不同來源,但具有相同欄位的資料,透過 Metching Field 把資料關聯起來。 可以看到,因為只有 Tesla 和 BMW ,Toyota 就被排除了。是因為使用的 Output Type,是

By Mason Tang
n8n用客製節點,自動執行區塊鏈轉賬

AI 自動化

n8n用客製節點,自動執行區塊鏈轉賬

你有沒有想過 存放在區塊鏈上的錢,能夠自動轉出!? 現在用 n8n 就能做到了 那要怎麼做呢? 首先假設這筆錢,不存放在交易所,不然直接用交易所的 API 就好了~ 而是持有私鑰的地址,有著一筆錢。 現在私鑰有了。什麼情況要轉帳呢? 最有可能是某個新聞消息。誰又中彈、誰被抓去關等等...... 我們可以假設是從 RSS 來的,因為新聞不只一筆,所以要逐筆處理。 然後我們可以透過 AI 去判斷是不是我們指定的相關新聞,例如:哪個政治人物怎樣。 透過 Switch 把相關事件,交給我們今天的主角「客製化的節點」。 製作客製化節點(Node) 要製作客製化節點,首先我們可以去 GitHub 把官方範例下載下來 https://github.com/n8n-io/n8n-nodes-starter 然後放到 n8n 的使用者目錄中。預設是在 ~/n8n,

By Mason Tang
VSCode 截圖神器 Easy CodeSnap

VS Code

VSCode 截圖神器 Easy CodeSnap

如果有在用 VSCode 和打技術 Blog ,可能會知道 CodeSnap 這款截圖美化工具 但你一搜尋,一定會看到超多複製品,原因是最原始的版本 2.6M 次下載的版本,早在 2021年就停止更新了。 後續各種複製品陸續更新、互相抄襲他們自己的功能。 這麼多款 CodeSnap,個人覺得最好用的是 Easy CodeSnap 相較其他變體,都有的 highlight 及增刪 highlight ,還多出 Windows/MacOS Style 的視窗供你選擇 背景顏色,可以在設定中輸入 CSS 顏色的語法,讓背景變成漸層或指定顏色

By Mason Tang

工程師筆記

忽略 git 已存在檔案的修改

忽略 git 已存在檔案的修改 有時很多檔案變動,但變動的都是不會上傳到 repository 的 config, 在 git status 或是 VSCode 就會看到一堆的已修改檔案。 並且無法透過 .gitignore 忽視掉它。 雖然放著也不會怎樣,但是看了就不舒服。還要經常給他 git stash。 這時就可以透過下面這指令,把檔案從變動中忽略。 git update-index --assume-unchanged $filepath 還原上一步 如果哪天真的要修改上傳,可以透過這行,把檔案從這狀態解除。 git update-index --no-assume-unchanged $filepath

By Mason Tang

工程師筆記

Golang 由兩個 chan 組成的鎖死

這是有一次在工作中發生的情況,當時 debug 很久。原來不是只有 Mutex 才會發生鎖死。 以下是一個涉及兩個 channel 的死鎖示例: 雙 Channel 死鎖示例 func main() { ch1 := make(chan int) ch2 := make(chan int) go func() { v := <-ch1 // 等待從 ch1 接收數據 ch2 <- v // 將接收到的數據發送到 ch2 }() ch1 <- <-ch2 // 主 goroutine 嘗試從 ch2 接收並發送到 ch1 } 這個程序會產生死鎖,原因如下:

By Mason Tang

工程師筆記

Golang 實作節流(Throttling)和防抖(Debouncing)

在 Golang 中實現節流和防抖功能與 JavaScript 中的實現思路類似,但需要利用 Golang 的特性來實現。 以下是 Golang 中節流和防抖的基本實現方法: 節流(Throttling) 節流的目的是限制函數在一定時間內只能執行一次。以下是一個基本的節流函數實現: func throttle(interval time.Duration, f func()) func() { var lastTime time.Time return func() { now := time.Now() if now.Sub(lastTime) >= interval { f() lastTime = now } } } 使用示例: throttledFunc := throttle(time.Second, func() { fmt.Println("

By Mason Tang

工程師筆記

Golang 神器 singleflight

什麼是 singleflight? singleflight 是 Go 語言中的一個包,用於抑制對同一資源的重複請求。它確保在同一時間只執行一次對特定資源的操作,而其他並發請求則等待並共享結果。 使用 singleflight 的步驟 1. 導入 singleflight 包: import "golang.org/x/sync/singleflight" 2. 創建一個 Group 對象: var g singleflight.Group 3. 使用 Do 方法執行函數: result, err, _ := g.Do("key", func() (interface{}, error) { // 執行實際操作 return "result&

By Mason Tang