2024-11-15

26 篇热帖

1. Daisy, an AI granny wasting scammers' time (news.virginmediao2.co.uk)

英国电信运营商O2推出名为“Daisy”的AI“老奶奶”反诈骗工具,旨在通过模拟真人对话消耗诈骗者时间,保护真实用户。该AI利用前沿技术及反诈骗专家内容训练,能实时自主应答电话,声音逼真,难以区分真人。测试中,Daisy成功让诈骗者持续通话长达40分钟,通过讲述家庭琐事、编织爱好等闲聊,诱使骗子暴露常见诈骗手法,并提供虚假银行信息等无效数据。

研究显示,71%的英国人希望反击诈骗者,但53%的人因不愿浪费自身时间而放弃。同时,67%的人担忧成为诈骗目标,每周有22%的人遭遇诈骗尝试。O2因此推出Daisy,作为其“避开诈骗”活动的一部分,鼓励公众保持警惕,并免费将可疑电话或短信转发至7726进行举报,以便运营商调查和拦截诈骗号码。

真人案例方面,曾受骗的电视明星Amy Hart与Daisy合作,制作视频揭露诈骗手段。O2诈骗防治总监强调,Daisy不仅消耗诈骗者时间,也提醒人们电话另一端可能并非所想之人。公司建议用户接到可疑电话时立即挂断,并通过可信号码回拨确认。

此外,O2利用AI工具每月拦截数百万欺诈电话和短信,并呼吁政府任命专职反诈骗部长并建立统一执法机构。公司还提供防诈骗三步建议:停止并核实、发送至7726举报、告知亲友。

3. Seer: A GUI front end to GDB for Linux (github.com)

Seer:Linux下GDB的图形化前端

项目概述 Seer是一个为Linux设计的GDB图形用户界面前端(GUI),由Ernie Pasveer开发维护,旨在提供一个简单、美观的调试界面。用户可通过邮件或GitHub报告问题和功能请求。

安装要求与方法

  • 系统要求:Linux操作系统,支持C++17的编译器,带有"mi"解释器的GDB,CMake 3.5.0+,以及Qt6开发包。
  • 安装方式
    1. 包管理器:可通过Pamac(Manjaro)、zypper(openSUSE Tumbleweed)安装。
    2. Flatpak:可通过Flathub或下载提供的.flatpak文件安装。
    3. 源码编译:推荐使用Qt6编译,官方提供了详细的构建指南。Qt5的最后一个版本为v1.17,后续版本转向Qt6但暂保留Qt5编译能力。

启动与主要功能 Seer旨在简化从命令行启动GDB调试程序的过程,支持GDB的多种调试方式。详细的启动方法请参见其GitHub Wiki。

GUI核心视图与功能

  1. 主视图

    • 源文件/函数/变量/库列表:显示源文件、可搜索的函数/类型/静态变量以及程序引用的共享库。双击文件可在代码管理器中打开。
    • 变量/寄存器信息:包含“日志记录器”(手动记录变量值)、“跟踪器”(在断点处自动显示变量值列表)和“寄存器”查看功能。
    • 代码管理器:核心区域,以标签页形式打开源代码。支持文本搜索、通过右键菜单设置断点/打印点、执行到特定行、以及将变量添加到跟踪器或内存可视化器。
    • 底部面板:包含手动GDB命令输入、以及断点、监视点、捕获点、打印点的管理器,还有GDB和Seer自身的输出日志。
    • 栈帧与线程信息:显示调用栈帧、函数参数、局部变量、线程列表及其栈帧。
    • 反向调试:支持GDB的指令录制和反向播放功能。
  2. 对话框与控制台

    • 打开对话框:用于选择待调试的可执行文件。
    • Seer控制台:显示被调试程序的所有文本输出,并可接收输入。

可视化工具

  • 汇编视图:以标签页形式显示当前执行的汇编指令,支持在汇编代码中设置断点、指令搜索及单步执行(Nexti/Stepi)。
  • 内存可视化器:以十六进制和反汇编格式查看原始内存内容。
  • 数组可视化器:可视化数组数据,支持常规、样条、散点图,并可使用两个数组绘制X-Y图。
  • 结构可视化器:查看C/C++结构体或类的内容,支持直接编辑基本类型的成员。另有一个轻量级的“基本结构可视化器”。
  • 图像可视化器:将原始内存数据渲染为图像进行查看。

支持与反馈 可通过电子邮件(epasveer@att.net)或GitHub项目页面提交错误报告和功能建议。

4. New Apple security feature reboots iPhones after 3 days, researchers confirm (techcrunch.com)

新安全特性:iPhone未解锁72小时后自动重启

