2026年4月

mac 和 windows 版本可以直接下载

打算把这个游戏做成在线联机 已经做了一部分 问了 AI 重构了很多版效果也不大行
有几个技术问题

  1. 这种联机游戏有物理模拟 一般服务端是怎么做状态同步的
  2. 状态同步 怎么解决卡顿问题

做游戏纯新手 有没有大佬解答下 AI 已经问了很多了 很想知道专业的业界是怎么做的

在 miyaip 买了的美国静态 ip ,用了两个月了,干净倒是确实干净,但是突然开始变得很不稳定,经常卡的不行,太难受了。我买的是 7 刀一个月,应该也不算便宜的了

NginxMaster [可视化 Nginx 管理面板]

Github 地址: https://github.com/pch18/nginxMaster

欢迎 Issue & PR !(同求 git 仓库点亮小星星⭐️)

简介

  • 支持配置: 反向代理, 静态页面, 重定向 等
  • 保存自动校验,失败自动回滚,确保 Nginx 服务不中断
  • 可以管理 SSL 证书,自动识别证书内容,校验合法性(自动续签待开发)
  • 实时请求动态展示(基于 SSE 实现),以及 CPU 、内存、网络监控
  • 更多功能开发中

登录方式

  • 默认连接地址: http://IP:9999
  • 默认用户名: admin
  • 默认密码: admin9999

docker 安装命令:

(二选一)

docker run -d --name nginx-master --net=host --restart always pch18/nginx-master
docker run -d --name nginx-master -p 9999:9999 -p 443:443 -p 80:80 --restart always pch18/nginx-master

支持多架构,amd64, arm64 等,如果缺了某个架构的构建,请提 issue

裸机安装命令(前提安装完 nginx )

(二选一)

curl -fsSL https://raw.githubusercontent.com/pch18/nginxMaster/refs/heads/main/install.debian | sudo bash
wget -qO- https://raw.githubusercontent.com/pch18/nginxMaster/refs/heads/main/install.debian | sudo bash

现在 AI 之类的都对网络环境要求高,动不动封号。
为了长期稳定使用。寻找一位在美国(加州最佳)的朋友进行一个双赢的长期合作。

简单来说:
我需要一个干净的真实家庭宽带 IP 来进行常规的远程办公和账号维护。想在美国拉一条真实家宽,当然,我承担全额宽带费,你可以选择:1 ,免费上网。或者:2 ,每月额外收取一些维护费(可以商量)。或者 1+2 。

合作方式( 3 选 1 ):

方式 1:我包宽带费(让你免费上网)每月的网费(如 Comcast/Spectrum/AT&T 等)由我全额承担。你相当于从此免费用网。

方式 2:纯领每月维护费(金额可议)如果你担心我会在网络上设置了些什么,担心网络安全/隐私的朋友可以选这个! 如果你不想在网络共享上产生交集,可以把我的设备完全独立,你不使用,没关系,你可以直接按月收取一笔固定的“设备托管费”(具体金额我们商量着来)。

方式 3:成年人全都要(宽带费 + 额外维护费)我们可以直接走 1+2 方案:网费我出,另外每月再给你一笔额外的辛苦费!(当然,会比方式 2 少一些)

🛠️ 你需要做什么:
非常简单,不需要懂任何技术。

新办宽带,我可以出初装费

我会邮寄一个巴掌大小的设备(类似树莓派或软路由),你只需要把它插到你家路由器的网口上,你提供电源,并保持 24 小时开机即可。

偶尔设备死机时,帮忙拔插一下电源重启,或者按一下设备重置按钮。

🛡️ 重点承诺与安全保障(大家最关心的):
我非常理解大家对网络安全的顾虑,所以我保证做到以下几点:

用途绝对纯洁:仅用于个人常规网页浏览、AI 平台账号(如网银、跨境电商等)的日常登录与防风控维护。

绝对无灰黑产:坚决杜绝任何 BT 下载、暗网、发垃圾邮件或违法违规操作。这也不是这种静态家宽的玩法。

欢迎私信我!可以先聊聊,觉得靠谱咱们再推进。

前两天就看到了这个 AClaw 的新闻,今天终于灰度到我的账号了。测试了一下,发现目前和资金相关的特性如下:

  1. 不能查询账户余额、基金购买数据等信息。
  2. 可以提取账单信息,每次最多三十天,但是可以依靠上下文多次提取。
  3. 提供了一些内置 skills ,重点是可以设置定时任务!

然后我试了下 curl 功能,发现它确实是一个运行在云服务器的完整 agent ,是能发出请求的!

所以可以让其创建定时任务,每天早上将前一天的账单通过 webhook POST 出来。。。 我本来觉得这种操作会被屏蔽,但是没想到真的成了!

据我浅薄的认知,目前的记账软件都是“半自动”的,需要依赖快捷指令触发截图 然后 OCR 相关信息进行记录,也难以转发到第三方平台。这个 AClaw 如果能稳定提供这个功能,那终于解决了账单导出这个老大难的问题!

从自己的角度聊聊自然语言学习这件事。简单介绍下,po 主目前生活在东京,流利掌握中、日、英三语。实际运用中:中 > 英 > 日,粤语也能做到係知聽不知講。或者讲,粤语也可以講少少,但口音太塑料,更乐意讲自己不会讲。

外语学习经历

  • 英语:初一开始,主要是学校教育和自学,没有任何补习和培训经历,在出国前英语就能流畅交流。

  • 日语:高中毕业后短暂学习过五十音;大学毕业后在家乡本地机构系统学习日语(每周两次),完成中级课程;几年后在深圳进行为期一年的一对一日语学习(每周两次)。

  • 粤语:因喜欢粤语歌,在深圳时期已基本能听懂歌词;后在港企工作,会议中常粤英夹杂,遂参加线下课程学习粤语半年,系统掌握六声九调,心念( sam1 )。

  • 泰语:大学时候的选修课,一门课给 8 个学分。现在已经只记得一句话了。

在大学里面除开一些经管方面的专业课程,最用功和上心的基本都是外语课。

学习是需要源源不断的正反馈,先建立正反馈机制

如何去建立正反馈机制?

学习健身都是反人类的,需要长时间的小步积累才能在未来的某一天得到质的变化,因此如何让自己能够长时间去坚持就变得尤为重要,我们需要去创造正反馈机制来达成目标。

