Normal view

There are new articles available, click to refresh the page.
Today — 18 August 2025Curiosity

分享一个 JetBrains 全家桶在支持 Promotion 的 MacBook 上,滑动没有高刷效果的解决方案

18 August 2025 at 01:27
william102478551: 背景:楼主的 M1 Pro 的 MBP 最近在使用 Android Studio / PyCharm 的时候,发现滑动修改代码的屏幕刷新率明显还是 60 帧的水平。。。和日常其他 App 的高刷体验严重割裂,实测在 VS 上是不会有这个问题的。

在 JetBrains 的 YT 反馈论坛的帖子找到一个一周前更新的解决方案,是通过替换一个 JB 全家桶启动的 JRE 实现的。

帖子链接🔗: https://youtrack.jetbrains.com/issue/JBR-6243 有需要的老板可以替换下,我这里替换后确实提升明显,不会有之前卡卡的情况了。

最近新上架了一个不需要 VPN 的 iOS Tailscale SSH Terminal 免费客户端

18 August 2025 at 00:30
fortitudeZDY:

作为基于 Tailscale 开发的 xEdge 的开发者,我一直非常喜欢 Tailscale ,然而自从我基于 fd.io VPP 开发了一个新的 iOS VPN 客户端(之前在站内分享过这个 VPN 客户端即 MintFlow NetStack 的 promo code )后,日常主要开着这个客户端,然而我总需要经常远程登陆到我的很多 SSH 服务器进行维护或客户支持,这个时候 iOS 不支持 VPN 多开就比较烦人了。

我原计划想把 Tailscale 的客户端集成到我的 VPN 客户端中,但主要考虑到我的客户端网络协议栈主要基于 C 语言和 RUST 开发,实在不太想引入 Go 这个运行时;因此,趁近期有一些时间,加上我想再深入研究一下 Tailscale 作为 SDK 的可用性,以及 Terminal Emulator 的原理,于是果断开搞,而往往我比较头痛的 UI 部分,如今已经有 Claude Code 这个工具提供大力支持,因此一个月的时间便搞定了,而 Apple Store 的审核则比较有意思,首次提交后,只是问题了一些 App 的工作原因,以及和 Tailscale 账号之间的关系,便顺利通过了,可见如果不是太多同类的软件,稍微有那么一些独创性,通过的可能性还是挺高的。

App 的名称是 NovaAccess ,目前主要是基于大神 Miguel de Icaza ( Gnome 项目的发起人,Mono/Xamian 等项目的发起人,大神最近从微软离职,却专注地搞 Apple 生态 App ,亲自写代码,值得学习)的 SwiftTerm (坛子里前几天发的 Nex Terminal 应该也是基于此项目)来实现 Terminal Emulator Engine ,网络部分则是 Tailscale 和 libssh2 来实现 SSH Terminal 。

App 已经上架 AppStore ,目前免费下载,链接见下:

https://apps.apple.com/us/app/novaaccess/id6749938291

当然 App 也同样在 ProductHunt 发布,链接见下,如果您感觉 App 对您有帮助,希望也能举手之劳,帮忙 upvote 一下,在此感谢您。

https://www.producthunt.com/products/novaaccess?launch=novaaccess

其他说明:

  1. 目前不支持 custom login server ,之所以这样,是因为目前 App 和 Tailscale 客户端一样尚不支持中文,另外就是个人有点小私心,期望后面的 Pro 版本提供 custom login server 支持;还有就是 AppStore 往往提交第二个版本可能会有一些更严格的审核,因此想暂时让功能简单以减少风险;后续如果支持 Pro 版本,一定会在坛内给朋友送 Pro 版本使用。

要不要跳槽的问题

By: gibber
18 August 2025 at 00:21
gibber:

奔四的大龄后端程序员,单身无房在二线城市飘着,近两年公司营收情况不好一直走下坡,未来一两年只能勉强撑着,后面的路还不明朗。基本也能保证公司在岗位就在,暂时不会有失业风险。 现在有个一线城市的 offer ,公司平台要大一点,也能学些新的技术,目前来看前景要好一些,但进去又要从头干起,首先也是要能稳住,也是有很大风险,即便能再干几年,可能最终也是要回老家,在这里肯定没法安家的。 比较纠结是要苟到最后再说,还是未雨绸缪赌一把?

体验了一把运动小飞机低空飞行,感觉挺酷。

18 August 2025 at 00:07
leewi9coder:

最近花了 2k 多大洋体验了一把运动小飞机低空飞行,感觉挺酷。。又被安利学习运动飞机驾照,大概 9w ,兄弟们有什么经验,值不值得去考,以后长期飞行安全性如何,据说有的小飞机带整机降落伞,0 事故,但心里总有点担心。。

我第 2 次拒绝加班了

By: aqtata
17 August 2025 at 21:53
aqtata:

碎碎念一下。。

背景:小公司,没有加班费,我上面有个小主管,是个卷逼。

第一次:

新项目,临时招了个开发,这兄弟天天干到晚上 9 点吧,我基本到点打卡下班。小主管对我不加班有点想法,拉我“谈心”,话不投机,理性的争执了下,大家立场不同,我的观点是公司没有加班费制度,我不会去卷,稀释我的时薪,他呢是站在公司的角度想解约成本,不太愿意招人,事情干完了养程序员费用高了。最后当然是不欢而散,不过之后我下班也没怎么到点走了,有时多给公司奉献 1 小时左右。

项目第一版刚搞完这个新来的兄弟自己辞职了,不知道是不是因为肝不动了还是因为别的原因。。。

第二次: 那兄弟走了后烂摊子又扔我头上了,要重构一些功能。。 前天晚上人在家中接到小主管的电话,要我周末来加班,我说没时间,他说重构项目时间紧,我就说时间足够了,说了两句嗓门开始大了,我说我是人,需要休息,严厉拒绝了。

我的想法是,我做好自己的分内事,不划水摸鱼,白天尽可能负责做事,到下班点我在公司多待下都无所谓,但肯定不会太长时间,周末加班那是不可能的。不爽我就裁我吧。

整顿职场,我贡献着自己的一份力,真心希望下一代人有西方那样的工作环境,不要再卷了。

最近准备升级一波家里的机房,大哥们帮忙参悟参悟

17 August 2025 at 13:45
Martin123123:

前言

  1. 这套老系统经过 5 年的积灰,现在已经不愿意清理了
  2. 目前切换新平台的价格也不算太高,内存、磁盘基本上都可以通用
  3. CPU 、准系统目前价格也合适,所以准备迁移一波
  4. 就是想折腾四子星了

原配(3 台)

配件 名称 备注
准系统 浪潮 5212M4
CPU E5-2660 v4 双路
内存 256G DDR4
硬盘 8TB U.2(P4510 主数据盘 14000+ 通电 写入 800TB 寿命 99% )
硬盘 英特尔 p3605 1.6TB PCIE(传家宝...3 块 61000+ 通电 Percentage Used 1%)
硬盘 2TB M.2(aigo P5000Z 曾经断电丢过数据,后续基本上只挂着,没怎么用了)

