2026-02-06 18:11:00

注册流程非常丝滑,一个账号下可以添加多个三级域名:
{your-customize}.ndjp.net
{your-customize-2}.ndjp.net
{your-customize-3}.ndjp.net
...
在子域名下,可以管理四级域名解析 A、CNAME 等 DNS 记录
blog.{your-customize}.ndjp.net
index.{your-customize}.ndjp.net
tools.{your-customize}.ndjp.net
...
三位的子域还有很多,我注册了个 ddx.ndjp.net,适合临时的学习、测试使用,风险提示:严肃场景下仍建议自己注册付费域名。
2026-02-06 04:19:00
这个工具出现在 18 年前,wting/autojump,我火星了刚听说。
安装之后,使用终端 cd 访问过的路径都会被记录,之后使用 j + [模糊字符] 就能快速跳转:
$ cd ~/Documents/blog-yasking-images/photos
# 之后使用 j 命令就可以跳转过去
$ j pho
如果有多个 photos 目录:
/Users/joecovert/Documents/blog-yasking-images/photos
/Users/joecovert/Downloads/photos
...
可以使用 j Down pho 跳转。
另外,jc 可以限制在当前目录下匹配跳转,jo 是打开文件夹,对我来说是刚需。
2026-02-05 09:34:00
最近使用 OpenCode + Superpowers Skills + GPT 5.2 开发了一个中等复杂度的需求,相比之前使用 Cursor 依赖 Sonnet 4.5 Thinking 模型硬聊硬写,效率和代码质量明显提升!
记录下需求开发流程:
第一、二步应该多花些时间,自己要清楚需求的目标和边界,第二步描述的信息应准确,但无需关注过多细节(表字段、接口字段等),需求清晰则字段必然是清晰的;Plan 模式不会修改本地文件,这个模式下借助 Superpowers 的规划能力,交互式确认问题,答复几轮后,Plan 会主动 “完结” 事项,提供详实的设计文档,使用者最终确认没问题后,即可切换 Build 模式开始实现
Do not redesign.
Do not change the plan.
Only implement according to the plan above.
输入以上描述,告知模型严格按照 Plan 实现代码,代码质量相当高,之前使用 Cursor 开发需求,总是需要反复对话纠正它的错误逻辑和代码风格,特消耗精力!
同需求重复实现的一些对照测试(依据最终产出代码的主观评分):
我的结论
Cursor 搭配 Skills 有较大提升,但 OpenCode 能最大程度发挥 Superpowers 的能力,买了智谱的套餐,只能说 GLM-4.7 还得 “再炼”,实际开发依然推荐 Sonnet 4.5 / Opus 4.5 / GPT-5.2。
同样的需求描述,OpenCode + Superpowers Skills + 优质模型可以产出更好的方案和代码,三者相辅相成。
我理解,并非 Cursor 和 Antigravity 本身能力不足,而是它们对于 Skills 的使用侧重于参考和协助,而 OpenCode 对 Skills 的约束更强,更容易形成稳定、高质量的输出。
补充:我没有条件测试 Claude Code,所以无法做比较,另外同事测试了 Antigravity 搭配 Superpowers,产出的效果跟 Cursor 搭配 Superpowers 效果相似。
2026-01-27 14:18:59
杰我睿是水贝一家黄金回收交易商家,通过他们的微信小程序可以充值(支付宝、微信、银行卡转账到个人账户)、然后在小程序上可以购买金条、板料,也可以把自己的首饰邮寄给他们,余额也可提现,支持 “做空做多” 等玩法。
近日爆雷。
有传言称其做空白银导致巨额亏损,也有人说人未跑路但资金已出海。当前情况是:大量用户账户中的余额、板料沦为数字,提现不打款,提料不发货。
爆雷前两天,他们仍在大力宣传 “免工费”,诱导用户邮寄金银。规则要求签收人填写其自身姓名,目前给出的说法是:该行为视为“赠予”杰我睿,分毛不返。
随后提出所谓“解决方案”:
看小红书上的受害者很多,被套金额少则千百八,多至几百万。有省吃俭用的攒金一夜返贫的大学生,有投资亏损不敢告诉家人的宝妈,也有借嫂子首饰卖金给母亲看病邮寄过去就被骗的不幸儿女,真的很惨烈。
小红书等平台上已有大量受害者发声,被套金额从几千元到数百万元不等。
场面非常惨烈。
这次爆雷与传统 P2P 并不完全相同。
它不只是利用人的贪婪,而是将自己包装成“良心、本分、懂行的黄金商家”,通过日常化运营建立信任,让用户产生粘性并自发宣传,逐步吸纳了买金小白、稳健储蓄者、投机交易者等不同人群,最终统一收割。
风险信号一直都在,但用户信任他们高于反诈风控,前一段时间小红书的风向还是有人吐槽警察把她的卡冻结不能充值,解锁后继续充值被锁,再解、再充!
每个人都会认为自己不会被骗,是别人不懂,对个人商家信用无条件的信任,最终成为收割自己的镰刀。
投资,风险永远是第一考虑因素:
当前经济环境下,捂紧口袋,不要盲目投资。
(本来截了一些图,想来还是不放了,人和人的悲喜也不相通,反倒像看他们的乐子,本文主要目的是为提醒读者在商家 “私有平台” 有存金、存银、存钱,尽快取出,规避风险)
2026-01-23 11:40:22
差不多两年前学习记录过《使用 Github Action 自动构建 Release 版本》,也研究过《使用 Docker 构建多架构镜像》,手动推镜像到 DockerHub,其实一直还差最后一公里 —— 提交代码到 Github 自动构建 Release 二进制成品,并构建镜像推送到 DockerHub 仓库。
而这就是 Goreleaser 所擅长的,本文记录了相关配置和使用方式。
brew install goreleaser
在项目根目录执行初始化,生成 .goreleaser.yaml 配置文件
goreleaser init
按需修改,我的示例配置如下
version: 2
project_name: passkey-demo
before:
hooks:
- go mod tidy
builds:
- id: server
main: .
binary: passkey-demo
env:
- CGO_ENABLED=0
goos:
- linux
- darwin
goarch:
- amd64
- arm64
ldflags:
- -s -w
- -X main.version={{ .Version }}
- -X main.commit={{ .Commit }}
archives:
- id: default
formats: [tar.gz]
name_template: >-
{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}
checksum:
name_template: checksums.txt
changelog:
use: github
sort: asc
filters:
exclude:
- "^docs:"
- "^test:"
- "^chore:"
release:
draft: true
prerelease: auto
footer: |
---
Released by GoReleaser.
dockers_v2:
- id: server
ids:
- server
dockerfile: Dockerfile
platforms:
- linux/amd64
- linux/arm64
images:
- "{{ .Env.DOCKERHUB_USERNAME }}/passkey-demo"
tags:
- "{{ .Version }}"
- latest
注意需要替换 “your-docker-hub-username” 为你的 DockerHub 的用户名,登录后在 URL 中的就是用户名

