2024-04-15

26 篇热帖

1. Show HN: Building a GPS receiver (axleos.com)

本文详细介绍了作者从零开始构建GPS接收器的过程,涵盖了GPS信号的基本原理、所需硬件、关键技术挑战以及实现解码的核心方法。

GPS信号特性

  • 普遍存在但极其微弱:GPS信号由约30颗卫星广播,7x24小时覆盖全球。其发射功率相当于一颗普通灯泡,但经过2万公里传输后,信号强度会衰减至远低于环境噪声水平(例如比手机信号弱1亿倍)。
  • 免费且隐蔽:GPS系统是广播式的,卫星只管发送,用户接收无需授权,且卫星无法知道谁在接收。
  • 核心处理必须在本地:GPS定位必须依赖接收器本地测量电磁波,无法像云服务一样外包计算。

接收硬件与设置

  • 使用软件定义无线电(SDR):作者购买了可调谐的SDR设备来接收GPS的L1频段(1575.42 MHz)信号。
  • 关键配置:需要开启SDR的偏置三通为天线供电,启用自动增益控制放大微弱信号,并使用IQ校正来消除因SDR电路产生的中心频率尖峰干扰。

解码的核心挑战与原理

  • 信号淹没在噪声中:GPS信号强度比噪声低约50dB,直接解码看似不可能。
  • 关键技巧——扩频技术
    1. 每颗卫星广播一个独特的、已知的伪随机噪声(PRN)码序列,即C/A码,码率为1MHz。
    2. 接收器本地生成完全相同的PRN码,并与接收信号进行相关运算
    3. 由于噪声是随机的,在多次叠加平均后会趋于零,而确定的PRN码信号则会不断累积,从而从噪声中“浮现”出来。
  • 码分多址(CDMA):每颗卫星使用不同的PRN码,使接收器能同时区分来自多颗卫星的信号。
  • 数据调制:低速的导航数据(50比特/秒)被调制到高速的PRN码上进行传输。

信号捕获(Acquisition) 这是确定天空中哪些卫星可见的第一步。

  • 目标:通过对接收到的信号与所有可能的PRN码进行大量相关运算,寻找强相关峰值,从而识别出可见卫星,并获取其伪码相位(时间延迟)多普勒频移(相对速度) 的粗略估计。
  • 搜索空间:需要在三个维度上搜索:
    1. 卫星PRN编号(共32颗)。
    2. 多普勒频移(因卫星高速运动,预期范围在±5kHz)。
    3. 本地PRN码的相位偏移。
  • 优化方法:作者采用频域相关方法,将PRN码和接收信号转换到频域,可同时高效处理相位偏移和多普勒频移搜索。并使用二分搜索来快速定位最佳多普勒频移,提高效率。

总结与展望 作者成功构建了一个能够检测天空中可见GPS卫星及其粗略信号参数的接收器,完成了定位流程的第一大步。文章预告后续内容将介绍如何“跟踪”这些微弱信号并最终计算出位置。

4. We are moving to General Availability (supabase.com)

Supabase于2024年4月15日宣布进入正式发布(GA)阶段。经过第一年的发展,其目标是构建一个能安全运行100万个数据库的托管平台,这一目标已实现,现在准备服务下9900万用户。

平台已具备生产环境能力多年,但保留“测试版”标签是为确保能支持各类客户需求。现在Supabase有信心服务任何规模的客户,无论是个人开发者还是世界500强企业(如Mozilla、普华永道、强生、1Password)。上一批Y Combinator公司中有36%使用Supabase。其社区是核心驱动力,所有公共仓库均采用符合开源倡议(OSI)的许可证,且自托管变得非常简单。免费计划对原型开发至关重要。

Supabase践行“周末构建,扩展至百万”的口号。过去一年,有12家公司使用Supabase从零增长至超过100万用户,其中大部分是AI公司(如Udio, Krea, Humata等)。Postgres的可扩展性是关键,特别是pgvector,15%的新项目使用其进行AI/ML工作负载。

为满足企业需求,Supabase增强了安全工具、合规性(SOC2, HIPAA)、全天候支持和SLA。现已支持在AWS Marketplace购买,并计划扩展“自带云”等部署选项。

GA期间同时发布了多项重要更新:

  • Supabase索引顾问:在Studio中提供数据库索引优化建议。
  • Supabase分支:功能进入公开可用,类似Git分支,用于安全测试数据库变更。
  • 收购Oriole:收购由Postgres黑客Alexander Korotkov创立的公司以解决复杂问题。
  • Supabase Bootstrap:提供最简便的项目启动方式。
  • Swift SDK成为官方支持:维护者加入团队,目标是成为所有开发者的默认后端。