苹果iOS 18系统引入一项名为“不活动重启”(inactivity reboot)的新安全功能。该功能会在iPhone未解锁长达72小时后,自动强制设备重启,以增强设备安全性。安全研究人员Jiska Classen通过视频演示确认了这一特性,展示了iPhone在闲置状态下达到72小时后自动重启的过程。

该功能通过将用户加密密钥锁定在iPhone的安全芯片中,使设备进入更安全的“首次解锁前”(BFU)状态。在此状态下,数据完全加密,难以通过暴力破解或旧式取证工具访问。这有效防止了小偷或未授权者利用设备漏洞提取数据,但同时也给执法部门和取证专家带来了挑战,因为他们需要在72小时内协调行动以访问设备数据。

Magnet Forensics等数字取证公司也确认了72小时的定时器。研究人员指出,许多取证工具针对“首次解锁后”(AFU)状态的设备,因为这些设备在用户输入密码后内存中可能保留加密密钥,而重启后的BFU状态则大大增加了数据提取难度。

历史上,苹果曾多次因强化安全特性而与执法部门产生冲突,例如2016年FBI试图迫使苹果创建后门解锁犯罪调查中的iPhone。尽管“不活动重启”功能旨在提升用户隐私保护,但执法部门认为这阻碍了犯罪调查工作。目前,苹果未对此功能发表评论。

6. Red Hat to contribute container tech (Podman, bootc, ComposeFS...) to CNCF (www.redhat.com)

Red Hat 已宣布计划向云原生计算基金会(CNCF)贡献一整套容器工具,包括 bootcBuildahComposeFSPodmanPodman DesktopSkopeo。此举旨在推动云原生技术发展,为AI和混合云时代构建一个更开放、可访问的开发工具生态系统。

这些工具在被CNCF接受后,将作为托管项目(与Kubernetes、Prometheus等并列),并首先以Sandbox项目的身份运作。这允许最终用户参与贡献、协作,从而有机地发展项目社区并使技术趋于成熟。

尽管这些工具已拥有强大用户基础(例如Podman Desktop下载量超150万次,Podman在GitHub上获得2.36万颗星),但成为CNCF托管项目将有助于它们更好地满足当前开发者的需求,并为未来容器技术的演进铺平道路。

Red Hat强调,这些工具提供了从Linux到Kubernetes的端到端云原生技术栈,以Linux为基础,使用户能够在混合云环境中大规模地构建、部署和管理容器。对于使用Red Hat Enterprise Linux的客户,这些工具针对RHEL进行了优化并获得生产支持。Red Hat承诺将继续作为开源技术推动这些项目的未来,增强容器开发的灵活性、可访问性和安全性。

开源协作是Red Hat的核心理念,Red Hat认为CNCF是推动此类开放创新的理想平台。例如,将已流行的Podman作为Sandbox项目贡献,旨在有机地扩展社区,促进多样化的贡献者和维护者参与,最终使技术更加强大。

各项目的相关源代码及社区链接已在文中列出,供感兴趣者参与。

7. Please stop the coding challenges (blackentropy.bearblog.dev)

停止不合理的编程挑战

文章指出,技术面试中一种日益普遍的趋势——要求开发者在极短时间内完成不切实际的编码任务(如调试遗留PHP代码或从头构建小型应用)——正在产生负面影响。作者认为,这类高压力的独立编码测试无法真实反映工作能力,反而背离了实际工作场景。

主要论点

1. 测试脱离实际,无法衡量真实技能

  • 不切实际: 在真实工作环境中,开发者通常拥有团队协作、文档支持和充足时间。要求独自在高压下处理晦涩或遗留代码的测试,并不能有效评估解决问题的能力。
  • 隐藏的时间成本: 公司给出的“建议时间”往往不切实际。候选人为了提交高质量作品,实际投入的时间可能是建议时间的数倍(例如,4小时的任务花费10小时以上)。这相当于为尚未获得的工作无偿加班。

2. “灵活性”测试的误导性

  • 许多公司以测试“适应性”为由,要求候选人使用与岗位无关的技术栈完成任务(例如,让Ruby开发者去调试PHP代码)。作者认为,这歪曲了“适应性”的含义。岗位适应性应体现在长期的学习和应用相关技能的能力上,而非应对无关挑战的速度。

3. 公司的炫耀 vs. 真实的评估

  • 这类测试有时更像是公司展示其“高标准”和“精英”门槛的方式,形成了不合理的“前1%”心态。这会导致一些完全具备岗位所需技能但无法适应这种人为高压环境的优秀人才被拒之门外。

结论与建议

  • 作者呼吁公司承认这类面试方式的缺陷,并停止使用。
  • 建议招聘流程应专注于评估与工作直接相关的问题解决能力、协作精神以及在特定领域的成长潜力
  • 若需测试具体技术能力,应设计与岗位要求相符的、合理的测试。
  • 放弃不切实际的编码挑战,将重心放在真正重要的事情上,有助于建立一个更健康、更具包容性的技术行业文化。不切实际的期望无法吸引顶尖人才,只会消耗和劝退他们。
