2024-06-30

28 篇热帖

1. Show HN: Drop-in SQS replacement based on SQLite (github.com)

SmoothMQ: 基于 SQLite 的 SQS 即插即用替代品

SmoothMQ 是一个基于 SQLite 的 Amazon SQS(Simple Queue Service)即插即用替代品,旨在提供更平滑的开发者体验。它允许用户在任何云平台上运行私有 SQS 实例,并支持与现有 SQS 客户端的无缝集成。

主要功能

  • UI 界面:提供功能完整的用户界面,用于管理队列和搜索单个消息。
  • 可观测性与跟踪:内置可观测性和跟踪功能,便于监控消息流和系统状态。
  • 消息调度:支持消息调度,允许用户设置消息的发送时间。
  • 速率限制:具备速率限制功能,以控制消息处理速度,防止过载。
  • 私有部署:可作为单一 Go 二进制文件部署,便于在任何环境中快速启动。

部署与运行

  • SmoothMQ 以单一 Go 二进制文件形式部署,启动后会在端口 :3000 上运行 UI 界面,在端口 :3001 上运行 SQS 兼容服务器。
  • 用户无需修改现有 SQS 客户端配置,只需将端点 URL 更改为 SmoothMQ 服务器地址即可连接。

兼容性与使用示例

  • 与任何语言和 SQS 客户端兼容,例如 Python 的 boto3Celery
    • Python 使用示例
      import boto3
      sqs = boto3.client("sqs", endpoint_url="http://localhost:3001")
      sqs.send_message(QueueUrl="...", MessageBody="hello world")
      
    • Celery 集成:可直接作为消息代理使用,如 broker_url="sqs://...@localhost:3001"

UI 功能

  • 通过 UI 界面,用户可以轻松管理队列、查看消息详情,并搜索特定消息,提升了操作便捷性和调试效率。
2. Inside a $1 radar motion sensor (10maurycy10.github.io)

一款1美元雷达运动传感器内部解析

基础功能与核心疑问

作者购买了廉价微波运动传感器,好奇中国如何以不到一美元的成本制造雷达。传感器工作简单:连接5V电源和地,加上3V3引脚的去耦电容后,当5米内有人移动时,OUT引脚会上升至3V并保持3秒。但其工作原理引发探究。

芯片与信号处理

主控芯片BISS0001数据手册显示它原本用于红外运动传感器。雷达测速测动的原理是:发射连续载波,将接收信号与发射信号混频产生低频中频信号。运动物体反射会导致相位变化,产生几赫兹的拍频。BISS0001芯片仅需检测毫伏级变化即可实现运动感应。中频信号从芯片14脚输入,放大后从16脚输出,便于示波器观测。

RF硬件结构

电路板右侧为BISS0001(放大器、比较器和定时器),左侧则用少量元件实现全部射频功能:

  • 单晶体管振荡器:工作在3.18 GHz,发射极S形走线作为微波谐振器和天线,通过谐振器与平行铜迹形成的电容实现反馈。
  • 潜在双振荡器机制:微波振荡被约20 MHz脉冲调制。当振荡器运行时,改变33 pF电容,提升发射极电压直至振荡停止;随后220欧姆电阻放电电容,在几纳秒内重启振荡。

超再生接收机原理

该脉冲机制使传感器作为超再生接收机工作:

  • 晶体管增益超过1时,振荡器不会立即启动,需要微小信号触发。
  • 任何谐振器中的信号会被反复放大,直至充电容并重启周期。由于幅度指数增长,微小射频信号即可使其提前启动,将振荡器转化为敏感接收机。
  • 关断时间约15纳秒,2.5米外静态物体的返回信号在振荡器启动期间到达,充当雷达本振。超再生接收机检测静态与运动返回信号干涉产生的幅度调制信号。
  • 在室内多反射环境中效果良好;室外缺乏静态返回时则性能不稳。

改造实验

1. S波段发射机改造

移除导致20 MHz脉冲的电容,传感器变为发射机:通过在振荡器施加信号可实现频率调制,循环电源即可开关键控。此时传感器仍可作为雷达工作,但中频信号大幅减弱,灵敏度显著下降,因为振荡器本身作为混频器下变频接收信号,但缺乏增益。

2. 双稳态雷达实验

将另一未修改模块置于发射机旁作接收机,构成更传统的雷达设置:

  • 返回信号更一致,幅度异常消失。
  • 但接收机持续受发射机射频影响,远距离返回信号较弱。
  • 作为室内运动传感器效果较差(需显著靠近/远离运动才能触发)。
  • 但用作速度传感器效果良好:对中频信号进行FFT或过零检测,可计算速度(波长×拍频÷2)。例如15 Hz拍频对应0.7 m/s速度。
  • 两模块间距1-2米时,室外性能优于单模块,最佳灵敏度区域位于模块之间。

总结

这款廉价传感器利用超再生接收原理,通过单晶体管振荡器与脉冲调制实现微波运动感应。其性能依赖室内反射环境,改造后可提升为速度传感器或双稳态雷达,体现了低成本射频设计的巧妙与局限性。

3. Show HN: I am building an open-source Confluence and Notion alternative (github.com)

Docmost:开源的 Confluence 与 Notion 替代方案

核心定位 Docmost 是一款正在开发中的开源文档协作平台,旨在成为 Confluence 和 Notion 的替代选择。

主要功能

  • 实时协作:支持多人同时编辑。
  • 图表工具:集成 Draw.io、Excalidraw 和 Mermaid,方便绘制各类图表。
  • 空间与权限管理:通过空间组织内容,并支持精细化的权限设置和用户分组。
  • 内容工具:包括评论、页面历史记录、搜索、文件附件。
  • 丰富嵌入:可嵌入 Airtable、Loom、Miro 等第三方服务。
  • 多语言支持:已提供超过10种语言的翻译。