Supabase与众多开发者平台集成,如Fly、Vercel、Cloudflare等,并支持多种ORM连接。GA周还有更多公告发布。平台强调“价值实现时间”,致力于缩短从想法到生产的周期。

5. An FDA approved device offers a new treatment for tinnitus (www.npr.org)

FDA批准设备为耳鸣提供新疗法

概述: 一种名为 Lenire 的设备于2023年3月获得美国FDA批准,为耳鸣患者提供了一种新的治疗选择。耳鸣是一种以持续性耳内鸣响或嗡嗡声为特征的疾病,影响超过2500万美国成年人,目前无法治愈,但可通过多种方式缓解症状。

设备与工作原理:

  • 构成: 该设备包含一个带有不锈钢电极的塑料口舌装置和一副耳机。
  • 机制: 通过电极对舌头进行温和的电刺激(使用者描述为“轻微刺痒感”),同时耳机播放特定的音调和海浪声。这种同步的感官输入有助于“转移”大脑对耳鸣声的注意力,降低患者对噪音的敏感度。

临床试验效果: 一项临床试验表明,84% 的试用者在使用设备12周后,耳鸣症状显著改善。改善程度通过问卷调查评估,涉及睡眠、控制感、幸福感和生活质量等方面,参与者平均得分提高了14分。

使用案例与体验:

  1. Victoria Banks(歌手): 患有耳鸣约三年,尝试过补充剂和运动无效。在使用Lenire设备每天1小时、持续12周后,她表示耳鸣现在“几乎不可察觉”。虽然声音未完全消失,但已能像“背景瀑布声”一样被忽略,使她能重新专注于音乐创作和表演。
  2. Bruce Freeman(科学家): 同时使用助听器和Lenire设备。他认为设备播放的舒缓声音“几乎令人催眠”,结合舌部刺激,帮助他“脱敏”。他注意到停止使用后症状会反复,恢复使用则改善。

适用人群与成本:

  • 适用人群: 持续耳鸣至少三个月且经评估无其他潜在健康问题的患者。对于伴有听力损失的耳鸣患者,助听器通常是首选疗法。
  • 成本: 设备价格约4000美元,目前大多数保险不覆盖。尽管如此,临床试验中超过80%的使用者表示会推荐给朋友。

现状与展望:

  • 当前定位: 被认为是对其他疗法(如助听器、正念治疗)无效患者的“首选”方案,但并非万能药。
  • 未知方面: 效果的持久性尚不清楚,目前临床试验仅评估了1年的效果。专家需要更多研究来明确其长期效益。
  • 行业希望: 随着有效性证据的积累,保险覆盖的可能性有望提高。

其他管理策略: 文章也提及,对于同时患有听力损失和耳鸣的患者(尤其是老年人),助听器 仍是一种有效的治疗方法。此外,正念活动(如游泳)也被一些患者认为有助于将耳鸣声排除在意识之外。

7. Beautifying Org Mode in Emacs (2018) (zzamboni.org)

本文详细介绍了在 Emacs 中美化 Org Mode 的配置方法,旨在提升编辑体验,特别是在处理大量文本时的视觉舒适度。主要分为四个步骤:

步骤一:优化标题与列表显示

  • 设置 org-hide-emphasis-markerst 以隐藏斜体、加粗等标记符号。
  • 使用 font-lock-add-keywords 将列表标记(如 -)替换为居中圆点字符
  • 安装并启用 org-bullets 包,用 Unicode 符号替换各级标题的默认标记。
  • 为不同级别的标题配置比例字体(如 ET Book、Source Sans Pro 等),并设置递进的字体高度,使文档结构更清晰。

步骤二:配置比例字体与等宽字体

  • 利用 variable-pitch-mode 启用比例字体显示。通过自定义 variable-pitch 面(如使用 ET Book 或 Source Sans Pro)设置其字体家族、高度和粗细。
  • 同时自定义 fixed-pitch 面(如使用 Fira Code),确保代码块等元素保持等宽字体。
  • 建议通过 customize-face 命令交互式调整,并可在 Org 缓冲区通过钩子自动启用 variable-pitch-mode