8. The letter ℘: name and origin? (2017) (mathoverflow.net)
该内容是一个HTML页面,属于Cloudflare的安全挑战机制,而非原始文章《The letter ℘: name and origin? (2017)》。页面主要功能是验证用户访问,通过要求启用JavaScript和cookies来继续浏览。页面结构包含标准的HTML头、样式定义和脚本,脚本用于加载Cloudflare挑战平台进行安全验证。整体上,这是一个技术性的保护页面,旨在防止自动化访问,不包含关于字母℘的名称或起源的实际信息。
9. Show HN: OnAir – create link, receive calls (onair.io)

OnAir 产品摘要

核心功能: OnAir 允许用户创建一个专属链接,客户可通过该链接直接发起音频或视频通话,无需安装任何应用程序。

工作流程:

  1. 创建链接:用户可以预留一个个性化链接(如 onair.io/yournameonair.io/yourcompany),并选择支持音频或视频通话。
  2. 分享链接:可将链接放置在网站、LinkedIn个人资料、短信或邮件签名中(支持显示实时在线状态的活动徽章)。
  3. 接收来电:客户在用户在线状态(绿色)下访问链接即可直接呼叫,用户在自己的设备上接听。

关键特性与优势:

  • 灵活的链接配置:支持创建个人或团队链接。呼叫可路由至本人、同事或配置的AI代理。
  • 可控的在线状态:用户可随时手动设置离线,或通过设定日程、同步日历来管理可用时间。
  • 免应用体验:客户端无需下载任何应用,通过网页链接即可呼叫,极大降低沟通门槛。
  • 通话录制:所有通话(无论人工或AI)均自动录制,便于事后回顾、审计或培训。
  • 潜在客户捕获:来电客户需提供电子邮箱或电话号码,方便后续联系跟进。
  • 隐私保护:用户无需公开个人电话或邮箱,通过OnAir链接即可实现匿名沟通。
  • 状态集成显示
    • 邮件徽章:嵌入邮件签名的徽章可实时显示用户在线状态(绿色在线,灰色离线)。
    • 网站嵌入:网站按钮可根据用户在线状态动态变化(在线时显示“直接交谈”,离线时跳转至其他页面)。
10. In Memoriam: Thomas E. Kurtz, 1928–2024 (computerhistory.org)

Thomas Kurtz (1928-2024) 纪念摘要

身份与成就
Thomas Eugene Kurtz 是美国数学家、计算机科学家,与 John Kemeny 共同发明了 BASIC 编程语言达特茅斯分时系统 (DTSS)

核心贡献

  • 背景:20世纪60年代,学术计算缺乏面向非专业本科生的简易语言。Kurtz 与 Kemeny 为此开发了 BASIC,旨在降低编程门槛。
  • 分时系统:为实现多人同时使用 BASIC,他们创建了 DTSS。该系统于1964年5月1日启用,允许学生通过电传打字终端访问计算机,成为早期成功的大型分时系统。通用电气后将 DTSS 扩展为在线服务核心。

职业历程

  • 1956年获普林斯顿数学博士学位后任职于达特茅斯学院,早期曾接触早期计算机 SWAC。
  • 1966-1978年先后担任达特茅斯计算中心主管及学术计算主任。
  • 1979年协助创立计算机与信息科学硕士项目。
  • 1983年共同创立 True BASIC 公司,致力于开发跨平台 BASIC 编译器及教育软件。
  • 1993年从达特茅斯退休。

行业影响与标准化

  • BASIC 语言从大型机到微型计算机(如 Altair 8800)乃至树莓派持续发展,影响深远。1978年比尔·盖茨和保罗·艾伦为其编写首个 BASIC 版本,推动个人电脑普及。
  • Kurtz 积极参与标准化工作:1974-1985年任美国国家标准委员会 X3J2 主席,推动 BASIC 语言标准化;1987-1993年担任国际标准委员会 SC22/WG8 召集人。

荣誉与活动

  • 曾任 EDUCOM 理事会主席、多项 NSF/ARPA 支持项目指导委员会成员。
  • 1994年成为 ACM 会士,2023年入选计算机历史博物馆 (CHM) Fellow。
11. Analysis of economic and productivity losses caused by cookie banners in Europe (legiscope.com)

欧洲 Cookie 横幅造成的经济损失与生产力损耗分析

