今日所学
来自 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 性能
通过用多个 job 并行运行 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”格式查看目录和子目录的结构,通常会很有帮助。虽然已经有很多现成工具,例如…