步骤三:启用视觉行模式

  • 启用 visual-line-mode 以替代段落填充(fill-paragraph),使长行文本根据窗口宽度自动换行,更适合比例字体下的散文编辑。
  • 同样通过钩子在 Org 缓冲区自动启用此模式。需注意不再频繁使用 M-q 调整段落。

步骤四:为特定 Org 元素定制字体

  • 使用 custom-theme-set-faces 为特定元素(如源代码块、例子、标签、表格等)单独配置字体,确保它们仍以等宽字体显示。
  • 常用配置包括:使 org-blockorg-codeorg-table 等继承自 fixed-pitch 面,并可结合阴影等效果。
  • 可使用 what-cursor-position 命令(C-u C-x =)查看当前光标处使用的面,以便进一步调整。

总结:通过以上步骤,用户可以在 Emacs 中获得一个兼具美观与功能性的 Org Mode 环境,其中普通文本使用比例字体提升可读性,而代码和结构元素保留等宽字体以保持对齐。文章作者也分享了配置中遇到的细微问题(如行间距差异)及解决建议。

9. Ask HN: I want to create IMDB for open source projects

这篇文章是Hacker News上的一个提问帖,发帖人(_bggh)于2024年4月15日提出想法,获得241分和142条评论。

主要内容:

  • 核心想法:作者想开发一个类似IMDB(互联网电影数据库)的网站,专门作为开源项目的目录和发现平台
  • 动机:作者认为虽然GitHub是优秀的平台,但无法满足其全部需求,因此计划构建一个新平台。
  • 计划功能:重点是添加搜索功能,允许用户通过不同条件筛选和过滤开源项目。
  • 具体问题
    1. 向社区询问对这个想法的看法。
    2. 如何规划这个产品,并寻求具体的帮助和建议。
10. Visualizing Attention, a Transformer's Heart [video] (www.3blue1brown.com)

注意力机制:Transformer的核心

核心概念: 注意力机制是Transformer模型的关键组件,用于根据上下文动态更新输入序列中每个词(token)的嵌入向量。初始嵌入是上下文无关的,而注意力机制通过让相关信息从一个词的嵌入传递到另一个词,使其含义更加精准和丰富。

工作原理(单个注意力头):

  1. 查询(Query)与键(Key)的计算

    • 每个词的嵌入向量通过一个查询矩阵(W_Q) 映射成一个查询向量,用于“提出问题”(例如,名词可能“询问”前面是否有形容词)。
    • 同时,每个词的嵌入通过一个键矩阵(W_K) 映射成一个键向量,作为对查询的“潜在回答”。
    • 计算所有查询和键向量对之间的点积,得到一个相关性分数矩阵。分数越高,表示两个词之间的关联越强。
  2. 注意力权重的生成

    • 对相关性分数矩阵的每一列应用softmax函数,将其归一化为0到1之间的概率分布(所有权重之和为1)。
    • 得到的矩阵称为注意力模式,表示对于序列中的每个目标词,其他每个词对其更新的贡献权重。
    • 在自回归模型(如GPT)的训练中,通常会应用掩码:将注意力模式中“未来词影响过去词”的位置设为负无穷(softmax后为0),以防止信息泄露。
  3. 值(Value)向量与嵌入更新

    • 每个词的嵌入通过一个值矩阵(W_V) 映射成一个值向量,它编码了“如果一个词与另一个词相关,应如何具体修改对方的嵌入”。
    • 对于序列中的每个位置,将其对应的注意力权重与所有值向量进行加权求和
    • 将这个加权和(ΔE)加到该位置的原始嵌入上,得到经过上下文信息更新后的、更丰富的嵌入向量E'

多头注意力:

  • 一个完整的注意力块包含多个(例如GPT-3有96个)注意力头并行运行。
  • 每个头都有自己独立的查询、键和值矩阵,专注于学习不同方面的上下文关系(如语法、语义、指代等)。
  • 所有头的输出(各自的ΔE)被相加,共同对原始嵌入进行一次总更新。
  • 这种多头并行结构使模型能够从多种角度捕捉词与词之间的复杂依赖。

参数量与规模:

  • 在GPT-3中,每个注意力头的查询和键矩阵均为12,288 x 128,值矩阵通常被分解为两个矩阵(降维和升维)以控制参数量。
  • 96个注意力头并行,构成一个注意力块,其参数量约占GPT-3总参数(约1750亿)的三分之一。
  • 注意力机制本身是可高度并行化的计算,非常适合在GPU上高效执行,这使得大规模扩展模型成为可能。

