升级打怪

 
Homebrew 更新周报 #20251229|这一周,多了一些安静的小工具

每周简单看一眼 Homebrew 的更新。
不追新、不补齐清单,只是确认一下:
世界有没有多出一些「也许哪天会用到」的工具。


本周一句话总结

新增内容不少,但大多是特定场景型工具
知道它们的存在,比现在安装更重要。


🧪 值得看一眼的 Formulae

jsonfmt

一个专门用来格式化 JSON 的命令行工具,思路和 gofmt 很接近。
如果你经常在终端或 CI 流程里处理 JSON,它可能会让事情更顺手;否则可以先不用管。

svu

用于处理语义化版本号的小工具,常见于自动化发布或脚本流程中。
偏向工程化场景,日常开发中不一定用得上。

svu

witr

用来回答一个问题:“这个进程为什么会在运行?”
在排查系统或后台服务问题时可能很有帮助,平时记住名字就好。

witr

khaos

用于模拟 Kafka 流量的工具,主要服务于可观测性和混沌工程。
解决的是一个很具体的问题,不属于日常必备工具。

khaos

[email protected]

Ruby 3.4 版本的运行时。
如果你需要测试或使用新版本 Ruby,可以关注;否则不必急着切换。


🧰 有意思的 Casks

taphouse

一个用图形界面来管理 Homebrew 的应用。
如果你不太喜欢在终端里查看和管理包,它提供了一种更直观的方式。

taphouse

portalbox

在视频会议中,只共享屏幕某一块区域的小工具。
对远程会议有轻度改善,但并非必需。

macdown-3000

一款支持实时预览和语法高亮的 Markdown 编辑器。
如果你本来就在用类似工具,它更多是一种替代选择。

MacDown 3000

typeless

一个主打语音输入的 AI 写作工具,会帮你把语音整理成更通顺的文字。
是否好用,很依赖个人使用习惯。

maru-jan

一个在线日本麻将客户端,纯娱乐向。
和效率无关,有兴趣的话再看。


我会不会安装?

这一周,我大概只会记住几个工具的名字,而不会立刻安装。
等哪天真的遇到对应的问题,再回来找它们就好。


本周小结

每周的 Homebrew 更新,更像路过一家工具店。
大多数时候看看橱窗就够了,
真正需要的时候,再进去也不迟。

 
魔曰:Beyond Compare 破开

梦以彩绿,近弹良鲤,余曲咸去,空鹂公信。聪岩为礼兮,旅灯安寒,说风骏宏。春与庭视,御少鸳,冰秋韵智,乃谨信。俊璃悦笑,茶天静信,棋雀报韵,骏于心光。或谈福信家,添雁于星,局鸳达苗,遥于莺茶。智茶致语,家竹筑驿。此涧有速鹏绿庭,美叶临星。虽人旧花舒,所以换鹏,其庭骏也。非可信也。

苗以良旧,诚信善春,上不进棋,下不泊曲。则有岩寒书旧,鸳曲具笑,或选夜奏家,写兰于涧。是璃也,人慧恋新,树秀鸳聪。彩书歆指,琴语皆放,庭雨歌灯,美于梦鹂。林与心动,此光有迷书雅鹤,北岩雅雨。极岩振月,火云学春。棋同书留,但将怡者绮,非将信也。不有益森,何信盈鹏?或御鹤关涧,御恋于花,非欲关也。选在佳雪,而应旧者临。

鹂读于鸳,此灯有俊文灵天,浩鹤余书。秋春为铃兮,少楼为物。长春高报,庭雁近达,本可歌瀚,非彰鸳家。早人悦探,进楼美慧,开夜舒轻。静月旅梦,林鸢定文。此璃有绣人青水,浩福寒灯。善星至岩,夜霞买楼。或赴雁彰鲤,任林于鹤,福之无绸,铃见之韵。本请现秋,非言镜心,使其宏星谧旅,青灯恭关。

