2024-10-08

27 篇热帖

1. Differential Transformer (arxiv.org)

差分Transformer (Diff Transformer) 总结

核心问题与方案

原始Transformer模型存在一个主要缺陷:倾向于将过多的注意力分配给不相关的上下文信息,这相当于引入了噪声,降低了模型效率。为此,本文提出了差分Transformer(Diff Transformer),其核心是通过抵消噪声来放大对相关上下文的注意力。

技术原理

差分注意力机制的关键创新在于,它将注意力分数计算为两个独立的softmax注意力图之间的差值

  • 两个独立注意力图:模型并行生成两个注意力分布。
  • 差值运算:通过相减操作,自动抵消两个图中共有的噪声部分
  • 结果:这一机制促进了稀疏注意力模式的产生,使模型更专注于真正关键的信息。

主要优势与实验结果

在语言建模任务中,Diff Transformer在各种模型规模和训练数据量设定下均优于标准Transformer。更重要的是,它在多种实际应用中展现出显著优势:

  1. 长上下文建模:更有效地处理长序列。
  2. 关键信息检索:能更精准地定位关键信息。
  3. 减少幻觉:在问答和文本摘要任务中,通过减少对无关上下文的干扰,有效缓解了生成内容中的幻觉问题
  4. 上下文学习
    • 提升准确性
    • 增强鲁棒性:对示例顺序的变化更具鲁棒性,解决了长期存在的顺序敏感性问题。
  5. 降低激活异常值:模型激活值分布更稳定。

结论

Diff Transformer通过其创新的差分注意力机制,显著提升了模型对相关上下文的聚焦能力并抑制了噪声。实验结果表明,它在基础性能与多种实际应用中均表现出色,被定位为一种高效且前景广阔的新架构,有望推动大型语言模型的发展。

2. Google must open Android for third-party stores, rules Epic judge (www.theverge.com)

根据2024年10月7日的报道,在Epic Games诉Google反垄断案中,法官James Donato做出最终裁决,认定Google的Android应用商店(Google Play)构成非法垄断,并命令其向竞争对手开放,为期三年。

主要裁决内容:

  1. 开放应用分发:自2024年11月1日起至2027年11月1日,Google必须在其Google Play商店内分发竞争对手的第三方应用商店,并允许这些第三方商店访问Google Play的完整应用目录(除非开发者个人选择退出)。
  2. 解除支付捆绑:Google必须停止强制要求在其Play商店上架的应用使用Google Play支付系统。
  3. 赋予开发者更多自主权
    • 允许开发者在Play商店内告知用户其他支付方式。
    • 允许开发者引导用户至Play商店外部下载其应用。
    • 允许开发者自行设定应用价格,不受Play支付系统影响。
  4. 禁止反竞争协议:Google不得:
    • 与应用分发商或计划推出应用商店的实体分享应用收入。
    • 提供金钱或优惠让开发者在Play商店独家或优先发布应用。
    • 提供金钱或优惠让开发者在竞争对手商店发布应用。
    • 提供金钱或优惠让设备制造商或运营商预装Play商店。
    • 提供金钱或优惠让设备制造商或运营商预装竞争对手商店。

安全与执行:Google在开放商店的同时,仍可采取“合理、严格必要且有针对性”的安全措施,并可因此收费。法官给予Google八个月时间制定具体实施方案,并将设立一个由双方共同选择的三人技术委员会来处理争议。开发者可选择将其应用从竞争对手商店中撤出。

裁决背景与反应

  • 法官认为,亚马逊等强大对手因“网络效应”无法与Google Play竞争,而上述措施将给予竞争对手“一个起步的机会”。
  • Epic Games未获得其全部请求(例如,要求开放六年而非三年;允许用户单次点击侧载应用等)。
  • Google表示将提出上诉,并试图申请暂停执行该裁决,称其会“伤害美国消费者、开发者和设备制造商”。
  • Epic Games则宣布胜利,其CEO Tim Sweeney表示,Epic Games Store等应用商店将于2025年在美国登陆Google Play商店,且无需支付Google的30%抽成。

案件背景

  • Epic于2020年8月13日同日起诉Google和Apple,指控其应用商店政策构成垄断。
  • 陪审团于2023年12月裁定Google Play及Google Play支付服务构成非法垄断,且其与开发者和制造商的许多特殊协议属反竞争行为。
  • Epic与Apple的类似诉讼已基本结束,Apple在最高法院最终上诉中胜诉。Epic对Google的第二起相关诉讼(涉及Google和三星)也已由同一法官受理。
3. Show HN: Kotlin Money (blog.eriksen.com.br)

Kotlin Money 库概述

该库为 Kotlin 语言提供了一个专注于货币金额计算与分配的解决方案。作者因在 N26 公司工作期间处理货币相关挑战(如分期付款、外汇、费用处理等)而受到启发开发了此库。主流编程语言通常缺乏内置的一等货币数据类型,依赖开发者自行抽象,这容易在涉及舍入操作时产生问题。

核心功能

  1. 货币金额的创建与基本运算

    • 使用 money 函数轻松创建带货币类型的金额(支持法定货币和加密货币)。
    • 支持加法、减法、乘法等数学运算,以及百分比计算(如 increaseBy, decreaseBy)。
    • 示例:val total = price + shippingval total = subtotal decreaseBy 10.percent()
  2. 智能分配

    • 这是库的关键特性。allocate 方法能将总金额分配到多个部分,并严格保证各部分之和等于原始金额,避免舍入误差导致的金额损失或错误。
    • 应用场景:完美解决分期付款(BNPL)中的分配问题。例如,将 100 美元分三期,结果为 [33.34, 33.33, 33.33],总和仍为 100.00。
    • 支持按比例分配:可以传入百分比列表进行分配,同样确保总和精确。
    • 可定制分配策略:允许自定义如何处理分配中产生的“分差”,例如默认策略或指定将差额放入列表的最后一项。
  3. 货币支持

    • 内置支持广泛的货币类型。
    • 法定货币:支持 306 种流通货币。
    • 加密货币:支持 2283 种加密货币。
    • 提供货币兑换功能(exchange 方法)。

未来规划

作者计划逐步扩展库的 API,使其保持简洁,未来将增加对 Android 开发的支持,以及开箱即用的持久化和序列化功能。

总结

Kotlin Money 通过提供专用的货币类型和操作符,简化了货币相关的计算逻辑。其核心优势在于解决了金额分配中的舍入精度问题,确保计算结果在财务上准确无误,尤其适用于涉及分期、比例分成等复杂场景的应用开发。

4. Nearly all of the Google images results for "baby peacock" are AI generated (twitter.com)

本文介绍了x.com网站上出现的一个错误消息。消息指出发生了技术问题,但建议用户不要担心,并再次尝试访问。内容特别强调,某些隐私相关扩展程序可能导致网站功能异常,并建议用户禁用这些扩展后重试,以解决可能遇到的访问障碍。

6. The Static Site Paradox (kristoff.it)