去寻找解答出数学题和解开LeetCode一样的快感。在学校里的正反馈就是来自于老师的表扬和试卷上的分数,在座大都是成年人,可能已经没有这一部分了,分享一些我自己学校外的正反馈:

  • 突然听懂美国饶舌歌手麻辣鸡英文 rap 的瞬间。
  • 大二在乐山用英文帮助未订到酒店的国际友人,并一起完成了两天的旅行。
  • 大三在校园里帮助一位骑行环游世界的日本人,之后偶尔会碰面聊天,现在则用日语。
  • 在深圳用英文给外国友人解释“吹牛”这款酒桌游戏的玩法,大摇骰中喝到宿醉。
  • 参加日文读书会和读者们产生的“共感”。

“我”是凶手

这些 Aha-Moment 都建立在语言积累过程中,并不是到达某一个等级后才能完成。我们要学会运用现有的语言知识去传达,语言只是一个手段而非一个目的。很多时候对方是母语者,因此对方可以语言降级,我们只要用简单词汇就能保证双方沟通的流畅性,关键行为要大胆
例如:

  • Tinder
Q: How was your day?
A: It was dull before your message; you brighten my sky.
  • 用英语去表达爱慕
You're so cute and handsome, and I see light in your eyes. 
I've used all the words I know to compliment you. 
I wish I’d learned more vocabulary to express my emotions to you, 
but English isn’t my native language.

我们需要学会用大脑去组合简单的词汇来达到想要的效果,一言以蔽之就是:以运算复杂度换取空间复杂度

学习的瓶颈问题

从 0 --> 1 不难,难的是从 1 --> ∞

从学习语言,到可以交流简单输出是非常容易的,语言使用场景里的两种模式:

  • 和母语者对话,对方可以降级来包容你的语法错误
  • 非英语母语者用英语对话,由于双方都不是母语者,会自然屏蔽掉高级词汇和语法,大道至简

所以语言从 0 到 1 很容易,难的是之后的进阶,以及从中级到高级的向后延伸。最烦恼的是处于一种会与不会的中间态,整个人的状态都会在一种混乱中,迷失掉前进的方向。
我是一个几乎解答不出数学试卷上最后大题的最后一问的人,也在刷 LeetCode 时看到八皇后问题,直接让我意识到自己的蠢和愚昧。我非常羡慕和嫉妒那些对数学真正敏感的人,羡慕那些足够聪明的人,或许就不会有这些烦恼。

当语言进入一个“可用”状态,而迷失进步方向。可以听可以说可以读可以写,但想要真正能够进行 small talk 。关于 small talk ,如果是本身自己有知识储备量且熟悉的领域倒是能应对,这些知识就像是热加载在“缓存”里,张口就来。关键遇到没加载过的话题,只能长着嘴巴,眯着眼睛,一个劲的点头。

特别是对于日语学习有一个反常识:认识汉字是你日语进步最大的阻力

想做的事

  • 把自己的英语发音改换到英语
  • 去学习一个日本方言,伪装自己的口音

自己的语言学习方式--无痛学习

讲讲来时路,自己觉得语言是自然而然缓慢的积累,而非刻意而为之的学习,因为那样的行为对于我而言太痛苦。自己比较崇尚快乐进步和长线学习,把学习放进日常生活里,尽可能的打造一个无痛学习的长期氛围。(前提:底子不差)

  • 初中 6 本英语书全部背诵(感谢我的英语老师)

    成年后还蛮感激初中英语老师粗暴,纯粹地把知识灌进脑子里,基础对话和语感都是在这一阶段形成的。为什么背书呢?因为那时候每天放学都得把当天课文背完才能走,于是我想当然每天都第一个背完,结果老师又让我去守着别人背。但作为结果这样的背书--》听书检查也加强对于那些文本的印象。

  • 高中英语单词全部背诵,课文熟读

    到了高中则回归正常教学,把背书降级到课文熟读以及全单词背诵。单词量是语言的基石,很多人排斥背单词,但我正好相反,喜欢扩充自己的词汇量。这个阶段,即便老师讲了非常多的语法知识,但脑子里还是一团浆糊,做题全靠语感和所谓固定搭配。英语这门学科依然在持续给到我真向反馈。

  • 上学走路十分钟,拿着 mini 册子记单词(这个习惯到现在也有)

    非常喜欢在交通工具里去背单词,初中和高中家到学校步行大概十分钟,会利用这个碎片时间悄咪咪的背单词,小时候是一种 mini 单词本,一天来回四趟(中午也回家吃饭),基本就把一天的单词背下来,虽然那时候还对艾宾浩斯遗忘曲线闻所未闻,但我的背诵方式如出一辙,会去背当天要被听写的内容,也会再看一遍昨天的内容,主打一个即便为了测验而被单词,也要让这件事变得有价值。

  • 大学放弃课堂,看美剧听欧美音乐,直接真人对话

    大学进入到另外一个状态,几乎放弃所有课程,上课最积极的是泰语和英语口语课。大学在推双语教学,但除了 ppt 和部分课本,其余全是中文,但也有一些老师会在课堂上纠正我们的发音。口语课上到老师对我印象非常深刻,甚至最后考试没去老师也给了我 80+(选修课)。

    这一阶段英语学习更多是刷美剧、听欧美音乐,刚好那些年欧美音乐有一个所谓的五大时代,每天听、看歌词、跟唱。以这种喜欢的方式积累了更多的预料,也会学习到一些俚语,比如“For Good”意思是永远而不是~出于好。也在大一下学期和大二上学习几乎裸考的通过了 CET4&CET6 ,但都是擦着合格线,主打一个 60 分万岁。

  • 工作后,听大量的英文音频,阅读英文文章和书籍

    “每日英语听力”着个 app 曾经是我上下班必备,从家骑小电驴到公司都差不多 20 ~ 30 分钟,这期间就带着耳机每天都听。我会去找在自己听力范围内的内容听,听完会查看一下文本,看看刚刚听到的内容理解得怎样。
    也会刻意去找一些英文文章和素材来看,主要保证一个对英文的持续摄入,它就像是一营养液,没得它我活不了,但也不要太多否则会撑爆。在深圳时上班买了《程序员的英语》,放在公司每天返工时阅读一篇,为整日工作做一个热身。
    一些书的三个版本都会分别看一次。我很少重复阅读同一本书,但换个语言不一样,我除了能享受书籍本来内容带来的快乐,还能同时学习一门语言,何乐而不为呢?《小王子》,《无人生还》我都阅读了至少三遍,中、英、日各一遍。

  • 跟读习惯,看美剧、日剧、新闻、YouTube 任何外文材料

    现在养成一个非常好的习惯,无论在播放任何的语言的语料,我都会不由自主的去跟读,但我没有时间去检验跟读效果。看美剧、日剧、新闻、YouTube 的任何外文内容都会去跟读,可以听到心里那个声音,这样的习惯让我在和真人对话时,时不时蹦出一些自己都没意识到内容。因此我还会因为 YouTube 上中文内容太多而把很多中文 up 都取关了,因为每当我多看一个中文内容,那外文视频就会少一个。我知道自己每天能接受的信息总量,我只能去做减法,虽然不能明确知道自己要什么,但深知自己不要什么。要看中文内容,会去 bilibili 。

  • 通勤时间|健身时间 都是语言学习时间

    通勤对我真的很重要,已经养成习惯在通勤里去背单词和阅读,通勤中很容易令我进入另一个空间。我深知我不能干其他事情,那我就来背单词看原文小说吧,习惯养成就很难更改。去健身房也是,我会在 spotify 里打开播客,去打开一些感兴趣的外文博客,边健身变让外文强奸大脑。健身其实不用太动脑子,这时候我的心是跟着耳朵里的声音在走,也会默默跟读,甚至嘴唇也会说出单词的形状,但不发出声音。
    讲讲 WFH 带给我的唯一灾害:失去通勤时间对单词的渴望

  • 其他


    • 去居酒屋坐着偷听大叔们的对话,在嘈杂环境里模拟真实环境
    • 意识到学好英语的前提是听懂印度英语
    • 参加 Hackathon 后上台三分钟总结,我才不管有没有人在听,只管练习了不怯场且能顺利组织发言
    • 在东京首先把自己当作外国人而非中国人 英语 > 家乡方言 > 普通话 = 日语
    • 打游戏尽量用英文和日文,爱上 AVG 的第 N 天(虽然现在电子游戏阳痿)