创建/修改 .github/workflows/release.yml 文件,内容如下:
name: Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: actions/setup-go@v6
with:
go-version: '1.25'
check-latest: true
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v6
with:
version: latest
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
以上配置的 secrets.GITHUB_TOKEN 无需手动配置,Docker 的两个环境变量需要配置。
获取 Docker User Access Token
点击右上角头像,点击 “Account Settings” - “Settings” 下的 “Personal access tokens”,创建一个 “Read & Write” 权限的 Token

生成的 Token 只展示一次,复制下来使用,即 secrets.DOCKERHUB_TOKEN
在 Github 上配置 Secrets
点击 Github 仓库的 “Settings”,侧边栏找到 “Secrets and variables”,我这里添加的是 Repository secrets 类型

放到项目根目录
FROM alpine:3.23
RUN apk add --no-cache ca-certificates
WORKDIR /app
# 使用构建参数获取目标架构
ARG TARGETARCH
# GoReleaser 将二进制文件放在 linux/<arch>/ 目录下
COPY linux/${TARGETARCH}/passkey-demo /app/passkey-demo
EXPOSE 8080
ENTRYPOINT ["/app/passkey-demo"]
注意替换 DOCKERHUB_USERNAME 为你的用户名
DOCKERHUB_USERNAME=your-username goreleaser release --snapshot --clean

查看构建的镜像
docker images | grep passkey-demo
已构建出镜像

如果想进一步运行测试镜像,可以运行:
docker run --rm -p 8080:8080 kissbug8720/passkey-demo:latest
git tag v0.0.12
git push origin v0.0.12
在仓库的 Action 可以看到构建任务。

