## 使用自定义错误简化 Axum 中的错误处理
本文详细介绍了一种简化使用 Rust 构建的 Axum Web 应用程序中错误处理的方法。解决的核心问题是匹配 `Result` 类型并返回适当 HTTP 状态码时,经常需要冗长的样板代码。
解决方案是创建一个新的类型 `AppError`,它包装 `anyhow::Error` 并实现 `IntoResponse` 和 `From<E>` 特性。这允许开发者利用 `?` 运算符进行简洁的错误传播。无需冗长的 `match` 语句,错误会自动转换为正确的 HTTP 响应。
具体来说,`IntoResponse` 处理将 `AppError` 转换为 Axum `Response`,通常返回一个 500 内部服务器错误,并带有错误消息或渲染后的模板。`From<E>` 实现能够自动将各种错误类型(如 `sqlx::Error`、`serde_json::Error`)转换为 `AppError`,前提是它们可以转换为 `anyhow::Error`。
这种方法显著减少了代码混乱,提高了可读性和可维护性。作者提供了一个 GitHub 仓库([原文链接]),展示了在 HATEOAS 项目中使用 htmx 的实际实现。
(Empty input provided. There is nothing to translate.)
本课程提供C语言编程、RISC-V指令集和处理器设计学习资源。**直播课程将于2025年9月开始。** 学生可以通过顶部导航栏找到完整的讲义和使用reveal.js制作的材料(可导出为PDF)。 预计完成时间约为每项资源2小时(通常为视频讲座),但面向“中级”学习者——那些具有一定编程经验(超过500行代码和调试技能)以及积极态度的人。初学者预计需要花费更多时间。 如有问题、材料错误或建议,请联系于子豪 (yuzihao#ict.ac.cn)。请注意,该网站正在积极开发中,页面加载可能会偶尔停滞——简单的刷新应该可以解决此问题。可以通过“课程首页”链接访问过去的课程。
## 持续Claude:自动化AI驱动的开发 持续Claude是一个CLI工具,旨在通过循环运行Claude代码来自动化复杂的编码项目。它解决了单次AI编码的局限性,通过实现迭代改进和持久化上下文来解决问题——这对于处理大型任务(如添加广泛的单元测试或迁移代码库)至关重要。 该工具模拟CI/CD实践,自动创建PR,等待检查和批准,并合并代码。一个关键特性是持久化上下文机制,利用共享的markdown文件(`SHARED_TASK_NOTES.md`)来存储迭代之间的进度和见解,防止知识丢失。 用户提供提示,设置迭代限制或成本预算,并指定GitHub仓库。然后,脚本管理整个PR生命周期,Claude专注于每个步骤的增量进展。它适用于依赖项更新、重构和解决技术债务等任务,并通过PR审查提供人工参与的方案。 持续Claude可在[GitHub](https://github.com/AnandChowdhary/continuous-claude)上获取,并可以通过一条命令安装。
奥尔德斯·赫胥黎在麻省理工学院的最后一次演讲,尽管是在几十年以前,却感觉出奇地现代——类似于一次专注于自我实现的说服性演讲。他探讨了实现我们潜力的非药物方法,强调了例如亚历山大技巧和格式塔疗法等技巧。赫胥黎钦佩这些方法,因为它们能够培养个体*内部*的理想品质,这与当时新兴的化学增强能力的想法(预示着类似Adderall的东西)形成对比。 他认为这些疗法的有效性源于它们的适应性,认识到不存在单一的“理想”人类。赫胥黎将这些疗法与《薄伽梵歌》中的三种瑜伽——虔诚、行动和沉思——相提并论,更具争议性的是,他还提到了威廉·谢尔登的体型学,暗示着通往启蒙的多种途径。 最终,赫胥黎倡导一种个性化的教育方法,摆脱标准化方法,并利用技术来满足个体差异。虽然演讲大量依赖例子和历史联系,但它提出了一个引人注目的论点,即通过心理训练来培养幸福和个人成长,而不是仅仅依赖外部的解决方案。
## Apache Iggy WebSocket 支持与 compio-ws:摘要
Apache Iggy 团队使用 `io_uring` 重写了其核心架构以提高性能,从而采用了 `compio` 异步运行时。这在添加 WebSocket 支持时带来了挑战,因为现有的 Rust 库 (`tungstenite`, `tokio-tungstenite`) 专为基于轮询的 I/O 设计,并依赖共享缓冲区——这与 `compio` 的基于完成、拥有缓冲区的模型不兼容。
为了解决这个问题,团队开发了 `compio-ws`,这是为 `compio` 提供的 WebSocket 实现。 最初使用 `SyncStream`(同步 I/O 的桥接)的尝试因其固定大小的缓冲区而导致性能问题,需要频繁且代价高昂的缓冲区处理。 通过 `GrowableSyncStream` 解决了这个问题,它是一种动态调整大小的缓冲区,可最大限度地减少往返次数。
基准测试表明,WebSocket 延迟明显高于直接 TCP(生产者高 30-40%,消费者高 100% 以上),但在严格的持久性约束下,仍然可以在高百分位实现个位数毫秒的延迟。
未来的工作包括优化缓冲区增长、探索利用 `compio` 功能的本机 WebSocket 实现,以及将改进贡献回 `compio` 项目。 目前,Iggy 利用 WebSocket 为生产者提供支持,为浏览器客户端和边缘设备带来好处,并计划为消费者提供服务器推送通知。
Flock Safety摄像头被宣传为执法部门的车牌识别器,但实际上是更广泛的监控工具。除了车牌,该系统利用“车辆指纹™”技术,通过车辆品牌、颜色、车顶行李架等特征,甚至部分遮挡的车牌来识别车辆。一项新的、昂贵的“高级搜索”套餐允许警方上传*任何*车辆图像——来自监控摄像头甚至手机照片——在Flock的数据库中搜索匹配项。 重要的是,Flock摄像头会捕捉它们所看到的一切,包括行人,而不仅仅是车辆,这引发了重大的隐私问题。华盛顿州最近的一项法院裁决将这些数据定为公共记录,促使一些城市因担心透明度而停用其系统。 这场争议凸显了现代监控的核心问题:虽然当局收集公民的大量数据,但他们抵制接受同样的审查。人们担心像ICE这样的机构可能会滥用这些数据,以及有权势的人希望将他们的活动隐藏在公众视野之外,这加剧了人们对Flock摄像头广泛部署的反抗。
## 狗的驯化比先前认为的要早得多 一项新的研究挑战了长期以来的观点,即维多利亚时代的定向育种极大地塑造了现代犬种。研究人员分析了超过600个犬类头骨,跨越了5万年,发现显著的身体变化始于大约11,000年前,紧随最后一个冰河时代之后——在中石器时代。 这项发表在《科学》杂志上的研究表明,即使那时,狗也表现出比先前所理解的更广泛的头骨形状,包括较短的口鼻部和较宽的头部,以及类似狼的特征。今天犬种中近一半的多样性已经存在于古代犬类种群中。 这表明驯化并非仅仅是维多利亚时代的工程,而是一个渐进的过程,可能受到适应新环境、饮食和人类偏好等因素的驱动。证据还表明,狗与人类一起迁移到西伯利亚和中亚等地区,融入社会数千年——最初可能作为从人类聚居地附近受益的食腐动物。 该研究利用详细的3D头骨扫描,为人类和狗之间长期交织的历史提供了新的见解。
## 实现五九可靠性:从AWS us-east-1中断事件中吸取的教训
最近AWS us-east-1地区发生的大规模中断(10月20日)凸显了构建强大可靠性策略的必要性。虽然许多服务受到影响,但Authress通过主动构建具有弹性的架构保持了正常运行时间。本文详细介绍了他们实现五九(99.999%)SLA的方法——大约每年五分钟的停机时间——尽管依赖于可能不可靠的基础设施。
Authress的策略围绕着预测故障展开。他们避免仅仅依赖AWS SLA,认识到这些SLA无法达到他们的目标。关键组件包括:严格的三方依赖项审查(拒绝低于99.7%可靠性的依赖项)、使用DNS动态路由和健康检查实现自动多区域故障转移,以及使用CloudFront和Lambda@Edge实现边缘计算的本地化弹性。
除了基础设施之外,Authress还采用了复杂的应用程序级防御:自动重试、比较系统间数据的验证测试、增量发布以及具有自定义规则的强大的Web应用程序防火墙,以减轻恶意活动。至关重要的是,他们优先与客户支持建立直接联系,以便快速识别事件。
最终,Authress承认实现五九并非关于*预防*所有故障,而是关于最小化它们的*影响*。他们拥抱墨菲定律,认识到故障是不可避免的,并专注于分层防御、持续监控以及从每次事件中学习的承诺。虽然这些措施不能自动保证五九承诺,但它们代表了他们对该承诺的坚定捍卫。
**如需协助实施类似架构,作者鼓励您通过他们的社区服务器联系。**