方案一

  1. 功耗低, 8259CL 只有 75w TDP, 比现在的省电非常多
  2. 性价比高
  3. 缺点: 无法直通 U.2 和 M.2 必须舍弃其中一个(四子星没有那么多 PCIE 扩展位)
配件 名称 价格
准系统 DELL C6320 / 浪潮 SA5248M4 1200 - 1800
CPU E5-4628L v4 80 * 8

方案二

  1. 平台更新, 后续可玩性更高(伪命题)
  2. U.2 可以直通, 因为后续扩容磁盘计划是继续买 U2 的
  3. 单路 8259CL 估计就可以满足之前 双路 2660 的性能
配件 名称 价格
准系统 浪潮 NS5162M5 / X6000 321V5 2000 - 2300
CPU 8259CL 180 * 4

用视觉大语言模型检索表情包

17 August 2025 at 23:19
heimoshuiyu:

脑子一抽想出来的 idea 。好奇大模型对各种 meme 能理解到什么地步。后面加入语义检索就变成有用的 meme 检索工具了。前端是 vibe coding 的,后端是 Rust 手写的,VLM 提示词是瞎写的,钱包余额是烧光了的。

欢迎各位玩玩,第一次搜索时加载 VectorChord 的缓存可能有点慢。

https://vlmeme.aquarium39.moe

现在国内有什么还可以用 claude 的 ide 方案吗

17 August 2025 at 22:41
flynnlemon:

之前尝试了一段时间 Cursor ,用的 claude 4.0 ,感觉很舒服,现在发现 claude 等模型被禁用了,尝试了一下字节的 Tace ,感觉还是远不如 Cursor 。

所以想在论坛请教一下,有什么不开 vpn 的情况下对 Cursor+claude 进行平替的编程方案吗

从 Claude Code 到 GrowBlank - 软件进化的新范式

By: taowen
17 August 2025 at 22:38
taowen:

[背景音:咖啡馆环境音,键盘敲击声]

Alex: 嘿,Sam !好久不见,最近在搞什么?

Sam: Alex !正好想找你聊聊。我最近在用 Claude Code ,就是 Anthropic 出的那个命令行工具,用着用着突然有了个疯狂的想法。你还记得咱们以前讨论过的 Smalltalk 吗?

Alex: 当然记得!那个"代码即数据,数据即代码"的老古董?等等,你不会是想...

Sam: 哈哈,你猜对了一半。来,我给你演示一下 Claude Code 。*[键盘声]* 看,我现在输入:"帮我分析一下当前目录下所有 Python 文件的代码复杂度"。

$ claude "帮我分析一下当前目录下所有 Python 文件的代码复杂度"

正在搜索 Python 文件...
找到 15 个 .py 文件

生成分析脚本...
$ find . -name "*.py" | head -5
./main.py
./utils/helper.py
./utils/parser.py
./models/user.py
./models/product.py

安装复杂度分析工具...
$ pip install radon

执行分析...
$ radon cc . -s
main.py
    F 15:0 process_data - B (7)
    F 45:0 validate_input - A (3)
utils/helper.py
    F 8:0 format_output - A (2)
...

Alex: 哇,它自己去找工具,安装 radon ,然后执行分析?这不就是个会编程的助手吗?

Sam: 对,但重点不在这。你注意到了吗? Claude Code 实际上是在实时生成一个程序。每一行 bash 命令,都是这个程序的一部分。只不过这个程序不是预先写好的,而是根据我的需求和当前环境动态生成的。

Alex: 等等,你是说... [咖啡杯放下的声音] 用户以为自己在对话,实际上是在无意识地编写程序?

Sam: Exactly !而且更有意思的是,如果我再问一次同样的问题...

$ claude "再分析一次代码复杂度"

检测到您刚才执行过类似操作,直接使用已安装的工具...
$ radon cc . -s --json > complexity_report.json
$ python -c "
import json
with open('complexity_report.json') as f:
    data = json.load(f)
    # 生成可视化报告...
"

Alex: 它记住了!而且这次还加了 JSON 输出和可视化?

Sam: 这就引出了我的想法。如果我们把这个模式推广,不只是命令行,而是整个应用呢?想象一下,用户从一个空白对话框开始...

Alex: 就像 ChatGPT ?

Sam: 对,但不止于此。我管这个概念叫 GrowBlank 。来,我画个图给你看。*[纸笔声]*

Day 1: 对话
用户: "帮我记录今天的开销"
系统: "好的,记录了:今天开销 [输入框]"

Day 7: 模式识别
系统: "我注意到您每天都记录开销,要不要我生成一个快捷输入表单?"
[生成表单: 金额 | 类别 | 备注 | 保存]

Day 30: 应用成型
[完整的记账应用界面]
- 每日开销列表
- 分类统计图表  
- 月度预算提醒
- (保留对话框处理特殊需求)

Alex: 所以应用是"长"出来的,不是设计出来的?

Sam: 没错!这解决了软件开发的核心悖论。你知道为什么那么多项目失败吗?

Alex: 需求不清?

Sam: 不只是不清,是根本不可能清楚!我给你讲个真事。上个月我们公司要做个内部工具,产品经理写了 30 页需求文档。你猜怎么着?

Alex: 上线后全改了?

Sam: 都没等到上线!开发到一半,业务部门说:"这不是我们要的。"你知道最讽刺的是什么吗?他们也说不清要什么,只能说:"等我用了才知道。"

Alex: 啊,经典的"我不知道我要什么,但我知道这不是"综合征。

Sam: 对!但 GrowBlank 模式下,这不是 bug ,是 feature !用户不需要知道自己要什么,他们只需要开始使用

Alex: 等等,我想到个问题。*[椅子挪动声]* 如果每次都是 AI 生成,怎么保证一致性?今天生成个蓝色按钮,明天变成红色了?

Sam: 好问题!这就是 Smalltalk 哲学的精髓了。还记得 Smalltalk 的 image 概念吗?

Alex: 整个系统状态的快照?

Sam: 对!在 GrowBlank 里,每次生成的组件、识别的模式、用户的偏好,都会被持久化。看这个例子:

// 系统自动生成并保存的组件定义
const ExpenseForm = {
  generatedAt: "2024-01-15",
  usageCount: 45,
  lastModified: "2024-02-01",
  schema: {
    amount: { type: "number", required: true },
    category: { 
      type: "select", 
      options: ["餐饮", "交通", "购物", "其他"],
      // 这个列表是从用户历史输入中提取的
      learnedFrom: "user_history"
    },
    note: { type: "text", required: false }
  },
  evolution: [
    { date: "2024-01-15", change: "初始生成" },
    { date: "2024-01-20", change: "用户要求添加类别" },
    { date: "2024-02-01", change: "自动添加常用类别" }
  ]
}

Alex: 所以组件会进化,但是是渐进的、可追踪的?

Sam: Exactly !而且用户可以随时介入。比如:"把那个表单的按钮改成绿色",系统就会更新组件定义。

Alex: 嗯... [思考] 但这不会导致过度定制吗?每个用户都有自己独特的应用,没法标准化,没法培训新员工...