意义与优势:

  • 通过多层、多个注意力块的重复处理,嵌入向量能逐步吸收并整合远距离、高阶的上下文信息,从而支持模型理解复杂语境、情感和抽象概念。
  • 其并行化特性是实现模型规模化的关键,而规模的增大被证明能显著提升模型性能。

总结: 注意力机制通过查询-键匹配、加权值求和的方式,实现了序列内信息的动态路由和上下文感知的嵌入更新。多头并行结构赋予模型同时学习多种上下文关系的能力,是Transformer强大语言理解能力的基础。

11. WireViz: Easily document cables and wiring harnesses (github.com)

WireViz 是一个用于轻松记录电缆、线束和连接器引脚定义的工具。它接受纯文本、YAML 格式的文件作为输入,并借助 GraphViz 生成美观的图形输出(SVG、PNG 等)。该工具具备自动生成物料清单(BOM)的功能以及众多其他特性。

主要功能:

  • 文本化输入:输入文件完全基于文本(YAML格式),便于阅读、版本控制,无需特殊编辑器,支持UTF-8编码以处理特殊字符。
  • 颜色代码识别:理解并支持多种标准颜色缩写方案,包括:
    • IEC 60757 (如:BK, RD, ...)
    • DIN 47100 (如:WT, BN, GN, ...)
    • 25对颜色代码
    • TIA/EIA 568 A/B 子集(用于CAT-5/6等线缆)
  • 线规支持:支持使用 mm² 或 AWG 作为线规单位,并可自动进行两种单位间的等效换算。
  • 适用性广:既适用于非常简单的线缆,也适用于更复杂的线束。支持简单的一对一接线的自动路由。
  • 自动生成BOM:可自动生成物料清单。

重要说明: WireViz 的设计目的并非表示整个系统的完整布线,其主要目标是记录单根电线和线束的构造。

示例: 文章提供了一个输入示例(定义连接器X1、X2和电缆W1及其连接关系)以及对应的图形输出示例和自动生成的物料清单。

使用方式:

  • 安装要求:需要 Python 3.7 或更高版本,以及 GraphViz。可以通过 pip install wireviz 安装最新发布版,或通过克隆仓库并手动安装来获取开发版。
  • 运行命令:执行命令 wireviz ~/path/to/file/mywire.yml。根据选项,可生成 .gv(GraphViz输出)、.svg.png(接线图)、.bom.tsv(制表符分隔的BOM文件)和 .html(嵌入图和BOM的HTML页面)等文件。支持通配符处理多个文件。

项目状态: 该项目仍在积极开发中,源代码、API、语法和功能可能会发生较大变动。项目采用 GPL-3.0 许可证。

12. Discovering my roommate's death on Facebook (medium.com)

文章摘要

作者在午餐时通过Facebook浏览动态,意外看到室友Paul的照片被标记为已故,附有“Taken far too soon. RIP Paul.”的消息。起初,作者感到震惊和困惑,试图否认这一消息,用理性解释,例如假设Paul可能只是与朋友在一起。作者注意到厨房中Paul留下的墨西哥食材,并以此说服自己Facebook信息是虚假的。随后,作者跑到Paul的卧室门口敲门呼喊,但没有回应;打开门后,发现房间安静且地毯有吸尘痕迹,表明几天前曾打扫过,最终确认了死亡的事实。文章描述了通过社交媒体突获噩耗的冲击性体验,以及作者从否认到面对现实的情感过程。

13. Sleep apnea: Mouthguards less invasive, just as effective as CPAP (newatlas.com)

阻塞性睡眠呼吸暂停症(OSA)是导致高血压的一个重要且可调整的风险因素。常用治疗方法包括持续气道正压通气(CPAP)和下颌前移装置(MAD)。传统上CPAP效果较佳,但使用不舒适,患者依从性低;MAD较为舒适且侵入性低,但此前研究显示在降低呼吸暂停低通气指数(AHI)上效果逊于CPAP。

新加坡国立大学和悉尼大学研究团队开展了一项随机对照非劣效性试验,比较两种治疗对伴中度至重度OSA患者高血压的改善效果。研究共纳入220名受试者,随机分为CPAP和MAD治疗组。受试者中44.5%为超重,49.5%为肥胖,冠状动脉疾病和糖尿病分别占60.9%和59.1%。44.1%的参与者高血压病程超过10年。