构建完成后,在 Github 仓库的 releases 可以看到一个 Draft 类型的发布,点击编辑,可修改描述,二进制成品也可以编辑,发布后即对外部可见。
Github Release

Docker Hub 镜像
访问:https://hub.docker.com/r/kissbug8720/passkey-demo/tags

可以看到 0.0.12 标签后 latest 标签的镜像。
从「手动便携难以维护的脚本」到「封装良好的现代化发布方案」,Golang 项目非常推荐使用 Goreleaser 进行发布。
2026-01-13 14:00:00
前些天在 macOS 上启动 Strapi,发现它依赖特定的 Node.js TLS 版本,之前电脑 node 使用 Brew 安装,切换起来也不是太方便,遂尝试了解前端版本管理工具。
发现 Volta(管理 Node 版本) + Corepack(管理依赖安装工具的版本)正式我要找的,笔记记录如下:
使用 Brew 安装 Volta
$ brew install volta
安装不同版本的 Node
# 安装 Node.js 22 版本
$ volta install node@22
# 安装 Node.js 24 版本
$ volta install node@24
安装 Tools
# 作为演示,暂时先安装,后文有更适合的安装方式
$ volta install pnpm
查看已经安装的工具
$ volta list
输出默认版本

查看已安装的全部 Node 版本
$ volta list node
可以看到多个 Node 版本

设置全局默认 Node 版本 & 设置项目固定的版本
$ volta install node@24 --default
# 在前端项目根目录下执行,需要有 package.json 否则报错
$ volta pin node@22
Pin 之后,Volta 会根据项目自动切换 Node 版本!
另外,可临时指定 Node 版本运行脚本
$ echo "console.log('node version:', process.version)" > app.js
$ volta run --node 22 node app.js
node version: v22.21.1
$ volta run --node 24 node app.js
node version: v24.12.0
卸载 Node 版本
$ volta uninstall node@22 # 卸载特定版本
查看当前使用的 node 路径
$ volta which node
/Users/dongdong/.volta/tools/image/node/24.12.0/bin/node
volta 常用的命令如上,我使用它切换、锁定 Node 版本,很方便!
在项目中,除了锁 Node 版本,对应的依赖工具的版本也推荐锁定,因为 volta 无法锁定 pnpm 的版本,所以使用另外的工具
这个 corepack 我是刚听说的工具,它在 Node 16.9 版本中引入,安装了 Node.js 就有。
GPT: Corepack 是 Node 官方内置的工具,用于管理和锁定包管理器(如 pnpm、yarn)的版本,确保项目使用固定的包管理器而不依赖全局安装。
# 卸载 pnpm(之前是由 volta 安装的,无法切换锁定)
$ volta uninstall pnpm
# 安装(使用 volta 统一管理)
$ volta install corepack
success: installed [email protected] with executables: corepack, pnpm, pnpx, yarn, yarnpkg
启用 Corepack
# 查看版本
$ corepack -v
0.34.5
$ corepack enable
使用 Corepack 安装 pnpm(准备并激活)
$ corepack prepare [email protected] --activate
(或者)在启用 Corepack 后,直接运行 pnpm 命令也会触发其安装提醒

安装后会打印 pnpm 版本
$ pnpm -v
10.28.0
如果项目中已经有 package.json 文件,可以执行命令设置 pnpm 的版本值,需要三位准确版本号
$ pnpm pkg set [email protected]
执行后会写入 packageManager 字段声明 pnpm 版本,示例 JSON 如下:
{
"name": "volta-test",
"private": true,
"version": "0.1.0",
"scripts": {
"dev": "node index.js"
},
"volta": {
"node": "22.21.1"
},
"packageManager": "[email protected]"
}
补充说明:Corepack 并非只能管理 pnpm,Yarn、Npm 包管理器也都支持,非常适合多项目的管理。
至此,项目中 Volta 锁 Node,Corepack 锁 pnpm,他们的关系如下:
Volta
├─ node
└─ corepack
└─ [email protected](按项目)
GPT:Volta 是 Node 与工具版本管理的核心,Corepack 是包管理器版本管理的核心,两者结合后可以实现项目级、团队级、跨机器环境一致性。