Sam: 这恰恰是传统思维的误区!为什么一定要标准化?我问你,你用的 VS Code 配置和我的一样吗?

Alex: 当然不一样,我有自己的插件、快捷键、主题...

Sam: 那影响你们团队协作了吗?

Alex: ...没有。反而每个人都很高效,因为工具适合自己的习惯。

Sam: Bingo ! GrowBlank 的哲学是:标准化数据,个性化界面。团队共享同一套数据模型,但每个人可以有自己的交互方式。

Alex: 有意思... 让我想想实际场景。*[喝咖啡声]* 比如说,一个创业公司,从零开始用 GrowBlank ?

Sam: 好例子!我来模拟一下这个过程。第一天,创始人 Alice 坐在电脑前:

Alice: 记录一下,今天见了投资人 John ,他对我们的产品很感兴趣

系统: 已记录会议笔记。需要设置后续提醒吗?

Alice: 好的,一周后提醒我跟进

[系统后台生成了一个简单的 CRM 种子]

Alex: 等等,系统怎么知道要往 CRM 方向进化?

Sam: 它不需要知道!它只是响应使用模式。继续看:

Day 3:
Alice: 显示所有投资人联系记录

系统: 找到 1 条记录:
- John (上次联系:2 天前)
建议:是否要添加更多字段来追踪?比如投资阶段、金额范围?

Alice: 好主意,添加这些

[CRM 数据模型进化:添加了新字段]
Day 10:
Alice: 我需要跟踪每个投资人的状态

系统: 基于您的使用模式,我生成了一个看板视图:
[初次接触] → [跟进中] → [尽调] → [条款谈判] → [已完成]
需要调整阶段名称吗?

[CRM 获得了看板功能]

Alex: 卧槽,这就是个渐进式的 no-code 平台啊!

Sam: 不,比 no-code 更进一步。No-code 你还得"设计",拖拽组件,设置属性。GrowBlank 是 no-design,你只管用。

Alex: 但是等一下,*[激动]* 如果 Alice 雇了一个销售 Bob ,Bob 的使用习惯和 Alice 不同怎么办?

Sam: 绝妙的问题!这就是集体进化的魅力。看:

Bob 加入后:
Bob: 我需要批量导入潜在客户

系统: 检测到新的使用模式。是否要为团队添加批量导入功能?
Alice 和 Bob 都会看到这个建议。

Alice 批准后:
系统: 已添加 CSV 导入功能。基于 Bob 的操作习惯,
     我建议添加以下字段映射...

Alex: 所以系统会综合多人的使用模式?

Sam: 对,而且可以设置权重。比如 Alice 是创始人,她的使用模式权重更高。或者销售团队的模式只影响销售模块的进化。

Alex: [兴奋地站起来] 等等等等,我想到一个更疯狂的场景!如果... 如果系统能跨公司学习呢?

Sam: 你是说...

Alex: 对!比如 100 家创业公司都在用 GrowBlank ,都是从零开始进化。系统能不能识别出通用模式?比如"90%的 B2B 公司最终都进化出了这样的销售流程"?

Sam: [拍桌子] 天才!这就是集群进化!每个公司的应用是一个"物种",成功的模式会被自然选择...

Alex: 新公司可以选择"继承"成功的基因!

Sam: 对!但不是照搬,而是作为进化的起点。比如:

新用户: 我要做个 B2B SaaS 的销售管理

系统: 基于 847 家类似公司的进化路径,我建议从这个基础模型开始:
- 线索管理( 95%公司都有)
- 销售漏斗( 89%公司都有)  
- 客户成功追踪( 73%公司在第 3 个月添加)
要应用这个模板吗?您可以随时修改。

新用户: 应用,但我们不需要客户成功模块

系统: 已应用并移除客户成功模块。开始您的独特进化之旅...

Alex: 这简直是... 应用开发的 GitHub !不对,比 GitHub 更进一步,因为它是活的,会进化的!

Sam: 而且解决了开源的一个大问题:你 clone 了别人的代码,然后呢?改不动,因为你不理解设计决策。但 GrowBlank 里,你 clone 的是进化路径,然后继续你自己的进化。

Alex: [坐下,深呼吸] OK ,让我冷静一下。这个愿景很美好,但技术挑战呢?

Sam: 确实有挑战。最大的是意图理解的准确性。看这个例子:

用户: 把昨天的数据删了

系统需要理解:
1. "昨天"是指哪个时区的昨天?
2. "数据"是指哪些数据?全部还是特定类型?
3. "删了"是真删除还是标记删除?
4. 用户权限是否允许?

Alex: 对,自然语言的歧义性。

Sam: 我们的解决方案是渐进式确认。第一次遇到歧义,系统会询问。但它会记住你的偏好:

第一次:
用户: 删除旧数据
系统: 请确认:"旧数据"是指:
     A) 30 天前的数据
     B) 上个版本的数据
     C) 其他?
用户: A

第二次:
用户: 清理旧数据
系统: 基于您的习惯,准备删除 30 天前的数据(共 1,234 条)。确认?

第 N 次:
用户: 常规清理
系统: [直接执行 30 天数据清理]

Alex: 所以系统不只是学习功能,还学习用户的语言习惯?

Sam: 对!每个用户/团队会逐渐形成自己的"方言"。比如在某个团队里,"跑一下"就是指运行测试套件,在另一个团队可能是指部署到测试环境。

Alex: 这让我想起了 Unix 的 alias... [笑] 等等,说到 CLI ,GrowBlank 怎么处理程序员用户?他们可能更喜欢代码而不是对话。

Sam: 好问题! GrowBlank 是全光谱的,记得吗?看这个:

# 程序员 Charlie 的使用方式

# Day 1: 纯命令
$ grow add task "Fix login bug"

# Day 7: 开始写脚本
$ cat my_workflow.grow
add task $1 --priority high --assign charlie
notify slack "#bugs"

# Day 30: 完整的 DSL
class BugTracker(GrowBlank.App):
    def on_critical_bug(self, title, description):
        task = self.add_task(title, priority="critical")
        self.assign(task, self.on_call_engineer)
        self.notify_all(task)
        return task.id

Alex: 所以程序员可以用代码来"训练"自己的应用?

Sam: 确切说是"编程式进化"。而且最棒的是,这些代码定义的行为,非技术用户依然可以通过对话触发:

PM: 发现严重 bug ,登录完全坏了

系统: 检测到关键词"严重 bug",触发 Charlie 定义的 critical_bug 流程:
- 创建高优先级任务 ✓
- 分配给值班工程师(当前: David) ✓  
- 通知所有人 ✓
任务 #1234 已创建

Alex: 妙啊!这就是真正的低代码——不是让非程序员写代码,而是让程序员的代码能被非程序员用!

Sam: 你总结得太精辟了!而且这带来一个有趣的商业模式:技能市场

Alex: 技能市场?

Sam: 想象一下,Charlie 定义的 bug 处理流程特别高效,他可以把这个"技能"发布到市场:

GrowBlank Skills Market