许可模式

  • 核心开源:Docmost 核心部分采用 AGPL 3.0 开源许可证。
  • 企业版:企业级功能则遵循独立的 Docmost 企业许可证(位于 apps/server/src/eeapps/client/src/eepackages/ee 等目录下)。

如何开始 项目提供了官方文档和云端试用版本供用户体验。

参与贡献 开发者可参考其开发文档参与项目。

致谢 项目特别感谢 Crowdin(本地化平台支持)和 Algolia(为文档提供全文搜索支持)的协助。

5. Chrome is adding `window.ai` – a Gemini Nano AI model right inside the browser (twitter.com)

内容摘要

提供的文本内容并非关于“Chrome is adding window.ai – a Gemini Nano AI model right inside the browser”的文章正文,而是一段网站(x.com)的错误提示信息。

该提示指出:

  • 访问过程中出现了问题("Something went wrong")。
  • 部分与隐私相关的浏览器扩展可能导致此问题。
  • 建议用户禁用这些扩展并重试。

由于未提供与window.ai或Gemini Nano模型相关的实质性技术说明、功能介绍或新闻内容,因此无法基于当前输入生成有效的摘要。要完成您的请求,需要提供实际的文章内容。

6. Reflection for C++26 (isocpp.org)

C++26 反射特性提案摘要

本文档是关于为C++26引入静态反射特性的提案。该提案旨在提供一套精简但强大的初始特性集,用于在编译时观察和生成依赖于程序结构的代码。

核心目标与机制

提案主要包含以下核心要素:

  • 反射值:通过常量表达式产生std::meta::info类型的不透明值(称为“反射值”),用于表示程序元素。
  • 反射操作符:使用前缀^操作符获取其操作数的反射值。
  • 元函数:一系列在std::meta命名空间下的consteval函数,用于查询、操作和派生反射值。
  • 拼接器:使用[:…:]等语法,从反射值“拼接”出语法元素(如类型、表达式)。

设计决策与特点

  1. 单一不透明类型:坚持使用单一的std::meta::info类型,而非类型化的反射类型。这避免了将语言设计固化到类型系统中,便于未来扩展,且实现更简单。
  2. 丰富的示例:提案通过大量示例展示了反射的强大功能,包括:
    • 枚举与字符串互转。
    • 将结构体转换为元组或数组的结构体。
    • 自动化实现make_integer_sequence
    • 解析命令行选项。
    • 简单的元组和变体类型实现。
    • 通用格式化器、成员级哈希等。
  3. 关键特性
    • 反射操作符 (^):可应用于类型、命名空间、表达式(包括全局命名空间^::)等。
    • 拼接器 ([:…:]):支持类型拼接、表达式拼接以及限定名拼接,并讨论了相关的语法限制。
    • 元函数:提供了广泛的查询函数(如name_of, type_of, members_of)、类型特征函数(如type_is_const)、以及强大的substitutedefine_classextract等函数,用于模板实例化、类定义生成和值提取。
    • 成员访问与布局查询:可以查询成员的访问权限、类的内存布局(偏移、大小、对齐等)。
  4. 实施现状:已有基于Clang和EDG的早期实现,并在Compiler Explorer上可供测试。提案建议与“展开语句”和“非瞬态constexpr分配”等其他语言特性协同工作以获得更好体验。

注意事项与限制

  • 常量求值顺序:由于元函数(如define_class)可能产生副作用,提案要求“明显常量求值”的表达式按词法顺序在编译时确定性地完成。
  • ODR(单一定义规则)问题:反射引入了新的ODR违反途径,例如在头文件中基于反射信息进行分支。这需要通过教育和培训来避免。
  • 实现限制:某些拼接操作存在限制,如不能拼接构造函数/析构函数,或在命名空间定义、using指令中拼接受限等。

标准库提案

提案建议在标准库中添加<meta>头文件,其中包含std::meta命名空间及所有相关元函数。此外,提议添加__cpp_lib_reflection特性测试宏。

该提案为C++提供了一个基础但可扩展的反射框架,极大地增强了编译时元编程和代码生成的能力。

7. AirPods fast connect security vulnerability (blogs.gnome.org)

AirPods 快速连接功能存在安全漏洞(CVE-2024-27867)

漏洞概述

在苹果 AirPods 的固件中存在一个安全漏洞(编号 CVE-2024-27867)。攻击者只需知道目标 AirPods 的蓝牙 MAC 地址(此地址可通过空中截获等手段获取),即可在未经授权的情况下连接至他人的 AirPods。连接成功后,攻击者能够监听麦克风、播放音频,甚至控制正在播放的音乐。值得注意的是,当 AirPods 置于关闭的充电盒内时,漏洞无法被利用,因为设备无线电处于不活跃状态。

漏洞发现背景

漏洞的发现源于作者对 AirPods 多设备连接功能在 Linux 系统下无法正常工作的好奇。在深入研究苹果专有的 “快速连接”(Fast Connect)协议并尝试为 Linux 重新实现该功能时,作者发现了该安全缺陷。

漏洞原理

  • 快速连接协议:这是苹果专有的协议,旨在将蓝牙连接建立时间从约1秒缩短至0.5秒。它通过巧妙地利用蓝牙规范的“ping”功能来交换协议信息。
  • 根本缺陷:AirPods 固件在快速连接的代码路径中未能验证连接的安全等级,即未检查对端是否完成了身份验证和加密启用。正常情况下,身份验证和加密步骤应在初始快速连接消息之后进行。苹果自身的 iOS/macOS 设备会正确执行此步骤,但攻击者可以故意跳过该环节,而 AirPods 仍会继续完成连接过程。
  • 攻击影响:成功连接后,攻击者可执行所有合法设备能进行的操作,包括:实时监听麦克风、播放任意音频、查看或暂停当前播放的音乐,以及通过 AAP 协议进行更多设置更改或发送恶意格式化消息等。

