2024-11-25

39 篇热帖

1. How I configure my Git identities (www.benji.dog)

本文介绍了作者配置Git身份的方法,旨在根据不同项目(如个人或工作)使用不同的Git用户信息和SSH密钥。

1. 使用Git的includeIf按目录路径配置

作者最初通过Git的includeIf功能,根据本地仓库路径包含特定配置文件。例如:

  • 对于~/code/**下的仓库,包含~/.config/git/personal配置文件(存储个人身份信息如姓名、邮箱和签名密钥)。
  • 对于~/work/**下的仓库,包含~/.config/git/work配置文件。 但作者将所有代码统一放在~/workspace下,因此希望根据仓库的实际远程URL而非本地路径来配置。

2. 按远程URL条件配置

作者发现hasconfig:remote.*.url:!,可根据仓库的远程URL条件包含配置文件。示例配置:

  • 对于GitHub仓库:包含~/.config/git/config-gh
  • 对于特定GitHub组织(如orgname)仓库:包含~/.config/git/config-gh-org
  • 对于GitLab仓库:包含~/.config/git/config-gl
  • 对于SourceHut仓库:包含~/.config/git/config-srht 注意:配置顺序很重要,Git会包含最后一个匹配的配置。更具体的配置(如组织仓库)应放在一般配置之后,否则会被覆盖。

3. 配置SSH密钥以进行远程操作

Git身份配置仅处理用户信息,推送和拉取还需要配置SSH密钥。作者在~/.ssh/config中为不同主机设置身份文件:

  • gitlab.com使用~/.ssh/gitlab.id_ed25519
  • github.com使用~/.ssh/github.id_ed25519 建议在IdentityFile后添加IdentitiesOnly yes以确保使用指定密钥。

4. 为同一主机使用不同SSH密钥

问题:对于同一主机(如github.com),无法直接为不同组织使用不同密钥。解决方案是定义新的Host别名,例如:

  • 添加Host gh-work,指向github.com并使用工作密钥~/.ssh/work.id_ed25519

5. 使用Git的URL替换映射

在Git配置中,使用[url]insteadOf将原始URL映射到SSH Host别名。例如:

[url "gh-work:orgname"]
  insteadOf = git@github.com:orgname

这样,当克隆git@github.com:orgname/project时,Git会自动替换为gh-work:orgname,从而使用正确的工作SSH配置。

6. 总结与参考

作者认为这种方法有效,但可能存在问题,欢迎反馈。文中引用了相关参考资料,供进一步学习。

2. This website is hosted on Bluesky (danielmangum.com)

本文探讨了如何利用 Bluesky 平台及其底层的 AT 协议(AT Protocol)来托管一个简单的静态网站,并分析了其背后的技术原理、实现步骤及潜在影响。

核心发现与实现方法 作者通过实践验证,可以将一个简单的 HTML 文件作为“blob”(二进制大对象)上传至 Bluesky 的个人数据服务器(PDS),然后创建一条自定义类型的“记录”(record)来引用该 blob。由于该自定义记录类型(com.danielmangum.hack.website)不在 Bluesky 的已知词法(lexicon)中,服务器无法验证其内容,但依然会持久化该记录。一旦记录创建成功,对应的 blob 便从临时状态变为可公开访问的状态。通过获取该 blob 的内容标识符(CID),最终可以通过 PDS 的 getBlob 接口访问到托管的 HTML 内容,从而实现了一个托管在 Bluesky 上的网站。

AT 协议与数据模型 AT 协议将用户数据主要分为两类:

  1. 记录:结构化的核心实体(如帖子、用户资料),可包含元数据并引用其他记录或内容。
  2. Blob:大型的、非结构化数据(如图片、文件),由记录引用。 关键设计在于,blob 的上传与记录的创建是解耦的。Blob 上传后处于临时状态且不可访问,只有当一条有效的记录引用它时,blob 才会变为公开可用。此机制旨在允许灵活的、由不同词法定义的记录类型来使用 blob,而非在上传时进行严格的内容限制。

为何绕过内容限制 Bluesky 应用自身的词法(app.bsky.*)对特定记录类型(如帖子中嵌入的图片)有严格的 MIME 类型验证(例如仅允许 image/*)。然而,由于 AT 协议支持开放式的词法扩展,用户或开发者可以定义全新的记录类型。当 PDS 遇到未知的记录类型时,它会采取宽容的验证策略(状态为 unknown),但仍会存储该记录,从而允许引用任意类型的 blob(如 text/html)。此外,Bluesky 帖子结构中的“嵌入”(embed)字段是一个开放联合(open union),也允许包含未知类型的引用,进一步支持了扩展性。

安全考量与现状 直接通过 PDS 提供用户上传的文件存在安全风险,例如跨站脚本攻击(XSS)。AT 协议规范强调,getBlob 端点必须实施严格的内容安全策略(CSP),且生产环境应通过 CDN 或代理服务内容,而非直接提供原始 blob 访问。Bluesky 的 PDS 实现已添加了相关 CSP 头(如 sandbox)来缓解风险,并设置了 blob 大小限制(默认 5MB)。在实际应用中,Bluesky 平台(如图片)通常通过独立的 CDN 来提供 blob 内容,而非直接使用 PDS 端点。

扩展性与潜在影响 作者指出,利用自定义记录类型和开放联合机制,可以实现“微型扩展”,例如在帖子中嵌入可执行的代码片段。这种方式展示了 AT 协议的灵活性和强大扩展能力,但也带来了新的管理挑战。对于像 Bluesky 这样代表用户运行 PDS 实例的服务而言,此类用法实际上提供了免费(尽管不稳定)的任意文件托管服务,可能会带来存储和带宽成本方面的滥用问题。

总结 本文通过一个具体案例,展示了 Bluesky 基于 AT 协议的开放架构如何意外地允许了超出设计初衷的用例(网站托管)。它揭示了协议中记录与 blob 解耦设计带来的灵活性,以及在验证未知数据类型时的宽容策略。尽管存在安全与资源管理的挑战,但这种扩展性被视为 AT 协议区别于传统社交网络的关键优势,并为未来创新应用(如嵌入式可执行内容)提供了可能性。

3. Starlink Direct to Cell (www.starlink.com)

Starlink Direct to Cell

该页面是Starlink(星链)官方网站的一部分,标题为“Starlink Direct to Cell”。页面内容主要展示了网站的基础技术结构和元数据,而非具体的产品服务介绍。

主要内容概要:

  • 网站身份:属于Starlink,是SpaceX的一个部门,提供全球高速互联网服务,口号为“High-speed internet. Available almost anywhere on Earth.”
  • 页面技术构成
    • 包含大量的HTML元标签(meta tags),用于定义网页描述、关键词、社交平台分享信息(如Open Graph、Twitter Card)。
    • 加载了多个CSS样式表和JavaScript文件,用于实现前端功能。
    • 预加载了自定义字体文件。
  • 关键提示:页面中包含了<noscript>区块,明确指出如果用户的浏览器未启用JavaScript,则网站内容和功能可能受限或无法使用。
  • 版权信息:页面底部注明Starlink © 2024,并提供隐私政策链接。

核心说明:

该HTML片段是网站开发的底层代码,并未直接阐述“Direct to Cell”服务的具体细节(如工作原理、覆盖范围、目标用户或技术规格)。它主要确保网站能够正确渲染并为用户提供基本的导航框架。要获取关于“Starlink Direct to Cell”的具体业务信息,需要查看网站加载后由JavaScript动态呈现的正文内容。

6. WireGuard: Beyond the most basic configuration (sloonz.github.io)

WireGuard 高级配置指南

一、基础配置回顾

文章首先简要回顾了WireGuard的基本设置步骤,作为讨论进阶用法的基础:

  1. 为服务器和每个客户端生成密钥对(私钥/公钥)。
  2. 规划VPN网络(例如 10.100.0.0/16)、服务器IP(如 10.100.0.1)和客户端IP(如 10.100.0.2, 10.100.0.3)。
  3. 创建服务器配置文件(wg0.conf),定义接口、地址、私钥、监听端口,并设置PostUpPostDown脚本以管理iptables规则实现NAT和转发。
  4. 创建客户端配置文件,定义私钥、服务器公钥、端点地址(服务器地址和端口),以及AllowedIPs(通常设置为 0.0.0.0/0, ::/0 以路由所有流量)。
  5. 在服务器和客户端上分别使用 wg up /etc/wireguard/wg0.conf 启动接口。

二、解决NAT问题(使用UPnP)

由于WireGuard VPN会充当NAT,可能影响某些应用(如BitTorrent)。文章介绍了使用UPnP来解决两个问题:

  1. 问题1:客户端设备不知道其公网地址(实际是VPN服务器的地址)。
  2. 问题2:即使知道地址,外部对特定端口的连接也需要从服务器转发到客户端。 解决方案:在VPN服务器上配置UPnP服务器(miniupnpd)。
    • 步骤1:安装 miniupnpd
    • 步骤2:配置 /etc/miniupnpd/miniupnpd.conf 文件,关键设置包括:
      • ext_ifname:服务器面向互联网的接口名称。
      • listening_ip:WireGuard网络接口名称(如 wg0)。
      • uuid:使用 uuidgen 生成。
      • allow:指定允许的端口范围和VPN子网(例如 allow 1024-65535 10.100.0.0/16 1024-65535)。
    • 步骤3:在WireGuard服务器配置文件的 PostUpPostDown 段中添加启动和停止 miniupnpd 服务的命令。
    • 验证:使用UPnP客户端工具(如 external-ipupnpc)测试公网IP查询和端口转发是否生效。

三、进阶IPv6配置(避免NAT)

文章指出,利用IPv6可以直接避免NAT,获得更优体验。核心思想是使用托管商分配的、可公网路由的IPv6地址段(如一个/48/56)来为VPN网络分配地址。

  1. 服务器配置
    • 在服务器的WireGuard接口地址中添加一个公网IPv6地址(例如从分配的/56中划出一个/80子网 2001:aaaa:bbbb:1000:cafe::/80,服务器使用 ::1)。
    • 在每个客户端的 [Peer] 配置中,AllowedIPs 使用分配给该客户端的、属于该/80子网的公网IPv6地址(如 2001:aaaa:bbbb:1000:cafe::2/128)。
  2. 客户端配置
    • 客户端的 Address 字段设置为其对应的公网IPv6地址(如 2001:aaaa:bbbb:1000:cafe::2/128)。
  3. 验证与优势
    • 确保服务器上通过WireGuard接口的路由正确(ip -6 route get)。
    • 客户端可以直接使用其公网IPv6地址监听端口,并能被外部直接访问,无需任何UPnP配置
    • 客户端设备的默认路由IPv6地址就是其公网VPN地址,无需额外检测。
8. A Day in the Life: The Global BGP Table (articles.foletta.org)

这篇文章通过分析一天内收集的BGP更新数据,揭示了全球BGP路由表的短期动态与异常现象。主要发现如下:

数据收集:作者使用自研的BGP对等工具bgpsee,与一个拥有完整路由表的对等点建立连接,收集了2024年1月6日至7月6日期间收到的464,673条BGP UPDATE消息。

初始路由同步:建立对等会话时,会一次性收到大量路由更新。首次同步包含大量路径(IPv4约10万条,IPv6约13万条),并关联了近95万条具体路由。

日内更新模式

  • 频率:后续更新平均每30秒分别有约50条IPv4路径和47条IPv6路径发生变化。
  • 规模:IPv4地址空间平均每30秒变化约6.5万个(一个/16地址块)。
  • 周期性:IPv4更新呈现约40分钟的周期性,原因未知。

异常路径属性

  • 过度AS路径填充:IPv4路径最长达到105个AS,IPv6路径更离谱,长达599个AS。这主要由乌克兰ISP AS8772 向印度尼西亚的AS203868宣告路由时过度添加所致。
  • 使用保留属性:多个ISP的更新中使用了为开发保留的路径属性(255),且字节结构相似,引发对厂商及其用途的疑问。

路径抖动现象:部分路由在一天内频繁改变路径或被撤销,极其不稳定。最严重的路由 140.99.244.0/23 在一天中92.8%的时间都在更新。其路径在NTT、Lumen等一级ISP与其他网络之间不断切换,展示了路由的剧烈震荡和现代网络的复杂对等关系。

遗留问题:作者提出了两个未解答的问题:导致IPv4 BGP表出现40分钟更新周期的原因是什么?以及是哪个厂商在使用保留的路径属性255,其用途何在?

9. Bluesky is on the verge of overtaking Threads in all the ways that matter (mashable.com)

Bluesky的迅猛增长与挑战

用户数据显著提升

  • Bluesky的浏览器版本总使用量已数周前超越Threads。
  • 移动应用日活跃用户达350万,仅落后Threads约1.5倍。
  • 月初时,Threads活跃用户数曾是Bluesky的五倍,差距大幅缩小。

增长原因与背景

  • 选举后爆发:自11月5日美国选举日以来,Bluesky用户激增300%。
  • 用户迁移:大量记者、学者及企业从埃隆·马斯克旗下的X平台转移至Bluesky。
  • 政治内容吸引力:Bluesky成为所谓“有政治参与意愿的专业人群”的首选平台,类似于早期Twitter的活跃社群。

与Threads的差异

  • Meta首席执行官扎克伯格在Threads上淡化政治内容,以回避争议,这令寻求公共讨论的用户失望。
  • Bluesky则被视作更具活力的政治与文化讨论场所,吸引了那些希望远离X混乱环境的用户。

现存挑战

  • Bluesky仍处于发展初期,快速成长带来技术问题,包括服务中断、故障及诈骗活动。
  • 随着用户持续涌入,预计会出现更多成长中的阵痛。
10. The Two Factions of C++ (herecomesthemoon.net)

C++的两大阵营:现状、分歧与未来

C++社区正经历激烈争论,涉及语言未来的方向。标准委员会(EWG)通过P3466 R0提案,重申了C++的演进设计原则:不破坏ABI、保持与C及旧版C++的链接兼容性,且不引入“病毒性注解”(如生命周期注解)。这实际上是坚持了现有轨迹,尽管其与零开销原则存在矛盾。

与此同时,外部环境发生巨变:

  • 美国政府机构(如CISA、NSA、白宫)多次警告避免使用内存不安全的语言。
  • 科技巨头(如微软、谷歌、AWS)正大规模采用Rust,甚至谷歌开发了C++/Rust双向互操作工具。
  • 微软核心库转向Rust,且MSVC对C++23的实现进度缓慢,Herb Sutter也已离开微软。
  • 谷歌自“布拉格ABI投票”后大幅减少对C++标准的参与,并着手研发自己的C++后继语言,列举了改进C++的种种困难。
  • C++的模块尚未完全实现,安全配置方案也处于模糊状态,缺乏实际实现。

这些现象表明,C++正面临信任危机,许多人对其委员会推动语言演进的能力失去信心。

两大阵营的根源:工具链与构建能力

文章指出,C++社区实际上分裂为两个文化阵营,分歧核心并非语言特性本身,而是工具链成熟度从版本化源代码构建的能力

  1. 现代C++阵营:以谷歌等科技公司为代表,拥有先进工具链(自动化重构、静态分析、统一构建系统),能从版本化源代码高效构建整个依赖栈,并坚持代码现代化实践(如使用C++17及以上特性)。
  2. 遗留C++阵营:依赖古老预编译库、缺乏自动化工具、难以从源代码构建的传统企业。其代码库常被视为成本中心,基础设施陈旧,迁移成本极高。

这种分化使得标准委员会的政策必须兼顾双方需求。例如,安全配置模块的设计优先考虑“遗留C++”,旨在不修改现有代码的前提下带来改进,而非彻底解决现代C++用户对安全和性能的进阶需求。

标准委员会的困境与未来风险

委员会试图通过保持向后兼容性来弥合分歧,但这导致:

  • 任何要求大规模代码迁移的提案(如Sean Baxter提出的激进“安全C++”方案)都会被否决。
  • 政策制定常以“遗留C++”为首要受众,导致不同阵营的诉求难以调和,沟通时常“各说各话”。
  • 社区质疑委员会存在双重标准:要求新提案提供完整实现,却推动像模块、安全配置这样尚无可用原型的大项目。

如果这种状况持续,尤其是若委员会成员固守个人偏好而阻挠合理演进,C++可能会面临更严重的分裂。此外,任何ABI兼容性的破坏都将引发巨大争议和迁移成本。

总之,C++的现状反映了现代软件工程实践海量遗留代码的兼容性需求之间的深刻矛盾。工具链差异加剧了阵营分化,而标准委员会的保守取向难以同时满足两方期待,使得C++的演进之路充满挑战。

12. Pushing AMD's Infinity Fabric to Its Limit (chipsandcheese.com)

The request was rejected because it was considered high risk

13. Show HN: Rill – Composable concurrency toolkit for Go (github.com)

Rill 是一个为 Go 语言设计的可组合并发工具包,旨在通过提供可复用的组件来简化并发程序的构建。它减少了样板代码,同时保留了 Go 原生的基于 channel 的模型和背压行为。其核心设计理念包括:通过链式 channel 转换来构建可组合的管道;集中错误处理;支持无限流的实时处理;提供高级功能如批处理、有序合并等;保持轻量级和零依赖。

核心特性与目标

  1. 简化常见任务:为并行任务执行、实时事件处理等常见并发问题提供更简洁安全的解决方案,抽象了 goroutine、channel 和错误管理的复杂性。
  2. 可组合的并发:大多数函数接受 Go channel 作为输入,并返回新的、经过转换的 channel 作为输出,使得它们可以像 Unix 管道一样链接,构建可复用的处理流水线。
  3. 集中错误处理:错误会自动在流水线中传播,并可在最终阶段集中处理。对于复杂场景,也支持在流水线任意点拦截错误。
  4. 流处理:基于 Go channel,能够处理潜在的无限数据流,适用于实时处理或大规模数据集。
  5. 高级任务支持:内置批处理、有序扇入(Ordered Fan-In)、Map-Reduce、流拆分与合并等功能,流水线拓扑可以是任意无环有向图(DAG)。
  6. 可扩展性:由于操作标准 Go channel,易于编写自定义函数与库兼容。
  7. 轻量级:具有类型安全、基于 channel 的小 API 集,零依赖,资源开销低。

关键功能与示例

  • 快速入门:演示了从 API 获取用户、激活并保存的流程。使用 rill.Map 控制各步骤的并发度(例如获取用户并发为3,保存并发为2),并通过 context 取消来优雅地停止剩余操作。错误在最终的 ForEach 阶段返回。
  • 批处理:通过 rill.Batch 将单个项目流(如ID)转换为批次流,以使用批量 API,从而减少网络调用、提升吞吐量并降低成本。随后可用 rill.Unbatch 将批次流展平。
  • 实时批处理rill.Batch 支持超时参数。批次会在达到最大尺寸指定超时后发出,无论哪个条件先满足。这优化了高负载下的批次大小,并在负载低时保持响应性。
  • 错误处理、终止与上下文:流水线通常由一系列非阻塞的 channel 转换,加上一个返回最终结果和错误的阻塞阶段组成。错误从流水线中传播至最终阶段。库提供多种阻塞函数,如 ForEach(并发应用函数)、ToSlice(收集为切片)、First(返回第一个项目或错误)、Reduce(并发归约)、All(并发检查条件)、Err(返回第一个错误)。这些函数在提前终止时,会启动一个后台 goroutine 来清空输入 channel,防止泄漏。推荐用户自定义阶段实现对 context 的感知,以便在取消时停止产生新项。
  • 顺序保留:并发处理通常打乱顺序。Rill 提供了有序版本的函数(如 OrderedMap, OrderedFilter),通过内部同步确保输出顺序与输入顺序一致。
  • 并行流处理与 FlatMaprill.FlatMap 可将每个输入项转换为独立的流,然后将这些流合并,允许并发处理“分区”问题。这适用于例如并发遍历分页 API 并合并结果的场景。
  • Go 1.23 迭代器集成:Rill 提供 FromSeqFromSeq2 将迭代器转换为流,以及 ToSeq2 将流转换为迭代器。后者可在 for-range 循环中使用,即使提前 break 也能正确清理资源。

测试与贡献

Rill 测试覆盖率超过 95%,重点关注结果的正确性、并发数的准确控制以及有序函数的保序性。库鼓励社区贡献,但建议新功能应通用、保持 API 表面简洁、避免外部依赖,并提交前包含测试和文档。重大变更建议先开 issue 讨论。

14. Show HN: I made an ls alternative for my personal use (github.com)

lla:一个现代化的 ls 替代工具

lla 是一款用 Rust 编写的现代化、可定制、功能丰富的 ls 命令替代品。它旨在通过强大的视图模式、Git 集成、插件系统和高级搜索功能,彻底改变开发者与文件系统交互的方式。

核心功能与特性

  • 多样化的显示视图
    • 默认视图:简洁无干扰的目录列表。
    • 长格式视图:显示详细的文件元数据(权限、大小、修改时间等),支持隐藏用户组、显示相对时间等自定义选项。
    • 树状视图:以层级结构展示目录关系,可指定深度。
    • 表格与网格视图:结构化显示,优化数据对比。
    • 差异视图:比较本地目录、文件,或与 Git 历史版本对比,显示大小变化和统一差异。
  • 深度 Git 集成:内置状态可视化,提供仓库洞察。
  • 高级组织与分析
    • 时间线视图:按时间顺序追踪文件。
    • 存储分析:可视化磁盘使用情况(-S 选项)。
    • 存档内省:无需解压即可列出 .zip, .tar.gz 等归档文件内容。
  • 智能导航与搜索
    • 交互式目录跳转器:通过书签和历史记录快速导航,支持 shell 集成。
    • 模糊搜索:交互式文件查找,支持多选和批量操作。
    • 内容搜索:基于 ripgrep 的强大内容搜索,支持语法高亮、上下文行数配置和正则表达式。
    • 智能过滤:支持复杂的布尔过滤模式(OR, AND, NOT, XOR)、正则表达式、基于大小和时间的范围过滤,以及可重用的过滤预设。
  • 丰富的插件生态系统:通过插件扩展文件操作、元数据增强、代码分析和 Git 工具等功能。
  • 机器可读输出:支持 JSON、NDJSON 和 CSV 格式输出,便于脚本集成。
  • 高度可定制
    • 主题管理器,可安装和预览主题。
    • 自定义快捷键和配置工具。
    • 支持项目本地配置文件 (.lla.toml),可与全局配置叠加。
    • 可排除特定路径(如云同步文件夹)。

安装方式

提供多种便捷的安装途径:

  1. 安装脚本:适用于多数系统,自动检测环境并安装。
  2. 包管理器:支持 Cargo、Homebrew (macOS)、paru (Arch Linux)、pkgin (NetBSD)、X-CMD。
  3. 手动安装:从 GitHub Releases 下载对应架构的二进制文件并手动放置。
  4. 升级:内置 lla upgrade 命令,可自动升级到最新或指定版本。

安装后,可通过 lla init 进行引导向导配置,或直接使用 lla init --default 采用默认设置。

命令与用法示例

lla 提供了丰富的命令选项,主要包括:

  • 视图切换-l (长格式)、-t (树状)、-T (表格)、-g (网格)、-S (存储分析)、-G (Git)、-F (模糊搜索)。
  • 导航与搜索lla jump (交互式跳转)、--search (内容搜索)。
  • 排序与过滤-s (按条件排序)、-f (过滤模式)、--size/--modified (范围过滤)、--preset (使用预设)。
  • 递归与深度-R (递归)、-d (设置深度)。
  • 插件管理lla install, lla use, lla plugin
  • 配置lla config, lla theme

基本示例

lla -l          # 长格式查看
lla -t -d 3     # 树状视图,深度3层
lla -G          # 显示Git状态
lla -S          # 存储分析
lla -f "regex:.*\.rs$" # 过滤出所有.rs文件
lla --search "TODO" # 搜索文件内容中的TODO

许可证

该项目采用 MIT 许可证。

15. Senators say TSA's facial recognition program is out of control (gizmodo.com)

美国参议员批评运输安全管理局(TSA)人脸识别计划

计划引发的争议

美国参议员们对运输安全管理局推行的机场人脸识别计划提出了尖锐批评,认为该项目已经“失控”,引发了严重的隐私和公民自由担忧。

核心问题

批评主要集中在该项目的广泛推行缺乏明确的限制上。参议员认为,TSA在没有充分公众讨论和国会授权的情况下,将人脸识别技术从试点项目迅速扩展到全国各大机场,使其成为安检的常规环节,这超出了其应有的范围。

公民自由与隐私风险

参议员们担忧的核心在于:

  1. 大规模监控:该计划实质上建立了一个对所有旅客进行生物特征扫描和记录的系统。
  2. 数据安全与滥用:收集的敏感生物识别数据如何存储、保护以及是否会被用于安检以外的目的,缺乏透明度和保障。
  3. 知情同意与选择权:旅客可能不清楚自己有权选择不参与人脸识别,或者不知道如何行使这一权利。

选择退出的途径

根据报道标题和常见做法,旅客通常有权选择不使用人脸识别系统。通常的步骤是:

  • 在安检队伍中,明确告知工作人员您希望采用人工身份验证。
  • 您可能需要出示传统的身份证明文件(如驾照或护照),由工作人员进行人工核对。
  • 选择此选项不应导致额外的安检或延误。

结论

参议员们的表态反映了美国国会内部对联邦机构大规模部署生物识别监控技术日益增长的警惕和反对。事件突显了在机场安全与保护公民隐私权之间寻求平衡的紧迫性,以及为该技术建立清晰法律框架的必要性。

16. Noise-canceling single-layer woven silk and cotton fabric (onlinelibrary.wiley.com)

降噪单层丝绸与棉混纺织物

根据提供的内容,实际文章未被加载,显示的是一个Cloudflare安全挑战页面。该页面用于验证用户访问,确保网站安全,而非包含关于降噪织物的具体信息。

页面目的

  • 安全验证:这是Cloudflare的托管挑战页面,旨在阻止恶意流量或自动化访问,要求用户通过验证才能继续。
  • 临时性:页面显示为“Just a moment...”,表明在验证期间用户需要等待。

页面结构

  • HTML基础:页面使用HTML5结构,设置字符集、视口和内容安全策略(CSP),以增强安全性。
  • 样式设计:包含内联CSS,定义布局、字体和错误文本样式,如错误消息使用特殊背景图像。
  • 无脚本提示:如果用户禁用JavaScript,页面显示错误信息“Enable JavaScript and cookies to continue”。
  • 脚本功能:JavaScript脚本(nonce="PKZfSkWsrXEvJ1QX3yXBi3")加载Cloudflare挑战平台,处理验证逻辑,包括参数设置和页面重定向。

关键功能

  • 挑战机制:通过脚本动态加载挑战页面,验证用户身份,可能涉及计算或交互任务。
  • 用户交互:要求启用JavaScript和cookies,否则无法继续访问。
  • 重定向处理:脚本修改浏览器历史状态,将用户重定向到目标URL(如/doi/10.1002/adma.202313328)后完成验证。
  • 安全元素:使用CSP限制资源来源,如仅允许来自challenges.cloudflare.com的脚本和样式,防止跨站攻击。

总结

该页面是一个技术性的安全中间层,不包含降噪织物的具体内容。其核心是通过Cloudflare挑战平台进行实时验证,保护网站免受未授权访问。用户需启用JavaScript和cookies以完成验证,之后才能访问实际文章。

17. DELETEs Are Difficult (notso.boringsql.com)

DELETE操作的复杂性与应对策略

DELETE操作的隐藏成本

虽然DELETE看似简单,但在生产环境中对大型数据集执行时可能引发严重性能问题。未及时删除过时或无关数据会导致数据库膨胀、性能下降和维护困难,甚至可能产生合规风险。

DELETE的实际执行过程

执行DELETE时,数据库会经历多个复杂步骤:

  1. 行识别:类似SELECT,通过MVCC机制识别当前事务可见的行并检查锁状态
  2. 锁获取:对目标行获取行级排他锁
  3. 触发器执行:执行BEFORE DELETE触发器
  4. 标记删除:行被标记为已删除而非物理删除,TOAST表也可能参与处理
  5. 索引更新:对应索引条目被标记删除
  6. 级联操作:执行如ON DELETE CASCADE等级联操作
  7. 后期触发器:执行AFTER DELETE触发器
  8. WAL记录:所有变更记录到预写日志中

提交后变更才永久生效,但数据仍未物理删除,这正是数据库膨胀的根源。

AUTOVACUUM的作用与挑战

autovacuum进程负责物理回收已删除数据,其工作包括:

  • 扫描表并检查可见性映射
  • 物理移除死元组
  • 更新相关索引条目
  • 标记空闲空间供重用
  • 更新表统计信息
  • 记录WAL日志
  • 处理TOAST表和更新可见性映射

这个过程消耗大量资源,但禁用autovacuum会导致数据库快速膨胀,最终影响性能甚至导致磁盘空间不足。

DELETE比UPDATE更复杂的原因

相比UPDATE操作,DELETE通常更复杂:

  • UPDATE通常修改有限列,减少索引更新
  • 可通过表和查询设计减少HOT更新
  • UPDATE不会触发级联操作,仅涉及明确定义的触发器

额外挑战

  • 复制环境:事务需等待WAL记录写入备用服务器,增加时间敏感性
  • 操作规模:大型DELETE产生大量WAL记录,可能压垮系统
  • 资源争用:WAL生成、事务处理和后台进程竞争I/O、CPU和内存资源

软删除并非解决方案

软删除(添加deleted_at字段)看似简单但存在问题:

  • 引发数据一致性问题,特别是级联处理时
  • 需要在所有查询中添加过滤条件,增加应用逻辑复杂性
  • 只是延迟问题,数据仍占用存储空间
  • 最终仍需面对实际删除的挑战

有效策略

1. 批处理删除

将大规模DELETE分解为小批次处理:

DELETE FROM films
WHERE ctid IN (
    SELECT ctid FROM films
    WHERE kind <> 'Musical'
    LIMIT 250
);

可通过ctid或主键进行批次控制,给予数据库处理时间。

2. 规划Autovacuum

批处理时需配合autovacuum设置调整或手动VACUUM操作,避免禁用autovacuum导致膨胀积累。

3. 使用分区策略

对自然分段数据(如按时间创建的数据)采用分区策略:

  • 通过直接删除或清空分区替代DELETE操作
  • 避免扫描、锁定和标记删除的开销
  • 消除膨胀问题

结论

DELETE操作可能带来意外性能影响和数据库膨胀。通过批处理、监控autovacuum和分区策略等方法,结合模式设计阶段的考量,可以有效管理DELETE操作,确保数据库高效稳定运行。

18. Wildlife monitoring technologies used to intimidate and spy on women (www.cam.ac.uk)

文章摘要:野生动物监控技术被用于恐吓与监视女性

核心问题 原本用于保护野生动物的远程监控技术(如相机陷阱、无人机、录音设备),在印度北部的科比特老虎保护区被地方政府和男性村民故意滥用,以监视和恐吓当地女性,严重侵犯了她们的隐私和权利。

研究背景

  • 剑桥大学研究员Trishant Simlai博士进行了为期14个月的实地调查,采访了保护区周边的270名居民,其中包括许多女性。
  • 研究结果发表于《Environment and Planning F》期刊。

技术滥用方式与影响

  1. 故意恐吓:护林员故意将无人机飞越当地女性,以恐吓她们远离森林,阻止其依法采集自然资源(如柴火、草药)。
  2. 行为压抑与安全风险:女性因感到被相机陷阱监视,在森林中说话、唱歌变得非常安静(原本唱歌是为了驱赶大象、老虎等危险动物)。这种行为改变增加了她们与危险野生动物意外相遇的风险。已有一名受访女性在虎袭中丧生。
  3. 故意骚扰与羞辱:一张在森林中如厕的女性照片(由用于监测野生动物的相机陷阱拍摄)被传播到本地社交媒体群组,进行恶意骚扰。
  4. 破坏避难空间:对于许多女性而言,森林是逃离家庭暴力、酗酒等家庭问题的避难所和社交空间。监控技术的滥用侵蚀了这一安全空间,加剧了她们的孤立感。

更广泛的问题

  • 研究指出,即使在使用野生动物监控技术的其他地方(包括英国国家公园),也可能在无意中记录到人类活动,侵犯隐私。
  • 监控技术容易从跟踪动物转向监视人,改变人们的行为模式。

研究者呼吁

  • 保护主义者必须审慎考虑使用远程监控技术的社会影响和潜在伤害,特别是对边缘化群体(如女性)的影响。
  • 在某些情况下,应优先考虑采用侵入性较低的方法(如人工调查)来获取所需信息。
  • 理解当地女性使用森林的多样化方式,对于制定有效的森林管理策略至关重要。

结论 该研究揭示了保护技术被恶意利用的“最坏情况”,凸显了在自然保护项目中必须平衡生态目标与人权保障,尤其是性别平等的紧迫性。

20. Mark–Scavenge: Waiting for Trash to Take Itself Out (inside.java)

Mark-Scavenge:让垃圾自行清理的新垃圾回收算法

本文介绍了名为Mark-Scavenge的新型垃圾回收算法,该算法针对现有移动式垃圾回收器中因将可达性作为存活对象的近似而导致的不必要数据移动问题提出了解决方案。此研究是Oracle与乌普萨拉大学合作的最新成果。

核心问题:可达性 vs. 真实存活

现代垃圾回收通常基于“弱分代假说”,即大多数对象是短命的。为此,堆按对象年龄分区。回收器的工作是回收内存。一个高效的回收器会优先处理存活对象少的区域(如图1中的区域B),因为只需移动少量对象即可释放整个区域。

然而,GC判断对象“存活”的标准是可达性(从根引用链可达)。但这只是近似,因为真实存活定义为“未来执行中会被访问”。由于无法预测未来,使用可达性会导致GC移动了那些虽可达、但程序实际将不再访问的对象,这被称为无效工作

实验测量:无效工作的规模

研究者以OpenJDK的ZGC为对象,利用其负载屏障检测对象是否被真正访问。他们标记出在标记阶段可达、但在下一个GC周期结束前未被访问且最终不可达的对象——这些对象的移动即为无效工作。

在DaCapo和SPECjbb2015基准测试中,结果显示由于可达性过度近似真实存活以及标记与回收之间的时间延迟,存在极高比例的对象被不必要地移动(图3)。对G1和Serial GC的类似测试也得出相近结论。这表明,无论是立即回收(Scavenging)还是延迟回收(Mark-Evacuate),单纯使用可达性都会导致大量无效工作。

新算法:Mark-Scavenge

核心思想:延迟回收,给对象更多时间变为不可达,从而避免移动它们。

  • 标记阶段:与Mark-Evacuate类似,进行可达性发现,并选择稀疏区域(存活对象少)进行计划回收。
  • 关键延迟:标记后不立即回收。仅当区域完全为空时,内存才立即可用。分配压力由“头部空间”缓冲区应对,而该缓冲区可按需从已标记的稀疏区域通过标准回收创建。
  • 回收时机:这些稀疏区域中的对象获得了一个额外的GC周期时间来变为不可达。
    • 若在下一个周期变为不可达,则对象已死,无需移动
    • 若仍可达,则采用Scavenge方式(发现即移动)进行回收。
  • 此设计结合了两种方法的优点:选择性回收(像Mark-Evacuate)和发现与回收无延迟(像Scavenge,但发生在延迟之后)。

实验结果与性能收益

研究者在分代ZGC中用Mark-Scavenge替代了年轻代收集。基准测试结果(图5)显示:

  • 无效移动减少高达91%
  • 在内存充足、避免分配停顿的情况下,性能提升主要隐藏于无效工作的减少中。
  • 高负载机器(如分配率突发)上,性能提升显著:2-4%。
    • SPECjbb2015:关键延迟(critical-jOPS)提升2-4%,最大吞吐量(max-jOPS)提升2-8%。
    • Cassandra测试中,99th、99.9th和99.99th百分位延迟降低20%。

结论

研究表明,在移动式回收器中将存活等同于可达会导致显著的垃圾数据复制。在高负载环境下,这对性能有负面影响。Mark-Scavenge算法通过延迟回收,有效减少了无效工作,为垃圾回收研究提供了改进现有技术的新思路。

21. Malaria vaccine delivered by a mosquito bite (www.nature.com)

新型疟疾疫苗通过蚊子叮咬进行接种

科学家开发了一种创新的疟疾疫苗接种策略:通过携带基因工程改造的疟疾寄生虫的蚊子叮咬来增强人体免疫力。

核心机制与试验结果:

  • 递送方式:该策略突破传统注射模式,利用被感染的蚊子作为“活体针头”,在叮咬时将经过基因工程改造、毒力减弱的疟原虫递送至人体。
  • 免疫效果:在临床试验中,这种“整体生物”疫苗接种方法成功降低了参与者感染疟疾的风险。
  • 潜在意义:该概念验证研究为应对这一每年感染约2.5亿人的重大疾病,提供了一种潜在更有效的防控新途径。
22. Ask questions of SQLite databases and CSV/JSON files in your terminal (simonwillison.net)

2024年11月25日

作者为其 sqlite-utils CLI 工具构建了一个名为 sqlite-utils-ask 的新插件,允许用户直接在终端中通过人类语言问题查询 SQLite 数据库以及 CSV/JSON 文件。

主要功能与用法

  1. 安装与配置

    • 使用命令 sqlite-utils install sqlite-utils-ask 安装。
    • API 密钥可通过 OPENAI_API_KEY 环境变量或使用 LLM 工具的 llm keys set openai 命令存储。
  2. 查询 SQLite 数据库

    • 命令格式:sqlite-utils ask <数据库文件> "<自然语言问题>"
    • 工作原理:提取数据库的 SQL 模式,将模式与用户问题一起发送给 LLM,LLM 返回一个 SQL 查询,工具随后执行该查询以获取结果。
    • 重试机制:如果生成的 SQL 查询执行失败,工具会将错误信息反馈给模型进行修正并重试,最多重试三次。
    • 详细模式:使用 -v--verbose 选项可以查看发送给 LLM 的完整提示词,其中包含系统提示和用户问题。
    • 增强模式:使用 -e--examples 选项,工具会在提示中为每个模式下的文本列(平均长度小于32字符)附加五个常见值,这有助于模型生成更准确的查询(例如,识别州缩写如“CA”、“FL”)。
  3. 查询 CSV/JSON 文件

    • 命令格式:sqlite-utils ask-files <文件1> [文件2] ... "<自然语言问题>"
    • 该命令复用了 sqlite-utils memory 命令的机制,将提供的 CSV、TSV 或 JSON 文件导入一个内存中的 SQLite 数据库,然后执行查询。
    • 支持提供多个文件,每个文件会被加载为不同的表,模型可以构造连接查询。

实现细节与扩展性

  • 插件核心代码约250行 Python,使用 sqlite-utils 的插件钩子 register_commands() 注册了 askask-files 两个命令。
  • 依赖 LLM 库,从而可以抽象地与不同模型交互。默认使用 gpt-4o-mini,但用户可以通过安装相应插件(如 llm-claude-3)并使用 -m 参数来指定其他模型(例如 claude-3.5-sonnet)。
  • 关于成本:作者计算后认为,即使不考虑 OpenAI 的自动提示缓存(重复发送相同模式前缀可获50%折扣),gpt-4o-mini 也足够便宜,处理一个约4000个 token 的大型 SQL 模式提示,成本也不到一美分。
23. Those correction notices, in full (statmodeling.stat.columbia.edu)

根据提供的内容,这是一个网站的安全验证页面(由Cloudflare提供),而非文章正文。

  • 页面状态:页面显示“Just a moment...”(请稍等),表明正在加载或进行安全检查,用户无法直接访问目标文章内容。
  • 页面目的:这是一个挑战验证页面,旨在拦截自动化程序(如爬虫)的访问。页面提示用户需要“Enable JavaScript and cookies to continue”(启用JavaScript和Cookies才能继续)。
  • 技术特征
    • 页面使用了内容安全策略(CSP)来限制资源加载。
    • 包含一段用于执行Cloudflare挑战验证的JavaScript代码。
    • 设置了360秒(6分钟)的元刷新,可能用于自动重试或更新挑战。
    • URL中包含挑战令牌和参数,用于验证请求的合法性。

由于实际的文章内容(标题为“Those correction notices, in full”)被此验证页面拦截,无法在当前提供的HTML中访问,因此无法对文章本身进行摘要。

24. Computing with Time: Microarchitectural Weird Machines (cacm.acm.org)

文章标题: Computing with Time: Microarchitectural Weird Machines

内容概述:

本文标题指向一个前沿的计算机体系结构与安全交叉领域的主题。其核心概念是“利用时间进行计算”以及“微架构怪异机器”。

  1. 微架构怪异机器: “怪异机器”在安全研究中,通常指利用系统中非设计意图的、意外的计算基质(如侧信道)来执行计算或构建图灵完备系统的概念。本文将这一概念聚焦于处理器的微架构层面。微架构是处理器实现指令集架构(ISA)的具体硬件组织与设计(如流水线、缓存、分支预测器)。文中探讨的“怪异机器”正是利用这些硬件组件的时序行为、竞争条件或状态依赖关系来构建计算原语。

  2. 利用时间进行计算: “Computing with Time”点明了其实现机制的关键。这并非传统的、在时钟周期内由逻辑门执行的指令计算,而是通过精确测量、操控或利用不同操作的执行时间差异(即时间侧信道)来进行信息编码、传输和处理。攻击者或研究者可以通过观察缓存命中/未命中时间、内存访问延迟、分支预测行为的时间变化等,来推断微架构状态,甚至构建基于时间的逻辑门和计算电路。

  3. 核心内容与意义: 文章很可能在探讨如何系统地将处理器的微架构组件(如缓存、TLB、执行单元)转变为计算资源,构建一个隐藏在正常指令执行层面之下的、基于时序的计算层。这种“怪异机器”具有重要的安全影响:

    • 攻击向量:可用于构建更隐蔽、更强大的侧信道攻击,绕过传统的基于ISA的安全监控。
    • 安全防御:深入理解此类机制是设计更鲁棒硬件安全架构(如抵御Spectre、Meltdown类攻击)的基础。
    • 计算理论:从理论上探讨了计算在异质、非确定性物理系统中发生的可能性。

总结: 本文探讨了一种非传统的计算范式,其基础是现代处理器的微架构行为,特别是利用操作执行时间的细微变化来构建计算模型。它揭示了硬件实现细节中潜藏的计算能力与安全风险,强调了从时间维度审视计算机体系结构的重要性。

25. Judge's Investigation into Patent Troll Results in Criminal Referrals (www.eff.org)
26. Lonely individuals tend to think and talk in an unusual way, study finds (www.psypost.org)

孤独个体思维与语言特异性的研究摘要

研究背景

  • 孤独的定义:主观感受的社交孤立或缺乏有意义连接,与实际社交接触无关。
  • 影响因素:生活转变(如搬家、丧亲、退休)、社交排斥或缺乏支持性关系。
  • 健康后果
    • 心理层面:与抑郁、焦虑、低自尊、对社交拒绝敏感度升高相关。
    • 生理层面:可能导致免疫力下降、心血管疾病、死亡风险增加。
    • 特定群体:老年人中与认知衰退和痴呆症相关;在儿童和青少年中可能阻碍社交发展和学业表现。

核心假设

  • 孤独个体形成对当代文化的心理表征,偏离其社会环境中普遍接受的模式(即思维特异性)。
  • 这种特异性可能导致他们认为自己的想法不被他人共享,从而强化孤独感。

研究一:神经影像学研究

  • 方法
    • 使用功能性磁共振成像(fMRI)扫描80名平均年龄20-21岁的参与者。
    • 任务:评估自身特质、熟人及五位名人(贾斯汀·比伯、艾伦·德杰尼勒斯、金·卡戴珊、巴拉克·奥巴马、马克·扎克伯格)的特质,并报告亲密感。
    • 采用UCLA孤独量表测量孤独程度。
  • 结果
    • 孤独个体在内侧前额叶皮层(编码和提取社交知识的关键脑区)的神经表征与组内其他成员差异显著。
    • 对贾斯汀·比伯的神经表征共识度最高。

研究二:语言分析研究

  • 方法
    • 923名平均年龄40岁的在线参与者完成孤独评估。
    • 从10位名人中随机选取一位,用文字描述该名人(如同向朋友介绍)。
    • 使用谷歌通用句子编码器分析文本的语义相似性。
  • 结果
    • 孤独程度高的个体,其描述文本与其他参与者的相似性更低。
    • 他们更倾向于认为自己对名人的看法不准确或不被周围人共享。

讨论与结论

  • 核心发现:孤独与对名人文化共识的偏离相关,既体现在神经表征层面,也体现在语言表达层面。
  • 研究意义:为孤独感与“时代精神”偏离提供了实证支持,表明孤独个体“想法不被共享”的感受在客观上反映为对当代文化知识的特异性。
  • 局限性:研究主要针对慢性孤独,暂不确定是否适用于暂时性孤独体验。

研究论文信息

  • 标题:《孤独感与偏离共享文化认知的神经表征及语言使用相关》
  • 作者:Timothy W. Broom, Siddhant Iyer, Andrea L. Courtney, Meghan L. Meyer
  • 期刊:《通讯心理学》
27. Institutional memory and reverse smuggling (2011) (landley.net)

本文通过一个大型石化公司的案例,探讨了机构记忆的流失与找回过程。文章的核心是,随着人员更替、组织变革和技术迭代,一个运行了数十年的工厂,其设计原理和建造细节逐渐被公司遗忘,导致后续的改造升级项目陷入困境。

机构记忆的流失与表现 机构记忆依赖人员和文档。在该公司,多种因素导致了记忆的消散:20世纪80-90年代行业低迷造成新员工断层,年龄结构出现鸿沟;设计工作转向全电脑化;办公室多次重组;一次重大公司合并导致原有设计团队解散。结果是,公司虽然熟悉工厂的日常维护,但已不理解其深层工作原理。

当公司计划对工厂进行“去瓶颈”改造和可行性研究时,问题暴露无遗。工程师们发现:

  1. 身份模糊:工厂有多个非正式名称、内部项目名、合资项目名以及不同的文档管理系统编号,难以厘清。
  2. 文档缺失与混乱:旧的文档管理系统指向已不存在的地址;数字化档案不完整;最终依靠旧研究院的实体图书馆,才在布满灰尘的档案柜中找到部分蓝图和数据册,但其对应的数字化副本去向不明。

“逆向走私”与工程考古 为解决难题,公司聘请了已退休的老工程师作为顾问。其任务实质是“逆向走私”:他私下保留了因公司文档管理混乱而未能纳入官方系统的珍贵技术资料。这些资料需要被悄悄地“归还”回公司,以便项目组使用。同时,出现了荒诞的局面:作为外部顾问,他本人理论上不应知晓被列为“商业秘密”的工艺细节,但实际上这些秘密正是他参与创造的,且公司内部的年轻团队反而不掌握这些知识。

年轻工程师的工作则如同“工程考古”。他们需要解读三十年前的技术文档,其中许多术语、符号和设计惯例已过时,且缺乏整体性说明,理解起来异常困难。

反思与启示 作者指出,这并非孤例,而是一种普遍的“逆向企业间谍”现象——公司遗忘了自身的秘密,员工不得不以非官方方式将其找回。虽然更好的文档管理和人员年龄梯队建设或许能缓解问题,但面对技术迭代和人员流动,某种程度的“工程考古”或许难以避免,如同城市地下那些被遗忘却仍在运转的古老工程奇迹。

28. The Curse of Markdown (codehike.org)

文章摘要

本文探讨了内容网站在“简洁-丰富”光谱上的定位,并分析了Markdown在创建网站过程中的局限性及其对Web发展的影响。

1. 内容丰富度光谱与最佳点

  • 内容网站可在一个从简洁丰富的连续体上定位。简洁网站(如nat.org)以纯文本和极少样式为核心,添加丰富元素反而可能分散注意力。丰富网站(如Tailwind CSS官网)利用交互、动画和视觉效果来有效展示产品,削减这些元素则会损害其传达效果。
  • 每种内容都有一个最佳丰富度,取决于其复杂性。丰富度不足会影响作者表达和读者理解;过度丰富则增加作者负担并导致读者分心。

2. Markdown的贡献与“权衡墙”

  • 降低简洁网站成本:Markdown及其工具链极大简化了博客、文档等以文本为中心网站的创建。
  • 扩展丰富网站范围:MDX、Markdoc等工具允许通过额外努力构建更丰富的网站。
  • 局限性(权衡墙):Markdown的帮助存在极限。超过某个阈值,其便利性消失,构建成本恢复到与使用纯HTML相同的高水平。这导致了成本跃升,破坏了丰富度与努力之间的权衡。对于最佳丰富度略超Markdown能力的内容,额外的努力常显得不值得,结果往往是牺牲丰富度以留在Markdown的舒适区内

3. “网站荒地”与工具需求

  • 略超过Markdown能力范围的区域至关重要。这些网站能带来愉悦的阅读体验,更能探索Web的可能性,体现真正的Web原生特性。目前,此类网站仅由对读者体验有极致追求的个人或公司创建,数量稀少,形成一片“荒地”。
  • 要在此区域构建更多网站,需要降低创建丰富内容的工具成本。虽然已出现针对特定类型(如Swift-DocC、TutorialKit)的工具,但作者呼吁开发更通用的工具,以恢复丰富度与努力之间的平衡。
  • 作者将自己的工具Code Hike v1细粒度Markdown概念视为实现这一愿景的尝试,旨在释放Web支持全范围丰富度的潜力,让所有想法都能以最契合其深度和复杂度的方式得到表达。
29. RFC 35140: HTTP Do-Not-Stab (2023) (www.5snb.club)

RFC 35140: HTTP Do-Not-Stab (2023) 文档摘要

该文档以讽刺性的技术标准(RFC)形式,虚构了一个名为“Do-Not-Stab”(请勿刺伤)的HTTP头部字段,用以隐喻和批评当前互联网环境中企业(特别是科技公司)在处理用户隐私与偏好方面的普遍做法。

核心定义与目的: 该头部字段旨在让用户向网站表明其“不希望被刺伤”的偏好。文档指出,由于外围设备技术的发展,网站已具备“刺伤”用户的能力,并催生了“刺伤即服务”(SaaS)产业。此标准为用户提供了一种表达不满并选择退出的机制。

关键技术规范:

  1. 语法:字段形式固定为 Do-Not-Stab: 1。缺少此头部则被视为用户明确希望被“刺伤”。
  2. 默认设置:用户代理(如浏览器)绝对不能Do-Not-Stab: 1 设为默认值。若如此设置,网络服务应当忽略该偏好并继续“刺伤”用户。这强调了用户必须做出主动、明确的选择。
  3. 执行与局限性:文档以微软为例,指出其仅承诺在欧洲经济区(EEA)内遵守此头部。在EEA以外的地区,即便设置了该头部,用户仍可能被“刺伤”,特别是当用户所在国家退出EEA时。
  4. 例外条款:文档列举了在“商业利益大于安全关切”时的多种例外情况,例如:
    • 已获得用户同意(即使用户不知情)。
    • 政府要求的“刺伤”。
    • 可能不致命的“刺伤”。
    • 股东的意愿。 此部分旨在讽刺企业常以法律或商业借口规避责任的现状。

文档的讽刺性评论: 文档末尾附有激烈批评,将矛头指向现实中的企业行为:

  • 质疑为何企业需要被明确告知不应做那些它们明知不对的事情(如过度追踪用户)。
  • 批评微软等公司仅在法律强制(如EEA)时才遵循隐私偏好,如同当年在Internet Explorer中将Do-Not-Track设为默认值,反而导致该标准被广泛忽略。
  • 批评企业如同“孩子”,必须被每个用户单独明确拒绝,认为这是监管仅执行最低要求的悲哀体现。
  • 将广告技术行业形容为“对人类的灾祸”,并质疑其必要性。

总结: 本文档并非真正的技术标准,而是通过戏仿RFC格式,尖锐地讽刺了数字市场中企业对待用户隐私选择的态度:即除非法律明令禁止,否则倾向于忽视或规避用户的明确偏好,并将商业利益置于用户福祉之上。其核心是借虚构的“请勿刺伤”头部,批判“请勿追踪”(DNT)等现实技术标准的无效性及企业阳奉阴违的运营逻辑。

30. Hynix launches 321-layer NAND (www.electronicsweekly.com)

标题: SK海力士发布321层NAND闪存

内容概要: (注:由于提供的实际链接内容为“403 Forbidden”错误页面,无法获取原始文章。以下内容是基于标题“Hynix launches 321-layer NAND”并结合行业公开信息进行的推断性概括。)

SK海力士(Hynix)宣布推出了其最新的321层NAND闪存产品。这是该公司在存储芯片技术上的又一次重大迭代,旨在提升存储密度、性能和能效。

主要技术要点与影响:

  1. 技术突破:该产品代表了NAND闪存堆叠层数的新高。将存储单元堆叠至321层,可以在单位面积内集成更多的存储容量,从而显著提高存储密度

  2. 性能与效率:通常,新代际的NAND在读写速度能效比上会有所改进。更多的层数也可能配合更先进的架构(如“string stacking”技术),以维持或提升数据传输速率并降低功耗。

  3. 市场意义:此举巩固了SK海力士在全球NAND闪存市场,尤其是高端3D NAND领域的竞争地位。它与三星、美光等竞争对手的下一代产品形成直接竞争。

  4. 应用场景:321层NAND预计将主要用于高性能固态硬盘(SSD)、数据中心存储、企业级应用以及可能的新兴领域,以满足大数据、人工智能和移动设备对大容量、高速存储的需求。

  5. 行业趋势:此发布体现了存储芯片行业持续向更高层数堆叠发展的趋势,是突破存储容量瓶颈的关键路径之一。

总结:SK海力士推出321层NAND是其存储技术路线图的重要里程碑,标志着3D NAND架构在层数竞赛中的又一次跃进,有望推动未来存储产品的容量和性能升级。

31. Linux 6.13 will report the number of hung tasks since boot (www.phoronix.com)

根据提供的内容,实际未能获取到关于“Linux 6.13将报告自启动以来的挂起任务数量”的文章正文。所见内容是一个网站的安全验证页面,提示需要启用JavaScript和cookies才能继续,并不包含任何文章正文信息。因此,无法对不存在的内容进行总结。

34. Making Your Connection Bad (www.5snb.club)

在慢速网络环境下测试应用程序的观察与设置方法

本文灵感来源于“Engineering for Slow Internet”,作者尝试在桌面和手机上模拟恶劣的网络条件(200kbit 带宽与高丢包率),以观察不同应用程序的表现。以下是简要总结:

应用程序行为观察

  • F-Droid:没有下载暂停功能,但能恢复中断下载(偶尔会崩溃)。
  • Steam:支持下载暂停,且在客户端重启后能恢复下载。
  • Telegram:聊天功能基本可用,图片加载较慢。
  • Discord:网络不佳时有时会跳转到加载界面,但其他情况运行尚可。
  • Git:克隆或拉取操作没有续传机制,建议频繁小批量拉取,或通过内核提供的 bundle 方式克隆(不适用于推送)。

在 Linux 上模拟慢速网络

作者提供了使用 tcnetem 命令配置网络参数的脚本:

  • 设置 200kbit 带宽、200ms 延迟及 2% 丢包率。
  • 也提供了更极端的测试配置(40kbit 带宽、1000ms 延迟、10% 丢包)。
  • 注意:如对本地回环接口(lo)限速,可能影响系统其他服务。
  • 可通过相应删除命令恢复网络设置。

在 Android 上模拟慢速网络

  • 通过开发者选项中的“网络限速”功能设置,仅影响下载速率。

在网页端(Firefox)模拟慢速网络

  • 通过开发者工具(Ctrl+Shift+I)的“网络”选项卡中的速率限制下拉菜单设置。

进一步参考

文章末尾提到了相关文档链接,包括 Linux 网络管理指南和 Firefox 限速说明。

36. Owl Lisp – A functional Scheme for world domination (gitlab.com)

Owl Lisp 摘要

Owl Lisp 是一个函数式Scheme语言,旨在实现世界 domination,这可能表示其设计目标包括高性能、可移植性或广泛的应用场景。标题表明它作为函数式编程语言,专注于Scheme方言的扩展或优化。

37. Reweb: Visual website builder for Next.js and Tailwind (www.reweb.so)

Reweb:基于Next.js和Tailwind的可视化网站构建器

Reweb是一个专为Next.js和Tailwind CSS设计的可视化网站构建工具,旨在简化网页设计和开发流程。其核心功能包括:

  • AI驱动设计:用户可以通过AI生成、编辑和探索网页设计,提升创意效率和迭代速度。
  • 导出选项:支持将设计导出为代码或直接导出到Figma,方便团队协作和进一步开发。
  • 示例库:提供多种预置示例,如Dashboard、Landing Page和Card Components,帮助用户快速学习和应用。

该工具专注于可视化操作,降低技术门槛,适用于Next.js和Tailwind生态的开发场景。

38. Deprecating outdated issues on the GitHub public roadmap (github.com)

文章摘要:GitHub 公共路线图中的过期问题处理

GitHub 宣布对公共路线图项目进行刷新,核心举措是废弃一批不再相关或已过时的议题,并更新路线图以反映当前的产品方向和优先级。

主要变更

  1. 废弃过期议题:移除因项目优先级或时间线变化而长期停滞、不再代表当前产品方向的议题。
  2. 全面刷新路线图板:添加能更准确反映 GitHub 未来发展方向的新功能和计划。
  3. 持续维护:承诺定期审查和更新路线图,确保其信息的准确性与可靠性。

目的与影响

  • 提升信息质量:清理过时信息,使路线图更易于跟踪,提供更准确、可操作的更新。
  • 建立信任:通过保持路线图与实际开发重点一致,并承诺定期更新,来增强与用户社区的信任。
  • 后续沟通:对于社区关心的已废弃议题,鼓励用户在讨论区提出反馈。

废弃议题示例

文章列出了众多将被废弃的议题,涵盖多个产品领域,例如:

  • 代码导航:针对 Java、JavaScript 和 TypeScript 的精准代码导航。
  • GitHub Actions:多项功能改进,如环境管理、机密管理、网络控制等。
  • 项目管理与安全:项目历史记录、安全角色改进、审计日志等。
  • 其他:包括 Dependabot、Codespaces、代码扫描等多个方面的计划功能。

2024年11月更新说明

针对社区反馈,GitHub 做出了补充和修正:

  1. 澄清废弃原因:纠正了之前“不再代表产品方向”的说法。移除原因多样,包括功能与战略优先级不符,或为承认时间线不确定性而主动撤下,直至有更多确定性。
  2. 提供更详细说明:将为上述废弃议题列表中的每个项目添加评论,详细说明移除原因以及是否有类似计划存在于新路线图中。
  3. 重申沟通承诺:强调将持续保持开放与诚实,定期更新(下一次更新预计在2025年1月),并邀请用户继续在社区中参与讨论与反馈。

GitHub 表示,所有这些变更旨在为社区提供更准确、及时的信息,并促进更好的开发透明度和社区参与。

39. Ask HN: What are your most regretted tech purchases?