🐛 Smart Bug Tracker by Charlie
   ⭐ 4.8 (2,341 reviews)
   📈 提升 bug 修复效率 40%
   💰 $9.99/月
   
   功能:
   - 自动分类和优先级判断
   - 智能分配给最合适的人
   - 自动生成修复建议
   
   一键安装到您的 GrowBlank →

Alex: 等等,这不就是... 应用商店?

Sam: 不,比应用商店更细粒度。不是买整个应用,而是买能力。你的 GrowBlank 可以是多个技能的组合体。

Alex: [画图] 让我理理... 所以整个生态系统是这样的:

个人进化 → 团队进化 → 公司进化 → 行业模式 → 技能市场
    ↑                                              ↓
    └──────────────────────────────────────────────┘
                      (循环反馈)

Sam: 完美!而且每一层都在让下一次进化更快。新用户不是从零开始,而是站在巨人的肩膀上。

Alex: 但是... [皱眉] 这会不会造成同质化?最后大家的应用都长得一样?

Sam: 恰恰相反!生物进化告诉我们,即使从同一个祖先开始,在不同环境下也会进化出完全不同的形态。达尔文雀,你知道吧?

Alex: 同一种雀,在不同岛屿进化出不同的喙?

Sam: 对! GrowBlank 也一样。即使从同一个模板开始,不同公司的独特需求会驱动应用向不同方向进化。

电商公司 → 进化出强大的库存管理
咨询公司 → 进化出复杂的时间追踪
媒体公司 → 进化出内容工作流

Alex: 而且这些特化的部分又可以回到技能市场...

Sam: 形成良性循环!创新在边缘产生,然后传播到整体。

Alex: [看表] 哇,不知不觉聊了两个小时了。但我还有最后一个担忧。

Sam: 说。

Alex: 隐私和安全。如果系统要学习使用模式,那意味着...

Sam: 所有操作都要被记录和分析,我知道。这确实是个挑战。我们的方案是联邦学习

Alex: 联邦学习?在 GrowBlank 场景下怎么用?

Sam: 看这个架构:

┌─────────────────┐
│   公司 A 本地    │
│  ┌───────────┐  │
│  │使用模式提取│  │────┐
│  └───────────┘  │    │
│   私有数据不出门  │    │
└─────────────────┘    ↓
                    模式特征
┌─────────────────┐    ↓
│   公司 B 本地    │    ↓
│  ┌───────────┐  │    ↓
│  │使用模式提取│  │────┤
│  └───────────┘  │    │
└─────────────────┘    ↓
                   ┌────────┐
                   │中央服务器│
                   │只有模式  │
                   │没有数据  │
                   └────────┘

Alex: 所以中央服务器只知道"80%的用户会在创建任务后设置提醒",但不知道具体任务内容?

Sam: Exactly !而且用户可以选择参与级别:

  • 完全本地:不分享任何信息,但也无法获得集体智慧
  • 匿名模式:分享模式但不关联身份
  • 社区模式:公开分享,获得最大收益

Alex: 这个分级很合理。*[站起来]* Sam ,我觉得这个想法真的可能改变软件行业。

Sam: 你知道最让我兴奋的是什么吗?这可能终结"软件项目失败"这个概念。

Alex: 怎么说?

Sam: 传统项目失败是因为:交付的不是用户想要的。但 GrowBlank 模式下,没有"交付"这个概念,只有持续进化。软件永远在变成用户想要的样子。

Alex: 失败变成了不可能... [沉思] 不对,如果用户自己都不知道自己要什么呢?

Sam: 那就慢慢探索呗! GrowBlank 的哲学是:目标可以模糊,但每一步都有价值

用户: 我想提高效率
系统: 让我们从记录你的时间开始?
[一周后]
系统: 基于数据,您在邮件上花费 40%时间,要不要试试自动化?
[一月后]  
系统: 您的效率提升了 30%,主要贡献是邮件自动分类

Alex: 所以它不只是工具,还是顾问?

Sam: 更像是共生体。用户和系统互相学习,共同进化。

Alex: [收拾东西] 好了,我得走了。但在我走之前,一句话总结 GrowBlank ?

Sam: 从使用中生长,而非从规划中构建。

Alex: 精辟!我的版本是:每个人都值得拥有为自己量身定制的软件。

Sam: 哈哈,都对!这就是 GrowBlank——让软件民主化,让每个人都成为自己软件的设计师,只是他们不需要知道自己在设计。

Alex: 期待看到它改变世界。下次咱们用 GrowBlank 来组织聚会?

Sam: 哈哈,到时候它可能已经进化出完美的聚会组织功能了!

[结束音乐渐入]


Podcast 后记

主持人: 各位听众,刚才你们听到的是 Alex 和 Sam 关于 GrowBlank 的深度对话。这个产品的核心理念——软件从使用中进化——可能会彻底改变我们对软件开发的认知。

关键要点回顾:

  1. Claude Code 的启发:将对话转化为程序执行,用户无意识地在编程

  2. 进化光谱:从纯对话到专业应用的渐进式演化

  3. Smalltalk 哲学:使用即开发,系统可自我修改

  4. 解决核心悖论:用户不需要预先知道自己要什么

  5. 集体智慧:跨用户、跨公司的模式学习

  6. 技能市场:能力的原子化和再组合

  7. 隐私保护:联邦学习确保数据安全

讨论问题:

  • 你愿意让你的软件"进化"吗?
  • 标准化和个性化,哪个更重要?
  • 如果软件都是独特的,如何培训和交接?

欢迎在评论区分享你的想法。如果你想亲自体验 GrowBlank ,访问 growblank.ai 开始你的进化之旅。

记住:你的下一个应用,就从一片空白开始。

下期预告:我们将邀请实际使用 GrowBlank 的创业公司,分享他们的应用是如何从零进化成核心业务系统的。


本 Podcast 文字版由 GrowBlank 自动生成并优化。是的,这个工具在记录自己的故事时也在进化。

Chrome 离线翻译插件已上架 Chrome 扩展商店 一比一还原原生网页翻译

By: AnYi798
17 August 2025 at 22:26
AnYi798:

一个基于 Chrome 138+ 新增的本地 Translator API 和 Language Detector API 的轻量级翻译扩展,支持自动检测网页语言、自动翻译网页、离线翻译(首次可能需下载模型)、快速出结果。

特性 自动检测来源语言( LanguageDetector ) 目标语言可选(默认中文) 使用浏览器内置 Translator API 本地翻译,隐私安全 首次使用自动下载模型,后续离线可用,响应更快 一键复制翻译结果 朗读翻译结果 支持自动/手动翻译当前网页 一比一还原 Google 原生网页翻译

运行要求 Chrome 版本:138+(支持 Translator 与 LanguageDetector )

安装与加载(开发者模式) 打开 Chrome 地址栏:chrome://extensions 打开右上角“开发者模式”开关 点击“加载已解压的扩展程序”,选择本项目文件夹 点击工具栏扩展图标,打开弹窗使用

使用说明 选择来源语言(或保留自动检测)与目标语言 在输入框粘贴/输入待翻译的文本 点击“开始翻译” 首次使用可能会触发模型下载(页面会显示下载进度),下载完成后开始翻译 翻译完成后,可复制结果;点击 “朗读”按钮可朗读结果 开启自动翻译网页,访问网页后自动进行翻译