在基线和六个月随访时,所有受试者接受24小时动态血压监测、睡眠嗜睡评估问卷和心血管生物标志物血检。主要评价指标为治疗前后24小时平均血压的变化。结果显示,MAD组24小时平均血压从基线到随访有显著下降,且降幅(平均1.64 mmHg)大于CPAP组。MAD组在所有动态血压指标(尤其是夜间血压)上的降幅均优于CPAP组,更多成员达到了收缩压低于120 mmHg。两组均未出现症状性低血压。研究结果证实MAD在降压方面与CPAP非劣效。

使用依从性方面,MAD组有56.5%受试者平均每晚使用≥6小时,CPAP组仅23.2%。在满足美国睡眠医学学会建议的“每周至少70%夜晚使用≥4小时”标准上,两组依从性无显著差异。两组均改善了白天嗜睡,心血管生物标志物无组间差异。

研究强调OSA在全球范围内普遍存在且常被漏诊,是高血压难控制的重要原因。对难治性高血压或日间过度嗜睡者,建议筛查并治疗OSA。受试者主要为东亚男性,结果能否推广至更广泛族群需进一步研究。由于COVID-19期间旅行限制,可能提高了治疗依从性。下一步研究将关注设备对认知功能的影响。

该研究由新加坡卫生部资助,发表于《美国心脏病学会杂志》。

14. My cat alerted me to a DDoS attack (www.dannyguo.com)

几年前,我在一家初创公司工作,经历了一次最难忘的半夜软件工程事故。当时团队尚未建立正式的值班轮换制度,而是依靠集体留意紧急警报。凌晨3点左右,我的猫在为我梳理头发时惊醒了我——这是她九年来唯一一次在我睡觉时这么做。

查看手机时,我发现AWS CloudWatch警报在几分钟前已触发,提示负载均衡器的健康目标异常。访问网站失败后,我打开监控仪表盘,发现大量来自不同国家的IP地址发起了异常请求——而我们的产品仅面向美国用户,国际流量极不寻常。这明显是一次分布式拒绝服务(DDoS)攻击

我的第一反应是尝试在服务器层面屏蔽IP,但意识到这种方法既繁琐又可能无效。随后想起我们已配置了AWS Web Application Firewall(WAF)。为快速缓解故障,我设置规则屏蔽其他国家的请求。该规则生效后,在接下来约一小时内拦截了数十万次攻击请求,网站恢复正常,攻击流量也随之停止。

当天早晨,我们发现攻击开始时收到了一封语法混乱的勒索邮件。发件人声称发现了导致网站崩溃的漏洞(实际上我们甚至不使用Apache),并威胁可让网站瘫痪数月,要求支付5000比特币换取“解决方案”。我们未予回应。

回顾这次经历,最令人惊讶的是猫唤醒我的时机。手机夜间处于免打扰模式,警报未触发声响或振动。因此我认为猫可能以某种方式感知到了异常情况。相较于刺耳的警报声,被猫梳理头发叫醒确实是一种更温和的响应方式。

15. Spectral Ray Tracing (larswander.com)

光谱光线追踪是一种考虑光波动特性的渲染技术。与传统光线追踪使用RGB颜色模型不同,它为每个像素生成光谱功率分布(SPD),利用光线的波长和相位信息,在色散、薄膜干涉等依赖光波特性的场景中更精确地模拟色彩。

核心概念

  • 传统光线追踪的简化:通常将光线视为携带RGB值的粒子,忽略其波动性。此方法基于人眼有三种色敏细胞(对应红、绿、蓝),能将连续光谱转化为颜色感知的原理,在多数场景下能生成逼真图像。
  • 光谱光线追踪的差异:不局限于RGB模型,而是模拟光线的完整光谱信息。这使其能够准确模拟色彩如何随光的波长和相位变化而产生,例如处理非光谱色(如品红色)或特定物理现象。

物理与视觉原理

  • 同色异谱:多种不同的光谱功率分布可能对应人眼感知到的同一种颜色。
  • 人眼感知:眼睛将接收到的连续光谱转换为三色视觉信号,此转换可通过数学方式(如CIE 1931色彩空间)实现,连接了物理、生理和主观体验。

波长效应的关键作用 当光的路径受其波长影响时,光谱光线追踪尤为重要:

  1. 色散:光通过棱镜等介质时,不同波长的光路径弯曲程度不同,从而被分离。
  2. 薄膜干涉:如肥皂泡的彩虹色,由薄膜上下表面反射光的相长或相消干涉产生,能产生非光谱色。