安全影响与修复

  • 受影响设备:AirPods 2、AirPods 3、AirPods Pro、AirPods Pro 2、AirPods Max 以及部分 Beats 耳机。
  • 修复方式:苹果已发布包含修复补丁的固件更新。用户应确保耳机固件为最新版本。
  • 特殊注意事项:对于主要使用 Android、Windows 或 Linux 设备的 AirPods 用户,固件自动更新功能仅在与 iPhone 或 Mac 配合使用时才会触发。此类用户可能需要携带设备前往苹果零售店进行手动固件更新以消除漏洞。

其他细节

  • 作者在研究过程中得到了相关领域的专业人士及开源蓝牙工具社区(如 BlueZ)的帮助。
  • 漏洞已按相关流程向苹果报告并修复。
8. The physics of airplane flight (10maurycy10.github.io)

飞机飞行物理学

时间范围:2024-04-06 — 2026-04-13
主题:物理学

机翼与升力原理

一个常见误解是机翼必须采用经典的翼型形状才能工作。实际上,几乎任何表面都能产生升力并充当机翼:只需将一块平板(如纸板或泡沫板)以微小角度(相对于来流)向上倾斜挥动,它就会将空气向下推,从而产生向上的反作用力(升力)。但若倾斜角度过大,气流将停止附着在机翼表面,导致失速,此时升力消失,阻力剧增。经典翼型通过平缓引导气流来延迟失速,从而在给定速度下产生更多升力。飞机采用经典翼型是为了提高效率,而非必要条件。

质心与压力中心

  • 质心:物体质量的等效集中点。作用于质心的力不会引起旋转,只产生线性运动;作用于其他点的力则会因力臂产生扭矩。
  • 压力中心:气流对机翼产生升力和阻力的等效作用点。对于矩形机翼,压力中心位于从前缘算起约1/4弦长处。

由于矩形机翼的质心(位于中央)与压力中心相距较远,若不调整,机翼会立即抬头并失速坠落。为防止这种情况,飞机会通过将升力作用点后移或增加机头重量来平衡。

稳定性

飞机必须能在扰动后恢复正确姿态和速度,这涉及三个轴向的稳定性:

  • 偏航稳定性:依赖垂直尾翼。当飞机偏航时,垂直尾翼产生的侧向“升力”会将其拉回对准气流,前提是垂直尾翼位于质心之后。
  • 滚转稳定性:依赖机翼的正上反角(呈V形)。当飞机滚转时,侧滑会使上侧机翼迎角减小,产生不对称升力,从而恢复水平。
  • 俯仰稳定性:需要质心位于机翼升力中心之前,产生低头力矩;同时后方的水平尾翼以负迎角产生负升力,提供抬头力矩。两者平衡后,飞机可保持恒定迎角飞行。

速度稳定性

速度稳定性通过俯仰稳定性与阻力的相互作用实现:

  • 飞行过快时,升力大于重力,飞机爬升;由于气流方向改变,飞机会抬头以保持迎角,进而将速度转化为高度。
  • 飞行过慢时,升力减小,飞机下降;飞机会低头以换取速度。
  • 阻力会随速度增加而增加,提供无滞后的速度反馈。

然而,由于俯仰调整存在滞后,飞机常会过度修正,进入长周期振荡。在高效滑翔机等设计中,阻尼不足可能导致振荡逐渐增大。

9. Thousands of Pablo Picasso’s works in a new online archive (www.smithsonianmag.com)

巴黎毕加索博物馆推出全新在线艺术档案

巴黎毕加索博物馆近日发布了一个全新的数字门户,使全球公众无需前往巴黎,即可通过互联网访问数千件巴勃罗·毕加索的艺术作品及相关资料。

档案内容与数字化进程

该在线档案收录了大量已数字化的毕加索资料,包括艺术品、散文、诗歌、访谈及其他纪念品,其中部分为首次向公众公开。用户可通过照片、视听资料、绘画、雕塑、3D对象、素描、版画、书籍、档案和文件等多个类别进行便捷检索。

为配合今年晚些时候即将开放的新研究中心,博物馆于去年启动了馆藏数字化工作,首批处理了约19,000张照片。未来计划再数字化并上传20万份额外文件,以协助驻留研究人员和艺术家深入了解毕加索的生平与创作。

同期展览探讨灵感来源

在线档案的推出与博物馆的“毕加索:消费图像”展览同步进行。该展览深入探讨了毕加索丰富的灵感来源,不仅涵盖伦勃朗和亨利·马蒂斯等大师的作品,还包括杂志、漫画和明信片等日常物品。

展览通过毕加索艺术生涯中反复出现的四个主题——英雄、弥诺陶洛斯、偷窥者和火枪手,来剖析这些影响。博物馆指出,尽管被前卫艺术界视为学院派的对立面,毕加索始终认为自己是悠久绘画传统的继承者,展览旨在探讨其与艺术史的复杂关系及图像借鉴方式。

艺术背景与周年纪念

毕加索1881年生于西班牙,大半生在巴黎度过。他与法国画家乔治·布拉克共同创立了立体主义。该流派打破了艺术应模仿自然和采用传统透视技法的观念,将物体解构为几何形式并在浅层空间中重组,专注于二维和抽象表达。

