推特大V同步's avatar
推特大V同步
npub195q4...wpxu
#V2EX ### [程序员] tabbitbrowser 浏览器使用大模型,大模型还是遵守中国法律怎么解决? ![通过浏览器插件使用本地大模型](https://cdn.jsdelivr.net/gh/gitking/resource/img/%E9%80%9A%E8%BF%87%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B.png) tabbitbrowser 浏览器使用大模型,大模型还是遵守中国法律怎么解决?我本地已经开了代理了,通过 tabbitbrowser 浏览器可以正常访问谷歌的。 ![通过浏览器插件使用本地大模型-1](https://cdn.jsdelivr.net/gh/gitking/resource/img/%E9%80%9A%E8%BF%87%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B-1.png) 有知道解决办法的吗?
#V2EX ### [分享创造] 今天上线中国 24 史网站,以时间轴展示各个朝代的国祚长短 今天使用 CC 开发一个中国 24 史网站,用于介绍中国 24 史,以时间轴的展示各个朝代的国祚长短,<https://china.zorezoro.com/>
#V2EX ### [技术栈] 你的屎山代码该装个 GPS 了 **Vibe coding 很爽,直到项目变成屎山代码。** 用 AI 写代码就像开了挂——一个 prompt 就能生成几百行,功能跑得通,成就感拉满。但当项目从 demo 演到几万行、十几个模块时,问题开始暴露:改了一处,牵出三处 bug ;加了一个功能,不知道会影响哪里; AI 每次进项目都要从头读一堆文件,上下文越堆越乱。 **这背后其实是一个老问题:没有文档。** 程序员自古自嘲「屎山代码」,本质上就是前人没留文档,后人只能在垃圾山里考古。讽刺的是,每个人写代码时都不爱写文档,接手别人项目时又疯狂骂娘。文档一直是件费时费力的苦差事——人写,人忘,人懒。 **但现在,写文档这件事可以交给 AI 。** 不是让人写好了给 AI 看,而是让 AI 自己维护文档:代码怎么变,文档就怎么更新。你的 Agent 每次进入项目,3 步就能摸清全局;每次提交代码,系统自动检查文档是否同步更新。文档不再是拖后腿的负担,而是 AI 协作的基础设施。 这套机制的核心就两点: 1. **分形文档 + Prompt 约束** — L1/L2/L3 分形结构让 Agent 快速建立上下文,规则写进根文档形成自我约束 2. **Git Hook 强制校验** — 提交时自动检查,代码和文档不同步就直接阻断,逼着 Agent 更新完再提交 --- ## 一、分形文档系统 ### 核心思路 文档按层级组织,像分形一样:每一层只描述自己直接管辖的内容,不过度展开。 ``` L1: 根目录 CLAUDE.md ← 全局架构、规则、目录地图 L2: 子目录 CLAUDE.md ← 该模块的职责、文件清单、导出、依赖 L3: 文件头注释(可选) ← 仅用于逻辑复杂、不直观的文件 ``` AI 从任意文件出发,最多 3 次 Read 即可到达完整上下文: * 当前文件 → L2 [CLAUDE.md](http://CLAUDE.md) → L1 [CLAUDE.md](http://CLAUDE.md) ### 文件对不变式( File Pair Invariant ) 每个有文档的目录,必须同时存在两个文件: ``` CLAUDE.md ← 唯一的编辑源,内容在这里 AGENTS.md ← CLAUDE.md 的符号链接( symlink ),内容完全一致 ``` **什么是 symlink (符号链接)?** Symlink 是操作系统提供的一种特殊文件,它本身不包含实际内容,而是指向另一个文件的路径。可以理解为**快捷方式**——打开 symlink ,实际访问的是它指向的那个文件。编辑源文件,symlink 的内容也会同步变化。 **为什么要用 symlink ?** 不同 AI 工具读取的入口文件名不同: * Claude Code 读 `CLAUDE.md` * Codex 等读 `AGENTS.md` 用 symlink 而不是两个独立文件,确保永远不会出现内容不一致的情况。 #### 创建 symlink 命令 ``` # 在目录内执行(相对路径) ln -s "CLAUDE.md" "AGENTS.md" # 验证 ls -la AGENTS.md # 应显示 AGENTS.md -> CLAUDE.md ``` --- ### L1 文档(根目录 [CLAUDE.md](http://CLAUDE.md) ) 放在项目根目录,内容包括: * 项目简介 + 技术栈 * 开发命令( dev/build/test/db migration 等) * 整体目录结构图(深度 2 层即可) * 关键架构模式(数据库连接方式、认证流程、权限系统等) * **文档系统本身的规则**(何时创建 L2 、Loop-back Check ) #### 模板 ``` # [项目名] ## 技术栈 Next.js 15 · React 19 · TypeScript · Drizzle ORM · ... ## 开发命令 pnpm dev / pnpm build / pnpm db:generate ... ## 目录结构 src/ ├── app/ # Next.js App Router ├── config/ # 配置、数据库 schema 、i18n ├── core/ # 框架核心模块 ├── extensions/ # 可插拔扩展( AI/支付/存储) ├── shared/ # 共享组件、hooks 、工具函数 └── themes/ # 主题实现 ## 架构模式 [关键模式说明...] ## 分形文档系统规则 [见下文] ``` --- ### L2 文档(子目录 [CLAUDE.md](http://CLAUDE.md) ) 每个 L2 文档控制在 **≤ 80 行**,固定四节: ``` # [模块名] > 本目录文件有变动时,请同步更新此文档。 ## Purpose 这个目录的职责是什么 ## File Inventory | 文件/目录 | 用途 | | ------------ | --------------------------- | | `foo.ts` | 做什么 | | `bar/` | 子模块,做什么 | ## Key Exports - `SomeClass` — 描述 - `someFunction(arg)` — 描述 ## Dependencies - Depends on: `src/core/db`, `src/config` - Depended on by: `src/app/api/*` ``` #### 何时创建 L2 文档 **满足以下任意一条**,就应该创建: * 是顶层或核心模块目录( src/app 、src/core 、src/config 等) * 直接子项有 4 个以上 * 是清晰的模块边界或高频维护入口 * 父文档无法在 3 次 Read 内解释清楚 **以下条件全部满足时,不需要创建**: * 只有 1-3 个文件 * 是叶子级实现细节 * 父文档已能充分描述 --- ### L3 文档(文件头注释) 只在**逻辑复杂、非直观**的文件顶部加注释。普通文件不需要,不要滥用。 **必须写的情况**: * 有非直观约束(如"不能并发调用"、"依赖全局状态") * 有隐晦副作用 * 是跨模块枢纽,需要说明上下游关系 * 算法复杂、实现不直观 **不需要写的情况**: * 纯工具函数( input/output 可从签名推断) * 文件名已自解释的 CRUD **注释格式(三段式 + 约束)**: ``` // input: 依赖外部的什么(模块、表、环境变量等) // output: 对外提供什么(函数、类、接口) // pos: 在系统局部的地位(被谁调用、枢纽作用) // ⚠ 约束:关键陷阱、非直观行为、竞态条件等 ``` 三段式让 AI 秒懂文件坐标,约束行标注需要特别注意的坑。L3 注释本身就是优先级信号——有注释 = AI 需提升注意力。 --- ## 二、文档维护规则:Loop-back Check **每次完成任务后**(不管是修改代码还是加功能),强制执行以下检查: | 步骤 | 触发条件 | 操作 | | --- | --- | --- | | **L2 sync** | 增删改了任何文件 | 更新该目录的 `CLAUDE.md` 文件清单 | | **新目录** | 创建了新目录 | 同时创建 `CLAUDE.md` + `AGENTS.md` symlink | | **目录删除/重命名** | 删除/重命名了目录 | 修复或删除对应 symlink | | **L3 consideration** | 大幅修改了复杂文件 | 更新/添加文件头注释 | | **L1 flag** | 新增顶级目录或扩展类别 | 更新根 `CLAUDE.md` 目录地图 | 这个规则写在根 `CLAUDE.md` 里,让 AI 每次都能看到,形成自我强化的闭环。 --- ## 三、Pre-commit Hook 防护机制 **什么是 pre-commit hook ?** 它是 Git 提供的一个钩子脚本,在你执行 `git commit` 时**自动触发**。如果脚本返回非 0 (失败),提交就会被阻断。常见用途包括:自动格式化代码、跑单元测试、检查代码规范——以及我们这里做的,**检查文档是否同步更新**。 文档规则写得再清楚,AI 也可能在某次任务中漏掉。 Pre-commit Hook 提供 **提交时的最后防线**。 ### Hook 文件位置 ``` .git/hooks/ └── pre-commit ``` --- ### 核心逻辑 ``` 1. 收集所有 staged 文件( git diff --cached --name-only --diff-filter=ACMRD ) 2. 过滤出其中已 staged 的 CLAUDE.md (说明开发者已经在更新文档) 3. 对每个非文档的 staged 文件: └─ 向上遍历目录树,找到最近的 CLAUDE.md └─ 如果该 CLAUDE.md 未被同时 staged → 标记目录为 "stale" 4. 对每个 stale 目录: ├─ 分析受影响文件的变更类型( A/D/M/R ) └─ 分级判断 needs_review ( A/D/R → true, M → false ) 5. 输出变更详情 + 决策指南 + 机器可读的 [DOC-HINT] 块 6. exit 1 → 阻断提交,等待用户/Agent 做出选择 ``` **关键决策:阻断而非警告。** 这个设计不是一开始就确定的,而是经历了两轮迭代: | 版本 | 策略 | 问题 | | --- | --- | --- | | v1 | 警告(`exit 2`) | 开发者和 AI 都倾向于无脑确认,防线形同虚设 | | v2 | 强制更新 | 过于粗暴——修复一个 typo 或改个变量名也要更新文档,反而增加噪音 | | v3 | **阻断 + 分级判断** | 卡住提交,但根据变更类型给出明确的「更新 / 跳过」建议 | 当前采用两阶段处理: 1. **阻断阶段**:提交时检测到 stale 文档,直接 `exit 1` 卡住。不给"警告后自动放行"的漏洞,也不一刀切强制更新。 2. **判断阶段**:根据 A/D/M/R 变更类型自主决策——存在 A/D/R (增删重命名)→ `needs_review=true`,建议更新;只有 M (修改内容)→ 若确认不影响接口/导出,可用 `--no-verify` 跳过。 `--no-verify` 始终可用,不会卡住任何工作流。这种设计把选择权还给人和 AI ,同时用阻断确保选择是被**有意识**做出的。 --- ### 变更类型分级 Hook 输出每个受影响文件的变更类型,帮助快速判断是否真的需要更新文档: | 类型 | 含义 | 建议 | | --- | --- | --- | | **A** (Added) | 新增文件 | ✅ 更新 — File Inventory 需要加入新条目 | | **D** (Deleted) | 删除文件 | ✅ 更新 — 移除已不存在的条目 | | **R** (Renamed) | 重命名 | ✅ 更新 — 文件路径变了 | | **M** (Modified) | 修改内容 | ⚠️ 仅当接口/导出变化时需要更新 | 这个分级引出一个自动化判断规则:\*\*存在 A/D/R 变更 → `needs_review=true`\*\*。 但 A/D/M/R 只是变更类型,不是更新决策。人在面对 hook 阻断时,还需要知道「什么情况下必须更新、什么情况下可以跳过」。完整的决策规则如下: | 必须更新 ✅ | 可以跳过 ❌ | | --- | --- | | 新增/删除/重命名文件或目录 | Debug 代码、console.log 、临时日志 | | 修改接口、类型、导出的函数 | 注释或代码格式化( prettier / eslint ) | | 调整架构或数据流 | 不改动接口的小 bug 修复 | | 修改配置文件( manifest 、vite 、tsconfig ) | 仅测试文件变更 | | 依赖关系发生变化 | 无语义变化的变量重命名 | --- ### [DOC-HINT]:给 AI Agent 的机器可读块 这是整套机制中最有价值的设计演进。 人类看到黄色警告可以凭直觉判断"这次改动要不要更新文档",但 AI Agent 不行——它需要结构化信号。Hook 输出末尾附带的 `[DOC-HINT]` 块解决了这个问题: ``` [DOC-HINT] stale: src/auth/CLAUDE.md | A=1 D=1 M=1 R=0 | needs_review=true src/utils/CLAUDE.md | A=0 D=0 M=1 R=1 | needs_review=true rules: A=Added → doc update recommended D=Deleted → doc update recommended R=Renamed → doc update recommended M=Modified → usually not needed unless interface/export changed ``` AI Agent 可以解析这个块来自动决策: * `needs_review=true` → 读取对应 [CLAUDE.md](http://CLAUDE.md) ,根据 A/D/R 变更更新 File Inventory * `needs_review=false`(只有 M 变更)→ 可以安全使用 `--no-verify` 跳过 **[DOC-HINT] 让 hook 不仅是给人看的提醒,更是 AI 工作流中的一个决策节点。** 这才是"AI 友好"的真正含义——不只是文档结构对 AI 友好,连守护机制的输出也要对 AI 友好。 --- ### 实际效果示例 ``` $ git add src/auth/oauth.ts src/auth/login.ts src/utils/format.ts $ git commit -m "feat: add OAuth support" ⚠ These directories have staged changes but their CLAUDE.md is not updated: → src/auth/CLAUDE.md A src/auth/oauth.ts M src/auth/login.ts → src/utils/CLAUDE.md R src/utils/format.ts M src/utils/date.ts Update docs, or skip with: git commit --no-verify -m "message" When to update: A/D/R, interface, architecture, config change When to skip: debug code, formatting, minor fixes, tests, rename [DOC-HINT] stale: src/auth/CLAUDE.md | A=1 D=0 M=1 R=0 | needs_review=true src/utils/CLAUDE.md | A=0 D=0 M=1 R=1 | needs_review=true rules: A=Added → doc update recommended D=Deleted → doc update recommended R=Renamed → doc update recommended M=Modified → usually not needed unless interface/export changed ``` --- ## 四、整体架构图 ## 架构图 ## 参考与致谢 本文的分形文档思路源自 **赵纯想** 的实践分享。他在使用 Claude Code 开发 laper 时,总结了一套以「分形」为核心的文档组织方法——每个目录自带极简说明,每个文件头声明 input/output/pos ,让 AI 在自相似的结构中快速建立上下文。 我在此基础上做了拓展和工程化: * **文件对不变式**( [CLAUDE.md](http://CLAUDE.md) + [AGENTS.md](http://AGENTS.md) symlink )解决多工具兼容 * **L3 注释从全量改为可选**,配合明确的「必须写/不需要写」判断标准,降低噪音 * **Pre-commit Hook 硬阻断 + [DOC-HINT]** 把规则从「 AI 自觉」升级为「系统强制」 如果你对原始方案感兴趣,推荐关注赵纯想的分享。 本文的实践和工具链已开源为 Skill ,欢迎试用和反馈: ``` # 一键安装 npx skills add longranger2/project-doc-bootstrap ``` GitHub: <https://github.com/longranger2/project-doc-bootstrap>
#V2EX ### [分享创造] 宇宙超级无敌音乐下载器 宇宙超级无敌,音乐下载器,支持无损音乐文件下载、批量下载、一键下载,支持歌单下载。 支持酷狗、酷我、QQ 音乐、网易云、咪咕等音乐平台音乐搜索、下载。支持无损音乐文件下载。 基于 musicdl 项目做的,基于 [musicdlgui.py](http://musicdlgui.py) 文件修改的,然后用豆包 Ai 优化了一下界面和功能。 图片就不放了,GitHub 有。 项目地址: <https://github.com/MrsEWE44/musicDownload> Reserved 。
#V2EX ### [问与答] 当你一个任务跑一半触发了 5 小时限制的时候,你会怎么办? 我刚叫 codex 帮我跑一个任务,现在跑一半了,触发 5 小时的限制。下一次要等 3 个小时~~~ 这 3 个小时,我只能硬生生的等待下去吧? 这跑一半的任务,中间让 claude code 来接手,是否会有问题。 不知道大家是怎么做的。
#V2EX ### [分享创造] 参考 mackup 做了一个 go 程序,用来在两台电脑之间同步配置 <https://github.com/sunznx/syncer> 比 mackup 好用的地方在于 mackup 现在是使用 copy 的方式来维护配置文件,而不是使用 symbol link 。 完全采用 symbol link 在 macos 上又会有问题。 syncer 会根据文件路径自动为每个应用选择正确的模式,无需手动配置
#V2EX ### [奇思妙想] 测运势/匹配度/幸运色等小程序 想开发一个综合小程序,里边包括测运势,测幸运色,幸运搭配,性格测试等,通过广告收入和推广产品变现。比如通过测试运势,推荐今日适合的水晶手串,并在链接内下单。 目前市场已有一些这种类型的小程序,但似乎宣传不够,自己了解到的比较少。 大佬们觉得目前做这个还有可行性吗?
#V2EX ### [问与答] IOS 拼多多新特性好恶心,每次要划两次才能退出 打开拼多多,浏览一会,屏幕下面的小横条就会变成灰色,这个时候要想退出拼多多,需要划两次才能退出 太影响体验了,为了用户留存真的是什么恶心的都干的出来。找了半天也没找到怎么关掉
#V2EX ### [分享发现] 谷歌商店的 Mi Fitness 似乎不能连接国行的小米手环了 最近一次更新手环被强行下线,自动搜索找不到设备,扫描二维码提示“not supported”。在商店的评论中也看到有人用英文反馈同样的问题,不知道是所有手环都不能连接还是只有国行的手环无法连接。好失望,现在必须下载国内版的 app 了吗,那样不会再买小米手环了。
#V2EX ### [推广] 阿里云国际站实名账号 RDS 数据库,顺手记几个容易卡住的点! 最近顺手看了下阿里云国际站的 RDS 。 一开始我以为会比较麻烦,真看下来感觉其实还好,核心流程无非就是:建实例、建数据库和账号、然后连接。 听起来很普通,但大部分问题基本也都出在这几步里。 第一步是建实例。 这个阶段最容易犯的毛病,大概就是只看配置和价格,地域、网络这些选项随手点。前期可能没什么感觉,后面真开始接业务或者连应用的时候,才发现这些东西其实挺关键。 实例更像是先把房子租下来,后面的数据库、账号、连接方式这些,才算是真正开始住进去。 第二步是建数据库和账号。 很多人图快,喜欢直接用一个高权限账号到处连,感觉先跑起来再说。短期确实方便,但后面很容易乱。 这个事情本质上和发钥匙差不多,最怕的就是所有人手里拿的都是万能钥匙。前期把数据库和账号分开,权限按用途拆一下,后面通常会轻松很多。 真正最容易把人搞烦的,还是第三步:连接。 因为“连不上”这种事,特别消耗耐心。 你会先怀疑密码错了,再怀疑地址错了,再怀疑端口不对,最后开始怀疑是不是平台抽风。查半天之后,很多时候问题其实并不复杂,就是几个基础细节没处理好。 比较常见的一个坑就是白名单。 这个看着最基础,但特别容易漏。很多时候你觉得自己地址、账号、密码都没问题,就是死活连不上,最后才发现 IP 根本没加进去。 还有一个点是内网和公网。很多人第一次用云数据库,会下意识觉得“反正都在云上,应该直接能连”。其实不是。如果应用和数据库在同一套网络里,走内网当然比较顺;但如果你是在本地电脑上连,或者本身网络环境不是一套,那就得看公网怎么配。 所以我自己看下来,阿里云国际站 RDS 难点不在“它本身多复杂”,而在于数据库一旦出问题,特别容易让人着急。页面打不开还能慢慢排查,数据库连不上,很多时候人会先乱掉。 简单说就是: 实例先建好 数据库和账号别乱混 连接方式先想清楚 白名单别漏 这几个地方理顺了,RDS 其实没那么可怕。 但如果前面一直抱着“先随便试试”的心态,后面大概率还是得回来补课。 我现在的感觉大概就是,RDS 不是那种很花哨的东西,它更像是平时没什么存在感,但最好别出问题的那一层。真要用的话,也别先把它想太难。大多数时候,不是数据库太复杂,是前面几个小地方没弄对。 需要云服务器联系小飞机 @[cloudcup](https://www.v2ex.com/member/cloudcup) 阿里云国际站 腾讯云国际站 谷歌云 微软云 亚马逊云 免费提供账号代充值 无需绑定 PayPal 信用卡就可开通阿里云国际版账户 支持 USDT 认准 ID 防止被骗(有骗子仿冒) 网址:[www.cloudlinkpro.com](http://www.cloudlinkpro.com)
#古一 MJ v8.1 vs GPT Image 2 视觉表现对比之狮驼岭 猜猜谁拉了(doge) prompt: 中式怪异,黑暗神秘风格融合中式美学,完美细节,多重管线渲染,完美建模。西游记背景,狮驼岭,千妖万怪,坐在左边巨大王座上的大象王重甲妖精,坐在中间巨大王座上的狮王重甲妖精,坐在右边巨大王座上大鹏鸟王重甲妖精。渺小的背对镜头孙悟空肩抗金箍棒步行前进,孙悟空身穿铠甲,近地仰拍镜头,长焦镜头,强烈阴影。极致细节刻画,多次修改,正确透视和主体线条,精致细节 ![](https://proxy.bostr.online/pbs.twimg.com/media/HGPvYyCaYAAAkeN?format=jpg&name=orig) ![](https://proxy.bostr.online/pbs.twimg.com/media/HGPvZOFXkAAuxO8?format=jpg&name=orig) 古一: 昨天发了一组gpti-mage2和mj的对比,评论区并没有出现一边倒向mj的,反而是有很多站gpt-image2的,可见gpt的明显进步。 再来一组,你pick谁? (我先不说谁是谁,各位看官先猜一猜) prompt: 16:9, ![](https://proxy.bostr.online/pbs.twimg.com/media/HGPCgU5XwAAkEXb?format=jpg&name=orig) ![](https://proxy.bostr.online/pbs.twimg.com/media/HGPCg2CXQAA6HEX?format=jpg&name=orig) https://nitter.catsarch.com/MANISH1027512/status/2045743158860878312
#梗图骑士 4月16日,陕西。漫展现场,一名男子cos大白,另一名男子cos河南储户。 大白说:“把钱给我吧,老百姓” 储户:“靠你娘,还俺的钱” 大白:还想要钱?(一顿拳打脚踢) 储户:“俺错了,俺再也不要钱了” 网友评论:“幸好审核员没看懂视频” “这个视频艺术成分不是一般的高啊” [![]( https://nitter.catsarch.com/meme9t/status/2045732673591603477
#立党 不是说韩国本地猪肉降价到7块钱一斤,韩国人均蛋白质摄入量每天500克以上、远远超过美国吗? 怎么韩国当地的面馆,45块钱一份预制菜焖面,里面只有5小块排骨? 猪肉这么便宜,为什么不找老板加两块排骨或者五花肉呢? 韩国人到底吃得起吃不起肉呢?是不是这个民族虚伪无耻又双标,把自己都给骗了? ![](https://proxy.bostr.online/pbs.twimg.com/media/HGPrsITW4AAdGXO?format=jpg&name=orig) https://nitter.catsarch.com/lidangzzz/status/2045737800775975296
#V2EX ### [Apple] [土耳其🇹🇷内购] 稳定币直付多地区 Apple Store / Google Play 内购以及购买其他虚拟商品, Openai 土区约 5.6 折,大部分包含邮件收据 写在前面 Apple 和 Google Play 的账号余额与国家/地区强绑定,转区前需注意: * **Apple store**:改区前必须先花完余额并取消所有相关订阅,否则无法切换。 * **Google Play**:切区后旧区余额在新区无法使用,但切回旧区后仍可继续使用。 所以建议先确认好目标区服,再决定是否下单购买对应区礼品卡。 $V2EX 是跑在 Solana 上的 SPL 代币,需要先换成 USDC /USDT 或者其他虚拟货币才能在下列部分平台消费。链上操作记得预留少量 SOL 做 gas ,建议在已 KYC 的交易所内完成兑换。 仅提出一种成熟的支付思路以及常见商家举例,本人并不对实际交易承担责任,币圈诈骗猖獗,建议提高警惕。 --- 什么是「稳定币直付」 就是 USDC / USDT 等不经过法币兑换,直接在平台结账页选择加密货币支付,填入钱包地址或扫码,付完即发码。整个流程不需要绑卡、不需要银行转账,适合手里已经持有稳定币的人。 --- 稳定币直付礼品卡 **Bitrefill**:下单时选择很多,比如 USDT / USDC / Binance Pay ,付款后直接在结账页或邮件里拿到卡码。包含土区 Google Play 面额 25–1000 TRY ,土区 App Store 10–1500 TRY 。页面明确标注需要土区账号和土区 IP ,没有歧义空间。24/7 人工客服,有 Invoice ID 和退款政策,有 Invoice ID 和 confirmation email (实测发码很快,这个好像有 aff ,网上推的人很多)。 **CryptoRefills**:流程相同,多链选择更灵活,USDT / USDC 支持 Solana 、Tron 、Base 、BNB Chain 、Arbitrum 等多网络,适合直接用链上钱包的人。官方数据:96.6% 订单 10 秒内交付,客服平均首响 1.3 小时,有 confirmation email (实测发码很快)。 **CoinsBee**:5000+ 品牌,200+ 加密货币,同时支持 Binance Pay 等钱包支付。消费场景不只限于 Apple store 礼品卡,还有联想亚马逊礼品卡什么的,有 confirmation email (支持的币很多,包括 SOL ,能买的东西很多)。 **CoinGate**:MiCA 持牌,支持 Visa / Mastercard / Apple Pay / Google Pay / Binance Pay 及主流加密货币。适合临场决定支付方式、对合规有要求的人,有 confirmation email ,登录后的 shopper account 还能看到 purchase history 和 invoice status (能买的东西很多)。 --- 备选:支付宝/银联卡 **MTCGAME 这类**:有土区 Google Play 和 iTunes 页面直接可见,支持银联卡,24/7 客服,即时发码,所有购买都会通过邮件提供 invoice (这个方案我没有实测购买过,属于较高风险)。 **Pockyt Shop**:支付宝内部小程序直接购买,目前只有美区 Apple store/Google play 礼品卡,只能从订单页面看到收据。 也可以在闲鱼购买 --- 关于$v2ex $V2EX 本身就是站内赞助作品的原生代币,可直接打赏创作者。如果你手里有$v2ex ,也可以转换为其他虚拟货币买礼品卡送人或者自用。 --- 售后问题分流 | 问题类型 | 找谁 | | --- | --- | | 没收到码 / pending / 支付成功未发货 | 找卖卡平台,带订单号和截图 | | 卡未激活 / 激活异常 | 先找卖家,不要直接找 Google / Apple | | 地区不匹配 / 账号校验失败 | 平台确认已发码后,才是 Google / Apple 的问题 | | Binance Pay 退款 | 无 chargeback ,退回 Funding Wallet ,靠商户侧发起 | --- 备注 * 截止 2026.4.19 ,Chatgpt Free 计划依旧在提供免费的 codex 访问,包含 gpt-5.4xhigh 级别 * **第一单先买小面额试水,redeem 成功再继续,不要大额快进快出,会风控** * 中国大陆明令禁止加密货币相关业务,请在其他加密货币交易合法合规地区进行交易
#V2EX ### [程序员] 推荐下自己开发的一款字符串处理小工具 # 开发背景 op 在一家小公司上班,由于系统 Bug 较多,经常需要处理数据库中奇怪的脏数据,便以此为契机开发了这款字符串小工具,同时也增加了一些实用功能。如果你经常需要读取 MyBatis 日志、使用 DataGrip 处理数据,或者浏览 JSON ,大概率会需要这款软件。 # 功能介绍 ## 项目简介 ![Software.png](https://i.imgur.com/hghG64H.png) [string\_utils\_v2](https://github.com/changdy/string_utils_v2) 是一个面向日常开发场景的 `Electron` 托盘工具,核心能力是对**剪贴板文本进行快速识别与转换**。应用启动后默认常驻系统托盘,使用快捷键 `Ctrl+Alt+D` 即可唤醒。 窗口弹出后会自动读取当前剪贴板内容,并根据内置处理器的匹配分数自动选中最合适的功能。按下 `Enter` 或点击按钮即可执行转换,结果会自动写回编辑区并同步复制到剪贴板。 这个项目特别适合下面这些高频场景: * **SQL 清洗**:批量处理 `DataGrip` 导出的 `UPDATE / INSERT` 语句 * **MyBatis 还原**:从注解或日志中提取可执行 SQL * **JSON 辅助处理**:字段抽取、结构预览、对象差异对比 * **文本整理**:排序去重、ID 拼接、命名风格转换 * **私有工具扩展**:通过用户脚本把团队内部的小工具挂进侧边栏 ## 使用方式 1. **复制文本**:先把待处理内容放到剪贴板 2. **唤醒窗口**:按默认快捷键 `Ctrl+Alt+D` 3. **确认功能**:程序会自动选中一个处理器,你也可以点击左侧图标手动切换 4. **执行处理**:按 `Enter` 或点击界面按钮 5. **拿到结果**:转换后的文本会自动复制回剪贴板 补充说明: * **窗口行为**:按 `Esc` 或切走焦点时窗口会自动隐藏 * **托盘菜单**:可控制功能显隐、设置开机启动、修改快捷键、打开用户脚本目录 * **无联网依赖**:运行阶段的 JSON 预览服务均在本地启动 ## 功能一览 | 功能 | 说明 | 预览 | | --- | --- | --- | | SQL 数据提取 | 针对 `DataGrip` 等工具导出的 `UPDATE / INSERT` 语句批量提取目标值 | | | 排序并去重 | 对多行进行排序及去重 | Sort_Distinct | | 命名规则转换 | 在 `camelCase`、`snake_case`、`PascalCase` 等风格之间切换 | Naming_Convention.gif | | MyBatis 注解提取 | 从 `@Select / @Update / @Insert / @Delete` 注解中还原 SQL | Mybatis_Annotation.gif | | MyBatis 日志解析 | 从 MyBatis 日志中拼接出可执行 SQL | Mybatis_Log.gif | | JSON 预览 | 同时尝试打开本地 `jsonhero` 和 `jsoncrack` 预览 JSON | JSON_View | | JSON 字段抽取 | 适合对象数组场景,执行时优先提取 `id`,否则提取每项的第一个字段;自动识别更偏向单字段对象数组 | JSON_Extract | | ID 拼接 | 在换行、逗号和 `"a","b"` 形式之间快速切换 | ID_Join.gif | | JSON Diff | 将包含两个对象的 JSON 数组交给 `vscode` 做可视化对比 | json-diff.gif | ## JSON 预览与对比说明 项目在启动时会尝试拉起两个本地 HTTP 服务,无需依赖公网: * [jsoncrack](https://github.com/AykutSarac/jsoncrack.com):以节点图形式查看 JSON 结构,监听 `9987-10087` 之间的可用端口 * [jsonhero](https://jsonhero.io/):以树形视图查看 JSON ,监听 `13001-13101` 之间的可用端口 说明: * **JSON 预览**:会优先尝试打开 `jsonhero`,同时也会打开 `jsoncrack` * **JSON Diff**:输入必须是一个包含两个对象的 JSON 数组,例如 `[{...}, {...}]` * **VS Code 依赖**:`JSON Diff` 建议本机已安装 `VS Code`,并可使用 `code` 命令 # 开发的那些事 最早的时候,这个项目是为了解决 `ID 转换` 的需求——客服经常会给我一批以换行符分隔的订单编号,我需要批量加上引号、再用逗号分隔,然后拼成 `IN("abc","甲乙丙","123")` 的格式进行 SQL 查询。因为手动处理比较麻烦,加上当时对各种效率软件比较着迷,就尝试自己动手做一个。 项目起步之后,后续开发也就步入了正轨:MyBatis 日志提取 SQL 、MyBatis 注解提取 SQL 、排序去重等功能都按部就班地实现了。但用了几年后觉得界面实在太丑,于是重写了 UI ,添加了一些动画,做成了现在的 V2 版本。V2 还增加了 JSON 预览以及 JSON 比较的功能,其中 JSON 预览使用了 json-hero 和 json-crack 来实现,这两个都是我认为非常优秀的 JSON 工具。 关于 json-hero 还有一个有趣的小插曲:它是一款 Remix 全栈项目。前段时间我想把它集成到 Electron 中,在网上搜索解决方案时,竟然搜到了自己两年前的提问: <https://www.v2ex.com/t/1043371> 。虽然过去了 700 天,但我仍然不懂 Remix ,只是借助高速发展的 AI ,把一个大任务拆分成几个子任务,分段完成了这一功能。 当初开发时我也考虑过其他技术栈,比如 Flutter 、微软的 WPF 等,但最终还是不得不承认 Electron 开发效率是真的高 就这些了,欢迎使用。