法规背景与现状

  • 法律依据:网站普遍显示的 Cookie 同意横幅源于欧盟2002年的《电子隐私指令》(2002/58/EC),而非《通用数据保护条例》(GDPR)。该指令要求网站在向用户设备存储或访问信息前获得知情同意。
  • 实际用途:多数 Cookie 横幅用于网站分析、理解用户行为、提升用户体验及管理广告绩效。对网站所有者而言,深度追踪用户通常难以实现且需要法院命令。
  • 执行与合规:2024-2025年监管执法(如法国CNIL的罚款)加强。近期指南聚焦横幅设计的对称性、暗黑模式及“cookie墙”原则。研究显示,80-90%的 Cookie 横幅不符合GDPR要求,常见问题包括缺乏“全部拒绝”选项、设计使拒绝比接受更困难等。

经济与生产力损耗估算

  • 计算基准:基于2024年欧盟约4.492亿人口(互联网渗透率约90%,即4.0428亿用户)。
  • 用户交互频率:用户平均每月访问约100个网站(年1200个),其中85%显示横幅,故年均遇到约1020个横幅。
  • 时间损耗:每次交互平均耗时5秒,年均每人耗时约5100秒(约1.42小时)。
  • 总时间损耗:全欧盟互联网用户累计年耗时约 5.75亿小时
  • 经济成本:按欧洲平均时薪25欧元计算,年总成本约 143.75亿欧元,相当于欧盟GDP的约0.10%。
  • 等效劳动力:损耗工时相当于约 28.75万名全职员工 一年的全部工作时间(按2000小时/年计)。

主要国家数据分布

国家 互联网用户(百万) 年耗时(百万小时) 年成本(十亿欧元)
德国 75.6 107.35 2.68
法国 61.2 86.85 2.17
意大利 53.1 75.37 1.88
西班牙 42.3 60.04 1.50
其他欧盟国家 93.78 134.18 3.35
总计 404.28 575.0 14.35

用户体验与合规性问题

  • 同意疲劳:频繁的横幅交互导致用户挫败感增加、警惕性下降,甚至盲目接受条款,这与GDPR要求的有效同意(自由、知情、明确)原则相悖。
  • 隐私收益有限:对于绝大多数依赖分析或基础广告的中小企业,Cookie主要用于无精确用户识别的效率提升。大规模用户数据共享仅占极小比例网站,横幅对大部分用户的隐私保护实际意义有限。

监管演变与建议

  • 近期动态:欧盟委员会于2026年2月撤回了长期搁置的《电子隐私法规》提案,转而提议通过GDPR新条款(第88a条)整合Cookie同意规则。新方案将强制采用浏览器级同意信号并要求“一键拒绝”按钮,旨在解决“同意疲劳”和横幅泛滥问题。
  • 核心结论:当前的Cookie横幅体系造成了显著的经济和生产力损耗,但带来的隐私保护益处有限。
  • 改革建议
    1. 修订或替代《电子隐私指令》,加快通过具有直接效力的法规。
    2. 对中小企业在网站分析、基础广告管理等方面给予Cookie横幅豁免。
    3. 推广浏览器级同意信号(如全球隐私控制),以实现合规性并减少对用户浏览体验的干扰。
12. Visual Basic 6 IDE recreated in C# (github.com)

Visual Basic 6 IDE 用 C# 重现项目

这是一个使用 Avalonia 框架在 C# 中重现经典 Visual Basic 6 IDE 和语言的玩具项目,无任何商业意图。Visual Basic 的名称、图标及图形版权归 Microsoft Corporation 所有。

主要功能

  • 可视化设计器
  • 保存和加载 VB6 兼容格式的项目
  • 运行项目
  • 支持 VB6 语言(功能有限)

构建桌面版说明

  • 通常需要 .NET 9.0(浏览器版本必须使用 9.0),也可通过修改 Directory.Build.props 文件改用 .NET 8.0。
  • 构建命令:
    dotnet build AvaloniaVisualBasic.Desktop/AvaloniaVisualBasic.Desktop.csproj
    
  • 若遇到 Antlr4 错误,可能是由于 Antlr4BuildTasks 库无法自动下载 Java,需手动安装 Java 解决。

发布桌面版

  1. 发布 IDE 项目:
    dotnet publish AvaloniaVisualBasic.Desktop -f net9.0 -o bin/
    
  2. 发布运行时:
    dotnet publish AvaloniaVisualBasic.Standalone -f net9.0 -o bin/standalone/
    
  3. 发布后可运行 ./bin/AvaloniaVisualBasic.Desktop

致谢

  • Avalonia 框架
  • Dock by Wiesław Šoltés
  • Font by lou
13. Bottles of OOP now available in Python (sandimetz.com)

书籍概述

《Bottles of OOP》是一本专注于面向对象编程设计实践的实用指南,通过完整的代码重构案例,引导读者从初始代码逐步演进至设计优美、易于维护的解决方案。书籍强调将理论原则转化为具体的编码决策,提供分步指导,帮助程序员在开发过程中自然实现高质量设计。