此外,去年正值毕加索1973年逝世50周年,包括德国明斯特毕加索博物馆、纽约现代艺术博物馆和西班牙毕加索博物馆在内的全球多家机构均举办了相关纪念展览。

10. Rodney Brooks on limitations of generative AI (techcrunch.com)

Rodney Brooks 论生成式AI的局限性

Rodney Brooks 是机器人学和人工智能领域的权威人物,现任麻省理工学院荣休教授,曾联合创立Rethink Robotics、iRobot和Robust.ai,并领导MIT计算机科学与人工智能实验室(CSAIL)十年。他对生成式AI持谨慎态度,认为其能力可能被过度炒作。

生成式AI的局限性

  • 人类倾向于高估生成式AI的能力。当看到AI执行一个任务时,会泛化到类似任务并过于乐观,错误地将人类能力赋予AI。
  • 生成式AI并非人类或类人系统,不能通用化所有任务。例如,在Robust.ai的仓库机器人系统中,有人建议用大型语言模型(LLM)指导机器人,但这实际会降低效率,因为语言处理比直接数据优化更慢。仓库管理需要优化大规模订单处理,依赖数据流和AI优化技术,而非语言。

自动化原则和机器人设计

  • 自动化应在已清理、约束性强的环境中部署,如仓库,那里光线稳定、无障碍物,且人类员工通常不会恶意干扰机器人。
  • Robust.ai的机器人设计为实用型(如带手推车形状),而非人形,便于人类交互和问题解决。这体现了技术易用性和业务导向,注重投资回报和大规模部署。

AI的长期挑战

  • AI系统总存在难以解决的边缘情况,可能需要数十年才能解决,且修复这些情况本身是AI完全问题。
  • 技术发展不一定呈指数增长,尽管有摩尔定律。例如,iPod的存储容量在满足需求后停止增长,而非无限增加。类似地,生成式AI的进步可能不会持续指数级提升。

LLMs的潜在应用与挑战

  • LLMs可能在特定场景有用,如家用机器人辅助老龄化社会的护理工作,提供语言接口。但核心挑战在于控制理论和数学优化,而非语言能力本身。
11. Coffee helped the Union in the Civil War (www.smithsonianmag.com)

咖啡在美国内战中帮助联邦获胜

在美国内战中,咖啡被联邦军队视为至关重要的补给品,其重要性几乎可与火药比肩。联邦将军本杰明·巴特勒命令士兵随时携带咖啡,并认为这能保证战斗的成功。

1. 战争引发的咖啡供应危机 到1862年,由于联邦对南方港口的封锁,美国从主要供应国巴西进口的咖啡减少了40%。与此同时,联邦军队承诺为每位士兵每年提供36磅咖啡,导致需求激增四倍。寻找新的咖啡来源成为关乎战争胜败的生存问题。

2. 利比里亚:关键的替代来源 西非国家利比里亚的总统斯蒂芬·艾伦·本森(生于马里兰州的自由黑人家庭)主动向北方提出供应咖啡。利比里亚当时已有约50万棵咖啡树。1862年8月,首批6000磅优质非洲咖啡运抵联邦,证明了其至关重要的作用。

此前,北方废奴主义者已与利比里亚有小规模贸易。费城贵格会商人乔治·W·泰勒的“自由劳动仓库”专门销售非奴隶劳动产品,本森在1848年就曾向他供应咖啡。利比里亚咖啡特别受到“自由生产运动”的欢迎,该运动旨在通过道德贸易打击奴隶制。

内战爆发后,南方脱离联邦为美利坚合众国正式承认利比里亚创造了机会。1862年,亚伯拉罕·林肯总统承认了利比里亚共和国,并提高了咖啡进口关税。泰勒的商店扩大了从利比里亚农民(如奥赛罗·理查兹和托马斯·摩尔)的采购。联邦还派遣顾问爱德华·莫里斯前往利比里亚,指导农民提高咖啡种植技术,显著推动了当地咖啡产业的发展。

3. 咖啡:决定士气与战争天平的关键 到1863年,咖啡在整个南方已变得极度稀缺,价格昂贵,而联邦士兵获得的利比里亚咖啡每磅仅40美分且品质优越。南方军队因咖啡短缺被迫使用橡子、红薯等替代品,严重影响了士气和纪律。一名联邦士兵曾写道:“是咖啡让我活着。”

联邦军队利用其咖啡优势实施打击。1864年,谢尔曼将军的部队在亚特兰大摧毁了5.5万磅原属南方的咖啡。充足的供应甚至让北方军队能够销毁而非占有敌人的咖啡库存。

4. 战后影响 1865年南方投降时,南方士兵对联邦咖啡的渴望显露无遗。本森同年去世,但利比里亚对美咖啡出口持续增长。战争培养了美国士兵一日三餐喝咖啡的习惯,这种习惯延续到了战后。到1885年,美国人均咖啡年进口量达到11磅,是战前的近两倍。

利比里亚咖啡(1876年被正式命名为Coffea liberica)因其优良品质和抗病性赢得了众多贸易伙伴。到1892年,利比里亚的年出口量达到180万磅。咖啡馆也被期许能帮助战胜杜松子酒馆。