Chrome 扩展商店下载地址: https://chromewebstore.google.com/detail/translator%E5%BF%AB%E9%80%9F%E7%BF%BB%E8%AF%91/hlckjpmehcjcldpaamdcegocapmelegc?authuser=0&hl=zh-CN

记第一次上台展示

By: zhanghe
17 August 2025 at 22:07
zhanghe:

又突破了自己,在 8 月 16 号的 Monad 北京黑客松中,人生第一次上台,展示了自己做的去中心化小游戏《韭菜别跑》。

虽然全程声音颤抖,哆哆嗦嗦,但我真的在认真的展示自己,我相信以后会更好的。

简单介绍一下《韭菜别跑

韭菜别跑 的英文名叫 Crash Dash,它是一款运行在 Monad 测试网与 Farcaster Mini App 环境中的完全去中心化小游戏。玩家在固定 20 秒的模拟行情里把握“买入→卖出”的时机,目标是尽可能接近全程的峰值价;游戏结束后可将成绩上链,排行榜在前端聚合生成。

  • 链上合约最小化:仅记录地址的历史最佳分数并广播事件,Gas 成本低。
  • 链下前端负责聚合:依据链上事件聚合排行,灵活扩展、零后端依赖。
  • 移动优先深色 UI:K 线模拟、卖出标线与高亮分数,适配手机屏幕。
  • Farcaster 集成:即开即用的 Frame 体验(@farcaster/frame-sdk )。

玩法与规则

  • 局时固定 20 秒,步长 500ms/根 K 线。
  • 点击“开始”后生成行情曲线(确定性波形叠加小趋势,非纯随机)。
  • 任意时刻可“卖出”一次,仅记录卖出价;仍需跑满 20 秒再结算。
  • 结算价:若已卖则取卖出价,否则取最后一刻价格。
  • 分数:分数 = 峰值价 − 结算价(越小越好)。

精彩时刻

Crash Dash appHenry Show

我第 2 次拒绝加班了

By: aqtata
17 August 2025 at 21:53
aqtata:

碎碎念一下。。

背景:小公司,没有加班费,我上面有个小主管,是个卷逼。

第一次:

新项目,临时招了个开发,这兄弟天天干到晚上 9 点吧,我基本到点打卡下班。小主管对我不加班有点想法,拉我“谈心”,话不投机,理性的争执了下,大家立场不同,我的观点是公司没有加班费制度,我不会去卷,稀释我的时薪,他呢是站在公司的角度想解约成本,不太愿意招人,事情干完了养程序员费用高了。最后当然是不欢而散,不过之后我下班也没怎么到点走了,有时多给公司奉献 1 小时左右。

项目第一版刚搞完这个新来的兄弟自己辞职了,不知道是不是因为肝不动了还是因为别的原因。。。

第二次: 那兄弟走了后烂摊子又扔我头上了,要重构一些功能。。 前天晚上人在家中接到小主管的电话,要我周末来加班,我说没时间,他说重构项目时间紧,我就说时间足够了,说了两句嗓门开始大了,我说我是人,需要休息,严厉拒绝了。

我的想法是,我做好自己的分内事,不划水摸鱼,白天尽可能负责做事,到下班点我在公司多待下都无所谓,但肯定不会太长时间,周末加班那是不可能的。不爽我就裁我吧。

整顿职场,我贡献着自己的一份力,真心希望下一代人有西方那样的工作环境,不要再卷了。

Fedora 42 使用 docker-compose 安装的 immich 无法用 ip 访问

By: cutecore
17 August 2025 at 21:28
cutecore: 机器是 vmware 安装的 Fedora 42 。ip: 192.168.31.31 。
使用 docker-compose 安装了 immich 。
在机器[192.168.31.31]上 curl 192.168.31.31:2283 不通,但是 curl 127.0.0.1:2283 可以。
或者说 使用 docker run 运行的容器可以用 192.168.31.31+端口访问,但是 docker-compose 运行的容器就不行,但是 127.0.0.1 curl 均正常。
已经或者说默认绑定 0.0.0.0 。
尝试关闭防火墙
docker ps 显示绑定了 0.0.0.0
正好今天尝试了全新安装,还是不行。

为了爽看凡人修仙传,我花两天时间写了个知识图谱应用

By: kuhung
17 August 2025 at 21:19
kuhung: 看这类数百万字的小说,很容易不知道人物、法宝前后的关系。于是便利用 LLM ,提取了小说中的若干实体和部分关系,弄了一个 Graph 应用,这样就可以来查询不同实体间的关系。

要说以前,做这类应用最难的还是实体关系识别。但是现在直接丢给大模型的应用,切分、向量化、索引和召回都不用自己做的。很快就能捣鼓出来一个看着还行的应用。

当然,目前还有很多实体的解释需要进一步完善;实体间的关系,也需要细致调整。已经忍不住和大家分享,想看看大家的反馈。

B 站介绍视频: https://www.bilibili.com/video/BV1FhYCzoEnW/

网站地址: https://fanren.kuhung.me/

关于交易:我踩过的坑和我对交易的认知

By: SpontaLeo
17 August 2025 at 20:55
SpontaLeo:

首先声明,本文不构成任何投资建议,不推荐任何人进入数字货币市场,不建议任何人进行高风险赌博行为。

OP2017 年毕业,10 月左右同学推荐山寨币进圈,花了 5000 元买它,随后持有半年有余,因币种改名当天拉了 100%+赚 5000 离场,现已归零,此为背景。因为这个事,导致我一直认为币圈是个挺魔幻的地方(当然 OP 认为现在越来越癫了),因此持有过一段时间的现货后现在已经全面转向期货交易。

OP 本人是那种保守型的投资者,会先考虑潜在风险,然后才会看潜在收益。 这些年我踩过很多坑:

  1. 背景里面所说的,听信他人建议,虽然是赚到了钱,但是如果不是因为这个币改名也许我只能慢慢看着它归零
  2. 加入社区,听信他人投资建议,没有对自己的账户和每一笔交易负责,有很多吃客损的,带单也是,很多胜率很高的马丁策略,新手很容易被迷惑,马丁归零只是时间问题
  3. 重仓高杠杆,OP 曾在 2018 年 10 月 15 日在 USDT 脱锚事件中,听信社区老师做空喊单,连续 3 笔 100 倍杠杆重仓做空比特币,仅 10 分钟账户中 1000 美金几乎归零,仅剩下 8 美金
  4. 不学习,像大多数韭菜一样,OP 在账户遭受重创后没有吸取教训,而是离开市场。在后续市场行情又开始高涨后高位进场二次接盘
  5. 抄底,这一条只是我个人的观点,OP 认为抄底没有办法有效设置止损,同时持有的时间成本很高
  6. 不止盈,不止盈和上面的抄底一样,都是贪婪的某种表现形式。抄底是希望能够买在最低点,博取最大化利润;不止盈则是赚了想要赚更多。在 OP 的几次现货交易不止赢最终利润回吐并出现过倒亏的情况后,我发现现货交易会降低我的警惕性,因此我现在几乎不做现货交易了