最后总结

语言学习这件事,真的非常依赖于兴趣,但不一定是对学语言本身有兴趣。而是可以用这个语言去学习自己感兴趣的东西。
比如喜欢喝酒,就去用英语学习酒方面的所有知识,但你能用英语对酒侃侃而谈时,其他东西也就是在重新继承一个你对酒的抽象封装实现而已。

即便 AI 强大的今天,我还是想亲口讲出对方的语言,而不是依赖于人任何的工具,本人比较老派和原始,除了鱼之外都喜欢的。

大家都很聪明,连 JavaScript 这种毫无道理的东西都能精通,更何况一门人类语言呢?
现在就去种树,一年或者数年后才能有足够的收获,有暴力学习方式,也有无痛缓慢学习方式,我的方式不一定适合所有成年人,但可能会适合你们的下一代,如果能够帮助到的话,心里也会很感激呢。(日式中文)

热爱!热爱!热爱!兴趣!兴趣和兴趣

记得做一个 Perpetual Student

有没有佬有可靠的海外地区号码的网址,现在用这个一直找不到可用的号码,google 和 appleid 都无法注册了,不知道是卡的严还是当前这个没办法用了

现在用的是 hero-sms

ps:50% 中奖概率

最近有点焦虑,回想了一下工作的这 6 年,除了剩点钱(个人来说这一点比较突出 可能也就应届生大厂一年的收入 惭愧),其他好像也就没啥收获了,只有钱是真的😂

技术一直在更替,公司用的技术都比较老,日常的工作也就是满足公司需求,自己学新技术,没有实际在生产应用,比较虚。加上现在 AI 加持,代码写的比我还快、还好,case 处理有的思路可能比我还全面

发现现在招人匹配度都好高的,加上狼多肉少,找工作着实有点难,以后非 985/211 的是不是基本是外包仔了?

所以大多数人都是混口饭吃?我实在想不出干啥有前途,好奇现在大家找工作都关注什么,为了解决当前的生活问题,还是有更高的理想?

以上想到啥就说啥了,也没怎么组织

最近这段时间,我一直在重度使用 Codex,也因此接触了不少中转站。

一开始我的判断标准很简单:先看倍率。
这其实也很正常。对于大多数用户来说,倍率是最容易理解的指标。一个站写 0.6x,另一个写 0.3x,第一反应肯定是后者更划算。

但真正用了一圈之后,我越来越觉得,选择这类服务时,倍率其实只是结果,不是答案

对开发者来说,真正决定体验的,往往不是首页那个数字,而是更底层的几件事:

  • 计费规则是否清楚
  • 模型是否真实
  • 共享策略是否激进
  • 数据边界是否明确

如果这些事情说不清楚,那么倍率再低,最终也很难形成稳定、可预期的使用体验。

为什么不能只看倍率

很多平台在首页最醒目的地方放的,就是一个很有吸引力的倍率数字。
但如果再往下看,会发现对“为什么能做到这个价格”的解释往往非常少。

问题就在这里。

价格本身没有问题,低价也不是问题。
真正的问题是:价格是怎么来的

如果一个平台只告诉你“很便宜”,却不解释它的实现方式,那用户其实很难判断这背后的代价是什么。
而在这一类服务里,低价通常不会凭空出现,它往往意味着别的地方一定做了取舍,只是这些取舍不一定会直接展示出来。

所以我后来越来越倾向于一个判断标准:

一个站可以便宜,但必须把为什么便宜讲清楚。

我现在主要看这 4 个标准

1. 计费规则能不能被清楚地解释

这件事我现在排在第一位。

对开发者来说,最糟糕的情况不是“稍微贵一点”,而是“算不明白”。
如果一个平台的收费方式需要用户自己猜,或者需要使用一段时间之后才能慢慢摸清楚,那这个体验通常都不会太好。

我更认可的方式是:
规则尽量简单,最好能用很短的话讲清楚。

例如:

  • 充值是怎么记账的
  • 平台余额和官方用量怎么换算
  • 实际扣费是按什么口径走的

一旦这套规则能被说清楚,用户就更容易建立信任,也更容易判断这个服务是否适合长期使用。

2. 模型是不是真的

这个问题很多人一开始不会特别敏感,但开发者往往更容易在使用中感知到。

尤其是在代码生成、复杂推理、长上下文这类场景里,模型差异会非常明显。
如果平台在后台做了模型映射,轻量问答可能未必立刻暴露问题,但一旦进入真正高强度场景,差别通常会越来越明显。

所以对我来说,一个很基本的要求就是:

调用什么模型,实际跑的就应该是什么模型。

否则你以为自己调的是某个模型,最后出来的结果完全不是那个预期,排查问题时会非常痛苦。

3. 一个账号挂多少人

这个问题在首页上通常看不出来,但它对使用体验的影响非常直接。

如果一个账号挂太多人,请求就会在很多用户之间来回争抢资源。短期看,平台确实能把价格压下来;但对用户来说,结果往往是:

  • 响应速度波动
  • 缓存命中下降
  • 高峰期更慢
  • 输出质量不稳定

如果只是偶尔用一下,也许还可以接受。
但如果是开发者高频调用,尤其是已经接入自己的工作流,那这种波动很快就会变得不可忽视。

4. 数据边界是否明确

这是我后来越来越重视的一点。

因为很多开发者已经不是把这类服务当作简单聊天工具在用了,而是直接用于真实工作内容。
这里面往往会涉及:

  • 代码片段
  • 接口参数
  • 项目结构
  • 调试过程
  • 业务逻辑

如果一个平台对记录怎么处理、保留多久、是否会用于其他用途讲得不够清楚,那就很难真正让人放心。

不是说所有平台都会有问题,而是边界不清楚本身就是问题

为什么我后来自己做了一个站

研究了一圈之后,我最后还是自己做了一个站。

不是因为我觉得自己一定比别人做得好,而是因为看多了之后,我发现自己更在意的是另外一套东西:

  • 规则是不是写清楚了
  • 计费是不是容易理解
  • 模型是不是一致
  • 数据边界是不是明确
  • 服务是不是在追求长期可持续

所以后来做的时候,我没有把重点放在“怎么把倍率写得更低”,而是更在意“怎么把规则讲清楚”。

目前我自己坚持的几条原则也比较明确:

  • 计费尽量简单透明
  • 不做模型映射,调用什么就是什么
  • 不卖对话记录
  • 小规模运营,优先稳定
  • 做状态页、公告页、教程页,把关键信息公开出来

我越来越觉得,这类服务最终能不能长期留下用户,拼的从来不是某个瞬间的最低价,而是谁更能让用户形成稳定预期。

最后

如果现在再让我给别人一个建议,我不会只说“找更便宜的”。
我更建议在选择 Codex 中转站之前,先看清楚下面这几件事:

  1. 计费规则是不是讲明白了
  2. 模型是否真实
  3. 共享策略是否过于激进
  4. 数据边界是否明确

如果这几件事都说不清楚,那倍率再低,也很难让人真正放心长期使用。

至少对我来说,到现在这个阶段,透明已经比低价更重要了。

如果你也在关注这类服务,可以自己去看看:
getcodex.cc

但更重要的,其实不是最后选谁,而是你在选择的时候,有没有把这些关键问题先问清楚。

这篇只讲本项目里“PDF合并”工具的功能层 JS,不展开页面结构,只看文件进入列表、加密识别、页面复制、结果导出这条主链路。

整个流程可以概括成:

选择文件 -> 过滤 PDF -> 检查是否加密 -> 调整顺序 -> 逐个读取并复制页面 -> 导出合并结果

在线工具网址:https://see-tool.com/pdf-merge
工具截图:

1)先把运行状态收口

这个工具的核心不是“点一下就合并”,而是先把整个过程涉及的状态集中管理:

const state = {
  items: [],
  merging: false,
  mergedBlob: null,
  mergedUrl: ""
}

这里的设计很直接:

  • items 存待合并文件列表,同时保存文件名、大小、是否加密、密码等信息
  • merging 用来锁住重复点击,避免并发合并
  • mergedBlobmergedUrl 用来承接最终导出的 PDF 结果

这种状态拆分的价值在于,文件列表、合并过程、下载结果彼此独立,逻辑不会互相污染。

2)文件进入列表前,先做类型过滤和加密识别

工具不会把用户选择的所有文件直接塞进队列,而是先过滤真正可用的 PDF:

function isPdfFile(file) {
  const byType = file.type === "application/pdf"
  const byName = /\.pdf$/i.test(file.name)
  return byType || byName
}

之所以同时检查 MIME 和文件名后缀,是因为有些浏览器或系统环境下,file.type 并不稳定,只靠一种判断容易漏掉合法文件。

通过过滤后,工具会继续做一件关键的事:提前检测文件是否加密。

async function detectEncrypted(file) {
  try {
    const bytes = await file.arrayBuffer()
    await PDFDocument.load(bytes)
    return false
  } catch (error) {
    const msg = String(error && error.message ? error.message : error).toLowerCase()
    return msg.includes("encrypted") || msg.includes("password")
  }
}

这里没有自己解析 PDF 结构,而是直接借助 pdf-lib 的加载结果做判断。能正常加载就说明未加密;如果报错信息里出现 encryptedpassword,就把它标记为加密文件。这样后面真正合并时,就能提前走密码分支,而不是等到主流程里再统一报错。

3)加入列表时,把文件元信息一次性补齐

添加文件时,工具会边遍历边补齐每个条目的完整数据:

for (const file of list) {
  const encrypted = await detectEncrypted(file)
  state.items.push({
    id: createId(),
    file,
    name: file.name,
    size: file.size,
    encrypted,
    password: null
  })
}

这里的重点不是 push,而是每个列表项本身就是一个“可合并任务对象”。后面的排序、删除、密码缓存、逐个读取,都是围绕这个对象展开的。

尤其是 password 字段,它允许工具在用户第一次输入密码后缓存下来,避免同一个文件在流程内反复询问。

4)加密 PDF 不直接失败,而是进入可重试加载

真正读取源 PDF 时,逻辑被单独收口成 loadSourcePdf。未加密文件直接加载;加密文件则通过弹窗要求输入密码,并允许输错后重试:

async function loadSourcePdf(item, bytes) {
  if (!item.encrypted) {
    return PDFDocument.load(bytes)
  }

  if (!item.password) {
    const pwd = window.prompt('文件“' + item.name + '”已加密,请输入密码:')
    if (pwd === null) {
      return null
    }
    item.password = pwd
  }

  while (true) {
    try {
      return await PDFDocument.load(bytes, { password: item.password })
    } catch (error) {
      const msg = String(error && error.message ? error.message : error).toLowerCase()
      if (msg.includes("password") || msg.includes("encrypted")) {
        const next = window.prompt('文件“' + item.name + '”密码错误,请重新输入:')
        if (next === null) {
          return null
        }
        item.password = next
        continue
      }
      throw error
    }
  }
}

