發表文章

寫 Web 也可以用 Makefile:好好管理你的環境流程

圖片
說到跟別人一起程式專案的協作,我們要解決三個部分的共享:程式碼、環境、流程。程式碼我們大多使用 Git 來整合來自多方的程式碼貢獻,我們也已經盡可能地用 Docker 來解決執行環境的問題。那流程呢?我們常用的一些腳本跟流程該如何協作共享?這時候,Make 就派上用場了。 The GNU logo 你需要具備的內容 什麼是 Make/Makefile 為什麼要用 Make Hello World Makefile 的主要本體:Target Prerequisite 與 Phony Target 來點變數 做一些條件判斷 控制字串的輸出 組合技:管理不同環境的流程 克外補充:進階用法分享 註解的使用 取得當前 Target 名 Make 變數與 Shell Script 變數 變數內容可以為 Shell 執行結果 變數可以擴充 想要抽成 function? 剛提到了 info、shell 和 call,還有沒有其他神奇 Function 如果想要中間才執行 Prerequisite? 更多 Prerequisite 用法 進階變數使用 結語 你需要具備的內容 閱讀本篇文章,你可能需要具備以下內容,並依據實際所需調整範例: 包含有 Make 的環境(macOS 和多數 Linux 發行版皆有內建) 能使用 Docker 與 Docker Compose 基本指令 能使用 Shell 基本語法與指令 瞭解 .env 檔(dotEnv)的使用情境 能區分 Tab 字元與空白字元的差別 什麼是 Make/Makefile 如果你曾接觸過 Linux 軟體開發,應該對 Make 不陌生。Make 是一個 Cli 工具,透過 Makefile 檔案設計一系列的流程,讓我們執行單一指令就能自動化完成一連串的目的。Make 很常使用在 C/C++ 等編譯語言的軟體,方便其他使用者直接執行開發者設計好的編譯、測試、封裝等流程。 另外,雖然他叫做 Make,但由於 make 本身也是英文動詞,如果要描述或找資料的話,通常也會習慣稱呼其為 Makefile,或是 GNU Make。 為什麼要用 Make 也許你有疑問,那我們直接寫 Shell Script 是不是也可以達到類似目的呢?

那些值得裝裝看的酷酷 CLI 工具

圖片
好久沒寫部落格文了,是時候該振作提起鍵盤寫一寫。 這篇的起因其實是我裝了這些 CLI tool 但都忘記用 😅 現代 CLI 類 bat 取代 cat 的工具,包含了語法 Highlight 和 Git 狀態顯示,顯示文件真的可以又快又漂亮,基於 rust。 其實平常也不常用 cat 啦,還是習慣用 less ,搭配 source-highlight 也能有一定程度的 Highlight(但也就堪用而已,最後還是打開 vim)。 httpie 與其說是現代版的 Curl/Wget,我覺得講 CLI 版的 Postman 會更貼切些。支援 JSON 和 HTML 的語法 Highlight 當然是基本的,還能方便地傳出 JSON API 或 Form data 也是一大賣點。基於 Python。 今年他們也因為掉星星事件有一陣子熱度( How we lost 54k GitHub stars – HTTPie blog ),喜歡的話別忘了幫他們加個星星。 exa 現代版 ls。很多漂亮的顏色就是棒,另外還能顯示圖示、Git 狀態,以及提供樹狀顯示等等。基於 rust。 不知道為什麼我的 exa 看起來顏色醜醜的,可能沒有正確吃到 zsh 的設定。 延伸閱讀: 11 - exa - 總覽目錄的工具 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 ripgrep 取代 grep 的強化版文字搜尋工具,當然也是可以取代 ag、ack。有很多進階功能,例如支援 regex、尊重 ignore 設定、能指定搜尋檔案的範圍或類型等。使用的語法為 rg ,基於 rust。 延伸閱讀: 09 - ripgrep - 快速查找檔案內容 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 fd 取代 find,協助你快速找到檔案。一樣是快、漂亮的顏色、支援 Regex、尊重 ignore 設定。基於 rust。 神奇工具類 tig 反過來打的 Git,可以在 CLI 看 git 線圖,有人說是 CLI 中的 Git GUI(? hub GitHub 官方 CLI 工具。 tldr 社群維護的各種 CLI 工具的常用語法範例。真的很棒很好用。 shellcheck She

[延伸創作] 深入 Session 與 Cookie:Laravel 的實作

圖片
前言 看到 Huli 寫了這篇 深入 Session 與 Cookie:Express、PHP 與 Rails 的實作 ,想說既然都寫到了 PHP 和 Rails 了, 身為 PHP 版 Rails 的 Laravel 怎麼可以缺席呢 (?),所以就也來追追看原始碼吧! 原本想在短時間內就把這篇發出去的,趁著風潮嘛。 結果 Laravel 原始碼果然很難追,Laravel 5.8 版原始碼追著追著 Laravel 6.x 就推出了,擺著擺著 7.x 版又… 🤦‍♂️,就這樣過了八個多月,看來有得改了,還好差異不大。 那我們就開始吧! TL;DR 可以直接滑最後看結論 😭 前言 TL;DR 本篇閱讀指南 Laravel Framework(以 v7.9.2 版為例) Laravel 怎麼生成 Session ID 的 「重新生成 Session ID」 建立 Session ID Laravel 並不是使用 PHP 原生的 session 機制 將 Session Information 寫進 File 從 Laravel 儲存 Session 的指令下手 Driver:儲存 Session 的管道 Session 的 Service Provider StartSession 是個 Middleware saveSession():儲存 Session 資料 SessionManager Manager::driver():取得 Driver Instance createFileDriver():建立 File Session Driver 的 Instance buildSession(): 建立 Session Instance Store:Session Instance 本體 return 再 return:回到 saveSession() save(): 儲存 Session 資料到指定儲存空間(File) write():寫入 Session 資料到 File 分岔一下,來講 File Facade 回來 write():繼續寫入 Session 資料到 File put():把內容寫入檔案 延伸討論:說好的 cookie-based session 呢 cr