2024-03-13
29 篇热帖
2. A generalist AI agent for 3D virtual environments (deepmind.google)
文章摘要:Google DeepMind 发布通用AI智能体SIMA
该研究介绍了 可扩展的可指导多世界智能体(SIMA),这是一种能够在多种3D虚拟游戏环境中遵循自然语言指令执行任务的通用AI智能体。
研究背景与目标
- 游戏是AI系统的关键测试平台,具有响应式实时环境和变化目标。
- 研究重点从玩单个游戏转向开发通用的、可指导的游戏AI智能体。目标不是追求高分,而是让AI学会在多种游戏环境中遵循指令,从而为未来在任何环境中创建更有用的AI助手奠定基础。
SIMA的核心特性
- 输入输出:仅需要屏幕图像和用户的自然语言指令作为输入,通过键盘和鼠标操作控制游戏角色执行任务,与人类操作方式相同。
- 技术架构:包含预训练的视觉模型和一个具有记忆功能的主模型,用于预测屏幕上接下来发生的情况并输出操作。
- 关键优势:
- 无需游戏源码或定制API:使用简单通用的界面。
- 通用性与泛化能力:在由八个游戏工作室提供的九款不同游戏(如《无人深空》、《拆迁》)及四个研究环境(包括自建的Unity“构建实验室”)中进行了训练和测试。实验表明,在多个游戏上训练的智能体显著优于仅在单个游戏上训练的专门智能体。它甚至能在未见过的游戏上表现良好。
- 语言的重要性:测试显示,没有语言训练或指令的智能体会表现出漫无目的的行为,证明了语言对于引导其行为的关键作用。
当前能力与未来方向
- 当前版本的SIMA可评估约600项基本技能,如导航、物品交互和菜单使用,专注于能在约10秒内完成的简单任务。
- 未来目标是让智能体能够处理需要高层战略规划和多步骤的复杂任务(例如“寻找资源并建造营地”)。
- 研究团队希望将SIMA暴露于更多训练环境中,并整合更强大的模型,以提升其理解高级语言指令和执行复杂目标的能力。
- 该研究为开发新一代通用的、语言驱动的AI智能体展示了潜力,旨在构建最终能理解并安全执行各类任务的通用AI系统,以帮助人们。
3. The NYPD sent a warrantless subpoena for a copwatcher's Twitter account (hellgatenyc.com)
文章概述:纽约警察局(NYPD)在没有获取搜查令的情况下,向一名警察监视者(copwatcher)的Twitter账户发送了传票。该事件由Hell Gate网站报道,作者Scott's Picks于2024年3月11日发布,并附有NYPD总部(One Police Plaza)的图片。文章全文需付费订阅才能访问。
4. Nvtop: Linux Task Monitor for Nvidia, AMD and Intel GPUs (github.com)
NVTOP:Linux 多厂商GPU任务监控工具
NVTOP 是一款类似 htop 的实时GPU与加速器任务监控工具,支持多种硬件厂商,并能以熟悉的交互式界面展示监控信息。
核心功能与特性
- 多GPU支持:可同时监控系统中的多个GPU。
- 交互式界面:类似
htop的文本界面,支持热键操作(如F2打开设置窗口,F12保存配置)。 - 广泛的硬件兼容:支持以下厂商的GPU/加速器:
- AMD:通过
amdgpu或旧版radeon驱动。需要Linux内核 ≥ 5.14 以查看进程信息。 - Intel:通过
i915或Xe驱动。需要内核 ≥ 5.19,且监控总内存需CAP_PERFMON或CAP_SYS_ADMIN权限。 - NVIDIA:使用专有驱动和NVML库,支持Kepler架构(GeForce 600系列)及更新GPU。
- 其他厂商:包括Adreno(内核 ≥ 6.0)、Apple(Metal,测试阶段)、华为Ascend、Iluvatar CoreX、VideoCore、Rockchip、MetaX、Enflame和Tenstorrent等。
- AMD:通过
安装与构建
发行版特定安装
- Ubuntu/Debian:可通过PPA、AppImage或Snap安装。PPA命令:
sudo add-apt-repository ppa:quentiumyt/nvtop sudo apt install nvtop - Fedora/RHEL/CentOS:可通过EPEL仓库或AppImage安装。
- 其他:支持OpenSUSE、Arch Linux、Gentoo的包管理器或AppImage安装。
通用安装方式
- AppImage:下载后赋予执行权限即可运行。
- Snap:
snap install nvtop,并根据需要连接相应插槽。 - Conda:
conda install --channel conda-forge nvtop。 - Docker:需配合NVIDIA驱动和容器工具包。
从源码构建
需要预先安装 ncurses 库和对应GPU厂商的库(如NVIDIA的NVML、AMD的libdrm等):
git clone https://github.com/Syllo/nvtop.git
mkdir -p nvtop/build && cd nvtop/build
cmake .. -DNVIDIA_SUPPORT=ON -DAMDGPU_SUPPORT=ON -DINTEL_SUPPORT=ON
make
sudo make install
构建支持 Release、RelWithDebInfo 和 Debug 等类型。
故障排除
- 界面显示异常:确保安装了
libncursesw5-dev(Debian系)或相应宽字符库。 - NVIDIA无GPU检测:确认
libnvml.so库存在(随驱动安装),WSL2环境下需遵循特殊安装指南。 - Putty用户:在终端设置中将终端类型改为
putty以改善显示。
许可证
NVTOP 基于 GPLv3 或更高版本许可证发布。
5. Show HN: Flox 1.0 – Open-source dev env as code with Nix (github.com)
Flox 1.0 是一个基于 Nix 的开源软件环境平台,旨在通过单一声明式清单为从开发到生产的每个环境提供可复现、一致的运行时。
核心价值与特点:
- 声明式环境:通过一个
manifest.toml文件定义项目所需的所有工具、环境变量和服务。 - 可复现与可复现:环境定义被锁定在加密固定的内容哈希输入上,确保相同定义在任何受支持系统上产生完全相同的环境,消除环境漂移。
- 全组织生命周期管理:不同于传统仅限于单机的包管理器,Flox 管理整个组织中包和环境的生命周期。
- 开箱即用:无需深入学习 Nix 即可使用,同时保留 Nix 的全部能力。
主要功能与能力:
- 环境创建与管理:通过
flox init创建项目专属环境,flox activate激活后工具可用,退出后自动消失。 - 包搜索与安装:可从拥有超过 12 万个包的 Nixpkgs 中搜索和安装软件。
- 环境共享与同步:通过
flox push/pull与团队共享环境,确保所有成员使用完全相同的配置。 - 容器化:使用
flox containerize将环境打包为 OCI 镜像,无需编写 Dockerfile。 - 软件构建与发布:支持从源代码构建自定义软件包并发布给团队使用。
- 服务管理:可运行数据库、队列等后台服务作为环境的一部分。
- AI 就绪:为 AI 编码代理(如 Claude Code、Cursor)提供确定性环境,确保生成代码每次都能以相同方式构建和运行。
目标用户:
- 平台与开发体验团队:用于标准化组织工具链,缩短新成员上手时间。
- 安全团队:有助于实现 SBOM、漏洞修复、依赖溯源和可复现构建。
- 开发者:为任何技术栈在 macOS、Linux 或 Windows (WSL2) 上提供轻量级、可复现的项目环境。
- AI 编码代理:提供确定性的构建和运行基础。
与现有技术的区别:
- 不止于包管理器:它管理跨组织的完整环境生命周期。
- 与 Docker 互补:它并非容器技术的替代品,而是将软件打包与隔离方式解耦;环境可在裸机、虚拟机或容器中运行。
- Nix 的增强:对 Nix 用户而言是补充,提供了集中式服务 FloxHub 用于协作共享,并将激活钩子、服务等整合到单个 TOML 文件中。
软件供应链安全: 环境的可复现性为 SBOM 生成、软件成分分析、自动化漏洞修补和可审计构建提供了天然基础。
安装与上手:
- 支持在 macOS (brew/pkg)、Linux (deb/rpm) 和 Windows (通过 WSL2) 上安装。
- 基本流程:
flox init创建环境 ->flox install安装包 ->flox activate激活环境。
起源与许可: Flox 源于 D.E. Shaw 集团大规模企业 Nix 部署的经验。其命令行工具使用 GPLv2 许可。
6. Paul Alexander, ‘the man in the iron lung’, has died (www.bbc.com)
“铁肺人”保罗·亚历山大逝世,享年78岁
保罗·亚历山大,一位因童年患小儿麻痹症而终生依赖“铁肺”呼吸的幸存者,于2024年3月12日去世,享年78岁。他的一生挑战了医学预期,并成为毅力与成就的象征。
个人简介与疾病经历
- 1952年,六岁的保罗·亚历山大感染小儿麻痹症,导致颈部以下瘫痪,并丧失自主呼吸能力。
- 为维持生命,他被安置在一个名为“铁肺”的金属圆筒中。该设备通过气压变化模拟呼吸过程。
- 医生曾预计他无法存活很久,但他在此后数十年里一直使用铁肺生活,直到生命尽头。
铁肺下的非凡人生
- 保罗称铁肺为他的“老铁马”。经过多年训练,他曾短暂地学会自主呼吸,能够短暂离开铁肺。
- 他克服了巨大障碍:完成了高中和大学教育,于1984年获得德克萨斯大学奥斯汀分校法律学位,并在1986年成为执业律师,从事法律工作数十年。
- 2020年,他出版了个人回忆录,据称历时八年,通过口述和用塑料棒敲击键盘完成。
家人与外界的追忆
- 他的兄弟菲利普·亚历山大形容他为“热情、温暖的人”,总是面带令人安心的微笑。菲利普表示,保罗的自立精神令人钦佩,即使在需要他人协助日常活动(如进食)时,也努力掌控自己的生活。
- 菲利普回忆,兄弟俩在保罗生命的最后几天共度时光,分享冰淇淋,并称能陪伴在旁是“一种荣幸”。
- 募捐网站上的公告称,保罗是“一位令人难以置信的榜样”。
医学背景与历史意义
- 铁肺(或称“负压呼吸器”)在20世纪中期小儿麻痹症流行时被使用。随着1950年代小儿麻痹症疫苗的出现和呼吸机技术的发展,铁肺在1960年代逐渐被淘汰。
- 尽管如此,保罗因习惯而选择继续使用铁肺,并因此被吉尼斯世界纪录认证为在铁肺中生活时间最长的人。
- 他的长寿超出了预期,见证了小儿麻痹症在西方世界几乎被根除的时代。
7. How photos were transmitted by wire in the 1930s (kottke.org)
8. Show HN: A user-friendly UI for viewing and editing Markdown files (marker.pages.dev)
- 产品名称:Marker
- 性质:开源、免费的可视化 Markdown 编辑器。
- 核心特点:
- 用户友好界面:专注于提供易于使用的编写与编辑体验。
- 本地安全:所有用户创建的内容均直接存储在本地文件系统中,保障数据安全与隐私。
- 跨平台:支持在不同操作系统上运行。
- 获取方式:提供免费下载。
- 联系方式:如有问题,可通过邮箱 turkisaloufi@gmail.com 联系开发者。
9. JIT WireGuard (fly.io)
JIT WireGuard 技术总结
背景与问题
Fly.io 广泛使用 WireGuard 构建其客户 API 和内部工具(如 flyctl CLI)。原有方案通过 NATS 消息系统将 WireGuard 对等节点(peer)配置推送到全球的网关服务器,网关将其安装到 Linux 内核中。此方案面临两个主要问题:
- 可靠性问题:NATS 消息不保证送达,导致连接建立不可靠。
- 可扩展性问题:
flyctl退出后,其创建的对等节点配置会残留于网关内核。大量由 CI 任务创建的、永远不会被重用的陈旧对等节点,导致网关负载过重,内核操作(如重启后重载配置)变慢,甚至引发内核 panic。
解决方案:JIT(即时)对等节点安装
核心思想是改变配置分发模式:从推送改为按需拉取。仅当客户端尝试连接时,网关才实时获取并安装必要的对等节点配置。
关键技术实现
- 检测入站连接:
- 利用 BPF 过滤器或钩入 WebSocket 代理代码,高效捕获所有传入的 WireGuard 握手请求(通过识别 UDP 包中的特定字节)。
- 识别发起者身份:
- WireGuard 协议基于 Noise Framework,在握手阶段隐藏身份。需要执行部分 Noise 密码学运算(约 200 行代码),从握手包中解密出发起者的公钥。
- 通过 Netlink 接口从内核获取网关接口的私钥来完成解密。
- 按需配置与安装:
- 将识别出的公钥作为键,查询内部 HTTP API 获取完整的对等节点配置。
- 将配置安装到内核的 WireGuard 接口中。
- 性能优化 - 主动连接:
- 收到握手请求后,不仅安装对等节点配置,还主动以“发起者”身份向客户端发起连接。这利用了 WireGuard 点对点的对称性,显著加快了新连接的建立速度。
成果与影响
- 状态管理:网关从存储数十万陈旧对等节点,变为仅按需维护活跃节点,状态大幅减少。
- 可靠性与性能:消除了对不可靠 NATS 推送系统的依赖;网关重启后无需加载海量无用配置,速度更快。
- 资源效率:可通过定时任务轻松清理不活跃的对等节点,内核操作更高效。
- 生产验证:新方案已运行数周,效果显著,Grafana 监控图表显示陈旧对等节点数量近乎归零。
10. Insult Passphrase Generator (cheswick.com)
这是一个名为“Insult Passphrase Generator”(侮辱性短语生成器)的工具,由 Ron Hardin 编写。
它的核心功能是自动组合生成一系列极具创意且尖酸刻薄的侮辱性英语短语。从提供的示例可以看出,生成的短语结构模式固定,通常为“You [形容词] [名词] of [形容词] [名词]”,通过将大量不相关且负面的名词与形容词进行荒诞组合,制造出既恶毒又荒谬的攻击性语言。
示例短语包括:
- “You grim air bladder of wormy hound fossils”(你这爬满虫子的猎犬化石般的阴沉气囊)
- “You tormenting canteen of scrofulous stone curlew slabber”(你这淋巴结核的石鸻口水般的折磨人水壶)
- “You mephitic vat of infected sea bass saliva”(你这受感染海鲈鱼唾液般的恶臭大桶)
- 以及其他结构类似、用词奇特且攻击性强烈的短语。
文章最后提供了一个相关链接:https://cheswick.com/insult,这可能是该工具的项目页面或更多信息来源。
11. Bluesky's stackable approach to moderation (bsky.social)
Bluesky 正在推出一种“可堆叠的审核方法”,旨在将社交媒体的体验控制权归还给用户和社区。其核心是开源其协作审核工具 Ozone,并允许个人和团队运行独立的审核服务,这些服务可以无缝集成到 Bluesky 应用中。
核心理念与设计原则: Bluesky 认为,没有任何一个公司能为全球所有地区和文化提供完美的审核方案。因此,他们构建了一个可组合的审核生态系统,让用户能在默认基础上叠加自定义规则。其设计基于三个原则:
- 简单而强大:提供流畅的默认体验,同时保留深度自定义选项。
- 用户选择:赋能用户和社区开发自己的审核系统。
- 开放性:建立开放系统,提升数字空间治理的透明度和信任。
可堆叠审核如何运作:
- 对用户而言:默认订阅 Bluesky 的内置审核服务(包含人工审核与自动系统)。用户可以像关注账号一样,浏览并订阅由第三方运行的独立审核服务,从而自定义内容过滤(例如,屏蔽特定类型的图片)。这些服务层可以叠加在默认审核之上,形成个性化的体验。
- 对审核者/社区管理者而言:可以使用开源的 Ozone 工具来运行自己的审核服务。Ozone 提供了一个团队协作的仪表板,用于处理用户报告、设置自定义标签(如“屏蔽”、“模糊”、“警告”等),管理比传统的屏蔽列表更精细。一个审核服务可以由多人管理,也可以移交,减轻个人负担。
- 对开发者而言:可以使用 Ozone、API 或自建工具来创建审核服务。审核可以是人工的,也可以是全自动的(如使用机器学习识别内容)。这些服务基于通用标签系统工作,不仅可用于内容隐藏,未来还可能用于内容验证或策展。最重要的是,为 Bluesky 构建的审核服务理论上可在任何基于 AT 协议的应用中使用。
与传统模式的区别: Bluesky 的审核与服务器(如 Mastodon 的实例)解耦。社区自治主要通过订阅不同的审核服务(如屏蔽列表)来实现,而非通过服务器的“断联”(defederation)。这使得审核策略可以更灵活、更跨平台地应用。
关键要点:
- 默认保障:Bluesky 始终为应用内内容提供基于其社区准则的默认审核基础。
- 叠加定制:用户可以在默认基础上,自由订阅额外的独立审核服务层。
- 完全自定义(离开选项):如果用户不满足于 Bluesky 的默认规则,他们可以构建或使用完全不同的客户端应用,从头实现自己的审核系统。
- 可持续性:独立审核服务可以像自定义信息源一样,作为社区项目运行,也可能通过付费订阅等方式获得支持。
总之,Bluesky 通过开源 Ozone 和构建可堆叠审核系统,试图建立一个更开放、灵活且由社区驱动的社交媒体治理新模式,将审核的权力和选择权分散化。
12. Pilot of Boeing flight says he lost control after instrument failure (www.cnn.com)
摘要:
- 事故经过:LATAM航空800号航班(悉尼飞往奥克兰,机型为波音787-9梦想客机)在飞行中遭遇突发技术故障。乘客描述飞机瞬间大幅下降约500英尺,导致未系安全带的乘客被抛向舱顶,随后摔落在地,造成约50人受伤,其中一人伤势严重。
- 飞行员说明:事后,飞行员向乘客解释,事故是由于飞机的一个关键仪表突然失效(“仪表盘变暗”),导致其在短时间内失去对飞机的控制。随后仪表恢复,飞机恢复正常飞行状态。
- 调查启动:根据国际民航组织规定,由于该飞机在智利注册,智利民航总局已派出操作和适航性调查组,与新西兰运输事故调查委员会合作开展调查。
- 波音公司背景:此事件发生在波音公司因一系列质量和安全问题而备受关注的时期。文章提及的问题包括:737 MAX机型的两次致命事故、多次交付暂停、2024年1月一架737 MAX的门塞在飞行中脱落,以及美国联邦航空管理局发现的737 MAX和787飞机发动机防冰系统安全问题。
- 监管应对:美国联邦航空管理局已要求波音公司在90天内提交详细计划,以解决在审计中发现的质量问题及员工对报告安全问题的担忧。尽管存在潜在问题,但监管机构目前并未要求相关飞机型号立即停飞。
13. A ragtag band of internet friends became the best at forecasting world events (www.vox.com)
Samotsvety:一群网络朋友如何成为世界事件最佳预测者
核心成就
Samotsvety是一个由顶尖预测者组成的团队,他们在预测平台Infer上创造了历史纪录:该平台历史上最准确的四位预测者均来自该团队,且与第五名的差距远大于第五名与第十名之间的差距。在2021年的Infer竞赛中,团队的相对布里尔分数为-2.43,比第二名优秀团队(-1.039)高出一倍以上。该团队曾预测俄乌冲突期间伦敦遭遇核袭击的概率,引起了广泛关注。
团队背景与起源
- 成立契机:由Misha Yagudin和Nuño Sempere于2020年左右在Slack群组创建,最初是朋友间关于预测的闲聊。
- 成员构成:成员背景多样,包括经济学研究员、神经科学博士、MBA学生、独立研究员等,多数人有定量学科背景。
- 选拔机制:通过预测竞赛表现发掘人才,例如Molly Hickman因在政府合同工作中尝试预测表现出色而被邀请加入,Eli Lifland因在新冠疫情预测中表现优异被吸纳。
成功关键因素
1. 定量思维与数字表达
- 强调将不确定性转化为具体数字(如“8%概率”),而非模糊表述(如“不太可能”)。数字便于比较、评估和校准。
- 成员认为即使无法知道真实概率,量化预测也能暴露隐含假设,促进反思和改进。
2. 持续练习与频繁更新
- 预测被视为可通过练习提升的技能,团队每周六定期开会讨论并调整预测值。
- 例如在讨论“2030年前中国控制台湾至少一半领土”时,成员在会议中根据新信息更新概率。
3. 重视基准概率
- 从历史数据中计算事件发生的基准概率作为预测起点。例如:
- 成员推算中台冲突基准概率时,综合了以下参考:历史冲突频率(75年4次)、中国吸收领土的历史模式、台湾控制权变更次数(2次)、拉普拉斯规则(1/77)。
- 最终预测均低于24%,因为战争总体基准概率较低。
- 基准概率帮助在缺乏详细信息时提供合理起点,但需结合具体情境调整。
4. 构建并更新世界观模型
- 预测过程强化对世界运作模式的理解,例如识别“历史延续性”(多数重大事件不会发生)和“异常转折点”的平衡。
- 成员Greg Justice指出,近年从“普京未使用核武器、禽流感未人际传播”等事件中学习到:世界通常按既定轨迹运行,剧变是小概率事件。
5. 团队协作与集体校准
- 周六会议中,成员通过辩论不同视角(如地缘政治、经济、技术因素)避免个人偏见。
- 团队鼓励自我评估(如对预测准确性的评分),形成学习反馈循环。
对预测领域的启示
- 超越专家情报:研究表明,非专家预测者的聚合预测常比拥有机密情报的美国情报界成员更准确。
- 机构化应用缺失:尽管预测方法有效,但政府和智库尚未系统采纳。前IARPA官员Jason Matheny指出,关键决策机构缺乏对分析方法的实证评估,呼吁借鉴Samotsvety的模式。
- 平民参与价值:预测技能并非依赖专业知识,而更注重思维框架和实践,这使得公众可通过平台参与提升社会预测能力。
团队理念
- 名称“Samotsvety”源自苏联摇滚乐队,寓意“自发光/自着色的宝石”——象征通过汇聚信息为未来照亮光亮。
- 成员强调预测不仅关乎正确率,更关乎通过数字预测形成可评估、可改进的思维习惯,从而更深入理解世界。
14. On the new Dutch intelligence and security law (berthub.eu)
关于荷兰新情报与安全法
2024年6月13日更新:荷兰政府未能按承诺招聘并安置新的10名监管人员。然而,新法仍将按计划于7月1日生效,监管职责将交由尚未到位的人员执行。
新法大幅扩大了荷兰情报机构在阿姆斯特丹互联网交换点等荷兰互联网交换节点进行信号情报收集的权力。此权力适用于任何形式的通信,包括私有对等互联和专用网络互联。所有电缆均可被用于“探索”,且根据新法措辞,此类请求极可能获批。探索所得数据可被发送至外国情报机构,包括非欧盟国家。
法律明确,对完全拦截请求的审查现在应主要基于技术性标准(如“请求是否完整”),而非拦截措施本身的必要性。
新法由荷兰议会上议院通过,旨在削弱对情报与安全服务的监督,同时赋予其更大的执行自由度。作者此前因此辞职。
法律适用性
- 荷兰《情报与安全法》定义了一套广泛的权力。
- 法律具有普适性:对荷兰本国及其他国家公民的监控权力相同,没有为荷兰或欧盟公民提供特殊隐私保护(这与保护“美国公民”的美国法律形成对比)。
- 权力可全球适用:荷兰机构可自由入侵全球任何计算机或拦截任何地点的通信。
监管对象与利益
机构可调查任何可能危害民主法治存续、国家安全或国家其他重要利益的活动或目标,也可调查其他国家。
主要权力(多为“只读”性质)
权力包括:观察跟踪人员物品、运营与指挥特工(可在特定条件下违法)、进入并调查封闭场所、收集DNA数据、拦截物理邮件、入侵计算机、针对特定目标拦截通信、拦截并记录整条电缆、对记录数据进行技术分析、选择数据用于调查、调取数据、对所有数据(包括批量拦截数据)进行自动化分析和机器学习等。
权力对“非目标”的使用
独特之处在于,这些权力不仅针对调查直接目标,也可用于监视可能知晓重要信息的“非目标”或作为跳板的“第三方”。对非目标或第三方使用权力前,需解释这是调查推进的唯一途径。
监督与许可流程
- 所有权力均需内部审批,部分可由较低级别官员批准,但最具侵扰性的权力需相关部长批准。
- 事前监管机构裁定许可是否合法。部长的决定具有政治性,监管机构进行合法性核查,其意见具有约束力。
- 存在非约束性的事后监管机构。
信号情报与批量拦截
法律区分数据收集、存储与使用的侵扰程度,每一步都需要正当理由。
- 第48条(收集权):机构需说明特定电缆的预期目标,并尽可能使用针对性强的电缆。对荷兰境内起源与目的地的通信有限制。
- 第49条(技术分析):对数据进行技术分析以寻找目标。
- 第50条(数据选择):选择通信情报供分析团队使用。
- 第60条(算法分析):经特别许可,可对所有第48条拦截的数据进行算法分析。由于“算法分析”定义宽泛,其监管存在挑战。
新法拟议的主要变更
- 监管弱化:非约束性的事后监管机构获得部分约束力,但停止行动的程序复杂且可被中止。监管机构难以招聘所需技术人才。
- 黑客行动门槛降低:不再需向监管机构详细说明计划或技术风险(如零日漏洞泄露、损害第三方设施),也无需将行动与特定群体或组织挂钩,允许为未来获取手机位置数据等目的对基础设施进行战略性黑客攻击。
- 电缆拦截权扩大:机构可基于“探索”兴趣,无正当理由拦截并存储任何电缆数据一年,存储期可长达六个月。数据可在一年内被分析(仅用于寻找目标),并可明确与非欧盟的外国情报机构共享。
- 监管重点转移:第48条权力可基于“技术计划迹象”实施。监管机构被指示主要审查这些“迹象”,而比例性、辅助性和针对性要求被削弱。机构在一年期内可灵活行事。
- 对“非目标”的保护减少:行政性无需新许可的令状扩展现在适用于非目标。例如,监控黑客组织的令状可自动延伸至其受害者,导致非目标获得的保护比目标更少。
- 算法分析监管放宽:对批量拦截数据的算法分析不再需要事前监管批准,这是一项未经充分规范的巨大权力扩张。
欧洲人权法院判例背景
文章引用“大哥观察组织等人诉英国案”强调,根据《欧洲人权公约》第8条,批量拦截的每个阶段(包括最初拦截、存储、自动处理)均需提供保障措施。即使数据被加密存储,其存储行为本身即构成对隐私的干预,且处理个人数据时保障措施的需求更高。
15. Direct File officially opens in 12 pilot states (www.irs.gov)
美国国税局(IRS)宣布在12个试点州全面启动Direct File创新项目,鼓励符合条件的纳税人在4月15日报税截止日前使用该服务免费在线提交联邦税表。
经过数周测试,该项目已收到积极反馈,数千名纳税人成功使用该系统。全面启动后,这12个州约1900万符合条件的纳税人均可使用Direct File。
主要特点:
- 通过简化流程帮助纳税人轻松完成报税,全程显示计算过程以确保准确
- 可随时开始并暂停,在截止日前完成提交
- 提供实时客服聊天支持
- 选择直接存款通常可在21天内获得退税
符合条件的纳税人需满足以下要求:
- 来自12个试点州(亚利桑那、加利福尼亚、佛罗里达、马萨诸塞、内华达、新罕布什尔、纽约、南达科他、田纳西、德克萨斯、华盛顿州、怀俄明)
- 收入类型为W-2工资收入
- 可申领特定税收抵免(如劳动所得税抵免、儿童税收抵免)
- 使用标准扣除或特定扣除(如教育工作者费用、学生贷款利息)
- 2023年全年居住在同一州
项目背景:
- 根据《通胀削减法案》要求开发,旨在研究直接电子报税工具的可行性
- IRS与美国数字服务局及总务管理局技术办公室合作构建系统
- 设计初衷是为税务情况较简单的纳税人提供免费报税选项
- 不符合条件的纳税人将被引导至IRS Free File项目
纳税人可通过directfile.irs.gov网站查询资格,使用需通过ID.me进行身份验证。
16. Figure 01 robot demos its OpenAI integration (twitter.com)
根据标题《Figure 01机器人展示其OpenAI集成》,内容涉及具身智能(机器人)与大语言模型的整合。通常,这类集成意味着机器人能够利用OpenAI的模型进行自然语言理解、任务规划或实时决策,从而提升人机交互和自主操作能力。尽管所提供的文章内容未能成功加载,但结合技术背景可知,此类演示旨在展示机器人通过AI集成实现更复杂、更灵活的功能。如需更详细的总结,请确保提供完整的文章内容。
17. Giant sequoias are a rapidly growing feature of the UK landscape (phys.org)
18. Mass timber is great, but it will not solve the housing shortage (www.construction-physics.com)
文章摘要
本文针对美国科学家联合会(FAS)一篇政策备忘录的观点——即“大规模木材有助于解决住房短缺”——提出了质疑。尽管大规模木材作为一种建筑技术具有明显优势,但作者认为其无法显著增加美国的住房建造量。
政策背景与优势
备忘录提议联邦政府激励各州采用最新版国际建筑规范,以允许建造更高的木结构建筑,从而加速住房建设。大规模木材(如CLT、胶合木等)相较于混凝土和钢结构,具有施工速度快、碳排放低、防火性能较好(因其大尺寸木材在火灾中形成炭化层,可延缓燃烧)等优点,甚至能建造高达19层的建筑。
成本问题与比较
然而,大规模木材在美国普遍比传统建材更昂贵。尽管有开发商声称通过大规模木材节省了35%成本,但调查显示其中位成本溢价仍达2%,最高可达15%。更重要的是,与美国住房市场主流的轻型木结构相比,大规模木材存在固有成本劣势:
- 材料用量更大:达到相同跨度,大规模木材(如CLT)所需的木材体积是轻型木结构(如木桁架)的4-5倍。
- 加工更复杂昂贵:大规模木材生产需要数百万美元的专用设备(如胶合板生产线),而轻型木结构的加工设备则相对简单廉价。
市场现状与可行性
目前,美国超过90%的住宅为3层及以下建筑,仅2.5%为7层以上。绝大多数住宅采用轻型木结构建造。因此,即使大规模木材技术成熟,其因成本劣势也难以取代轻型木结构成为主流。此外,未采用最新建筑规范也并非完全禁止大规模木材建造,实践中常可通过其他条款或豁免实现;反之,采用新规范也不能自动消除审批障碍。
加拿大案例的启示
加拿大(尤其是BC省)虽大力支持大规模木材,但2007-2021年间近500个大规模木材项目中仅39个为住宅项目,占同期新建住宅比例极小。这表明,即使拥有成熟的技术生态和政策支持,大规模木材在住宅领域的渗透率依然很低。
结论
作者肯定大规模木材在低碳建造、特定建筑类型中的价值,并支持更新建筑规范以降低审批障碍。但基于成本劣势、市场现状及国际经验,大规模木材无法成为解决美国住房短缺的突破口,其对新增住房供应量的影响将十分有限。
19. Scammed by the top result for 'Bitcoin wallet' in Apple App Store
苹果应用商店搜索结果存在诈骗应用问题
核心事件
- 一名用户从Android转用iPhone后,在苹果应用商店搜索“Bitcoin wallet”时,首个结果(有机搜索结果)是一个诈骗应用。
- 该用户创建了新钱包并将比特币转入,但资金立即被转走。损失金额虽未公开,但据信不小。
- 该诈骗应用在搜索结果中排名高于多个知名合法钱包应用(如Blockchain.com、Coinbase)。
问题普遍性
- 多名用户报告了类似经历:在搜索银行、火车票公司、经纪商、政府税务应用等关键词时,首个搜索结果往往是不相关或可疑的应用(如加密货币交易所、CFD交易平台、竞争对手应用或诈骗应用)。
- 这一问题并非个例,有用户指出此现象已存在数年。
讨论焦点与观点
1. 平台安全性对比
- 苹果 vs. 谷歌:
- 有观点认为谷歌(Play Store)在防范欺诈方面比苹果做得更好,诈骗应用在Play Store的搜索结果中较少见。
- 反对意见指出谷歌(如YouTube)也存在大量诈骗广告,且谷歌仅验证广告主身份,而非其信誉。
- 部分开发者认为苹果的安全宣传是“烟雾弹”,而谷歌的安全措施(尽管有广告和追踪)更透明、更稳健。
2. 苹果的封闭生态与安全承诺
- 苹果以安全为由严格控制其应用商店,并以此作为反对欧盟要求开放侧载的核心论点。然而,诈骗应用的出现削弱了其安全性论点的可信度。
- 用户认为,既然苹果声称封闭生态是为了保护用户并收取30%的佣金,就应对搜索结果质量负责,确保安全、无欺诈。
3. 诈骗应用的成因与审核漏洞
- 黑帽SEO与刷评:诈骗开发者可能使用应用商店优化(ASO)手段(如关键词竞价、刷虚假好评、利用不同地区广告投放提升整体排名)来操纵排名。
- 审核失灵:尽管苹果有应用审核流程,但诈骗应用仍能通过。有用户质疑审核人员可能存在腐败,或审核流程存在根本缺陷。
- 广告与有机结果混淆:搜索结果顶部的广告(标注“广告”)有时显示为不相关或竞争对手的应用,容易与有机结果混淆。
4. 用户行为与责任
- 盲目信任:部分用户习惯性信任应用商店的顶级搜索结果,尤其是在苹果平台,认为其经过严格审核。
- 个人审慎义务:反对意见认为,无论平台如何宣传,用户仍需自行进行尽职调查,不能完全依赖排名。
应对建议与现象观察
- 替代方法:为避开问题,一些用户选择通过官方网站获取应用商店链接,而非直接在应用商店搜索。
- 地区差异:搜索结果可能因用户所在地区不同而存在差异,这可能与地区性广告投放策略有关。
- 长期影响:此类事件损害苹果的品牌信任度,并可能影响其在反垄断诉讼中的立场。
总结
事件揭示了苹果应用商店在搜索结果中混入诈骗应用的系统性漏洞,这与苹果一贯强调的封闭生态安全性相矛盾。尽管成因涉及黑帽营销和审核不力,但核心问题在于平台未能兑现其对用户的安全承诺,导致用户资金损失并引发对平台责任的广泛质疑。
20. How Mandelbrot set images are affected by floating point precision (github.com)
本文探讨浮点精度对曼德勃罗集图像的影响。曼德勃罗集对初始条件具有敏感依赖性,迭代计算中的浮点误差可能累积,影响图像的视觉复杂性。为此,作者开发了一个C++程序,使用Boost::Multiprecision和RayLib,允许用户同时生成并比较三种不同浮点精度(如双精度、cpp_bin_float_quad和cpp_bin_float_oct)下的曼德勃罗集图像。
程序通过按键切换显示不同精度的图像,并通过减法运算高亮像素差异(绿色表示正值,红色表示负值)。在示例中,放大至3300万倍时,双精度与quad精度图像相比约有8.77%的像素不同。程序还支持四屏视图,可对比不同浮点实现下单个点的迭代轨迹差异。
用户可通过代码自定义选项,包括选择浮点类型、调整线程数量、设置每批处理的像素数,以及决定迭代起点C值的计算方式(是否为每种类型单独计算或统一转换)。程序提供基本控制功能,如缩放、调整最大迭代次数、暂停计算、查看像素坐标与轨迹等。
该工具旨在研究浮点精度对分形图像的影响,帮助区分算法数学特性与计算噪声。
21. Byte-Sized Swift: Building Tiny Games for the Playdate (www.swift.org)
使用 Swift 为 Playdate 构建微型游戏
本文介绍了 swift-playdate-examples 项目,这是一个使用 Swift 语言为 Panic 公司推出的掌上游戏机 Playdate 开发游戏的技术演示。Playdate 搭载 Cortex M7 处理器,具有 400x240 的 1-bit 显示屏,其官方 SDK 支持使用 C 或 Lua 开发游戏。
核心观点与技术挑战
Swift 以其内存安全性和高级语言特性著称。作者希望将这些优势应用于资源受限的嵌入式系统(如 Playdate)。然而,标准的 Swift 应用程序和运行时超出了 Playdate 严格的资源限制。
为解决此问题,作者利用了 Swift 正在开发的 嵌入式语言模式。该模式通过通用特化、内联和死代码消除等技术,在保留 Swift 核心特性的同时生成极小的二进制文件,非常适合 Playdate 的约束。
实践成果与示例
作者成功使用 Swift 为 Playdate 开发了两款游戏:
生命游戏 (Conway’s Game of Life):
- 这是 Playdate SDK C 示例的 Swift 移植版。
- 游戏逻辑直接操作 Playdate OS 提供的帧缓冲区,无需动态内存分配。
- 最终打包的游戏文件仅为 788 字节,比对应的 C 版本(904 字节)更小。
Swift Break:
- 一款原创的弹球游戏(Paddle-and-Ball style game)。
- 充分利用了 Swift 的高级特性,如带关联值的枚举、泛型类型和函数、自动内存管理,同时保持了 C 级别的性能。
- 游戏功能完整,包含启动画面、暂停菜单、基于挡板位置的弹射物理、无限关卡和游戏结束画面,并支持十字键和摇杆控制挡板。
技术实现过程
将 Swift 引入 Playdate 平台面临一系列挑战,作者的主要解决路径如下:
- 编译与链接:利用 Swift 工具链的 C 语言互操作性,通过指定头文件搜索路径和创建模块映射文件,将 Playdate 的 C API 导入 Swift。最终通过
swiftc编译器生成目标文件,并使用pdc工具打包为 Playdate 可执行文件。 - 解决平台特定问题:
- 模拟器运行:需要链接 SDK 中提供的
setup.c文件以包含必要的引导符号_eventHandlerShim。 - 真机运行:遭遇了多重难题,包括:
- C 标准库缺失:需指定 Playdate SDK 附带的 GCC 工具链的 libc 头文件路径。
- 调用约定不匹配:Playdate OS 与 Swift 编译的代码在函数调用约定上存在差异,需添加特定编译器标志(如
-experimental-platform-c-calling-convention=arm_aapcs_vfp)来修复。 - 枚举内存布局差异:GCC 默认使用短枚举(
-fshort-enums),而 Swift/Clang 使用标准枚举,导致数据结构内存布局不一致。需在编译时显式添加-fshort-enums标志。 - 浮点与 CPU 配置:需精确匹配 Playdate 硬件的 CPU 型号(Cortex-M7)、浮点 ABI 和指令集,通过一系列
-mcpu、-mfloat-abi等标志进行配置。
- 模拟器运行:需要链接 SDK 中提供的
API 易用性改进
为了提升开发体验,作者在原始的 Playdate C API 之上创建了一个轻量级的 Swift 覆盖层:
- 命名优化:使用 Swift API 注解文件为 C 枚举值提供了更符合 Swift 习惯的命名(例如将
kEventPause简化为.pause)。 - 封装与抽象:将函数指针访问封装为 Swift 类型上的静态方法和实例方法,将函数对(get/set)转换为 Swift 属性。例如,创建精灵对象的代码变得非常直观。
- 内存管理自动化:对需要手动内存管理的 API(如
moveWithCollisions函数)进行了封装,使其能够通过闭包自动管理内存,避免了手动释放缓冲区的繁琐操作。
总结与展望
作者详细记录了将 Swift 引入 Playdate 这一受限嵌入式平台的完整旅程,解决了编译、链接、平台兼容性和 API 设计等多方面的挑战。项目成果表明,利用 Swift 的嵌入式语言模式,可以成功开发出体积小巧、性能出色的 Playdate 游戏,并享受 Swift 语言带来的开发效率和安全性优势。
所有示例代码和入门文档均已包含在 swift-playdate-examples 仓库中,开发者可以通过运行 make 命令轻松构建适用于模拟器和硬件的游戏。随着 Swift 对所有权和不可复制类型等特性的支持不断改进,未来在不增加语言开销的情况下,有望实现对 C API 更符合人体工学的表示。
22. Vulkan Foliage rendering using GPU Instancing (www.thegeeko.me)
使用GPU实例化的Vulkan草叶渲染技术摘要
技术目标
文章介绍了基于Vulkan实现高效草叶渲染的方法,目标是利用GPU实例化(GPU Instancing)和间接绘制(Indirect Draw)技术来渲染数百万草叶。
使用的关键特性
- VK_EXT_buffer_device_address:允许在GLSL中使用指针,便于通过Push Constants或缓冲区传递数据。
- VK_EXT_descriptor_indexing:简化缓冲区和纹理处理。
- multiDrawIndirect:支持通过间接缓冲区进行多次绘制调用,用于绘制不同LOD级别的草叶。
工作原理
整个流程分为计算通道(Compute Pass)和图形通道(Rendering Pass):
- 计算通道:生成草叶数据,执行视锥体剔除和LOD选择,填充间接绘制命令。
- 渲染通道:根据间接命令绘制草叶。
计算通道详细流程
草叶数据结构
每个草叶由以下属性定义:
- 位置和弯曲度(
pos_bend):相对于中心点的位移和弯曲程度。 - 尺寸、动画和俯仰角(
size_anim_pitch):宽度、高度乘数、俯仰角和动画项。
数据生成步骤
- 位置生成:在矩形区域内使用哈希函数生成随机位移。
- 高度与宽度:基于UV坐标采样Simplex噪声纹理,生成高度和宽度乘数,模拟自然生长。
- 弯曲项:定义草叶的可弯曲程度,用于后续顶点动画。
- 动画项:预先计算用于风动画的sin项,避免在顶点着色器中传递UV数据,节省显存。
- 俯仰角:定义绕上轴({0,1,0})的旋转角度,可在顶点着色器中构建旋转矩阵。
视锥体剔除与LOD选择
- 为每个草叶生成包围球,半径取高度和宽度中的较大值。
- 转换到相机空间后,根据距离应用剔除距离(800单位)和LOD切换距离(200单位)。
- 仅对X和Y轴进行视锥体剔除,利用对称性同时处理两侧。
绘制命令填充
- 使用原子操作增加对应LOD命令缓冲区的实例计数。
- 根据LOD级别(高/低)将可见草叶的索引存储到连续缓冲区中,供顶点着色器通过
gl_InstanceIndex访问。
渲染通道
顶点着色器根据gl_DrawID和gl_InstanceIndex读取可见草叶数据,然后:
- 应用旋转:基于俯仰角构建旋转矩阵,应用宽度和高度乘数。
- 动画处理:使用预先计算的sin项和时间变量模拟风动画,草叶顶端摆动幅度更大。
- 着色:采用从底部到顶部的简单颜色渐变。
优化措施
- CPU端预计算:在CPU上预先计算投影和视图矩阵的乘积。
- 网格优化:使用Mesh Optimizer将草叶从三角形列表转换为三角形条带,显著减少顶点着色器调用次数。
性能数据
在RX5600XT(Linux开源驱动)1080p分辨率下:
- 可见草叶约677万时,计算通道耗时4.7ms,绘制耗时8ms。
- 当区域扩大至1000x1000时,草叶数量可达约1906万,计算通道耗时2.5ms,绘制耗时6ms。
23. Fig is sunsetting (fig.io)
24. Chyrp Lite – An Ultra-Lightweight Tumblelogging Engine Using PHP and SQLite (chyrplite.net)
Chyrp Lite 超轻量级博客引擎介绍
核心概述
Chyrp Lite 是一款使用 PHP 和 SQLite 编写的超轻量级博客引擎,专注于提供简单、可靠且可扩展的自我托管博客解决方案。用户可通过自己的网络服务器轻松搭建博客,支持传统博客、轻博客(tumbleblog)或基于博客功能的通用网页发布平台。
主要功能与特性
1. 用户友好与自定义
- 提供 6个精美主题 和友好的管理控制台。
- 采用 响应式 HTML5 设计,确保在各种设备上均可良好导航。
- 通过 语义化标记和完整的 ARIA 标签,支持辅助技术,提升可访问性。
2. 灵活的内容系统
- Feathers(羽毛)系统:支持多种博客内容类型(文本、图片、视频等),允许用户从纯文本到多媒体内容自由创作。
- Pages(页面)系统:可发布独立于博客内容的文章,支持构建多层级页面结构(如简介、网站信息等)。
3. 开发理念与维护
- 自 2014年 起持续开发,注重简单性、可靠性和扩展性。
- 适用于典型的 共享主机环境,尊重网络标准。
- 定期更新以兼容最新技术和标准,积极维护并接受用户反馈(通过 GitHub 讨论和问题提交)。
关键特性列表
- 易于安装和维护,设计可扩展。
- 使用 经过 W3C 验证的响应式 HTML5。
- 支持 纯文本、Markdown 或原始标记。
- 通过 强大扩展(extensions) 个性化博客。
- 使用 Twig 模板引擎 简化主题开发。
- 提供 综合权限模型 管理用户和访客。
- 支持 发送和接收 webmentions(当 URL 被提及时)。
- 内置模块:标签(tagging)、评论(commenting)、缓存(caching)等。
总结
Chyrp Lite 是一款轻量级、专注且用户友好的开源博客引擎,适合希望完全控制个人博客或网站发布平台的用户。它平衡了简洁性与功能性,并通过社区贡献持续进化,强调实用而非复杂,适合各类用户从简单博客到定制化网站的不同需求。
25. Performance-Aware Programming Series (www.computerenhance.com)
课程概述
本系列课程面向已掌握编程但不了解硬件运行机制的程序员,旨在讲解现代CPU工作原理、关键代码性能预估方法及每位程序员都应掌握的基础优化技术。课程分为多个部分,包含视频教学、课后作业和定期Q&A视频。
课程结构
序幕:五大性能乘数(3.5小时,无作业)
通过简单示例演示微小代码改动如何导致软件性能的显著差异,涵盖:浪费、每时钟指令数、单指令多数据、缓存、多线程等概念。
间奏(1小时,无作业)
以Haversine距离问题为例,展示“整洁代码”可能带来的性能问题。
第1部分:阅读汇编(7小时+作业)
确保学员从汇编语言层面扎实理解CPU工作原理,包括:8086指令解码、模拟非内存操作、条件跳转、内存模拟、栈、周期估算及从8086到x64的演进。
第2部分:基础性能分析(4小时+作业)
学习时间测量与程序自动性能分析,包括:生成测试数据、RDTSC与QueryPerformanceCounter的使用、基于插桩的性能分析、递归块分析及性能开销对比。
第3部分:数据移动(13小时+作业+3小时可选内容)
结合前两部分知识,探讨数据如何进入CPU并估算由数据移动带来的软件性能上限。主题包括:数据吞吐量测量、页面错误、内存映射文件、循环汇编分析、CPU前端、分支预测、SIMD指令、缓存测试、预取技术等。(标*为可跳过的可选内容)
第4部分:多项式求值(可选,6.5小时+作业)
为第5部分做准备,通过自行实现数学函数,讲解CPU原生操作、复杂操作如何分解及数学库函数的典型结构。涵盖SSE内部函数、函数逼近、多项式求值、Horner规则等。
第5部分:计算(进行中)
将第3部分从内存操作扩展到更广泛的计算领域,学习解读完整CPU图、估算微操作在CPU中的流动、利用向量操作提升吞吐量及推理计算过程的峰值性能。
附加内容
- 2024万圣节挑战:一系列实时性能监控(PMC)与事件追踪(ETW)的实践日志。
- 1994年微软实习面试四道编程题:包括矩形复制、字符串复制、洪水填充检测、画圆轮廓等经典问题。
- 第一个实体组件系统(ECS)采访。
- 大型OOP错误论文追踪(进行中)。
26. Identifying Software (guix.gnu.org)
软件识别的方法与挑战
本文探讨了在网络安全背景下“识别软件”的内涵与挑战,旨在为已知漏洞关联和软件供应链安全提供可行方案。文章基于美国网络安全和基础设施安全局(CISA)2023年发布的《软件识别生态系统选项分析》白皮书,并结合GNU Guix开发团队的实践经验,提出了基于功能软件部署的识别框架。
一、现有方法的局限性
当前主流标准如通用平台枚举(CPE),主要通过人类可读的包名与版本号标识软件。然而,这种外在标识机制存在根本缺陷:它无法捕捉软件构建过程的复杂性。例如,“gcc 11.3.0”这一标识无法说明该二进制文件是否包含特定补丁、使用何种编译标志或依赖了哪些具体版本的库,这使得漏洞关联的准确性大打折扣。
二、GNU Guix 的识别哲学
Guix 作为包管理器、软件部署工具和Linux发行版,其核心在于可重现性、溯源跟踪和可审计性。作者认为,源代码与二进制制品具有本质区别,需要不同的标识策略。
源代码标识
Guix 中近3万个软件包的定义均通过内在标识符(SHA256哈希值) 来内容寻址。URL仅作为下载提示,当原始链接失效时,可回退到软件遗产(Software Heritage) 档案馆。这种机制实现了分布式的、无歧义的源代码标识。可重现构建
受Nix包管理器启发,Guix通过密封构建(仅使用显式声明的依赖)确保构建过程的可重现性。构建指令(推导图)本身也是内容寻址的,变更任何依赖或补丁都会导致不同的推导标识。用户可通过guix challenge命令独立验证二进制制品是否与官方发布一致。完整源码引导
为防御“可信信任攻击”(如编译器后门),Guix实现了完整源码引导:整个发行版的所有软件均从一个微小的二进制种子出发,完全通过源码构建。这提供了前所未有的透明度和可审计性。溯源跟踪
二进制制品可通过记录其构建所用的Guix版本,反向映射回完整的源代码和依赖图。例如,guix pack --save-provenance生成的Docker镜像会包含清单文件,指明构建所用的Guix提交。结合guix time-machine命令,任何人在任何时候都能精确重现特定版本的二进制制品。
三、结论与意义
作者主张:对于网络安全应用,二进制制品应被视为可重现计算过程的结果。识别二进制制品的关键在于识别其构建过程的源代码。这种方法超越了传统软件物料清单(SBOM)的简单列表,也比过于细粒度的OmniBOR源文件依赖图更具实用性。
Guix与Software Heritage的实践表明,结合内在标识符、可重现构建和溯源跟踪,能够构建一个透明、可验证的软件供应链,为漏洞管理和安全审计提供坚实基础。
27. Show HN: Query Your Sheets with SheetSQL (sheetsql.io)
文章摘要
本文介绍了在Hacker News社区展示的项目 SheetSQL。该项目的主要功能是允许用户直接使用SQL语句来查询和操作Google Sheets中的表格数据,旨在提升Google Sheets的数据处理能力与效率。其核心特点是快速启用,用户可以在几秒钟内完成设置并开始使用SQL查询功能。
28. A formula for responsive font-size (jameshfisher.com)
响应式字体大小的公式
作者介绍了一个常用的CSS规则,用于实现响应式字体大小:
:root {
font-size: calc(1rem + 0.25vw);
}
此规则用作 @media 查询规则的替代方案。传统模式是:一个较小的基础字号、一个较大的字号,以及一个断点。
作者列举了几个常见网站(如Medium、Substack、纽约时报)的实例,它们均采用了 1.125rem 到 1.25rem 的范围,并配以728px到768px的断点。但作者认为这种方法“在数学上不够优雅”,并尝试用一个线性函数来近似这种变化。
由此推导出的理想函数为 calc(1.0625rem + 0.2604vw),为求简洁,作者将其四舍五入为 calc(1rem + 0.25vw)。
关于 1rem 在根元素 font-size 定义中使用是否存在循环引用的问题,文章澄清:当在根元素的 font-size 属性中指定时,1rem 等于 font-size 属性的初始值,因此不存在循环依赖。