咖啡小谈:令人精神振奋的起源故事

  • 山羊传说:9世纪,埃塞俄比亚牧羊人卡尔迪发现山羊吃了某种灌木的浆果后异常兴奋,自己尝试后也有同感。浆果被修士们扔进火里,意外烘烤出咖啡豆,煮出了第一杯咖啡。
  • 海上传播:埃塞俄比亚人通过煮叶、与动物脂肪混合或咀嚼种子等方式摄取咖啡因。有说法认为,被贩卖为奴的东北非人可能将咖啡豆作为食物带到了也门。
  • 雀鸟启发:13世纪摩洛哥神秘主义者谢赫·阿尔-沙兹利看到一群异常活跃的鸟在吃浆果,食用后也感到神清气爽。
  • 也门的奥马尔:传说中被流放的牧师奥马尔在饥饿中采摘红色浆果,烘烤、煮沸后发现了能带来持久能量的黑色饮料。
12. Adding a USB port to the ThinkPad X1 Nano (the hard way) (jcs.org)

本文记录了作者为 ThinkPad X1 Nano 笔记本硬核添加内置 USB 接口的全过程,旨在解决 OpenBSD 系统下缺乏原生蓝牙支持,导致外置 USB 接收器(如鼠标和音频适配器)占用外部接口的问题。

初期尝试与挫折

  1. M.2 接口方案:作者首先尝试利用闲置的 M.2 WWAN 插槽安装 M.2 USB 扩展卡,但因联想 BIOS 固件中的网卡白名单限制,导致非授权设备无法开机。
  2. 固件破解方案:为绕过白名单,作者使用编程器读取主板固件芯片并尝试修改白名单数据。然而,联想的安全闪存认证(Secure Flash Authentication)机制会校验固件签名,修改失败会触发固件自动恢复(Self-healing),该方案宣告失败。

最终成功方案:复用指纹识别器接口

  1. 接口复用:作者发现被禁用的指纹识别器通过 8 针 FFC 排线连接,其中 4 针为 USB 2.0 信号(VCC、DATA-、DATA+、GND),且机身内部有足够空间安置 USB 接口。
  2. 解决供电问题:测试发现指纹排线仅提供 3.3V 电压,无法驱动需要 5V 的 Logitech Bolt 接收器。作者引入了基于 ME2108 芯片的升压电路,成功将 3.3V 升至标准 5V。
  3. 定制柔性 PCB:作者使用 EasyEDA 设计了一块柔性电路板(Flex PCB)以替代原指纹模块。该 PCB 集成了 FFC 连接器、升压电路和 USB 母座,并交由 JLCPCB 进行打样与 SMT 贴片组装。
  4. 安装与完善:定制 PCB 的一端安装在原指纹模块位置,排线穿过内部空间,将 USB 接口延伸至屏幕排线附近的空隙。为适配 USB 设备高度,作者打磨了底盖的一个非承重螺丝柱。针对拆除指纹模块后 C 面留下的凹槽,作者使用 3D 打印(TPU 材质)制作了填充块以保持外观平整。

最终结果

改造完成后,USB 接收器被成功隐藏在笔记本内部,并在 OpenBSD 系统中被正常识别,完美解决了接口占用与携带不便的问题。

13. Trilobites killed by volcanic ash (www.bristol.ac.uk)

文章摘要

2024年6月27日发布的新闻稿报道,科学家发现了保存异常完好的三叶虫化石,揭示了这种已灭绝节肢动物前所未见的解剖细节。这些化石来自约5.15亿年前的寒武纪,在水下被火山灰迅速掩埋并化石化,从而避免了变形,甚至保留了精细的软体结构。

主要发现:

  1. 口部与取食机制: 化石清晰地显示了三叶虫口部的精细结构,包括一个肉质的上唇和周围带有勺状基部的附肢。其头胸部的附肢内侧具有密集的刺,类似现代鲎,用于处理食物并将其送入口中。
  2. 头部附肢数量: 研究修正了此前的认识,表明这两种摩洛哥三叶虫在触角后拥有四对头部附肢,而非普遍认为的三对。
  3. 附肢保存状态: 所有腿部都按生活时的姿态排列,关节处的小刺和感觉刚毛都得以保存,甚至附着在它们身上的微小腕足动物(“灯贝”)也被记录下来。
  4. 消化道保存: 三叶虫的消化道被火山灰填充后得以保存。

研究方法与意义:

  • 研究团队使用了高分辨率X射线微断层扫描(XRµCT) 技术,通过对比火山岩基质与原始身体轮廓留下的空气密度差,成功在计算机中重建了三叶虫的三维解剖结构。
  • 这些化石被称为“庞贝式”三叶虫,其保存状态在古生物学研究中极为罕见,为了解三叶虫的生物学和节肢动物早期演化提供了关键见解。
  • 研究也表明,浅海环境中的火山灰沉积层是寻找特异保存化石的一个被低估的潜在富矿带。

背景信息: 三叶虫是完全灭绝的节肢动物,在古生代极为繁盛,已描述物种超过两万种,但通常仅保存硬外壳,附肢等软体结构保存下来的物种仅约30种。

研究团队与论文: 该研究由普瓦提埃大学的Abderrazak El Albani教授领导的国际团队完成,合作者包括布里斯托尔大学和自然历史博物馆的科学家。相关成果发表于《科学》期刊,论文题为《快速火山灰埋藏揭示寒武纪三叶虫的3D解剖结构》。

14. Python toolkit for quantitative finance (github.com)

GS Quant:Python量化金融工具包

概述

GS Quant 是由高盛集团(Goldman Sachs)基于其强大的风险转移平台打造的Python工具包,旨在加速量化交易策略开发与风险管理解决方案的构建,凝聚了高盛逾25年全球市场经验。

主要用途

  • 开发与分析:由高盛量化开发人员创建并维护,主要用于衍生品交易策略开发及分析。
  • 应用场景:支持衍生品结构设计、交易执行、风险管理,并可作为统计软件包用于数据分析。

使用条件

  • 需要获取高盛提供的客户端ID与密钥方可访问API。
  • 该服务仅面向高盛机构客户开放,具体信息需通过客户经理或Marquee销售团队获取。