这个函数有两个很实用的特点:

  • 用户取消输入时返回 null,主流程可以把这个文件当作“跳过”处理
  • 真正的异常继续向外抛,避免把所有错误都误判成密码问题

也就是说,这里不是简单地“有密码就加载”,而是把密码交互、重试和异常分类放进了一个独立入口。

5)合并主流程的核心,是“复制页面”而不是“拼接字节”

PDF 合并不能直接把多个文件的二进制流硬拼起来,真正可靠的做法是:先加载源文档,再把页面复制到新的目标文档里。

const merged = await PDFDocument.create()

for (let i = 0; i < state.items.length; i += 1) {
  const item = state.items[i]
  const bytes = await item.file.arrayBuffer()
  const src = await loadSourcePdf(item, bytes)
  if (!src) continue

  const pages = await merged.copyPages(src, src.getPageIndices())
  pages.forEach(function (page) {
    merged.addPage(page)
  })
}

这里的关键点有两个:

  • PDFDocument.create() 先创建一个全新的目标文档
  • copyPages 根据源文档页码列表复制页面对象,再逐页 addPage

这就是整个工具最核心的功能逻辑。它不是在文件层做合并,而是在 PDF 页面模型层做重组,所以可以稳定处理多个来源文件。

6)主流程里同时处理进度、跳过文件和最终结果

完整的 mergePdf 并不只是页面复制,它还把进度更新和失败兜底一起处理了:

const skipped = []

for (let i = 0; i < state.items.length; i += 1) {
  const item = state.items[i]
  const bytes = await item.file.arrayBuffer()

  let src
  try {
    src = await loadSourcePdf(item, bytes)
  } catch (error) {
    skipped.push(item.name)
    setProgress(Math.round(((i + 1) / state.items.length) * 100))
    continue
  }

  if (!src) {
    skipped.push(item.name)
    setProgress(Math.round(((i + 1) / state.items.length) * 100))
    continue
  }

  const pages = await merged.copyPages(src, src.getPageIndices())
  pages.forEach(function (page) {
    merged.addPage(page)
  })

  setProgress(Math.round(((i + 1) / state.items.length) * 100))
}

这里的思路很清楚:单个文件出问题,不拖垮整个批次,而是记录到 skipped 后继续处理下一个。这样用户最终拿到的不是“全量失败”,而是“成功多少、跳过多少”的结果。

如果全部文件都不可用,还会额外拦一次:

if (merged.getPageCount() === 0) {
  throw new Error("没有可合并的页面")
}

这一步避免了生成一个空 PDF,让错误语义更准确。

7)导出结果时,用 Blob 和对象 URL 收口

合并完成后,新的 PDF 会先被保存为字节数组,再转成浏览器可下载对象:

const bytes = await merged.save()
state.mergedBlob = new Blob([bytes], { type: "application/pdf" })
state.mergedUrl = URL.createObjectURL(state.mergedBlob)

点击下载时,并不依赖后端接口,而是临时创建一个 a 标签直接触发保存:

const a = document.createElement("a")
a.href = state.mergedUrl
a.download = "merged.pdf"
document.body.appendChild(a)
a.click()
document.body.removeChild(a)

这意味着整个 PDF 合并链路都在浏览器端完成:文件读取在本地,文档重组在本地,结果导出也在本地。

8)列表排序、删除和清空,本质上都在维护同一个任务队列

这个工具支持上移、下移、删除,本质上是在操作 state.items 这份队列。顺序之所以重要,是因为最终合并页序完全取决于这个数组的先后顺序。

删除或调整顺序后,工具会先清空之前的合并结果,再重新渲染列表。这样可以避免一种常见问题:用户已经改了文件顺序,但界面上还保留着旧的下载结果。

清空时还会多做一步资源释放:

if (state.mergedUrl) {
  URL.revokeObjectURL(state.mergedUrl)
}

这一步的意义是销毁旧的对象 URL,避免结果反复生成后留下无效引用。

9)这个工具的核心,其实是异步任务编排

“PDF合并”表面上只是几个文件拼成一个文件,真正的功能层重点其实有三件事:

  • 把每个文件抽象成可管理的任务对象
  • 把加密识别、密码输入、页面复制和失败跳过串成一条异步链
  • 把结果导出和旧结果清理收口到统一状态里

所以这个工具最核心的 JS 价值,不只是调用了 pdf-lib,而是把“文件队列 + 密码交互 + 页面复制 + 本地下载”这几步组织成了一条稳定可控的流程。


自 2015 年发布 1.0 以来,Rust 在 Stack Overflow 年度开发者调查中连续十年蝉联"最受喜爱语言"(现更名为"最受认可语言")。2025 年的数据显示,72% 的 Rust 使用者表示希望继续使用它。

这是一个值得认真对待的数字。人们喜欢 Rust,不只是因为它适合写底层系统代码,还因为他们在用它写 shell 脚本、Web 应用、命令行工具——各种你意想不到的场景。

Rust 官方 Vision Doc 工作组对大量开发者进行了深度访谈,试图回答一个核心问题:这种忠诚度究竟从何而来?

他们得到的答案,既简单又复杂。


简短的答案,写在官网首页

Rust 让开发者能够编写可靠(reliable)且高效(efficient)的软件

这句话是 Rust 官网的 slogan,但访谈数据给了它更具体的内容。


人们「欣赏」Rust 的四件事

一、可靠性:编译通过,基本就能跑

"我真正喜欢 Rust 的地方在于,它编译通过后,通常就能正常运行。这太棒了,在 Java 里我从来没有这种感觉。" —— 汽车嵌入式系统高级工程师

"Rust 就是那种会帮你兜底的语言。你会睡得更好,而且你实际上不需要那么聪明。" —— Rust 顾问及开源框架开发者

编译器严格的类型系统和所有权模型,让大量运行时 bug 在编译阶段就被拦截。对于需要长期维护的生产系统来说,这种"一次写对,长期稳定"的感觉至关重要。

"我使用 Rust 编写软件的经历是:一旦让它工作了,它就会持续工作。" —— Rust 专家顾问

二、高效性:从大规模数据中心到微控制器

"我们把一个 Java 编写的嵌入式数据库库迁移到 Rust,获得了接近 9 到 10 倍的性能提升。" —— 云基础设施服务杰出工程师

"同一个模块,Java 代码需要加载 VM,而 Rust 实现有 4 倍的效率差异。数据中心成本的节省是很大一笔钱。" —— 金融服务后端公司创始人

