MoreRSS

site iconYasking | 东东修改

博主毕业后北漂两三年,2017 年初回到哈尔滨从事软件开发,2021 年初又回到北京。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Yasking | 东东的 RSS 预览

Memos: 来自日本的 ndjp 提供免费的三级子域名

2026-02-06 18:11:00

01.jpg

网站:https://ndjp.net/

注册流程非常丝滑,一个账号下可以添加多个三级域名:

{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,适合临时的学习、测试使用,风险提示:严肃场景下仍建议自己注册付费域名

Memos: 刚听说 autojump, 真的好用

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 是打开文件夹,对我来说是刚需。

Memos: 体验 OpenCode + Superpowers + GPT 5.2 开发需求

2026-02-05 09:34:00

最近使用 OpenCode + Superpowers Skills + GPT 5.2 开发了一个中等复杂度的需求,相比之前使用 Cursor 依赖 Sonnet 4.5 Thinking 模型硬聊硬写,效率和代码质量明显提升!

记录下需求开发流程:

  1. 先使用 Cursor 协助构想需求的目标,心中对需求的实现有个预期;
  2. 整理需求的描述(关注重点信息,而非实现的细枝末节);
  3. 使用 OpenCode Plan 模式设计实现方案;
  4. 切换 OpenCode Build 模式按照 Plan 计划严格实施;
  5. 最终人工初审 Review 代码 + Cursor Review 代码;
  6. 提测 & 联调;

第一、二步应该多花些时间,自己要清楚需求的目标和边界,第二步描述的信息应准确,但无需关注过多细节(表字段、接口字段等),需求清晰则字段必然是清晰的;Plan 模式不会修改本地文件,这个模式下借助 Superpowers 的规划能力,交互式确认问题,答复几轮后,Plan 会主动 “完结” 事项,提供详实的设计文档,使用者最终确认没问题后,即可切换 Build 模式开始实现

Do not redesign.
Do not change the plan.
Only implement according to the plan above.

输入以上描述,告知模型严格按照 Plan 实现代码,代码质量相当高,之前使用 Cursor 开发需求,总是需要反复对话纠正它的错误逻辑和代码风格,特消耗精力!

同需求重复实现的一些对照测试(依据最终产出代码的主观评分):

  1. 使用 Cursor 依赖模型 Thinking 模式(旧有使用方式):70 分
  2. 使用 Cursor Cli 搭配 Superpowers + GPT 5.2:85 分
  3. 使用 OpenCode 搭配 Superpowers + GPT 5.2:92 分
  4. 使用 OpenCode 搭配 Superpowers + GLM-4.7:58 分

我的结论

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 效果相似。

Memos: 杰我睿爆雷

2026-01-27 14:18:59

杰我睿是水贝一家黄金回收交易商家,通过他们的微信小程序可以充值(支付宝、微信、银行卡转账到个人账户)、然后在小程序上可以购买金条、板料,也可以把自己的首饰邮寄给他们,余额也可提现,支持 “做空做多” 等玩法。

近日爆雷。
有传言称其做空白银导致巨额亏损,也有人说人未跑路但资金已出海。当前情况是:大量用户账户中的余额、板料沦为数字,提现不打款,提料不发货。

爆雷前两天,他们仍在大力宣传 “免工费”,诱导用户邮寄金银。规则要求签收人填写其自身姓名,目前给出的说法是:该行为视为“赠予”杰我睿,分毛不返。

随后提出所谓“解决方案”:

  • 可在小程序内登记并签署协议,可能返还 1–2 折本金,也可能经其律师测算后被认定倒欠平台资金
  • 不登记,基本没有任何说法。

看小红书上的受害者很多,被套金额少则千百八,多至几百万。有省吃俭用的攒金一夜返贫的大学生,有投资亏损不敢告诉家人的宝妈,也有借嫂子首饰卖金给母亲看病邮寄过去就被骗的不幸儿女,真的很惨烈。

小红书等平台上已有大量受害者发声,被套金额从几千元到数百万元不等。

  • 有省吃俭用攒金的大学生,一夜返贫;
  • 有投资亏损不敢告诉家人的宝妈;
  • 有失业人员、抑郁症患者;
  • 有借来嫂子首饰、卖金为母亲治病,却因邮寄而被骗的不幸子女。

场面非常惨烈。

这次爆雷与传统 P2P 并不完全相同。
它不只是利用人的贪婪,而是将自己包装成“良心、本分、懂行的黄金商家”,通过日常化运营建立信任,让用户产生粘性并自发宣传,逐步吸纳了买金小白、稳健储蓄者、投机交易者等不同人群,最终统一收割。

风险信号一直都在,但用户信任他们高于反诈风控,前一段时间小红书的风向还是有人吐槽警察把她的卡冻结不能充值,解锁后继续充值被锁,再解、再充!

每个人都会认为自己不会被骗,是别人不懂,对个人商家信用无条件的信任,最终成为收割自己的镰刀。

投资,风险永远是第一考虑因素:

  1. 不要碰私有盘,你图它克价便宜、免工费,它图你的本金。
  2. 贵重金属尽量当面交易,一手交钱一手交货,买卖通过正规渠道。
  3. 无监管平台不要充值,钱进去后只是显示数字,提出来的钱干不干净也都不好说。
  4. 凡是 “看起来不像金融行为的金融行为”,都要加倍警惕。
  5. 很多时候它不是骗你不懂,而是骗你懂,你以为懂他的盈利模式,懂他的运作方式。

当前经济环境下,捂紧口袋,不要盲目投资。

(本来截了一些图,想来还是不放了,人和人的悲喜也不相通,反倒像看他们的乐子,本文主要目的是为提醒读者在商家 “私有平台” 有存金、存银、存钱,尽快取出,规避风险)

GoReleaser 自动发布 Go 镜像到 DockerHub & GitHub Release

2026-01-23 11:40:22

差不多两年前学习记录过《使用 Github Action 自动构建 Release 版本》,也研究过《使用 Docker 构建多架构镜像》,手动推镜像到 DockerHub,其实一直还差最后一公里 —— 提交代码到 Github 自动构建 Release 二进制成品,并构建镜像推送到 DockerHub 仓库。

而这就是 Goreleaser 所擅长的,本文记录了相关配置和使用方式。

本地安装 Goreleaser

brew install goreleaser

Go Releaser 配置

在项目根目录执行初始化,生成 .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 Action 配置

创建/修改 .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

02.webp

生成的 Token 只展示一次,复制下来使用,即 secrets.DOCKERHUB_TOKEN

在 Github 上配置 Secrets

点击 Github 仓库的 “Settings”,侧边栏找到 “Secrets and variables”,我这里添加的是 Repository secrets 类型

03.webp

Dockerfile 配置参考

放到项目根目录

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

04.webp

查看构建的镜像

docker images | grep passkey-demo

已构建出镜像

05.webp

如果想进一步运行测试镜像,可以运行:

docker run --rm -p 8080:8080 kissbug8720/passkey-demo:latest

推送标签触发构建

git tag v0.0.12

git push origin v0.0.12

在仓库的 Action 可以看到构建任务。

06.webp

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

Github Release

07.webp

Docker Hub 镜像

访问:https://hub.docker.com/r/kissbug8720/passkey-demo/tags

08.webp

可以看到 0.0.12 标签后 latest 标签的镜像。

最后

从「手动便携难以维护的脚本」到「封装良好的现代化发布方案」,Golang 项目非常推荐使用 Goreleaser 进行发布。

初识 Volta &amp; Corepack 前端版本管理工具

2026-01-13 14:00:00

前些天在 macOS 上启动 Strapi,发现它依赖特定的 Node.js TLS 版本,之前电脑 node 使用 Brew 安装,切换起来也不是太方便,遂尝试了解前端版本管理工具。

发现 Volta(管理 Node 版本) + Corepack(管理依赖安装工具的版本)正式我要找的,笔记记录如下:

Volta 工具

使用 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

输出默认版本

01.webp

查看已安装的全部 Node 版本

$ volta list node

可以看到多个 Node 版本

02.webp

设置全局默认 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 工具

这个 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 命令也会触发其安装提醒

03.webp

安装后会打印 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 是包管理器版本管理的核心,两者结合后可以实现项目级、团队级、跨机器环境一致性。