环境要求

  • Python 3.9 或更高版本。
  • 需安装PIP包管理器。

资源与支持

  • 示例与教程:可在高盛开发者网站的相关文件夹中找到。
  • 帮助与反馈:如有任何问题,可联系 gs-quant@gs.com
15. The weirdest QNX bug I've encountered (2021) (mental-reverb.com)

文章作者讲述了其在QNX系统固件更新中遇到的一个极其罕见的bug,并详细描述了从问题报告到最终定位根本原因的完整调试过程。

问题现象与初步调查

  • 一次固件更新后,设备报告错误“从传感器获取日志文件失败”,但手动重启后恢复正常。
  • 作者发现更新过程本身已成功完成,系统启动后仅有少数进程启动稍慢,日志中无明显错误。
  • 问题在多数设备上无法重现,仅在特定旧型号硬件上偶发。

深入调试与问题定位

  • 作者在一位同事遇到问题时连接到系统,发现系统极度卡顿。通过top命令观察到,ps进程与内核占用大量CPU(结合超线程,实际负载接近100%)。
  • 使用ps -ef追踪发现,该ps进程由一个专有进程通过sh调用。该专有进程内执行了一段旧代码:int rc = system( "ps -e | grep Foo" );,用于检查某个程序是否存在。此代码仅在特定旧硬件上运行。
  • 杀掉该无限循环的ps进程后,系统立即恢复正常。

根本原因分析

  • 作者使用QNX Momentics IDE附加到故障ps进程进行汇编级调试,发现其卡在对devctl()系统调用的循环中,并反复收到错误码ESRCH(无此进程)。
  • 由于所用QNX 6.6的ps是闭源二进制文件,作者利用十余年前的QNX开源社区留下的ps源代码,在本地成功编译并复现了问题。
  • 通过源代码分析定位到问题循环。根本原因是一个竞争条件:当ps工具遍历某个进程的线程时,如果该进程恰在此时终止,devctl()调用会失败,而代码中的循环缺乏正确的终止条件,导致无限循环。

解决方案与启示

  • 作者评估后决定不替换系统自带的ps工具,而是清理其代码库,移除了所有在非交互式脚本中对system("ps ...")的调用,从而避免了触发此bug。
  • 文章总结的教训包括:
    1. 即使长期稳定、来自可靠供应商的代码也可能存在bug。
    2. 老bug可能因时序或内存布局的微妙变化而突然显现。
    3. 涉及文件系统/进程操作时,需警惕竞争条件。
    4. 闭源系统调试困难,历史开源代码具有重要参考价值。
    5. 应避免在非交互式代码中使用交互式命令行工具(如system()调用)。
    6. 编写循环时必须确保其有确定的终止条件。

文章还简要提及了QNX从开源转向闭源的历史背景,这增加了在闭源生态系统中调试此类底层问题的难度。

16. An unexpected journey into Microsoft Defender's signature World (retooling.io)
17. Overleaf: An open-source online real-time collaborative LaTeX editor (github.com)

Overleaf 是一款开源在线实时协作 LaTeX 编辑器。官方提供托管版本 (www.overleaf.com),同时也支持用户自行本地部署和参与其开发。

社区版 (Community Edition) 该版本适用于所有用户均可信的环境。需要注意的是,社区版不具备“沙箱编译”功能,因此不适用于需要用户隔离的场景。在非沙箱编译下,用户在运行 LaTeX 编译时对容器资源(文件系统、网络、环境变量)拥有完整的读写权限。

企业版 (Enterprise) 若需官方支持的安装维护及更多安全与管理功能(如基于 LDAP 或 SAML 的单点登录、用户管理、修订跟踪等),可考虑企业版 Overleaf Server Pro。

技术实现与部署

  • 更新与信息:可通过邮件列表获取版本更新与开发动态。
  • 安装与升级:提供详细的安装指南(Overleaf Toolkit)。升级时需查阅 Wiki 上的版本发布说明。
  • Docker 镜像:项目包含两个 Dockerfile:
    • Dockerfile-base 构建 sharelatex/sharelatex-base 镜像,包含基础依赖(如 wget、texlive)。
    • Dockerfile 构建 sharelatex/sharelatex(社区版)镜像,基于基础镜像添加 Overleaf 代码和服务。
    • 镜像构建命令为在 server-ce/ 目录下执行 make build-basemake build-community
    • 底层采用 Phusion baseimage,提供类虚拟机容器环境,并使用 runit 进行服务管理。

其他信息

  • 贡献:开发贡献指南见 CONTRIBUTING 文件。
  • 作者:Overleaf 团队。
  • 许可证:代码遵循 GNU AFFERO GENERAL PUBLIC LICENSE (AGPL) version 3 发布。
18. The super effectiveness of Pokémon embeddings using only raw JSON and images (minimaxir.com)

这篇文章探讨了如何使用原始JSON元数据和图像为所有Pokémon生成嵌入(embeddings),并分析由此产生的语义关系。

核心方法与数据来源

  • 数据获取:通过开源的PokéAPI(GraphQL接口)获取超过1,300只Pokémon的详细JSON元数据(包括属性、技能、描述等)和官方图片。
  • 文本嵌入:使用开源模型nomic-embed-text-v1.5(8,192上下文长度,768维)处理Pokémon的JSON数据。为优化性能,先对JSON进行了键名简化和压缩。
  • 图像嵌入:使用同一公司发布的nomic-embed-vision-v1.5模型,对标准化处理后的Pokémon图片生成图像嵌入。该模型的嵌入空间与文本模型对齐,支持跨模态比较。

