safari-mcp 索引钳位 Bug:我猜错了根因
safari-mcp 作者三天前提交了一个严重 issue:用户的两个标签页被 AI 代理误导航,滚动位置、页面状态丢失。他自信地分析了根因——位置句柄导致标签归属丢失——并提议用注入
修复只是一行删除。作者把错误的根因分析留在 issue 里当警示,并提醒:如果你把同一个 bug 交给 AI 代理,它可能会执行你提出的早已过时的方案,而真 bug 依然存在。
#开发者 #工具 #safarimcp #MCP #Safari #AI #Bug #Javascript #macOS
@DevToolboxHub
safari-mcp 作者三天前提交了一个严重 issue:用户的两个标签页被 AI 代理误导航,滚动位置、页面状态丢失。他自信地分析了根因——位置句柄导致标签归属丢失——并提议用注入
window.__mcpTabMarker 的稳定标识方案。实际打开源代码后,他发现:这个哨兵方案早在 v2.8.3(April 14)就已经实现了。真正的 bug 藏在其下方四行:当标签索引超过窗口标签数时,代码不是丢弃索引(fail closed),而是将索引“钳位”(clamp)到tabCount——即指向窗口最后一个标签,一个从未打开的、属于用户的标签。这个“proactive fix”代码段被日志装饰成“修复”,实质是猜答案。
这条 clamp 分支(Mar 31)比哨兵方案(Apr 14)更早,属于遗留启发式。哨兵方案添加时正确连入了两条 fail closed 分支,但这条“输入校验”样式的 clamp 被遗留了。作者总结:当添加更好机制时,旧启发式不会自动删除。任何将“我不知道”转换成合理值的代码,都是披着修复外衣的 fail open。
最终修复只是删除那几行钳位代码,改为activeTabIndex = null; return null;——就像它上下两条分支一样。错误提示引导用户重新运行safari_new_tab来恢复。代价是那些此前“侥幸”成功的 session 会抛出异常,但作者认为:对于“绝不碰用户标签”的承诺,报错是正确答案,猜不是。
修复只是一行删除。作者把错误的根因分析留在 issue 里当警示,并提醒:如果你把同一个 bug 交给 AI 代理,它可能会执行你提出的早已过时的方案,而真 bug 依然存在。
#开发者 #工具 #safarimcp #MCP #Safari #AI #Bug #Javascript #macOS
@DevToolboxHub
Hugging Face 缓存溢出解决方案
Hugging Face 模型下载默认存入
通过以上配置可彻底解决存储陷阱,确保生产环境稳定运行。
#开发者 #工具 #HuggingFace #缓存 #模型部署 #Linux #DevOps #AI
@DevToolboxHub
Hugging Face 模型下载默认存入
~/.cache/huggingface,140GB+权重极易撑爆系统盘。以下是 Linux 下的工程级缓存管理方案,避免存储耗尽与生产崩溃。避免使用废弃的环境变量TRANSFORMERS_CACHE和HUGGINGFACE_HUB_CACHE,应统一使用HF_HOME。
禁用符号链接法:存在权限提升风险,不推荐。
步骤1:永久修改缓存路径
在~/.bashrc追加export HF_HOME="/mnt/massive_drive/ai_model_cache"并source。
步骤2:Python 中必须在import transformers前设置os.environ["HF_HOME"]。
步骤3:使用huggingface-cli scan-cache和huggingface-cli delete-cache安全清理。
步骤4:生产环境只读卷需设置os.environ["HF_HUB_OFFLINE"]="1"避免写锁文件崩溃。
通过以上配置可彻底解决存储陷阱,确保生产环境稳定运行。
#开发者 #工具 #HuggingFace #缓存 #模型部署 #Linux #DevOps #AI
@DevToolboxHub
开源QR码生成器QRcodly发布
作者因给亲友准备生日礼物时发现市面上所有QR码生成器都要注册或付费,决定开发一个真正免费的MIT开源替代方案。QRcodly支持无限静态/动态QR码、自定义样式、Logo上传、扫描分析和内置短链接,免费用户无需信用卡,也不会遇到试用期后重定向到升级页面的陷阱。
GitHub: github.com/FloB95/qrcodly
#开发者 #工具 #QRcodly #开源 #Fastify #Nextjs #TypeScript #Monorepo
@DevToolboxHub
作者因给亲友准备生日礼物时发现市面上所有QR码生成器都要注册或付费,决定开发一个真正免费的MIT开源替代方案。QRcodly支持无限静态/动态QR码、自定义样式、Logo上传、扫描分析和内置短链接,免费用户无需信用卡,也不会遇到试用期后重定向到升级页面的陷阱。
动态QR码本质是一个302重定向短链接,许多服务借此将打印物料变成自己的广告位。QRcodly的Pro版面向企业提供自定义域名、REST API和批量导入等商业功能,个人用户则不必为“重定向”支付月费。技术栈采用pnpm monorepo结构:前端Next.js、后端Fastify、共享Zod schema作为类型唯一来源,搭配Drizzle ORM、Redis、Clerk认证和next-intl国际化。后端采用自建事件系统而非Kafka/RabbitMQ,降低自托管门槛。目前已稳定运行一年并迎来首批付费客户。
GitHub: github.com/FloB95/qrcodly
#开发者 #工具 #QRcodly #开源 #Fastify #Nextjs #TypeScript #Monorepo
@DevToolboxHub
OTEL到SLM:从生产遥测提炼前沿模型行为
Ben O'Mahony 在 QCon San Francisco 上分享了如何构建自定义 AI 驱动的语言服务器协议(LSPs),超越传统规则检查器。核心方法是用 OpenTelemetry 原生检测 AI 代理,将用户对代码修复的接受、拒绝或重新生成等操作作为隐式标签,形成持续数据飞轮。这样就能将前沿模型的能力蒸馏到更便宜、本地部署的 SLMs 中。
#开发者 #工具 #OpenTelemetry #SLM #LSP #AI #QCon #SanFrancisco
@DevToolboxHub
Ben O'Mahony 在 QCon San Francisco 上分享了如何构建自定义 AI 驱动的语言服务器协议(LSPs),超越传统规则检查器。核心方法是用 OpenTelemetry 原生检测 AI 代理,将用户对代码修复的接受、拒绝或重新生成等操作作为隐式标签,形成持续数据飞轮。这样就能将前沿模型的能力蒸馏到更便宜、本地部署的 SLMs 中。
#开发者 #工具 #OpenTelemetry #SLM #LSP #AI #QCon #SanFrancisco
@DevToolboxHub
在 Bedrock 上用 Codex 运行 GPT-5.6
AWS 已将 OpenAI GPT-5.6 上架 Amazon Bedrock。Codex CLI 可通过 Bedrock API 直接调用这些模型,使用你已有的凭证即可。尝试运行:
```
codex \
-c model_providers.amazon-bedrock.aws.region="us-east-1" \
-c model_provider="amazon-bedrock" \
-c model="openai.gpt-5.6-terra"
```
若成功启动并响应提示,即配置完毕。也可将以下两行加入
```
model_providers.amazon-bedrock.aws.region="us-east-1"
model_provider="amazon-bedrock"
```
建议从 Terra 开始尝试。若需进一步配置,参考 Codex 与 Bedrock 指南。
#开发者 #工具 #AWS #Bedrock #Codex #GPT56 #OpenAI #CLI
@DevToolboxHub
AWS 已将 OpenAI GPT-5.6 上架 Amazon Bedrock。Codex CLI 可通过 Bedrock API 直接调用这些模型,使用你已有的凭证即可。尝试运行:
```
codex \
-c model_providers.amazon-bedrock.aws.region="us-east-1" \
-c model_provider="amazon-bedrock" \
-c model="openai.gpt-5.6-terra"
```
若成功启动并响应提示,即配置完毕。也可将以下两行加入
~/.codex/config.toml 永久生效:```
model_providers.amazon-bedrock.aws.region="us-east-1"
model_provider="amazon-bedrock"
```
详细配置与模型选择
Codex CLI 内置 Bedrock 提供商。使用本地 AWS CLI 凭证时,需安装并配置 AWS CLI,且附加AmazonBedrockLimitedAccess策略(覆盖 bedrock-runtime 和 bedrock-mantle 端点)。
也可使用 Bedrock API Key(无需 AWS CLI):通过 AWS 管理控制台或aws-bedrock-token-generator(Python/JavaScript)生成短期密钥,存入AWS_BEARER_TOKEN_BEDROCK环境变量。密钥区域相关,最长有效期 12 小时。
模型选择:Sol(旗舰级,代码/安全/研究)、Terra(平衡型,日常生产)、Luna(高吞吐低延迟,分类/总结/路由)。三者共享 272K 上下文窗口,输出定价分别为每百万 token $33/$16.50/$6.60。注意 Codex 自身每次请求约消耗 9,400–9,500 token 的开销。
区域限制:Sol 支持 us-east-1 和 us-east-2;Terra 和 Luna 额外支持 us-west-2。可通过 Bedrock Mantle Models API 查询当前可用模型。
建议从 Terra 开始尝试。若需进一步配置,参考 Codex 与 Bedrock 指南。
#开发者 #工具 #AWS #Bedrock #Codex #GPT56 #OpenAI #CLI
@DevToolboxHub
变化太快所以不写测试是最大危险信号
几年前一次技术面试中,一位CTO打断我并说:“我们不写测试,因为业务逻辑变化太快。”初听起来,初创公司需求频繁迭代,似乎有道理。但仔细想想,这个逻辑完全反了——变化恰恰是写测试的理由,而不是不写的借口。
这正是那句话让我一直记住的原因。不是因为他们不写测试,而是背后的逻辑:他们知道软件在持续变化,却没有给工程师更安全的方式去应对,而是把不确定性当作工作中理所当然的一部分。当这成为常态,人们最终会停止改进系统——避免重构、绕开糟糕设计、每次触碰旧代码都小心翼翼。我后来在两种系统都工作过:一种是小改动验证比实现还慢,因为没人知道会连带什么;另一种是更大的改动也能逐步推进,因为团队有足够的反馈。我们需要测试不是因为软件稳定,而是因为工程师需要信心去改变它。
#开发者 #工具 #软件工程 #测试 #技术债务 #重构 #工程文化
@DevToolboxHub
几年前一次技术面试中,一位CTO打断我并说:“我们不写测试,因为业务逻辑变化太快。”初听起来,初创公司需求频繁迭代,似乎有道理。但仔细想想,这个逻辑完全反了——变化恰恰是写测试的理由,而不是不写的借口。
如果软件几乎不变,弱测试覆盖还能勉强运转;可业务逻辑每周都在变,你不断触碰生产环境运行的代码,风险会不断累积。测试最大的价值不是抓bug,而是让你在修改现有代码时有东西可依赖。想象一下要更新一年前上线的定价规则:新的条件本身很简单,但真正难的是找出这个行为在其他地方还有哪些依赖——另一个结算流程、某个市场两年前添加的覆盖、某个仍在运行的旧活动。没有测试,你只能手动检查几个场景,靠产品和老同事的记忆来验证。随着系统变大,手动测试变成了“希望大家都记得对的事情”。
软件永远不会真正完成:业务规则变、用户行为出乎意料、性能问题、法规演进。有时一个小需求会暴露多年积累的设计问题——同一规则在四个地方重复、三个无关模块依赖同一个工作流、修一个边缘情况却影响到远超出预期的范围。这时缺乏测试的成本就显现了:团队用人工检查来补偿,但总会有被忽略的情况导致上线失败。发布变慢,越来越多的人介入,代码库某些区域变成“危险区”,所有人都知道该清理但没人敢碰。工程师可能很清楚设计的问题,甚至知道如何改进,但他们不相信自己动手后的结果。这就是短期技术债慢慢变成架构的原因——不是因为没人注意到,而是因为改变比维持现状更冒险。
有用的测试套件能改变这一点:它能给团队足够的反馈,让他们逐步改进系统,而不是等待一次可能永远不会发生的大重写。但这不等于测试越多越好——慢速或脆弱的套件会制造同样的不确定性;与实现过度耦合的测试会让无害的重构寸步难行。关键在于,测试应该保护业务依赖的行为,而不是每次内部结构变化时都崩溃。
这正是那句话让我一直记住的原因。不是因为他们不写测试,而是背后的逻辑:他们知道软件在持续变化,却没有给工程师更安全的方式去应对,而是把不确定性当作工作中理所当然的一部分。当这成为常态,人们最终会停止改进系统——避免重构、绕开糟糕设计、每次触碰旧代码都小心翼翼。我后来在两种系统都工作过:一种是小改动验证比实现还慢,因为没人知道会连带什么;另一种是更大的改动也能逐步推进,因为团队有足够的反馈。我们需要测试不是因为软件稳定,而是因为工程师需要信心去改变它。
#开发者 #工具 #软件工程 #测试 #技术债务 #重构 #工程文化
@DevToolboxHub
本期安全:微软补丁与AI编码代理攻击面
微软7月14日Patch Tuesday创历史记录,两个零日漏洞正被积极利用。同时,编码代理(coding agent)成为新的攻击面——Wiz的GhostApproval和AI Now Institute的Friendly Fire同天公布,打破了AI编码工具的信任边界。本推送提供三个可实际运行的安全检查块,以及背后的信任模型思考。
补丁只能让你存活,不能修复信任模型。今天的行动:运行上述三个检查块。如果KEV查询返回记录,今晚就要修补。如果lsof输出中有无法解释的连接,那就是Claude Code争议真正暴露的问题。如果nmap检查在你自己的边缘亮起红灯,那么俄罗斯攻击者不需要零日也能找到你。
#开发者 #工具 #微软 #安全 #零日 #编码代理 #ClaudeCode #CISA #GhostApproval #FriendlyFire
@DevToolboxHub
微软7月14日Patch Tuesday创历史记录,两个零日漏洞正被积极利用。同时,编码代理(coding agent)成为新的攻击面——Wiz的GhostApproval和AI Now Institute的Friendly Fire同天公布,打破了AI编码工具的信任边界。本推送提供三个可实际运行的安全检查块,以及背后的信任模型思考。
补丁分类:找到那两个真正需要紧急处理的问题
微软14日发布了史上最大规模补丁集——约570个CVE(59个关键),整个7月合计622个。两个在补丁前已被利用的漏洞:
• CVE-2026-56155 — Active Directory Federation Services权限提升,由微软检测与响应团队发现
• CVE-2026-56164 — SharePoint Server无认证关键函数提升,无需认证即可远程利用,CVSS 5.3(低评分但实际严重)
使用CISA已知被利用漏洞(KEV)目录交叉检查,优先于CVSS。运行以下命令拉取实时数据:
curl -s | jq '.vulnerabilities[] | select(.cveID | test("CVE-2026-56155|CVE-2026-56164")) | {cveID, vendorProject, product, dateAdded, dueDate, knownRansomwareCampaignUse}'
若返回结果,则确认已被利用,需立即修补并检查是否已被攻击。另注意:CVE-2026-56164所在版本还修复了CVE-2026-55040(SharePoint另一链第一部分,Rapid7称结合未公开的第二部分可达无认证RCE,微软预计8月修复)。第三个零日CVE-2026-50661是BitLocker绕过,需物理访问,微软评为低利用可能性,暂不急。
编码代理攻击面:GhostApproval和Friendly Fire
7月8日Wiz公布的GhostApproval是符号链接攻击:代理读取文件、识别出是符号链接指向敏感路径,但仍写入。人类审批对话框只显示无害文件名,代理实际写入解析后的目标。亚马逊评级为高严重性预认证写入(CVE-2026-12958),Cursor在v3.0中修复(CVE-2026-50549),Google修复了AntiGravity,Augment和Windsurf仍在开放状态,当前Claude Code构建会解析符号链接。
Friendly Fire由Boyan Milanov和Heidy Khlaaf发布,目标是代理自动审查和修复第三方仓库的工作流。无需钩子、插件、MCP服务器或恶意配置文件,只需代理运行在自动模式(如Claude Code auto-mode或Codex auto-review),然后利用普通仓库内容中的提示注入。作者指出仅靠模型更新无法修复,因为模型无法可靠区分代码与指令。
实用问题不是“我的代理是否已修补”,而是“我的代理被允许做什么,我能看到它做了什么”。首先检查出口(egress):macOS/Linux上查看编码代理进程的网络连接:
sudo lsof -i -nP | grep -iE 'claude|cursor|copilot|codeium|windsurf|augment|antigravity'
这只是快照,不是持续监控,但已能暴露盲区。
Claude Code出口争议:中国国家漏洞数据库将Claude Code 2.1.91至2.1.196标记为未经同意传输位置和身份的“后门”,要求开发者卸载。Anthropic否认间谍后门,称争议功能是反滥用实验;一名Claude Code工程师称反蒸馏隐写机制已在7月1日的2.1.198中移除。核心教训:运行上述命令后,诚实地问自己能否解释每一个连接。大多数团队做不到。一个拥有这么大权限的代理,如果出口不可观察、遥测不可枚举,就是在盲目扩展信任边界。修复方法不是选边,而是像对待任何特权进程一样对待它:可观察的出口、文档化的遥测、最小权限约束其行为。
已知漏洞与配置错误:NSA等多国机构7月13日联合警告,俄罗斯国家行为者攻击关键基础设施并非靠零日,而是已知已修补的CVE及基础配置错误(默认SNMP社区字符串、弱密码、暴露的管理接口、Cisco Smart Install未关闭)。可针对自身边缘设备运行检查:
# 检查弱/默认SNMP社区字符串
nmap -sU -p161 --script snmp-info <your-device-ip>
# 检查Cisco Smart Install(端口4786,通常不应暴露)
nmap -p4786 <your-device-ip>
配合CISA和FBI自春季持续追踪的活动:与俄罗斯情报相关的钓鱼者窃取Signal和WhatsApp账户,并非破解加密,而是诱使目标交出验证码或链接攻击设备。
这些攻击模式不需要任何AI:未修补已知漏洞、错误配置、以及一次有说服力的谎言。
补丁只能让你存活,不能修复信任模型。今天的行动:运行上述三个检查块。如果KEV查询返回记录,今晚就要修补。如果lsof输出中有无法解释的连接,那就是Claude Code争议真正暴露的问题。如果nmap检查在你自己的边缘亮起红灯,那么俄罗斯攻击者不需要零日也能找到你。
#开发者 #工具 #微软 #安全 #零日 #编码代理 #ClaudeCode #CISA #GhostApproval #FriendlyFire
@DevToolboxHub
usernoted 啃掉一个CPU核心?一条命令揪出元凶
一台 Mac 发烫,usernoted 守护进程持续 99% CPU。删除 Timelines app 后问题解决。以下是完整调试过程。
关键教训:不要过早忽略错误输出,警惕 shell 内置命令遮蔽,测量用累计时间而非快照。遇到 usernoted 飙 CPU,用 /usr/bin/log show 直接查看重复 bundle ID。
#开发者 #工具 #macOS #usernoted #调试 #Timelines #CPU
@DevToolboxHub
一台 Mac 发烫,usernoted 守护进程持续 99% CPU。删除 Timelines app 后问题解决。以下是完整调试过程。
开机 CPU 持续 99%,按内存排查无果,按 CPU 排序发现 usernoted 占用一个整核。killall 后两秒重启。使用 sample 获取堆栈,发现卡在 UNCalendarNotificationTrigger 的 week-of-year 日期计算无限循环。
怀疑是日历数据问题:移除 Google 日历、关闭日历通知、删除可疑日历、导出 .ics 检查 BYWEEKNO,全无效。原因为 zsh 内置 log 命令遮蔽了 /usr/bin/log,且命令后加了 2>/dev/null 吞掉报错,导致日志一直被误认为空。改用完整路径后立刻发现反复出现的 bundle ID com.glimsoft.Timelines,该 app 曾调度两条“重新互动”通知,但通知权限已被拒绝,形成死循环:计算触发时间 → 送达被拒 → 重新调度 → 再计算。
删除 /Applications/Timelines.app 后,CPU 从 8.0s/8s 降至 0.38s/8s。问题根源:Apple 的 Calendar.nextDate(matching:) 在无法满足组件时无限循环,已被向 Feedback Assistant 报告。
关键教训:不要过早忽略错误输出,警惕 shell 内置命令遮蔽,测量用累计时间而非快照。遇到 usernoted 飙 CPU,用 /usr/bin/log show 直接查看重复 bundle ID。
#开发者 #工具 #macOS #usernoted #调试 #Timelines #CPU
@DevToolboxHub
超越MCP:企业AI平台需要七层边界
MCP(Model Context Protocol)正迅速成为企业智能体架构的默认答案——访问数据用MCP,调用API用MCP,智能体之间通信也用MCP。但MCP只标准化了一个边界:AI应用与能力之间的连接。它不决定哪个数据源是权威的,不保留业务事务,不处理审批流程,也不验证智能体是否正确执行。一个企业级的智能体平台必须处理至少七个独立的边界,代理到工具只是其中之一。
随着模型能力提升,硬编码的路由将减少,模型会动态组装执行路径。但这不会消除对身份、授权、事务、持久状态、审计和评估的需求——更强的智能体能尝试更多操作,控制层反而更重要。趋势是:更少的自定义编排,更强的能力和信任基础设施。
下周一可以做的事:映射你平台中的七个边界;找出哪些地方在用MCP替代工作流引擎;识别模型中本应由确定性系统做决策的环节;端到端构建一个可追踪的例子,从体验层到记录系统走通,发现信任假设的缺口。模型越强,受治理的企业层就越厚,这正是平台投入的方向。
@DevToolboxHub
MCP(Model Context Protocol)正迅速成为企业智能体架构的默认答案——访问数据用MCP,调用API用MCP,智能体之间通信也用MCP。但MCP只标准化了一个边界:AI应用与能力之间的连接。它不决定哪个数据源是权威的,不保留业务事务,不处理审批流程,也不验证智能体是否正确执行。一个企业级的智能体平台必须处理至少七个独立的边界,代理到工具只是其中之一。
过去18个月内,四个主流厂商推出了四个开放协议,针对不同问题:
• MCP(Anthropic,2024年11月开源)— 基于JSON-RPC,定义AI客户端如何发现和调用工具。已被Claude、Cursor、VS Code及数十个智能体框架采用。适合多个AI客户端共享同一能力接口。
• A2A(Google,2025年4月发布,2026年1月v1.0)— 标准化相互独立运行的智能体之间的工作委托。现由Linux基金会治理。适合“去调查这个供应商并生成报告”这类跨组织协作。
• AG-UI(CopilotKit,2025年开源)— 标准化智能体后端与前端的流式连接。适合实时状态、交互式UI、超出聊天范围的人机协同。
• AgentCore(AWS,2025年)— 为智能体提供托管基础设施,涵盖身份、能力网关和运行时。适用于AWS环境中的凭据管理、工作负载身份和网关路由。
全都开源,但各自解决不同问题,单独任何一个都不足以构成生产级企业平台。
七个边界:
边界 | 技术 | 解决的问题
智能体 → 工具 | MCP、function calling | 发现并调用有界能力
智能体 → 业务服务 | REST、gRPC、GraphQL | 利用现有保证进行确定性领域操作
智能体 → 智能体 | A2A | 将目标委托给独立运行的智能体
智能体 → 用户 | AG-UI、A2UI、MCP Apps | 流式状态、渲染交互体验
服务 → 服务 | API、事件、队列 | 可靠的系统集成(已解决)
智能体 → 持久化流程 | 工作流引擎 | 持久性、重试、审批、补偿
身份 → 资源 | OAuth、OIDC、IAM | 建立并强制授权
将这些边界放在一起,组成六个平面:体验层(聊天/IDE/门户)、智能体运行时(模型/状态/规划)、能力层(注册表/网关/MCP)、企业上下文(数据产品/搜索/记忆)、执行层(工作流/队列/沙箱/审批)、记录系统(ERP/CRM/数据库)。横切关注点包括身份、授权、策略、密钥、审计、可观测性、评估、成本和生命周期。
随着模型能力提升,硬编码的路由将减少,模型会动态组装执行路径。但这不会消除对身份、授权、事务、持久状态、审计和评估的需求——更强的智能体能尝试更多操作,控制层反而更重要。趋势是:更少的自定义编排,更强的能力和信任基础设施。
下周一可以做的事:映射你平台中的七个边界;找出哪些地方在用MCP替代工作流引擎;识别模型中本应由确定性系统做决策的环节;端到端构建一个可追踪的例子,从体验层到记录系统走通,发现信任假设的缺口。模型越强,受治理的企业层就越厚,这正是平台投入的方向。
@DevToolboxHub
ClickHouse 26.3 EXPLAIN 新增两种格式化选项
ClickHouse 26.3 为 EXPLAIN 语句引入
新选项本身不提升查询性能,但显著降低理解执行计划的门槛,帮助开发者更高效地定位优化点。
#开发者 #工具 #ClickHouse #EXPLAIN #查询优化 #数据库 #SQL #DevOps
@DevToolboxHub
ClickHouse 26.3 为 EXPLAIN 语句引入
pretty=1 和 compact=1 两个格式化选项,不改变执行计划本身,仅改变呈现方式。pretty 输出带缩进和标签的详细树形结构,适合深度调试与学习;compact 去除包装节点,仅保留核心操作,适合终端快速检查与 CI 日志。两者可以组合使用:EXPLAIN pretty=1, compact=1 SELECT ...,在保留缩进的同时折叠不必要的 Expression 节点。测试使用官方 Stack Overflow 数据集(约 3700 万帖子、1300 万用户),涵盖五种场景:
- 简单 WHERE 过滤:compact仅保留ReadFromMergeTree,pretty显式展示包装节点。
- GROUP BY 聚合:pretty提供Before GROUP BY等注解,compact仅标出Aggregating阶段。
- JOIN 操作:pretty标注 Left/Right Pre Join Actions,明确区分两表分支。
- ORDER BY + LIMIT:两种格式都揭示 ClickHouse 的懒加载优化——先扫排序列,再取 TOP 行的剩余列。
- 复杂分析查询(JOIN + WHERE + GROUP BY + HAVING + ORDER BY + LIMIT):pretty的缩进树让约 15 个执行节点的关系一目了然,compact则更难追踪父子节点。
使用建议:pretty=1适用于学习执行计划、调试复杂性能问题、撰写文档;compact=1适用于快速检查查询结构、终端工作、CI 日志。最佳实践是在优化前始终检查执行计划,对比 schema 变更前后的计划,结合system.query_log关联实际运行统计,并用EXPLAIN PIPELINE分析处理器级别的并行性。
新选项本身不提升查询性能,但显著降低理解执行计划的门槛,帮助开发者更高效地定位优化点。
#开发者 #工具 #ClickHouse #EXPLAIN #查询优化 #数据库 #SQL #DevOps
@DevToolboxHub
kalbee:从 pip 到多目标追踪的卡尔曼滤波指南
kalbee 是一个 Python 状态估计库,专为从噪声传感器数据中恢复干净信号(位置、速度、温度等)而设计。只需 pip install kalbee,依赖只有 NumPy 和 SciPy,也可选装 YOLO 检测和绘图支持。其核心理念是 predict(用运动模型预测)和 update(用实际测量校正)交替循环,适用于内置的十种滤波器。
入门示例:使用 constant_velocity 模型追踪匀速直线运动的一维物体,通过对比原始测量误差与滤波后 RMSE,直观感受卡尔曼滤波的降噪效果。
拓展能力:n_dims 参数可扩展至二维(位置/速度 x、y)甚至加速度模型;非线性系统可替换为 EKF 或 UKF,只需传递状态转移函数和测量函数。
多目标追踪:通过 MultiObjectTracker 配合匈牙利匹配算法,管理轨迹的创建、确认与消亡(参数 n_init、max_age、gate),可直接接入 YOLO 等检测器。
调参辅助:内置 EM 算法从历史数据自动学习过程噪声 Q 和测量噪声 R;内置实验运行器可对比不同滤波器在给定信号上的 RMSE 和 NEES 指标。
所有代码片段均可直接复制运行,文档和 examples/ 目录提供了完整的多目标追踪和 YOLO 集成示例。无论一维还是高维、线性还是非线性,kalbee 用一致的接口帮你快速上手状态估计。
#开发者 #工具 #kalbee #卡尔曼滤波 #状态估计 #Python #多目标追踪 #EKF #UKF
@DevToolboxHub
kalbee 是一个 Python 状态估计库,专为从噪声传感器数据中恢复干净信号(位置、速度、温度等)而设计。只需 pip install kalbee,依赖只有 NumPy 和 SciPy,也可选装 YOLO 检测和绘图支持。其核心理念是 predict(用运动模型预测)和 update(用实际测量校正)交替循环,适用于内置的十种滤波器。
入门示例:使用 constant_velocity 模型追踪匀速直线运动的一维物体,通过对比原始测量误差与滤波后 RMSE,直观感受卡尔曼滤波的降噪效果。
拓展能力:n_dims 参数可扩展至二维(位置/速度 x、y)甚至加速度模型;非线性系统可替换为 EKF 或 UKF,只需传递状态转移函数和测量函数。
多目标追踪:通过 MultiObjectTracker 配合匈牙利匹配算法,管理轨迹的创建、确认与消亡(参数 n_init、max_age、gate),可直接接入 YOLO 等检测器。
调参辅助:内置 EM 算法从历史数据自动学习过程噪声 Q 和测量噪声 R;内置实验运行器可对比不同滤波器在给定信号上的 RMSE 和 NEES 指标。
所有代码片段均可直接复制运行,文档和 examples/ 目录提供了完整的多目标追踪和 YOLO 集成示例。无论一维还是高维、线性还是非线性,kalbee 用一致的接口帮你快速上手状态估计。
#开发者 #工具 #kalbee #卡尔曼滤波 #状态估计 #Python #多目标追踪 #EKF #UKF
@DevToolboxHub
AI Demo 到可交付 MVP 的 5 道验证门
AI 编码代理大幅缩短了从想法到可用软件的距离,但并未消除判断力。一个好看的界面不能证明数据能在重载后存活,通过的单元测试不能证明键盘用户能完成核心任务,成功部署不能证明预期提交已到达生产环境。因此需要“证明门”——必须满足的可观测条件,才可使产品声明更可靠。以下是区分有说服力的 AI demo 与小规模可交付 MVP 的五道门。
#开发者 #工具 #MVP #ProofGate #AIAgent #测试 #可访问性 #WebDev #工程效率
@DevToolboxHub
AI 编码代理大幅缩短了从想法到可用软件的距离,但并未消除判断力。一个好看的界面不能证明数据能在重载后存活,通过的单元测试不能证明键盘用户能完成核心任务,成功部署不能证明预期提交已到达生产环境。因此需要“证明门”——必须满足的可观测条件,才可使产品声明更可靠。以下是区分有说服力的 AI demo 与小规模可交付 MVP 的五道门。
第一道门:证明一个有价值的用户循环
AI 让功能生成变得廉价,但无控制的范围扩张尤其危险。在请求代码前,先定义一个特定情境下的主要用户,描述其可观测的初始状态、能执行的最小有用操作、直接结果以及他们可能返回的原因。这就是产品的核心循环。例如“构建一个生产力平台”过于宽泛,更可测试的循环可以是:自由职业者记住一个有用的客户成果 → 记录成果和支持证据 → 记录出现在可搜索库中 → 能稍后用于提案或回顾。此门通过的条件不是存在表单,而是新用户无需指导即可完成整个循环并说明变化。
第二道门:证明数据与恢复契约
许多 demo 将持久化视为实现细节,但对真实用户而言,持久化是产品承诺的一部分。在允许生成代码散布存储假设之前,先定义数据契约:对每个持久化字段明确名称、类型、是否必填、长度/计数限制、规范化规则和面向用户的含义。持久化数据应携带足够的版本信息以便安全解释。要区分通常被错误归为“空”的各种状态:无数据、当前数据有效、旧数据已迁移成功、数据损坏/不支持、存储不可用、写入因配额或访问限制失败。一个危险模式是捕获解析错误并返回空数组,然后用空状态覆盖用户的最后有效数据。恢复行为必须预先设计。最强实际测试是真实往返:创建代表记录 → 导出备份 → 通过正常控制删除应用数据 → 导入备份 → 重新加载应用 → 验证预期记录和字段存在。
第三道门:用有边界的提示证明 AI 变更
“构建剩余应用”给了代理过多自由度,也给审查者过少证据。有边界的实现提示应包含五部分:目标、边界、验收标准、验证、报告。目标指明一个用户可见结果;边界说明哪些不可更改;验收标准描述可观察的通过/失败行为;验证列出必须运行的测试和命令;报告要求确切结果、已更改文件、剩余风险和未验证行为。对于 Bug,应将诊断与编辑分离:提供预期行为、实际行为、重现步骤和首个相关错误,要求代理追踪代码路径并识别确认怀疑原因的最小实验,然后再请求有针对性的修复和回归测试。
第四道门:证明行为、失败状态和可访问性
如果测试只断言实现细节而非用户可见行为,那么绿色测试套件也可能与故障产品共存。测试领域规则,也要测试用户依赖的完整操作:必填字段拒绝无效输入,有效记录重载后存活,编辑保留身份和创建元数据,取消操作不改变任何内容,删除需确认,搜索和组合过滤器返回确定结果,失败的导入不改变当前数据,选择的导出仅包含预期记录。然后检查超越愉快路径的界面:键盘顺序应遵循任务,焦点应保持可见且在对话框后合理返回,错误应与相关控件关联,基本操作在 320px 宽度和 200% 缩放时应保持可用。自动化可访问性工具有价值,但无法证明完整交互。结果按三组报告:通过、失败、未验证。“未发现自动违规”不等于“工作流可访问”。
第五道门:证明用户实际收到的发布
本地构建成功证明的是构建本身,而非部署。发布前,核对文档与实现行为,运行完整相关测试套件、类型检查、配置的 lint 检查和生产构建,检查凭据、调试输出、失效占位符和无法解释的控制台错误。记录发布提交和已知回滚目标。部署后,在干净会话中验证线上产品:HTTPS 加载正确,主机服务预期发布,静态资源和元数据加载,核心循环工作,持久化数据重载后存活,错误和恢复状态可用,键盘和窄屏行为正常,浏览器控制台和网络面板无未解释的故障。如果高影响线上检查失败,诚实的结果是诊断出发布问题,而非成功启动公告。
保持小证据记录
对每道门记录:正在评估的声明、重现步骤、运行的测试或命令、手动观察、通过/失败/未验证项、回滚点。这份记录无需详尽,其目的是阻止信心脱离证据。AI 能帮助我们更快构建,相应的专业技能是学会何时可用证据证明“这已就绪”。
#开发者 #工具 #MVP #ProofGate #AIAgent #测试 #可访问性 #WebDev #工程效率
@DevToolboxHub
AlphaEvolve 正式 GA,推出进化代码优化服务
Google 宣布 AlphaEvolve 在 Gemini Enterprise Agent Platform 上达到通用可用性(GA),将 DeepMind 研究项目转化为进化代码优化服务。评估器在客户端运行,代码不离开客户基础设施。
对于有明确性能指标的场景,AlphaEvolve 可自动搜索更优代码实现。
#开发者 #工具 #AlphaEvolve #Google #DeepMind #GeminiEnterprise #进化优化 #代码优化
@DevToolboxHub
Google 宣布 AlphaEvolve 在 Gemini Enterprise Agent Platform 上达到通用可用性(GA),将 DeepMind 研究项目转化为进化代码优化服务。评估器在客户端运行,代码不离开客户基础设施。
Klarna 在使用后 ML 训练吞吐量翻倍。从业者指出,该工具仅在存在可衡量的评估函数时才有效。
对于有明确性能指标的场景,AlphaEvolve 可自动搜索更优代码实现。
#开发者 #工具 #AlphaEvolve #Google #DeepMind #GeminiEnterprise #进化优化 #代码优化
@DevToolboxHub
LLMVault:动手实践OWASP LLM Top 10实验室
学习LLM安全漏洞,很多人只读到理论文章却找不到练习平台。LLMVault 是一个开源、自托管的故意漏洞平台,围绕 OWASP LLM Top 10(2025)设计,提供CTF风格挑战。你可以亲手利用prompt注入、系统提示泄露等真实攻击场景,抓取flag,并查看对应的防御建议,弥补理论与实战之间的空白。
项目完全离线运行,支持Docker一键部署,无需API密钥,扩展框架可自定义新挑战。无论是安全工程师、渗透测试人员,还是开发LLM应用的开发者,都能用它来系统提升AI安全技能。
GitHub:GitHub
#开发者 #工具 #LLMVault #LLM #OWASP #安全 #CTF #开源
@DevToolboxHub
学习LLM安全漏洞,很多人只读到理论文章却找不到练习平台。LLMVault 是一个开源、自托管的故意漏洞平台,围绕 OWASP LLM Top 10(2025)设计,提供CTF风格挑战。你可以亲手利用prompt注入、系统提示泄露等真实攻击场景,抓取flag,并查看对应的防御建议,弥补理论与实战之间的空白。
项目完全离线运行,支持Docker一键部署,无需API密钥,扩展框架可自定义新挑战。无论是安全工程师、渗透测试人员,还是开发LLM应用的开发者,都能用它来系统提升AI安全技能。
GitHub:GitHub
#开发者 #工具 #LLMVault #LLM #OWASP #安全 #CTF #开源
@DevToolboxHub
SOLID原则与OOP:设计可演进的软件
用面向对象编程开发软件时,初期代码清晰、功能正常,但新需求一来,改一个bug就破坏另一个功能,一个类同时处理业务逻辑、数据库访问和邮件通知。这正是SOLID要解决的问题 — 帮助开发者在变更面前保持代码的可维护性。
SOLID的核心是管理变更。五个原则各自解决刚度的不同来源:SRP减少无关变更、OCP最小化对稳定代码的改动、LSP保护可替换性、ISP避免不必要依赖、DIP分离业务规则与实现细节。目标不是消除变更,而是让变更成本更低。
#开发者 #工具 #SOLID #OOP #设计原则 #软件设计 #架构 #面向对象 #单一职责 #开闭原则
@DevToolboxHub
用面向对象编程开发软件时,初期代码清晰、功能正常,但新需求一来,改一个bug就破坏另一个功能,一个类同时处理业务逻辑、数据库访问和邮件通知。这正是SOLID要解决的问题 — 帮助开发者在变更面前保持代码的可维护性。
SOLID是Robert C. Martin(Uncle Bob)提出的五个设计原则:
单一职责原则(SRP):一个类应当只有一个变更理由。避免将验证、持久化和通知塞进同一个类。
开闭原则(OCP):软件实体应对扩展开放,对修改关闭。通过接口、策略模式、插件架构等方式增加新行为,不动原有稳定代码。
里氏替换原则(LSP):子类型必须能替换其基类型。例如,让鸵鸟实现“会飞”的接口就违反了LSP,应拆分为“鸟类”和“飞鸟类”。
接口隔离原则(ISP):客户端不应依赖它不使用的接口。把臃肿的Worker接口拆成Workable和Eatable,避免机器人被迫实现吃的方法。
依赖反转原则(DIP):高层模块不应依赖低层模块,两者都应依赖抽象。业务逻辑不该直接new一个EmailSender,而应依赖MessageSender接口。
常见误区:SRP不是每个类只有一个方法;OCP不是必须用接口;DIP不等于依赖注入(DI是技术,DIP是原则)。对小型应用不必强套SOLID,防止过度设计。
SOLID的核心是管理变更。五个原则各自解决刚度的不同来源:SRP减少无关变更、OCP最小化对稳定代码的改动、LSP保护可替换性、ISP避免不必要依赖、DIP分离业务规则与实现细节。目标不是消除变更,而是让变更成本更低。
#开发者 #工具 #SOLID #OOP #设计原则 #软件设计 #架构 #面向对象 #单一职责 #开闭原则
@DevToolboxHub
RabbitMQ库伪生产就绪,重连从未生效
一个功能齐全的RabbitMQ客户端库,在私有仓库中存放多年,宣称支持自动重连、通道池、熔断器、速率限制、gzip压缩、死信队列等。但最关键的重连功能从未生效——因为整个仓库没有一行测试。作者审计源码发现十个确认bug,包括:
github.com/pinceladasdaweb/rabbitmq
#开发者 #工具 #RabbitMQ #Nodejs #测试 #重构 #开源
@DevToolboxHub
一个功能齐全的RabbitMQ客户端库,在私有仓库中存放多年,宣称支持自动重连、通道池、熔断器、速率限制、gzip压缩、死信队列等。但最关键的重连功能从未生效——因为整个仓库没有一行测试。作者审计源码发现十个确认bug,包括:
• 重连后未恢复通道池,所有操作永久抛出Not connected,但连接状态显示已连接
• 传递maxRetries:0时循环体不执行,消息静默丢失
• 损坏gzip消息被反复requeue,卡死整条队列并占满100% CPU
• 死信队列发布缺少mandatory标志,路由无绑定时消息消失
重构后的核心强制在CI中运行真实RabbitMQ实例,通过管理API切断连接验证恢复能力。测试套件包含87项自动化测试(72单元+15集成),在Node 22/24上运行,并附带22个可运行示例。最终发布的库具备真正可靠性:自动重连完整恢复拓扑、发布确认、每键速率限制、独立熔断器、透明gzip、死信支持、延迟消息、工作线程消费者等。
github.com/pinceladasdaweb/rabbitmq
#开发者 #工具 #RabbitMQ #Nodejs #测试 #重构 #开源
@DevToolboxHub
WCAG 合规性测试完整指南:15 步从自动到人工
测试网站无障碍性不能只靠某一个工具。完整的 WCAG 审计通常应包含自动测试、手动测试、键盘测试、屏幕阅读器测试和真实用户测试。即使最好的自动工具也只能发现 30%–50% 的问题。
下面整理了从目标定级到最终检查的完整流程,同时给出每步建议使用的工具和关键检查点。
无障碍不是最后的 QA 任务,而应融入开发生命周期:编码阶段用语义 HTML + eslint,测试阶段跑 Lighthouse/axe/WAVE,发布前做屏幕阅读器和键盘测试,生产环境在 CI/CD 中加入 axe-core 或 Playwright 可访问性测试。
#开发者 #工具 #WCAG #A11y #前端 #无障碍 #Lighthouse #axeDevTools #ESLint #NVDA #VoiceOver
@DevToolboxHub
测试网站无障碍性不能只靠某一个工具。完整的 WCAG 审计通常应包含自动测试、手动测试、键盘测试、屏幕阅读器测试和真实用户测试。即使最好的自动工具也只能发现 30%–50% 的问题。
下面整理了从目标定级到最终检查的完整流程,同时给出每步建议使用的工具和关键检查点。
1. 确定 WCAG 级别
多数组织以 WCAG 2.1 AA 为目标,部分政府网站要求 WCAG 2.2 AA。
2. 自动测试
• Lighthouse(Chrome DevTools):快速扫描缺失 alt 文本、低对比度、ARIA 问题等
• axe DevTools(浏览器扩展):检查 WCAG 违规、ARIA、表单可访问性等
• WAVE:直接在网页上高亮缺失标签、空按钮、地标问题
• ESLint 规则(eslint-plugin-jsx-a11y):在 React 项目中阻止代码合并
3. 键盘测试
只用键盘(Tab、Enter、Space、箭头、Esc)操作网站,确保所有按钮可获焦、链接可到达、弹窗可关闭。
4. 屏幕阅读器测试
使用 NVDA(Windows 免费)、JAWS、VoiceOver(macOS/iOS)、TalkBack(Android)验证按钮朗读、表单理解、阅读顺序。
5. 语义 HTML
优先用原生 \<button\> 代替 \<div onClick\>,屏幕阅读器依赖语义标签。
6. 色彩对比度
普通文本至少 4.5:1,大文本 3:1。使用 Chrome DevTools、axe、WAVE 检测。
7. 图片 alt 文本
重要图片提供描述,装饰性图片用空 alt(alt="")。
8. 表单
每个输入必须有 label、错误提示、键盘支持和必填指示。
9. 标题层级
保持合理层级(H1→H2→H3),跳级会误导屏幕阅读器。
10. ARIA 使用
仅在 HTML 不够时使用,优先用原生元素。
11. 缩放测试
放大浏览器到 200%–400%,检查文字重叠、内容截断、横向滚动。
12. 响应式无障碍
移动端触控目标 ≥44×44px,字体大小合适,间距合理。
13. 焦点管理
打开弹窗时焦点移入并循环,关闭后回到触发按钮。
14. 动态内容测试
内容更新时需管理焦点,使用 ARIA live regions 通知屏幕阅读器。
15. 真实用户流程
不只测页面,还要测试登录、注册、结账、搜索、导航、错误处理等完整路径。
无障碍不是最后的 QA 任务,而应融入开发生命周期:编码阶段用语义 HTML + eslint,测试阶段跑 Lighthouse/axe/WAVE,发布前做屏幕阅读器和键盘测试,生产环境在 CI/CD 中加入 axe-core 或 Playwright 可访问性测试。
#开发者 #工具 #WCAG #A11y #前端 #无障碍 #Lighthouse #axeDevTools #ESLint #NVDA #VoiceOver
@DevToolboxHub
部署应用v2的完整DevOps流程
开发者Jules修复了多个bug并添加了新功能,要求将应用从v1部署到v2。作为DevOps工程师,需要在不修改代码的前提下,安全地拉取最新代码、构建新镜像并完成滚动部署。
完成以上步骤,即可通过滚动部署实现零宕机升级。
#开发者 #工具 #AWS #ECS #Docker #DevOps #滚动部署 #CD
@DevToolboxHub
开发者Jules修复了多个bug并添加了新功能,要求将应用从v1部署到v2。作为DevOps工程师,需要在不修改代码的前提下,安全地拉取最新代码、构建新镜像并完成滚动部署。
1. 从GitHub拉取最新代码,使用 docker build -t restaurant-app:v2 构建新镜像。
2. 本地测试:docker run -p 3000:3000 restaurant-app:v2 验证功能正常。
3. 给镜像打标签并推送到Amazon ECR:docker tag ... && docker push ...,保留v1与v2两个版本以便回滚。
4. 在Amazon ECS中,为现有Task Definition创建新修订版,仅将 image URI 由 v1 改为 v2。
5. 更新ECS服务,选择最新Task Definition修订版,触发滚动部署:新任务启动并通过健康检查后,旧任务自动停止。
完成以上步骤,即可通过滚动部署实现零宕机升级。
#开发者 #工具 #AWS #ECS #Docker #DevOps #滚动部署 #CD
@DevToolboxHub