核心特点

  • 注重实践:不局限于理论,而是通过一个贯穿全书的“99瓶啤酒”示例,展示重构的完整过程和每一步背后的设计逻辑。
  • 兼顾美观与效率:旨在帮助读者编写既清晰易读又便于修改的代码,提升代码质量与开发满足感。
  • 通用性设计:虽然使用特定语言示例,但其讲解的面向对象设计原则适用于多种编程环境。

目标读者

适用于从初学者到经验丰富的各类程序员。无论背景或偏好的编程语言如何,读者均可从中学习到提升代码可理解性、可维护性和可扩展性的技巧。

第二版更新

  • 内容扩展:新增3个章节,篇幅比第一版增加约50%,达到约105,000词(相当于一部较长的小说)。
  • 多语言版本:为体现设计原则的通用性,提供了使用不同编程语言的独立书籍版本,内容在技术上完全一致。当前支持的语言包括:JavaScript、PHP、Python、Ruby,并配有啤酒和牛奶主题的示例。
  • 下载选项:一次购买即可获取所有语言和主题组合的版本(共8本书籍,支持epub、kepub、mobi、pdf格式,总计32种可能的下载选项)。

版本与格式信息

  • 当前版本:第二版2.2.2版(截至2024年12月1日)。
  • 交付格式:仅提供数字版本,通过DPD交付,可选格式包括epub、kepub、mobi和pdf。
15. 1-Bit AI Infrastructure (arxiv.org)

该研究介绍了名为BitNet.cpp的专用软件栈,旨在充分释放1-bit大语言模型(LLM)的潜力。近年来,以BitNet和BitNet b1.58为代表的1-bit LLM在提升模型运行速度和降低能耗方面展现出前景,并有助于在多种设备上实现本地部署。

本文的核心贡献是开发了一套内核,以支持三元BitNet b1.58 LLM在CPU上进行快速且无损的推理。实验结果表明,该软件栈在多种模型规模下均实现了显著的加速:在x86 CPU上提速2.37倍至6.17倍,在ARM CPU上提速1.37倍至5.07倍。相关代码已公开。

18. Something weird is happening with LLMs and Chess (dynomight.net)

本文探讨了大型语言模型在国际象棋中的表现异常情况。一年前,LLMs被认为能够通过文本预测进行业余水平的对弈,但近期测试显示大多数模型表现极差,仅gpt-3.5-turbo-instruct例外。

实验方法

作者通过标准代数记谱法向模型提供棋盘状态,要求其预测下一步白棋走法,并与最低难度的Stockfish引擎对弈。测试评估了多个主流模型,使用“百分棋”分数量化每步棋的质量,并记录胜负。

主要发现

  • 大多数模型表现糟糕:包括Llama-3.1-70b、Qwen-2.5-72b、GPT-4o等在内的模型均无法稳定对弈,常在开局后迅速丢子。
  • 唯一例外:GPT-3.5-turbo-instruct(指令微调的基础模型)表现卓越,能稳定战胜Stockfish。
  • 指令微调的影响:对比发现,经过聊天优化的模型(如gpt-3.5-turbo)比同架构的基础模型表现更差,表明额外微调可能损害棋力。

可能的理论解释

  1. 基础模型 vs 指令微调:基础模型可能保留更强的棋类推理能力,而聊天优化干扰了这一能力。
  2. 训练数据差异:gpt-3.5-turbo-instruct可能包含更高比例的棋谱数据。
  3. 架构差异:不同Transformer架构对棋类任务的适应性不同。
  4. 数据竞争:LLMs内部可能形成针对特定任务的“子网络”,其大小取决于相关训练数据的比例。

技术细节

  • 分词影响:棋谱格式(如空格位置)会显著影响模型输出,因分词器将特定序列解析为单个标记。
  • 实验控制:开放模型使用语法约束确保合法走子;闭源模型则通过重试处理非法走子。

结论

LLMs的国际象棋能力并不普遍,且受模型类型、微调方式和数据分布的复杂影响。GPT-3.5-turbo-instruct的优异表现暗示了指令微调可能对模型的特定任务能力产生非预期损害。

19. The Battle Line at Louvain (www.privatdozent.co)

鲁汶的战线:从焚书到“德意志物理学”

1933年纳粹党夺权后,通过了《恢复职业公务员法》,解雇了德国大学中的公共部门雇员。紧随其后,纳粹策划了公开的“焚书”仪式。这些焚书活动是纳粹公开、积极地拒斥那些被认为同情社会民主、左翼、知识界及/或“犹太价值观”思想的象征。此外,这些运动也作为推行审查、压制言论自由和知识传播的机制。部分原因是为了推广一种民族主义的、取代理论物理的替代品,即后来的“德意志物理学”。