"把一个 Python 组件换成 Rust 实现,给我们带来了 100 倍的速度提升。" —— 医疗设备初创公司 Rust 开发者

在大规模工作负载场景下,哪怕微小的性能提升也能转化为可观的成本节省。在嵌入式场景下,Rust 提供了 C 语言级别的底层控制能力,同时附带内存安全保证。

"Rust 就是我一直在寻找的 C 语言替代品。" —— 后端公司创始人

"如果你要写新的底层系统相关的代码,Rust 说实话是唯一真正的选择。" —— 杰出工程师

三、工具链的友好程度

"我能成功学会 Rust,工具链是重要原因。语言本身很有挑战性,但工具链非常容易上手。" —— 开发者工具公司高管

"Cargo 是我用过的最好的包管理器,没有之一。我从来没有遇到过 Cargo 的问题,它就是好用。" —— 有生产 Rust 经验的工程师

"Rust 编译器给出的错误信息和建议非常有帮助。" —— 形式验证领域教授

编译器的错误提示不只告诉你哪里出错了,还会告诉你为什么,以及怎么改。这种设计在工具链层面把「可靠性」的理念贯彻了下去。

四、可扩展性:生态和语言本身都设计为可被扩展

"crates.io 生态结合稳定性保证和语义化版本控制,是我见过的最好的即取即用生态系统。" —— 计算机科学教授兼编程语言设计者

"过程宏(proc macros)是 Rust 真正的超能力。" —— Rust 网络库创建者和维护者

通过 trait、宏、运算符重载等机制,Rust 让第三方库能够创造出编译到高效机器码的高级抽象接口。这种设计让 Rust 能够跟随社区需求,不断延伸到新的领域。


人们真正「热爱」的,是这种感觉

上面那四点是人们「欣赏」Rust 的地方。但让他们「热爱」并持续留下来的,是这四者组合在一起带来的整体效果——Rust 成了一把可以带到任何场合的可信赖工具

"我想要一门语言,能从嵌入式一直用到高级应用,覆盖整个技术栈的每一层。" —— 计算机科学教授兼编程语言设计者

"我一了解到 Rust,就觉得:对,这就是我一直在找的语言。我可以用它往下走到底层,也可以往上覆盖高层。我不再需要在 C 和 Python 之间切换了。" —— 非洲软件工程师和社区组织者

这种全栈覆盖能力,让 Rust 成为了不少开发者职业转型的跳板:

"我学土木工程,自学了前端开发,没有计算机背景。后来对 Rust 和分布式系统产生了兴趣,换了专业,同时学习 CS 和 Rust。" —— 正在转向密码学研究的工程师

"在区块链领域工作了一段时间,Rust 给了我进入当前领域的入场券。" —— Rust 开发者和航空航天社区领导者


这四件事,缺一不可

博客里有一个值得深思的论断:这四个属性不是独立加分项,而是相互依存的整体。任何一个缺失,整个体验都会崩塌。

没有可靠性,你就无法信任它。每次部署都在担心,不敢重构,不敢让经验少的工程师碰关键路径。

"Rust 降低了这道门槛。在我们的关键应用中,经验较少的工程师能够参与贡献,作为团队 leader 我感到安心得多。" —— 云基础设施服务杰出工程师

没有高效性和底层控制能力,有些地方你就去不了:嵌入式、实时系统、任何对 CPU 周期敏感的场合。

"9 次中有 8 次,我写完微控制器代码,只通过单元测试,然后烧到真实硬件上,第一次就跑通了。" —— 安全关键机器人嵌入式工程师

没有工具链和生态,你根本启动不了,或者启动了也举步维艰,永远感觉不到生产力。

"语言本身有挑战,但工具链极其容易。我可以直接开始写代码,它就能构建和运行,这对我来说有巨大的差异。" —— 开发者工具公司创始人

诚实地说:三个地方平衡失调了

报告并没有只讲好话,它同样指出了三处 Rust 目前还没有做好的权衡。

类型系统:有时候,为了编码不变量,反而把事情变得更复杂

Rust 的类型系统可以把业务约束编码进类型里,这是它最强大的能力之一。但当类型嵌套了 async、泛型和生命周期之后:

"那些类型就变得极其复杂,你基本上得是某种 Rust 神才能理解这段代码。" —— 有生产 Rust 经验的工程师

"不是意大利面条式的代码,而是意大利面条式的类型。" —— 汽车半导体公司平台架构师

async Rust:一道额外的门槛,且工具支持还跟不上

"我觉得学习 Rust 有一个坡道,然后有一道跨越,async 就在那边。目标是对 Rust 产生足够的热情,才能跳过这道'悲伤鸿沟',落到 async Rust 的彼岸。" —— 汽车数字座舱软件工程师

"总体印象其实相当负面。感觉没做完……需要大量晦涩的知识才能有效使用它,比如 Pin——我根本说不清楚 Pin 是怎么工作的。" —— 有 Rust 专业经验的研究工程师

async 在语言特性上仍有缺口(dyn trait 中的 async fn 直到去年才部分稳定),编译器的错误提示在 async 场景下也明显弱于同步代码,调试工具更是几乎空白。

crates.io 生态:选择自由成了一种负担

"该用哪些 crate 基本上是不可被发现的。有一层通过经验和艰难摸索积累起来的默会知识。每个人都在自己做研究。" —— Web 开发者和会议演讲者

"教程里用的是 Result<Box<dyn Error>>,但其他人都用 anyhow……我一开始按教程来,但找到的示例代码全部用 anyhow,不知道该怎么办。" —— 数据科学平台工程师

Rust 官方历来避免对特定 crate 给予背书,以免扼杀竞争和创新。但这个立场对新手来说代价不小——他们需要靠社区传承才能知道「这个场景该用哪个库」。


官方给出的三条建议

基于上述发现,工作组提出了三个方向:

一、用 RFC 明确 Rust 的设计目标

把「可靠性、高效性、可扩展性……」这些值写成规范文档,集成进 RFC 审查流程。让未来每一个语言设计决策都能对照这份文档做「得太少 / 刚好 / 过头了」的三维检验,而不是把某个目标凌驾于其他所有目标之上。

二、加大可扩展性投入

