今日所學
來自 OOZOU 團隊的簡短實用筆記,記錄日常工程與設計工作中的小收穫。
用 YOLO alias 讓 Claude Code 完全自主執行
--dangerously-skip-permissions 這個 flag 能讓 Claude Code 不經確認提示就執行指令和編輯檔案。每次都要打這串字很快就會讓人厭煩。
在 GNU/Linux 的獨立 Nvidia GPU 上執行指令(例如 ollama)
要確保某個指令(CLI)在 GNU/Linux 中使用你的 NVIDIA GPU,可以在指令前加上環境變數 \\NV\PRIME\RENDER\OFFLOAD=1 和 \\GLX\VENDOR\LIBRARY\NAME=nvidia。
用 Pundit Policy 管理 permitted parameters、預設值與各 action 的參數
要管理 permitted params,你可以在你的 policy 中加入 permitted\attributes 和 permitted\attributes\for\#{action},例如
在 Turbo 中用 `requestSubmit` 送出表單
Turbo 會監聽 form 上的 submit 事件。因此,用 JS 送出表單時,請一律使用 requestSubmit。
在 GitHub Actions 中讓 Rubocop 與 ESLint 忽略 bundled gems
Rails 專案在 GitHub actions 中通常會把 gems 安裝到 vendor 目錄,方便在後續執行時使用快取。
為你的「部分」螢幕截圖或純邊框圖片加上 macOS 風格的陰影
不論你喜不喜歡,macOS 擷取完整應用程式視窗的快捷鍵(⇧- ⌘- 5)預設會在儲存的圖片周圍加上一層淡淡的陰影。當你把螢幕截圖或圖片加進文件時,這能讓畫面更…
利用套上 hue 填色效果的 overlay 圖層製作單色畫面
利用套上 hue 填色效果的 overlay 圖層製作單色畫面
按住 ⌥option 並沿著輸入欄位點擊拖曳即可調整尺寸
按住 ⌥option 並沿著輸入欄位點擊拖曳即可調整尺寸
git check-ignore
這個指令可以協助你檢查某個檔案或路徑是否被忽略,加上 -v 參數時還會顯示符合的 exclude 樣式(文件)。
讓 Pry 支援貼上使用行首點記法的多行 Ruby 區塊
我們現在很常使用行首點記法,例如
Rails 6、Ruby 3、Bootstrap 5 與 Hotwire
以 Hotwire 延伸 Bootrails 的部落格文章: 所有最新潮的東西(截至我寫這篇 TIL 的時候):
在 Figma 中將文字物件轉成 Title Case
你可以設定文字框的屬性,讓所有文字自動轉成 Title Case(還有其他常見的大小寫格式)
縮減 Heroku Slug 大小
首先,安裝 Heroku Repo plugin:
在 Bash 和 Zsh 執行無痕/私密指令
只要在指令前面加一個空格,它就不會被存進 ~/.bash\_history。例如 qrencode -o out.png "Some secret text"
將 SVG 轉成 PNG
在 MacOS 上,安裝 inkscape(用 brew),然後這樣使用:
Figma 中 CMD+Click 的行為
在 Designer mode 按住 ⌘CMD 並點擊左鍵,會選取該 frame/group 裡最深層的圖層;而在 inspector/developer mode 這麼做,則會選取你選取範圍內最外層的物件/frame/group…
Rails Cache-Control
若要在 Heroku 上啟用靜態資產的 cache-control 標頭設定並使用 CDN:
用 homebrew 升級 postgres 資料庫
要升級 postgres,可以執行
修正 Heroku rails console 的輸入問題
如果你在 Heroku(或其他地方)的 rails console 貼上很多行內容,可能會遇到各行「互相滲透」擠在一起的問題。
不含插值的 Heredoc
有時你會想使用 Ruby 的 Heredoc 但不進行插值('#{....}')。只要在你的關鍵字前後加上單引號就可以做到:
在 Rails 中為 DOM 產生唯一 ID
Rails 有許多很棒的 view helper,其中之一就是 dom\id:*
為 Rails 5 attributes API 新增自訂型別
Rails 5 的 attributes API 讓我們可以非常輕鬆地建立 form object。
在 macOS 的 Dock 加入空白間隔來為應用程式分組
打開 term(或同類終端機)並貼上以下這行指令:
用 Amazon AWS S3 CLI 複製檔案並設定權限
打開 term(或同類終端機)並貼上以下內容:
憤怒的 Docker 大清除
如果你在 Docker 上遇到 No Space left 錯誤,這是暴力解法:
不透過 HTTP 將檔案附加到 ActiveStorage
如果你想附加一個在磁碟上產生的檔案,或是從使用者提交的 URL 下載下來的檔案,可以這樣做。
在 Ruby 中自動建立中間層的 Hashtable
所有中間層的 hashtable 都會自動神奇地建立起來
用相同檔名 + 前綴來備份檔案
注意:其實你可以在任何指令中使用 !#:1,因為那代表傳給指令的最後一個參數。
Bash alias 與魔法
我在使用者資料夾裡有一個獨立的檔案,叫做 ~/.aliases,用來存放我所有的 bash alias。我很常用 alias,也常常新增,所以我寫了一個 bash function 來即時新增…
用 Elixir 計算 anagram
例如:
用 rbenv 為單一指令切換 Ruby 版本
你可以用 rbenv local 暫時切換 Ruby 版本
在 macOS 上更改系統名稱
在 term(或同類終端機)中,複製並貼上:
把 VS Code 的 Go to definition 改成 Cmd+Click
只要打開你的使用者設定 JSON 檔,使用這個選項:
查詢 IKEA 商品庫存
如果你正在等某件 IKEA 商品補貨,這裡有一個能自動掌握最新狀態的實用解法。這篇指南會說明如何用 shell script 檢查 IKEA 的庫存狀況,並在…
用 shell script 檢查指令是否存在
用 shell script 檢查指令是否存在
Chrome 分頁操作技巧
有時候我想回到上一個瀏覽的頁面,但又想保留目前開著的這一頁。用快捷鍵就能輕鬆做到
清理 brew 上過時的 formula
使用 brew cleanup 拿回一些空間!
從 Enumerable 建立 Hash (Rails 6.0)
新方法讓你可以從 Enumerable 建立 Hash:
撰寫具冪等性的 migration
當你要撰寫破壞性的 migration 時,如果要移除資料表,請使用 if\exists: true;如果要新增或移除欄位,請先檢查資料表是否存在…
建立你自己的 git 指令(alias)
有沒有想過縮短 git 指令?你當然可以用 shell alias,但你得一直記著前後脈絡,才不會忘記每個 alias 代表什麼。其實你可以用 alias 在 git 裡定義自己的…
刪除 Git 中已經 merge 的 branch
你可以在 egrep -v 'master|develop|foo|bar' 中放行更多 branch
刪除已 merge 的 git branch
刪除所有已經 merge 的本機 git branch 的實用 git 指令 git branch --merged | egrep -v "(^\\|master|dev)" | xargs git branch -d*
JS 的解構賦值
簡單的例子 javascript const [a, b, ...c] = [10, 20, 100,200] // a= 10, b=20, c=[100,200] const { first, second } = { first: 1, second: 2 } // first = 1, second = 2
在 Git 中比較本機檔案與遠端版本的差異
只要執行下面的指令,就能取得與遠端版本的 diff
根據 commit 找出所屬的 branch
c198bb715 Make default expired description logic pretty `
把先前的 commit 強制 push 到 repo
如果你已經 push 了一些程式碼,想要 force push 某個較早的 commit,可以這樣做 shell git push origin +commit\sha^:branch\name
取得目前的 git branch 名稱
取得目前的 git branch 名稱
取得你目前所連 wifi 的密碼
password: "!forHackers" `
瀏覽單一檔案的 Git 歷史紀錄(GUI)
瀏覽單一檔案的 Git 歷史紀錄(GUI)
如何在 JavaScript 中用一行程式碼建立帶有屬性的 HTML 元素
在開發 JavaScript 專案時,動態建立 HTML 元素是很常見的需求。傳統上,你可能會用好幾行程式碼來建立元素並逐一設定多個屬性…
如何在你的專案中找出 god objects(Rails)
移到專案根目錄,cd 進 app/models(當然是透過 CLI),接著執行 wc -lw \ | sort -u*
如何離開 Vim
1. 安裝最新版本的 Vim 2. 在 Vim 中開啟一個檔案 3. ⌘-Q 並關閉終端機 4. 重新開啟終端機
如何真正!!離開 vim
在終端機中
如何在 VIM 中用 sudo 儲存檔案
如何在 VIM 中用 sudo 儲存檔案
可送出到另一個 action 的 HTML 表單
我很早就知道可以透過 submit 按鈕送出值,藉此追蹤表單是由哪個按鈕送出的,例如
想覆寫先前設定的排序時
如果你想覆寫先前設定的排序(即使是透過 default\_scope 設定的),請改用 reorder()。
提升 Bundler 效能
透過在多個 jobs 中同時執行 bundler 任務來提升 bundler 效能:
終止卡住的 rails
我想終止在特定 port 上執行的 rails。(我的筆電上跑著好幾個 rails 伺服器。)
終止無回應的 SSH session
SSH session 偶爾會失去回應。如果我讓筆電進入睡眠,這種情況相當常見。與其直接關掉分頁,你可以使用 SSH Escape Characters 來終止 session
限制數量的 has_many 關聯
限制數量的 has_many 關聯
列出目錄結構並排除一個或多個目錄
想過在顯示目前目錄結構時排除一兩個目錄嗎?
列出你的 model 名稱
注意:RUBYOPT=-W0 可以在執行 rails 指令時避免冗長輸出,藉此抑制警告訊息。
用 hub 從命令列建立 pr
先用 brew 安裝 hub:brew install hub 然後使用像下面範例這樣的簡單指令:hub pull-request -m "best pr ever" -b oozou:develop -h feature/awesome-improvements
我最常用的 slack 快捷鍵
⌘-K(or T) 開啟頻道切換器(我完全靠這個快捷鍵在頻道間移動,並把 slack 設定成隱藏所有沒有新訊息的頻道)
optional relation + RSpec 搭配 shoulda-matchers
User 1 - 0..1 Laptop
Postgres 函式與 Non-sargable 查詢
在 where 子句中使用 postgres 函式可能會讓查詢變成 non-sargable。
PostgreSQL UPDATE Join
這個查詢示範如何使用 PostgreSQL 的 UPDATE join 語法,根據另一張資料表的值來更新某張資料表的資料。例如;
在任何 Vim 模式下快速上下移動整行
我在 vim 裡經常搬動程式行,所以建立了一些 mapping 讓這件事更輕鬆。這些 mapping 對應 ⌘-j 往下移、⌘-k 往上移。在 normal、insert 和 visual 模式都能用。vim nnoremap <D-j> :m…
移除 ruby 2.6 內建的 bundler
在已安裝 bundler v2 的情況下用 ruby 2.6+ 產生 rails 6 應用程式,會建立無法使用的 binstubs。如果你看到這個錯誤 You must use Bundler 2 or greater with this lockfile. 你可以移除…
從你的 branch 移除不要的 commit
從你的 branch 移除不要的 commit
在 VIM 中重新命名檔案
這是我在 VIM 中用來重新命名檔案的一個方便函式(在 MacVIM 和 Neovim 也能用)
在 DELETE 之後重設 Postgres 資料表的 sequence
從資料表刪除最近的紀錄之後,如果自動遞增欄位的連續性對你很重要,可以重設它的 sequence 計數器。以下面這張 users 資料表的操作為例:
在 Git 中還原被刪除的檔案
在 Git 中還原被刪除的檔案
對你目前的 branch 執行 rubocop
對你目前的 branch 執行 rubocop
在 commit 之前執行 rubocop
Git hooks 對於在 Git repository 中自動化任務、落實程式碼規範來說非常強大。Git hooks 的一個常見用途,就是在允許 commit 之前先執行自動化測試和程式碼分析工具…
對不同的輸入重複執行同一個指令
如果你必須對不同的輸入重複執行同一個指令。
Rails 中的 scope or scope
scope :human, -> { user.or(author) } scope :terminator, -> { admin.or(robot) } `
查看先前 commit 中被刪除的檔案 [git]
查看先前 commit 中被刪除的檔案 [git]
用 cURL 發送訊息到 Slack
Slack 允許你透過 Webhooks 服務發送訊息
對舊的 repo 做 shallow clone
如果你接下來要作業的 repo 不需要完整的 git 歷史,可以指定 clone 深度,只 clone 這個 repo 的 x 個 revision。
在你的 Rails app 中顯示 TODO 和其他註記
你知道可以用 rails notes 顯示 rails app 中所有的 TODO/OPTIMIZE/FIXME 嗎?
用 Vue.js 實作簡單的 Flux 架構
對於只需要簡單狀態管理模式的小型 app,我總是用一個元件來保存整個 app 的狀態,也就是一個 container。它作為 single source of truth,讓 app 參照自己的狀態…
抑制 rspec 警告
$ RUBYOPT=W0 bundle exec rspec spec/ ...
在 rails log 加上有用的標籤資訊
剛學到 rails 的 tagged logging。你知道可以用下面的方式為 log 加上標籤嗎
在 VIM mapping 中使用大寫字母
注意:@joe 這解決了你的問題 :D
用 FFmpeg 和 Apple Script 壓縮影片
打造一個可以把影片拖放上去、大幅壓縮影片的應用程式:
用 `host` 取得更多網域資訊
你可能會用 dig 從 DNS 伺服器查詢網域的 A/CNAME/MX 等紀錄。但如果只是想快速看個概況,就用 host 吧:
在 collection JSON schema 中使用 minItems/maxItems
要讓你的 collection JSON schema 更可靠,請使用 minItems 和 maxItems,這樣你才能信任你的 API。
把 Neovim 當作 git difftool 使用
只要把這段貼進你的 ~/.gitconfig
使用 Git 的 aliases 功能
Git 允許你透過 config 在內部建立 alias。你的全域 config 應該位於 ~/.gitconfig
在 Github 上監看 CI 狀態
安裝了 Github 的 hub 之後,你可以像這樣取得目前 branch 的 ci-status:
FactoryBot 也可以用在非 ActiveRecord 的 model 上
你可以用 FactoryBot 的 initialize\with* 方法,以任何你想要的方式初始化物件,讓你能隨心所欲地為任何物件建立 factory
列出檔案樹的 Zsh function
在命令列瀏覽目錄時,若能以「tree」格式查看目錄與子目錄的結構,通常會很有幫助。雖然已經有很多現成工具,例如…