有趣的是,到20世纪30年代已变得公开反犹的“德意志物理学”,其起源并非…(文章在此截断)。

20. Norwegian fishermen hunting for halibut caught a US nuclear sub (www.vice.com)

摘要:挪威渔民捕获美国核潜艇事件

事件经过
挪威特罗姆瑟海域,渔船“Øygutt号”上的渔民在捕捞比目鱼时,意外将美国“弗吉尼亚号”核动力攻击潜艇(长115米,装备巡航导弹)拖入渔网。该潜艇螺旋桨在近水面航行时钩住了渔网,并拖行了两海里后才被美方船员发现并切断渔网。渔船船员(均为20多岁年轻人)最初毫不知情,直至接到美国海岸警卫队通知才意识到渔网被拖走。

官方回应与背景
美国驻奥斯陆大使馆证实该潜艇当时在该区域活动。挪威附近海域是北约监测俄罗斯海军活动时进行补给和船员轮换的重要枢纽。美国与北约关注俄罗斯从科拉半岛部署的现代化安静潜艇的动向。

历史类似事件
此次并非孤例。1984年6月,纽约时报曾报道苏联潜艇被挪威拖网渔船的渔网缠住长达3.5小时。事件表明,美俄对峙期间,挪威渔民常意外卷入地缘政治博弈。

影响与启示
事件凸显了军事活动与民用渔业的潜在冲突,以及挪威渔民在大国竞争中的被动处境。尽管美方潜艇迅速脱离,但渔网损失及对渔业活动的干扰已引起关注。

21. I tried every top email marketing tool (www.sitebuilderreport.com)

作者因对MailChimp的不满(包括价格飙升、向取消订阅者收费、超量费用、可疑奖项、欺骗性注册邮件营销手段及母公司Intuit的不道德商业行为)而决定寻找新的电子邮件营销工具。

作者对邮件营销的需求较为简单,主要包含两种邮件:

  1. 新闻通讯:仅发送给明确选择订阅的用户,用于通知新功能发布。
  2. 自动化邮件:针对用户特定行为(如注册免费试用)触发的一系列邮件。

在对25款顶级工具进行调研后,作者根据以下问题逐步筛选淘汰:

  1. 将取消订阅者计为联系人收费:淘汰了Mailmodo、Drip、Aweber。
  2. 收取超量费用:淘汰了Constant Contact、GetResponse、MailJet、SendGrid、Benchmark。
  3. 支持自动升级,但不支持自动降级:淘汰了Active Campaign、Klaviyo、HubSpot、Campaigner、ConvertKit、Zoho Campaigns。作者认为这种做法不公平且增加管理负担。
  4. 价格过高(月费超过200美元):淘汰了Campaign Monitor、Moosend、Intercom、Omnisend。
  5. 功能或体验不匹配:在剩余的6款工具中实际测试后,淘汰了Loops(自动化编辑器过于基础)、FloDesk(不支持特定字体且自动化过于简单)、SendPulse(编辑器笨拙)、ClickFunnels(编辑器笨拙且推销风格令人生疑,类似传销模式)。

最终,MailerLite 因其清晰直观的界面、优秀的自动化功能(如可在自动化结束时自动取消订阅或删除联系人)、专注于邮件营销的核心定位以及合理的价格(每月143美元)而胜出。

Brevo 作为强有力的备选方案也获得了高度评价:界面整洁、自动化功能满足需求、定价模式基于发送的邮件数量而非联系人数量(月费95美元),并提供短信、即时通讯等额外功能。作者最终选择MailerLite的主要原因是其极佳的易用性和专注的核心功能。

23. Are We PEP740 Yet? (trailofbits.github.io)

PEP 740 证明采用状态概览

核心概念

PEP 740 是一项 Python 标准,旨在定义由 PyPI 等索引托管的、可加密验证的证明

证明是关于 Python 包的数字化签名、公开可验证的声明,包括其来源(例如,生成该包的确切源代码仓库)。该技术基于 Sigstore 构建,使用与受信任身份(如 Trusted Publishers)绑定的短期签名密钥,使其具有抗滥用性,并降低了密钥丢失和被盗的风险。

当前状态跟踪

本网站展示了 PyPI 上下载量前 360 个包的证明上传状态,通过颜色和符号标识:

  • 🔏 绿色:最新版本已提供证明。
  • 无色:最后一次上传时间早于证明功能可用之时。
  • 黄色:来自受支持的主机,但(暂时)未上传证明。
  • 品红色:来自暂时无法生成 PEP 740 证明的源主机。

已知已弃用的包未包含在内。若列表信息有误,可提交问题反馈。

用户与维护者行动指南

对于 Python 包用户:

  • 目前正在将证明验证集成到 pipuv 等安装程序中,集成完成后将自动生效。
  • 现阶段,可以通过 PyPI 的 Integrity API 手动获取并验证项目的证明。