当前 Rust 的可扩展性主要集中在类型系统和 proc macro,而 crate 无法影响编译器的错误提示,也无法参与编译流程的中后期阶段。应当推动:

  • 让 crate 能为自己的 API 提供定制的诊断信息和 lint(#[diagnostic::on_unimplemented] 是开始,但还不够);
  • 开放编译器的更多中间阶段(如 Stable MIR),支持定理证明、GPU 编程、分布式系统等需要深度编译器集成的场景。

三、帮助用户导航 crates.io 生态

没有银弹,但可以探索:为 async 等关键场景引入标准互操作 trait(使不同运行时的库能兼容使用);为常用类型定义提供官方协调的中立 crate(如 http crate 已经在做的方向);改进 coherence 规则,让互操作 trait 能在生态中被逐步采纳,而不是被孤岛化。


总结

这份报告最打动人的,不是它发现了什么问题,而是它对 Rust 吸引力的本质描述:

Rust 的魔力不在于任何单一特性,而在于可靠性、高效性、底层控制、友好工具链、生态可扩展性这五者同时成立。缺少其中任何一个,整个体验都会大打折扣。而当它们都到位的时候,Rust 就变成了一个让开发者愿意带着它去探索新领域、改变职业路径、全栈通吃的语言。

这是一种很难被单点替代的整体价值,也是 Rust 能连续十年蝉联「最受喜爱」的深层原因。


参考资料:

程序员历时一年转型成功的一些思考

我是 24 年底拿了大礼包,去年 25 年年初回来工作一个月就又吃了滚蛋套餐,后边到现在基本上一年没做程序员的工作了,快五一了差不多刚好一年,分享一下如何利用 ai 转型的一些心得。

修炼过程

刚出来第一个路线就是走 SEO ,也进了互联网上比较出名的社区,这里就不说了以免被当成广,社区里都有眼熟的。一开始想试着用 Wordpress 搞点花头,主要是有一位朋友天天跟我洗脑说 WP 怎么怎么牛逼,让我搞,后边我发现了这个牛逼的真实落地场景,后边会说。但我没搞起来,我发现也就普通的一个前后端不分离的网站技术栈。期间还学了 AI prompt 之类的,之前在公司都是 Cursor 这样的工具直出,碰到幻觉也只会破防跟 Cursor 斗气“给我说中文,给我重新生成”之类,系统过了一遍之后加上海外技术栈,Next 、Cloudflare 之类的,基本就上马开始干了。

开场即吃瘪

参照社区的 SEO 指南,也搞了几个月,先说结论,没搞起来哈哈,一个子没有,坠机的站很多,我感觉他们应该是有一些系统化的核心科技,他们倡导搞新词,应该是有一些自动化的分析工具+稳定的资源池去弄,我也弄了不少的站,其中也有一些花了心血去搞,效果都不咋样,加上 Google 现在对 AI 滥用的打击比较大,不管是接广还是搞排名都不是很好搞,加上快大半年没米进账,心里逐渐开始慌。

换赛道跑

刚才说一个哥们每天给我洗脑 Wordpress 可以搞事,我就换了一个赛道做,我这边是在温州,我思考了一下 Wordpress 主要是落地到网站,一开始搜某聘的岗位是搜的 wp 岗位,工资大概也就最多 7-8k ,很少,但我在这里发现了机会点,就是有一些招人是要 wp+运营,我想着之前坠机了很多的网站,就问这个朋友要了一个域名案例,专门去投这些制造业的公司的网站,这么一投发现了新大陆。


首先是面试难度大幅度降级,基本上面对的都是制造业、外贸行业的老板,是真老板直聘,他们就没有问什么 “java 的 string 有多长”这种傻福的问题,一开始找了一家,跟他聊,我还是聊什么外链啊数据啊,Google Search Console 啊之类的,第一次聊了很久,回头回家我发现他们压根其实是不理解整个链路的,实际上他们对于这个实体行业也存在焦虑(当然比我们 IT 大逃杀好点,一年吃大客户老本大概也有一千个差不多),他们想出海但不知道怎么出。

我后边就用学到的办法,去 SEM 之类的工具上找他行业内的竞品,再让 AI 帮忙辅助决策分析,再整理一波竞品的产品流量分布情况。要不了多久老板那边就同意我和他合作,以兼职顾问的形式,大概半个月碰一次面,平时不坐班就在家里办公,过去签合同。

说是签合同,实际上他想了解接下来的计划。我就把竞品的几个网站情况给他看,这不说不知道,说了发现讲到了他的 G 点,并且聊了非常多有价值的信息。

外贸的获客渠道其实是多种的,像他们这种老的办法是展会,比如广交会、上交会这样的,摆个摊子,一年拿老外的名片,这几年不好做,以前估计一天拿几十个,这几年一天也就两三个。这个摊子租的费用一年大概也几十万(一年一两次,一次就几天)。

他跟我说竞品的产品很垃圾,原来在我们这边当地都快倒闭了,厂二代接班之后全力梭哈数字营销,从 SEO 社媒都搞起来,大概 20 年前后,这一波起步直接给他拉起来,在互联网的声量比正泰还要大(正泰你们可以搜一下,在天庭开会的时候他先发言,雷子排后边,目前应该是浙商会主席),在中东王爷那边的一级二级代理权大概卖 7000 个,王爷们抢破头就为了拿一个代理权。这一波成功给我这老板整的有点急,于是去年年底十一月的时候去打算招人搞这个事情,刚好我碰到。

我这边我本来是不知道他的竞品的,就是用新站、敬对分析的办法找到了这个厂家。这一波给我的启发挺大的,也给了我关键信息,正常码农讲的话偏结构性,他这种销售出身的,理解不了,要顺着他讲市场分析,他有一句话说“你讲 google serach console 这些我都不懂,你讲市场,我觉得今天和你沟通的很顺利”,这一句话其实给了我很大的鼓励,我回去就继续帮他整理他的数字营销方案(当然也是 gpt 、gemini 交叉验证),从哪些产品切进去,怎么打,给他做决策,基本上他这边就对我很信任了。


红色别针换房子的故事

这里还没完,他给我毕竟兼职合同,满打满算一年也就十个不到,收入还是有点低,虽说是逃了程序员的顶,但还要继续跑。

我这里搞了一个骚操作,我就把跟老板 A 的沟通总结下来,去跟老板 B 谈,这下就唬住了,老板 B 是一位女老板(哎怎么还有白丝看),她扮相白丝白高跟还是全女工作室(这里没有看不起女同志的意思哈),我以为是化妆品出海的,toC 的,结果告诉我是电器产品,卖的还跟老板 A 一样,还不如老板 A 的产品。

这一来二回自信是比较高了,我再回来和 AI 总结,再去找老板 C ,这里的老板蛮有意思,C 获客的渠道是拍视频+AI 视频,这哥们玩 AI 比我们好多人都疯,英国搞了一台 H100 还是啥的,专门跑,但他不懂提示词,这也是我后边要讲的一点,跑出来的视频稀烂,然后社媒招几个客服小妹,每天嘘寒问暖,老婆怎么样了,孩子读书咋样,我问他这也有订单吗,跟我说这也有,C 说我是在温州三年来见过最牛逼的人才,给我画饼,意思是工资不高,后续给我供应商资源给我调货,让我自己也能弄,让我给他做管理客服小妹的大内总管(甚至他在中东也有客服小哥,也让我管)。这个模式我觉得生意太靠天吃饭了,万一社媒开始打击这种,不是炸了么,这边我就没接。

接着去找老板 D ,也是位女同志,她是这么久共同话题最好的一位,因为她也是帮制造业出海,做了很多年了,AI 、SEO 、大厂小厂的程序员朋友都认识,她这边客单价一单大概 50 个一年差不多,实际上是要的,杭州、广州差不多都是这个价,她给我吐槽主要是解释成本太高,土老板以前赚钱太容易,随随便便一个展会+渠道都是几个千几个 e 的,现在让他们做这种 SEO 品牌建设,短期内没 ROI ,他们的脑子理解不了,开的工资也就跟普通蜜雪冰城店员差不多,就基本上指望摸奖一样的状态。

D 老板这边给我的条件还可以,让我去厂里驻场,不打卡,反正露个脸就行,工作做完就回来,让我做整体把关,IT 、文案这边公司都有人配合我,随便我调用, 给我的钱是项目金额的百分之三十,第一个项目 50 个,做完客户还有下一个,大概两个弄下来一年给我 30 个吧。但我这里我没去,她给了我更加有价值的建议,就是让我自己去找供应商。


SOHO 、OPC 的冷启动

说白了一人公司、OPC 、SOHO ,实际上就是利用效率工具做一些事,前提是这个事能被效率工具提升。网站坠机经历+老板 A 的沟通之后,我已经用 Agent 做了一个自动写软文,效果还不错,老板 A 看了觉得很专业。我这里听了老板 D 的建议,回去就问我妈有没有供应商,我们家很多亲戚都开厂,他就给我介绍了表弟的姑姑,姑姑这边非常的配合,我也把我的思路跟姑父、姑姑讲了,恰好姑父 20 年的时候也想过做 SEO ,他们家厂里很忙,内贸都做不完,他一个客户做亚马逊一年好几个小目标的,后边他就放弃了 SEO 这个事情,但是他懂,懂这一块,再加上是亲戚,供货、取材这块非常的配合,出货都可以出我公司的名字,账期这些都可以谈,也没有库存压力。

后边我把我表弟也喊过来一块搞,他是做抖音的大内总管,主播管理、布景、导演巴拉巴拉的都会弄,我给他叫过来又去了姑姑厂里几次,估计他们也是在考察我们俩是不是傻小子,有没有办法卖货。后边我给表弟(黑奴)安排的活是让他后续先学习海外社媒运营,我教了他怎么用提示词,把成图视频这些压的好一点,这几天我安排他去宁波跟他几个做货代、外贸的战友们聊一下,敲定整体的框架,搞定文件和物流的一些事情。

后续社媒这一块也可以用 Agent 提升效率,先让黑奴去经营一段时间试试。


总结和思考

我发现现在 AI agent 实际上可以公式转换为“谁先对谁动手的问题”,让我想起 JoJo 5 最后的镇魂曲追逐战,谁先拿到谁就赢。

对手盘是这些具有具体业务的人群,他们有需求,但迫于过去各种技术壁垒,有些事不好办,我们这边 IT 的优势则是结构化思维,参考老板 C ,C 提示词不会搞、工作流弄的不好,就拍的稀烂,但从整体来说,还是对手盘有业务的优势大,他们可能是绯红之王,直接删除过程拿结果。

我们这边结构化思维优势主要体现在,一旦抓到一个点,比如一些业务的秘密,用结构化思维去做事会更快的到达结果,比如录 SKU 、B2B 网站速度问题,这种我都是 Codex 去搞,我的环印城直剑( Codex )不会输。

群里也有哥们也是开发制造业土老板,原来某蝶某友一年改个功能都是几十万,他直接十几万拿下来还包售后的,Codex 买的还是 18 块的中转(我买的都是 50 块的 plus ,怎么能这样赚钱!),现在他一个月稳定十个 W 的副业收入了。

明天大概还有一个土老板跟我约见面,今天也是某聘联系的,JD 就说网络运营,我说我主出海,他问我一个人能搞的完吗(这里有一个隐藏的点,可以适当抬高价格,他们知道一分钱一分货),看一下明天能不能唬得住。

和这些行业内的认识聊还是会发现很多的需求的,老板 A20 多年的展会经验,拿到很多的老外潜客邮箱( 800 多个,这在客服小妹获客模式眼里是黄金矿),给我提需求让我做一个工作流自动化营销,参照 LV 、万豪酒店发一些行业半月报,档次搞的好一点,这一批客户其实我也想拿过来自己开发,我这里也没跟他提要加钱,还是童工价给他干活。这些其实落地下来都是需求,还正好都是 Agent 能搞。

我用 AI 的办法就是线上线下交叉验证,就跟红色别针换房子的故事一样,AI 现在给码农用最大的作用是学习跨领域知识,短期内可以把一项领域的技能点迅速拉到 65-75 分,100 分可能拿不到,但也够了,75 分足够我接着拿石头跟别的朋友换资源。


硬广

目前老板 A 和我自己的项目 SKU 录差不多了,接近收尾尾声,我这里想再接一个合同或者兼职顾问的工作,给后边自己出货攒点物流钱,主要还是制造业、SEO 、agent 这些方向,有类似需要的朋友可以联系我跟我谈,V:Violetess4 请备注来意

美区 AppStore 可以订阅 Poe 会员,一个月 20 美元有 100 万积分,这些积分在 App 、网页、Api 通用。
ClaudeCode 配置为使用 Poe 的 Api ,Poe 上使用 ClaudeOpus ,曲线救国,间接用上 ClaudeOpus ,又避免被 Anthropic 封号。
100 万积分省着点用差不多够了,如果不够,就多注册几个账号。