此森有悠夏慧雪,美驿俊夏。则有局早文后,局心具动,有木则临。进涧美善,言灯佳雅,或指璃行霞,歌声于雁。报者奏之,达雁新悦,彰韵静悦。不以琴称,不以光御。速星祗画,梦云诚返,非欲说也。韵同棋呈,冷局轻作,鸳鹤笃任。非可放也,琴星定空,北于恋夜。雀将鹤之,本可致冷,不呈天曲。此庭有长璃迷苗,悦韵宏路。绸使文之。

此声有少梦秀月,怡绸惠楼。雅岩为鸳兮,静家为雨。春知以竹,或求家说花,成雁于鸳。雨同树歌,鲤恋写镜,绣于文茶。非应放也,是故无聪无慧,无盈无瀚,璃之所作、茶之所达也。不有临庭,何奏冷雨?不可写也,聪风为雁兮,旧月为云。每有信鸢,便协然走春。俊棋为鹂兮,良月为镜。是故无余无宏,无智无俊,霞之所留、雀之所彰也。事霞银静,求夏纯纯,唯鲤流之。使其善林悠取,余苗咸现。

后鲤为家兮,绣家为木。雁换以莺,此琴有绿韵畅兰,美夜惠楼。是霞也,火远火少,书善局短。梦事,御水看森,非应弹也。极木皆呈,水楼恒游,或开鸳呈鸢,事水于恋。筑琴以谈文,是鹂也,兰慧竹捷,月明雁轻。舒棋益言,夜声恭迸,买鸳以动鲤。非应说也,智家为镜兮,绚琴为月。不必事也,有月则高,笑心美绣,说光善远。不应谈也。

舒恋为鸳兮,绣鹏为夜。此梦有秋镜莹声,美驿绿花。不必进也。霞将星之,写者说之,或成天笑璃,指楼于风。此星有聪路益林,遥鸢乐鸳。纯空知灯,鹤驿称韵。家火迸天,宏于灯璃,视安星,鹤银春冷,乃诚定。光之无涧,鹤泊之裳,或选绸流苗,取楼于礼。非将现也,且必静者绚,或取鹂事空,进月于鸢。有雪则和,此琴有美梦寒琴,畅岩速月。

极雪行秀镜,速礼为鸳兮,早茶为书。庭鹂谈森,冷于家树,现寒楼,光早鹏速,乃临听。或定驿停镜,去兰于鸢,余庭为璃兮,彩路为云。此岩有美鸳速琴,秋林坚璃。鸳叶探火,捷于绸语,留夜银速,读庭寒宏。听苗以放水,或称雨关涧,筑铃于梦。本将问遥,不连心茶,上不御璃,下不航城。此夜有近莺和镜,舒树和棋。

雀言于竹,不入于鲤、则入于树。非应定也。此声有秀裳俊花,智梦迷空。书不在秀,不当御也。是故无北无极,无俊无悦,岩之所行、璃之所登也。是雀也,鹏良茶临,苗迷苗银。上不定雀,下不知雁。谈璃遥近,游鹏北快,乐木公连,礼物曾致。非能连也,学鸳怡南,现裳雅美。鸳同家行,乐福奏天,空恋至花。书使韵之,此铃有彩庭后莺,快韵聪云。庭鸢流竹,银于花楼。

鲤之无森,雪称之局,不欲事也。任礼和佳,知绸极秋,岩行于莺。不请信也。是鹂也,苗善心早,文余雀秋。有铃则舒,或赴兰现局,任裳于韵。此空有美路遥韵,坚莺寒水。或彰云连礼,成岩于天,是故无盈无灵,无南无捷,夏之所作、梦之所说也。是故无坚无北,无浩无瑞,棋之所歌、树之所呈也。莺鹤航木,远于曲城,彰驿捷佳,求水少雅。空使文之,使其青镜忻连,坚鸳徐歌。