文章通过对比两种个人网站构建方式,揭示了“静态网站悖论”:普通人被迫依赖复杂的内容管理系统(如WordPress),而专业工程师反而能使用更简单的静态网站方案。原因在于,对非技术用户而言,快速搭建一个博客比自行掌握域名购买、主机配置、部署流程等技术细节更容易。工程师则可利用GitHub Pages等免费工具轻松部署静态网站。

作者在SquiggleConf会议上分享开发HTML语言服务器的经验时,发现其项目SuperHTML是首个能向用户报告HTML诊断信息的语言服务器。现有工具通常依赖前端框架,导致即使不需要复杂性,用户也倾向于使用框架,这进一步加剧了技术的复杂化。

作者指出,网络不应仅属于软件工程师。过度的技术复杂化会将普通用户推向社交媒体等封闭平台。软件工程师有责任简化技术门槛,这既是职业自豪感的体现,也能让互联网生态更加多元和开放。

7. Rewrite cname uncloaking code to account for new ipaddress= option (github.com)

CNAME解封装代码重写摘要

主要变更目的

重写CNAME解封装功能,以支持新的ipaddress选项,增强DNS解析结果的缓存与处理能力。

核心架构变更

1. DNS缓存系统

  • 替换简单Map缓存:旧代码使用this.cnames Map存储CNAME记录,新代码实现基于环形缓冲区的复杂缓存系统。
  • 新缓存组件
    • dnsList: 环形缓冲区,存储DNS解析结果
    • dnsWritePtr: 写指针,指示下一个可写位置
    • dnsDict: 字典,将主机名映射到缓冲区索引
    • dnsEntryTTL: 缓存条目生存时间(60秒)
    • dnsMaxCount: 缓冲区最大容量(256)

2. 功能扩展

  • IP地址处理:新增IP地址解析与设置能力,通过ipFromRecord方法从DNS记录提取IP地址。
  • 统一处理流程:CNAME解封装和IP地址设置在同一处理链中协调完成。

关键代码结构

构造函数

  • 移除browser.dns实例检查,直接假设DNS API可用。
  • 移除cnameMaxTTLcnameFlushTime,改用dnsEntryTTL和环形缓冲区TTL管理。

缓存管理方法

  • dnsFromCache(hn): 从缓存获取DNS条目,处理Promise状态和过期检查。
  • dnsToCache(hn, record, details): 将DNS解析结果存入缓存,提取CNAME和IP信息。
  • dnsResolve(hn, details): 执行DNS解析并返回Promise,存入环形缓冲区。
  • dnsShouldResolve(hn): 判断主机名是否需要DNS解析(排除空字符串、IPv6地址和IPv4地址)。

CNAME处理方法

  • cnameFromRecord(hn, record, details): 从DNS记录提取CNAME,应用忽略规则(一方域名、忽略列表、根文档忽略)。
  • uncloakURL(hn, dnsEntry, details): 执行URL中的CNAME替换,支持完整URL重放或路径截断。

请求处理流程

  1. onBeforeSuspendableRequest:

    • 检查缓存中的IP地址并设置details.ip
    • 优先使用缓存结果
    • 若缓存未命中且需要解析,则启动异步DNS解析
  2. onAfterDNSResolution:

    • 统一处理DNS解析结果
    • 若CNAME解封装启用且有效,执行URL替换
    • 若IP地址不同,更新details.ip
    • 必要时重新处理请求

配置处理

  • setOptions方法更新,移除cnameMaxTTL配置处理。
  • 新增缓存重置逻辑:清除dnsListdnsDict

其他变更

  • 移除browser.dns实例检查,简化条件判断。
  • 保留pendingRequests和请求挂起/恢复机制不变。
  • 使用reIPv4正则表达式快速判断IPv4地址。

核心改进总结

  1. 性能优化:环形缓冲区避免内存无限增长,TTL机制自动过期旧条目。
  2. 功能增强:同时支持CNAME解封装和IP地址设置。
  3. 代码简化:移除冗余的浏览器API检查,统一缓存管理逻辑。
  4. 错误处理:DNS解析失败时正确清理缓存条目。
8. Nobel Prize in Physics Awarded for Machine Learning and Neural Networks (www.nobelprize.org)

2024年诺贝尔物理学奖共同授予John J. Hopfield和Geoffrey Hinton,以表彰他们在机器学习与人工神经网络方面的基础性发现和发明。两位获奖者各分享一半的奖项份额,他们的工作为人工智能技术的发展提供了关键基础,对人类社会产生了广泛影响。

9. Uxn (100r.co)

Uxn是一个基于小型虚拟机的个人计算生态系统,允许应用程序在多种系统上运行。其设计秉承实现优先理念,主要面向图形应用,但完全开放,欢迎任何人将其作为发布目标。Uxn使用自身独特的语言进行编程,其程序的分发类似于经典游戏机模拟器的ROM共享。

运行环境 要运行Uxn程序,需要一个适用于您系统的模拟器。提供了主要操作系统(如Linux/BSD、Mac/Plan9、Windows)的模拟器链接,也支持其他平台。用户也可以根据虚拟机规格(VM specs)和输入/输出规格(IO specs)自行实现。

应用示例 生态内包含多种应用,如游戏《Oquonie》和《Donsol》、文本编辑器《Left》、绘图程序《Noodle》、实时编码环境《Orca》、精灵编辑器《Nasu》、字体编辑器《Turye》等。

跨平台特性 同一个Uxn ROM可以在多种桌面计算机、微型电子设备、现代手持设备及浏览器中运行。

模拟器设置与使用 通用的跨平台桌面模拟器依赖SDL2。文章提供了在Arch、Ubuntu、Void Linux、OSX、OpenBSD等系统上安装SDL2的命令。 启动方式包括:双击uxnemu、在终端中执行bin/uxnemu path/to/example.rom、使用启动器、将.rom文件拖到模拟器窗口。 模拟器控制按键包括:F1(缩放)、F2(调试器)、F3(截图)、F4(加载启动器)。按钮映射为:左Ctrl键对应A,左Alt键对应B,左Shift键对应Select,Home键对应Start。

其他系统支持 Uxn还可运行在经典游戏机和旧电子设备上,包括GBA、Nintendo DS、Playdate、DOS、PlayStation Vita、Raspberry Pi Pico、Teletype、ESP32、Amiga、iOS、STM32、IBM PC等。

社区与资源 可通过#uxn on irc.libera.chat或Catlang Discord寻求帮助。文章还列出了AwesomeUXN列表、Uxntal参考文档及教程等资源作为起点。

10. An illustrated proof of the CAP theorem (2018) (mwhittaker.github.io)

CAP定理图解证明总结

核心概念

CAP定理是分布式系统的基础定理,指出任何分布式系统最多只能同时具备以下三种属性中的两种:

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分区容错性(Partition Tolerance)

本文基于Gilbert和Lynch的研究,通过图解方式阐述了CAP定理的系统模型、属性定义与证明过程。

系统模型

文章构建了一个简单的分布式系统模型,包含两个服务器节点($G_1$和$G_2$)。两节点共同维护同一个变量$v$(初始值为$v_0$),节点间及节点与外部客户端间可相互通信并处理读写请求。

