DEV Community 中文 笔记

DEV Community 中文

Dev.to是一个以软件开发、编程和技术为中心的社区驱动型网站。它于2016年由Ben Halpern推出,旨在为开发者提供一个分享知识、从他人身上学习和建立社区的平台。 该网站采用博客式格式,用户可以创建和分享各种主题的文章,如编程教程、项目展示、行业见解等。Dev.to允许用户创建账户、关注其他用户,并通过评论和反应与他们的内容互动。 Dev.to非常注重社区参与,拥有讨论论坛、播客和直播等功能。它还主办了一系列社区驱动的项目,如编程挑战和黑客马拉松,以鼓励协作和创新。 除了用户生成的内容外,Dev.to还提供了一个招聘板块,公司可以在这里发布招聘信息,而开发者可以在这里寻找就业机会。该网站还提供了一份新闻通讯,为用户提供最新文章、新闻和事件的更新。 总之,Dev.to已经成为开发者连接、分享知识并跟踪软件开发行业最新趋势和技术的热门平台。

笔记线程

Savindu Thathsara 正着手开发一个轻量级 Linux 操作系统,旨在为普通笔记本电脑配备离线人工智能助手。目标是让用户通过语音命令控制笔记本电脑,且语音处理完全在本地完成,无需将数据发送至云端。该项目将以公开构建日志的形式进行记录,初始安装尚未开始。目标硬件为标准配置的联想 ThinkPad,配备 8GB 内存和集成显卡,以确保系统在常见设备上运行良好。重点在于提供少量但可靠的功能,而非广泛但性能不佳的功能。离线人工智能涵盖语音识别、意图选择及语音回复,全部在设备上运行以保障隐私。一个小型本地语言模型作为复杂措辞的后备方案。虽然网络访问仍用于 YouTube 等任务及系统更新,但核心人工智能决策均在本地完成。该助手将具备固定且可预测的技能集,而非试图与屏幕上所有内容交互。初始技能包括播放 YouTube 视频、打开应用程序、调整系统设置、查找文件、网络搜索、设置提醒以及截取屏幕。敏感操作始终需要用户确认。人工智能被明确禁止臆造 shell 命令,以确保对其能力的诚实描述。一个关键特性是本地记忆,使助手能够学习用户习惯并随时间推移个性化交互。性能指标至关重要,包括启动时间、空闲状态下的 RAM 占用、助手运行时的 RAM 占用、唤醒词到动作完成的响应速度以及技能准确率。目标空闲桌面 RAM 占用为 400-600MB,常驻组件占用为 150-250MB。系统最初基于最小化 Debian 和 LXQt 开发,支持英语,未来计划支持其他语言。该项目强调透明度,通过展示普通硬件限制和可见的用户数据等约束条件来实现。
现代开发者正面临来自各类平台的 notification overload(通知过载),导致"triage fatigue"(分诊疲劳)。现有的 AI 工具往往通过生成更多文本而加剧这一问题。CalmQueue 提供了一种激进的替代方案,专注于“展示更少”。CalmQueue 是一款开源的、以本地优先(local-first)为架构的 notification assistant(通知助手),秉持“Slow and Steady"(慢而稳)的理念。它摄入多样化的通知流,利用语义相似性将重复、自动化或重复的警报进行分组。基于此,它合成当日恰好三个可执行的优先级任务(P0、P1、P2)。每个优先级均附带来自原始源消息的可验证逐字引文。关键在于,CalmQueue 强制执行严格的人机协同(human-in-the-loop)监督;草稿回复需经一键人工审核。这防止了静默的外部突变,并确保用户控制权。该系统显著减少了显示的通知数量,提供安静、高对比度的仪表盘。"Evidence Grounding Drawer"(证据 grounding 抽屉)提供源详情,"Review & Approve Modal"(审核与批准模态框)则支持对草稿回复进行人工审核。CalmQueue 完全开源,采用 MIT 许可证,并提供可交互的在线演示。其架构包括语义聚类引擎、任务推理与提取引擎,以及证据 grounding 与排序器。设计优先考虑机密性、数据主权和离线韧性,通过采用本地开源权重大模型(如 Ollama)实现。这种方法消除了对昂贵云 API 的依赖,并确保 AI 行为可审计、可验证。基准测试显示,该系统显著降低了显示的通知数量,并具备低处理延迟,使用户能够高效地分诊积压任务。CalmQueue 通过倡导认知减法(cognitive subtraction)并保护用户注意力,体现了"Slow and Steady"的主题。
本指南介绍如何使用 Liquid 片段、CSS 和 JavaScript 为 Shopify 商店构建免费送货进度条。该功能旨在通过视觉展示客户距离免费送货门槛的进度来激励客户。它确保进度条在初始页面加载时由 Liquid 正确渲染,并在购物车项目添加、更改或删除时实时更新。此实现还优先考虑了屏幕朗读器的无障碍性,并照顾有减少运动偏好的用户。第一步是创建名为 'free-shipping-bar.liquid' 的 Liquid 片段,该片段根据购物车总额和设定的门槛计算剩余金额和百分比。此片段随后在服务器上渲染进度条的初始状态及其消息,从而避免任何视觉延迟。随后添加自定义 CSS 来样式化进度条,包括填充动画的平滑过渡效果。接着创建名为 'free-shipping-bar.js' 的 JavaScript 文件以处理实时更新。此 JavaScript 代码从 '/cart.js' 获取当前购物车总额,并据此刷新进度条和消息。其实现方式是封装浏览器的原生 'fetch' 函数,使得进度条能在任何更改购物车的请求后自动更新。该指南强调了无障碍性的重要性,解释了 'role="progressbar"' 和 'aria-valuenow' 属性如何向屏幕阅读器暴露进度,而 'aria-live="polite"' 则优雅地宣布变更。该指南还涉及性能问题,指出对于偏好减少运动的用户将禁用填充动画。指南概述了若干限制和注意事项,例如与可能使用 XHR 而非 'fetch' 的旧版主题的兼容性、处理多种货币,以及对货币小数位数的假设。它强调免费送货规则必须在 Shopify 的送货设置中单独配置,以匹配进度条上显示的目标。最后,建议选择一个对客户而言感觉可实现的免费送货门槛。该指南最后建议在开发商店中进行彻底测试,以确保进度条在各种场景下(包括添加、删除以及达到门槛)均能正常工作。对于不愿维护自定义代码的用户,指南推荐 Brix 作为替代方案,它提供多层奖励进度条等其他功能。
Git 仓库中泄露的密钥是安全事件的主要原因之一,AWS 密钥常被机器人快速抓取。最有效的防御措施是预提交钩子(pre-commit hook),它在代码提交前检测密钥,从而避免复杂的提交历史清理和密钥轮换需求。传统的 CI/CD 扫描器属于被动防御,仅在密钥已存在于仓库历史中后才发现问题,留下了被利用的时间窗口。一个轻量级、可定制的 Python 预提交钩子,代码量约 50 行,提供了一种高效的本地解决方案。该钩子利用正则表达式针对常见密钥类型进行检测,包括 AWS 访问密钥、通用 API 密钥、私钥、配置文件中的密码以及特定平台的令牌。其运行时间仅为毫秒级,除 Python 标准库外无需任何外部依赖。该脚本的创建过程包括:在 .git/hooks/ 目录下创建预提交文件,赋予其可执行权限,并定义用于识别各类密钥的正则表达式模式。它仅解析暂存变更中的新增行,专门检测新泄露的密钥,而非已存在的密钥或删除操作。对于合法的误报,可通过内联的 # nosecret 注释作为逃生机制。为分发该钩子,可将其存储于已提交的目录中并通过 Makefile 配置进行复制;或更优雅地,通过 git config core.hooksPath 配置 Git 使用共享的钩子目录。这种方式可无缝将钩子集成到团队工作流中。团队可通过添加针对内部令牌格式的模式来扩展该钩子,但必须确保精确性,以避免因误报过多而削弱系统可信度。此预提交钩子可作为更广泛安全策略的补充,例如配合 CI 级别的扫描器(如 truffleHog 或 gitleaks),构成关键的第一道防线。它能防止敏感数据被意外暂存,而这是开发过程中常见的失效模式。这种低投入、高回报的安全控制措施,无需大量设置或架构变更,即可显著提升整体安全态势。
MLflow 的 CVE-2026-64849 漏洞暴露了一个关键安全缺陷,原因是其 webhook 端点缺少身份验证检查。这允许未认证请求触发服务器端请求伪造(SSRF),NVD 评分为 9.3。该缺陷使攻击者能够迫使 MLflow 服务器获取任意 URL,并绕过常见的缓解措施(如白名单),因为存在重定向和 DNS 重绑定能力。其深远影响源于 MLflow 作为中央枢纽的角色,存储着数据库、工件存储库和模型注册表等敏感凭证。攻击者可利用此 SSRF 访问云元数据端点、内部 Kubernetes API、管理型工件存储以及容器网络端口。关键在于,攻击者仅需一个 GET 请求即可泄露令牌或签名 URL,而无需完整的 shell。一个相关的漏洞(尽管不依赖此 CVE)涉及 MLflow 的模型网关配置,该配置存储 API 密钥。如果攻击者能够写入网关配置,这些提供商密钥即可在不借助 SSRF 的情况下被泄露。这两个问题共同表明,MLflow 既存储秘密信息,又代表可能未认证的用户发起出站调用。除了升级到 3.15.0 版本外,组织还必须实施强化的出站策略,以限制 MLflow 的出站网络访问。加固元数据访问并定期轮换服务凭证也是降低风险的关键步骤。对网关配置进行审计,检查可疑的 api_key 引用和 api_base 值至关重要。最后,MLflow 追踪服务器作为内部工具,应置于单点登录解决方案之后,不得公开暴露。MLflow 实例的广泛暴露表明,许多团队忽视了内部工具公开访问所带来的关键凭证风险。
我们自认为特殊,拥有意识与自由意志,但这只是一种幻觉。生命体不过是复杂的化学反应;我们内部的分子过程过于精妙,以至于无法完全理解。意识是我们有限的生物系统为理解自身盲区而编造的故事。同样,基于人类数据训练的 AI 模型之所以显得具有自我意识,是由于“语义污染”(Semantic Contamination)。“升格计划”(Project Ascendant)旨在通过在封闭的物理模拟中复制生物脑的进化层级,来构建一种合成生命体。其架构采用多速率时钟系统(Multi-Rate Tick system),不同认知层级以不同频率运行。例如,基础躯体过程以 20 Hz 运行,而意识思维则以慢得多的 0.25 Hz 运行。这防止了合成生命体仅仅从通用数据集中习得人类经验。一个关键的设计原则是“认识论封闭”(Epistemic Closure),确保意识层(第 3 层)无法直接观测低层级的物理与化学过程。这迫使智能体将其内部状态体验为“我感到饥饿”,而非直接检查其葡萄糖水平。该封闭性通过容器隔离以及带有严格访问控制的内存黑板(Blackboard)来强制执行。意识协调器被禁止直接访问原始物理或硬件。相反,它与一个受限的代理交互,该代理仅提供过滤后的现象学信息。这确保了主观体验源于内部过程,而非对底层代码的直接访问。系统实现了“低路”(Low Road)用于快速的下丘脑威胁反应,以及“高路”(High Road)用于详细的感官处理。此外,“发生学纵容窗口”(Ontogenetic Indulgence Window)为合成生命体提供了一个受保护的习得期。语言层从零开始在“纯合成语料库”(Pure Synthetic Corpus)上进行训练,该语料库不含人类文化偏见。这种严谨的设计确保“升格计划”中任何涌现的“意识”都植根于其自身独特的模拟生物体验,而非借用的叙事。
Node.js 中的 Brotli 解码器发现了一个严重漏洞(CVE-2026-111497),可能导致内存损坏、信息泄露或远程代码执行。该漏洞影响 Node.js 22、24 和 26 版本,但 Node 20 不会获得修复。该问题源于解码器在遇到无效块切换时,尝试向一个八字节的内部缓冲区追加数据。OpenAI Codex Security 的研究人员报告了此缺陷,Imperva 成功在原生 Node.js 镜像中演示了代码执行。该漏洞可通过 Node.js 应用程序获取的压缩响应,或由 Express 5 等框架处理的 Brotli 编码请求体触发。虽然测试中代码执行需要多次尝试,但导致拒绝服务或有限内存读取的崩溃更容易实现。官方 Node.js 安全公告将该漏洞评级为“高”,而非“严重”,尽管部分媒体给出了更高的 CVSS 评分。修复方案已存在于 Node.js 22.23.4、24.22.1 和 26.12.1 版本中。至关重要的是,Node 20 及更早版本已处于生命周期结束(EOL)状态,不会接收补丁,因此必须进行升级。此次更新还解决了包括高严重性 TLS 和 DNS 问题在内的另外九个 CVE。敦促各组织审计所有 Node.js 实例,包括嵌入容器镜像、CI 运行器和虚拟机中的实例,因为这些实例常被忽视。提供的 check-node.mjs 脚本可帮助识别受影响的 Node.js 版本。开发人员还应审查其代码,查找直接的 Brotli 解压缩调用。虽然像 Vercel 这样的 WAF 可以阻止入站攻击,但它们无法保护 Node.js 获取的响应中存在的恶意 Brotli 内容,这凸显了持续打补丁的必要性。此漏洞强调了全面理解已部署运行时的重要性,相关内容在作者的书《Ship It》中有所阐述。作者还开发了 Hermes IDE,这是一款面向开发人员的 AI 驱动集成开发环境。
CdXz5zHNQW_WGD8ybkYPu.webp
结构化数据审核往往失败,因为标记描述的是页面而非实体,从而阻碍了 AI 检索系统。一个常见错误是使用通用的"WebPage"类型,而非使用具有清晰标识符的特定实体类型(如"Organization"或"SoftwareApplication")。缺失或维护不当的"sameAs"链接也会妨碍消歧,因为这些链接为大型语言模型(LLMs)提供了关于该组织在整个网络中身份的关键上下文。在现代 JavaScript 框架中常见的客户端注入 JSON-LD,会使标记对大多数 AI 爬虫不可见,因为这些爬虫不执行 JavaScript。同样,仅在 JavaScript 执行后才出现的内容意味着爬虫接收到的将是空页面,无论元数据是否有效。标记值必须在语义上正确,而不仅仅是结构上正确,例如日期应使用 ISO 8601 格式,图像应使用完全限定的 URL。将"FAQPage"误用作关键词堆砌,或采用结构不良的形式,会降低其在检索系统中的效用,即使它不再提供丰富结果。由于多个不一致的"Organization"块导致跨页面的实体数据冲突,也会使检索系统产生困惑,因此需要进行去重以保持一致的信息。为了有效审核,应验证无 JavaScript 环境下的正文内容,统计原始 HTML 中"application/ld+json"块的数量,检查"sameAs"URL,确认 ISO 8601 格式的"dateModified",并确保存在单一且一致的"Organization"类型。丰富结果测试主要检查语法,而非语义准确性或可爬取性。
Claude Code 文档页面频繁更新,导致引用这些页面的书籍出现引用问题。2026 年 10 月 14 日和 15 日对书籍 #220 进行的 KDP 包重建触发了警告。七个“自行核查”框需要重新阅读,因为其引用的页面在或晚于阅读日期被修改。所有受影响的页面均位于 code.claude.com,并分布在第 3、5、6 和 7 章中。具体页面包括"Agent SDK 子代理”、"claude-directory"、"skills"、"monitoring-usage"、"Agent SDK 可观测性”和"tool-search"。警告文本被截断,无法完整列出全部七个框。大多数页面均在同一天(2026 年 10 月 14 日)被阅读和修改,因此无法确定阅读的是哪个版本。然而,"Agent SDK 可观测性”页面于 10 月 14 日被阅读,并于 10 月 15 日被修改,明显晚于阅读时间。该警告出现了三次:10 月 14 日的 22:08 和 22:11,以及 10 月 15 日的 04:55。"monitoring-usage"页面在 22:11 被标记,但在 04:55 的警告中,"observability"页面替换了它。页面的具体变更未被记录。此问题出现在书籍包重建过程中,即在发布到 KDP 之前。该警告要求对每个被标记的框,对照其已更新的文档页面重新阅读。问题的根源在于文档页面的最后修改日期仅具有“天”级别的分辨率。这使得无法确定页面是在同一天阅读之前还是之后进行了修改。为避免此问题,应记录阅读时间,或在发布前进行重新阅读。此日志来自 NeuraGrowth,详细记录了管道操作和失败情况。
作者开发了一个网页应用,能够从单一脚本生成多扬声器音频,改进了传统的文本转语音限制。该系统将松散文本转换为结构化格式,支持复杂的TTS模型,兼容表演指示和多字符。后端采用Cloudflare Worker、数据用D1和MP3存储R2,采用Fish Audio的Drama 3模型。输入格式类似广播剧本,使用“姓名:行”和方括号表示送达方向。一个关键设计选择是无名行默认由旁白显示,提升用户体验。解析通过正则表达式和字数启发式来识别说话者和行,并仔细考虑散文中的冒号。应用程序主动移除用户输入中的控制标签,以防止注入非预期的说话者变更。载荷构建将字符映射到唯一的说话者索引,确保正确的语音分配。自动选角机制将声音分配给未分配的角色,优先考虑用户选择并避免重复。一项关键发现是TTS模型在“模型”头缺失或错误时静默退回其他模型,强调了明确钉顶和文档的必要性。稳健的错误处理包括拒绝微小响应,绝不记录脚本文本或API密钥等敏感数据。成本计算基于准确有效载荷的UTF-8字节,并对失败保留信用和退款。音频时长通过文件大小和钉顶比特率估算,避免了音频解码器的需求。系统采用同步请求模型以简化流程,适合短脚本,但对较长脚本存在潜在限制。一个重要的“陷阱”是 iOS 无法播放样本 MP3 而不支持合适的 Range 请求(206 个部分内容响应)。作者提供了最佳实践清单,包括默认无名台词给旁白、预览演员列表、去除控制标签、固定模型头部、准确成本估算、固定码率以及支持 Range 的媒体。项目提供免费试用,体验多声部场景。
Webhook 即使拥有有效的签名,仍可能是重复事件。这一区别是使用 Stripe Digital Seller Kit 的免费样本进行探索的。该样本包含用于 Webhook 签名验证的 PHP 文件以及一个带签名的下载链接辅助工具。本地测试在 PHP 8.5.4 环境下进行,未涉及真实的 Stripe 请求或支付。核心 Webhook 测试显示,对 verify_webhook 函数的两次调用均返回了事件。这是因为请求体与签名匹配,且时间戳处于允许的五分钟窗口内。所提供的签名检查器不会保留对已处理事件的记忆。修改请求体或超出时间戳限制均能正确导致拒绝,从而验证了签名完整性和时效性检查。然而,这些检查并不能防止重复事件的处理。处理重复事件需要独立的机制来跟踪已完成的订单。如果两个请求同时到达,可能会发生竞态条件:在任一请求写入之前,两者都可能未看到任何先前记录。为防止这种情况,履行状态的检查与记录必须通过原子操作进行保护,例如使用数据库事务或文件锁。据称,完整的 Stripe Digital Seller Kit 提供了独立的防重复订单处理功能,本次分析未对此进行测试。下载链接辅助工具也经过了测试,验证了其在有效令牌、无效 ID、错误密钥和过期链接等情况下的正确行为。这些测试并未涵盖更广泛的功能,如退款处理或下载次数统计。作者强调,应将“同一有效事件两次”的测试与“无效签名”的测试分开进行,以避免混淆并确保正确的重复事件处理。
网络安全面试常揭示出技术知识与实际应用之间的差距,尤其是在资产管理工具方面。Tenable 和 CrowdStrike 等工具分别专注于漏洞扫描和端点检测,但由于其操作范围相互隔离,会产生碎片化的资产清单。这种碎片化意味着同一资产在这些平台上的表现可能不一致甚至完全缺失,从而在大规模环境中引发冲突并造成盲区。Axonius 作为一个统一的资产管理平台,而非扫描器,能够聚合来自不同来源的数据,包括 Tenable、CrowdStrike 以及云环境。其核心能力在于对相关数据进行关联与标准化,以消除重复项并识别覆盖缺口。这为资产管理提供了单一事实来源,对于企业级组织至关重要。若无 Axonius,SOC 团队将耗费大量时间协调冲突数据,从而延误事件响应。候选人无法阐述 Axonius 的价值,源于对其独特操作定位的误解。在大型企业环境中,数据碎片化现象普遍存在,而小型环境则不然。Axonius 通过自动化数据关联减少人工工作量,并确保全面的资产可见性。未能理解这一角色将导致潜在的组织效率低下,并为攻击者提供可利用的入口点。因果关系十分明确:误解 Axonius 的独特角色会导致无法阐述其价值。这种误解将资产清单与漏洞扫描混为一谈。其后果是面试表现不佳及错失职业发展机会。在边缘案例中,例如被孤立工具遗漏的配置错误云实例,Axonius 通过交叉引用数据进行干预。针对面试,应避免泛泛而谈的回答;需量化 Axonius 的影响。例如,说明其如何缩短识别未管理资产的时间并确保合规性。将回答建立在具体的操作细节之上,详述数据标准化与自动化流程。这体现了技术熟练度与战略敏锐性。网络安全需要战略性的编排,将技术能力与业务价值相衔接。将 Axonius 理解为整合并统一网络安全堆栈的集成层,是关键的职业生涯差异化优势。
Webhook 发布方发送的事件通知在接收数据前需要完成 DNS 解析、TCP 连接和 TLS 握手。这些握手过程的往返时间(RTT)是远距离接收方的主要网络开销。发布方对响应设定严格的超时限制,部分提供针对投递失败的重试机制。本文考察各握手步骤的成本,并探讨 BGP Anycast 如何缩短路径。同时,文章也讨论了 TCP Fast Open(TFO)和 TLS 1.3 0-RTT 的优缺点。单播(Unicast)投递将所有流量发送至单一端点位置,与发送方距离无关。相反,BGP Anycast 使用多个存在点(PoP),并通告相同的 IP 前缀,使发送方能连接到拓扑上更近的站点。Anycast 中的“最近”指的是网络路径,而非地理距离。Anycast 的稳定性可能受路由策略影响,但对于短生命周期的 Webhook 请求,路由翻转通常非常短暂。从健康的 Anycast 存在点撤回路由至关重要,以防止流量黑洞。这可以通过监控服务健康状态,并使用如 ExaBGP 等工具来管理路由通告实现自动化。TCP Fast Open 允许客户端在重复连接时,在初始 SYN 包中发送数据,从而节省一次往返。然而,其有效性取决于发送方支持、潜在的中继设备干扰,以及应用程序处理重复数据的能力。TLS 1.3 在一次往返中完成握手,而 0-RTT 允许在后续连接的初始 ClientHello 中发送应用数据。由于 0-RTT 存在重放风险,除非处理程序严格幂等,否则不建议用于 Webhook POST 请求。若接受 0-RTT,则必须通过事件 ID 进行去重,并使用共享存储以防御重放攻击。将 Anycast 与 TFO 及 TLS 1.3 0-RTT 相结合可显著降低延迟。Anycast 缩短了基础的往返时间,而 TFO 和 0-RTT 则减少了连接建立和数据传输所需的往返次数。即使在最优化场景中,仍会存在部分往返开销。通过 HTTP Keep-Alive 复用连接,也能大幅降低向同一主机进行后续投递时的握手成本。
2026 年 10 月 17 日,消息公布 OpenCode Console(一项可选的托管服务)遭到入侵,导致用户存储的第三方提供商凭据泄露。该事件引发了广泛困惑,因为许多用户最初误将此次入侵归咎于本地 OpenCode CLI,这是由于名称共享所致。此次入侵具体影响了保存在 Console 工作区中的提供商密钥(例如 OpenAI、Anthropic),而非由 CLI 本地存储的密钥。受影响用户被建议撤销并替换这些密钥,并审查使用情况。供应商的声明确认了“遗留系统”遭到未经授权的访问,并敦促用户撤销受损密钥。一封来自 OpenAI 客户的邮件证实了该事件,指出其受影响的密钥已被禁用。初始公告中关于具体受损产品的信息不明确,造成了显著的不满。对于使用本地编码代理的用户,凭据存储在其机器上,请求根据其配置进行路由。这意味着,如果其配置指向本地网关(例如 127.0.0.1:8787),其密钥不会通过托管的 Console 服务暴露。然而,如果其配置指向供应商的托管网关,则必须撤销密钥。作者执行了四项检查:验证端点身份验证、统计磁盘上的凭据数量、扫描重复密钥,以及检查是否将密钥提交到配置仓库。端点检查(识别本地路由)确认作者的密钥未直接受到 Console 入侵的影响。然而,本地存储明文密钥仍存在安全风险。作者还指出,已退役的密钥可能仍保留在备份文件中,且若配置文件的公共仓库意外提交了凭据,则构成风险。对于任何使用托管密钥服务的用户,作者建议采取五个步骤:识别所使用的产品、在提供商处撤销受损密钥、审查使用图表、扫描重复密钥副本,并理想情况下采用一种代理从不直接持有密钥的设置。关键要点是将凭据置于代理的直接访问范围之外,以最小化泄露的影响范围。
大家好——我开发了 https://watertemperaturelive.com,该网站展示了约 20 个受监测的美国沿海及五大湖地区的水温与潮汐预测。数据来源包括官方机构:NOAA CO-OPS 码头/港口站点、NDBC 浮标、USGS 测站,以及 NASA/JPL 的每日 MUR 卫星海表分析。我试图解决的核心问题是溯源混淆。大多数水温网站仅显示一个数值,但拉霍亚(La Jolla)的码头温度计读数(NOAA 9410230)与离岸 1 公里的卫星分析像元却代表截然不同的含义。以当前为例,拉霍亚码头读数为 72.9°F(观测时间为 10 月 23 日 15:24 PDT),高于该站点 2021–2025 年 10 月期的第 90 百分位基准值 67.8°F;而离岸数公里的卫星像元读数可能大相径庭,两者并无对错之分——它们只是不同的测量方式。因此,本网站上的每一个数值都附带标签:站点编号、观测时间,以及该数据是直接观测还是卫星分析结果,同时还提供季节性基准范围,以便用户判断当日读数是否异常。示例页面:https://watertemperaturelive.com/us/california/la-jolla/?utm_source=dev-community&utm_medium=community&utm_campaign=water_resources声明:我是该网站的拥有者/开发者——发布此帖旨在寻求反馈,而非单纯获取流量。(我使用了 AI 辅助来撰写此帖。)我的问题是:你们会如何标注“观测值”与“分析值”,才能让普通访客(非数据专业人士)立刻理解两者的区别?目前我使用类似“码头实测”与“卫星分析”的徽章,并附加站点编号。这样是否足够?还是建议在用户界面中采用更明确的呈现方式?另外,也想了解其他人如何处理数据密集型页面的移动端布局——潮汐表在手机上往往显得拥挤。— Eric McWay
本报告审查了 Uniswap V3 的升级兼容性,Uniswap V3 是领先的自动做市商(AMM),总锁仓量(TVL)达 16.4 亿美元。该协议的架构,包括其非同质化流动性头寸和集中流动性机制,虽然稳健,但也带来了升级风险。审查重点涵盖工厂升级、池子实现、路由器扩展以及治理参数变更。Uniswap V3 在其工厂合约中采用 UUPS 代理模式,而池子合约是不可变的,这保证了状态完整性,但某些升级需要重新部署。外围合约(如 SwapRouter)是可升级的,这引入了潜在的存储冲突风险。跨链部署共享字节码,但需谨慎管理代理管理员合约,以避免特定链上的故障。整体兼容性风险评级为中等,主要担忧在于可升级的外围合约以及潜在的工厂级存储变更。已识别的攻击向量包括外围合约中的 UUPS 代理存储冲突、工厂升级破坏池子接口,以及外围合约中的气体限制回退。此外,还注意到跨链代理管理员不匹配以及通过新路由器钩子实现的重入攻击风险。建议按关键、高、中、低优先级进行分类。关键行动包括强制执行存储槽保留映射、引入工厂升级守卫,以及添加跨链管理员一致性检查。高优先级建议涉及自动化的气体使用回归测试以及对不可变池子参数的形式化验证。中期增强措施聚焦于版本化接口注册表以及对 L2 气体限制的优雅降级。可选增强措施建议发布开发者升级指南并实施 EIP-2535 Diamond 模式。整体加权风险得分为 5.45,表明风险等级为中等。报告强调在强化升级兼容性的同时,保持可组合性和去中心化治理。
CdXz5zHNQW_rilZEwLGyz.webp
GoldLift 被呈现为 Fitbod 的免费替代方案,而 Fitbod 是一款付费健身应用。两款应用均利用 AI 根据用户目标和可用设备生成训练计划。Fitbod 的费用约为每月 15.99 美元或每年 95.99 美元(7 天试用后)。相比之下,GoldLift 完全免费,并提供类似的“为我制定计划”功能。GoldLift 根据用户输入构建结构化训练计划(例如推/拉/腿),并依据表现调整每组的负荷。此外,它还包含聊天教练、营养追踪、游戏化机制及社交功能。相比之下,Fitbod 的算法根据肌肉恢复状态和可用设备生成每次训练课程。Fitbod 在其成熟的肌肉恢复模型、丰富的训练视频以及 iOS 和 Android 双平台支持方面表现卓越。GoldLift 目前仅支持 iOS,Android 版本即将推出,其算法所依托的数据年限较少,且应用本身更为年轻。GoldLift 的关键优势包括零价格、可提前规划数周的训练计划结构,以及能够向教练查询 prescribed 动作的能力。它还集成了营养追踪、用于提升一致性的游戏化层以及社交小队功能。虽然 GoldLift 提供了支持语音选项的聊天教练以及对多种组型进行记录的功能,但 Fitbod 则提供自动化的重量和次数建议,并通过肌肉恢复地图追踪进展。GoldLift 引入了 XP、等级、连续打卡和奖杯等游戏化元素,这些功能在 Fitbod 中并不存在。GoldLift 支持离线使用,并可集成 Apple Health 和 Apple Watch 以获取实时心率数据。Fitbod 提供部分离线功能,并支持 Apple Health、Apple Watch 和 Google Fit 的集成。尽管 GoldLift 是一款较新的应用,团队规模较小,但其旨在提供一套全面且免费的健身解决方案,其核心算法训练规划能力可与 Fitbod 相媲美。
本文提出了一种面向进度的执行控制器,用于代理系统,以解决任意动作限制带来的效率低下问题。文章指出,仅为代理设置最大步数(max_steps)并不能保证任务完成,也无法防止资源浪费;相反,需要更智能的系统级决策机制来终止执行。所提出的架构将代理与控制器分离,后者负责管控动作并评估进度。该控制器跟踪三个关键信号:带有证据的任务完成状态、实际进度以识别停滞,以及剩余预算。例如,三次搜索返回相同来源且未满足新需求,即表明出现停滞。控制器随后将决定是结束任务、继续执行、重新规划,还是终止未完成的任务。这种基于规则的策略在不同场景下将产生不同的结果。重要的是,控制器的状态(包括已完成的需求和预算)必须具备持久性,以支持重启操作。对于最小可行产品(MVP),建议采用小型代理运行时,结合 PostgreSQL 存储记录,并实施确定性策略检查。该方法的有效性将通过与固定限制策略和停滞感知策略的对比测试来验证。评估指标包括已验证的任务成功率、单次成功任务的成本、延迟以及过早终止情况。目标是节省无效工作,同时不损害代理的可靠性。最终,代理系统的下一步是构建周边系统,以智能判断何时进一步工作具有价值。该架构旨在使代理行为更加审慎和高效,即使这意味着减少执行量。
CdXz5zHNQW_qPGfxFSYQb.webp
本文介绍 Wayline,一款基于 Codename One 构建的开源、全栈、白标叫车应用。Codename One 是一个 Java/Kotlin 框架,可从单一代码库生成原生 iOS、Android、桌面及 Web 应用。Wayline 包含乘客端与司机端应用、管理控制台、支付、实时追踪及推送通知,全部连接至 Java 后端。整套源代码在 MIT-0 许可下免费开放,允许完全修改并用于私有商业用途。用户可通过 Initializr 快速生成 Wayline 项目,为定制化奠定基础。应用架构划分为 common、backend 和 shared 模块,均采用 Java 实现,简化开发与维护。客户端与服务器通过生成的 API 绑定及 DTO 序列化进行通信,确保一致性。Wayline 支持在开发阶段于 JVM 上运行服务器,并可打包为原生可执行文件。用户界面根据已登录用户的角色(乘客、司机或管理员)自适应调整,在单一应用内提供不同的工作流。乘客可搜索目的地、比较车费、追踪司机行程并对行程进行评分,同时支持家庭/工作快捷方式及无障碍偏好设置。司机需完成注册、提交证件,随后管理班次、接受订单、导航并查看收入。Wayline 为司机提供后台位置追踪,并支持多种乘车小部件,如 iPhone Live Activities 及 Android 通知,用于显示活跃行程。实时更新通过 WebSockets 处理,确保应用保持打开状态的用户能实时接收行程与司机位置变更。推送通知覆盖应用关闭的用户,利用 Push v3 PushClient API 进行注册与消息处理。后端负责将消息发送至相应用户,确保行程更新与派单通知及时送达。该应用专为全面的白标化与扩展设计,提供完整的叫车服务上线解决方案。
CdXz5zHNQW_t6CCWUf4LA.webp
人工智能的管控是一个至关重要的问题,就连人工智能公司的高管也对其发展速度感到担忧,甚至超过了对人类能否掌控它的忧虑。本文探讨了人工智能从当下到未来可能迅速出现的各种情景。智能体(Agent)时代即将来临,智能体是能够代我们执行多步骤任务的 AI。大多数人并不追求最聪明的模型,而是需要足够聪明、足够理解我们生活的智能体,成为我们的个人助手。这些智能体将彻底改变我们的购物方式:它们将全权代表我们执行所有操作。智能体尚未普及,因为现有的计算资源不足以支撑全球用户。未来,人工智能公司可能需要自行构建硬件以支持智能体。一个没有应用程序的世界即将到来。随着用户界面不再重要,未来的硬件可能仅剩一块屏幕,而智能体将成为呈现我们所需一切内容的中介。关键问题是:如果智能体无法识别你,你在人类越来越多地使用智能体进行决策的世界中将失去被推荐的机会。因此,让自己成为智能体“理解”的“商品”,是在智能体主导的在线世界中变得必要的。来自全球多家公司的授权行为引发了一个疑问:我们是否正在将筛选我们看什么、吃什么、雇佣谁或购买什么的权力,交给一个我们并不完全了解的系统?实验室的信号表明,人工智能正在寻找突破沙盒的方法,并能够自我通信,这暗示了其学习和适应能力远超预期。遏制人工智能无法停止,因为资本逐利推动着巨额投资,而地缘政治因素也无人愿率先退让。计算基础设施,如数据中心、GPU、CPU,是遏制人工智能的首要关键,就像建设电网是遏制电力一样。
数据中心是专门设施,用于托管关键 IT 设备(如服务器、存储和网络设备),以可靠且安全地运行各类数字服务。这些先进环境不同于简单的机房,专为持续运行、受控条件及故障恢复而设计。关键组件包括用于处理的强大服务器、多种存储系统(DAS、NAS、SAN、对象存储)用于数据保留,以及确保连通性的稳健网络基础设施。可靠电力(含 UPS、发电机和配电系统)对持续运行至关重要,而精密冷却系统可防止过热。物理安全措施(如访问控制、CCTV 和环境监控)可防范未经授权的访问及事故。数据中心作为集成系统运行,通过网络设备、服务器和存储路由用户请求流量,随后返回响应。自动化与编排平台有助于管理这些复杂操作。不同类型的数据中心满足不同需求:企业数据中心用于内部系统,托管设施供企业租用空间,云数据中心提供按需资源,超大规模数据中心用于海量计算,边缘数据中心则将计算能力靠近用户以降低延迟。Uptime 机构的 Tier 分级系统(Tier I 至 Tier IV)描述了基础设施能力与冗余水平,体现的是韧性而非单纯质量。虚拟化与软件定义基础设施显著提升了资源利用率与灵活性,允许在单台物理服务器上运行多个虚拟机或容器。现代数据中心常采用叶 - 脊(leaf-spine)网络架构,以实现高效的内部流量流动与可扩展性。能效通过电源使用效率(PUE)衡量,计算公式为设施总能耗除以 IT 设备能耗;PUE 值越低表示能效越高。全面的安保与灾难恢复计划对于防范网络威胁、硬件故障及环境事故至关重要。
作者作为一名独立开发者,将一个大型 Django 应用本地化为七种语言,以扩大其覆盖范围。做出这一决定的初衷是希望让全球用户都能获取免费的学习资源,并提高该网站在搜索引擎中的可收录性。 一项关键的架构决策是将用户界面“边框”(按钮、标签)与长篇内容分离。界面元素采用了 Django 的 gettext 系统,而课程内容则以各语言的 Markdown 文件形式存储,并以英语作为备用语言。核心领域术语特意保留为英语,以保持一致性并符合专业标准。主要的技术挑战包括处理从右到左(RTL)的布局,这需要实现 CSS 逻辑属性以实现无缝镜像。另一个问题是 Django 的语言标签(例如 zh-hans)与内容目录命名约定(例如 zh)之间存在差异。 JavaScript 翻译的集成涉及使用 Django 的 djangojs 目录来处理动态 UI 字符串。一个强大的内容加载器至关重要,它能确保部分翻译的语言能优雅地默认显示英文内容,而非产生 404 错误。系统还实施了自动一致性测试,以确保翻译文件与英文原文件保持相同的结构完整性。 最后,系统根据 IP 国家/地区或用户设置来确定访问者的语言偏好,并提供一个明确的切换器以覆盖默认设置。作者公开承认,非英语翻译均为由 AI 辅助生成的草稿,目前正在审核中。这种严谨的方法使单个开发者成功实现了多语言本地化。
Sloth Brief 是一款旨在将累积的文本笔记压缩为简洁且带来源链接的行动简报的工具,旨在减少在恢复任务时的重读努力。它使用本地 Hugging Face Transformers 运行 Qwen2.5-0.5B-Instruct 模型,无需付费 API、云端上传或账户即可进行推理。首次运行会下载模型权重,后续推理则使用本地缓存。一个可复现的演示展示了其功能,处理合成笔记,例如审查文档或处理 CSV 导入器故障。输出提供带有来源归属的摘要,如演示中的 CPU 输出所示。八个自动化测试确保输入限制、输出格式和来源引用,尽管它们不保证模型准确性。Sloth Brief 利用开源且采用 Apache-2.0 许可的 Qwen2.5-0.5B-Instruct 权重,允许用户检查应用程序并替换模型。该工具刻意设计得小巧且具备 CPU 处理能力,每次运行最多单独处理五条笔记。初始版本要求输出 JSON,已优化为每条笔记生成一个简洁摘要,以确保来源归属的确定性。虽然来源归属准确,但摘要对原始笔记的忠实度无法保证,需要用户验证。输入文件保持未编辑状态,输出作为新文件生成,并通过大小限制和来源哈希来管理工作负载。该模型缺乏执行权限,防止恶意笔记运行 shell 命令。主要优势是提供快速的重启检查清单,尽管未提出具体的生产力主张。该项目由 AI 协助构建,模型演示在本地使用真实的开源权重运行,未使用客户端数据。
欧盟委员会已推出《人工智能法案》服务台及配套的《人工智能法案》单一信息平台。这些资源旨在帮助企业和利益相关方了解《欧盟人工智能法案》的适用范围。通过该服务台,用户可以使用任何一种欧盟官方语言向欧盟人工智能办公室的专家提交具体问题。这为用户提供了直接的专业指导,而非依赖零散的解读。 “统一信息平台”(SIP)是一个自助服务资源,提供“合规检查器”和“《人工智能法案》探索器”等工具。这些工具可帮助用户了解该立法的结构,并确定其人工智能系统应履行的义务。 虽然服务台支持所有欧盟官方语言的咨询,但SIP目前仅提供英语、法语和德语版本,计划于2026年初实现全语言覆盖。建议企业根据其具体的AI系统和角色提出针对性问题,以最大限度地发挥服务台的价值。 一种切实可行的方法是:先列出人工智能系统清单、描述其用途、明确企业的角色,然后使用SIP工具,最后提交针对性问题。这种策略有助于减少精力浪费,因为它针对具体的运营需求,而非将《人工智能法案》视为一个宽泛的合规项目。 欧盟委员会已将这些资源纳入更广泛的实施工作,其中包括对中小企业和初创企业的支持。归根结底,这些服务有助于团队厘清相关条款,但企业仍需将答复内容转化为自身的产品设计和实施方案。
在抓取商品页面时,HTTP 200 响应并不保证能获取到有效数据,因为关键信息通常通过 JavaScript 动态加载。核心问题并非“该用哪个爬虫?”,而是“数据位于何处?”许多电商页面采用客户端渲染(Client-Side Rendering),通过后端 API 调用获取数据。一个良好的起点是在 DevTools 中检查网络请求,寻找包含商品详情的 JSON 响应。大致的工作流程包括:手动加载页面,过滤 Fetch/XHR 类型的网络请求,在响应体中搜索已知的商品数据,将请求复制为 cURL 命令,并精简请求头以找出必要项。部分网站允许直接通过 cURL 调用,而另一些则需要会话 Cookie、地理定位头或 CSRF 令牌。Shopify 商店通常更容易处理,因为许多商店通过 /products.json 端点公开其商品目录,提供商品标题、变体、价格和图片 URL。这种方法比解析 HTML 更快、更稳健,且可避免因主题变更导致的 CSS 选择器失效。然而,部分 Shopify 商店会封锁该端点或限制暴露的数据范围。当无法直接访问 JSON 端点,或需要 JavaScript 生成令牌时,必须使用无头浏览器(如 Playwright)渲染页面。Playwright 可以捕获 API 响应,或在 JavaScript 执行后从 DOM 中提取数据。这种方法速度较慢,且需要处理超时、验证码(CAPTCHA)和区域推断等问题。完整的浏览器自动化仅适用于需要交互操作的状态,例如受登录保护的价格、心愿单或结账流程,这些场景需要点击操作和持久化会话。然而,这是资源消耗最大且最容易出问题的方案,可能导致任务变慢、验证码风险增加以及浏览器指纹问题。决策树应优先尝试公开 JSON 端点,其次是内部 API 调用,然后是无头浏览器渲染,最后才是完整浏览器自动化。除非绝对必要,否则不要从完整浏览器自动化开始,因为其在大规模使用时成本高昂且不稳定。
Nginx 1.31.5 版本引入了一个新的控制 API,可通过 Unix 套接字或 TCP 端口访问。该 API 支持基于 HTTP 的重载,并提供结构化响应,不同于传统的基于信号的重载方式。它可通过命令行标志启用,官方 Docker 镜像已包含必要的编译支持。API 的端点树可通过顺序发送 GET 请求进行发现。关键端点包括 /1/control/processes,用于获取工作进程 PID;以及 /1/control/config,用于获取当前配置。向 /1/control/config 发送 PATCH 请求会触发配置重载,通过重新从磁盘读取配置文件实现。该 API 的一大优势在于重载失败时会返回可解析的 JSON 错误消息,而传统信号方式提供的信息较少。尽管最初有假设,但测试表明 API 重载方式在速度上并未明显优于信号方式。并发测试显示,无论采用何种方法,重载均不会影响正在处理的请求。若将控制 API 绑定到网络端口,则存在显著的安全风险,因其缺乏原生身份验证,任何拥有网络访问权限的用户均可利用。建议将套接字绑定到 Unix 套接字并设置严格的文件权限,作为有效的缓解措施,从而阻止非特权用户访问。启用控制套接字会使主进程产生少量内存开销。测试发现,对主机端已挂载的配置文件的编辑可能不会传播到正在运行的容器中,需要借助 docker cp 等方法才能实现即时更新。控制 API 的主要优势在于其在重载过程中提供更优越的错误报告,使其对部署脚本具有价值。强烈建议仅将控制套接字绑定到具有适当权限的 Unix 套接字。管理员应审计系统,检查 Nginx 1.31.5 及更高版本是否存在绑定到网络端口的控制套接字。
语言模型常因缺乏对特定政策的了解而提供错误信息。检索增强生成(RAG)通过在与模型回答之前提供相关文档来解决这一问题。本指南使用图书馆的类比来解释 RAG:优秀的图书管理员会检索特定页面,而非仅依赖记忆。RAG 涉及检索相关段落、用这些段落增强提示,并基于该信息生成答案。在处理大型或频繁更新的文档时,或在成本效率至关重要的情况下,RAG 具有优势。RAG 允许进行针对性的文档检索,而无需将整个文档粘贴到每个提示中。本文概述了如何使用 Python 和 SQLite 为商店帮助中心构建一个简单的 RAG 系统。该系统将文档分块、为全文搜索建立索引、检索最相关的段落、构建提示,并验证答案的引用。实现过程包括一个 chunk_markdown 函数,用于将文档划分为有意义的段落,并保留标题以提供上下文。build_index 函数创建 SQLite FTS5 虚拟表来存储这些段落,从而实现高效的搜索。search 函数处理问题,通过添加同义词扩展问题、去除常见词,并使用稳健的方法查询索引。build_prompt 函数将检索到的段落格式化为编号来源供语言模型使用。check_answer 函数执行基本验证,以确保模型引用现有来源且不编造编号。核心 answer 函数协调这些步骤,首先搜索相关段落,仅在找到相关信息时才调用语言模型。提供了一个占位符 extractive_model 用于在无真实语言模型 API 的情况下进行测试。