發表文章

鬧書荒?你可以參考這幾個書單網站繼續買起來!

圖片
在 2019 年的時候我曾經寫過 [買起來書單] 那些最常在 Stack Overflow 被提到的 30 本工程師必備書籍 ,當時參考的資料來源是 dev-books ,可惜這個網站就只活到了 2019 年就消失了。 那麼還有哪些書單網站可以推坑買書呢?我們分成兩大類來整理一下。 Photo by Aleksander Vlad on Unsplash 名人推薦 以下的網站是搜集各種名人的推薦後統計而成,大多都還有特定分類的書單。 這裡附上的以不分類的榜單為主,照個人喜好排序。 Good Books Most Recommended Books Read This Twice Startup Books – Postmake BookAuthority 技術人推薦 以下的網站是統計技術論壇中書籍被提及的次數。照個人喜好排序。 Hacker News Books Top Talked Books from Hacker News from Stack Overflow from Reddit HackerNews Readings (資料好像停在 2021 了) 本著作由 小克 製作,以 創用CC 姓名標示-相同方式分享 4.0 國際 授權條款 釋出。

升級 PHP 8/8.1 後值得調整的一些新寫法

圖片
升級 PHP 8/8.1 後,用 PHP CS Fixer 的 Migration 系列 rule set,看看原本專案內哪些部分有新的寫法,整理一篇記錄一下。 更直覺的 str_contains 和 str_starts_with 相關規則: modernize_strpos 以往我們常使用 strpos 來檢查指定字串是否有包含另一個字串,或者用它來判斷字串的開始: if ( strpos ( 'Foo Bar Baz' , 'Foo' ) !== false ) { echo 'Found' ; } if ( strpos ( 'Foo Bar Baz' , 'Foo' ) === 0 ) { echo 'Start with Foo' ; } 現在有簡單的 str_contains 和 str_starts_with 了,可讀性更佳: if ( str_contains ( 'Foo Bar Baz' , 'Foo' ) ) { echo 'Found' ; } if ( str_starts_with ( 'Foo Bar Baz' , 'Foo' ) ) { echo 'Start with Foo' ; } 更方便的 ::class magic constants 相關規則: get_class_to_class_keyword 以往 ::class 只能用在 Class 名稱後方,想要從 object 取得 Class 名稱需要使用 get_class 。 $object = new ClassName ( ) ; echo get_class ( $object ) ; 現在可以直接使用在 object 上了: $object = new ClassName ( ) ; echo $object : : class ; 更好讀的八進位數字 相關規則: octal_notation PHP

寫 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