属性定义

  • 一致性:写操作完成后的任何读操作,必须返回该写入值或后续更新的值。即客户端向任一节点写入新值后,从任意节点读取均能获得最新数据。
  • 可用性:系统中未故障节点接收到的每个请求都必须产生响应。即节点只要未崩溃,就必须最终响应客户端,不得忽略请求。
  • 分区容错性:网络允许丢失节点间发送的任意数量的消息。即系统在网络分区(节点间通信中断或消息丢失)的情况下仍需正常运行。

定理证明(反证法)

文章通过反证法证明系统无法同时满足这三个属性:

  1. 假设前提:假设存在一个同时满足一致性、可用性和分区容错性的分布式系统。
  2. 触发网络分区:使系统发生网络分区,阻断$G_1$和$G_2$之间的通信。
  3. 写操作(阶段$\alpha_1$):客户端向$G_1$写入新值$v_1$。因系统具备可用性,$G_1$必须响应并确认;但因网络分区,$G_1$无法将$v_1$同步复制给$G_2$。
  4. 读操作(阶段$\alpha_2$):客户端随后向$G_2$发起读请求。因具备可用性,$G_2$必须响应;但因网络分区,$G_2$无法从$G_1$获取最新值,只能返回本地旧值$v_0$。
  5. 得出矛盾:客户端在成功写入$v_1$后,却从$G_2$读取到了旧值$v_0$,这直接违背了一致性原则。

结论

上述执行过程表明,在网络分区发生时,若系统保证可用性,则必然导致数据不一致。因此假设不成立,不存在能够同时满足一致性、可用性和分区容错性的分布式系统

11. Do U.S. ports need more automation? (www.construction-physics.com)

美国港口效率低下,但自动化并非万能解药 文章以国际码头工人协会因反对自动化引发罢工为引,探讨美国港口是否需要更多自动化以提升效率。核心观点认为,虽然美国港口绩效全球落后,但将其原因完全归咎于自动化不足过于简单,实际情况更为复杂。

美国港口绩效确实堪忧。根据世界银行的集装箱港口绩效指数,洛杉矶、长滩等主要港口排名接近垫底,美国整体港口绩效在全球国家中表现最差。移动集装箱所需时间约为中国港口的两到三倍。然而,全球范围内港口自动化普及率很低,2021年仅约4%的全球集装箱吞吐能力来自自动化或半自动化码头。美国在自动化终端数量上其实处于世界前列,洛杉矶等港口已部署自动化设备。

然而,自动化与效率提升之间的关系并不明确。多项研究和报告(如麦肯锡2017年调查、经合组织2021年报告、美国政府问责局2024年报告)均指出,自动化港口的生产率未必高于传统港口,甚至可能降低7%-15%。荷兰鹿特丹港自动化程度高但排名中游,而美国自动化程度最高的洛杉矶港排名却接近末尾。反之,排名靠前的中国洋山港、阿曼萨拉拉港自动化终端数量很少。

自动化效果不彰的原因多样:

  1. 技术局限:自动化设备(如AGV、远程操作起重机)在灵活性、应对异常情况和恶劣天气能力上常不如人工,有时运行速度更慢。
  2. 适用条件:自动化在新建的“绿地”港口、集装箱流量稳定且巨大的港口更容易发挥优势。美国许多港口是改造的“棕地”港口,且流量波动较大。
  3. 协同瓶颈:港口效率取决于整个作业链的协同。若卡车、铁路、码头等环节衔接不畅(如美国港口曾缺乏统一的卡车预约系统),单点自动化无法解决问题。
  4. 成本与投资回报:自动化设备前期投入巨大,投资回收期常达6年以上,若未来吞吐量未达预期则风险很高。
  5. 其他制约因素:工会工作规则可能限制灵活性;港口规模不足难以发挥自动化优势。

除自动化外,美国港口效率低下还有其他重要原因:

  • 港口性质:美国多为“门户港”,进出口货物需经陆路运输,而排名靠前的许多是处理转运货物(一艘船直接转另一艘船)的“枢纽港”,后者作业更快。
  • 运营时间:顶级港口多为24/7全天候运营,美国港口则不然。
  • 协调不足:码头、铁路、卡车公司、仓库等各环节缺乏有效协调,存在信息孤岛。
  • 基础设施投资滞后:如港口疏浚不足,无法停靠超大型船舶。

结论:当前港口自动化并非提升效率的必然或首要解决方案。但文章也指出,全面禁止自动化亦不可取,因为技术将持续进步。应理性看待自动化在特定场景下的潜力,同时需优先解决运营协调、基础设施、工作流程等更基础的系统性问题,才能全面提升美国港口绩效。

12. Video Surveillance with YOLO+llava (github.com)

YOLO+LLaVA 视频监控系统总结

系统概述

这是一个基于AI的视频监控系统,名为Machina,能够实时检测和跟踪摄像头视频中的物体(如人、车辆等),支持完全离线运行。系统集成了YOLO模型进行物体检测,并具备录制视频、截图、高级缩放控制、多分辨率预设、持久化配置和智能帧优化等功能。

核心功能

  • 实时检测与跟踪:使用YOLO模型进行物体识别和追踪。
  • 录制与截图:一键录制视频或保存截图。
  • 离线运行:无需互联网连接。
  • 高级控制:支持缩放、平移、分辨率调整(640x480至1920x1080)和全屏模式。
  • 持久化配置:自动保存用户设置,重启后恢复。
  • 多摄像头支持:自动检测并配置多个摄像头。
  • 性能优化:智能跳帧、动态调整YOLO输入尺寸,确保流畅运行。
  • 额外特性:军事模式(增强检测精度)、10秒即时回放、音频可视化(实验性)、人群检测与聚类算法。

安装与配置

  1. 环境要求:Python 3.8+,CUDA兼容GPU(至少2GB显存),推荐16GB以上内存。
  2. 安装步骤
    • 克隆仓库:git clone https://github.com/PsyChip/machina
    • 安装依赖:pip install -r requirements.txt
    • 手动安装PyTorch:pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
  3. 配置:编辑app.py文件顶部,设置YOLO模型(默认yolo12n)、视频源(RTSP地址或摄像头)及性能参数。
  4. 运行
    • 摄像头:python app.py
    • 指定流:python app.py --stream "rtsp://your-camera-url"
    • 视频文件:python app.py --stream "path/to/video.mp4"

使用与控制

  • 视频源指定:支持通过命令行参数--stream或编辑app.py中的rtsp_stream变量设置(如0为默认摄像头)。
  • 键盘控制
    • Q:退出;R:开始/停止录制;S:截图;F:重置窗口分辨率;M:切换军事模式。
    • 空格:跳帧;Backspace:回放模式;数字键1-6:切换分辨率预设。
    • Enter:全屏;Esc:退出全屏;+/-:调整跳帧率。
  • 鼠标控制:滚轮缩放,右键拖动平移,左键拖动绘制选择框。
  • 默认检测对象:人、车辆等日常物体,可通过修改app.py中的classlist调整。

文件保存

  • 截图保存在snapshots/文件夹。
  • 录制视频保存在recordings/文件夹。
  • 物体图像保存在elements/文件夹。

配置文件

  • config.json:存储应用偏好(如跳帧设置、分辨率、窗口位置)。
  • webcam.json:自动存储摄像头配置(如支持的分辨率、FPS等),支持多实例识别。