分析与发现

  1. 基于文本的相似性:通过计算余弦相似度,发现嵌入能够捕捉到有意义的Pokémon关系。例如:
    • 皮卡丘与各世代的“皮卡丘克隆”(类似电系鼠类Pokémon)高度相似。
    • 喷火龙与各世代的火系初始Pokémon相似。
    • 具有特殊机制(如鲤鱼王技能池有限)的Pokémon在元数据上与其他Pokémon差异较大。
  2. 基于图像的相似性:图像嵌入主要响应视觉基元。例如:
    • 皮雀与其他鸟类Pokémon相似。
    • 雷电球与其他球形Pokémon相似。
  3. 跨模态查询:由于文本和图像嵌入模型空间对齐,可以使用文本问题(例如“什么看起来像冰淇淋筒?”)来匹配最相关的Pokémon图像,效果出乎意料地好。
  4. 降维可视化:将文本和图像嵌入拼接后,使用UMAP降维至2D进行可视化。结果发现:
    • Pokémon聚类模式从2016年的按“属性”聚类,转变为更明显的按“世代”聚类。
    • 同一进化链的Pokémon在嵌入空间中非常接近。
    • 通过2D空间中的欧几里得距离,可以更量化地评估相似性(例如,鲤鱼王找到了其他鱼类Pokémon作为“朋友”)。

结论 该探索证明,仅利用原始结构化数据(JSON)和图像,通过现代开源嵌入模型,就能有效构建出反映Pokémon复杂语义和视觉特征的嵌入向量。尽管结果并非完美(例如第八、第九世代的数据质量影响),但该方法为数据探索和关系发现提供了一种强大且相对简单的途径。所有代码和可视化结果均已公开。

20. Show HN: ViperIDE – MicroPython IDE for web and mobile (github.com)

ViperIDE: 基于浏览器的MicroPython/CircuitPython集成开发环境

ViperIDE 是一个创新性的、面向Web和移动端的 MicroPython / CircuitPython 集成开发环境。其主要特点是完全运行在浏览器中,无需安装,支持离线使用,并具备灵活的连接能力和强大的开发工具。

核心功能

  • 轻量与易用:完全在浏览器中运行,无需本地安装,支持在个人电脑和智能手机上离线使用。
  • 灵活连接:支持直接USB连接,同时提供无线/远程连接选项。
  • 强大的Python开发支持
    • 实时代码分析:即时检测错误和警告。
    • 集成终端/REPL:用于交互式编码。
    • 基础代码补全
    • MicroPython虚拟机:方便进行实验。
  • 内置管理工具:包含文件资源管理器、编辑器以及软件包管理系统。

技术基础

该IDE基于以下开源软件构建:

  • 代码编辑器:CodeMirror (MIT)
  • 代码检查与格式化:Ruff (MIT)
  • 终端:Xterm.js (MIT)
  • P2P连接:PeerJS (MIT)
  • 核心虚拟机:MicroPython (MIT)
  • 代码验证与处理:mpy-cross、mpy-tool、python-minifier (均为MIT协议)
22. The cutest monopoly: Koala Kare (thehustle.co)

Koala Kare:最可爱的垄断企业

在反垄断时代,Koala Kare(考拉关怀)作为大型婴儿换尿布台品牌,为何能悄然成为市场霸主?

一、创立与崛起

  • 1986年,医疗设备推销员杰夫·希尔格与朋友发明了墙装式折叠换尿布台并申请专利,创立了Koala Kare品牌。
  • 早期营销通过展示母亲在地板上换尿布的场景,引发商业主的内疚感,成功吸引麦当劳、塔吉特、汉堡王等大客户。
  • 产品迅速普及,至1997年已进入美国20万个洗手间。公司于1993年上市,并逐步占据美国市场约85%的份额。

二、危机与复苏

  • 1996年希尔格退休后,公司领导层错误地尝试进入游乐场等业务,导致负债累累,2003年被纳斯达克除牌。
  • 2004年,原有供应商鲍勃里克洗手间设备公司以1560万美元收购其换尿布台业务,公司重回正轨。
  • 社会文化趋势推动增长:性别平等立法(如2003年宾夕法尼亚州“厕所平等法案”)、育儿成本上升、父亲育儿角色日益受关注(如阿什顿·库彻公开呼吁)。
  • 2016年,奥巴马总统签署《婴儿法案》,强制要求联邦建筑内的男女洗手间安装换尿布台,进一步巩固了市场需求。

三、市场地位与垄断性质

  • Koala Kare已成为该品类的代名词,类似于“舒洁”(Kleenex)之于纸巾。
  • 竞争对手如Rubbermaid和ASI存在,但均未像Koala Kare一样专注于该细分市场。
  • 根据反垄断法,垄断本身并不违法,违法的是垄断者滥用市场支配地位的行为(如谷歌、苹果等科技巨头面临的指控)。
  • Koala Kare的市场优势主要源于其先发创新和产品主导,而非压制竞争的非法行为,因此被视为相对“无害”的垄断案例。

四、反垄断背景与行业影响

  • 美国反垄断法旨在维护自由竞争,但执法强度存在波动。近年拜登政府加强了对大型科技公司的反垄断审查。
  • 反垄断倡导者认为,长期执法不力导致垄断普遍存在,损害消费者利益(价格更高、选择更少)。
  • 目前针对科技巨头的诉讼结果,将为所有拥有市场支配地位的公司设定法律先例。

五、未来前景

  • 尽管公司未公开具体销售数据,但美国商业建筑数量持续增长(自2012年以来增长6%),意味着更多的安装需求。
  • Koala Kare作为行业标准的地位,在可预见的未来仍将保持稳固。