下面说说,OP 个人对交易的认知,再次声明投机是一种高风险行为,本文不构成任何投资或投机建议:

  1. 仓位管理/风险控制第一:首先一定不要梭哈。如果你的账户亏损 10%,那么你要赚 11%+才能回本,如果你亏损 30%,那么要赚 42%+才能回本,如果你亏损 50%,那么你需要赚 100%才能回本。时刻牢记这一点,不要怀有侥幸心理。至于如何管理仓位,很多书都有涉及,在此不做赘述
  2. 趋势是你的朋友:趋势一旦发起就不会轻易拐头,千万不要觉得涨得太高了就去做空,跌得太狠了就去做多,不要试图战胜市场,最终要达到不预测只跟随( OP 没有达到这个阶段)。其实这一点也不仅仅适用于股市,就像现在计算机和其它行业的失业率一直走高,或者是房价一直跌跌不休,或是生育率一直下降等等,任何趋势一旦发起就不会轻易拐头,站在趋势这边,不要和趋势作对
  3. 基本面 VS 技术面:OP 视野有限但 OP 认为,这两者并不是排它的关系,而是相辅相成的关系。但是对于资金量不大的情况而言,技术面是你唯一可以依靠的工具(这条仅代表 OP 个人观点)
  4. 盈亏比和数学期望:交易是一门艺术,它不是一种科学,因此你必须认识到市场的不确定性。如果你明白这一点,那么你就不会在任何情况下重仓或满仓出击,也不会在亏损后扛单直到最后一无所有。在理解了市场的不确定性之后,每笔交易前都应该评估盈亏比如何,如果盈亏比是 1:1 ,不考虑滑点和手续费,长期来看,你应该是不亏不赚的(前提是做好仓位管理,否则一次失败你就输完了)。如果是 2:1 ,那么你只需要有 33%+的胜率,长期来看你就是可以赚钱的了。一定要注意长期这个事情,如果你将交易视为赌博,寄希望于毕其功于一役,那么亏完就是你的结局,交易不是赌博,交易的成功是建立在你的胜率和盈亏比拥有正的数学期望,只要你活得足够久,交易得足够多,你一定能够赚到钱
  5. 短线 VS 波段 VS 趋势:关于交易周期,每个人的风险偏好并不一样,你适合哪种形式只有你自己才知道。如果是做短线,那么就要求你快速决策和进出场,不受近期交易结果的干扰,它能让你的资金快速成长,但是也可能让你在短时间内赔得精光,它对交易者的水平要求是最高的;如果你做趋势交易,那么你首先不能错过任何大趋势,其次你要承受单笔更大的风险,否则你赚的钱无法 cover 你的试错成本最终也只是慢性归零,趋势交易的胜率通常不高,低胜率和持仓过程对心态也是一种较大的考验;波段交易,介于短线和趋势之间,它允许你在做决策前有一定的时间思考,对持仓的心态考验也没有趋势交易那么大。
  6. 关于技术:技术只是交易成功中的一小部分,技术是一个由简到繁,再删繁就简的过程,你只有学习了,尝试了,才能理解技术不是万能的,才能找到哪些技术,哪种指标适合你,才能删繁就简,才会明白没有哪种技术是圣杯,市场的不确定性是始终存在的
  7. 关于心态:OP 也没有什么可以说的,心态因人而异,因资金量而异,OP 觉得,如果你没办法控制自己的行为,比如重仓交易,扛单,那么趁早离开市场可能是最好的选择,否则最终是死路一条

在 OP 看来,要想在交易这条路上成功,仓位管理>心态>技术。OP 现在也并没有稳定盈利,目前只是小赚小亏阶段。OP 不建议任何人进入这个世界,潘多拉魔盒一旦打开就无法关上了。

群晖 BTRFS 恢复求助.

By: skadi
17 August 2025 at 20:28
skadi:

起因: 之前用 8 盘做了一个 raid5,然后期间因为 sata 口进灰以及猫毛导致几个硬盘读写超时,提示存储空间损坏. 后来换了硬盘线并且清理了灰尘之后,硬盘全部 smart 检测正常,但是存储空间已经损坏而且没有修复的选项. 重组 raid5 也没有效果.看 dmesg 不像是 raid 的问题.请问有人能帮我分析一下原因以及怎么恢复存储空间吗. 里面主要是一些备份,家庭照片视频,以及各种 git clone 的仓库文件,可以容忍部分丢失.

主要的错误 dmesg 如下.

[  563.464197] BTRFS info (device dm-3): enabling auto syno reclaim space
[  563.464477] BTRFS info (device dm-3): enabling ssd optimizations
[  563.464722] BTRFS warning (device dm-3): 'recovery' is deprecated, use 'rescue=usebackuproot' instead
[  563.465117] BTRFS info (device dm-3): trying to use backup root at mount time
[  563.465429] BTRFS info (device dm-3): using free space tree
[  563.465663] BTRFS info (device dm-3): has skinny extents
[  564.652760] BTRFS info (device dm-3): bdev /dev/mapper/cachedev_1 errs: wr 0, rd 2455, flush 0, corrupt 415692, gen 0
[  621.433124] BTRFS info (device dm-3): root of syno feature tree is null
[  621.465224] BTRFS warning (device dm-3): parent transid verify failed on 48192636878848 wanted 107173620 found 107173423

[  621.465776] md2: [Self Heal] retry sector [3227932736] round [1/2] start: logical-sector [3227932736], sh-sector [461133248], d-disk [0:sata6p3], p-disk [4:sata2p3], q-disk [-1:null]
[  621.466428] md2: [Self Heal] retry sector [3227932744] round [1/2] start: logical-sector [3227932744], sh-sector [461133256], d-disk [0:sata6p3], p-disk [4:sata2p3], q-disk [-1:null]
[  621.467063] md2: [Self Heal] retry sector [3227932752] round [1/2] start: logical-sector [3227932752], sh-sector [461133264], d-disk [0:sata6p3], p-disk [4:sata2p3], q-disk [-1:null]
[  621.467690] md2: [Self Heal] retry sector [3227932760] round [1/2] start: logical-sector [3227932760], sh-sector [461133272], d-disk [0:sata6p3], p-disk [4:sata2p3], q-disk [-1:null]
[  621.489039] md2: [Self Heal] retry sector [3227932736] round [1/2] choose d-disk
[  621.489360] md2: [Self Heal] retry sector [3227932744] round [1/2] choose d-disk
[  621.489644] md2: [Self Heal] retry sector [3227932752] round [1/2] choose d-disk
[  621.489931] md2: [Self Heal] retry sector [3227932760] round [1/2] choose d-disk
[  621.490240] md2: [Self Heal] retry sector [3227932736] round [1/2] finished: return result to upper layer
[  621.490621] md2: [Self Heal] retry sector [3227932744] round [1/2] finished: return result to upper layer
[  621.490996] md2: [Self Heal] retry sector [3227932752] round [1/2] finished: return result to upper layer
[  621.491379] md2: [Self Heal] retry sector [3227932760] round [1/2] finished: return result to upper layer
[  621.491795] BTRFS warning (device dm-3): parent transid verify failed on 48192636878848 wanted 107173620 found 107173423