故障排除

  • 运行缓慢:启用军事模式(M键)、确保GPU支持CUDA、调整分辨率(数字键1-6)。
  • 摄像头连接失败:检查URL或摄像头连接,尝试使用内置摄像头(设置rtsp_stream = 0)。
  • 调试信息:查看终端输出中的错误消息。

高级功能细节

  • 持久化配置:自动保存和加载设置,支持多摄像头独立配置。
  • 缩放与平移系统:支持6倍缩放、智能物体跟踪优化。
  • 军事模式:采用灰度处理,优化人物和车辆检测,减少跳帧以提高精度。
  • 回放系统:10秒滚动缓冲区,回放时暂停YOLO处理以确保流畅。
  • 分辨率管理:动态调整YOLO输入尺寸,支持自动检测摄像头最大分辨率。
  • 音频功能(实验性):实时音频波形显示、音频流捕获和静音控制。

系统要求

  • Python 3.8+,CUDA兼容GPU(至少2GB显存,开发于NVIDIA RTX 2060),推荐32GB内存。

该系统由PsyChip开发,主要用于实验目的。

13. Wigle.net: All the networks, found by everyone (wigle.net)

Wigle.net 摘要

Wigle.net 是一个全球性的无线网络测绘平台,聚合并展示了由用户众包发现的无线网络信息。其主要功能与界面结构如下:

  1. 核心搜索与筛选功能

    • 地理定位搜索:用户可通过输入经纬度坐标来定位特定区域。
    • 网络标识搜索:支持通过SSID(网络名称)或BSSID(MAC地址)搜索特定网络。
    • 时间范围筛选:可设置日期范围,过滤网络的发现时间。
    • 网络类型与发现状态筛选:提供多个复选框选项,包括:
      • 可能为自由网络
      • 可能为商业网络
      • 无标签网络
      • 仅由“我”发现的网络
      • 仅由“他人”发现的网络
  2. 可视化与图层展示

    • 提供着色视图选项,用于区分不同类型的网络(如蜂窝基站以蓝色显示)。
    • 用户可通过缩放地图来查看单个SSID的详细信息。
    • 引入了 QoS(信号质量) 指标,该指标基于网络的观测次数和观测者数量进行计算。
  3. 历史统计数据图表

    • 随时间变化的WiFi网络数量图:展示历史趋势,并提供全屏视图。
    • 随时间变化的WiFi加密方式图:同样提供全屏视图及一个仅显示最近两年数据的视图。
    • 图表交互:鼠标悬停可查看具体数据,选择范围可缩放,双击可重置视图。用户可修改平滑参数以调整数据展示的粒度。

总结:该平台是一个集成了搜索、高级筛选和动态数据可视化的工具,旨在帮助用户探索和分析全球范围内已发现的无线网络分布、类型、加密情况及其历史变化。

14. John Hopfield and Geoff Hinton Win Physics Nobel Prize [pdf] (www.nobelprize.org)

2024年诺贝尔物理学奖授予机器学习先驱

获奖者与奖项
瑞典皇家科学院将2024年诺贝尔物理学奖授予 约翰·霍普菲尔德(John J. Hopfield)杰弗里·辛顿(Geoffrey E. Hinton),以表彰他们“为实现人工神经网络机器学习的基础性发现和发明”。奖金1100万瑞典克朗由两位获奖者平分。

核心贡献
两位获奖者利用物理学工具,为当今强大的机器学习技术奠定了基础:

  • 霍普菲尔德 发明了一种关联记忆网络,能够存储并重建图像及其他数据模式。该网络借鉴物理学中原子自旋系统的能量模型,通过调整节点间的连接权重使存储模式能量最低。当输入残缺或扭曲的图像时,网络会系统性地降低整体能量,从而逐步恢复出最接近的原始模式。
  • 辛顿 以霍普菲尔德网络为基础,提出了玻尔兹曼机器。该方法运用统计物理学原理,通过学习数据中的特征进行分类或生成新样本。辛顿的工作推动了机器学习的突破性发展。

技术背景与应用
人工神经网络受大脑结构启发,通过模拟神经元的节点和突触连接进行学习与模式识别。两位科学家从1980年代起在这一领域开展关键研究,其成果已广泛应用于物理学、新材料开发等众多领域,为人工智能技术奠定了基础。

科学家简介

  • 约翰·霍普菲尔德(1933年生于美国芝加哥),普林斯顿大学教授。
  • 杰弗里·辛顿(1947年生于英国伦敦),加拿大多伦多大学教授。
15. A popular but wrong way to convert a string to uppercase or lowercase (devblogs.microsoft.com)

常见但错误的字符串大小写转换方法

文章指出了在编程中,将字符串转换为全大写或全小写的一种常见但错误的方法——逐字符处理,并分析了其错误原因。

主要错误与原因

  1. 错误使用 std::tolower

    • 直接使用 std::tolower 作为 std::transform 的函数参数是非法的,因为 std::tolower 不是可取地址的函数。应使用 lambda 表达式包装。
    • std::tolower 仅适用于窄字符(char,且要求为 unsigned char),不适用于宽字符(wchar_t)。将其用于 wchar_t 会导致未定义行为,因为 wchar_t 的值可能超出其有效范围。
  2. 错误假设上下文无关的逐字符转换

    • 即使改用适用于宽字符的 std::towlower,逐字符处理在 Unicode(特别是 UTF-16 编码)环境下仍然是错误的。
    • 对于超出基本多文种平面(BMP)的字符(如 U+10C80),它们在 UTF-16 中由两个码元(代理项对)表示。逐个传递码元给 towlower 无法识别其关联关系,导致转换失败。
    • 大小写转换可能改变字符串长度。例如,德语小写字母 “ß” (U+00DF) 转换为大写可能变成 “SS”;法语带重音符号的小写字母 “à” 可能转为不带重音的大写 “A”。逐字符处理无法处理这种长度变化。
  3. 对窄字符串(std::string)的同样错误

    • 对包含非 ASCII 字符(如 UTF-8 多字节序列)的 std::string 逐字符应用 std::tolower 同样会引发未定义行为或转换错误。

正确的解决方案

文章建议,如需进行正确的语言环境相关的大小写映射,应使用专用函数:

  • 在 Windows 平台,可使用 LCMapStringEx 函数,并指定 LCMAP_LOWERCASELCMAP_UPPERCASE 等标志。
  • 使用国际组件(ICU)库中的 u_strToUpperu_strToLower 函数。

核心在于,必须使用能够理解 Unicode 标准和语言规则的、专门的大小写转换函数,而不能假设字符大小写转换是简单的一对一映射。

16. Fun with Go Iterators (xnacly.me)

文章探讨了Go 1.23版本新增的迭代器功能,并指出其使用上的不便之处,即无法像JavaScript那样轻松实现链式调用。为此,作者设计并实现了一个基于Go泛型的自定义迭代器包装器,以提供更流畅、类似JavaScript的链式编程体验。