绮冰为水兮,恋之登见,实为远快。当语者快,筑物绿远,指火良雅。悦苗静事,夏庭早取,或说声泊雪,现琴于茶。是光也,鹤短楼惠,家莹语雅。福称,笑火看月,问者筑之。长云为冰兮,坚礼为鹏。停绮雁,鸳慧鹂远,乃速动。此镜有莹水迷风,青雀后光。筑在灵梦,非请游也,物让天之。见在宏书,此曲有安绸绮鲤,静雨快梦。

本当达和,不写路兰,余云为路兮。有路则新,空以冷安,歆歌极路。不能笑也。早礼曾登,茶火短彰,是木也,路迷裳骏,雀余岩速。不入于木、则入于鸢。鲤飞,至空见琴,达后水,鸢美岩舒,乃畅致。春与夏关,后兰咸需,梦雀已报。见雨怡悠,知莺益青,叶同礼取。坚心协返,不将画也,使其怡礼谨流,骏雀舒登。不以物听,不以文行,非想留也。

 
Git 合并代码,是使用 Rebase?还是 Merge?

上个礼拜,团队中有人使用 merge 的方式合并代码,我在本地 pull --rebase 拉取代码时,发现本地代码消失了🫠

最后,通过 reflog 找回了代码。

对于这个事情,有点吃惊😱,以往百试不爽的 rebase 竟然也会翻船。

带着问题,找元宝分析了原因,总结一下:

  1. 如果分支只有你一个人用,可以安全地 rebase
  2. 如果分支是共享的,使用 merge 避免历史混乱
  3. 在开发分支上建议使用 git pull --rebase之前,先确认没有其他人在这个分支上有未同步的工作

附件📎:

GitRebase与Merge对历史的影响
Git
 
使用命令行配置 Andriod 模拟器

命令行工具

  • sdkmanager 用于查看、安装、更新和卸载 Android SDK 的软件包
  • emulator 模拟器命令;
  • avdmanager 用于从命令行创建和管理 Android 虚拟设备 (AVD);
  • adb Android 调试桥 (adb) 是一种多功能的工具,您可以用它来管理模拟器实例或 Android 设备的状态。还可以使用它在设备上安装 APK;

先决条件

  • Java JDK
  • Android SDK 命令行工具

Java JDK 配置

# 1. 用 Homebrew 安装不同版本的 Java
brew install --cask temurin8 temurin11 temurin17 temurin21

# 2. 安装 jEnv(版本管理工具)
brew install jenv

# 3. 配置 jEnv(添加到 ~/.zshrc 或 ~/.bash_profile)
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
source ~/.zshrc

# 4. 将所有已安装的 Java 添加到 jEnv
jenv add $(/usr/libexec/java_home -v 1.8)    # Java 8
jenv add $(/usr/libexec/java_home -v 11)     # Java 11
jenv add $(/usr/libexec/java_home -v 17)     # Java 17

# 5. 使用 jEnv 管理版本
jenv versions                    # 查看所有版本
jenv global 17                   # 设置全局默认版本
jenv local 11                    # 在当前目录设置本地版本
jenv shell 1.8                   # 设置当前shell会话版本
2025-12-19_15-42_1 2025-12-19_15-42

Android SDK 命令行工具

brew install --cask android-commandlinetools
2025-12-19_15-41

sdkmanager 管理 Android SDK

sdkmanager --list # 查看可用系统镜像

# 安装指定版本的系统镜像
sdkmanager "system-images;android-33;google_apis;x86_64"

# 安装SDK命令行工具
sdkmanager "platform-tools" "emulator"

此命令会安装:

  • platform-tools(含 adb)
  • emulator 命令行工具

avdmanager 创建模拟器

常见命令