[  621.492424] md2: [Self Heal] retry sector [3227932736] round [1/2] start: logical-sector [3227932736], sh-sector [461133248], d-disk [0:sata6p3], p-disk [4:sata2p3], q-disk [-1:null]
[  621.493096] md2: [Self Heal] retry sector [3227932744] round [1/2] start: logical-sector [3227932744], sh-sector [461133256], d-disk [0:sata6p3], p-disk [4:sata2p3], q-disk [-1:null]
[  621.493753] md2: [Self Heal] retry sector [3227932752] round [1/2] start: logical-sector [3227932752], sh-sector [461133264], d-disk [0:sata6p3], p-disk [4:sata2p3], q-disk [-1:null]
[  621.494429] md2: [Self Heal] retry sector [3227932760] round [1/2] start: logical-sector [3227932760], sh-sector [461133272], d-disk [0:sata6p3], p-disk [4:sata2p3], q-disk [-1:null]
[  621.495470] md2: [Self Heal] retry sector [3227932736] round [1/2] choose d-disk
[  621.495784] md2: [Self Heal] retry sector [3227932744] round [1/2] choose d-disk
[  621.496074] md2: [Self Heal] retry sector [3227932752] round [1/2] choose d-disk
[  621.496366] md2: [Self Heal] retry sector [3227932760] round [1/2] choose d-disk
[  621.496655] md2: [Self Heal] retry sector [3227932736] round [1/2] finished: get same result, retry next round
[  621.497054] md2: [Self Heal] retry sector [3227932744] round [1/2] finished: get same result, retry next round
[  621.497437] md2: [Self Heal] retry sector [3227932752] round [1/2] finished: get same result, retry next round
[  621.497822] md2: [Self Heal] retry sector [3227932760] round [1/2] finished: get same result, retry next round
[  621.498221] md2: [Self Heal] retry sector [3227932736] round [2/2] choose p-disk
[  621.498517] md2: [Self Heal] retry sector [3227932744] round [2/2] choose p-disk
[  621.498807] md2: [Self Heal] retry sector [3227932752] round [2/2] choose p-disk
[  621.499098] md2: [Self Heal] retry sector [3227932760] round [2/2] choose p-disk
[  621.499390] md2: [Self Heal] retry sector [3227932736] round [2/2] finished: get same result, give up
[  621.499755] BTRFS error (device dm-3): bdev /dev/mapper/cachedev_1 errs: wr 0, rd 2456, flush 0, corrupt 415692, gen 0
[  621.500178] md2: [Self Heal] retry sector [3227932744] round [2/2] finished: get same result, give up
[  621.500542] BTRFS error (device dm-3): bdev /dev/mapper/cachedev_1 errs: wr 0, rd 2457, flush 0, corrupt 415692, gen 0
[  621.500959] md2: [Self Heal] retry sector [3227932752] round [2/2] finished: get same result, give up
[  621.501327] BTRFS error (device dm-3): bdev /dev/mapper/cachedev_1 errs: wr 0, rd 2458, flush 0, corrupt 415692, gen 0
[  621.501740] md2: [Self Heal] retry sector [3227932760] round [2/2] finished: get same result, give up
[  621.502121] BTRFS error (device dm-3): bdev /dev/mapper/cachedev_1 errs: wr 0, rd 2459, flush 0, corrupt 415692, gen 0
[  621.502574] BTRFS error (device dm-3): BTRFS: dm-3 failed to repair parent transid verify failure on 48192636878848, mirror = 1

[  621.517148] BTRFS warning (device dm-3): dm-3 checksum verify failed on 48192636878848 wanted 0x1d065f0a found 0xbf414773 level 0
[  621.517741] md2: [Self Heal] retry sector [3228981312] round [1/2] start: logical-sector [3228981312], sh-sector [461283008], d-disk [0:sata6p3], p-disk [2:sata8p3], q-disk [-1:null]
[  621.518435] md2: [Self Heal] retry sector [3228981320] round [1/2] start: logical-sector [3228981320], sh-sector [461283016], d-disk [0:sata6p3], p-disk [2:sata8p3], q-disk [-1:null]
[  621.519093] md2: [Self Heal] retry sector [3228981328] round [1/2] start: logical-sector [3228981328], sh-sector [461283024], d-disk [0:sata6p3], p-disk [2:sata8p3], q-disk [-1:null]
[  621.519749] md2: [Self Heal] retry sector [3228981336] round [1/2] start: logical-sector [3228981336], sh-sector [461283032], d-disk [0:sata6p3], p-disk [2:sata8p3], q-disk [-1:null]
[  621.537450] md2: [Self Heal] retry sector [3228981312] round [1/2] choose d-disk
[  621.537736] md2: [Self Heal] retry sector [3228981320] round [1/2] choose d-disk
[  621.538036] md2: [Self Heal] retry sector [3228981328] round [1/2] choose d-disk
[  621.538329] md2: [Self Heal] retry sector [3228981336] round [1/2] choose d-disk
[  621.538619] md2: [Self Heal] retry sector [3228981312] round [1/2] finished: return result to upper layer
[  621.538998] md2: [Self Heal] retry sector [3228981320] round [1/2] finished: return result to upper layer
[  621.539375] md2: [Self Heal] retry sector [3228981328] round [1/2] finished: return result to upper layer
[  621.539756] md2: [Self Heal] retry sector [3228981336] round [1/2] finished: return result to upper layer
[  621.540164] BTRFS warning (device dm-3): dm-3 checksum verify failed on 48192636878848 wanted 0x1d065f0a found 0xbf414773 level 0
[  621.540751] md2: [Self Heal] retry sector [3228981312] round [1/2] start: logical-sector [3228981312], sh-sector [461283008], d-disk [0:sata6p3], p-disk [2:sata8p3], q-disk [-1:null]
[  621.541430] md2: [Self Heal] retry sector [3228981320] round [1/2] start: logical-sector [3228981320], sh-sector [461283016], d-disk [0:sata6p3], p-disk [2:sata8p3], q-disk [-1:null]
[  621.542101] md2: [Self Heal] retry sector [3228981328] round [1/2] start: logical-sector [3228981328], sh-sector [461283024], d-disk [0:sata6p3], p-disk [2:sata8p3], q-disk [-1:null]
[  621.542763] md2: [Self Heal] retry sector [3228981336] round [1/2] start: logical-sector [3228981336], sh-sector [461283032], d-disk [0:sata6p3], p-disk [2:sata8p3], q-disk [-1:null]
[  621.543841] md2: [Self Heal] retry sector [3228981312] round [1/2] choose d-disk
[  621.544153] md2: [Self Heal] retry sector [3228981320] round [1/2] choose d-disk
[  621.544445] md2: [Self Heal] retry sector [3228981328] round [1/2] choose d-disk
[  621.544730] md2: [Self Heal] retry sector [3228981336] round [1/2] choose d-disk
[  621.545025] md2: [Self Heal] retry sector [3228981312] round [1/2] finished: get same result, retry next round
[  621.545424] md2: [Self Heal] retry sector [3228981320] round [1/2] finished: get same result, retry next round
[  621.545808] md2: [Self Heal] retry sector [3228981328] round [1/2] finished: get same result, retry next round
[  621.546207] md2: [Self Heal] retry sector [3228981336] round [1/2] finished: get same result, retry next round
[  621.546604] md2: [Self Heal] retry sector [3228981312] round [2/2] choose p-disk
[  621.546899] md2: [Self Heal] retry sector [3228981320] round [2/2] choose p-disk
[  621.547188] md2: [Self Heal] retry sector [3228981328] round [2/2] choose p-disk
[  621.547477] md2: [Self Heal] retry sector [3228981336] round [2/2] choose p-disk
[  621.547769] md2: [Self Heal] retry sector [3228981312] round [2/2] finished: get same result, give up
[  621.548136] BTRFS error (device dm-3): bdev /dev/mapper/cachedev_1 errs: wr 0, rd 2460, flush 0, corrupt 415692, gen 0
[  621.548553] md2: [Self Heal] retry sector [3228981320] round [2/2] finished: get same result, give up
[  621.548905] BTRFS error (device dm-3): bdev /dev/mapper/cachedev_1 errs: wr 0, rd 2461, flush 0, corrupt 415692, gen 0
[  621.549324] md2: [Self Heal] retry sector [3228981328] round [2/2] finished: get same result, give up
[  621.549685] BTRFS error (device dm-3): bdev /dev/mapper/cachedev_1 errs: wr 0, rd 2462, flush 0, corrupt 415692, gen 0
[  621.550109] md2: [Self Heal] retry sector [3228981336] round [2/2] finished: get same result, give up
[  621.550475] BTRFS error (device dm-3): bdev /dev/mapper/cachedev_1 errs: wr 0, rd 2463, flush 0, corrupt 415692, gen 0
[  621.550914] BTRFS error (device dm-3): BTRFS: dm-3 failed to repair btree csum error on 48192636878848, mirror = 2