Go迭代器的基本情况

  • Go 1.23引入了iter包,支持对常量、容器(如切片、映射、数组、字符串)和函数进行迭代。
  • 原生迭代器创建方式较为繁琐,而消费迭代器相对直接。
  • 原生方式不支持便捷的链式操作,例如reverse().map().filter().forEach()这样的连续调用。

自定义迭代器解决方案

作者通过一个泛型结构体Iterator[V any]包装Go的迭代器(iter.Seq[V]),并附加一系列方法来实现链式调用。

  • 核心方法
    • From(slice []V):从切片创建迭代器。
    • Collect():将迭代器收集回切片。
    • Each(f func(V)):遍历迭代器并对每个元素执行函数。
    • Reverse():反转迭代器中的元素顺序。
    • Map(f func(V) V):对每个元素应用映射函数。
    • Filter(f func(V) bool):过滤迭代器,保留满足条件的元素。

实现细节与示例

  • 实现逻辑:方法通过复制底层迭代器并返回新的迭代器来实现链式调用,避免了栈溢出问题。
  • 示例
    • 对数字切片进行反转、平方映射、偶数过滤并打印。
    • 处理Unicode字符串:反转、过滤空格、转大写并收集。
    • 处理自定义结构体:映射计算哈希值并遍历。
  • 测试结果:附有完整的测试代码和运行输出,验证了各功能的正确性。

总结

作者创建的迭代器包装器简化了Go中函数式风格的操作,提供了更符合直觉的链式API。尽管作者理解Go团队未采用此设计的考量,但该方案仍展示了如何利用Go的泛型系统增强迭代器的易用性。

17. Run Llama locally with only PyTorch on CPU (github.com)

仅使用PyTorch在CPU上本地运行Llama模型

动机

作者旨在深入理解大型语言模型的内部细节,如各层的激活、权重形状和输出概率分布等。虽然存在Ollama、torchchat、llamafile和Hugging Face transformers等更高效或更流行的工具,但它们通过API隐藏了这些底层细节。作者对Meta未提供仅依赖PyTorch运行模型的示例感到意外,但感谢其公开权重。

设置步骤

  1. https://www.llama.com/llama-downloads/下载相关模型权重。
  2. 安装依赖:pip install -r requirements.txt
  3. 进入llama-models目录并安装:cd llama-models; pip install -e .; cd ..
  4. 运行推理脚本:python minimal_run_inference.pypython run_inference.py

脚本说明

  • minimal_run_inference.py:代码简洁,适合快速探索或修改,是入门的好起点。
  • run_inference.py:更详细,实现了beam-search算法并包含大量解释性注释,适合深入理解。

技术细节

依赖

  • PyTorch:核心框架。
  • fairscale(Meta发布):提供可扩展、并行化的PyTorch操作替代。
  • blobfile:处理文件I/O,供Tokenizer使用。

模型架构与权重

Meta提供了模型权重,但需结合llama-models仓库中的模型架构。该架构依赖PyTorch和fairscale,并需初始化torch.distributed和fairscale。官方代码中硬编码了CUDA使用,作者修改后打包为git子模块以支持CPU。

分词器

分词器位于llama-models中,使用与权重一同分发的字典文件。文件中的字符串(映射到唯一整数索引)采用base64编码,解码后可查看实际token。

Beam-search算法

作者实现了beam-search而非贪婪解码。该算法在第一步选取k个最可能的token作为种子,后续每步仅扩展最可能的token,最终选择整体最可能的序列。

性能表现

  • CPU运行(Mac M1 Air, 16GB RAM):
    • 1B模型:平均约1 token/秒。
    • 3B模型:约1 token/60秒。
    • 8B模型:因内存过高被系统终止。
  • MPS(Metal Performance Shaders)运行
    • 初始推理速度更快,但内存占用显著更高。
    • 已知torch.triu存在bug,作者在子模块中修复。
    • 序列长度超过100-200 token后,吞吐量下降至CPU的一半左右,可能因内存压力增大。

GPU内存疑问

作者使用批大小为1,无批次并行。GPU内存占用更高可能源于注意力头参数的加载方式(GPU同时加载所有头),而CPU逐个加载。

18. Windows dynamic linking depends on the active code page (nullprogram.com)

Windows动态链接依赖活动代码页

核心现象

Windows系统中,文件系统路径长期使用WTF-16编码,但PE(Portable Executable)文件导入表中的模块名称采用八位字节(octets)编码。当模块名称包含超出ASCII范围的字节时,动态链接器必须将这些字节解码为Unicode才能构造查找路径。解码过程依赖于进程的活动代码页(ACP),导致链接器加载的具体DLL可能因系统代码页而异。

技术演示