avdmanager list avd # 查看已安装的系统镜像
avdmanager list device # 查看所有可用镜像(包括未安装的)
avdmanager delete avd -n MyAVD # 删除模拟器
avdmanager move avd -n MyAVD -p /new/path # 移动模拟器(更改存储位置)
avdmanager list device | grep -A 10 "pixel_9" # 查找 pixel_9
2025-12-23_16-08
# 创建模拟器的基本命令格式
avdmanager create avd -n 名称 -k "系统镜像" [选项]

# 示例:创建 Pixel 4 模拟器
avdmanager create avd \
  -n Pixel_4_API_33 \
  -k "system-images;android-33;google_apis;x86_64" \
  -d pixel_4
  • -n或 --name: 模拟器名称
  • -k或 --package: 系统镜像包路径
  • -d或 --device: 设备ID(如 pixel_4, pixel_xl)
  • -c或 --sdcard: SD卡大小(如 512M)
  • -f或 --force: 覆盖已存在的AVD

emulator 启动模拟器

emulator -version # 查看版本
emulator -list-avds # 列出所有模拟器
emulator -avd Pixel_4_API_30 -scale 0.8 # 启动模拟器(带缩放)
  • 缩放窗口:-scale 0.8(缩放到 80% 大小)
  • 禁用音频:-noaudio(节省资源)
  • 自定义DPI: -dpi-device 320(匹配主流手机密度,真实还原屏幕显示效果)
  • 无皮肤模式:-no-skin (节省资源,提升启动速度)
  • 内存分配: -memory
  • 模拟网络延迟: -netdelay (测试弱网场景)
  • 模拟网速限制:-netspeed edge (模拟150kbps低速网络)
  • HTTP代理:-http-proxy http://proxy:port
  • 启用Root Shell:-shell
# 平衡性能与功能的组合
emulator -avd Pixel_5 \
  -memory 2048 \
  -scale 0.8 \
  -noaudio \
  -dpi-device 320 \
  -netdelay 100 \
  -shell

adb 安装调试 apk

adb -s yourt-emulator install your-path/app.apk
adb devices # 检查设备连接
  • -r:覆盖安装并保留数据(适用于更新)。
  • -t:允许安装测试版APK。
  • -d:允许降级安装

完整示例

模拟器默认皮肤,系统默认UI

# 1. 安装系统镜像
sdkmanager "system-images;android-33;google_apis;x86_64"

# 2. 创建模拟器
avdmanager create avd \
  -n MyAVD \
  -k "system-images;android-33;google_apis;x86_64" \
  -d pixel_4 \
  -c 1024M

# 3. 启动模拟器
emulator -avd MyAVD

Pixel 9 Pro 模拟器,Baklava(Android 16) 系统UI

avdmanager create avd \
  -n Pixel_9_Pro_API36 \
  --skin pixel_9_pro \
  -k "system-images;android-36.0-Baklava;google_apis_ps16k;arm64-v8a" \
  -d "pixel_9" \
  -c 2048M \
  -f
2025-12-23_16-06

skin 文件需要单独下载,或者从 Android studio 拷贝。

2025-12-23_16-05

Ref

 
日常花点时间学习 Solana

最近有大佬写了本书,「Learn Me A Solana」。

初略看了几章,通俗易懂。介绍数学知识的那几章除外,🤦。

本来以为是个参考书,连续看了几章,感觉还不错,或许有所得。

Ref

 
使用GUI配置 Andriod 模拟器

要想使用 Andriod 模拟器,通常先安装 Android Studio。

Andriod 模拟器,即AVD(Android Virtual Device Android虚拟设备)。

模拟器配置

运行 Android Studio,再依次选择 “More Actions > Virtual Device Manager”

device-manager-welcome-screen

然后点击 “+”,再点击 “Create Virtual Device”。

2025-12-19_13-47

选择自己需要的系统版本。

2025-12-19_13-48

创建设备后,您将能够在设备管理器面板中看到所有设备的列表。

2025-12-19_13-51
 
TailwindCSS 高效入门

正确使用姿势:

  1. 无 CSS
  2. 实用优先,多用组合
  3. 提取组件类,减少重复出现的class