[  621.551665] BTRFS error (device dm-3): failed to load usrquota subtree 5, ret=-5
[  621.551970] BTRFS error (device dm-3): usrquota disabled due to faield to load tree

[  621.552364] BTRFS error (device dm-3): failed to read usrquota tree: -5, use no_quota_tree for rescue
[  621.611089] BTRFS error (device dm-3): open_ctree failed
[  622.350092] Invalid parameter
[  623.121261] capability: warning: `nginx' uses 32-bit capabilities (legacy support in use)
[  623.991677] iSCSI:target_core_rodsp_server.c:1008:rodsp_server_init RODSP server started, login_key(b21797b8ee8f).
[  624.057353] syno_extent_pool: module license 'Proprietary' taints kernel.
[  624.057653] Disabling lock debugging due to kernel taint
[  624.059389] iSCSI:extent_pool.c:766:ep_init syno_extent_pool successfully initialized
[  624.078312] iSCSI:target_core_device.c:593:se_dev_align_max_sectors Rounding down aligned max_sectors from 4294967295 to 4294967288
[  624.079092] iSCSI:target_core_configfs.c:6124:target_init_dbroot db_root: cannot open: /etc/target
[  624.079872] iSCSI:target_core_lunbackup.c:367:init_io_buffer_head 2048 buffers allocated, total 8388608 bytes successfully
[  624.118400] iSCSI:target_core_file.c:128:fd_attach_hba RODSP plugin for fileio is enabled.
[  624.118768] iSCSI:target_core_file.c:136:fd_attach_hba ODX Token Manager is enabled.
[  624.119104] iSCSI:target_core_multi_file.c:126:fd_attach_hba RODSP plugin for multifile is enabled.
[  624.119500] iSCSI:target_core_multi_file.c:134:fd_attach_hba ODX Token Manager is enabled.
[  624.119855] iSCSI:target_core_ep.c:782:ep_attach_hba RODSP plugin for epio is enabled.
[  624.120194] iSCSI:target_core_ep.c:789:ep_attach_hba ODX Token Manager is enabled.
[  624.369138] iSCSI:qla_dbg.c:2572:ql_log qla2xxx [0000:00:00.0]-0005: : QLogic Fibre Channel HBA Driver: 10.02.00.103-k.

raid5 相关是:

mdadm -D /dev/md2
/dev/md2:
        Version : 1.2
  Creation Time : Mon Aug  4 23:59:51 2025
     Raid Level : raid5
     Array Size : 109347402752 (104281.81 GiB 111971.74 GB)
  Used Dev Size : 15621057536 (14897.40 GiB 15995.96 GB)
   Raid Devices : 8
  Total Devices : 8
    Persistence : Superblock is persistent

    Update Time : Sun Aug 17 02:23:32 2025
          State : clean
 Active Devices : 8
Working Devices : 8
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           Name : SwordArtOnline:2  (local to host SwordArtOnline)
           UUID : fe6634a6:cc63fe74:7d5eab2d:18f12856
         Events : 297

    Number   Major   Minor   RaidDevice State
       0       8       83        0      active sync   /dev/sata6p3
       1       8       51        1      active sync   /dev/sata4p3
       2       8      115        2      active sync   /dev/sata8p3
       3       8        3        3      active sync   /dev/sata1p3
       4       8       19        4      active sync   /dev/sata2p3
       5       8       99        5      active sync   /dev/sata7p3
       6       8       67        6      active sync   /dev/sata5p3
       7       8       35        7      active sync   /dev/sata3p3

目前来说,这个 raid5 是挂载在/volume1 下的.但是现在没有挂载成功.

使用 btrfs 相关的命令也没啥办法.

# btrfs check --repair /dev/md2
enabling repair mode
Couldn't open file system

# btrfs check --repair /volume1
enabling repair mode
ERROR: not a regular file or block device: /volume1
Couldn't open file system

# btrfs check --repair /dev/dm-3
enabling repair mode
couldn't open RDWR because of unsupported option features (3).
Couldn't open file system

根据 ai 的答案做了一下

~/tmp# btrfs-map-logical -l 48192636878848 /dev/md2
mirror 1 logical 48192636878848 physical 1652701560832 device /dev/md2
mirror 2 logical 48192636878848 physical 1653238431744 device /dev/md2

~/tmp# btrfs inspect-internal dump-tree -b 1652701560832 /dev/md2 > ./mirror1.txt
checksum verify failed on 1652701560832 found 9156A51E wanted 45AF2FD5
checksum verify failed on 1652701560832 found 9156A51E wanted 45AF2FD5
bytenr mismatch, want=1652701560832, have=13571024336105888462
ERROR: failed to read 1652701560832

~/tmp# btrfs inspect-internal dump-tree -b 1653238431744 /dev/md2 > ./mirror2.txt
checksum verify failed on 1653238431744 found 8A7EEBC5 wanted 3E570FEA
checksum verify failed on 1653238431744 found 8A7EEBC5 wanted 3E570FEA
bytenr mismatch, want=1653238431744, have=3565191595757293894
ERROR: failed to read 1653238431744

接下来我应该做什么呢?或者说怎么才能修复/volume1

❌
❌