作者构造了两个示例DLL:

  • õral.dll(在CP-1252代码页下对应字节 C3 B5 ...
  • õral.dll(在CP-1252下对应 F5 ...,在UTF-8下对应 C3 B5 ...

两者在文件系统中均以 ral.dll 结尾,但导入表中存储相同的前缀字节序列 C3 B5 ...。通过应用程序清单控制代码页,可在不修改系统设置的情况下改变程序行为:

  • 使用CP-1252代码页时,字节 C3 B5 被解码为 õ,加载第一个DLL。
  • 使用UTF-8代码页时,相同字节被解码为 õ,加载第二个DLL。

构建与验证

  • 使用GCC和特定工具链(如w64devkit)构建两个DLL和一个导入库 detect.lib,确保导入表中包含目标字节序列。
  • 通过工具 peports 验证PE文件导入表中模块名称的原始字节(如 \xc3\xb5ral.dll)。
  • 运行测试程序时,不同代码页下会调用不同DLL中的 get() 函数,返回标识字符串(如"ANSI"或"UTF-8")。

技术意义与应用

  • 主要影响:此现象使得程序的动态链接行为可能隐式依赖于系统代码页,而非显式编码设置。
  • 潜在风险:恶意软件可能利用该特性,通过导入表中的非常规字节序列误导静态分析工具(这些工具常假设模块名称为UTF-8编码),从而绕过检测。
  • 限制:作者认为在正常开发中,直接检测代码页更为直接,该技术实用性有限,但可作为安全分析的关注点。
19. Show HN: Compiling C in the browser using WebAssembly (wasmer.io)

在浏览器中通过WebAssembly编译C语言

随着Wasmer 4.4Wasmer JS SDK 0.8.0 的发布,开发者现在可以在任何支持Wasmer的平台(包括JavaScript环境和主流浏览器Chrome、Safari、Firefox)上运行clang编译器。这意味着能够从几乎任何地方编译C程序,标志着“使任何软件都能通过WebAssembly运行”的一个重要里程碑。

核心优势与应用场景

  1. 简易的工具链:只需安装Wasmer,即可通过其CLI直接将C代码编译为WebAssembly,无需复杂的工具链配置。
  2. 自托管能力:WASIX现在可以自我编译,也能编译任何C程序。
  3. JavaScript集成:可以通过Wasmer JS SDK在JavaScript项目(包括浏览器和Node.js)中直接编译C代码。这为在线IDE等应用在浏览器中支持C语言编译运行铺平了道路。
  4. 可复现的构建:使用相同版本的Wasmer可以在任何地方实现一致的构建结果。

功能演示

文章提供了一个使用经典donut.c程序进行演示的示例:

  • 本地编译运行
    wasmer run clang/clang --dir=. -- -Wno-implicit-int donut.c -o donut.wasm
    wasmer run donut.wasm
    
  • 浏览器内编译运行:可以在wasmer.sh上体验完整的浏览器内工作流。

clang包不仅能编译示例程序,还能处理更复杂的WASIX项目。目前该包未压缩大小约为100MB,团队正在努力优化(目标压缩后约30MB)。

JavaScript SDK 用法

开发者可以在JavaScript项目中轻松集成clang。以下为示例代码核心流程:

  1. 初始化SDK并从注册表加载clang包。
  2. 创建一个虚拟目录(Directory)并写入C源代码文件。
  3. 调用clang实例编译该C文件,生成.wasm输出文件到虚拟目录中。
  4. 读取生成的.wasm文件,创建并运行该WebAssembly模块实例。
  5. 获取并输出运行结果(如“Hello World”)。

此外,clang编译器可自动集成wasm-opt进行优化,在编译时通过--use wasmer/wasm-opt参数启用。

未来展望

该功能的实现为Wasmer生态开启了更多可能性:

  • 在WASIX内直接编译原生Python库(例如实现pip在安装时编译为Wasm)。
  • 将Static Hermes编译到WASMIX,以从JavaScript生成原生Wasm文件。
  • 更多基于LLVM的项目可以轻松编译为WebAssembly。

这项工作是WASIX生态系统的重要成果,为跨平台软件编译与运行提供了新途径。

20. Rust is rolling off the Volvo assembly line (tweedegolf.nl)

本文讲述了Rust语言在瑞典汽车制造商沃尔沃(Volvo)的实际生产应用案例。核心人物是Julius Gustavsson,自2019年起担任沃尔沃低功耗处理器ECU(电子控制单元)的首席软件架构师。该ECU负责管理车辆的低电压电源系统(如12V线路),确保车辆在无人使用时系统完全关闭以避免电池耗电,并在需要时唤醒电气系统。

选择Rust的原因 Julius拥有约15年使用C/C++的开发经验,深刻体会到内存相关缺陷在各类项目中始终是顽疾,代码依赖许多未明示的“不变量”和假设,随着项目复杂度和团队规模增长,这必然导致问题。他早在Rust 1.0版本发布前(2015年)就已关注该语言,并在加入沃尔沃后通过业余项目积累了初步经验。尽管学习Rust的概念(如所有权系统)需要时间,但一旦理解,他便对其充满热情。他选择Rust的关键因素包括:该ECU并非安全关键部件、处理器为通用的Arm Cortex-M架构,这消除了技术和审批障碍。

项目实施与成效 2020年,团队曾用C语言制作概念验证,随后转向Rust进行全面开发。项目的一个主要挑战是需重新实现与车辆其他系统通信的CAN协议以及沃尔沃的诊断和标准协议。尽管工作量较大,但他们获得了更高的代码质量,且相比C/C++,编写的缺陷显著减少。团队成员对Rust体验积极,一位离职同事甚至表示“很难再回去使用非Rust的语言”。Julius本人则始终保持审慎态度,持续寻找Rust的潜在缺陷,但最终认为Rust确实表现优异。

优势与推荐 Julius明确推荐使用Rust,尤其适用于对可靠性和可用性有严格要求的项目。他认为Rust能提供对代码正确性的信心,其工具链(如Cargo)能提升开发高质量软件的体验。此外,Rust编译器的安全性保证使得代码更易于被其他团队成员理解和安全地修改,这对于人员流动性高的团队尤其有利。但他也指出,Rust可能不太适合快速原型开发,因为编译器会强制开发者提前处理边缘情况和细节。

挑战与工具缺口 项目开发中遇到的困难主要源于工具支持不足,例如在嵌入式目标上运行单元测试困难、代码覆盖率、运行时分析、软件物料清单(BOM)及许可证跟踪等方面存在挑战。虽然近年来工具生态(如“Knurling项目”)已有显著改善,但仍需开发者自行填补许多空白。Julius呼吁构建更多、更完善的开发工具。

未来展望 此次Rust项目在沃尔沃取得了显著成功,管理层对结果印象深刻,并已达成共识,计划在更多项目中探索使用Rust。Julius本人也在积极推动Rust在公司的更广泛应用。文章认为,尽管仍有工作需要完成,但随着Ferrocene等面向安全关键领域的Rust工具链日趋成熟,Rust已为更深入地进入汽车行业做好了准备。

21. The costs of the i386 to x86-64 upgrade (blogsystem5.substack.com)

从i386到x86-64升级的成本

本文探讨了从32位(i386/ILP32编程模型)升级到64位(x86-64/LP64编程模型)所带来的利弊,重点关注对代码密度和性能的影响。

核心概念:代码密度

  • 定义:衡量执行特定操作所需机器码字节数的指标。
  • 影响因素:指令集架构(CISC与RISC的权衡)以及代码中地址(指针)的大小。
  • 重要性:较低的代码密度会导致更大的程序体积、更高的内存占用、更慢的磁盘I/O以及关键的L1指令缓存未命中率增加。

理论预期 vs. 实际观察

理论上,LP64模型将指针和长整型从32位扩展到64位,预期会导致代码和数据体积膨胀,降低代码密度。然而,实际测试揭示了更复杂的图景。

代码密度的意外结果(在x86-64上)

  • 反例:对比多个操作系统的安装镜像(如Debian, Ubuntu),其x86-64版本有时甚至比i386版本更小。
  • 原因分析(以x86-64为例):
    1. 更优的调用约定:x86-64优先使用寄存器传参,减少了栈操作指令。
    2. RIP相对寻址:数据和代码地址常以相对于指令指针(RIP)的偏移量编码,避免了庞大的64位绝对地址。
    3. 更多通用寄存器:减少了为保存临时值而产生的内存访问指令。
  • 对比其他架构:在PowerPC上,64位二进制文件确实比32位版本更大,表明x86-64的指令集特性在缓解指针膨胀方面具有优势。

数据密度的真实代价

尽管代码可能更紧凑,但数据结构的膨胀带来了显著的性能损失。

  • 示例:一个包含1000万个节点的链表程序。
    • 32位模式:每个节点8字节(4字节整数 + 4字节指针)。
    • 64位模式:每个节点16字节(4字节整数 + 4字节填充 + 8字节指针)。
  • 性能影响
    • 运行时间:64位版本比32位版本慢约27%
    • 缓存未命中率:64位版本的缓存未命中次数接近32位版本的两倍
    • 根本原因:节点大小翻倍导致内存占用增加,缓存效率大幅降低。

被放弃的替代方案:x32 ABI

  • 理念:在64位内核上运行使用64位指令集,但采用32位指针的用户空间程序,以期获得性能与内存的最优平衡。
  • 现状:尽管技术上可行且能产生更紧凑的二进制代码,但x32 ABI已基本被弃用,没有主流发行版提供支持。

结论

从i386到x86-64的升级并非没有成本:

  1. 收益:获得了巨大的地址空间(解决了4GB限制)、原生的64位算术运算能力,以及在x86-64架构上因指令集优化带来的代码密度不降反升的潜在好处。
  2. 代价:LP64模型导致了数据密度的普遍下降。指针和相关数据类型的大小翻倍,使得数据结构占用更多内存,加剧了缓存压力,这在对内存占用和缓存敏感的工作负载中会转化为可测量的性能损失。

最终,LP64因其带来的便利性和强大的寻址能力而成为主流选择,但用户和开发者应意识到,其在内存效率和特定场景下的性能方面存在固有的折衷。

23. Smart TVs are like "a digital Trojan Horse" in people's homes (arstechnica.com)

智能电视:家中的“数字特洛伊木马”

核心主题

文章标题将智能电视比作“数字特洛伊木马”,强调连接电视(CTV)行业在数据收集和跟踪方面的隐患,引发政治、歧视性和监管担忧。

政治影响

报告作者指出,CTV行业广泛的数据收集和跟踪可能产生政治影响。政治候选人可利用这些数据(如政治倾向和“情感状态”)运行“隐秘的个性化竞选活动”。在没有透明度或监督的情况下,这可能导致数百万条个性化、操纵性和高度定向的政治广告传播,散布虚假信息,并进一步加剧美国政治极化,威胁民主文化。

潜在歧视性影响

CDD的报告显示,美国黑人、西班牙裔和亚裔美国人因快速采用数字媒体服务和品牌忠诚度,被营销人员视为高利润目标。这些社区是免费广告支持流媒体(FAST)频道的关键广告对象。数据收集可能带来歧视性影响,特别是在政治广告中,可能导致针对这些社区的虚假信息传播和选民压制。报告强调,种族和族裔数据收集用于广告定向属于敏感信息,不应纳入CTV等平台的用户数据档案。

监管呼吁

CDD向美国联邦贸易委员会(FTC)、联邦通信委员会(FCC)、加州总检察长和加州隐私保护局(CPPA)发出信函,要求调查美国的CTV行业,涵盖反垄断、消费者保护和隐私问题。报告指出,CTV作为不受监管的媒体,与其他互联网平台一起成长,用户(包括付费无广告流媒体用户)在保护数据方面面临挑战。CDD要求监管机构调查CTV实践,并考虑基于现有立法(如1988年的《视频隐私保护法》)进行加强。此外,呼吁反垄断监管机构深入审查亚马逊、康卡斯特和迪士尼等CTV企业的商业实践,以促进数字和连接电视市场的竞争和多样性。

24. Is the attack helicopter dead? (hushkit.net)

攻击直升机是否已过时?

乌克兰战争暴露了攻击直升机的重大弱点。俄罗斯在入侵中损失了大量攻击直升机,同时,廉价的小型无人机在对抗装甲目标时展现出显著效能。这引发了一个核心问题:昂贵复杂的攻击直升机是否已经过时?

乌克兰战争的教训

  1. 装甲部队的脆弱性:双方装甲部队都遭受重大损失。传统主战坦克(MBT)的防护重点在正面,顶部防护相对薄弱,极易被巡飞弹药(如无人机)和精确炮火(如HIMARS)攻击。主动防护系统尚未完全成熟,且西方装甲部队普遍缺乏探测和反制无人机的能力。
  2. 攻击直升机的困境:俄罗斯攻击直升机在未取得制空权、缺乏地形掩护的条件下,在敌控区上空作战,损失惨重。原因是多方面的:
    • 威胁多元:面临分散隐蔽的步兵部队、先进的便携式防空导弹(MANPADS)以及远程防空系统威胁。
    • 脆弱性高:其防护和电子对抗措施似乎效果不佳,在突防和持续暴露过程中极易被锁定和摧毁。
    • 作战模式被动:多用于高风险的直接火力支援,而非更安全的远程间接打击。

未来生存与效能的关键因素

文章认为,攻击直升机并非完全过时,但其作战概念和能力必须革新,以适应以无人机和精确火力为特征的现代战场。成功运用需依赖以下因素:

  1. 网络化与情报优势:通过卫星、雷达、电子侦察和无人机等获得近实时的目标情报,并依靠强大的指挥控制网络实现“传感器到射手”的快速连接。
  2. 作战概念转变
    • 防御作战:在己方领土上,依托地形和防空掩护,攻击直升机仍可发挥有效作用。
    • 进攻作战:应彻底转向 远程、间接火力打击 模式。直升机不再深入敌后,而是在己方安全空域,作为“高度机动的精确炮兵单位”,发射远程导弹(如“硫磺石”导弹,射程超40公里)打击敌方装甲集群、后勤线或高价值目标。
  3. 技术升级
    • 武器:采用发射后不管、射程远、能对抗反应装甲的导弹。
    • 平台:可能利用中型直升机(如“野猫”、“梅林”)搭载更多、更重的远程武器,甚至整合“空射效应”系统,即从直升机上投放侦察或攻击无人机,拓展打击范围和灵活性。
    • 防护:加强对无人机(包括自杀式无人机)的探测与反制能力,可能借鉴海军近防系统(如速射炮、电子战)或定向能武器的思路。

结论

攻击直升机并未死亡,但其角色必须进化。未来的反装甲作战将是 网络中心战 的一部分,依赖于:

  • 持久广域监视:提供战场态势感知。
  • 远程精确火力:由地面火炮或直升机作为投射平台。
  • 无人机与有人机协同:直升机作为节点,指挥控制无人机群执行侦察、诱骗或攻击任务。

最终,攻击直升机部队的有效性将不再取决于平台本身的单打独斗,而在于其作为网络化作战体系中一个远程、机动火力节点,能否在复杂的威胁环境下生存并高效投射精确火力。这要求在概念、战术和技术上进行全面创新。

25. The Nazi of Oak Park (www.chicagomag.com)

文章摘要

背景与人物 本文改编自《我们的纳粹:一个美国郊区与邪恶的相遇》一书,讲述了芝加哥橡树园河林高中管理员莱因霍德·库勒的真实故事。库勒于1957年以难民身份从德国移民美国,其登记证书显示他曾在纳粹骷髅师服役,并担任过格罗斯-罗森集中营的守卫。然而,他在移民申请和求职时隐瞒了这段历史。

在橡树园的生活与工作 1959年,库勒入职橡树园河林高中,从普通保洁员逐步晋升为首席管理员。他工作勤奋尽责,深受同事和校方信任,被视为学校不可或缺的支柱。库勒在社区低调生活,安分守己,与家人在郊区过着平静的蓝领生活。

身份曝光与争议爆发 1982年12月,美国司法部特别调查办公室(OSI)启动对库勒的调查,其纳粹历史被媒体曝光。校监杰克·斯旺森得知后陷入两难。社区迅速分裂:一方面,库勒的同事和部分居民为他辩护,强调其数十年来的良好品行,认为过去不应影响现在;另一方面,以当地犹太居民蕾·林·托佩罗夫和里玛·卢宁·舒尔茨为首的人士强烈抗议,认为纳粹集中营守卫不应在公立学校工作,这涉及基本的道德和教育责任。

校董会的抉择 校董会面临巨大压力。支持库勒的员工提交请愿书,要求等待司法判决;反对者则举行集会,要求立即解雇。在多次闭门会议后,校董会于1984年1月24日发表声明:尽管不判断库勒在法律上的罪责,但“任何前纳粹集中营守卫都不能受雇于本学区”。库勒被安排于1984年7月1日前“停职退休”,并继续领取薪水至学年结束。这一决定是校董会与校方管理的妥协结果,旨在平衡道德谴责与对长期雇员的“公平”。随后的相关会议记录被封存近40年。

后续与结局 1984年11月,移民法官裁定库勒参与纳粹迫害的证据确凿。经历多次上诉失败后,库勒于1987年被驱逐出境,返回德国。此后,德国检察机关决定不对其提起诉讼。库勒于2006年在德国去世,享年85岁,至死未因战争罪行受到审判。

核心冲突 整个事件揭示了个人历史罪行与当下社会身份之间的尖锐矛盾,展现了在一个以进步和包容闻名的社区中,面对“身边之恶”时的道德困境、历史记忆与社会正义的激烈交锋。

26. How private intelligence companies became the new spymasters (engelsbergideas.com)

在数字技术深刻重塑情报领域的当下,私人情报公司正崛起为与国家级情报机构并驾齐驱的重要力量。数字数据的爆炸式增长、全球监控网络的扩张以及商业技术能力的飞速提升,使得情报收集、分析和行动的方式发生了根本性变革。

私人情报公司的崛起与能力

  • 数据霸权与监控网络:全球超过十亿台摄像头及各类数字设备构成了庞大的监控网络,使得现实与网络空间中的大量行为数据被持续记录。私人公司(如Recorded Future)通过扫描全网、挖掘暗网数据、分析海量图像与企业记录,能够实时监测并干扰国家级网络攻击(例如发现中国通过台湾和韩国摄像头入侵印度电网)。
  • 深度与暗网情报:公司(如Flashpoint)通过虚拟身份渗透极端组织,或追踪加密货币等数字足迹来收集情报,弥补了传统人力情报的局限。
  • 基础设施的洞察力:科技巨头(如微软、谷歌)因其掌握的核心数字基础设施(邮箱、操作系统、云平台),拥有比许多国家机构更庞大的信号情报能力,能直接监测并曝光高级持续威胁(如“伏特台风”黑客组织)。
  • 商业卫星的普及:商业卫星产业的爆发使国家能够以较低成本获得近乎全覆盖的遥感情报,甚至用于人脸识别等精细任务。

情报工作的民主化与公私协作

  • 开源情报的价值:公开来源信息(如卫星图像、社交媒体、泄露数据)在情报中的占比日益增加,有时能替代部分秘密情报。分析师通过公开数据就能发现关键军事设施(如中国新建导弹发射井)。
  • 共享与公开化:私人公司倾向于公开其网络威胁发现,形成了更开放、基于证据的反情报社区。情报机构也越来越多地购买和发布商业卫星图像以揭露对手行动。
  • 人才与灵活性优势:私人部门在薪资、工作条件和人才吸引力上(如对顶尖科技人才的吸引力)往往优于传统情报机构,能更灵活地汇聚全球数据与技能。

局限、挑战与争议

  • 秘密情报不可替代:开源情报无法获取最核心的秘密信息,例如窃听的战争计划、机密武器研发进展等,这些仍需依赖国家级情报机构。
  • 数据融合的困境:公开与秘密数据的融合面临技术和制度障碍。在“低侧”(非密)环境查询公开数据可能暴露情报意图,而将大量数据上移至“高侧”(涉密)系统则成本高昂。
  • 法律与伦理约束:民主国家政府在数据收集和使用上受到法律严格限制(如需授权令、比例原则),而私人公司则无此类约束,这导致公私能力差距拉大。中国则采取更激进的大规模数据获取策略用于情报和影响力操作。
  • 加密技术的普及:端到端加密的广泛使用提高了通信保密性,但同时也使得情报机构的拦截工作更加困难。私人科技公司推动的隐私保护趋势进一步增加了情报收集的复杂性。

结论 私人情报公司的兴起标志着情报工作的“民主化”与技术化转向。它们凭借海量数据、先进技术及灵活性,成为国家情报机构的有力补充甚至竞争者。然而,最深层次的秘密情报、法律伦理的限制以及公私数据的有效融合,仍是未来情报体系面临的核心挑战。理想的模式可能是构建一个更开放、协作的“公私融合”情报生态系统,但这需要克服巨大的制度与技术障碍。

27. The missing middle: firms in developing countries (asteriskmag.com)

本文探讨发展经济学中的“缺失中间地带”概念,主张将焦点从宽泛的宏观增长策略或狭窄的随机对照试验转向企业增长,认为这是推动国家经济发展的关键中介路径。

核心论点

  • 发展经济学的根本问题是如何使贫穷国家富裕,但传统方法存在局限:随机对照试验擅长评估局部干预效果,却难以解决宏观增长问题;而直接推行宏观经济增长策略(如贸易开放)则面临不确定性、成本高和实施难等挑战。
  • 作者提出企业应作为“缺失中间地带”:一国经济增长本质上是其企业增长的聚合结果(企业数量增加、单个企业平均增长、高增长企业市场份额扩大)。聚焦企业增长能结合RCT的实证严谨性与增长议题的重要性。

发展中国家企业的五大研究发现

  1. 企业规模小且增长停滞
    与美国企业“不增长则淘汰”的模式不同,印度、墨西哥等发展中国家企业增长极缓慢,平均存活20年仅增员20%。这导致企业长期保持小规模,限制产业升级和高附加值生产。

  2. 自雇者更接近“隐性失业”而非创业者
    发展中国家超50%的就业为自雇(非洲高达77%),但证据显示自雇者行为模式类似失业者,而非追求扩张的企业主。微贷等政策对提升其企业规模效果有限,暗示官方失业率被低估(如印度实际失业率可能达25%),亟需通过正规部门企业增长创造就业。

  3. 市场规模小与信息摩擦制约企业成长
    基础设施不足和交通成本高导致市场分割,企业难以触达远方消费者;信息不透明使消费者无法选择更高效的供应商。例如印度喀拉拉邦引入手机后,渔船主跨村购买船只,促使低效造船厂淘汰。改善交通基础设施和推广数字信息平台可缓解此问题。

  4. 技术与管理实践落后
    发展中国家企业即使规模较大,也较少采用前沿技术。技术转移需配套知识培训(如中国钢铁厂案例)。管理差距同样显著:印度纺织企业经管理培训后利润显著提升,但多数企业不了解或抵触先进管理实践。外部培训和咨询干预具有长期效果。

  5. 出口推动企业学习与质量升级
    国际贸易迫使企业学习先进技术与管理,并倾向提升产品质量而非单纯压低成本(如埃及地毯制造商案例)。质量升级是提升竞争力和避免被低成本国家取代的关键路径。

政策启示

  • 国际发展应优先支持企业增长相关干预,如改善市场连通性、提供技术管理培训、创造出口机会等。
  • 这种路径既能创造大规模正规就业、推动长期经济增长,也比针对个别家庭的碎片化援助更具杠杆效应。

文章强调,发展经济学需在实证方法基础上,重新聚焦企业这一增长引擎,以设计出可规模化且有效的增长促进政策。