对于包维护者(包状态为无色):

  • 最简单的方法是使用 Trusted Publisher,它内置了证明支持。
  • 已使用 官方 PyPA 发布动作的项目,可升级至 v1.11.0 或更高版本,以在下次发布时自动启用证明。建议升级到最新版本以获取错误修复。

其他说明

本网站是 Free-Threaded Wheels 的衍生作品,前 360 名列表来源于 Top PyPI Packages。网站需要启用 JavaScript 来显示包列表。任何关于打包工具行为变更的请求,应提交至 discuss.python.org 和 Python Packaging Authority (PyPA)。

24. Speeding up the Rust edit-build-run cycle (davidlattimore.github.io)

加速 Rust 编辑-构建-运行周期

核心主题

本文重点关注开发过程中的 热构建时间(即编辑代码后的重建时间),而非首次构建时间。通过基准测试,作者展示了如何通过配置将热构建时间从约20秒缩短至1.2秒(提升16倍)。

基准测试设置

  • 测试环境:System 76 笔记本(i7-10510U CPU,42GB RAM,Pop-OS Linux)
  • 测试方法:预热构建后,每次构建前进行微小编辑(模拟添加/移除println语句)
  • 初始基准:默认配置的调试构建(使用GNU ld链接器),耗时约20.2秒

关键优化技巧

1. 使用更快的链接器

  • 效果:耗时从20.2秒降至7.5秒
  • 配置方法
    [target.x86_64-unknown-linux-gnu]
    linker = "/usr/bin/clang-15"
    rustflags = ["-C", "link-arg=--ld-path=/usr/local/bin/mold"]
    
  • 替代方案lld链接器(耗时约1.6秒)

2. 避免链接调试信息

  • 效果:耗时从7.5秒降至约1.5秒
  • 两种方法
    • 设置debug = 0(不编译调试信息)
    • 设置strip = "debuginfo"(链接时移除调试信息)
  • 权衡:丢失行号信息(仅保留函数名),但panic发生点仍可显示行号
  • 平台建议
    • Linux:建议同时设置两项(还可减少冷构建时间)
    • macOS:建议仅设置debug = 0
    • Windows:建议测试不同组合效果

3. 构建不可重定位的可执行文件

  • 效果:耗时从1.6秒降至1.2秒
  • 原理:禁用地址空间布局随机化(ASLR),开发期间通常无需此安全特性
  • 配置方法(需先安装musl工具链):
    [build]
    target = "x86_64-unknown-linux-musl"
    
    [target.x86_64-unknown-linux-musl]
    linker = "/usr/bin/clang-15"
    rustflags = [ "-C", "relocation-model=static", "-C", "link-arg=--ld-path=mold" ]
    
  • 验证file命令应显示ELF 64-bit LSB executable(无"pie"标识)

性能提升总结

优化阶段 耗时 提升
默认配置 20.2秒 -
使用mold链接器 7.5秒 2.7倍
避免调试信息 1.5秒 13.5倍
不可重定位二进制 1.2秒 16.8倍

诊断与进一步分析

诊断意外依赖重建

  • 使用cargo build -v查看重建原因
  • 常见原因:rustflags变更、配置设置变更
  • 特性冲突问题:在cargo工作空间中,不同crate可能请求依赖的不同特性,导致重建
    • 解决方案:使用cargo-hakari等工具统一特性集合

剩余时间分析

通过strace-Ztime-passes标志分析,主要时间分布:

  • rustup包装器到实际cargo执行:37ms
  • cargo到rustc执行:230ms
  • rustc编译:1100ms(其中代码生成411ms,链接454ms)
  • rustc到可执行文件运行:19ms
  • 程序执行:3ms

未来改进方向

可能的默认设置变更

  • 推动将lld与rustc捆绑并设为默认链接器
  • 在Linux上将split-debuginfo="unpacked"设为默认(与macOS一致)

增量链接

  • 目标:仅更新修改的函数,而非整个二进制文件
  • 挑战:链接器实现复杂,但作者正在开发名为wild的增量链接器(目前可链接自身,尚未实现完整功能)
  • 愿景:进一步缩短开发周期,特别适合依赖多或需要调试信息的项目

建议实践

  1. 测量:使用hyperfine --warmup 2 --prepare 'touch src/main.rs' 'cargo build'评估配置效果
  2. 实验:根据项目和平台调整配置组合
  3. 其他选项:尝试panic="abort"等可能带来小幅度提升的设置
25. OpenMP 6.0 (www.openmp.org)

OpenMP 6.0 规范发布摘要