23. OpenDNS Suspends Service in France Due to Canal+ Piracy Blocking Order (torrentfreak.com)

OpenDNS因法国反盗版屏蔽令暂停服务

背景与事件经过

2023年,法国广播公司Canal+向法院申请并获得命令,要求法国主要ISP(包括Orange、SFR、Free等)屏蔽100余个盗版体育流媒体网站。ISP通过修改其DNS解析器返回错误响应来执行屏蔽,但部分用户转而使用第三方公共DNS服务(如Cloudflare的1.1.1.1、谷歌的8.8.8.8和思科的OpenDNS)作为绕行手段。

法院进一步命令DNS提供商

为封堵这一漏洞,Canal+于2024年对三家公共DNS提供商提起诉讼。巴黎司法法院于2024年5月发出两项命令,要求谷歌、Cloudflare和思科实施技术措施,阻止法国用户通过其服务访问约117个盗版域名。谷歌此前表示将服从命令。

OpenDNS的应对措施

2024年6月28日,思科旗下的OpenDNS服务在法国及部分法属领地停止运作。OpenDNS在官网公告称,暂停服务是由于法国法院根据《法国体育法典》第L.333-10条以及葡萄牙相关版权法作出的命令。OpenDNS未详细说明暂停决定的具体原因,但分析认为其可能强烈反对被要求故意提供不准确的DNS响应——即“欺骗”用户请求以屏蔽特定域名。

影响与争议

OpenDNS的举措被视为对反盗版措施的一种对抗,批评者认为这影响了正常用户;支持者则认为此举揭示了当前反盗版命令正逐渐侵蚀互联网基础机制的中立性。该事件凸显了版权执法与互联网基础设施中立性之间的冲突,且此类命令可能成为后续案例的先例。

24. The Soviet Union's Monster Mi-6 Helicopter Airliner (www.twz.com)

苏联米-6“吊钩”直升机在冷战时期是量产型最大的旋翼飞行机。其民用客运改型米-6P(型号名中“P”代表客运)在1960年代中期由米里设计局基于军用米-6开发,旨在开启苏联旋翼机客运的新时代。

设计与改装

  • 原型机:仅生产了一架演示机,注册号CCCP-58647。
  • 结构:机身长约33米,高近10米,配备大型短翼以提升巡航效率。
  • 客舱:内部改装为可搭载最多80名乘客的客机布局,采用3+2座位排列,铺设地毯,设有行李架、阅读灯、大窗及卫生间,并进行隔热隔音处理。
  • 其他改动:将原有后部货物舱门改为带内置登机梯的整流罩,并加装辅助动力装置。

背景与发展

  • 1963年,苏联民航(Aeroflot)提出需要民用运输型米-6,以支持远东地区的基建及油气开发。该民用运输型(非客运型)于1965年巴黎航展首次公开展示并投产。
  • 1965年,民航推动将米-6进一步发展为客运型。米-6P演示机于1967年巴黎航展首次亮相,同年也在莫斯科航展展出。

运营需求与未量产

  • 苏联民航自1950年代末开始运营直升机客运航线,至1960年代对更大容量、更远航程的客运直升机需求增长。
  • 然而,米-6P最终未投入量产,原因不明。原型机于1970年移交苏联空军。
  • 尽管米-6P未成功,苏联在1980年代曾探索基于后续重型直升机米-26的客运型号(如米-26P),但同样未实现量产。

米-6P作为苏联曾构想的大型客运直升机,代表了冷战时期一项未能实现的民航创新尝试。

28. Figma defaults to train AI models on personal data (help.figma.com)

Figma AI功能与数据训练设置摘要

Figma的AI功能旨在通过分析用户内容来持续改进其模型对设计概念、模式及内部格式的理解。相关设置主要由团队或组织管理员管理。

  • 默认设置与控制

    • 内容训练:用于训练AI模型。在StarterProfessional计划中默认为开启状态,管理员可在团队设置中随时关闭。关闭后,新内容将不再用于模型训练。
    • AI功能访问:控制用户能否使用AI工具。在OrganizationEnterprise计划中,默认为关闭。开启后通常永久生效。
    • 对于OrganizationEnterprise计划,内容训练默认为关闭,且AI功能的访问权限可在组织或工作区层面独立管理。
  • 不同计划的操作细节

    • Starter / Professional计划:管理员在团队设置的“AI”部分,分别管理“内容训练”的开关。
    • Organization / Enterprise计划:组织管理员在后台设置的“AI”部分管理“AI功能”的启用状态。Enterprise计划支持在组织级和工作区级分别设置。AI功能一旦开启,将无法通过设置界面再次关闭(变为永久开启)。
  • 数据隐私与安全保护 Figma强调其模型训练旨在学习通用设计模式Figma特有概念,而非用户的特定内容。为此采取了多项保护措施:

    1. 数据处理:对数据进行去标识化并编辑敏感信息。
    2. 安全标准:数据在静态和传输中均加密,并实施严格的访问控制和权限管理。
    3. 第三方管理:禁止第三方模型提供商利用客户数据训练其自有模型;限制其数据存储时长。
    4. 草稿处理:草稿的训练状态取决于其所属团队的“内容训练”设置。用户可将草稿移至训练设置为“关闭”的团队以避免使用。
  • 特殊账户说明

    • 教育账户:AI工具仅对高等教育及训练营用户可用,K-12教育用户不可用。
    • 政府账户:仅提供Figma Make功能,其他AI功能暂不可用。

管理员可通过上述设置灵活控制其团队数据是否用于AI训练,同时Figma承诺通过技术与管理手段保护用户隐私与机密信息。