开发者工具箱|编程·开发工具·资源
570 subscribers
1.44K photos
771 links
面向开发者的实用工具、库与效率技巧,写代码更快更爽。投稿 @BDHT1
#开发者 #编程工具 #效率 #程序员 · 开源总站 @GitHubTrendingHub
Download Telegram
在 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"
```

若成功启动并响应提示,即配置完毕。也可将以下两行加入 ~/.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打断我并说:“我们不写测试,因为业务逻辑变化太快。”初听起来,初创公司需求频繁迭代,似乎有道理。但仔细想想,这个逻辑完全反了——变化恰恰是写测试的理由,而不是不写的借口。

如果软件几乎不变,弱测试覆盖还能勉强运转;可业务逻辑每周都在变,你不断触碰生产环境运行的代码,风险会不断累积。测试最大的价值不是抓bug,而是让你在修改现有代码时有东西可依赖。想象一下要更新一年前上线的定价规则:新的条件本身很简单,但真正难的是找出这个行为在其他地方还有哪些依赖——另一个结算流程、某个市场两年前添加的覆盖、某个仍在运行的旧活动。没有测试,你只能手动检查几个场景,靠产品和老同事的记忆来验证。随着系统变大,手动测试变成了“希望大家都记得对的事情”。
软件永远不会真正完成:业务规则变、用户行为出乎意料、性能问题、法规演进。有时一个小需求会暴露多年积累的设计问题——同一规则在四个地方重复、三个无关模块依赖同一个工作流、修一个边缘情况却影响到远超出预期的范围。这时缺乏测试的成本就显现了:团队用人工检查来补偿,但总会有被忽略的情况导致上线失败。发布变慢,越来越多的人介入,代码库某些区域变成“危险区”,所有人都知道该清理但没人敢碰。工程师可能很清楚设计的问题,甚至知道如何改进,但他们不相信自己动手后的结果。这就是短期技术债慢慢变成架构的原因——不是因为没人注意到,而是因为改变比维持现状更冒险。
有用的测试套件能改变这一点:它能给团队足够的反馈,让他们逐步改进系统,而不是等待一次可能永远不会发生的大重写。但这不等于测试越多越好——慢速或脆弱的套件会制造同样的不确定性;与实现过度耦合的测试会让无害的重构寸步难行。关键在于,测试应该保护业务依赖的行为,而不是每次内部结构变化时都崩溃。


这正是那句话让我一直记住的原因。不是因为他们不写测试,而是背后的逻辑:他们知道软件在持续变化,却没有给工程师更安全的方式去应对,而是把不确定性当作工作中理所当然的一部分。当这成为常态,人们最终会停止改进系统——避免重构、绕开糟糕设计、每次触碰旧代码都小心翼翼。我后来在两种系统都工作过:一种是小改动验证比实现还慢,因为没人知道会连带什么;另一种是更大的改动也能逐步推进,因为团队有足够的反馈。我们需要测试不是因为软件稳定,而是因为工程师需要信心去改变它。

#开发者 #工具 #软件工程 #测试 #技术债务 #重构 #工程文化
@DevToolboxHub
本期安全:微软补丁与AI编码代理攻击面

微软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 后问题解决。以下是完整调试过程。

开机 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
Dolt 2.0 发布:自动存储清理与压缩

DoltHub 近日发布 Dolt 2.0,这是开源版本控制 SQL 数据库的重大更新。新版本新增自动存储优化,包括垃圾回收和压缩,同时改进了对大数据类型和向量数据类型的支持。Dolt 兼容 MySQL,将 Git 风格的版本控制引入数据库,支持分支、合并与回滚等操作。

#开发者 #工具 #Dolt #DoltHub #版本控制 #数据库 #存储优化
@DevToolboxHub
超越MCP:企业AI平台需要七层边界

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
Pinecone 发布 Nexus 知识引擎

Pinecone 宣布 Nexus 知识引擎正式上线,这是一款为 AI 代理设计的“知识引擎”,能将企业数据转换为结构化的可查询层。团队可以一次性注入并管理业务上下文,让多个代理复用,从而降低 token 开销并提升回答准确性。

#开发者 #工具 #Pinecone #知识引擎 #AI代理 #Nexus #结构化数据
@DevToolboxHub
ClickHouse 26.3 EXPLAIN 新增两种格式化选项

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
AI Demo 到可交付 MVP 的 5 道验证门

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 研究项目转化为进化代码优化服务。评估器在客户端运行,代码不离开客户基础设施。

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
SOLID原则与OOP:设计可演进的软件

用面向对象编程开发软件时,初期代码清晰、功能正常,但新需求一来,改一个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,包括:

• 重连后未恢复通道池,所有操作永久抛出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% 的问题。

下面整理了从目标定级到最终检查的完整流程,同时给出每步建议使用的工具和关键检查点。

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工程师,需要在不修改代码的前提下,安全地拉取最新代码、构建新镜像并完成滚动部署。

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
Rust + Next.js 15 构建高性能中文学习平台

MandarinClips 是一个开源技术驱动的语言学习平台,收录超过 10 万条影视片段中的句子级对话,帮助学习者从课本过渡到真实语境。技术栈选用 Next.js 15 前端、Rust (Axum) 后端、PostgreSQL 数据库,以及 Backblaze B2 搭配 Cloudflare CDN 的存储方案。

关键性能优化集中在三个方面。数据库层:对中文和拼音字段建立 pg_trgm GIN 索引,模糊匹配查询(如“ni hao”或“明天见”)本地延迟低于 1 毫秒。媒体交付:MP4 视频和 JPG 海报全部存放在 Backblaze B2,通过 Cloudflare Bandwidth Alliance 实现零出站带宽成本,并设置强缓存策略,源服务器带宽和 IOPS 接近零。前端:Next.js 15 原生 308 永久重定向处理 URL 迁移,避免中间件开销,对爬虫零延迟。


整个平台仅用一台 2 核 VPS 即可承载数千并发请求,工程上验证了 Rust + Axum + Tokio 在低资源下的高吞吐能力,同时利用 Cloudflare 联盟流量免费特性大幅降低媒体分发成本。

#开发者 #工具 #Rust #Nextjs #PostgreSQL #Cloudflare #BackblazeB2 #MandarinClips #中文学习
@DevToolboxHub
QuOptuna:量子机器学习 AutoML 工具

训练量子机器学习模型的手动环节多、超参数难调、结果缺乏公平性审计。QuOptuna 只需一条 uvx quoptuna 命令即可启动完整 AutoML Web 应用,跨 21 个量子与经典分类器执行超参数搜索,提前剪枝无效配置,审计每个模型的公平性,用 SHAP 解释优胜模型,并可自动生成研究报告。项目采用 Apache-2.0 开源许可。

QuOptuna 的五个架构亮点:

1. 统一搜索空间:注册 17 个量子分类器(数据重载、电路中心、IQP 与投影量子核、量子厨房水槽、量子度量学习、树张量网络、量子卷积神经网络、WeiNet 及其可分离/修饰变体)和 4 个经典基线(SVC、LinearSVC、MLP、Perceptron),每个模型拥有独立的 Optuna 条件搜索空间。

2. 高效搜索:基于 PennyLane 构建电路,JAX vmap 向量化评估,Optuna 的 ASHA/Hyperband 剪枝提前终止低效配置,支持 TPE/随机/网格采样。

3. 公平性内置于搜索循环:约束模式下对超出阈值的 trial 施加惩罚;多目标模式下同时优化准确率与公平性指标(来自 fairlearn:人口统计平等、均等几率、均等机会),返回 Pareto 前沿。

4. 可解释性与自动报告:优胜模型可生成 SHAP 图(条图、蜜蜂群、小提琴、热图、瀑布图)、ROC/PR 曲线和混淆矩阵。可选双智能体 LLM 管线(分析师起草+评审者批判)撰写研究论文(需自带 OpenAI/Anthropic/Gemini 密钥)。

5. 零 Node.js 依赖:前端为 Next.js 静态导出并打包进 Python wheel,pip 安装即包含编译后 UI,无需额外安装 Node。


项目目前为 Beta 版(0.1.4),量子模型运行在 JAX/CPU 模拟器上,尚无硬件后端。在大多数表格数据集上经典模型仍占优——QuOptuna 会如实告诉你。作者(西密歇根大学博士生)欢迎星标和反馈。

GitHub
PyPI
#开发者 #工具 #QuOptuna #QuantumML #AutoML #OpenSource
@DevToolboxHub
GSC CSV 导出转为 SEO 机会队列

Search Console 能列出查询数据,但很难直接回答“哪个搜索信号值得优先投入”。一款免费的全浏览器内运行的 GSC 机会分析工具解决了这个问题:无需账号,导入的 CSV 行不会离开本地设备。只需从 Search Console 搜索结果报告导出 Queries CSV(含 query、clicks、impressions、CTR、average position),可选导入上一期 CSV 或 Pages CSV 做趋势分析。

工具将查询分为五个机会标签:

Striking distance(可触及机会):默认查找平均位置 8–20、足够的展示量的查询。这是一个审查队列,不直接指示重写页面。位置范围和最低展示量阈值可调。

CTR gap(点击率缺口):基于导入站点的各位置段实际观测 CTR 计算本地基线,若前十名查询的 CTR 低于该基线的 70% 且有足够展示量则标记。不证明摘要块不好,而是提醒需要检查实况 SERP。

Rising demand(需求上升)(需上一期 CSV):展示量增长 ≥30% 且 ≥20 行,同时当前平均位置 40 或更优。建议防守性行动:保留与查询匹配的页面部分,补充证据或内部链接。

Decay(衰退):当点击下降 ≥30% 且丢失 ≥5 次点击,或展示量下降 ≥40% 且丢失 ≥50 次展示时标记。绝对下限抑制微小百分比变化。在刷新内容前检查季节性、需求、竞品、索引、设备组合和页面编辑历史。

Page opportunity(页面机会)(需 Pages CSV):基于页面级展示量、CTR 和位置生成的独立列表,不附带查询建议。需在 GSC 查看实际查询构成后再决定页面级动作。

每个发现获得确定的优先级分数(0–100),分数随展示量对数增长并加机会类型加成,使队列可排序但不被超大查询主导。分数不是流量预测。置信度基于展示量和是否有对比期描述样本强度。

所有解析和评分在客户端 JavaScript 完成,文件不上传,分析仅记录运行示范或导出格式等宽泛动作。可直接使用合成样本数据测试后再选择真实文件。


输出可复制为 Markdown、CSV 或 JSON。每条记录将观察到的证据与建议的验证步骤分开,避免将相关性误为因果。每月流程中只保留少数自有动作。

工具继承 GSC 的限制:平均位置是聚合值而非固定排名、匿名查询被省略、表格行可能不等于图表总数、前期数据可能变更、查询和页面表使用不同聚合、对大属性导出行不完整。工具分析接收到的行,不声称覆盖全部查询或自动检测关键词蚕食。

#开发者 #工具 #GSC #SEO #SearchConsole #机会分析 #免费工具 #本地处理 #CSV #查询
@DevToolboxHub
HTPBE PDF 篡改检测 API Spring Boot 集成指南

HTPBE 发布了 PDF 结构篡改检测 API 的 Java/Spring Boot 集成指南,针对金融、银行、保险等场景,在 KYC 验证之后、业务逻辑处理之前拦截 PDF 文件的结构性篡改。

API 采用两步调用:POST /analyze 提交 PDF 链接返回 check id,GET /result/{id} 返回 intact / modified / inconclusive 三种状态。
指南覆盖完整的 Spring Boot 3.2+ 集成,包括 RestClient 客户端、DTO record、@ConfigurationProperties 配置密钥、自定义 ResponseErrorHandler 区分配置错误与临时错误、Spring Retry 仅在 5xx 和 429 上重试。
还包含一个 DocumentGate 策略层,将三种状态映射为 ACCEPT / REJECT / REVIEW,特别指出 inconclusive 不应自动通过,应人工审核。
同时提供了 WebClient 响应式变体、presigned URL 对象存储模式、测试 key 无配额消耗的集成测试示例。


该 API 不能检测一次性生成伪造、加密 PDF 或完全重建的副本,需结合内容验证层使用。

#开发者 #工具 #HTPBE #PDF #SpringBoot #API #Java #篡改检测 #教程
@DevToolboxHub
DoorDash 用 Envoy 和 Valkey 建 150 万 RPS 代理缓存

DoorDash 开发了 Entity Cache,一个基于 Envoy 和 Valkey 的透明代理缓存平台,旨在减少微服务架构中服务间的冗余请求。该平台运行于 DoorDash 的服务网格内,通过缓存、事件驱动失效、故障处理及性能优化,每秒处理超过 150 万请求,可用性达 99.99999%。

它主要解决频繁访问但变化不频繁的数据导致的重复请求问题,降低了后端负载并节省了计算资源。

#开发者 #工具 #DoorDash #Envoy #Valkey #EntityCache #代理缓存 #微服务 #高可用
@DevToolboxHub