OpenMP 架构审查委员会 (ARB) 于 2024 年 11 月 14 日正式发布了 OpenMP API 规范 6.0 版本。 这是一次重大升级,旨在简化并行程序开发、扩展应用场景,并为开发者提供更精细的控制能力。OpenMP 被广泛应用于物理学、汽车与航空模拟、生物技术、自动化、机器人及金融分析等领域,其硬件支持范围涵盖从嵌入式/加速器设备到共享内存多核系统。

主要特性与改进

OpenMP 6.0 的更新聚焦于提升可用性和精细控制,并增强了对最新语言标准的支持:

  1. 简化并行编程

    • 任务编程简化:引入了“空闲代理线程”(可执行任务但不隶属于任何并行区域团队)、任务图记录用于高效回放,以及允许在更多任务间指定依赖关系的“透明任务”。
    • 循环转换更易用:简化了循环融合、反转和交换的编写。
    • 归纳支持:支持并行化遵循特定模式的基本算术运算和用户定义循环操作。
  2. 增强设备支持

    • 通过 workdistribute 指令更好地支持 Fortran 数组语法。
    • 增强了可分配变量的内存分配与可访问性控制。
    • 通过结构化异步数据映射区域简化了异步数据传输的编写。
    • 扩展了数据到设备的映射功能,提供更精细的内存控制。
    • 新增 groupprivate 指令,支持在设备上为团队分配私有内存。
  3. 支持最新编程语言标准

    • 完整支持 C23、C++23 和 Fortran 2023。
    • 引入了新的 C/C++ 属性语法。
  4. 增强存储与内存控制

    • 引入了新的内存特性,提供更精细的内存分配控制。
    • 提供了新的 API 例程,用于定义和查询内存空间。
  5. 清理旧版特性:移除了在 5.0、5.1 和 5.2 版本中已被弃用的功能。

开发、实现与教育资源

  • 标准化:6.0 规范由 OpenMP ARB(主要的硬件和软件厂商)及整个 OpenMP 社区共同开发。
  • 实现:主要厂商已开始集成新特性。例如,英特尔编译器 (2024.2) 已支持 groupprivate 及库互操作性;GNU 编译器集合 (GCC 14) 已全面支持 C23、C++23 和 Fortran 2023。相关的调试和性能工具也在扩展支持。
  • 教育:OpenMP 官方 YouTube 频道、国际 OpenMP 研讨会 (IWOMP)、英国 OpenMP 用户组以及多本专业书籍均提供了从入门到高级的学习资源,涵盖 6.0 的新特性。

关于 OpenMP

OpenMP ARB 的使命是标准化基于指令的、跨语言的高级并行性,使其兼具高性能、高生产力和可移植性。OpenMP API 是一个可移植、可扩展的并行编程模型,为开发者提供了简单灵活的接口。

26. Show HN: Zyme – An Evolvable Programming Language (zyme.dev)

Zyme是一种专为遗传编程设计的深奥编程语言,旨在通过自然选择来创造计算机程序。其核心设计目标是解决传统编程语言中随机代码修改难以产生有效表型变异的问题,通过最大化字节码突变产生新颖且非致命行为变化的可能性。

核心设计与虚拟机架构 Zyme摒弃了传统的寄存器或栈式架构,采用受生物学启发的独特虚拟机,模拟抽象的细胞代谢过程。这种设计使控制流具有“模糊性”,并从根本上防止无效的运行时状态,将程序崩溃转化为适应与调整的机会。

交互式演示流程

  1. 编译源代码:Zyme汇编器将人类可读的源代码编译为二进制字节码,供虚拟机执行。其汇编语言与生物启发架构的机器指令一一对应,并支持基本宏功能。
  2. 突变字节码:生成的字节码由称为“链”的基本数据结构组成。链是字节数组,且具有“同像性”——既可被解释为指令序列(代码),也可被解释为整数值序列(数据)。多个链以空字节(00)连接形成可突变的字节码。关键特性:任何二进制数据在Zyme虚拟机上都是有效字节码,这确保了程序不会崩溃(但可能无输出或无用)。
  3. 执行程序:虚拟机将输入字节码分割成链,独立且并行地评估。执行顺序进行,每个字节编码一个操作码,用于进行算术、逻辑和控制流操作。链之间通过“绑定”形成临时复合物进行交互(例如,WAIT指令打开结合位点,LOAD指令进行绑定)。绑定是否成功取决于指令后指定的“基序”序列是否匹配,且不要求精确匹配,从而实现模糊控制流。

进化适应性原理 文章末尾的注释通过一个示例说明了突变如何影响行为。将包含“Hello Creatures.”信息的链中对应WAIT指令的特定字节突变,可以阻止该链打开结合位点。这导致LOAD指令转而与一个通常匹配较弱、包含“Secret!”信息的链结合,从而输出隐藏消息。这展示了Zyme设计如何使单个突变能引导程序走向不同且有效的输出路径。