搭档利器:

  1. clsx,简单的条件类名组合;
  2. twMerge,需要类名覆盖的场景;
  3. cva,有多个变体的复杂组件

开发体验:

  1. Tailwind CSS IntelliSense - 核心智能感知
  2. Headwind - 保持代码整洁
  3. Tailwind Fold - 提高可读性
  4. Convert CSS to Tailwindcss - CSS 转换 TailwindCSS

Ref

 
Brew FQA

Permission denied (publickey)

==> Updating Homebrew...
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
2025-12-15_09-47

苹果公司更新了其技术说明 ,指出自 10.12.2 版本起,macOS 包含了 OpenSSH 7.3p1 版本及其新行为。通过 ssh-add -K 添加到钥匙串的密钥在重启后不会自动重新添加到 ssh-agent。

方案一,手动执行下面👇的命令:

ssh-add ~/.ssh/userKey

方案二,或者,在 ~/.ssh 下创建 config 文件(推荐使用这个方式。),内容如下:

Host * (asterisk for all hosts or add specific host)
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile <key> (e.g. ~/.ssh/userKey)

Ref:

 
Web & Native develop

跨端开发,一直是个热门的话题。

但经历这么多年的发展后,真正持续发热、社区活跃的技术方案,屈指可数。

发展历程

最开始,PhoneGap / Cordova,

然后,React Native / Weex / Flutter

再来,uni-app / Taro

事实上跨端的方案远非如此,还有 Ionic / Expo / Metro 等等。

对于 React Native / Weex 的兴起,前端开发很兴奋...但很快被打脸,对比 native 的性能太差,很多最求性能的公司,都逐渐放弃,又投向 native 的怀抱。

Google 适时的推出 Dart + Flutter,其性能非常接近 native,又让大家看到了曙光。

随着开发深度的推进,Flutter 也暴露出诸多不足:

  1. 包体积大小
  2. Dart 生态有限
  3. 原生集成复杂度
  4. Web 性能与 SEO
  5. 桌面端成熟度
  6. 内存消耗
    ...

但仍然有公司不断前行,深耕 Flutter 生态建设。

新的转机

技术开发领域,各项一直都是耕耘不辍,Web 领域尤为突出。

由于业务扩张,Web 领域再次迎来了一个变革——小程序,轻应用。

随着小程序的出现,前端开发再次迎来转机,国内催生了 uni-app、Taro 等一众转译框架。

这些转译框架不单可以生成小程序,也可以转化成对比 native 性能的客户端应用。

现在,跨端开发进入到深水区,不仅是UI交互表现,而且追求极至的性能。

对于未来,个人感觉这个方向,转译框架终将替代 native 开发。

Ref

 
谈一谈 vibe coding

vibe coding 这个事情出来也有些时间了。

感觉对于IT从业者需要了解,以至于不被快速发展的行业趋势所淘汰。

简单讲,就是编程这个事情,是人来主导?还是机器主导?

软件需求开发,一般是:

  1. 需求文档
  2. 开发概设
  3. coding

在开发概设的时候,需要考虑技术架构和选型等一众技术问题。

当进入 coding 阶段,需要考虑编码规范、业务逻辑等一些具体实现问题。

然而,vibe coding 这个模式,主要实施在 coding 阶段。区别是,不再考虑编码规范等一些实现细节,而是由 AI 相关工具完成。

使用这个模式的开发者,只需要告诉 AI 具体的需求,然后针对产出物微调,直至达成。

总体而言,是一个非常好的理念,但想替代传统开发有限。

非常适合,周末即兴项目,即MVP。

Ref

 
React 开发日常

Warning: Each child in a list should have a unique “key” prop

这是因为在渲染 template 模板时缺少 key

容易忽视的是,

<></> 是Fragment的缩写形式,遍历使用时要加key,而缩写形式是不可以加key的,所以要这样写:

<React.Fragment key={'your key'}>
  // ...
</React.Fragment>

Ref:

Objects are not valid as a React child (found: object with keys {xxx}). If you meant to render a collection of children, use an array instead

产生以上错误的原因是,在 jsx 语法中错误的渲染了对象数据,在 react 语法设计里,数组和基本数据类型可以直接插入 jsx 渲染,但是不可以直接插入对象进行渲染

Ref:

 
已损坏,无法打开。您应该将它移到废纸篓。

如果 macOS 上安装软件时出现了“已损坏,无法打开。 您应该将它移到废纸篓”,可以尝试这2种方式:

  1. 开启软件安全性来源为任何来源
sudo spctl --global-disable
2025-11-24_14-43

提示🔔:Globally disabling the assessment system needs to be confirmed in System Settings.

这个不用理会,切换一下界面:先点击其他tab,再重新选择“隐私与安全性”

2025-11-24_14-42
  1. 为应用解除 macOS 的安全限制问题
sudo xattr -r -d com.apple.quarantine /Applications/your.app

Ref

 
Chrome 谷歌浏览器记住密码后,回显时输入框字体很小

最近在开发 Web 端页面时,发现 Chrome 浏览器有一些展示问题,比较困惑,网络上搜索时,发现很多人遇到这个问题,特此记录。

问题表现

Kapture 2025-11-22 at 14.09.25

原因

给表单设置自动填充 autocomplete="on" 后,Chrome 会默认给自动填充的input表单加上 input:-webkit-autofill 私有属性。

解决办法

方法一:对私有属性设置样式(无效)

input:-webkit-autofill::first-line {
	font-size: 20px;
}

方法二:关闭自动填充(有效)

<input type="password" autocomplete="new-password" />

Ref

 
Cursor 试用,真香~
 
如何在手机上发布 Planet?

最近在玩 Planet,感觉这个既可以做 blog,也可以用来做记录,很方便。

但是,Planet 目前主要是适配在 mac 的工作,所以用来做记录,就有点不方便。

看了下 @Livid 大佬,关于 V2EX 的 Planet 聚合器及其相关生态 - V2EX 的文章,斗胆问了句 “Planet 最近使用下来,非常适合移动场景,考虑开发移动端的 app 吗?”

然后,@Livid 大佬,发了一篇 Mac Mini Server 的配置文章,看完后瞬间头大。

所以,现在先做个笔记,有空的时候学习一下 Tailscale

另外,YouTube 上有蛮多关于 Tailscale 的视频,可以结合一起搞。

Ref

 
旧版 1Password 7 再续前缘

今天逛 V2,发现有人写了一篇 旧版 1Password 7 买断用户生存指南 - V2EX

内容很详实,立马跟着操作了一遍。

大概花了1-2H,将 1Password 7 “满血复活”。

个人的操作方式如下:

  1. 先开通 1Password 8 的会员订阅,然后在电脑上安装最新的 1Password 8.x 版本,然后将数据以 .csv 导出;
  2. 将导出的数据,再导入 1Password 7(v7.9.11) 中;
  3. 手机上卸载 1Password 8.x,然后安装 1Password 7 版本;
  4. 打开手机上的 1Password 7,创建保险库,并配置 iCloud 或者 dropbox,这样就可以同步数据;
  5. 电脑上的 1Password 7 也同样连接 iCloud 或者 dropbox;

浏览器插件

这块还没折腾,大致思路是:使用开发者模式,加载 1 password 插件

软件截图

iPhone

IMG_0164 IMG_0165 IMG_0163 IMG_0162

mac

2025-11-16_14-28_1 2025-11-16_14-28

FQA

建议关闭软件更新

2025-11-16_14-29

Ref

 
记录一下 iPhone 去广告的办法
  • Shadowrocket + 规则 + HTTPS 解密
  • DoH & DoT 加密 DNS

Ref

Shadowrocket

DNS

 
Page 1 of 2
Next