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

Kourtney's Space

Remove or Upgrade Global NPM Packages After Installing NVM

今天遇到一個問題, 安裝過 nvm 後安裝 global package 的路徑就被改變了, 導致想要移除之前安裝過的 global package 時沒辦法直接用 npm uninstall -g 移除。 怎麼發現這件事的呢? 很久以前我在 global 裝過一個 package 可以直接在 terminal 用 command 呼叫 command 執行, 但因為年代久遠, 要升級那個 package 的時候發現他不在 npm list -g 的範圍, 只好先用 which 看一下他在的位置, 接著發現是一個 link 然後就用 ls -al 看那個 link 連到哪裡, 發現是在 /usr/lib/node_modules 底下, 很明顯是用 npm -g 安裝的, 於是再仔細的看了一下 npm list -g 的結果, 發現其他的 global package 都列在 /Users/<USER_NAME>/.nvm/versions/node/v16.5.0/lib 底下, 在一陣 google 之後找到了一個方式 nvm use system && npm ls -g --depth=0 來列出原本安裝過的 global package 有哪些,

Pyenv Notes

pyenv 的功能和使用的原因 pyenv 是用來在系統裡安裝各種不同版本的 python, 並能夠方便的切換 python 版本的工具。 當同時有不同 python 版本的專案需要開發或維護時, 就會需要使用 pyenv 來協助切換 python 的版本。 python 的新版本通常都會有一些語法上的更新或是新增一些功能, 例如 python 的 async / await 就是 python 3.5 以上才出現的功能, 用 python 3.5 以下的版本來開發的專案就無法使用; 又或者例如同時有 python 2 和 python 3 的專案, 而且因為 python 2 和 python 3 語法不相容, 勢必要在系統裡安裝 python 2 和 python 3; 諸如次類的情況就可以使用 pyenv 方便的切換 python 的版本。 安裝和初始化 安裝 brew install pyenv 安裝完畢後執行初始化 pyenv init 之後按照指示將顯示的 code 貼到 ~/.zshrc 或 ~/.

Pipenv Notes

Why Pipenv

當有很多 Python project 要維護,
不同的 project 有可能使用相同的 python libraries 的不同版本,
不使用 virtual environment 而將所有的 python modules 都裝在自己的機器上就會造成版本衝突。

過去使用 virtualenv + requirement.txt 的機制可以在不同的 project 使用同一個套件的不同版本,
也能夠讓新加入的開發者或 production 環境可以快速安裝 project 需要的套件,

Stateless HTTP, Stateful Session and Cookies

Stateless HTTP HTTP 是一種 stateless 的 protocol, 也就是說每一次的 request / response 都是獨立的, 和之前或之後的 request / response 無關。 相同的 request 就會回應相同的 response, 不會因為之前的 request / response 內容而有不同。 這樣一來 server 因為不需要儲存使用者資訊可以省去大量的資料庫、伺服器儲存空間, 也因為不需要讓 client 每次都必須連線到相同的 socket 而能夠加快 response time 和省去不少 network bandwidth, 但在網站需要做連續動作(例如需要確認使用者身份認證時)就會需要一些機制來協助, 這時候大部分的網站就會利用 session 或 cookie。 Session Session 是一段具有狀態 (stateful) 的時間。 HTTP request / response 是 stateless 的, 但如果透過 stateless 的 request / response 夾帶 state 資訊的話, client 和 server 就可以透過 request / response 夾帶的 state 資訊製造出 stateful 的運作。