艺术应用与实践 作者通过自编写的JavaScript和GLSL光谱光线追踪器进行艺术创作,探索打破常规光传输规则、构建代码化视觉系统的方式。作品展示了调整反射角度为波长函数等创造性手法,利用完整光谱信息生成独特的视觉效果。

该技术使艺术家能基于物理原理深入探索光、色彩和感知,超越传统RGB限制,创造出丰富而非常规的视觉艺术作品。

16. Weird monitor bugs people sent me in the last 5 years (2022) (notes.alinpanaitiu.com)
  • Lunar 是一款 macOS 应用,可通过 DDC 等协议智能调节外接显示器亮度及多项参数。自 2021 年作者全职运营后,收到许多用户反馈,其中深层原因常为显示器自身固件或协议实现的 Bug,非 Lunar 本身造成。

  • 典型显示器 Bug 总结如下:

双显示器位置互换问题

  • 问题现象:两台同型号显示器并排接入,休眠或重启后,系统可能将显示器位置“互换”,导致鼠标切换方向、分辨率、色彩配置也错位。
  • 根本原因:同批次显示器固件编程时,可能 EDID 数据完全一致(如序列号未递增)。系统从 EDID 生成 UUID,无法区分两台显示器,导致设置恢复时随机分配,出现位置交换。
  • 解决方案:Lunar 提供便捷的快捷指令 Swap Monitors 与 Fix Monitor Arrangement,一键纠正显示器排列。未用 Lunar 用户可借助作者提供的命令行工具 SwapMonitors.swift 实现,支持自动化、热键、菜单栏触发,并可按显示器 ID 指定目标。

显示器开启 XDR 后变黑白

  • 某些外接显示器(如 Lenovo Creator Extreme)启用 XDR(高动态范围)亮度后,画面会变成灰度。
  • 可能原因包括 macOS ICC 配置异常、显示器内部色彩预设失效、DDC 指令处理异常等,作者最终只能将 XDR 外接显示器支持改为默认关闭、需用户主动开启。

收到 DDC 指令后黑屏

  • 有用户反馈,某些显示器收到指定 DDC 控制指令(如调节亮度、对比度)后,直接黑屏,断开视频线无效、按电源键无效,需拔掉电源线重插恢复。
  • 原因推测为显示器固件 DDC Handler 崩溃,或指令序列触发死循环。此类“变砖”问题部分可由电缆太长(如无放大/光纤芯片的 6 米 Thunderbolt 线)导致数据衰减。
  • 针对定制色彩曲线用户,macOS 调整 Gamma 有时导致颜色全为黑色,Lunar 如检测到 RGB 全零,自动恢复默认并禁用色彩调整功能。

输入源切换无效

  • DDC 协议(MCCS 规范)中 Input Select 指令理论允许软件切换显示器输入源,用于多信号源环境但实际部分显示器谎报支持,接受指令时屏幕只是闪黑一秒,然后恢复原来状态,无实际切换。该类问题无软件修复手段。

静音命令无效

  • Mute(VCP 0x8D) DDC 指令,部分显示器不支持,OSD 有静音但接口无法控制。有些可用特殊音量值间接实现,大部分无效。Lunar 设计了相应的设置/说明以应对此常见问题。

  • 作者通过丰富经验,总结了 macOS 外接显示器在 DDC 控制协议下各种常见且难以规避的固件级 Bug,尽可能为用户提供工具与说明绕过或缓解这些问题,但部分如硬件 EDID/固件失误造成的故障无法通过应用层彻底根治。
17. A proof-of-concept Python executable built on Cosmopolitan Libc (2021) (ahgamut.github.io)

使用Cosmopolitan Libc构建Python可执行文件的概念验证(2021)

项目概述

作者使用Cosmopolitan Libc构建了Python的可移植可执行文件(python.com),使其能在多个操作系统上运行,包括Linux、Mac、Windows、NetBSD、FreeBSD和OpenBSD。这是一个概念验证项目,基于Python 2.7.18和3.6.14版本,展示了Cosmopolitan Libc在跨平台编译中的潜力。

更新信息

  • 2024年更新:构建过程已大幅简化,现在可以从GitHub仓库(superconfigure)下载预构建的Python 3.11.4可移植可执行文件,其中集成了Datasette等工具。
  • 2022年更新:Python 3.6及其测试套件已整合到Cosmopolitan Libc仓库中,python.com进行了多项改进,如自定义sys.meta_path、大小优化、添加cosmo模块、构建系统重构等。相关讨论可在redbean Discord服务器进行。

编译过程

初始编译尝试

