https://www.gravatar.com/avatar/206912d6900c65386f24516df605c206?s=240&d=mp

Kourtney's Space

絕境長城之外:以 Firestore vector search 打造低成本、高效的雲端 RAG 應用

RAG(Retrieval Augmented Generation) 是一套 AI framework,能夠在不需要重新訓練 LLM 的前提下,讓開發者得以新增其他的外部資訊,以這些新增的資訊來改善 LLM 回答的精準度。在 2026 的今天已經是一項廣為人知的技術了。

使用 GitHub CLI 徹底移除 GitHub 上頑固的「幽靈通知」

GitHub notification 對開發者來說是一向很方便的工具,可以用來追蹤 issue、pull request 和提及 (mention)。但某天我的通知標記忽然就這麼卡住了,即使已讀了所有內容也他還是非常頑固的卡在那裡,在又拖了幾個月之後我才終於花了點時間研究發生了什麼事。

Multiprocessing, Multithreading and Asyncio in Python Part 1 - Basic Concept

Python 的效能瓶頸在幾年前一直為人詬病,
但在開發者的努力之下,Python 3.4 開始出現了 Asyncio 可以在特定情境下提升效能,
到了 Python 3.13 更出現了可選擇性關閉 GIL 的 Free-threaded (PEP-703) 設計,
結合過去的 Multiprocessing 和 Multithreading,
我整理了一下這三項技術適合的原理、差異和使用情境做了幾篇紀錄。
這一篇先簡單介紹三者的基本概念和適用情境。

Sync Obsidian / Joplin Data Across Multiple Device with Synology WebDAV

原先我使用的筆記軟體是 Notion,
功能豐富且介面美觀,
但幾年前 Notion 出現了隱私權爭議,
被指控偷看某公司放在 Notion 的內容,
甚至進一步提出合作;
就改用了一陣子 Joplin
但最後還是轉到了擁有大量外掛及社群支援,
而且可以高度客製化的 Obsidian

Managing Pre-existing Global NPM Packages After Installing NVM

今天遇到一個問題,

安裝過 nvm 後安裝 global package 的路徑就被改變了,

導致想要移除之前安裝過的 global package 時沒辦法直接用 npm uninstall -g 移除。

怎麼發現這件事的呢?

很久以前我在 global 裝過一個 package 可以直接在 terminal 呼叫 command 執行,