作者从Python 2.7.18的tarball开始,使用configure脚本进行编译,指定Cosmopolitan编译标志(CFLAGS、LDFLAGS)和静态链接。编译过程中遇到函数重新声明问题,例如configure脚本错误地判断函数可用性(如sinh),导致宏定义冲突。

解决方案

  • 修改configure脚本的AC_CHECK_FUNC部分,使其兼容Cosmopolitan编译环境。
  • 通过添加或删除宏定义(如#define HAVE_SINH)、修复Makefile链接问题、处理名称冲突等,逐步解决编译错误。
  • 最终成功构建python.com APE文件,但仅通过约三分之一的回归测试,表明还有改进空间。

运行解释器

  • 基本运行:在构建目录中直接运行成功,但移动后遇到无法导入site.py的问题,通过添加相对路径到sys.path解决。
  • 输入缓冲问题:在Linux上,REPL需要按两次回车才能输入空行,通过设置无缓冲输入(-u标志)修复。
  • Windows行结束问题:REPL中每行输入导致语法错误,因为Windows发送CRLF而Python期望LF,通过修改解析逻辑解决。

添加标准库模块

  • 静态编译扩展:避免使用setup.py(尝试构建共享对象),转而通过修改Modules/Setup文件静态编译C扩展。该文件指定扩展名、源文件和依赖项,使Makefile能正确构建。
  • 成功模块:包括基本模块(如cPickle、zlib)、外部库模块(如_sqlite、_bz2、readline、_ctypes)和外部包(如greenlet)。
  • 集成标准库:将Lib/目录压缩到APE文件中,利用Cosmopolitan的ZIP支持和Python的zipimport模块,实现模块随身携带。

使用pip和外部包

  • ensurepip问题:由于线程模块缺失,使用_dummy_thread模拟_thread模块,使ensurepip能安装pip和setuptools到Lib/site-packages。
  • SSL限制:缺乏SSL支持,无法在线安装包。作者通过手动下载包(使用其他Python环境),将wheel文件解压到Lib/site-packages,然后重新压缩到APE中实现离线安装。
  • 示例命令:包括使用pip下载、安装到指定目录、压缩到APE的步骤。

结束笔记和未来方向

可移植性权衡

  • 优势:单一可执行文件跨平台运行,无需依赖系统环境,便于分发和测试。
  • 挑战:静态编译、基于C代码库、初始无多线程支持(后逐步改进),以及性能和应用大小的权衡。

未来方向

  1. 性能优化:提升python.com APE的运行速度,尽管可能不及redbean,但Python Web框架的易用性值得优化。
  2. 构建系统改进:开发自定义构建系统,生成大小优化的单一文件Web应用,自动处理依赖解析和编译。
  3. C扩展集成:简化向APE添加Python C扩展的过程,考虑自动化补丁或共享库编译。
  4. 其他语言移植:探索将PHP、Ruby或Go等语言移植到Cosmopolitan Libc的可能性,以扩展可移植应用的范围。

此项目证明了Cosmopolitan Libc在创建跨平台可移植应用中的实用性,并为未来开发提供了基础。

20. WizardLM 2 (wizardlm.github.io)

WizardLM 2 概述

WizardLM-2 是一个开源的新一代大语言模型系列,旨在提升复杂对话、多语言、推理和智能体方面的性能。该系列包含三个模型:WizardLM-2 8x22BWizardLM-2 70BWizardLM-2 7B,分别在复杂任务、推理能力和效率上具有优势。

核心方法

模型训练基于 AI驱动的合成数据逐步AI监督 的理念,主要技术包括:

  1. 数据预处理:分析数据属性分布,并通过加权采样调整训练数据。
  2. 渐进学习:分阶段训练,使用不同数据分区,并在每个阶段通过“Evol Lab”和“AI Align AI”框架生成更复杂多样的数据。
  3. Evol Lab:改进的 Evol-Instruct 方法自动生成高质量指令;Evol-Answer 引导模型多次生成和优化回答以提升逻辑和正确性。
  4. AI Align AI (AAA):多个顶尖模型通过协同教学(如模拟对话、质量评估)互相提升;模型也能通过自主教学生成新的训练数据。
  5. 学习阶段:结合监督学习分阶段离线强化学习(Stage-DPO)指令与过程强化学习(RLEIF),利用奖励模型优化模型准确性。

模型性能与评估

  • 人类偏好评估:在复杂现实指令集上的盲评中,WizardLM-2 8x22B 接近 GPT-4-1106-preview,优于其他开源模型;70B 和 7B 版本在同规模模型中表现领先。
  • MT-Bench自动评估:WizardLM-2 8x22B 与 GPT-4-Turbo、Claude-3 等顶级模型性能相当;7B 和 70B 版本在相应参数规模中表现最佳。

使用与许可

  • 提示格式:采用 Vicuna 格式,支持多轮对话,需使用指定系统提示以保证质量。
  • 许可证:8x22B 和 7B 版本为 Apache 2.0 许可;70B 版本为 Llama-2-Community 许可。
22. An open-source implementation of Apple code signing and notarization (2022) (gregoryszorc.com)

开源实现苹果代码签名与公证 (2022)

该项目是一个使用 Rust 语言实现的开源苹果代码签名与公证工具。它主要包含 apple-codesign 库和 rcodesign 命令行工具。截至 2022 年 4 月,该实现已能对多种苹果软件产物(如 Mach-O 二进制文件、应用束、XAR 归档、PKG 安装包和 DMG 磁盘映像)进行签名、公证和装订,功能与苹果官方的 codesignnotarytool 工具基本一致。其核心价值在于允许用户从 Linux、Windows 等非苹果操作系统上对苹果软件进行签名和公证,打破了平台限制。

此前的一个主要限制是公证流程依赖于苹果公司提供的第三方 Java 应用 Transporter。2022 年 WWDC 苹果发布了新的 Notary API(作为 App Store Connect API 的一部分),明确支持从 Linux 等环境调用。

该项目的重要更新是:在 0.17 版本中,实现了对苹果 Notary API 的纯 Rust 客户端。这意味着公证功能不再需要依赖 Transporter 这个第三方专有软件。现在,整个签名和公证流程(包括与苹果服务器的通信)均由开源 Rust 代码完成。用户只需一个自包含的 rcodesign 可执行文件,即可在 Linux、Windows、macOS 等多种平台上完成全部操作。

此重要功能的实现主要归功于社区贡献者 Robin Lambertz,他在 WWDC 2022 期间提交了功能请求,并很快提供了初始代码实现。

该里程碑消除了长期以来在非 macOS 环境下发布苹果软件的一个关键障碍,为大量开发者和公司提供了便利。相关的发布说明、文档以及预编译的可执行文件已可在 GitHub 项目的 0.17 版本页面获取。

24. The purge of German science in 1933 (www.privatdozent.co)

1933年对德国科学的清洗事件标志着德国科学领导地位的急剧衰落。在1930年代之前,德国在自然科学领域已主导世界超过150年,其在化学、物理学、生物学、医学和数学方面的卓越声誉,当时仅有英国可勉强与之相比。

数据显示,1901年至1932年(希特勒上台前一年)颁发的100项诺贝尔奖中,有33项授予了德国人和/或在德国工作的科学家。相比之下,英国及英国大学的科学家获得了18项,而美国仅获得6项。

转折始于1933年纳粹党夺取德国政权后,颁布了《职业公务员法》。该法律允许解雇“非雅利安”血统的公务员,这直接导致了众多科学家和学者被驱逐出大学和研究机构。此外,同年还发生了学生焚烧被视为“犹太”、“左倾”或“自由主义”书籍的事件。

这些措施对德国科学界造成了毁灭性打击,众多顶尖科学家流亡海外,德国长期建立的科学优势和研究体系因此瓦解。

25. The Airship to Orbit Project (www.jpaerospace.com)

飞艇入轨项目

项目概述

该项目提出了一种替代传统火箭发射的全新入轨方式。传统方法如同“乘坐并点燃一个巨型燃料箱”,而新方案旨在利用飞艇作为主要运载工具,以更平稳、渐进的方式进入轨道。

技术原理

核心设想是使用一艘巨大的飞艇,首先漂浮在大气层顶端。随后,该飞行器利用电动/化学混合火箭发动机持续缓慢加速,经过数天时间,最终将速度提升至轨道速度。

主要挑战与三阶段方案

实现这一概念面临显著的技术复杂性:

  1. 尺寸与结构要求:为在大气层边缘飞行,飞艇必须极其庞大(长度超过一英里/1.6公里),同时重量需极轻,成为一种“薄纱高超音速飞艇”。
  2. 环境适应性:如此轻薄的高超音速飞艇设计,并不适合在稠密的低层大气中飞行。
  3. 系统性解决方案:上述挑战及其他因素,共同导致了必须采用一个三阶段方案来完成整个任务。